diff -Nuar groff-1.22.3.old/acinclude.m4 groff-1.22.3/acinclude.m4
--- groff-1.22.3.old/acinclude.m4	1970-01-01 02:00:00.000000000 +0200
+++ groff-1.22.3/acinclude.m4	2015-04-23 20:57:03.000000000 +0300
@@ -0,0 +1,25 @@
+# generated automatically by aclocal 1.14 -*- Autoconf -*-
+
+# Copyright (C) 1996-2013 Free Software Foundation, Inc.
+
+# This file is free software; the Free Software Foundation
+# gives unlimited permission to copy and/or distribute it,
+# with or without modifications, as long as this notice is preserved.
+
+# This program is distributed in the hope that it will be useful,
+# but WITHOUT ANY WARRANTY, to the extent permitted by law; without
+# even the implied warranty of MERCHANTABILITY or FITNESS FOR A
+# PARTICULAR PURPOSE.
+
+m4_ifndef([AC_CONFIG_MACRO_DIRS], [m4_defun([_AM_CONFIG_MACRO_DIRS], [])m4_defun([AC_CONFIG_MACRO_DIRS], [_AM_CONFIG_MACRO_DIRS($@)])])
+m4_include([m4/ax_compare_version.m4])
+m4_include([m4/ax_prog_perl_version.m4])
+m4_include([m4/codeset.m4])
+m4_include([m4/fcntl-o.m4])
+m4_include([m4/glibc21.m4])
+m4_include([m4/groff.m4])
+m4_include([m4/iconv.m4])
+m4_include([m4/lib-ld.m4])
+m4_include([m4/lib-link.m4])
+m4_include([m4/lib-prefix.m4])
+m4_include([m4/localcharset.m4])
diff -Nuar groff-1.22.3.old/aclocal.m4 groff-1.22.3/aclocal.m4
--- groff-1.22.3.old/aclocal.m4	2014-11-04 10:39:10.174087080 +0200
+++ groff-1.22.3/aclocal.m4	1970-01-01 02:00:00.000000000 +0200
@@ -1,25 +0,0 @@
-# generated automatically by aclocal 1.14 -*- Autoconf -*-
-
-# Copyright (C) 1996-2013 Free Software Foundation, Inc.
-
-# This file is free software; the Free Software Foundation
-# gives unlimited permission to copy and/or distribute it,
-# with or without modifications, as long as this notice is preserved.
-
-# This program is distributed in the hope that it will be useful,
-# but WITHOUT ANY WARRANTY, to the extent permitted by law; without
-# even the implied warranty of MERCHANTABILITY or FITNESS FOR A
-# PARTICULAR PURPOSE.
-
-m4_ifndef([AC_CONFIG_MACRO_DIRS], [m4_defun([_AM_CONFIG_MACRO_DIRS], [])m4_defun([AC_CONFIG_MACRO_DIRS], [_AM_CONFIG_MACRO_DIRS($@)])])
-m4_include([m4/ax_compare_version.m4])
-m4_include([m4/ax_prog_perl_version.m4])
-m4_include([m4/codeset.m4])
-m4_include([m4/fcntl-o.m4])
-m4_include([m4/glibc21.m4])
-m4_include([m4/groff.m4])
-m4_include([m4/iconv.m4])
-m4_include([m4/lib-ld.m4])
-m4_include([m4/lib-link.m4])
-m4_include([m4/lib-prefix.m4])
-m4_include([m4/localcharset.m4])
diff -Nuar groff-1.22.3.old/arch/mingw/Makefile.sub groff-1.22.3/arch/mingw/Makefile.sub
--- groff-1.22.3.old/arch/mingw/Makefile.sub	2014-11-04 10:38:35.432521409 +0200
+++ groff-1.22.3/arch/mingw/Makefile.sub	1970-01-01 02:00:00.000000000 +0200
@@ -1,66 +0,0 @@
-# Copyright (C) 2014
-#   Free Software Foundation, Inc.
-#
-# This file is part of groff.
-#
-# groff is free software; you can redistribute it and/or modify it under
-# the terms of the GNU General Public License as published by the Free
-# Software Foundation, either version 3 of the License, or
-# (at your option) any later version.
-#
-# groff is distributed in the hope that it will be useful, but WITHOUT ANY
-# WARRANTY; without even the implied warranty of MERCHANTABILITY or
-# FITNESS FOR A PARTICULAR PURPOSE.  See the GNU General Public License
-# for more details.
-#
-# You should have received a copy of the GNU General Public License
-# along with this program. If not, see <http://www.gnu.org/licenses/>.
-#
-# Makefile.sub
-#
-WINSCRIPTS=\
-  afmtodit.cmd \
-  chem.cmd \
-  gperl.cmd \
-  gpinyin.cmd \
-  grap2graph.cmd \
-  groffer.cmd \
-  grog.cmd \
-  gropdf.cmd \
-  mmroff.cmd \
-  neqn.cmd \
-  pdfmom.cmd \
-  roff2dvi.cmd \
-  roff2html.cmd \
-  roff2pdf.cmd \
-  roff2ps.cmd \
-  roff2text.cmd \
-  roff2x.cmd
-
-RM=rm -f
-
-all: $(make_winscripts)
-install_data: $(make_install_winscripts)
-uninstall_sub: $(make_uninstall_winscripts)
-
-winscripts: $(WINSCRIPTS)
-
-install_winscripts: $(WINSCRIPTS)
-	-test -d $(DESTDIR)$(bindir) || $(mkinstalldirs) $(DESTDIR)$(bindir)
-	for f in $(WINSCRIPTS); do \
-	  $(RM) $(DESTDIR)$(bindir)/$$f; \
-	  $(INSTALL_SCRIPT) $(srcdir)/$$f $(DESTDIR)$(bindir)/$$f; \
-	done
-
-uninstall_winscripts:
-	-for f in $(WINSCRIPTS); do \
-	  $(RM) $(DESTDIR)$(bindir)/$$f; \
-	done
-
-########################################################################
-# Emacs settings
-########################################################################
-#
-# Local Variables:
-# mode: makefile
-# End:
diff -Nuar groff-1.22.3.old/arch/mingw/mingw.am groff-1.22.3/arch/mingw/mingw.am
--- groff-1.22.3.old/arch/mingw/mingw.am	1970-01-01 02:00:00.000000000 +0200
+++ groff-1.22.3/arch/mingw/mingw.am	2015-04-23 20:57:03.000000000 +0300
@@ -0,0 +1,44 @@
+# Copyright (C) 2014
+#   Free Software Foundation, Inc.
+#
+# This file is part of groff.
+#
+# groff is free software; you can redistribute it and/or modify it under
+# the terms of the GNU General Public License as published by the Free
+# Software Foundation, either version 3 of the License, or
+# (at your option) any later version.
+#
+# groff is distributed in the hope that it will be useful, but WITHOUT ANY
+# WARRANTY; without even the implied warranty of MERCHANTABILITY or
+# FITNESS FOR A PARTICULAR PURPOSE.  See the GNU General Public License
+# for more details.
+#
+# You should have received a copy of the GNU General Public License
+# along with this program. If not, see <http://www.gnu.org/licenses/>.
+#
+# mingw.am
+#
+WINSCRIPTS=\
+  arch/mingw/afmtodit.cmd \
+  arch/mingw/chem.cmd \
+  arch/mingw/gperl.cmd \
+  arch/mingw/gpinyin.cmd \
+  arch/mingw/grap2graph.cmd \
+  arch/mingw/groffer.cmd \
+  arch/mingw/grog.cmd \
+  arch/mingw/gropdf.cmd \
+  arch/mingw/mmroff.cmd \
+  arch/mingw/neqn.cmd \
+  arch/mingw/pdfmom.cmd \
+  arch/mingw/roff2dvi.cmd \
+  arch/mingw/roff2html.cmd \
+  arch/mingw/roff2pdf.cmd \
+  arch/mingw/roff2ps.cmd \
+  arch/mingw/roff2text.cmd \
+  arch/mingw/roff2x.cmd
+
+if BUILD_WINSCRIPTS
+bin_SCRIPTS += $(WINSCRIPTS)
+else
+EXTRA_DIST += $(WINSCRIPTS)
+endif
diff -Nuar groff-1.22.3.old/arch/misc/.gitignore groff-1.22.3/arch/misc/.gitignore
--- groff-1.22.3.old/arch/misc/.gitignore	1970-01-01 02:00:00.000000000 +0200
+++ groff-1.22.3/arch/misc/.gitignore	2015-04-23 20:57:03.000000000 +0300
@@ -0,0 +1 @@
+shdeps.sed
diff -Nuar groff-1.22.3.old/arch/misc/Makefile.sub groff-1.22.3/arch/misc/Makefile.sub
--- groff-1.22.3.old/arch/misc/Makefile.sub	2014-11-04 10:38:35.191524422 +0200
+++ groff-1.22.3/arch/misc/Makefile.sub	1970-01-01 02:00:00.000000000 +0200
@@ -1,32 +0,0 @@
-# Copyright (C) 2004-2014 Free Software Foundation, Inc.
-#      Written by Keith Marshall (keith.d.marshall@ntlworld.com)
-#
-# This file is part of groff.
-#
-# groff is free software; you can redistribute it and/or modify it under
-# the terms of the GNU General Public License as published by the Free
-# Software Foundation, either version 3 of the License, or
-# (at your option) any later version.
-#
-# groff is distributed in the hope that it will be useful, but WITHOUT ANY
-# WARRANTY; without even the implied warranty of MERCHANTABILITY or
-# FITNESS FOR A PARTICULAR PURPOSE.  See the GNU General Public License
-# for more details.
-#
-# You should have received a copy of the GNU General Public License
-# along with this program. If not, see <http://www.gnu.org/licenses/>.
-
-MOSTLYCLEANADD=shdeps.sed
-
-all: shdeps.sed
-
-shdeps.sed: $(srcdir)/shdeps.sh
-	$(SHELL) $(srcdir)/shdeps.sh "$(RT_SEP)" "$(SH_SEP)" "$(bindir)" > $@
-
-########################################################################
-# Emacs settings
-########################################################################
-#
-# Local Variables:
-# mode: makefile
-# End:
diff -Nuar groff-1.22.3.old/arch/misc/misc.am groff-1.22.3/arch/misc/misc.am
--- groff-1.22.3.old/arch/misc/misc.am	1970-01-01 02:00:00.000000000 +0200
+++ groff-1.22.3/arch/misc/misc.am	2015-04-23 20:57:03.000000000 +0300
@@ -0,0 +1,25 @@
+# Copyright (C) 2004-2014 Free Software Foundation, Inc.
+#      Original Makefile.sub written by Keith Marshall
+#      (keith.d.marshall@ntlworld.com).
+#      Adapted to Automake by Bertrand Garrigues
+#      (bertrand.garrigues@laposte.net).
+#
+# This file is part of groff.
+#
+# groff is free software; you can redistribute it and/or modify it under
+# the terms of the GNU General Public License as published by the Free
+# Software Foundation, either version 3 of the License, or
+# (at your option) any later version.
+#
+# groff is distributed in the hope that it will be useful, but WITHOUT ANY
+# WARRANTY; without even the implied warranty of MERCHANTABILITY or
+# FITNESS FOR A PARTICULAR PURPOSE.  See the GNU General Public License
+# for more details.
+#
+# You should have received a copy of the GNU General Public License
+# along with this program. If not, see <http://www.gnu.org/licenses/>.
+EXTRA_DIST += arch/misc/shdeps.sh
+MOSTLYCLEANFILES += shdeps.sed
+
+shdeps.sed: $(top_srcdir)/arch/misc/shdeps.sh
+	$(SHELL) $(top_srcdir)/arch/misc/shdeps.sh "$(RT_SEP)" "$(SH_SEP)" "$(bindir)" > $@
diff -Nuar groff-1.22.3.old/bootstrap groff-1.22.3/bootstrap
--- groff-1.22.3.old/bootstrap	1970-01-01 02:00:00.000000000 +0200
+++ groff-1.22.3/bootstrap	2015-04-23 20:57:03.000000000 +0300
@@ -0,0 +1,999 @@
+#! /bin/sh
+# Print a version string.
+scriptversion=2013-12-05.23; # UTC
+
+# Bootstrap this package from checked-out sources.
+
+# Copyright (C) 2003-2014 Free Software Foundation, Inc.
+
+# This program is free software: you can redistribute it and/or modify
+# it under the terms of the GNU General Public License as published by
+# the Free Software Foundation, either version 3 of the License, or
+# (at your option) any later version.
+
+# This program is distributed in the hope that it will be useful,
+# but WITHOUT ANY WARRANTY; without even the implied warranty of
+# MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
+# GNU General Public License for more details.
+
+# You should have received a copy of the GNU General Public License
+# along with this program.  If not, see <http://www.gnu.org/licenses/>.
+
+# Originally written by Paul Eggert.  The canonical version of this
+# script is maintained as build-aux/bootstrap in gnulib, however, to
+# be useful to your project, you should place a copy of it under
+# version control in the top-level directory of your project.  The
+# intent is that all customization can be done with a bootstrap.conf
+# file also maintained in your version control; gnulib comes with a
+# template build-aux/bootstrap.conf to get you started.
+
+# Please report bugs or propose patches to bug-gnulib@gnu.org.
+
+nl='
+'
+
+# Ensure file names are sorted consistently across platforms.
+LC_ALL=C
+export LC_ALL
+
+# Ensure that CDPATH is not set.  Otherwise, the output from cd
+# would cause trouble in at least one use below.
+(unset CDPATH) >/dev/null 2>&1 && unset CDPATH
+
+local_gl_dir=gl
+
+me=$0
+
+usage() {
+  cat <<EOF
+Usage: $me [OPTION]...
+Bootstrap this package from the checked-out sources.
+
+Options:
+ --gnulib-srcdir=DIRNAME  specify the local directory where gnulib
+                          sources reside.  Use this if you already
+                          have gnulib sources on your machine, and
+                          do not want to waste your bandwidth downloading
+                          them again.  Defaults to \$GNULIB_SRCDIR
+ --bootstrap-sync         if this bootstrap script is not identical to
+                          the version in the local gnulib sources,
+                          update this script, and then restart it with
+                          /bin/sh or the shell \$CONFIG_SHELL
+ --no-bootstrap-sync      do not check whether bootstrap is out of sync
+ --copy                   copy files instead of creating symbolic links
+ --force                  attempt to bootstrap even if the sources seem
+                          not to have been checked out
+ --no-git                 do not use git to update gnulib.  Requires that
+                          --gnulib-srcdir point to a correct gnulib snapshot
+ --skip-po                do not download po files
+
+If the file $me.conf exists in the same directory as this script, its
+contents are read as shell variables to configure the bootstrap.
+
+For build prerequisites, environment variables like \$AUTOCONF and \$AMTAR
+are honored.
+
+Running without arguments will suffice in most cases.
+EOF
+}
+
+# warnf_ FORMAT-STRING ARG1...
+warnf_ ()
+{
+  warnf_format_=$1
+  shift
+  nl='
+'
+  case $* in
+    *$nl*) me_=$(printf "$me"|tr "$nl|" '??')
+       printf "$warnf_format_" "$@" | sed "s|^|$me_: |" ;;
+    *) printf "$me: $warnf_format_" "$@" ;;
+  esac >&2
+}
+
+# warn_ WORD1...
+warn_ ()
+{
+  # If IFS does not start with ' ', set it and emit the warning in a subshell.
+  case $IFS in
+    ' '*) warnf_ '%s\n' "$*";;
+    *)    (IFS=' '; warn_ "$@");;
+  esac
+}
+
+# die WORD1...
+die() { warn_ "$@"; exit 1; }
+
+# Configuration.
+
+# Name of the Makefile.am
+gnulib_mk=gnulib.mk
+
+# List of gnulib modules needed.
+gnulib_modules=
+
+# Any gnulib files needed that are not in modules.
+gnulib_files=
+
+: ${AUTOPOINT=autopoint}
+: ${AUTORECONF=autoreconf}
+
+# A function to be called right after gnulib-tool is run.
+# Override it via your own definition in bootstrap.conf.
+bootstrap_post_import_hook() { :; }
+
+# A function to be called after everything else in this script.
+# Override it via your own definition in bootstrap.conf.
+bootstrap_epilogue() { :; }
+
+# The command to download all .po files for a specified domain into
+# a specified directory.  Fill in the first %s is the domain name, and
+# the second with the destination directory.  Use rsync's -L and -r
+# options because the latest/%s directory and the .po files within are
+# all symlinks.
+po_download_command_format=\
+"rsync --delete --exclude '*.s1' -Lrtvz \
+ 'translationproject.org::tp/latest/%s/' '%s'"
+
+# Fallback for downloading .po files (if rsync fails).
+po_download_command_format2=\
+"wget --mirror -nd -q -np -A.po -P '%s' \
+ http://translationproject.org/latest/%s/"
+
+# Prefer a non-empty tarname (4th argument of AC_INIT if given), else
+# fall back to the package name (1st argument with munging)
+extract_package_name='
+  /^AC_INIT(\[*/{
+     s///
+     /^[^,]*,[^,]*,[^,]*,[ []*\([^][ ,)]\)/{
+       s//\1/
+       s/[],)].*//
+       p
+       q
+     }
+     s/[],)].*//
+     s/^GNU //
+     y/ABCDEFGHIJKLMNOPQRSTUVWXYZ/abcdefghijklmnopqrstuvwxyz/
+     s/[^abcdefghijklmnopqrstuvwxyz0123456789_]/-/g
+     p
+  }
+'
+package=$(sed -n "$extract_package_name" configure.ac) \
+  || die 'cannot find package name in configure.ac'
+gnulib_name=lib$package
+
+build_aux=build-aux
+source_base=lib
+m4_base=m4
+doc_base=doc
+tests_base=tests
+gnulib_extra_files=''
+
+# Additional gnulib-tool options to use.  Use "\newline" to break lines.
+gnulib_tool_option_extras=
+
+# Other locale categories that need message catalogs.
+EXTRA_LOCALE_CATEGORIES=
+
+# Additional xgettext options to use.  Use "\\\newline" to break lines.
+XGETTEXT_OPTIONS='\\\
+ --flag=_:1:pass-c-format\\\
+ --flag=N_:1:pass-c-format\\\
+ --flag=error:3:c-format --flag=error_at_line:5:c-format\\\
+'
+
+# Package bug report address and copyright holder for gettext files
+COPYRIGHT_HOLDER='Free Software Foundation, Inc.'
+MSGID_BUGS_ADDRESS=bug-$package@gnu.org
+
+# Files we don't want to import.
+excluded_files=
+
+# File that should exist in the top directory of a checked out hierarchy,
+# but not in a distribution tarball.
+checkout_only_file=README-hacking
+
+# Whether to use copies instead of symlinks.
+copy=false
+
+# Set this to '.cvsignore .gitignore' in bootstrap.conf if you want
+# those files to be generated in directories like lib/, m4/, and po/.
+# Or set it to 'auto' to make this script select which to use based
+# on which version control system (if any) is used in the source directory.
+vc_ignore=auto
+
+# Set this to true in bootstrap.conf to enable --bootstrap-sync by
+# default.
+bootstrap_sync=false
+
+# Use git to update gnulib sources
+use_git=true
+
+check_exists() {
+  ($1 --version </dev/null) >/dev/null 2>&1
+  test $? -lt 126
+}
+
+# find_tool ENVVAR NAMES...
+# -------------------------
+# Search for a required program.  Use the value of ENVVAR, if set,
+# otherwise find the first of the NAMES that can be run.
+# If found, set ENVVAR to the program name, die otherwise.
+#
+# FIXME: code duplication, see also gnu-web-doc-update.
+find_tool ()
+{
+  find_tool_envvar=$1
+  shift
+  find_tool_names=$@
+  eval "find_tool_res=\$$find_tool_envvar"
+  if test x"$find_tool_res" = x; then
+    for i; do
+      if check_exists $i; then
+        find_tool_res=$i
+        break
+      fi
+    done
+  fi
+  if test x"$find_tool_res" = x; then
+    warn_ "one of these is required: $find_tool_names;"
+    die   "alternatively set $find_tool_envvar to a compatible tool"
+  fi
+  eval "$find_tool_envvar=\$find_tool_res"
+  eval "export $find_tool_envvar"
+}
+
+# Override the default configuration, if necessary.
+# Make sure that bootstrap.conf is sourced from the current directory
+# if we were invoked as "sh bootstrap".
+case "$0" in
+  */*) test -r "$0.conf" && . "$0.conf" ;;
+  *) test -r "$0.conf" && . ./"$0.conf" ;;
+esac
+
+# Extra files from gnulib, which override files from other sources.
+test -z "${gnulib_extra_files}" && \
+  gnulib_extra_files="
+        build-aux/install-sh
+        build-aux/mdate-sh
+        build-aux/texinfo.tex
+        build-aux/depcomp
+        build-aux/config.guess
+        build-aux/config.sub
+        doc/INSTALL
+"
+
+if test "$vc_ignore" = auto; then
+  vc_ignore=
+  test -d .git && vc_ignore=.gitignore
+  test -d CVS && vc_ignore="$vc_ignore .cvsignore"
+fi
+
+# Translate configuration into internal form.
+
+# Parse options.
+
+for option
+do
+  case $option in
+  --help)
+    usage
+    exit;;
+  --gnulib-srcdir=*)
+    GNULIB_SRCDIR=${option#--gnulib-srcdir=};;
+  --skip-po)
+    SKIP_PO=t;;
+  --force)
+    checkout_only_file=;;
+  --copy)
+    copy=true;;
+  --bootstrap-sync)
+    bootstrap_sync=true;;
+  --no-bootstrap-sync)
+    bootstrap_sync=false;;
+  --no-git)
+    use_git=false;;
+  *)
+    die "$option: unknown option";;
+  esac
+done
+
+$use_git || test -d "$GNULIB_SRCDIR" \
+  || die "Error: --no-git requires --gnulib-srcdir"
+
+if test -n "$checkout_only_file" && test ! -r "$checkout_only_file"; then
+  die "Bootstrapping from a non-checked-out distribution is risky."
+fi
+
+# Strip blank and comment lines to leave significant entries.
+gitignore_entries() {
+  sed '/^#/d; /^$/d' "$@"
+}
+
+# If $STR is not already on a line by itself in $FILE, insert it at the start.
+# Entries are inserted at the start of the ignore list to ensure existing
+# entries starting with ! are not overridden.  Such entries support
+# whitelisting exceptions after a more generic blacklist pattern.
+insert_if_absent() {
+  file=$1
+  str=$2
+  test -f $file || touch $file
+  test -r $file || die "Error: failed to read ignore file: $file"
+  duplicate_entries=$(gitignore_entries $file | sort | uniq -d)
+  if [ "$duplicate_entries" ] ; then
+    die "Error: Duplicate entries in $file: " $duplicate_entries
+  fi
+  linesold=$(gitignore_entries $file | wc -l)
+  linesnew=$( { echo "$str"; cat $file; } | gitignore_entries | sort -u | wc -l)
+  if [ $linesold != $linesnew ] ; then
+    { echo "$str" | cat - $file > $file.bak && mv $file.bak $file; } \
+      || die "insert_if_absent $file $str: failed"
+  fi
+}
+
+# Adjust $PATTERN for $VC_IGNORE_FILE and insert it with
+# insert_if_absent.
+insert_vc_ignore() {
+  vc_ignore_file="$1"
+  pattern="$2"
+  case $vc_ignore_file in
+  *.gitignore)
+    # A .gitignore entry that does not start with '/' applies
+    # recursively to subdirectories, so prepend '/' to every
+    # .gitignore entry.
+    pattern=$(echo "$pattern" | sed s,^,/,);;
+  esac
+  insert_if_absent "$vc_ignore_file" "$pattern"
+}
+
+# Die if there is no AC_CONFIG_AUX_DIR($build_aux) line in configure.ac.
+found_aux_dir=no
+grep '^[	 ]*AC_CONFIG_AUX_DIR(\['"$build_aux"'\])' configure.ac \
+    >/dev/null && found_aux_dir=yes
+grep '^[	 ]*AC_CONFIG_AUX_DIR('"$build_aux"')' configure.ac \
+    >/dev/null && found_aux_dir=yes
+test $found_aux_dir = yes \
+  || die "configure.ac lacks 'AC_CONFIG_AUX_DIR([$build_aux])'; add it"
+
+# If $build_aux doesn't exist, create it now, otherwise some bits
+# below will malfunction.  If creating it, also mark it as ignored.
+if test ! -d $build_aux; then
+  mkdir $build_aux
+  for dot_ig in x $vc_ignore; do
+    test $dot_ig = x && continue
+    insert_vc_ignore $dot_ig $build_aux
+  done
+fi
+
+# Note this deviates from the version comparison in automake
+# in that it treats 1.5 < 1.5.0, and treats 1.4.4a < 1.4-p3a
+# but this should suffice as we won't be specifying old
+# version formats or redundant trailing .0 in bootstrap.conf.
+# If we did want full compatibility then we should probably
+# use m4_version_compare from autoconf.
+sort_ver() { # sort -V is not generally available
+  ver1="$1"
+  ver2="$2"
+
+  # split on '.' and compare each component
+  i=1
+  while : ; do
+    p1=$(echo "$ver1" | cut -d. -f$i)
+    p2=$(echo "$ver2" | cut -d. -f$i)
+    if [ ! "$p1" ]; then
+      echo "$1 $2"
+      break
+    elif [ ! "$p2" ]; then
+      echo "$2 $1"
+      break
+    elif [ ! "$p1" = "$p2" ]; then
+      if [ "$p1" -gt "$p2" ] 2>/dev/null; then # numeric comparison
+        echo "$2 $1"
+      elif [ "$p2" -gt "$p1" ] 2>/dev/null; then # numeric comparison
+        echo "$1 $2"
+      else # numeric, then lexicographic comparison
+        lp=$(printf "$p1\n$p2\n" | LANG=C sort -n | tail -n1)
+        if [ "$lp" = "$p2" ]; then
+          echo "$1 $2"
+        else
+          echo "$2 $1"
+        fi
+      fi
+      break
+    fi
+    i=$(($i+1))
+  done
+}
+
+get_version() {
+  app=$1
+
+  $app --version >/dev/null 2>&1 || return 1
+
+  $app --version 2>&1 |
+  sed -n '# Move version to start of line.
+          s/.*[v ]\([0-9]\)/\1/
+
+          # Skip lines that do not start with version.
+          /^[0-9]/!d
+
+          # Remove characters after the version.
+          s/[^.a-z0-9-].*//
+
+          # The first component must be digits only.
+          s/^\([0-9]*\)[a-z-].*/\1/
+
+          #the following essentially does s/5.005/5.5/
+          s/\.0*\([1-9]\)/.\1/g
+          p
+          q'
+}
+
+check_versions() {
+  ret=0
+
+  while read app req_ver; do
+    # We only need libtoolize from the libtool package.
+    if test "$app" = libtool; then
+      app=libtoolize
+    fi
+    # Exempt git if --no-git is in effect.
+    if test "$app" = git; then
+      $use_git || continue
+    fi
+    # Honor $APP variables ($TAR, $AUTOCONF, etc.)
+    appvar=$(echo $app | LC_ALL=C tr '[a-z]-' '[A-Z]_')
+    test "$appvar" = TAR && appvar=AMTAR
+    case $appvar in
+        GZIP) ;; # Do not use $GZIP:  it contains gzip options.
+        *) eval "app=\${$appvar-$app}" ;;
+    esac
+
+    # Handle the still-experimental Automake-NG programs specially.
+    # They remain named as the mainstream Automake programs ("automake",
+    # and "aclocal") to avoid gratuitous incompatibilities with
+    # pre-existing usages (by, say, autoreconf, or custom autogen.sh
+    # scripts), but correctly identify themselves (as being part of
+    # "GNU automake-ng") when asked their version.
+    case $app in
+      automake-ng|aclocal-ng)
+        app=${app%-ng}
+        ($app --version | grep '(GNU automake-ng)') >/dev/null 2>&1 || {
+          warn_ "Error: '$app' not found or not from Automake-NG"
+          ret=1
+          continue
+        } ;;
+    esac
+    if [ "$req_ver" = "-" ]; then
+      # Merely require app to exist; not all prereq apps are well-behaved
+      # so we have to rely on $? rather than get_version.
+      if ! check_exists $app; then
+        warn_ "Error: '$app' not found"
+        ret=1
+      fi
+    else
+      # Require app to produce a new enough version string.
+      inst_ver=$(get_version $app)
+      if [ ! "$inst_ver" ]; then
+        warn_ "Error: '$app' not found"
+        ret=1
+      else
+        latest_ver=$(sort_ver $req_ver $inst_ver | cut -d' ' -f2)
+        if [ ! "$latest_ver" = "$inst_ver" ]; then
+          warnf_ '%s\n'                                        \
+              "Error: '$app' version == $inst_ver is too old"  \
+              "       '$app' version >= $req_ver is required"
+          ret=1
+        fi
+      fi
+    fi
+  done
+
+  return $ret
+}
+
+print_versions() {
+  echo "Program    Min_version"
+  echo "----------------------"
+  printf %s "$buildreq"
+  echo "----------------------"
+  # can't depend on column -t
+}
+
+# Find sha1sum, named gsha1sum on MacPorts, shasum on Mac OS X 10.6.
+# Also find the compatible sha1 utility on the BSDs
+if test x"$SKIP_PO" = x; then
+  find_tool SHA1SUM sha1sum gsha1sum shasum sha1
+fi
+
+use_libtool=0
+# We'd like to use grep -E, to see if any of LT_INIT,
+# AC_PROG_LIBTOOL, AM_PROG_LIBTOOL is used in configure.ac,
+# but that's not portable enough (e.g., for Solaris).
+grep '^[	 ]*A[CM]_PROG_LIBTOOL' configure.ac >/dev/null \
+  && use_libtool=1
+grep '^[	 ]*LT_INIT' configure.ac >/dev/null \
+  && use_libtool=1
+if test $use_libtool = 1; then
+  find_tool LIBTOOLIZE glibtoolize libtoolize
+fi
+
+# gnulib-tool requires at least automake and autoconf.
+# If either is not listed, add it (with minimum version) as a prerequisite.
+case $buildreq in
+  *automake*) ;;
+  *) buildreq="automake 1.9
+$buildreq" ;;
+esac
+case $buildreq in
+  *autoconf*) ;;
+  *) buildreq="autoconf 2.59
+$buildreq" ;;
+esac
+
+# When we can deduce that gnulib-tool will require patch,
+# and when patch is not already listed as a prerequisite, add it, too.
+if test -d "$local_gl_dir" \
+    && ! find "$local_gl_dir" -name '*.diff' -exec false {} +; then
+  case $buildreq in
+    *patch*) ;;
+    *) buildreq="patch -
+$buildreq" ;;
+  esac
+fi
+
+if ! printf "$buildreq" | check_versions; then
+  echo >&2
+  if test -f README-prereq; then
+    die "See README-prereq for how to get the prerequisite programs"
+  else
+    die "Please install the prerequisite programs"
+  fi
+fi
+
+# Warn the user if autom4te appears to be broken; this causes known
+# issues with at least gettext 0.18.3.
+probe=$(echo 'm4_quote([hi])' | autom4te -l M4sugar -t 'm4_quote:$%' -)
+if test "x$probe" != xhi; then
+  warn_ "WARNING: your autom4te wrapper eats stdin;"
+  warn_ "if bootstrap fails, consider upgrading your autotools"
+fi
+
+echo "$0: Bootstrapping from checked-out $package sources..."
+
+# See if we can use gnulib's git-merge-changelog merge driver.
+if $use_git && test -d .git && check_exists git; then
+  if git config merge.merge-changelog.driver >/dev/null ; then
+    :
+  elif check_exists git-merge-changelog; then
+    echo "$0: initializing git-merge-changelog driver"
+    git config merge.merge-changelog.name 'GNU-style ChangeLog merge driver'
+    git config merge.merge-changelog.driver 'git-merge-changelog %O %A %B'
+  else
+    echo "$0: consider installing git-merge-changelog from gnulib"
+  fi
+fi
+
+
+cleanup_gnulib() {
+  status=$?
+  rm -fr "$gnulib_path"
+  exit $status
+}
+
+git_modules_config () {
+  test -f .gitmodules && git config --file .gitmodules "$@"
+}
+
+if $use_git; then
+  gnulib_path=$(git_modules_config submodule.gnulib.path)
+  test -z "$gnulib_path" && gnulib_path=gnulib
+fi
+
+# Get gnulib files.  Populate $GNULIB_SRCDIR, possibly updating a
+# submodule, for use in the rest of the script.
+
+case ${GNULIB_SRCDIR--} in
+-)
+  # Note that $use_git is necessarily true in this case.
+  if git_modules_config submodule.gnulib.url >/dev/null; then
+    echo "$0: getting gnulib files..."
+    git submodule init || exit $?
+    git submodule update || exit $?
+
+  elif [ ! -d "$gnulib_path" ]; then
+    echo "$0: getting gnulib files..."
+
+    trap cleanup_gnulib 1 2 13 15
+
+    shallow=
+    git clone -h 2>&1 | grep -- --depth > /dev/null && shallow='--depth 2'
+    git clone $shallow git://git.sv.gnu.org/gnulib "$gnulib_path" ||
+      cleanup_gnulib
+
+    trap - 1 2 13 15
+  fi
+  GNULIB_SRCDIR=$gnulib_path
+  ;;
+*)
+  # Use GNULIB_SRCDIR directly or as a reference.
+  if $use_git && test -d "$GNULIB_SRCDIR"/.git && \
+        git_modules_config submodule.gnulib.url >/dev/null; then
+    echo "$0: getting gnulib files..."
+    if git submodule -h|grep -- --reference > /dev/null; then
+      # Prefer the one-liner available in git 1.6.4 or newer.
+      git submodule update --init --reference "$GNULIB_SRCDIR" \
+        "$gnulib_path" || exit $?
+    else
+      # This fallback allows at least git 1.5.5.
+      if test -f "$gnulib_path"/gnulib-tool; then
+        # Since file already exists, assume submodule init already complete.
+        git submodule update || exit $?
+      else
+        # Older git can't clone into an empty directory.
+        rmdir "$gnulib_path" 2>/dev/null
+        git clone --reference "$GNULIB_SRCDIR" \
+          "$(git_modules_config submodule.gnulib.url)" "$gnulib_path" \
+          && git submodule init && git submodule update \
+          || exit $?
+      fi
+    fi
+    GNULIB_SRCDIR=$gnulib_path
+  fi
+  ;;
+esac
+
+# $GNULIB_SRCDIR now points to the version of gnulib to use, and
+# we no longer need to use git or $gnulib_path below here.
+
+if $bootstrap_sync; then
+  cmp -s "$0" "$GNULIB_SRCDIR/build-aux/bootstrap" || {
+    echo "$0: updating bootstrap and restarting..."
+    case $(sh -c 'echo "$1"' -- a) in
+      a) ignored=--;;
+      *) ignored=ignored;;
+    esac
+    exec sh -c \
+      'cp "$1" "$2" && shift && exec "${CONFIG_SHELL-/bin/sh}" "$@"' \
+      $ignored "$GNULIB_SRCDIR/build-aux/bootstrap" \
+      "$0" "$@" --no-bootstrap-sync
+  }
+fi
+
+gnulib_tool=$GNULIB_SRCDIR/gnulib-tool
+<$gnulib_tool || exit $?
+
+# Get translations.
+
+download_po_files() {
+  subdir=$1
+  domain=$2
+  echo "$me: getting translations into $subdir for $domain..."
+  cmd=$(printf "$po_download_command_format" "$domain" "$subdir")
+  eval "$cmd" && return
+  # Fallback to HTTP.
+  cmd=$(printf "$po_download_command_format2" "$subdir" "$domain")
+  eval "$cmd"
+}
+
+# Mirror .po files to $po_dir/.reference and copy only the new
+# or modified ones into $po_dir.  Also update $po_dir/LINGUAS.
+# Note po files that exist locally only are left in $po_dir but will
+# not be included in LINGUAS and hence will not be distributed.
+update_po_files() {
+  # Directory containing primary .po files.
+  # Overwrite them only when we're sure a .po file is new.
+  po_dir=$1
+  domain=$2
+
+  # Mirror *.po files into this dir.
+  # Usually contains *.s1 checksum files.
+  ref_po_dir="$po_dir/.reference"
+
+  test -d $ref_po_dir || mkdir $ref_po_dir || return
+  download_po_files $ref_po_dir $domain \
+    && ls "$ref_po_dir"/*.po 2>/dev/null |
+      sed 's|.*/||; s|\.po$||' > "$po_dir/LINGUAS" || return
+
+  langs=$(cd $ref_po_dir && echo *.po | sed 's/\.po//g')
+  test "$langs" = '*' && langs=x
+  for po in $langs; do
+    case $po in x) continue;; esac
+    new_po="$ref_po_dir/$po.po"
+    cksum_file="$ref_po_dir/$po.s1"
+    if ! test -f "$cksum_file" ||
+        ! test -f "$po_dir/$po.po" ||
+        ! $SHA1SUM -c "$cksum_file" < "$new_po" > /dev/null 2>&1; then
+      echo "$me: updated $po_dir/$po.po..."
+      cp "$new_po" "$po_dir/$po.po" \
+          && $SHA1SUM < "$new_po" > "$cksum_file" || return
+    fi
+  done
+}
+
+case $SKIP_PO in
+'')
+  if test -d po; then
+    update_po_files po $package || exit
+  fi
+
+  if test -d runtime-po; then
+    update_po_files runtime-po $package-runtime || exit
+  fi;;
+esac
+
+symlink_to_dir()
+{
+  src=$1/$2
+  dst=${3-$2}
+
+  test -f "$src" && {
+
+    # If the destination directory doesn't exist, create it.
+    # This is required at least for "lib/uniwidth/cjk.h".
+    dst_dir=$(dirname "$dst")
+    if ! test -d "$dst_dir"; then
+      mkdir -p "$dst_dir"
+
+      # If we've just created a directory like lib/uniwidth,
+      # tell version control system(s) it's ignorable.
+      # FIXME: for now, this does only one level
+      parent=$(dirname "$dst_dir")
+      for dot_ig in x $vc_ignore; do
+        test $dot_ig = x && continue
+        ig=$parent/$dot_ig
+        insert_vc_ignore $ig "${dst_dir##*/}"
+      done
+    fi
+
+    if $copy; then
+      {
+        test ! -h "$dst" || {
+          echo "$me: rm -f $dst" &&
+          rm -f "$dst"
+        }
+      } &&
+      test -f "$dst" &&
+      cmp -s "$src" "$dst" || {
+        echo "$me: cp -fp $src $dst" &&
+        cp -fp "$src" "$dst"
+      }
+    else
+      # Leave any existing symlink alone, if it already points to the source,
+      # so that broken build tools that care about symlink times
+      # aren't confused into doing unnecessary builds.  Conversely, if the
+      # existing symlink's time stamp is older than the source, make it afresh,
+      # so that broken tools aren't confused into skipping needed builds.  See
+      # <http://lists.gnu.org/archive/html/bug-gnulib/2011-05/msg00326.html>.
+      test -h "$dst" &&
+      src_ls=$(ls -diL "$src" 2>/dev/null) && set $src_ls && src_i=$1 &&
+      dst_ls=$(ls -diL "$dst" 2>/dev/null) && set $dst_ls && dst_i=$1 &&
+      test "$src_i" = "$dst_i" &&
+      both_ls=$(ls -dt "$src" "$dst") &&
+      test "X$both_ls" = "X$dst$nl$src" || {
+        dot_dots=
+        case $src in
+        /*) ;;
+        *)
+          case /$dst/ in
+          *//* | */../* | */./* | /*/*/*/*/*/)
+             die "invalid symlink calculation: $src -> $dst";;
+          /*/*/*/*/)    dot_dots=../../../;;
+          /*/*/*/)      dot_dots=../../;;
+          /*/*/)        dot_dots=../;;
+          esac;;
+        esac
+
+        echo "$me: ln -fs $dot_dots$src $dst" &&
+        ln -fs "$dot_dots$src" "$dst"
+      }
+    fi
+  }
+}
+
+version_controlled_file() {
+  parent=$1
+  file=$2
+  if test -d .git; then
+    git rm -n "$file" > /dev/null 2>&1
+  elif test -d .svn; then
+    svn log -r HEAD "$file" > /dev/null 2>&1
+  elif test -d CVS; then
+    grep -F "/${file##*/}/" "$parent/CVS/Entries" 2>/dev/null |
+             grep '^/[^/]*/[0-9]' > /dev/null
+  else
+    warn_ "no version control for $file?"
+    false
+  fi
+}
+
+# NOTE: we have to be careful to run both autopoint and libtoolize
+# before gnulib-tool, since gnulib-tool is likely to provide newer
+# versions of files "installed" by these two programs.
+# Then, *after* gnulib-tool (see below), we have to be careful to
+# run autoreconf in such a way that it does not run either of these
+# two just-pre-run programs.
+
+# Import from gettext.
+with_gettext=yes
+grep '^[	 ]*AM_GNU_GETTEXT_VERSION(' configure.ac >/dev/null || \
+    with_gettext=no
+
+if test $with_gettext = yes || test $use_libtool = 1; then
+
+  tempbase=.bootstrap$$
+  trap "rm -f $tempbase.0 $tempbase.1" 1 2 13 15
+
+  > $tempbase.0 > $tempbase.1 &&
+  find . ! -type d -print | sort > $tempbase.0 || exit
+
+  if test $with_gettext = yes; then
+    # Released autopoint has the tendency to install macros that have been
+    # obsoleted in current gnulib, so run this before gnulib-tool.
+    echo "$0: $AUTOPOINT --force"
+    $AUTOPOINT --force || exit
+  fi
+
+  # Autoreconf runs aclocal before libtoolize, which causes spurious
+  # warnings if the initial aclocal is confused by the libtoolized
+  # (or worse out-of-date) macro directory.
+  # libtoolize 1.9b added the --install option; but we support back
+  # to libtoolize 1.5.22, where the install action was default.
+  if test $use_libtool = 1; then
+    install=
+    case $($LIBTOOLIZE --help) in
+      *--install*) install=--install ;;
+    esac
+    echo "running: $LIBTOOLIZE $install --copy"
+    $LIBTOOLIZE $install --copy
+  fi
+
+  find . ! -type d -print | sort >$tempbase.1
+  old_IFS=$IFS
+  IFS=$nl
+  for file in $(comm -13 $tempbase.0 $tempbase.1); do
+    IFS=$old_IFS
+    parent=${file%/*}
+    version_controlled_file "$parent" "$file" || {
+      for dot_ig in x $vc_ignore; do
+        test $dot_ig = x && continue
+        ig=$parent/$dot_ig
+        insert_vc_ignore "$ig" "${file##*/}"
+      done
+    }
+  done
+  IFS=$old_IFS
+
+  rm -f $tempbase.0 $tempbase.1
+  trap - 1 2 13 15
+fi
+
+# Import from gnulib.
+
+gnulib_tool_options="\
+ --import\
+ --no-changelog\
+ --aux-dir $build_aux\
+ --doc-base $doc_base\
+ --lib $gnulib_name\
+ --m4-base $m4_base/\
+ --source-base $source_base/\
+ --tests-base $tests_base\
+ --local-dir $local_gl_dir\
+ $gnulib_tool_option_extras\
+"
+if test $use_libtool = 1; then
+  case "$gnulib_tool_options " in
+    *' --libtool '*) ;;
+    *) gnulib_tool_options="$gnulib_tool_options --libtool" ;;
+  esac
+fi
+echo "$0: $gnulib_tool $gnulib_tool_options --import ..."
+$gnulib_tool $gnulib_tool_options --import $gnulib_modules &&
+
+for file in $gnulib_files; do
+  symlink_to_dir "$GNULIB_SRCDIR" $file \
+    || die "failed to symlink $file"
+done
+
+bootstrap_post_import_hook \
+  || die "bootstrap_post_import_hook failed"
+
+# Remove any dangling symlink matching "*.m4" or "*.[ch]" in some
+# gnulib-populated directories.  Such .m4 files would cause aclocal to fail.
+# The following requires GNU find 4.2.3 or newer.  Considering the usual
+# portability constraints of this script, that may seem a very demanding
+# requirement, but it should be ok.  Ignore any failure, which is fine,
+# since this is only a convenience to help developers avoid the relatively
+# unusual case in which a symlinked-to .m4 file is git-removed from gnulib
+# between successive runs of this script.
+find "$m4_base" "$source_base" \
+  -depth \( -name '*.m4' -o -name '*.[ch]' \) \
+  -type l -xtype l -delete > /dev/null 2>&1
+
+# Invoke autoreconf with --force --install to ensure upgrades of tools
+# such as ylwrap.
+AUTORECONFFLAGS="--verbose --install --force -I $m4_base $ACLOCAL_FLAGS"
+
+# Some systems (RHEL 5) are using ancient autotools, for which the
+# --no-recursive option had not been invented.  Detect that lack and
+# omit the option when it's not supported.  FIXME in 2017: remove this
+# hack when RHEL 5 autotools are updated, or when they become irrelevant.
+case $($AUTORECONF --help) in
+  *--no-recursive*) AUTORECONFFLAGS="$AUTORECONFFLAGS --no-recursive";;
+esac
+
+# Tell autoreconf not to invoke autopoint or libtoolize; they were run above.
+echo "running: AUTOPOINT=true LIBTOOLIZE=true $AUTORECONF $AUTORECONFFLAGS"
+AUTOPOINT=true LIBTOOLIZE=true $AUTORECONF $AUTORECONFFLAGS \
+  || die "autoreconf failed"
+
+# Get some extra files from gnulib, overriding existing files.
+for file in $gnulib_extra_files; do
+  case $file in
+  */INSTALL) dst=INSTALL;;
+  build-aux/*) dst=$build_aux/${file#build-aux/};;
+  *) dst=$file;;
+  esac
+  symlink_to_dir "$GNULIB_SRCDIR" $file $dst \
+    || die "failed to symlink $file"
+done
+
+if test $with_gettext = yes; then
+  # Create gettext configuration.
+  echo "$0: Creating po/Makevars from po/Makevars.template ..."
+  rm -f po/Makevars
+  sed '
+    /^EXTRA_LOCALE_CATEGORIES *=/s/=.*/= '"$EXTRA_LOCALE_CATEGORIES"'/
+    /^COPYRIGHT_HOLDER *=/s/=.*/= '"$COPYRIGHT_HOLDER"'/
+    /^MSGID_BUGS_ADDRESS *=/s|=.*|= '"$MSGID_BUGS_ADDRESS"'|
+    /^XGETTEXT_OPTIONS *=/{
+      s/$/ \\/
+      a\
+          '"$XGETTEXT_OPTIONS"' $${end_of_xgettext_options+}
+    }
+  ' po/Makevars.template >po/Makevars \
+    || die 'cannot generate po/Makevars'
+
+  # If the 'gettext' module is in use, grab the latest Makefile.in.in.
+  # If only the 'gettext-h' module is in use, assume autopoint already
+  # put the correct version of this file into place.
+  case $gnulib_modules in
+  *gettext-h*) ;;
+  *gettext*)
+    cp $GNULIB_SRCDIR/build-aux/po/Makefile.in.in po/Makefile.in.in \
+      || die "cannot create po/Makefile.in.in"
+    ;;
+  esac
+
+  if test -d runtime-po; then
+    # Similarly for runtime-po/Makevars, but not quite the same.
+    rm -f runtime-po/Makevars
+    sed '
+      /^DOMAIN *=.*/s/=.*/= '"$package"'-runtime/
+      /^subdir *=.*/s/=.*/= runtime-po/
+      /^MSGID_BUGS_ADDRESS *=/s/=.*/= bug-'"$package"'@gnu.org/
+      /^XGETTEXT_OPTIONS *=/{
+        s/$/ \\/
+        a\
+            '"$XGETTEXT_OPTIONS_RUNTIME"' $${end_of_xgettext_options+}
+      }
+    ' po/Makevars.template >runtime-po/Makevars \
+    || die 'cannot generate runtime-po/Makevars'
+
+    # Copy identical files from po to runtime-po.
+    (cd po && cp -p Makefile.in.in *-quot *.header *.sed *.sin ../runtime-po)
+  fi
+fi
+
+bootstrap_epilogue
+
+echo "$0: done.  Now you can run './configure'."
+
+# Local variables:
+# eval: (add-hook 'write-file-hooks 'time-stamp)
+# time-stamp-start: "scriptversion="
+# time-stamp-format: "%:y-%02m-%02d.%02H"
+# time-stamp-time-zone: "UTC"
+# time-stamp-end: "; # UTC"
+# End:
diff -Nuar groff-1.22.3.old/bootstrap.conf groff-1.22.3/bootstrap.conf
--- groff-1.22.3.old/bootstrap.conf	1970-01-01 02:00:00.000000000 +0200
+++ groff-1.22.3/bootstrap.conf	2015-04-23 20:57:03.000000000 +0300
@@ -0,0 +1,100 @@
+# Bootstrap configuration.
+
+# Copyright (C) 2006-2007, 2009-2012 Free Software Foundation, Inc.
+
+# This program is free software: you can redistribute it and/or modify
+# it under the terms of the GNU General Public License as published by
+# the Free Software Foundation; either version 3 of the License, or
+# (at your option) any later version.
+
+# This program is distributed in the hope that it will be useful,
+# but WITHOUT ANY WARRANTY; without even the implied warranty of
+# MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
+# GNU General Public License for more details.
+
+# You should have received a copy of the GNU General Public License
+# along with this program.  If not, see <http://www.gnu.org/licenses/>.
+
+
+# gnulib m4 macro 
+m4_base=gnulib_m4
+
+# gnulib C source files
+source_base=lib
+
+# additional standard files, particularly added by 
+# automake --add-missing
+build_aux=build-aux
+
+gnulib_name=libgnu
+
+# This file is not distributed and used to check if the bootstrap
+# script is not launched on a tarball
+checkout_only_file=README.git
+
+# gnulib modules used by this package.
+# havelib provides config.rpath
+# can be get through gettext though
+gnulib_modules="
+    havelib
+    non-recursive-gnulib-prefix-hack
+    wcwidth
+"
+
+# Name of the Makefile.am
+gnulib_tool_option_extras="--makefile-name=gnulib.mk"
+
+# Additional xgettext options to use.  Use "\\\newline" to break lines.
+XGETTEXT_OPTIONS=$XGETTEXT_OPTIONS'\\\
+ --from-code=UTF-8\\\
+ --flag=asprintf:2:c-format --flag=vasprintf:2:c-format\\\
+ --flag=asnprintf:3:c-format --flag=vasnprintf:3:c-format\\\
+ --flag=wrapf:1:c-format\\\
+'
+
+# If "AM_GNU_GETTEXT(external" or "AM_GNU_GETTEXT([external]"
+# appears in configure.ac, exclude some unnecessary files.
+# Without grep's -E option (not portable enough, pre-configure),
+# the following test is ugly.  Also, this depends on the existence
+# of configure.ac, not the obsolescent-named configure.in.  But if
+# you're using this infrastructure, you should care about such things.
+
+gettext_external=0
+grep '^[	 ]*AM_GNU_GETTEXT(external\>' configure.ac > /dev/null &&
+  gettext_external=1
+grep '^[	 ]*AM_GNU_GETTEXT(\[external\]' configure.ac > /dev/null &&
+  gettext_external=1
+
+if test $gettext_external = 1; then
+  # Gettext supplies these files, but we don't need them since
+  # we don't have an intl subdirectory.
+  excluded_files='
+      m4/glibc2.m4
+      m4/intdiv0.m4
+      m4/lcmessage.m4
+      m4/lock.m4
+      m4/printf-posix.m4
+      m4/size_max.m4
+      m4/uintmax_t.m4
+      m4/ulonglong.m4
+      m4/visibility.m4
+      m4/xsize.m4
+  '
+fi
+
+# Build prerequisites
+buildreq="\
+autoconf   2.65
+automake   1.12.2
+git        1.5.5
+libtool    2.2.2
+tar        -
+"
+
+bootstrap_post_import_hook ()
+{
+  # Automake requires that ChangeLog exist.
+  touch ChangeLog || return 1
+  # Massage lib/gnulib.mk before using it later in the bootstrapping process.
+  build-aux/prefix-gnulib-mk --lib-name=$gnulib_name lib/$gnulib_mk
+}
diff -Nuar groff-1.22.3.old/ChangeLog groff-1.22.3/ChangeLog
--- groff-1.22.3.old/ChangeLog	2014-11-04 10:38:35.138525085 +0200
+++ groff-1.22.3/ChangeLog	2015-04-23 20:57:03.000000000 +0300
@@ -1,3 +1,243 @@
+2015-04-22  Deri James  <deri@chuzzlewit.myzen.co.uk>
+
+	Fix Savannah bug #44891.
+
+	* src/devices/gropdf/gropdf.pl: If module Compress::Zlib is not
+	available fallback to producing uncompressed PDF and output a
+	warning.
+	
+2015-04-22  Bjarni Ingi Gislason  <bjarniig@rhi.hi.is>
+
+	Fix Savannah bug #44894.
+
+	* tmac/strip.sed: Add a `generated file' warning.
+
+2015-04-21  Deri James  <deri@chuzzlewit.myzen.co.uk>
+
+	Fix Savannah bug #44890.
+	Patch by Peter Bray.
+
+	* font/devpdf/devpdf.am: Don't use 'find -maxdepth'.
+
+2015-03-07  Ingo Schwarze  <schwarze@openbsd.org>
+
+	[mdoc] Fix Savannah bug #44733.
+
+	Prevent mdoc(7) Bl with trailing -width or -offset from picking up
+	old args.
+
+	* tmac/doc.tmac-u (doc-do-Bl-args): When checking whether there is
+	another argument to a Bl macro, do not inspect the argument list
+	because it is never cleaned and may contain arguments from previous
+	macro invocations.  Instead, inspect the argument count which is
+	always up to date.
+
+2015-04-10  Daiki Ueno  <ueno@gnu.org>
+
+	Fix link error on NetBSD 6.
+
+	Reported by carsten.kunze@arcor.de in:
+	<https://lists.gnu.org/archive/html/groff/2015-04/msg00000.html>.
+	The problem can also be reproduced if gl_cv_func_wcwidth_works=no
+	is passed to configure.
+
+	* src/preproc/grn/grn.am (grn_LDADD): Change the link order of
+	libgroff.a and lib/libgnu.a according to dependency.
+	* src/roff/troff/troff.am (troff_LDADD): Likewise.
+
+2015-04-08  Werner LEMBERG  <wl@gnu.org>
+
+	Fix Savannah bug #44767.
+	Patch by Peter Bray.
+
+	* src/roff/grog/grog.am (grog): Correctly substitute `grog_dir'.
+
+2015-04-03  Werner LEMBERG  <wl@gnu.org>
+
+	Fix Savannah bug #44708 (2/2).
+
+	Make man pages work in compatibility mode.
+	Also fix some minor typos.
+
+	* contrib/pic2graph/pic2graph.man, man/ditroff.man, man/groff.man,
+	man/groff_diff.man, man/groff_out.man, man/groff_tmac.man,
+	man/roff.man, src/devices/grodvi/grodvi.man,
+	src/devices/grohtml/grohtml.man, src/devices/grolbp/grolbp.man,
+	src/devices/grolj4/grolj4.man, src/devices/grolj4/lj4_font.man,
+	src/devices/gropdf/gropdf.man, src/devices/gropdf/pdfmom.man,
+	src/devices/grops/grops.man, src/devices/grotty/grotty.man,
+	src/devices/xditview/xditview.man, src/preproc/eqn/eqn.man,
+	src/preproc/eqn/neqn.man, src/preproc/grn/grn.man,
+	src/preproc/pic/pic.man, src/preproc/preconv/preconv.man,
+	src/preproc/refer/refer.man, src/preproc/soelim/soelim.man,
+	src/preproc/tbl/tbl.man, src/roff/groff/groff.man,
+	src/roff/grog/grog.man, src/roff/nroff/nroff.man,
+	src/roff/troff/troff.man, src/utils/addftinto/addftinfo.man,
+	src/utils/afmtodit/afmtodit.man, src/utils/hpftodit/hpftodit.man,
+	src/utils/indxbib/indxbib.man, src/utils/lkbib/lkbib.man,
+	src/utils/lookbib/lookbib.man, src/utils/pfbtops/pfbtops.man,
+	src/utils/tfmtodit/tfmtodit.man, src/utils/xtotroff/xtotroff.man,
+	tmac/groff_man.man, tmac/groff_trace.man: Do it.
+
+2015-04-03  Werner LEMBERG  <wl@gnu.org>
+
+	Fix Savannah bug #44708 (1/2).
+
+	* tmac/andoc.tmac (reload_doc, reload_man): Don't use `de1',
+	otherwise we can't manipulate the compatibility flag within the
+	macro.
+
+	* tmac/doc-common-u (Dt): Remove invalid leading whitespace.
+
+2015-03-11  Deri James <deri@chuzzlewit.myzen.co.uk>
+
+	* src/devices/gropdf/gropdf.pl: Was not handling the final glyph
+	correctly in the "standard" fonts which are not embedded. They
+	actually have 257 glyphs (0-256) not 256 as I'd assumed, so the 
+	remappiing code needs to be applied for them as well as the 
+	embedded downloadable fonts.
+
+2015-03-11  Deri James <deri@chuzzlewit.myzen.co.uk>
+
+	* src/devices/gropdf/gropdf.pl: Fix problem remappiing 
+	ellipsis (affects all glyphs > 255).
+
+2015-03-07  Werner LEMBERG  <wl@gnu.org>
+
+	* tmac/tmac.am (TMACSPECIALFILES): Removed.  No longer used.
+
+2015-03-07  Ingo Schwarze  <schwarze@openbsd.org>
+
+	* tmac/doc-common-u (Dd): Avoid warning `unbalanced .el request'.
+
+2015-02-12  Werner LEMBERG  <wl@gnu.org>
+
+	Minor fixes due to renaming `groff.texinfo' to `groff.texi'.
+
+	* doc/doc.am (SUFFIXES): Update.
+	* m4/groff.m4 (GROFF_MAKEINFO): Update.
+
+2015-01-30  Bertrand Garrigues  <bertrand.garrigues@laposte.net>
+
+	Automake migration and Gnulib integration.
+
+	Gnulib:
+	- Added gnulib as a git submodule.
+	- Integrated bootstrap scripts from gnulib.
+	- Gnulib m4 directory is now in `gnulib_m4', while Gnulib's .c
+	files are located in `lib'.  `gnulib_m4' and `lib' are generated
+	and distributed.
+
+	Automake:
+	- Removed Makefiles from the old build system.
+	- Converted Makefile.in into Makefile.am.
+	- Converted Makefile.sub files in all directories to a .am file.
+	- Removed configure, src/include/config.hin (now generated).
+	- Removed various helper scripts (config.guess, config.rpath...),
+	now installed by bootstrap in `build-aux'.
+	- Moved aclocal.m4 to acinclude.m4 (aclocal.m4 is now generated).
+	- Makefile in non-recursive style.
+	- Updated INSTALL.REPO (INSTALL is now a symlink to
+	gnulib/doc/INSTALL, original INSTALL file moved to INSTALL.extra)
+	- Added (empty) THANKS, AUTHORS files.
+	- Added a document on the usage of automake in groff in
+	doc/automake.pdf.
+
+	Additional features:
+	- Out-of-source build is supported.
+	- Parallel build is possible (make -j).
+	- Automatic targets from Automake: `make dist', `make distcheck'.
+	- 'make check' is available for automatic testing, gdiffmk's test
+	was plugged to this target.
+	- Auto-detect if make has builtin variable `RM'.
+
+2015-01-14  Ingo Schwarze  <schwarze@openbsd.org>
+
+	Fix Savannah bug #43905.
+
+	* src/libs/libgroff/glyphuni.cpp (glyph_to_unicode_list),
+	* src/libs/libgroff/uniglyph.cpp (unicode_to_glyph_list): Remove
+	double entries for `rk', `lk', `lt', `rt', `rb', and `lb'.
+
+2014-12-16  Werner LEMBERG  <wl@gnu.org>
+
+	Update Unicode-to-Unicode mapping to version 7.0.0.
+
+	* src/libs/libgroff/make-uniuni: Update emitted copyright.
+
+	* src/libs/libgroff/uniuni.cpp: Regenerated.
+
+2014-11-29  Werner LEMBERG  <wl@gnu.org>
+
+	Fix previous commit.
+
+	We forgot to test whether the patch works if compiling from
+	scratch...
+
+	Problem reported by Bertrand Garrigues
+	<bertrand.garrigues@laposte.net>.
+
+	* src/include/lib.h (interpret_lf_args, normalize_for_lf): Move
+	declarations to...
+	* src/include/lf.h: This new file.
+
+	* src/libs/libgroff/lf.cpp, src/preproc/pic/pic.h,
+	src/preproc/preconv/preconv.cpp, src/preproc/refer/refer.h,
+	src/preproc/soelim/soelim.cpp, src/preproc/tbl/table.h: Include
+	`lf.h'.
+	Make `lib.h' the first included header file.
+
+	* src/preproc/eqn/eqn.h: Don't include `stringclass.h'.
+	* src/preproc/eqn/main.cpp: Include `stringclass.h' and `lf.h'.
+
+	* src/roff/groff/groff.cpp: Make `lib.h' the first included header
+	file.
+
+2014-11-10  Eli Zaretskii  <eliz@gnu.org>
+
+	Improve native Windows port.
+
+	This patch fixes two issues.
+
+	  . Handle backslashes in `.lf' arguments for MSDOS and Windows.
+	  . Fix file name quoting for the groff pipeline.
+
+	* src/preproc/soelim/soelim.cpp (do_file):
+	* src/preproc/refer/refer.cpp (do_file):
+	* src/preproc/preconv/preconv.cpp (do_file):
+	* src/preproc/pic/main.cpp (do_file):
+	* src/preproc/eqn/main.cpp (do_file): Call `normalize_for_lf' to
+	convert backslashes in the file name being processed to forward
+	slashes.
+
+	* src/include/lib.h (normalize_for_lf): Add prototype.
+
+	* src/preproc/eqn/eqn.h:
+	* src/preproc/pic/pic.h:
+	* src/preproc/refer/refer.h:
+	* src/preproc/tbl/table.h: Include stringclass.h before lib.h.
+
+	* src/libs/libgroff/lf.cpp (normalize_for_lf): New function.
+
+	* src/roff/groff/groff.cpp: Include stringclass.h before lib.h.
+	(append_arg_to_string) [_WIN32 && !__CYGWIN__]: Use only "..." for
+	quoting in native Windows builds.
+
+2014-11-18  Deri James  <deri@chuzzlewit.myzen.co.uk>
+
+	My commit '3fe78135c9fe666dadffde2a822b0535d8db6feb' introduced
+	problem in subroutine `TextWid'.  Octal char `\nnn' returns width of
+	4 char string rather than width of single character.
+
+	* src/devices/gropdf/gropdf.pl: Change `TextWid' to recognise octal
+	escaped characters (\nnn).
+
+2014-11-07  Deri James  <deri@chuzzlewit.myzen.co.uk>
+
+	See bug #43555.
+
+	* src/devices/gropdf/gropdf.pl: Correct Date Format.
+
 2014-11-04  Werner LEMBERG  <wl@gnu.org>
 
 	* src/libs/gnulib/*: Regenerate autotool files.
diff -Nuar groff-1.22.3.old/config.guess groff-1.22.3/config.guess
--- groff-1.22.3.old/config.guess	2014-11-04 10:38:35.140525060 +0200
+++ groff-1.22.3/config.guess	1970-01-01 02:00:00.000000000 +0200
@@ -1,1420 +0,0 @@
-#! /bin/sh
-# Attempt to guess a canonical system name.
-#   Copyright 1992-2014 Free Software Foundation, Inc.
-
-timestamp='2014-03-23'
-
-# This file is free software; you can redistribute it and/or modify it
-# under the terms of the GNU General Public License as published by
-# the Free Software Foundation; either version 3 of the License, or
-# (at your option) any later version.
-#
-# This program is distributed in the hope that it will be useful, but
-# WITHOUT ANY WARRANTY; without even the implied warranty of
-# MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the GNU
-# General Public License for more details.
-#
-# You should have received a copy of the GNU General Public License
-# along with this program; if not, see <http://www.gnu.org/licenses/>.
-#
-# As a special exception to the GNU General Public License, if you
-# distribute this file as part of a program that contains a
-# configuration script generated by Autoconf, you may include it under
-# the same distribution terms that you use for the rest of that
-# program.  This Exception is an additional permission under section 7
-# of the GNU General Public License, version 3 ("GPLv3").
-#
-# Originally written by Per Bothner.
-#
-# You can get the latest version of this script from:
-# http://git.savannah.gnu.org/gitweb/?p=config.git;a=blob_plain;f=config.guess;hb=HEAD
-#
-# Please send patches with a ChangeLog entry to config-patches@gnu.org.
-
-
-me=`echo "$0" | sed -e 's,.*/,,'`
-
-usage="\
-Usage: $0 [OPTION]
-
-Output the configuration name of the system \`$me' is run on.
-
-Operation modes:
-  -h, --help         print this help, then exit
-  -t, --time-stamp   print date of last modification, then exit
-  -v, --version      print version number, then exit
-
-Report bugs and patches to <config-patches@gnu.org>."
-
-version="\
-GNU config.guess ($timestamp)
-
-Originally written by Per Bothner.
-Copyright 1992-2014 Free Software Foundation, Inc.
-
-This is free software; see the source for copying conditions.  There is NO
-warranty; not even for MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE."
-
-help="
-Try \`$me --help' for more information."
-
-# Parse command line
-while test $# -gt 0 ; do
-  case $1 in
-    --time-stamp | --time* | -t )
-       echo "$timestamp" ; exit ;;
-    --version | -v )
-       echo "$version" ; exit ;;
-    --help | --h* | -h )
-       echo "$usage"; exit ;;
-    -- )     # Stop option processing
-       shift; break ;;
-    - )	# Use stdin as input.
-       break ;;
-    -* )
-       echo "$me: invalid option $1$help" >&2
-       exit 1 ;;
-    * )
-       break ;;
-  esac
-done
-
-if test $# != 0; then
-  echo "$me: too many arguments$help" >&2
-  exit 1
-fi
-
-trap 'exit 1' 1 2 15
-
-# CC_FOR_BUILD -- compiler used by this script. Note that the use of a
-# compiler to aid in system detection is discouraged as it requires
-# temporary files to be created and, as you can see below, it is a
-# headache to deal with in a portable fashion.
-
-# Historically, `CC_FOR_BUILD' used to be named `HOST_CC'. We still
-# use `HOST_CC' if defined, but it is deprecated.
-
-# Portable tmp directory creation inspired by the Autoconf team.
-
-set_cc_for_build='
-trap "exitcode=\$?; (rm -f \$tmpfiles 2>/dev/null; rmdir \$tmp 2>/dev/null) && exit \$exitcode" 0 ;
-trap "rm -f \$tmpfiles 2>/dev/null; rmdir \$tmp 2>/dev/null; exit 1" 1 2 13 15 ;
-: ${TMPDIR=/tmp} ;
- { tmp=`(umask 077 && mktemp -d "$TMPDIR/cgXXXXXX") 2>/dev/null` && test -n "$tmp" && test -d "$tmp" ; } ||
- { test -n "$RANDOM" && tmp=$TMPDIR/cg$$-$RANDOM && (umask 077 && mkdir $tmp) ; } ||
- { tmp=$TMPDIR/cg-$$ && (umask 077 && mkdir $tmp) && echo "Warning: creating insecure temp directory" >&2 ; } ||
- { echo "$me: cannot create a temporary directory in $TMPDIR" >&2 ; exit 1 ; } ;
-dummy=$tmp/dummy ;
-tmpfiles="$dummy.c $dummy.o $dummy.rel $dummy" ;
-case $CC_FOR_BUILD,$HOST_CC,$CC in
- ,,)    echo "int x;" > $dummy.c ;
-	for c in cc gcc c89 c99 ; do
-	  if ($c -c -o $dummy.o $dummy.c) >/dev/null 2>&1 ; then
-	     CC_FOR_BUILD="$c"; break ;
-	  fi ;
-	done ;
-	if test x"$CC_FOR_BUILD" = x ; then
-	  CC_FOR_BUILD=no_compiler_found ;
-	fi
-	;;
- ,,*)   CC_FOR_BUILD=$CC ;;
- ,*,*)  CC_FOR_BUILD=$HOST_CC ;;
-esac ; set_cc_for_build= ;'
-
-# This is needed to find uname on a Pyramid OSx when run in the BSD universe.
-# (ghazi@noc.rutgers.edu 1994-08-24)
-if (test -f /.attbin/uname) >/dev/null 2>&1 ; then
-	PATH=$PATH:/.attbin ; export PATH
-fi
-
-UNAME_MACHINE=`(uname -m) 2>/dev/null` || UNAME_MACHINE=unknown
-UNAME_RELEASE=`(uname -r) 2>/dev/null` || UNAME_RELEASE=unknown
-UNAME_SYSTEM=`(uname -s) 2>/dev/null`  || UNAME_SYSTEM=unknown
-UNAME_VERSION=`(uname -v) 2>/dev/null` || UNAME_VERSION=unknown
-
-case "${UNAME_SYSTEM}" in
-Linux|GNU|GNU/*)
-	# If the system lacks a compiler, then just pick glibc.
-	# We could probably try harder.
-	LIBC=gnu
-
-	eval $set_cc_for_build
-	cat <<-EOF > $dummy.c
-	#include <features.h>
-	#if defined(__UCLIBC__)
-	LIBC=uclibc
-	#elif defined(__dietlibc__)
-	LIBC=dietlibc
-	#else
-	LIBC=gnu
-	#endif
-	EOF
-	eval `$CC_FOR_BUILD -E $dummy.c 2>/dev/null | grep '^LIBC' | sed 's, ,,g'`
-	;;
-esac
-
-# Note: order is significant - the case branches are not exclusive.
-
-case "${UNAME_MACHINE}:${UNAME_SYSTEM}:${UNAME_RELEASE}:${UNAME_VERSION}" in
-    *:NetBSD:*:*)
-	# NetBSD (nbsd) targets should (where applicable) match one or
-	# more of the tuples: *-*-netbsdelf*, *-*-netbsdaout*,
-	# *-*-netbsdecoff* and *-*-netbsd*.  For targets that recently
-	# switched to ELF, *-*-netbsd* would select the old
-	# object file format.  This provides both forward
-	# compatibility and a consistent mechanism for selecting the
-	# object file format.
-	#
-	# Note: NetBSD doesn't particularly care about the vendor
-	# portion of the name.  We always set it to "unknown".
-	sysctl="sysctl -n hw.machine_arch"
-	UNAME_MACHINE_ARCH=`(/sbin/$sysctl 2>/dev/null || \
-	    /usr/sbin/$sysctl 2>/dev/null || echo unknown)`
-	case "${UNAME_MACHINE_ARCH}" in
-	    armeb) machine=armeb-unknown ;;
-	    arm*) machine=arm-unknown ;;
-	    sh3el) machine=shl-unknown ;;
-	    sh3eb) machine=sh-unknown ;;
-	    sh5el) machine=sh5le-unknown ;;
-	    *) machine=${UNAME_MACHINE_ARCH}-unknown ;;
-	esac
-	# The Operating System including object format, if it has switched
-	# to ELF recently, or will in the future.
-	case "${UNAME_MACHINE_ARCH}" in
-	    arm*|i386|m68k|ns32k|sh3*|sparc|vax)
-		eval $set_cc_for_build
-		if echo __ELF__ | $CC_FOR_BUILD -E - 2>/dev/null \
-			| grep -q __ELF__
-		then
-		    # Once all utilities can be ECOFF (netbsdecoff) or a.out (netbsdaout).
-		    # Return netbsd for either.  FIX?
-		    os=netbsd
-		else
-		    os=netbsdelf
-		fi
-		;;
-	    *)
-		os=netbsd
-		;;
-	esac
-	# The OS release
-	# Debian GNU/NetBSD machines have a different userland, and
-	# thus, need a distinct triplet. However, they do not need
-	# kernel version information, so it can be replaced with a
-	# suitable tag, in the style of linux-gnu.
-	case "${UNAME_VERSION}" in
-	    Debian*)
-		release='-gnu'
-		;;
-	    *)
-		release=`echo ${UNAME_RELEASE}|sed -e 's/[-_].*/\./'`
-		;;
-	esac
-	# Since CPU_TYPE-MANUFACTURER-KERNEL-OPERATING_SYSTEM:
-	# contains redundant information, the shorter form:
-	# CPU_TYPE-MANUFACTURER-OPERATING_SYSTEM is used.
-	echo "${machine}-${os}${release}"
-	exit ;;
-    *:Bitrig:*:*)
-	UNAME_MACHINE_ARCH=`arch | sed 's/Bitrig.//'`
-	echo ${UNAME_MACHINE_ARCH}-unknown-bitrig${UNAME_RELEASE}
-	exit ;;
-    *:OpenBSD:*:*)
-	UNAME_MACHINE_ARCH=`arch | sed 's/OpenBSD.//'`
-	echo ${UNAME_MACHINE_ARCH}-unknown-openbsd${UNAME_RELEASE}
-	exit ;;
-    *:ekkoBSD:*:*)
-	echo ${UNAME_MACHINE}-unknown-ekkobsd${UNAME_RELEASE}
-	exit ;;
-    *:SolidBSD:*:*)
-	echo ${UNAME_MACHINE}-unknown-solidbsd${UNAME_RELEASE}
-	exit ;;
-    macppc:MirBSD:*:*)
-	echo powerpc-unknown-mirbsd${UNAME_RELEASE}
-	exit ;;
-    *:MirBSD:*:*)
-	echo ${UNAME_MACHINE}-unknown-mirbsd${UNAME_RELEASE}
-	exit ;;
-    alpha:OSF1:*:*)
-	case $UNAME_RELEASE in
-	*4.0)
-		UNAME_RELEASE=`/usr/sbin/sizer -v | awk '{print $3}'`
-		;;
-	*5.*)
-		UNAME_RELEASE=`/usr/sbin/sizer -v | awk '{print $4}'`
-		;;
-	esac
-	# According to Compaq, /usr/sbin/psrinfo has been available on
-	# OSF/1 and Tru64 systems produced since 1995.  I hope that
-	# covers most systems running today.  This code pipes the CPU
-	# types through head -n 1, so we only detect the type of CPU 0.
-	ALPHA_CPU_TYPE=`/usr/sbin/psrinfo -v | sed -n -e 's/^  The alpha \(.*\) processor.*$/\1/p' | head -n 1`
-	case "$ALPHA_CPU_TYPE" in
-	    "EV4 (21064)")
-		UNAME_MACHINE="alpha" ;;
-	    "EV4.5 (21064)")
-		UNAME_MACHINE="alpha" ;;
-	    "LCA4 (21066/21068)")
-		UNAME_MACHINE="alpha" ;;
-	    "EV5 (21164)")
-		UNAME_MACHINE="alphaev5" ;;
-	    "EV5.6 (21164A)")
-		UNAME_MACHINE="alphaev56" ;;
-	    "EV5.6 (21164PC)")
-		UNAME_MACHINE="alphapca56" ;;
-	    "EV5.7 (21164PC)")
-		UNAME_MACHINE="alphapca57" ;;
-	    "EV6 (21264)")
-		UNAME_MACHINE="alphaev6" ;;
-	    "EV6.7 (21264A)")
-		UNAME_MACHINE="alphaev67" ;;
-	    "EV6.8CB (21264C)")
-		UNAME_MACHINE="alphaev68" ;;
-	    "EV6.8AL (21264B)")
-		UNAME_MACHINE="alphaev68" ;;
-	    "EV6.8CX (21264D)")
-		UNAME_MACHINE="alphaev68" ;;
-	    "EV6.9A (21264/EV69A)")
-		UNAME_MACHINE="alphaev69" ;;
-	    "EV7 (21364)")
-		UNAME_MACHINE="alphaev7" ;;
-	    "EV7.9 (21364A)")
-		UNAME_MACHINE="alphaev79" ;;
-	esac
-	# A Pn.n version is a patched version.
-	# A Vn.n version is a released version.
-	# A Tn.n version is a released field test version.
-	# A Xn.n version is an unreleased experimental baselevel.
-	# 1.2 uses "1.2" for uname -r.
-	echo ${UNAME_MACHINE}-dec-osf`echo ${UNAME_RELEASE} | sed -e 's/^[PVTX]//' | tr 'ABCDEFGHIJKLMNOPQRSTUVWXYZ' 'abcdefghijklmnopqrstuvwxyz'`
-	# Reset EXIT trap before exiting to avoid spurious non-zero exit code.
-	exitcode=$?
-	trap '' 0
-	exit $exitcode ;;
-    Alpha\ *:Windows_NT*:*)
-	# How do we know it's Interix rather than the generic POSIX subsystem?
-	# Should we change UNAME_MACHINE based on the output of uname instead
-	# of the specific Alpha model?
-	echo alpha-pc-interix
-	exit ;;
-    21064:Windows_NT:50:3)
-	echo alpha-dec-winnt3.5
-	exit ;;
-    Amiga*:UNIX_System_V:4.0:*)
-	echo m68k-unknown-sysv4
-	exit ;;
-    *:[Aa]miga[Oo][Ss]:*:*)
-	echo ${UNAME_MACHINE}-unknown-amigaos
-	exit ;;
-    *:[Mm]orph[Oo][Ss]:*:*)
-	echo ${UNAME_MACHINE}-unknown-morphos
-	exit ;;
-    *:OS/390:*:*)
-	echo i370-ibm-openedition
-	exit ;;
-    *:z/VM:*:*)
-	echo s390-ibm-zvmoe
-	exit ;;
-    *:OS400:*:*)
-	echo powerpc-ibm-os400
-	exit ;;
-    arm:RISC*:1.[012]*:*|arm:riscix:1.[012]*:*)
-	echo arm-acorn-riscix${UNAME_RELEASE}
-	exit ;;
-    arm*:riscos:*:*|arm*:RISCOS:*:*)
-	echo arm-unknown-riscos
-	exit ;;
-    SR2?01:HI-UX/MPP:*:* | SR8000:HI-UX/MPP:*:*)
-	echo hppa1.1-hitachi-hiuxmpp
-	exit ;;
-    Pyramid*:OSx*:*:* | MIS*:OSx*:*:* | MIS*:SMP_DC-OSx*:*:*)
-	# akee@wpdis03.wpafb.af.mil (Earle F. Ake) contributed MIS and NILE.
-	if test "`(/bin/universe) 2>/dev/null`" = att ; then
-		echo pyramid-pyramid-sysv3
-	else
-		echo pyramid-pyramid-bsd
-	fi
-	exit ;;
-    NILE*:*:*:dcosx)
-	echo pyramid-pyramid-svr4
-	exit ;;
-    DRS?6000:unix:4.0:6*)
-	echo sparc-icl-nx6
-	exit ;;
-    DRS?6000:UNIX_SV:4.2*:7* | DRS?6000:isis:4.2*:7*)
-	case `/usr/bin/uname -p` in
-	    sparc) echo sparc-icl-nx7; exit ;;
-	esac ;;
-    s390x:SunOS:*:*)
-	echo ${UNAME_MACHINE}-ibm-solaris2`echo ${UNAME_RELEASE}|sed -e 's/[^.]*//'`
-	exit ;;
-    sun4H:SunOS:5.*:*)
-	echo sparc-hal-solaris2`echo ${UNAME_RELEASE}|sed -e 's/[^.]*//'`
-	exit ;;
-    sun4*:SunOS:5.*:* | tadpole*:SunOS:5.*:*)
-	echo sparc-sun-solaris2`echo ${UNAME_RELEASE}|sed -e 's/[^.]*//'`
-	exit ;;
-    i86pc:AuroraUX:5.*:* | i86xen:AuroraUX:5.*:*)
-	echo i386-pc-auroraux${UNAME_RELEASE}
-	exit ;;
-    i86pc:SunOS:5.*:* | i86xen:SunOS:5.*:*)
-	eval $set_cc_for_build
-	SUN_ARCH="i386"
-	# If there is a compiler, see if it is configured for 64-bit objects.
-	# Note that the Sun cc does not turn __LP64__ into 1 like gcc does.
-	# This test works for both compilers.
-	if [ "$CC_FOR_BUILD" != 'no_compiler_found' ]; then
-	    if (echo '#ifdef __amd64'; echo IS_64BIT_ARCH; echo '#endif') | \
-		(CCOPTS= $CC_FOR_BUILD -E - 2>/dev/null) | \
-		grep IS_64BIT_ARCH >/dev/null
-	    then
-		SUN_ARCH="x86_64"
-	    fi
-	fi
-	echo ${SUN_ARCH}-pc-solaris2`echo ${UNAME_RELEASE}|sed -e 's/[^.]*//'`
-	exit ;;
-    sun4*:SunOS:6*:*)
-	# According to config.sub, this is the proper way to canonicalize
-	# SunOS6.  Hard to guess exactly what SunOS6 will be like, but
-	# it's likely to be more like Solaris than SunOS4.
-	echo sparc-sun-solaris3`echo ${UNAME_RELEASE}|sed -e 's/[^.]*//'`
-	exit ;;
-    sun4*:SunOS:*:*)
-	case "`/usr/bin/arch -k`" in
-	    Series*|S4*)
-		UNAME_RELEASE=`uname -v`
-		;;
-	esac
-	# Japanese Language versions have a version number like `4.1.3-JL'.
-	echo sparc-sun-sunos`echo ${UNAME_RELEASE}|sed -e 's/-/_/'`
-	exit ;;
-    sun3*:SunOS:*:*)
-	echo m68k-sun-sunos${UNAME_RELEASE}
-	exit ;;
-    sun*:*:4.2BSD:*)
-	UNAME_RELEASE=`(sed 1q /etc/motd | awk '{print substr($5,1,3)}') 2>/dev/null`
-	test "x${UNAME_RELEASE}" = "x" && UNAME_RELEASE=3
-	case "`/bin/arch`" in
-	    sun3)
-		echo m68k-sun-sunos${UNAME_RELEASE}
-		;;
-	    sun4)
-		echo sparc-sun-sunos${UNAME_RELEASE}
-		;;
-	esac
-	exit ;;
-    aushp:SunOS:*:*)
-	echo sparc-auspex-sunos${UNAME_RELEASE}
-	exit ;;
-    # The situation for MiNT is a little confusing.  The machine name
-    # can be virtually everything (everything which is not
-    # "atarist" or "atariste" at least should have a processor
-    # > m68000).  The system name ranges from "MiNT" over "FreeMiNT"
-    # to the lowercase version "mint" (or "freemint").  Finally
-    # the system name "TOS" denotes a system which is actually not
-    # MiNT.  But MiNT is downward compatible to TOS, so this should
-    # be no problem.
-    atarist[e]:*MiNT:*:* | atarist[e]:*mint:*:* | atarist[e]:*TOS:*:*)
-	echo m68k-atari-mint${UNAME_RELEASE}
-	exit ;;
-    atari*:*MiNT:*:* | atari*:*mint:*:* | atarist[e]:*TOS:*:*)
-	echo m68k-atari-mint${UNAME_RELEASE}
-	exit ;;
-    *falcon*:*MiNT:*:* | *falcon*:*mint:*:* | *falcon*:*TOS:*:*)
-	echo m68k-atari-mint${UNAME_RELEASE}
-	exit ;;
-    milan*:*MiNT:*:* | milan*:*mint:*:* | *milan*:*TOS:*:*)
-	echo m68k-milan-mint${UNAME_RELEASE}
-	exit ;;
-    hades*:*MiNT:*:* | hades*:*mint:*:* | *hades*:*TOS:*:*)
-	echo m68k-hades-mint${UNAME_RELEASE}
-	exit ;;
-    *:*MiNT:*:* | *:*mint:*:* | *:*TOS:*:*)
-	echo m68k-unknown-mint${UNAME_RELEASE}
-	exit ;;
-    m68k:machten:*:*)
-	echo m68k-apple-machten${UNAME_RELEASE}
-	exit ;;
-    powerpc:machten:*:*)
-	echo powerpc-apple-machten${UNAME_RELEASE}
-	exit ;;
-    RISC*:Mach:*:*)
-	echo mips-dec-mach_bsd4.3
-	exit ;;
-    RISC*:ULTRIX:*:*)
-	echo mips-dec-ultrix${UNAME_RELEASE}
-	exit ;;
-    VAX*:ULTRIX*:*:*)
-	echo vax-dec-ultrix${UNAME_RELEASE}
-	exit ;;
-    2020:CLIX:*:* | 2430:CLIX:*:*)
-	echo clipper-intergraph-clix${UNAME_RELEASE}
-	exit ;;
-    mips:*:*:UMIPS | mips:*:*:RISCos)
-	eval $set_cc_for_build
-	sed 's/^	//' << EOF >$dummy.c
-#ifdef __cplusplus
-#include <stdio.h>  /* for printf() prototype */
-	int main (int argc, char *argv[]) {
-#else
-	int main (argc, argv) int argc; char *argv[]; {
-#endif
-	#if defined (host_mips) && defined (MIPSEB)
-	#if defined (SYSTYPE_SYSV)
-	  printf ("mips-mips-riscos%ssysv\n", argv[1]); exit (0);
-	#endif
-	#if defined (SYSTYPE_SVR4)
-	  printf ("mips-mips-riscos%ssvr4\n", argv[1]); exit (0);
-	#endif
-	#if defined (SYSTYPE_BSD43) || defined(SYSTYPE_BSD)
-	  printf ("mips-mips-riscos%sbsd\n", argv[1]); exit (0);
-	#endif
-	#endif
-	  exit (-1);
-	}
-EOF
-	$CC_FOR_BUILD -o $dummy $dummy.c &&
-	  dummyarg=`echo "${UNAME_RELEASE}" | sed -n 's/\([0-9]*\).*/\1/p'` &&
-	  SYSTEM_NAME=`$dummy $dummyarg` &&
-	    { echo "$SYSTEM_NAME"; exit; }
-	echo mips-mips-riscos${UNAME_RELEASE}
-	exit ;;
-    Motorola:PowerMAX_OS:*:*)
-	echo powerpc-motorola-powermax
-	exit ;;
-    Motorola:*:4.3:PL8-*)
-	echo powerpc-harris-powermax
-	exit ;;
-    Night_Hawk:*:*:PowerMAX_OS | Synergy:PowerMAX_OS:*:*)
-	echo powerpc-harris-powermax
-	exit ;;
-    Night_Hawk:Power_UNIX:*:*)
-	echo powerpc-harris-powerunix
-	exit ;;
-    m88k:CX/UX:7*:*)
-	echo m88k-harris-cxux7
-	exit ;;
-    m88k:*:4*:R4*)
-	echo m88k-motorola-sysv4
-	exit ;;
-    m88k:*:3*:R3*)
-	echo m88k-motorola-sysv3
-	exit ;;
-    AViiON:dgux:*:*)
-	# DG/UX returns AViiON for all architectures
-	UNAME_PROCESSOR=`/usr/bin/uname -p`
-	if [ $UNAME_PROCESSOR = mc88100 ] || [ $UNAME_PROCESSOR = mc88110 ]
-	then
-	    if [ ${TARGET_BINARY_INTERFACE}x = m88kdguxelfx ] || \
-	       [ ${TARGET_BINARY_INTERFACE}x = x ]
-	    then
-		echo m88k-dg-dgux${UNAME_RELEASE}
-	    else
-		echo m88k-dg-dguxbcs${UNAME_RELEASE}
-	    fi
-	else
-	    echo i586-dg-dgux${UNAME_RELEASE}
-	fi
-	exit ;;
-    M88*:DolphinOS:*:*)	# DolphinOS (SVR3)
-	echo m88k-dolphin-sysv3
-	exit ;;
-    M88*:*:R3*:*)
-	# Delta 88k system running SVR3
-	echo m88k-motorola-sysv3
-	exit ;;
-    XD88*:*:*:*) # Tektronix XD88 system running UTekV (SVR3)
-	echo m88k-tektronix-sysv3
-	exit ;;
-    Tek43[0-9][0-9]:UTek:*:*) # Tektronix 4300 system running UTek (BSD)
-	echo m68k-tektronix-bsd
-	exit ;;
-    *:IRIX*:*:*)
-	echo mips-sgi-irix`echo ${UNAME_RELEASE}|sed -e 's/-/_/g'`
-	exit ;;
-    ????????:AIX?:[12].1:2)   # AIX 2.2.1 or AIX 2.1.1 is RT/PC AIX.
-	echo romp-ibm-aix     # uname -m gives an 8 hex-code CPU id
-	exit ;;               # Note that: echo "'`uname -s`'" gives 'AIX '
-    i*86:AIX:*:*)
-	echo i386-ibm-aix
-	exit ;;
-    ia64:AIX:*:*)
-	if [ -x /usr/bin/oslevel ] ; then
-		IBM_REV=`/usr/bin/oslevel`
-	else
-		IBM_REV=${UNAME_VERSION}.${UNAME_RELEASE}
-	fi
-	echo ${UNAME_MACHINE}-ibm-aix${IBM_REV}
-	exit ;;
-    *:AIX:2:3)
-	if grep bos325 /usr/include/stdio.h >/dev/null 2>&1; then
-		eval $set_cc_for_build
-		sed 's/^		//' << EOF >$dummy.c
-		#include <sys/systemcfg.h>
-
-		main()
-			{
-			if (!__power_pc())
-				exit(1);
-			puts("powerpc-ibm-aix3.2.5");
-			exit(0);
-			}
-EOF
-		if $CC_FOR_BUILD -o $dummy $dummy.c && SYSTEM_NAME=`$dummy`
-		then
-			echo "$SYSTEM_NAME"
-		else
-			echo rs6000-ibm-aix3.2.5
-		fi
-	elif grep bos324 /usr/include/stdio.h >/dev/null 2>&1; then
-		echo rs6000-ibm-aix3.2.4
-	else
-		echo rs6000-ibm-aix3.2
-	fi
-	exit ;;
-    *:AIX:*:[4567])
-	IBM_CPU_ID=`/usr/sbin/lsdev -C -c processor -S available | sed 1q | awk '{ print $1 }'`
-	if /usr/sbin/lsattr -El ${IBM_CPU_ID} | grep ' POWER' >/dev/null 2>&1; then
-		IBM_ARCH=rs6000
-	else
-		IBM_ARCH=powerpc
-	fi
-	if [ -x /usr/bin/oslevel ] ; then
-		IBM_REV=`/usr/bin/oslevel`
-	else
-		IBM_REV=${UNAME_VERSION}.${UNAME_RELEASE}
-	fi
-	echo ${IBM_ARCH}-ibm-aix${IBM_REV}
-	exit ;;
-    *:AIX:*:*)
-	echo rs6000-ibm-aix
-	exit ;;
-    ibmrt:4.4BSD:*|romp-ibm:BSD:*)
-	echo romp-ibm-bsd4.4
-	exit ;;
-    ibmrt:*BSD:*|romp-ibm:BSD:*)            # covers RT/PC BSD and
-	echo romp-ibm-bsd${UNAME_RELEASE}   # 4.3 with uname added to
-	exit ;;                             # report: romp-ibm BSD 4.3
-    *:BOSX:*:*)
-	echo rs6000-bull-bosx
-	exit ;;
-    DPX/2?00:B.O.S.:*:*)
-	echo m68k-bull-sysv3
-	exit ;;
-    9000/[34]??:4.3bsd:1.*:*)
-	echo m68k-hp-bsd
-	exit ;;
-    hp300:4.4BSD:*:* | 9000/[34]??:4.3bsd:2.*:*)
-	echo m68k-hp-bsd4.4
-	exit ;;
-    9000/[34678]??:HP-UX:*:*)
-	HPUX_REV=`echo ${UNAME_RELEASE}|sed -e 's/[^.]*.[0B]*//'`
-	case "${UNAME_MACHINE}" in
-	    9000/31? )            HP_ARCH=m68000 ;;
-	    9000/[34]?? )         HP_ARCH=m68k ;;
-	    9000/[678][0-9][0-9])
-		if [ -x /usr/bin/getconf ]; then
-		    sc_cpu_version=`/usr/bin/getconf SC_CPU_VERSION 2>/dev/null`
-		    sc_kernel_bits=`/usr/bin/getconf SC_KERNEL_BITS 2>/dev/null`
-		    case "${sc_cpu_version}" in
-		      523) HP_ARCH="hppa1.0" ;; # CPU_PA_RISC1_0
-		      528) HP_ARCH="hppa1.1" ;; # CPU_PA_RISC1_1
-		      532)                      # CPU_PA_RISC2_0
-			case "${sc_kernel_bits}" in
-			  32) HP_ARCH="hppa2.0n" ;;
-			  64) HP_ARCH="hppa2.0w" ;;
-			  '') HP_ARCH="hppa2.0" ;;   # HP-UX 10.20
-			esac ;;
-		    esac
-		fi
-		if [ "${HP_ARCH}" = "" ]; then
-		    eval $set_cc_for_build
-		    sed 's/^		//' << EOF >$dummy.c
-
-		#define _HPUX_SOURCE
-		#include <stdlib.h>
-		#include <unistd.h>
-
-		int main ()
-		{
-		#if defined(_SC_KERNEL_BITS)
-		    long bits = sysconf(_SC_KERNEL_BITS);
-		#endif
-		    long cpu  = sysconf (_SC_CPU_VERSION);
-
-		    switch (cpu)
-			{
-			case CPU_PA_RISC1_0: puts ("hppa1.0"); break;
-			case CPU_PA_RISC1_1: puts ("hppa1.1"); break;
-			case CPU_PA_RISC2_0:
-		#if defined(_SC_KERNEL_BITS)
-			    switch (bits)
-				{
-				case 64: puts ("hppa2.0w"); break;
-				case 32: puts ("hppa2.0n"); break;
-				default: puts ("hppa2.0"); break;
-				} break;
-		#else  /* !defined(_SC_KERNEL_BITS) */
-			    puts ("hppa2.0"); break;
-		#endif
-			default: puts ("hppa1.0"); break;
-			}
-		    exit (0);
-		}
-EOF
-		    (CCOPTS= $CC_FOR_BUILD -o $dummy $dummy.c 2>/dev/null) && HP_ARCH=`$dummy`
-		    test -z "$HP_ARCH" && HP_ARCH=hppa
-		fi ;;
-	esac
-	if [ ${HP_ARCH} = "hppa2.0w" ]
-	then
-	    eval $set_cc_for_build
-
-	    # hppa2.0w-hp-hpux* has a 64-bit kernel and a compiler generating
-	    # 32-bit code.  hppa64-hp-hpux* has the same kernel and a compiler
-	    # generating 64-bit code.  GNU and HP use different nomenclature:
-	    #
-	    # $ CC_FOR_BUILD=cc ./config.guess
-	    # => hppa2.0w-hp-hpux11.23
-	    # $ CC_FOR_BUILD="cc +DA2.0w" ./config.guess
-	    # => hppa64-hp-hpux11.23
-
-	    if echo __LP64__ | (CCOPTS= $CC_FOR_BUILD -E - 2>/dev/null) |
-		grep -q __LP64__
-	    then
-		HP_ARCH="hppa2.0w"
-	    else
-		HP_ARCH="hppa64"
-	    fi
-	fi
-	echo ${HP_ARCH}-hp-hpux${HPUX_REV}
-	exit ;;
-    ia64:HP-UX:*:*)
-	HPUX_REV=`echo ${UNAME_RELEASE}|sed -e 's/[^.]*.[0B]*//'`
-	echo ia64-hp-hpux${HPUX_REV}
-	exit ;;
-    3050*:HI-UX:*:*)
-	eval $set_cc_for_build
-	sed 's/^	//' << EOF >$dummy.c
-	#include <unistd.h>
-	int
-	main ()
-	{
-	  long cpu = sysconf (_SC_CPU_VERSION);
-	  /* The order matters, because CPU_IS_HP_MC68K erroneously returns
-	     true for CPU_PA_RISC1_0.  CPU_IS_PA_RISC returns correct
-	     results, however.  */
-	  if (CPU_IS_PA_RISC (cpu))
-	    {
-	      switch (cpu)
-		{
-		  case CPU_PA_RISC1_0: puts ("hppa1.0-hitachi-hiuxwe2"); break;
-		  case CPU_PA_RISC1_1: puts ("hppa1.1-hitachi-hiuxwe2"); break;
-		  case CPU_PA_RISC2_0: puts ("hppa2.0-hitachi-hiuxwe2"); break;
-		  default: puts ("hppa-hitachi-hiuxwe2"); break;
-		}
-	    }
-	  else if (CPU_IS_HP_MC68K (cpu))
-	    puts ("m68k-hitachi-hiuxwe2");
-	  else puts ("unknown-hitachi-hiuxwe2");
-	  exit (0);
-	}
-EOF
-	$CC_FOR_BUILD -o $dummy $dummy.c && SYSTEM_NAME=`$dummy` &&
-		{ echo "$SYSTEM_NAME"; exit; }
-	echo unknown-hitachi-hiuxwe2
-	exit ;;
-    9000/7??:4.3bsd:*:* | 9000/8?[79]:4.3bsd:*:* )
-	echo hppa1.1-hp-bsd
-	exit ;;
-    9000/8??:4.3bsd:*:*)
-	echo hppa1.0-hp-bsd
-	exit ;;
-    *9??*:MPE/iX:*:* | *3000*:MPE/iX:*:*)
-	echo hppa1.0-hp-mpeix
-	exit ;;
-    hp7??:OSF1:*:* | hp8?[79]:OSF1:*:* )
-	echo hppa1.1-hp-osf
-	exit ;;
-    hp8??:OSF1:*:*)
-	echo hppa1.0-hp-osf
-	exit ;;
-    i*86:OSF1:*:*)
-	if [ -x /usr/sbin/sysversion ] ; then
-	    echo ${UNAME_MACHINE}-unknown-osf1mk
-	else
-	    echo ${UNAME_MACHINE}-unknown-osf1
-	fi
-	exit ;;
-    parisc*:Lites*:*:*)
-	echo hppa1.1-hp-lites
-	exit ;;
-    C1*:ConvexOS:*:* | convex:ConvexOS:C1*:*)
-	echo c1-convex-bsd
-	exit ;;
-    C2*:ConvexOS:*:* | convex:ConvexOS:C2*:*)
-	if getsysinfo -f scalar_acc
-	then echo c32-convex-bsd
-	else echo c2-convex-bsd
-	fi
-	exit ;;
-    C34*:ConvexOS:*:* | convex:ConvexOS:C34*:*)
-	echo c34-convex-bsd
-	exit ;;
-    C38*:ConvexOS:*:* | convex:ConvexOS:C38*:*)
-	echo c38-convex-bsd
-	exit ;;
-    C4*:ConvexOS:*:* | convex:ConvexOS:C4*:*)
-	echo c4-convex-bsd
-	exit ;;
-    CRAY*Y-MP:*:*:*)
-	echo ymp-cray-unicos${UNAME_RELEASE} | sed -e 's/\.[^.]*$/.X/'
-	exit ;;
-    CRAY*[A-Z]90:*:*:*)
-	echo ${UNAME_MACHINE}-cray-unicos${UNAME_RELEASE} \
-	| sed -e 's/CRAY.*\([A-Z]90\)/\1/' \
-	      -e y/ABCDEFGHIJKLMNOPQRSTUVWXYZ/abcdefghijklmnopqrstuvwxyz/ \
-	      -e 's/\.[^.]*$/.X/'
-	exit ;;
-    CRAY*TS:*:*:*)
-	echo t90-cray-unicos${UNAME_RELEASE} | sed -e 's/\.[^.]*$/.X/'
-	exit ;;
-    CRAY*T3E:*:*:*)
-	echo alphaev5-cray-unicosmk${UNAME_RELEASE} | sed -e 's/\.[^.]*$/.X/'
-	exit ;;
-    CRAY*SV1:*:*:*)
-	echo sv1-cray-unicos${UNAME_RELEASE} | sed -e 's/\.[^.]*$/.X/'
-	exit ;;
-    *:UNICOS/mp:*:*)
-	echo craynv-cray-unicosmp${UNAME_RELEASE} | sed -e 's/\.[^.]*$/.X/'
-	exit ;;
-    F30[01]:UNIX_System_V:*:* | F700:UNIX_System_V:*:*)
-	FUJITSU_PROC=`uname -m | tr 'ABCDEFGHIJKLMNOPQRSTUVWXYZ' 'abcdefghijklmnopqrstuvwxyz'`
-	FUJITSU_SYS=`uname -p | tr 'ABCDEFGHIJKLMNOPQRSTUVWXYZ' 'abcdefghijklmnopqrstuvwxyz' | sed -e 's/\///'`
-	FUJITSU_REL=`echo ${UNAME_RELEASE} | sed -e 's/ /_/'`
-	echo "${FUJITSU_PROC}-fujitsu-${FUJITSU_SYS}${FUJITSU_REL}"
-	exit ;;
-    5000:UNIX_System_V:4.*:*)
-	FUJITSU_SYS=`uname -p | tr 'ABCDEFGHIJKLMNOPQRSTUVWXYZ' 'abcdefghijklmnopqrstuvwxyz' | sed -e 's/\///'`
-	FUJITSU_REL=`echo ${UNAME_RELEASE} | tr 'ABCDEFGHIJKLMNOPQRSTUVWXYZ' 'abcdefghijklmnopqrstuvwxyz' | sed -e 's/ /_/'`
-	echo "sparc-fujitsu-${FUJITSU_SYS}${FUJITSU_REL}"
-	exit ;;
-    i*86:BSD/386:*:* | i*86:BSD/OS:*:* | *:Ascend\ Embedded/OS:*:*)
-	echo ${UNAME_MACHINE}-pc-bsdi${UNAME_RELEASE}
-	exit ;;
-    sparc*:BSD/OS:*:*)
-	echo sparc-unknown-bsdi${UNAME_RELEASE}
-	exit ;;
-    *:BSD/OS:*:*)
-	echo ${UNAME_MACHINE}-unknown-bsdi${UNAME_RELEASE}
-	exit ;;
-    *:FreeBSD:*:*)
-	UNAME_PROCESSOR=`/usr/bin/uname -p`
-	case ${UNAME_PROCESSOR} in
-	    amd64)
-		echo x86_64-unknown-freebsd`echo ${UNAME_RELEASE}|sed -e 's/[-(].*//'` ;;
-	    *)
-		echo ${UNAME_PROCESSOR}-unknown-freebsd`echo ${UNAME_RELEASE}|sed -e 's/[-(].*//'` ;;
-	esac
-	exit ;;
-    i*:CYGWIN*:*)
-	echo ${UNAME_MACHINE}-pc-cygwin
-	exit ;;
-    *:MINGW64*:*)
-	echo ${UNAME_MACHINE}-pc-mingw64
-	exit ;;
-    *:MINGW*:*)
-	echo ${UNAME_MACHINE}-pc-mingw32
-	exit ;;
-    *:MSYS*:*)
-	echo ${UNAME_MACHINE}-pc-msys
-	exit ;;
-    i*:windows32*:*)
-	# uname -m includes "-pc" on this system.
-	echo ${UNAME_MACHINE}-mingw32
-	exit ;;
-    i*:PW*:*)
-	echo ${UNAME_MACHINE}-pc-pw32
-	exit ;;
-    *:Interix*:*)
-	case ${UNAME_MACHINE} in
-	    x86)
-		echo i586-pc-interix${UNAME_RELEASE}
-		exit ;;
-	    authenticamd | genuineintel | EM64T)
-		echo x86_64-unknown-interix${UNAME_RELEASE}
-		exit ;;
-	    IA64)
-		echo ia64-unknown-interix${UNAME_RELEASE}
-		exit ;;
-	esac ;;
-    [345]86:Windows_95:* | [345]86:Windows_98:* | [345]86:Windows_NT:*)
-	echo i${UNAME_MACHINE}-pc-mks
-	exit ;;
-    8664:Windows_NT:*)
-	echo x86_64-pc-mks
-	exit ;;
-    i*:Windows_NT*:* | Pentium*:Windows_NT*:*)
-	# How do we know it's Interix rather than the generic POSIX subsystem?
-	# It also conflicts with pre-2.0 versions of AT&T UWIN. Should we
-	# UNAME_MACHINE based on the output of uname instead of i386?
-	echo i586-pc-interix
-	exit ;;
-    i*:UWIN*:*)
-	echo ${UNAME_MACHINE}-pc-uwin
-	exit ;;
-    amd64:CYGWIN*:*:* | x86_64:CYGWIN*:*:*)
-	echo x86_64-unknown-cygwin
-	exit ;;
-    p*:CYGWIN*:*)
-	echo powerpcle-unknown-cygwin
-	exit ;;
-    prep*:SunOS:5.*:*)
-	echo powerpcle-unknown-solaris2`echo ${UNAME_RELEASE}|sed -e 's/[^.]*//'`
-	exit ;;
-    *:GNU:*:*)
-	# the GNU system
-	echo `echo ${UNAME_MACHINE}|sed -e 's,[-/].*$,,'`-unknown-${LIBC}`echo ${UNAME_RELEASE}|sed -e 's,/.*$,,'`
-	exit ;;
-    *:GNU/*:*:*)
-	# other systems with GNU libc and userland
-	echo ${UNAME_MACHINE}-unknown-`echo ${UNAME_SYSTEM} | sed 's,^[^/]*/,,' | tr '[A-Z]' '[a-z]'``echo ${UNAME_RELEASE}|sed -e 's/[-(].*//'`-${LIBC}
-	exit ;;
-    i*86:Minix:*:*)
-	echo ${UNAME_MACHINE}-pc-minix
-	exit ;;
-    aarch64:Linux:*:*)
-	echo ${UNAME_MACHINE}-unknown-linux-${LIBC}
-	exit ;;
-    aarch64_be:Linux:*:*)
-	UNAME_MACHINE=aarch64_be
-	echo ${UNAME_MACHINE}-unknown-linux-${LIBC}
-	exit ;;
-    alpha:Linux:*:*)
-	case `sed -n '/^cpu model/s/^.*: \(.*\)/\1/p' < /proc/cpuinfo` in
-	  EV5)   UNAME_MACHINE=alphaev5 ;;
-	  EV56)  UNAME_MACHINE=alphaev56 ;;
-	  PCA56) UNAME_MACHINE=alphapca56 ;;
-	  PCA57) UNAME_MACHINE=alphapca56 ;;
-	  EV6)   UNAME_MACHINE=alphaev6 ;;
-	  EV67)  UNAME_MACHINE=alphaev67 ;;
-	  EV68*) UNAME_MACHINE=alphaev68 ;;
-	esac
-	objdump --private-headers /bin/sh | grep -q ld.so.1
-	if test "$?" = 0 ; then LIBC="gnulibc1" ; fi
-	echo ${UNAME_MACHINE}-unknown-linux-${LIBC}
-	exit ;;
-    arc:Linux:*:* | arceb:Linux:*:*)
-	echo ${UNAME_MACHINE}-unknown-linux-${LIBC}
-	exit ;;
-    arm*:Linux:*:*)
-	eval $set_cc_for_build
-	if echo __ARM_EABI__ | $CC_FOR_BUILD -E - 2>/dev/null \
-	    | grep -q __ARM_EABI__
-	then
-	    echo ${UNAME_MACHINE}-unknown-linux-${LIBC}
-	else
-	    if echo __ARM_PCS_VFP | $CC_FOR_BUILD -E - 2>/dev/null \
-		| grep -q __ARM_PCS_VFP
-	    then
-		echo ${UNAME_MACHINE}-unknown-linux-${LIBC}eabi
-	    else
-		echo ${UNAME_MACHINE}-unknown-linux-${LIBC}eabihf
-	    fi
-	fi
-	exit ;;
-    avr32*:Linux:*:*)
-	echo ${UNAME_MACHINE}-unknown-linux-${LIBC}
-	exit ;;
-    cris:Linux:*:*)
-	echo ${UNAME_MACHINE}-axis-linux-${LIBC}
-	exit ;;
-    crisv32:Linux:*:*)
-	echo ${UNAME_MACHINE}-axis-linux-${LIBC}
-	exit ;;
-    frv:Linux:*:*)
-	echo ${UNAME_MACHINE}-unknown-linux-${LIBC}
-	exit ;;
-    hexagon:Linux:*:*)
-	echo ${UNAME_MACHINE}-unknown-linux-${LIBC}
-	exit ;;
-    i*86:Linux:*:*)
-	echo ${UNAME_MACHINE}-pc-linux-${LIBC}
-	exit ;;
-    ia64:Linux:*:*)
-	echo ${UNAME_MACHINE}-unknown-linux-${LIBC}
-	exit ;;
-    m32r*:Linux:*:*)
-	echo ${UNAME_MACHINE}-unknown-linux-${LIBC}
-	exit ;;
-    m68*:Linux:*:*)
-	echo ${UNAME_MACHINE}-unknown-linux-${LIBC}
-	exit ;;
-    mips:Linux:*:* | mips64:Linux:*:*)
-	eval $set_cc_for_build
-	sed 's/^	//' << EOF >$dummy.c
-	#undef CPU
-	#undef ${UNAME_MACHINE}
-	#undef ${UNAME_MACHINE}el
-	#if defined(__MIPSEL__) || defined(__MIPSEL) || defined(_MIPSEL) || defined(MIPSEL)
-	CPU=${UNAME_MACHINE}el
-	#else
-	#if defined(__MIPSEB__) || defined(__MIPSEB) || defined(_MIPSEB) || defined(MIPSEB)
-	CPU=${UNAME_MACHINE}
-	#else
-	CPU=
-	#endif
-	#endif
-EOF
-	eval `$CC_FOR_BUILD -E $dummy.c 2>/dev/null | grep '^CPU'`
-	test x"${CPU}" != x && { echo "${CPU}-unknown-linux-${LIBC}"; exit; }
-	;;
-    openrisc*:Linux:*:*)
-	echo or1k-unknown-linux-${LIBC}
-	exit ;;
-    or32:Linux:*:* | or1k*:Linux:*:*)
-	echo ${UNAME_MACHINE}-unknown-linux-${LIBC}
-	exit ;;
-    padre:Linux:*:*)
-	echo sparc-unknown-linux-${LIBC}
-	exit ;;
-    parisc64:Linux:*:* | hppa64:Linux:*:*)
-	echo hppa64-unknown-linux-${LIBC}
-	exit ;;
-    parisc:Linux:*:* | hppa:Linux:*:*)
-	# Look for CPU level
-	case `grep '^cpu[^a-z]*:' /proc/cpuinfo 2>/dev/null | cut -d' ' -f2` in
-	  PA7*) echo hppa1.1-unknown-linux-${LIBC} ;;
-	  PA8*) echo hppa2.0-unknown-linux-${LIBC} ;;
-	  *)    echo hppa-unknown-linux-${LIBC} ;;
-	esac
-	exit ;;
-    ppc64:Linux:*:*)
-	echo powerpc64-unknown-linux-${LIBC}
-	exit ;;
-    ppc:Linux:*:*)
-	echo powerpc-unknown-linux-${LIBC}
-	exit ;;
-    ppc64le:Linux:*:*)
-	echo powerpc64le-unknown-linux-${LIBC}
-	exit ;;
-    ppcle:Linux:*:*)
-	echo powerpcle-unknown-linux-${LIBC}
-	exit ;;
-    s390:Linux:*:* | s390x:Linux:*:*)
-	echo ${UNAME_MACHINE}-ibm-linux-${LIBC}
-	exit ;;
-    sh64*:Linux:*:*)
-	echo ${UNAME_MACHINE}-unknown-linux-${LIBC}
-	exit ;;
-    sh*:Linux:*:*)
-	echo ${UNAME_MACHINE}-unknown-linux-${LIBC}
-	exit ;;
-    sparc:Linux:*:* | sparc64:Linux:*:*)
-	echo ${UNAME_MACHINE}-unknown-linux-${LIBC}
-	exit ;;
-    tile*:Linux:*:*)
-	echo ${UNAME_MACHINE}-unknown-linux-${LIBC}
-	exit ;;
-    vax:Linux:*:*)
-	echo ${UNAME_MACHINE}-dec-linux-${LIBC}
-	exit ;;
-    x86_64:Linux:*:*)
-	echo ${UNAME_MACHINE}-unknown-linux-${LIBC}
-	exit ;;
-    xtensa*:Linux:*:*)
-	echo ${UNAME_MACHINE}-unknown-linux-${LIBC}
-	exit ;;
-    i*86:DYNIX/ptx:4*:*)
-	# ptx 4.0 does uname -s correctly, with DYNIX/ptx in there.
-	# earlier versions are messed up and put the nodename in both
-	# sysname and nodename.
-	echo i386-sequent-sysv4
-	exit ;;
-    i*86:UNIX_SV:4.2MP:2.*)
-	# Unixware is an offshoot of SVR4, but it has its own version
-	# number series starting with 2...
-	# I am not positive that other SVR4 systems won't match this,
-	# I just have to hope.  -- rms.
-	# Use sysv4.2uw... so that sysv4* matches it.
-	echo ${UNAME_MACHINE}-pc-sysv4.2uw${UNAME_VERSION}
-	exit ;;
-    i*86:OS/2:*:*)
-	# If we were able to find `uname', then EMX Unix compatibility
-	# is probably installed.
-	echo ${UNAME_MACHINE}-pc-os2-emx
-	exit ;;
-    i*86:XTS-300:*:STOP)
-	echo ${UNAME_MACHINE}-unknown-stop
-	exit ;;
-    i*86:atheos:*:*)
-	echo ${UNAME_MACHINE}-unknown-atheos
-	exit ;;
-    i*86:syllable:*:*)
-	echo ${UNAME_MACHINE}-pc-syllable
-	exit ;;
-    i*86:LynxOS:2.*:* | i*86:LynxOS:3.[01]*:* | i*86:LynxOS:4.[02]*:*)
-	echo i386-unknown-lynxos${UNAME_RELEASE}
-	exit ;;
-    i*86:*DOS:*:*)
-	echo ${UNAME_MACHINE}-pc-msdosdjgpp
-	exit ;;
-    i*86:*:4.*:* | i*86:SYSTEM_V:4.*:*)
-	UNAME_REL=`echo ${UNAME_RELEASE} | sed 's/\/MP$//'`
-	if grep Novell /usr/include/link.h >/dev/null 2>/dev/null; then
-		echo ${UNAME_MACHINE}-univel-sysv${UNAME_REL}
-	else
-		echo ${UNAME_MACHINE}-pc-sysv${UNAME_REL}
-	fi
-	exit ;;
-    i*86:*:5:[678]*)
-	# UnixWare 7.x, OpenUNIX and OpenServer 6.
-	case `/bin/uname -X | grep "^Machine"` in
-	    *486*)	     UNAME_MACHINE=i486 ;;
-	    *Pentium)	     UNAME_MACHINE=i586 ;;
-	    *Pent*|*Celeron) UNAME_MACHINE=i686 ;;
-	esac
-	echo ${UNAME_MACHINE}-unknown-sysv${UNAME_RELEASE}${UNAME_SYSTEM}${UNAME_VERSION}
-	exit ;;
-    i*86:*:3.2:*)
-	if test -f /usr/options/cb.name; then
-		UNAME_REL=`sed -n 's/.*Version //p' </usr/options/cb.name`
-		echo ${UNAME_MACHINE}-pc-isc$UNAME_REL
-	elif /bin/uname -X 2>/dev/null >/dev/null ; then
-		UNAME_REL=`(/bin/uname -X|grep Release|sed -e 's/.*= //')`
-		(/bin/uname -X|grep i80486 >/dev/null) && UNAME_MACHINE=i486
-		(/bin/uname -X|grep '^Machine.*Pentium' >/dev/null) \
-			&& UNAME_MACHINE=i586
-		(/bin/uname -X|grep '^Machine.*Pent *II' >/dev/null) \
-			&& UNAME_MACHINE=i686
-		(/bin/uname -X|grep '^Machine.*Pentium Pro' >/dev/null) \
-			&& UNAME_MACHINE=i686
-		echo ${UNAME_MACHINE}-pc-sco$UNAME_REL
-	else
-		echo ${UNAME_MACHINE}-pc-sysv32
-	fi
-	exit ;;
-    pc:*:*:*)
-	# Left here for compatibility:
-	# uname -m prints for DJGPP always 'pc', but it prints nothing about
-	# the processor, so we play safe by assuming i586.
-	# Note: whatever this is, it MUST be the same as what config.sub
-	# prints for the "djgpp" host, or else GDB configury will decide that
-	# this is a cross-build.
-	echo i586-pc-msdosdjgpp
-	exit ;;
-    Intel:Mach:3*:*)
-	echo i386-pc-mach3
-	exit ;;
-    paragon:*:*:*)
-	echo i860-intel-osf1
-	exit ;;
-    i860:*:4.*:*) # i860-SVR4
-	if grep Stardent /usr/include/sys/uadmin.h >/dev/null 2>&1 ; then
-	  echo i860-stardent-sysv${UNAME_RELEASE} # Stardent Vistra i860-SVR4
-	else # Add other i860-SVR4 vendors below as they are discovered.
-	  echo i860-unknown-sysv${UNAME_RELEASE}  # Unknown i860-SVR4
-	fi
-	exit ;;
-    mini*:CTIX:SYS*5:*)
-	# "miniframe"
-	echo m68010-convergent-sysv
-	exit ;;
-    mc68k:UNIX:SYSTEM5:3.51m)
-	echo m68k-convergent-sysv
-	exit ;;
-    M680?0:D-NIX:5.3:*)
-	echo m68k-diab-dnix
-	exit ;;
-    M68*:*:R3V[5678]*:*)
-	test -r /sysV68 && { echo 'm68k-motorola-sysv'; exit; } ;;
-    3[345]??:*:4.0:3.0 | 3[34]??A:*:4.0:3.0 | 3[34]??,*:*:4.0:3.0 | 3[34]??/*:*:4.0:3.0 | 4400:*:4.0:3.0 | 4850:*:4.0:3.0 | SKA40:*:4.0:3.0 | SDS2:*:4.0:3.0 | SHG2:*:4.0:3.0 | S7501*:*:4.0:3.0)
-	OS_REL=''
-	test -r /etc/.relid \
-	&& OS_REL=.`sed -n 's/[^ ]* [^ ]* \([0-9][0-9]\).*/\1/p' < /etc/.relid`
-	/bin/uname -p 2>/dev/null | grep 86 >/dev/null \
-	  && { echo i486-ncr-sysv4.3${OS_REL}; exit; }
-	/bin/uname -p 2>/dev/null | /bin/grep entium >/dev/null \
-	  && { echo i586-ncr-sysv4.3${OS_REL}; exit; } ;;
-    3[34]??:*:4.0:* | 3[34]??,*:*:4.0:*)
-	/bin/uname -p 2>/dev/null | grep 86 >/dev/null \
-	  && { echo i486-ncr-sysv4; exit; } ;;
-    NCR*:*:4.2:* | MPRAS*:*:4.2:*)
-	OS_REL='.3'
-	test -r /etc/.relid \
-	    && OS_REL=.`sed -n 's/[^ ]* [^ ]* \([0-9][0-9]\).*/\1/p' < /etc/.relid`
-	/bin/uname -p 2>/dev/null | grep 86 >/dev/null \
-	    && { echo i486-ncr-sysv4.3${OS_REL}; exit; }
-	/bin/uname -p 2>/dev/null | /bin/grep entium >/dev/null \
-	    && { echo i586-ncr-sysv4.3${OS_REL}; exit; }
-	/bin/uname -p 2>/dev/null | /bin/grep pteron >/dev/null \
-	    && { echo i586-ncr-sysv4.3${OS_REL}; exit; } ;;
-    m68*:LynxOS:2.*:* | m68*:LynxOS:3.0*:*)
-	echo m68k-unknown-lynxos${UNAME_RELEASE}
-	exit ;;
-    mc68030:UNIX_System_V:4.*:*)
-	echo m68k-atari-sysv4
-	exit ;;
-    TSUNAMI:LynxOS:2.*:*)
-	echo sparc-unknown-lynxos${UNAME_RELEASE}
-	exit ;;
-    rs6000:LynxOS:2.*:*)
-	echo rs6000-unknown-lynxos${UNAME_RELEASE}
-	exit ;;
-    PowerPC:LynxOS:2.*:* | PowerPC:LynxOS:3.[01]*:* | PowerPC:LynxOS:4.[02]*:*)
-	echo powerpc-unknown-lynxos${UNAME_RELEASE}
-	exit ;;
-    SM[BE]S:UNIX_SV:*:*)
-	echo mips-dde-sysv${UNAME_RELEASE}
-	exit ;;
-    RM*:ReliantUNIX-*:*:*)
-	echo mips-sni-sysv4
-	exit ;;
-    RM*:SINIX-*:*:*)
-	echo mips-sni-sysv4
-	exit ;;
-    *:SINIX-*:*:*)
-	if uname -p 2>/dev/null >/dev/null ; then
-		UNAME_MACHINE=`(uname -p) 2>/dev/null`
-		echo ${UNAME_MACHINE}-sni-sysv4
-	else
-		echo ns32k-sni-sysv
-	fi
-	exit ;;
-    PENTIUM:*:4.0*:*)	# Unisys `ClearPath HMP IX 4000' SVR4/MP effort
-			# says <Richard.M.Bartel@ccMail.Census.GOV>
-	echo i586-unisys-sysv4
-	exit ;;
-    *:UNIX_System_V:4*:FTX*)
-	# From Gerald Hewes <hewes@openmarket.com>.
-	# How about differentiating between stratus architectures? -djm
-	echo hppa1.1-stratus-sysv4
-	exit ;;
-    *:*:*:FTX*)
-	# From seanf@swdc.stratus.com.
-	echo i860-stratus-sysv4
-	exit ;;
-    i*86:VOS:*:*)
-	# From Paul.Green@stratus.com.
-	echo ${UNAME_MACHINE}-stratus-vos
-	exit ;;
-    *:VOS:*:*)
-	# From Paul.Green@stratus.com.
-	echo hppa1.1-stratus-vos
-	exit ;;
-    mc68*:A/UX:*:*)
-	echo m68k-apple-aux${UNAME_RELEASE}
-	exit ;;
-    news*:NEWS-OS:6*:*)
-	echo mips-sony-newsos6
-	exit ;;
-    R[34]000:*System_V*:*:* | R4000:UNIX_SYSV:*:* | R*000:UNIX_SV:*:*)
-	if [ -d /usr/nec ]; then
-		echo mips-nec-sysv${UNAME_RELEASE}
-	else
-		echo mips-unknown-sysv${UNAME_RELEASE}
-	fi
-	exit ;;
-    BeBox:BeOS:*:*)	# BeOS running on hardware made by Be, PPC only.
-	echo powerpc-be-beos
-	exit ;;
-    BeMac:BeOS:*:*)	# BeOS running on Mac or Mac clone, PPC only.
-	echo powerpc-apple-beos
-	exit ;;
-    BePC:BeOS:*:*)	# BeOS running on Intel PC compatible.
-	echo i586-pc-beos
-	exit ;;
-    BePC:Haiku:*:*)	# Haiku running on Intel PC compatible.
-	echo i586-pc-haiku
-	exit ;;
-    x86_64:Haiku:*:*)
-	echo x86_64-unknown-haiku
-	exit ;;
-    SX-4:SUPER-UX:*:*)
-	echo sx4-nec-superux${UNAME_RELEASE}
-	exit ;;
-    SX-5:SUPER-UX:*:*)
-	echo sx5-nec-superux${UNAME_RELEASE}
-	exit ;;
-    SX-6:SUPER-UX:*:*)
-	echo sx6-nec-superux${UNAME_RELEASE}
-	exit ;;
-    SX-7:SUPER-UX:*:*)
-	echo sx7-nec-superux${UNAME_RELEASE}
-	exit ;;
-    SX-8:SUPER-UX:*:*)
-	echo sx8-nec-superux${UNAME_RELEASE}
-	exit ;;
-    SX-8R:SUPER-UX:*:*)
-	echo sx8r-nec-superux${UNAME_RELEASE}
-	exit ;;
-    Power*:Rhapsody:*:*)
-	echo powerpc-apple-rhapsody${UNAME_RELEASE}
-	exit ;;
-    *:Rhapsody:*:*)
-	echo ${UNAME_MACHINE}-apple-rhapsody${UNAME_RELEASE}
-	exit ;;
-    *:Darwin:*:*)
-	UNAME_PROCESSOR=`uname -p` || UNAME_PROCESSOR=unknown
-	eval $set_cc_for_build
-	if test "$UNAME_PROCESSOR" = unknown ; then
-	    UNAME_PROCESSOR=powerpc
-	fi
-	if test `echo "$UNAME_RELEASE" | sed -e 's/\..*//'` -le 10 ; then
-	    if [ "$CC_FOR_BUILD" != 'no_compiler_found' ]; then
-		if (echo '#ifdef __LP64__'; echo IS_64BIT_ARCH; echo '#endif') | \
-		    (CCOPTS= $CC_FOR_BUILD -E - 2>/dev/null) | \
-		    grep IS_64BIT_ARCH >/dev/null
-		then
-		    case $UNAME_PROCESSOR in
-			i386) UNAME_PROCESSOR=x86_64 ;;
-			powerpc) UNAME_PROCESSOR=powerpc64 ;;
-		    esac
-		fi
-	    fi
-	elif test "$UNAME_PROCESSOR" = i386 ; then
-	    # Avoid executing cc on OS X 10.9, as it ships with a stub
-	    # that puts up a graphical alert prompting to install
-	    # developer tools.  Any system running Mac OS X 10.7 or
-	    # later (Darwin 11 and later) is required to have a 64-bit
-	    # processor. This is not true of the ARM version of Darwin
-	    # that Apple uses in portable devices.
-	    UNAME_PROCESSOR=x86_64
-	fi
-	echo ${UNAME_PROCESSOR}-apple-darwin${UNAME_RELEASE}
-	exit ;;
-    *:procnto*:*:* | *:QNX:[0123456789]*:*)
-	UNAME_PROCESSOR=`uname -p`
-	if test "$UNAME_PROCESSOR" = "x86"; then
-		UNAME_PROCESSOR=i386
-		UNAME_MACHINE=pc
-	fi
-	echo ${UNAME_PROCESSOR}-${UNAME_MACHINE}-nto-qnx${UNAME_RELEASE}
-	exit ;;
-    *:QNX:*:4*)
-	echo i386-pc-qnx
-	exit ;;
-    NEO-?:NONSTOP_KERNEL:*:*)
-	echo neo-tandem-nsk${UNAME_RELEASE}
-	exit ;;
-    NSE-*:NONSTOP_KERNEL:*:*)
-	echo nse-tandem-nsk${UNAME_RELEASE}
-	exit ;;
-    NSR-?:NONSTOP_KERNEL:*:*)
-	echo nsr-tandem-nsk${UNAME_RELEASE}
-	exit ;;
-    *:NonStop-UX:*:*)
-	echo mips-compaq-nonstopux
-	exit ;;
-    BS2000:POSIX*:*:*)
-	echo bs2000-siemens-sysv
-	exit ;;
-    DS/*:UNIX_System_V:*:*)
-	echo ${UNAME_MACHINE}-${UNAME_SYSTEM}-${UNAME_RELEASE}
-	exit ;;
-    *:Plan9:*:*)
-	# "uname -m" is not consistent, so use $cputype instead. 386
-	# is converted to i386 for consistency with other x86
-	# operating systems.
-	if test "$cputype" = "386"; then
-	    UNAME_MACHINE=i386
-	else
-	    UNAME_MACHINE="$cputype"
-	fi
-	echo ${UNAME_MACHINE}-unknown-plan9
-	exit ;;
-    *:TOPS-10:*:*)
-	echo pdp10-unknown-tops10
-	exit ;;
-    *:TENEX:*:*)
-	echo pdp10-unknown-tenex
-	exit ;;
-    KS10:TOPS-20:*:* | KL10:TOPS-20:*:* | TYPE4:TOPS-20:*:*)
-	echo pdp10-dec-tops20
-	exit ;;
-    XKL-1:TOPS-20:*:* | TYPE5:TOPS-20:*:*)
-	echo pdp10-xkl-tops20
-	exit ;;
-    *:TOPS-20:*:*)
-	echo pdp10-unknown-tops20
-	exit ;;
-    *:ITS:*:*)
-	echo pdp10-unknown-its
-	exit ;;
-    SEI:*:*:SEIUX)
-	echo mips-sei-seiux${UNAME_RELEASE}
-	exit ;;
-    *:DragonFly:*:*)
-	echo ${UNAME_MACHINE}-unknown-dragonfly`echo ${UNAME_RELEASE}|sed -e 's/[-(].*//'`
-	exit ;;
-    *:*VMS:*:*)
-	UNAME_MACHINE=`(uname -p) 2>/dev/null`
-	case "${UNAME_MACHINE}" in
-	    A*) echo alpha-dec-vms ; exit ;;
-	    I*) echo ia64-dec-vms ; exit ;;
-	    V*) echo vax-dec-vms ; exit ;;
-	esac ;;
-    *:XENIX:*:SysV)
-	echo i386-pc-xenix
-	exit ;;
-    i*86:skyos:*:*)
-	echo ${UNAME_MACHINE}-pc-skyos`echo ${UNAME_RELEASE}` | sed -e 's/ .*$//'
-	exit ;;
-    i*86:rdos:*:*)
-	echo ${UNAME_MACHINE}-pc-rdos
-	exit ;;
-    i*86:AROS:*:*)
-	echo ${UNAME_MACHINE}-pc-aros
-	exit ;;
-    x86_64:VMkernel:*:*)
-	echo ${UNAME_MACHINE}-unknown-esx
-	exit ;;
-esac
-
-cat >&2 <<EOF
-$0: unable to guess system type
-
-This script, last modified $timestamp, has failed to recognize
-the operating system you are using. It is advised that you
-download the most up to date version of the config scripts from
-
-  http://git.savannah.gnu.org/gitweb/?p=config.git;a=blob_plain;f=config.guess;hb=HEAD
-and
-  http://git.savannah.gnu.org/gitweb/?p=config.git;a=blob_plain;f=config.sub;hb=HEAD
-
-If the version you run ($0) is already up to date, please
-send the following data and any information you think might be
-pertinent to <config-patches@gnu.org> in order to provide the needed
-information to handle your system.
-
-config.guess timestamp = $timestamp
-
-uname -m = `(uname -m) 2>/dev/null || echo unknown`
-uname -r = `(uname -r) 2>/dev/null || echo unknown`
-uname -s = `(uname -s) 2>/dev/null || echo unknown`
-uname -v = `(uname -v) 2>/dev/null || echo unknown`
-
-/usr/bin/uname -p = `(/usr/bin/uname -p) 2>/dev/null`
-/bin/uname -X     = `(/bin/uname -X) 2>/dev/null`
-
-hostinfo               = `(hostinfo) 2>/dev/null`
-/bin/universe          = `(/bin/universe) 2>/dev/null`
-/usr/bin/arch -k       = `(/usr/bin/arch -k) 2>/dev/null`
-/bin/arch              = `(/bin/arch) 2>/dev/null`
-/usr/bin/oslevel       = `(/usr/bin/oslevel) 2>/dev/null`
-/usr/convex/getsysinfo = `(/usr/convex/getsysinfo) 2>/dev/null`
-
-UNAME_MACHINE = ${UNAME_MACHINE}
-UNAME_RELEASE = ${UNAME_RELEASE}
-UNAME_SYSTEM  = ${UNAME_SYSTEM}
-UNAME_VERSION = ${UNAME_VERSION}
-EOF
-
-exit 1
-
-# Local variables:
-# eval: (add-hook 'write-file-hooks 'time-stamp)
-# time-stamp-start: "timestamp='"
-# time-stamp-format: "%:y-%02m-%02d"
-# time-stamp-end: "'"
-# End:
diff -Nuar groff-1.22.3.old/config.rpath groff-1.22.3/config.rpath
--- groff-1.22.3.old/config.rpath	2014-11-04 10:38:35.140525060 +0200
+++ groff-1.22.3/config.rpath	1970-01-01 02:00:00.000000000 +0200
@@ -1,684 +0,0 @@
-#! /bin/sh
-# Output a system dependent set of variables, describing how to set the
-# run time search path of shared libraries in an executable.
-#
-#   Copyright 1996-2014 Free Software Foundation, Inc.
-#   Taken from GNU libtool, 2001
-#   Originally by Gordon Matzigkeit <gord@gnu.ai.mit.edu>, 1996
-#
-#   This file is free software; the Free Software Foundation gives
-#   unlimited permission to copy and/or distribute it, with or without
-#   modifications, as long as this notice is preserved.
-#
-# The first argument passed to this file is the canonical host specification,
-#    CPU_TYPE-MANUFACTURER-OPERATING_SYSTEM
-# or
-#    CPU_TYPE-MANUFACTURER-KERNEL-OPERATING_SYSTEM
-# The environment variables CC, GCC, LDFLAGS, LD, with_gnu_ld
-# should be set by the caller.
-#
-# The set of defined variables is at the end of this script.
-
-# Known limitations:
-# - On IRIX 6.5 with CC="cc", the run time search patch must not be longer
-#   than 256 bytes, otherwise the compiler driver will dump core. The only
-#   known workaround is to choose shorter directory names for the build
-#   directory and/or the installation directory.
-
-# All known linkers require a '.a' archive for static linking (except MSVC,
-# which needs '.lib').
-libext=a
-shrext=.so
-
-host="$1"
-host_cpu=`echo "$host" | sed 's/^\([^-]*\)-\([^-]*\)-\(.*\)$/\1/'`
-host_vendor=`echo "$host" | sed 's/^\([^-]*\)-\([^-]*\)-\(.*\)$/\2/'`
-host_os=`echo "$host" | sed 's/^\([^-]*\)-\([^-]*\)-\(.*\)$/\3/'`
-
-# Code taken from libtool.m4's _LT_CC_BASENAME.
-
-for cc_temp in $CC""; do
-  case $cc_temp in
-    compile | *[\\/]compile | ccache | *[\\/]ccache ) ;;
-    distcc | *[\\/]distcc | purify | *[\\/]purify ) ;;
-    \-*) ;;
-    *) break;;
-  esac
-done
-cc_basename=`echo "$cc_temp" | sed -e 's%^.*/%%'`
-
-# Code taken from libtool.m4's _LT_COMPILER_PIC.
-
-wl=
-if test "$GCC" = yes; then
-  wl='-Wl,'
-else
-  case "$host_os" in
-    aix*)
-      wl='-Wl,'
-      ;;
-    mingw* | cygwin* | pw32* | os2* | cegcc*)
-      ;;
-    hpux9* | hpux10* | hpux11*)
-      wl='-Wl,'
-      ;;
-    irix5* | irix6* | nonstopux*)
-      wl='-Wl,'
-      ;;
-    linux* | k*bsd*-gnu | kopensolaris*-gnu)
-      case $cc_basename in
-        ecc*)
-          wl='-Wl,'
-          ;;
-        icc* | ifort*)
-          wl='-Wl,'
-          ;;
-        lf95*)
-          wl='-Wl,'
-          ;;
-        nagfor*)
-          wl='-Wl,-Wl,,'
-          ;;
-        pgcc* | pgf77* | pgf90* | pgf95* | pgfortran*)
-          wl='-Wl,'
-          ;;
-        ccc*)
-          wl='-Wl,'
-          ;;
-        xl* | bgxl* | bgf* | mpixl*)
-          wl='-Wl,'
-          ;;
-        como)
-          wl='-lopt='
-          ;;
-        *)
-          case `$CC -V 2>&1 | sed 5q` in
-            *Sun\ F* | *Sun*Fortran*)
-              wl=
-              ;;
-            *Sun\ C*)
-              wl='-Wl,'
-              ;;
-          esac
-          ;;
-      esac
-      ;;
-    newsos6)
-      ;;
-    *nto* | *qnx*)
-      ;;
-    osf3* | osf4* | osf5*)
-      wl='-Wl,'
-      ;;
-    rdos*)
-      ;;
-    solaris*)
-      case $cc_basename in
-        f77* | f90* | f95* | sunf77* | sunf90* | sunf95*)
-          wl='-Qoption ld '
-          ;;
-        *)
-          wl='-Wl,'
-          ;;
-      esac
-      ;;
-    sunos4*)
-      wl='-Qoption ld '
-      ;;
-    sysv4 | sysv4.2uw2* | sysv4.3*)
-      wl='-Wl,'
-      ;;
-    sysv4*MP*)
-      ;;
-    sysv5* | unixware* | sco3.2v5* | sco5v6* | OpenUNIX*)
-      wl='-Wl,'
-      ;;
-    unicos*)
-      wl='-Wl,'
-      ;;
-    uts4*)
-      ;;
-  esac
-fi
-
-# Code taken from libtool.m4's _LT_LINKER_SHLIBS.
-
-hardcode_libdir_flag_spec=
-hardcode_libdir_separator=
-hardcode_direct=no
-hardcode_minus_L=no
-
-case "$host_os" in
-  cygwin* | mingw* | pw32* | cegcc*)
-    # FIXME: the MSVC++ port hasn't been tested in a loooong time
-    # When not using gcc, we currently assume that we are using
-    # Microsoft Visual C++.
-    if test "$GCC" != yes; then
-      with_gnu_ld=no
-    fi
-    ;;
-  interix*)
-    # we just hope/assume this is gcc and not c89 (= MSVC++)
-    with_gnu_ld=yes
-    ;;
-  openbsd*)
-    with_gnu_ld=no
-    ;;
-esac
-
-ld_shlibs=yes
-if test "$with_gnu_ld" = yes; then
-  # Set some defaults for GNU ld with shared library support. These
-  # are reset later if shared libraries are not supported. Putting them
-  # here allows them to be overridden if necessary.
-  # Unlike libtool, we use -rpath here, not --rpath, since the documented
-  # option of GNU ld is called -rpath, not --rpath.
-  hardcode_libdir_flag_spec='${wl}-rpath ${wl}$libdir'
-  case "$host_os" in
-    aix[3-9]*)
-      # On AIX/PPC, the GNU linker is very broken
-      if test "$host_cpu" != ia64; then
-        ld_shlibs=no
-      fi
-      ;;
-    amigaos*)
-      case "$host_cpu" in
-        powerpc)
-          ;;
-        m68k)
-          hardcode_libdir_flag_spec='-L$libdir'
-          hardcode_minus_L=yes
-          ;;
-      esac
-      ;;
-    beos*)
-      if $LD --help 2>&1 | grep ': supported targets:.* elf' > /dev/null; then
-        :
-      else
-        ld_shlibs=no
-      fi
-      ;;
-    cygwin* | mingw* | pw32* | cegcc*)
-      # hardcode_libdir_flag_spec is actually meaningless, as there is
-      # no search path for DLLs.
-      hardcode_libdir_flag_spec='-L$libdir'
-      if $LD --help 2>&1 | grep 'auto-import' > /dev/null; then
-        :
-      else
-        ld_shlibs=no
-      fi
-      ;;
-    haiku*)
-      ;;
-    interix[3-9]*)
-      hardcode_direct=no
-      hardcode_libdir_flag_spec='${wl}-rpath,$libdir'
-      ;;
-    gnu* | linux* | tpf* | k*bsd*-gnu | kopensolaris*-gnu)
-      if $LD --help 2>&1 | grep ': supported targets:.* elf' > /dev/null; then
-        :
-      else
-        ld_shlibs=no
-      fi
-      ;;
-    netbsd*)
-      ;;
-    solaris*)
-      if $LD -v 2>&1 | grep 'BFD 2\.8' > /dev/null; then
-        ld_shlibs=no
-      elif $LD --help 2>&1 | grep ': supported targets:.* elf' > /dev/null; then
-        :
-      else
-        ld_shlibs=no
-      fi
-      ;;
-    sysv5* | sco3.2v5* | sco5v6* | unixware* | OpenUNIX*)
-      case `$LD -v 2>&1` in
-        *\ [01].* | *\ 2.[0-9].* | *\ 2.1[0-5].*)
-          ld_shlibs=no
-          ;;
-        *)
-          if $LD --help 2>&1 | grep ': supported targets:.* elf' > /dev/null; then
-            hardcode_libdir_flag_spec='`test -z "$SCOABSPATH" && echo ${wl}-rpath,$libdir`'
-          else
-            ld_shlibs=no
-          fi
-          ;;
-      esac
-      ;;
-    sunos4*)
-      hardcode_direct=yes
-      ;;
-    *)
-      if $LD --help 2>&1 | grep ': supported targets:.* elf' > /dev/null; then
-        :
-      else
-        ld_shlibs=no
-      fi
-      ;;
-  esac
-  if test "$ld_shlibs" = no; then
-    hardcode_libdir_flag_spec=
-  fi
-else
-  case "$host_os" in
-    aix3*)
-      # Note: this linker hardcodes the directories in LIBPATH if there
-      # are no directories specified by -L.
-      hardcode_minus_L=yes
-      if test "$GCC" = yes; then
-        # Neither direct hardcoding nor static linking is supported with a
-        # broken collect2.
-        hardcode_direct=unsupported
-      fi
-      ;;
-    aix[4-9]*)
-      if test "$host_cpu" = ia64; then
-        # On IA64, the linker does run time linking by default, so we don't
-        # have to do anything special.
-        aix_use_runtimelinking=no
-      else
-        aix_use_runtimelinking=no
-        # Test if we are trying to use run time linking or normal
-        # AIX style linking. If -brtl is somewhere in LDFLAGS, we
-        # need to do runtime linking.
-        case $host_os in aix4.[23]|aix4.[23].*|aix[5-9]*)
-          for ld_flag in $LDFLAGS; do
-            if (test $ld_flag = "-brtl" || test $ld_flag = "-Wl,-brtl"); then
-              aix_use_runtimelinking=yes
-              break
-            fi
-          done
-          ;;
-        esac
-      fi
-      hardcode_direct=yes
-      hardcode_libdir_separator=':'
-      if test "$GCC" = yes; then
-        case $host_os in aix4.[012]|aix4.[012].*)
-          collect2name=`${CC} -print-prog-name=collect2`
-          if test -f "$collect2name" && \
-            strings "$collect2name" | grep resolve_lib_name >/dev/null
-          then
-            # We have reworked collect2
-            :
-          else
-            # We have old collect2
-            hardcode_direct=unsupported
-            hardcode_minus_L=yes
-            hardcode_libdir_flag_spec='-L$libdir'
-            hardcode_libdir_separator=
-          fi
-          ;;
-        esac
-      fi
-      # Begin _LT_AC_SYS_LIBPATH_AIX.
-      echo 'int main () { return 0; }' > conftest.c
-      ${CC} ${LDFLAGS} conftest.c -o conftest
-      aix_libpath=`dump -H conftest 2>/dev/null | sed -n -e '/Import File Strings/,/^$/ { /^0/ { s/^0  *\(.*\)$/\1/; p; }
-}'`
-      if test -z "$aix_libpath"; then
-        aix_libpath=`dump -HX64 conftest 2>/dev/null | sed -n -e '/Import File Strings/,/^$/ { /^0/ { s/^0  *\(.*\)$/\1/; p; }
-}'`
-      fi
-      if test -z "$aix_libpath"; then
-        aix_libpath="/usr/lib:/lib"
-      fi
-      rm -f conftest.c conftest
-      # End _LT_AC_SYS_LIBPATH_AIX.
-      if test "$aix_use_runtimelinking" = yes; then
-        hardcode_libdir_flag_spec='${wl}-blibpath:$libdir:'"$aix_libpath"
-      else
-        if test "$host_cpu" = ia64; then
-          hardcode_libdir_flag_spec='${wl}-R $libdir:/usr/lib:/lib'
-        else
-          hardcode_libdir_flag_spec='${wl}-blibpath:$libdir:'"$aix_libpath"
-        fi
-      fi
-      ;;
-    amigaos*)
-      case "$host_cpu" in
-        powerpc)
-          ;;
-        m68k)
-          hardcode_libdir_flag_spec='-L$libdir'
-          hardcode_minus_L=yes
-          ;;
-      esac
-      ;;
-    bsdi[45]*)
-      ;;
-    cygwin* | mingw* | pw32* | cegcc*)
-      # When not using gcc, we currently assume that we are using
-      # Microsoft Visual C++.
-      # hardcode_libdir_flag_spec is actually meaningless, as there is
-      # no search path for DLLs.
-      hardcode_libdir_flag_spec=' '
-      libext=lib
-      ;;
-    darwin* | rhapsody*)
-      hardcode_direct=no
-      if { case $cc_basename in ifort*) true;; *) test "$GCC" = yes;; esac; }; then
-        :
-      else
-        ld_shlibs=no
-      fi
-      ;;
-    dgux*)
-      hardcode_libdir_flag_spec='-L$libdir'
-      ;;
-    freebsd2.[01]*)
-      hardcode_direct=yes
-      hardcode_minus_L=yes
-      ;;
-    freebsd* | dragonfly*)
-      hardcode_libdir_flag_spec='-R$libdir'
-      hardcode_direct=yes
-      ;;
-    hpux9*)
-      hardcode_libdir_flag_spec='${wl}+b ${wl}$libdir'
-      hardcode_libdir_separator=:
-      hardcode_direct=yes
-      # hardcode_minus_L: Not really in the search PATH,
-      # but as the default location of the library.
-      hardcode_minus_L=yes
-      ;;
-    hpux10*)
-      if test "$with_gnu_ld" = no; then
-        hardcode_libdir_flag_spec='${wl}+b ${wl}$libdir'
-        hardcode_libdir_separator=:
-        hardcode_direct=yes
-        # hardcode_minus_L: Not really in the search PATH,
-        # but as the default location of the library.
-        hardcode_minus_L=yes
-      fi
-      ;;
-    hpux11*)
-      if test "$with_gnu_ld" = no; then
-        hardcode_libdir_flag_spec='${wl}+b ${wl}$libdir'
-        hardcode_libdir_separator=:
-        case $host_cpu in
-          hppa*64*|ia64*)
-            hardcode_direct=no
-            ;;
-          *)
-            hardcode_direct=yes
-            # hardcode_minus_L: Not really in the search PATH,
-            # but as the default location of the library.
-            hardcode_minus_L=yes
-            ;;
-        esac
-      fi
-      ;;
-    irix5* | irix6* | nonstopux*)
-      hardcode_libdir_flag_spec='${wl}-rpath ${wl}$libdir'
-      hardcode_libdir_separator=:
-      ;;
-    netbsd*)
-      hardcode_libdir_flag_spec='-R$libdir'
-      hardcode_direct=yes
-      ;;
-    newsos6)
-      hardcode_direct=yes
-      hardcode_libdir_flag_spec='${wl}-rpath ${wl}$libdir'
-      hardcode_libdir_separator=:
-      ;;
-    *nto* | *qnx*)
-      ;;
-    openbsd*)
-      if test -f /usr/libexec/ld.so; then
-        hardcode_direct=yes
-        if test -z "`echo __ELF__ | $CC -E - | grep __ELF__`" || test "$host_os-$host_cpu" = "openbsd2.8-powerpc"; then
-          hardcode_libdir_flag_spec='${wl}-rpath,$libdir'
-        else
-          case "$host_os" in
-            openbsd[01].* | openbsd2.[0-7] | openbsd2.[0-7].*)
-              hardcode_libdir_flag_spec='-R$libdir'
-              ;;
-            *)
-              hardcode_libdir_flag_spec='${wl}-rpath,$libdir'
-              ;;
-          esac
-        fi
-      else
-        ld_shlibs=no
-      fi
-      ;;
-    os2*)
-      hardcode_libdir_flag_spec='-L$libdir'
-      hardcode_minus_L=yes
-      ;;
-    osf3*)
-      hardcode_libdir_flag_spec='${wl}-rpath ${wl}$libdir'
-      hardcode_libdir_separator=:
-      ;;
-    osf4* | osf5*)
-      if test "$GCC" = yes; then
-        hardcode_libdir_flag_spec='${wl}-rpath ${wl}$libdir'
-      else
-        # Both cc and cxx compiler support -rpath directly
-        hardcode_libdir_flag_spec='-rpath $libdir'
-      fi
-      hardcode_libdir_separator=:
-      ;;
-    solaris*)
-      hardcode_libdir_flag_spec='-R$libdir'
-      ;;
-    sunos4*)
-      hardcode_libdir_flag_spec='-L$libdir'
-      hardcode_direct=yes
-      hardcode_minus_L=yes
-      ;;
-    sysv4)
-      case $host_vendor in
-        sni)
-          hardcode_direct=yes # is this really true???
-          ;;
-        siemens)
-          hardcode_direct=no
-          ;;
-        motorola)
-          hardcode_direct=no #Motorola manual says yes, but my tests say they lie
-          ;;
-      esac
-      ;;
-    sysv4.3*)
-      ;;
-    sysv4*MP*)
-      if test -d /usr/nec; then
-        ld_shlibs=yes
-      fi
-      ;;
-    sysv4*uw2* | sysv5OpenUNIX* | sysv5UnixWare7.[01].[10]* | unixware7* | sco3.2v5.0.[024]*)
-      ;;
-    sysv5* | sco3.2v5* | sco5v6*)
-      hardcode_libdir_flag_spec='`test -z "$SCOABSPATH" && echo ${wl}-R,$libdir`'
-      hardcode_libdir_separator=':'
-      ;;
-    uts4*)
-      hardcode_libdir_flag_spec='-L$libdir'
-      ;;
-    *)
-      ld_shlibs=no
-      ;;
-  esac
-fi
-
-# Check dynamic linker characteristics
-# Code taken from libtool.m4's _LT_SYS_DYNAMIC_LINKER.
-# Unlike libtool.m4, here we don't care about _all_ names of the library, but
-# only about the one the linker finds when passed -lNAME. This is the last
-# element of library_names_spec in libtool.m4, or possibly two of them if the
-# linker has special search rules.
-library_names_spec=      # the last element of library_names_spec in libtool.m4
-libname_spec='lib$name'
-case "$host_os" in
-  aix3*)
-    library_names_spec='$libname.a'
-    ;;
-  aix[4-9]*)
-    library_names_spec='$libname$shrext'
-    ;;
-  amigaos*)
-    case "$host_cpu" in
-      powerpc*)
-        library_names_spec='$libname$shrext' ;;
-      m68k)
-        library_names_spec='$libname.a' ;;
-    esac
-    ;;
-  beos*)
-    library_names_spec='$libname$shrext'
-    ;;
-  bsdi[45]*)
-    library_names_spec='$libname$shrext'
-    ;;
-  cygwin* | mingw* | pw32* | cegcc*)
-    shrext=.dll
-    library_names_spec='$libname.dll.a $libname.lib'
-    ;;
-  darwin* | rhapsody*)
-    shrext=.dylib
-    library_names_spec='$libname$shrext'
-    ;;
-  dgux*)
-    library_names_spec='$libname$shrext'
-    ;;
-  freebsd[23].*)
-    library_names_spec='$libname$shrext$versuffix'
-    ;;
-  freebsd* | dragonfly*)
-    library_names_spec='$libname$shrext'
-    ;;
-  gnu*)
-    library_names_spec='$libname$shrext'
-    ;;
-  haiku*)
-    library_names_spec='$libname$shrext'
-    ;;
-  hpux9* | hpux10* | hpux11*)
-    case $host_cpu in
-      ia64*)
-        shrext=.so
-        ;;
-      hppa*64*)
-        shrext=.sl
-        ;;
-      *)
-        shrext=.sl
-        ;;
-    esac
-    library_names_spec='$libname$shrext'
-    ;;
-  interix[3-9]*)
-    library_names_spec='$libname$shrext'
-    ;;
-  irix5* | irix6* | nonstopux*)
-    library_names_spec='$libname$shrext'
-    case "$host_os" in
-      irix5* | nonstopux*)
-        libsuff= shlibsuff=
-        ;;
-      *)
-        case $LD in
-          *-32|*"-32 "|*-melf32bsmip|*"-melf32bsmip ") libsuff= shlibsuff= ;;
-          *-n32|*"-n32 "|*-melf32bmipn32|*"-melf32bmipn32 ") libsuff=32 shlibsuff=N32 ;;
-          *-64|*"-64 "|*-melf64bmip|*"-melf64bmip ") libsuff=64 shlibsuff=64 ;;
-          *) libsuff= shlibsuff= ;;
-        esac
-        ;;
-    esac
-    ;;
-  linux*oldld* | linux*aout* | linux*coff*)
-    ;;
-  linux* | k*bsd*-gnu | kopensolaris*-gnu)
-    library_names_spec='$libname$shrext'
-    ;;
-  knetbsd*-gnu)
-    library_names_spec='$libname$shrext'
-    ;;
-  netbsd*)
-    library_names_spec='$libname$shrext'
-    ;;
-  newsos6)
-    library_names_spec='$libname$shrext'
-    ;;
-  *nto* | *qnx*)
-    library_names_spec='$libname$shrext'
-    ;;
-  openbsd*)
-    library_names_spec='$libname$shrext$versuffix'
-    ;;
-  os2*)
-    libname_spec='$name'
-    shrext=.dll
-    library_names_spec='$libname.a'
-    ;;
-  osf3* | osf4* | osf5*)
-    library_names_spec='$libname$shrext'
-    ;;
-  rdos*)
-    ;;
-  solaris*)
-    library_names_spec='$libname$shrext'
-    ;;
-  sunos4*)
-    library_names_spec='$libname$shrext$versuffix'
-    ;;
-  sysv4 | sysv4.3*)
-    library_names_spec='$libname$shrext'
-    ;;
-  sysv4*MP*)
-    library_names_spec='$libname$shrext'
-    ;;
-  sysv5* | sco3.2v5* | sco5v6* | unixware* | OpenUNIX* | sysv4*uw2*)
-    library_names_spec='$libname$shrext'
-    ;;
-  tpf*)
-    library_names_spec='$libname$shrext'
-    ;;
-  uts4*)
-    library_names_spec='$libname$shrext'
-    ;;
-esac
-
-sed_quote_subst='s/\(["`$\\]\)/\\\1/g'
-escaped_wl=`echo "X$wl" | sed -e 's/^X//' -e "$sed_quote_subst"`
-shlibext=`echo "$shrext" | sed -e 's,^\.,,'`
-escaped_libname_spec=`echo "X$libname_spec" | sed -e 's/^X//' -e "$sed_quote_subst"`
-escaped_library_names_spec=`echo "X$library_names_spec" | sed -e 's/^X//' -e "$sed_quote_subst"`
-escaped_hardcode_libdir_flag_spec=`echo "X$hardcode_libdir_flag_spec" | sed -e 's/^X//' -e "$sed_quote_subst"`
-
-LC_ALL=C sed -e 's/^\([a-zA-Z0-9_]*\)=/acl_cv_\1=/' <<EOF
-
-# How to pass a linker flag through the compiler.
-wl="$escaped_wl"
-
-# Static library suffix (normally "a").
-libext="$libext"
-
-# Shared library suffix (normally "so").
-shlibext="$shlibext"
-
-# Format of library name prefix.
-libname_spec="$escaped_libname_spec"
-
-# Library names that the linker finds when passed -lNAME.
-library_names_spec="$escaped_library_names_spec"
-
-# Flag to hardcode \$libdir into a binary during linking.
-# This must work even if \$libdir does not exist.
-hardcode_libdir_flag_spec="$escaped_hardcode_libdir_flag_spec"
-
-# Whether we need a single -rpath flag with a separated argument.
-hardcode_libdir_separator="$hardcode_libdir_separator"
-
-# Set to yes if using DIR/libNAME.so during linking hardcodes DIR into the
-# resulting binary.
-hardcode_direct="$hardcode_direct"
-
-# Set to yes if using the -LDIR flag during linking hardcodes DIR into the
-# resulting binary.
-hardcode_minus_L="$hardcode_minus_L"
-
-EOF
diff -Nuar groff-1.22.3.old/config.sub groff-1.22.3/config.sub
--- groff-1.22.3.old/config.sub	2014-11-04 10:38:35.141525047 +0200
+++ groff-1.22.3/config.sub	1970-01-01 02:00:00.000000000 +0200
@@ -1,1805 +0,0 @@
-#! /bin/sh
-# Configuration validation subroutine script.
-#   Copyright 1992-2014 Free Software Foundation, Inc.
-
-timestamp='2014-09-26'
-
-# This file is free software; you can redistribute it and/or modify it
-# under the terms of the GNU General Public License as published by
-# the Free Software Foundation; either version 3 of the License, or
-# (at your option) any later version.
-#
-# This program is distributed in the hope that it will be useful, but
-# WITHOUT ANY WARRANTY; without even the implied warranty of
-# MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the GNU
-# General Public License for more details.
-#
-# You should have received a copy of the GNU General Public License
-# along with this program; if not, see <http://www.gnu.org/licenses/>.
-#
-# As a special exception to the GNU General Public License, if you
-# distribute this file as part of a program that contains a
-# configuration script generated by Autoconf, you may include it under
-# the same distribution terms that you use for the rest of that
-# program.  This Exception is an additional permission under section 7
-# of the GNU General Public License, version 3 ("GPLv3").
-
-
-# Please send patches with a ChangeLog entry to config-patches@gnu.org.
-#
-# Configuration subroutine to validate and canonicalize a configuration type.
-# Supply the specified configuration type as an argument.
-# If it is invalid, we print an error message on stderr and exit with code 1.
-# Otherwise, we print the canonical config type on stdout and succeed.
-
-# You can get the latest version of this script from:
-# http://git.savannah.gnu.org/gitweb/?p=config.git;a=blob_plain;f=config.sub;hb=HEAD
-
-# This file is supposed to be the same for all GNU packages
-# and recognize all the CPU types, system types and aliases
-# that are meaningful with *any* GNU software.
-# Each package is responsible for reporting which valid configurations
-# it does not support.  The user should be able to distinguish
-# a failure to support a valid configuration from a meaningless
-# configuration.
-
-# The goal of this file is to map all the various variations of a given
-# machine specification into a single specification in the form:
-#	CPU_TYPE-MANUFACTURER-OPERATING_SYSTEM
-# or in some cases, the newer four-part form:
-#	CPU_TYPE-MANUFACTURER-KERNEL-OPERATING_SYSTEM
-# It is wrong to echo any other type of specification.
-
-me=`echo "$0" | sed -e 's,.*/,,'`
-
-usage="\
-Usage: $0 [OPTION] CPU-MFR-OPSYS
-       $0 [OPTION] ALIAS
-
-Canonicalize a configuration name.
-
-Operation modes:
-  -h, --help         print this help, then exit
-  -t, --time-stamp   print date of last modification, then exit
-  -v, --version      print version number, then exit
-
-Report bugs and patches to <config-patches@gnu.org>."
-
-version="\
-GNU config.sub ($timestamp)
-
-Copyright 1992-2014 Free Software Foundation, Inc.
-
-This is free software; see the source for copying conditions.  There is NO
-warranty; not even for MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE."
-
-help="
-Try \`$me --help' for more information."
-
-# Parse command line
-while test $# -gt 0 ; do
-  case $1 in
-    --time-stamp | --time* | -t )
-       echo "$timestamp" ; exit ;;
-    --version | -v )
-       echo "$version" ; exit ;;
-    --help | --h* | -h )
-       echo "$usage"; exit ;;
-    -- )     # Stop option processing
-       shift; break ;;
-    - )	# Use stdin as input.
-       break ;;
-    -* )
-       echo "$me: invalid option $1$help"
-       exit 1 ;;
-
-    *local*)
-       # First pass through any local machine types.
-       echo $1
-       exit ;;
-
-    * )
-       break ;;
-  esac
-done
-
-case $# in
- 0) echo "$me: missing argument$help" >&2
-    exit 1;;
- 1) ;;
- *) echo "$me: too many arguments$help" >&2
-    exit 1;;
-esac
-
-# Separate what the user gave into CPU-COMPANY and OS or KERNEL-OS (if any).
-# Here we must recognize all the valid KERNEL-OS combinations.
-maybe_os=`echo $1 | sed 's/^\(.*\)-\([^-]*-[^-]*\)$/\2/'`
-case $maybe_os in
-  nto-qnx* | linux-gnu* | linux-android* | linux-dietlibc | linux-newlib* | \
-  linux-musl* | linux-uclibc* | uclinux-uclibc* | uclinux-gnu* | kfreebsd*-gnu* | \
-  knetbsd*-gnu* | netbsd*-gnu* | \
-  kopensolaris*-gnu* | \
-  storm-chaos* | os2-emx* | rtmk-nova*)
-    os=-$maybe_os
-    basic_machine=`echo $1 | sed 's/^\(.*\)-\([^-]*-[^-]*\)$/\1/'`
-    ;;
-  android-linux)
-    os=-linux-android
-    basic_machine=`echo $1 | sed 's/^\(.*\)-\([^-]*-[^-]*\)$/\1/'`-unknown
-    ;;
-  *)
-    basic_machine=`echo $1 | sed 's/-[^-]*$//'`
-    if [ $basic_machine != $1 ]
-    then os=`echo $1 | sed 's/.*-/-/'`
-    else os=; fi
-    ;;
-esac
-
-### Let's recognize common machines as not being operating systems so
-### that things like config.sub decstation-3100 work.  We also
-### recognize some manufacturers as not being operating systems, so we
-### can provide default operating systems below.
-case $os in
-	-sun*os*)
-		# Prevent following clause from handling this invalid input.
-		;;
-	-dec* | -mips* | -sequent* | -encore* | -pc532* | -sgi* | -sony* | \
-	-att* | -7300* | -3300* | -delta* | -motorola* | -sun[234]* | \
-	-unicom* | -ibm* | -next | -hp | -isi* | -apollo | -altos* | \
-	-convergent* | -ncr* | -news | -32* | -3600* | -3100* | -hitachi* |\
-	-c[123]* | -convex* | -sun | -crds | -omron* | -dg | -ultra | -tti* | \
-	-harris | -dolphin | -highlevel | -gould | -cbm | -ns | -masscomp | \
-	-apple | -axis | -knuth | -cray | -microblaze*)
-		os=
-		basic_machine=$1
-		;;
-	-bluegene*)
-		os=-cnk
-		;;
-	-sim | -cisco | -oki | -wec | -winbond)
-		os=
-		basic_machine=$1
-		;;
-	-scout)
-		;;
-	-wrs)
-		os=-vxworks
-		basic_machine=$1
-		;;
-	-chorusos*)
-		os=-chorusos
-		basic_machine=$1
-		;;
-	-chorusrdb)
-		os=-chorusrdb
-		basic_machine=$1
-		;;
-	-hiux*)
-		os=-hiuxwe2
-		;;
-	-sco6)
-		os=-sco5v6
-		basic_machine=`echo $1 | sed -e 's/86-.*/86-pc/'`
-		;;
-	-sco5)
-		os=-sco3.2v5
-		basic_machine=`echo $1 | sed -e 's/86-.*/86-pc/'`
-		;;
-	-sco4)
-		os=-sco3.2v4
-		basic_machine=`echo $1 | sed -e 's/86-.*/86-pc/'`
-		;;
-	-sco3.2.[4-9]*)
-		os=`echo $os | sed -e 's/sco3.2./sco3.2v/'`
-		basic_machine=`echo $1 | sed -e 's/86-.*/86-pc/'`
-		;;
-	-sco3.2v[4-9]*)
-		# Don't forget version if it is 3.2v4 or newer.
-		basic_machine=`echo $1 | sed -e 's/86-.*/86-pc/'`
-		;;
-	-sco5v6*)
-		# Don't forget version if it is 3.2v4 or newer.
-		basic_machine=`echo $1 | sed -e 's/86-.*/86-pc/'`
-		;;
-	-sco*)
-		os=-sco3.2v2
-		basic_machine=`echo $1 | sed -e 's/86-.*/86-pc/'`
-		;;
-	-udk*)
-		basic_machine=`echo $1 | sed -e 's/86-.*/86-pc/'`
-		;;
-	-isc)
-		os=-isc2.2
-		basic_machine=`echo $1 | sed -e 's/86-.*/86-pc/'`
-		;;
-	-clix*)
-		basic_machine=clipper-intergraph
-		;;
-	-isc*)
-		basic_machine=`echo $1 | sed -e 's/86-.*/86-pc/'`
-		;;
-	-lynx*178)
-		os=-lynxos178
-		;;
-	-lynx*5)
-		os=-lynxos5
-		;;
-	-lynx*)
-		os=-lynxos
-		;;
-	-ptx*)
-		basic_machine=`echo $1 | sed -e 's/86-.*/86-sequent/'`
-		;;
-	-windowsnt*)
-		os=`echo $os | sed -e 's/windowsnt/winnt/'`
-		;;
-	-psos*)
-		os=-psos
-		;;
-	-mint | -mint[0-9]*)
-		basic_machine=m68k-atari
-		os=-mint
-		;;
-esac
-
-# Decode aliases for certain CPU-COMPANY combinations.
-case $basic_machine in
-	# Recognize the basic CPU types without company name.
-	# Some are omitted here because they have special meanings below.
-	1750a | 580 \
-	| a29k \
-	| aarch64 | aarch64_be \
-	| alpha | alphaev[4-8] | alphaev56 | alphaev6[78] | alphapca5[67] \
-	| alpha64 | alpha64ev[4-8] | alpha64ev56 | alpha64ev6[78] | alpha64pca5[67] \
-	| am33_2.0 \
-	| arc | arceb \
-	| arm | arm[bl]e | arme[lb] | armv[2-8] | armv[3-8][lb] | armv7[arm] \
-	| avr | avr32 \
-	| be32 | be64 \
-	| bfin \
-	| c4x | c8051 | clipper \
-	| d10v | d30v | dlx | dsp16xx \
-	| epiphany \
-	| fido | fr30 | frv \
-	| h8300 | h8500 | hppa | hppa1.[01] | hppa2.0 | hppa2.0[nw] | hppa64 \
-	| hexagon \
-	| i370 | i860 | i960 | ia64 \
-	| ip2k | iq2000 \
-	| k1om \
-	| le32 | le64 \
-	| lm32 \
-	| m32c | m32r | m32rle | m68000 | m68k | m88k \
-	| maxq | mb | microblaze | microblazeel | mcore | mep | metag \
-	| mips | mipsbe | mipseb | mipsel | mipsle \
-	| mips16 \
-	| mips64 | mips64el \
-	| mips64octeon | mips64octeonel \
-	| mips64orion | mips64orionel \
-	| mips64r5900 | mips64r5900el \
-	| mips64vr | mips64vrel \
-	| mips64vr4100 | mips64vr4100el \
-	| mips64vr4300 | mips64vr4300el \
-	| mips64vr5000 | mips64vr5000el \
-	| mips64vr5900 | mips64vr5900el \
-	| mipsisa32 | mipsisa32el \
-	| mipsisa32r2 | mipsisa32r2el \
-	| mipsisa32r6 | mipsisa32r6el \
-	| mipsisa64 | mipsisa64el \
-	| mipsisa64r2 | mipsisa64r2el \
-	| mipsisa64r6 | mipsisa64r6el \
-	| mipsisa64sb1 | mipsisa64sb1el \
-	| mipsisa64sr71k | mipsisa64sr71kel \
-	| mipsr5900 | mipsr5900el \
-	| mipstx39 | mipstx39el \
-	| mn10200 | mn10300 \
-	| moxie \
-	| mt \
-	| msp430 \
-	| nds32 | nds32le | nds32be \
-	| nios | nios2 | nios2eb | nios2el \
-	| ns16k | ns32k \
-	| open8 | or1k | or1knd | or32 \
-	| pdp10 | pdp11 | pj | pjl \
-	| powerpc | powerpc64 | powerpc64le | powerpcle \
-	| pyramid \
-	| riscv32 | riscv64 \
-	| rl78 | rx \
-	| score \
-	| sh | sh[1234] | sh[24]a | sh[24]aeb | sh[23]e | sh[34]eb | sheb | shbe | shle | sh[1234]le | sh3ele \
-	| sh64 | sh64le \
-	| sparc | sparc64 | sparc64b | sparc64v | sparc86x | sparclet | sparclite \
-	| sparcv8 | sparcv9 | sparcv9b | sparcv9v \
-	| spu \
-	| tahoe | tic4x | tic54x | tic55x | tic6x | tic80 | tron \
-	| ubicom32 \
-	| v850 | v850e | v850e1 | v850e2 | v850es | v850e2v3 \
-	| we32k \
-	| x86 | xc16x | xstormy16 | xtensa \
-	| z8k | z80)
-		basic_machine=$basic_machine-unknown
-		;;
-	c54x)
-		basic_machine=tic54x-unknown
-		;;
-	c55x)
-		basic_machine=tic55x-unknown
-		;;
-	c6x)
-		basic_machine=tic6x-unknown
-		;;
-	leon|leon[3-9])
-		basic_machine=sparc-$basic_machine
-		;;
-	m6811 | m68hc11 | m6812 | m68hc12 | m68hcs12x | nvptx | picochip)
-		basic_machine=$basic_machine-unknown
-		os=-none
-		;;
-	m88110 | m680[12346]0 | m683?2 | m68360 | m5200 | v70 | w65 | z8k)
-		;;
-	ms1)
-		basic_machine=mt-unknown
-		;;
-
-	strongarm | thumb | xscale)
-		basic_machine=arm-unknown
-		;;
-	xgate)
-		basic_machine=$basic_machine-unknown
-		os=-none
-		;;
-	xscaleeb)
-		basic_machine=armeb-unknown
-		;;
-
-	xscaleel)
-		basic_machine=armel-unknown
-		;;
-
-	# We use `pc' rather than `unknown'
-	# because (1) that's what they normally are, and
-	# (2) the word "unknown" tends to confuse beginning users.
-	i*86 | x86_64)
-	  basic_machine=$basic_machine-pc
-	  ;;
-	# Object if more than one company name word.
-	*-*-*)
-		echo Invalid configuration \`$1\': machine \`$basic_machine\' not recognized 1>&2
-		exit 1
-		;;
-	# Recognize the basic CPU types with company name.
-	580-* \
-	| a29k-* \
-	| aarch64-* | aarch64_be-* \
-	| alpha-* | alphaev[4-8]-* | alphaev56-* | alphaev6[78]-* \
-	| alpha64-* | alpha64ev[4-8]-* | alpha64ev56-* | alpha64ev6[78]-* \
-	| alphapca5[67]-* | alpha64pca5[67]-* | arc-* | arceb-* \
-	| arm-*  | armbe-* | armle-* | armeb-* | armv*-* \
-	| avr-* | avr32-* \
-	| be32-* | be64-* \
-	| bfin-* | bs2000-* \
-	| c[123]* | c30-* | [cjt]90-* | c4x-* \
-	| c8051-* | clipper-* | craynv-* | cydra-* \
-	| d10v-* | d30v-* | dlx-* \
-	| elxsi-* \
-	| f30[01]-* | f700-* | fido-* | fr30-* | frv-* | fx80-* \
-	| h8300-* | h8500-* \
-	| hppa-* | hppa1.[01]-* | hppa2.0-* | hppa2.0[nw]-* | hppa64-* \
-	| hexagon-* \
-	| i*86-* | i860-* | i960-* | ia64-* \
-	| ip2k-* | iq2000-* \
-	| k1om-* \
-	| le32-* | le64-* \
-	| lm32-* \
-	| m32c-* | m32r-* | m32rle-* \
-	| m68000-* | m680[012346]0-* | m68360-* | m683?2-* | m68k-* \
-	| m88110-* | m88k-* | maxq-* | mcore-* | metag-* \
-	| microblaze-* | microblazeel-* \
-	| mips-* | mipsbe-* | mipseb-* | mipsel-* | mipsle-* \
-	| mips16-* \
-	| mips64-* | mips64el-* \
-	| mips64octeon-* | mips64octeonel-* \
-	| mips64orion-* | mips64orionel-* \
-	| mips64r5900-* | mips64r5900el-* \
-	| mips64vr-* | mips64vrel-* \
-	| mips64vr4100-* | mips64vr4100el-* \
-	| mips64vr4300-* | mips64vr4300el-* \
-	| mips64vr5000-* | mips64vr5000el-* \
-	| mips64vr5900-* | mips64vr5900el-* \
-	| mipsisa32-* | mipsisa32el-* \
-	| mipsisa32r2-* | mipsisa32r2el-* \
-	| mipsisa32r6-* | mipsisa32r6el-* \
-	| mipsisa64-* | mipsisa64el-* \
-	| mipsisa64r2-* | mipsisa64r2el-* \
-	| mipsisa64r6-* | mipsisa64r6el-* \
-	| mipsisa64sb1-* | mipsisa64sb1el-* \
-	| mipsisa64sr71k-* | mipsisa64sr71kel-* \
-	| mipsr5900-* | mipsr5900el-* \
-	| mipstx39-* | mipstx39el-* \
-	| mmix-* \
-	| mt-* \
-	| msp430-* \
-	| nds32-* | nds32le-* | nds32be-* \
-	| nios-* | nios2-* | nios2eb-* | nios2el-* \
-	| none-* | np1-* | ns16k-* | ns32k-* \
-	| open8-* \
-	| or1k*-* \
-	| orion-* \
-	| pdp10-* | pdp11-* | pj-* | pjl-* | pn-* | power-* \
-	| powerpc-* | powerpc64-* | powerpc64le-* | powerpcle-* \
-	| pyramid-* \
-	| rl78-* | romp-* | rs6000-* | rx-* \
-	| sh-* | sh[1234]-* | sh[24]a-* | sh[24]aeb-* | sh[23]e-* | sh[34]eb-* | sheb-* | shbe-* \
-	| shle-* | sh[1234]le-* | sh3ele-* | sh64-* | sh64le-* \
-	| sparc-* | sparc64-* | sparc64b-* | sparc64v-* | sparc86x-* | sparclet-* \
-	| sparclite-* \
-	| sparcv8-* | sparcv9-* | sparcv9b-* | sparcv9v-* | sv1-* | sx?-* \
-	| tahoe-* \
-	| tic30-* | tic4x-* | tic54x-* | tic55x-* | tic6x-* | tic80-* \
-	| tile*-* \
-	| tron-* \
-	| ubicom32-* \
-	| v850-* | v850e-* | v850e1-* | v850es-* | v850e2-* | v850e2v3-* \
-	| vax-* \
-	| we32k-* \
-	| x86-* | x86_64-* | xc16x-* | xps100-* \
-	| xstormy16-* | xtensa*-* \
-	| ymp-* \
-	| z8k-* | z80-*)
-		;;
-	# Recognize the basic CPU types without company name, with glob match.
-	xtensa*)
-		basic_machine=$basic_machine-unknown
-		;;
-	# Recognize the various machine names and aliases which stand
-	# for a CPU type and a company and sometimes even an OS.
-	386bsd)
-		basic_machine=i386-unknown
-		os=-bsd
-		;;
-	3b1 | 7300 | 7300-att | att-7300 | pc7300 | safari | unixpc)
-		basic_machine=m68000-att
-		;;
-	3b*)
-		basic_machine=we32k-att
-		;;
-	a29khif)
-		basic_machine=a29k-amd
-		os=-udi
-		;;
-	abacus)
-		basic_machine=abacus-unknown
-		;;
-	adobe68k)
-		basic_machine=m68010-adobe
-		os=-scout
-		;;
-	alliant | fx80)
-		basic_machine=fx80-alliant
-		;;
-	altos | altos3068)
-		basic_machine=m68k-altos
-		;;
-	am29k)
-		basic_machine=a29k-none
-		os=-bsd
-		;;
-	amd64)
-		basic_machine=x86_64-pc
-		;;
-	amd64-*)
-		basic_machine=x86_64-`echo $basic_machine | sed 's/^[^-]*-//'`
-		;;
-	amdahl)
-		basic_machine=580-amdahl
-		os=-sysv
-		;;
-	amiga | amiga-*)
-		basic_machine=m68k-unknown
-		;;
-	amigaos | amigados)
-		basic_machine=m68k-unknown
-		os=-amigaos
-		;;
-	amigaunix | amix)
-		basic_machine=m68k-unknown
-		os=-sysv4
-		;;
-	apollo68)
-		basic_machine=m68k-apollo
-		os=-sysv
-		;;
-	apollo68bsd)
-		basic_machine=m68k-apollo
-		os=-bsd
-		;;
-	aros)
-		basic_machine=i386-pc
-		os=-aros
-		;;
-	aux)
-		basic_machine=m68k-apple
-		os=-aux
-		;;
-	balance)
-		basic_machine=ns32k-sequent
-		os=-dynix
-		;;
-	blackfin)
-		basic_machine=bfin-unknown
-		os=-linux
-		;;
-	blackfin-*)
-		basic_machine=bfin-`echo $basic_machine | sed 's/^[^-]*-//'`
-		os=-linux
-		;;
-	bluegene*)
-		basic_machine=powerpc-ibm
-		os=-cnk
-		;;
-	c54x-*)
-		basic_machine=tic54x-`echo $basic_machine | sed 's/^[^-]*-//'`
-		;;
-	c55x-*)
-		basic_machine=tic55x-`echo $basic_machine | sed 's/^[^-]*-//'`
-		;;
-	c6x-*)
-		basic_machine=tic6x-`echo $basic_machine | sed 's/^[^-]*-//'`
-		;;
-	c90)
-		basic_machine=c90-cray
-		os=-unicos
-		;;
-	cegcc)
-		basic_machine=arm-unknown
-		os=-cegcc
-		;;
-	convex-c1)
-		basic_machine=c1-convex
-		os=-bsd
-		;;
-	convex-c2)
-		basic_machine=c2-convex
-		os=-bsd
-		;;
-	convex-c32)
-		basic_machine=c32-convex
-		os=-bsd
-		;;
-	convex-c34)
-		basic_machine=c34-convex
-		os=-bsd
-		;;
-	convex-c38)
-		basic_machine=c38-convex
-		os=-bsd
-		;;
-	cray | j90)
-		basic_machine=j90-cray
-		os=-unicos
-		;;
-	craynv)
-		basic_machine=craynv-cray
-		os=-unicosmp
-		;;
-	cr16 | cr16-*)
-		basic_machine=cr16-unknown
-		os=-elf
-		;;
-	crds | unos)
-		basic_machine=m68k-crds
-		;;
-	crisv32 | crisv32-* | etraxfs*)
-		basic_machine=crisv32-axis
-		;;
-	cris | cris-* | etrax*)
-		basic_machine=cris-axis
-		;;
-	crx)
-		basic_machine=crx-unknown
-		os=-elf
-		;;
-	da30 | da30-*)
-		basic_machine=m68k-da30
-		;;
-	decstation | decstation-3100 | pmax | pmax-* | pmin | dec3100 | decstatn)
-		basic_machine=mips-dec
-		;;
-	decsystem10* | dec10*)
-		basic_machine=pdp10-dec
-		os=-tops10
-		;;
-	decsystem20* | dec20*)
-		basic_machine=pdp10-dec
-		os=-tops20
-		;;
-	delta | 3300 | motorola-3300 | motorola-delta \
-	      | 3300-motorola | delta-motorola)
-		basic_machine=m68k-motorola
-		;;
-	delta88)
-		basic_machine=m88k-motorola
-		os=-sysv3
-		;;
-	dicos)
-		basic_machine=i686-pc
-		os=-dicos
-		;;
-	djgpp)
-		basic_machine=i586-pc
-		os=-msdosdjgpp
-		;;
-	dpx20 | dpx20-*)
-		basic_machine=rs6000-bull
-		os=-bosx
-		;;
-	dpx2* | dpx2*-bull)
-		basic_machine=m68k-bull
-		os=-sysv3
-		;;
-	ebmon29k)
-		basic_machine=a29k-amd
-		os=-ebmon
-		;;
-	elxsi)
-		basic_machine=elxsi-elxsi
-		os=-bsd
-		;;
-	encore | umax | mmax)
-		basic_machine=ns32k-encore
-		;;
-	es1800 | OSE68k | ose68k | ose | OSE)
-		basic_machine=m68k-ericsson
-		os=-ose
-		;;
-	fx2800)
-		basic_machine=i860-alliant
-		;;
-	genix)
-		basic_machine=ns32k-ns
-		;;
-	gmicro)
-		basic_machine=tron-gmicro
-		os=-sysv
-		;;
-	go32)
-		basic_machine=i386-pc
-		os=-go32
-		;;
-	h3050r* | hiux*)
-		basic_machine=hppa1.1-hitachi
-		os=-hiuxwe2
-		;;
-	h8300hms)
-		basic_machine=h8300-hitachi
-		os=-hms
-		;;
-	h8300xray)
-		basic_machine=h8300-hitachi
-		os=-xray
-		;;
-	h8500hms)
-		basic_machine=h8500-hitachi
-		os=-hms
-		;;
-	harris)
-		basic_machine=m88k-harris
-		os=-sysv3
-		;;
-	hp300-*)
-		basic_machine=m68k-hp
-		;;
-	hp300bsd)
-		basic_machine=m68k-hp
-		os=-bsd
-		;;
-	hp300hpux)
-		basic_machine=m68k-hp
-		os=-hpux
-		;;
-	hp3k9[0-9][0-9] | hp9[0-9][0-9])
-		basic_machine=hppa1.0-hp
-		;;
-	hp9k2[0-9][0-9] | hp9k31[0-9])
-		basic_machine=m68000-hp
-		;;
-	hp9k3[2-9][0-9])
-		basic_machine=m68k-hp
-		;;
-	hp9k6[0-9][0-9] | hp6[0-9][0-9])
-		basic_machine=hppa1.0-hp
-		;;
-	hp9k7[0-79][0-9] | hp7[0-79][0-9])
-		basic_machine=hppa1.1-hp
-		;;
-	hp9k78[0-9] | hp78[0-9])
-		# FIXME: really hppa2.0-hp
-		basic_machine=hppa1.1-hp
-		;;
-	hp9k8[67]1 | hp8[67]1 | hp9k80[24] | hp80[24] | hp9k8[78]9 | hp8[78]9 | hp9k893 | hp893)
-		# FIXME: really hppa2.0-hp
-		basic_machine=hppa1.1-hp
-		;;
-	hp9k8[0-9][13679] | hp8[0-9][13679])
-		basic_machine=hppa1.1-hp
-		;;
-	hp9k8[0-9][0-9] | hp8[0-9][0-9])
-		basic_machine=hppa1.0-hp
-		;;
-	hppa-next)
-		os=-nextstep3
-		;;
-	hppaosf)
-		basic_machine=hppa1.1-hp
-		os=-osf
-		;;
-	hppro)
-		basic_machine=hppa1.1-hp
-		os=-proelf
-		;;
-	i370-ibm* | ibm*)
-		basic_machine=i370-ibm
-		;;
-	i*86v32)
-		basic_machine=`echo $1 | sed -e 's/86.*/86-pc/'`
-		os=-sysv32
-		;;
-	i*86v4*)
-		basic_machine=`echo $1 | sed -e 's/86.*/86-pc/'`
-		os=-sysv4
-		;;
-	i*86v)
-		basic_machine=`echo $1 | sed -e 's/86.*/86-pc/'`
-		os=-sysv
-		;;
-	i*86sol2)
-		basic_machine=`echo $1 | sed -e 's/86.*/86-pc/'`
-		os=-solaris2
-		;;
-	i386mach)
-		basic_machine=i386-mach
-		os=-mach
-		;;
-	i386-vsta | vsta)
-		basic_machine=i386-unknown
-		os=-vsta
-		;;
-	iris | iris4d)
-		basic_machine=mips-sgi
-		case $os in
-		    -irix*)
-			;;
-		    *)
-			os=-irix4
-			;;
-		esac
-		;;
-	isi68 | isi)
-		basic_machine=m68k-isi
-		os=-sysv
-		;;
-	leon-*|leon[3-9]-*)
-		basic_machine=sparc-`echo $basic_machine | sed 's/-.*//'`
-		;;
-	m68knommu)
-		basic_machine=m68k-unknown
-		os=-linux
-		;;
-	m68knommu-*)
-		basic_machine=m68k-`echo $basic_machine | sed 's/^[^-]*-//'`
-		os=-linux
-		;;
-	m88k-omron*)
-		basic_machine=m88k-omron
-		;;
-	magnum | m3230)
-		basic_machine=mips-mips
-		os=-sysv
-		;;
-	merlin)
-		basic_machine=ns32k-utek
-		os=-sysv
-		;;
-	microblaze*)
-		basic_machine=microblaze-xilinx
-		;;
-	mingw64)
-		basic_machine=x86_64-pc
-		os=-mingw64
-		;;
-	mingw32)
-		basic_machine=i686-pc
-		os=-mingw32
-		;;
-	mingw32ce)
-		basic_machine=arm-unknown
-		os=-mingw32ce
-		;;
-	miniframe)
-		basic_machine=m68000-convergent
-		;;
-	*mint | -mint[0-9]* | *MiNT | *MiNT[0-9]*)
-		basic_machine=m68k-atari
-		os=-mint
-		;;
-	mips3*-*)
-		basic_machine=`echo $basic_machine | sed -e 's/mips3/mips64/'`
-		;;
-	mips3*)
-		basic_machine=`echo $basic_machine | sed -e 's/mips3/mips64/'`-unknown
-		;;
-	monitor)
-		basic_machine=m68k-rom68k
-		os=-coff
-		;;
-	morphos)
-		basic_machine=powerpc-unknown
-		os=-morphos
-		;;
-	moxiebox)
-		basic_machine=moxie-unknown
-		os=-moxiebox
-		;;
-	msdos)
-		basic_machine=i386-pc
-		os=-msdos
-		;;
-	ms1-*)
-		basic_machine=`echo $basic_machine | sed -e 's/ms1-/mt-/'`
-		;;
-	msys)
-		basic_machine=i686-pc
-		os=-msys
-		;;
-	mvs)
-		basic_machine=i370-ibm
-		os=-mvs
-		;;
-	nacl)
-		basic_machine=le32-unknown
-		os=-nacl
-		;;
-	ncr3000)
-		basic_machine=i486-ncr
-		os=-sysv4
-		;;
-	netbsd386)
-		basic_machine=i386-unknown
-		os=-netbsd
-		;;
-	netwinder)
-		basic_machine=armv4l-rebel
-		os=-linux
-		;;
-	news | news700 | news800 | news900)
-		basic_machine=m68k-sony
-		os=-newsos
-		;;
-	news1000)
-		basic_machine=m68030-sony
-		os=-newsos
-		;;
-	news-3600 | risc-news)
-		basic_machine=mips-sony
-		os=-newsos
-		;;
-	necv70)
-		basic_machine=v70-nec
-		os=-sysv
-		;;
-	next | m*-next )
-		basic_machine=m68k-next
-		case $os in
-		    -nextstep* )
-			;;
-		    -ns2*)
-		      os=-nextstep2
-			;;
-		    *)
-		      os=-nextstep3
-			;;
-		esac
-		;;
-	nh3000)
-		basic_machine=m68k-harris
-		os=-cxux
-		;;
-	nh[45]000)
-		basic_machine=m88k-harris
-		os=-cxux
-		;;
-	nindy960)
-		basic_machine=i960-intel
-		os=-nindy
-		;;
-	mon960)
-		basic_machine=i960-intel
-		os=-mon960
-		;;
-	nonstopux)
-		basic_machine=mips-compaq
-		os=-nonstopux
-		;;
-	np1)
-		basic_machine=np1-gould
-		;;
-	neo-tandem)
-		basic_machine=neo-tandem
-		;;
-	nse-tandem)
-		basic_machine=nse-tandem
-		;;
-	nsr-tandem)
-		basic_machine=nsr-tandem
-		;;
-	op50n-* | op60c-*)
-		basic_machine=hppa1.1-oki
-		os=-proelf
-		;;
-	openrisc | openrisc-*)
-		basic_machine=or32-unknown
-		;;
-	os400)
-		basic_machine=powerpc-ibm
-		os=-os400
-		;;
-	OSE68000 | ose68000)
-		basic_machine=m68000-ericsson
-		os=-ose
-		;;
-	os68k)
-		basic_machine=m68k-none
-		os=-os68k
-		;;
-	pa-hitachi)
-		basic_machine=hppa1.1-hitachi
-		os=-hiuxwe2
-		;;
-	paragon)
-		basic_machine=i860-intel
-		os=-osf
-		;;
-	parisc)
-		basic_machine=hppa-unknown
-		os=-linux
-		;;
-	parisc-*)
-		basic_machine=hppa-`echo $basic_machine | sed 's/^[^-]*-//'`
-		os=-linux
-		;;
-	pbd)
-		basic_machine=sparc-tti
-		;;
-	pbb)
-		basic_machine=m68k-tti
-		;;
-	pc532 | pc532-*)
-		basic_machine=ns32k-pc532
-		;;
-	pc98)
-		basic_machine=i386-pc
-		;;
-	pc98-*)
-		basic_machine=i386-`echo $basic_machine | sed 's/^[^-]*-//'`
-		;;
-	pentium | p5 | k5 | k6 | nexgen | viac3)
-		basic_machine=i586-pc
-		;;
-	pentiumpro | p6 | 6x86 | athlon | athlon_*)
-		basic_machine=i686-pc
-		;;
-	pentiumii | pentium2 | pentiumiii | pentium3)
-		basic_machine=i686-pc
-		;;
-	pentium4)
-		basic_machine=i786-pc
-		;;
-	pentium-* | p5-* | k5-* | k6-* | nexgen-* | viac3-*)
-		basic_machine=i586-`echo $basic_machine | sed 's/^[^-]*-//'`
-		;;
-	pentiumpro-* | p6-* | 6x86-* | athlon-*)
-		basic_machine=i686-`echo $basic_machine | sed 's/^[^-]*-//'`
-		;;
-	pentiumii-* | pentium2-* | pentiumiii-* | pentium3-*)
-		basic_machine=i686-`echo $basic_machine | sed 's/^[^-]*-//'`
-		;;
-	pentium4-*)
-		basic_machine=i786-`echo $basic_machine | sed 's/^[^-]*-//'`
-		;;
-	pn)
-		basic_machine=pn-gould
-		;;
-	power)	basic_machine=power-ibm
-		;;
-	ppc | ppcbe)	basic_machine=powerpc-unknown
-		;;
-	ppc-* | ppcbe-*)
-		basic_machine=powerpc-`echo $basic_machine | sed 's/^[^-]*-//'`
-		;;
-	ppcle | powerpclittle | ppc-le | powerpc-little)
-		basic_machine=powerpcle-unknown
-		;;
-	ppcle-* | powerpclittle-*)
-		basic_machine=powerpcle-`echo $basic_machine | sed 's/^[^-]*-//'`
-		;;
-	ppc64)	basic_machine=powerpc64-unknown
-		;;
-	ppc64-*) basic_machine=powerpc64-`echo $basic_machine | sed 's/^[^-]*-//'`
-		;;
-	ppc64le | powerpc64little | ppc64-le | powerpc64-little)
-		basic_machine=powerpc64le-unknown
-		;;
-	ppc64le-* | powerpc64little-*)
-		basic_machine=powerpc64le-`echo $basic_machine | sed 's/^[^-]*-//'`
-		;;
-	ps2)
-		basic_machine=i386-ibm
-		;;
-	pw32)
-		basic_machine=i586-unknown
-		os=-pw32
-		;;
-	rdos | rdos64)
-		basic_machine=x86_64-pc
-		os=-rdos
-		;;
-	rdos32)
-		basic_machine=i386-pc
-		os=-rdos
-		;;
-	rom68k)
-		basic_machine=m68k-rom68k
-		os=-coff
-		;;
-	rm[46]00)
-		basic_machine=mips-siemens
-		;;
-	rtpc | rtpc-*)
-		basic_machine=romp-ibm
-		;;
-	s390 | s390-*)
-		basic_machine=s390-ibm
-		;;
-	s390x | s390x-*)
-		basic_machine=s390x-ibm
-		;;
-	sa29200)
-		basic_machine=a29k-amd
-		os=-udi
-		;;
-	sb1)
-		basic_machine=mipsisa64sb1-unknown
-		;;
-	sb1el)
-		basic_machine=mipsisa64sb1el-unknown
-		;;
-	sde)
-		basic_machine=mipsisa32-sde
-		os=-elf
-		;;
-	sei)
-		basic_machine=mips-sei
-		os=-seiux
-		;;
-	sequent)
-		basic_machine=i386-sequent
-		;;
-	sh)
-		basic_machine=sh-hitachi
-		os=-hms
-		;;
-	sh5el)
-		basic_machine=sh5le-unknown
-		;;
-	sh64)
-		basic_machine=sh64-unknown
-		;;
-	sparclite-wrs | simso-wrs)
-		basic_machine=sparclite-wrs
-		os=-vxworks
-		;;
-	sps7)
-		basic_machine=m68k-bull
-		os=-sysv2
-		;;
-	spur)
-		basic_machine=spur-unknown
-		;;
-	st2000)
-		basic_machine=m68k-tandem
-		;;
-	stratus)
-		basic_machine=i860-stratus
-		os=-sysv4
-		;;
-	strongarm-* | thumb-*)
-		basic_machine=arm-`echo $basic_machine | sed 's/^[^-]*-//'`
-		;;
-	sun2)
-		basic_machine=m68000-sun
-		;;
-	sun2os3)
-		basic_machine=m68000-sun
-		os=-sunos3
-		;;
-	sun2os4)
-		basic_machine=m68000-sun
-		os=-sunos4
-		;;
-	sun3os3)
-		basic_machine=m68k-sun
-		os=-sunos3
-		;;
-	sun3os4)
-		basic_machine=m68k-sun
-		os=-sunos4
-		;;
-	sun4os3)
-		basic_machine=sparc-sun
-		os=-sunos3
-		;;
-	sun4os4)
-		basic_machine=sparc-sun
-		os=-sunos4
-		;;
-	sun4sol2)
-		basic_machine=sparc-sun
-		os=-solaris2
-		;;
-	sun3 | sun3-*)
-		basic_machine=m68k-sun
-		;;
-	sun4)
-		basic_machine=sparc-sun
-		;;
-	sun386 | sun386i | roadrunner)
-		basic_machine=i386-sun
-		;;
-	sv1)
-		basic_machine=sv1-cray
-		os=-unicos
-		;;
-	symmetry)
-		basic_machine=i386-sequent
-		os=-dynix
-		;;
-	t3e)
-		basic_machine=alphaev5-cray
-		os=-unicos
-		;;
-	t90)
-		basic_machine=t90-cray
-		os=-unicos
-		;;
-	tile*)
-		basic_machine=$basic_machine-unknown
-		os=-linux-gnu
-		;;
-	tx39)
-		basic_machine=mipstx39-unknown
-		;;
-	tx39el)
-		basic_machine=mipstx39el-unknown
-		;;
-	toad1)
-		basic_machine=pdp10-xkl
-		os=-tops20
-		;;
-	tower | tower-32)
-		basic_machine=m68k-ncr
-		;;
-	tpf)
-		basic_machine=s390x-ibm
-		os=-tpf
-		;;
-	udi29k)
-		basic_machine=a29k-amd
-		os=-udi
-		;;
-	ultra3)
-		basic_machine=a29k-nyu
-		os=-sym1
-		;;
-	v810 | necv810)
-		basic_machine=v810-nec
-		os=-none
-		;;
-	vaxv)
-		basic_machine=vax-dec
-		os=-sysv
-		;;
-	vms)
-		basic_machine=vax-dec
-		os=-vms
-		;;
-	vpp*|vx|vx-*)
-		basic_machine=f301-fujitsu
-		;;
-	vxworks960)
-		basic_machine=i960-wrs
-		os=-vxworks
-		;;
-	vxworks68)
-		basic_machine=m68k-wrs
-		os=-vxworks
-		;;
-	vxworks29k)
-		basic_machine=a29k-wrs
-		os=-vxworks
-		;;
-	w65*)
-		basic_machine=w65-wdc
-		os=-none
-		;;
-	w89k-*)
-		basic_machine=hppa1.1-winbond
-		os=-proelf
-		;;
-	xbox)
-		basic_machine=i686-pc
-		os=-mingw32
-		;;
-	xps | xps100)
-		basic_machine=xps100-honeywell
-		;;
-	xscale-* | xscalee[bl]-*)
-		basic_machine=`echo $basic_machine | sed 's/^xscale/arm/'`
-		;;
-	ymp)
-		basic_machine=ymp-cray
-		os=-unicos
-		;;
-	z8k-*-coff)
-		basic_machine=z8k-unknown
-		os=-sim
-		;;
-	z80-*-coff)
-		basic_machine=z80-unknown
-		os=-sim
-		;;
-	none)
-		basic_machine=none-none
-		os=-none
-		;;
-
-# Here we handle the default manufacturer of certain CPU types.  It is in
-# some cases the only manufacturer, in others, it is the most popular.
-	w89k)
-		basic_machine=hppa1.1-winbond
-		;;
-	op50n)
-		basic_machine=hppa1.1-oki
-		;;
-	op60c)
-		basic_machine=hppa1.1-oki
-		;;
-	romp)
-		basic_machine=romp-ibm
-		;;
-	mmix)
-		basic_machine=mmix-knuth
-		;;
-	rs6000)
-		basic_machine=rs6000-ibm
-		;;
-	vax)
-		basic_machine=vax-dec
-		;;
-	pdp10)
-		# there are many clones, so DEC is not a safe bet
-		basic_machine=pdp10-unknown
-		;;
-	pdp11)
-		basic_machine=pdp11-dec
-		;;
-	we32k)
-		basic_machine=we32k-att
-		;;
-	sh[1234] | sh[24]a | sh[24]aeb | sh[34]eb | sh[1234]le | sh[23]ele)
-		basic_machine=sh-unknown
-		;;
-	sparc | sparcv8 | sparcv9 | sparcv9b | sparcv9v)
-		basic_machine=sparc-sun
-		;;
-	cydra)
-		basic_machine=cydra-cydrome
-		;;
-	orion)
-		basic_machine=orion-highlevel
-		;;
-	orion105)
-		basic_machine=clipper-highlevel
-		;;
-	mac | mpw | mac-mpw)
-		basic_machine=m68k-apple
-		;;
-	pmac | pmac-mpw)
-		basic_machine=powerpc-apple
-		;;
-	*-unknown)
-		# Make sure to match an already-canonicalized machine name.
-		;;
-	*)
-		echo Invalid configuration \`$1\': machine \`$basic_machine\' not recognized 1>&2
-		exit 1
-		;;
-esac
-
-# Here we canonicalize certain aliases for manufacturers.
-case $basic_machine in
-	*-digital*)
-		basic_machine=`echo $basic_machine | sed 's/digital.*/dec/'`
-		;;
-	*-commodore*)
-		basic_machine=`echo $basic_machine | sed 's/commodore.*/cbm/'`
-		;;
-	*)
-		;;
-esac
-
-# Decode manufacturer-specific aliases for certain operating systems.
-
-if [ x"$os" != x"" ]
-then
-case $os in
-	# First match some system type aliases
-	# that might get confused with valid system types.
-	# -solaris* is a basic system type, with this one exception.
-	-auroraux)
-		os=-auroraux
-		;;
-	-solaris1 | -solaris1.*)
-		os=`echo $os | sed -e 's|solaris1|sunos4|'`
-		;;
-	-solaris)
-		os=-solaris2
-		;;
-	-svr4*)
-		os=-sysv4
-		;;
-	-unixware*)
-		os=-sysv4.2uw
-		;;
-	-gnu/linux*)
-		os=`echo $os | sed -e 's|gnu/linux|linux-gnu|'`
-		;;
-	# First accept the basic system types.
-	# The portable systems comes first.
-	# Each alternative MUST END IN A *, to match a version number.
-	# -sysv* is not here because it comes later, after sysvr4.
-	-gnu* | -bsd* | -mach* | -minix* | -genix* | -ultrix* | -irix* \
-	      | -*vms* | -sco* | -esix* | -isc* | -aix* | -cnk* | -sunos | -sunos[34]*\
-	      | -hpux* | -unos* | -osf* | -luna* | -dgux* | -auroraux* | -solaris* \
-	      | -sym* | -kopensolaris* | -plan9* \
-	      | -amigaos* | -amigados* | -msdos* | -newsos* | -unicos* | -aof* \
-	      | -aos* | -aros* \
-	      | -nindy* | -vxsim* | -vxworks* | -ebmon* | -hms* | -mvs* \
-	      | -clix* | -riscos* | -uniplus* | -iris* | -rtu* | -xenix* \
-	      | -hiux* | -386bsd* | -knetbsd* | -mirbsd* | -netbsd* \
-	      | -bitrig* | -openbsd* | -solidbsd* \
-	      | -ekkobsd* | -kfreebsd* | -freebsd* | -riscix* | -lynxos* \
-	      | -bosx* | -nextstep* | -cxux* | -aout* | -elf* | -oabi* \
-	      | -ptx* | -coff* | -ecoff* | -winnt* | -domain* | -vsta* \
-	      | -udi* | -eabi* | -lites* | -ieee* | -go32* | -aux* \
-	      | -chorusos* | -chorusrdb* | -cegcc* \
-	      | -cygwin* | -msys* | -pe* | -psos* | -moss* | -proelf* | -rtems* \
-	      | -mingw32* | -mingw64* | -linux-gnu* | -linux-android* \
-	      | -linux-newlib* | -linux-musl* | -linux-uclibc* \
-	      | -uxpv* | -beos* | -mpeix* | -udk* | -moxiebox* \
-	      | -interix* | -uwin* | -mks* | -rhapsody* | -darwin* | -opened* \
-	      | -openstep* | -oskit* | -conix* | -pw32* | -nonstopux* \
-	      | -storm-chaos* | -tops10* | -tenex* | -tops20* | -its* \
-	      | -os2* | -vos* | -palmos* | -uclinux* | -nucleus* \
-	      | -morphos* | -superux* | -rtmk* | -rtmk-nova* | -windiss* \
-	      | -powermax* | -dnix* | -nx6 | -nx7 | -sei* | -dragonfly* \
-	      | -skyos* | -haiku* | -rdos* | -toppers* | -drops* | -es* | -tirtos*)
-	# Remember, each alternative MUST END IN *, to match a version number.
-		;;
-	-qnx*)
-		case $basic_machine in
-		    x86-* | i*86-*)
-			;;
-		    *)
-			os=-nto$os
-			;;
-		esac
-		;;
-	-nto-qnx*)
-		;;
-	-nto*)
-		os=`echo $os | sed -e 's|nto|nto-qnx|'`
-		;;
-	-sim | -es1800* | -hms* | -xray | -os68k* | -none* | -v88r* \
-	      | -windows* | -osx | -abug | -netware* | -os9* | -beos* | -haiku* \
-	      | -macos* | -mpw* | -magic* | -mmixware* | -mon960* | -lnews*)
-		;;
-	-mac*)
-		os=`echo $os | sed -e 's|mac|macos|'`
-		;;
-	-linux-dietlibc)
-		os=-linux-dietlibc
-		;;
-	-linux*)
-		os=`echo $os | sed -e 's|linux|linux-gnu|'`
-		;;
-	-sunos5*)
-		os=`echo $os | sed -e 's|sunos5|solaris2|'`
-		;;
-	-sunos6*)
-		os=`echo $os | sed -e 's|sunos6|solaris3|'`
-		;;
-	-opened*)
-		os=-openedition
-		;;
-	-os400*)
-		os=-os400
-		;;
-	-wince*)
-		os=-wince
-		;;
-	-osfrose*)
-		os=-osfrose
-		;;
-	-osf*)
-		os=-osf
-		;;
-	-utek*)
-		os=-bsd
-		;;
-	-dynix*)
-		os=-bsd
-		;;
-	-acis*)
-		os=-aos
-		;;
-	-atheos*)
-		os=-atheos
-		;;
-	-syllable*)
-		os=-syllable
-		;;
-	-386bsd)
-		os=-bsd
-		;;
-	-ctix* | -uts*)
-		os=-sysv
-		;;
-	-nova*)
-		os=-rtmk-nova
-		;;
-	-ns2 )
-		os=-nextstep2
-		;;
-	-nsk*)
-		os=-nsk
-		;;
-	# Preserve the version number of sinix5.
-	-sinix5.*)
-		os=`echo $os | sed -e 's|sinix|sysv|'`
-		;;
-	-sinix*)
-		os=-sysv4
-		;;
-	-tpf*)
-		os=-tpf
-		;;
-	-triton*)
-		os=-sysv3
-		;;
-	-oss*)
-		os=-sysv3
-		;;
-	-svr4)
-		os=-sysv4
-		;;
-	-svr3)
-		os=-sysv3
-		;;
-	-sysvr4)
-		os=-sysv4
-		;;
-	# This must come after -sysvr4.
-	-sysv*)
-		;;
-	-ose*)
-		os=-ose
-		;;
-	-es1800*)
-		os=-ose
-		;;
-	-xenix)
-		os=-xenix
-		;;
-	-*mint | -mint[0-9]* | -*MiNT | -MiNT[0-9]*)
-		os=-mint
-		;;
-	-aros*)
-		os=-aros
-		;;
-	-zvmoe)
-		os=-zvmoe
-		;;
-	-dicos*)
-		os=-dicos
-		;;
-	-nacl*)
-		;;
-	-none)
-		;;
-	*)
-		# Get rid of the `-' at the beginning of $os.
-		os=`echo $os | sed 's/[^-]*-//'`
-		echo Invalid configuration \`$1\': system \`$os\' not recognized 1>&2
-		exit 1
-		;;
-esac
-else
-
-# Here we handle the default operating systems that come with various machines.
-# The value should be what the vendor currently ships out the door with their
-# machine or put another way, the most popular os provided with the machine.
-
-# Note that if you're going to try to match "-MANUFACTURER" here (say,
-# "-sun"), then you have to tell the case statement up towards the top
-# that MANUFACTURER isn't an operating system.  Otherwise, code above
-# will signal an error saying that MANUFACTURER isn't an operating
-# system, and we'll never get to this point.
-
-case $basic_machine in
-	score-*)
-		os=-elf
-		;;
-	spu-*)
-		os=-elf
-		;;
-	*-acorn)
-		os=-riscix1.2
-		;;
-	arm*-rebel)
-		os=-linux
-		;;
-	arm*-semi)
-		os=-aout
-		;;
-	c4x-* | tic4x-*)
-		os=-coff
-		;;
-	c8051-*)
-		os=-elf
-		;;
-	hexagon-*)
-		os=-elf
-		;;
-	tic54x-*)
-		os=-coff
-		;;
-	tic55x-*)
-		os=-coff
-		;;
-	tic6x-*)
-		os=-coff
-		;;
-	# This must come before the *-dec entry.
-	pdp10-*)
-		os=-tops20
-		;;
-	pdp11-*)
-		os=-none
-		;;
-	*-dec | vax-*)
-		os=-ultrix4.2
-		;;
-	m68*-apollo)
-		os=-domain
-		;;
-	i386-sun)
-		os=-sunos4.0.2
-		;;
-	m68000-sun)
-		os=-sunos3
-		;;
-	m68*-cisco)
-		os=-aout
-		;;
-	mep-*)
-		os=-elf
-		;;
-	mips*-cisco)
-		os=-elf
-		;;
-	mips*-*)
-		os=-elf
-		;;
-	or32-*)
-		os=-coff
-		;;
-	*-tti)	# must be before sparc entry or we get the wrong os.
-		os=-sysv3
-		;;
-	sparc-* | *-sun)
-		os=-sunos4.1.1
-		;;
-	*-be)
-		os=-beos
-		;;
-	*-haiku)
-		os=-haiku
-		;;
-	*-ibm)
-		os=-aix
-		;;
-	*-knuth)
-		os=-mmixware
-		;;
-	*-wec)
-		os=-proelf
-		;;
-	*-winbond)
-		os=-proelf
-		;;
-	*-oki)
-		os=-proelf
-		;;
-	*-hp)
-		os=-hpux
-		;;
-	*-hitachi)
-		os=-hiux
-		;;
-	i860-* | *-att | *-ncr | *-altos | *-motorola | *-convergent)
-		os=-sysv
-		;;
-	*-cbm)
-		os=-amigaos
-		;;
-	*-dg)
-		os=-dgux
-		;;
-	*-dolphin)
-		os=-sysv3
-		;;
-	m68k-ccur)
-		os=-rtu
-		;;
-	m88k-omron*)
-		os=-luna
-		;;
-	*-next )
-		os=-nextstep
-		;;
-	*-sequent)
-		os=-ptx
-		;;
-	*-crds)
-		os=-unos
-		;;
-	*-ns)
-		os=-genix
-		;;
-	i370-*)
-		os=-mvs
-		;;
-	*-next)
-		os=-nextstep3
-		;;
-	*-gould)
-		os=-sysv
-		;;
-	*-highlevel)
-		os=-bsd
-		;;
-	*-encore)
-		os=-bsd
-		;;
-	*-sgi)
-		os=-irix
-		;;
-	*-siemens)
-		os=-sysv4
-		;;
-	*-masscomp)
-		os=-rtu
-		;;
-	f30[01]-fujitsu | f700-fujitsu)
-		os=-uxpv
-		;;
-	*-rom68k)
-		os=-coff
-		;;
-	*-*bug)
-		os=-coff
-		;;
-	*-apple)
-		os=-macos
-		;;
-	*-atari*)
-		os=-mint
-		;;
-	*)
-		os=-none
-		;;
-esac
-fi
-
-# Here we handle the case where we know the os, and the CPU type, but not the
-# manufacturer.  We pick the logical manufacturer.
-vendor=unknown
-case $basic_machine in
-	*-unknown)
-		case $os in
-			-riscix*)
-				vendor=acorn
-				;;
-			-sunos*)
-				vendor=sun
-				;;
-			-cnk*|-aix*)
-				vendor=ibm
-				;;
-			-beos*)
-				vendor=be
-				;;
-			-hpux*)
-				vendor=hp
-				;;
-			-mpeix*)
-				vendor=hp
-				;;
-			-hiux*)
-				vendor=hitachi
-				;;
-			-unos*)
-				vendor=crds
-				;;
-			-dgux*)
-				vendor=dg
-				;;
-			-luna*)
-				vendor=omron
-				;;
-			-genix*)
-				vendor=ns
-				;;
-			-mvs* | -opened*)
-				vendor=ibm
-				;;
-			-os400*)
-				vendor=ibm
-				;;
-			-ptx*)
-				vendor=sequent
-				;;
-			-tpf*)
-				vendor=ibm
-				;;
-			-vxsim* | -vxworks* | -windiss*)
-				vendor=wrs
-				;;
-			-aux*)
-				vendor=apple
-				;;
-			-hms*)
-				vendor=hitachi
-				;;
-			-mpw* | -macos*)
-				vendor=apple
-				;;
-			-*mint | -mint[0-9]* | -*MiNT | -MiNT[0-9]*)
-				vendor=atari
-				;;
-			-vos*)
-				vendor=stratus
-				;;
-		esac
-		basic_machine=`echo $basic_machine | sed "s/unknown/$vendor/"`
-		;;
-esac
-
-echo $basic_machine$os
-exit
-
-# Local variables:
-# eval: (add-hook 'write-file-hooks 'time-stamp)
-# time-stamp-start: "timestamp='"
-# time-stamp-format: "%:y-%02m-%02d"
-# time-stamp-end: "'"
-# End:
diff -Nuar groff-1.22.3.old/configure groff-1.22.3/configure
--- groff-1.22.3.old/configure	2014-11-04 10:39:11.525070190 +0200
+++ groff-1.22.3/configure	1970-01-01 02:00:00.000000000 +0200
@@ -1,12366 +0,0 @@
-#! /bin/sh
-# Guess values for system-dependent variables and create Makefiles.
-# Generated by GNU Autoconf 2.69 for groff 1.22.3.
-#
-# Report bugs to <bug-groff@gnu.org>.
-#
-#
-# Copyright (C) 1992-1996, 1998-2012 Free Software Foundation, Inc.
-#
-#
-# This configure script is free software; the Free Software Foundation
-# gives unlimited permission to copy, distribute and modify it.
-## -------------------- ##
-## M4sh Initialization. ##
-## -------------------- ##
-
-# Be more Bourne compatible
-DUALCASE=1; export DUALCASE # for MKS sh
-if test -n "${ZSH_VERSION+set}" && (emulate sh) >/dev/null 2>&1; then :
-  emulate sh
-  NULLCMD=:
-  # Pre-4.2 versions of Zsh do word splitting on ${1+"$@"}, which
-  # is contrary to our usage.  Disable this feature.
-  alias -g '${1+"$@"}'='"$@"'
-  setopt NO_GLOB_SUBST
-else
-  case `(set -o) 2>/dev/null` in #(
-  *posix*) :
-    set -o posix ;; #(
-  *) :
-     ;;
-esac
-fi
-
-
-as_nl='
-'
-export as_nl
-# Printing a long string crashes Solaris 7 /usr/bin/printf.
-as_echo='\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\'
-as_echo=$as_echo$as_echo$as_echo$as_echo$as_echo
-as_echo=$as_echo$as_echo$as_echo$as_echo$as_echo$as_echo
-# Prefer a ksh shell builtin over an external printf program on Solaris,
-# but without wasting forks for bash or zsh.
-if test -z "$BASH_VERSION$ZSH_VERSION" \
-    && (test "X`print -r -- $as_echo`" = "X$as_echo") 2>/dev/null; then
-  as_echo='print -r --'
-  as_echo_n='print -rn --'
-elif (test "X`printf %s $as_echo`" = "X$as_echo") 2>/dev/null; then
-  as_echo='printf %s\n'
-  as_echo_n='printf %s'
-else
-  if test "X`(/usr/ucb/echo -n -n $as_echo) 2>/dev/null`" = "X-n $as_echo"; then
-    as_echo_body='eval /usr/ucb/echo -n "$1$as_nl"'
-    as_echo_n='/usr/ucb/echo -n'
-  else
-    as_echo_body='eval expr "X$1" : "X\\(.*\\)"'
-    as_echo_n_body='eval
-      arg=$1;
-      case $arg in #(
-      *"$as_nl"*)
-	expr "X$arg" : "X\\(.*\\)$as_nl";
-	arg=`expr "X$arg" : ".*$as_nl\\(.*\\)"`;;
-      esac;
-      expr "X$arg" : "X\\(.*\\)" | tr -d "$as_nl"
-    '
-    export as_echo_n_body
-    as_echo_n='sh -c $as_echo_n_body as_echo'
-  fi
-  export as_echo_body
-  as_echo='sh -c $as_echo_body as_echo'
-fi
-
-# The user is always right.
-if test "${PATH_SEPARATOR+set}" != set; then
-  PATH_SEPARATOR=:
-  (PATH='/bin;/bin'; FPATH=$PATH; sh -c :) >/dev/null 2>&1 && {
-    (PATH='/bin:/bin'; FPATH=$PATH; sh -c :) >/dev/null 2>&1 ||
-      PATH_SEPARATOR=';'
-  }
-fi
-
-
-# IFS
-# We need space, tab and new line, in precisely that order.  Quoting is
-# there to prevent editors from complaining about space-tab.
-# (If _AS_PATH_WALK were called with IFS unset, it would disable word
-# splitting by setting IFS to empty value.)
-IFS=" ""	$as_nl"
-
-# Find who we are.  Look in the path if we contain no directory separator.
-as_myself=
-case $0 in #((
-  *[\\/]* ) as_myself=$0 ;;
-  *) as_save_IFS=$IFS; IFS=$PATH_SEPARATOR
-for as_dir in $PATH
-do
-  IFS=$as_save_IFS
-  test -z "$as_dir" && as_dir=.
-    test -r "$as_dir/$0" && as_myself=$as_dir/$0 && break
-  done
-IFS=$as_save_IFS
-
-     ;;
-esac
-# We did not find ourselves, most probably we were run as `sh COMMAND'
-# in which case we are not to be found in the path.
-if test "x$as_myself" = x; then
-  as_myself=$0
-fi
-if test ! -f "$as_myself"; then
-  $as_echo "$as_myself: error: cannot find myself; rerun with an absolute file name" >&2
-  exit 1
-fi
-
-# Unset variables that we do not need and which cause bugs (e.g. in
-# pre-3.0 UWIN ksh).  But do not cause bugs in bash 2.01; the "|| exit 1"
-# suppresses any "Segmentation fault" message there.  '((' could
-# trigger a bug in pdksh 5.2.14.
-for as_var in BASH_ENV ENV MAIL MAILPATH
-do eval test x\${$as_var+set} = xset \
-  && ( (unset $as_var) || exit 1) >/dev/null 2>&1 && unset $as_var || :
-done
-PS1='$ '
-PS2='> '
-PS4='+ '
-
-# NLS nuisances.
-LC_ALL=C
-export LC_ALL
-LANGUAGE=C
-export LANGUAGE
-
-# CDPATH.
-(unset CDPATH) >/dev/null 2>&1 && unset CDPATH
-
-# Use a proper internal environment variable to ensure we don't fall
-  # into an infinite loop, continuously re-executing ourselves.
-  if test x"${_as_can_reexec}" != xno && test "x$CONFIG_SHELL" != x; then
-    _as_can_reexec=no; export _as_can_reexec;
-    # We cannot yet assume a decent shell, so we have to provide a
-# neutralization value for shells without unset; and this also
-# works around shells that cannot unset nonexistent variables.
-# Preserve -v and -x to the replacement shell.
-BASH_ENV=/dev/null
-ENV=/dev/null
-(unset BASH_ENV) >/dev/null 2>&1 && unset BASH_ENV ENV
-case $- in # ((((
-  *v*x* | *x*v* ) as_opts=-vx ;;
-  *v* ) as_opts=-v ;;
-  *x* ) as_opts=-x ;;
-  * ) as_opts= ;;
-esac
-exec $CONFIG_SHELL $as_opts "$as_myself" ${1+"$@"}
-# Admittedly, this is quite paranoid, since all the known shells bail
-# out after a failed `exec'.
-$as_echo "$0: could not re-execute with $CONFIG_SHELL" >&2
-as_fn_exit 255
-  fi
-  # We don't want this to propagate to other subprocesses.
-          { _as_can_reexec=; unset _as_can_reexec;}
-if test "x$CONFIG_SHELL" = x; then
-  as_bourne_compatible="if test -n \"\${ZSH_VERSION+set}\" && (emulate sh) >/dev/null 2>&1; then :
-  emulate sh
-  NULLCMD=:
-  # Pre-4.2 versions of Zsh do word splitting on \${1+\"\$@\"}, which
-  # is contrary to our usage.  Disable this feature.
-  alias -g '\${1+\"\$@\"}'='\"\$@\"'
-  setopt NO_GLOB_SUBST
-else
-  case \`(set -o) 2>/dev/null\` in #(
-  *posix*) :
-    set -o posix ;; #(
-  *) :
-     ;;
-esac
-fi
-"
-  as_required="as_fn_return () { (exit \$1); }
-as_fn_success () { as_fn_return 0; }
-as_fn_failure () { as_fn_return 1; }
-as_fn_ret_success () { return 0; }
-as_fn_ret_failure () { return 1; }
-
-exitcode=0
-as_fn_success || { exitcode=1; echo as_fn_success failed.; }
-as_fn_failure && { exitcode=1; echo as_fn_failure succeeded.; }
-as_fn_ret_success || { exitcode=1; echo as_fn_ret_success failed.; }
-as_fn_ret_failure && { exitcode=1; echo as_fn_ret_failure succeeded.; }
-if ( set x; as_fn_ret_success y && test x = \"\$1\" ); then :
-
-else
-  exitcode=1; echo positional parameters were not saved.
-fi
-test x\$exitcode = x0 || exit 1
-test -x / || exit 1"
-  as_suggested="  as_lineno_1=";as_suggested=$as_suggested$LINENO;as_suggested=$as_suggested" as_lineno_1a=\$LINENO
-  as_lineno_2=";as_suggested=$as_suggested$LINENO;as_suggested=$as_suggested" as_lineno_2a=\$LINENO
-  eval 'test \"x\$as_lineno_1'\$as_run'\" != \"x\$as_lineno_2'\$as_run'\" &&
-  test \"x\`expr \$as_lineno_1'\$as_run' + 1\`\" = \"x\$as_lineno_2'\$as_run'\"' || exit 1
-test \$(( 1 + 1 )) = 2 || exit 1"
-  if (eval "$as_required") 2>/dev/null; then :
-  as_have_required=yes
-else
-  as_have_required=no
-fi
-  if test x$as_have_required = xyes && (eval "$as_suggested") 2>/dev/null; then :
-
-else
-  as_save_IFS=$IFS; IFS=$PATH_SEPARATOR
-as_found=false
-for as_dir in /bin$PATH_SEPARATOR/usr/bin$PATH_SEPARATOR$PATH
-do
-  IFS=$as_save_IFS
-  test -z "$as_dir" && as_dir=.
-  as_found=:
-  case $as_dir in #(
-	 /*)
-	   for as_base in sh bash ksh sh5; do
-	     # Try only shells that exist, to save several forks.
-	     as_shell=$as_dir/$as_base
-	     if { test -f "$as_shell" || test -f "$as_shell.exe"; } &&
-		    { $as_echo "$as_bourne_compatible""$as_required" | as_run=a "$as_shell"; } 2>/dev/null; then :
-  CONFIG_SHELL=$as_shell as_have_required=yes
-		   if { $as_echo "$as_bourne_compatible""$as_suggested" | as_run=a "$as_shell"; } 2>/dev/null; then :
-  break 2
-fi
-fi
-	   done;;
-       esac
-  as_found=false
-done
-$as_found || { if { test -f "$SHELL" || test -f "$SHELL.exe"; } &&
-	      { $as_echo "$as_bourne_compatible""$as_required" | as_run=a "$SHELL"; } 2>/dev/null; then :
-  CONFIG_SHELL=$SHELL as_have_required=yes
-fi; }
-IFS=$as_save_IFS
-
-
-      if test "x$CONFIG_SHELL" != x; then :
-  export CONFIG_SHELL
-             # We cannot yet assume a decent shell, so we have to provide a
-# neutralization value for shells without unset; and this also
-# works around shells that cannot unset nonexistent variables.
-# Preserve -v and -x to the replacement shell.
-BASH_ENV=/dev/null
-ENV=/dev/null
-(unset BASH_ENV) >/dev/null 2>&1 && unset BASH_ENV ENV
-case $- in # ((((
-  *v*x* | *x*v* ) as_opts=-vx ;;
-  *v* ) as_opts=-v ;;
-  *x* ) as_opts=-x ;;
-  * ) as_opts= ;;
-esac
-exec $CONFIG_SHELL $as_opts "$as_myself" ${1+"$@"}
-# Admittedly, this is quite paranoid, since all the known shells bail
-# out after a failed `exec'.
-$as_echo "$0: could not re-execute with $CONFIG_SHELL" >&2
-exit 255
-fi
-
-    if test x$as_have_required = xno; then :
-  $as_echo "$0: This script requires a shell more modern than all"
-  $as_echo "$0: the shells that I found on your system."
-  if test x${ZSH_VERSION+set} = xset ; then
-    $as_echo "$0: In particular, zsh $ZSH_VERSION has bugs and should"
-    $as_echo "$0: be upgraded to zsh 4.3.4 or later."
-  else
-    $as_echo "$0: Please tell bug-autoconf@gnu.org and bug-groff@gnu.org
-$0: about your system, including any error possibly output
-$0: before this message. Then install a modern shell, or
-$0: manually run the script under such a shell if you do
-$0: have one."
-  fi
-  exit 1
-fi
-fi
-fi
-SHELL=${CONFIG_SHELL-/bin/sh}
-export SHELL
-# Unset more variables known to interfere with behavior of common tools.
-CLICOLOR_FORCE= GREP_OPTIONS=
-unset CLICOLOR_FORCE GREP_OPTIONS
-
-## --------------------- ##
-## M4sh Shell Functions. ##
-## --------------------- ##
-# as_fn_unset VAR
-# ---------------
-# Portably unset VAR.
-as_fn_unset ()
-{
-  { eval $1=; unset $1;}
-}
-as_unset=as_fn_unset
-
-# as_fn_set_status STATUS
-# -----------------------
-# Set $? to STATUS, without forking.
-as_fn_set_status ()
-{
-  return $1
-} # as_fn_set_status
-
-# as_fn_exit STATUS
-# -----------------
-# Exit the shell with STATUS, even in a "trap 0" or "set -e" context.
-as_fn_exit ()
-{
-  set +e
-  as_fn_set_status $1
-  exit $1
-} # as_fn_exit
-
-# as_fn_mkdir_p
-# -------------
-# Create "$as_dir" as a directory, including parents if necessary.
-as_fn_mkdir_p ()
-{
-
-  case $as_dir in #(
-  -*) as_dir=./$as_dir;;
-  esac
-  test -d "$as_dir" || eval $as_mkdir_p || {
-    as_dirs=
-    while :; do
-      case $as_dir in #(
-      *\'*) as_qdir=`$as_echo "$as_dir" | sed "s/'/'\\\\\\\\''/g"`;; #'(
-      *) as_qdir=$as_dir;;
-      esac
-      as_dirs="'$as_qdir' $as_dirs"
-      as_dir=`$as_dirname -- "$as_dir" ||
-$as_expr X"$as_dir" : 'X\(.*[^/]\)//*[^/][^/]*/*$' \| \
-	 X"$as_dir" : 'X\(//\)[^/]' \| \
-	 X"$as_dir" : 'X\(//\)$' \| \
-	 X"$as_dir" : 'X\(/\)' \| . 2>/dev/null ||
-$as_echo X"$as_dir" |
-    sed '/^X\(.*[^/]\)\/\/*[^/][^/]*\/*$/{
-	    s//\1/
-	    q
-	  }
-	  /^X\(\/\/\)[^/].*/{
-	    s//\1/
-	    q
-	  }
-	  /^X\(\/\/\)$/{
-	    s//\1/
-	    q
-	  }
-	  /^X\(\/\).*/{
-	    s//\1/
-	    q
-	  }
-	  s/.*/./; q'`
-      test -d "$as_dir" && break
-    done
-    test -z "$as_dirs" || eval "mkdir $as_dirs"
-  } || test -d "$as_dir" || as_fn_error $? "cannot create directory $as_dir"
-
-
-} # as_fn_mkdir_p
-
-# as_fn_executable_p FILE
-# -----------------------
-# Test if FILE is an executable regular file.
-as_fn_executable_p ()
-{
-  test -f "$1" && test -x "$1"
-} # as_fn_executable_p
-# as_fn_append VAR VALUE
-# ----------------------
-# Append the text in VALUE to the end of the definition contained in VAR. Take
-# advantage of any shell optimizations that allow amortized linear growth over
-# repeated appends, instead of the typical quadratic growth present in naive
-# implementations.
-if (eval "as_var=1; as_var+=2; test x\$as_var = x12") 2>/dev/null; then :
-  eval 'as_fn_append ()
-  {
-    eval $1+=\$2
-  }'
-else
-  as_fn_append ()
-  {
-    eval $1=\$$1\$2
-  }
-fi # as_fn_append
-
-# as_fn_arith ARG...
-# ------------------
-# Perform arithmetic evaluation on the ARGs, and store the result in the
-# global $as_val. Take advantage of shells that can avoid forks. The arguments
-# must be portable across $(()) and expr.
-if (eval "test \$(( 1 + 1 )) = 2") 2>/dev/null; then :
-  eval 'as_fn_arith ()
-  {
-    as_val=$(( $* ))
-  }'
-else
-  as_fn_arith ()
-  {
-    as_val=`expr "$@" || test $? -eq 1`
-  }
-fi # as_fn_arith
-
-
-# as_fn_error STATUS ERROR [LINENO LOG_FD]
-# ----------------------------------------
-# Output "`basename $0`: error: ERROR" to stderr. If LINENO and LOG_FD are
-# provided, also output the error to LOG_FD, referencing LINENO. Then exit the
-# script with STATUS, using 1 if that was 0.
-as_fn_error ()
-{
-  as_status=$1; test $as_status -eq 0 && as_status=1
-  if test "$4"; then
-    as_lineno=${as_lineno-"$3"} as_lineno_stack=as_lineno_stack=$as_lineno_stack
-    $as_echo "$as_me:${as_lineno-$LINENO}: error: $2" >&$4
-  fi
-  $as_echo "$as_me: error: $2" >&2
-  as_fn_exit $as_status
-} # as_fn_error
-
-if expr a : '\(a\)' >/dev/null 2>&1 &&
-   test "X`expr 00001 : '.*\(...\)'`" = X001; then
-  as_expr=expr
-else
-  as_expr=false
-fi
-
-if (basename -- /) >/dev/null 2>&1 && test "X`basename -- / 2>&1`" = "X/"; then
-  as_basename=basename
-else
-  as_basename=false
-fi
-
-if (as_dir=`dirname -- /` && test "X$as_dir" = X/) >/dev/null 2>&1; then
-  as_dirname=dirname
-else
-  as_dirname=false
-fi
-
-as_me=`$as_basename -- "$0" ||
-$as_expr X/"$0" : '.*/\([^/][^/]*\)/*$' \| \
-	 X"$0" : 'X\(//\)$' \| \
-	 X"$0" : 'X\(/\)' \| . 2>/dev/null ||
-$as_echo X/"$0" |
-    sed '/^.*\/\([^/][^/]*\)\/*$/{
-	    s//\1/
-	    q
-	  }
-	  /^X\/\(\/\/\)$/{
-	    s//\1/
-	    q
-	  }
-	  /^X\/\(\/\).*/{
-	    s//\1/
-	    q
-	  }
-	  s/.*/./; q'`
-
-# Avoid depending upon Character Ranges.
-as_cr_letters='abcdefghijklmnopqrstuvwxyz'
-as_cr_LETTERS='ABCDEFGHIJKLMNOPQRSTUVWXYZ'
-as_cr_Letters=$as_cr_letters$as_cr_LETTERS
-as_cr_digits='0123456789'
-as_cr_alnum=$as_cr_Letters$as_cr_digits
-
-
-  as_lineno_1=$LINENO as_lineno_1a=$LINENO
-  as_lineno_2=$LINENO as_lineno_2a=$LINENO
-  eval 'test "x$as_lineno_1'$as_run'" != "x$as_lineno_2'$as_run'" &&
-  test "x`expr $as_lineno_1'$as_run' + 1`" = "x$as_lineno_2'$as_run'"' || {
-  # Blame Lee E. McMahon (1931-1989) for sed's syntax.  :-)
-  sed -n '
-    p
-    /[$]LINENO/=
-  ' <$as_myself |
-    sed '
-      s/[$]LINENO.*/&-/
-      t lineno
-      b
-      :lineno
-      N
-      :loop
-      s/[$]LINENO\([^'$as_cr_alnum'_].*\n\)\(.*\)/\2\1\2/
-      t loop
-      s/-\n.*//
-    ' >$as_me.lineno &&
-  chmod +x "$as_me.lineno" ||
-    { $as_echo "$as_me: error: cannot create $as_me.lineno; rerun with a POSIX shell" >&2; as_fn_exit 1; }
-
-  # If we had to re-execute with $CONFIG_SHELL, we're ensured to have
-  # already done that, so ensure we don't try to do so again and fall
-  # in an infinite loop.  This has already happened in practice.
-  _as_can_reexec=no; export _as_can_reexec
-  # Don't try to exec as it changes $[0], causing all sort of problems
-  # (the dirname of $[0] is not the place where we might find the
-  # original and so on.  Autoconf is especially sensitive to this).
-  . "./$as_me.lineno"
-  # Exit status is that of the last command.
-  exit
-}
-
-ECHO_C= ECHO_N= ECHO_T=
-case `echo -n x` in #(((((
--n*)
-  case `echo 'xy\c'` in
-  *c*) ECHO_T='	';;	# ECHO_T is single tab character.
-  xy)  ECHO_C='\c';;
-  *)   echo `echo ksh88 bug on AIX 6.1` > /dev/null
-       ECHO_T='	';;
-  esac;;
-*)
-  ECHO_N='-n';;
-esac
-
-rm -f conf$$ conf$$.exe conf$$.file
-if test -d conf$$.dir; then
-  rm -f conf$$.dir/conf$$.file
-else
-  rm -f conf$$.dir
-  mkdir conf$$.dir 2>/dev/null
-fi
-if (echo >conf$$.file) 2>/dev/null; then
-  if ln -s conf$$.file conf$$ 2>/dev/null; then
-    as_ln_s='ln -s'
-    # ... but there are two gotchas:
-    # 1) On MSYS, both `ln -s file dir' and `ln file dir' fail.
-    # 2) DJGPP < 2.04 has no symlinks; `ln -s' creates a wrapper executable.
-    # In both cases, we have to default to `cp -pR'.
-    ln -s conf$$.file conf$$.dir 2>/dev/null && test ! -f conf$$.exe ||
-      as_ln_s='cp -pR'
-  elif ln conf$$.file conf$$ 2>/dev/null; then
-    as_ln_s=ln
-  else
-    as_ln_s='cp -pR'
-  fi
-else
-  as_ln_s='cp -pR'
-fi
-rm -f conf$$ conf$$.exe conf$$.dir/conf$$.file conf$$.file
-rmdir conf$$.dir 2>/dev/null
-
-if mkdir -p . 2>/dev/null; then
-  as_mkdir_p='mkdir -p "$as_dir"'
-else
-  test -d ./-p && rmdir ./-p
-  as_mkdir_p=false
-fi
-
-as_test_x='test -x'
-as_executable_p=as_fn_executable_p
-
-# Sed expression to map a string onto a valid CPP name.
-as_tr_cpp="eval sed 'y%*$as_cr_letters%P$as_cr_LETTERS%;s%[^_$as_cr_alnum]%_%g'"
-
-# Sed expression to map a string onto a valid variable name.
-as_tr_sh="eval sed 'y%*+%pp%;s%[^_$as_cr_alnum]%_%g'"
-
-
-test -n "$DJDIR" || exec 7<&0 </dev/null
-exec 6>&1
-
-# Name of the host.
-# hostname on some systems (SVR3.2, old GNU/Linux) returns a bogus exit status,
-# so uname gets run too.
-ac_hostname=`(hostname || uname -n) 2>/dev/null | sed 1q`
-
-#
-# Initializations.
-#
-ac_default_prefix=/usr/local
-ac_clean_files=
-ac_config_libobj_dir=.
-LIBOBJS=
-cross_compiling=no
-subdirs=
-MFLAGS=
-MAKEFLAGS=
-
-# Identity of this package.
-PACKAGE_NAME='groff'
-PACKAGE_TARNAME='groff-1.22.3'
-PACKAGE_VERSION='1.22.3'
-PACKAGE_STRING='groff 1.22.3'
-PACKAGE_BUGREPORT='bug-groff@gnu.org'
-PACKAGE_URL=''
-
-ac_unique_file="src/roff/groff/groff.cpp"
-# Factoring default headers for most tests.
-ac_includes_default="\
-#include <stdio.h>
-#ifdef HAVE_SYS_TYPES_H
-# include <sys/types.h>
-#endif
-#ifdef HAVE_SYS_STAT_H
-# include <sys/stat.h>
-#endif
-#ifdef STDC_HEADERS
-# include <stdlib.h>
-# include <stddef.h>
-#else
-# ifdef HAVE_STDLIB_H
-#  include <stdlib.h>
-# endif
-#endif
-#ifdef HAVE_STRING_H
-# if !defined STDC_HEADERS && defined HAVE_MEMORY_H
-#  include <memory.h>
-# endif
-# include <string.h>
-#endif
-#ifdef HAVE_STRINGS_H
-# include <strings.h>
-#endif
-#ifdef HAVE_INTTYPES_H
-# include <inttypes.h>
-#endif
-#ifdef HAVE_STDINT_H
-# include <stdint.h>
-#endif
-#ifdef HAVE_UNISTD_H
-# include <unistd.h>
-#endif"
-
-ac_header_list=
-ac_func_list=
-ac_subst_vars='LTLIBOBJS
-GLIBC21
-pnmtops_nosetpage
-make_uninstall_pdfexamples
-make_install_pdfexamples
-make_pdfexamples
-make_uninstall_pdfdoc
-make_install_pdfdoc
-make_pdfdoc
-ac_ct_AWK
-ALT_AWK_PROGS
-make_uninstall_htmlexamples
-make_install_htmlexamples
-make_htmlexamples
-make_uninstall_htmldoc
-make_install_htmldoc
-make_htmldoc
-pnmtops
-psselect
-pnmtopng
-pnmcrop
-pnmcut
-ac_ct_GHOSTSCRIPT
-GHOSTSCRIPT
-ALT_GHOSTSCRIPT_PROGS
-GROFF_PATH_SEPARATOR
-tmac_wrap
-sys_tmac_prefix
-g
-PAGE
-BROKEN_SPOOLER_FLAGS
-LIBOBJS
-LIBEXT
-LTLIBICONV
-LIBICONV
-CXXCPP
-host_os
-host_vendor
-host_cpu
-host
-build_os
-build_vendor
-build_cpu
-build
-LIBM
-LIBC
-SH_SCRIPT_SED_CMD
-LN_S
-INSTALL_DATA
-INSTALL_SCRIPT
-INSTALL_PROGRAM
-INSTALL_INFO
-RANLIB
-make_uninstall_infodoc
-make_install_infodoc
-make_infodoc
-MAKEINFO
-make_uninstall_examples
-make_install_examples
-make_examples
-make_uninstall_otherdoc
-make_install_otherdoc
-make_otherdoc
-make_uninstall_shipped_htmldoc
-make_install_shipped_htmldoc
-doc_dist_target_ok
-YACC
-DVIPRINT
-PSPRINT
-LPQ
-LP
-LPR
-AWK
-PERL_VERSION
-SED
-PERL
-groffer_dir
-appresdir
-XLIBDIRS
-XPROGDIRS
-XDEVDIRS
-X_EXTRA_LIBS
-X_LIBS
-X_PRE_LIBS
-X_CFLAGS
-XMKMF
-make_uninstall_winscripts
-make_install_winscripts
-make_winscripts
-OTHERDEVDIRS
-TTYDEVDIRS
-ac_ct_CXX
-CXXFLAGS
-CXX
-EGREP
-GREP
-CPP
-OBJEXT
-EXEEXT
-ac_ct_CC
-CPPFLAGS
-LDFLAGS
-CFLAGS
-CC
-target_alias
-host_alias
-build_alias
-LIBS
-ECHO_T
-ECHO_N
-ECHO_C
-DEFS
-mandir
-localedir
-libdir
-psdir
-pdfdir
-dvidir
-htmldir
-infodir
-docdir
-oldincludedir
-includedir
-localstatedir
-sharedstatedir
-sysconfdir
-datadir
-datarootdir
-libexecdir
-sbindir
-bindir
-program_transform_name
-prefix
-exec_prefix
-PACKAGE_URL
-PACKAGE_BUGREPORT
-PACKAGE_STRING
-PACKAGE_VERSION
-PACKAGE_TARNAME
-PACKAGE_NAME
-PATH_SEPARATOR
-SHELL
-referdir
-grog_dir
-gpinyin_dir
-glilypond_dir
-libprogramdir'
-ac_subst_files=''
-ac_user_opts='
-enable_option_checking
-with_x
-with_appresdir
-with_grofferdir
-with_doc
-with_gnu_ld
-enable_rpath
-with_libiconv_prefix
-with_alt_gs
-with_gs
-with_alt_awk
-with_awk
-'
-      ac_precious_vars='build_alias
-host_alias
-target_alias
-CC
-CFLAGS
-LDFLAGS
-LIBS
-CPPFLAGS
-CPP
-CXX
-CXXFLAGS
-CCC
-XMKMF
-CXXCPP'
-
-
-# Initialize some variables set by options.
-ac_init_help=
-ac_init_version=false
-ac_unrecognized_opts=
-ac_unrecognized_sep=
-# The variables have the same names as the options, with
-# dashes changed to underlines.
-cache_file=/dev/null
-exec_prefix=NONE
-no_create=
-no_recursion=
-prefix=NONE
-program_prefix=NONE
-program_suffix=NONE
-program_transform_name=s,x,x,
-silent=
-site=
-srcdir=
-verbose=
-x_includes=NONE
-x_libraries=NONE
-
-# Installation directory options.
-# These are left unexpanded so users can "make install exec_prefix=/foo"
-# and all the variables that are supposed to be based on exec_prefix
-# by default will actually change.
-# Use braces instead of parens because sh, perl, etc. also accept them.
-# (The list follows the same order as the GNU Coding Standards.)
-bindir='${exec_prefix}/bin'
-sbindir='${exec_prefix}/sbin'
-libexecdir='${exec_prefix}/libexec'
-datarootdir='${prefix}/share'
-datadir='${datarootdir}'
-sysconfdir='${prefix}/etc'
-sharedstatedir='${prefix}/com'
-localstatedir='${prefix}/var'
-includedir='${prefix}/include'
-oldincludedir='/usr/include'
-docdir='${datarootdir}/doc/${PACKAGE_TARNAME}'
-infodir='${datarootdir}/info'
-htmldir='${docdir}'
-dvidir='${docdir}'
-pdfdir='${docdir}'
-psdir='${docdir}'
-libdir='${exec_prefix}/lib'
-localedir='${datarootdir}/locale'
-mandir='${datarootdir}/man'
-
-ac_prev=
-ac_dashdash=
-for ac_option
-do
-  # If the previous option needs an argument, assign it.
-  if test -n "$ac_prev"; then
-    eval $ac_prev=\$ac_option
-    ac_prev=
-    continue
-  fi
-
-  case $ac_option in
-  *=?*) ac_optarg=`expr "X$ac_option" : '[^=]*=\(.*\)'` ;;
-  *=)   ac_optarg= ;;
-  *)    ac_optarg=yes ;;
-  esac
-
-  # Accept the important Cygnus configure options, so we can diagnose typos.
-
-  case $ac_dashdash$ac_option in
-  --)
-    ac_dashdash=yes ;;
-
-  -bindir | --bindir | --bindi | --bind | --bin | --bi)
-    ac_prev=bindir ;;
-  -bindir=* | --bindir=* | --bindi=* | --bind=* | --bin=* | --bi=*)
-    bindir=$ac_optarg ;;
-
-  -build | --build | --buil | --bui | --bu)
-    ac_prev=build_alias ;;
-  -build=* | --build=* | --buil=* | --bui=* | --bu=*)
-    build_alias=$ac_optarg ;;
-
-  -cache-file | --cache-file | --cache-fil | --cache-fi \
-  | --cache-f | --cache- | --cache | --cach | --cac | --ca | --c)
-    ac_prev=cache_file ;;
-  -cache-file=* | --cache-file=* | --cache-fil=* | --cache-fi=* \
-  | --cache-f=* | --cache-=* | --cache=* | --cach=* | --cac=* | --ca=* | --c=*)
-    cache_file=$ac_optarg ;;
-
-  --config-cache | -C)
-    cache_file=config.cache ;;
-
-  -datadir | --datadir | --datadi | --datad)
-    ac_prev=datadir ;;
-  -datadir=* | --datadir=* | --datadi=* | --datad=*)
-    datadir=$ac_optarg ;;
-
-  -datarootdir | --datarootdir | --datarootdi | --datarootd | --dataroot \
-  | --dataroo | --dataro | --datar)
-    ac_prev=datarootdir ;;
-  -datarootdir=* | --datarootdir=* | --datarootdi=* | --datarootd=* \
-  | --dataroot=* | --dataroo=* | --dataro=* | --datar=*)
-    datarootdir=$ac_optarg ;;
-
-  -disable-* | --disable-*)
-    ac_useropt=`expr "x$ac_option" : 'x-*disable-\(.*\)'`
-    # Reject names that are not valid shell variable names.
-    expr "x$ac_useropt" : ".*[^-+._$as_cr_alnum]" >/dev/null &&
-      as_fn_error $? "invalid feature name: $ac_useropt"
-    ac_useropt_orig=$ac_useropt
-    ac_useropt=`$as_echo "$ac_useropt" | sed 's/[-+.]/_/g'`
-    case $ac_user_opts in
-      *"
-"enable_$ac_useropt"
-"*) ;;
-      *) ac_unrecognized_opts="$ac_unrecognized_opts$ac_unrecognized_sep--disable-$ac_useropt_orig"
-	 ac_unrecognized_sep=', ';;
-    esac
-    eval enable_$ac_useropt=no ;;
-
-  -docdir | --docdir | --docdi | --doc | --do)
-    ac_prev=docdir ;;
-  -docdir=* | --docdir=* | --docdi=* | --doc=* | --do=*)
-    docdir=$ac_optarg ;;
-
-  -dvidir | --dvidir | --dvidi | --dvid | --dvi | --dv)
-    ac_prev=dvidir ;;
-  -dvidir=* | --dvidir=* | --dvidi=* | --dvid=* | --dvi=* | --dv=*)
-    dvidir=$ac_optarg ;;
-
-  -enable-* | --enable-*)
-    ac_useropt=`expr "x$ac_option" : 'x-*enable-\([^=]*\)'`
-    # Reject names that are not valid shell variable names.
-    expr "x$ac_useropt" : ".*[^-+._$as_cr_alnum]" >/dev/null &&
-      as_fn_error $? "invalid feature name: $ac_useropt"
-    ac_useropt_orig=$ac_useropt
-    ac_useropt=`$as_echo "$ac_useropt" | sed 's/[-+.]/_/g'`
-    case $ac_user_opts in
-      *"
-"enable_$ac_useropt"
-"*) ;;
-      *) ac_unrecognized_opts="$ac_unrecognized_opts$ac_unrecognized_sep--enable-$ac_useropt_orig"
-	 ac_unrecognized_sep=', ';;
-    esac
-    eval enable_$ac_useropt=\$ac_optarg ;;
-
-  -exec-prefix | --exec_prefix | --exec-prefix | --exec-prefi \
-  | --exec-pref | --exec-pre | --exec-pr | --exec-p | --exec- \
-  | --exec | --exe | --ex)
-    ac_prev=exec_prefix ;;
-  -exec-prefix=* | --exec_prefix=* | --exec-prefix=* | --exec-prefi=* \
-  | --exec-pref=* | --exec-pre=* | --exec-pr=* | --exec-p=* | --exec-=* \
-  | --exec=* | --exe=* | --ex=*)
-    exec_prefix=$ac_optarg ;;
-
-  -gas | --gas | --ga | --g)
-    # Obsolete; use --with-gas.
-    with_gas=yes ;;
-
-  -help | --help | --hel | --he | -h)
-    ac_init_help=long ;;
-  -help=r* | --help=r* | --hel=r* | --he=r* | -hr*)
-    ac_init_help=recursive ;;
-  -help=s* | --help=s* | --hel=s* | --he=s* | -hs*)
-    ac_init_help=short ;;
-
-  -host | --host | --hos | --ho)
-    ac_prev=host_alias ;;
-  -host=* | --host=* | --hos=* | --ho=*)
-    host_alias=$ac_optarg ;;
-
-  -htmldir | --htmldir | --htmldi | --htmld | --html | --htm | --ht)
-    ac_prev=htmldir ;;
-  -htmldir=* | --htmldir=* | --htmldi=* | --htmld=* | --html=* | --htm=* \
-  | --ht=*)
-    htmldir=$ac_optarg ;;
-
-  -includedir | --includedir | --includedi | --included | --include \
-  | --includ | --inclu | --incl | --inc)
-    ac_prev=includedir ;;
-  -includedir=* | --includedir=* | --includedi=* | --included=* | --include=* \
-  | --includ=* | --inclu=* | --incl=* | --inc=*)
-    includedir=$ac_optarg ;;
-
-  -infodir | --infodir | --infodi | --infod | --info | --inf)
-    ac_prev=infodir ;;
-  -infodir=* | --infodir=* | --infodi=* | --infod=* | --info=* | --inf=*)
-    infodir=$ac_optarg ;;
-
-  -libdir | --libdir | --libdi | --libd)
-    ac_prev=libdir ;;
-  -libdir=* | --libdir=* | --libdi=* | --libd=*)
-    libdir=$ac_optarg ;;
-
-  -libexecdir | --libexecdir | --libexecdi | --libexecd | --libexec \
-  | --libexe | --libex | --libe)
-    ac_prev=libexecdir ;;
-  -libexecdir=* | --libexecdir=* | --libexecdi=* | --libexecd=* | --libexec=* \
-  | --libexe=* | --libex=* | --libe=*)
-    libexecdir=$ac_optarg ;;
-
-  -localedir | --localedir | --localedi | --localed | --locale)
-    ac_prev=localedir ;;
-  -localedir=* | --localedir=* | --localedi=* | --localed=* | --locale=*)
-    localedir=$ac_optarg ;;
-
-  -localstatedir | --localstatedir | --localstatedi | --localstated \
-  | --localstate | --localstat | --localsta | --localst | --locals)
-    ac_prev=localstatedir ;;
-  -localstatedir=* | --localstatedir=* | --localstatedi=* | --localstated=* \
-  | --localstate=* | --localstat=* | --localsta=* | --localst=* | --locals=*)
-    localstatedir=$ac_optarg ;;
-
-  -mandir | --mandir | --mandi | --mand | --man | --ma | --m)
-    ac_prev=mandir ;;
-  -mandir=* | --mandir=* | --mandi=* | --mand=* | --man=* | --ma=* | --m=*)
-    mandir=$ac_optarg ;;
-
-  -nfp | --nfp | --nf)
-    # Obsolete; use --without-fp.
-    with_fp=no ;;
-
-  -no-create | --no-create | --no-creat | --no-crea | --no-cre \
-  | --no-cr | --no-c | -n)
-    no_create=yes ;;
-
-  -no-recursion | --no-recursion | --no-recursio | --no-recursi \
-  | --no-recurs | --no-recur | --no-recu | --no-rec | --no-re | --no-r)
-    no_recursion=yes ;;
-
-  -oldincludedir | --oldincludedir | --oldincludedi | --oldincluded \
-  | --oldinclude | --oldinclud | --oldinclu | --oldincl | --oldinc \
-  | --oldin | --oldi | --old | --ol | --o)
-    ac_prev=oldincludedir ;;
-  -oldincludedir=* | --oldincludedir=* | --oldincludedi=* | --oldincluded=* \
-  | --oldinclude=* | --oldinclud=* | --oldinclu=* | --oldincl=* | --oldinc=* \
-  | --oldin=* | --oldi=* | --old=* | --ol=* | --o=*)
-    oldincludedir=$ac_optarg ;;
-
-  -prefix | --prefix | --prefi | --pref | --pre | --pr | --p)
-    ac_prev=prefix ;;
-  -prefix=* | --prefix=* | --prefi=* | --pref=* | --pre=* | --pr=* | --p=*)
-    prefix=$ac_optarg ;;
-
-  -program-prefix | --program-prefix | --program-prefi | --program-pref \
-  | --program-pre | --program-pr | --program-p)
-    ac_prev=program_prefix ;;
-  -program-prefix=* | --program-prefix=* | --program-prefi=* \
-  | --program-pref=* | --program-pre=* | --program-pr=* | --program-p=*)
-    program_prefix=$ac_optarg ;;
-
-  -program-suffix | --program-suffix | --program-suffi | --program-suff \
-  | --program-suf | --program-su | --program-s)
-    ac_prev=program_suffix ;;
-  -program-suffix=* | --program-suffix=* | --program-suffi=* \
-  | --program-suff=* | --program-suf=* | --program-su=* | --program-s=*)
-    program_suffix=$ac_optarg ;;
-
-  -program-transform-name | --program-transform-name \
-  | --program-transform-nam | --program-transform-na \
-  | --program-transform-n | --program-transform- \
-  | --program-transform | --program-transfor \
-  | --program-transfo | --program-transf \
-  | --program-trans | --program-tran \
-  | --progr-tra | --program-tr | --program-t)
-    ac_prev=program_transform_name ;;
-  -program-transform-name=* | --program-transform-name=* \
-  | --program-transform-nam=* | --program-transform-na=* \
-  | --program-transform-n=* | --program-transform-=* \
-  | --program-transform=* | --program-transfor=* \
-  | --program-transfo=* | --program-transf=* \
-  | --program-trans=* | --program-tran=* \
-  | --progr-tra=* | --program-tr=* | --program-t=*)
-    program_transform_name=$ac_optarg ;;
-
-  -pdfdir | --pdfdir | --pdfdi | --pdfd | --pdf | --pd)
-    ac_prev=pdfdir ;;
-  -pdfdir=* | --pdfdir=* | --pdfdi=* | --pdfd=* | --pdf=* | --pd=*)
-    pdfdir=$ac_optarg ;;
-
-  -psdir | --psdir | --psdi | --psd | --ps)
-    ac_prev=psdir ;;
-  -psdir=* | --psdir=* | --psdi=* | --psd=* | --ps=*)
-    psdir=$ac_optarg ;;
-
-  -q | -quiet | --quiet | --quie | --qui | --qu | --q \
-  | -silent | --silent | --silen | --sile | --sil)
-    silent=yes ;;
-
-  -sbindir | --sbindir | --sbindi | --sbind | --sbin | --sbi | --sb)
-    ac_prev=sbindir ;;
-  -sbindir=* | --sbindir=* | --sbindi=* | --sbind=* | --sbin=* \
-  | --sbi=* | --sb=*)
-    sbindir=$ac_optarg ;;
-
-  -sharedstatedir | --sharedstatedir | --sharedstatedi \
-  | --sharedstated | --sharedstate | --sharedstat | --sharedsta \
-  | --sharedst | --shareds | --shared | --share | --shar \
-  | --sha | --sh)
-    ac_prev=sharedstatedir ;;
-  -sharedstatedir=* | --sharedstatedir=* | --sharedstatedi=* \
-  | --sharedstated=* | --sharedstate=* | --sharedstat=* | --sharedsta=* \
-  | --sharedst=* | --shareds=* | --shared=* | --share=* | --shar=* \
-  | --sha=* | --sh=*)
-    sharedstatedir=$ac_optarg ;;
-
-  -site | --site | --sit)
-    ac_prev=site ;;
-  -site=* | --site=* | --sit=*)
-    site=$ac_optarg ;;
-
-  -srcdir | --srcdir | --srcdi | --srcd | --src | --sr)
-    ac_prev=srcdir ;;
-  -srcdir=* | --srcdir=* | --srcdi=* | --srcd=* | --src=* | --sr=*)
-    srcdir=$ac_optarg ;;
-
-  -sysconfdir | --sysconfdir | --sysconfdi | --sysconfd | --sysconf \
-  | --syscon | --sysco | --sysc | --sys | --sy)
-    ac_prev=sysconfdir ;;
-  -sysconfdir=* | --sysconfdir=* | --sysconfdi=* | --sysconfd=* | --sysconf=* \
-  | --syscon=* | --sysco=* | --sysc=* | --sys=* | --sy=*)
-    sysconfdir=$ac_optarg ;;
-
-  -target | --target | --targe | --targ | --tar | --ta | --t)
-    ac_prev=target_alias ;;
-  -target=* | --target=* | --targe=* | --targ=* | --tar=* | --ta=* | --t=*)
-    target_alias=$ac_optarg ;;
-
-  -v | -verbose | --verbose | --verbos | --verbo | --verb)
-    verbose=yes ;;
-
-  -version | --version | --versio | --versi | --vers | -V)
-    ac_init_version=: ;;
-
-  -with-* | --with-*)
-    ac_useropt=`expr "x$ac_option" : 'x-*with-\([^=]*\)'`
-    # Reject names that are not valid shell variable names.
-    expr "x$ac_useropt" : ".*[^-+._$as_cr_alnum]" >/dev/null &&
-      as_fn_error $? "invalid package name: $ac_useropt"
-    ac_useropt_orig=$ac_useropt
-    ac_useropt=`$as_echo "$ac_useropt" | sed 's/[-+.]/_/g'`
-    case $ac_user_opts in
-      *"
-"with_$ac_useropt"
-"*) ;;
-      *) ac_unrecognized_opts="$ac_unrecognized_opts$ac_unrecognized_sep--with-$ac_useropt_orig"
-	 ac_unrecognized_sep=', ';;
-    esac
-    eval with_$ac_useropt=\$ac_optarg ;;
-
-  -without-* | --without-*)
-    ac_useropt=`expr "x$ac_option" : 'x-*without-\(.*\)'`
-    # Reject names that are not valid shell variable names.
-    expr "x$ac_useropt" : ".*[^-+._$as_cr_alnum]" >/dev/null &&
-      as_fn_error $? "invalid package name: $ac_useropt"
-    ac_useropt_orig=$ac_useropt
-    ac_useropt=`$as_echo "$ac_useropt" | sed 's/[-+.]/_/g'`
-    case $ac_user_opts in
-      *"
-"with_$ac_useropt"
-"*) ;;
-      *) ac_unrecognized_opts="$ac_unrecognized_opts$ac_unrecognized_sep--without-$ac_useropt_orig"
-	 ac_unrecognized_sep=', ';;
-    esac
-    eval with_$ac_useropt=no ;;
-
-  --x)
-    # Obsolete; use --with-x.
-    with_x=yes ;;
-
-  -x-includes | --x-includes | --x-include | --x-includ | --x-inclu \
-  | --x-incl | --x-inc | --x-in | --x-i)
-    ac_prev=x_includes ;;
-  -x-includes=* | --x-includes=* | --x-include=* | --x-includ=* | --x-inclu=* \
-  | --x-incl=* | --x-inc=* | --x-in=* | --x-i=*)
-    x_includes=$ac_optarg ;;
-
-  -x-libraries | --x-libraries | --x-librarie | --x-librari \
-  | --x-librar | --x-libra | --x-libr | --x-lib | --x-li | --x-l)
-    ac_prev=x_libraries ;;
-  -x-libraries=* | --x-libraries=* | --x-librarie=* | --x-librari=* \
-  | --x-librar=* | --x-libra=* | --x-libr=* | --x-lib=* | --x-li=* | --x-l=*)
-    x_libraries=$ac_optarg ;;
-
-  -*) as_fn_error $? "unrecognized option: \`$ac_option'
-Try \`$0 --help' for more information"
-    ;;
-
-  *=*)
-    ac_envvar=`expr "x$ac_option" : 'x\([^=]*\)='`
-    # Reject names that are not valid shell variable names.
-    case $ac_envvar in #(
-      '' | [0-9]* | *[!_$as_cr_alnum]* )
-      as_fn_error $? "invalid variable name: \`$ac_envvar'" ;;
-    esac
-    eval $ac_envvar=\$ac_optarg
-    export $ac_envvar ;;
-
-  *)
-    # FIXME: should be removed in autoconf 3.0.
-    $as_echo "$as_me: WARNING: you should use --build, --host, --target" >&2
-    expr "x$ac_option" : ".*[^-._$as_cr_alnum]" >/dev/null &&
-      $as_echo "$as_me: WARNING: invalid host type: $ac_option" >&2
-    : "${build_alias=$ac_option} ${host_alias=$ac_option} ${target_alias=$ac_option}"
-    ;;
-
-  esac
-done
-
-if test -n "$ac_prev"; then
-  ac_option=--`echo $ac_prev | sed 's/_/-/g'`
-  as_fn_error $? "missing argument to $ac_option"
-fi
-
-if test -n "$ac_unrecognized_opts"; then
-  case $enable_option_checking in
-    no) ;;
-    fatal) as_fn_error $? "unrecognized options: $ac_unrecognized_opts" ;;
-    *)     $as_echo "$as_me: WARNING: unrecognized options: $ac_unrecognized_opts" >&2 ;;
-  esac
-fi
-
-# Check all directory arguments for consistency.
-for ac_var in	exec_prefix prefix bindir sbindir libexecdir datarootdir \
-		datadir sysconfdir sharedstatedir localstatedir includedir \
-		oldincludedir docdir infodir htmldir dvidir pdfdir psdir \
-		libdir localedir mandir
-do
-  eval ac_val=\$$ac_var
-  # Remove trailing slashes.
-  case $ac_val in
-    */ )
-      ac_val=`expr "X$ac_val" : 'X\(.*[^/]\)' \| "X$ac_val" : 'X\(.*\)'`
-      eval $ac_var=\$ac_val;;
-  esac
-  # Be sure to have absolute directory names.
-  case $ac_val in
-    [\\/$]* | ?:[\\/]* )  continue;;
-    NONE | '' ) case $ac_var in *prefix ) continue;; esac;;
-  esac
-  as_fn_error $? "expected an absolute directory name for --$ac_var: $ac_val"
-done
-
-# There might be people who depend on the old broken behavior: `$host'
-# used to hold the argument of --host etc.
-# FIXME: To remove some day.
-build=$build_alias
-host=$host_alias
-target=$target_alias
-
-# FIXME: To remove some day.
-if test "x$host_alias" != x; then
-  if test "x$build_alias" = x; then
-    cross_compiling=maybe
-  elif test "x$build_alias" != "x$host_alias"; then
-    cross_compiling=yes
-  fi
-fi
-
-ac_tool_prefix=
-test -n "$host_alias" && ac_tool_prefix=$host_alias-
-
-test "$silent" = yes && exec 6>/dev/null
-
-
-ac_pwd=`pwd` && test -n "$ac_pwd" &&
-ac_ls_di=`ls -di .` &&
-ac_pwd_ls_di=`cd "$ac_pwd" && ls -di .` ||
-  as_fn_error $? "working directory cannot be determined"
-test "X$ac_ls_di" = "X$ac_pwd_ls_di" ||
-  as_fn_error $? "pwd does not report name of working directory"
-
-
-# Find the source files, if location was not specified.
-if test -z "$srcdir"; then
-  ac_srcdir_defaulted=yes
-  # Try the directory containing this script, then the parent directory.
-  ac_confdir=`$as_dirname -- "$as_myself" ||
-$as_expr X"$as_myself" : 'X\(.*[^/]\)//*[^/][^/]*/*$' \| \
-	 X"$as_myself" : 'X\(//\)[^/]' \| \
-	 X"$as_myself" : 'X\(//\)$' \| \
-	 X"$as_myself" : 'X\(/\)' \| . 2>/dev/null ||
-$as_echo X"$as_myself" |
-    sed '/^X\(.*[^/]\)\/\/*[^/][^/]*\/*$/{
-	    s//\1/
-	    q
-	  }
-	  /^X\(\/\/\)[^/].*/{
-	    s//\1/
-	    q
-	  }
-	  /^X\(\/\/\)$/{
-	    s//\1/
-	    q
-	  }
-	  /^X\(\/\).*/{
-	    s//\1/
-	    q
-	  }
-	  s/.*/./; q'`
-  srcdir=$ac_confdir
-  if test ! -r "$srcdir/$ac_unique_file"; then
-    srcdir=..
-  fi
-else
-  ac_srcdir_defaulted=no
-fi
-if test ! -r "$srcdir/$ac_unique_file"; then
-  test "$ac_srcdir_defaulted" = yes && srcdir="$ac_confdir or .."
-  as_fn_error $? "cannot find sources ($ac_unique_file) in $srcdir"
-fi
-ac_msg="sources are in $srcdir, but \`cd $srcdir' does not work"
-ac_abs_confdir=`(
-	cd "$srcdir" && test -r "./$ac_unique_file" || as_fn_error $? "$ac_msg"
-	pwd)`
-# When building in place, set srcdir=.
-if test "$ac_abs_confdir" = "$ac_pwd"; then
-  srcdir=.
-fi
-# Remove unnecessary trailing slashes from srcdir.
-# Double slashes in file names in object file debugging info
-# mess up M-x gdb in Emacs.
-case $srcdir in
-*/) srcdir=`expr "X$srcdir" : 'X\(.*[^/]\)' \| "X$srcdir" : 'X\(.*\)'`;;
-esac
-for ac_var in $ac_precious_vars; do
-  eval ac_env_${ac_var}_set=\${${ac_var}+set}
-  eval ac_env_${ac_var}_value=\$${ac_var}
-  eval ac_cv_env_${ac_var}_set=\${${ac_var}+set}
-  eval ac_cv_env_${ac_var}_value=\$${ac_var}
-done
-
-#
-# Report the --help message.
-#
-if test "$ac_init_help" = "long"; then
-  # Omit some internal or obsolete options to make the list less imposing.
-  # This message is too long to be a string in the A/UX 3.1 sh.
-  cat <<_ACEOF
-\`configure' configures groff 1.22.3 to adapt to many kinds of systems.
-
-Usage: $0 [OPTION]... [VAR=VALUE]...
-
-To assign environment variables (e.g., CC, CFLAGS...), specify them as
-VAR=VALUE.  See below for descriptions of some of the useful variables.
-
-Defaults for the options are specified in brackets.
-
-Configuration:
-  -h, --help              display this help and exit
-      --help=short        display options specific to this package
-      --help=recursive    display the short help of all the included packages
-  -V, --version           display version information and exit
-  -q, --quiet, --silent   do not print \`checking ...' messages
-      --cache-file=FILE   cache test results in FILE [disabled]
-  -C, --config-cache      alias for \`--cache-file=config.cache'
-  -n, --no-create         do not create output files
-      --srcdir=DIR        find the sources in DIR [configure dir or \`..']
-
-Installation directories:
-  --prefix=PREFIX         install architecture-independent files in PREFIX
-                          [$ac_default_prefix]
-  --exec-prefix=EPREFIX   install architecture-dependent files in EPREFIX
-                          [PREFIX]
-
-By default, \`make install' will install all the files in
-\`$ac_default_prefix/bin', \`$ac_default_prefix/lib' etc.  You can specify
-an installation prefix other than \`$ac_default_prefix' using \`--prefix',
-for instance \`--prefix=\$HOME'.
-
-For better control, use the options below.
-
-Fine tuning of the installation directories:
-  --bindir=DIR            user executables [EPREFIX/bin]
-  --sbindir=DIR           system admin executables [EPREFIX/sbin]
-  --libexecdir=DIR        program executables [EPREFIX/libexec]
-  --sysconfdir=DIR        read-only single-machine data [PREFIX/etc]
-  --sharedstatedir=DIR    modifiable architecture-independent data [PREFIX/com]
-  --localstatedir=DIR     modifiable single-machine data [PREFIX/var]
-  --libdir=DIR            object code libraries [EPREFIX/lib]
-  --includedir=DIR        C header files [PREFIX/include]
-  --oldincludedir=DIR     C header files for non-gcc [/usr/include]
-  --datarootdir=DIR       read-only arch.-independent data root [PREFIX/share]
-  --datadir=DIR           read-only architecture-independent data [DATAROOTDIR]
-  --infodir=DIR           info documentation [DATAROOTDIR/info]
-  --localedir=DIR         locale-dependent data [DATAROOTDIR/locale]
-  --mandir=DIR            man documentation [DATAROOTDIR/man]
-  --docdir=DIR            documentation root [DATAROOTDIR/doc/groff-1.22.3]
-  --htmldir=DIR           html documentation [DOCDIR]
-  --dvidir=DIR            dvi documentation [DOCDIR]
-  --pdfdir=DIR            pdf documentation [DOCDIR]
-  --psdir=DIR             ps documentation [DOCDIR]
-_ACEOF
-
-  cat <<\_ACEOF
-
-X features:
-  --x-includes=DIR    X include files are in DIR
-  --x-libraries=DIR   X library files are in DIR
-
-System types:
-  --build=BUILD     configure for building on BUILD [guessed]
-  --host=HOST       cross-compile to build programs to run on HOST [BUILD]
-_ACEOF
-fi
-
-if test -n "$ac_init_help"; then
-  case $ac_init_help in
-     short | recursive ) echo "Configuration of groff 1.22.3:";;
-   esac
-  cat <<\_ACEOF
-
-Optional Features:
-  --disable-option-checking  ignore unrecognized --enable/--with options
-  --disable-FEATURE       do not include FEATURE (same as --enable-FEATURE=no)
-  --enable-FEATURE[=ARG]  include FEATURE [ARG=yes]
-  --disable-rpath         do not hardcode runtime library paths
-
-Optional Packages:
-  --with-PACKAGE[=ARG]    use PACKAGE [ARG=yes]
-  --without-PACKAGE       do not use PACKAGE (same as --with-PACKAGE=no)
-  --with-x                use the X Window System
-  --with-appresdir=DIR    X11 application resource files
-  --with-grofferdir=DIR   groffer files location
-  --with-doc[=TYPE]       choose which manuals (beside man pages) are
-                          desirable. TYPE can be `yes' or `no', or a
-                          comma-separated list of one or multiple of `html',
-                          `info', `other', `pdf', and `examples', to restrict
-                          what is produced
-  --with-gnu-ld           assume the C compiler uses GNU ld [default=no]
-  --with-libiconv-prefix[=DIR]  search for libiconv in DIR/include and DIR/lib
-  --without-libiconv-prefix     don't search for libiconv in includedir and libdir
-  --with-alt-gs=LIST      alternative names for ghostscript executable
-  --with-gs=PROG          actual [/path/]name of ghostscript executable
-  --with-alt-awk=LIST     alternative names for awk executable
-  --with-awk=PROG         actual [/path/]name of awk executable
-
-Some influential environment variables:
-  CC          C compiler command
-  CFLAGS      C compiler flags
-  LDFLAGS     linker flags, e.g. -L<lib dir> if you have libraries in a
-              nonstandard directory <lib dir>
-  LIBS        libraries to pass to the linker, e.g. -l<library>
-  CPPFLAGS    (Objective) C/C++ preprocessor flags, e.g. -I<include dir> if
-              you have headers in a nonstandard directory <include dir>
-  CPP         C preprocessor
-  CXX         C++ compiler command
-  CXXFLAGS    C++ compiler flags
-  XMKMF       Path to xmkmf, Makefile generator for X Window System
-  CXXCPP      C++ preprocessor
-
-Use these variables to override the choices made by `configure' or to help
-it to find libraries and programs with nonstandard names/locations.
-
-Report bugs to <bug-groff@gnu.org>.
-_ACEOF
-ac_status=$?
-fi
-
-if test "$ac_init_help" = "recursive"; then
-  # If there are subdirs, report their specific --help.
-  for ac_dir in : $ac_subdirs_all; do test "x$ac_dir" = x: && continue
-    test -d "$ac_dir" ||
-      { cd "$srcdir" && ac_pwd=`pwd` && srcdir=. && test -d "$ac_dir"; } ||
-      continue
-    ac_builddir=.
-
-case "$ac_dir" in
-.) ac_dir_suffix= ac_top_builddir_sub=. ac_top_build_prefix= ;;
-*)
-  ac_dir_suffix=/`$as_echo "$ac_dir" | sed 's|^\.[\\/]||'`
-  # A ".." for each directory in $ac_dir_suffix.
-  ac_top_builddir_sub=`$as_echo "$ac_dir_suffix" | sed 's|/[^\\/]*|/..|g;s|/||'`
-  case $ac_top_builddir_sub in
-  "") ac_top_builddir_sub=. ac_top_build_prefix= ;;
-  *)  ac_top_build_prefix=$ac_top_builddir_sub/ ;;
-  esac ;;
-esac
-ac_abs_top_builddir=$ac_pwd
-ac_abs_builddir=$ac_pwd$ac_dir_suffix
-# for backward compatibility:
-ac_top_builddir=$ac_top_build_prefix
-
-case $srcdir in
-  .)  # We are building in place.
-    ac_srcdir=.
-    ac_top_srcdir=$ac_top_builddir_sub
-    ac_abs_top_srcdir=$ac_pwd ;;
-  [\\/]* | ?:[\\/]* )  # Absolute name.
-    ac_srcdir=$srcdir$ac_dir_suffix;
-    ac_top_srcdir=$srcdir
-    ac_abs_top_srcdir=$srcdir ;;
-  *) # Relative name.
-    ac_srcdir=$ac_top_build_prefix$srcdir$ac_dir_suffix
-    ac_top_srcdir=$ac_top_build_prefix$srcdir
-    ac_abs_top_srcdir=$ac_pwd/$srcdir ;;
-esac
-ac_abs_srcdir=$ac_abs_top_srcdir$ac_dir_suffix
-
-    cd "$ac_dir" || { ac_status=$?; continue; }
-    # Check for guested configure.
-    if test -f "$ac_srcdir/configure.gnu"; then
-      echo &&
-      $SHELL "$ac_srcdir/configure.gnu" --help=recursive
-    elif test -f "$ac_srcdir/configure"; then
-      echo &&
-      $SHELL "$ac_srcdir/configure" --help=recursive
-    else
-      $as_echo "$as_me: WARNING: no configuration information is in $ac_dir" >&2
-    fi || ac_status=$?
-    cd "$ac_pwd" || { ac_status=$?; break; }
-  done
-fi
-
-test -n "$ac_init_help" && exit $ac_status
-if $ac_init_version; then
-  cat <<\_ACEOF
-groff configure 1.22.3
-generated by GNU Autoconf 2.69
-
-Copyright (C) 2012 Free Software Foundation, Inc.
-This configure script is free software; the Free Software Foundation
-gives unlimited permission to copy, distribute and modify it.
-_ACEOF
-  exit
-fi
-
-## ------------------------ ##
-## Autoconf initialization. ##
-## ------------------------ ##
-
-# ac_fn_c_try_compile LINENO
-# --------------------------
-# Try to compile conftest.$ac_ext, and return whether this succeeded.
-ac_fn_c_try_compile ()
-{
-  as_lineno=${as_lineno-"$1"} as_lineno_stack=as_lineno_stack=$as_lineno_stack
-  rm -f conftest.$ac_objext
-  if { { ac_try="$ac_compile"
-case "(($ac_try" in
-  *\"* | *\`* | *\\*) ac_try_echo=\$ac_try;;
-  *) ac_try_echo=$ac_try;;
-esac
-eval ac_try_echo="\"\$as_me:${as_lineno-$LINENO}: $ac_try_echo\""
-$as_echo "$ac_try_echo"; } >&5
-  (eval "$ac_compile") 2>conftest.err
-  ac_status=$?
-  if test -s conftest.err; then
-    grep -v '^ *+' conftest.err >conftest.er1
-    cat conftest.er1 >&5
-    mv -f conftest.er1 conftest.err
-  fi
-  $as_echo "$as_me:${as_lineno-$LINENO}: \$? = $ac_status" >&5
-  test $ac_status = 0; } && {
-	 test -z "$ac_c_werror_flag" ||
-	 test ! -s conftest.err
-       } && test -s conftest.$ac_objext; then :
-  ac_retval=0
-else
-  $as_echo "$as_me: failed program was:" >&5
-sed 's/^/| /' conftest.$ac_ext >&5
-
-	ac_retval=1
-fi
-  eval $as_lineno_stack; ${as_lineno_stack:+:} unset as_lineno
-  as_fn_set_status $ac_retval
-
-} # ac_fn_c_try_compile
-
-# ac_fn_c_try_cpp LINENO
-# ----------------------
-# Try to preprocess conftest.$ac_ext, and return whether this succeeded.
-ac_fn_c_try_cpp ()
-{
-  as_lineno=${as_lineno-"$1"} as_lineno_stack=as_lineno_stack=$as_lineno_stack
-  if { { ac_try="$ac_cpp conftest.$ac_ext"
-case "(($ac_try" in
-  *\"* | *\`* | *\\*) ac_try_echo=\$ac_try;;
-  *) ac_try_echo=$ac_try;;
-esac
-eval ac_try_echo="\"\$as_me:${as_lineno-$LINENO}: $ac_try_echo\""
-$as_echo "$ac_try_echo"; } >&5
-  (eval "$ac_cpp conftest.$ac_ext") 2>conftest.err
-  ac_status=$?
-  if test -s conftest.err; then
-    grep -v '^ *+' conftest.err >conftest.er1
-    cat conftest.er1 >&5
-    mv -f conftest.er1 conftest.err
-  fi
-  $as_echo "$as_me:${as_lineno-$LINENO}: \$? = $ac_status" >&5
-  test $ac_status = 0; } > conftest.i && {
-	 test -z "$ac_c_preproc_warn_flag$ac_c_werror_flag" ||
-	 test ! -s conftest.err
-       }; then :
-  ac_retval=0
-else
-  $as_echo "$as_me: failed program was:" >&5
-sed 's/^/| /' conftest.$ac_ext >&5
-
-    ac_retval=1
-fi
-  eval $as_lineno_stack; ${as_lineno_stack:+:} unset as_lineno
-  as_fn_set_status $ac_retval
-
-} # ac_fn_c_try_cpp
-
-# ac_fn_c_check_header_mongrel LINENO HEADER VAR INCLUDES
-# -------------------------------------------------------
-# Tests whether HEADER exists, giving a warning if it cannot be compiled using
-# the include files in INCLUDES and setting the cache variable VAR
-# accordingly.
-ac_fn_c_check_header_mongrel ()
-{
-  as_lineno=${as_lineno-"$1"} as_lineno_stack=as_lineno_stack=$as_lineno_stack
-  if eval \${$3+:} false; then :
-  { $as_echo "$as_me:${as_lineno-$LINENO}: checking for $2" >&5
-$as_echo_n "checking for $2... " >&6; }
-if eval \${$3+:} false; then :
-  $as_echo_n "(cached) " >&6
-fi
-eval ac_res=\$$3
-	       { $as_echo "$as_me:${as_lineno-$LINENO}: result: $ac_res" >&5
-$as_echo "$ac_res" >&6; }
-else
-  # Is the header compilable?
-{ $as_echo "$as_me:${as_lineno-$LINENO}: checking $2 usability" >&5
-$as_echo_n "checking $2 usability... " >&6; }
-cat confdefs.h - <<_ACEOF >conftest.$ac_ext
-/* end confdefs.h.  */
-$4
-#include <$2>
-_ACEOF
-if ac_fn_c_try_compile "$LINENO"; then :
-  ac_header_compiler=yes
-else
-  ac_header_compiler=no
-fi
-rm -f core conftest.err conftest.$ac_objext conftest.$ac_ext
-{ $as_echo "$as_me:${as_lineno-$LINENO}: result: $ac_header_compiler" >&5
-$as_echo "$ac_header_compiler" >&6; }
-
-# Is the header present?
-{ $as_echo "$as_me:${as_lineno-$LINENO}: checking $2 presence" >&5
-$as_echo_n "checking $2 presence... " >&6; }
-cat confdefs.h - <<_ACEOF >conftest.$ac_ext
-/* end confdefs.h.  */
-#include <$2>
-_ACEOF
-if ac_fn_c_try_cpp "$LINENO"; then :
-  ac_header_preproc=yes
-else
-  ac_header_preproc=no
-fi
-rm -f conftest.err conftest.i conftest.$ac_ext
-{ $as_echo "$as_me:${as_lineno-$LINENO}: result: $ac_header_preproc" >&5
-$as_echo "$ac_header_preproc" >&6; }
-
-# So?  What about this header?
-case $ac_header_compiler:$ac_header_preproc:$ac_c_preproc_warn_flag in #((
-  yes:no: )
-    { $as_echo "$as_me:${as_lineno-$LINENO}: WARNING: $2: accepted by the compiler, rejected by the preprocessor!" >&5
-$as_echo "$as_me: WARNING: $2: accepted by the compiler, rejected by the preprocessor!" >&2;}
-    { $as_echo "$as_me:${as_lineno-$LINENO}: WARNING: $2: proceeding with the compiler's result" >&5
-$as_echo "$as_me: WARNING: $2: proceeding with the compiler's result" >&2;}
-    ;;
-  no:yes:* )
-    { $as_echo "$as_me:${as_lineno-$LINENO}: WARNING: $2: present but cannot be compiled" >&5
-$as_echo "$as_me: WARNING: $2: present but cannot be compiled" >&2;}
-    { $as_echo "$as_me:${as_lineno-$LINENO}: WARNING: $2:     check for missing prerequisite headers?" >&5
-$as_echo "$as_me: WARNING: $2:     check for missing prerequisite headers?" >&2;}
-    { $as_echo "$as_me:${as_lineno-$LINENO}: WARNING: $2: see the Autoconf documentation" >&5
-$as_echo "$as_me: WARNING: $2: see the Autoconf documentation" >&2;}
-    { $as_echo "$as_me:${as_lineno-$LINENO}: WARNING: $2:     section \"Present But Cannot Be Compiled\"" >&5
-$as_echo "$as_me: WARNING: $2:     section \"Present But Cannot Be Compiled\"" >&2;}
-    { $as_echo "$as_me:${as_lineno-$LINENO}: WARNING: $2: proceeding with the compiler's result" >&5
-$as_echo "$as_me: WARNING: $2: proceeding with the compiler's result" >&2;}
-( $as_echo "## -------------------------------- ##
-## Report this to bug-groff@gnu.org ##
-## -------------------------------- ##"
-     ) | sed "s/^/$as_me: WARNING:     /" >&2
-    ;;
-esac
-  { $as_echo "$as_me:${as_lineno-$LINENO}: checking for $2" >&5
-$as_echo_n "checking for $2... " >&6; }
-if eval \${$3+:} false; then :
-  $as_echo_n "(cached) " >&6
-else
-  eval "$3=\$ac_header_compiler"
-fi
-eval ac_res=\$$3
-	       { $as_echo "$as_me:${as_lineno-$LINENO}: result: $ac_res" >&5
-$as_echo "$ac_res" >&6; }
-fi
-  eval $as_lineno_stack; ${as_lineno_stack:+:} unset as_lineno
-
-} # ac_fn_c_check_header_mongrel
-
-# ac_fn_c_try_run LINENO
-# ----------------------
-# Try to link conftest.$ac_ext, and return whether this succeeded. Assumes
-# that executables *can* be run.
-ac_fn_c_try_run ()
-{
-  as_lineno=${as_lineno-"$1"} as_lineno_stack=as_lineno_stack=$as_lineno_stack
-  if { { ac_try="$ac_link"
-case "(($ac_try" in
-  *\"* | *\`* | *\\*) ac_try_echo=\$ac_try;;
-  *) ac_try_echo=$ac_try;;
-esac
-eval ac_try_echo="\"\$as_me:${as_lineno-$LINENO}: $ac_try_echo\""
-$as_echo "$ac_try_echo"; } >&5
-  (eval "$ac_link") 2>&5
-  ac_status=$?
-  $as_echo "$as_me:${as_lineno-$LINENO}: \$? = $ac_status" >&5
-  test $ac_status = 0; } && { ac_try='./conftest$ac_exeext'
-  { { case "(($ac_try" in
-  *\"* | *\`* | *\\*) ac_try_echo=\$ac_try;;
-  *) ac_try_echo=$ac_try;;
-esac
-eval ac_try_echo="\"\$as_me:${as_lineno-$LINENO}: $ac_try_echo\""
-$as_echo "$ac_try_echo"; } >&5
-  (eval "$ac_try") 2>&5
-  ac_status=$?
-  $as_echo "$as_me:${as_lineno-$LINENO}: \$? = $ac_status" >&5
-  test $ac_status = 0; }; }; then :
-  ac_retval=0
-else
-  $as_echo "$as_me: program exited with status $ac_status" >&5
-       $as_echo "$as_me: failed program was:" >&5
-sed 's/^/| /' conftest.$ac_ext >&5
-
-       ac_retval=$ac_status
-fi
-  rm -rf conftest.dSYM conftest_ipa8_conftest.oo
-  eval $as_lineno_stack; ${as_lineno_stack:+:} unset as_lineno
-  as_fn_set_status $ac_retval
-
-} # ac_fn_c_try_run
-
-# ac_fn_c_check_header_compile LINENO HEADER VAR INCLUDES
-# -------------------------------------------------------
-# Tests whether HEADER exists and can be compiled using the include files in
-# INCLUDES, setting the cache variable VAR accordingly.
-ac_fn_c_check_header_compile ()
-{
-  as_lineno=${as_lineno-"$1"} as_lineno_stack=as_lineno_stack=$as_lineno_stack
-  { $as_echo "$as_me:${as_lineno-$LINENO}: checking for $2" >&5
-$as_echo_n "checking for $2... " >&6; }
-if eval \${$3+:} false; then :
-  $as_echo_n "(cached) " >&6
-else
-  cat confdefs.h - <<_ACEOF >conftest.$ac_ext
-/* end confdefs.h.  */
-$4
-#include <$2>
-_ACEOF
-if ac_fn_c_try_compile "$LINENO"; then :
-  eval "$3=yes"
-else
-  eval "$3=no"
-fi
-rm -f core conftest.err conftest.$ac_objext conftest.$ac_ext
-fi
-eval ac_res=\$$3
-	       { $as_echo "$as_me:${as_lineno-$LINENO}: result: $ac_res" >&5
-$as_echo "$ac_res" >&6; }
-  eval $as_lineno_stack; ${as_lineno_stack:+:} unset as_lineno
-
-} # ac_fn_c_check_header_compile
-
-# ac_fn_cxx_try_compile LINENO
-# ----------------------------
-# Try to compile conftest.$ac_ext, and return whether this succeeded.
-ac_fn_cxx_try_compile ()
-{
-  as_lineno=${as_lineno-"$1"} as_lineno_stack=as_lineno_stack=$as_lineno_stack
-  rm -f conftest.$ac_objext
-  if { { ac_try="$ac_compile"
-case "(($ac_try" in
-  *\"* | *\`* | *\\*) ac_try_echo=\$ac_try;;
-  *) ac_try_echo=$ac_try;;
-esac
-eval ac_try_echo="\"\$as_me:${as_lineno-$LINENO}: $ac_try_echo\""
-$as_echo "$ac_try_echo"; } >&5
-  (eval "$ac_compile") 2>conftest.err
-  ac_status=$?
-  if test -s conftest.err; then
-    grep -v '^ *+' conftest.err >conftest.er1
-    cat conftest.er1 >&5
-    mv -f conftest.er1 conftest.err
-  fi
-  $as_echo "$as_me:${as_lineno-$LINENO}: \$? = $ac_status" >&5
-  test $ac_status = 0; } && {
-	 test -z "$ac_cxx_werror_flag" ||
-	 test ! -s conftest.err
-       } && test -s conftest.$ac_objext; then :
-  ac_retval=0
-else
-  $as_echo "$as_me: failed program was:" >&5
-sed 's/^/| /' conftest.$ac_ext >&5
-
-	ac_retval=1
-fi
-  eval $as_lineno_stack; ${as_lineno_stack:+:} unset as_lineno
-  as_fn_set_status $ac_retval
-
-} # ac_fn_cxx_try_compile
-
-# ac_fn_cxx_try_run LINENO
-# ------------------------
-# Try to link conftest.$ac_ext, and return whether this succeeded. Assumes
-# that executables *can* be run.
-ac_fn_cxx_try_run ()
-{
-  as_lineno=${as_lineno-"$1"} as_lineno_stack=as_lineno_stack=$as_lineno_stack
-  if { { ac_try="$ac_link"
-case "(($ac_try" in
-  *\"* | *\`* | *\\*) ac_try_echo=\$ac_try;;
-  *) ac_try_echo=$ac_try;;
-esac
-eval ac_try_echo="\"\$as_me:${as_lineno-$LINENO}: $ac_try_echo\""
-$as_echo "$ac_try_echo"; } >&5
-  (eval "$ac_link") 2>&5
-  ac_status=$?
-  $as_echo "$as_me:${as_lineno-$LINENO}: \$? = $ac_status" >&5
-  test $ac_status = 0; } && { ac_try='./conftest$ac_exeext'
-  { { case "(($ac_try" in
-  *\"* | *\`* | *\\*) ac_try_echo=\$ac_try;;
-  *) ac_try_echo=$ac_try;;
-esac
-eval ac_try_echo="\"\$as_me:${as_lineno-$LINENO}: $ac_try_echo\""
-$as_echo "$ac_try_echo"; } >&5
-  (eval "$ac_try") 2>&5
-  ac_status=$?
-  $as_echo "$as_me:${as_lineno-$LINENO}: \$? = $ac_status" >&5
-  test $ac_status = 0; }; }; then :
-  ac_retval=0
-else
-  $as_echo "$as_me: program exited with status $ac_status" >&5
-       $as_echo "$as_me: failed program was:" >&5
-sed 's/^/| /' conftest.$ac_ext >&5
-
-       ac_retval=$ac_status
-fi
-  rm -rf conftest.dSYM conftest_ipa8_conftest.oo
-  eval $as_lineno_stack; ${as_lineno_stack:+:} unset as_lineno
-  as_fn_set_status $ac_retval
-
-} # ac_fn_cxx_try_run
-
-# ac_fn_cxx_try_link LINENO
-# -------------------------
-# Try to link conftest.$ac_ext, and return whether this succeeded.
-ac_fn_cxx_try_link ()
-{
-  as_lineno=${as_lineno-"$1"} as_lineno_stack=as_lineno_stack=$as_lineno_stack
-  rm -f conftest.$ac_objext conftest$ac_exeext
-  if { { ac_try="$ac_link"
-case "(($ac_try" in
-  *\"* | *\`* | *\\*) ac_try_echo=\$ac_try;;
-  *) ac_try_echo=$ac_try;;
-esac
-eval ac_try_echo="\"\$as_me:${as_lineno-$LINENO}: $ac_try_echo\""
-$as_echo "$ac_try_echo"; } >&5
-  (eval "$ac_link") 2>conftest.err
-  ac_status=$?
-  if test -s conftest.err; then
-    grep -v '^ *+' conftest.err >conftest.er1
-    cat conftest.er1 >&5
-    mv -f conftest.er1 conftest.err
-  fi
-  $as_echo "$as_me:${as_lineno-$LINENO}: \$? = $ac_status" >&5
-  test $ac_status = 0; } && {
-	 test -z "$ac_cxx_werror_flag" ||
-	 test ! -s conftest.err
-       } && test -s conftest$ac_exeext && {
-	 test "$cross_compiling" = yes ||
-	 test -x conftest$ac_exeext
-       }; then :
-  ac_retval=0
-else
-  $as_echo "$as_me: failed program was:" >&5
-sed 's/^/| /' conftest.$ac_ext >&5
-
-	ac_retval=1
-fi
-  # Delete the IPA/IPO (Inter Procedural Analysis/Optimization) information
-  # created by the PGI compiler (conftest_ipa8_conftest.oo), as it would
-  # interfere with the next link command; also delete a directory that is
-  # left behind by Apple's compiler.  We do this before executing the actions.
-  rm -rf conftest.dSYM conftest_ipa8_conftest.oo
-  eval $as_lineno_stack; ${as_lineno_stack:+:} unset as_lineno
-  as_fn_set_status $ac_retval
-
-} # ac_fn_cxx_try_link
-
-# ac_fn_c_try_link LINENO
-# -----------------------
-# Try to link conftest.$ac_ext, and return whether this succeeded.
-ac_fn_c_try_link ()
-{
-  as_lineno=${as_lineno-"$1"} as_lineno_stack=as_lineno_stack=$as_lineno_stack
-  rm -f conftest.$ac_objext conftest$ac_exeext
-  if { { ac_try="$ac_link"
-case "(($ac_try" in
-  *\"* | *\`* | *\\*) ac_try_echo=\$ac_try;;
-  *) ac_try_echo=$ac_try;;
-esac
-eval ac_try_echo="\"\$as_me:${as_lineno-$LINENO}: $ac_try_echo\""
-$as_echo "$ac_try_echo"; } >&5
-  (eval "$ac_link") 2>conftest.err
-  ac_status=$?
-  if test -s conftest.err; then
-    grep -v '^ *+' conftest.err >conftest.er1
-    cat conftest.er1 >&5
-    mv -f conftest.er1 conftest.err
-  fi
-  $as_echo "$as_me:${as_lineno-$LINENO}: \$? = $ac_status" >&5
-  test $ac_status = 0; } && {
-	 test -z "$ac_c_werror_flag" ||
-	 test ! -s conftest.err
-       } && test -s conftest$ac_exeext && {
-	 test "$cross_compiling" = yes ||
-	 test -x conftest$ac_exeext
-       }; then :
-  ac_retval=0
-else
-  $as_echo "$as_me: failed program was:" >&5
-sed 's/^/| /' conftest.$ac_ext >&5
-
-	ac_retval=1
-fi
-  # Delete the IPA/IPO (Inter Procedural Analysis/Optimization) information
-  # created by the PGI compiler (conftest_ipa8_conftest.oo), as it would
-  # interfere with the next link command; also delete a directory that is
-  # left behind by Apple's compiler.  We do this before executing the actions.
-  rm -rf conftest.dSYM conftest_ipa8_conftest.oo
-  eval $as_lineno_stack; ${as_lineno_stack:+:} unset as_lineno
-  as_fn_set_status $ac_retval
-
-} # ac_fn_c_try_link
-
-# ac_fn_c_check_func LINENO FUNC VAR
-# ----------------------------------
-# Tests whether FUNC exists, setting the cache variable VAR accordingly
-ac_fn_c_check_func ()
-{
-  as_lineno=${as_lineno-"$1"} as_lineno_stack=as_lineno_stack=$as_lineno_stack
-  { $as_echo "$as_me:${as_lineno-$LINENO}: checking for $2" >&5
-$as_echo_n "checking for $2... " >&6; }
-if eval \${$3+:} false; then :
-  $as_echo_n "(cached) " >&6
-else
-  cat confdefs.h - <<_ACEOF >conftest.$ac_ext
-/* end confdefs.h.  */
-/* Define $2 to an innocuous variant, in case <limits.h> declares $2.
-   For example, HP-UX 11i <limits.h> declares gettimeofday.  */
-#define $2 innocuous_$2
-
-/* System header to define __stub macros and hopefully few prototypes,
-    which can conflict with char $2 (); below.
-    Prefer <limits.h> to <assert.h> if __STDC__ is defined, since
-    <limits.h> exists even on freestanding compilers.  */
-
-#ifdef __STDC__
-# include <limits.h>
-#else
-# include <assert.h>
-#endif
-
-#undef $2
-
-/* Override any GCC internal prototype to avoid an error.
-   Use char because int might match the return type of a GCC
-   builtin and then its argument prototype would still apply.  */
-#ifdef __cplusplus
-extern "C"
-#endif
-char $2 ();
-/* The GNU C library defines this for functions which it implements
-    to always fail with ENOSYS.  Some functions are actually named
-    something starting with __ and the normal name is an alias.  */
-#if defined __stub_$2 || defined __stub___$2
-choke me
-#endif
-
-int
-main ()
-{
-return $2 ();
-  ;
-  return 0;
-}
-_ACEOF
-if ac_fn_c_try_link "$LINENO"; then :
-  eval "$3=yes"
-else
-  eval "$3=no"
-fi
-rm -f core conftest.err conftest.$ac_objext \
-    conftest$ac_exeext conftest.$ac_ext
-fi
-eval ac_res=\$$3
-	       { $as_echo "$as_me:${as_lineno-$LINENO}: result: $ac_res" >&5
-$as_echo "$ac_res" >&6; }
-  eval $as_lineno_stack; ${as_lineno_stack:+:} unset as_lineno
-
-} # ac_fn_c_check_func
-
-# ac_fn_cxx_try_cpp LINENO
-# ------------------------
-# Try to preprocess conftest.$ac_ext, and return whether this succeeded.
-ac_fn_cxx_try_cpp ()
-{
-  as_lineno=${as_lineno-"$1"} as_lineno_stack=as_lineno_stack=$as_lineno_stack
-  if { { ac_try="$ac_cpp conftest.$ac_ext"
-case "(($ac_try" in
-  *\"* | *\`* | *\\*) ac_try_echo=\$ac_try;;
-  *) ac_try_echo=$ac_try;;
-esac
-eval ac_try_echo="\"\$as_me:${as_lineno-$LINENO}: $ac_try_echo\""
-$as_echo "$ac_try_echo"; } >&5
-  (eval "$ac_cpp conftest.$ac_ext") 2>conftest.err
-  ac_status=$?
-  if test -s conftest.err; then
-    grep -v '^ *+' conftest.err >conftest.er1
-    cat conftest.er1 >&5
-    mv -f conftest.er1 conftest.err
-  fi
-  $as_echo "$as_me:${as_lineno-$LINENO}: \$? = $ac_status" >&5
-  test $ac_status = 0; } > conftest.i && {
-	 test -z "$ac_cxx_preproc_warn_flag$ac_cxx_werror_flag" ||
-	 test ! -s conftest.err
-       }; then :
-  ac_retval=0
-else
-  $as_echo "$as_me: failed program was:" >&5
-sed 's/^/| /' conftest.$ac_ext >&5
-
-    ac_retval=1
-fi
-  eval $as_lineno_stack; ${as_lineno_stack:+:} unset as_lineno
-  as_fn_set_status $ac_retval
-
-} # ac_fn_cxx_try_cpp
-
-# ac_fn_c_check_decl LINENO SYMBOL VAR INCLUDES
-# ---------------------------------------------
-# Tests whether SYMBOL is declared in INCLUDES, setting cache variable VAR
-# accordingly.
-ac_fn_c_check_decl ()
-{
-  as_lineno=${as_lineno-"$1"} as_lineno_stack=as_lineno_stack=$as_lineno_stack
-  as_decl_name=`echo $2|sed 's/ *(.*//'`
-  as_decl_use=`echo $2|sed -e 's/(/((/' -e 's/)/) 0&/' -e 's/,/) 0& (/g'`
-  { $as_echo "$as_me:${as_lineno-$LINENO}: checking whether $as_decl_name is declared" >&5
-$as_echo_n "checking whether $as_decl_name is declared... " >&6; }
-if eval \${$3+:} false; then :
-  $as_echo_n "(cached) " >&6
-else
-  cat confdefs.h - <<_ACEOF >conftest.$ac_ext
-/* end confdefs.h.  */
-$4
-int
-main ()
-{
-#ifndef $as_decl_name
-#ifdef __cplusplus
-  (void) $as_decl_use;
-#else
-  (void) $as_decl_name;
-#endif
-#endif
-
-  ;
-  return 0;
-}
-_ACEOF
-if ac_fn_c_try_compile "$LINENO"; then :
-  eval "$3=yes"
-else
-  eval "$3=no"
-fi
-rm -f core conftest.err conftest.$ac_objext conftest.$ac_ext
-fi
-eval ac_res=\$$3
-	       { $as_echo "$as_me:${as_lineno-$LINENO}: result: $ac_res" >&5
-$as_echo "$ac_res" >&6; }
-  eval $as_lineno_stack; ${as_lineno_stack:+:} unset as_lineno
-
-} # ac_fn_c_check_decl
-cat >config.log <<_ACEOF
-This file contains any messages produced by compilers while
-running configure, to aid debugging if configure makes a mistake.
-
-It was created by groff $as_me 1.22.3, which was
-generated by GNU Autoconf 2.69.  Invocation command line was
-
-  $ $0 $@
-
-_ACEOF
-exec 5>>config.log
-{
-cat <<_ASUNAME
-## --------- ##
-## Platform. ##
-## --------- ##
-
-hostname = `(hostname || uname -n) 2>/dev/null | sed 1q`
-uname -m = `(uname -m) 2>/dev/null || echo unknown`
-uname -r = `(uname -r) 2>/dev/null || echo unknown`
-uname -s = `(uname -s) 2>/dev/null || echo unknown`
-uname -v = `(uname -v) 2>/dev/null || echo unknown`
-
-/usr/bin/uname -p = `(/usr/bin/uname -p) 2>/dev/null || echo unknown`
-/bin/uname -X     = `(/bin/uname -X) 2>/dev/null     || echo unknown`
-
-/bin/arch              = `(/bin/arch) 2>/dev/null              || echo unknown`
-/usr/bin/arch -k       = `(/usr/bin/arch -k) 2>/dev/null       || echo unknown`
-/usr/convex/getsysinfo = `(/usr/convex/getsysinfo) 2>/dev/null || echo unknown`
-/usr/bin/hostinfo      = `(/usr/bin/hostinfo) 2>/dev/null      || echo unknown`
-/bin/machine           = `(/bin/machine) 2>/dev/null           || echo unknown`
-/usr/bin/oslevel       = `(/usr/bin/oslevel) 2>/dev/null       || echo unknown`
-/bin/universe          = `(/bin/universe) 2>/dev/null          || echo unknown`
-
-_ASUNAME
-
-as_save_IFS=$IFS; IFS=$PATH_SEPARATOR
-for as_dir in $PATH
-do
-  IFS=$as_save_IFS
-  test -z "$as_dir" && as_dir=.
-    $as_echo "PATH: $as_dir"
-  done
-IFS=$as_save_IFS
-
-} >&5
-
-cat >&5 <<_ACEOF
-
-
-## ----------- ##
-## Core tests. ##
-## ----------- ##
-
-_ACEOF
-
-
-# Keep a trace of the command line.
-# Strip out --no-create and --no-recursion so they do not pile up.
-# Strip out --silent because we don't want to record it for future runs.
-# Also quote any args containing shell meta-characters.
-# Make two passes to allow for proper duplicate-argument suppression.
-ac_configure_args=
-ac_configure_args0=
-ac_configure_args1=
-ac_must_keep_next=false
-for ac_pass in 1 2
-do
-  for ac_arg
-  do
-    case $ac_arg in
-    -no-create | --no-c* | -n | -no-recursion | --no-r*) continue ;;
-    -q | -quiet | --quiet | --quie | --qui | --qu | --q \
-    | -silent | --silent | --silen | --sile | --sil)
-      continue ;;
-    *\'*)
-      ac_arg=`$as_echo "$ac_arg" | sed "s/'/'\\\\\\\\''/g"` ;;
-    esac
-    case $ac_pass in
-    1) as_fn_append ac_configure_args0 " '$ac_arg'" ;;
-    2)
-      as_fn_append ac_configure_args1 " '$ac_arg'"
-      if test $ac_must_keep_next = true; then
-	ac_must_keep_next=false # Got value, back to normal.
-      else
-	case $ac_arg in
-	  *=* | --config-cache | -C | -disable-* | --disable-* \
-	  | -enable-* | --enable-* | -gas | --g* | -nfp | --nf* \
-	  | -q | -quiet | --q* | -silent | --sil* | -v | -verb* \
-	  | -with-* | --with-* | -without-* | --without-* | --x)
-	    case "$ac_configure_args0 " in
-	      "$ac_configure_args1"*" '$ac_arg' "* ) continue ;;
-	    esac
-	    ;;
-	  -* ) ac_must_keep_next=true ;;
-	esac
-      fi
-      as_fn_append ac_configure_args " '$ac_arg'"
-      ;;
-    esac
-  done
-done
-{ ac_configure_args0=; unset ac_configure_args0;}
-{ ac_configure_args1=; unset ac_configure_args1;}
-
-# When interrupted or exit'd, cleanup temporary files, and complete
-# config.log.  We remove comments because anyway the quotes in there
-# would cause problems or look ugly.
-# WARNING: Use '\'' to represent an apostrophe within the trap.
-# WARNING: Do not start the trap code with a newline, due to a FreeBSD 4.0 bug.
-trap 'exit_status=$?
-  # Save into config.log some information that might help in debugging.
-  {
-    echo
-
-    $as_echo "## ---------------- ##
-## Cache variables. ##
-## ---------------- ##"
-    echo
-    # The following way of writing the cache mishandles newlines in values,
-(
-  for ac_var in `(set) 2>&1 | sed -n '\''s/^\([a-zA-Z_][a-zA-Z0-9_]*\)=.*/\1/p'\''`; do
-    eval ac_val=\$$ac_var
-    case $ac_val in #(
-    *${as_nl}*)
-      case $ac_var in #(
-      *_cv_*) { $as_echo "$as_me:${as_lineno-$LINENO}: WARNING: cache variable $ac_var contains a newline" >&5
-$as_echo "$as_me: WARNING: cache variable $ac_var contains a newline" >&2;} ;;
-      esac
-      case $ac_var in #(
-      _ | IFS | as_nl) ;; #(
-      BASH_ARGV | BASH_SOURCE) eval $ac_var= ;; #(
-      *) { eval $ac_var=; unset $ac_var;} ;;
-      esac ;;
-    esac
-  done
-  (set) 2>&1 |
-    case $as_nl`(ac_space='\'' '\''; set) 2>&1` in #(
-    *${as_nl}ac_space=\ *)
-      sed -n \
-	"s/'\''/'\''\\\\'\'''\''/g;
-	  s/^\\([_$as_cr_alnum]*_cv_[_$as_cr_alnum]*\\)=\\(.*\\)/\\1='\''\\2'\''/p"
-      ;; #(
-    *)
-      sed -n "/^[_$as_cr_alnum]*_cv_[_$as_cr_alnum]*=/p"
-      ;;
-    esac |
-    sort
-)
-    echo
-
-    $as_echo "## ----------------- ##
-## Output variables. ##
-## ----------------- ##"
-    echo
-    for ac_var in $ac_subst_vars
-    do
-      eval ac_val=\$$ac_var
-      case $ac_val in
-      *\'\''*) ac_val=`$as_echo "$ac_val" | sed "s/'\''/'\''\\\\\\\\'\'''\''/g"`;;
-      esac
-      $as_echo "$ac_var='\''$ac_val'\''"
-    done | sort
-    echo
-
-    if test -n "$ac_subst_files"; then
-      $as_echo "## ------------------- ##
-## File substitutions. ##
-## ------------------- ##"
-      echo
-      for ac_var in $ac_subst_files
-      do
-	eval ac_val=\$$ac_var
-	case $ac_val in
-	*\'\''*) ac_val=`$as_echo "$ac_val" | sed "s/'\''/'\''\\\\\\\\'\'''\''/g"`;;
-	esac
-	$as_echo "$ac_var='\''$ac_val'\''"
-      done | sort
-      echo
-    fi
-
-    if test -s confdefs.h; then
-      $as_echo "## ----------- ##
-## confdefs.h. ##
-## ----------- ##"
-      echo
-      cat confdefs.h
-      echo
-    fi
-    test "$ac_signal" != 0 &&
-      $as_echo "$as_me: caught signal $ac_signal"
-    $as_echo "$as_me: exit $exit_status"
-  } >&5
-  rm -f core *.core core.conftest.* &&
-    rm -f -r conftest* confdefs* conf$$* $ac_clean_files &&
-    exit $exit_status
-' 0
-for ac_signal in 1 2 13 15; do
-  trap 'ac_signal='$ac_signal'; as_fn_exit 1' $ac_signal
-done
-ac_signal=0
-
-# confdefs.h avoids OS command line length limits that DEFS can exceed.
-rm -f -r conftest* confdefs.h
-
-$as_echo "/* confdefs.h */" > confdefs.h
-
-# Predefined preprocessor variables.
-
-cat >>confdefs.h <<_ACEOF
-#define PACKAGE_NAME "$PACKAGE_NAME"
-_ACEOF
-
-cat >>confdefs.h <<_ACEOF
-#define PACKAGE_TARNAME "$PACKAGE_TARNAME"
-_ACEOF
-
-cat >>confdefs.h <<_ACEOF
-#define PACKAGE_VERSION "$PACKAGE_VERSION"
-_ACEOF
-
-cat >>confdefs.h <<_ACEOF
-#define PACKAGE_STRING "$PACKAGE_STRING"
-_ACEOF
-
-cat >>confdefs.h <<_ACEOF
-#define PACKAGE_BUGREPORT "$PACKAGE_BUGREPORT"
-_ACEOF
-
-cat >>confdefs.h <<_ACEOF
-#define PACKAGE_URL "$PACKAGE_URL"
-_ACEOF
-
-
-# Let the site file select an alternate cache file if it wants to.
-# Prefer an explicitly selected file to automatically selected ones.
-ac_site_file1=NONE
-ac_site_file2=NONE
-if test -n "$CONFIG_SITE"; then
-  # We do not want a PATH search for config.site.
-  case $CONFIG_SITE in #((
-    -*)  ac_site_file1=./$CONFIG_SITE;;
-    */*) ac_site_file1=$CONFIG_SITE;;
-    *)   ac_site_file1=./$CONFIG_SITE;;
-  esac
-elif test "x$prefix" != xNONE; then
-  ac_site_file1=$prefix/share/config.site
-  ac_site_file2=$prefix/etc/config.site
-else
-  ac_site_file1=$ac_default_prefix/share/config.site
-  ac_site_file2=$ac_default_prefix/etc/config.site
-fi
-for ac_site_file in "$ac_site_file1" "$ac_site_file2"
-do
-  test "x$ac_site_file" = xNONE && continue
-  if test /dev/null != "$ac_site_file" && test -r "$ac_site_file"; then
-    { $as_echo "$as_me:${as_lineno-$LINENO}: loading site script $ac_site_file" >&5
-$as_echo "$as_me: loading site script $ac_site_file" >&6;}
-    sed 's/^/| /' "$ac_site_file" >&5
-    . "$ac_site_file" \
-      || { { $as_echo "$as_me:${as_lineno-$LINENO}: error: in \`$ac_pwd':" >&5
-$as_echo "$as_me: error: in \`$ac_pwd':" >&2;}
-as_fn_error $? "failed to load site script $ac_site_file
-See \`config.log' for more details" "$LINENO" 5; }
-  fi
-done
-
-if test -r "$cache_file"; then
-  # Some versions of bash will fail to source /dev/null (special files
-  # actually), so we avoid doing that.  DJGPP emulates it as a regular file.
-  if test /dev/null != "$cache_file" && test -f "$cache_file"; then
-    { $as_echo "$as_me:${as_lineno-$LINENO}: loading cache $cache_file" >&5
-$as_echo "$as_me: loading cache $cache_file" >&6;}
-    case $cache_file in
-      [\\/]* | ?:[\\/]* ) . "$cache_file";;
-      *)                      . "./$cache_file";;
-    esac
-  fi
-else
-  { $as_echo "$as_me:${as_lineno-$LINENO}: creating cache $cache_file" >&5
-$as_echo "$as_me: creating cache $cache_file" >&6;}
-  >$cache_file
-fi
-
-as_fn_append ac_header_list " stdlib.h"
-as_fn_append ac_header_list " unistd.h"
-as_fn_append ac_header_list " sys/param.h"
-as_fn_append ac_func_list " symlink"
-# Check that the precious variables saved in the cache have kept the same
-# value.
-ac_cache_corrupted=false
-for ac_var in $ac_precious_vars; do
-  eval ac_old_set=\$ac_cv_env_${ac_var}_set
-  eval ac_new_set=\$ac_env_${ac_var}_set
-  eval ac_old_val=\$ac_cv_env_${ac_var}_value
-  eval ac_new_val=\$ac_env_${ac_var}_value
-  case $ac_old_set,$ac_new_set in
-    set,)
-      { $as_echo "$as_me:${as_lineno-$LINENO}: error: \`$ac_var' was set to \`$ac_old_val' in the previous run" >&5
-$as_echo "$as_me: error: \`$ac_var' was set to \`$ac_old_val' in the previous run" >&2;}
-      ac_cache_corrupted=: ;;
-    ,set)
-      { $as_echo "$as_me:${as_lineno-$LINENO}: error: \`$ac_var' was not set in the previous run" >&5
-$as_echo "$as_me: error: \`$ac_var' was not set in the previous run" >&2;}
-      ac_cache_corrupted=: ;;
-    ,);;
-    *)
-      if test "x$ac_old_val" != "x$ac_new_val"; then
-	# differences in whitespace do not lead to failure.
-	ac_old_val_w=`echo x $ac_old_val`
-	ac_new_val_w=`echo x $ac_new_val`
-	if test "$ac_old_val_w" != "$ac_new_val_w"; then
-	  { $as_echo "$as_me:${as_lineno-$LINENO}: error: \`$ac_var' has changed since the previous run:" >&5
-$as_echo "$as_me: error: \`$ac_var' has changed since the previous run:" >&2;}
-	  ac_cache_corrupted=:
-	else
-	  { $as_echo "$as_me:${as_lineno-$LINENO}: warning: ignoring whitespace changes in \`$ac_var' since the previous run:" >&5
-$as_echo "$as_me: warning: ignoring whitespace changes in \`$ac_var' since the previous run:" >&2;}
-	  eval $ac_var=\$ac_old_val
-	fi
-	{ $as_echo "$as_me:${as_lineno-$LINENO}:   former value:  \`$ac_old_val'" >&5
-$as_echo "$as_me:   former value:  \`$ac_old_val'" >&2;}
-	{ $as_echo "$as_me:${as_lineno-$LINENO}:   current value: \`$ac_new_val'" >&5
-$as_echo "$as_me:   current value: \`$ac_new_val'" >&2;}
-      fi;;
-  esac
-  # Pass precious variables to config.status.
-  if test "$ac_new_set" = set; then
-    case $ac_new_val in
-    *\'*) ac_arg=$ac_var=`$as_echo "$ac_new_val" | sed "s/'/'\\\\\\\\''/g"` ;;
-    *) ac_arg=$ac_var=$ac_new_val ;;
-    esac
-    case " $ac_configure_args " in
-      *" '$ac_arg' "*) ;; # Avoid dups.  Use of quotes ensures accuracy.
-      *) as_fn_append ac_configure_args " '$ac_arg'" ;;
-    esac
-  fi
-done
-if $ac_cache_corrupted; then
-  { $as_echo "$as_me:${as_lineno-$LINENO}: error: in \`$ac_pwd':" >&5
-$as_echo "$as_me: error: in \`$ac_pwd':" >&2;}
-  { $as_echo "$as_me:${as_lineno-$LINENO}: error: changes in the environment can compromise the build" >&5
-$as_echo "$as_me: error: changes in the environment can compromise the build" >&2;}
-  as_fn_error $? "run \`make distclean' and/or \`rm $cache_file' and start over" "$LINENO" 5
-fi
-## -------------------- ##
-## Main body of script. ##
-## -------------------- ##
-
-ac_ext=c
-ac_cpp='$CPP $CPPFLAGS'
-ac_compile='$CC -c $CFLAGS $CPPFLAGS conftest.$ac_ext >&5'
-ac_link='$CC -o conftest$ac_exeext $CFLAGS $CPPFLAGS $LDFLAGS conftest.$ac_ext $LIBS >&5'
-ac_compiler_gnu=$ac_cv_c_compiler_gnu
-
-
-
-
-ac_config_headers="$ac_config_headers src/include/config.h:src/include/config.hin"
-
-
-
-ac_ext=c
-ac_cpp='$CPP $CPPFLAGS'
-ac_compile='$CC -c $CFLAGS $CPPFLAGS conftest.$ac_ext >&5'
-ac_link='$CC -o conftest$ac_exeext $CFLAGS $CPPFLAGS $LDFLAGS conftest.$ac_ext $LIBS >&5'
-ac_compiler_gnu=$ac_cv_c_compiler_gnu
-if test -n "$ac_tool_prefix"; then
-  # Extract the first word of "${ac_tool_prefix}gcc", so it can be a program name with args.
-set dummy ${ac_tool_prefix}gcc; ac_word=$2
-{ $as_echo "$as_me:${as_lineno-$LINENO}: checking for $ac_word" >&5
-$as_echo_n "checking for $ac_word... " >&6; }
-if ${ac_cv_prog_CC+:} false; then :
-  $as_echo_n "(cached) " >&6
-else
-  if test -n "$CC"; then
-  ac_cv_prog_CC="$CC" # Let the user override the test.
-else
-as_save_IFS=$IFS; IFS=$PATH_SEPARATOR
-for as_dir in $PATH
-do
-  IFS=$as_save_IFS
-  test -z "$as_dir" && as_dir=.
-    for ac_exec_ext in '' $ac_executable_extensions; do
-  if as_fn_executable_p "$as_dir/$ac_word$ac_exec_ext"; then
-    ac_cv_prog_CC="${ac_tool_prefix}gcc"
-    $as_echo "$as_me:${as_lineno-$LINENO}: found $as_dir/$ac_word$ac_exec_ext" >&5
-    break 2
-  fi
-done
-  done
-IFS=$as_save_IFS
-
-fi
-fi
-CC=$ac_cv_prog_CC
-if test -n "$CC"; then
-  { $as_echo "$as_me:${as_lineno-$LINENO}: result: $CC" >&5
-$as_echo "$CC" >&6; }
-else
-  { $as_echo "$as_me:${as_lineno-$LINENO}: result: no" >&5
-$as_echo "no" >&6; }
-fi
-
-
-fi
-if test -z "$ac_cv_prog_CC"; then
-  ac_ct_CC=$CC
-  # Extract the first word of "gcc", so it can be a program name with args.
-set dummy gcc; ac_word=$2
-{ $as_echo "$as_me:${as_lineno-$LINENO}: checking for $ac_word" >&5
-$as_echo_n "checking for $ac_word... " >&6; }
-if ${ac_cv_prog_ac_ct_CC+:} false; then :
-  $as_echo_n "(cached) " >&6
-else
-  if test -n "$ac_ct_CC"; then
-  ac_cv_prog_ac_ct_CC="$ac_ct_CC" # Let the user override the test.
-else
-as_save_IFS=$IFS; IFS=$PATH_SEPARATOR
-for as_dir in $PATH
-do
-  IFS=$as_save_IFS
-  test -z "$as_dir" && as_dir=.
-    for ac_exec_ext in '' $ac_executable_extensions; do
-  if as_fn_executable_p "$as_dir/$ac_word$ac_exec_ext"; then
-    ac_cv_prog_ac_ct_CC="gcc"
-    $as_echo "$as_me:${as_lineno-$LINENO}: found $as_dir/$ac_word$ac_exec_ext" >&5
-    break 2
-  fi
-done
-  done
-IFS=$as_save_IFS
-
-fi
-fi
-ac_ct_CC=$ac_cv_prog_ac_ct_CC
-if test -n "$ac_ct_CC"; then
-  { $as_echo "$as_me:${as_lineno-$LINENO}: result: $ac_ct_CC" >&5
-$as_echo "$ac_ct_CC" >&6; }
-else
-  { $as_echo "$as_me:${as_lineno-$LINENO}: result: no" >&5
-$as_echo "no" >&6; }
-fi
-
-  if test "x$ac_ct_CC" = x; then
-    CC=""
-  else
-    case $cross_compiling:$ac_tool_warned in
-yes:)
-{ $as_echo "$as_me:${as_lineno-$LINENO}: WARNING: using cross tools not prefixed with host triplet" >&5
-$as_echo "$as_me: WARNING: using cross tools not prefixed with host triplet" >&2;}
-ac_tool_warned=yes ;;
-esac
-    CC=$ac_ct_CC
-  fi
-else
-  CC="$ac_cv_prog_CC"
-fi
-
-if test -z "$CC"; then
-          if test -n "$ac_tool_prefix"; then
-    # Extract the first word of "${ac_tool_prefix}cc", so it can be a program name with args.
-set dummy ${ac_tool_prefix}cc; ac_word=$2
-{ $as_echo "$as_me:${as_lineno-$LINENO}: checking for $ac_word" >&5
-$as_echo_n "checking for $ac_word... " >&6; }
-if ${ac_cv_prog_CC+:} false; then :
-  $as_echo_n "(cached) " >&6
-else
-  if test -n "$CC"; then
-  ac_cv_prog_CC="$CC" # Let the user override the test.
-else
-as_save_IFS=$IFS; IFS=$PATH_SEPARATOR
-for as_dir in $PATH
-do
-  IFS=$as_save_IFS
-  test -z "$as_dir" && as_dir=.
-    for ac_exec_ext in '' $ac_executable_extensions; do
-  if as_fn_executable_p "$as_dir/$ac_word$ac_exec_ext"; then
-    ac_cv_prog_CC="${ac_tool_prefix}cc"
-    $as_echo "$as_me:${as_lineno-$LINENO}: found $as_dir/$ac_word$ac_exec_ext" >&5
-    break 2
-  fi
-done
-  done
-IFS=$as_save_IFS
-
-fi
-fi
-CC=$ac_cv_prog_CC
-if test -n "$CC"; then
-  { $as_echo "$as_me:${as_lineno-$LINENO}: result: $CC" >&5
-$as_echo "$CC" >&6; }
-else
-  { $as_echo "$as_me:${as_lineno-$LINENO}: result: no" >&5
-$as_echo "no" >&6; }
-fi
-
-
-  fi
-fi
-if test -z "$CC"; then
-  # Extract the first word of "cc", so it can be a program name with args.
-set dummy cc; ac_word=$2
-{ $as_echo "$as_me:${as_lineno-$LINENO}: checking for $ac_word" >&5
-$as_echo_n "checking for $ac_word... " >&6; }
-if ${ac_cv_prog_CC+:} false; then :
-  $as_echo_n "(cached) " >&6
-else
-  if test -n "$CC"; then
-  ac_cv_prog_CC="$CC" # Let the user override the test.
-else
-  ac_prog_rejected=no
-as_save_IFS=$IFS; IFS=$PATH_SEPARATOR
-for as_dir in $PATH
-do
-  IFS=$as_save_IFS
-  test -z "$as_dir" && as_dir=.
-    for ac_exec_ext in '' $ac_executable_extensions; do
-  if as_fn_executable_p "$as_dir/$ac_word$ac_exec_ext"; then
-    if test "$as_dir/$ac_word$ac_exec_ext" = "/usr/ucb/cc"; then
-       ac_prog_rejected=yes
-       continue
-     fi
-    ac_cv_prog_CC="cc"
-    $as_echo "$as_me:${as_lineno-$LINENO}: found $as_dir/$ac_word$ac_exec_ext" >&5
-    break 2
-  fi
-done
-  done
-IFS=$as_save_IFS
-
-if test $ac_prog_rejected = yes; then
-  # We found a bogon in the path, so make sure we never use it.
-  set dummy $ac_cv_prog_CC
-  shift
-  if test $# != 0; then
-    # We chose a different compiler from the bogus one.
-    # However, it has the same basename, so the bogon will be chosen
-    # first if we set CC to just the basename; use the full file name.
-    shift
-    ac_cv_prog_CC="$as_dir/$ac_word${1+' '}$@"
-  fi
-fi
-fi
-fi
-CC=$ac_cv_prog_CC
-if test -n "$CC"; then
-  { $as_echo "$as_me:${as_lineno-$LINENO}: result: $CC" >&5
-$as_echo "$CC" >&6; }
-else
-  { $as_echo "$as_me:${as_lineno-$LINENO}: result: no" >&5
-$as_echo "no" >&6; }
-fi
-
-
-fi
-if test -z "$CC"; then
-  if test -n "$ac_tool_prefix"; then
-  for ac_prog in cl.exe
-  do
-    # Extract the first word of "$ac_tool_prefix$ac_prog", so it can be a program name with args.
-set dummy $ac_tool_prefix$ac_prog; ac_word=$2
-{ $as_echo "$as_me:${as_lineno-$LINENO}: checking for $ac_word" >&5
-$as_echo_n "checking for $ac_word... " >&6; }
-if ${ac_cv_prog_CC+:} false; then :
-  $as_echo_n "(cached) " >&6
-else
-  if test -n "$CC"; then
-  ac_cv_prog_CC="$CC" # Let the user override the test.
-else
-as_save_IFS=$IFS; IFS=$PATH_SEPARATOR
-for as_dir in $PATH
-do
-  IFS=$as_save_IFS
-  test -z "$as_dir" && as_dir=.
-    for ac_exec_ext in '' $ac_executable_extensions; do
-  if as_fn_executable_p "$as_dir/$ac_word$ac_exec_ext"; then
-    ac_cv_prog_CC="$ac_tool_prefix$ac_prog"
-    $as_echo "$as_me:${as_lineno-$LINENO}: found $as_dir/$ac_word$ac_exec_ext" >&5
-    break 2
-  fi
-done
-  done
-IFS=$as_save_IFS
-
-fi
-fi
-CC=$ac_cv_prog_CC
-if test -n "$CC"; then
-  { $as_echo "$as_me:${as_lineno-$LINENO}: result: $CC" >&5
-$as_echo "$CC" >&6; }
-else
-  { $as_echo "$as_me:${as_lineno-$LINENO}: result: no" >&5
-$as_echo "no" >&6; }
-fi
-
-
-    test -n "$CC" && break
-  done
-fi
-if test -z "$CC"; then
-  ac_ct_CC=$CC
-  for ac_prog in cl.exe
-do
-  # Extract the first word of "$ac_prog", so it can be a program name with args.
-set dummy $ac_prog; ac_word=$2
-{ $as_echo "$as_me:${as_lineno-$LINENO}: checking for $ac_word" >&5
-$as_echo_n "checking for $ac_word... " >&6; }
-if ${ac_cv_prog_ac_ct_CC+:} false; then :
-  $as_echo_n "(cached) " >&6
-else
-  if test -n "$ac_ct_CC"; then
-  ac_cv_prog_ac_ct_CC="$ac_ct_CC" # Let the user override the test.
-else
-as_save_IFS=$IFS; IFS=$PATH_SEPARATOR
-for as_dir in $PATH
-do
-  IFS=$as_save_IFS
-  test -z "$as_dir" && as_dir=.
-    for ac_exec_ext in '' $ac_executable_extensions; do
-  if as_fn_executable_p "$as_dir/$ac_word$ac_exec_ext"; then
-    ac_cv_prog_ac_ct_CC="$ac_prog"
-    $as_echo "$as_me:${as_lineno-$LINENO}: found $as_dir/$ac_word$ac_exec_ext" >&5
-    break 2
-  fi
-done
-  done
-IFS=$as_save_IFS
-
-fi
-fi
-ac_ct_CC=$ac_cv_prog_ac_ct_CC
-if test -n "$ac_ct_CC"; then
-  { $as_echo "$as_me:${as_lineno-$LINENO}: result: $ac_ct_CC" >&5
-$as_echo "$ac_ct_CC" >&6; }
-else
-  { $as_echo "$as_me:${as_lineno-$LINENO}: result: no" >&5
-$as_echo "no" >&6; }
-fi
-
-
-  test -n "$ac_ct_CC" && break
-done
-
-  if test "x$ac_ct_CC" = x; then
-    CC=""
-  else
-    case $cross_compiling:$ac_tool_warned in
-yes:)
-{ $as_echo "$as_me:${as_lineno-$LINENO}: WARNING: using cross tools not prefixed with host triplet" >&5
-$as_echo "$as_me: WARNING: using cross tools not prefixed with host triplet" >&2;}
-ac_tool_warned=yes ;;
-esac
-    CC=$ac_ct_CC
-  fi
-fi
-
-fi
-
-
-test -z "$CC" && { { $as_echo "$as_me:${as_lineno-$LINENO}: error: in \`$ac_pwd':" >&5
-$as_echo "$as_me: error: in \`$ac_pwd':" >&2;}
-as_fn_error $? "no acceptable C compiler found in \$PATH
-See \`config.log' for more details" "$LINENO" 5; }
-
-# Provide some information about the compiler.
-$as_echo "$as_me:${as_lineno-$LINENO}: checking for C compiler version" >&5
-set X $ac_compile
-ac_compiler=$2
-for ac_option in --version -v -V -qversion; do
-  { { ac_try="$ac_compiler $ac_option >&5"
-case "(($ac_try" in
-  *\"* | *\`* | *\\*) ac_try_echo=\$ac_try;;
-  *) ac_try_echo=$ac_try;;
-esac
-eval ac_try_echo="\"\$as_me:${as_lineno-$LINENO}: $ac_try_echo\""
-$as_echo "$ac_try_echo"; } >&5
-  (eval "$ac_compiler $ac_option >&5") 2>conftest.err
-  ac_status=$?
-  if test -s conftest.err; then
-    sed '10a\
-... rest of stderr output deleted ...
-         10q' conftest.err >conftest.er1
-    cat conftest.er1 >&5
-  fi
-  rm -f conftest.er1 conftest.err
-  $as_echo "$as_me:${as_lineno-$LINENO}: \$? = $ac_status" >&5
-  test $ac_status = 0; }
-done
-
-cat confdefs.h - <<_ACEOF >conftest.$ac_ext
-/* end confdefs.h.  */
-
-int
-main ()
-{
-
-  ;
-  return 0;
-}
-_ACEOF
-ac_clean_files_save=$ac_clean_files
-ac_clean_files="$ac_clean_files a.out a.out.dSYM a.exe b.out"
-# Try to create an executable without -o first, disregard a.out.
-# It will help us diagnose broken compilers, and finding out an intuition
-# of exeext.
-{ $as_echo "$as_me:${as_lineno-$LINENO}: checking whether the C compiler works" >&5
-$as_echo_n "checking whether the C compiler works... " >&6; }
-ac_link_default=`$as_echo "$ac_link" | sed 's/ -o *conftest[^ ]*//'`
-
-# The possible output files:
-ac_files="a.out conftest.exe conftest a.exe a_out.exe b.out conftest.*"
-
-ac_rmfiles=
-for ac_file in $ac_files
-do
-  case $ac_file in
-    *.$ac_ext | *.xcoff | *.tds | *.d | *.pdb | *.xSYM | *.bb | *.bbg | *.map | *.inf | *.dSYM | *.o | *.obj ) ;;
-    * ) ac_rmfiles="$ac_rmfiles $ac_file";;
-  esac
-done
-rm -f $ac_rmfiles
-
-if { { ac_try="$ac_link_default"
-case "(($ac_try" in
-  *\"* | *\`* | *\\*) ac_try_echo=\$ac_try;;
-  *) ac_try_echo=$ac_try;;
-esac
-eval ac_try_echo="\"\$as_me:${as_lineno-$LINENO}: $ac_try_echo\""
-$as_echo "$ac_try_echo"; } >&5
-  (eval "$ac_link_default") 2>&5
-  ac_status=$?
-  $as_echo "$as_me:${as_lineno-$LINENO}: \$? = $ac_status" >&5
-  test $ac_status = 0; }; then :
-  # Autoconf-2.13 could set the ac_cv_exeext variable to `no'.
-# So ignore a value of `no', otherwise this would lead to `EXEEXT = no'
-# in a Makefile.  We should not override ac_cv_exeext if it was cached,
-# so that the user can short-circuit this test for compilers unknown to
-# Autoconf.
-for ac_file in $ac_files ''
-do
-  test -f "$ac_file" || continue
-  case $ac_file in
-    *.$ac_ext | *.xcoff | *.tds | *.d | *.pdb | *.xSYM | *.bb | *.bbg | *.map | *.inf | *.dSYM | *.o | *.obj )
-	;;
-    [ab].out )
-	# We found the default executable, but exeext='' is most
-	# certainly right.
-	break;;
-    *.* )
-	if test "${ac_cv_exeext+set}" = set && test "$ac_cv_exeext" != no;
-	then :; else
-	   ac_cv_exeext=`expr "$ac_file" : '[^.]*\(\..*\)'`
-	fi
-	# We set ac_cv_exeext here because the later test for it is not
-	# safe: cross compilers may not add the suffix if given an `-o'
-	# argument, so we may need to know it at that point already.
-	# Even if this section looks crufty: it has the advantage of
-	# actually working.
-	break;;
-    * )
-	break;;
-  esac
-done
-test "$ac_cv_exeext" = no && ac_cv_exeext=
-
-else
-  ac_file=''
-fi
-if test -z "$ac_file"; then :
-  { $as_echo "$as_me:${as_lineno-$LINENO}: result: no" >&5
-$as_echo "no" >&6; }
-$as_echo "$as_me: failed program was:" >&5
-sed 's/^/| /' conftest.$ac_ext >&5
-
-{ { $as_echo "$as_me:${as_lineno-$LINENO}: error: in \`$ac_pwd':" >&5
-$as_echo "$as_me: error: in \`$ac_pwd':" >&2;}
-as_fn_error 77 "C compiler cannot create executables
-See \`config.log' for more details" "$LINENO" 5; }
-else
-  { $as_echo "$as_me:${as_lineno-$LINENO}: result: yes" >&5
-$as_echo "yes" >&6; }
-fi
-{ $as_echo "$as_me:${as_lineno-$LINENO}: checking for C compiler default output file name" >&5
-$as_echo_n "checking for C compiler default output file name... " >&6; }
-{ $as_echo "$as_me:${as_lineno-$LINENO}: result: $ac_file" >&5
-$as_echo "$ac_file" >&6; }
-ac_exeext=$ac_cv_exeext
-
-rm -f -r a.out a.out.dSYM a.exe conftest$ac_cv_exeext b.out
-ac_clean_files=$ac_clean_files_save
-{ $as_echo "$as_me:${as_lineno-$LINENO}: checking for suffix of executables" >&5
-$as_echo_n "checking for suffix of executables... " >&6; }
-if { { ac_try="$ac_link"
-case "(($ac_try" in
-  *\"* | *\`* | *\\*) ac_try_echo=\$ac_try;;
-  *) ac_try_echo=$ac_try;;
-esac
-eval ac_try_echo="\"\$as_me:${as_lineno-$LINENO}: $ac_try_echo\""
-$as_echo "$ac_try_echo"; } >&5
-  (eval "$ac_link") 2>&5
-  ac_status=$?
-  $as_echo "$as_me:${as_lineno-$LINENO}: \$? = $ac_status" >&5
-  test $ac_status = 0; }; then :
-  # If both `conftest.exe' and `conftest' are `present' (well, observable)
-# catch `conftest.exe'.  For instance with Cygwin, `ls conftest' will
-# work properly (i.e., refer to `conftest.exe'), while it won't with
-# `rm'.
-for ac_file in conftest.exe conftest conftest.*; do
-  test -f "$ac_file" || continue
-  case $ac_file in
-    *.$ac_ext | *.xcoff | *.tds | *.d | *.pdb | *.xSYM | *.bb | *.bbg | *.map | *.inf | *.dSYM | *.o | *.obj ) ;;
-    *.* ) ac_cv_exeext=`expr "$ac_file" : '[^.]*\(\..*\)'`
-	  break;;
-    * ) break;;
-  esac
-done
-else
-  { { $as_echo "$as_me:${as_lineno-$LINENO}: error: in \`$ac_pwd':" >&5
-$as_echo "$as_me: error: in \`$ac_pwd':" >&2;}
-as_fn_error $? "cannot compute suffix of executables: cannot compile and link
-See \`config.log' for more details" "$LINENO" 5; }
-fi
-rm -f conftest conftest$ac_cv_exeext
-{ $as_echo "$as_me:${as_lineno-$LINENO}: result: $ac_cv_exeext" >&5
-$as_echo "$ac_cv_exeext" >&6; }
-
-rm -f conftest.$ac_ext
-EXEEXT=$ac_cv_exeext
-ac_exeext=$EXEEXT
-cat confdefs.h - <<_ACEOF >conftest.$ac_ext
-/* end confdefs.h.  */
-#include <stdio.h>
-int
-main ()
-{
-FILE *f = fopen ("conftest.out", "w");
- return ferror (f) || fclose (f) != 0;
-
-  ;
-  return 0;
-}
-_ACEOF
-ac_clean_files="$ac_clean_files conftest.out"
-# Check that the compiler produces executables we can run.  If not, either
-# the compiler is broken, or we cross compile.
-{ $as_echo "$as_me:${as_lineno-$LINENO}: checking whether we are cross compiling" >&5
-$as_echo_n "checking whether we are cross compiling... " >&6; }
-if test "$cross_compiling" != yes; then
-  { { ac_try="$ac_link"
-case "(($ac_try" in
-  *\"* | *\`* | *\\*) ac_try_echo=\$ac_try;;
-  *) ac_try_echo=$ac_try;;
-esac
-eval ac_try_echo="\"\$as_me:${as_lineno-$LINENO}: $ac_try_echo\""
-$as_echo "$ac_try_echo"; } >&5
-  (eval "$ac_link") 2>&5
-  ac_status=$?
-  $as_echo "$as_me:${as_lineno-$LINENO}: \$? = $ac_status" >&5
-  test $ac_status = 0; }
-  if { ac_try='./conftest$ac_cv_exeext'
-  { { case "(($ac_try" in
-  *\"* | *\`* | *\\*) ac_try_echo=\$ac_try;;
-  *) ac_try_echo=$ac_try;;
-esac
-eval ac_try_echo="\"\$as_me:${as_lineno-$LINENO}: $ac_try_echo\""
-$as_echo "$ac_try_echo"; } >&5
-  (eval "$ac_try") 2>&5
-  ac_status=$?
-  $as_echo "$as_me:${as_lineno-$LINENO}: \$? = $ac_status" >&5
-  test $ac_status = 0; }; }; then
-    cross_compiling=no
-  else
-    if test "$cross_compiling" = maybe; then
-	cross_compiling=yes
-    else
-	{ { $as_echo "$as_me:${as_lineno-$LINENO}: error: in \`$ac_pwd':" >&5
-$as_echo "$as_me: error: in \`$ac_pwd':" >&2;}
-as_fn_error $? "cannot run C compiled programs.
-If you meant to cross compile, use \`--host'.
-See \`config.log' for more details" "$LINENO" 5; }
-    fi
-  fi
-fi
-{ $as_echo "$as_me:${as_lineno-$LINENO}: result: $cross_compiling" >&5
-$as_echo "$cross_compiling" >&6; }
-
-rm -f conftest.$ac_ext conftest$ac_cv_exeext conftest.out
-ac_clean_files=$ac_clean_files_save
-{ $as_echo "$as_me:${as_lineno-$LINENO}: checking for suffix of object files" >&5
-$as_echo_n "checking for suffix of object files... " >&6; }
-if ${ac_cv_objext+:} false; then :
-  $as_echo_n "(cached) " >&6
-else
-  cat confdefs.h - <<_ACEOF >conftest.$ac_ext
-/* end confdefs.h.  */
-
-int
-main ()
-{
-
-  ;
-  return 0;
-}
-_ACEOF
-rm -f conftest.o conftest.obj
-if { { ac_try="$ac_compile"
-case "(($ac_try" in
-  *\"* | *\`* | *\\*) ac_try_echo=\$ac_try;;
-  *) ac_try_echo=$ac_try;;
-esac
-eval ac_try_echo="\"\$as_me:${as_lineno-$LINENO}: $ac_try_echo\""
-$as_echo "$ac_try_echo"; } >&5
-  (eval "$ac_compile") 2>&5
-  ac_status=$?
-  $as_echo "$as_me:${as_lineno-$LINENO}: \$? = $ac_status" >&5
-  test $ac_status = 0; }; then :
-  for ac_file in conftest.o conftest.obj conftest.*; do
-  test -f "$ac_file" || continue;
-  case $ac_file in
-    *.$ac_ext | *.xcoff | *.tds | *.d | *.pdb | *.xSYM | *.bb | *.bbg | *.map | *.inf | *.dSYM ) ;;
-    *) ac_cv_objext=`expr "$ac_file" : '.*\.\(.*\)'`
-       break;;
-  esac
-done
-else
-  $as_echo "$as_me: failed program was:" >&5
-sed 's/^/| /' conftest.$ac_ext >&5
-
-{ { $as_echo "$as_me:${as_lineno-$LINENO}: error: in \`$ac_pwd':" >&5
-$as_echo "$as_me: error: in \`$ac_pwd':" >&2;}
-as_fn_error $? "cannot compute suffix of object files: cannot compile
-See \`config.log' for more details" "$LINENO" 5; }
-fi
-rm -f conftest.$ac_cv_objext conftest.$ac_ext
-fi
-{ $as_echo "$as_me:${as_lineno-$LINENO}: result: $ac_cv_objext" >&5
-$as_echo "$ac_cv_objext" >&6; }
-OBJEXT=$ac_cv_objext
-ac_objext=$OBJEXT
-{ $as_echo "$as_me:${as_lineno-$LINENO}: checking whether we are using the GNU C compiler" >&5
-$as_echo_n "checking whether we are using the GNU C compiler... " >&6; }
-if ${ac_cv_c_compiler_gnu+:} false; then :
-  $as_echo_n "(cached) " >&6
-else
-  cat confdefs.h - <<_ACEOF >conftest.$ac_ext
-/* end confdefs.h.  */
-
-int
-main ()
-{
-#ifndef __GNUC__
-       choke me
-#endif
-
-  ;
-  return 0;
-}
-_ACEOF
-if ac_fn_c_try_compile "$LINENO"; then :
-  ac_compiler_gnu=yes
-else
-  ac_compiler_gnu=no
-fi
-rm -f core conftest.err conftest.$ac_objext conftest.$ac_ext
-ac_cv_c_compiler_gnu=$ac_compiler_gnu
-
-fi
-{ $as_echo "$as_me:${as_lineno-$LINENO}: result: $ac_cv_c_compiler_gnu" >&5
-$as_echo "$ac_cv_c_compiler_gnu" >&6; }
-if test $ac_compiler_gnu = yes; then
-  GCC=yes
-else
-  GCC=
-fi
-ac_test_CFLAGS=${CFLAGS+set}
-ac_save_CFLAGS=$CFLAGS
-{ $as_echo "$as_me:${as_lineno-$LINENO}: checking whether $CC accepts -g" >&5
-$as_echo_n "checking whether $CC accepts -g... " >&6; }
-if ${ac_cv_prog_cc_g+:} false; then :
-  $as_echo_n "(cached) " >&6
-else
-  ac_save_c_werror_flag=$ac_c_werror_flag
-   ac_c_werror_flag=yes
-   ac_cv_prog_cc_g=no
-   CFLAGS="-g"
-   cat confdefs.h - <<_ACEOF >conftest.$ac_ext
-/* end confdefs.h.  */
-
-int
-main ()
-{
-
-  ;
-  return 0;
-}
-_ACEOF
-if ac_fn_c_try_compile "$LINENO"; then :
-  ac_cv_prog_cc_g=yes
-else
-  CFLAGS=""
-      cat confdefs.h - <<_ACEOF >conftest.$ac_ext
-/* end confdefs.h.  */
-
-int
-main ()
-{
-
-  ;
-  return 0;
-}
-_ACEOF
-if ac_fn_c_try_compile "$LINENO"; then :
-
-else
-  ac_c_werror_flag=$ac_save_c_werror_flag
-	 CFLAGS="-g"
-	 cat confdefs.h - <<_ACEOF >conftest.$ac_ext
-/* end confdefs.h.  */
-
-int
-main ()
-{
-
-  ;
-  return 0;
-}
-_ACEOF
-if ac_fn_c_try_compile "$LINENO"; then :
-  ac_cv_prog_cc_g=yes
-fi
-rm -f core conftest.err conftest.$ac_objext conftest.$ac_ext
-fi
-rm -f core conftest.err conftest.$ac_objext conftest.$ac_ext
-fi
-rm -f core conftest.err conftest.$ac_objext conftest.$ac_ext
-   ac_c_werror_flag=$ac_save_c_werror_flag
-fi
-{ $as_echo "$as_me:${as_lineno-$LINENO}: result: $ac_cv_prog_cc_g" >&5
-$as_echo "$ac_cv_prog_cc_g" >&6; }
-if test "$ac_test_CFLAGS" = set; then
-  CFLAGS=$ac_save_CFLAGS
-elif test $ac_cv_prog_cc_g = yes; then
-  if test "$GCC" = yes; then
-    CFLAGS="-g -O2"
-  else
-    CFLAGS="-g"
-  fi
-else
-  if test "$GCC" = yes; then
-    CFLAGS="-O2"
-  else
-    CFLAGS=
-  fi
-fi
-{ $as_echo "$as_me:${as_lineno-$LINENO}: checking for $CC option to accept ISO C89" >&5
-$as_echo_n "checking for $CC option to accept ISO C89... " >&6; }
-if ${ac_cv_prog_cc_c89+:} false; then :
-  $as_echo_n "(cached) " >&6
-else
-  ac_cv_prog_cc_c89=no
-ac_save_CC=$CC
-cat confdefs.h - <<_ACEOF >conftest.$ac_ext
-/* end confdefs.h.  */
-#include <stdarg.h>
-#include <stdio.h>
-struct stat;
-/* Most of the following tests are stolen from RCS 5.7's src/conf.sh.  */
-struct buf { int x; };
-FILE * (*rcsopen) (struct buf *, struct stat *, int);
-static char *e (p, i)
-     char **p;
-     int i;
-{
-  return p[i];
-}
-static char *f (char * (*g) (char **, int), char **p, ...)
-{
-  char *s;
-  va_list v;
-  va_start (v,p);
-  s = g (p, va_arg (v,int));
-  va_end (v);
-  return s;
-}
-
-/* OSF 4.0 Compaq cc is some sort of almost-ANSI by default.  It has
-   function prototypes and stuff, but not '\xHH' hex character constants.
-   These don't provoke an error unfortunately, instead are silently treated
-   as 'x'.  The following induces an error, until -std is added to get
-   proper ANSI mode.  Curiously '\x00'!='x' always comes out true, for an
-   array size at least.  It's necessary to write '\x00'==0 to get something
-   that's true only with -std.  */
-int osf4_cc_array ['\x00' == 0 ? 1 : -1];
-
-/* IBM C 6 for AIX is almost-ANSI by default, but it replaces macro parameters
-   inside strings and character constants.  */
-#define FOO(x) 'x'
-int xlc6_cc_array[FOO(a) == 'x' ? 1 : -1];
-
-int test (int i, double x);
-struct s1 {int (*f) (int a);};
-struct s2 {int (*f) (double a);};
-int pairnames (int, char **, FILE *(*)(struct buf *, struct stat *, int), int, int);
-int argc;
-char **argv;
-int
-main ()
-{
-return f (e, argv, 0) != argv[0]  ||  f (e, argv, 1) != argv[1];
-  ;
-  return 0;
-}
-_ACEOF
-for ac_arg in '' -qlanglvl=extc89 -qlanglvl=ansi -std \
-	-Ae "-Aa -D_HPUX_SOURCE" "-Xc -D__EXTENSIONS__"
-do
-  CC="$ac_save_CC $ac_arg"
-  if ac_fn_c_try_compile "$LINENO"; then :
-  ac_cv_prog_cc_c89=$ac_arg
-fi
-rm -f core conftest.err conftest.$ac_objext
-  test "x$ac_cv_prog_cc_c89" != "xno" && break
-done
-rm -f conftest.$ac_ext
-CC=$ac_save_CC
-
-fi
-# AC_CACHE_VAL
-case "x$ac_cv_prog_cc_c89" in
-  x)
-    { $as_echo "$as_me:${as_lineno-$LINENO}: result: none needed" >&5
-$as_echo "none needed" >&6; } ;;
-  xno)
-    { $as_echo "$as_me:${as_lineno-$LINENO}: result: unsupported" >&5
-$as_echo "unsupported" >&6; } ;;
-  *)
-    CC="$CC $ac_cv_prog_cc_c89"
-    { $as_echo "$as_me:${as_lineno-$LINENO}: result: $ac_cv_prog_cc_c89" >&5
-$as_echo "$ac_cv_prog_cc_c89" >&6; } ;;
-esac
-if test "x$ac_cv_prog_cc_c89" != xno; then :
-
-fi
-
-ac_ext=c
-ac_cpp='$CPP $CPPFLAGS'
-ac_compile='$CC -c $CFLAGS $CPPFLAGS conftest.$ac_ext >&5'
-ac_link='$CC -o conftest$ac_exeext $CFLAGS $CPPFLAGS $LDFLAGS conftest.$ac_ext $LIBS >&5'
-ac_compiler_gnu=$ac_cv_c_compiler_gnu
-
-
-ac_ext=c
-ac_cpp='$CPP $CPPFLAGS'
-ac_compile='$CC -c $CFLAGS $CPPFLAGS conftest.$ac_ext >&5'
-ac_link='$CC -o conftest$ac_exeext $CFLAGS $CPPFLAGS $LDFLAGS conftest.$ac_ext $LIBS >&5'
-ac_compiler_gnu=$ac_cv_c_compiler_gnu
-{ $as_echo "$as_me:${as_lineno-$LINENO}: checking how to run the C preprocessor" >&5
-$as_echo_n "checking how to run the C preprocessor... " >&6; }
-# On Suns, sometimes $CPP names a directory.
-if test -n "$CPP" && test -d "$CPP"; then
-  CPP=
-fi
-if test -z "$CPP"; then
-  if ${ac_cv_prog_CPP+:} false; then :
-  $as_echo_n "(cached) " >&6
-else
-      # Double quotes because CPP needs to be expanded
-    for CPP in "$CC -E" "$CC -E -traditional-cpp" "/lib/cpp"
-    do
-      ac_preproc_ok=false
-for ac_c_preproc_warn_flag in '' yes
-do
-  # Use a header file that comes with gcc, so configuring glibc
-  # with a fresh cross-compiler works.
-  # Prefer <limits.h> to <assert.h> if __STDC__ is defined, since
-  # <limits.h> exists even on freestanding compilers.
-  # On the NeXT, cc -E runs the code through the compiler's parser,
-  # not just through cpp. "Syntax error" is here to catch this case.
-  cat confdefs.h - <<_ACEOF >conftest.$ac_ext
-/* end confdefs.h.  */
-#ifdef __STDC__
-# include <limits.h>
-#else
-# include <assert.h>
-#endif
-		     Syntax error
-_ACEOF
-if ac_fn_c_try_cpp "$LINENO"; then :
-
-else
-  # Broken: fails on valid input.
-continue
-fi
-rm -f conftest.err conftest.i conftest.$ac_ext
-
-  # OK, works on sane cases.  Now check whether nonexistent headers
-  # can be detected and how.
-  cat confdefs.h - <<_ACEOF >conftest.$ac_ext
-/* end confdefs.h.  */
-#include <ac_nonexistent.h>
-_ACEOF
-if ac_fn_c_try_cpp "$LINENO"; then :
-  # Broken: success on invalid input.
-continue
-else
-  # Passes both tests.
-ac_preproc_ok=:
-break
-fi
-rm -f conftest.err conftest.i conftest.$ac_ext
-
-done
-# Because of `break', _AC_PREPROC_IFELSE's cleaning code was skipped.
-rm -f conftest.i conftest.err conftest.$ac_ext
-if $ac_preproc_ok; then :
-  break
-fi
-
-    done
-    ac_cv_prog_CPP=$CPP
-
-fi
-  CPP=$ac_cv_prog_CPP
-else
-  ac_cv_prog_CPP=$CPP
-fi
-{ $as_echo "$as_me:${as_lineno-$LINENO}: result: $CPP" >&5
-$as_echo "$CPP" >&6; }
-ac_preproc_ok=false
-for ac_c_preproc_warn_flag in '' yes
-do
-  # Use a header file that comes with gcc, so configuring glibc
-  # with a fresh cross-compiler works.
-  # Prefer <limits.h> to <assert.h> if __STDC__ is defined, since
-  # <limits.h> exists even on freestanding compilers.
-  # On the NeXT, cc -E runs the code through the compiler's parser,
-  # not just through cpp. "Syntax error" is here to catch this case.
-  cat confdefs.h - <<_ACEOF >conftest.$ac_ext
-/* end confdefs.h.  */
-#ifdef __STDC__
-# include <limits.h>
-#else
-# include <assert.h>
-#endif
-		     Syntax error
-_ACEOF
-if ac_fn_c_try_cpp "$LINENO"; then :
-
-else
-  # Broken: fails on valid input.
-continue
-fi
-rm -f conftest.err conftest.i conftest.$ac_ext
-
-  # OK, works on sane cases.  Now check whether nonexistent headers
-  # can be detected and how.
-  cat confdefs.h - <<_ACEOF >conftest.$ac_ext
-/* end confdefs.h.  */
-#include <ac_nonexistent.h>
-_ACEOF
-if ac_fn_c_try_cpp "$LINENO"; then :
-  # Broken: success on invalid input.
-continue
-else
-  # Passes both tests.
-ac_preproc_ok=:
-break
-fi
-rm -f conftest.err conftest.i conftest.$ac_ext
-
-done
-# Because of `break', _AC_PREPROC_IFELSE's cleaning code was skipped.
-rm -f conftest.i conftest.err conftest.$ac_ext
-if $ac_preproc_ok; then :
-
-else
-  { { $as_echo "$as_me:${as_lineno-$LINENO}: error: in \`$ac_pwd':" >&5
-$as_echo "$as_me: error: in \`$ac_pwd':" >&2;}
-as_fn_error $? "C preprocessor \"$CPP\" fails sanity check
-See \`config.log' for more details" "$LINENO" 5; }
-fi
-
-ac_ext=c
-ac_cpp='$CPP $CPPFLAGS'
-ac_compile='$CC -c $CFLAGS $CPPFLAGS conftest.$ac_ext >&5'
-ac_link='$CC -o conftest$ac_exeext $CFLAGS $CPPFLAGS $LDFLAGS conftest.$ac_ext $LIBS >&5'
-ac_compiler_gnu=$ac_cv_c_compiler_gnu
-
-
-{ $as_echo "$as_me:${as_lineno-$LINENO}: checking for grep that handles long lines and -e" >&5
-$as_echo_n "checking for grep that handles long lines and -e... " >&6; }
-if ${ac_cv_path_GREP+:} false; then :
-  $as_echo_n "(cached) " >&6
-else
-  if test -z "$GREP"; then
-  ac_path_GREP_found=false
-  # Loop through the user's path and test for each of PROGNAME-LIST
-  as_save_IFS=$IFS; IFS=$PATH_SEPARATOR
-for as_dir in $PATH$PATH_SEPARATOR/usr/xpg4/bin
-do
-  IFS=$as_save_IFS
-  test -z "$as_dir" && as_dir=.
-    for ac_prog in grep ggrep; do
-    for ac_exec_ext in '' $ac_executable_extensions; do
-      ac_path_GREP="$as_dir/$ac_prog$ac_exec_ext"
-      as_fn_executable_p "$ac_path_GREP" || continue
-# Check for GNU ac_path_GREP and select it if it is found.
-  # Check for GNU $ac_path_GREP
-case `"$ac_path_GREP" --version 2>&1` in
-*GNU*)
-  ac_cv_path_GREP="$ac_path_GREP" ac_path_GREP_found=:;;
-*)
-  ac_count=0
-  $as_echo_n 0123456789 >"conftest.in"
-  while :
-  do
-    cat "conftest.in" "conftest.in" >"conftest.tmp"
-    mv "conftest.tmp" "conftest.in"
-    cp "conftest.in" "conftest.nl"
-    $as_echo 'GREP' >> "conftest.nl"
-    "$ac_path_GREP" -e 'GREP$' -e '-(cannot match)-' < "conftest.nl" >"conftest.out" 2>/dev/null || break
-    diff "conftest.out" "conftest.nl" >/dev/null 2>&1 || break
-    as_fn_arith $ac_count + 1 && ac_count=$as_val
-    if test $ac_count -gt ${ac_path_GREP_max-0}; then
-      # Best one so far, save it but keep looking for a better one
-      ac_cv_path_GREP="$ac_path_GREP"
-      ac_path_GREP_max=$ac_count
-    fi
-    # 10*(2^10) chars as input seems more than enough
-    test $ac_count -gt 10 && break
-  done
-  rm -f conftest.in conftest.tmp conftest.nl conftest.out;;
-esac
-
-      $ac_path_GREP_found && break 3
-    done
-  done
-  done
-IFS=$as_save_IFS
-  if test -z "$ac_cv_path_GREP"; then
-    as_fn_error $? "no acceptable grep could be found in $PATH$PATH_SEPARATOR/usr/xpg4/bin" "$LINENO" 5
-  fi
-else
-  ac_cv_path_GREP=$GREP
-fi
-
-fi
-{ $as_echo "$as_me:${as_lineno-$LINENO}: result: $ac_cv_path_GREP" >&5
-$as_echo "$ac_cv_path_GREP" >&6; }
- GREP="$ac_cv_path_GREP"
-
-
-{ $as_echo "$as_me:${as_lineno-$LINENO}: checking for egrep" >&5
-$as_echo_n "checking for egrep... " >&6; }
-if ${ac_cv_path_EGREP+:} false; then :
-  $as_echo_n "(cached) " >&6
-else
-  if echo a | $GREP -E '(a|b)' >/dev/null 2>&1
-   then ac_cv_path_EGREP="$GREP -E"
-   else
-     if test -z "$EGREP"; then
-  ac_path_EGREP_found=false
-  # Loop through the user's path and test for each of PROGNAME-LIST
-  as_save_IFS=$IFS; IFS=$PATH_SEPARATOR
-for as_dir in $PATH$PATH_SEPARATOR/usr/xpg4/bin
-do
-  IFS=$as_save_IFS
-  test -z "$as_dir" && as_dir=.
-    for ac_prog in egrep; do
-    for ac_exec_ext in '' $ac_executable_extensions; do
-      ac_path_EGREP="$as_dir/$ac_prog$ac_exec_ext"
-      as_fn_executable_p "$ac_path_EGREP" || continue
-# Check for GNU ac_path_EGREP and select it if it is found.
-  # Check for GNU $ac_path_EGREP
-case `"$ac_path_EGREP" --version 2>&1` in
-*GNU*)
-  ac_cv_path_EGREP="$ac_path_EGREP" ac_path_EGREP_found=:;;
-*)
-  ac_count=0
-  $as_echo_n 0123456789 >"conftest.in"
-  while :
-  do
-    cat "conftest.in" "conftest.in" >"conftest.tmp"
-    mv "conftest.tmp" "conftest.in"
-    cp "conftest.in" "conftest.nl"
-    $as_echo 'EGREP' >> "conftest.nl"
-    "$ac_path_EGREP" 'EGREP$' < "conftest.nl" >"conftest.out" 2>/dev/null || break
-    diff "conftest.out" "conftest.nl" >/dev/null 2>&1 || break
-    as_fn_arith $ac_count + 1 && ac_count=$as_val
-    if test $ac_count -gt ${ac_path_EGREP_max-0}; then
-      # Best one so far, save it but keep looking for a better one
-      ac_cv_path_EGREP="$ac_path_EGREP"
-      ac_path_EGREP_max=$ac_count
-    fi
-    # 10*(2^10) chars as input seems more than enough
-    test $ac_count -gt 10 && break
-  done
-  rm -f conftest.in conftest.tmp conftest.nl conftest.out;;
-esac
-
-      $ac_path_EGREP_found && break 3
-    done
-  done
-  done
-IFS=$as_save_IFS
-  if test -z "$ac_cv_path_EGREP"; then
-    as_fn_error $? "no acceptable egrep could be found in $PATH$PATH_SEPARATOR/usr/xpg4/bin" "$LINENO" 5
-  fi
-else
-  ac_cv_path_EGREP=$EGREP
-fi
-
-   fi
-fi
-{ $as_echo "$as_me:${as_lineno-$LINENO}: result: $ac_cv_path_EGREP" >&5
-$as_echo "$ac_cv_path_EGREP" >&6; }
- EGREP="$ac_cv_path_EGREP"
-
-
-{ $as_echo "$as_me:${as_lineno-$LINENO}: checking for ANSI C header files" >&5
-$as_echo_n "checking for ANSI C header files... " >&6; }
-if ${ac_cv_header_stdc+:} false; then :
-  $as_echo_n "(cached) " >&6
-else
-  cat confdefs.h - <<_ACEOF >conftest.$ac_ext
-/* end confdefs.h.  */
-#include <stdlib.h>
-#include <stdarg.h>
-#include <string.h>
-#include <float.h>
-
-int
-main ()
-{
-
-  ;
-  return 0;
-}
-_ACEOF
-if ac_fn_c_try_compile "$LINENO"; then :
-  ac_cv_header_stdc=yes
-else
-  ac_cv_header_stdc=no
-fi
-rm -f core conftest.err conftest.$ac_objext conftest.$ac_ext
-
-if test $ac_cv_header_stdc = yes; then
-  # SunOS 4.x string.h does not declare mem*, contrary to ANSI.
-  cat confdefs.h - <<_ACEOF >conftest.$ac_ext
-/* end confdefs.h.  */
-#include <string.h>
-
-_ACEOF
-if (eval "$ac_cpp conftest.$ac_ext") 2>&5 |
-  $EGREP "memchr" >/dev/null 2>&1; then :
-
-else
-  ac_cv_header_stdc=no
-fi
-rm -f conftest*
-
-fi
-
-if test $ac_cv_header_stdc = yes; then
-  # ISC 2.0.2 stdlib.h does not declare free, contrary to ANSI.
-  cat confdefs.h - <<_ACEOF >conftest.$ac_ext
-/* end confdefs.h.  */
-#include <stdlib.h>
-
-_ACEOF
-if (eval "$ac_cpp conftest.$ac_ext") 2>&5 |
-  $EGREP "free" >/dev/null 2>&1; then :
-
-else
-  ac_cv_header_stdc=no
-fi
-rm -f conftest*
-
-fi
-
-if test $ac_cv_header_stdc = yes; then
-  # /bin/cc in Irix-4.0.5 gets non-ANSI ctype macros unless using -ansi.
-  if test "$cross_compiling" = yes; then :
-  :
-else
-  cat confdefs.h - <<_ACEOF >conftest.$ac_ext
-/* end confdefs.h.  */
-#include <ctype.h>
-#include <stdlib.h>
-#if ((' ' & 0x0FF) == 0x020)
-# define ISLOWER(c) ('a' <= (c) && (c) <= 'z')
-# define TOUPPER(c) (ISLOWER(c) ? 'A' + ((c) - 'a') : (c))
-#else
-# define ISLOWER(c) \
-		   (('a' <= (c) && (c) <= 'i') \
-		     || ('j' <= (c) && (c) <= 'r') \
-		     || ('s' <= (c) && (c) <= 'z'))
-# define TOUPPER(c) (ISLOWER(c) ? ((c) | 0x40) : (c))
-#endif
-
-#define XOR(e, f) (((e) && !(f)) || (!(e) && (f)))
-int
-main ()
-{
-  int i;
-  for (i = 0; i < 256; i++)
-    if (XOR (islower (i), ISLOWER (i))
-	|| toupper (i) != TOUPPER (i))
-      return 2;
-  return 0;
-}
-_ACEOF
-if ac_fn_c_try_run "$LINENO"; then :
-
-else
-  ac_cv_header_stdc=no
-fi
-rm -f core *.core core.conftest.* gmon.out bb.out conftest$ac_exeext \
-  conftest.$ac_objext conftest.beam conftest.$ac_ext
-fi
-
-fi
-fi
-{ $as_echo "$as_me:${as_lineno-$LINENO}: result: $ac_cv_header_stdc" >&5
-$as_echo "$ac_cv_header_stdc" >&6; }
-if test $ac_cv_header_stdc = yes; then
-
-$as_echo "#define STDC_HEADERS 1" >>confdefs.h
-
-fi
-
-# On IRIX 5.3, sys/types and inttypes.h are conflicting.
-for ac_header in sys/types.h sys/stat.h stdlib.h string.h memory.h strings.h \
-		  inttypes.h stdint.h unistd.h
-do :
-  as_ac_Header=`$as_echo "ac_cv_header_$ac_header" | $as_tr_sh`
-ac_fn_c_check_header_compile "$LINENO" "$ac_header" "$as_ac_Header" "$ac_includes_default
-"
-if eval test \"x\$"$as_ac_Header"\" = x"yes"; then :
-  cat >>confdefs.h <<_ACEOF
-#define `$as_echo "HAVE_$ac_header" | $as_tr_cpp` 1
-_ACEOF
-
-fi
-
-done
-
-
-
-  ac_fn_c_check_header_mongrel "$LINENO" "minix/config.h" "ac_cv_header_minix_config_h" "$ac_includes_default"
-if test "x$ac_cv_header_minix_config_h" = xyes; then :
-  MINIX=yes
-else
-  MINIX=
-fi
-
-
-  if test "$MINIX" = yes; then
-
-$as_echo "#define _POSIX_SOURCE 1" >>confdefs.h
-
-
-$as_echo "#define _POSIX_1_SOURCE 2" >>confdefs.h
-
-
-$as_echo "#define _MINIX 1" >>confdefs.h
-
-  fi
-
-
-  { $as_echo "$as_me:${as_lineno-$LINENO}: checking whether it is safe to define __EXTENSIONS__" >&5
-$as_echo_n "checking whether it is safe to define __EXTENSIONS__... " >&6; }
-if ${ac_cv_safe_to_define___extensions__+:} false; then :
-  $as_echo_n "(cached) " >&6
-else
-  cat confdefs.h - <<_ACEOF >conftest.$ac_ext
-/* end confdefs.h.  */
-
-#         define __EXTENSIONS__ 1
-          $ac_includes_default
-int
-main ()
-{
-
-  ;
-  return 0;
-}
-_ACEOF
-if ac_fn_c_try_compile "$LINENO"; then :
-  ac_cv_safe_to_define___extensions__=yes
-else
-  ac_cv_safe_to_define___extensions__=no
-fi
-rm -f core conftest.err conftest.$ac_objext conftest.$ac_ext
-fi
-{ $as_echo "$as_me:${as_lineno-$LINENO}: result: $ac_cv_safe_to_define___extensions__" >&5
-$as_echo "$ac_cv_safe_to_define___extensions__" >&6; }
-  test $ac_cv_safe_to_define___extensions__ = yes &&
-    $as_echo "#define __EXTENSIONS__ 1" >>confdefs.h
-
-  $as_echo "#define _ALL_SOURCE 1" >>confdefs.h
-
-  $as_echo "#define _GNU_SOURCE 1" >>confdefs.h
-
-  $as_echo "#define _POSIX_PTHREAD_SEMANTICS 1" >>confdefs.h
-
-  $as_echo "#define _TANDEM_SOURCE 1" >>confdefs.h
-
-
-
-# checks for programs
-ac_ext=c
-ac_cpp='$CPP $CPPFLAGS'
-ac_compile='$CC -c $CFLAGS $CPPFLAGS conftest.$ac_ext >&5'
-ac_link='$CC -o conftest$ac_exeext $CFLAGS $CPPFLAGS $LDFLAGS conftest.$ac_ext $LIBS >&5'
-ac_compiler_gnu=$ac_cv_c_compiler_gnu
-if test -n "$ac_tool_prefix"; then
-  # Extract the first word of "${ac_tool_prefix}gcc", so it can be a program name with args.
-set dummy ${ac_tool_prefix}gcc; ac_word=$2
-{ $as_echo "$as_me:${as_lineno-$LINENO}: checking for $ac_word" >&5
-$as_echo_n "checking for $ac_word... " >&6; }
-if ${ac_cv_prog_CC+:} false; then :
-  $as_echo_n "(cached) " >&6
-else
-  if test -n "$CC"; then
-  ac_cv_prog_CC="$CC" # Let the user override the test.
-else
-as_save_IFS=$IFS; IFS=$PATH_SEPARATOR
-for as_dir in $PATH
-do
-  IFS=$as_save_IFS
-  test -z "$as_dir" && as_dir=.
-    for ac_exec_ext in '' $ac_executable_extensions; do
-  if as_fn_executable_p "$as_dir/$ac_word$ac_exec_ext"; then
-    ac_cv_prog_CC="${ac_tool_prefix}gcc"
-    $as_echo "$as_me:${as_lineno-$LINENO}: found $as_dir/$ac_word$ac_exec_ext" >&5
-    break 2
-  fi
-done
-  done
-IFS=$as_save_IFS
-
-fi
-fi
-CC=$ac_cv_prog_CC
-if test -n "$CC"; then
-  { $as_echo "$as_me:${as_lineno-$LINENO}: result: $CC" >&5
-$as_echo "$CC" >&6; }
-else
-  { $as_echo "$as_me:${as_lineno-$LINENO}: result: no" >&5
-$as_echo "no" >&6; }
-fi
-
-
-fi
-if test -z "$ac_cv_prog_CC"; then
-  ac_ct_CC=$CC
-  # Extract the first word of "gcc", so it can be a program name with args.
-set dummy gcc; ac_word=$2
-{ $as_echo "$as_me:${as_lineno-$LINENO}: checking for $ac_word" >&5
-$as_echo_n "checking for $ac_word... " >&6; }
-if ${ac_cv_prog_ac_ct_CC+:} false; then :
-  $as_echo_n "(cached) " >&6
-else
-  if test -n "$ac_ct_CC"; then
-  ac_cv_prog_ac_ct_CC="$ac_ct_CC" # Let the user override the test.
-else
-as_save_IFS=$IFS; IFS=$PATH_SEPARATOR
-for as_dir in $PATH
-do
-  IFS=$as_save_IFS
-  test -z "$as_dir" && as_dir=.
-    for ac_exec_ext in '' $ac_executable_extensions; do
-  if as_fn_executable_p "$as_dir/$ac_word$ac_exec_ext"; then
-    ac_cv_prog_ac_ct_CC="gcc"
-    $as_echo "$as_me:${as_lineno-$LINENO}: found $as_dir/$ac_word$ac_exec_ext" >&5
-    break 2
-  fi
-done
-  done
-IFS=$as_save_IFS
-
-fi
-fi
-ac_ct_CC=$ac_cv_prog_ac_ct_CC
-if test -n "$ac_ct_CC"; then
-  { $as_echo "$as_me:${as_lineno-$LINENO}: result: $ac_ct_CC" >&5
-$as_echo "$ac_ct_CC" >&6; }
-else
-  { $as_echo "$as_me:${as_lineno-$LINENO}: result: no" >&5
-$as_echo "no" >&6; }
-fi
-
-  if test "x$ac_ct_CC" = x; then
-    CC=""
-  else
-    case $cross_compiling:$ac_tool_warned in
-yes:)
-{ $as_echo "$as_me:${as_lineno-$LINENO}: WARNING: using cross tools not prefixed with host triplet" >&5
-$as_echo "$as_me: WARNING: using cross tools not prefixed with host triplet" >&2;}
-ac_tool_warned=yes ;;
-esac
-    CC=$ac_ct_CC
-  fi
-else
-  CC="$ac_cv_prog_CC"
-fi
-
-if test -z "$CC"; then
-          if test -n "$ac_tool_prefix"; then
-    # Extract the first word of "${ac_tool_prefix}cc", so it can be a program name with args.
-set dummy ${ac_tool_prefix}cc; ac_word=$2
-{ $as_echo "$as_me:${as_lineno-$LINENO}: checking for $ac_word" >&5
-$as_echo_n "checking for $ac_word... " >&6; }
-if ${ac_cv_prog_CC+:} false; then :
-  $as_echo_n "(cached) " >&6
-else
-  if test -n "$CC"; then
-  ac_cv_prog_CC="$CC" # Let the user override the test.
-else
-as_save_IFS=$IFS; IFS=$PATH_SEPARATOR
-for as_dir in $PATH
-do
-  IFS=$as_save_IFS
-  test -z "$as_dir" && as_dir=.
-    for ac_exec_ext in '' $ac_executable_extensions; do
-  if as_fn_executable_p "$as_dir/$ac_word$ac_exec_ext"; then
-    ac_cv_prog_CC="${ac_tool_prefix}cc"
-    $as_echo "$as_me:${as_lineno-$LINENO}: found $as_dir/$ac_word$ac_exec_ext" >&5
-    break 2
-  fi
-done
-  done
-IFS=$as_save_IFS
-
-fi
-fi
-CC=$ac_cv_prog_CC
-if test -n "$CC"; then
-  { $as_echo "$as_me:${as_lineno-$LINENO}: result: $CC" >&5
-$as_echo "$CC" >&6; }
-else
-  { $as_echo "$as_me:${as_lineno-$LINENO}: result: no" >&5
-$as_echo "no" >&6; }
-fi
-
-
-  fi
-fi
-if test -z "$CC"; then
-  # Extract the first word of "cc", so it can be a program name with args.
-set dummy cc; ac_word=$2
-{ $as_echo "$as_me:${as_lineno-$LINENO}: checking for $ac_word" >&5
-$as_echo_n "checking for $ac_word... " >&6; }
-if ${ac_cv_prog_CC+:} false; then :
-  $as_echo_n "(cached) " >&6
-else
-  if test -n "$CC"; then
-  ac_cv_prog_CC="$CC" # Let the user override the test.
-else
-  ac_prog_rejected=no
-as_save_IFS=$IFS; IFS=$PATH_SEPARATOR
-for as_dir in $PATH
-do
-  IFS=$as_save_IFS
-  test -z "$as_dir" && as_dir=.
-    for ac_exec_ext in '' $ac_executable_extensions; do
-  if as_fn_executable_p "$as_dir/$ac_word$ac_exec_ext"; then
-    if test "$as_dir/$ac_word$ac_exec_ext" = "/usr/ucb/cc"; then
-       ac_prog_rejected=yes
-       continue
-     fi
-    ac_cv_prog_CC="cc"
-    $as_echo "$as_me:${as_lineno-$LINENO}: found $as_dir/$ac_word$ac_exec_ext" >&5
-    break 2
-  fi
-done
-  done
-IFS=$as_save_IFS
-
-if test $ac_prog_rejected = yes; then
-  # We found a bogon in the path, so make sure we never use it.
-  set dummy $ac_cv_prog_CC
-  shift
-  if test $# != 0; then
-    # We chose a different compiler from the bogus one.
-    # However, it has the same basename, so the bogon will be chosen
-    # first if we set CC to just the basename; use the full file name.
-    shift
-    ac_cv_prog_CC="$as_dir/$ac_word${1+' '}$@"
-  fi
-fi
-fi
-fi
-CC=$ac_cv_prog_CC
-if test -n "$CC"; then
-  { $as_echo "$as_me:${as_lineno-$LINENO}: result: $CC" >&5
-$as_echo "$CC" >&6; }
-else
-  { $as_echo "$as_me:${as_lineno-$LINENO}: result: no" >&5
-$as_echo "no" >&6; }
-fi
-
-
-fi
-if test -z "$CC"; then
-  if test -n "$ac_tool_prefix"; then
-  for ac_prog in cl.exe
-  do
-    # Extract the first word of "$ac_tool_prefix$ac_prog", so it can be a program name with args.
-set dummy $ac_tool_prefix$ac_prog; ac_word=$2
-{ $as_echo "$as_me:${as_lineno-$LINENO}: checking for $ac_word" >&5
-$as_echo_n "checking for $ac_word... " >&6; }
-if ${ac_cv_prog_CC+:} false; then :
-  $as_echo_n "(cached) " >&6
-else
-  if test -n "$CC"; then
-  ac_cv_prog_CC="$CC" # Let the user override the test.
-else
-as_save_IFS=$IFS; IFS=$PATH_SEPARATOR
-for as_dir in $PATH
-do
-  IFS=$as_save_IFS
-  test -z "$as_dir" && as_dir=.
-    for ac_exec_ext in '' $ac_executable_extensions; do
-  if as_fn_executable_p "$as_dir/$ac_word$ac_exec_ext"; then
-    ac_cv_prog_CC="$ac_tool_prefix$ac_prog"
-    $as_echo "$as_me:${as_lineno-$LINENO}: found $as_dir/$ac_word$ac_exec_ext" >&5
-    break 2
-  fi
-done
-  done
-IFS=$as_save_IFS
-
-fi
-fi
-CC=$ac_cv_prog_CC
-if test -n "$CC"; then
-  { $as_echo "$as_me:${as_lineno-$LINENO}: result: $CC" >&5
-$as_echo "$CC" >&6; }
-else
-  { $as_echo "$as_me:${as_lineno-$LINENO}: result: no" >&5
-$as_echo "no" >&6; }
-fi
-
-
-    test -n "$CC" && break
-  done
-fi
-if test -z "$CC"; then
-  ac_ct_CC=$CC
-  for ac_prog in cl.exe
-do
-  # Extract the first word of "$ac_prog", so it can be a program name with args.
-set dummy $ac_prog; ac_word=$2
-{ $as_echo "$as_me:${as_lineno-$LINENO}: checking for $ac_word" >&5
-$as_echo_n "checking for $ac_word... " >&6; }
-if ${ac_cv_prog_ac_ct_CC+:} false; then :
-  $as_echo_n "(cached) " >&6
-else
-  if test -n "$ac_ct_CC"; then
-  ac_cv_prog_ac_ct_CC="$ac_ct_CC" # Let the user override the test.
-else
-as_save_IFS=$IFS; IFS=$PATH_SEPARATOR
-for as_dir in $PATH
-do
-  IFS=$as_save_IFS
-  test -z "$as_dir" && as_dir=.
-    for ac_exec_ext in '' $ac_executable_extensions; do
-  if as_fn_executable_p "$as_dir/$ac_word$ac_exec_ext"; then
-    ac_cv_prog_ac_ct_CC="$ac_prog"
-    $as_echo "$as_me:${as_lineno-$LINENO}: found $as_dir/$ac_word$ac_exec_ext" >&5
-    break 2
-  fi
-done
-  done
-IFS=$as_save_IFS
-
-fi
-fi
-ac_ct_CC=$ac_cv_prog_ac_ct_CC
-if test -n "$ac_ct_CC"; then
-  { $as_echo "$as_me:${as_lineno-$LINENO}: result: $ac_ct_CC" >&5
-$as_echo "$ac_ct_CC" >&6; }
-else
-  { $as_echo "$as_me:${as_lineno-$LINENO}: result: no" >&5
-$as_echo "no" >&6; }
-fi
-
-
-  test -n "$ac_ct_CC" && break
-done
-
-  if test "x$ac_ct_CC" = x; then
-    CC=""
-  else
-    case $cross_compiling:$ac_tool_warned in
-yes:)
-{ $as_echo "$as_me:${as_lineno-$LINENO}: WARNING: using cross tools not prefixed with host triplet" >&5
-$as_echo "$as_me: WARNING: using cross tools not prefixed with host triplet" >&2;}
-ac_tool_warned=yes ;;
-esac
-    CC=$ac_ct_CC
-  fi
-fi
-
-fi
-
-
-test -z "$CC" && { { $as_echo "$as_me:${as_lineno-$LINENO}: error: in \`$ac_pwd':" >&5
-$as_echo "$as_me: error: in \`$ac_pwd':" >&2;}
-as_fn_error $? "no acceptable C compiler found in \$PATH
-See \`config.log' for more details" "$LINENO" 5; }
-
-# Provide some information about the compiler.
-$as_echo "$as_me:${as_lineno-$LINENO}: checking for C compiler version" >&5
-set X $ac_compile
-ac_compiler=$2
-for ac_option in --version -v -V -qversion; do
-  { { ac_try="$ac_compiler $ac_option >&5"
-case "(($ac_try" in
-  *\"* | *\`* | *\\*) ac_try_echo=\$ac_try;;
-  *) ac_try_echo=$ac_try;;
-esac
-eval ac_try_echo="\"\$as_me:${as_lineno-$LINENO}: $ac_try_echo\""
-$as_echo "$ac_try_echo"; } >&5
-  (eval "$ac_compiler $ac_option >&5") 2>conftest.err
-  ac_status=$?
-  if test -s conftest.err; then
-    sed '10a\
-... rest of stderr output deleted ...
-         10q' conftest.err >conftest.er1
-    cat conftest.er1 >&5
-  fi
-  rm -f conftest.er1 conftest.err
-  $as_echo "$as_me:${as_lineno-$LINENO}: \$? = $ac_status" >&5
-  test $ac_status = 0; }
-done
-
-{ $as_echo "$as_me:${as_lineno-$LINENO}: checking whether we are using the GNU C compiler" >&5
-$as_echo_n "checking whether we are using the GNU C compiler... " >&6; }
-if ${ac_cv_c_compiler_gnu+:} false; then :
-  $as_echo_n "(cached) " >&6
-else
-  cat confdefs.h - <<_ACEOF >conftest.$ac_ext
-/* end confdefs.h.  */
-
-int
-main ()
-{
-#ifndef __GNUC__
-       choke me
-#endif
-
-  ;
-  return 0;
-}
-_ACEOF
-if ac_fn_c_try_compile "$LINENO"; then :
-  ac_compiler_gnu=yes
-else
-  ac_compiler_gnu=no
-fi
-rm -f core conftest.err conftest.$ac_objext conftest.$ac_ext
-ac_cv_c_compiler_gnu=$ac_compiler_gnu
-
-fi
-{ $as_echo "$as_me:${as_lineno-$LINENO}: result: $ac_cv_c_compiler_gnu" >&5
-$as_echo "$ac_cv_c_compiler_gnu" >&6; }
-if test $ac_compiler_gnu = yes; then
-  GCC=yes
-else
-  GCC=
-fi
-ac_test_CFLAGS=${CFLAGS+set}
-ac_save_CFLAGS=$CFLAGS
-{ $as_echo "$as_me:${as_lineno-$LINENO}: checking whether $CC accepts -g" >&5
-$as_echo_n "checking whether $CC accepts -g... " >&6; }
-if ${ac_cv_prog_cc_g+:} false; then :
-  $as_echo_n "(cached) " >&6
-else
-  ac_save_c_werror_flag=$ac_c_werror_flag
-   ac_c_werror_flag=yes
-   ac_cv_prog_cc_g=no
-   CFLAGS="-g"
-   cat confdefs.h - <<_ACEOF >conftest.$ac_ext
-/* end confdefs.h.  */
-
-int
-main ()
-{
-
-  ;
-  return 0;
-}
-_ACEOF
-if ac_fn_c_try_compile "$LINENO"; then :
-  ac_cv_prog_cc_g=yes
-else
-  CFLAGS=""
-      cat confdefs.h - <<_ACEOF >conftest.$ac_ext
-/* end confdefs.h.  */
-
-int
-main ()
-{
-
-  ;
-  return 0;
-}
-_ACEOF
-if ac_fn_c_try_compile "$LINENO"; then :
-
-else
-  ac_c_werror_flag=$ac_save_c_werror_flag
-	 CFLAGS="-g"
-	 cat confdefs.h - <<_ACEOF >conftest.$ac_ext
-/* end confdefs.h.  */
-
-int
-main ()
-{
-
-  ;
-  return 0;
-}
-_ACEOF
-if ac_fn_c_try_compile "$LINENO"; then :
-  ac_cv_prog_cc_g=yes
-fi
-rm -f core conftest.err conftest.$ac_objext conftest.$ac_ext
-fi
-rm -f core conftest.err conftest.$ac_objext conftest.$ac_ext
-fi
-rm -f core conftest.err conftest.$ac_objext conftest.$ac_ext
-   ac_c_werror_flag=$ac_save_c_werror_flag
-fi
-{ $as_echo "$as_me:${as_lineno-$LINENO}: result: $ac_cv_prog_cc_g" >&5
-$as_echo "$ac_cv_prog_cc_g" >&6; }
-if test "$ac_test_CFLAGS" = set; then
-  CFLAGS=$ac_save_CFLAGS
-elif test $ac_cv_prog_cc_g = yes; then
-  if test "$GCC" = yes; then
-    CFLAGS="-g -O2"
-  else
-    CFLAGS="-g"
-  fi
-else
-  if test "$GCC" = yes; then
-    CFLAGS="-O2"
-  else
-    CFLAGS=
-  fi
-fi
-{ $as_echo "$as_me:${as_lineno-$LINENO}: checking for $CC option to accept ISO C89" >&5
-$as_echo_n "checking for $CC option to accept ISO C89... " >&6; }
-if ${ac_cv_prog_cc_c89+:} false; then :
-  $as_echo_n "(cached) " >&6
-else
-  ac_cv_prog_cc_c89=no
-ac_save_CC=$CC
-cat confdefs.h - <<_ACEOF >conftest.$ac_ext
-/* end confdefs.h.  */
-#include <stdarg.h>
-#include <stdio.h>
-struct stat;
-/* Most of the following tests are stolen from RCS 5.7's src/conf.sh.  */
-struct buf { int x; };
-FILE * (*rcsopen) (struct buf *, struct stat *, int);
-static char *e (p, i)
-     char **p;
-     int i;
-{
-  return p[i];
-}
-static char *f (char * (*g) (char **, int), char **p, ...)
-{
-  char *s;
-  va_list v;
-  va_start (v,p);
-  s = g (p, va_arg (v,int));
-  va_end (v);
-  return s;
-}
-
-/* OSF 4.0 Compaq cc is some sort of almost-ANSI by default.  It has
-   function prototypes and stuff, but not '\xHH' hex character constants.
-   These don't provoke an error unfortunately, instead are silently treated
-   as 'x'.  The following induces an error, until -std is added to get
-   proper ANSI mode.  Curiously '\x00'!='x' always comes out true, for an
-   array size at least.  It's necessary to write '\x00'==0 to get something
-   that's true only with -std.  */
-int osf4_cc_array ['\x00' == 0 ? 1 : -1];
-
-/* IBM C 6 for AIX is almost-ANSI by default, but it replaces macro parameters
-   inside strings and character constants.  */
-#define FOO(x) 'x'
-int xlc6_cc_array[FOO(a) == 'x' ? 1 : -1];
-
-int test (int i, double x);
-struct s1 {int (*f) (int a);};
-struct s2 {int (*f) (double a);};
-int pairnames (int, char **, FILE *(*)(struct buf *, struct stat *, int), int, int);
-int argc;
-char **argv;
-int
-main ()
-{
-return f (e, argv, 0) != argv[0]  ||  f (e, argv, 1) != argv[1];
-  ;
-  return 0;
-}
-_ACEOF
-for ac_arg in '' -qlanglvl=extc89 -qlanglvl=ansi -std \
-	-Ae "-Aa -D_HPUX_SOURCE" "-Xc -D__EXTENSIONS__"
-do
-  CC="$ac_save_CC $ac_arg"
-  if ac_fn_c_try_compile "$LINENO"; then :
-  ac_cv_prog_cc_c89=$ac_arg
-fi
-rm -f core conftest.err conftest.$ac_objext
-  test "x$ac_cv_prog_cc_c89" != "xno" && break
-done
-rm -f conftest.$ac_ext
-CC=$ac_save_CC
-
-fi
-# AC_CACHE_VAL
-case "x$ac_cv_prog_cc_c89" in
-  x)
-    { $as_echo "$as_me:${as_lineno-$LINENO}: result: none needed" >&5
-$as_echo "none needed" >&6; } ;;
-  xno)
-    { $as_echo "$as_me:${as_lineno-$LINENO}: result: unsupported" >&5
-$as_echo "unsupported" >&6; } ;;
-  *)
-    CC="$CC $ac_cv_prog_cc_c89"
-    { $as_echo "$as_me:${as_lineno-$LINENO}: result: $ac_cv_prog_cc_c89" >&5
-$as_echo "$ac_cv_prog_cc_c89" >&6; } ;;
-esac
-if test "x$ac_cv_prog_cc_c89" != xno; then :
-
-fi
-
-ac_ext=c
-ac_cpp='$CPP $CPPFLAGS'
-ac_compile='$CC -c $CFLAGS $CPPFLAGS conftest.$ac_ext >&5'
-ac_link='$CC -o conftest$ac_exeext $CFLAGS $CPPFLAGS $LDFLAGS conftest.$ac_ext $LIBS >&5'
-ac_compiler_gnu=$ac_cv_c_compiler_gnu
-
-ac_ext=cpp
-ac_cpp='$CXXCPP $CPPFLAGS'
-ac_compile='$CXX -c $CXXFLAGS $CPPFLAGS conftest.$ac_ext >&5'
-ac_link='$CXX -o conftest$ac_exeext $CXXFLAGS $CPPFLAGS $LDFLAGS conftest.$ac_ext $LIBS >&5'
-ac_compiler_gnu=$ac_cv_cxx_compiler_gnu
-if test -z "$CXX"; then
-  if test -n "$CCC"; then
-    CXX=$CCC
-  else
-    if test -n "$ac_tool_prefix"; then
-  for ac_prog in g++ c++ gpp aCC CC cxx cc++ cl.exe FCC KCC RCC xlC_r xlC
-  do
-    # Extract the first word of "$ac_tool_prefix$ac_prog", so it can be a program name with args.
-set dummy $ac_tool_prefix$ac_prog; ac_word=$2
-{ $as_echo "$as_me:${as_lineno-$LINENO}: checking for $ac_word" >&5
-$as_echo_n "checking for $ac_word... " >&6; }
-if ${ac_cv_prog_CXX+:} false; then :
-  $as_echo_n "(cached) " >&6
-else
-  if test -n "$CXX"; then
-  ac_cv_prog_CXX="$CXX" # Let the user override the test.
-else
-as_save_IFS=$IFS; IFS=$PATH_SEPARATOR
-for as_dir in $PATH
-do
-  IFS=$as_save_IFS
-  test -z "$as_dir" && as_dir=.
-    for ac_exec_ext in '' $ac_executable_extensions; do
-  if as_fn_executable_p "$as_dir/$ac_word$ac_exec_ext"; then
-    ac_cv_prog_CXX="$ac_tool_prefix$ac_prog"
-    $as_echo "$as_me:${as_lineno-$LINENO}: found $as_dir/$ac_word$ac_exec_ext" >&5
-    break 2
-  fi
-done
-  done
-IFS=$as_save_IFS
-
-fi
-fi
-CXX=$ac_cv_prog_CXX
-if test -n "$CXX"; then
-  { $as_echo "$as_me:${as_lineno-$LINENO}: result: $CXX" >&5
-$as_echo "$CXX" >&6; }
-else
-  { $as_echo "$as_me:${as_lineno-$LINENO}: result: no" >&5
-$as_echo "no" >&6; }
-fi
-
-
-    test -n "$CXX" && break
-  done
-fi
-if test -z "$CXX"; then
-  ac_ct_CXX=$CXX
-  for ac_prog in g++ c++ gpp aCC CC cxx cc++ cl.exe FCC KCC RCC xlC_r xlC
-do
-  # Extract the first word of "$ac_prog", so it can be a program name with args.
-set dummy $ac_prog; ac_word=$2
-{ $as_echo "$as_me:${as_lineno-$LINENO}: checking for $ac_word" >&5
-$as_echo_n "checking for $ac_word... " >&6; }
-if ${ac_cv_prog_ac_ct_CXX+:} false; then :
-  $as_echo_n "(cached) " >&6
-else
-  if test -n "$ac_ct_CXX"; then
-  ac_cv_prog_ac_ct_CXX="$ac_ct_CXX" # Let the user override the test.
-else
-as_save_IFS=$IFS; IFS=$PATH_SEPARATOR
-for as_dir in $PATH
-do
-  IFS=$as_save_IFS
-  test -z "$as_dir" && as_dir=.
-    for ac_exec_ext in '' $ac_executable_extensions; do
-  if as_fn_executable_p "$as_dir/$ac_word$ac_exec_ext"; then
-    ac_cv_prog_ac_ct_CXX="$ac_prog"
-    $as_echo "$as_me:${as_lineno-$LINENO}: found $as_dir/$ac_word$ac_exec_ext" >&5
-    break 2
-  fi
-done
-  done
-IFS=$as_save_IFS
-
-fi
-fi
-ac_ct_CXX=$ac_cv_prog_ac_ct_CXX
-if test -n "$ac_ct_CXX"; then
-  { $as_echo "$as_me:${as_lineno-$LINENO}: result: $ac_ct_CXX" >&5
-$as_echo "$ac_ct_CXX" >&6; }
-else
-  { $as_echo "$as_me:${as_lineno-$LINENO}: result: no" >&5
-$as_echo "no" >&6; }
-fi
-
-
-  test -n "$ac_ct_CXX" && break
-done
-
-  if test "x$ac_ct_CXX" = x; then
-    CXX="g++"
-  else
-    case $cross_compiling:$ac_tool_warned in
-yes:)
-{ $as_echo "$as_me:${as_lineno-$LINENO}: WARNING: using cross tools not prefixed with host triplet" >&5
-$as_echo "$as_me: WARNING: using cross tools not prefixed with host triplet" >&2;}
-ac_tool_warned=yes ;;
-esac
-    CXX=$ac_ct_CXX
-  fi
-fi
-
-  fi
-fi
-# Provide some information about the compiler.
-$as_echo "$as_me:${as_lineno-$LINENO}: checking for C++ compiler version" >&5
-set X $ac_compile
-ac_compiler=$2
-for ac_option in --version -v -V -qversion; do
-  { { ac_try="$ac_compiler $ac_option >&5"
-case "(($ac_try" in
-  *\"* | *\`* | *\\*) ac_try_echo=\$ac_try;;
-  *) ac_try_echo=$ac_try;;
-esac
-eval ac_try_echo="\"\$as_me:${as_lineno-$LINENO}: $ac_try_echo\""
-$as_echo "$ac_try_echo"; } >&5
-  (eval "$ac_compiler $ac_option >&5") 2>conftest.err
-  ac_status=$?
-  if test -s conftest.err; then
-    sed '10a\
-... rest of stderr output deleted ...
-         10q' conftest.err >conftest.er1
-    cat conftest.er1 >&5
-  fi
-  rm -f conftest.er1 conftest.err
-  $as_echo "$as_me:${as_lineno-$LINENO}: \$? = $ac_status" >&5
-  test $ac_status = 0; }
-done
-
-{ $as_echo "$as_me:${as_lineno-$LINENO}: checking whether we are using the GNU C++ compiler" >&5
-$as_echo_n "checking whether we are using the GNU C++ compiler... " >&6; }
-if ${ac_cv_cxx_compiler_gnu+:} false; then :
-  $as_echo_n "(cached) " >&6
-else
-  cat confdefs.h - <<_ACEOF >conftest.$ac_ext
-/* end confdefs.h.  */
-
-int
-main ()
-{
-#ifndef __GNUC__
-       choke me
-#endif
-
-  ;
-  return 0;
-}
-_ACEOF
-if ac_fn_cxx_try_compile "$LINENO"; then :
-  ac_compiler_gnu=yes
-else
-  ac_compiler_gnu=no
-fi
-rm -f core conftest.err conftest.$ac_objext conftest.$ac_ext
-ac_cv_cxx_compiler_gnu=$ac_compiler_gnu
-
-fi
-{ $as_echo "$as_me:${as_lineno-$LINENO}: result: $ac_cv_cxx_compiler_gnu" >&5
-$as_echo "$ac_cv_cxx_compiler_gnu" >&6; }
-if test $ac_compiler_gnu = yes; then
-  GXX=yes
-else
-  GXX=
-fi
-ac_test_CXXFLAGS=${CXXFLAGS+set}
-ac_save_CXXFLAGS=$CXXFLAGS
-{ $as_echo "$as_me:${as_lineno-$LINENO}: checking whether $CXX accepts -g" >&5
-$as_echo_n "checking whether $CXX accepts -g... " >&6; }
-if ${ac_cv_prog_cxx_g+:} false; then :
-  $as_echo_n "(cached) " >&6
-else
-  ac_save_cxx_werror_flag=$ac_cxx_werror_flag
-   ac_cxx_werror_flag=yes
-   ac_cv_prog_cxx_g=no
-   CXXFLAGS="-g"
-   cat confdefs.h - <<_ACEOF >conftest.$ac_ext
-/* end confdefs.h.  */
-
-int
-main ()
-{
-
-  ;
-  return 0;
-}
-_ACEOF
-if ac_fn_cxx_try_compile "$LINENO"; then :
-  ac_cv_prog_cxx_g=yes
-else
-  CXXFLAGS=""
-      cat confdefs.h - <<_ACEOF >conftest.$ac_ext
-/* end confdefs.h.  */
-
-int
-main ()
-{
-
-  ;
-  return 0;
-}
-_ACEOF
-if ac_fn_cxx_try_compile "$LINENO"; then :
-
-else
-  ac_cxx_werror_flag=$ac_save_cxx_werror_flag
-	 CXXFLAGS="-g"
-	 cat confdefs.h - <<_ACEOF >conftest.$ac_ext
-/* end confdefs.h.  */
-
-int
-main ()
-{
-
-  ;
-  return 0;
-}
-_ACEOF
-if ac_fn_cxx_try_compile "$LINENO"; then :
-  ac_cv_prog_cxx_g=yes
-fi
-rm -f core conftest.err conftest.$ac_objext conftest.$ac_ext
-fi
-rm -f core conftest.err conftest.$ac_objext conftest.$ac_ext
-fi
-rm -f core conftest.err conftest.$ac_objext conftest.$ac_ext
-   ac_cxx_werror_flag=$ac_save_cxx_werror_flag
-fi
-{ $as_echo "$as_me:${as_lineno-$LINENO}: result: $ac_cv_prog_cxx_g" >&5
-$as_echo "$ac_cv_prog_cxx_g" >&6; }
-if test "$ac_test_CXXFLAGS" = set; then
-  CXXFLAGS=$ac_save_CXXFLAGS
-elif test $ac_cv_prog_cxx_g = yes; then
-  if test "$GXX" = yes; then
-    CXXFLAGS="-g -O2"
-  else
-    CXXFLAGS="-g"
-  fi
-else
-  if test "$GXX" = yes; then
-    CXXFLAGS="-O2"
-  else
-    CXXFLAGS=
-  fi
-fi
-ac_ext=c
-ac_cpp='$CPP $CPPFLAGS'
-ac_compile='$CC -c $CFLAGS $CPPFLAGS conftest.$ac_ext >&5'
-ac_link='$CC -o conftest$ac_exeext $CFLAGS $CPPFLAGS $LDFLAGS conftest.$ac_ext $LIBS >&5'
-ac_compiler_gnu=$ac_cv_c_compiler_gnu
-
-
-
-   ac_ext=cpp
-ac_cpp='$CXXCPP $CPPFLAGS'
-ac_compile='$CXX -c $CXXFLAGS $CPPFLAGS conftest.$ac_ext >&5'
-ac_link='$CXX -o conftest$ac_exeext $CXXFLAGS $CPPFLAGS $LDFLAGS conftest.$ac_ext $LIBS >&5'
-ac_compiler_gnu=$ac_cv_cxx_compiler_gnu
-
-   if test "$cross_compiling" = no; then
-     { $as_echo "$as_me:${as_lineno-$LINENO}: checking that C++ compiler can compile simple program" >&5
-$as_echo_n "checking that C++ compiler can compile simple program... " >&6; }
-   fi
-   if test "$cross_compiling" = yes; then :
-  :
-else
-  cat confdefs.h - <<_ACEOF >conftest.$ac_ext
-/* end confdefs.h.  */
-
-
-
-int main() {
-  return 0;
-}
-
-
-
-_ACEOF
-if ac_fn_cxx_try_run "$LINENO"; then :
-  { $as_echo "$as_me:${as_lineno-$LINENO}: result: yes" >&5
-$as_echo "yes" >&6; }
-else
-  { $as_echo "$as_me:${as_lineno-$LINENO}: result: no" >&5
-$as_echo "no" >&6; }
-      as_fn_error $? "a working C++ compiler is required" "$LINENO" 5
-fi
-rm -f core *.core core.conftest.* gmon.out bb.out conftest$ac_exeext \
-  conftest.$ac_objext conftest.beam conftest.$ac_ext
-fi
-
-
-   if test "$cross_compiling" = no; then
-     { $as_echo "$as_me:${as_lineno-$LINENO}: checking that C++ static constructors and destructors are called" >&5
-$as_echo_n "checking that C++ static constructors and destructors are called... " >&6; }
-   fi
-   if test "$cross_compiling" = yes; then :
-  :
-else
-  cat confdefs.h - <<_ACEOF >conftest.$ac_ext
-/* end confdefs.h.  */
-
-
-
-extern "C" {
-  void _exit(int);
-}
-
-int i;
-struct A {
-  char dummy;
-  A() { i = 1; }
-  ~A() { if (i == 1) _exit(0); }
-};
-
-A a;
-
-int main()
-{
-  return 1;
-}
-
-
-
-_ACEOF
-if ac_fn_cxx_try_run "$LINENO"; then :
-  { $as_echo "$as_me:${as_lineno-$LINENO}: result: yes" >&5
-$as_echo "yes" >&6; }
-else
-  { $as_echo "$as_me:${as_lineno-$LINENO}: result: no" >&5
-$as_echo "no" >&6; }
-      as_fn_error $? "a working C++ compiler is required" "$LINENO" 5
-fi
-rm -f core *.core core.conftest.* gmon.out bb.out conftest$ac_exeext \
-  conftest.$ac_objext conftest.beam conftest.$ac_ext
-fi
-
-
-   { $as_echo "$as_me:${as_lineno-$LINENO}: checking that header files support C++" >&5
-$as_echo_n "checking that header files support C++... " >&6; }
-   cat confdefs.h - <<_ACEOF >conftest.$ac_ext
-/* end confdefs.h.  */
-
-
-
-#include <stdio.h>
-
-
-int
-main ()
-{
-
-
-fopen(0, 0);
-
-
-  ;
-  return 0;
-}
-
-_ACEOF
-if ac_fn_cxx_try_link "$LINENO"; then :
-  { $as_echo "$as_me:${as_lineno-$LINENO}: result: yes" >&5
-$as_echo "yes" >&6; }
-else
-  { $as_echo "$as_me:${as_lineno-$LINENO}: result: no" >&5
-$as_echo "no" >&6; }
-      as_fn_error $? "header files do not support C++
-		   (if you are using a version of gcc/g++ earlier than 2.5,
-		   you should install libg++)" "$LINENO" 5
-fi
-rm -f core conftest.err conftest.$ac_objext \
-    conftest$ac_exeext conftest.$ac_ext
-   ac_ext=c
-ac_cpp='$CPP $CPPFLAGS'
-ac_compile='$CC -c $CFLAGS $CPPFLAGS conftest.$ac_ext >&5'
-ac_link='$CC -o conftest$ac_exeext $CFLAGS $CPPFLAGS $LDFLAGS conftest.$ac_ext $LIBS >&5'
-ac_compiler_gnu=$ac_cv_c_compiler_gnu
-
-{ $as_echo "$as_me:${as_lineno-$LINENO}: checking whether character set is EBCDIC" >&5
-$as_echo_n "checking whether character set is EBCDIC... " >&6; }
-   cat confdefs.h - <<_ACEOF >conftest.$ac_ext
-/* end confdefs.h.  */
-
-
-
-/* Treat any failure as ASCII for compatibility with existing art.
-   Use compile-time rather than run-time tests for cross-compiler
-   tolerance. */
-#if '0' != 240
-make an error "Character set is not EBCDIC"
-#endif
-
-
-int
-main ()
-{
-
-  ;
-  return 0;
-}
-
-_ACEOF
-if ac_fn_c_try_compile "$LINENO"; then :
-  groff_cv_ebcdic="yes"
-      TTYDEVDIRS="font/devcp1047"
-      { $as_echo "$as_me:${as_lineno-$LINENO}: result: yes" >&5
-$as_echo "yes" >&6; }
-
-$as_echo "#define IS_EBCDIC_HOST 1" >>confdefs.h
-
-else
-  groff_cv_ebcdic="no"
-     TTYDEVDIRS="font/devascii font/devlatin1"
-     OTHERDEVDIRS="font/devlj4 font/devlbp"
-     { $as_echo "$as_me:${as_lineno-$LINENO}: result: no" >&5
-$as_echo "no" >&6; }
-fi
-rm -f core conftest.err conftest.$ac_objext conftest.$ac_ext
-
-
-if test "$groff_cv_ebcdic" = "yes"; then
-     { $as_echo "$as_me:${as_lineno-$LINENO}: checking for OS/390 Unix" >&5
-$as_echo_n "checking for OS/390 Unix... " >&6; }
-     case `uname` in
-     OS/390)
-       CFLAGS="$CFLAGS -D_ALL_SOURCE"
-       { $as_echo "$as_me:${as_lineno-$LINENO}: result: yes" >&5
-$as_echo "yes" >&6; } ;;
-     *)
-       { $as_echo "$as_me:${as_lineno-$LINENO}: result: no" >&5
-$as_echo "no" >&6; } ;;
-     esac
-   fi
-{ $as_echo "$as_me:${as_lineno-$LINENO}: checking whether to install .cmd wrapper scripts for Windows" >&5
-$as_echo_n "checking whether to install .cmd wrapper scripts for Windows... " >&6; }
-   case "$host_os" in
-   *mingw*)
-     make_winscripts=winscripts
-     make_install_winscripts=install_winscripts
-     make_uninstall_winscripts=uninstall_winscripts
-     { $as_echo "$as_me:${as_lineno-$LINENO}: result: yes" >&5
-$as_echo "yes" >&6; } ;;
-   *)
-     make_winscripts=
-     make_install_winscripts=
-     make_uninstall_winscripts=
-     { $as_echo "$as_me:${as_lineno-$LINENO}: result: no" >&5
-$as_echo "no" >&6; } ;;
-   esac
-
-
-
-{ $as_echo "$as_me:${as_lineno-$LINENO}: checking for X" >&5
-$as_echo_n "checking for X... " >&6; }
-
-
-# Check whether --with-x was given.
-if test "${with_x+set}" = set; then :
-  withval=$with_x;
-fi
-
-# $have_x is `yes', `no', `disabled', or empty when we do not yet know.
-if test "x$with_x" = xno; then
-  # The user explicitly disabled X.
-  have_x=disabled
-else
-  case $x_includes,$x_libraries in #(
-    *\'*) as_fn_error $? "cannot use X directory names containing '" "$LINENO" 5;; #(
-    *,NONE | NONE,*) if ${ac_cv_have_x+:} false; then :
-  $as_echo_n "(cached) " >&6
-else
-  # One or both of the vars are not set, and there is no cached value.
-ac_x_includes=no ac_x_libraries=no
-rm -f -r conftest.dir
-if mkdir conftest.dir; then
-  cd conftest.dir
-  cat >Imakefile <<'_ACEOF'
-incroot:
-	@echo incroot='${INCROOT}'
-usrlibdir:
-	@echo usrlibdir='${USRLIBDIR}'
-libdir:
-	@echo libdir='${LIBDIR}'
-_ACEOF
-  if (export CC; ${XMKMF-xmkmf}) >/dev/null 2>/dev/null && test -f Makefile; then
-    # GNU make sometimes prints "make[1]: Entering ...", which would confuse us.
-    for ac_var in incroot usrlibdir libdir; do
-      eval "ac_im_$ac_var=\`\${MAKE-make} $ac_var 2>/dev/null | sed -n 's/^$ac_var=//p'\`"
-    done
-    # Open Windows xmkmf reportedly sets LIBDIR instead of USRLIBDIR.
-    for ac_extension in a so sl dylib la dll; do
-      if test ! -f "$ac_im_usrlibdir/libX11.$ac_extension" &&
-	 test -f "$ac_im_libdir/libX11.$ac_extension"; then
-	ac_im_usrlibdir=$ac_im_libdir; break
-      fi
-    done
-    # Screen out bogus values from the imake configuration.  They are
-    # bogus both because they are the default anyway, and because
-    # using them would break gcc on systems where it needs fixed includes.
-    case $ac_im_incroot in
-	/usr/include) ac_x_includes= ;;
-	*) test -f "$ac_im_incroot/X11/Xos.h" && ac_x_includes=$ac_im_incroot;;
-    esac
-    case $ac_im_usrlibdir in
-	/usr/lib | /usr/lib64 | /lib | /lib64) ;;
-	*) test -d "$ac_im_usrlibdir" && ac_x_libraries=$ac_im_usrlibdir ;;
-    esac
-  fi
-  cd ..
-  rm -f -r conftest.dir
-fi
-
-# Standard set of common directories for X headers.
-# Check X11 before X11Rn because it is often a symlink to the current release.
-ac_x_header_dirs='
-/usr/X11/include
-/usr/X11R7/include
-/usr/X11R6/include
-/usr/X11R5/include
-/usr/X11R4/include
-
-/usr/include/X11
-/usr/include/X11R7
-/usr/include/X11R6
-/usr/include/X11R5
-/usr/include/X11R4
-
-/usr/local/X11/include
-/usr/local/X11R7/include
-/usr/local/X11R6/include
-/usr/local/X11R5/include
-/usr/local/X11R4/include
-
-/usr/local/include/X11
-/usr/local/include/X11R7
-/usr/local/include/X11R6
-/usr/local/include/X11R5
-/usr/local/include/X11R4
-
-/usr/X386/include
-/usr/x386/include
-/usr/XFree86/include/X11
-
-/usr/include
-/usr/local/include
-/usr/unsupported/include
-/usr/athena/include
-/usr/local/x11r5/include
-/usr/lpp/Xamples/include
-
-/usr/openwin/include
-/usr/openwin/share/include'
-
-if test "$ac_x_includes" = no; then
-  # Guess where to find include files, by looking for Xlib.h.
-  # First, try using that file with no special directory specified.
-  cat confdefs.h - <<_ACEOF >conftest.$ac_ext
-/* end confdefs.h.  */
-#include <X11/Xlib.h>
-_ACEOF
-if ac_fn_c_try_cpp "$LINENO"; then :
-  # We can compile using X headers with no special include directory.
-ac_x_includes=
-else
-  for ac_dir in $ac_x_header_dirs; do
-  if test -r "$ac_dir/X11/Xlib.h"; then
-    ac_x_includes=$ac_dir
-    break
-  fi
-done
-fi
-rm -f conftest.err conftest.i conftest.$ac_ext
-fi # $ac_x_includes = no
-
-if test "$ac_x_libraries" = no; then
-  # Check for the libraries.
-  # See if we find them without any special options.
-  # Don't add to $LIBS permanently.
-  ac_save_LIBS=$LIBS
-  LIBS="-lX11 $LIBS"
-  cat confdefs.h - <<_ACEOF >conftest.$ac_ext
-/* end confdefs.h.  */
-#include <X11/Xlib.h>
-int
-main ()
-{
-XrmInitialize ()
-  ;
-  return 0;
-}
-_ACEOF
-if ac_fn_c_try_link "$LINENO"; then :
-  LIBS=$ac_save_LIBS
-# We can link X programs with no special library path.
-ac_x_libraries=
-else
-  LIBS=$ac_save_LIBS
-for ac_dir in `$as_echo "$ac_x_includes $ac_x_header_dirs" | sed s/include/lib/g`
-do
-  # Don't even attempt the hair of trying to link an X program!
-  for ac_extension in a so sl dylib la dll; do
-    if test -r "$ac_dir/libX11.$ac_extension"; then
-      ac_x_libraries=$ac_dir
-      break 2
-    fi
-  done
-done
-fi
-rm -f core conftest.err conftest.$ac_objext \
-    conftest$ac_exeext conftest.$ac_ext
-fi # $ac_x_libraries = no
-
-case $ac_x_includes,$ac_x_libraries in #(
-  no,* | *,no | *\'*)
-    # Didn't find X, or a directory has "'" in its name.
-    ac_cv_have_x="have_x=no";; #(
-  *)
-    # Record where we found X for the cache.
-    ac_cv_have_x="have_x=yes\
-	ac_x_includes='$ac_x_includes'\
-	ac_x_libraries='$ac_x_libraries'"
-esac
-fi
-;; #(
-    *) have_x=yes;;
-  esac
-  eval "$ac_cv_have_x"
-fi # $with_x != no
-
-if test "$have_x" != yes; then
-  { $as_echo "$as_me:${as_lineno-$LINENO}: result: $have_x" >&5
-$as_echo "$have_x" >&6; }
-  no_x=yes
-else
-  # If each of the values was on the command line, it overrides each guess.
-  test "x$x_includes" = xNONE && x_includes=$ac_x_includes
-  test "x$x_libraries" = xNONE && x_libraries=$ac_x_libraries
-  # Update the cache value to reflect the command line values.
-  ac_cv_have_x="have_x=yes\
-	ac_x_includes='$x_includes'\
-	ac_x_libraries='$x_libraries'"
-  { $as_echo "$as_me:${as_lineno-$LINENO}: result: libraries $x_libraries, headers $x_includes" >&5
-$as_echo "libraries $x_libraries, headers $x_includes" >&6; }
-fi
-
-if test "$no_x" = yes; then
-  # Not all programs may use this symbol, but it does not hurt to define it.
-
-$as_echo "#define X_DISPLAY_MISSING 1" >>confdefs.h
-
-  X_CFLAGS= X_PRE_LIBS= X_LIBS= X_EXTRA_LIBS=
-else
-  if test -n "$x_includes"; then
-    X_CFLAGS="$X_CFLAGS -I$x_includes"
-  fi
-
-  # It would also be nice to do this for all -L options, not just this one.
-  if test -n "$x_libraries"; then
-    X_LIBS="$X_LIBS -L$x_libraries"
-    # For Solaris; some versions of Sun CC require a space after -R and
-    # others require no space.  Words are not sufficient . . . .
-    { $as_echo "$as_me:${as_lineno-$LINENO}: checking whether -R must be followed by a space" >&5
-$as_echo_n "checking whether -R must be followed by a space... " >&6; }
-    ac_xsave_LIBS=$LIBS; LIBS="$LIBS -R$x_libraries"
-    ac_xsave_c_werror_flag=$ac_c_werror_flag
-    ac_c_werror_flag=yes
-    cat confdefs.h - <<_ACEOF >conftest.$ac_ext
-/* end confdefs.h.  */
-
-int
-main ()
-{
-
-  ;
-  return 0;
-}
-_ACEOF
-if ac_fn_c_try_link "$LINENO"; then :
-  { $as_echo "$as_me:${as_lineno-$LINENO}: result: no" >&5
-$as_echo "no" >&6; }
-       X_LIBS="$X_LIBS -R$x_libraries"
-else
-  LIBS="$ac_xsave_LIBS -R $x_libraries"
-       cat confdefs.h - <<_ACEOF >conftest.$ac_ext
-/* end confdefs.h.  */
-
-int
-main ()
-{
-
-  ;
-  return 0;
-}
-_ACEOF
-if ac_fn_c_try_link "$LINENO"; then :
-  { $as_echo "$as_me:${as_lineno-$LINENO}: result: yes" >&5
-$as_echo "yes" >&6; }
-	  X_LIBS="$X_LIBS -R $x_libraries"
-else
-  { $as_echo "$as_me:${as_lineno-$LINENO}: result: neither works" >&5
-$as_echo "neither works" >&6; }
-fi
-rm -f core conftest.err conftest.$ac_objext \
-    conftest$ac_exeext conftest.$ac_ext
-fi
-rm -f core conftest.err conftest.$ac_objext \
-    conftest$ac_exeext conftest.$ac_ext
-    ac_c_werror_flag=$ac_xsave_c_werror_flag
-    LIBS=$ac_xsave_LIBS
-  fi
-
-  # Check for system-dependent libraries X programs must link with.
-  # Do this before checking for the system-independent R6 libraries
-  # (-lICE), since we may need -lsocket or whatever for X linking.
-
-  if test "$ISC" = yes; then
-    X_EXTRA_LIBS="$X_EXTRA_LIBS -lnsl_s -linet"
-  else
-    # Martyn Johnson says this is needed for Ultrix, if the X
-    # libraries were built with DECnet support.  And Karl Berry says
-    # the Alpha needs dnet_stub (dnet does not exist).
-    ac_xsave_LIBS="$LIBS"; LIBS="$LIBS $X_LIBS -lX11"
-    cat confdefs.h - <<_ACEOF >conftest.$ac_ext
-/* end confdefs.h.  */
-
-/* Override any GCC internal prototype to avoid an error.
-   Use char because int might match the return type of a GCC
-   builtin and then its argument prototype would still apply.  */
-#ifdef __cplusplus
-extern "C"
-#endif
-char XOpenDisplay ();
-int
-main ()
-{
-return XOpenDisplay ();
-  ;
-  return 0;
-}
-_ACEOF
-if ac_fn_c_try_link "$LINENO"; then :
-
-else
-  { $as_echo "$as_me:${as_lineno-$LINENO}: checking for dnet_ntoa in -ldnet" >&5
-$as_echo_n "checking for dnet_ntoa in -ldnet... " >&6; }
-if ${ac_cv_lib_dnet_dnet_ntoa+:} false; then :
-  $as_echo_n "(cached) " >&6
-else
-  ac_check_lib_save_LIBS=$LIBS
-LIBS="-ldnet  $LIBS"
-cat confdefs.h - <<_ACEOF >conftest.$ac_ext
-/* end confdefs.h.  */
-
-/* Override any GCC internal prototype to avoid an error.
-   Use char because int might match the return type of a GCC
-   builtin and then its argument prototype would still apply.  */
-#ifdef __cplusplus
-extern "C"
-#endif
-char dnet_ntoa ();
-int
-main ()
-{
-return dnet_ntoa ();
-  ;
-  return 0;
-}
-_ACEOF
-if ac_fn_c_try_link "$LINENO"; then :
-  ac_cv_lib_dnet_dnet_ntoa=yes
-else
-  ac_cv_lib_dnet_dnet_ntoa=no
-fi
-rm -f core conftest.err conftest.$ac_objext \
-    conftest$ac_exeext conftest.$ac_ext
-LIBS=$ac_check_lib_save_LIBS
-fi
-{ $as_echo "$as_me:${as_lineno-$LINENO}: result: $ac_cv_lib_dnet_dnet_ntoa" >&5
-$as_echo "$ac_cv_lib_dnet_dnet_ntoa" >&6; }
-if test "x$ac_cv_lib_dnet_dnet_ntoa" = xyes; then :
-  X_EXTRA_LIBS="$X_EXTRA_LIBS -ldnet"
-fi
-
-    if test $ac_cv_lib_dnet_dnet_ntoa = no; then
-      { $as_echo "$as_me:${as_lineno-$LINENO}: checking for dnet_ntoa in -ldnet_stub" >&5
-$as_echo_n "checking for dnet_ntoa in -ldnet_stub... " >&6; }
-if ${ac_cv_lib_dnet_stub_dnet_ntoa+:} false; then :
-  $as_echo_n "(cached) " >&6
-else
-  ac_check_lib_save_LIBS=$LIBS
-LIBS="-ldnet_stub  $LIBS"
-cat confdefs.h - <<_ACEOF >conftest.$ac_ext
-/* end confdefs.h.  */
-
-/* Override any GCC internal prototype to avoid an error.
-   Use char because int might match the return type of a GCC
-   builtin and then its argument prototype would still apply.  */
-#ifdef __cplusplus
-extern "C"
-#endif
-char dnet_ntoa ();
-int
-main ()
-{
-return dnet_ntoa ();
-  ;
-  return 0;
-}
-_ACEOF
-if ac_fn_c_try_link "$LINENO"; then :
-  ac_cv_lib_dnet_stub_dnet_ntoa=yes
-else
-  ac_cv_lib_dnet_stub_dnet_ntoa=no
-fi
-rm -f core conftest.err conftest.$ac_objext \
-    conftest$ac_exeext conftest.$ac_ext
-LIBS=$ac_check_lib_save_LIBS
-fi
-{ $as_echo "$as_me:${as_lineno-$LINENO}: result: $ac_cv_lib_dnet_stub_dnet_ntoa" >&5
-$as_echo "$ac_cv_lib_dnet_stub_dnet_ntoa" >&6; }
-if test "x$ac_cv_lib_dnet_stub_dnet_ntoa" = xyes; then :
-  X_EXTRA_LIBS="$X_EXTRA_LIBS -ldnet_stub"
-fi
-
-    fi
-fi
-rm -f core conftest.err conftest.$ac_objext \
-    conftest$ac_exeext conftest.$ac_ext
-    LIBS="$ac_xsave_LIBS"
-
-    # msh@cis.ufl.edu says -lnsl (and -lsocket) are needed for his 386/AT,
-    # to get the SysV transport functions.
-    # Chad R. Larson says the Pyramis MIS-ES running DC/OSx (SVR4)
-    # needs -lnsl.
-    # The nsl library prevents programs from opening the X display
-    # on Irix 5.2, according to T.E. Dickey.
-    # The functions gethostbyname, getservbyname, and inet_addr are
-    # in -lbsd on LynxOS 3.0.1/i386, according to Lars Hecking.
-    ac_fn_c_check_func "$LINENO" "gethostbyname" "ac_cv_func_gethostbyname"
-if test "x$ac_cv_func_gethostbyname" = xyes; then :
-
-fi
-
-    if test $ac_cv_func_gethostbyname = no; then
-      { $as_echo "$as_me:${as_lineno-$LINENO}: checking for gethostbyname in -lnsl" >&5
-$as_echo_n "checking for gethostbyname in -lnsl... " >&6; }
-if ${ac_cv_lib_nsl_gethostbyname+:} false; then :
-  $as_echo_n "(cached) " >&6
-else
-  ac_check_lib_save_LIBS=$LIBS
-LIBS="-lnsl  $LIBS"
-cat confdefs.h - <<_ACEOF >conftest.$ac_ext
-/* end confdefs.h.  */
-
-/* Override any GCC internal prototype to avoid an error.
-   Use char because int might match the return type of a GCC
-   builtin and then its argument prototype would still apply.  */
-#ifdef __cplusplus
-extern "C"
-#endif
-char gethostbyname ();
-int
-main ()
-{
-return gethostbyname ();
-  ;
-  return 0;
-}
-_ACEOF
-if ac_fn_c_try_link "$LINENO"; then :
-  ac_cv_lib_nsl_gethostbyname=yes
-else
-  ac_cv_lib_nsl_gethostbyname=no
-fi
-rm -f core conftest.err conftest.$ac_objext \
-    conftest$ac_exeext conftest.$ac_ext
-LIBS=$ac_check_lib_save_LIBS
-fi
-{ $as_echo "$as_me:${as_lineno-$LINENO}: result: $ac_cv_lib_nsl_gethostbyname" >&5
-$as_echo "$ac_cv_lib_nsl_gethostbyname" >&6; }
-if test "x$ac_cv_lib_nsl_gethostbyname" = xyes; then :
-  X_EXTRA_LIBS="$X_EXTRA_LIBS -lnsl"
-fi
-
-      if test $ac_cv_lib_nsl_gethostbyname = no; then
-	{ $as_echo "$as_me:${as_lineno-$LINENO}: checking for gethostbyname in -lbsd" >&5
-$as_echo_n "checking for gethostbyname in -lbsd... " >&6; }
-if ${ac_cv_lib_bsd_gethostbyname+:} false; then :
-  $as_echo_n "(cached) " >&6
-else
-  ac_check_lib_save_LIBS=$LIBS
-LIBS="-lbsd  $LIBS"
-cat confdefs.h - <<_ACEOF >conftest.$ac_ext
-/* end confdefs.h.  */
-
-/* Override any GCC internal prototype to avoid an error.
-   Use char because int might match the return type of a GCC
-   builtin and then its argument prototype would still apply.  */
-#ifdef __cplusplus
-extern "C"
-#endif
-char gethostbyname ();
-int
-main ()
-{
-return gethostbyname ();
-  ;
-  return 0;
-}
-_ACEOF
-if ac_fn_c_try_link "$LINENO"; then :
-  ac_cv_lib_bsd_gethostbyname=yes
-else
-  ac_cv_lib_bsd_gethostbyname=no
-fi
-rm -f core conftest.err conftest.$ac_objext \
-    conftest$ac_exeext conftest.$ac_ext
-LIBS=$ac_check_lib_save_LIBS
-fi
-{ $as_echo "$as_me:${as_lineno-$LINENO}: result: $ac_cv_lib_bsd_gethostbyname" >&5
-$as_echo "$ac_cv_lib_bsd_gethostbyname" >&6; }
-if test "x$ac_cv_lib_bsd_gethostbyname" = xyes; then :
-  X_EXTRA_LIBS="$X_EXTRA_LIBS -lbsd"
-fi
-
-      fi
-    fi
-
-    # lieder@skyler.mavd.honeywell.com says without -lsocket,
-    # socket/setsockopt and other routines are undefined under SCO ODT
-    # 2.0.  But -lsocket is broken on IRIX 5.2 (and is not necessary
-    # on later versions), says Simon Leinen: it contains gethostby*
-    # variants that don't use the name server (or something).  -lsocket
-    # must be given before -lnsl if both are needed.  We assume that
-    # if connect needs -lnsl, so does gethostbyname.
-    ac_fn_c_check_func "$LINENO" "connect" "ac_cv_func_connect"
-if test "x$ac_cv_func_connect" = xyes; then :
-
-fi
-
-    if test $ac_cv_func_connect = no; then
-      { $as_echo "$as_me:${as_lineno-$LINENO}: checking for connect in -lsocket" >&5
-$as_echo_n "checking for connect in -lsocket... " >&6; }
-if ${ac_cv_lib_socket_connect+:} false; then :
-  $as_echo_n "(cached) " >&6
-else
-  ac_check_lib_save_LIBS=$LIBS
-LIBS="-lsocket $X_EXTRA_LIBS $LIBS"
-cat confdefs.h - <<_ACEOF >conftest.$ac_ext
-/* end confdefs.h.  */
-
-/* Override any GCC internal prototype to avoid an error.
-   Use char because int might match the return type of a GCC
-   builtin and then its argument prototype would still apply.  */
-#ifdef __cplusplus
-extern "C"
-#endif
-char connect ();
-int
-main ()
-{
-return connect ();
-  ;
-  return 0;
-}
-_ACEOF
-if ac_fn_c_try_link "$LINENO"; then :
-  ac_cv_lib_socket_connect=yes
-else
-  ac_cv_lib_socket_connect=no
-fi
-rm -f core conftest.err conftest.$ac_objext \
-    conftest$ac_exeext conftest.$ac_ext
-LIBS=$ac_check_lib_save_LIBS
-fi
-{ $as_echo "$as_me:${as_lineno-$LINENO}: result: $ac_cv_lib_socket_connect" >&5
-$as_echo "$ac_cv_lib_socket_connect" >&6; }
-if test "x$ac_cv_lib_socket_connect" = xyes; then :
-  X_EXTRA_LIBS="-lsocket $X_EXTRA_LIBS"
-fi
-
-    fi
-
-    # Guillermo Gomez says -lposix is necessary on A/UX.
-    ac_fn_c_check_func "$LINENO" "remove" "ac_cv_func_remove"
-if test "x$ac_cv_func_remove" = xyes; then :
-
-fi
-
-    if test $ac_cv_func_remove = no; then
-      { $as_echo "$as_me:${as_lineno-$LINENO}: checking for remove in -lposix" >&5
-$as_echo_n "checking for remove in -lposix... " >&6; }
-if ${ac_cv_lib_posix_remove+:} false; then :
-  $as_echo_n "(cached) " >&6
-else
-  ac_check_lib_save_LIBS=$LIBS
-LIBS="-lposix  $LIBS"
-cat confdefs.h - <<_ACEOF >conftest.$ac_ext
-/* end confdefs.h.  */
-
-/* Override any GCC internal prototype to avoid an error.
-   Use char because int might match the return type of a GCC
-   builtin and then its argument prototype would still apply.  */
-#ifdef __cplusplus
-extern "C"
-#endif
-char remove ();
-int
-main ()
-{
-return remove ();
-  ;
-  return 0;
-}
-_ACEOF
-if ac_fn_c_try_link "$LINENO"; then :
-  ac_cv_lib_posix_remove=yes
-else
-  ac_cv_lib_posix_remove=no
-fi
-rm -f core conftest.err conftest.$ac_objext \
-    conftest$ac_exeext conftest.$ac_ext
-LIBS=$ac_check_lib_save_LIBS
-fi
-{ $as_echo "$as_me:${as_lineno-$LINENO}: result: $ac_cv_lib_posix_remove" >&5
-$as_echo "$ac_cv_lib_posix_remove" >&6; }
-if test "x$ac_cv_lib_posix_remove" = xyes; then :
-  X_EXTRA_LIBS="$X_EXTRA_LIBS -lposix"
-fi
-
-    fi
-
-    # BSDI BSD/OS 2.1 needs -lipc for XOpenDisplay.
-    ac_fn_c_check_func "$LINENO" "shmat" "ac_cv_func_shmat"
-if test "x$ac_cv_func_shmat" = xyes; then :
-
-fi
-
-    if test $ac_cv_func_shmat = no; then
-      { $as_echo "$as_me:${as_lineno-$LINENO}: checking for shmat in -lipc" >&5
-$as_echo_n "checking for shmat in -lipc... " >&6; }
-if ${ac_cv_lib_ipc_shmat+:} false; then :
-  $as_echo_n "(cached) " >&6
-else
-  ac_check_lib_save_LIBS=$LIBS
-LIBS="-lipc  $LIBS"
-cat confdefs.h - <<_ACEOF >conftest.$ac_ext
-/* end confdefs.h.  */
-
-/* Override any GCC internal prototype to avoid an error.
-   Use char because int might match the return type of a GCC
-   builtin and then its argument prototype would still apply.  */
-#ifdef __cplusplus
-extern "C"
-#endif
-char shmat ();
-int
-main ()
-{
-return shmat ();
-  ;
-  return 0;
-}
-_ACEOF
-if ac_fn_c_try_link "$LINENO"; then :
-  ac_cv_lib_ipc_shmat=yes
-else
-  ac_cv_lib_ipc_shmat=no
-fi
-rm -f core conftest.err conftest.$ac_objext \
-    conftest$ac_exeext conftest.$ac_ext
-LIBS=$ac_check_lib_save_LIBS
-fi
-{ $as_echo "$as_me:${as_lineno-$LINENO}: result: $ac_cv_lib_ipc_shmat" >&5
-$as_echo "$ac_cv_lib_ipc_shmat" >&6; }
-if test "x$ac_cv_lib_ipc_shmat" = xyes; then :
-  X_EXTRA_LIBS="$X_EXTRA_LIBS -lipc"
-fi
-
-    fi
-  fi
-
-  # Check for libraries that X11R6 Xt/Xaw programs need.
-  ac_save_LDFLAGS=$LDFLAGS
-  test -n "$x_libraries" && LDFLAGS="$LDFLAGS -L$x_libraries"
-  # SM needs ICE to (dynamically) link under SunOS 4.x (so we have to
-  # check for ICE first), but we must link in the order -lSM -lICE or
-  # we get undefined symbols.  So assume we have SM if we have ICE.
-  # These have to be linked with before -lX11, unlike the other
-  # libraries we check for below, so use a different variable.
-  # John Interrante, Karl Berry
-  { $as_echo "$as_me:${as_lineno-$LINENO}: checking for IceConnectionNumber in -lICE" >&5
-$as_echo_n "checking for IceConnectionNumber in -lICE... " >&6; }
-if ${ac_cv_lib_ICE_IceConnectionNumber+:} false; then :
-  $as_echo_n "(cached) " >&6
-else
-  ac_check_lib_save_LIBS=$LIBS
-LIBS="-lICE $X_EXTRA_LIBS $LIBS"
-cat confdefs.h - <<_ACEOF >conftest.$ac_ext
-/* end confdefs.h.  */
-
-/* Override any GCC internal prototype to avoid an error.
-   Use char because int might match the return type of a GCC
-   builtin and then its argument prototype would still apply.  */
-#ifdef __cplusplus
-extern "C"
-#endif
-char IceConnectionNumber ();
-int
-main ()
-{
-return IceConnectionNumber ();
-  ;
-  return 0;
-}
-_ACEOF
-if ac_fn_c_try_link "$LINENO"; then :
-  ac_cv_lib_ICE_IceConnectionNumber=yes
-else
-  ac_cv_lib_ICE_IceConnectionNumber=no
-fi
-rm -f core conftest.err conftest.$ac_objext \
-    conftest$ac_exeext conftest.$ac_ext
-LIBS=$ac_check_lib_save_LIBS
-fi
-{ $as_echo "$as_me:${as_lineno-$LINENO}: result: $ac_cv_lib_ICE_IceConnectionNumber" >&5
-$as_echo "$ac_cv_lib_ICE_IceConnectionNumber" >&6; }
-if test "x$ac_cv_lib_ICE_IceConnectionNumber" = xyes; then :
-  X_PRE_LIBS="$X_PRE_LIBS -lSM -lICE"
-fi
-
-  LDFLAGS=$ac_save_LDFLAGS
-
-fi
-
-
-   groff_no_x=$no_x
-   if test -z "$groff_no_x"; then
-     OLDCFLAGS=$CFLAGS
-     OLDLDFLAGS=$LDFLAGS
-     OLDLIBS=$LIBS
-     CFLAGS="$CFLAGS $X_CFLAGS"
-     LDFLAGS="$LDFLAGS $X_LIBS"
-     LIBS="$LIBS $X_PRE_LIBS -lX11 $X_EXTRA_LIBS"
-
-     LIBS="$LIBS -lXaw"
-     { $as_echo "$as_me:${as_lineno-$LINENO}: checking for Xaw library and header files" >&5
-$as_echo_n "checking for Xaw library and header files... " >&6; }
-     cat confdefs.h - <<_ACEOF >conftest.$ac_ext
-/* end confdefs.h.  */
-
-
-
-#include <X11/Intrinsic.h>
-#include <X11/Xaw/Simple.h>
-
-
-int
-main ()
-{
-
-  ;
-  return 0;
-}
-
-_ACEOF
-if ac_fn_c_try_link "$LINENO"; then :
-  { $as_echo "$as_me:${as_lineno-$LINENO}: result: yes" >&5
-$as_echo "yes" >&6; }
-else
-  { $as_echo "$as_me:${as_lineno-$LINENO}: result: no" >&5
-$as_echo "no" >&6; }
-	groff_no_x="yes"
-fi
-rm -f core conftest.err conftest.$ac_objext \
-    conftest$ac_exeext conftest.$ac_ext
-
-     LIBS="$LIBS -lXmu"
-     { $as_echo "$as_me:${as_lineno-$LINENO}: checking for Xmu library and header files" >&5
-$as_echo_n "checking for Xmu library and header files... " >&6; }
-     cat confdefs.h - <<_ACEOF >conftest.$ac_ext
-/* end confdefs.h.  */
-
-
-
-#include <X11/Intrinsic.h>
-#include <X11/Xmu/Converters.h>
-
-
-int
-main ()
-{
-
-  ;
-  return 0;
-}
-
-_ACEOF
-if ac_fn_c_try_link "$LINENO"; then :
-  { $as_echo "$as_me:${as_lineno-$LINENO}: result: yes" >&5
-$as_echo "yes" >&6; }
-else
-  { $as_echo "$as_me:${as_lineno-$LINENO}: result: no" >&5
-$as_echo "no" >&6; }
-	groff_no_x="yes"
-fi
-rm -f core conftest.err conftest.$ac_objext \
-    conftest$ac_exeext conftest.$ac_ext
-
-     CFLAGS=$OLDCFLAGS
-     LDFLAGS=$OLDLDFLAGS
-     LIBS=$OLDLIBS
-   fi
-
-   if test "x$groff_no_x" = "xyes"; then
-     { $as_echo "$as_me:${as_lineno-$LINENO}: gxditview and xtotroff won't be built" >&5
-$as_echo "$as_me: gxditview and xtotroff won't be built" >&6;}
-   else
-     XDEVDIRS="font/devX75 font/devX75-12 font/devX100 font/devX100-12"
-     XPROGDIRS="src/devices/xditview src/utils/xtotroff"
-     XLIBDIRS="src/libs/libxutil"
-   fi
-
-
-
-
-
-# Check whether --with-appresdir was given.
-if test "${with_appresdir+set}" = set; then :
-  withval=$with_appresdir;
-fi
-
-if test -z "$groff_no_x"; then
-     if test "x$with_appresdir" = "x"; then
-       if test "x$prefix" = "xNONE"; then
-         appresdir=$ac_default_prefix/lib/X11/app-defaults
-       else
-         appresdir=$prefix/lib/X11/app-defaults
-       fi
-     else
-       appresdir=$with_appresdir
-     fi
-   fi
-
-libprogramdir=$libdir/groff
-
-
-# Check whether --with-grofferdir was given.
-if test "${with_grofferdir+set}" = set; then :
-  withval=$with_grofferdir;
-fi
-
-if test "x$with_grofferdir" = "x"; then
-    groffer_dir=$libprogramdir/groffer
-  else
-    groffer_dir=$with_grofferdir
-  fi
-
-glilypond_dir=$libprogramdir/glilypond
-
-gpinyin_dir=$libprogramdir/gpinyin
-
-grog_dir=$libprogramdir/grog
-
-{ $as_echo "$as_me:${as_lineno-$LINENO}: checking for a sed that does not truncate output" >&5
-$as_echo_n "checking for a sed that does not truncate output... " >&6; }
-if ${ac_cv_path_SED+:} false; then :
-  $as_echo_n "(cached) " >&6
-else
-            ac_script=s/aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa/bbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbb/
-     for ac_i in 1 2 3 4 5 6 7; do
-       ac_script="$ac_script$as_nl$ac_script"
-     done
-     echo "$ac_script" 2>/dev/null | sed 99q >conftest.sed
-     { ac_script=; unset ac_script;}
-     if test -z "$SED"; then
-  ac_path_SED_found=false
-  # Loop through the user's path and test for each of PROGNAME-LIST
-  as_save_IFS=$IFS; IFS=$PATH_SEPARATOR
-for as_dir in $PATH
-do
-  IFS=$as_save_IFS
-  test -z "$as_dir" && as_dir=.
-    for ac_prog in sed gsed; do
-    for ac_exec_ext in '' $ac_executable_extensions; do
-      ac_path_SED="$as_dir/$ac_prog$ac_exec_ext"
-      as_fn_executable_p "$ac_path_SED" || continue
-# Check for GNU ac_path_SED and select it if it is found.
-  # Check for GNU $ac_path_SED
-case `"$ac_path_SED" --version 2>&1` in
-*GNU*)
-  ac_cv_path_SED="$ac_path_SED" ac_path_SED_found=:;;
-*)
-  ac_count=0
-  $as_echo_n 0123456789 >"conftest.in"
-  while :
-  do
-    cat "conftest.in" "conftest.in" >"conftest.tmp"
-    mv "conftest.tmp" "conftest.in"
-    cp "conftest.in" "conftest.nl"
-    $as_echo '' >> "conftest.nl"
-    "$ac_path_SED" -f conftest.sed < "conftest.nl" >"conftest.out" 2>/dev/null || break
-    diff "conftest.out" "conftest.nl" >/dev/null 2>&1 || break
-    as_fn_arith $ac_count + 1 && ac_count=$as_val
-    if test $ac_count -gt ${ac_path_SED_max-0}; then
-      # Best one so far, save it but keep looking for a better one
-      ac_cv_path_SED="$ac_path_SED"
-      ac_path_SED_max=$ac_count
-    fi
-    # 10*(2^10) chars as input seems more than enough
-    test $ac_count -gt 10 && break
-  done
-  rm -f conftest.in conftest.tmp conftest.nl conftest.out;;
-esac
-
-      $ac_path_SED_found && break 3
-    done
-  done
-  done
-IFS=$as_save_IFS
-  if test -z "$ac_cv_path_SED"; then
-    as_fn_error $? "no acceptable sed could be found in \$PATH" "$LINENO" 5
-  fi
-else
-  ac_cv_path_SED=$SED
-fi
-
-fi
-{ $as_echo "$as_me:${as_lineno-$LINENO}: result: $ac_cv_path_SED" >&5
-$as_echo "$ac_cv_path_SED" >&6; }
- SED="$ac_cv_path_SED"
-  rm -f conftest.sed
-
-for ac_prog in gawk mawk nawk awk
-do
-  # Extract the first word of "$ac_prog", so it can be a program name with args.
-set dummy $ac_prog; ac_word=$2
-{ $as_echo "$as_me:${as_lineno-$LINENO}: checking for $ac_word" >&5
-$as_echo_n "checking for $ac_word... " >&6; }
-if ${ac_cv_prog_AWK+:} false; then :
-  $as_echo_n "(cached) " >&6
-else
-  if test -n "$AWK"; then
-  ac_cv_prog_AWK="$AWK" # Let the user override the test.
-else
-as_save_IFS=$IFS; IFS=$PATH_SEPARATOR
-for as_dir in $PATH
-do
-  IFS=$as_save_IFS
-  test -z "$as_dir" && as_dir=.
-    for ac_exec_ext in '' $ac_executable_extensions; do
-  if as_fn_executable_p "$as_dir/$ac_word$ac_exec_ext"; then
-    ac_cv_prog_AWK="$ac_prog"
-    $as_echo "$as_me:${as_lineno-$LINENO}: found $as_dir/$ac_word$ac_exec_ext" >&5
-    break 2
-  fi
-done
-  done
-IFS=$as_save_IFS
-
-fi
-fi
-AWK=$ac_cv_prog_AWK
-if test -n "$AWK"; then
-  { $as_echo "$as_me:${as_lineno-$LINENO}: result: $AWK" >&5
-$as_echo "$AWK" >&6; }
-else
-  { $as_echo "$as_me:${as_lineno-$LINENO}: result: no" >&5
-$as_echo "no" >&6; }
-fi
-
-
-  test -n "$AWK" && break
-done
-
-PERLVERSION=v5.6.1
-   # Extract the first word of "perl", so it can be a program name with args.
-set dummy perl; ac_word=$2
-{ $as_echo "$as_me:${as_lineno-$LINENO}: checking for $ac_word" >&5
-$as_echo_n "checking for $ac_word... " >&6; }
-if ${ac_cv_path_PERL+:} false; then :
-  $as_echo_n "(cached) " >&6
-else
-  case $PERL in
-  [\\/]* | ?:[\\/]*)
-  ac_cv_path_PERL="$PERL" # Let the user override the test with a path.
-  ;;
-  *)
-  as_save_IFS=$IFS; IFS=$PATH_SEPARATOR
-for as_dir in $PATH
-do
-  IFS=$as_save_IFS
-  test -z "$as_dir" && as_dir=.
-    for ac_exec_ext in '' $ac_executable_extensions; do
-  if as_fn_executable_p "$as_dir/$ac_word$ac_exec_ext"; then
-    ac_cv_path_PERL="$as_dir/$ac_word$ac_exec_ext"
-    $as_echo "$as_me:${as_lineno-$LINENO}: found $as_dir/$ac_word$ac_exec_ext" >&5
-    break 2
-  fi
-done
-  done
-IFS=$as_save_IFS
-
-  test -z "$ac_cv_path_PERL" && ac_cv_path_PERL="no"
-  ;;
-esac
-fi
-PERL=$ac_cv_path_PERL
-if test -n "$PERL"; then
-  { $as_echo "$as_me:${as_lineno-$LINENO}: result: $PERL" >&5
-$as_echo "$PERL" >&6; }
-else
-  { $as_echo "$as_me:${as_lineno-$LINENO}: result: no" >&5
-$as_echo "no" >&6; }
-fi
-
-
-   if test "x$PERL" = "xno"; then
-     as_fn_error 1 "perl binary not found" "$LINENO" 5
-   fi
-
-
-
-
-    if test -n "$PERL"; then :
-
-        ax_perl_version="$PERLVERSION"
-
-        { $as_echo "$as_me:${as_lineno-$LINENO}: checking for perl version" >&5
-$as_echo_n "checking for perl version... " >&6; }
-
-        perl_version=`$PERL --version 2>&1 \
-          | $SED -n -e '/This is perl/b inspect
-b
-: inspect
-s/.* (\{0,1\}v\([0-9]*\.[0-9]*\.[0-9]*\))\{0,1\} .*/\1/;p'`
-
-        { $as_echo "$as_me:${as_lineno-$LINENO}: result: $perl_version" >&5
-$as_echo "$perl_version" >&6; }
-
-	PERL_VERSION=$perl_version
-
-
-
-
-
-  # Used to indicate true or false condition
-  ax_compare_version=false
-
-  # Convert the two version strings to be compared into a format that
-  # allows a simple string comparison.  The end result is that a version
-  # string of the form 1.12.5-r617 will be converted to the form
-  # 0001001200050617.  In other words, each number is zero padded to four
-  # digits, and non digits are removed.
-
-  ax_compare_version_A=`echo "$ax_perl_version" | sed -e 's/\([0-9]*\)/Z\1Z/g' \
-                     -e 's/Z\([0-9]\)Z/Z0\1Z/g' \
-                     -e 's/Z\([0-9][0-9]\)Z/Z0\1Z/g' \
-                     -e 's/Z\([0-9][0-9][0-9]\)Z/Z0\1Z/g' \
-                     -e 's/[^0-9]//g'`
-
-
-  ax_compare_version_B=`echo "$perl_version" | sed -e 's/\([0-9]*\)/Z\1Z/g' \
-                     -e 's/Z\([0-9]\)Z/Z0\1Z/g' \
-                     -e 's/Z\([0-9][0-9]\)Z/Z0\1Z/g' \
-                     -e 's/Z\([0-9][0-9][0-9]\)Z/Z0\1Z/g' \
-                     -e 's/[^0-9]//g'`
-
-
-    ax_compare_version=`echo "x$ax_compare_version_A
-x$ax_compare_version_B" | sed 's/^ *//' | sort | sed "s/x${ax_compare_version_A}/true/;s/x${ax_compare_version_B}/false/;1q"`
-
-
-
-    if test "$ax_compare_version" = "true" ; then
-
-	    :
-            true
-
-    else
-	    :
-            \
-     as_fn_error 1 "perl version is too old" "$LINENO" 5
-
-  fi
-
-
-else
-
-        { $as_echo "$as_me:${as_lineno-$LINENO}: WARNING: could not find the perl interpreter" >&5
-$as_echo "$as_me: WARNING: could not find the perl interpreter" >&2;}
-        \
-     as_fn_error 1 "perl version is too old" "$LINENO" 5
-
-fi
-
-if test -z "$PSPRINT"; then
-     for ac_prog in lpr
-do
-  # Extract the first word of "$ac_prog", so it can be a program name with args.
-set dummy $ac_prog; ac_word=$2
-{ $as_echo "$as_me:${as_lineno-$LINENO}: checking for $ac_word" >&5
-$as_echo_n "checking for $ac_word... " >&6; }
-if ${ac_cv_prog_LPR+:} false; then :
-  $as_echo_n "(cached) " >&6
-else
-  if test -n "$LPR"; then
-  ac_cv_prog_LPR="$LPR" # Let the user override the test.
-else
-as_save_IFS=$IFS; IFS=$PATH_SEPARATOR
-for as_dir in $PATH
-do
-  IFS=$as_save_IFS
-  test -z "$as_dir" && as_dir=.
-    for ac_exec_ext in '' $ac_executable_extensions; do
-  if as_fn_executable_p "$as_dir/$ac_word$ac_exec_ext"; then
-    ac_cv_prog_LPR="$ac_prog"
-    $as_echo "$as_me:${as_lineno-$LINENO}: found $as_dir/$ac_word$ac_exec_ext" >&5
-    break 2
-  fi
-done
-  done
-IFS=$as_save_IFS
-
-fi
-fi
-LPR=$ac_cv_prog_LPR
-if test -n "$LPR"; then
-  { $as_echo "$as_me:${as_lineno-$LINENO}: result: $LPR" >&5
-$as_echo "$LPR" >&6; }
-else
-  { $as_echo "$as_me:${as_lineno-$LINENO}: result: no" >&5
-$as_echo "no" >&6; }
-fi
-
-
-  test -n "$LPR" && break
-done
-
-     for ac_prog in lp
-do
-  # Extract the first word of "$ac_prog", so it can be a program name with args.
-set dummy $ac_prog; ac_word=$2
-{ $as_echo "$as_me:${as_lineno-$LINENO}: checking for $ac_word" >&5
-$as_echo_n "checking for $ac_word... " >&6; }
-if ${ac_cv_prog_LP+:} false; then :
-  $as_echo_n "(cached) " >&6
-else
-  if test -n "$LP"; then
-  ac_cv_prog_LP="$LP" # Let the user override the test.
-else
-as_save_IFS=$IFS; IFS=$PATH_SEPARATOR
-for as_dir in $PATH
-do
-  IFS=$as_save_IFS
-  test -z "$as_dir" && as_dir=.
-    for ac_exec_ext in '' $ac_executable_extensions; do
-  if as_fn_executable_p "$as_dir/$ac_word$ac_exec_ext"; then
-    ac_cv_prog_LP="$ac_prog"
-    $as_echo "$as_me:${as_lineno-$LINENO}: found $as_dir/$ac_word$ac_exec_ext" >&5
-    break 2
-  fi
-done
-  done
-IFS=$as_save_IFS
-
-fi
-fi
-LP=$ac_cv_prog_LP
-if test -n "$LP"; then
-  { $as_echo "$as_me:${as_lineno-$LINENO}: result: $LP" >&5
-$as_echo "$LP" >&6; }
-else
-  { $as_echo "$as_me:${as_lineno-$LINENO}: result: no" >&5
-$as_echo "no" >&6; }
-fi
-
-
-  test -n "$LP" && break
-done
-
-     if test -n "$LPR" && test -n "$LP"; then
-       # HP-UX provides an lpr command that emulates lpr using lp,
-       # but it doesn't have lpq; in this case we want to use lp
-       # rather than lpr.
-       for ac_prog in lpq
-do
-  # Extract the first word of "$ac_prog", so it can be a program name with args.
-set dummy $ac_prog; ac_word=$2
-{ $as_echo "$as_me:${as_lineno-$LINENO}: checking for $ac_word" >&5
-$as_echo_n "checking for $ac_word... " >&6; }
-if ${ac_cv_prog_LPQ+:} false; then :
-  $as_echo_n "(cached) " >&6
-else
-  if test -n "$LPQ"; then
-  ac_cv_prog_LPQ="$LPQ" # Let the user override the test.
-else
-as_save_IFS=$IFS; IFS=$PATH_SEPARATOR
-for as_dir in $PATH
-do
-  IFS=$as_save_IFS
-  test -z "$as_dir" && as_dir=.
-    for ac_exec_ext in '' $ac_executable_extensions; do
-  if as_fn_executable_p "$as_dir/$ac_word$ac_exec_ext"; then
-    ac_cv_prog_LPQ="$ac_prog"
-    $as_echo "$as_me:${as_lineno-$LINENO}: found $as_dir/$ac_word$ac_exec_ext" >&5
-    break 2
-  fi
-done
-  done
-IFS=$as_save_IFS
-
-fi
-fi
-LPQ=$ac_cv_prog_LPQ
-if test -n "$LPQ"; then
-  { $as_echo "$as_me:${as_lineno-$LINENO}: result: $LPQ" >&5
-$as_echo "$LPQ" >&6; }
-else
-  { $as_echo "$as_me:${as_lineno-$LINENO}: result: no" >&5
-$as_echo "no" >&6; }
-fi
-
-
-  test -n "$LPQ" && break
-done
-
-       test -n "$LPQ" || LPR=
-     fi
-     if test -n "$LPR"; then
-       PSPRINT="$LPR"
-     elif test -n "$LP"; then
-       PSPRINT="$LP"
-     fi
-   fi
-
-   { $as_echo "$as_me:${as_lineno-$LINENO}: checking for command to use for printing PostScript files" >&5
-$as_echo_n "checking for command to use for printing PostScript files... " >&6; }
-   { $as_echo "$as_me:${as_lineno-$LINENO}: result: $PSPRINT" >&5
-$as_echo "$PSPRINT" >&6; }
-
-   # Figure out DVIPRINT from PSPRINT.
-   { $as_echo "$as_me:${as_lineno-$LINENO}: checking for command to use for printing dvi files" >&5
-$as_echo_n "checking for command to use for printing dvi files... " >&6; }
-   if test -n "$PSPRINT" && test -z "$DVIPRINT"; then
-     if test "x$PSPRINT" = "xlpr"; then
-       DVIPRINT="lpr -d"
-     else
-       DVIPRINT="$PSPRINT"
-     fi
-   fi
-
-   { $as_echo "$as_me:${as_lineno-$LINENO}: result: $DVIPRINT" >&5
-$as_echo "$DVIPRINT" >&6; }
-# GROFF_REFER
-referdir=$libprogramdir/refer
-
-{ $as_echo "$as_me:${as_lineno-$LINENO}: checking for egrep" >&5
-$as_echo_n "checking for egrep... " >&6; }
-if ${ac_cv_path_EGREP+:} false; then :
-  $as_echo_n "(cached) " >&6
-else
-  if echo a | $GREP -E '(a|b)' >/dev/null 2>&1
-   then ac_cv_path_EGREP="$GREP -E"
-   else
-     if test -z "$EGREP"; then
-  ac_path_EGREP_found=false
-  # Loop through the user's path and test for each of PROGNAME-LIST
-  as_save_IFS=$IFS; IFS=$PATH_SEPARATOR
-for as_dir in $PATH$PATH_SEPARATOR/usr/xpg4/bin
-do
-  IFS=$as_save_IFS
-  test -z "$as_dir" && as_dir=.
-    for ac_prog in egrep; do
-    for ac_exec_ext in '' $ac_executable_extensions; do
-      ac_path_EGREP="$as_dir/$ac_prog$ac_exec_ext"
-      as_fn_executable_p "$ac_path_EGREP" || continue
-# Check for GNU ac_path_EGREP and select it if it is found.
-  # Check for GNU $ac_path_EGREP
-case `"$ac_path_EGREP" --version 2>&1` in
-*GNU*)
-  ac_cv_path_EGREP="$ac_path_EGREP" ac_path_EGREP_found=:;;
-*)
-  ac_count=0
-  $as_echo_n 0123456789 >"conftest.in"
-  while :
-  do
-    cat "conftest.in" "conftest.in" >"conftest.tmp"
-    mv "conftest.tmp" "conftest.in"
-    cp "conftest.in" "conftest.nl"
-    $as_echo 'EGREP' >> "conftest.nl"
-    "$ac_path_EGREP" 'EGREP$' < "conftest.nl" >"conftest.out" 2>/dev/null || break
-    diff "conftest.out" "conftest.nl" >/dev/null 2>&1 || break
-    as_fn_arith $ac_count + 1 && ac_count=$as_val
-    if test $ac_count -gt ${ac_path_EGREP_max-0}; then
-      # Best one so far, save it but keep looking for a better one
-      ac_cv_path_EGREP="$ac_path_EGREP"
-      ac_path_EGREP_max=$ac_count
-    fi
-    # 10*(2^10) chars as input seems more than enough
-    test $ac_count -gt 10 && break
-  done
-  rm -f conftest.in conftest.tmp conftest.nl conftest.out;;
-esac
-
-      $ac_path_EGREP_found && break 3
-    done
-  done
-  done
-IFS=$as_save_IFS
-  if test -z "$ac_cv_path_EGREP"; then
-    as_fn_error $? "no acceptable egrep could be found in $PATH$PATH_SEPARATOR/usr/xpg4/bin" "$LINENO" 5
-  fi
-else
-  ac_cv_path_EGREP=$EGREP
-fi
-
-   fi
-fi
-{ $as_echo "$as_me:${as_lineno-$LINENO}: result: $ac_cv_path_EGREP" >&5
-$as_echo "$ac_cv_path_EGREP" >&6; }
- EGREP="$ac_cv_path_EGREP"
-
-
-for ac_prog in byacc 'bison -y'
-do
-  # Extract the first word of "$ac_prog", so it can be a program name with args.
-set dummy $ac_prog; ac_word=$2
-{ $as_echo "$as_me:${as_lineno-$LINENO}: checking for $ac_word" >&5
-$as_echo_n "checking for $ac_word... " >&6; }
-if ${ac_cv_prog_YACC+:} false; then :
-  $as_echo_n "(cached) " >&6
-else
-  if test -n "$YACC"; then
-  ac_cv_prog_YACC="$YACC" # Let the user override the test.
-else
-as_save_IFS=$IFS; IFS=$PATH_SEPARATOR
-for as_dir in $PATH
-do
-  IFS=$as_save_IFS
-  test -z "$as_dir" && as_dir=.
-    for ac_exec_ext in '' $ac_executable_extensions; do
-  if as_fn_executable_p "$as_dir/$ac_word$ac_exec_ext"; then
-    ac_cv_prog_YACC="$ac_prog"
-    $as_echo "$as_me:${as_lineno-$LINENO}: found $as_dir/$ac_word$ac_exec_ext" >&5
-    break 2
-  fi
-done
-  done
-IFS=$as_save_IFS
-
-fi
-fi
-YACC=$ac_cv_prog_YACC
-if test -n "$YACC"; then
-  { $as_echo "$as_me:${as_lineno-$LINENO}: result: $YACC" >&5
-$as_echo "$YACC" >&6; }
-else
-  { $as_echo "$as_me:${as_lineno-$LINENO}: result: no" >&5
-$as_echo "no" >&6; }
-fi
-
-
-  test -n "$YACC" && break
-done
-test -n "$YACC" || YACC="yacc"
-
-
-# Check whether --with-doc was given.
-if test "${with_doc+set}" = set; then :
-  withval=$with_doc; doc="$withval"
-else
-  doc=yes
-fi
-
-  test "x$doc" = xno && doc=''
-  if test "x$doc" = xyes; then
-    doc_dist_target_ok=yes
-    docadd_html=yes
-    docadd_info=yes
-    docadd_other=yes
-    docadd_pdf=yes
-    docadd_examples=yes
-  else
-    # Don't use case/esac, verify input.
-    doc_dist_target_ok=no
-    docadd_html=no
-    docadd_info=no
-    docadd_other=no
-    docadd_pdf=no
-    docadd_examples=no
-    OFS=$IFS
-    IFS=','
-    set -- $doc
-    IFS=$OFS
-    for i
-    do
-      test "x$i" = xhtml     && { docadd_html=yes; continue; }
-      test "x$i" = xinfo     && { docadd_info=yes; continue; }
-      test "x$i" = xother    && { docadd_other=yes; continue; }
-      test "x$i" = xpdf      && { docadd_pdf=yes; continue; }
-      test "x$i" = xexamples && { docadd_examples=yes; continue; }
-      { $as_echo "$as_me:${as_lineno-$LINENO}: WARNING: Invalid \`--with-doc' argument: $i" >&5
-$as_echo "$as_me: WARNING: Invalid \`--with-doc' argument: $i" >&2;}
-    done
-  fi
-  if test $docadd_html = yes; then
-    make_install_shipped_htmldoc=install_shipped_htmldoc
-    make_uninstall_shipped_htmldoc=uninstall_shipped_htmldoc
-  else
-    make_install_shipped_htmldoc=
-    make_uninstall_shipped_htmldoc=
-  fi
-  if test $docadd_other = yes; then
-    make_otherdoc=otherdoc
-    make_install_otherdoc=install_otherdoc
-    make_uninstall_otherdoc=uninstall_otherdoc
-  else
-    make_otherdoc=
-    make_install_otherdoc=
-    make_uninstall_otherdoc=
-  fi
-  if test $docadd_examples = yes; then
-    make_examples=examples
-    make_install_examples=install_examples
-    make_uninstall_examples=uninstall_examples
-  else
-    make_examples=
-    make_install_examples=
-    make_uninstall_examples=
-  fi
-
-
-
-
-
-
-
-
-
-if test $docadd_info = yes; then
-     missing=
-     # Extract the first word of "makeinfo", so it can be a program name with args.
-set dummy makeinfo; ac_word=$2
-{ $as_echo "$as_me:${as_lineno-$LINENO}: checking for $ac_word" >&5
-$as_echo_n "checking for $ac_word... " >&6; }
-if ${ac_cv_prog_MAKEINFO+:} false; then :
-  $as_echo_n "(cached) " >&6
-else
-  if test -n "$MAKEINFO"; then
-  ac_cv_prog_MAKEINFO="$MAKEINFO" # Let the user override the test.
-else
-as_save_IFS=$IFS; IFS=$PATH_SEPARATOR
-for as_dir in $PATH
-do
-  IFS=$as_save_IFS
-  test -z "$as_dir" && as_dir=.
-    for ac_exec_ext in '' $ac_executable_extensions; do
-  if as_fn_executable_p "$as_dir/$ac_word$ac_exec_ext"; then
-    ac_cv_prog_MAKEINFO="makeinfo"
-    $as_echo "$as_me:${as_lineno-$LINENO}: found $as_dir/$ac_word$ac_exec_ext" >&5
-    break 2
-  fi
-done
-  done
-IFS=$as_save_IFS
-
-fi
-fi
-MAKEINFO=$ac_cv_prog_MAKEINFO
-if test -n "$MAKEINFO"; then
-  { $as_echo "$as_me:${as_lineno-$LINENO}: result: $MAKEINFO" >&5
-$as_echo "$MAKEINFO" >&6; }
-else
-  { $as_echo "$as_me:${as_lineno-$LINENO}: result: no" >&5
-$as_echo "no" >&6; }
-fi
-
-
-     if test -z "$MAKEINFO"; then
-       missing="\`makeinfo' is missing."
-     else
-       { $as_echo "$as_me:${as_lineno-$LINENO}: checking for makeinfo version" >&5
-$as_echo_n "checking for makeinfo version... " >&6; }
-       # We need an additional level of quoting to make sed's regexps work.
-       makeinfo_version=`$MAKEINFO --version 2>&1 \
-        | sed -e 's/^.* \([^ ][^ ]*\)$/\1/' -e '1q'`
-       { $as_echo "$as_me:${as_lineno-$LINENO}: result: $makeinfo_version" >&5
-$as_echo "$makeinfo_version" >&6; }
-       # Consider only the first two numbers in version number string.
-       makeinfo_version_major=`IFS=.; set x $makeinfo_version; echo 0${2}`
-       makeinfo_version_minor=`IFS=.; set x $makeinfo_version; echo 0${3}`
-       makeinfo_version_numeric=`
-         expr ${makeinfo_version_major}000 \+ ${makeinfo_version_minor}`
-       if test $makeinfo_version_numeric -lt 4008; then
-         missing="\`makeinfo' is too old."
-       fi
-     fi
-
-     if test -n "$missing"; then
-       infofile=doc/groff.info
-       test -f ${infofile} || infofile=${srcdir}/${infofile}
-       if test ! -f ${infofile} \
-	|| test ${srcdir}/doc/groff.texinfo -nt ${infofile}; then
-	 as_fn_error $? "$missing
-Get the \`texinfo' package version 4.8 or newer." "$LINENO" 5
-       else
-	 { $as_echo "$as_me:${as_lineno-$LINENO}: WARNING: $missing
-Get the \`texinfo' package version 4.8 or newer if you want to convert
-\`groff.texinfo' into a PDF or HTML document." >&5
-$as_echo "$as_me: WARNING: $missing
-Get the \`texinfo' package version 4.8 or newer if you want to convert
-\`groff.texinfo' into a PDF or HTML document." >&2;}
-       fi
-     fi
-
-     make_infodoc=infodoc
-     make_install_infodoc=install_infodoc
-     make_uninstall_infodoc=uninstall_infodoc
-   else
-     make_infodoc=
-     make_install_infodoc=
-     make_uninstall_infodoc=
-     MAKEINFO=
-   fi
-
-
-
-
-if test -n "$ac_tool_prefix"; then
-  # Extract the first word of "${ac_tool_prefix}ranlib", so it can be a program name with args.
-set dummy ${ac_tool_prefix}ranlib; ac_word=$2
-{ $as_echo "$as_me:${as_lineno-$LINENO}: checking for $ac_word" >&5
-$as_echo_n "checking for $ac_word... " >&6; }
-if ${ac_cv_prog_RANLIB+:} false; then :
-  $as_echo_n "(cached) " >&6
-else
-  if test -n "$RANLIB"; then
-  ac_cv_prog_RANLIB="$RANLIB" # Let the user override the test.
-else
-as_save_IFS=$IFS; IFS=$PATH_SEPARATOR
-for as_dir in $PATH
-do
-  IFS=$as_save_IFS
-  test -z "$as_dir" && as_dir=.
-    for ac_exec_ext in '' $ac_executable_extensions; do
-  if as_fn_executable_p "$as_dir/$ac_word$ac_exec_ext"; then
-    ac_cv_prog_RANLIB="${ac_tool_prefix}ranlib"
-    $as_echo "$as_me:${as_lineno-$LINENO}: found $as_dir/$ac_word$ac_exec_ext" >&5
-    break 2
-  fi
-done
-  done
-IFS=$as_save_IFS
-
-fi
-fi
-RANLIB=$ac_cv_prog_RANLIB
-if test -n "$RANLIB"; then
-  { $as_echo "$as_me:${as_lineno-$LINENO}: result: $RANLIB" >&5
-$as_echo "$RANLIB" >&6; }
-else
-  { $as_echo "$as_me:${as_lineno-$LINENO}: result: no" >&5
-$as_echo "no" >&6; }
-fi
-
-
-fi
-if test -z "$ac_cv_prog_RANLIB"; then
-  ac_ct_RANLIB=$RANLIB
-  # Extract the first word of "ranlib", so it can be a program name with args.
-set dummy ranlib; ac_word=$2
-{ $as_echo "$as_me:${as_lineno-$LINENO}: checking for $ac_word" >&5
-$as_echo_n "checking for $ac_word... " >&6; }
-if ${ac_cv_prog_ac_ct_RANLIB+:} false; then :
-  $as_echo_n "(cached) " >&6
-else
-  if test -n "$ac_ct_RANLIB"; then
-  ac_cv_prog_ac_ct_RANLIB="$ac_ct_RANLIB" # Let the user override the test.
-else
-as_save_IFS=$IFS; IFS=$PATH_SEPARATOR
-for as_dir in $PATH
-do
-  IFS=$as_save_IFS
-  test -z "$as_dir" && as_dir=.
-    for ac_exec_ext in '' $ac_executable_extensions; do
-  if as_fn_executable_p "$as_dir/$ac_word$ac_exec_ext"; then
-    ac_cv_prog_ac_ct_RANLIB="ranlib"
-    $as_echo "$as_me:${as_lineno-$LINENO}: found $as_dir/$ac_word$ac_exec_ext" >&5
-    break 2
-  fi
-done
-  done
-IFS=$as_save_IFS
-
-fi
-fi
-ac_ct_RANLIB=$ac_cv_prog_ac_ct_RANLIB
-if test -n "$ac_ct_RANLIB"; then
-  { $as_echo "$as_me:${as_lineno-$LINENO}: result: $ac_ct_RANLIB" >&5
-$as_echo "$ac_ct_RANLIB" >&6; }
-else
-  { $as_echo "$as_me:${as_lineno-$LINENO}: result: no" >&5
-$as_echo "no" >&6; }
-fi
-
-  if test "x$ac_ct_RANLIB" = x; then
-    RANLIB=":"
-  else
-    case $cross_compiling:$ac_tool_warned in
-yes:)
-{ $as_echo "$as_me:${as_lineno-$LINENO}: WARNING: using cross tools not prefixed with host triplet" >&5
-$as_echo "$as_me: WARNING: using cross tools not prefixed with host triplet" >&2;}
-ac_tool_warned=yes ;;
-esac
-    RANLIB=$ac_ct_RANLIB
-  fi
-else
-  RANLIB="$ac_cv_prog_RANLIB"
-fi
-
-ac_aux_dir=
-for ac_dir in "$srcdir" "$srcdir/.." "$srcdir/../.."; do
-  if test -f "$ac_dir/install-sh"; then
-    ac_aux_dir=$ac_dir
-    ac_install_sh="$ac_aux_dir/install-sh -c"
-    break
-  elif test -f "$ac_dir/install.sh"; then
-    ac_aux_dir=$ac_dir
-    ac_install_sh="$ac_aux_dir/install.sh -c"
-    break
-  elif test -f "$ac_dir/shtool"; then
-    ac_aux_dir=$ac_dir
-    ac_install_sh="$ac_aux_dir/shtool install -c"
-    break
-  fi
-done
-if test -z "$ac_aux_dir"; then
-  as_fn_error $? "cannot find install-sh, install.sh, or shtool in \"$srcdir\" \"$srcdir/..\" \"$srcdir/../..\"" "$LINENO" 5
-fi
-
-# These three variables are undocumented and unsupported,
-# and are intended to be withdrawn in a future Autoconf release.
-# They can cause serious problems if a builder's source tree is in a directory
-# whose full name contains unusual characters.
-ac_config_guess="$SHELL $ac_aux_dir/config.guess"  # Please don't use this var.
-ac_config_sub="$SHELL $ac_aux_dir/config.sub"  # Please don't use this var.
-ac_configure="$SHELL $ac_aux_dir/configure"  # Please don't use this var.
-
-
-
-   ac_dir=`cd $ac_aux_dir; pwd`
-   ac_install_sh="$ac_dir/install-sh -c"
-if test $docadd_info = yes; then
-     for ac_prog in install-info
-do
-  # Extract the first word of "$ac_prog", so it can be a program name with args.
-set dummy $ac_prog; ac_word=$2
-{ $as_echo "$as_me:${as_lineno-$LINENO}: checking for $ac_word" >&5
-$as_echo_n "checking for $ac_word... " >&6; }
-if ${ac_cv_prog_INSTALL_INFO+:} false; then :
-  $as_echo_n "(cached) " >&6
-else
-  if test -n "$INSTALL_INFO"; then
-  ac_cv_prog_INSTALL_INFO="$INSTALL_INFO" # Let the user override the test.
-else
-as_save_IFS=$IFS; IFS=$PATH_SEPARATOR
-for as_dir in $PATH
-do
-  IFS=$as_save_IFS
-  test -z "$as_dir" && as_dir=.
-    for ac_exec_ext in '' $ac_executable_extensions; do
-  if as_fn_executable_p "$as_dir/$ac_word$ac_exec_ext"; then
-    ac_cv_prog_INSTALL_INFO="$ac_prog"
-    $as_echo "$as_me:${as_lineno-$LINENO}: found $as_dir/$ac_word$ac_exec_ext" >&5
-    break 2
-  fi
-done
-  done
-IFS=$as_save_IFS
-
-fi
-fi
-INSTALL_INFO=$ac_cv_prog_INSTALL_INFO
-if test -n "$INSTALL_INFO"; then
-  { $as_echo "$as_me:${as_lineno-$LINENO}: result: $INSTALL_INFO" >&5
-$as_echo "$INSTALL_INFO" >&6; }
-else
-  { $as_echo "$as_me:${as_lineno-$LINENO}: result: no" >&5
-$as_echo "no" >&6; }
-fi
-
-
-  test -n "$INSTALL_INFO" && break
-done
-test -n "$INSTALL_INFO" || INSTALL_INFO=":"
-
-   fi
-# Find a good install program.  We prefer a C program (faster),
-# so one script is as good as another.  But avoid the broken or
-# incompatible versions:
-# SysV /etc/install, /usr/sbin/install
-# SunOS /usr/etc/install
-# IRIX /sbin/install
-# AIX /bin/install
-# AmigaOS /C/install, which installs bootblocks on floppy discs
-# AIX 4 /usr/bin/installbsd, which doesn't work without a -g flag
-# AFS /usr/afsws/bin/install, which mishandles nonexistent args
-# SVR4 /usr/ucb/install, which tries to use the nonexistent group "staff"
-# OS/2's system install, which has a completely different semantic
-# ./install, which can be erroneously created by make from ./install.sh.
-# Reject install programs that cannot install multiple files.
-{ $as_echo "$as_me:${as_lineno-$LINENO}: checking for a BSD-compatible install" >&5
-$as_echo_n "checking for a BSD-compatible install... " >&6; }
-if test -z "$INSTALL"; then
-if ${ac_cv_path_install+:} false; then :
-  $as_echo_n "(cached) " >&6
-else
-  as_save_IFS=$IFS; IFS=$PATH_SEPARATOR
-for as_dir in $PATH
-do
-  IFS=$as_save_IFS
-  test -z "$as_dir" && as_dir=.
-    # Account for people who put trailing slashes in PATH elements.
-case $as_dir/ in #((
-  ./ | .// | /[cC]/* | \
-  /etc/* | /usr/sbin/* | /usr/etc/* | /sbin/* | /usr/afsws/bin/* | \
-  ?:[\\/]os2[\\/]install[\\/]* | ?:[\\/]OS2[\\/]INSTALL[\\/]* | \
-  /usr/ucb/* ) ;;
-  *)
-    # OSF1 and SCO ODT 3.0 have their own names for install.
-    # Don't use installbsd from OSF since it installs stuff as root
-    # by default.
-    for ac_prog in ginstall scoinst install; do
-      for ac_exec_ext in '' $ac_executable_extensions; do
-	if as_fn_executable_p "$as_dir/$ac_prog$ac_exec_ext"; then
-	  if test $ac_prog = install &&
-	    grep dspmsg "$as_dir/$ac_prog$ac_exec_ext" >/dev/null 2>&1; then
-	    # AIX install.  It has an incompatible calling convention.
-	    :
-	  elif test $ac_prog = install &&
-	    grep pwplus "$as_dir/$ac_prog$ac_exec_ext" >/dev/null 2>&1; then
-	    # program-specific install script used by HP pwplus--don't use.
-	    :
-	  else
-	    rm -rf conftest.one conftest.two conftest.dir
-	    echo one > conftest.one
-	    echo two > conftest.two
-	    mkdir conftest.dir
-	    if "$as_dir/$ac_prog$ac_exec_ext" -c conftest.one conftest.two "`pwd`/conftest.dir" &&
-	      test -s conftest.one && test -s conftest.two &&
-	      test -s conftest.dir/conftest.one &&
-	      test -s conftest.dir/conftest.two
-	    then
-	      ac_cv_path_install="$as_dir/$ac_prog$ac_exec_ext -c"
-	      break 3
-	    fi
-	  fi
-	fi
-      done
-    done
-    ;;
-esac
-
-  done
-IFS=$as_save_IFS
-
-rm -rf conftest.one conftest.two conftest.dir
-
-fi
-  if test "${ac_cv_path_install+set}" = set; then
-    INSTALL=$ac_cv_path_install
-  else
-    # As a last resort, use the slow shell script.  Don't cache a
-    # value for INSTALL within a source directory, because that will
-    # break other packages using the cache if that directory is
-    # removed, or if the value is a relative name.
-    INSTALL=$ac_install_sh
-  fi
-fi
-{ $as_echo "$as_me:${as_lineno-$LINENO}: result: $INSTALL" >&5
-$as_echo "$INSTALL" >&6; }
-
-# Use test -z because SunOS4 sh mishandles braces in ${var-val}.
-# It thinks the first close brace ends the variable substitution.
-test -z "$INSTALL_PROGRAM" && INSTALL_PROGRAM='${INSTALL}'
-
-test -z "$INSTALL_SCRIPT" && INSTALL_SCRIPT='${INSTALL}'
-
-test -z "$INSTALL_DATA" && INSTALL_DATA='${INSTALL} -m 644'
-
-{ $as_echo "$as_me:${as_lineno-$LINENO}: checking whether ln -s works" >&5
-$as_echo_n "checking whether ln -s works... " >&6; }
-LN_S=$as_ln_s
-if test "$LN_S" = "ln -s"; then
-  { $as_echo "$as_me:${as_lineno-$LINENO}: result: yes" >&5
-$as_echo "yes" >&6; }
-else
-  { $as_echo "$as_me:${as_lineno-$LINENO}: result: no, using $LN_S" >&5
-$as_echo "no, using $LN_S" >&6; }
-fi
-
-
-# use a dummy substitution if no csh hack is necessary to avoid errors
-# with non-GNU sed programs
-{ $as_echo "$as_me:${as_lineno-$LINENO}: checking for csh hash hack" >&5
-$as_echo_n "checking for csh hash hack... " >&6; }
-
-cat <<EOF >conftest.sh
-#! /bin/sh
-true || exit 0
-export PATH || exit 0
-exit 1
-EOF
-
-   chmod +x conftest.sh
-   if echo ./conftest.sh | (csh >/dev/null 2>&1) >/dev/null 2>&1; then
-     { $as_echo "$as_me:${as_lineno-$LINENO}: result: yes" >&5
-$as_echo "yes" >&6; }
-     SH_SCRIPT_SED_CMD='1s/.*/:/'
-   else
-     { $as_echo "$as_me:${as_lineno-$LINENO}: result: no" >&5
-$as_echo "no" >&6; }
-     SH_SCRIPT_SED_CMD='1s/a/a/'
-   fi
-   rm -f conftest.sh
-
-
-# checks for headers
-for ac_header in stddef.h stdlib.h unistd.h dirent.h limits.h sys/dir.h \
-                  string.h strings.h math.h sys/time.h direct.h process.h
-do :
-  as_ac_Header=`$as_echo "ac_cv_header_$ac_header" | $as_tr_sh`
-ac_fn_c_check_header_mongrel "$LINENO" "$ac_header" "$as_ac_Header" "$ac_includes_default"
-if eval test \"x\$"$as_ac_Header"\" = x"yes"; then :
-  cat >>confdefs.h <<_ACEOF
-#define `$as_echo "HAVE_$ac_header" | $as_tr_cpp` 1
-_ACEOF
-
-fi
-
-done
-
-{ $as_echo "$as_me:${as_lineno-$LINENO}: checking for ISC 3.x or 4.x" >&5
-$as_echo_n "checking for ISC 3.x or 4.x... " >&6; }
-   if grep '[34]\.' /usr/options/cb.name >/dev/null 2>&1
-   then
-     { $as_echo "$as_me:${as_lineno-$LINENO}: result: yes" >&5
-$as_echo "yes" >&6; }
-
-$as_echo "#define _SYSV3 1" >>confdefs.h
-
-   else
-     { $as_echo "$as_me:${as_lineno-$LINENO}: result: no" >&5
-$as_echo "no" >&6; }
-   fi
-{ $as_echo "$as_me:${as_lineno-$LINENO}: checking whether -D_POSIX_SOURCE is necessary" >&5
-$as_echo_n "checking whether -D_POSIX_SOURCE is necessary... " >&6; }
-   ac_ext=cpp
-ac_cpp='$CXXCPP $CPPFLAGS'
-ac_compile='$CXX -c $CXXFLAGS $CPPFLAGS conftest.$ac_ext >&5'
-ac_link='$CXX -o conftest$ac_exeext $CXXFLAGS $CPPFLAGS $LDFLAGS conftest.$ac_ext $LIBS >&5'
-ac_compiler_gnu=$ac_cv_cxx_compiler_gnu
-
-   cat confdefs.h - <<_ACEOF >conftest.$ac_ext
-/* end confdefs.h.  */
-
-
-
-#include <stdio.h>
-extern "C" { void fileno(int); }
-
-
-int
-main ()
-{
-
-  ;
-  return 0;
-}
-
-_ACEOF
-if ac_fn_cxx_try_compile "$LINENO"; then :
-  { $as_echo "$as_me:${as_lineno-$LINENO}: result: yes" >&5
-$as_echo "yes" >&6; }
-
-$as_echo "#define _POSIX_SOURCE 1" >>confdefs.h
-
-else
-  { $as_echo "$as_me:${as_lineno-$LINENO}: result: no" >&5
-$as_echo "no" >&6; }
-fi
-rm -f core conftest.err conftest.$ac_objext conftest.$ac_ext
-   ac_ext=c
-ac_cpp='$CPP $CPPFLAGS'
-ac_compile='$CC -c $CFLAGS $CPPFLAGS conftest.$ac_ext >&5'
-ac_link='$CC -o conftest$ac_exeext $CFLAGS $CPPFLAGS $LDFLAGS conftest.$ac_ext $LIBS >&5'
-ac_compiler_gnu=$ac_cv_c_compiler_gnu
-
-
-# checks for header stuff
-ac_ext=cpp
-ac_cpp='$CXXCPP $CPPFLAGS'
-ac_compile='$CXX -c $CXXFLAGS $CPPFLAGS conftest.$ac_ext >&5'
-ac_link='$CXX -o conftest$ac_exeext $CXXFLAGS $CPPFLAGS $LDFLAGS conftest.$ac_ext $LIBS >&5'
-ac_compiler_gnu=$ac_cv_cxx_compiler_gnu
-
-   { $as_echo "$as_me:${as_lineno-$LINENO}: checking for return type of srand" >&5
-$as_echo_n "checking for return type of srand... " >&6; }
-   cat confdefs.h - <<_ACEOF >conftest.$ac_ext
-/* end confdefs.h.  */
-
-
-
-#include <stdlib.h>
-extern "C" { void srand(unsigned int); }
-
-
-int
-main ()
-{
-
-  ;
-  return 0;
-}
-
-_ACEOF
-if ac_fn_cxx_try_compile "$LINENO"; then :
-  { $as_echo "$as_me:${as_lineno-$LINENO}: result: void" >&5
-$as_echo "void" >&6; }
-
-$as_echo "#define RET_TYPE_SRAND_IS_VOID 1" >>confdefs.h
-
-else
-  { $as_echo "$as_me:${as_lineno-$LINENO}: result: int" >&5
-$as_echo "int" >&6; }
-fi
-rm -f core conftest.err conftest.$ac_objext conftest.$ac_ext
-   ac_ext=c
-ac_cpp='$CPP $CPPFLAGS'
-ac_compile='$CC -c $CFLAGS $CPPFLAGS conftest.$ac_ext >&5'
-ac_link='$CC -o conftest$ac_exeext $CFLAGS $CPPFLAGS $LDFLAGS conftest.$ac_ext $LIBS >&5'
-ac_compiler_gnu=$ac_cv_c_compiler_gnu
-
-{ $as_echo "$as_me:${as_lineno-$LINENO}: checking whether gettimeofday must be declared" >&5
-$as_echo_n "checking whether gettimeofday must be declared... " >&6; }
-   ac_ext=cpp
-ac_cpp='$CXXCPP $CPPFLAGS'
-ac_compile='$CXX -c $CXXFLAGS $CPPFLAGS conftest.$ac_ext >&5'
-ac_link='$CXX -o conftest$ac_exeext $CXXFLAGS $CPPFLAGS $LDFLAGS conftest.$ac_ext $LIBS >&5'
-ac_compiler_gnu=$ac_cv_cxx_compiler_gnu
-
-   if ${groff_cv_decl_needed_gettimeofday+:} false; then :
-  $as_echo_n "(cached) " >&6
-else
-  cat confdefs.h - <<_ACEOF >conftest.$ac_ext
-/* end confdefs.h.  */
-
-
-
-#include <stdio.h>
-#ifdef HAVE_STRING_H
-#include <string.h>
-#endif
-#ifdef HAVE_STRINGS_H
-#include <strings.h>
-#endif
-#ifdef HAVE_STDLIB_H
-#include <stdlib.h>
-#endif
-#ifdef HAVE_SYS_TIME_H
-#include <sys/time.h>
-#endif
-#ifdef HAVE_UNISTD_H
-#include <unistd.h>
-#endif
-#ifdef HAVE_MATH_H
-#include <math.h>
-#endif
-
-
-int
-main ()
-{
-
-
-#ifndef gettimeofday
-  char *p = (char *) gettimeofday;
-#endif
-
-
-  ;
-  return 0;
-}
-
-_ACEOF
-if ac_fn_cxx_try_compile "$LINENO"; then :
-  groff_cv_decl_needed_gettimeofday=no
-else
-  groff_cv_decl_needed_gettimeofday=yes
-fi
-rm -f core conftest.err conftest.$ac_objext conftest.$ac_ext
-fi
-
-   { $as_echo "$as_me:${as_lineno-$LINENO}: result: $groff_cv_decl_needed_gettimeofday" >&5
-$as_echo "$groff_cv_decl_needed_gettimeofday" >&6; }
-   if test $groff_cv_decl_needed_gettimeofday = yes; then
-
-$as_echo "#define NEED_DECLARATION_GETTIMEOFDAY 1" >>confdefs.h
-
-   fi
-   ac_ext=c
-ac_cpp='$CPP $CPPFLAGS'
-ac_compile='$CC -c $CFLAGS $CPPFLAGS conftest.$ac_ext >&5'
-ac_link='$CC -o conftest$ac_exeext $CFLAGS $CPPFLAGS $LDFLAGS conftest.$ac_ext $LIBS >&5'
-ac_compiler_gnu=$ac_cv_c_compiler_gnu
-
-{ $as_echo "$as_me:${as_lineno-$LINENO}: checking whether hypot must be declared" >&5
-$as_echo_n "checking whether hypot must be declared... " >&6; }
-   ac_ext=cpp
-ac_cpp='$CXXCPP $CPPFLAGS'
-ac_compile='$CXX -c $CXXFLAGS $CPPFLAGS conftest.$ac_ext >&5'
-ac_link='$CXX -o conftest$ac_exeext $CXXFLAGS $CPPFLAGS $LDFLAGS conftest.$ac_ext $LIBS >&5'
-ac_compiler_gnu=$ac_cv_cxx_compiler_gnu
-
-   if ${groff_cv_decl_needed_hypot+:} false; then :
-  $as_echo_n "(cached) " >&6
-else
-  cat confdefs.h - <<_ACEOF >conftest.$ac_ext
-/* end confdefs.h.  */
-
-
-
-#include <stdio.h>
-#ifdef HAVE_STRING_H
-#include <string.h>
-#endif
-#ifdef HAVE_STRINGS_H
-#include <strings.h>
-#endif
-#ifdef HAVE_STDLIB_H
-#include <stdlib.h>
-#endif
-#ifdef HAVE_SYS_TIME_H
-#include <sys/time.h>
-#endif
-#ifdef HAVE_UNISTD_H
-#include <unistd.h>
-#endif
-#ifdef HAVE_MATH_H
-#include <math.h>
-#endif
-
-
-int
-main ()
-{
-
-
-#ifndef hypot
-  char *p = (char *) hypot;
-#endif
-
-
-  ;
-  return 0;
-}
-
-_ACEOF
-if ac_fn_cxx_try_compile "$LINENO"; then :
-  groff_cv_decl_needed_hypot=no
-else
-  groff_cv_decl_needed_hypot=yes
-fi
-rm -f core conftest.err conftest.$ac_objext conftest.$ac_ext
-fi
-
-   { $as_echo "$as_me:${as_lineno-$LINENO}: result: $groff_cv_decl_needed_hypot" >&5
-$as_echo "$groff_cv_decl_needed_hypot" >&6; }
-   if test $groff_cv_decl_needed_hypot = yes; then
-
-$as_echo "#define NEED_DECLARATION_HYPOT 1" >>confdefs.h
-
-   fi
-   ac_ext=c
-ac_cpp='$CPP $CPPFLAGS'
-ac_compile='$CC -c $CFLAGS $CPPFLAGS conftest.$ac_ext >&5'
-ac_link='$CC -o conftest$ac_exeext $CFLAGS $CPPFLAGS $LDFLAGS conftest.$ac_ext $LIBS >&5'
-ac_compiler_gnu=$ac_cv_c_compiler_gnu
-
-{ $as_echo "$as_me:${as_lineno-$LINENO}: checking whether popen must be declared" >&5
-$as_echo_n "checking whether popen must be declared... " >&6; }
-   ac_ext=cpp
-ac_cpp='$CXXCPP $CPPFLAGS'
-ac_compile='$CXX -c $CXXFLAGS $CPPFLAGS conftest.$ac_ext >&5'
-ac_link='$CXX -o conftest$ac_exeext $CXXFLAGS $CPPFLAGS $LDFLAGS conftest.$ac_ext $LIBS >&5'
-ac_compiler_gnu=$ac_cv_cxx_compiler_gnu
-
-   if ${groff_cv_decl_needed_popen+:} false; then :
-  $as_echo_n "(cached) " >&6
-else
-  cat confdefs.h - <<_ACEOF >conftest.$ac_ext
-/* end confdefs.h.  */
-
-
-
-#include <stdio.h>
-#ifdef HAVE_STRING_H
-#include <string.h>
-#endif
-#ifdef HAVE_STRINGS_H
-#include <strings.h>
-#endif
-#ifdef HAVE_STDLIB_H
-#include <stdlib.h>
-#endif
-#ifdef HAVE_SYS_TIME_H
-#include <sys/time.h>
-#endif
-#ifdef HAVE_UNISTD_H
-#include <unistd.h>
-#endif
-#ifdef HAVE_MATH_H
-#include <math.h>
-#endif
-
-
-int
-main ()
-{
-
-
-#ifndef popen
-  char *p = (char *) popen;
-#endif
-
-
-  ;
-  return 0;
-}
-
-_ACEOF
-if ac_fn_cxx_try_compile "$LINENO"; then :
-  groff_cv_decl_needed_popen=no
-else
-  groff_cv_decl_needed_popen=yes
-fi
-rm -f core conftest.err conftest.$ac_objext conftest.$ac_ext
-fi
-
-   { $as_echo "$as_me:${as_lineno-$LINENO}: result: $groff_cv_decl_needed_popen" >&5
-$as_echo "$groff_cv_decl_needed_popen" >&6; }
-   if test $groff_cv_decl_needed_popen = yes; then
-
-$as_echo "#define NEED_DECLARATION_POPEN 1" >>confdefs.h
-
-   fi
-   ac_ext=c
-ac_cpp='$CPP $CPPFLAGS'
-ac_compile='$CC -c $CFLAGS $CPPFLAGS conftest.$ac_ext >&5'
-ac_link='$CC -o conftest$ac_exeext $CFLAGS $CPPFLAGS $LDFLAGS conftest.$ac_ext $LIBS >&5'
-ac_compiler_gnu=$ac_cv_c_compiler_gnu
-
-{ $as_echo "$as_me:${as_lineno-$LINENO}: checking whether pclose must be declared" >&5
-$as_echo_n "checking whether pclose must be declared... " >&6; }
-   ac_ext=cpp
-ac_cpp='$CXXCPP $CPPFLAGS'
-ac_compile='$CXX -c $CXXFLAGS $CPPFLAGS conftest.$ac_ext >&5'
-ac_link='$CXX -o conftest$ac_exeext $CXXFLAGS $CPPFLAGS $LDFLAGS conftest.$ac_ext $LIBS >&5'
-ac_compiler_gnu=$ac_cv_cxx_compiler_gnu
-
-   if ${groff_cv_decl_needed_pclose+:} false; then :
-  $as_echo_n "(cached) " >&6
-else
-  cat confdefs.h - <<_ACEOF >conftest.$ac_ext
-/* end confdefs.h.  */
-
-
-
-#include <stdio.h>
-#ifdef HAVE_STRING_H
-#include <string.h>
-#endif
-#ifdef HAVE_STRINGS_H
-#include <strings.h>
-#endif
-#ifdef HAVE_STDLIB_H
-#include <stdlib.h>
-#endif
-#ifdef HAVE_SYS_TIME_H
-#include <sys/time.h>
-#endif
-#ifdef HAVE_UNISTD_H
-#include <unistd.h>
-#endif
-#ifdef HAVE_MATH_H
-#include <math.h>
-#endif
-
-
-int
-main ()
-{
-
-
-#ifndef pclose
-  char *p = (char *) pclose;
-#endif
-
-
-  ;
-  return 0;
-}
-
-_ACEOF
-if ac_fn_cxx_try_compile "$LINENO"; then :
-  groff_cv_decl_needed_pclose=no
-else
-  groff_cv_decl_needed_pclose=yes
-fi
-rm -f core conftest.err conftest.$ac_objext conftest.$ac_ext
-fi
-
-   { $as_echo "$as_me:${as_lineno-$LINENO}: result: $groff_cv_decl_needed_pclose" >&5
-$as_echo "$groff_cv_decl_needed_pclose" >&6; }
-   if test $groff_cv_decl_needed_pclose = yes; then
-
-$as_echo "#define NEED_DECLARATION_PCLOSE 1" >>confdefs.h
-
-   fi
-   ac_ext=c
-ac_cpp='$CPP $CPPFLAGS'
-ac_compile='$CC -c $CFLAGS $CPPFLAGS conftest.$ac_ext >&5'
-ac_link='$CC -o conftest$ac_exeext $CFLAGS $CPPFLAGS $LDFLAGS conftest.$ac_ext $LIBS >&5'
-ac_compiler_gnu=$ac_cv_c_compiler_gnu
-
-{ $as_echo "$as_me:${as_lineno-$LINENO}: checking whether putenv must be declared" >&5
-$as_echo_n "checking whether putenv must be declared... " >&6; }
-   ac_ext=cpp
-ac_cpp='$CXXCPP $CPPFLAGS'
-ac_compile='$CXX -c $CXXFLAGS $CPPFLAGS conftest.$ac_ext >&5'
-ac_link='$CXX -o conftest$ac_exeext $CXXFLAGS $CPPFLAGS $LDFLAGS conftest.$ac_ext $LIBS >&5'
-ac_compiler_gnu=$ac_cv_cxx_compiler_gnu
-
-   if ${groff_cv_decl_needed_putenv+:} false; then :
-  $as_echo_n "(cached) " >&6
-else
-  cat confdefs.h - <<_ACEOF >conftest.$ac_ext
-/* end confdefs.h.  */
-
-
-
-#include <stdio.h>
-#ifdef HAVE_STRING_H
-#include <string.h>
-#endif
-#ifdef HAVE_STRINGS_H
-#include <strings.h>
-#endif
-#ifdef HAVE_STDLIB_H
-#include <stdlib.h>
-#endif
-#ifdef HAVE_SYS_TIME_H
-#include <sys/time.h>
-#endif
-#ifdef HAVE_UNISTD_H
-#include <unistd.h>
-#endif
-#ifdef HAVE_MATH_H
-#include <math.h>
-#endif
-
-
-int
-main ()
-{
-
-
-#ifndef putenv
-  char *p = (char *) putenv;
-#endif
-
-
-  ;
-  return 0;
-}
-
-_ACEOF
-if ac_fn_cxx_try_compile "$LINENO"; then :
-  groff_cv_decl_needed_putenv=no
-else
-  groff_cv_decl_needed_putenv=yes
-fi
-rm -f core conftest.err conftest.$ac_objext conftest.$ac_ext
-fi
-
-   { $as_echo "$as_me:${as_lineno-$LINENO}: result: $groff_cv_decl_needed_putenv" >&5
-$as_echo "$groff_cv_decl_needed_putenv" >&6; }
-   if test $groff_cv_decl_needed_putenv = yes; then
-
-$as_echo "#define NEED_DECLARATION_PUTENV 1" >>confdefs.h
-
-   fi
-   ac_ext=c
-ac_cpp='$CPP $CPPFLAGS'
-ac_compile='$CC -c $CFLAGS $CPPFLAGS conftest.$ac_ext >&5'
-ac_link='$CC -o conftest$ac_exeext $CFLAGS $CPPFLAGS $LDFLAGS conftest.$ac_ext $LIBS >&5'
-ac_compiler_gnu=$ac_cv_c_compiler_gnu
-
-{ $as_echo "$as_me:${as_lineno-$LINENO}: checking whether rand must be declared" >&5
-$as_echo_n "checking whether rand must be declared... " >&6; }
-   ac_ext=cpp
-ac_cpp='$CXXCPP $CPPFLAGS'
-ac_compile='$CXX -c $CXXFLAGS $CPPFLAGS conftest.$ac_ext >&5'
-ac_link='$CXX -o conftest$ac_exeext $CXXFLAGS $CPPFLAGS $LDFLAGS conftest.$ac_ext $LIBS >&5'
-ac_compiler_gnu=$ac_cv_cxx_compiler_gnu
-
-   if ${groff_cv_decl_needed_rand+:} false; then :
-  $as_echo_n "(cached) " >&6
-else
-  cat confdefs.h - <<_ACEOF >conftest.$ac_ext
-/* end confdefs.h.  */
-
-
-
-#include <stdio.h>
-#ifdef HAVE_STRING_H
-#include <string.h>
-#endif
-#ifdef HAVE_STRINGS_H
-#include <strings.h>
-#endif
-#ifdef HAVE_STDLIB_H
-#include <stdlib.h>
-#endif
-#ifdef HAVE_SYS_TIME_H
-#include <sys/time.h>
-#endif
-#ifdef HAVE_UNISTD_H
-#include <unistd.h>
-#endif
-#ifdef HAVE_MATH_H
-#include <math.h>
-#endif
-
-
-int
-main ()
-{
-
-
-#ifndef rand
-  char *p = (char *) rand;
-#endif
-
-
-  ;
-  return 0;
-}
-
-_ACEOF
-if ac_fn_cxx_try_compile "$LINENO"; then :
-  groff_cv_decl_needed_rand=no
-else
-  groff_cv_decl_needed_rand=yes
-fi
-rm -f core conftest.err conftest.$ac_objext conftest.$ac_ext
-fi
-
-   { $as_echo "$as_me:${as_lineno-$LINENO}: result: $groff_cv_decl_needed_rand" >&5
-$as_echo "$groff_cv_decl_needed_rand" >&6; }
-   if test $groff_cv_decl_needed_rand = yes; then
-
-$as_echo "#define NEED_DECLARATION_RAND 1" >>confdefs.h
-
-   fi
-   ac_ext=c
-ac_cpp='$CPP $CPPFLAGS'
-ac_compile='$CC -c $CFLAGS $CPPFLAGS conftest.$ac_ext >&5'
-ac_link='$CC -o conftest$ac_exeext $CFLAGS $CPPFLAGS $LDFLAGS conftest.$ac_ext $LIBS >&5'
-ac_compiler_gnu=$ac_cv_c_compiler_gnu
-
-{ $as_echo "$as_me:${as_lineno-$LINENO}: checking whether snprintf must be declared" >&5
-$as_echo_n "checking whether snprintf must be declared... " >&6; }
-   ac_ext=cpp
-ac_cpp='$CXXCPP $CPPFLAGS'
-ac_compile='$CXX -c $CXXFLAGS $CPPFLAGS conftest.$ac_ext >&5'
-ac_link='$CXX -o conftest$ac_exeext $CXXFLAGS $CPPFLAGS $LDFLAGS conftest.$ac_ext $LIBS >&5'
-ac_compiler_gnu=$ac_cv_cxx_compiler_gnu
-
-   if ${groff_cv_decl_needed_snprintf+:} false; then :
-  $as_echo_n "(cached) " >&6
-else
-  cat confdefs.h - <<_ACEOF >conftest.$ac_ext
-/* end confdefs.h.  */
-
-
-
-#include <stdio.h>
-#ifdef HAVE_STRING_H
-#include <string.h>
-#endif
-#ifdef HAVE_STRINGS_H
-#include <strings.h>
-#endif
-#ifdef HAVE_STDLIB_H
-#include <stdlib.h>
-#endif
-#ifdef HAVE_SYS_TIME_H
-#include <sys/time.h>
-#endif
-#ifdef HAVE_UNISTD_H
-#include <unistd.h>
-#endif
-#ifdef HAVE_MATH_H
-#include <math.h>
-#endif
-
-
-int
-main ()
-{
-
-
-#ifndef snprintf
-  char *p = (char *) snprintf;
-#endif
-
-
-  ;
-  return 0;
-}
-
-_ACEOF
-if ac_fn_cxx_try_compile "$LINENO"; then :
-  groff_cv_decl_needed_snprintf=no
-else
-  groff_cv_decl_needed_snprintf=yes
-fi
-rm -f core conftest.err conftest.$ac_objext conftest.$ac_ext
-fi
-
-   { $as_echo "$as_me:${as_lineno-$LINENO}: result: $groff_cv_decl_needed_snprintf" >&5
-$as_echo "$groff_cv_decl_needed_snprintf" >&6; }
-   if test $groff_cv_decl_needed_snprintf = yes; then
-
-$as_echo "#define NEED_DECLARATION_SNPRINTF 1" >>confdefs.h
-
-   fi
-   ac_ext=c
-ac_cpp='$CPP $CPPFLAGS'
-ac_compile='$CC -c $CFLAGS $CPPFLAGS conftest.$ac_ext >&5'
-ac_link='$CC -o conftest$ac_exeext $CFLAGS $CPPFLAGS $LDFLAGS conftest.$ac_ext $LIBS >&5'
-ac_compiler_gnu=$ac_cv_c_compiler_gnu
-
-{ $as_echo "$as_me:${as_lineno-$LINENO}: checking whether srand must be declared" >&5
-$as_echo_n "checking whether srand must be declared... " >&6; }
-   ac_ext=cpp
-ac_cpp='$CXXCPP $CPPFLAGS'
-ac_compile='$CXX -c $CXXFLAGS $CPPFLAGS conftest.$ac_ext >&5'
-ac_link='$CXX -o conftest$ac_exeext $CXXFLAGS $CPPFLAGS $LDFLAGS conftest.$ac_ext $LIBS >&5'
-ac_compiler_gnu=$ac_cv_cxx_compiler_gnu
-
-   if ${groff_cv_decl_needed_srand+:} false; then :
-  $as_echo_n "(cached) " >&6
-else
-  cat confdefs.h - <<_ACEOF >conftest.$ac_ext
-/* end confdefs.h.  */
-
-
-
-#include <stdio.h>
-#ifdef HAVE_STRING_H
-#include <string.h>
-#endif
-#ifdef HAVE_STRINGS_H
-#include <strings.h>
-#endif
-#ifdef HAVE_STDLIB_H
-#include <stdlib.h>
-#endif
-#ifdef HAVE_SYS_TIME_H
-#include <sys/time.h>
-#endif
-#ifdef HAVE_UNISTD_H
-#include <unistd.h>
-#endif
-#ifdef HAVE_MATH_H
-#include <math.h>
-#endif
-
-
-int
-main ()
-{
-
-
-#ifndef srand
-  char *p = (char *) srand;
-#endif
-
-
-  ;
-  return 0;
-}
-
-_ACEOF
-if ac_fn_cxx_try_compile "$LINENO"; then :
-  groff_cv_decl_needed_srand=no
-else
-  groff_cv_decl_needed_srand=yes
-fi
-rm -f core conftest.err conftest.$ac_objext conftest.$ac_ext
-fi
-
-   { $as_echo "$as_me:${as_lineno-$LINENO}: result: $groff_cv_decl_needed_srand" >&5
-$as_echo "$groff_cv_decl_needed_srand" >&6; }
-   if test $groff_cv_decl_needed_srand = yes; then
-
-$as_echo "#define NEED_DECLARATION_SRAND 1" >>confdefs.h
-
-   fi
-   ac_ext=c
-ac_cpp='$CPP $CPPFLAGS'
-ac_compile='$CC -c $CFLAGS $CPPFLAGS conftest.$ac_ext >&5'
-ac_link='$CC -o conftest$ac_exeext $CFLAGS $CPPFLAGS $LDFLAGS conftest.$ac_ext $LIBS >&5'
-ac_compiler_gnu=$ac_cv_c_compiler_gnu
-
-{ $as_echo "$as_me:${as_lineno-$LINENO}: checking whether strcasecmp must be declared" >&5
-$as_echo_n "checking whether strcasecmp must be declared... " >&6; }
-   ac_ext=cpp
-ac_cpp='$CXXCPP $CPPFLAGS'
-ac_compile='$CXX -c $CXXFLAGS $CPPFLAGS conftest.$ac_ext >&5'
-ac_link='$CXX -o conftest$ac_exeext $CXXFLAGS $CPPFLAGS $LDFLAGS conftest.$ac_ext $LIBS >&5'
-ac_compiler_gnu=$ac_cv_cxx_compiler_gnu
-
-   if ${groff_cv_decl_needed_strcasecmp+:} false; then :
-  $as_echo_n "(cached) " >&6
-else
-  cat confdefs.h - <<_ACEOF >conftest.$ac_ext
-/* end confdefs.h.  */
-
-
-
-#include <stdio.h>
-#ifdef HAVE_STRING_H
-#include <string.h>
-#endif
-#ifdef HAVE_STRINGS_H
-#include <strings.h>
-#endif
-#ifdef HAVE_STDLIB_H
-#include <stdlib.h>
-#endif
-#ifdef HAVE_SYS_TIME_H
-#include <sys/time.h>
-#endif
-#ifdef HAVE_UNISTD_H
-#include <unistd.h>
-#endif
-#ifdef HAVE_MATH_H
-#include <math.h>
-#endif
-
-
-int
-main ()
-{
-
-
-#ifndef strcasecmp
-  char *p = (char *) strcasecmp;
-#endif
-
-
-  ;
-  return 0;
-}
-
-_ACEOF
-if ac_fn_cxx_try_compile "$LINENO"; then :
-  groff_cv_decl_needed_strcasecmp=no
-else
-  groff_cv_decl_needed_strcasecmp=yes
-fi
-rm -f core conftest.err conftest.$ac_objext conftest.$ac_ext
-fi
-
-   { $as_echo "$as_me:${as_lineno-$LINENO}: result: $groff_cv_decl_needed_strcasecmp" >&5
-$as_echo "$groff_cv_decl_needed_strcasecmp" >&6; }
-   if test $groff_cv_decl_needed_strcasecmp = yes; then
-
-$as_echo "#define NEED_DECLARATION_STRCASECMP 1" >>confdefs.h
-
-   fi
-   ac_ext=c
-ac_cpp='$CPP $CPPFLAGS'
-ac_compile='$CC -c $CFLAGS $CPPFLAGS conftest.$ac_ext >&5'
-ac_link='$CC -o conftest$ac_exeext $CFLAGS $CPPFLAGS $LDFLAGS conftest.$ac_ext $LIBS >&5'
-ac_compiler_gnu=$ac_cv_c_compiler_gnu
-
-{ $as_echo "$as_me:${as_lineno-$LINENO}: checking whether strncasecmp must be declared" >&5
-$as_echo_n "checking whether strncasecmp must be declared... " >&6; }
-   ac_ext=cpp
-ac_cpp='$CXXCPP $CPPFLAGS'
-ac_compile='$CXX -c $CXXFLAGS $CPPFLAGS conftest.$ac_ext >&5'
-ac_link='$CXX -o conftest$ac_exeext $CXXFLAGS $CPPFLAGS $LDFLAGS conftest.$ac_ext $LIBS >&5'
-ac_compiler_gnu=$ac_cv_cxx_compiler_gnu
-
-   if ${groff_cv_decl_needed_strncasecmp+:} false; then :
-  $as_echo_n "(cached) " >&6
-else
-  cat confdefs.h - <<_ACEOF >conftest.$ac_ext
-/* end confdefs.h.  */
-
-
-
-#include <stdio.h>
-#ifdef HAVE_STRING_H
-#include <string.h>
-#endif
-#ifdef HAVE_STRINGS_H
-#include <strings.h>
-#endif
-#ifdef HAVE_STDLIB_H
-#include <stdlib.h>
-#endif
-#ifdef HAVE_SYS_TIME_H
-#include <sys/time.h>
-#endif
-#ifdef HAVE_UNISTD_H
-#include <unistd.h>
-#endif
-#ifdef HAVE_MATH_H
-#include <math.h>
-#endif
-
-
-int
-main ()
-{
-
-
-#ifndef strncasecmp
-  char *p = (char *) strncasecmp;
-#endif
-
-
-  ;
-  return 0;
-}
-
-_ACEOF
-if ac_fn_cxx_try_compile "$LINENO"; then :
-  groff_cv_decl_needed_strncasecmp=no
-else
-  groff_cv_decl_needed_strncasecmp=yes
-fi
-rm -f core conftest.err conftest.$ac_objext conftest.$ac_ext
-fi
-
-   { $as_echo "$as_me:${as_lineno-$LINENO}: result: $groff_cv_decl_needed_strncasecmp" >&5
-$as_echo "$groff_cv_decl_needed_strncasecmp" >&6; }
-   if test $groff_cv_decl_needed_strncasecmp = yes; then
-
-$as_echo "#define NEED_DECLARATION_STRNCASECMP 1" >>confdefs.h
-
-   fi
-   ac_ext=c
-ac_cpp='$CPP $CPPFLAGS'
-ac_compile='$CC -c $CFLAGS $CPPFLAGS conftest.$ac_ext >&5'
-ac_link='$CC -o conftest$ac_exeext $CFLAGS $CPPFLAGS $LDFLAGS conftest.$ac_ext $LIBS >&5'
-ac_compiler_gnu=$ac_cv_c_compiler_gnu
-
-{ $as_echo "$as_me:${as_lineno-$LINENO}: checking whether vfprintf must be declared" >&5
-$as_echo_n "checking whether vfprintf must be declared... " >&6; }
-   ac_ext=cpp
-ac_cpp='$CXXCPP $CPPFLAGS'
-ac_compile='$CXX -c $CXXFLAGS $CPPFLAGS conftest.$ac_ext >&5'
-ac_link='$CXX -o conftest$ac_exeext $CXXFLAGS $CPPFLAGS $LDFLAGS conftest.$ac_ext $LIBS >&5'
-ac_compiler_gnu=$ac_cv_cxx_compiler_gnu
-
-   if ${groff_cv_decl_needed_vfprintf+:} false; then :
-  $as_echo_n "(cached) " >&6
-else
-  cat confdefs.h - <<_ACEOF >conftest.$ac_ext
-/* end confdefs.h.  */
-
-
-
-#include <stdio.h>
-#ifdef HAVE_STRING_H
-#include <string.h>
-#endif
-#ifdef HAVE_STRINGS_H
-#include <strings.h>
-#endif
-#ifdef HAVE_STDLIB_H
-#include <stdlib.h>
-#endif
-#ifdef HAVE_SYS_TIME_H
-#include <sys/time.h>
-#endif
-#ifdef HAVE_UNISTD_H
-#include <unistd.h>
-#endif
-#ifdef HAVE_MATH_H
-#include <math.h>
-#endif
-
-
-int
-main ()
-{
-
-
-#ifndef vfprintf
-  char *p = (char *) vfprintf;
-#endif
-
-
-  ;
-  return 0;
-}
-
-_ACEOF
-if ac_fn_cxx_try_compile "$LINENO"; then :
-  groff_cv_decl_needed_vfprintf=no
-else
-  groff_cv_decl_needed_vfprintf=yes
-fi
-rm -f core conftest.err conftest.$ac_objext conftest.$ac_ext
-fi
-
-   { $as_echo "$as_me:${as_lineno-$LINENO}: result: $groff_cv_decl_needed_vfprintf" >&5
-$as_echo "$groff_cv_decl_needed_vfprintf" >&6; }
-   if test $groff_cv_decl_needed_vfprintf = yes; then
-
-$as_echo "#define NEED_DECLARATION_VFPRINTF 1" >>confdefs.h
-
-   fi
-   ac_ext=c
-ac_cpp='$CPP $CPPFLAGS'
-ac_compile='$CC -c $CFLAGS $CPPFLAGS conftest.$ac_ext >&5'
-ac_link='$CC -o conftest$ac_exeext $CFLAGS $CPPFLAGS $LDFLAGS conftest.$ac_ext $LIBS >&5'
-ac_compiler_gnu=$ac_cv_c_compiler_gnu
-
-{ $as_echo "$as_me:${as_lineno-$LINENO}: checking whether vsnprintf must be declared" >&5
-$as_echo_n "checking whether vsnprintf must be declared... " >&6; }
-   ac_ext=cpp
-ac_cpp='$CXXCPP $CPPFLAGS'
-ac_compile='$CXX -c $CXXFLAGS $CPPFLAGS conftest.$ac_ext >&5'
-ac_link='$CXX -o conftest$ac_exeext $CXXFLAGS $CPPFLAGS $LDFLAGS conftest.$ac_ext $LIBS >&5'
-ac_compiler_gnu=$ac_cv_cxx_compiler_gnu
-
-   if ${groff_cv_decl_needed_vsnprintf+:} false; then :
-  $as_echo_n "(cached) " >&6
-else
-  cat confdefs.h - <<_ACEOF >conftest.$ac_ext
-/* end confdefs.h.  */
-
-
-
-#include <stdio.h>
-#ifdef HAVE_STRING_H
-#include <string.h>
-#endif
-#ifdef HAVE_STRINGS_H
-#include <strings.h>
-#endif
-#ifdef HAVE_STDLIB_H
-#include <stdlib.h>
-#endif
-#ifdef HAVE_SYS_TIME_H
-#include <sys/time.h>
-#endif
-#ifdef HAVE_UNISTD_H
-#include <unistd.h>
-#endif
-#ifdef HAVE_MATH_H
-#include <math.h>
-#endif
-
-
-int
-main ()
-{
-
-
-#ifndef vsnprintf
-  char *p = (char *) vsnprintf;
-#endif
-
-
-  ;
-  return 0;
-}
-
-_ACEOF
-if ac_fn_cxx_try_compile "$LINENO"; then :
-  groff_cv_decl_needed_vsnprintf=no
-else
-  groff_cv_decl_needed_vsnprintf=yes
-fi
-rm -f core conftest.err conftest.$ac_objext conftest.$ac_ext
-fi
-
-   { $as_echo "$as_me:${as_lineno-$LINENO}: result: $groff_cv_decl_needed_vsnprintf" >&5
-$as_echo "$groff_cv_decl_needed_vsnprintf" >&6; }
-   if test $groff_cv_decl_needed_vsnprintf = yes; then
-
-$as_echo "#define NEED_DECLARATION_VSNPRINTF 1" >>confdefs.h
-
-   fi
-   ac_ext=c
-ac_cpp='$CPP $CPPFLAGS'
-ac_compile='$CC -c $CFLAGS $CPPFLAGS conftest.$ac_ext >&5'
-ac_link='$CC -o conftest$ac_exeext $CFLAGS $CPPFLAGS $LDFLAGS conftest.$ac_ext $LIBS >&5'
-ac_compiler_gnu=$ac_cv_c_compiler_gnu
-
-ac_ext=cpp
-ac_cpp='$CXXCPP $CPPFLAGS'
-ac_compile='$CXX -c $CXXFLAGS $CPPFLAGS conftest.$ac_ext >&5'
-ac_link='$CXX -o conftest$ac_exeext $CXXFLAGS $CPPFLAGS $LDFLAGS conftest.$ac_ext $LIBS >&5'
-ac_compiler_gnu=$ac_cv_cxx_compiler_gnu
-
-   { $as_echo "$as_me:${as_lineno-$LINENO}: checking for sys_nerr in <errno.h>, <stdio.h>, or <stdlib.h>" >&5
-$as_echo_n "checking for sys_nerr in <errno.h>, <stdio.h>, or <stdlib.h>... " >&6; }
-   cat confdefs.h - <<_ACEOF >conftest.$ac_ext
-/* end confdefs.h.  */
-
-
-
-#include <errno.h>
-#include <stdio.h>
-#include <stdlib.h>
-
-
-int
-main ()
-{
-
-
-int k;
-k = sys_nerr;
-
-
-  ;
-  return 0;
-}
-
-_ACEOF
-if ac_fn_cxx_try_compile "$LINENO"; then :
-  { $as_echo "$as_me:${as_lineno-$LINENO}: result: yes" >&5
-$as_echo "yes" >&6; }
-
-$as_echo "#define HAVE_SYS_NERR 1" >>confdefs.h
-
-else
-  { $as_echo "$as_me:${as_lineno-$LINENO}: result: no" >&5
-$as_echo "no" >&6; }
-fi
-rm -f core conftest.err conftest.$ac_objext conftest.$ac_ext
-   ac_ext=c
-ac_cpp='$CPP $CPPFLAGS'
-ac_compile='$CC -c $CFLAGS $CPPFLAGS conftest.$ac_ext >&5'
-ac_link='$CC -o conftest$ac_exeext $CFLAGS $CPPFLAGS $LDFLAGS conftest.$ac_ext $LIBS >&5'
-ac_compiler_gnu=$ac_cv_c_compiler_gnu
-
-{ $as_echo "$as_me:${as_lineno-$LINENO}: checking for sys_errlist in <errno.h>, <stdio.h>, or <stdlib.h>" >&5
-$as_echo_n "checking for sys_errlist in <errno.h>, <stdio.h>, or <stdlib.h>... " >&6; }
-   cat confdefs.h - <<_ACEOF >conftest.$ac_ext
-/* end confdefs.h.  */
-
-
-
-#include <errno.h>
-#include <stdio.h>
-#include <stdlib.h>
-
-
-int
-main ()
-{
-
-
-int k;
-k = (int)sys_errlist[0];
-
-
-  ;
-  return 0;
-}
-
-_ACEOF
-if ac_fn_c_try_compile "$LINENO"; then :
-  { $as_echo "$as_me:${as_lineno-$LINENO}: result: yes" >&5
-$as_echo "yes" >&6; }
-
-$as_echo "#define HAVE_SYS_ERRLIST 1" >>confdefs.h
-
-else
-  { $as_echo "$as_me:${as_lineno-$LINENO}: result: no" >&5
-$as_echo "no" >&6; }
-fi
-rm -f core conftest.err conftest.$ac_objext conftest.$ac_ext
-ac_ext=cpp
-ac_cpp='$CXXCPP $CPPFLAGS'
-ac_compile='$CXX -c $CXXFLAGS $CPPFLAGS conftest.$ac_ext >&5'
-ac_link='$CXX -o conftest$ac_exeext $CXXFLAGS $CPPFLAGS $LDFLAGS conftest.$ac_ext $LIBS >&5'
-ac_compiler_gnu=$ac_cv_cxx_compiler_gnu
-
-   { $as_echo "$as_me:${as_lineno-$LINENO}: checking C++ <osfcn.h>" >&5
-$as_echo_n "checking C++ <osfcn.h>... " >&6; }
-   cat confdefs.h - <<_ACEOF >conftest.$ac_ext
-/* end confdefs.h.  */
-
-
-
-#include <osfcn.h>
-
-
-int
-main ()
-{
-
-
-read(0, 0, 0);
-open(0, 0);
-
-
-  ;
-  return 0;
-}
-
-_ACEOF
-if ac_fn_cxx_try_compile "$LINENO"; then :
-  { $as_echo "$as_me:${as_lineno-$LINENO}: result: yes" >&5
-$as_echo "yes" >&6; }
-
-$as_echo "#define HAVE_CC_OSFCN_H 1" >>confdefs.h
-
-else
-  { $as_echo "$as_me:${as_lineno-$LINENO}: result: no" >&5
-$as_echo "no" >&6; }
-fi
-rm -f core conftest.err conftest.$ac_objext conftest.$ac_ext
-   ac_ext=c
-ac_cpp='$CPP $CPPFLAGS'
-ac_compile='$CC -c $CFLAGS $CPPFLAGS conftest.$ac_ext >&5'
-ac_link='$CC -o conftest$ac_exeext $CFLAGS $CPPFLAGS $LDFLAGS conftest.$ac_ext $LIBS >&5'
-ac_compiler_gnu=$ac_cv_c_compiler_gnu
-
-ac_ext=cpp
-ac_cpp='$CXXCPP $CPPFLAGS'
-ac_compile='$CXX -c $CXXFLAGS $CPPFLAGS conftest.$ac_ext >&5'
-ac_link='$CXX -o conftest$ac_exeext $CXXFLAGS $CPPFLAGS $LDFLAGS conftest.$ac_ext $LIBS >&5'
-ac_compiler_gnu=$ac_cv_cxx_compiler_gnu
-
-   { $as_echo "$as_me:${as_lineno-$LINENO}: checking C++ <limits.h>" >&5
-$as_echo_n "checking C++ <limits.h>... " >&6; }
-   cat confdefs.h - <<_ACEOF >conftest.$ac_ext
-/* end confdefs.h.  */
-
-
-
-#include <limits.h>
-
-
-int
-main ()
-{
-
-
-int x = INT_MIN;
-int y = INT_MAX;
-int z = UCHAR_MAX;
-
-
-  ;
-  return 0;
-}
-
-_ACEOF
-if ac_fn_cxx_try_compile "$LINENO"; then :
-  { $as_echo "$as_me:${as_lineno-$LINENO}: result: yes" >&5
-$as_echo "yes" >&6; }
-
-$as_echo "#define HAVE_CC_LIMITS_H 1" >>confdefs.h
-
-else
-  { $as_echo "$as_me:${as_lineno-$LINENO}: result: no" >&5
-$as_echo "no" >&6; }
-fi
-rm -f core conftest.err conftest.$ac_objext conftest.$ac_ext
-   ac_ext=c
-ac_cpp='$CPP $CPPFLAGS'
-ac_compile='$CC -c $CFLAGS $CPPFLAGS conftest.$ac_ext >&5'
-ac_link='$CC -o conftest$ac_exeext $CFLAGS $CPPFLAGS $LDFLAGS conftest.$ac_ext $LIBS >&5'
-ac_compiler_gnu=$ac_cv_c_compiler_gnu
-
-ac_ext=cpp
-ac_cpp='$CXXCPP $CPPFLAGS'
-ac_compile='$CXX -c $CXXFLAGS $CPPFLAGS conftest.$ac_ext >&5'
-ac_link='$CXX -o conftest$ac_exeext $CXXFLAGS $CPPFLAGS $LDFLAGS conftest.$ac_ext $LIBS >&5'
-ac_compiler_gnu=$ac_cv_cxx_compiler_gnu
-
-   { $as_echo "$as_me:${as_lineno-$LINENO}: checking C++ <inttypes.h>" >&5
-$as_echo_n "checking C++ <inttypes.h>... " >&6; }
-   cat confdefs.h - <<_ACEOF >conftest.$ac_ext
-/* end confdefs.h.  */
-
-
-
-#include <sys/types.h>
-#include <inttypes.h>
-
-
-int
-main ()
-{
-
-
-uintmax_t i = (uintmax_t)-1;
-
-
-  ;
-  return 0;
-}
-
-_ACEOF
-if ac_fn_cxx_try_compile "$LINENO"; then :
-  groff_cv_header_inttypes_h=yes
-
-$as_echo "#define HAVE_CC_INTTYPES_H 1" >>confdefs.h
-
-else
-  groff_cv_header_inttypes_h=no
-fi
-rm -f core conftest.err conftest.$ac_objext conftest.$ac_ext
-   { $as_echo "$as_me:${as_lineno-$LINENO}: result: $groff_cv_header_inttypes_h" >&5
-$as_echo "$groff_cv_header_inttypes_h" >&6; }
-   ac_ext=c
-ac_cpp='$CPP $CPPFLAGS'
-ac_compile='$CC -c $CFLAGS $CPPFLAGS conftest.$ac_ext >&5'
-ac_link='$CC -o conftest$ac_exeext $CFLAGS $CPPFLAGS $LDFLAGS conftest.$ac_ext $LIBS >&5'
-ac_compiler_gnu=$ac_cv_c_compiler_gnu
-
-
-# checks for typedefs
-ac_ext=cpp
-ac_cpp='$CXXCPP $CPPFLAGS'
-ac_compile='$CXX -c $CXXFLAGS $CPPFLAGS conftest.$ac_ext >&5'
-ac_link='$CXX -o conftest$ac_exeext $CXXFLAGS $CPPFLAGS $LDFLAGS conftest.$ac_ext $LIBS >&5'
-ac_compiler_gnu=$ac_cv_cxx_compiler_gnu
-
-   { $as_echo "$as_me:${as_lineno-$LINENO}: checking for unsigned long long" >&5
-$as_echo_n "checking for unsigned long long... " >&6; }
-   cat confdefs.h - <<_ACEOF >conftest.$ac_ext
-/* end confdefs.h.  */
-
-
-
-unsigned long long ull = 1;
-int i = 63;
-unsigned long long ullmax = (unsigned long long)-1;
-
-
-int
-main ()
-{
-
-
-return ull << i | ull >> i | ullmax / ull | ullmax % ull;
-
-
-  ;
-  return 0;
-}
-
-_ACEOF
-if ac_fn_cxx_try_link "$LINENO"; then :
-  groff_cv_type_unsigned_long_long=yes
-else
-  groff_cv_type_unsigned_long_long=no
-fi
-rm -f core conftest.err conftest.$ac_objext \
-    conftest$ac_exeext conftest.$ac_ext
-   { $as_echo "$as_me:${as_lineno-$LINENO}: result: $groff_cv_type_unsigned_long_long" >&5
-$as_echo "$groff_cv_type_unsigned_long_long" >&6; }
-   ac_ext=c
-ac_cpp='$CPP $CPPFLAGS'
-ac_compile='$CC -c $CFLAGS $CPPFLAGS conftest.$ac_ext >&5'
-ac_link='$CC -o conftest$ac_exeext $CFLAGS $CPPFLAGS $LDFLAGS conftest.$ac_ext $LIBS >&5'
-ac_compiler_gnu=$ac_cv_c_compiler_gnu
-
-
-   if test $groff_cv_header_inttypes_h = no; then
-
-     test $groff_cv_type_unsigned_long_long = yes \
-	  && ac_type='unsigned long long' \
-	  || ac_type='unsigned long'
-
-cat >>confdefs.h <<_ACEOF
-#define uintmax_t $ac_type
-_ACEOF
-
-   fi
-ac_ext=cpp
-ac_cpp='$CXXCPP $CPPFLAGS'
-ac_compile='$CXX -c $CXXFLAGS $CPPFLAGS conftest.$ac_ext >&5'
-ac_link='$CXX -o conftest$ac_exeext $CXXFLAGS $CPPFLAGS $LDFLAGS conftest.$ac_ext $LIBS >&5'
-ac_compiler_gnu=$ac_cv_cxx_compiler_gnu
-
-   { $as_echo "$as_me:${as_lineno-$LINENO}: checking for declaration of time_t" >&5
-$as_echo_n "checking for declaration of time_t... " >&6; }
-   cat confdefs.h - <<_ACEOF >conftest.$ac_ext
-/* end confdefs.h.  */
-
-
-
-#include <time.h>
-
-
-int
-main ()
-{
-
-
-time_t t = time(0);
-struct tm *p = localtime(&t);
-
-
-  ;
-  return 0;
-}
-
-_ACEOF
-if ac_fn_cxx_try_compile "$LINENO"; then :
-  { $as_echo "$as_me:${as_lineno-$LINENO}: result: yes" >&5
-$as_echo "yes" >&6; }
-else
-  { $as_echo "$as_me:${as_lineno-$LINENO}: result: no" >&5
-$as_echo "no" >&6; }
-
-$as_echo "#define LONG_FOR_TIME_T 1" >>confdefs.h
-
-fi
-rm -f core conftest.err conftest.$ac_objext conftest.$ac_ext
-   ac_ext=c
-ac_cpp='$CPP $CPPFLAGS'
-ac_compile='$CC -c $CFLAGS $CPPFLAGS conftest.$ac_ext >&5'
-ac_link='$CC -o conftest$ac_exeext $CFLAGS $CPPFLAGS $LDFLAGS conftest.$ac_ext $LIBS >&5'
-ac_compiler_gnu=$ac_cv_c_compiler_gnu
-
-{ $as_echo "$as_me:${as_lineno-$LINENO}: checking for return type of signal handlers" >&5
-$as_echo_n "checking for return type of signal handlers... " >&6; }
-   for groff_declaration in \
-     'extern "C" void (*signal (int, void (*)(int)))(int);' \
-     'extern "C" void (*signal (int, void (*)(int)) throw ())(int);' \
-     'void (*signal ()) ();'
-   do
-     cat confdefs.h - <<_ACEOF >conftest.$ac_ext
-/* end confdefs.h.  */
-
-
-
-#include <sys/types.h>
-#include <signal.h>
-#ifdef signal
-# undef signal
-#endif
-$groff_declaration
-
-
-int
-main ()
-{
-
-
-int i;
-
-
-  ;
-  return 0;
-}
-
-_ACEOF
-if ac_fn_c_try_compile "$LINENO"; then :
-  break
-else
-  continue
-fi
-rm -f core conftest.err conftest.$ac_objext conftest.$ac_ext
-   done
-
-   if test -n "$groff_declaration"; then
-     { $as_echo "$as_me:${as_lineno-$LINENO}: result: void" >&5
-$as_echo "void" >&6; }
-
-$as_echo "#define RETSIGTYPE void" >>confdefs.h
-
-   else
-     { $as_echo "$as_me:${as_lineno-$LINENO}: result: int" >&5
-$as_echo "int" >&6; }
-
-$as_echo "#define RETSIGTYPE int" >>confdefs.h
-
-   fi
-{ $as_echo "$as_me:${as_lineno-$LINENO}: checking struct exception" >&5
-$as_echo_n "checking struct exception... " >&6; }
-   cat confdefs.h - <<_ACEOF >conftest.$ac_ext
-/* end confdefs.h.  */
-
-
-
-#include <math.h>
-
-
-int
-main ()
-{
-
-
-struct exception e;
-
-
-  ;
-  return 0;
-}
-
-_ACEOF
-if ac_fn_c_try_compile "$LINENO"; then :
-  { $as_echo "$as_me:${as_lineno-$LINENO}: result: yes" >&5
-$as_echo "yes" >&6; }
-
-$as_echo "#define HAVE_STRUCT_EXCEPTION 1" >>confdefs.h
-
-else
-  { $as_echo "$as_me:${as_lineno-$LINENO}: result: no" >&5
-$as_echo "no" >&6; }
-fi
-rm -f core conftest.err conftest.$ac_objext conftest.$ac_ext
-
-# check endianness
- { $as_echo "$as_me:${as_lineno-$LINENO}: checking whether byte ordering is bigendian" >&5
-$as_echo_n "checking whether byte ordering is bigendian... " >&6; }
-if ${ac_cv_c_bigendian+:} false; then :
-  $as_echo_n "(cached) " >&6
-else
-  ac_cv_c_bigendian=unknown
-    # See if we're dealing with a universal compiler.
-    cat confdefs.h - <<_ACEOF >conftest.$ac_ext
-/* end confdefs.h.  */
-#ifndef __APPLE_CC__
-	       not a universal capable compiler
-	     #endif
-	     typedef int dummy;
-
-_ACEOF
-if ac_fn_c_try_compile "$LINENO"; then :
-
-	# Check for potential -arch flags.  It is not universal unless
-	# there are at least two -arch flags with different values.
-	ac_arch=
-	ac_prev=
-	for ac_word in $CC $CFLAGS $CPPFLAGS $LDFLAGS; do
-	 if test -n "$ac_prev"; then
-	   case $ac_word in
-	     i?86 | x86_64 | ppc | ppc64)
-	       if test -z "$ac_arch" || test "$ac_arch" = "$ac_word"; then
-		 ac_arch=$ac_word
-	       else
-		 ac_cv_c_bigendian=universal
-		 break
-	       fi
-	       ;;
-	   esac
-	   ac_prev=
-	 elif test "x$ac_word" = "x-arch"; then
-	   ac_prev=arch
-	 fi
-       done
-fi
-rm -f core conftest.err conftest.$ac_objext conftest.$ac_ext
-    if test $ac_cv_c_bigendian = unknown; then
-      # See if sys/param.h defines the BYTE_ORDER macro.
-      cat confdefs.h - <<_ACEOF >conftest.$ac_ext
-/* end confdefs.h.  */
-#include <sys/types.h>
-	     #include <sys/param.h>
-
-int
-main ()
-{
-#if ! (defined BYTE_ORDER && defined BIG_ENDIAN \
-		     && defined LITTLE_ENDIAN && BYTE_ORDER && BIG_ENDIAN \
-		     && LITTLE_ENDIAN)
-	      bogus endian macros
-	     #endif
-
-  ;
-  return 0;
-}
-_ACEOF
-if ac_fn_c_try_compile "$LINENO"; then :
-  # It does; now see whether it defined to BIG_ENDIAN or not.
-	 cat confdefs.h - <<_ACEOF >conftest.$ac_ext
-/* end confdefs.h.  */
-#include <sys/types.h>
-		#include <sys/param.h>
-
-int
-main ()
-{
-#if BYTE_ORDER != BIG_ENDIAN
-		 not big endian
-		#endif
-
-  ;
-  return 0;
-}
-_ACEOF
-if ac_fn_c_try_compile "$LINENO"; then :
-  ac_cv_c_bigendian=yes
-else
-  ac_cv_c_bigendian=no
-fi
-rm -f core conftest.err conftest.$ac_objext conftest.$ac_ext
-fi
-rm -f core conftest.err conftest.$ac_objext conftest.$ac_ext
-    fi
-    if test $ac_cv_c_bigendian = unknown; then
-      # See if <limits.h> defines _LITTLE_ENDIAN or _BIG_ENDIAN (e.g., Solaris).
-      cat confdefs.h - <<_ACEOF >conftest.$ac_ext
-/* end confdefs.h.  */
-#include <limits.h>
-
-int
-main ()
-{
-#if ! (defined _LITTLE_ENDIAN || defined _BIG_ENDIAN)
-	      bogus endian macros
-	     #endif
-
-  ;
-  return 0;
-}
-_ACEOF
-if ac_fn_c_try_compile "$LINENO"; then :
-  # It does; now see whether it defined to _BIG_ENDIAN or not.
-	 cat confdefs.h - <<_ACEOF >conftest.$ac_ext
-/* end confdefs.h.  */
-#include <limits.h>
-
-int
-main ()
-{
-#ifndef _BIG_ENDIAN
-		 not big endian
-		#endif
-
-  ;
-  return 0;
-}
-_ACEOF
-if ac_fn_c_try_compile "$LINENO"; then :
-  ac_cv_c_bigendian=yes
-else
-  ac_cv_c_bigendian=no
-fi
-rm -f core conftest.err conftest.$ac_objext conftest.$ac_ext
-fi
-rm -f core conftest.err conftest.$ac_objext conftest.$ac_ext
-    fi
-    if test $ac_cv_c_bigendian = unknown; then
-      # Compile a test program.
-      if test "$cross_compiling" = yes; then :
-  # Try to guess by grepping values from an object file.
-	 cat confdefs.h - <<_ACEOF >conftest.$ac_ext
-/* end confdefs.h.  */
-short int ascii_mm[] =
-		  { 0x4249, 0x4765, 0x6E44, 0x6961, 0x6E53, 0x7953, 0 };
-		short int ascii_ii[] =
-		  { 0x694C, 0x5454, 0x656C, 0x6E45, 0x6944, 0x6E61, 0 };
-		int use_ascii (int i) {
-		  return ascii_mm[i] + ascii_ii[i];
-		}
-		short int ebcdic_ii[] =
-		  { 0x89D3, 0xE3E3, 0x8593, 0x95C5, 0x89C4, 0x9581, 0 };
-		short int ebcdic_mm[] =
-		  { 0xC2C9, 0xC785, 0x95C4, 0x8981, 0x95E2, 0xA8E2, 0 };
-		int use_ebcdic (int i) {
-		  return ebcdic_mm[i] + ebcdic_ii[i];
-		}
-		extern int foo;
-
-int
-main ()
-{
-return use_ascii (foo) == use_ebcdic (foo);
-  ;
-  return 0;
-}
-_ACEOF
-if ac_fn_c_try_compile "$LINENO"; then :
-  if grep BIGenDianSyS conftest.$ac_objext >/dev/null; then
-	      ac_cv_c_bigendian=yes
-	    fi
-	    if grep LiTTleEnDian conftest.$ac_objext >/dev/null ; then
-	      if test "$ac_cv_c_bigendian" = unknown; then
-		ac_cv_c_bigendian=no
-	      else
-		# finding both strings is unlikely to happen, but who knows?
-		ac_cv_c_bigendian=unknown
-	      fi
-	    fi
-fi
-rm -f core conftest.err conftest.$ac_objext conftest.$ac_ext
-else
-  cat confdefs.h - <<_ACEOF >conftest.$ac_ext
-/* end confdefs.h.  */
-$ac_includes_default
-int
-main ()
-{
-
-	     /* Are we little or big endian?  From Harbison&Steele.  */
-	     union
-	     {
-	       long int l;
-	       char c[sizeof (long int)];
-	     } u;
-	     u.l = 1;
-	     return u.c[sizeof (long int) - 1] == 1;
-
-  ;
-  return 0;
-}
-_ACEOF
-if ac_fn_c_try_run "$LINENO"; then :
-  ac_cv_c_bigendian=no
-else
-  ac_cv_c_bigendian=yes
-fi
-rm -f core *.core core.conftest.* gmon.out bb.out conftest$ac_exeext \
-  conftest.$ac_objext conftest.beam conftest.$ac_ext
-fi
-
-    fi
-fi
-{ $as_echo "$as_me:${as_lineno-$LINENO}: result: $ac_cv_c_bigendian" >&5
-$as_echo "$ac_cv_c_bigendian" >&6; }
- case $ac_cv_c_bigendian in #(
-   yes)
-     $as_echo "#define WORDS_BIGENDIAN 1" >>confdefs.h
-;; #(
-   no)
-      ;; #(
-   universal)
-
-$as_echo "#define AC_APPLE_UNIVERSAL_BUILD 1" >>confdefs.h
-
-     ;; #(
-   *)
-     as_fn_error $? "unknown endianness
- presetting ac_cv_c_bigendian=no (or yes) will help" "$LINENO" 5 ;;
- esac
-
-
-# checks for libraries
-{ $as_echo "$as_me:${as_lineno-$LINENO}: checking for main in -lc" >&5
-$as_echo_n "checking for main in -lc... " >&6; }
-if ${ac_cv_lib_c_main+:} false; then :
-  $as_echo_n "(cached) " >&6
-else
-  ac_check_lib_save_LIBS=$LIBS
-LIBS="-lc  $LIBS"
-cat confdefs.h - <<_ACEOF >conftest.$ac_ext
-/* end confdefs.h.  */
-
-
-int
-main ()
-{
-return main ();
-  ;
-  return 0;
-}
-_ACEOF
-if ac_fn_c_try_link "$LINENO"; then :
-  ac_cv_lib_c_main=yes
-else
-  ac_cv_lib_c_main=no
-fi
-rm -f core conftest.err conftest.$ac_objext \
-    conftest$ac_exeext conftest.$ac_ext
-LIBS=$ac_check_lib_save_LIBS
-fi
-{ $as_echo "$as_me:${as_lineno-$LINENO}: result: $ac_cv_lib_c_main" >&5
-$as_echo "$ac_cv_lib_c_main" >&6; }
-if test "x$ac_cv_lib_c_main" = xyes; then :
-  LIBC=-lc
-fi
-
-
-{ $as_echo "$as_me:${as_lineno-$LINENO}: checking for sin in -lm" >&5
-$as_echo_n "checking for sin in -lm... " >&6; }
-if ${ac_cv_lib_m_sin+:} false; then :
-  $as_echo_n "(cached) " >&6
-else
-  ac_check_lib_save_LIBS=$LIBS
-LIBS="-lm  $LIBS"
-cat confdefs.h - <<_ACEOF >conftest.$ac_ext
-/* end confdefs.h.  */
-
-/* Override any GCC internal prototype to avoid an error.
-   Use char because int might match the return type of a GCC
-   builtin and then its argument prototype would still apply.  */
-#ifdef __cplusplus
-extern "C"
-#endif
-char sin ();
-int
-main ()
-{
-return sin ();
-  ;
-  return 0;
-}
-_ACEOF
-if ac_fn_c_try_link "$LINENO"; then :
-  ac_cv_lib_m_sin=yes
-else
-  ac_cv_lib_m_sin=no
-fi
-rm -f core conftest.err conftest.$ac_objext \
-    conftest$ac_exeext conftest.$ac_ext
-LIBS=$ac_check_lib_save_LIBS
-fi
-{ $as_echo "$as_me:${as_lineno-$LINENO}: result: $ac_cv_lib_m_sin" >&5
-$as_echo "$ac_cv_lib_m_sin" >&6; }
-if test "x$ac_cv_lib_m_sin" = xyes; then :
-  LIBM=-lm
-fi
-
-
-
-ac_ext=cpp
-ac_cpp='$CXXCPP $CPPFLAGS'
-ac_compile='$CXX -c $CXXFLAGS $CPPFLAGS conftest.$ac_ext >&5'
-ac_link='$CXX -o conftest$ac_exeext $CXXFLAGS $CPPFLAGS $LDFLAGS conftest.$ac_ext $LIBS >&5'
-ac_compiler_gnu=$ac_cv_cxx_compiler_gnu
-
-# Make sure we can run config.sub.
-$SHELL "$ac_aux_dir/config.sub" sun4 >/dev/null 2>&1 ||
-  as_fn_error $? "cannot run $SHELL $ac_aux_dir/config.sub" "$LINENO" 5
-
-{ $as_echo "$as_me:${as_lineno-$LINENO}: checking build system type" >&5
-$as_echo_n "checking build system type... " >&6; }
-if ${ac_cv_build+:} false; then :
-  $as_echo_n "(cached) " >&6
-else
-  ac_build_alias=$build_alias
-test "x$ac_build_alias" = x &&
-  ac_build_alias=`$SHELL "$ac_aux_dir/config.guess"`
-test "x$ac_build_alias" = x &&
-  as_fn_error $? "cannot guess build type; you must specify one" "$LINENO" 5
-ac_cv_build=`$SHELL "$ac_aux_dir/config.sub" $ac_build_alias` ||
-  as_fn_error $? "$SHELL $ac_aux_dir/config.sub $ac_build_alias failed" "$LINENO" 5
-
-fi
-{ $as_echo "$as_me:${as_lineno-$LINENO}: result: $ac_cv_build" >&5
-$as_echo "$ac_cv_build" >&6; }
-case $ac_cv_build in
-*-*-*) ;;
-*) as_fn_error $? "invalid value of canonical build" "$LINENO" 5;;
-esac
-build=$ac_cv_build
-ac_save_IFS=$IFS; IFS='-'
-set x $ac_cv_build
-shift
-build_cpu=$1
-build_vendor=$2
-shift; shift
-# Remember, the first character of IFS is used to create $*,
-# except with old shells:
-build_os=$*
-IFS=$ac_save_IFS
-case $build_os in *\ *) build_os=`echo "$build_os" | sed 's/ /-/g'`;; esac
-
-
-{ $as_echo "$as_me:${as_lineno-$LINENO}: checking host system type" >&5
-$as_echo_n "checking host system type... " >&6; }
-if ${ac_cv_host+:} false; then :
-  $as_echo_n "(cached) " >&6
-else
-  if test "x$host_alias" = x; then
-  ac_cv_host=$ac_cv_build
-else
-  ac_cv_host=`$SHELL "$ac_aux_dir/config.sub" $host_alias` ||
-    as_fn_error $? "$SHELL $ac_aux_dir/config.sub $host_alias failed" "$LINENO" 5
-fi
-
-fi
-{ $as_echo "$as_me:${as_lineno-$LINENO}: result: $ac_cv_host" >&5
-$as_echo "$ac_cv_host" >&6; }
-case $ac_cv_host in
-*-*-*) ;;
-*) as_fn_error $? "invalid value of canonical host" "$LINENO" 5;;
-esac
-host=$ac_cv_host
-ac_save_IFS=$IFS; IFS='-'
-set x $ac_cv_host
-shift
-host_cpu=$1
-host_vendor=$2
-shift; shift
-# Remember, the first character of IFS is used to create $*,
-# except with old shells:
-host_os=$*
-IFS=$ac_save_IFS
-case $host_os in *\ *) host_os=`echo "$host_os" | sed 's/ /-/g'`;; esac
-
-
-
-      if test "X$prefix" = "XNONE"; then
-    acl_final_prefix="$ac_default_prefix"
-  else
-    acl_final_prefix="$prefix"
-  fi
-  if test "X$exec_prefix" = "XNONE"; then
-    acl_final_exec_prefix='${prefix}'
-  else
-    acl_final_exec_prefix="$exec_prefix"
-  fi
-  acl_save_prefix="$prefix"
-  prefix="$acl_final_prefix"
-  eval acl_final_exec_prefix=\"$acl_final_exec_prefix\"
-  prefix="$acl_save_prefix"
-
-
-
-# Check whether --with-gnu-ld was given.
-if test "${with_gnu_ld+set}" = set; then :
-  withval=$with_gnu_ld; test "$withval" = no || with_gnu_ld=yes
-else
-  with_gnu_ld=no
-fi
-
-# Prepare PATH_SEPARATOR.
-# The user is always right.
-if test "${PATH_SEPARATOR+set}" != set; then
-  # Determine PATH_SEPARATOR by trying to find /bin/sh in a PATH which
-  # contains only /bin. Note that ksh looks also at the FPATH variable,
-  # so we have to set that as well for the test.
-  PATH_SEPARATOR=:
-  (PATH='/bin;/bin'; FPATH=$PATH; sh -c :) >/dev/null 2>&1 \
-    && { (PATH='/bin:/bin'; FPATH=$PATH; sh -c :) >/dev/null 2>&1 \
-           || PATH_SEPARATOR=';'
-       }
-fi
-
-ac_prog=ld
-if test "$GCC" = yes; then
-  # Check if gcc -print-prog-name=ld gives a path.
-  { $as_echo "$as_me:${as_lineno-$LINENO}: checking for ld used by $CC" >&5
-$as_echo_n "checking for ld used by $CC... " >&6; }
-  case $host in
-  *-*-mingw*)
-    # gcc leaves a trailing carriage return which upsets mingw
-    ac_prog=`($CC -print-prog-name=ld) 2>&5 | tr -d '\015'` ;;
-  *)
-    ac_prog=`($CC -print-prog-name=ld) 2>&5` ;;
-  esac
-  case $ac_prog in
-    # Accept absolute paths.
-    [\\/]* | ?:[\\/]*)
-      re_direlt='/[^/][^/]*/\.\./'
-      # Canonicalize the pathname of ld
-      ac_prog=`echo "$ac_prog"| sed 's%\\\\%/%g'`
-      while echo "$ac_prog" | grep "$re_direlt" > /dev/null 2>&1; do
-        ac_prog=`echo $ac_prog| sed "s%$re_direlt%/%"`
-      done
-      test -z "$LD" && LD="$ac_prog"
-      ;;
-  "")
-    # If it fails, then pretend we aren't using GCC.
-    ac_prog=ld
-    ;;
-  *)
-    # If it is relative, then search for the first ld in PATH.
-    with_gnu_ld=unknown
-    ;;
-  esac
-elif test "$with_gnu_ld" = yes; then
-  { $as_echo "$as_me:${as_lineno-$LINENO}: checking for GNU ld" >&5
-$as_echo_n "checking for GNU ld... " >&6; }
-else
-  { $as_echo "$as_me:${as_lineno-$LINENO}: checking for non-GNU ld" >&5
-$as_echo_n "checking for non-GNU ld... " >&6; }
-fi
-if ${acl_cv_path_LD+:} false; then :
-  $as_echo_n "(cached) " >&6
-else
-  if test -z "$LD"; then
-  acl_save_ifs="$IFS"; IFS=$PATH_SEPARATOR
-  for ac_dir in $PATH; do
-    IFS="$acl_save_ifs"
-    test -z "$ac_dir" && ac_dir=.
-    if test -f "$ac_dir/$ac_prog" || test -f "$ac_dir/$ac_prog$ac_exeext"; then
-      acl_cv_path_LD="$ac_dir/$ac_prog"
-      # Check to see if the program is GNU ld.  I'd rather use --version,
-      # but apparently some variants of GNU ld only accept -v.
-      # Break only if it was the GNU/non-GNU ld that we prefer.
-      case `"$acl_cv_path_LD" -v 2>&1 </dev/null` in
-      *GNU* | *'with BFD'*)
-        test "$with_gnu_ld" != no && break
-        ;;
-      *)
-        test "$with_gnu_ld" != yes && break
-        ;;
-      esac
-    fi
-  done
-  IFS="$acl_save_ifs"
-else
-  acl_cv_path_LD="$LD" # Let the user override the test with a path.
-fi
-fi
-
-LD="$acl_cv_path_LD"
-if test -n "$LD"; then
-  { $as_echo "$as_me:${as_lineno-$LINENO}: result: $LD" >&5
-$as_echo "$LD" >&6; }
-else
-  { $as_echo "$as_me:${as_lineno-$LINENO}: result: no" >&5
-$as_echo "no" >&6; }
-fi
-test -z "$LD" && as_fn_error $? "no acceptable ld found in \$PATH" "$LINENO" 5
-{ $as_echo "$as_me:${as_lineno-$LINENO}: checking if the linker ($LD) is GNU ld" >&5
-$as_echo_n "checking if the linker ($LD) is GNU ld... " >&6; }
-if ${acl_cv_prog_gnu_ld+:} false; then :
-  $as_echo_n "(cached) " >&6
-else
-  # I'd rather use --version here, but apparently some GNU lds only accept -v.
-case `$LD -v 2>&1 </dev/null` in
-*GNU* | *'with BFD'*)
-  acl_cv_prog_gnu_ld=yes
-  ;;
-*)
-  acl_cv_prog_gnu_ld=no
-  ;;
-esac
-fi
-{ $as_echo "$as_me:${as_lineno-$LINENO}: result: $acl_cv_prog_gnu_ld" >&5
-$as_echo "$acl_cv_prog_gnu_ld" >&6; }
-with_gnu_ld=$acl_cv_prog_gnu_ld
-
-
-
-
-                                                { $as_echo "$as_me:${as_lineno-$LINENO}: checking for shared library run path origin" >&5
-$as_echo_n "checking for shared library run path origin... " >&6; }
-if ${acl_cv_rpath+:} false; then :
-  $as_echo_n "(cached) " >&6
-else
-
-    CC="$CC" GCC="$GCC" LDFLAGS="$LDFLAGS" LD="$LD" with_gnu_ld="$with_gnu_ld" \
-    ${CONFIG_SHELL-/bin/sh} "$ac_aux_dir/config.rpath" "$host" > conftest.sh
-    . ./conftest.sh
-    rm -f ./conftest.sh
-    acl_cv_rpath=done
-
-fi
-{ $as_echo "$as_me:${as_lineno-$LINENO}: result: $acl_cv_rpath" >&5
-$as_echo "$acl_cv_rpath" >&6; }
-  wl="$acl_cv_wl"
-  acl_libext="$acl_cv_libext"
-  acl_shlibext="$acl_cv_shlibext"
-  acl_libname_spec="$acl_cv_libname_spec"
-  acl_library_names_spec="$acl_cv_library_names_spec"
-  acl_hardcode_libdir_flag_spec="$acl_cv_hardcode_libdir_flag_spec"
-  acl_hardcode_libdir_separator="$acl_cv_hardcode_libdir_separator"
-  acl_hardcode_direct="$acl_cv_hardcode_direct"
-  acl_hardcode_minus_L="$acl_cv_hardcode_minus_L"
-    # Check whether --enable-rpath was given.
-if test "${enable_rpath+set}" = set; then :
-  enableval=$enable_rpath; :
-else
-  enable_rpath=yes
-fi
-
-
-ac_ext=cpp
-ac_cpp='$CXXCPP $CPPFLAGS'
-ac_compile='$CXX -c $CXXFLAGS $CPPFLAGS conftest.$ac_ext >&5'
-ac_link='$CXX -o conftest$ac_exeext $CXXFLAGS $CPPFLAGS $LDFLAGS conftest.$ac_ext $LIBS >&5'
-ac_compiler_gnu=$ac_cv_cxx_compiler_gnu
-{ $as_echo "$as_me:${as_lineno-$LINENO}: checking how to run the C++ preprocessor" >&5
-$as_echo_n "checking how to run the C++ preprocessor... " >&6; }
-if test -z "$CXXCPP"; then
-  if ${ac_cv_prog_CXXCPP+:} false; then :
-  $as_echo_n "(cached) " >&6
-else
-      # Double quotes because CXXCPP needs to be expanded
-    for CXXCPP in "$CXX -E" "/lib/cpp"
-    do
-      ac_preproc_ok=false
-for ac_cxx_preproc_warn_flag in '' yes
-do
-  # Use a header file that comes with gcc, so configuring glibc
-  # with a fresh cross-compiler works.
-  # Prefer <limits.h> to <assert.h> if __STDC__ is defined, since
-  # <limits.h> exists even on freestanding compilers.
-  # On the NeXT, cc -E runs the code through the compiler's parser,
-  # not just through cpp. "Syntax error" is here to catch this case.
-  cat confdefs.h - <<_ACEOF >conftest.$ac_ext
-/* end confdefs.h.  */
-#ifdef __STDC__
-# include <limits.h>
-#else
-# include <assert.h>
-#endif
-		     Syntax error
-_ACEOF
-if ac_fn_cxx_try_cpp "$LINENO"; then :
-
-else
-  # Broken: fails on valid input.
-continue
-fi
-rm -f conftest.err conftest.i conftest.$ac_ext
-
-  # OK, works on sane cases.  Now check whether nonexistent headers
-  # can be detected and how.
-  cat confdefs.h - <<_ACEOF >conftest.$ac_ext
-/* end confdefs.h.  */
-#include <ac_nonexistent.h>
-_ACEOF
-if ac_fn_cxx_try_cpp "$LINENO"; then :
-  # Broken: success on invalid input.
-continue
-else
-  # Passes both tests.
-ac_preproc_ok=:
-break
-fi
-rm -f conftest.err conftest.i conftest.$ac_ext
-
-done
-# Because of `break', _AC_PREPROC_IFELSE's cleaning code was skipped.
-rm -f conftest.i conftest.err conftest.$ac_ext
-if $ac_preproc_ok; then :
-  break
-fi
-
-    done
-    ac_cv_prog_CXXCPP=$CXXCPP
-
-fi
-  CXXCPP=$ac_cv_prog_CXXCPP
-else
-  ac_cv_prog_CXXCPP=$CXXCPP
-fi
-{ $as_echo "$as_me:${as_lineno-$LINENO}: result: $CXXCPP" >&5
-$as_echo "$CXXCPP" >&6; }
-ac_preproc_ok=false
-for ac_cxx_preproc_warn_flag in '' yes
-do
-  # Use a header file that comes with gcc, so configuring glibc
-  # with a fresh cross-compiler works.
-  # Prefer <limits.h> to <assert.h> if __STDC__ is defined, since
-  # <limits.h> exists even on freestanding compilers.
-  # On the NeXT, cc -E runs the code through the compiler's parser,
-  # not just through cpp. "Syntax error" is here to catch this case.
-  cat confdefs.h - <<_ACEOF >conftest.$ac_ext
-/* end confdefs.h.  */
-#ifdef __STDC__
-# include <limits.h>
-#else
-# include <assert.h>
-#endif
-		     Syntax error
-_ACEOF
-if ac_fn_cxx_try_cpp "$LINENO"; then :
-
-else
-  # Broken: fails on valid input.
-continue
-fi
-rm -f conftest.err conftest.i conftest.$ac_ext
-
-  # OK, works on sane cases.  Now check whether nonexistent headers
-  # can be detected and how.
-  cat confdefs.h - <<_ACEOF >conftest.$ac_ext
-/* end confdefs.h.  */
-#include <ac_nonexistent.h>
-_ACEOF
-if ac_fn_cxx_try_cpp "$LINENO"; then :
-  # Broken: success on invalid input.
-continue
-else
-  # Passes both tests.
-ac_preproc_ok=:
-break
-fi
-rm -f conftest.err conftest.i conftest.$ac_ext
-
-done
-# Because of `break', _AC_PREPROC_IFELSE's cleaning code was skipped.
-rm -f conftest.i conftest.err conftest.$ac_ext
-if $ac_preproc_ok; then :
-
-else
-  { { $as_echo "$as_me:${as_lineno-$LINENO}: error: in \`$ac_pwd':" >&5
-$as_echo "$as_me: error: in \`$ac_pwd':" >&2;}
-as_fn_error $? "C++ preprocessor \"$CXXCPP\" fails sanity check
-See \`config.log' for more details" "$LINENO" 5; }
-fi
-
-ac_ext=cpp
-ac_cpp='$CXXCPP $CPPFLAGS'
-ac_compile='$CXX -c $CXXFLAGS $CPPFLAGS conftest.$ac_ext >&5'
-ac_link='$CXX -o conftest$ac_exeext $CXXFLAGS $CPPFLAGS $LDFLAGS conftest.$ac_ext $LIBS >&5'
-ac_compiler_gnu=$ac_cv_cxx_compiler_gnu
-
-
-
-
-  acl_libdirstem=lib
-  acl_libdirstem2=
-  case "$host_os" in
-    solaris*)
-                                    { $as_echo "$as_me:${as_lineno-$LINENO}: checking for 64-bit host" >&5
-$as_echo_n "checking for 64-bit host... " >&6; }
-if ${gl_cv_solaris_64bit+:} false; then :
-  $as_echo_n "(cached) " >&6
-else
-  cat confdefs.h - <<_ACEOF >conftest.$ac_ext
-/* end confdefs.h.  */
-
-#ifdef _LP64
-sixtyfour bits
-#endif
-
-_ACEOF
-if (eval "$ac_cpp conftest.$ac_ext") 2>&5 |
-  $EGREP "sixtyfour bits" >/dev/null 2>&1; then :
-  gl_cv_solaris_64bit=yes
-else
-  gl_cv_solaris_64bit=no
-fi
-rm -f conftest*
-
-
-fi
-{ $as_echo "$as_me:${as_lineno-$LINENO}: result: $gl_cv_solaris_64bit" >&5
-$as_echo "$gl_cv_solaris_64bit" >&6; }
-      if test $gl_cv_solaris_64bit = yes; then
-        acl_libdirstem=lib/64
-        case "$host_cpu" in
-          sparc*)        acl_libdirstem2=lib/sparcv9 ;;
-          i*86 | x86_64) acl_libdirstem2=lib/amd64 ;;
-        esac
-      fi
-      ;;
-    *)
-      searchpath=`(LC_ALL=C $CC -print-search-dirs) 2>/dev/null | sed -n -e 's,^libraries: ,,p' | sed -e 's,^=,,'`
-      if test -n "$searchpath"; then
-        acl_save_IFS="${IFS= 	}"; IFS=":"
-        for searchdir in $searchpath; do
-          if test -d "$searchdir"; then
-            case "$searchdir" in
-              */lib64/ | */lib64 ) acl_libdirstem=lib64 ;;
-              */../ | */.. )
-                # Better ignore directories of this form. They are misleading.
-                ;;
-              *) searchdir=`cd "$searchdir" && pwd`
-                 case "$searchdir" in
-                   */lib64 ) acl_libdirstem=lib64 ;;
-                 esac ;;
-            esac
-          fi
-        done
-        IFS="$acl_save_IFS"
-      fi
-      ;;
-  esac
-  test -n "$acl_libdirstem2" || acl_libdirstem2="$acl_libdirstem"
-
-
-
-
-
-
-
-
-
-
-
-
-    use_additional=yes
-
-  acl_save_prefix="$prefix"
-  prefix="$acl_final_prefix"
-  acl_save_exec_prefix="$exec_prefix"
-  exec_prefix="$acl_final_exec_prefix"
-
-    eval additional_includedir=\"$includedir\"
-    eval additional_libdir=\"$libdir\"
-
-  exec_prefix="$acl_save_exec_prefix"
-  prefix="$acl_save_prefix"
-
-
-# Check whether --with-libiconv-prefix was given.
-if test "${with_libiconv_prefix+set}" = set; then :
-  withval=$with_libiconv_prefix;
-    if test "X$withval" = "Xno"; then
-      use_additional=no
-    else
-      if test "X$withval" = "X"; then
-
-  acl_save_prefix="$prefix"
-  prefix="$acl_final_prefix"
-  acl_save_exec_prefix="$exec_prefix"
-  exec_prefix="$acl_final_exec_prefix"
-
-          eval additional_includedir=\"$includedir\"
-          eval additional_libdir=\"$libdir\"
-
-  exec_prefix="$acl_save_exec_prefix"
-  prefix="$acl_save_prefix"
-
-      else
-        additional_includedir="$withval/include"
-        additional_libdir="$withval/$acl_libdirstem"
-        if test "$acl_libdirstem2" != "$acl_libdirstem" \
-           && ! test -d "$withval/$acl_libdirstem"; then
-          additional_libdir="$withval/$acl_libdirstem2"
-        fi
-      fi
-    fi
-
-fi
-
-      LIBICONV=
-  LTLIBICONV=
-  INCICONV=
-  LIBICONV_PREFIX=
-      HAVE_LIBICONV=
-  rpathdirs=
-  ltrpathdirs=
-  names_already_handled=
-  names_next_round='iconv '
-  while test -n "$names_next_round"; do
-    names_this_round="$names_next_round"
-    names_next_round=
-    for name in $names_this_round; do
-      already_handled=
-      for n in $names_already_handled; do
-        if test "$n" = "$name"; then
-          already_handled=yes
-          break
-        fi
-      done
-      if test -z "$already_handled"; then
-        names_already_handled="$names_already_handled $name"
-                        uppername=`echo "$name" | sed -e 'y|abcdefghijklmnopqrstuvwxyz./+-|ABCDEFGHIJKLMNOPQRSTUVWXYZ____|'`
-        eval value=\"\$HAVE_LIB$uppername\"
-        if test -n "$value"; then
-          if test "$value" = yes; then
-            eval value=\"\$LIB$uppername\"
-            test -z "$value" || LIBICONV="${LIBICONV}${LIBICONV:+ }$value"
-            eval value=\"\$LTLIB$uppername\"
-            test -z "$value" || LTLIBICONV="${LTLIBICONV}${LTLIBICONV:+ }$value"
-          else
-                                    :
-          fi
-        else
-                              found_dir=
-          found_la=
-          found_so=
-          found_a=
-          eval libname=\"$acl_libname_spec\"    # typically: libname=lib$name
-          if test -n "$acl_shlibext"; then
-            shrext=".$acl_shlibext"             # typically: shrext=.so
-          else
-            shrext=
-          fi
-          if test $use_additional = yes; then
-            dir="$additional_libdir"
-                                    if test -n "$acl_shlibext"; then
-              if test -f "$dir/$libname$shrext"; then
-                found_dir="$dir"
-                found_so="$dir/$libname$shrext"
-              else
-                if test "$acl_library_names_spec" = '$libname$shrext$versuffix'; then
-                  ver=`(cd "$dir" && \
-                        for f in "$libname$shrext".*; do echo "$f"; done \
-                        | sed -e "s,^$libname$shrext\\\\.,," \
-                        | sort -t '.' -n -r -k1,1 -k2,2 -k3,3 -k4,4 -k5,5 \
-                        | sed 1q ) 2>/dev/null`
-                  if test -n "$ver" && test -f "$dir/$libname$shrext.$ver"; then
-                    found_dir="$dir"
-                    found_so="$dir/$libname$shrext.$ver"
-                  fi
-                else
-                  eval library_names=\"$acl_library_names_spec\"
-                  for f in $library_names; do
-                    if test -f "$dir/$f"; then
-                      found_dir="$dir"
-                      found_so="$dir/$f"
-                      break
-                    fi
-                  done
-                fi
-              fi
-            fi
-                        if test "X$found_dir" = "X"; then
-              if test -f "$dir/$libname.$acl_libext"; then
-                found_dir="$dir"
-                found_a="$dir/$libname.$acl_libext"
-              fi
-            fi
-            if test "X$found_dir" != "X"; then
-              if test -f "$dir/$libname.la"; then
-                found_la="$dir/$libname.la"
-              fi
-            fi
-          fi
-          if test "X$found_dir" = "X"; then
-            for x in $LDFLAGS $LTLIBICONV; do
-
-  acl_save_prefix="$prefix"
-  prefix="$acl_final_prefix"
-  acl_save_exec_prefix="$exec_prefix"
-  exec_prefix="$acl_final_exec_prefix"
-  eval x=\"$x\"
-  exec_prefix="$acl_save_exec_prefix"
-  prefix="$acl_save_prefix"
-
-              case "$x" in
-                -L*)
-                  dir=`echo "X$x" | sed -e 's/^X-L//'`
-                                    if test -n "$acl_shlibext"; then
-                    if test -f "$dir/$libname$shrext"; then
-                      found_dir="$dir"
-                      found_so="$dir/$libname$shrext"
-                    else
-                      if test "$acl_library_names_spec" = '$libname$shrext$versuffix'; then
-                        ver=`(cd "$dir" && \
-                              for f in "$libname$shrext".*; do echo "$f"; done \
-                              | sed -e "s,^$libname$shrext\\\\.,," \
-                              | sort -t '.' -n -r -k1,1 -k2,2 -k3,3 -k4,4 -k5,5 \
-                              | sed 1q ) 2>/dev/null`
-                        if test -n "$ver" && test -f "$dir/$libname$shrext.$ver"; then
-                          found_dir="$dir"
-                          found_so="$dir/$libname$shrext.$ver"
-                        fi
-                      else
-                        eval library_names=\"$acl_library_names_spec\"
-                        for f in $library_names; do
-                          if test -f "$dir/$f"; then
-                            found_dir="$dir"
-                            found_so="$dir/$f"
-                            break
-                          fi
-                        done
-                      fi
-                    fi
-                  fi
-                                    if test "X$found_dir" = "X"; then
-                    if test -f "$dir/$libname.$acl_libext"; then
-                      found_dir="$dir"
-                      found_a="$dir/$libname.$acl_libext"
-                    fi
-                  fi
-                  if test "X$found_dir" != "X"; then
-                    if test -f "$dir/$libname.la"; then
-                      found_la="$dir/$libname.la"
-                    fi
-                  fi
-                  ;;
-              esac
-              if test "X$found_dir" != "X"; then
-                break
-              fi
-            done
-          fi
-          if test "X$found_dir" != "X"; then
-                        LTLIBICONV="${LTLIBICONV}${LTLIBICONV:+ }-L$found_dir -l$name"
-            if test "X$found_so" != "X"; then
-                                                        if test "$enable_rpath" = no \
-                 || test "X$found_dir" = "X/usr/$acl_libdirstem" \
-                 || test "X$found_dir" = "X/usr/$acl_libdirstem2"; then
-                                LIBICONV="${LIBICONV}${LIBICONV:+ }$found_so"
-              else
-                                                                                haveit=
-                for x in $ltrpathdirs; do
-                  if test "X$x" = "X$found_dir"; then
-                    haveit=yes
-                    break
-                  fi
-                done
-                if test -z "$haveit"; then
-                  ltrpathdirs="$ltrpathdirs $found_dir"
-                fi
-                                if test "$acl_hardcode_direct" = yes; then
-                                                      LIBICONV="${LIBICONV}${LIBICONV:+ }$found_so"
-                else
-                  if test -n "$acl_hardcode_libdir_flag_spec" && test "$acl_hardcode_minus_L" = no; then
-                                                            LIBICONV="${LIBICONV}${LIBICONV:+ }$found_so"
-                                                            haveit=
-                    for x in $rpathdirs; do
-                      if test "X$x" = "X$found_dir"; then
-                        haveit=yes
-                        break
-                      fi
-                    done
-                    if test -z "$haveit"; then
-                      rpathdirs="$rpathdirs $found_dir"
-                    fi
-                  else
-                                                                                haveit=
-                    for x in $LDFLAGS $LIBICONV; do
-
-  acl_save_prefix="$prefix"
-  prefix="$acl_final_prefix"
-  acl_save_exec_prefix="$exec_prefix"
-  exec_prefix="$acl_final_exec_prefix"
-  eval x=\"$x\"
-  exec_prefix="$acl_save_exec_prefix"
-  prefix="$acl_save_prefix"
-
-                      if test "X$x" = "X-L$found_dir"; then
-                        haveit=yes
-                        break
-                      fi
-                    done
-                    if test -z "$haveit"; then
-                      LIBICONV="${LIBICONV}${LIBICONV:+ }-L$found_dir"
-                    fi
-                    if test "$acl_hardcode_minus_L" != no; then
-                                                                                        LIBICONV="${LIBICONV}${LIBICONV:+ }$found_so"
-                    else
-                                                                                                                                                                                LIBICONV="${LIBICONV}${LIBICONV:+ }-l$name"
-                    fi
-                  fi
-                fi
-              fi
-            else
-              if test "X$found_a" != "X"; then
-                                LIBICONV="${LIBICONV}${LIBICONV:+ }$found_a"
-              else
-                                                LIBICONV="${LIBICONV}${LIBICONV:+ }-L$found_dir -l$name"
-              fi
-            fi
-                        additional_includedir=
-            case "$found_dir" in
-              */$acl_libdirstem | */$acl_libdirstem/)
-                basedir=`echo "X$found_dir" | sed -e 's,^X,,' -e "s,/$acl_libdirstem/"'*$,,'`
-                if test "$name" = 'iconv'; then
-                  LIBICONV_PREFIX="$basedir"
-                fi
-                additional_includedir="$basedir/include"
-                ;;
-              */$acl_libdirstem2 | */$acl_libdirstem2/)
-                basedir=`echo "X$found_dir" | sed -e 's,^X,,' -e "s,/$acl_libdirstem2/"'*$,,'`
-                if test "$name" = 'iconv'; then
-                  LIBICONV_PREFIX="$basedir"
-                fi
-                additional_includedir="$basedir/include"
-                ;;
-            esac
-            if test "X$additional_includedir" != "X"; then
-                                                                                                                if test "X$additional_includedir" != "X/usr/include"; then
-                haveit=
-                if test "X$additional_includedir" = "X/usr/local/include"; then
-                  if test -n "$GCC"; then
-                    case $host_os in
-                      linux* | gnu* | k*bsd*-gnu) haveit=yes;;
-                    esac
-                  fi
-                fi
-                if test -z "$haveit"; then
-                  for x in $CPPFLAGS $INCICONV; do
-
-  acl_save_prefix="$prefix"
-  prefix="$acl_final_prefix"
-  acl_save_exec_prefix="$exec_prefix"
-  exec_prefix="$acl_final_exec_prefix"
-  eval x=\"$x\"
-  exec_prefix="$acl_save_exec_prefix"
-  prefix="$acl_save_prefix"
-
-                    if test "X$x" = "X-I$additional_includedir"; then
-                      haveit=yes
-                      break
-                    fi
-                  done
-                  if test -z "$haveit"; then
-                    if test -d "$additional_includedir"; then
-                                            INCICONV="${INCICONV}${INCICONV:+ }-I$additional_includedir"
-                    fi
-                  fi
-                fi
-              fi
-            fi
-                        if test -n "$found_la"; then
-                                                        save_libdir="$libdir"
-              case "$found_la" in
-                */* | *\\*) . "$found_la" ;;
-                *) . "./$found_la" ;;
-              esac
-              libdir="$save_libdir"
-                            for dep in $dependency_libs; do
-                case "$dep" in
-                  -L*)
-                    additional_libdir=`echo "X$dep" | sed -e 's/^X-L//'`
-                                                                                                                                                                if test "X$additional_libdir" != "X/usr/$acl_libdirstem" \
-                       && test "X$additional_libdir" != "X/usr/$acl_libdirstem2"; then
-                      haveit=
-                      if test "X$additional_libdir" = "X/usr/local/$acl_libdirstem" \
-                         || test "X$additional_libdir" = "X/usr/local/$acl_libdirstem2"; then
-                        if test -n "$GCC"; then
-                          case $host_os in
-                            linux* | gnu* | k*bsd*-gnu) haveit=yes;;
-                          esac
-                        fi
-                      fi
-                      if test -z "$haveit"; then
-                        haveit=
-                        for x in $LDFLAGS $LIBICONV; do
-
-  acl_save_prefix="$prefix"
-  prefix="$acl_final_prefix"
-  acl_save_exec_prefix="$exec_prefix"
-  exec_prefix="$acl_final_exec_prefix"
-  eval x=\"$x\"
-  exec_prefix="$acl_save_exec_prefix"
-  prefix="$acl_save_prefix"
-
-                          if test "X$x" = "X-L$additional_libdir"; then
-                            haveit=yes
-                            break
-                          fi
-                        done
-                        if test -z "$haveit"; then
-                          if test -d "$additional_libdir"; then
-                                                        LIBICONV="${LIBICONV}${LIBICONV:+ }-L$additional_libdir"
-                          fi
-                        fi
-                        haveit=
-                        for x in $LDFLAGS $LTLIBICONV; do
-
-  acl_save_prefix="$prefix"
-  prefix="$acl_final_prefix"
-  acl_save_exec_prefix="$exec_prefix"
-  exec_prefix="$acl_final_exec_prefix"
-  eval x=\"$x\"
-  exec_prefix="$acl_save_exec_prefix"
-  prefix="$acl_save_prefix"
-
-                          if test "X$x" = "X-L$additional_libdir"; then
-                            haveit=yes
-                            break
-                          fi
-                        done
-                        if test -z "$haveit"; then
-                          if test -d "$additional_libdir"; then
-                                                        LTLIBICONV="${LTLIBICONV}${LTLIBICONV:+ }-L$additional_libdir"
-                          fi
-                        fi
-                      fi
-                    fi
-                    ;;
-                  -R*)
-                    dir=`echo "X$dep" | sed -e 's/^X-R//'`
-                    if test "$enable_rpath" != no; then
-                                                                  haveit=
-                      for x in $rpathdirs; do
-                        if test "X$x" = "X$dir"; then
-                          haveit=yes
-                          break
-                        fi
-                      done
-                      if test -z "$haveit"; then
-                        rpathdirs="$rpathdirs $dir"
-                      fi
-                                                                  haveit=
-                      for x in $ltrpathdirs; do
-                        if test "X$x" = "X$dir"; then
-                          haveit=yes
-                          break
-                        fi
-                      done
-                      if test -z "$haveit"; then
-                        ltrpathdirs="$ltrpathdirs $dir"
-                      fi
-                    fi
-                    ;;
-                  -l*)
-                                        names_next_round="$names_next_round "`echo "X$dep" | sed -e 's/^X-l//'`
-                    ;;
-                  *.la)
-                                                                                names_next_round="$names_next_round "`echo "X$dep" | sed -e 's,^X.*/,,' -e 's,^lib,,' -e 's,\.la$,,'`
-                    ;;
-                  *)
-                                        LIBICONV="${LIBICONV}${LIBICONV:+ }$dep"
-                    LTLIBICONV="${LTLIBICONV}${LTLIBICONV:+ }$dep"
-                    ;;
-                esac
-              done
-            fi
-          else
-                                                            LIBICONV="${LIBICONV}${LIBICONV:+ }-l$name"
-            LTLIBICONV="${LTLIBICONV}${LTLIBICONV:+ }-l$name"
-          fi
-        fi
-      fi
-    done
-  done
-  if test "X$rpathdirs" != "X"; then
-    if test -n "$acl_hardcode_libdir_separator"; then
-                        alldirs=
-      for found_dir in $rpathdirs; do
-        alldirs="${alldirs}${alldirs:+$acl_hardcode_libdir_separator}$found_dir"
-      done
-            acl_save_libdir="$libdir"
-      libdir="$alldirs"
-      eval flag=\"$acl_hardcode_libdir_flag_spec\"
-      libdir="$acl_save_libdir"
-      LIBICONV="${LIBICONV}${LIBICONV:+ }$flag"
-    else
-            for found_dir in $rpathdirs; do
-        acl_save_libdir="$libdir"
-        libdir="$found_dir"
-        eval flag=\"$acl_hardcode_libdir_flag_spec\"
-        libdir="$acl_save_libdir"
-        LIBICONV="${LIBICONV}${LIBICONV:+ }$flag"
-      done
-    fi
-  fi
-  if test "X$ltrpathdirs" != "X"; then
-            for found_dir in $ltrpathdirs; do
-      LTLIBICONV="${LTLIBICONV}${LTLIBICONV:+ }-R$found_dir"
-    done
-  fi
-
-
-
-
-
-
-
-
-
-
-
-
-          am_save_CPPFLAGS="$CPPFLAGS"
-
-  for element in $INCICONV; do
-    haveit=
-    for x in $CPPFLAGS; do
-
-  acl_save_prefix="$prefix"
-  prefix="$acl_final_prefix"
-  acl_save_exec_prefix="$exec_prefix"
-  exec_prefix="$acl_final_exec_prefix"
-  eval x=\"$x\"
-  exec_prefix="$acl_save_exec_prefix"
-  prefix="$acl_save_prefix"
-
-      if test "X$x" = "X$element"; then
-        haveit=yes
-        break
-      fi
-    done
-    if test -z "$haveit"; then
-      CPPFLAGS="${CPPFLAGS}${CPPFLAGS:+ }$element"
-    fi
-  done
-
-
-  { $as_echo "$as_me:${as_lineno-$LINENO}: checking for iconv" >&5
-$as_echo_n "checking for iconv... " >&6; }
-if ${am_cv_func_iconv+:} false; then :
-  $as_echo_n "(cached) " >&6
-else
-
-    am_cv_func_iconv="no, consider installing GNU libiconv"
-    am_cv_lib_iconv=no
-    cat confdefs.h - <<_ACEOF >conftest.$ac_ext
-/* end confdefs.h.  */
-
-#include <stdlib.h>
-#include <iconv.h>
-
-int
-main ()
-{
-iconv_t cd = iconv_open("","");
-           iconv(cd,NULL,NULL,NULL,NULL);
-           iconv_close(cd);
-  ;
-  return 0;
-}
-_ACEOF
-if ac_fn_cxx_try_link "$LINENO"; then :
-  am_cv_func_iconv=yes
-fi
-rm -f core conftest.err conftest.$ac_objext \
-    conftest$ac_exeext conftest.$ac_ext
-    if test "$am_cv_func_iconv" != yes; then
-      am_save_LIBS="$LIBS"
-      LIBS="$LIBS $LIBICONV"
-      cat confdefs.h - <<_ACEOF >conftest.$ac_ext
-/* end confdefs.h.  */
-
-#include <stdlib.h>
-#include <iconv.h>
-
-int
-main ()
-{
-iconv_t cd = iconv_open("","");
-             iconv(cd,NULL,NULL,NULL,NULL);
-             iconv_close(cd);
-  ;
-  return 0;
-}
-_ACEOF
-if ac_fn_cxx_try_link "$LINENO"; then :
-  am_cv_lib_iconv=yes
-        am_cv_func_iconv=yes
-fi
-rm -f core conftest.err conftest.$ac_objext \
-    conftest$ac_exeext conftest.$ac_ext
-      LIBS="$am_save_LIBS"
-    fi
-
-fi
-{ $as_echo "$as_me:${as_lineno-$LINENO}: result: $am_cv_func_iconv" >&5
-$as_echo "$am_cv_func_iconv" >&6; }
-  if test "$am_cv_func_iconv" = yes; then
-    { $as_echo "$as_me:${as_lineno-$LINENO}: checking for working iconv" >&5
-$as_echo_n "checking for working iconv... " >&6; }
-if ${am_cv_func_iconv_works+:} false; then :
-  $as_echo_n "(cached) " >&6
-else
-
-                  am_save_LIBS="$LIBS"
-      if test $am_cv_lib_iconv = yes; then
-        LIBS="$LIBS $LIBICONV"
-      fi
-      am_cv_func_iconv_works=no
-      for ac_iconv_const in '' 'const'; do
-        if test "$cross_compiling" = yes; then :
-  case "$host_os" in
-             aix* | hpux*) am_cv_func_iconv_works="guessing no" ;;
-             *)            am_cv_func_iconv_works="guessing yes" ;;
-           esac
-else
-  cat confdefs.h - <<_ACEOF >conftest.$ac_ext
-/* end confdefs.h.  */
-
-#include <iconv.h>
-#include <string.h>
-
-#ifndef ICONV_CONST
-# define ICONV_CONST $ac_iconv_const
-#endif
-
-int
-main ()
-{
-int result = 0;
-  /* Test against AIX 5.1 bug: Failures are not distinguishable from successful
-     returns.  */
-  {
-    iconv_t cd_utf8_to_88591 = iconv_open ("ISO8859-1", "UTF-8");
-    if (cd_utf8_to_88591 != (iconv_t)(-1))
-      {
-        static ICONV_CONST char input[] = "\342\202\254"; /* EURO SIGN */
-        char buf[10];
-        ICONV_CONST char *inptr = input;
-        size_t inbytesleft = strlen (input);
-        char *outptr = buf;
-        size_t outbytesleft = sizeof (buf);
-        size_t res = iconv (cd_utf8_to_88591,
-                            &inptr, &inbytesleft,
-                            &outptr, &outbytesleft);
-        if (res == 0)
-          result |= 1;
-        iconv_close (cd_utf8_to_88591);
-      }
-  }
-  /* Test against Solaris 10 bug: Failures are not distinguishable from
-     successful returns.  */
-  {
-    iconv_t cd_ascii_to_88591 = iconv_open ("ISO8859-1", "646");
-    if (cd_ascii_to_88591 != (iconv_t)(-1))
-      {
-        static ICONV_CONST char input[] = "\263";
-        char buf[10];
-        ICONV_CONST char *inptr = input;
-        size_t inbytesleft = strlen (input);
-        char *outptr = buf;
-        size_t outbytesleft = sizeof (buf);
-        size_t res = iconv (cd_ascii_to_88591,
-                            &inptr, &inbytesleft,
-                            &outptr, &outbytesleft);
-        if (res == 0)
-          result |= 2;
-        iconv_close (cd_ascii_to_88591);
-      }
-  }
-  /* Test against AIX 6.1..7.1 bug: Buffer overrun.  */
-  {
-    iconv_t cd_88591_to_utf8 = iconv_open ("UTF-8", "ISO-8859-1");
-    if (cd_88591_to_utf8 != (iconv_t)(-1))
-      {
-        static ICONV_CONST char input[] = "\304";
-        static char buf[2] = { (char)0xDE, (char)0xAD };
-        ICONV_CONST char *inptr = input;
-        size_t inbytesleft = 1;
-        char *outptr = buf;
-        size_t outbytesleft = 1;
-        size_t res = iconv (cd_88591_to_utf8,
-                            &inptr, &inbytesleft,
-                            &outptr, &outbytesleft);
-        if (res != (size_t)(-1) || outptr - buf > 1 || buf[1] != (char)0xAD)
-          result |= 4;
-        iconv_close (cd_88591_to_utf8);
-      }
-  }
-#if 0 /* This bug could be worked around by the caller.  */
-  /* Test against HP-UX 11.11 bug: Positive return value instead of 0.  */
-  {
-    iconv_t cd_88591_to_utf8 = iconv_open ("utf8", "iso88591");
-    if (cd_88591_to_utf8 != (iconv_t)(-1))
-      {
-        static ICONV_CONST char input[] = "\304rger mit b\366sen B\374bchen ohne Augenma\337";
-        char buf[50];
-        ICONV_CONST char *inptr = input;
-        size_t inbytesleft = strlen (input);
-        char *outptr = buf;
-        size_t outbytesleft = sizeof (buf);
-        size_t res = iconv (cd_88591_to_utf8,
-                            &inptr, &inbytesleft,
-                            &outptr, &outbytesleft);
-        if ((int)res > 0)
-          result |= 8;
-        iconv_close (cd_88591_to_utf8);
-      }
-  }
-#endif
-  /* Test against HP-UX 11.11 bug: No converter from EUC-JP to UTF-8 is
-     provided.  */
-  if (/* Try standardized names.  */
-      iconv_open ("UTF-8", "EUC-JP") == (iconv_t)(-1)
-      /* Try IRIX, OSF/1 names.  */
-      && iconv_open ("UTF-8", "eucJP") == (iconv_t)(-1)
-      /* Try AIX names.  */
-      && iconv_open ("UTF-8", "IBM-eucJP") == (iconv_t)(-1)
-      /* Try HP-UX names.  */
-      && iconv_open ("utf8", "eucJP") == (iconv_t)(-1))
-    result |= 16;
-  return result;
-
-  ;
-  return 0;
-}
-_ACEOF
-if ac_fn_cxx_try_run "$LINENO"; then :
-  am_cv_func_iconv_works=yes
-fi
-rm -f core *.core core.conftest.* gmon.out bb.out conftest$ac_exeext \
-  conftest.$ac_objext conftest.beam conftest.$ac_ext
-fi
-
-        test "$am_cv_func_iconv_works" = no || break
-      done
-      LIBS="$am_save_LIBS"
-
-fi
-{ $as_echo "$as_me:${as_lineno-$LINENO}: result: $am_cv_func_iconv_works" >&5
-$as_echo "$am_cv_func_iconv_works" >&6; }
-    case "$am_cv_func_iconv_works" in
-      *no) am_func_iconv=no am_cv_lib_iconv=no ;;
-      *)   am_func_iconv=yes ;;
-    esac
-  else
-    am_func_iconv=no am_cv_lib_iconv=no
-  fi
-  if test "$am_func_iconv" = yes; then
-
-$as_echo "#define HAVE_ICONV 1" >>confdefs.h
-
-  fi
-  if test "$am_cv_lib_iconv" = yes; then
-    { $as_echo "$as_me:${as_lineno-$LINENO}: checking how to link with libiconv" >&5
-$as_echo_n "checking how to link with libiconv... " >&6; }
-    { $as_echo "$as_me:${as_lineno-$LINENO}: result: $LIBICONV" >&5
-$as_echo "$LIBICONV" >&6; }
-  else
-            CPPFLAGS="$am_save_CPPFLAGS"
-    LIBICONV=
-    LTLIBICONV=
-  fi
-
-
-
-  if test "$am_cv_func_iconv" = yes; then
-    { $as_echo "$as_me:${as_lineno-$LINENO}: checking for iconv declaration" >&5
-$as_echo_n "checking for iconv declaration... " >&6; }
-    if ${am_cv_proto_iconv+:} false; then :
-  $as_echo_n "(cached) " >&6
-else
-
-      cat confdefs.h - <<_ACEOF >conftest.$ac_ext
-/* end confdefs.h.  */
-
-#include <stdlib.h>
-#include <iconv.h>
-extern
-#ifdef __cplusplus
-"C"
-#endif
-#if defined(__STDC__) || defined(_MSC_VER) || defined(__cplusplus)
-size_t iconv (iconv_t cd, char * *inbuf, size_t *inbytesleft, char * *outbuf, size_t *outbytesleft);
-#else
-size_t iconv();
-#endif
-
-int
-main ()
-{
-
-  ;
-  return 0;
-}
-_ACEOF
-if ac_fn_cxx_try_compile "$LINENO"; then :
-  am_cv_proto_iconv_arg1=""
-else
-  am_cv_proto_iconv_arg1="const"
-fi
-rm -f core conftest.err conftest.$ac_objext conftest.$ac_ext
-      am_cv_proto_iconv="extern size_t iconv (iconv_t cd, $am_cv_proto_iconv_arg1 char * *inbuf, size_t *inbytesleft, char * *outbuf, size_t *outbytesleft);"
-fi
-
-    am_cv_proto_iconv=`echo "$am_cv_proto_iconv" | tr -s ' ' | sed -e 's/( /(/'`
-    { $as_echo "$as_me:${as_lineno-$LINENO}: result:
-         $am_cv_proto_iconv" >&5
-$as_echo "
-         $am_cv_proto_iconv" >&6; }
-
-cat >>confdefs.h <<_ACEOF
-#define ICONV_CONST $am_cv_proto_iconv_arg1
-_ACEOF
-
-
-  fi
-
-ac_ext=c
-ac_cpp='$CPP $CPPFLAGS'
-ac_compile='$CC -c $CFLAGS $CPPFLAGS conftest.$ac_ext >&5'
-ac_link='$CC -o conftest$ac_exeext $CFLAGS $CPPFLAGS $LDFLAGS conftest.$ac_ext $LIBS >&5'
-ac_compiler_gnu=$ac_cv_c_compiler_gnu
-
-
-# we need LIBEXT
-LIBEXT=$acl_libext
-
-
-# checks for functions
-
-
-
-  for ac_header in $ac_header_list
-do :
-  as_ac_Header=`$as_echo "ac_cv_header_$ac_header" | $as_tr_sh`
-ac_fn_c_check_header_compile "$LINENO" "$ac_header" "$as_ac_Header" "$ac_includes_default
-"
-if eval test \"x\$"$as_ac_Header"\" = x"yes"; then :
-  cat >>confdefs.h <<_ACEOF
-#define `$as_echo "HAVE_$ac_header" | $as_tr_cpp` 1
-_ACEOF
-
-fi
-
-done
-
-
-
-
-
-
-
-
-for ac_func in getpagesize
-do :
-  ac_fn_c_check_func "$LINENO" "getpagesize" "ac_cv_func_getpagesize"
-if test "x$ac_cv_func_getpagesize" = xyes; then :
-  cat >>confdefs.h <<_ACEOF
-#define HAVE_GETPAGESIZE 1
-_ACEOF
-
-fi
-done
-
-{ $as_echo "$as_me:${as_lineno-$LINENO}: checking for working mmap" >&5
-$as_echo_n "checking for working mmap... " >&6; }
-if ${ac_cv_func_mmap_fixed_mapped+:} false; then :
-  $as_echo_n "(cached) " >&6
-else
-  if test "$cross_compiling" = yes; then :
-  ac_cv_func_mmap_fixed_mapped=no
-else
-  cat confdefs.h - <<_ACEOF >conftest.$ac_ext
-/* end confdefs.h.  */
-$ac_includes_default
-/* malloc might have been renamed as rpl_malloc. */
-#undef malloc
-
-/* Thanks to Mike Haertel and Jim Avera for this test.
-   Here is a matrix of mmap possibilities:
-	mmap private not fixed
-	mmap private fixed at somewhere currently unmapped
-	mmap private fixed at somewhere already mapped
-	mmap shared not fixed
-	mmap shared fixed at somewhere currently unmapped
-	mmap shared fixed at somewhere already mapped
-   For private mappings, we should verify that changes cannot be read()
-   back from the file, nor mmap's back from the file at a different
-   address.  (There have been systems where private was not correctly
-   implemented like the infamous i386 svr4.0, and systems where the
-   VM page cache was not coherent with the file system buffer cache
-   like early versions of FreeBSD and possibly contemporary NetBSD.)
-   For shared mappings, we should conversely verify that changes get
-   propagated back to all the places they're supposed to be.
-
-   Grep wants private fixed already mapped.
-   The main things grep needs to know about mmap are:
-   * does it exist and is it safe to write into the mmap'd area
-   * how to use it (BSD variants)  */
-
-#include <fcntl.h>
-#include <sys/mman.h>
-
-#if !defined STDC_HEADERS && !defined HAVE_STDLIB_H
-char *malloc ();
-#endif
-
-/* This mess was copied from the GNU getpagesize.h.  */
-#ifndef HAVE_GETPAGESIZE
-# ifdef _SC_PAGESIZE
-#  define getpagesize() sysconf(_SC_PAGESIZE)
-# else /* no _SC_PAGESIZE */
-#  ifdef HAVE_SYS_PARAM_H
-#   include <sys/param.h>
-#   ifdef EXEC_PAGESIZE
-#    define getpagesize() EXEC_PAGESIZE
-#   else /* no EXEC_PAGESIZE */
-#    ifdef NBPG
-#     define getpagesize() NBPG * CLSIZE
-#     ifndef CLSIZE
-#      define CLSIZE 1
-#     endif /* no CLSIZE */
-#    else /* no NBPG */
-#     ifdef NBPC
-#      define getpagesize() NBPC
-#     else /* no NBPC */
-#      ifdef PAGESIZE
-#       define getpagesize() PAGESIZE
-#      endif /* PAGESIZE */
-#     endif /* no NBPC */
-#    endif /* no NBPG */
-#   endif /* no EXEC_PAGESIZE */
-#  else /* no HAVE_SYS_PARAM_H */
-#   define getpagesize() 8192	/* punt totally */
-#  endif /* no HAVE_SYS_PARAM_H */
-# endif /* no _SC_PAGESIZE */
-
-#endif /* no HAVE_GETPAGESIZE */
-
-int
-main ()
-{
-  char *data, *data2, *data3;
-  const char *cdata2;
-  int i, pagesize;
-  int fd, fd2;
-
-  pagesize = getpagesize ();
-
-  /* First, make a file with some known garbage in it. */
-  data = (char *) malloc (pagesize);
-  if (!data)
-    return 1;
-  for (i = 0; i < pagesize; ++i)
-    *(data + i) = rand ();
-  umask (0);
-  fd = creat ("conftest.mmap", 0600);
-  if (fd < 0)
-    return 2;
-  if (write (fd, data, pagesize) != pagesize)
-    return 3;
-  close (fd);
-
-  /* Next, check that the tail of a page is zero-filled.  File must have
-     non-zero length, otherwise we risk SIGBUS for entire page.  */
-  fd2 = open ("conftest.txt", O_RDWR | O_CREAT | O_TRUNC, 0600);
-  if (fd2 < 0)
-    return 4;
-  cdata2 = "";
-  if (write (fd2, cdata2, 1) != 1)
-    return 5;
-  data2 = (char *) mmap (0, pagesize, PROT_READ | PROT_WRITE, MAP_SHARED, fd2, 0L);
-  if (data2 == MAP_FAILED)
-    return 6;
-  for (i = 0; i < pagesize; ++i)
-    if (*(data2 + i))
-      return 7;
-  close (fd2);
-  if (munmap (data2, pagesize))
-    return 8;
-
-  /* Next, try to mmap the file at a fixed address which already has
-     something else allocated at it.  If we can, also make sure that
-     we see the same garbage.  */
-  fd = open ("conftest.mmap", O_RDWR);
-  if (fd < 0)
-    return 9;
-  if (data2 != mmap (data2, pagesize, PROT_READ | PROT_WRITE,
-		     MAP_PRIVATE | MAP_FIXED, fd, 0L))
-    return 10;
-  for (i = 0; i < pagesize; ++i)
-    if (*(data + i) != *(data2 + i))
-      return 11;
-
-  /* Finally, make sure that changes to the mapped area do not
-     percolate back to the file as seen by read().  (This is a bug on
-     some variants of i386 svr4.0.)  */
-  for (i = 0; i < pagesize; ++i)
-    *(data2 + i) = *(data2 + i) + 1;
-  data3 = (char *) malloc (pagesize);
-  if (!data3)
-    return 12;
-  if (read (fd, data3, pagesize) != pagesize)
-    return 13;
-  for (i = 0; i < pagesize; ++i)
-    if (*(data + i) != *(data3 + i))
-      return 14;
-  close (fd);
-  return 0;
-}
-_ACEOF
-if ac_fn_c_try_run "$LINENO"; then :
-  ac_cv_func_mmap_fixed_mapped=yes
-else
-  ac_cv_func_mmap_fixed_mapped=no
-fi
-rm -f core *.core core.conftest.* gmon.out bb.out conftest$ac_exeext \
-  conftest.$ac_objext conftest.beam conftest.$ac_ext
-fi
-
-fi
-{ $as_echo "$as_me:${as_lineno-$LINENO}: result: $ac_cv_func_mmap_fixed_mapped" >&5
-$as_echo "$ac_cv_func_mmap_fixed_mapped" >&6; }
-if test $ac_cv_func_mmap_fixed_mapped = yes; then
-
-$as_echo "#define HAVE_MMAP 1" >>confdefs.h
-
-fi
-rm -f conftest.mmap conftest.txt
-
-saved_libs="$LIBS"
-LIBS="$LIBS $LIBC $LIBM"
-ac_fn_c_check_func "$LINENO" "fmod" "ac_cv_func_fmod"
-if test "x$ac_cv_func_fmod" = xyes; then :
-  $as_echo "#define HAVE_FMOD 1" >>confdefs.h
-
-else
-  case " $LIBOBJS " in
-  *" fmod.$ac_objext "* ) ;;
-  *) LIBOBJS="$LIBOBJS fmod.$ac_objext"
- ;;
-esac
-
-fi
-
-ac_fn_c_check_func "$LINENO" "getcwd" "ac_cv_func_getcwd"
-if test "x$ac_cv_func_getcwd" = xyes; then :
-  $as_echo "#define HAVE_GETCWD 1" >>confdefs.h
-
-else
-  case " $LIBOBJS " in
-  *" getcwd.$ac_objext "* ) ;;
-  *) LIBOBJS="$LIBOBJS getcwd.$ac_objext"
- ;;
-esac
-
-fi
-
-ac_fn_c_check_func "$LINENO" "putenv" "ac_cv_func_putenv"
-if test "x$ac_cv_func_putenv" = xyes; then :
-  $as_echo "#define HAVE_PUTENV 1" >>confdefs.h
-
-else
-  case " $LIBOBJS " in
-  *" putenv.$ac_objext "* ) ;;
-  *) LIBOBJS="$LIBOBJS putenv.$ac_objext"
- ;;
-esac
-
-fi
-
-ac_fn_c_check_func "$LINENO" "snprintf" "ac_cv_func_snprintf"
-if test "x$ac_cv_func_snprintf" = xyes; then :
-  $as_echo "#define HAVE_SNPRINTF 1" >>confdefs.h
-
-else
-  case " $LIBOBJS " in
-  *" snprintf.$ac_objext "* ) ;;
-  *) LIBOBJS="$LIBOBJS snprintf.$ac_objext"
- ;;
-esac
-
-fi
-
-ac_fn_c_check_func "$LINENO" "strcasecmp" "ac_cv_func_strcasecmp"
-if test "x$ac_cv_func_strcasecmp" = xyes; then :
-  $as_echo "#define HAVE_STRCASECMP 1" >>confdefs.h
-
-else
-  case " $LIBOBJS " in
-  *" strcasecmp.$ac_objext "* ) ;;
-  *) LIBOBJS="$LIBOBJS strcasecmp.$ac_objext"
- ;;
-esac
-
-fi
-
-ac_fn_c_check_func "$LINENO" "strerror" "ac_cv_func_strerror"
-if test "x$ac_cv_func_strerror" = xyes; then :
-  $as_echo "#define HAVE_STRERROR 1" >>confdefs.h
-
-else
-  case " $LIBOBJS " in
-  *" strerror.$ac_objext "* ) ;;
-  *) LIBOBJS="$LIBOBJS strerror.$ac_objext"
- ;;
-esac
-
-fi
-
-ac_fn_c_check_func "$LINENO" "strncasecmp" "ac_cv_func_strncasecmp"
-if test "x$ac_cv_func_strncasecmp" = xyes; then :
-  $as_echo "#define HAVE_STRNCASECMP 1" >>confdefs.h
-
-else
-  case " $LIBOBJS " in
-  *" strncasecmp.$ac_objext "* ) ;;
-  *) LIBOBJS="$LIBOBJS strncasecmp.$ac_objext"
- ;;
-esac
-
-fi
-
-ac_fn_c_check_func "$LINENO" "strtol" "ac_cv_func_strtol"
-if test "x$ac_cv_func_strtol" = xyes; then :
-  $as_echo "#define HAVE_STRTOL 1" >>confdefs.h
-
-else
-  case " $LIBOBJS " in
-  *" strtol.$ac_objext "* ) ;;
-  *) LIBOBJS="$LIBOBJS strtol.$ac_objext"
- ;;
-esac
-
-fi
-
-
-# vsnprintf is in the same source file as snprintf
-for ac_func in vsnprintf
-do :
-  ac_fn_c_check_func "$LINENO" "vsnprintf" "ac_cv_func_vsnprintf"
-if test "x$ac_cv_func_vsnprintf" = xyes; then :
-  cat >>confdefs.h <<_ACEOF
-#define HAVE_VSNPRINTF 1
-_ACEOF
-
-else
-  case " $LIBOBJS " in
-  *" snprintf.$ac_objext "* ) ;;
-  *) LIBOBJS="$LIBOBJS snprintf.$ac_objext"
- ;;
-esac
-
-fi
-done
-
-LIBS="$saved_libs"
-for ac_func in gettimeofday isatty kill rename setlocale strsep
-do :
-  as_ac_var=`$as_echo "ac_cv_func_$ac_func" | $as_tr_sh`
-ac_fn_c_check_func "$LINENO" "$ac_func" "$as_ac_var"
-if eval test \"x\$"$as_ac_var"\" = x"yes"; then :
-  cat >>confdefs.h <<_ACEOF
-#define `$as_echo "HAVE_$ac_func" | $as_tr_cpp` 1
-_ACEOF
-
-fi
-done
-
-{ $as_echo "$as_me:${as_lineno-$LINENO}: checking for mkstemp" >&5
-$as_echo_n "checking for mkstemp... " >&6; }
-   ac_ext=cpp
-ac_cpp='$CXXCPP $CPPFLAGS'
-ac_compile='$CXX -c $CXXFLAGS $CPPFLAGS conftest.$ac_ext >&5'
-ac_link='$CXX -o conftest$ac_exeext $CXXFLAGS $CPPFLAGS $LDFLAGS conftest.$ac_ext $LIBS >&5'
-ac_compiler_gnu=$ac_cv_cxx_compiler_gnu
-
-
-   cat confdefs.h - <<_ACEOF >conftest.$ac_ext
-/* end confdefs.h.  */
-
-
-
-#include <stdlib.h>
-#include <unistd.h>
-int (*f) (char *);
-
-
-int
-main ()
-{
-
-
-f = mkstemp;
-
-
-  ;
-  return 0;
-}
-
-_ACEOF
-if ac_fn_cxx_try_link "$LINENO"; then :
-  { $as_echo "$as_me:${as_lineno-$LINENO}: result: yes" >&5
-$as_echo "yes" >&6; }
-
-$as_echo "#define HAVE_MKSTEMP 1" >>confdefs.h
-
-else
-  { $as_echo "$as_me:${as_lineno-$LINENO}: result: no" >&5
-$as_echo "no" >&6; }
-      case " $LIBOBJS " in
-  *" mkstemp.$ac_objext "* ) ;;
-  *) LIBOBJS="$LIBOBJS mkstemp.$ac_objext"
- ;;
-esac
-
-fi
-rm -f core conftest.err conftest.$ac_objext \
-    conftest$ac_exeext conftest.$ac_ext
-   ac_ext=c
-ac_cpp='$CPP $CPPFLAGS'
-ac_compile='$CC -c $CFLAGS $CPPFLAGS conftest.$ac_ext >&5'
-ac_link='$CC -o conftest$ac_exeext $CFLAGS $CPPFLAGS $LDFLAGS conftest.$ac_ext $LIBS >&5'
-ac_compiler_gnu=$ac_cv_c_compiler_gnu
-
-ac_fn_c_check_decl "$LINENO" "sys_siglist" "ac_cv_have_decl_sys_siglist" "$ac_includes_default"
-if test "x$ac_cv_have_decl_sys_siglist" = xyes; then :
-  ac_have_decl=1
-else
-  ac_have_decl=0
-fi
-
-cat >>confdefs.h <<_ACEOF
-#define HAVE_DECL_SYS_SIGLIST $ac_have_decl
-_ACEOF
-ac_fn_c_check_decl "$LINENO" "getc_unlocked" "ac_cv_have_decl_getc_unlocked" "$ac_includes_default"
-if test "x$ac_cv_have_decl_getc_unlocked" = xyes; then :
-  ac_have_decl=1
-else
-  ac_have_decl=0
-fi
-
-cat >>confdefs.h <<_ACEOF
-#define HAVE_DECL_GETC_UNLOCKED $ac_have_decl
-_ACEOF
-
-
-  { $as_echo "$as_me:${as_lineno-$LINENO}: checking for nl_langinfo and CODESET" >&5
-$as_echo_n "checking for nl_langinfo and CODESET... " >&6; }
-if ${am_cv_langinfo_codeset+:} false; then :
-  $as_echo_n "(cached) " >&6
-else
-  cat confdefs.h - <<_ACEOF >conftest.$ac_ext
-/* end confdefs.h.  */
-#include <langinfo.h>
-int
-main ()
-{
-char* cs = nl_langinfo(CODESET); return !cs;
-  ;
-  return 0;
-}
-_ACEOF
-if ac_fn_c_try_link "$LINENO"; then :
-  am_cv_langinfo_codeset=yes
-else
-  am_cv_langinfo_codeset=no
-fi
-rm -f core conftest.err conftest.$ac_objext \
-    conftest$ac_exeext conftest.$ac_ext
-
-fi
-{ $as_echo "$as_me:${as_lineno-$LINENO}: result: $am_cv_langinfo_codeset" >&5
-$as_echo "$am_cv_langinfo_codeset" >&6; }
-  if test $am_cv_langinfo_codeset = yes; then
-
-$as_echo "#define HAVE_LANGINFO_CODESET 1" >>confdefs.h
-
-  fi
-
-
-# checks for compiler characteristics
-ac_ext=cpp
-ac_cpp='$CXXCPP $CPPFLAGS'
-ac_compile='$CXX -c $CXXFLAGS $CPPFLAGS conftest.$ac_ext >&5'
-ac_link='$CXX -o conftest$ac_exeext $CXXFLAGS $CPPFLAGS $LDFLAGS conftest.$ac_ext $LIBS >&5'
-ac_compiler_gnu=$ac_cv_cxx_compiler_gnu
-
-   { $as_echo "$as_me:${as_lineno-$LINENO}: checking whether ANSI array delete syntax is supported" >&5
-$as_echo_n "checking whether ANSI array delete syntax is supported... " >&6; }
-   cat confdefs.h - <<_ACEOF >conftest.$ac_ext
-/* end confdefs.h.  */
-
-
-int
-main ()
-{
-
-
-char *p = new char[5];
-delete [] p;
-
-
-  ;
-  return 0;
-}
-
-_ACEOF
-if ac_fn_cxx_try_compile "$LINENO"; then :
-  { $as_echo "$as_me:${as_lineno-$LINENO}: result: yes" >&5
-$as_echo "yes" >&6; }
-else
-  { $as_echo "$as_me:${as_lineno-$LINENO}: result: no" >&5
-$as_echo "no" >&6; }
-
-$as_echo "#define ARRAY_DELETE_NEEDS_SIZE 1" >>confdefs.h
-
-fi
-rm -f core conftest.err conftest.$ac_objext conftest.$ac_ext
-   ac_ext=c
-ac_cpp='$CPP $CPPFLAGS'
-ac_compile='$CC -c $CFLAGS $CPPFLAGS conftest.$ac_ext >&5'
-ac_link='$CC -o conftest$ac_exeext $CFLAGS $CPPFLAGS $LDFLAGS conftest.$ac_ext $LIBS >&5'
-ac_compiler_gnu=$ac_cv_c_compiler_gnu
-
-ac_ext=cpp
-ac_cpp='$CXXCPP $CPPFLAGS'
-ac_compile='$CXX -c $CXXFLAGS $CPPFLAGS conftest.$ac_ext >&5'
-ac_link='$CXX -o conftest$ac_exeext $CXXFLAGS $CPPFLAGS $LDFLAGS conftest.$ac_ext $LIBS >&5'
-ac_compiler_gnu=$ac_cv_cxx_compiler_gnu
-
-   { $as_echo "$as_me:${as_lineno-$LINENO}: checking traditional preprocessor" >&5
-$as_echo_n "checking traditional preprocessor... " >&6; }
-   cat confdefs.h - <<_ACEOF >conftest.$ac_ext
-/* end confdefs.h.  */
-
-
-
-#define name2(a, b) a/**/b
-
-
-int
-main ()
-{
-
-
-int name2(foo, bar);
-
-
-  ;
-  return 0;
-}
-
-_ACEOF
-if ac_fn_cxx_try_compile "$LINENO"; then :
-  { $as_echo "$as_me:${as_lineno-$LINENO}: result: yes" >&5
-$as_echo "yes" >&6; }
-
-$as_echo "#define TRADITIONAL_CPP 1" >>confdefs.h
-
-else
-  { $as_echo "$as_me:${as_lineno-$LINENO}: result: no" >&5
-$as_echo "no" >&6; }
-fi
-rm -f core conftest.err conftest.$ac_objext conftest.$ac_ext
-   ac_ext=c
-ac_cpp='$CPP $CPPFLAGS'
-ac_compile='$CC -c $CFLAGS $CPPFLAGS conftest.$ac_ext >&5'
-ac_link='$CC -o conftest$ac_exeext $CFLAGS $CPPFLAGS $LDFLAGS conftest.$ac_ext $LIBS >&5'
-ac_compiler_gnu=$ac_cv_c_compiler_gnu
-
-
-# checks for operating system services
-{ $as_echo "$as_me:${as_lineno-$LINENO}: checking w_coredump" >&5
-$as_echo_n "checking w_coredump... " >&6; }
-   if test "$cross_compiling" = yes; then :
-  { $as_echo "$as_me:${as_lineno-$LINENO}: result: no" >&5
-$as_echo "no" >&6; }
-else
-  cat confdefs.h - <<_ACEOF >conftest.$ac_ext
-/* end confdefs.h.  */
-
-
-
-#include <sys/types.h>
-#include <sys/wait.h>
-
-
-int
-main ()
-{
-
-
-main()
-{
-#ifdef WCOREFLAG
-  exit(1);
-#else
-  int i = 0;
-  ((union wait *)&i)->w_coredump = 1;
-  exit(i != 0200);
-#endif
-}
-
-
-  ;
-  return 0;
-}
-
-_ACEOF
-if ac_fn_c_try_run "$LINENO"; then :
-  { $as_echo "$as_me:${as_lineno-$LINENO}: result: yes" >&5
-$as_echo "yes" >&6; }
-
-$as_echo "#define WCOREFLAG 0200" >>confdefs.h
-
-else
-  { $as_echo "$as_me:${as_lineno-$LINENO}: result: no" >&5
-$as_echo "no" >&6; }
-fi
-rm -f core *.core core.conftest.* gmon.out bb.out conftest$ac_exeext \
-  conftest.$ac_objext conftest.beam conftest.$ac_ext
-fi
-
-
-# other random stuff
-{ $as_echo "$as_me:${as_lineno-$LINENO}: checking default value for grops -b option" >&5
-$as_echo_n "checking default value for grops -b option... " >&6; }
-   test -n "${BROKEN_SPOOLER_FLAGS}" || BROKEN_SPOOLER_FLAGS=0
-   { $as_echo "$as_me:${as_lineno-$LINENO}: result: $BROKEN_SPOOLER_FLAGS" >&5
-$as_echo "$BROKEN_SPOOLER_FLAGS" >&6; }
-
-{ $as_echo "$as_me:${as_lineno-$LINENO}: checking default paper size" >&5
-$as_echo_n "checking default paper size... " >&6; }
-   groff_prefix=$prefix
-   test "x$prefix" = "xNONE" && groff_prefix=$ac_default_prefix
-   if test -z "$PAGE"; then
-     descfile=
-     if test -r $groff_prefix/share/groff/font/devps/DESC; then
-       descfile=$groff_prefix/share/groff/font/devps/DESC
-     elif test -r $groff_prefix/lib/groff/font/devps/DESC; then
-       descfile=$groff_prefix/lib/groff/font/devps/DESC
-     else
-       for f in $groff_prefix/share/groff/*/font/devps/DESC; do
-	 if test -r $f; then
-	   descfile=$f
-	   break
-	 fi
-       done
-     fi
-
-     if test -n "$descfile"; then
-       if grep '^paperlength[	 ]\+841890' $descfile >/dev/null 2>&1; then
-	 PAGE=A4
-       elif grep '^papersize[	 ]\+[aA]4' $descfile >/dev/null 2>&1; then
-	 PAGE=A4
-       fi
-     fi
-   fi
-
-   if test -z "$PAGE"; then
-     dom=`awk '($1 == "dom" || $1 == "search") { print $2; exit}' \
-	 /etc/resolv.conf 2>/dev/null`
-     if test -z "$dom"; then
-       dom=`(domainname) 2>/dev/null | tr -d '+'`
-       if test -z "$dom" \
-	  || test "$dom" = '(none)'; then
-	 dom=`(hostname) 2>/dev/null | grep '\.'`
-       fi
-     fi
-     # If the top-level domain is two letters and it's not `us' or `ca'
-     # then they probably use A4 paper.
-     case "$dom" in
-     *.[Uu][Ss]|*.[Cc][Aa])
-       ;;
-     *.[A-Za-z][A-Za-z])
-       PAGE=A4 ;;
-     esac
-   fi
-
-   test -n "$PAGE" || PAGE=letter
-   if test "x$PAGE" = "xA4"; then
-
-$as_echo "#define PAGEA4 1" >>confdefs.h
-
-   fi
-   { $as_echo "$as_me:${as_lineno-$LINENO}: result: $PAGE" >&5
-$as_echo "$PAGE" >&6; }
-
-{ $as_echo "$as_me:${as_lineno-$LINENO}: checking for existing troff installation" >&5
-$as_echo_n "checking for existing troff installation... " >&6; }
-   if test "x`(echo .tm '|n(.g' | tr '|' '\\\\' | troff -z -i 2>&1) 2>/dev/null`" = x0; then
-     { $as_echo "$as_me:${as_lineno-$LINENO}: result: yes" >&5
-$as_echo "yes" >&6; }
-     g=g
-   else
-     { $as_echo "$as_me:${as_lineno-$LINENO}: result: no" >&5
-$as_echo "no" >&6; }
-     g=
-   fi
-
-{ $as_echo "$as_me:${as_lineno-$LINENO}: checking for prefix of system macro packages" >&5
-$as_echo_n "checking for prefix of system macro packages... " >&6; }
-   sys_tmac_prefix=
-   sys_tmac_file_prefix=
-   for d in /usr/share/lib/tmac /usr/lib/tmac; do
-     for t in "" tmac.; do
-       for m in an s m; do
-	 f=$d/$t$m
-	 if test -z "$sys_tmac_prefix" \
-	    && test -f $f \
-	    && grep '^\.if' $f >/dev/null 2>&1; then
-	   sys_tmac_prefix=$d/$t
-	   sys_tmac_file_prefix=$t
-	 fi
-       done
-     done
-   done
-   { $as_echo "$as_me:${as_lineno-$LINENO}: result: $sys_tmac_prefix" >&5
-$as_echo "$sys_tmac_prefix" >&6; }
-
-
-   { $as_echo "$as_me:${as_lineno-$LINENO}: checking which system macro packages should be made available" >&5
-$as_echo_n "checking which system macro packages should be made available... " >&6; }
-   tmac_wrap=
-   if test "x$sys_tmac_file_prefix" = "xtmac."; then
-     for f in $sys_tmac_prefix*; do
-       suff=`echo $f | sed -e "s;$sys_tmac_prefix;;"`
-       case "$suff" in
-       e)
-	 ;;
-       *)
-	 grep "Copyright.*Free Software Foundation" $f >/dev/null \
-	      || tmac_wrap="$tmac_wrap $suff" ;;
-       esac
-     done
-   elif test -n "$sys_tmac_prefix"; then
-     files=`echo $sys_tmac_prefix*`
-     grep "\\.so" $files >conftest.sol
-     for f in $files; do
-       case "$f" in
-       ${sys_tmac_prefix}e)
-	 ;;
-       *.me)
-	 ;;
-       */ms.*)
-	 ;;
-       *)
-	 b=`basename $f`
-	 if grep "\\.so.*/$b\$" conftest.sol >/dev/null \
-	    || grep -l "Copyright.*Free Software Foundation" $f >/dev/null; then
-	   :
-	 else
-	   suff=`echo $f | sed -e "s;$sys_tmac_prefix;;"`
-	   case "$suff" in
-	   tmac.*)
-	     ;;
-	   *)
-	     tmac_wrap="$tmac_wrap $suff" ;;
-	   esac
-	 fi
-       esac
-     done
-     rm -f conftest.sol
-   fi
-   { $as_echo "$as_me:${as_lineno-$LINENO}: result: $tmac_wrap" >&5
-$as_echo "$tmac_wrap" >&6; }
-
-{ $as_echo "$as_me:${as_lineno-$LINENO}: checking separator character to use in groff search paths" >&5
-$as_echo_n "checking separator character to use in groff search paths... " >&6; }
-   cp ${srcdir}/src/include/nonposix.h conftest.h
-   cat confdefs.h - <<_ACEOF >conftest.$ac_ext
-/* end confdefs.h.  */
-
-
-
-#include <ctype.h>
-#include "conftest.h"
-
-
-int
-main ()
-{
-
-
-#if PATH_SEP_CHAR == ';'
-make an error "Path separator is ';'"
-#endif
-
-
-  ;
-  return 0;
-}
-
-_ACEOF
-if ac_fn_c_try_compile "$LINENO"; then :
-  GROFF_PATH_SEPARATOR=":"
-else
-  GROFF_PATH_SEPARATOR=";"
-fi
-rm -f core conftest.err conftest.$ac_objext conftest.$ac_ext
-   { $as_echo "$as_me:${as_lineno-$LINENO}: result: $GROFF_PATH_SEPARATOR" >&5
-$as_echo "$GROFF_PATH_SEPARATOR" >&6; }
-
-
-# Check whether --with-alt-gs was given.
-if test "${with_alt_gs+set}" = set; then :
-  withval=$with_alt_gs; ALT_GHOSTSCRIPT_PROGS="$withval"
-else
-  ALT_GHOSTSCRIPT_PROGS="gs gswin32c gsos2"
-fi
-
-
-
-
-# Check whether --with-gs was given.
-if test "${with_gs+set}" = set; then :
-  withval=$with_gs; GHOSTSCRIPT=$withval
-else
-  if test -n "$ac_tool_prefix"; then
-  for ac_prog in $ALT_GHOSTSCRIPT_PROGS
-  do
-    # Extract the first word of "$ac_tool_prefix$ac_prog", so it can be a program name with args.
-set dummy $ac_tool_prefix$ac_prog; ac_word=$2
-{ $as_echo "$as_me:${as_lineno-$LINENO}: checking for $ac_word" >&5
-$as_echo_n "checking for $ac_word... " >&6; }
-if ${ac_cv_prog_GHOSTSCRIPT+:} false; then :
-  $as_echo_n "(cached) " >&6
-else
-  if test -n "$GHOSTSCRIPT"; then
-  ac_cv_prog_GHOSTSCRIPT="$GHOSTSCRIPT" # Let the user override the test.
-else
-as_save_IFS=$IFS; IFS=$PATH_SEPARATOR
-for as_dir in $PATH
-do
-  IFS=$as_save_IFS
-  test -z "$as_dir" && as_dir=.
-    for ac_exec_ext in '' $ac_executable_extensions; do
-  if as_fn_executable_p "$as_dir/$ac_word$ac_exec_ext"; then
-    ac_cv_prog_GHOSTSCRIPT="$ac_tool_prefix$ac_prog"
-    $as_echo "$as_me:${as_lineno-$LINENO}: found $as_dir/$ac_word$ac_exec_ext" >&5
-    break 2
-  fi
-done
-  done
-IFS=$as_save_IFS
-
-fi
-fi
-GHOSTSCRIPT=$ac_cv_prog_GHOSTSCRIPT
-if test -n "$GHOSTSCRIPT"; then
-  { $as_echo "$as_me:${as_lineno-$LINENO}: result: $GHOSTSCRIPT" >&5
-$as_echo "$GHOSTSCRIPT" >&6; }
-else
-  { $as_echo "$as_me:${as_lineno-$LINENO}: result: no" >&5
-$as_echo "no" >&6; }
-fi
-
-
-    test -n "$GHOSTSCRIPT" && break
-  done
-fi
-if test -z "$GHOSTSCRIPT"; then
-  ac_ct_GHOSTSCRIPT=$GHOSTSCRIPT
-  for ac_prog in $ALT_GHOSTSCRIPT_PROGS
-do
-  # Extract the first word of "$ac_prog", so it can be a program name with args.
-set dummy $ac_prog; ac_word=$2
-{ $as_echo "$as_me:${as_lineno-$LINENO}: checking for $ac_word" >&5
-$as_echo_n "checking for $ac_word... " >&6; }
-if ${ac_cv_prog_ac_ct_GHOSTSCRIPT+:} false; then :
-  $as_echo_n "(cached) " >&6
-else
-  if test -n "$ac_ct_GHOSTSCRIPT"; then
-  ac_cv_prog_ac_ct_GHOSTSCRIPT="$ac_ct_GHOSTSCRIPT" # Let the user override the test.
-else
-as_save_IFS=$IFS; IFS=$PATH_SEPARATOR
-for as_dir in $PATH
-do
-  IFS=$as_save_IFS
-  test -z "$as_dir" && as_dir=.
-    for ac_exec_ext in '' $ac_executable_extensions; do
-  if as_fn_executable_p "$as_dir/$ac_word$ac_exec_ext"; then
-    ac_cv_prog_ac_ct_GHOSTSCRIPT="$ac_prog"
-    $as_echo "$as_me:${as_lineno-$LINENO}: found $as_dir/$ac_word$ac_exec_ext" >&5
-    break 2
-  fi
-done
-  done
-IFS=$as_save_IFS
-
-fi
-fi
-ac_ct_GHOSTSCRIPT=$ac_cv_prog_ac_ct_GHOSTSCRIPT
-if test -n "$ac_ct_GHOSTSCRIPT"; then
-  { $as_echo "$as_me:${as_lineno-$LINENO}: result: $ac_ct_GHOSTSCRIPT" >&5
-$as_echo "$ac_ct_GHOSTSCRIPT" >&6; }
-else
-  { $as_echo "$as_me:${as_lineno-$LINENO}: result: no" >&5
-$as_echo "no" >&6; }
-fi
-
-
-  test -n "$ac_ct_GHOSTSCRIPT" && break
-done
-
-  if test "x$ac_ct_GHOSTSCRIPT" = x; then
-    GHOSTSCRIPT="missing"
-  else
-    case $cross_compiling:$ac_tool_warned in
-yes:)
-{ $as_echo "$as_me:${as_lineno-$LINENO}: WARNING: using cross tools not prefixed with host triplet" >&5
-$as_echo "$as_me: WARNING: using cross tools not prefixed with host triplet" >&2;}
-ac_tool_warned=yes ;;
-esac
-    GHOSTSCRIPT=$ac_ct_GHOSTSCRIPT
-  fi
-fi
-
-fi
-
-   test "$GHOSTSCRIPT" = "no" && GHOSTSCRIPT=missing
-make_htmldoc=
-   make_install_htmldoc=
-   make_uninstall_htmldoc=
-   make_htmlexamples=
-   make_install_htmlexamples=
-   make_uninstall_htmlexamples=
-
-
-   missing=
-   # Extract the first word of "pnmcut", so it can be a program name with args.
-set dummy pnmcut; ac_word=$2
-{ $as_echo "$as_me:${as_lineno-$LINENO}: checking for $ac_word" >&5
-$as_echo_n "checking for $ac_word... " >&6; }
-if ${ac_cv_prog_pnmcut+:} false; then :
-  $as_echo_n "(cached) " >&6
-else
-  if test -n "$pnmcut"; then
-  ac_cv_prog_pnmcut="$pnmcut" # Let the user override the test.
-else
-as_save_IFS=$IFS; IFS=$PATH_SEPARATOR
-for as_dir in $PATH
-do
-  IFS=$as_save_IFS
-  test -z "$as_dir" && as_dir=.
-    for ac_exec_ext in '' $ac_executable_extensions; do
-  if as_fn_executable_p "$as_dir/$ac_word$ac_exec_ext"; then
-    ac_cv_prog_pnmcut="found"
-    $as_echo "$as_me:${as_lineno-$LINENO}: found $as_dir/$ac_word$ac_exec_ext" >&5
-    break 2
-  fi
-done
-  done
-IFS=$as_save_IFS
-
-  test -z "$ac_cv_prog_pnmcut" && ac_cv_prog_pnmcut="missing"
-fi
-fi
-pnmcut=$ac_cv_prog_pnmcut
-if test -n "$pnmcut"; then
-  { $as_echo "$as_me:${as_lineno-$LINENO}: result: $pnmcut" >&5
-$as_echo "$pnmcut" >&6; }
-else
-  { $as_echo "$as_me:${as_lineno-$LINENO}: result: no" >&5
-$as_echo "no" >&6; }
-fi
-
-
-      if test $pnmcut = missing; then
-	missing="$missing \`pnmcut'"
-      fi;# Extract the first word of "pnmcrop", so it can be a program name with args.
-set dummy pnmcrop; ac_word=$2
-{ $as_echo "$as_me:${as_lineno-$LINENO}: checking for $ac_word" >&5
-$as_echo_n "checking for $ac_word... " >&6; }
-if ${ac_cv_prog_pnmcrop+:} false; then :
-  $as_echo_n "(cached) " >&6
-else
-  if test -n "$pnmcrop"; then
-  ac_cv_prog_pnmcrop="$pnmcrop" # Let the user override the test.
-else
-as_save_IFS=$IFS; IFS=$PATH_SEPARATOR
-for as_dir in $PATH
-do
-  IFS=$as_save_IFS
-  test -z "$as_dir" && as_dir=.
-    for ac_exec_ext in '' $ac_executable_extensions; do
-  if as_fn_executable_p "$as_dir/$ac_word$ac_exec_ext"; then
-    ac_cv_prog_pnmcrop="found"
-    $as_echo "$as_me:${as_lineno-$LINENO}: found $as_dir/$ac_word$ac_exec_ext" >&5
-    break 2
-  fi
-done
-  done
-IFS=$as_save_IFS
-
-  test -z "$ac_cv_prog_pnmcrop" && ac_cv_prog_pnmcrop="missing"
-fi
-fi
-pnmcrop=$ac_cv_prog_pnmcrop
-if test -n "$pnmcrop"; then
-  { $as_echo "$as_me:${as_lineno-$LINENO}: result: $pnmcrop" >&5
-$as_echo "$pnmcrop" >&6; }
-else
-  { $as_echo "$as_me:${as_lineno-$LINENO}: result: no" >&5
-$as_echo "no" >&6; }
-fi
-
-
-      if test $pnmcrop = missing; then
-	missing="$missing \`pnmcrop'"
-      fi;# Extract the first word of "pnmtopng", so it can be a program name with args.
-set dummy pnmtopng; ac_word=$2
-{ $as_echo "$as_me:${as_lineno-$LINENO}: checking for $ac_word" >&5
-$as_echo_n "checking for $ac_word... " >&6; }
-if ${ac_cv_prog_pnmtopng+:} false; then :
-  $as_echo_n "(cached) " >&6
-else
-  if test -n "$pnmtopng"; then
-  ac_cv_prog_pnmtopng="$pnmtopng" # Let the user override the test.
-else
-as_save_IFS=$IFS; IFS=$PATH_SEPARATOR
-for as_dir in $PATH
-do
-  IFS=$as_save_IFS
-  test -z "$as_dir" && as_dir=.
-    for ac_exec_ext in '' $ac_executable_extensions; do
-  if as_fn_executable_p "$as_dir/$ac_word$ac_exec_ext"; then
-    ac_cv_prog_pnmtopng="found"
-    $as_echo "$as_me:${as_lineno-$LINENO}: found $as_dir/$ac_word$ac_exec_ext" >&5
-    break 2
-  fi
-done
-  done
-IFS=$as_save_IFS
-
-  test -z "$ac_cv_prog_pnmtopng" && ac_cv_prog_pnmtopng="missing"
-fi
-fi
-pnmtopng=$ac_cv_prog_pnmtopng
-if test -n "$pnmtopng"; then
-  { $as_echo "$as_me:${as_lineno-$LINENO}: result: $pnmtopng" >&5
-$as_echo "$pnmtopng" >&6; }
-else
-  { $as_echo "$as_me:${as_lineno-$LINENO}: result: no" >&5
-$as_echo "no" >&6; }
-fi
-
-
-      if test $pnmtopng = missing; then
-	missing="$missing \`pnmtopng'"
-      fi;# Extract the first word of "psselect", so it can be a program name with args.
-set dummy psselect; ac_word=$2
-{ $as_echo "$as_me:${as_lineno-$LINENO}: checking for $ac_word" >&5
-$as_echo_n "checking for $ac_word... " >&6; }
-if ${ac_cv_prog_psselect+:} false; then :
-  $as_echo_n "(cached) " >&6
-else
-  if test -n "$psselect"; then
-  ac_cv_prog_psselect="$psselect" # Let the user override the test.
-else
-as_save_IFS=$IFS; IFS=$PATH_SEPARATOR
-for as_dir in $PATH
-do
-  IFS=$as_save_IFS
-  test -z "$as_dir" && as_dir=.
-    for ac_exec_ext in '' $ac_executable_extensions; do
-  if as_fn_executable_p "$as_dir/$ac_word$ac_exec_ext"; then
-    ac_cv_prog_psselect="found"
-    $as_echo "$as_me:${as_lineno-$LINENO}: found $as_dir/$ac_word$ac_exec_ext" >&5
-    break 2
-  fi
-done
-  done
-IFS=$as_save_IFS
-
-  test -z "$ac_cv_prog_psselect" && ac_cv_prog_psselect="missing"
-fi
-fi
-psselect=$ac_cv_prog_psselect
-if test -n "$psselect"; then
-  { $as_echo "$as_me:${as_lineno-$LINENO}: result: $psselect" >&5
-$as_echo "$psselect" >&6; }
-else
-  { $as_echo "$as_me:${as_lineno-$LINENO}: result: no" >&5
-$as_echo "no" >&6; }
-fi
-
-
-      if test $psselect = missing; then
-	missing="$missing \`psselect'"
-      fi;# Extract the first word of "pnmtops", so it can be a program name with args.
-set dummy pnmtops; ac_word=$2
-{ $as_echo "$as_me:${as_lineno-$LINENO}: checking for $ac_word" >&5
-$as_echo_n "checking for $ac_word... " >&6; }
-if ${ac_cv_prog_pnmtops+:} false; then :
-  $as_echo_n "(cached) " >&6
-else
-  if test -n "$pnmtops"; then
-  ac_cv_prog_pnmtops="$pnmtops" # Let the user override the test.
-else
-as_save_IFS=$IFS; IFS=$PATH_SEPARATOR
-for as_dir in $PATH
-do
-  IFS=$as_save_IFS
-  test -z "$as_dir" && as_dir=.
-    for ac_exec_ext in '' $ac_executable_extensions; do
-  if as_fn_executable_p "$as_dir/$ac_word$ac_exec_ext"; then
-    ac_cv_prog_pnmtops="found"
-    $as_echo "$as_me:${as_lineno-$LINENO}: found $as_dir/$ac_word$ac_exec_ext" >&5
-    break 2
-  fi
-done
-  done
-IFS=$as_save_IFS
-
-  test -z "$ac_cv_prog_pnmtops" && ac_cv_prog_pnmtops="missing"
-fi
-fi
-pnmtops=$ac_cv_prog_pnmtops
-if test -n "$pnmtops"; then
-  { $as_echo "$as_me:${as_lineno-$LINENO}: result: $pnmtops" >&5
-$as_echo "$pnmtops" >&6; }
-else
-  { $as_echo "$as_me:${as_lineno-$LINENO}: result: no" >&5
-$as_echo "no" >&6; }
-fi
-
-
-      if test $pnmtops = missing; then
-	missing="$missing \`pnmtops'"
-      fi;
-
-   test "$GHOSTSCRIPT" = "missing" && missing="$missing \`gs'"
-
-   if test -z "$missing"; then
-     if test $docadd_html = yes; then
-       make_htmldoc=htmldoc
-       make_install_htmldoc=install_htmldoc
-       make_uninstall_htmldoc=uninstall_htmldoc
-       if test $docadd_examples = yes; then
-         make_htmlexamples=html_examples
-         make_install_htmlexamples=install_htmlexamples
-         make_uninstall_htmlexamples=uninstall_htmlexamples
-       fi
-     fi
-   else
-     plural=`set $missing; test $# -gt 1 && echo s`
-     missing=`set $missing
-       missing=""
-       while test $# -gt 0
-	 do
-	   case $# in
-	     1) missing="$missing$1" ;;
-	     2) missing="$missing$1 and " ;;
-	     *) missing="$missing$1, " ;;
-	   esac
-	   shift
-	 done
-	 echo $missing`
-
-     docnote=.
-     test $docadd_html = yes && docnote=';
-  therefore, it will neither be possible to prepare, nor to install,
-  documentation in HTML format.'
-
-     { $as_echo "$as_me:${as_lineno-$LINENO}: WARNING: missing program$plural:
-
-  The program$plural
-     $missing
-  cannot be found in the PATH.
-  Consequently, groff's HTML backend (grohtml) will not work properly$docnote
-     " >&5
-$as_echo "$as_me: WARNING: missing program$plural:
-
-  The program$plural
-     $missing
-  cannot be found in the PATH.
-  Consequently, groff's HTML backend (grohtml) will not work properly$docnote
-     " >&2;}
-     doc_dist_target_ok=no
-   fi
-
-
-
-
-
-
-
-# Check whether --with-alt-awk was given.
-if test "${with_alt_awk+set}" = set; then :
-  withval=$with_alt_awk; ALT_AWK_PROGS="$withval"
-else
-  ALT_AWK_PROGS="gawk mawk nawk awk"
-fi
-
-
-
-
-# Check whether --with-awk was given.
-if test "${with_awk+set}" = set; then :
-  withval=$with_awk; AWK=$withval
-else
-  if test -n "$ac_tool_prefix"; then
-  for ac_prog in $ALT_AWK_PROGS
-  do
-    # Extract the first word of "$ac_tool_prefix$ac_prog", so it can be a program name with args.
-set dummy $ac_tool_prefix$ac_prog; ac_word=$2
-{ $as_echo "$as_me:${as_lineno-$LINENO}: checking for $ac_word" >&5
-$as_echo_n "checking for $ac_word... " >&6; }
-if ${ac_cv_prog_AWK+:} false; then :
-  $as_echo_n "(cached) " >&6
-else
-  if test -n "$AWK"; then
-  ac_cv_prog_AWK="$AWK" # Let the user override the test.
-else
-as_save_IFS=$IFS; IFS=$PATH_SEPARATOR
-for as_dir in $PATH
-do
-  IFS=$as_save_IFS
-  test -z "$as_dir" && as_dir=.
-    for ac_exec_ext in '' $ac_executable_extensions; do
-  if as_fn_executable_p "$as_dir/$ac_word$ac_exec_ext"; then
-    ac_cv_prog_AWK="$ac_tool_prefix$ac_prog"
-    $as_echo "$as_me:${as_lineno-$LINENO}: found $as_dir/$ac_word$ac_exec_ext" >&5
-    break 2
-  fi
-done
-  done
-IFS=$as_save_IFS
-
-fi
-fi
-AWK=$ac_cv_prog_AWK
-if test -n "$AWK"; then
-  { $as_echo "$as_me:${as_lineno-$LINENO}: result: $AWK" >&5
-$as_echo "$AWK" >&6; }
-else
-  { $as_echo "$as_me:${as_lineno-$LINENO}: result: no" >&5
-$as_echo "no" >&6; }
-fi
-
-
-    test -n "$AWK" && break
-  done
-fi
-if test -z "$AWK"; then
-  ac_ct_AWK=$AWK
-  for ac_prog in $ALT_AWK_PROGS
-do
-  # Extract the first word of "$ac_prog", so it can be a program name with args.
-set dummy $ac_prog; ac_word=$2
-{ $as_echo "$as_me:${as_lineno-$LINENO}: checking for $ac_word" >&5
-$as_echo_n "checking for $ac_word... " >&6; }
-if ${ac_cv_prog_ac_ct_AWK+:} false; then :
-  $as_echo_n "(cached) " >&6
-else
-  if test -n "$ac_ct_AWK"; then
-  ac_cv_prog_ac_ct_AWK="$ac_ct_AWK" # Let the user override the test.
-else
-as_save_IFS=$IFS; IFS=$PATH_SEPARATOR
-for as_dir in $PATH
-do
-  IFS=$as_save_IFS
-  test -z "$as_dir" && as_dir=.
-    for ac_exec_ext in '' $ac_executable_extensions; do
-  if as_fn_executable_p "$as_dir/$ac_word$ac_exec_ext"; then
-    ac_cv_prog_ac_ct_AWK="$ac_prog"
-    $as_echo "$as_me:${as_lineno-$LINENO}: found $as_dir/$ac_word$ac_exec_ext" >&5
-    break 2
-  fi
-done
-  done
-IFS=$as_save_IFS
-
-fi
-fi
-ac_ct_AWK=$ac_cv_prog_ac_ct_AWK
-if test -n "$ac_ct_AWK"; then
-  { $as_echo "$as_me:${as_lineno-$LINENO}: result: $ac_ct_AWK" >&5
-$as_echo "$ac_ct_AWK" >&6; }
-else
-  { $as_echo "$as_me:${as_lineno-$LINENO}: result: no" >&5
-$as_echo "no" >&6; }
-fi
-
-
-  test -n "$ac_ct_AWK" && break
-done
-
-  if test "x$ac_ct_AWK" = x; then
-    AWK="missing"
-  else
-    case $cross_compiling:$ac_tool_warned in
-yes:)
-{ $as_echo "$as_me:${as_lineno-$LINENO}: WARNING: using cross tools not prefixed with host triplet" >&5
-$as_echo "$as_me: WARNING: using cross tools not prefixed with host triplet" >&2;}
-ac_tool_warned=yes ;;
-esac
-    AWK=$ac_ct_AWK
-  fi
-fi
-
-fi
-
-   test "$AWK" = "no" && AWK=missing
-make_pdfdoc=
-   make_install_pdfdoc=
-   make_uninstall_pdfdoc=
-   make_pdfexamples=
-   make_install_pdfexamples=
-   make_uninstall_pdfexamples=
-
-
-
-   missing=""
-   test "$AWK" = missing && missing="\`awk'"
-   test "$GHOSTSCRIPT" = missing && missing="$missing \`gs'"
-   if test -z "$missing"; then
-     if test $docadd_pdf = yes; then
-       make_pdfdoc=pdfdoc
-       make_install_pdfdoc=install_pdfdoc
-       make_uninstall_pdfdoc=uninstall_pdfdoc
-       if test $docadd_examples = yes; then
-         make_pdfexamples=pdfexamples
-         make_install_pdfexamples=install_pdfexamples
-         make_uninstall_pdfexamples=uninstall_pdfexamples
-       fi
-     fi
-   else
-     plural=`set $missing; test $# -eq 2 && echo s`
-     test x$plural = xs \
-       && missing=`set $missing; echo "$1 and $2"` \
-       || missing=`echo $missing`
-
-     docnote=.
-     test $docadd_pdf = yes && docnote=';
-  therefore, it will neither be possible to prepare, nor to install,
-  documentation and most of the examples in PDF format.'
-
-     { $as_echo "$as_me:${as_lineno-$LINENO}: WARNING: missing program$plural:
-
-  The program$plural $missing cannot be found in the PATH.
-  Consequently, groff's PDF formatter (pdfroff) will not work properly$docnote
-     " >&5
-$as_echo "$as_me: WARNING: missing program$plural:
-
-  The program$plural $missing cannot be found in the PATH.
-  Consequently, groff's PDF formatter (pdfroff) will not work properly$docnote
-     " >&2;}
-     doc_dist_target_ok=no
-   fi
-
-
-
-
-
-
-{ $as_echo "$as_me:${as_lineno-$LINENO}: checking whether pnmtops can handle the -nosetpage option" >&5
-$as_echo_n "checking whether pnmtops can handle the -nosetpage option... " >&6; }
-   if echo P2 2 2 255 0 1 2 0 | pnmtops -nosetpage > /dev/null 2>&1 ; then
-     { $as_echo "$as_me:${as_lineno-$LINENO}: result: yes" >&5
-$as_echo "yes" >&6; }
-     pnmtops_nosetpage="pnmtops -nosetpage"
-   else
-     { $as_echo "$as_me:${as_lineno-$LINENO}: result: no" >&5
-$as_echo "no" >&6; }
-     pnmtops_nosetpage="pnmtops"
-   fi
-
-
-    { $as_echo "$as_me:${as_lineno-$LINENO}: checking whether we are using the GNU C Library >= 2.1 or uClibc" >&5
-$as_echo_n "checking whether we are using the GNU C Library >= 2.1 or uClibc... " >&6; }
-if ${ac_cv_gnu_library_2_1+:} false; then :
-  $as_echo_n "(cached) " >&6
-else
-  cat confdefs.h - <<_ACEOF >conftest.$ac_ext
-/* end confdefs.h.  */
-
-#include <features.h>
-#ifdef __GNU_LIBRARY__
- #if (__GLIBC__ == 2 && __GLIBC_MINOR__ >= 1) || (__GLIBC__ > 2)
-  Lucky GNU user
- #endif
-#endif
-#ifdef __UCLIBC__
- Lucky user
-#endif
-
-_ACEOF
-if (eval "$ac_cpp conftest.$ac_ext") 2>&5 |
-  $EGREP "Lucky" >/dev/null 2>&1; then :
-  ac_cv_gnu_library_2_1=yes
-else
-  ac_cv_gnu_library_2_1=no
-fi
-rm -f conftest*
-
-
-
-fi
-{ $as_echo "$as_me:${as_lineno-$LINENO}: result: $ac_cv_gnu_library_2_1" >&5
-$as_echo "$ac_cv_gnu_library_2_1" >&6; }
-
-    GLIBC21="$ac_cv_gnu_library_2_1"
-
-
-
-
-
-  for ac_func in $ac_func_list
-do :
-  as_ac_var=`$as_echo "ac_cv_func_$ac_func" | $as_tr_sh`
-ac_fn_c_check_func "$LINENO" "$ac_func" "$as_ac_var"
-if eval test \"x\$"$as_ac_var"\" = x"yes"; then :
-  cat >>confdefs.h <<_ACEOF
-#define `$as_echo "HAVE_$ac_func" | $as_tr_cpp` 1
-_ACEOF
-
-fi
-done
-
-
-
-
-
-
-
-
-  { $as_echo "$as_me:${as_lineno-$LINENO}: checking for working fcntl.h" >&5
-$as_echo_n "checking for working fcntl.h... " >&6; }
-if ${gl_cv_header_working_fcntl_h+:} false; then :
-  $as_echo_n "(cached) " >&6
-else
-  if test "$cross_compiling" = yes; then :
-  gl_cv_header_working_fcntl_h=cross-compiling
-else
-  cat confdefs.h - <<_ACEOF >conftest.$ac_ext
-/* end confdefs.h.  */
-#include <sys/types.h>
-           #include <sys/stat.h>
-           #if HAVE_UNISTD_H
-           # include <unistd.h>
-           #else /* on Windows with MSVC */
-           # include <io.h>
-           # include <stdlib.h>
-           # defined sleep(n) _sleep ((n) * 1000)
-           #endif
-           #include <fcntl.h>
-           #ifndef O_NOATIME
-            #define O_NOATIME 0
-           #endif
-           #ifndef O_NOFOLLOW
-            #define O_NOFOLLOW 0
-           #endif
-           static int const constants[] =
-            {
-              O_CREAT, O_EXCL, O_NOCTTY, O_TRUNC, O_APPEND,
-              O_NONBLOCK, O_SYNC, O_ACCMODE, O_RDONLY, O_RDWR, O_WRONLY
-            };
-
-int
-main ()
-{
-
-            int result = !constants;
-            #if HAVE_SYMLINK
-            {
-              static char const sym[] = "conftest.sym";
-              if (symlink ("/dev/null", sym) != 0)
-                result |= 2;
-              else
-                {
-                  int fd = open (sym, O_WRONLY | O_NOFOLLOW | O_CREAT, 0);
-                  if (fd >= 0)
-                    {
-                      close (fd);
-                      result |= 4;
-                    }
-                }
-              if (unlink (sym) != 0 || symlink (".", sym) != 0)
-                result |= 2;
-              else
-                {
-                  int fd = open (sym, O_RDONLY | O_NOFOLLOW);
-                  if (fd >= 0)
-                    {
-                      close (fd);
-                      result |= 4;
-                    }
-                }
-              unlink (sym);
-            }
-            #endif
-            {
-              static char const file[] = "confdefs.h";
-              int fd = open (file, O_RDONLY | O_NOATIME);
-              if (fd < 0)
-                result |= 8;
-              else
-                {
-                  struct stat st0;
-                  if (fstat (fd, &st0) != 0)
-                    result |= 16;
-                  else
-                    {
-                      char c;
-                      sleep (1);
-                      if (read (fd, &c, 1) != 1)
-                        result |= 24;
-                      else
-                        {
-                          if (close (fd) != 0)
-                            result |= 32;
-                          else
-                            {
-                              struct stat st1;
-                              if (stat (file, &st1) != 0)
-                                result |= 40;
-                              else
-                                if (st0.st_atime != st1.st_atime)
-                                  result |= 64;
-                            }
-                        }
-                    }
-                }
-            }
-            return result;
-  ;
-  return 0;
-}
-_ACEOF
-if ac_fn_c_try_run "$LINENO"; then :
-  gl_cv_header_working_fcntl_h=yes
-else
-  case $? in #(
-        4) gl_cv_header_working_fcntl_h='no (bad O_NOFOLLOW)';; #(
-        64) gl_cv_header_working_fcntl_h='no (bad O_NOATIME)';; #(
-        68) gl_cv_header_working_fcntl_h='no (bad O_NOATIME, O_NOFOLLOW)';; #(
-         *) gl_cv_header_working_fcntl_h='no';;
-        esac
-fi
-rm -f core *.core core.conftest.* gmon.out bb.out conftest$ac_exeext \
-  conftest.$ac_objext conftest.beam conftest.$ac_ext
-fi
-
-fi
-{ $as_echo "$as_me:${as_lineno-$LINENO}: result: $gl_cv_header_working_fcntl_h" >&5
-$as_echo "$gl_cv_header_working_fcntl_h" >&6; }
-
-  case $gl_cv_header_working_fcntl_h in #(
-  *O_NOATIME* | no | cross-compiling) ac_val=0;; #(
-  *) ac_val=1;;
-  esac
-
-cat >>confdefs.h <<_ACEOF
-#define HAVE_WORKING_O_NOATIME $ac_val
-_ACEOF
-
-
-  case $gl_cv_header_working_fcntl_h in #(
-  *O_NOFOLLOW* | no | cross-compiling) ac_val=0;; #(
-  *) ac_val=1;;
-  esac
-
-cat >>confdefs.h <<_ACEOF
-#define HAVE_WORKING_O_NOFOLLOW $ac_val
-_ACEOF
-
-
-ac_fn_c_check_decl "$LINENO" "getc_unlocked" "ac_cv_have_decl_getc_unlocked" "$ac_includes_default"
-if test "x$ac_cv_have_decl_getc_unlocked" = xyes; then :
-  ac_have_decl=1
-else
-  ac_have_decl=0
-fi
-
-cat >>confdefs.h <<_ACEOF
-#define HAVE_DECL_GETC_UNLOCKED $ac_have_decl
-_ACEOF
-
-
-
-
-
-
-
-
-
-
-ac_config_files="$ac_config_files stamp-h"
-
-ac_config_files="$ac_config_files Makefile doc/Makefile src/utils/xtotroff/Makefile"
-
-ac_config_files="$ac_config_files contrib/gdiffmk/tests/runtests"
-
-ac_config_files="$ac_config_files test-groff"
-
-cat >confcache <<\_ACEOF
-# This file is a shell script that caches the results of configure
-# tests run on this system so they can be shared between configure
-# scripts and configure runs, see configure's option --config-cache.
-# It is not useful on other systems.  If it contains results you don't
-# want to keep, you may remove or edit it.
-#
-# config.status only pays attention to the cache file if you give it
-# the --recheck option to rerun configure.
-#
-# `ac_cv_env_foo' variables (set or unset) will be overridden when
-# loading this file, other *unset* `ac_cv_foo' will be assigned the
-# following values.
-
-_ACEOF
-
-# The following way of writing the cache mishandles newlines in values,
-# but we know of no workaround that is simple, portable, and efficient.
-# So, we kill variables containing newlines.
-# Ultrix sh set writes to stderr and can't be redirected directly,
-# and sets the high bit in the cache file unless we assign to the vars.
-(
-  for ac_var in `(set) 2>&1 | sed -n 's/^\([a-zA-Z_][a-zA-Z0-9_]*\)=.*/\1/p'`; do
-    eval ac_val=\$$ac_var
-    case $ac_val in #(
-    *${as_nl}*)
-      case $ac_var in #(
-      *_cv_*) { $as_echo "$as_me:${as_lineno-$LINENO}: WARNING: cache variable $ac_var contains a newline" >&5
-$as_echo "$as_me: WARNING: cache variable $ac_var contains a newline" >&2;} ;;
-      esac
-      case $ac_var in #(
-      _ | IFS | as_nl) ;; #(
-      BASH_ARGV | BASH_SOURCE) eval $ac_var= ;; #(
-      *) { eval $ac_var=; unset $ac_var;} ;;
-      esac ;;
-    esac
-  done
-
-  (set) 2>&1 |
-    case $as_nl`(ac_space=' '; set) 2>&1` in #(
-    *${as_nl}ac_space=\ *)
-      # `set' does not quote correctly, so add quotes: double-quote
-      # substitution turns \\\\ into \\, and sed turns \\ into \.
-      sed -n \
-	"s/'/'\\\\''/g;
-	  s/^\\([_$as_cr_alnum]*_cv_[_$as_cr_alnum]*\\)=\\(.*\\)/\\1='\\2'/p"
-      ;; #(
-    *)
-      # `set' quotes correctly as required by POSIX, so do not add quotes.
-      sed -n "/^[_$as_cr_alnum]*_cv_[_$as_cr_alnum]*=/p"
-      ;;
-    esac |
-    sort
-) |
-  sed '
-     /^ac_cv_env_/b end
-     t clear
-     :clear
-     s/^\([^=]*\)=\(.*[{}].*\)$/test "${\1+set}" = set || &/
-     t end
-     s/^\([^=]*\)=\(.*\)$/\1=${\1=\2}/
-     :end' >>confcache
-if diff "$cache_file" confcache >/dev/null 2>&1; then :; else
-  if test -w "$cache_file"; then
-    if test "x$cache_file" != "x/dev/null"; then
-      { $as_echo "$as_me:${as_lineno-$LINENO}: updating cache $cache_file" >&5
-$as_echo "$as_me: updating cache $cache_file" >&6;}
-      if test ! -f "$cache_file" || test -h "$cache_file"; then
-	cat confcache >"$cache_file"
-      else
-        case $cache_file in #(
-        */* | ?:*)
-	  mv -f confcache "$cache_file"$$ &&
-	  mv -f "$cache_file"$$ "$cache_file" ;; #(
-        *)
-	  mv -f confcache "$cache_file" ;;
-	esac
-      fi
-    fi
-  else
-    { $as_echo "$as_me:${as_lineno-$LINENO}: not updating unwritable cache $cache_file" >&5
-$as_echo "$as_me: not updating unwritable cache $cache_file" >&6;}
-  fi
-fi
-rm -f confcache
-
-test "x$prefix" = xNONE && prefix=$ac_default_prefix
-# Let make expand exec_prefix.
-test "x$exec_prefix" = xNONE && exec_prefix='${prefix}'
-
-DEFS=-DHAVE_CONFIG_H
-
-ac_libobjs=
-ac_ltlibobjs=
-U=
-for ac_i in : $LIBOBJS; do test "x$ac_i" = x: && continue
-  # 1. Remove the extension, and $U if already installed.
-  ac_script='s/\$U\././;s/\.o$//;s/\.obj$//'
-  ac_i=`$as_echo "$ac_i" | sed "$ac_script"`
-  # 2. Prepend LIBOBJDIR.  When used with automake>=1.10 LIBOBJDIR
-  #    will be set to the directory where LIBOBJS objects are built.
-  as_fn_append ac_libobjs " \${LIBOBJDIR}$ac_i\$U.$ac_objext"
-  as_fn_append ac_ltlibobjs " \${LIBOBJDIR}$ac_i"'$U.lo'
-done
-LIBOBJS=$ac_libobjs
-
-LTLIBOBJS=$ac_ltlibobjs
-
-
-
-
-: "${CONFIG_STATUS=./config.status}"
-ac_write_fail=0
-ac_clean_files_save=$ac_clean_files
-ac_clean_files="$ac_clean_files $CONFIG_STATUS"
-{ $as_echo "$as_me:${as_lineno-$LINENO}: creating $CONFIG_STATUS" >&5
-$as_echo "$as_me: creating $CONFIG_STATUS" >&6;}
-as_write_fail=0
-cat >$CONFIG_STATUS <<_ASEOF || as_write_fail=1
-#! $SHELL
-# Generated by $as_me.
-# Run this file to recreate the current configuration.
-# Compiler output produced by configure, useful for debugging
-# configure, is in config.log if it exists.
-
-debug=false
-ac_cs_recheck=false
-ac_cs_silent=false
-
-SHELL=\${CONFIG_SHELL-$SHELL}
-export SHELL
-_ASEOF
-cat >>$CONFIG_STATUS <<\_ASEOF || as_write_fail=1
-## -------------------- ##
-## M4sh Initialization. ##
-## -------------------- ##
-
-# Be more Bourne compatible
-DUALCASE=1; export DUALCASE # for MKS sh
-if test -n "${ZSH_VERSION+set}" && (emulate sh) >/dev/null 2>&1; then :
-  emulate sh
-  NULLCMD=:
-  # Pre-4.2 versions of Zsh do word splitting on ${1+"$@"}, which
-  # is contrary to our usage.  Disable this feature.
-  alias -g '${1+"$@"}'='"$@"'
-  setopt NO_GLOB_SUBST
-else
-  case `(set -o) 2>/dev/null` in #(
-  *posix*) :
-    set -o posix ;; #(
-  *) :
-     ;;
-esac
-fi
-
-
-as_nl='
-'
-export as_nl
-# Printing a long string crashes Solaris 7 /usr/bin/printf.
-as_echo='\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\'
-as_echo=$as_echo$as_echo$as_echo$as_echo$as_echo
-as_echo=$as_echo$as_echo$as_echo$as_echo$as_echo$as_echo
-# Prefer a ksh shell builtin over an external printf program on Solaris,
-# but without wasting forks for bash or zsh.
-if test -z "$BASH_VERSION$ZSH_VERSION" \
-    && (test "X`print -r -- $as_echo`" = "X$as_echo") 2>/dev/null; then
-  as_echo='print -r --'
-  as_echo_n='print -rn --'
-elif (test "X`printf %s $as_echo`" = "X$as_echo") 2>/dev/null; then
-  as_echo='printf %s\n'
-  as_echo_n='printf %s'
-else
-  if test "X`(/usr/ucb/echo -n -n $as_echo) 2>/dev/null`" = "X-n $as_echo"; then
-    as_echo_body='eval /usr/ucb/echo -n "$1$as_nl"'
-    as_echo_n='/usr/ucb/echo -n'
-  else
-    as_echo_body='eval expr "X$1" : "X\\(.*\\)"'
-    as_echo_n_body='eval
-      arg=$1;
-      case $arg in #(
-      *"$as_nl"*)
-	expr "X$arg" : "X\\(.*\\)$as_nl";
-	arg=`expr "X$arg" : ".*$as_nl\\(.*\\)"`;;
-      esac;
-      expr "X$arg" : "X\\(.*\\)" | tr -d "$as_nl"
-    '
-    export as_echo_n_body
-    as_echo_n='sh -c $as_echo_n_body as_echo'
-  fi
-  export as_echo_body
-  as_echo='sh -c $as_echo_body as_echo'
-fi
-
-# The user is always right.
-if test "${PATH_SEPARATOR+set}" != set; then
-  PATH_SEPARATOR=:
-  (PATH='/bin;/bin'; FPATH=$PATH; sh -c :) >/dev/null 2>&1 && {
-    (PATH='/bin:/bin'; FPATH=$PATH; sh -c :) >/dev/null 2>&1 ||
-      PATH_SEPARATOR=';'
-  }
-fi
-
-
-# IFS
-# We need space, tab and new line, in precisely that order.  Quoting is
-# there to prevent editors from complaining about space-tab.
-# (If _AS_PATH_WALK were called with IFS unset, it would disable word
-# splitting by setting IFS to empty value.)
-IFS=" ""	$as_nl"
-
-# Find who we are.  Look in the path if we contain no directory separator.
-as_myself=
-case $0 in #((
-  *[\\/]* ) as_myself=$0 ;;
-  *) as_save_IFS=$IFS; IFS=$PATH_SEPARATOR
-for as_dir in $PATH
-do
-  IFS=$as_save_IFS
-  test -z "$as_dir" && as_dir=.
-    test -r "$as_dir/$0" && as_myself=$as_dir/$0 && break
-  done
-IFS=$as_save_IFS
-
-     ;;
-esac
-# We did not find ourselves, most probably we were run as `sh COMMAND'
-# in which case we are not to be found in the path.
-if test "x$as_myself" = x; then
-  as_myself=$0
-fi
-if test ! -f "$as_myself"; then
-  $as_echo "$as_myself: error: cannot find myself; rerun with an absolute file name" >&2
-  exit 1
-fi
-
-# Unset variables that we do not need and which cause bugs (e.g. in
-# pre-3.0 UWIN ksh).  But do not cause bugs in bash 2.01; the "|| exit 1"
-# suppresses any "Segmentation fault" message there.  '((' could
-# trigger a bug in pdksh 5.2.14.
-for as_var in BASH_ENV ENV MAIL MAILPATH
-do eval test x\${$as_var+set} = xset \
-  && ( (unset $as_var) || exit 1) >/dev/null 2>&1 && unset $as_var || :
-done
-PS1='$ '
-PS2='> '
-PS4='+ '
-
-# NLS nuisances.
-LC_ALL=C
-export LC_ALL
-LANGUAGE=C
-export LANGUAGE
-
-# CDPATH.
-(unset CDPATH) >/dev/null 2>&1 && unset CDPATH
-
-
-# as_fn_error STATUS ERROR [LINENO LOG_FD]
-# ----------------------------------------
-# Output "`basename $0`: error: ERROR" to stderr. If LINENO and LOG_FD are
-# provided, also output the error to LOG_FD, referencing LINENO. Then exit the
-# script with STATUS, using 1 if that was 0.
-as_fn_error ()
-{
-  as_status=$1; test $as_status -eq 0 && as_status=1
-  if test "$4"; then
-    as_lineno=${as_lineno-"$3"} as_lineno_stack=as_lineno_stack=$as_lineno_stack
-    $as_echo "$as_me:${as_lineno-$LINENO}: error: $2" >&$4
-  fi
-  $as_echo "$as_me: error: $2" >&2
-  as_fn_exit $as_status
-} # as_fn_error
-
-
-# as_fn_set_status STATUS
-# -----------------------
-# Set $? to STATUS, without forking.
-as_fn_set_status ()
-{
-  return $1
-} # as_fn_set_status
-
-# as_fn_exit STATUS
-# -----------------
-# Exit the shell with STATUS, even in a "trap 0" or "set -e" context.
-as_fn_exit ()
-{
-  set +e
-  as_fn_set_status $1
-  exit $1
-} # as_fn_exit
-
-# as_fn_unset VAR
-# ---------------
-# Portably unset VAR.
-as_fn_unset ()
-{
-  { eval $1=; unset $1;}
-}
-as_unset=as_fn_unset
-# as_fn_append VAR VALUE
-# ----------------------
-# Append the text in VALUE to the end of the definition contained in VAR. Take
-# advantage of any shell optimizations that allow amortized linear growth over
-# repeated appends, instead of the typical quadratic growth present in naive
-# implementations.
-if (eval "as_var=1; as_var+=2; test x\$as_var = x12") 2>/dev/null; then :
-  eval 'as_fn_append ()
-  {
-    eval $1+=\$2
-  }'
-else
-  as_fn_append ()
-  {
-    eval $1=\$$1\$2
-  }
-fi # as_fn_append
-
-# as_fn_arith ARG...
-# ------------------
-# Perform arithmetic evaluation on the ARGs, and store the result in the
-# global $as_val. Take advantage of shells that can avoid forks. The arguments
-# must be portable across $(()) and expr.
-if (eval "test \$(( 1 + 1 )) = 2") 2>/dev/null; then :
-  eval 'as_fn_arith ()
-  {
-    as_val=$(( $* ))
-  }'
-else
-  as_fn_arith ()
-  {
-    as_val=`expr "$@" || test $? -eq 1`
-  }
-fi # as_fn_arith
-
-
-if expr a : '\(a\)' >/dev/null 2>&1 &&
-   test "X`expr 00001 : '.*\(...\)'`" = X001; then
-  as_expr=expr
-else
-  as_expr=false
-fi
-
-if (basename -- /) >/dev/null 2>&1 && test "X`basename -- / 2>&1`" = "X/"; then
-  as_basename=basename
-else
-  as_basename=false
-fi
-
-if (as_dir=`dirname -- /` && test "X$as_dir" = X/) >/dev/null 2>&1; then
-  as_dirname=dirname
-else
-  as_dirname=false
-fi
-
-as_me=`$as_basename -- "$0" ||
-$as_expr X/"$0" : '.*/\([^/][^/]*\)/*$' \| \
-	 X"$0" : 'X\(//\)$' \| \
-	 X"$0" : 'X\(/\)' \| . 2>/dev/null ||
-$as_echo X/"$0" |
-    sed '/^.*\/\([^/][^/]*\)\/*$/{
-	    s//\1/
-	    q
-	  }
-	  /^X\/\(\/\/\)$/{
-	    s//\1/
-	    q
-	  }
-	  /^X\/\(\/\).*/{
-	    s//\1/
-	    q
-	  }
-	  s/.*/./; q'`
-
-# Avoid depending upon Character Ranges.
-as_cr_letters='abcdefghijklmnopqrstuvwxyz'
-as_cr_LETTERS='ABCDEFGHIJKLMNOPQRSTUVWXYZ'
-as_cr_Letters=$as_cr_letters$as_cr_LETTERS
-as_cr_digits='0123456789'
-as_cr_alnum=$as_cr_Letters$as_cr_digits
-
-ECHO_C= ECHO_N= ECHO_T=
-case `echo -n x` in #(((((
--n*)
-  case `echo 'xy\c'` in
-  *c*) ECHO_T='	';;	# ECHO_T is single tab character.
-  xy)  ECHO_C='\c';;
-  *)   echo `echo ksh88 bug on AIX 6.1` > /dev/null
-       ECHO_T='	';;
-  esac;;
-*)
-  ECHO_N='-n';;
-esac
-
-rm -f conf$$ conf$$.exe conf$$.file
-if test -d conf$$.dir; then
-  rm -f conf$$.dir/conf$$.file
-else
-  rm -f conf$$.dir
-  mkdir conf$$.dir 2>/dev/null
-fi
-if (echo >conf$$.file) 2>/dev/null; then
-  if ln -s conf$$.file conf$$ 2>/dev/null; then
-    as_ln_s='ln -s'
-    # ... but there are two gotchas:
-    # 1) On MSYS, both `ln -s file dir' and `ln file dir' fail.
-    # 2) DJGPP < 2.04 has no symlinks; `ln -s' creates a wrapper executable.
-    # In both cases, we have to default to `cp -pR'.
-    ln -s conf$$.file conf$$.dir 2>/dev/null && test ! -f conf$$.exe ||
-      as_ln_s='cp -pR'
-  elif ln conf$$.file conf$$ 2>/dev/null; then
-    as_ln_s=ln
-  else
-    as_ln_s='cp -pR'
-  fi
-else
-  as_ln_s='cp -pR'
-fi
-rm -f conf$$ conf$$.exe conf$$.dir/conf$$.file conf$$.file
-rmdir conf$$.dir 2>/dev/null
-
-
-# as_fn_mkdir_p
-# -------------
-# Create "$as_dir" as a directory, including parents if necessary.
-as_fn_mkdir_p ()
-{
-
-  case $as_dir in #(
-  -*) as_dir=./$as_dir;;
-  esac
-  test -d "$as_dir" || eval $as_mkdir_p || {
-    as_dirs=
-    while :; do
-      case $as_dir in #(
-      *\'*) as_qdir=`$as_echo "$as_dir" | sed "s/'/'\\\\\\\\''/g"`;; #'(
-      *) as_qdir=$as_dir;;
-      esac
-      as_dirs="'$as_qdir' $as_dirs"
-      as_dir=`$as_dirname -- "$as_dir" ||
-$as_expr X"$as_dir" : 'X\(.*[^/]\)//*[^/][^/]*/*$' \| \
-	 X"$as_dir" : 'X\(//\)[^/]' \| \
-	 X"$as_dir" : 'X\(//\)$' \| \
-	 X"$as_dir" : 'X\(/\)' \| . 2>/dev/null ||
-$as_echo X"$as_dir" |
-    sed '/^X\(.*[^/]\)\/\/*[^/][^/]*\/*$/{
-	    s//\1/
-	    q
-	  }
-	  /^X\(\/\/\)[^/].*/{
-	    s//\1/
-	    q
-	  }
-	  /^X\(\/\/\)$/{
-	    s//\1/
-	    q
-	  }
-	  /^X\(\/\).*/{
-	    s//\1/
-	    q
-	  }
-	  s/.*/./; q'`
-      test -d "$as_dir" && break
-    done
-    test -z "$as_dirs" || eval "mkdir $as_dirs"
-  } || test -d "$as_dir" || as_fn_error $? "cannot create directory $as_dir"
-
-
-} # as_fn_mkdir_p
-if mkdir -p . 2>/dev/null; then
-  as_mkdir_p='mkdir -p "$as_dir"'
-else
-  test -d ./-p && rmdir ./-p
-  as_mkdir_p=false
-fi
-
-
-# as_fn_executable_p FILE
-# -----------------------
-# Test if FILE is an executable regular file.
-as_fn_executable_p ()
-{
-  test -f "$1" && test -x "$1"
-} # as_fn_executable_p
-as_test_x='test -x'
-as_executable_p=as_fn_executable_p
-
-# Sed expression to map a string onto a valid CPP name.
-as_tr_cpp="eval sed 'y%*$as_cr_letters%P$as_cr_LETTERS%;s%[^_$as_cr_alnum]%_%g'"
-
-# Sed expression to map a string onto a valid variable name.
-as_tr_sh="eval sed 'y%*+%pp%;s%[^_$as_cr_alnum]%_%g'"
-
-
-exec 6>&1
-## ----------------------------------- ##
-## Main body of $CONFIG_STATUS script. ##
-## ----------------------------------- ##
-_ASEOF
-test $as_write_fail = 0 && chmod +x $CONFIG_STATUS || ac_write_fail=1
-
-cat >>$CONFIG_STATUS <<\_ACEOF || ac_write_fail=1
-# Save the log message, to keep $0 and so on meaningful, and to
-# report actual input values of CONFIG_FILES etc. instead of their
-# values after options handling.
-ac_log="
-This file was extended by groff $as_me 1.22.3, which was
-generated by GNU Autoconf 2.69.  Invocation command line was
-
-  CONFIG_FILES    = $CONFIG_FILES
-  CONFIG_HEADERS  = $CONFIG_HEADERS
-  CONFIG_LINKS    = $CONFIG_LINKS
-  CONFIG_COMMANDS = $CONFIG_COMMANDS
-  $ $0 $@
-
-on `(hostname || uname -n) 2>/dev/null | sed 1q`
-"
-
-_ACEOF
-
-case $ac_config_files in *"
-"*) set x $ac_config_files; shift; ac_config_files=$*;;
-esac
-
-case $ac_config_headers in *"
-"*) set x $ac_config_headers; shift; ac_config_headers=$*;;
-esac
-
-
-cat >>$CONFIG_STATUS <<_ACEOF || ac_write_fail=1
-# Files that config.status was made for.
-config_files="$ac_config_files"
-config_headers="$ac_config_headers"
-
-_ACEOF
-
-cat >>$CONFIG_STATUS <<\_ACEOF || ac_write_fail=1
-ac_cs_usage="\
-\`$as_me' instantiates files and other configuration actions
-from templates according to the current configuration.  Unless the files
-and actions are specified as TAGs, all are instantiated by default.
-
-Usage: $0 [OPTION]... [TAG]...
-
-  -h, --help       print this help, then exit
-  -V, --version    print version number and configuration settings, then exit
-      --config     print configuration, then exit
-  -q, --quiet, --silent
-                   do not print progress messages
-  -d, --debug      don't remove temporary files
-      --recheck    update $as_me by reconfiguring in the same conditions
-      --file=FILE[:TEMPLATE]
-                   instantiate the configuration file FILE
-      --header=FILE[:TEMPLATE]
-                   instantiate the configuration header FILE
-
-Configuration files:
-$config_files
-
-Configuration headers:
-$config_headers
-
-Report bugs to <bug-groff@gnu.org>."
-
-_ACEOF
-cat >>$CONFIG_STATUS <<_ACEOF || ac_write_fail=1
-ac_cs_config="`$as_echo "$ac_configure_args" | sed 's/^ //; s/[\\""\`\$]/\\\\&/g'`"
-ac_cs_version="\\
-groff config.status 1.22.3
-configured by $0, generated by GNU Autoconf 2.69,
-  with options \\"\$ac_cs_config\\"
-
-Copyright (C) 2012 Free Software Foundation, Inc.
-This config.status script is free software; the Free Software Foundation
-gives unlimited permission to copy, distribute and modify it."
-
-ac_pwd='$ac_pwd'
-srcdir='$srcdir'
-INSTALL='$INSTALL'
-AWK='$AWK'
-test -n "\$AWK" || AWK=awk
-_ACEOF
-
-cat >>$CONFIG_STATUS <<\_ACEOF || ac_write_fail=1
-# The default lists apply if the user does not specify any file.
-ac_need_defaults=:
-while test $# != 0
-do
-  case $1 in
-  --*=?*)
-    ac_option=`expr "X$1" : 'X\([^=]*\)='`
-    ac_optarg=`expr "X$1" : 'X[^=]*=\(.*\)'`
-    ac_shift=:
-    ;;
-  --*=)
-    ac_option=`expr "X$1" : 'X\([^=]*\)='`
-    ac_optarg=
-    ac_shift=:
-    ;;
-  *)
-    ac_option=$1
-    ac_optarg=$2
-    ac_shift=shift
-    ;;
-  esac
-
-  case $ac_option in
-  # Handling of the options.
-  -recheck | --recheck | --rechec | --reche | --rech | --rec | --re | --r)
-    ac_cs_recheck=: ;;
-  --version | --versio | --versi | --vers | --ver | --ve | --v | -V )
-    $as_echo "$ac_cs_version"; exit ;;
-  --config | --confi | --conf | --con | --co | --c )
-    $as_echo "$ac_cs_config"; exit ;;
-  --debug | --debu | --deb | --de | --d | -d )
-    debug=: ;;
-  --file | --fil | --fi | --f )
-    $ac_shift
-    case $ac_optarg in
-    *\'*) ac_optarg=`$as_echo "$ac_optarg" | sed "s/'/'\\\\\\\\''/g"` ;;
-    '') as_fn_error $? "missing file argument" ;;
-    esac
-    as_fn_append CONFIG_FILES " '$ac_optarg'"
-    ac_need_defaults=false;;
-  --header | --heade | --head | --hea )
-    $ac_shift
-    case $ac_optarg in
-    *\'*) ac_optarg=`$as_echo "$ac_optarg" | sed "s/'/'\\\\\\\\''/g"` ;;
-    esac
-    as_fn_append CONFIG_HEADERS " '$ac_optarg'"
-    ac_need_defaults=false;;
-  --he | --h)
-    # Conflict between --help and --header
-    as_fn_error $? "ambiguous option: \`$1'
-Try \`$0 --help' for more information.";;
-  --help | --hel | -h )
-    $as_echo "$ac_cs_usage"; exit ;;
-  -q | -quiet | --quiet | --quie | --qui | --qu | --q \
-  | -silent | --silent | --silen | --sile | --sil | --si | --s)
-    ac_cs_silent=: ;;
-
-  # This is an error.
-  -*) as_fn_error $? "unrecognized option: \`$1'
-Try \`$0 --help' for more information." ;;
-
-  *) as_fn_append ac_config_targets " $1"
-     ac_need_defaults=false ;;
-
-  esac
-  shift
-done
-
-ac_configure_extra_args=
-
-if $ac_cs_silent; then
-  exec 6>/dev/null
-  ac_configure_extra_args="$ac_configure_extra_args --silent"
-fi
-
-_ACEOF
-cat >>$CONFIG_STATUS <<_ACEOF || ac_write_fail=1
-if \$ac_cs_recheck; then
-  set X $SHELL '$0' $ac_configure_args \$ac_configure_extra_args --no-create --no-recursion
-  shift
-  \$as_echo "running CONFIG_SHELL=$SHELL \$*" >&6
-  CONFIG_SHELL='$SHELL'
-  export CONFIG_SHELL
-  exec "\$@"
-fi
-
-_ACEOF
-cat >>$CONFIG_STATUS <<\_ACEOF || ac_write_fail=1
-exec 5>>config.log
-{
-  echo
-  sed 'h;s/./-/g;s/^.../## /;s/...$/ ##/;p;x;p;x' <<_ASBOX
-## Running $as_me. ##
-_ASBOX
-  $as_echo "$ac_log"
-} >&5
-
-_ACEOF
-cat >>$CONFIG_STATUS <<_ACEOF || ac_write_fail=1
-_ACEOF
-
-cat >>$CONFIG_STATUS <<\_ACEOF || ac_write_fail=1
-
-# Handling of arguments.
-for ac_config_target in $ac_config_targets
-do
-  case $ac_config_target in
-    "src/include/config.h") CONFIG_HEADERS="$CONFIG_HEADERS src/include/config.h:src/include/config.hin" ;;
-    "stamp-h") CONFIG_FILES="$CONFIG_FILES stamp-h" ;;
-    "Makefile") CONFIG_FILES="$CONFIG_FILES Makefile" ;;
-    "doc/Makefile") CONFIG_FILES="$CONFIG_FILES doc/Makefile" ;;
-    "src/utils/xtotroff/Makefile") CONFIG_FILES="$CONFIG_FILES src/utils/xtotroff/Makefile" ;;
-    "contrib/gdiffmk/tests/runtests") CONFIG_FILES="$CONFIG_FILES contrib/gdiffmk/tests/runtests" ;;
-    "test-groff") CONFIG_FILES="$CONFIG_FILES test-groff" ;;
-
-  *) as_fn_error $? "invalid argument: \`$ac_config_target'" "$LINENO" 5;;
-  esac
-done
-
-
-# If the user did not use the arguments to specify the items to instantiate,
-# then the envvar interface is used.  Set only those that are not.
-# We use the long form for the default assignment because of an extremely
-# bizarre bug on SunOS 4.1.3.
-if $ac_need_defaults; then
-  test "${CONFIG_FILES+set}" = set || CONFIG_FILES=$config_files
-  test "${CONFIG_HEADERS+set}" = set || CONFIG_HEADERS=$config_headers
-fi
-
-# Have a temporary directory for convenience.  Make it in the build tree
-# simply because there is no reason against having it here, and in addition,
-# creating and moving files from /tmp can sometimes cause problems.
-# Hook for its removal unless debugging.
-# Note that there is a small window in which the directory will not be cleaned:
-# after its creation but before its name has been assigned to `$tmp'.
-$debug ||
-{
-  tmp= ac_tmp=
-  trap 'exit_status=$?
-  : "${ac_tmp:=$tmp}"
-  { test ! -d "$ac_tmp" || rm -fr "$ac_tmp"; } && exit $exit_status
-' 0
-  trap 'as_fn_exit 1' 1 2 13 15
-}
-# Create a (secure) tmp directory for tmp files.
-
-{
-  tmp=`(umask 077 && mktemp -d "./confXXXXXX") 2>/dev/null` &&
-  test -d "$tmp"
-}  ||
-{
-  tmp=./conf$$-$RANDOM
-  (umask 077 && mkdir "$tmp")
-} || as_fn_error $? "cannot create a temporary directory in ." "$LINENO" 5
-ac_tmp=$tmp
-
-# Set up the scripts for CONFIG_FILES section.
-# No need to generate them if there are no CONFIG_FILES.
-# This happens for instance with `./config.status config.h'.
-if test -n "$CONFIG_FILES"; then
-
-
-ac_cr=`echo X | tr X '\015'`
-# On cygwin, bash can eat \r inside `` if the user requested igncr.
-# But we know of no other shell where ac_cr would be empty at this
-# point, so we can use a bashism as a fallback.
-if test "x$ac_cr" = x; then
-  eval ac_cr=\$\'\\r\'
-fi
-ac_cs_awk_cr=`$AWK 'BEGIN { print "a\rb" }' </dev/null 2>/dev/null`
-if test "$ac_cs_awk_cr" = "a${ac_cr}b"; then
-  ac_cs_awk_cr='\\r'
-else
-  ac_cs_awk_cr=$ac_cr
-fi
-
-echo 'BEGIN {' >"$ac_tmp/subs1.awk" &&
-_ACEOF
-
-
-{
-  echo "cat >conf$$subs.awk <<_ACEOF" &&
-  echo "$ac_subst_vars" | sed 's/.*/&!$&$ac_delim/' &&
-  echo "_ACEOF"
-} >conf$$subs.sh ||
-  as_fn_error $? "could not make $CONFIG_STATUS" "$LINENO" 5
-ac_delim_num=`echo "$ac_subst_vars" | grep -c '^'`
-ac_delim='%!_!# '
-for ac_last_try in false false false false false :; do
-  . ./conf$$subs.sh ||
-    as_fn_error $? "could not make $CONFIG_STATUS" "$LINENO" 5
-
-  ac_delim_n=`sed -n "s/.*$ac_delim\$/X/p" conf$$subs.awk | grep -c X`
-  if test $ac_delim_n = $ac_delim_num; then
-    break
-  elif $ac_last_try; then
-    as_fn_error $? "could not make $CONFIG_STATUS" "$LINENO" 5
-  else
-    ac_delim="$ac_delim!$ac_delim _$ac_delim!! "
-  fi
-done
-rm -f conf$$subs.sh
-
-cat >>$CONFIG_STATUS <<_ACEOF || ac_write_fail=1
-cat >>"\$ac_tmp/subs1.awk" <<\\_ACAWK &&
-_ACEOF
-sed -n '
-h
-s/^/S["/; s/!.*/"]=/
-p
-g
-s/^[^!]*!//
-:repl
-t repl
-s/'"$ac_delim"'$//
-t delim
-:nl
-h
-s/\(.\{148\}\)..*/\1/
-t more1
-s/["\\]/\\&/g; s/^/"/; s/$/\\n"\\/
-p
-n
-b repl
-:more1
-s/["\\]/\\&/g; s/^/"/; s/$/"\\/
-p
-g
-s/.\{148\}//
-t nl
-:delim
-h
-s/\(.\{148\}\)..*/\1/
-t more2
-s/["\\]/\\&/g; s/^/"/; s/$/"/
-p
-b
-:more2
-s/["\\]/\\&/g; s/^/"/; s/$/"\\/
-p
-g
-s/.\{148\}//
-t delim
-' <conf$$subs.awk | sed '
-/^[^""]/{
-  N
-  s/\n//
-}
-' >>$CONFIG_STATUS || ac_write_fail=1
-rm -f conf$$subs.awk
-cat >>$CONFIG_STATUS <<_ACEOF || ac_write_fail=1
-_ACAWK
-cat >>"\$ac_tmp/subs1.awk" <<_ACAWK &&
-  for (key in S) S_is_set[key] = 1
-  FS = ""
-
-}
-{
-  line = $ 0
-  nfields = split(line, field, "@")
-  substed = 0
-  len = length(field[1])
-  for (i = 2; i < nfields; i++) {
-    key = field[i]
-    keylen = length(key)
-    if (S_is_set[key]) {
-      value = S[key]
-      line = substr(line, 1, len) "" value "" substr(line, len + keylen + 3)
-      len += length(value) + length(field[++i])
-      substed = 1
-    } else
-      len += 1 + keylen
-  }
-
-  print line
-}
-
-_ACAWK
-_ACEOF
-cat >>$CONFIG_STATUS <<\_ACEOF || ac_write_fail=1
-if sed "s/$ac_cr//" < /dev/null > /dev/null 2>&1; then
-  sed "s/$ac_cr\$//; s/$ac_cr/$ac_cs_awk_cr/g"
-else
-  cat
-fi < "$ac_tmp/subs1.awk" > "$ac_tmp/subs.awk" \
-  || as_fn_error $? "could not setup config files machinery" "$LINENO" 5
-_ACEOF
-
-# VPATH may cause trouble with some makes, so we remove sole $(srcdir),
-# ${srcdir} and @srcdir@ entries from VPATH if srcdir is ".", strip leading and
-# trailing colons and then remove the whole line if VPATH becomes empty
-# (actually we leave an empty line to preserve line numbers).
-if test "x$srcdir" = x.; then
-  ac_vpsub='/^[	 ]*VPATH[	 ]*=[	 ]*/{
-h
-s///
-s/^/:/
-s/[	 ]*$/:/
-s/:\$(srcdir):/:/g
-s/:\${srcdir}:/:/g
-s/:@srcdir@:/:/g
-s/^:*//
-s/:*$//
-x
-s/\(=[	 ]*\).*/\1/
-G
-s/\n//
-s/^[^=]*=[	 ]*$//
-}'
-fi
-
-cat >>$CONFIG_STATUS <<\_ACEOF || ac_write_fail=1
-fi # test -n "$CONFIG_FILES"
-
-# Set up the scripts for CONFIG_HEADERS section.
-# No need to generate them if there are no CONFIG_HEADERS.
-# This happens for instance with `./config.status Makefile'.
-if test -n "$CONFIG_HEADERS"; then
-cat >"$ac_tmp/defines.awk" <<\_ACAWK ||
-BEGIN {
-_ACEOF
-
-# Transform confdefs.h into an awk script `defines.awk', embedded as
-# here-document in config.status, that substitutes the proper values into
-# config.h.in to produce config.h.
-
-# Create a delimiter string that does not exist in confdefs.h, to ease
-# handling of long lines.
-ac_delim='%!_!# '
-for ac_last_try in false false :; do
-  ac_tt=`sed -n "/$ac_delim/p" confdefs.h`
-  if test -z "$ac_tt"; then
-    break
-  elif $ac_last_try; then
-    as_fn_error $? "could not make $CONFIG_HEADERS" "$LINENO" 5
-  else
-    ac_delim="$ac_delim!$ac_delim _$ac_delim!! "
-  fi
-done
-
-# For the awk script, D is an array of macro values keyed by name,
-# likewise P contains macro parameters if any.  Preserve backslash
-# newline sequences.
-
-ac_word_re=[_$as_cr_Letters][_$as_cr_alnum]*
-sed -n '
-s/.\{148\}/&'"$ac_delim"'/g
-t rset
-:rset
-s/^[	 ]*#[	 ]*define[	 ][	 ]*/ /
-t def
-d
-:def
-s/\\$//
-t bsnl
-s/["\\]/\\&/g
-s/^ \('"$ac_word_re"'\)\(([^()]*)\)[	 ]*\(.*\)/P["\1"]="\2"\
-D["\1"]=" \3"/p
-s/^ \('"$ac_word_re"'\)[	 ]*\(.*\)/D["\1"]=" \2"/p
-d
-:bsnl
-s/["\\]/\\&/g
-s/^ \('"$ac_word_re"'\)\(([^()]*)\)[	 ]*\(.*\)/P["\1"]="\2"\
-D["\1"]=" \3\\\\\\n"\\/p
-t cont
-s/^ \('"$ac_word_re"'\)[	 ]*\(.*\)/D["\1"]=" \2\\\\\\n"\\/p
-t cont
-d
-:cont
-n
-s/.\{148\}/&'"$ac_delim"'/g
-t clear
-:clear
-s/\\$//
-t bsnlc
-s/["\\]/\\&/g; s/^/"/; s/$/"/p
-d
-:bsnlc
-s/["\\]/\\&/g; s/^/"/; s/$/\\\\\\n"\\/p
-b cont
-' <confdefs.h | sed '
-s/'"$ac_delim"'/"\\\
-"/g' >>$CONFIG_STATUS || ac_write_fail=1
-
-cat >>$CONFIG_STATUS <<_ACEOF || ac_write_fail=1
-  for (key in D) D_is_set[key] = 1
-  FS = ""
-}
-/^[\t ]*#[\t ]*(define|undef)[\t ]+$ac_word_re([\t (]|\$)/ {
-  line = \$ 0
-  split(line, arg, " ")
-  if (arg[1] == "#") {
-    defundef = arg[2]
-    mac1 = arg[3]
-  } else {
-    defundef = substr(arg[1], 2)
-    mac1 = arg[2]
-  }
-  split(mac1, mac2, "(") #)
-  macro = mac2[1]
-  prefix = substr(line, 1, index(line, defundef) - 1)
-  if (D_is_set[macro]) {
-    # Preserve the white space surrounding the "#".
-    print prefix "define", macro P[macro] D[macro]
-    next
-  } else {
-    # Replace #undef with comments.  This is necessary, for example,
-    # in the case of _POSIX_SOURCE, which is predefined and required
-    # on some systems where configure will not decide to define it.
-    if (defundef == "undef") {
-      print "/*", prefix defundef, macro, "*/"
-      next
-    }
-  }
-}
-{ print }
-_ACAWK
-_ACEOF
-cat >>$CONFIG_STATUS <<\_ACEOF || ac_write_fail=1
-  as_fn_error $? "could not setup config headers machinery" "$LINENO" 5
-fi # test -n "$CONFIG_HEADERS"
-
-
-eval set X "  :F $CONFIG_FILES  :H $CONFIG_HEADERS    "
-shift
-for ac_tag
-do
-  case $ac_tag in
-  :[FHLC]) ac_mode=$ac_tag; continue;;
-  esac
-  case $ac_mode$ac_tag in
-  :[FHL]*:*);;
-  :L* | :C*:*) as_fn_error $? "invalid tag \`$ac_tag'" "$LINENO" 5;;
-  :[FH]-) ac_tag=-:-;;
-  :[FH]*) ac_tag=$ac_tag:$ac_tag.in;;
-  esac
-  ac_save_IFS=$IFS
-  IFS=:
-  set x $ac_tag
-  IFS=$ac_save_IFS
-  shift
-  ac_file=$1
-  shift
-
-  case $ac_mode in
-  :L) ac_source=$1;;
-  :[FH])
-    ac_file_inputs=
-    for ac_f
-    do
-      case $ac_f in
-      -) ac_f="$ac_tmp/stdin";;
-      *) # Look for the file first in the build tree, then in the source tree
-	 # (if the path is not absolute).  The absolute path cannot be DOS-style,
-	 # because $ac_f cannot contain `:'.
-	 test -f "$ac_f" ||
-	   case $ac_f in
-	   [\\/$]*) false;;
-	   *) test -f "$srcdir/$ac_f" && ac_f="$srcdir/$ac_f";;
-	   esac ||
-	   as_fn_error 1 "cannot find input file: \`$ac_f'" "$LINENO" 5;;
-      esac
-      case $ac_f in *\'*) ac_f=`$as_echo "$ac_f" | sed "s/'/'\\\\\\\\''/g"`;; esac
-      as_fn_append ac_file_inputs " '$ac_f'"
-    done
-
-    # Let's still pretend it is `configure' which instantiates (i.e., don't
-    # use $as_me), people would be surprised to read:
-    #    /* config.h.  Generated by config.status.  */
-    configure_input='Generated from '`
-	  $as_echo "$*" | sed 's|^[^:]*/||;s|:[^:]*/|, |g'
-	`' by configure.'
-    if test x"$ac_file" != x-; then
-      configure_input="$ac_file.  $configure_input"
-      { $as_echo "$as_me:${as_lineno-$LINENO}: creating $ac_file" >&5
-$as_echo "$as_me: creating $ac_file" >&6;}
-    fi
-    # Neutralize special characters interpreted by sed in replacement strings.
-    case $configure_input in #(
-    *\&* | *\|* | *\\* )
-       ac_sed_conf_input=`$as_echo "$configure_input" |
-       sed 's/[\\\\&|]/\\\\&/g'`;; #(
-    *) ac_sed_conf_input=$configure_input;;
-    esac
-
-    case $ac_tag in
-    *:-:* | *:-) cat >"$ac_tmp/stdin" \
-      || as_fn_error $? "could not create $ac_file" "$LINENO" 5 ;;
-    esac
-    ;;
-  esac
-
-  ac_dir=`$as_dirname -- "$ac_file" ||
-$as_expr X"$ac_file" : 'X\(.*[^/]\)//*[^/][^/]*/*$' \| \
-	 X"$ac_file" : 'X\(//\)[^/]' \| \
-	 X"$ac_file" : 'X\(//\)$' \| \
-	 X"$ac_file" : 'X\(/\)' \| . 2>/dev/null ||
-$as_echo X"$ac_file" |
-    sed '/^X\(.*[^/]\)\/\/*[^/][^/]*\/*$/{
-	    s//\1/
-	    q
-	  }
-	  /^X\(\/\/\)[^/].*/{
-	    s//\1/
-	    q
-	  }
-	  /^X\(\/\/\)$/{
-	    s//\1/
-	    q
-	  }
-	  /^X\(\/\).*/{
-	    s//\1/
-	    q
-	  }
-	  s/.*/./; q'`
-  as_dir="$ac_dir"; as_fn_mkdir_p
-  ac_builddir=.
-
-case "$ac_dir" in
-.) ac_dir_suffix= ac_top_builddir_sub=. ac_top_build_prefix= ;;
-*)
-  ac_dir_suffix=/`$as_echo "$ac_dir" | sed 's|^\.[\\/]||'`
-  # A ".." for each directory in $ac_dir_suffix.
-  ac_top_builddir_sub=`$as_echo "$ac_dir_suffix" | sed 's|/[^\\/]*|/..|g;s|/||'`
-  case $ac_top_builddir_sub in
-  "") ac_top_builddir_sub=. ac_top_build_prefix= ;;
-  *)  ac_top_build_prefix=$ac_top_builddir_sub/ ;;
-  esac ;;
-esac
-ac_abs_top_builddir=$ac_pwd
-ac_abs_builddir=$ac_pwd$ac_dir_suffix
-# for backward compatibility:
-ac_top_builddir=$ac_top_build_prefix
-
-case $srcdir in
-  .)  # We are building in place.
-    ac_srcdir=.
-    ac_top_srcdir=$ac_top_builddir_sub
-    ac_abs_top_srcdir=$ac_pwd ;;
-  [\\/]* | ?:[\\/]* )  # Absolute name.
-    ac_srcdir=$srcdir$ac_dir_suffix;
-    ac_top_srcdir=$srcdir
-    ac_abs_top_srcdir=$srcdir ;;
-  *) # Relative name.
-    ac_srcdir=$ac_top_build_prefix$srcdir$ac_dir_suffix
-    ac_top_srcdir=$ac_top_build_prefix$srcdir
-    ac_abs_top_srcdir=$ac_pwd/$srcdir ;;
-esac
-ac_abs_srcdir=$ac_abs_top_srcdir$ac_dir_suffix
-
-
-  case $ac_mode in
-  :F)
-  #
-  # CONFIG_FILE
-  #
-
-  case $INSTALL in
-  [\\/$]* | ?:[\\/]* ) ac_INSTALL=$INSTALL ;;
-  *) ac_INSTALL=$ac_top_build_prefix$INSTALL ;;
-  esac
-_ACEOF
-
-cat >>$CONFIG_STATUS <<\_ACEOF || ac_write_fail=1
-# If the template does not know about datarootdir, expand it.
-# FIXME: This hack should be removed a few years after 2.60.
-ac_datarootdir_hack=; ac_datarootdir_seen=
-ac_sed_dataroot='
-/datarootdir/ {
-  p
-  q
-}
-/@datadir@/p
-/@docdir@/p
-/@infodir@/p
-/@localedir@/p
-/@mandir@/p'
-case `eval "sed -n \"\$ac_sed_dataroot\" $ac_file_inputs"` in
-*datarootdir*) ac_datarootdir_seen=yes;;
-*@datadir@*|*@docdir@*|*@infodir@*|*@localedir@*|*@mandir@*)
-  { $as_echo "$as_me:${as_lineno-$LINENO}: WARNING: $ac_file_inputs seems to ignore the --datarootdir setting" >&5
-$as_echo "$as_me: WARNING: $ac_file_inputs seems to ignore the --datarootdir setting" >&2;}
-_ACEOF
-cat >>$CONFIG_STATUS <<_ACEOF || ac_write_fail=1
-  ac_datarootdir_hack='
-  s&@datadir@&$datadir&g
-  s&@docdir@&$docdir&g
-  s&@infodir@&$infodir&g
-  s&@localedir@&$localedir&g
-  s&@mandir@&$mandir&g
-  s&\\\${datarootdir}&$datarootdir&g' ;;
-esac
-_ACEOF
-
-# Neutralize VPATH when `$srcdir' = `.'.
-# Shell code in configure.ac might set extrasub.
-# FIXME: do we really want to maintain this feature?
-cat >>$CONFIG_STATUS <<_ACEOF || ac_write_fail=1
-ac_sed_extra="$ac_vpsub
-$extrasub
-_ACEOF
-cat >>$CONFIG_STATUS <<\_ACEOF || ac_write_fail=1
-:t
-/@[a-zA-Z_][a-zA-Z_0-9]*@/!b
-s|@configure_input@|$ac_sed_conf_input|;t t
-s&@top_builddir@&$ac_top_builddir_sub&;t t
-s&@top_build_prefix@&$ac_top_build_prefix&;t t
-s&@srcdir@&$ac_srcdir&;t t
-s&@abs_srcdir@&$ac_abs_srcdir&;t t
-s&@top_srcdir@&$ac_top_srcdir&;t t
-s&@abs_top_srcdir@&$ac_abs_top_srcdir&;t t
-s&@builddir@&$ac_builddir&;t t
-s&@abs_builddir@&$ac_abs_builddir&;t t
-s&@abs_top_builddir@&$ac_abs_top_builddir&;t t
-s&@INSTALL@&$ac_INSTALL&;t t
-$ac_datarootdir_hack
-"
-eval sed \"\$ac_sed_extra\" "$ac_file_inputs" | $AWK -f "$ac_tmp/subs.awk" \
-  >$ac_tmp/out || as_fn_error $? "could not create $ac_file" "$LINENO" 5
-
-test -z "$ac_datarootdir_hack$ac_datarootdir_seen" &&
-  { ac_out=`sed -n '/\${datarootdir}/p' "$ac_tmp/out"`; test -n "$ac_out"; } &&
-  { ac_out=`sed -n '/^[	 ]*datarootdir[	 ]*:*=/p' \
-      "$ac_tmp/out"`; test -z "$ac_out"; } &&
-  { $as_echo "$as_me:${as_lineno-$LINENO}: WARNING: $ac_file contains a reference to the variable \`datarootdir'
-which seems to be undefined.  Please make sure it is defined" >&5
-$as_echo "$as_me: WARNING: $ac_file contains a reference to the variable \`datarootdir'
-which seems to be undefined.  Please make sure it is defined" >&2;}
-
-  rm -f "$ac_tmp/stdin"
-  case $ac_file in
-  -) cat "$ac_tmp/out" && rm -f "$ac_tmp/out";;
-  *) rm -f "$ac_file" && mv "$ac_tmp/out" "$ac_file";;
-  esac \
-  || as_fn_error $? "could not create $ac_file" "$LINENO" 5
- ;;
-  :H)
-  #
-  # CONFIG_HEADER
-  #
-  if test x"$ac_file" != x-; then
-    {
-      $as_echo "/* $configure_input  */" \
-      && eval '$AWK -f "$ac_tmp/defines.awk"' "$ac_file_inputs"
-    } >"$ac_tmp/config.h" \
-      || as_fn_error $? "could not create $ac_file" "$LINENO" 5
-    if diff "$ac_file" "$ac_tmp/config.h" >/dev/null 2>&1; then
-      { $as_echo "$as_me:${as_lineno-$LINENO}: $ac_file is unchanged" >&5
-$as_echo "$as_me: $ac_file is unchanged" >&6;}
-    else
-      rm -f "$ac_file"
-      mv "$ac_tmp/config.h" "$ac_file" \
-	|| as_fn_error $? "could not create $ac_file" "$LINENO" 5
-    fi
-  else
-    $as_echo "/* $configure_input  */" \
-      && eval '$AWK -f "$ac_tmp/defines.awk"' "$ac_file_inputs" \
-      || as_fn_error $? "could not create -" "$LINENO" 5
-  fi
- ;;
-
-
-  esac
-
-
-  case $ac_file$ac_mode in
-    "stamp-h":F) echo timestamp > stamp-h ;;
-    "contrib/gdiffmk/tests/runtests":F) chmod +x contrib/gdiffmk/tests/runtests ;;
-    "test-groff":F) chmod +x test-groff ;;
-
-  esac
-done # for ac_tag
-
-
-as_fn_exit 0
-_ACEOF
-ac_clean_files=$ac_clean_files_save
-
-test $ac_write_fail = 0 ||
-  as_fn_error $? "write failure creating $CONFIG_STATUS" "$LINENO" 5
-
-
-# configure is writing to config.log, and then calls config.status.
-# config.status does its own redirection, appending to config.log.
-# Unfortunately, on DOS this fails, as config.log is still kept open
-# by configure, so config.status won't be able to write to it; its
-# output is simply discarded.  So we exec the FD to /dev/null,
-# effectively closing config.log, so it can be properly (re)opened and
-# appended to by config.status.  When coming back to configure, we
-# need to make the FD available again.
-if test "$no_create" != yes; then
-  ac_cs_success=:
-  ac_config_status_args=
-  test "$silent" = yes &&
-    ac_config_status_args="$ac_config_status_args --quiet"
-  exec 5>/dev/null
-  $SHELL $CONFIG_STATUS $ac_config_status_args || ac_cs_success=false
-  exec 5>>config.log
-  # Use ||, not &&, to avoid exiting from the if with $? = 1, which
-  # would make configure fail if this is the last instruction.
-  $ac_cs_success || as_fn_exit 1
-fi
-if test -n "$ac_unrecognized_opts" && test "$enable_option_checking" != no; then
-  { $as_echo "$as_me:${as_lineno-$LINENO}: WARNING: unrecognized options: $ac_unrecognized_opts" >&5
-$as_echo "$as_me: WARNING: unrecognized options: $ac_unrecognized_opts" >&2;}
-fi
-
-
-echo "
-${PACKAGE_NAME} version ${PACKAGE_VERSION}
-----------------------------------------------------------------------
- Prefix            : ${prefix}
- Compiler          : ${CC} ${CFLAGS} ${CPPFLAGS}"
-if test "x$groff_no_x" = "xyes"; then
-echo "\
- X11 support       : no"
-else
-echo "\
- X11 support       : yes
- X11 resources dir : $appresdir"
-fi
-if test "x$doc" = x; then
-echo "\
- Doc build         : no"
-else
-echo "\
- Doc build         : ${doc} "
-fi
-echo "\
-----------------------------------------------------------------------"
-
-if test -z "$groff_no_x"; then
-     if test "x$with_appresdir" = "x"; then
-       { $as_echo "$as_me:${as_lineno-$LINENO}:
-  The application resource files for gxditview (GXditview and
-  GXditview-color) will be installed in:
-
-    $appresdir
-
-  (existing files will be saved by appending \`.old' to the file
-  name).
-
-  To install them into a different directory, say,
-  \`/etc/X11/app-defaults', add
-  \`--with-appresdir=/etc/X11/app-defaults' to the configure script
-  command line options and rerun it (\`prefix' value has no effect on
-  a --with-appresdir option).
-
-  If the gxditview resources are installed in a directory that is not
-  one of the default X11 resources directories (common default
-  directories are /usr/lib/X11/app-defaults,
-  /usr/share/X11/app-defaults and /etc/X11/app-defaults), you will
-  have to set the environment variable XFILESEARCHPATH to this
-  path.  More details can be found in the X(7) manual page, or in \"X
-  Toolkit Intrinsics - C Language Interface manual\"
-       " >&5
-$as_echo "$as_me:
-  The application resource files for gxditview (GXditview and
-  GXditview-color) will be installed in:
-
-    $appresdir
-
-  (existing files will be saved by appending \`.old' to the file
-  name).
-
-  To install them into a different directory, say,
-  \`/etc/X11/app-defaults', add
-  \`--with-appresdir=/etc/X11/app-defaults' to the configure script
-  command line options and rerun it (\`prefix' value has no effect on
-  a --with-appresdir option).
-
-  If the gxditview resources are installed in a directory that is not
-  one of the default X11 resources directories (common default
-  directories are /usr/lib/X11/app-defaults,
-  /usr/share/X11/app-defaults and /etc/X11/app-defaults), you will
-  have to set the environment variable XFILESEARCHPATH to this
-  path.  More details can be found in the X(7) manual page, or in \"X
-  Toolkit Intrinsics - C Language Interface manual\"
-       " >&6;}
-     fi
-   fi
diff -Nuar groff-1.22.3.old/configure.ac groff-1.22.3/configure.ac
--- groff-1.22.3.old/configure.ac	2014-11-04 10:38:35.143525022 +0200
+++ groff-1.22.3/configure.ac	2015-04-23 20:57:03.000000000 +0300
@@ -37,20 +37,28 @@
                 GROFF_VERSION[.]GROFF_REVISION,
                 GROFF_VERSION))
 
-AC_INIT([groff],
+AC_INIT([GNU Troff],
         GROFF_VERSION_STRING,
         [bug-groff@gnu.org],
-        [groff-]GROFF_VERSION_STRING)
+        [groff])
 AC_PREREQ([2.62])
 
+# Directories where the helper scripts should be found. This must be consistent
+# with the variable build_aux in bootstrap.conf
+AC_CONFIG_AUX_DIR([build-aux])
+
 AC_CONFIG_HEADERS([src/include/config.h:src/include/config.hin])
 AC_CONFIG_SRCDIR([src/roff/groff/groff.cpp])
 
 AC_USE_SYSTEM_EXTENSIONS
 
+AM_INIT_AUTOMAKE([subdir-objects])
+
 # checks for programs
 AC_PROG_CC
 AC_PROG_CXX
+gl_EARLY
+gl_INIT
 GROFF_CXX_CHECK
 GROFF_EBCDIC
 GROFF_OS390
@@ -77,6 +85,8 @@
 GROFF_INSTALL_INFO
 AC_PROG_INSTALL
 AC_PROG_LN_S
+AC_PROG_MKDIR_P
+GROFF_PROG_XPMTOPPM
 
 # use a dummy substitution if no csh hack is necessary to avoid errors
 # with non-GNU sed programs
@@ -160,13 +170,38 @@
 GROFF_HTML_PROGRAMS
 GROFF_PDFDOC_PROGRAMS
 GROFF_PNMTOPS_NOSETPAGE
+GROFF_MAKE_RM
 gl_GLIBC21
 gl_LOCALCHARSET
 
-AC_CONFIG_FILES([stamp-h], [echo timestamp > stamp-h])
-AC_CONFIG_FILES([Makefile doc/Makefile src/utils/xtotroff/Makefile])
-AC_CONFIG_FILES([contrib/gdiffmk/tests/runtests],
-                [chmod +x contrib/gdiffmk/tests/runtests])
+AM_CONDITIONAL([BUILD_WINSCRIPTS], [test -n "$make_winscripts"])
+
+# If X11 is not available, don't build:
+# font/devX75 
+# font/devX75-12
+# font/devX100
+# font/devX100-12
+# src/devices/xditview 
+# src/utils/xtotroff
+# src/libs/libxutil
+AM_CONDITIONAL([WITHOUT_X11], [test "x$groff_no_x" = "xyes"])
+
+# make builtin variable RM
+AM_CONDITIONAL([MAKE_DONT_HAVE_RM], [test "x$groff_is_rm_defined" = "xno"])
+
+# Some programs have a "g" prefix if an existing groff installation is detected
+AM_CONDITIONAL([USEPROGRAMPREFIX], [test x$g = xg])
+
+AM_CONDITIONAL([BUILD_INFODOC], [test -n "$make_infodoc"])
+AM_CONDITIONAL([BUILD_HTML], [test -n "$make_htmldoc"])
+AM_CONDITIONAL([BUILD_HTMLEXAMPLES], [test -n "$make_htmlexamples"])
+AM_CONDITIONAL([BUILD_PDFDOC], [test -n "$make_pdfdoc"])
+AM_CONDITIONAL([BUILD_PDFEXAMPLES], [test -n "$make_pdfexamples"])
+AM_CONDITIONAL([BUILD_OTHERDOC], [test -n "$make_otherdoc"])
+AM_CONDITIONAL([BUILD_EXAMPLES], [test -n "$make_examples"])
+AM_CONDITIONAL([INSTALL_SHIPPED_HTML], [test -n "$make_install_shipped_htmldoc"])
+
+AC_CONFIG_FILES([Makefile])
 AC_CONFIG_FILES([test-groff], [chmod +x test-groff])
 AC_OUTPUT
 
diff -Nuar groff-1.22.3.old/contrib/chem/ChangeLog groff-1.22.3/contrib/chem/ChangeLog
--- groff-1.22.3.old/contrib/chem/ChangeLog	2014-11-04 10:38:35.438521334 +0200
+++ groff-1.22.3/contrib/chem/ChangeLog	2015-04-23 20:57:03.000000000 +0300
@@ -1,3 +1,8 @@
+2015-04-03  Werner LEMBERG  <wl@gnu.org>
+
+	* chem.man: Make it work in compatibility mode.
+	(EL): Fix typo.
+
 2014-09-25  Bernd Warken  <bernd.warken@web.de>
 
 	* chem.pl: New chem version 1.0.5.
diff -Nuar groff-1.22.3.old/contrib/chem/chem.am groff-1.22.3/contrib/chem/chem.am
--- groff-1.22.3.old/contrib/chem/chem.am	1970-01-01 02:00:00.000000000 +0200
+++ groff-1.22.3/contrib/chem/chem.am	2015-04-23 20:57:03.000000000 +0300
@@ -0,0 +1,121 @@
+# Automake rules for `chem'
+
+# File position: <groff-source>/contrib/chem/chem.am
+
+# Copyright (C) 2006-14
+#   Free Software Foundation, Inc.
+# Written by Bernd Warken <groff-bernd.warken-72@web.de>.
+# Moved to automake by Bertrand Garrigues
+
+# This file is part of `chem' which is part of `groff'.
+
+# `groff' is free software; you can redistribute it and/or modify it
+# under the terms of the GNU General Public License (GPL) version 2 as
+# published by the Free Software Foundation.
+
+# `groff' is distributed in the hope that it will be useful, but
+# WITHOUT ANY WARRANTY; without even the implied warranty of
+# MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the GNU
+# General Public License for more details.
+
+# The GPL2 license text is available in the internet at
+# <http://www.gnu.org/licenses/gpl-2.0.html>.
+
+########################################################################
+
+chem_srcdir = $(top_srcdir)/contrib/chem
+prefixexecbin_SCRIPTS += chem
+
+# Files installed in $(datasubdir)/pic
+chempicdir = $(datasubdir)/pic
+dist_chempic_DATA = contrib/chem/chem.pic
+
+
+CHEM_GENEXAMPLES = contrib/chem/examples/README
+CHEM_EXAMPLES =  \
+  contrib/chem/examples/atp.chem \
+  contrib/chem/examples/cholesterin.chem \
+  contrib/chem/examples/ethamivan.chem \
+  contrib/chem/examples/lsd.chem \
+  contrib/chem/examples/morphine.chem \
+  contrib/chem/examples/penicillin.chem \
+  contrib/chem/examples/reserpine.chem
+
+if BUILD_EXAMPLES
+# Files installed in $(exampledir)/chem
+chemexampledir = $(exampledir)/chem
+nodist_chemexample_DATA = $(CHEM_GENEXAMPLES)
+dist_chemexample_DATA = $(CHEM_EXAMPLES)
+
+# Files installed in $(exampledir)/chem/122. All the .chem files in 122 are 
+# lazily installed by the local install target
+chemexample122dir = $(chemexampledir)/122
+nodist_chemexample122_DATA = contrib/chem/examples/122/README
+endif
+EXTRA_DIST += \
+  contrib/chem/ChangeLog \
+  contrib/chem/chem.man \
+  contrib/chem/chem.pic \
+  contrib/chem/chem.pl \
+  contrib/chem/README.txt \
+  contrib/chem/examples/README.txt \
+  contrib/chem/examples/122/README.txt
+
+man1_MANS += contrib/chem/chem.n
+MOSTLYCLEANFILES += $(CHEM_GENEXAMPLES) $(nodist_chemexample122_DATA) \
+  contrib/chem/README
+
+# This is strangly built but not installed
+all: contrib/chem/README
+
+contrib/chem/README: $(chem_srcdir)/README.txt
+	@$(MKDIR_P) contrib/chem/
+	sed -e "s|[@]g[@]|$(g)|g" $? >$@
+
+contrib/chem/examples/README: $(chem_srcdir)/examples/README.txt
+	@$(MKDIR_P) contrib/chem/examples
+	sed -e "s|[@]g[@]|$(g)|g" $? >$@
+
+contrib/chem/examples/122/README: $(chem_srcdir)/examples/122/README.txt
+	@$(MKDIR_P) contrib/chem/examples/122
+	sed -e "s|[@]g[@]|$(g)|g" $? >$@
+
+chem: $(chem_srcdir)/chem.pl $(SH_DEPS_SED_SCRIPT)
+	$(RM) $@
+	sed -f "$(SH_DEPS_SED_SCRIPT)" \
+	    -e "s|[@]g[@]|$(g)|g" \
+	    -e "s|[@]BINDIR[@]|$(DESTDIR)$(bindir)|g" \
+	    -e "s|[@]MACRODIR[@]|$(DESTDIR)$(tmacdir)|g" \
+	    -e "s|[@]PICDIR[@]|$(DESTDIR)$(datasubdir)/pic|g" \
+	    -e "s|[@]VERSION[@]|$(VERSION)|g" \
+	    -e "$(SH_SCRIPT_SED_CMD)" \
+	    $(chem_srcdir)/chem.pl >$@
+	chmod +x $@
+
+install-data-local: install_chem_extra
+install_chem_extra:
+if BUILD_EXAMPLES
+	-test -d $(DESTDIR)$(chemexample122dir) \
+          || $(mkinstalldirs) $(DESTDIR)$(chemexample122dir);
+	for i in $(chem_srcdir)/examples/122/*.chem; do \
+	  n=`echo $$i | sed 's|$(chem_srcdir)/examples/122/||g'`; \
+	  $(INSTALL_DATA) $$i $(DESTDIR)$(chemexample122dir)/$$n; \
+	done
+endif
+
+uninstall-local: uninstall_chem_extra
+uninstall_chem_extra:
+if BUILD_EXAMPLES
+	$(RM) $(DESTDIR)$(exampledir)/chem/122/*
+	-rmdir $(DESTDIR)$(exampledir)/chem/122
+	$(RM) $(DESTDIR)$(exampledir)/chem/*
+	-rmdir $(DESTDIR)$(exampledir)/chem
+endif
+	-rmdir $(DESTDIR)$(datasubdir)/pic
+
+dist-hook: dist_chem
+dist_chem:
+	chmod u+w $(distdir)/contrib/chem/examples/122
+	for i in $(chem_srcdir)/examples/122/*.chem; do \
+	  cp -f $$i $(distdir)/contrib/chem/examples/122; \
+	done
diff -Nuar groff-1.22.3.old/contrib/chem/chem.man groff-1.22.3/contrib/chem/chem.man
--- groff-1.22.3.old/contrib/chem/chem.man	2014-11-04 10:38:35.438521334 +0200
+++ groff-1.22.3/contrib/chem/chem.man	2015-04-23 20:57:03.000000000 +0300
@@ -12,7 +12,7 @@
 .\" --------------------------------------------------------------------
 .
 .de co
-Copyright \[co] 2006-2014 Free Software Foundation, Inc.
+Copyright \(co 2006-2014 Free Software Foundation, Inc.
 
 This file is part of chem, which is part of groff, a free software
 project.
@@ -39,13 +39,16 @@
 .\" Setup
 .\" --------------------------------------------------------------------
 .
+.do nr groff_C \n[.C]
+.cp 0
+.
 .\" --------------------------------------------------------------------
 .\" Characters
 .\" --------------------------------------------------------------------
 .
 .\" Ellipsis ...
-.ie t .ds EL \fS\N'188'\fP
-.el .ds EL \&.\|.\|.\&\
+.ie t .ds EL \fS\N'188'\fP\"
+.el .ds EL \&.\|.\|.\&\"
 .\" called with \*(EL
 .
 .\" Bullet
@@ -999,6 +1002,9 @@
 .au
 .
 .
+.cp \n[groff_C]
+.
+.
 .\" --------------------------------------------------------------------
 .\" Emacs settings
 .\" --------------------------------------------------------------------
diff -Nuar groff-1.22.3.old/contrib/chem/examples/.gitignore groff-1.22.3/contrib/chem/examples/.gitignore
--- groff-1.22.3.old/contrib/chem/examples/.gitignore	1970-01-01 02:00:00.000000000 +0200
+++ groff-1.22.3/contrib/chem/examples/.gitignore	2015-04-23 20:57:03.000000000 +0300
@@ -0,0 +1 @@
+README
diff -Nuar groff-1.22.3.old/contrib/chem/.gitignore groff-1.22.3/contrib/chem/.gitignore
--- groff-1.22.3.old/contrib/chem/.gitignore	1970-01-01 02:00:00.000000000 +0200
+++ groff-1.22.3/contrib/chem/.gitignore	2015-04-23 20:57:03.000000000 +0300
@@ -0,0 +1,3 @@
+chem
+chem.n
+README
diff -Nuar groff-1.22.3.old/contrib/chem/Makefile.sub groff-1.22.3/contrib/chem/Makefile.sub
--- groff-1.22.3.old/contrib/chem/Makefile.sub	2014-11-04 10:38:35.438521334 +0200
+++ groff-1.22.3/contrib/chem/Makefile.sub	1970-01-01 02:00:00.000000000 +0200
@@ -1,124 +0,0 @@
-# Makefile.sub for `chem'
-
-# File position: <groff-source>/contrib/chem/Makefile.sub
-
-# Copyright (C) 2006-2014  Free Software Foundation, Inc.
-# Written by Bernd Warken <groff-bernd.warken-72@web.de>.
-
-# This file is part of `chem' which is part of `groff'.
-
-# `groff' is free software; you can redistribute it and/or modify it
-# under the terms of the GNU General Public License (GPL) version 2 as
-# published by the Free Software Foundation.
-
-# `groff' is distributed in the hope that it will be useful, but
-# WITHOUT ANY WARRANTY; without even the implied warranty of
-# MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the GNU
-# General Public License for more details.
-
-# The GPL2 license text is available in the internet at
-# <http://www.gnu.org/licenses/gpl-2.0.html>.
-
-########################################################################
-
-MAN1=chem.n
-MOSTLYCLEANADD=\
-  chem \
-  chem.n \
-  README \
-  examples/README \
-  examples/122/README
-
-RM=rm -f
-
-all: README chem $(MAN1) $(make_examples)
-
-README: $(srcdir)/README.txt
-	sed -e "s|@g@|$(g)|g" $? >$@
-
-.PHONY: examples
-examples: examples/README examples/122/README
-
-examples/README: $(srcdir)/examples/README.txt
-	test -d examples || $(mkinstalldirs) examples;
-	sed -e "s|@g@|$(g)|g" $? >$@
-
-examples/122/README: $(srcdir)/examples/122/README.txt
-	test -d examples || $(mkinstalldirs) examples;
-	test -d examples/122 || $(mkinstalldirs) examples/122;
-	sed -e "s|@g@|$(g)|g" $? >$@;
-
-chem: $(srcdir)/chem.pl $(SH_DEPS_SED_SCRIPT)
-	$(RM) $@;
-	sed -f "$(SH_DEPS_SED_SCRIPT)" \
-	    -e "s|@g@|$(g)|g" \
-	    -e "s|@BINDIR@|$(DESTDIR)$(bindir)|g" \
-	    -e "s|@MACRODIR@|$(DESTDIR)$(tmacdir)|g" \
-	    -e "s|@PICDIR@|$(DESTDIR)$(datasubdir)/pic|g" \
-	    -e "s|@VERSION@|$(version)$(revision)|g" \
-	    -e "$(SH_SCRIPT_SED_CMD)" \
-	    $(srcdir)/chem.pl >$@;
-	chmod +x $@;
-
-.PHONY: install_always
-install_always: chem README $(srcdir)/chem.pic
-	test -d $(DESTDIR)$(bindir) || $(mkinstalldirs) $(DESTDIR)$(bindir);
-	$(RM) $(DESTDIR)$(bindir)/$(g)chem;
-	$(INSTALL_SCRIPT) chem $(DESTDIR)$(bindir)/$(g)chem;
-	test -d $(DESTDIR)$(datasubdir)/pic \
-	  || $(mkinstalldirs) $(DESTDIR)$(datasubdir)/pic;
-	$(RM) $(DESTDIR)$(datasubdir)/pic/chem.pic;
-	$(INSTALL_DATA) $(srcdir)/chem.pic \
-	  $(DESTDIR)$(datasubdir)/pic/chem.pic;
-
-.PHONY: install_examples
-install_examples:
-	test -d $(DESTDIR)$(exampledir)/chem \
-	  || $(mkinstalldirs) $(DESTDIR)$(exampledir)/chem;
-	test -d $(DESTDIR)$(exampledir)/chem/122 \
-	  || $(mkinstalldirs) $(DESTDIR)$(exampledir)/chem/122;
-	find $(DESTDIR)$(exampledir)/chem -type f -exec rm -f '{}' ';'
-	$(INSTALL_DATA) examples/README $(DESTDIR)$(exampledir)/chem/README;
-	for i in $(srcdir)/examples/*.chem; do \
-	  n=`echo $$i | sed 's|$(srcdir)/examples/||g'`; \
-	  $(INSTALL_DATA) $$i $(DESTDIR)$(exampledir)/chem/$$n; \
-	done;
-	$(INSTALL_DATA) examples/122/README \
-	  $(DESTDIR)$(exampledir)/chem/122/README;
-	for i in $(srcdir)/examples/122/*.chem; do \
-	  n=`echo $$i | sed 's|$(srcdir)/examples/122/||g'`; \
-	  $(INSTALL_DATA) $$i $(DESTDIR)$(exampledir)/chem/122/$$n; \
-	done
-
-.PHONY: install_data
-
-install_data: install_always $(make_install_examples)
-
-# uninstall_sub: uninstall_always $(make_uninstall_examples)
-
-.PHONY: uninstall_always
-uninstall_always:
-	$(RM) $(DESTDIR)$(bindir)/chem;
-	$(RM) $(DESTDIR)$(datasubdir)/pic/chem.pic;
-	-test -d $(DESTDIR)$(datasubdir)/pic && \
-	  rmdir $(DESTDIR)$(datasubdir)/pic;
-
-.PHONY: uninstall_examples
-uninstall_examples:
-	$(RM) $(DESTDIR)$(exampledir)/chem/122/*;
-	-test -d $(DESTDIR)$(exampledir)/chem/122 && \
-	  rmdir $(DESTDIR)$(exampledir)/chem/122;
-	$(RM) $(DESTDIR)$(exampledir)/chem/*;
-	-test -d $(DESTDIR)$(exampledir)/chem && \
-	  rmdir $(DESTDIR)$(exampledir)/chem;
-
-.PHONY: uninstall_sub
-uninstall_sub: uninstall_always uninstall_examples
-
-########################################################################
-# Emacs settings
-########################################################################
-#
-# Local Variables:
-# mode: makefile
-# End:
diff -Nuar groff-1.22.3.old/contrib/eqn2graph/eqn2graph.am groff-1.22.3/contrib/eqn2graph/eqn2graph.am
--- groff-1.22.3.old/contrib/eqn2graph/eqn2graph.am	1970-01-01 02:00:00.000000000 +0200
+++ groff-1.22.3/contrib/eqn2graph/eqn2graph.am	2015-04-23 20:57:03.000000000 +0300
@@ -0,0 +1,33 @@
+# Copyright (C) 2002-2014
+#   Free Software Foundation, Inc.
+#
+# This file is part of groff.
+#
+# groff is free software; you can redistribute it and/or modify it under
+# the terms of the GNU General Public License as published by the Free
+# Software Foundation, either version 3 of the License, or
+# (at your option) any later version.
+#
+# groff is distributed in the hope that it will be useful, but WITHOUT ANY
+# WARRANTY; without even the implied warranty of MERCHANTABILITY or
+# FITNESS FOR A PARTICULAR PURPOSE.  See the GNU General Public License
+# for more details.
+#
+# You should have received a copy of the GNU General Public License
+# along with this program. If not, see <http://www.gnu.org/licenses/>.
+#
+# eqn2graph.am
+#
+
+eqn2graph_srcdir = $(top_srcdir)/contrib/eqn2graph
+bin_SCRIPTS += eqn2graph
+man1_MANS += contrib/eqn2graph/eqn2graph.n
+EXTRA_DIST += \
+  contrib/eqn2graph/eqn2graph.man \
+  contrib/eqn2graph/eqn2graph.sh
+
+eqn2graph: $(top_srcdir)/contrib/eqn2graph/eqn2graph.sh
+	sed -e "s|[@]g[@]|$(g)|g" \
+	    -e "s|[@]VERSION[@]|$(VERSION)|" \
+	    -e $(SH_SCRIPT_SED_CMD) $(eqn2graph_srcdir)/eqn2graph.sh >$@
+	chmod +x $@
diff -Nuar groff-1.22.3.old/contrib/eqn2graph/.gitignore groff-1.22.3/contrib/eqn2graph/.gitignore
--- groff-1.22.3.old/contrib/eqn2graph/.gitignore	1970-01-01 02:00:00.000000000 +0200
+++ groff-1.22.3/contrib/eqn2graph/.gitignore	2015-04-23 20:57:03.000000000 +0300
@@ -0,0 +1,2 @@
+eqn2graph
+eqn2graph.n
diff -Nuar groff-1.22.3.old/contrib/eqn2graph/Makefile.sub groff-1.22.3/contrib/eqn2graph/Makefile.sub
--- groff-1.22.3.old/contrib/eqn2graph/Makefile.sub	2014-11-04 10:38:35.442521284 +0200
+++ groff-1.22.3/contrib/eqn2graph/Makefile.sub	1970-01-01 02:00:00.000000000 +0200
@@ -1,47 +0,0 @@
-# Copyright (C) 2002-2014
-#   Free Software Foundation, Inc.
-#
-# This file is part of groff.
-#
-# groff is free software; you can redistribute it and/or modify it under
-# the terms of the GNU General Public License as published by the Free
-# Software Foundation, either version 3 of the License, or
-# (at your option) any later version.
-#
-# groff is distributed in the hope that it will be useful, but WITHOUT ANY
-# WARRANTY; without even the implied warranty of MERCHANTABILITY or
-# FITNESS FOR A PARTICULAR PURPOSE.  See the GNU General Public License
-# for more details.
-#
-# You should have received a copy of the GNU General Public License
-# along with this program. If not, see <http://www.gnu.org/licenses/>.
-#
-# Makefile.sub
-#
-MAN1=eqn2graph.n
-MOSTLYCLEANADD=eqn2graph
-RM=rm -f
-
-all: eqn2graph
-
-eqn2graph: eqn2graph.sh
-	sed -e "s|@g@|$(g)|g" \
-	    -e "s|@VERSION@|$(version)$(revision)|" \
-	    -e $(SH_SCRIPT_SED_CMD) $(srcdir)/eqn2graph.sh >$@
-	chmod +x $@
-
-install_data: eqn2graph
-	-test -d $(DESTDIR)$(bindir) || $(mkinstalldirs) $(DESTDIR)$(bindir)
-	$(RM) $(DESTDIR)$(bindir)/eqn2graph
-	$(INSTALL_SCRIPT) eqn2graph $(DESTDIR)$(bindir)/eqn2graph
-
-uninstall_sub:
-	$(RM) $(DESTDIR)$(bindir)/eqn2graph
-
-########################################################################
-# Emacs settings
-########################################################################
-#
-# Local Variables:
-# mode: makefile
-# End:
diff -Nuar groff-1.22.3.old/contrib/gdiffmk/ChangeLog groff-1.22.3/contrib/gdiffmk/ChangeLog
--- groff-1.22.3.old/contrib/gdiffmk/ChangeLog	2014-11-04 10:38:35.446521234 +0200
+++ groff-1.22.3/contrib/gdiffmk/ChangeLog	2015-04-23 20:57:03.000000000 +0300
@@ -1,3 +1,49 @@
+2015-04-13  Mike Bianchi <MBianchi@Foveal.com>
+	More fixes to Savannah bug #44768.
+
+	* gdiffmk.sh:
+		replace
+			for OPTION   with  while [ $# -gt 0 ]
+
+			test -e ...  with  test -f
+
+			use  ${DIFFCMD}  for the last  diff
+		add	
+			-s SEDCMD  option
+			OPTION="$1"
+	
+		many other cosmetic changes documented in the bug Discussion.
+		especially:
+			capitalize variables  e.g.  CMD=`basename $0`
+ 
+	fix  make check  tests within gdiffmk
+	* tests/gdiffmk_tests.sh
+		add  set -e
+			fails if ${abs_top_builddir} not set or incorrect
+
+	* tests/runtests.sh
+		add test 6a
+			# Different values for addmark, changemark, deletemark
+			# Alternate format of -a -c and -d flag arguments
+
+		add test 9a
+			# Test -D  and  -M  options
+			# Alternate format of -M argument.
+
+		add printout of failure count
+		add exit with failure exit_code if any test fails
+
+2015-04-10  Werner LEMBERG  <wl@gnu.org>
+
+	Fix Savannah bug #44768.
+
+	* gdiffmk.sh: Remove bash's $(...) with classic `...`.
+	Patch by Peter Bray.
+
+2015-04-03  Werner LEMBERG  <wl@gnu.org
+
+	* gdiffmk.man: Make it work in compatibility mode.
+
 2014-09-03  Bernd Warken  <groff-bernd.warken-72@web.de>
 
 	* all `gdiffmk' source files: Add and improve the copying
diff -Nuar groff-1.22.3.old/contrib/gdiffmk/gdiffmk.am groff-1.22.3/contrib/gdiffmk/gdiffmk.am
--- groff-1.22.3.old/contrib/gdiffmk/gdiffmk.am	1970-01-01 02:00:00.000000000 +0200
+++ groff-1.22.3/contrib/gdiffmk/gdiffmk.am	2015-04-23 20:57:03.000000000 +0300
@@ -0,0 +1,58 @@
+# Automake rules for `gdiffmk' (integration into the groff source tree)
+#
+# File position: <groff-source>/contrib/gdiffmk/gdiffmk.am
+#
+# Copyright (C) 2004, 2006, 2009, 2014 Free Software Foundation, Inc.
+# Written by Mike Bianchi <MBianchi@Foveal.com <mailto:MBianchi@Foveal.com>>
+# Automake migration by Bertrand Garrigues
+#
+# This file is part of the gdiffmk utility, which is part of groff.
+#
+# groff is free software; you can redistribute it and/or modify it
+# under the terms of the GNU General Public License as published by
+# the Free Software Foundation, either version 3 of the License, or
+# (at your option) any later version.
+
+# groff is distributed in the hope that it will be useful, but WITHOUT
+# ANY WARRANTY; without even the implied warranty of MERCHANTABILITY
+# or FITNESS FOR A PARTICULAR PURPOSE.  See the GNU General Public
+# License for more details.
+#
+# You should have received a copy of the GNU General Public License
+# along with this program. If not, see <http://www.gnu.org/licenses/>.
+
+########################################################################
+gdiffmk_srcdir = $(top_srcdir)/contrib/gdiffmk
+bin_SCRIPTS += gdiffmk
+TESTS += contrib/gdiffmk/tests/gdiffmk_tests.sh
+man1_MANS += contrib/gdiffmk/gdiffmk.n
+EXTRA_DIST += \
+  contrib/gdiffmk/gdiffmk.man \
+  contrib/gdiffmk/ChangeLog \
+  contrib/gdiffmk/README \
+  contrib/gdiffmk/gdiffmk.sh \
+  contrib/gdiffmk/tests/gdiffmk_tests.sh \
+  contrib/gdiffmk/tests/runtests.sh \
+  contrib/gdiffmk/tests/baseline \
+  contrib/gdiffmk/tests/baseline.6 \
+  contrib/gdiffmk/tests/baseline.6a \
+  contrib/gdiffmk/tests/baseline.7 \
+  contrib/gdiffmk/tests/baseline.8 \
+  contrib/gdiffmk/tests/baseline.9 \
+  contrib/gdiffmk/tests/baseline.9a \
+  contrib/gdiffmk/tests/baseline.10 \
+  contrib/gdiffmk/tests/file1 \
+  contrib/gdiffmk/tests/file2
+
+gdiffmk: $(gdiffmk_srcdir)/gdiffmk.sh
+	sed -e "s|[@]BINDIR[@]|$(bindir)|g" \
+	    -e "s|[@]VERSION[@]|$(VERSION)|g" \
+	    -e $(SH_SCRIPT_SED_CMD)  $(gdiffmk_srcdir)/gdiffmk.sh >$@
+	chmod +x $@
+
+clean-local: clean_gdiffmk_check
+clean_gdiffmk_check:
+	if test -d $(top_builddir)/contrib/gdiffmk/tests; then \
+	  cd $(top_builddir)/contrib/gdiffmk/tests && \
+	  $(abs_top_srcdir)/contrib/gdiffmk/tests/runtests.sh clean; \
+	fi
diff -Nuar groff-1.22.3.old/contrib/gdiffmk/gdiffmk.man groff-1.22.3/contrib/gdiffmk/gdiffmk.man
--- groff-1.22.3.old/contrib/gdiffmk/gdiffmk.man	2014-11-04 10:38:35.446521234 +0200
+++ groff-1.22.3/contrib/gdiffmk/gdiffmk.man	2015-04-23 20:57:03.000000000 +0300
@@ -10,7 +10,7 @@
 .\" --------------------------------------------------------------------
 .
 .de co
-Copyright \[co] 2004-2014 Free Software Foundation, Inc.
+Copyright \(co 2004-2014 Free Software Foundation, Inc.
 
 This file is part of the gdiffmk utility, which is part of groff, a
 free software project.
diff -Nuar groff-1.22.3.old/contrib/gdiffmk/gdiffmk.sh groff-1.22.3/contrib/gdiffmk/gdiffmk.sh
--- groff-1.22.3.old/contrib/gdiffmk/gdiffmk.sh	2014-11-04 10:38:35.446521234 +0200
+++ groff-1.22.3/contrib/gdiffmk/gdiffmk.sh	2015-04-23 20:57:03.000000000 +0300
@@ -1,6 +1,7 @@
 #! /bin/sh
 # Copyright (C) 2004-2014 Free Software Foundation, Inc.
 # Written by Mike Bianchi <MBianchi@Foveal.com <mailto:MBianchi@Foveal.com>>
+# Thanks to Peter Bray for debugging.
 
 # This file is part of the gdiffmk utility, which is part of groff.
 
@@ -19,16 +20,16 @@
 # This file is part of GNU gdiffmk.
 
 
-cmd=$( basename $0 )
+CMD=`basename $0`
 
 Usage () {
-	if test "$#" -gt 0
+	if test $# -gt 0
 	then
-		echo >&2 "${cmd}:  $@"
+		echo >&2 "${CMD}:  $@"
 	fi
 	echo >&2 "\
 
-Usage:  ${cmd} [ OPTIONS ] FILE1 FILE2 [ OUTPUT ]
+Usage:  ${CMD} [ OPTIONS ] FILE1 FILE2 [ OUTPUT ]
 Place difference marks into the new version of a groff/nroff/troff document.
 FILE1 and FILE2 are compared, using \`diff', and FILE2 is output with
 groff \`.mc' requests added to indicate how it is different from FILE1.
@@ -53,6 +54,8 @@
 
   -x DIFFCMD     Use a different diff(1) command;
                   one that accepts the \`-Dname' option, such as GNU diff.
+  -s SEDCMD      Use a different sed(1) command;
+                  one that accepts ????????????????????, such as GNU sed.
   --version      Print version information on the standard output and exit.
   --help         Print this message on the standard error.
 "
@@ -65,7 +68,7 @@
 	shift
 	for arg
 	do
-		echo >&2 "${cmd}:  $1"
+		echo >&2 "${CMD}:  $1"
 		shift
 	done
 	exit ${exitcode}
@@ -82,7 +85,7 @@
 		;;
 	esac
 
-	if test ! -e "$2"
+	if test ! -f "$2"
 	then
 		Exit $1 "File \`$2' not found."
 	fi
@@ -104,12 +107,13 @@
 		;;
 	esac
 
-	if ! touch "$2" 2>/dev/null
+	touch "$2" 2>/dev/null
+	if test $? -ne 0
 	then
-		if test ! -e "$2"
+		if test ! -f "$2"
 		then
 			Exit $1 "File \`$2' not created; " \
-			  "Cannot write directory \`$( dirname "$2" )'."
+			  "Cannot write directory \``dirname "$2"`'."
 		fi
 		Exit $1 "File \`$2' not writeable."
 	fi
@@ -146,7 +150,7 @@
 		;;
 	esac
 
-	if test "$#" -lt 2
+	if test $# -lt 2
 	then
 		Exit 255 "Option \`$1' requires a value."
 	fi
@@ -155,47 +159,53 @@
 	return 0
 }
 
-badoption=
+BADOPTION=
 DIFFCMD=diff
+SEDCMD=sed
 D_option=
 br=.br
-for OPTION
+while [ $# -gt 0 ]
 do
+	OPTION="$1"
 	case "${OPTION}" in
 	-a*)
-		ADDMARK=$( RequiresArgument "${OPTION}" $2 )		&&
+		ADDMARK=`RequiresArgument "${OPTION}" "$2"`		&&
 			shift
 		;;
 	-c*)
-		CHANGEMARK=$( RequiresArgument "${OPTION}" $2 )		&&
+		CHANGEMARK=`RequiresArgument "${OPTION}" "$2"`		&&
 			shift
 		;;
 	-d*)
-		DELETEMARK=$( RequiresArgument "${OPTION}" $2 )		&&
+		DELETEMARK=`RequiresArgument "${OPTION}" "$2"`		&&
 			shift
 		;;
 	-D )
 		D_option=D_option
 		;;
 	-M* )
-		MARK1=$( RequiresArgument "${OPTION}" $2 )		&&
+		MARK1=`RequiresArgument "${OPTION}" "$2"`		&&
 			shift
 		if [ $# -lt 2 ]
 		then
 			Usage "Option \`-M' is missing the MARK2 value."
 		fi
-		MARK2=$2
+		MARK2="$2"
 		shift
 		;;
 	-B )
 		br=.
 		;;
+	-s* )
+		SEDCMD=`RequiresArgument "${OPTION}" "$2"`		&&
+			shift
+		;;
 	-x* )
-		DIFFCMD=$( RequiresArgument "${OPTION}" $2 )		&&
+		DIFFCMD=`RequiresArgument "${OPTION}" "$2"`		&&
 			shift
 		;;
 	--version)
-		echo "GNU ${cmd} (groff) version @VERSION@"
+		echo "GNU ${CMD} (groff) version @VERSION@"
 		exit 0
 		;;
 	--help)
@@ -210,7 +220,7 @@
 		break
 		;;
 	-*)
-		badoption="${cmd}:  invalid option \`$1'"
+		BADOPTION="${CMD}:  invalid option \`$1'"
 		;;
 	*)
 		break
@@ -224,28 +234,28 @@
 		"the required \`-Dname' option.
 Use GNU diff instead.  See the \`-x DIFFCMD' option."
 
-if test -n "${badoption}"
+if test -n "${BADOPTION}"
 then
-	Usage "${badoption}"
+	Usage "${BADOPTION}"
 fi
 
-if test "$#" -lt 2  -o  "$#" -gt 3
+if test $# -lt 2  -o  $# -gt 3
 then
 	Usage "Incorrect number of arguments."
 fi
 
-if test "1$1" = 1-  -a  "2$2" = 2-
+if test "1$1" = "1-"  -a  "2$2" = "2-"
 then
 	Usage "Both FILE1 and FILE2 are \`-'."
 fi
 
-FILE1=$1
-FILE2=$2
+FILE1="$1"
+FILE2="$2"
 
 FileRead 1 "${FILE1}"
 FileRead 2 "${FILE2}"
 
-if test "$#" = 3
+if test $# = 3
 then
 	case "$3" in
 	-)
@@ -262,24 +272,24 @@
 	esac
 fi
 
-#	To make a very unlikely label even more unlikely ...
-label=__diffmk_$$__
+#	To make a very unlikely LABEL even more unlikely ...
+LABEL=__diffmk_$$__
 
-sed_script='
-		/^#ifdef '"${label}"'/,/^#endif \/\* '"${label}"'/ {
-		  /^#ifdef '"${label}"'/          s/.*/.mc '"${ADDMARK}"'/
-		  /^#endif \/\* '"${label}"'/     s/.*/.mc/
+SED_SCRIPT='
+		/^#ifdef '"${LABEL}"'/,/^#endif \/\* '"${LABEL}"'/ {
+		  /^#ifdef '"${LABEL}"'/          s/.*/.mc '"${ADDMARK}"'/
+		  /^#endif \/\* '"${LABEL}"'/     s/.*/.mc/
 		  p
 		  d
 		}
-		/^#ifndef '"${label}"'/,/^#endif \/\* [!not ]*'"${label}"'/ {
-		  /^#else \/\* '"${label}"'/,/^#endif \/\* '"${label}"'/ {
-		    /^#else \/\* '"${label}"'/    s/.*/.mc '"${CHANGEMARK}"'/
-		    /^#endif \/\* '"${label}"'/   s/.*/.mc/
+		/^#ifndef '"${LABEL}"'/,/^#endif \/\* [!not ]*'"${LABEL}"'/ {
+		  /^#else \/\* '"${LABEL}"'/,/^#endif \/\* '"${LABEL}"'/ {
+		    /^#else \/\* '"${LABEL}"'/    s/.*/.mc '"${CHANGEMARK}"'/
+		    /^#endif \/\* '"${LABEL}"'/   s/.*/.mc/
 		    p
 		    d
 		  }
-		  /^#endif \/\* \(not\|!\) '"${label}"'/ {
+		  /^#endif \/\* \(not\|!\) '"${LABEL}"'/ {
 		   s/.*/.mc '"${DELETEMARK}"'/p
 		   a\
 .mc
@@ -291,27 +301,27 @@
 
 if [ ${D_option} ]
 then
-	sed_script='
-		/^#ifdef '"${label}"'/,/^#endif \/\* '"${label}"'/ {
-		  /^#ifdef '"${label}"'/          s/.*/.mc '"${ADDMARK}"'/
-		  /^#endif \/\* '"${label}"'/     s/.*/.mc/
+	SED_SCRIPT='
+		/^#ifdef '"${LABEL}"'/,/^#endif \/\* '"${LABEL}"'/ {
+		  /^#ifdef '"${LABEL}"'/          s/.*/.mc '"${ADDMARK}"'/
+		  /^#endif \/\* '"${LABEL}"'/     s/.*/.mc/
 		  p
 		  d
 		}
-		/^#ifndef '"${label}"'/,/^#endif \/\* [!not ]*'"${label}"'/ {
-		  /^#ifndef '"${label}"'/ {
+		/^#ifndef '"${LABEL}"'/,/^#endif \/\* [!not ]*'"${LABEL}"'/ {
+		  /^#ifndef '"${LABEL}"'/ {
 		   i\
 '"${MARK1}"'
 		   d
 		  }
-		  /^#else \/\* '"${label}"'/ ! {
-		   /^#endif \/\* [!not ]*'"${label}"'/ ! {
+		  /^#else \/\* '"${LABEL}"'/ ! {
+		   /^#endif \/\* [!not ]*'"${LABEL}"'/ ! {
 		    p
 		    d
 		   }
 		  }
-		  /^#else \/\* '"${label}"'/,/^#endif \/\* '"${label}"'/ {
-		    /^#else \/\* '"${label}"'/ {
+		  /^#else \/\* '"${LABEL}"'/,/^#endif \/\* '"${LABEL}"'/ {
+		    /^#else \/\* '"${LABEL}"'/ {
 		     i\
 '"${MARK2}"'\
 '"${br}"'
@@ -320,11 +330,11 @@
 .mc '"${CHANGEMARK}"'
 		     d
 		    }
-		    /^#endif \/\* '"${label}"'/   s/.*/.mc/
+		    /^#endif \/\* '"${LABEL}"'/   s/.*/.mc/
 		    p
 		    d
 		  }
-		  /^#endif \/\* \(not\|!\) '"${label}"'/ {
+		  /^#endif \/\* \(not\|!\) '"${LABEL}"'/ {
 		   i\
 '"${MARK2}"'\
 '"${br}"'
@@ -338,15 +348,7 @@
 	'
 fi
 
-diff -D"${label}" -- ${FILE1} ${FILE2}  |
-	sed -n "${sed_script}"
+${DIFFCMD} -D"${LABEL}" -- "${FILE1}" "${FILE2}"  |
+	${SEDCMD} -n "${SED_SCRIPT}"
 
 # EOF
-
-
-########################################################################
-# Emacs settings
-#
-# Local Variables:
-# mode: text
-# End:
diff -Nuar groff-1.22.3.old/contrib/gdiffmk/.gitignore groff-1.22.3/contrib/gdiffmk/.gitignore
--- groff-1.22.3.old/contrib/gdiffmk/.gitignore	1970-01-01 02:00:00.000000000 +0200
+++ groff-1.22.3/contrib/gdiffmk/.gitignore	2015-04-23 20:57:03.000000000 +0300
@@ -0,0 +1,5 @@
+gdiffmk
+gdiffmk.n
+tests/gdiffmk_tests.sh.log
+tests/gdiffmk_tests.sh.trs
+tests/result.*
diff -Nuar groff-1.22.3.old/contrib/gdiffmk/Makefile.sub groff-1.22.3/contrib/gdiffmk/Makefile.sub
--- groff-1.22.3.old/contrib/gdiffmk/Makefile.sub	2014-11-04 10:38:35.446521234 +0200
+++ groff-1.22.3/contrib/gdiffmk/Makefile.sub	1970-01-01 02:00:00.000000000 +0200
@@ -1,51 +0,0 @@
-# Makefile.sub for `gdiffmk' (integration into the groff source tree)
-
-# File position: <groff-source>/contrib/gdiffmk/Makefile.sub
-
-# Copyright (C) 2004-2014 Free Software Foundation, Inc.
-# Written by Mike Bianchi <MBianchi@Foveal.com <mailto:MBianchi@Foveal.com>>
-
-# This file is part of the gdiffmk utility, which is part of groff.
-
-# groff is free software; you can redistribute it and/or modify it
-# under the terms of the GNU General Public License as published by
-# the Free Software Foundation, either version 3 of the License, or
-# (at your option) any later version.
-
-# groff is distributed in the hope that it will be useful, but WITHOUT
-# ANY WARRANTY; without even the implied warranty of MERCHANTABILITY
-# or FITNESS FOR A PARTICULAR PURPOSE.  See the GNU General Public
-# License for more details.
-
-# You should have received a copy of the GNU General Public License
-# along with this program. If not, see <http://www.gnu.org/licenses/>.
-
-########################################################################
-
-MAN1=gdiffmk.n
-MOSTLYCLEANADD=gdiffmk tests/runtests
-RM=rm -f
-
-all: gdiffmk
-
-gdiffmk: gdiffmk.sh
-	sed -e "s|@BINDIR@|$(bindir)|g" \
-	    -e "s|@VERSION@|$(version)$(revision)|g" \
-	    -e $(SH_SCRIPT_SED_CMD)  $(srcdir)/gdiffmk.sh >$@
-	chmod +x $@
-
-install_data: gdiffmk
-	-test -d $(DESTDIR)$(bindir) || $(mkinstalldirs) $(DESTDIR)$(bindir)
-	$(RM) $(DESTDIR)$(bindir)/gdiffmk
-	$(INSTALL_SCRIPT) gdiffmk $(DESTDIR)$(bindir)/gdiffmk
-
-uninstall_sub:
-	$(RM) $(DESTDIR)$(bindir)/gdiffmk
-
-########################################################################
-# Emacs settings
-########################################################################
-#
-# Local Variables:
-# mode: makefile
-# End:
diff -Nuar groff-1.22.3.old/contrib/gdiffmk/tests/baseline groff-1.22.3/contrib/gdiffmk/tests/baseline
--- groff-1.22.3.old/contrib/gdiffmk/tests/baseline	2014-11-04 10:38:35.620519059 +0200
+++ groff-1.22.3/contrib/gdiffmk/tests/baseline	2015-04-23 20:57:03.000000000 +0300
@@ -1,24 +1,3 @@
-.ig \"-*- nroff -*-
-Copyright (C) 2004-2014 Free Software Foundation, Inc.
-
-This file is part of the gdiffmk utility, which is part of groff.
-Written by Mike Bianchi <MBianchi@Foveal.com <mailto:MBianchi@Foveal.com>>
-
-Permission is granted to make and distribute verbatim copies of
-this manual provided the copyright notice and this permission notice
-are preserved on all copies.
-
-Permission is granted to copy and distribute modified versions of this
-manual under the conditions for verbatim copying, provided that the
-entire resulting derived work is distributed under the terms of a
-permission notice identical to this one.
-
-Permission is granted to copy and distribute translations of this
-manual into another language, under the above conditions for modified
-versions, except that this permission notice may be included in
-translations approved by the Free Software Foundation instead of in
-the original English.
-..
 .ll 25
 .pl 20
 .nf
@@ -36,8 +15,3 @@
 .mc
 file1 and file2 #4
 file1 and file2 #5
-.
-.\" Emacs setup
-.\" Local Variables:
-.\" mode: nroff
-.\" End:
diff -Nuar groff-1.22.3.old/contrib/gdiffmk/tests/baseline.10 groff-1.22.3/contrib/gdiffmk/tests/baseline.10
--- groff-1.22.3.old/contrib/gdiffmk/tests/baseline.10	2014-11-04 10:38:35.620519059 +0200
+++ groff-1.22.3/contrib/gdiffmk/tests/baseline.10	2015-04-23 20:57:03.000000000 +0300
@@ -1,24 +1,3 @@
-.ig \"-*- nroff -*-
-Copyright (C) 2004-2014 Free Software Foundation, Inc.
-
-This file is part of the gdiffmk utility, which is part of groff.
-Written by Mike Bianchi <MBianchi@Foveal.com <mailto:MBianchi@Foveal.com>>
-
-Permission is granted to make and distribute verbatim copies of
-this manual provided the copyright notice and this permission notice
-are preserved on all copies.
-
-Permission is granted to copy and distribute modified versions of this
-manual under the conditions for verbatim copying, provided that the
-entire resulting derived work is distributed under the terms of a
-permission notice identical to this one.
-
-Permission is granted to copy and distribute translations of this
-manual into another language, under the above conditions for modified
-versions, except that this permission notice may be included in
-translations approved by the Free Software Foundation instead of in
-the original English.
-..
 .ll 25
 .pl 20
 .nf
@@ -45,8 +24,3 @@
 .mc
 file1 and file2 #4
 file1 and file2 #5
-.
-.\" Emacs setup
-.\" Local Variables:
-.\" mode: nroff
-.\" End:
diff -Nuar groff-1.22.3.old/contrib/gdiffmk/tests/baseline.6 groff-1.22.3/contrib/gdiffmk/tests/baseline.6
--- groff-1.22.3.old/contrib/gdiffmk/tests/baseline.6	2014-11-04 10:38:35.620519059 +0200
+++ groff-1.22.3/contrib/gdiffmk/tests/baseline.6	2015-04-23 20:57:03.000000000 +0300
@@ -1,24 +1,3 @@
-.ig \"-*- nroff -*-
-Copyright (C) 2004-2014 Free Software Foundation, Inc.
-
-This file is part of the gdiffmk utility, which is part of groff.
-Written by Mike Bianchi <MBianchi@Foveal.com <mailto:MBianchi@Foveal.com>>
-
-Permission is granted to make and distribute verbatim copies of
-this manual provided the copyright notice and this permission notice
-are preserved on all copies.
-
-Permission is granted to copy and distribute modified versions of this
-manual under the conditions for verbatim copying, provided that the
-entire resulting derived work is distributed under the terms of a
-permission notice identical to this one.
-
-Permission is granted to copy and distribute translations of this
-manual into another language, under the above conditions for modified
-versions, except that this permission notice may be included in
-translations approved by the Free Software Foundation instead of in
-the original English.
-..
 .ll 25
 .pl 20
 .nf
@@ -36,8 +15,3 @@
 .mc
 file1 and file2 #4
 file1 and file2 #5
-.
-.\" Emacs setup
-.\" Local Variables:
-.\" mode: nroff
-.\" End:
diff -Nuar groff-1.22.3.old/contrib/gdiffmk/tests/baseline.8 groff-1.22.3/contrib/gdiffmk/tests/baseline.8
--- groff-1.22.3.old/contrib/gdiffmk/tests/baseline.8	2014-11-04 10:38:35.621519046 +0200
+++ groff-1.22.3/contrib/gdiffmk/tests/baseline.8	2015-04-23 20:57:03.000000000 +0300
@@ -1,24 +1,3 @@
-.ig \"-*- nroff -*-
-Copyright (C) 2004-2014 Free Software Foundation, Inc.
-
-This file is part of the gdiffmk utility, which is part of groff.
-Written by Mike Bianchi <MBianchi@Foveal.com <mailto:MBianchi@Foveal.com>>
-
-Permission is granted to make and distribute verbatim copies of
-this manual provided the copyright notice and this permission notice
-are preserved on all copies.
-
-Permission is granted to copy and distribute modified versions of this
-manual under the conditions for verbatim copying, provided that the
-entire resulting derived work is distributed under the terms of a
-permission notice identical to this one.
-
-Permission is granted to copy and distribute translations of this
-manual into another language, under the above conditions for modified
-versions, except that this permission notice may be included in
-translations approved by the Free Software Foundation instead of in
-the original English.
-..
 .ll 25
 .pl 20
 .nf
@@ -45,8 +24,3 @@
 .mc
 file1 and file2 #4
 file1 and file2 #5
-.
-.\" Emacs setup
-.\" Local Variables:
-.\" mode: nroff
-.\" End:
diff -Nuar groff-1.22.3.old/contrib/gdiffmk/tests/baseline.9 groff-1.22.3/contrib/gdiffmk/tests/baseline.9
--- groff-1.22.3.old/contrib/gdiffmk/tests/baseline.9	2014-11-04 10:38:35.621519046 +0200
+++ groff-1.22.3/contrib/gdiffmk/tests/baseline.9	2015-04-23 20:57:03.000000000 +0300
@@ -1,24 +1,3 @@
-.ig \"-*- nroff -*-
-Copyright (C) 2004-2014 Free Software Foundation, Inc.
-
-This file is part of the gdiffmk utility, which is part of groff.
-Written by Mike Bianchi <MBianchi@Foveal.com <mailto:MBianchi@Foveal.com>>
-
-Permission is granted to make and distribute verbatim copies of
-this manual provided the copyright notice and this permission notice
-are preserved on all copies.
-
-Permission is granted to copy and distribute modified versions of this
-manual under the conditions for verbatim copying, provided that the
-entire resulting derived work is distributed under the terms of a
-permission notice identical to this one.
-
-Permission is granted to copy and distribute translations of this
-manual into another language, under the above conditions for modified
-versions, except that this permission notice may be included in
-translations approved by the Free Software Foundation instead of in
-the original English.
-..
 .ll 25
 .pl 20
 .nf
@@ -45,8 +24,3 @@
 .mc
 file1 and file2 #4
 file1 and file2 #5
-.
-.\" Emacs setup
-.\" Local Variables:
-.\" mode: nroff
-.\" End:
diff -Nuar groff-1.22.3.old/contrib/gdiffmk/tests/gdiffmk_tests.sh groff-1.22.3/contrib/gdiffmk/tests/gdiffmk_tests.sh
--- groff-1.22.3.old/contrib/gdiffmk/tests/gdiffmk_tests.sh	1970-01-01 02:00:00.000000000 +0200
+++ groff-1.22.3/contrib/gdiffmk/tests/gdiffmk_tests.sh	2015-04-23 20:57:03.000000000 +0300
@@ -0,0 +1,9 @@
+#!/bin/sh
+
+# Execute runtests.sh in the builddir 
+
+set -e
+
+mkdir -p ${abs_top_builddir}/contrib/gdiffmk/tests
+cd ${abs_top_builddir}/contrib/gdiffmk/tests
+${abs_top_srcdir}/contrib/gdiffmk/tests/runtests.sh run
diff -Nuar groff-1.22.3.old/contrib/gdiffmk/tests/.gitignore groff-1.22.3/contrib/gdiffmk/tests/.gitignore
--- groff-1.22.3.old/contrib/gdiffmk/tests/.gitignore	1970-01-01 02:00:00.000000000 +0200
+++ groff-1.22.3/contrib/gdiffmk/tests/.gitignore	2015-04-23 20:57:03.000000000 +0300
@@ -0,0 +1,3 @@
+test_result*
+tmp_file*
+runtests
diff -Nuar groff-1.22.3.old/contrib/gdiffmk/tests/runtests.in groff-1.22.3/contrib/gdiffmk/tests/runtests.in
--- groff-1.22.3.old/contrib/gdiffmk/tests/runtests.in	2014-11-04 10:38:35.621519046 +0200
+++ groff-1.22.3/contrib/gdiffmk/tests/runtests.in	1970-01-01 02:00:00.000000000 +0200
@@ -1,118 +0,0 @@
-#! /bin/sh
-#
-#	A very simple function test for gdiffmk.sh.
-#
-# Copyright (C) 2004, 2005, 2009 Free Software Foundation, Inc.
-# Written by Mike Bianchi <MBianchi@Foveal.com <mailto:MBianchi@Foveal.com>>
-
-# This file is part of the gdiffmk utility, which is part of groff.
-
-# groff is free software; you can redistribute it and/or modify it
-# under the terms of the GNU General Public License as published by
-# the Free Software Foundation, either version 3 of the License, or
-# (at your option) any later version.
-
-# groff is distributed in the hope that it will be useful, but WITHOUT
-# ANY WARRANTY; without even the implied warranty of MERCHANTABILITY
-# or FITNESS FOR A PARTICULAR PURPOSE.  See the GNU General Public
-# License for more details.
-
-# You should have received a copy of the GNU General Public License
-# along with this program. If not, see <http://www.gnu.org/licenses/>.
-# This file is part of GNU gdiffmk.
-
-srcdir=@srcdir@
-
-command=../gdiffmk
-
-#	Test the number of arguments and the first argument.
-case $#-$1 in
-1-clean )
-	rm -fv result* tmp_file*
-	exit 0
-	;;
-1-run )
-	;;
-* )
-	echo >&2 "$0 [ clean | run ]
-Run a few simple tests on \`${command}'."'
-
-clean	Remove the result? and tmp_file? files.
-run	Run the tests.
-'
-	exit 255
-	;;
-esac
-
-function TestResult {
-	if cmp -s $1 $2
-	then
-		echo $2 PASSED
-	else
-		echo ''
-		echo $2 TEST FAILED
-		diff $1 $2
-		echo ''
-	fi
-}
-
-tmpfile=/tmp/$$
-trap 'rm -f ${tmpfile}' 0 1 2 3 15
-
-#	Run tests.
-
-#	3 file arguments
-ResultFile=result.1
-${command}  ${srcdir}/file1  ${srcdir}/file2 ${ResultFile} 2>${tmpfile}
-cat ${tmpfile} >>${ResultFile}
-TestResult ${srcdir}/baseline ${ResultFile}
-
-#	OUTPUT to stdout by default
-ResultFile=result.2
-${command}  ${srcdir}/file1  ${srcdir}/file2  >${ResultFile} 2>&1
-TestResult ${srcdir}/baseline ${ResultFile}
-
-#	OUTPUT to stdout via  -  argument
-ResultFile=result.3
-${command}  ${srcdir}/file1  ${srcdir}/file2 - >${ResultFile} 2>&1
-TestResult ${srcdir}/baseline ${ResultFile}
-
-#	FILE1 from standard input via  -  argument
-ResultFile=result.4
-${command}  - ${srcdir}/file2 <${srcdir}/file1  >${ResultFile} 2>&1
-TestResult ${srcdir}/baseline ${ResultFile}
-
-#	FILE2 from standard input via  -  argument
-ResultFile=result.5
-${command}  ${srcdir}/file1 - <${srcdir}/file2  >${ResultFile} 2>&1
-TestResult ${srcdir}/baseline ${ResultFile}
-
-#	Different values for addmark, changemark, deletemark
-ResultFile=result.6
-${command}  -aA -cC -dD  ${srcdir}/file1 ${srcdir}/file2  >${ResultFile} 2>&1
-TestResult ${srcdir}/baseline.6 ${ResultFile}
-
-#	Test for accidental file overwrite.
-ResultFile=result.7
-cp ${srcdir}/file2 tmp_file.7
-${command}  -aA -dD -cC  ${srcdir}/file1 tmp_file.7  tmp_file.7	\
-							>${ResultFile} 2>&1
-TestResult ${srcdir}/baseline.7 ${ResultFile}
-
-#	Test -D option
-ResultFile=result.8
-${command}  -D  ${srcdir}/file1 ${srcdir}/file2 >${ResultFile} 2>&1
-TestResult ${srcdir}/baseline.8 ${ResultFile}
-
-#	Test -D  and  -M  options
-ResultFile=result.9
-${command}  -D  -M '<<<<' '>>>>'				\
-			${srcdir}/file1 ${srcdir}/file2 >${ResultFile} 2>&1
-TestResult ${srcdir}/baseline.9 ${ResultFile}
-
-#	Test -D  and  -B  options
-ResultFile=result.10
-${command}  -D  -B  ${srcdir}/file1 ${srcdir}/file2 >${ResultFile} 2>&1
-TestResult ${srcdir}/baseline.10 ${ResultFile}
-
-#	EOF
diff -Nuar groff-1.22.3.old/contrib/gdiffmk/tests/runtests.sh groff-1.22.3/contrib/gdiffmk/tests/runtests.sh
--- groff-1.22.3.old/contrib/gdiffmk/tests/runtests.sh	1970-01-01 02:00:00.000000000 +0200
+++ groff-1.22.3/contrib/gdiffmk/tests/runtests.sh	2015-04-23 20:57:03.000000000 +0300
@@ -0,0 +1,154 @@
+#! /bin/sh
+#
+#	A very simple function test for gdiffmk.sh.
+#
+# Copyright (C) 2004, 2005, 2009 Free Software Foundation, Inc.
+# Written by Mike Bianchi <MBianchi@Foveal.com <mailto:MBianchi@Foveal.com>>
+
+# This file is part of the gdiffmk utility, which is part of groff.
+
+# groff is free software; you can redistribute it and/or modify it
+# under the terms of the GNU General Public License as published by
+# the Free Software Foundation, either version 3 of the License, or
+# (at your option) any later version.
+
+# groff is distributed in the hope that it will be useful, but WITHOUT
+# ANY WARRANTY; without even the implied warranty of MERCHANTABILITY
+# or FITNESS FOR A PARTICULAR PURPOSE.  See the GNU General Public
+# License for more details.
+
+# You should have received a copy of the GNU General Public License
+# along with this program. If not, see <http://www.gnu.org/licenses/>.
+# This file is part of GNU gdiffmk.
+
+# abs_top_srcdir and abs_top_builddir are set by AM_TESTS_ENVIRONMENT
+# (defined in Makefile.am) when running make check
+
+srcdir=${abs_top_srcdir}/contrib/gdiffmk/tests
+
+command=${abs_top_builddir}/gdiffmk
+
+#	Test the number of arguments and the first argument.
+case "$#-$1" in
+1-clean )
+	rm -fv result* tmp_file*
+	exit 0
+	;;
+1-run )
+	;;
+* )
+	echo >&2 "$0 [ clean | run ]
+Run a few simple tests on \`${command}'."'
+
+clean	Remove the result? and tmp_file? files.
+run	Run the tests.
+'
+	exit 255
+	;;
+esac
+
+exit_code=0	#  Success
+failure_count=0
+TestResult () {
+	if cmp -s $1 $2
+	then
+		echo $2 PASSED
+	else
+		echo ''
+		echo $2 TEST FAILED
+		diff $1 $2
+		echo ''
+		exit_code=1	#  Failure
+		failure_count=`expr ${failure_count} + 1`
+	fi
+}
+
+tmpfile=/tmp/$$
+trap 'rm -f ${tmpfile}' 0 1 2 3 15
+
+#	Run tests.
+
+#	3 file arguments
+ResultFile=result.1
+${command}  ${srcdir}/file1  ${srcdir}/file2 ${ResultFile} 2>${tmpfile}
+cat ${tmpfile} >>${ResultFile}
+TestResult ${srcdir}/baseline ${ResultFile}
+
+
+#	OUTPUT to stdout by default
+ResultFile=result.2
+${command}  ${srcdir}/file1  ${srcdir}/file2  >${ResultFile} 2>&1
+TestResult ${srcdir}/baseline ${ResultFile}
+
+
+#	OUTPUT to stdout via  -  argument
+ResultFile=result.3
+${command}  ${srcdir}/file1  ${srcdir}/file2 - >${ResultFile} 2>&1
+TestResult ${srcdir}/baseline ${ResultFile}
+
+
+#	FILE1 from standard input via  -  argument
+ResultFile=result.4
+${command}  - ${srcdir}/file2 <${srcdir}/file1  >${ResultFile} 2>&1
+TestResult ${srcdir}/baseline ${ResultFile}
+
+
+#	FILE2 from standard input via  -  argument
+ResultFile=result.5
+${command}  ${srcdir}/file1 - <${srcdir}/file2  >${ResultFile} 2>&1
+TestResult ${srcdir}/baseline ${ResultFile}
+
+
+#	Different values for addmark, changemark, deletemark
+ResultFile=result.6
+${command}  -aA -cC -dD  ${srcdir}/file1 ${srcdir}/file2  >${ResultFile} 2>&1
+TestResult ${srcdir}/baseline.6 ${ResultFile}
+
+
+#	Different values for addmark, changemark, deletemark
+#	Alternate format of -a -c and -d flag arguments
+ResultFile=result.6a
+${command}  -a A -c C -d D  ${srcdir}/file1 ${srcdir}/file2  >${ResultFile} 2>&1
+TestResult ${srcdir}/baseline.6a ${ResultFile}
+
+
+#	Test for accidental file overwrite.
+ResultFile=result.7
+cp ${srcdir}/file2 tmp_file.7
+${command}  -aA -dD -cC  ${srcdir}/file1 tmp_file.7  tmp_file.7	\
+							>${ResultFile} 2>&1
+TestResult ${srcdir}/baseline.7 ${ResultFile}
+
+
+#	Test -D option
+ResultFile=result.8
+${command}  -D  ${srcdir}/file1 ${srcdir}/file2 >${ResultFile} 2>&1
+TestResult ${srcdir}/baseline.8 ${ResultFile}
+
+
+#	Test -D  and  -M  options
+ResultFile=result.9
+${command}  -D  -M '<<<<' '>>>>'				\
+			${srcdir}/file1 ${srcdir}/file2 >${ResultFile} 2>&1
+TestResult ${srcdir}/baseline.9 ${ResultFile}
+
+
+#	Test -D  and  -M  options
+#	Alternate format of -M argument.
+ResultFile=result.9a
+${command}  -D  -M'<<<<' '>>>>'				\
+			${srcdir}/file1 ${srcdir}/file2 >${ResultFile} 2>&1
+TestResult ${srcdir}/baseline.9a ${ResultFile}
+
+
+#	Test -D  and  -B  options
+ResultFile=result.10
+${command}  -D  -B  ${srcdir}/file1 ${srcdir}/file2 >${ResultFile} 2>&1
+TestResult ${srcdir}/baseline.10 ${ResultFile}
+
+
+echo failure_count ${failure_count}
+
+exit ${exit_code}
+
+#	EOF
diff -Nuar groff-1.22.3.old/contrib/glilypond/ChangeLog groff-1.22.3/contrib/glilypond/ChangeLog
--- groff-1.22.3.old/contrib/glilypond/ChangeLog	2014-11-04 10:38:35.452521159 +0200
+++ groff-1.22.3/contrib/glilypond/ChangeLog	2015-04-23 20:57:03.000000000 +0300
@@ -1,3 +1,18 @@
+2015-04-03  Werner LEMBERG  <wl@gnu.org>
+
+	* glilypond.man: Make it work in compatibility mode.
+	(EL): Fix typo.
+
+2015-03-20  Ralph Corderoy  <ralph@inputplus.co.uk>
+
+	* glilypond.pl: Minor syntax fixes.
+
+2015-03-20  Werner LEMBERG  <wl@gnu.org>
+
+	* glilypond.pl <read files or stdin>: Fix typo.
+
+	Problem reported by Grégoire Babey <gibux@gmx.ch>.
+
 2014-09-03  Bernd Warken  <groff-bernd.warken-72@web.de>
 
 	* glilypond.pl: New version 1.3.1
diff -Nuar groff-1.22.3.old/contrib/glilypond/examples/example.groff groff-1.22.3/contrib/glilypond/examples/example.groff
--- groff-1.22.3.old/contrib/glilypond/examples/example.groff	1970-01-01 02:00:00.000000000 +0200
+++ groff-1.22.3/contrib/glilypond/examples/example.groff	2015-04-23 20:57:03.000000000 +0300
@@ -0,0 +1,48 @@
+.\" --------------------------------------------------------------------
+.\" Legalese
+.\" --------------------------------------------------------------------
+.
+.ig
+glilypond - integrate `lilypond' parts into `groff' files
+
+Source file position:  <groff_source_top>/contrib/glilypond.man
+Installed position:    <prefix>/share/man/man1/glilypond.1
+
+This file was written by Bernd Warken <groff\-bernd.warken\-72@web.de>.
+.
+Copyright (C) 2013-2014  Free Software Foundation, Inc.
+
+This file is part of glilypond, which is part of GNU groff, a free
+software project.
+
+You can redistribute it and/or modify it under the terms of the GNU
+General Public License version 2 as published by the Free Software
+Foundation.
+
+The license text is available in the internet at
+.UR http://\%www.gnu.org/\%licenses/\%gpl-2.0.html
+.UE .
+..
+.
+.\" --------------------------------------------------------------------
+.\" Groff Part
+.\" --------------------------------------------------------------------
+.
+before
+.lilypond start
+\version "2.14.2"
+\relative c'' {
+  \key c \minor
+  g(
+  <ees c'>)
+  <d f gis b>-.
+  <ees g bes>-.
+}
+\paper {
+   oddHeaderMarkup = #f
+   evenHeaderMarkup = #f
+   oddFooterMarkup = #f
+   evenFooterMarkup = #f
+}
+.lilypond end
+after
diff -Nuar groff-1.22.3.old/contrib/glilypond/glilypond.am groff-1.22.3/contrib/glilypond/glilypond.am
--- groff-1.22.3.old/contrib/glilypond/glilypond.am	1970-01-01 02:00:00.000000000 +0200
+++ groff-1.22.3/contrib/glilypond/glilypond.am	2015-04-23 20:57:03.000000000 +0300
@@ -0,0 +1,63 @@
+# Automake rules for `glilypond'
+
+# File position: <groff-source>/contrib/lilypond/glilypond.am
+
+# Copyright (C) 2013-2014
+#   Free Software Foundation, Inc.
+# Written by Werner Lemberg <wl@gnu.org> and
+# Bernd Warken <groff-bernd.warken-72@web.de>.
+# Automake migration by Bertrand Garrigues
+
+# This file is part of `glilypond' which is part of `groff'.
+
+# `groff' is free software; you can redistribute it and/or modify it
+# under the terms of the GNU General Public License as published by
+# the Free Software Foundation, either version 3 of the License, or
+# (at your option) any later version.
+
+# `groff' is distributed in the hope that it will be useful, but
+# WITHOUT ANY WARRANTY; without even the implied warranty of
+# MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the GNU
+# General Public License for more details.
+
+# You should have received a copy of the GNU General Public License
+# along with this program. If not, see <http://www.gnu.org/licenses/>.
+
+########################################################################
+glilypond_srcdir = $(top_srcdir)/contrib/glilypond
+bin_SCRIPTS += glilypond
+man1_MANS += contrib/glilypond/glilypond.n
+
+# files going to lib directory `$(glilypond_dir)'
+# TODO glilypond_dir is subsitued by configure.ac, check if this could be removed
+glilyponddir = $(glilypond_dir)
+dist_glilypond_DATA = \
+  contrib/glilypond/subs.pl \
+  contrib/glilypond/oop_fh.pl \
+  contrib/glilypond/args.pl
+
+EXTRA_DIST += \
+  contrib/glilypond/ChangeLog \
+  contrib/glilypond/ChangeLog.0x \
+  contrib/glilypond/glilypond.man \
+  contrib/glilypond/glilypond.pl \
+  contrib/glilypond/README.txt \
+  contrib/glilypond/examples/example.groff
+
+
+# create perl executable `glilypond', being stored into `bindir'
+glilypond: $(glilypond_srcdir)/glilypond.pl shdeps.sed
+	$(RM) $@
+	sed -f "$(SH_DEPS_SED_SCRIPT)" \
+	    -e "s|[@]g[@]|$(g)|g" \
+	    -e "s|[@]BINDIR[@]|$(DESTDIR)$(bindir)|g" \
+	    -e "s|[@]glilypond_dir[@]|$(DESTDIR)$(glilypond_dir)|g" \
+	    -e "s|[@]VERSION[@]|$(VERSION)|g" \
+	    $(glilypond_srcdir)/glilypond.pl >$@
+	chmod +x $@
+
+uninstall_groffdirs: uninstall-glilypond-hook
+uninstall-glilypond-hook:
+	if test -d $(DESTDIR)$(glilyponddir); then \
+	  rmdir $(DESTDIR)$(glilyponddir); \
+	fi
diff -Nuar groff-1.22.3.old/contrib/glilypond/glilypond.man groff-1.22.3/contrib/glilypond/glilypond.man
--- groff-1.22.3.old/contrib/glilypond/glilypond.man	2014-11-04 10:38:35.452521159 +0200
+++ groff-1.22.3/contrib/glilypond/glilypond.man	2015-04-23 20:57:03.000000000 +0300
@@ -14,7 +14,7 @@
 .\" --------------------------------------------------------------------
 .
 .de co
-Copyright \[co] 2013-2014 Free Software Foundation, Inc.
+Copyright \(co 2013-2014 Free Software Foundation, Inc.
 
 This file is part of glilypond, which is part of GNU groff, a free
 software project.
@@ -40,8 +40,8 @@
 .\" --------------------------------------------------------------------
 .
 .\" Ellipsis ...
-.ie t .ds EL \fS\N'188'\fP
-.el .ds EL \&.\|.\|.\&\
+.ie t .ds EL \fS\N'188'\fP\"
+.el .ds EL \&.\|.\|.\&\"
 .\" called with \*(EL
 .
 .ad l
diff -Nuar groff-1.22.3.old/contrib/glilypond/glilypond.pl groff-1.22.3/contrib/glilypond/glilypond.pl
--- groff-1.22.3.old/contrib/glilypond/glilypond.pl	2014-11-04 10:38:35.452521159 +0200
+++ groff-1.22.3/contrib/glilypond/glilypond.pl	2015-04-23 20:57:03.000000000 +0300
@@ -13,7 +13,7 @@
 # use diagnostics;
 
 use Carp;
-$SIG[__DIE__] = sub { &Carp::croak; };
+$SIG{__DIE__} = sub { &Carp::croak; };
 
 use Data::Dumper;
 
@@ -406,7 +406,7 @@
 	  $Temp->{'eps_dir'} = $dir;
 	  $make_dir = TRUE;
 	} else { # could not remove
-	  stderr->print(  "Could not use EPS dir `" . $dir .
+	  $stderr->print( "Could not use EPS dir `" . $dir .
 			  "', use temp dir." );
 	} # end of unlink
       } # end test of -d $dir
@@ -546,7 +546,7 @@
        $ly = new FH_FILE($path_ly);
 
        my $include = new FH_READ_FILE($file);
-       my $res = $include->read-all(); # is a refernce to an array
+       my $res = $include->read_all(); # is a reference to an array
        foreach ( @$res ) {
 	 chomp;
 	 $ly->print($_);
diff -Nuar groff-1.22.3.old/contrib/glilypond/Makefile.sub groff-1.22.3/contrib/glilypond/Makefile.sub
--- groff-1.22.3.old/contrib/glilypond/Makefile.sub	2014-11-04 10:38:35.452521159 +0200
+++ groff-1.22.3/contrib/glilypond/Makefile.sub	1970-01-01 02:00:00.000000000 +0200
@@ -1,81 +0,0 @@
-# Makefile.sub for `glilypond'
-
-# File position: <groff-source>/contrib/lilypond/Makefile.sub
-
-# Copyright (C) 2013-2014  Free Software Foundation, Inc.
-# Written by Werner Lemberg <wl@gnu.org> and
-# Bernd Warken <groff-bernd.warken-72@web.de>.
-
-# This file is part of `glilypond' which is part of `groff'.
-
-# `groff' is free software; you can redistribute it and/or modify it
-# under the terms of the GNU General Public License as published by
-# the Free Software Foundation, either version 3 of the License, or
-# (at your option) any later version.
-
-# `groff' is distributed in the hope that it will be useful, but
-# WITHOUT ANY WARRANTY; without even the implied warranty of
-# MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the GNU
-# General Public License for more details.
-
-# You should have received a copy of the GNU General Public License
-# along with this program. If not, see <http://www.gnu.org/licenses/>.
-
-########################################################################
-
-MAN1=glilypond.n
-
-MOSTLYCLEANADD=glilypond $(MAN1)
-
-all: glilypond
-
-# files going to lib directory `$(glilypond_dir)'
-
-GLILYPOND_LIB=\
-  $(srcdir)/subs.pl \
-  $(srcdir)/oop_fh.pl \
-  $(srcdir)/args.pl
-
-GLILYPOND_LIB_=`echo $(GLILYPOND_LIB) | sed 's|$(srcdir)/||g'`
-
-RM=rm -f
-
-# create perl executable `glilypond', being stored into `bindir'
-
-glilypond: $(srcdir)/glilypond.pl
-	$(RM) $@
-	sed -f "$(SH_DEPS_SED_SCRIPT)" \
-	    -e "s|@g@|$(g)|g" \
-	    -e "s|@BINDIR@|$(DESTDIR)$(bindir)|g" \
-	    -e "s|@glilypond_dir@|$(DESTDIR)$(glilypond_dir)|g" \
-	    -e "s|@VERSION@|$(version)$(revision)|g" \
-	    $(srcdir)/glilypond.pl >$@
-	chmod +x $@
-
-install_data: glilypond $(GLILYPOND_LIB)
-	-test -d $(DESTDIR)$(bindir) \
-	  || $(mkinstalldirs) $(DESTDIR)$(bindir)
-	$(RM) $(DESTDIR)$(bindir)/glilypond
-	$(INSTALL_SCRIPT) glilypond $(DESTDIR)$(bindir)/glilypond
-	-test -d $(DESTDIR)$(glilypond_dir) \
-	  || $(mkinstalldirs) $(DESTDIR)$(glilypond_dir)
-	for f in $(GLILYPOND_LIB_); do \
-	  $(RM) $(DESTDIR)$(glilypond_dir)/$$f; \
-	  $(INSTALL_SCRIPT) $(srcdir)/$$f $(DESTDIR)$(glilypond_dir)/$$f; \
-	done
-
-uninstall_sub:
-	$(RM) $(DESTDIR)$(bindir)/glilypond
-	-for f in $(GLILYPOND_LIB_); do \
-	  $(RM) $(DESTDIR)$(glilypond_dir)/$$f; \
-	done
-	-test -d $(DESTDIR)$(glilypond_dir) && \
-	  rmdir $(DESTDIR)$(glilypond_dir)
-
-########################################################################
-# Emacs settings
-########################################################################
-#
-# Local Variables:
-# mode: makefile
-# End:
diff -Nuar groff-1.22.3.old/contrib/gperl/ChangeLog groff-1.22.3/contrib/gperl/ChangeLog
--- groff-1.22.3.old/contrib/gperl/ChangeLog	2014-11-04 10:38:35.457521097 +0200
+++ groff-1.22.3/contrib/gperl/ChangeLog	2015-04-23 20:57:03.000000000 +0300
@@ -1,3 +1,8 @@
+2015-04-03  Werner LEMBERG  <wl@gnu.org>
+
+	* gperl.man: Make it work in compatibility mode.
+	(EL): Fix typo.
+
 2014-10-11  Bernd Warken  <groff-bernd.warken-72@web.de>
 
 	* gperl.pl: Version 1.2.6
diff -Nuar groff-1.22.3.old/contrib/gperl/gperl.am groff-1.22.3/contrib/gperl/gperl.am
--- groff-1.22.3.old/contrib/gperl/gperl.am	1970-01-01 02:00:00.000000000 +0200
+++ groff-1.22.3/contrib/gperl/gperl.am	2015-04-23 20:57:03.000000000 +0300
@@ -0,0 +1,42 @@
+# Automake rules for `gperl' (preprocessor for added Perl parts)
+
+# File position: <groff-source>/contrib/gperl/gperl.am
+
+# Copyright (C) 2014  Free Software Foundation, Inc.
+# Written by Bernd Warken <groff-bernd.warken-72@web.de>.
+# Automake migration by Bertrand Garrigues
+
+# This file is part of `gperl' which is part of `groff'.
+
+# `groff' is free software; you can redistribute it and/or modify it
+# under the terms of the GNU General Public License as published by
+# the Free Software Foundation, either version 2 of the License, or
+# (at your option) any later version.
+
+# `groff' is distributed in the hope that it will be useful, but
+# WITHOUT ANY WARRANTY; without even the implied warranty of
+# MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the GNU
+# General Public License for more details.
+
+# You should have received a copy of the GNU General Public License
+# along with this program. If not, see
+# <http://www.gnu.org/licenses/gpl-2.0.html>.
+
+########################################################################
+
+bin_SCRIPTS += gperl
+man1_MANS += contrib/gperl/gperl.n
+EXTRA_DIST += \
+  contrib/gperl/ChangeLog \
+  contrib/gperl/gperl.man \
+  contrib/gperl/gperl.pl
+gperl: $(top_srcdir)/contrib/gperl/gperl.pl shdeps.sed
+	$(RM) $@
+	sed -f "$(SH_DEPS_SED_SCRIPT)" \
+	    -e "s|[@]g[@]|$(g)|g" \
+	    -e "s|[@]BINDIR[@]|$(DESTDIR)$(bindir)|g" \
+	    -e "s|[@]VERSION[@]|$(VERSION)|g" \
+	    -e "$(SH_SCRIPT_SED_CMD)" \
+	     $(top_srcdir)/contrib/gperl/gperl.pl >$@; \
+	chmod +x $@
+
diff -Nuar groff-1.22.3.old/contrib/gperl/gperl.man groff-1.22.3/contrib/gperl/gperl.man
--- groff-1.22.3.old/contrib/gperl/gperl.man	2014-11-04 10:38:35.457521097 +0200
+++ groff-1.22.3/contrib/gperl/gperl.man	2015-04-23 20:57:03.000000000 +0300
@@ -16,7 +16,7 @@
 ..
 .
 .de co
-Copyright \[co] 2014 Free Software Foundation, Inc.
+Copyright \(co 2014 Free Software Foundation, Inc.
 .
 .P
 This file is part of
@@ -46,12 +46,12 @@
 .\" --------------------------------------------------------------------
 .
 .\" Ellipsis ...
-.ie t .ds EL \fS\N'188'\fP
-.el .ds EL \&.\|.\|.\&\
+.ie t .ds EL \fS\N'188'\fP\"
+.el .ds EL \&.\|.\|.\&\"
 .\" called with \*(EL
 .
 .\" Bullet
-.ie t .ds BU \[bu]
+.ie t .ds BU \(bu
 .el .ds BU *
 .\" used in `.IP \*(BU 2m' (former .Topic)
 .
@@ -200,7 +200,7 @@
 .I other_than_start
 can additionally be used as a
 .I groff
-string variable name for storage \[em] see next section.
+string variable name for storage \(em see next section.
 .
 .
 .\" --------------------------------------------------------------------
@@ -228,7 +228,7 @@
 .
 This pseudo-printing output can have several lines, due to printed
 line breaks with
-.BR \[rs]n .
+.BR \(rsn .
 .
 By that, the output of a Perl run should be stored into a Perl array,
 with a single line for each array member.
@@ -432,7 +432,7 @@
 .
 .P
 This stores the result
-.B \[rq]some data\[rq]
+.B \(rqsome data\(rq
 into the
 .I roff string
 called
@@ -457,9 +457,9 @@
 .RS
 .EX
 \&.Perl start
-print \[rq]first\[rs]n\[rq];
-print \[rq]second line\[rs]n\[rq];
-print \[rq]3\[rs]n\[rq];
+print \(rqfirst\(rsn\(rq;
+print \(rqsecond line\(rsn\(rq;
+print \(rq3\(rsn\(rq;
 \&.Perl var1 var2 .nr var3 
 .EE
 .RE
diff -Nuar groff-1.22.3.old/contrib/gperl/Makefile.sub groff-1.22.3/contrib/gperl/Makefile.sub
--- groff-1.22.3.old/contrib/gperl/Makefile.sub	2014-11-04 10:38:35.457521097 +0200
+++ groff-1.22.3/contrib/gperl/Makefile.sub	1970-01-01 02:00:00.000000000 +0200
@@ -1,61 +0,0 @@
-# Makefile.sub for `gperl' (preprocessor for added Perl parts)
-
-# File position: <groff-source>/contrib/gperl/Makefile.sub
-
-# Copyright (C) 2014  Free Software Foundation, Inc.
-# Written by Bernd Warken <groff-bernd.warken-72@web.de>.
-
-# This file is part of `gperl' which is part of `groff'.
-
-# `groff' is free software; you can redistribute it and/or modify it
-# under the terms of the GNU General Public License as published by
-# the Free Software Foundation, either version 2 of the License, or
-# (at your option) any later version.
-
-# `groff' is distributed in the hope that it will be useful, but
-# WITHOUT ANY WARRANTY; without even the implied warranty of
-# MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the GNU
-# General Public License for more details.
-
-# You should have received a copy of the GNU General Public License
-# along with this program. If not, see
-# <http://www.gnu.org/licenses/gpl-2.0.html>.
-
-########################################################################
-
-MAN1=gperl.n
-
-MOSTLYCLEANADD=gperl $(MAN1)
-
-# not all make programs have $(RM) predefined.
-RM=rm -f
-
-all: gperl
-
-gperl: gperl.pl
-	sed -f "$(SH_DEPS_SED_SCRIPT)" \
-            -e "s|@g@|$(g)|g" \
-	    -e "s|@BINDIR@|$(DESTDIR)$(bindir)|g" \
-	    -e "s|@VERSION@|$(version)$(revision)|g" \
-	    -e "$(SH_SCRIPT_SED_CMD)" \
-	    $(srcdir)/gperl.pl >$@; \
-	chmod +x $@
-
-.PHONY: install_data
-install_data: gperl
-	-test -d $(DESTDIR)$(bindir) || $(mkinstalldirs) $(DESTDIR)$(bindir)
-	$(RM) $(DESTDIR)$(bindir)/gperl
-	$(INSTALL_SCRIPT) gperl $(DESTDIR)$(bindir)/gperl
-
-.PHONY: uninstall_sub
-uninstall_sub:
-	$(RM) $(DESTDIR)$(bindir)/gperl
-
-
-########################################################################
-# Emacs settings
-########################################################################
-#
-# Local Variables:
-# mode: makefile
-# End:
diff -Nuar groff-1.22.3.old/contrib/gpinyin/ChangeLog groff-1.22.3/contrib/gpinyin/ChangeLog
--- groff-1.22.3.old/contrib/gpinyin/ChangeLog	2014-11-04 10:38:35.462521034 +0200
+++ groff-1.22.3/contrib/gpinyin/ChangeLog	2015-04-23 20:57:03.000000000 +0300
@@ -1,3 +1,8 @@
+2015-04-03  Werner LEMBERG  <wl@gnu.org>
+
+	* gpinyin.man: Make it work in compatibility mode.
+	(EL): Fix typo.
+
 2014-10-11  Werner LEMBERG  <wl@gnu.org>
 
 	* Makefile.sub (gpinyin): Handle `gpinyin_dir'.
diff -Nuar groff-1.22.3.old/contrib/gpinyin/gpinyin.am groff-1.22.3/contrib/gpinyin/gpinyin.am
--- groff-1.22.3.old/contrib/gpinyin/gpinyin.am	1970-01-01 02:00:00.000000000 +0200
+++ groff-1.22.3/contrib/gpinyin/gpinyin.am	2015-04-23 20:57:03.000000000 +0300
@@ -0,0 +1,52 @@
+# Automake rules for `gpinyin' (preprocessor for added Perl parts)
+
+# File position: <groff-source>/contrib/gpinyin/gpinyin.am
+
+# Copyright (C) 2014
+#   Free Software Foundation, Inc.
+# Written by Bernd Warken <groff-bernd.warken-72@web.de>.
+# Moved to automake by Bertrand Garrigues
+
+# This file is part of `gpinyin' which is part of `groff'.
+
+# `groff' is free software; you can redistribute it and/or modify it
+# under the terms of the GNU General Public License as published by
+# the Free Software Foundation, either version 2 of the License, or
+# (at your option) any later version.
+
+# `groff' is distributed in the hope that it will be useful, but
+# WITHOUT ANY WARRANTY; without even the implied warranty of
+# MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the GNU
+# General Public License for more details.
+
+# You should have received a copy of the GNU General Public License
+# along with this program. If not, see
+# <http://www.gnu.org/licenses/gpl-2.0.html>.
+
+########################################################################
+
+gpinyin_srcdir = $(top_srcdir)/contrib/gpinyin
+bin_SCRIPTS += gpinyin
+gpinyindir = $(gpinyin_dir)
+dist_gpinyin_DATA = contrib/gpinyin/subs.pl
+man1_MANS += contrib/gpinyin/gpinyin.n
+EXTRA_DIST += \
+  contrib/gpinyin/ChangeLog \
+  contrib/gpinyin/gpinyin.man \
+  contrib/gpinyin/gpinyin.pl
+
+gpinyin: contrib/gpinyin/gpinyin.pl
+	sed -f "$(SH_DEPS_SED_SCRIPT)" \
+            -e "s|[@]g[@]|$(g)|g" \
+	    -e "s|[@]BINDIR[@]|$(DESTDIR)$(bindir)|g" \
+	    -e "s|[@]gpinyin_dir[@]|$(DESTIR)$(gpinyin_dir)|" \
+	    -e "s|[@]VERSION[@]|$(VERSION)|g" \
+	    -e "$(SH_SCRIPT_SED_CMD)" \
+	    $(gpinyin_srcdir)/gpinyin.pl >$@; \
+	chmod +x $@
+
+uninstall_groffdirs: uninstall-gpinyin-hook
+uninstall-gpinyin-hook:
+	if test -d $(DESTDIR)$(gpinyindir); then \
+	  rmdir $(DESTDIR)$(gpinyindir); \
+	fi
diff -Nuar groff-1.22.3.old/contrib/gpinyin/gpinyin.man groff-1.22.3/contrib/gpinyin/gpinyin.man
--- groff-1.22.3.old/contrib/gpinyin/gpinyin.man	2014-11-04 10:38:35.462521034 +0200
+++ groff-1.22.3/contrib/gpinyin/gpinyin.man	2015-04-23 20:57:03.000000000 +0300
@@ -10,7 +10,7 @@
 .\" --------------------------------------------------------------------
 .
 .de co
-Copyright \[co] 2014 Free Software Foundation, Inc.
+Copyright \(co 2014 Free Software Foundation, Inc.
 
 This file is part of gpinyin, which is part of groff, a free software
 project.
@@ -32,8 +32,8 @@
 .\" Characters
 .\" --------------------------------------------------------------------
 .
-.ie t .ds EL \f[S]\N'188'\f[P]
-.el .ds EL \&.\|.\|.\&\
+.ie t .ds EL \f[S]\N'188'\f[P]\"
+.el .ds EL \&.\|.\|.\&\"
 .\" ie t .char \[Ellipsis] \f[S]\N'188'\f[P]
 .\" el .char \[Ellipsis] \&.\|.\|.\&\
 .\" called with \[Ellipsis]
diff -Nuar groff-1.22.3.old/contrib/gpinyin/Makefile.sub groff-1.22.3/contrib/gpinyin/Makefile.sub
--- groff-1.22.3.old/contrib/gpinyin/Makefile.sub	2014-11-04 10:38:35.462521034 +0200
+++ groff-1.22.3/contrib/gpinyin/Makefile.sub	1970-01-01 02:00:00.000000000 +0200
@@ -1,71 +0,0 @@
-# Makefile.sub for `gpinyin' (preprocessor for added Perl parts)
-
-# File position: <groff-source>/contrib/gpinyin/Makefile.sub
-
-# Copyright (C) 2014  Free Software Foundation, Inc.
-# Written by Bernd Warken <groff-bernd.warken-72@web.de>.
-
-# This file is part of `gpinyin' which is part of `groff'.
-
-# `groff' is free software; you can redistribute it and/or modify it
-# under the terms of the GNU General Public License as published by
-# the Free Software Foundation, either version 2 of the License, or
-# (at your option) any later version.
-
-# `groff' is distributed in the hope that it will be useful, but
-# WITHOUT ANY WARRANTY; without even the implied warranty of
-# MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the GNU
-# General Public License for more details.
-
-# You should have received a copy of the GNU General Public License
-# along with this program. If not, see
-# <http://www.gnu.org/licenses/gpl-2.0.html>.
-
-########################################################################
-
-MAN1=gpinyin.n
-
-MOSTLYCLEANADD=gpinyin $(MAN1)
-
-# not all make programs have $(RM) predefined.
-RM=rm -f
-
-all: gpinyin
-
-gpinyin: gpinyin.pl
-	sed -f "$(SH_DEPS_SED_SCRIPT)" \
-	    -e "s|@g@|$(g)|g" \
-	    -e "s|@BINDIR@|$(DESTDIR)$(bindir)|g" \
-	    -e "s|@gpinyin_dir@|$(DESTIR)$(gpinyin_dir)|" \
-	    -e "s|@VERSION@|$(version)$(revision)|g" \
-	    -e "$(SH_SCRIPT_SED_CMD)" \
-	    $(srcdir)/gpinyin.pl >$@; \
-	chmod +x $@
-
-.PHONY: install_data
-install_data: gpinyin subs.pl
-	test -d $(DESTDIR)$(bindir) || \
-	  $(mkinstalldirs) $(DESTDIR)$(bindir); \
-	$(RM) $(DESTDIR)$(bindir)/gpinyin; \
-	$(INSTALL_SCRIPT) gpinyin $(DESTDIR)$(bindir)/gpinyin; \
-	test -d $(DESTDIR)$(gpinyin_dir) || \
-	  $(mkinstalldirs) $(DESTDIR)$(gpinyin_dir); \
-	$(RM) $(DESTDIR)$(gpinyin_dir)/subs.pl; \
-	$(INSTALL_SCRIPT) $(srcdir)/subs.pl \
-	  $(DESTDIR)$(gpinyin_dir)/subs.pl
-
-.PHONY: uninstall_sub
-uninstall_sub:
-	$(RM) $(DESTDIR)$(bindir)/gpinyin; \
-	$(RM) $(DESTDIR)$(gpinyin_dir)/subs.pl;
-	-test -d $(DESTDIR)$(gpinyin_dir) && \
-	  rmdir $(DESTDIR)$(gpinyin_dir)
-
-
-########################################################################
-# Emacs settings
-########################################################################
-#
-# Local Variables:
-# mode: makefile
-# End:
diff -Nuar groff-1.22.3.old/contrib/grap2graph/.gitignore groff-1.22.3/contrib/grap2graph/.gitignore
--- groff-1.22.3.old/contrib/grap2graph/.gitignore	1970-01-01 02:00:00.000000000 +0200
+++ groff-1.22.3/contrib/grap2graph/.gitignore	2015-04-23 20:57:03.000000000 +0300
@@ -0,0 +1,2 @@
+grap2graph
+grap2graph.n
diff -Nuar groff-1.22.3.old/contrib/grap2graph/grap2graph.am groff-1.22.3/contrib/grap2graph/grap2graph.am
--- groff-1.22.3.old/contrib/grap2graph/grap2graph.am	1970-01-01 02:00:00.000000000 +0200
+++ groff-1.22.3/contrib/grap2graph/grap2graph.am	2015-04-23 20:57:03.000000000 +0300
@@ -0,0 +1,31 @@
+# Copyright (C) 2003-2014  Free Software Foundation, Inc.
+#
+# This file is part of groff.
+#
+# groff is free software; you can redistribute it and/or modify it under
+# the terms of the GNU General Public License as published by the Free
+# Software Foundation, either version 3 of the License, or
+# (at your option) any later version.
+#
+# groff is distributed in the hope that it will be useful, but WITHOUT ANY
+# WARRANTY; without even the implied warranty of MERCHANTABILITY or
+# FITNESS FOR A PARTICULAR PURPOSE.  See the GNU General Public License
+# for more details.
+#
+# You should have received a copy of the GNU General Public License
+# along with this program. If not, see <http://www.gnu.org/licenses/>.
+#
+# grap2graph.am
+#
+
+grap2graph_srcdir = $(top_srcdir)/contrib/grap2graph
+bin_SCRIPTS += grap2graph
+man1_MANS += contrib/grap2graph/grap2graph.n
+EXTRA_DIST += \
+  $(grap2graph_srcdir)/grap2graph.sh \
+  $(grap2graph_srcdir)/grap2graph.man
+grap2graph: $(grap2graph_srcdir)/grap2graph.sh
+	sed -e "s|[@]g[@]|$(g)|g" \
+	    -e "s|[@]VERSION[@]|$(VERSION)|" \
+	    -e $(SH_SCRIPT_SED_CMD) $(grap2graph_srcdir)/grap2graph.sh >$@
+	chmod +x $@
diff -Nuar groff-1.22.3.old/contrib/grap2graph/Makefile.sub groff-1.22.3/contrib/grap2graph/Makefile.sub
--- groff-1.22.3.old/contrib/grap2graph/Makefile.sub	2014-11-04 10:38:35.466520984 +0200
+++ groff-1.22.3/contrib/grap2graph/Makefile.sub	1970-01-01 02:00:00.000000000 +0200
@@ -1,46 +0,0 @@
-# Copyright (C) 2003-2014  Free Software Foundation, Inc.
-#
-# This file is part of groff.
-#
-# groff is free software; you can redistribute it and/or modify it under
-# the terms of the GNU General Public License as published by the Free
-# Software Foundation, either version 3 of the License, or
-# (at your option) any later version.
-#
-# groff is distributed in the hope that it will be useful, but WITHOUT ANY
-# WARRANTY; without even the implied warranty of MERCHANTABILITY or
-# FITNESS FOR A PARTICULAR PURPOSE.  See the GNU General Public License
-# for more details.
-#
-# You should have received a copy of the GNU General Public License
-# along with this program. If not, see <http://www.gnu.org/licenses/>.
-#
-# Makefile.sub
-#
-MAN1=grap2graph.n
-MOSTLYCLEANADD=grap2graph
-RM=rm -f
-
-all: grap2graph
-
-grap2graph: grap2graph.sh
-	sed -e "s|@g@|$(g)|g" \
-	    -e "s|@VERSION@|$(version)$(revision)|" \
-	    -e $(SH_SCRIPT_SED_CMD) $(srcdir)/grap2graph.sh >$@
-	chmod +x $@
-
-install_data: grap2graph
-	-test -d $(DESTDIR)$(bindir) || $(mkinstalldirs) $(DESTDIR)$(bindir)
-	$(RM) $(DESTDIR)$(bindir)/grap2graph
-	$(INSTALL_SCRIPT) grap2graph $(DESTDIR)$(bindir)/grap2graph
-
-uninstall_sub:
-	$(RM) $(DESTDIR)$(bindir)/grap2graph
-
-########################################################################
-# Emacs settings
-########################################################################
-#
-# Local Variables:
-# mode: makefile
-# End:
diff -Nuar groff-1.22.3.old/contrib/groffer/ChangeLog groff-1.22.3/contrib/groffer/ChangeLog
--- groff-1.22.3.old/contrib/groffer/ChangeLog	2014-11-04 10:38:35.477520847 +0200
+++ groff-1.22.3/contrib/groffer/ChangeLog	2015-04-23 20:57:03.000000000 +0300
@@ -1,3 +1,20 @@
+2015-04-04  Werner LEMBERG  <wl@gnu.org>
+
+	* roff2.man (EL): Fix typo.
+
+2015-04-04  Werner LEMBERG  <wl@gnu.org>
+
+	* roff2.man: Make it work in compatibility mode.
+
+2015-04-04  Werner LEMBERG  <wl@gnu.org>
+
+	* groffer.man: Make it work in compatibility mode.
+	(EL): Fix typo.
+
+2015-03-20  Werner LEMBERG  <wl@gnu.org>
+
+	* subs.pl (where_is_prog): Fix typo.
+
 2014-11-04  Werner LEMBERG  <wl@gnu.org>
 
 	* version.sh (_GROFF_VERSION_PRESET): Set to 1.22.3.
diff -Nuar groff-1.22.3.old/contrib/groffer/.gitignore groff-1.22.3/contrib/groffer/.gitignore
--- groff-1.22.3.old/contrib/groffer/.gitignore	1970-01-01 02:00:00.000000000 +0200
+++ groff-1.22.3/contrib/groffer/.gitignore	2015-04-23 20:57:03.000000000 +0300
@@ -0,0 +1,24 @@
+PERL
+SHELL
+groffer
+groffer.man
+groffer.n
+roff2x.n
+roff2x.man
+roff2x
+roff2text.n
+roff2text.man
+roff2text
+roff2ps.n
+roff2ps.man
+roff2ps
+roff2pdf.n
+roff2pdf.man
+roff2pdf
+roff2html.n
+roff2html.man
+roff2html
+roff2dvi.n
+roff2dvi.man
+roff2dvi
+HAVE_PERL
diff -Nuar groff-1.22.3.old/contrib/groffer/groffer.am groff-1.22.3/contrib/groffer/groffer.am
--- groff-1.22.3.old/contrib/groffer/groffer.am	1970-01-01 02:00:00.000000000 +0200
+++ groff-1.22.3/contrib/groffer/groffer.am	2015-04-23 20:57:03.000000000 +0300
@@ -0,0 +1,106 @@
+# Automake rules for `groffer'
+
+# File position: <groff-source>/contrib/groffer/groffer.am
+
+# Copyright (C) 2001-2014
+#   Free Software Foundation, Inc.
+# Written by Werner Lemberg <wl@gnu.org> and
+# Bernd Warken <groff-bernd.warken-72@web.de>.
+# Automake migration by Bertrand Garrigues
+
+# This file is part of `groffer' which is part of `groff'.
+
+# `groff' is free software; you can redistribute it and/or modify it
+# under the terms of the GNU General Public License as published by
+# the Free Software Foundation, either version 2 of the License, or
+# (at your option) any later version.
+
+# `groff' is distributed in the hope that it will be useful, but
+# WITHOUT ANY WARRANTY; without even the implied warranty of
+# MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the GNU
+# General Public License for more details.
+
+# You should have received a copy of the GNU General Public License
+# along with this program. If not, see
+# <http://www.gnu.org/licenses/gpl-2.0.html>.
+
+########################################################################
+
+groffer_srcdir = $(top_srcdir)/contrib/groffer
+# generated programs
+ROFF2PROGS = \
+  roff2dvi \
+  roff2html \
+  roff2pdf \
+  roff2ps \
+  roff2text \
+  roff2x
+
+# Generated man templates
+ROFF2MAN = \
+  contrib/groffer/roff2dvi.man \
+  contrib/groffer/roff2html.man \
+  contrib/groffer/roff2pdf.man \
+  contrib/groffer/roff2ps.man \
+  contrib/groffer/roff2text.man \
+  contrib/groffer/roff2x.man
+
+GROFFER_PERL = \
+  contrib/groffer/main_subs.pl \
+  contrib/groffer/man.pl \
+  contrib/groffer/split_env.sh \
+  contrib/groffer/subs.pl
+
+GROFFER_REST = \
+  contrib/groffer/roff2.man \
+  contrib/groffer/version.sh \
+  contrib/groffer/groffer.man \
+  contrib/groffer/groffer.pl \
+  contrib/groffer/roff2.pl
+
+EXTRA_DIST += $(GROFFER_PERL) $(GROFFER_REST) \
+  contrib/groffer/ChangeLog  \
+  contrib/groffer/README \
+  contrib/groffer/README_PERL
+
+# groffer_dir is set by a m4 macro
+grofferdir = $(groffer_dir)
+bin_SCRIPTS += groffer $(ROFF2PROGS)
+groffer_DATA = $(GROFFER_PERL) contrib/groffer/version.sh
+man1_MANS += \
+  contrib/groffer/groffer.n \
+  contrib/groffer/roff2dvi.n \
+  contrib/groffer/roff2html.n \
+  contrib/groffer/roff2pdf.n \
+  contrib/groffer/roff2ps.n \
+  contrib/groffer/roff2text.n \
+  contrib/groffer/roff2x.n
+MOSTLYCLEANFILES += $(ROFF2MAN)
+
+$(ROFF2PROGS): $(groffer_srcdir)/roff2.pl
+	cp $(groffer_srcdir)/roff2.pl $@;
+
+# we take roff2.man and replace the @ROFF2MODE@ by the type of file
+# (dvi, pdf, html etc ...)
+$(ROFF2MAN):  $(groffer_srcdir)/roff2.man
+	@$(MKDIR_P) contrib/groffer
+	FILEMODE=`echo $@ | sed 's|contrib/groffer/roff2\([a-z][a-z]*\)\.man|\1|g'` \
+	  && sed -e 's/[@]ROFF2MODE[@]/'"$$FILEMODE"'/g' $(groffer_srcdir)/roff2.man > $@;
+
+groffer: $(GROFFER_PERL) $(GROFFER_REST) $(SH_DEPS_SED_SCRIPT)
+	echo "Using perl version of groffer."; \
+	sed -f "$(SH_DEPS_SED_SCRIPT)" \
+	   -e "s|[@]g[@]|$(g)|g" \
+	   -e "s|[@]BINDIR[@]|$(DESTDIR)$(bindir)|g" \
+	   -e "s|[@]libdir[@]|$(DESTDIR)$(libdir)|g" \
+	   -e "s|[@]groffer_dir[@]|$(DESTDIR)$(groffer_dir)|g" \
+	   -e "s|[@]VERSION[@]|$(VERSION)|g" \
+	   -e "$(SH_SCRIPT_SED_CMD)" \
+	    $(groffer_srcdir)/groffer.pl >$@; \
+	chmod +x $@;
+
+uninstall_groffdirs: uninstall-groffer-hook
+uninstall-groffer-hook:
+	if test -d $(DESTDIR)$(grofferdir); then \
+	  rmdir $(DESTDIR)$(grofferdir); \
+	fi
diff -Nuar groff-1.22.3.old/contrib/groffer/groffer.man groff-1.22.3/contrib/groffer/groffer.man
--- groff-1.22.3.old/contrib/groffer/groffer.man	2014-11-04 10:38:35.477520847 +0200
+++ groff-1.22.3/contrib/groffer/groffer.man	2015-04-23 20:57:03.000000000 +0300
@@ -4,12 +4,22 @@
 .
 .\" The .SH was moved to this place in order to appease `apropos'.
 .
+.
+.\"*********************************************************************
+.\"
+.\" This man page doesn't use extended groff syntax!
+.\" Formatting it with and without groff's option `-C' should always
+.\" give the same result.
+.\"
+.\"*********************************************************************
+.
+.
 .\" --------------------------------------------------------------------
 .\" Legalese
 .\" --------------------------------------------------------------------
 .
 .de co
-Copyright \[co] 2001-2014 Free Software Foundation, Inc.
+Copyright \(co 2001-2014 Free Software Foundation, Inc.
 
 This file is part of groffer, which is part of groff, a free software
 project.
@@ -35,12 +45,12 @@
 .\" --------------------------------------------------------------------
 .
 .\" Ellipsis ...
-.ie t .ds EL \fS\N'188'\fP
-.el .ds EL \&.\|.\|.\&\
+.ie t .ds EL \fS\N'188'\fP\"
+.el .ds EL \&.\|.\|.\&\"
 .\" called with \*(EL
 .
 .\" Bullet
-.ie t .ds BU \[bu]
+.ie t .ds BU \(bu
 .el .ds BU *
 .\" used in `.IP \*(BU 2m' (former .Topic)
 .
@@ -102,7 +112,7 @@
 The
 .B \%groffer
 program also includes many of the features for finding and displaying
-the \%\f[CR]Unix\f[] manual pages
+the \%\f(CRUnix\fP manual pages
 .nh
 .RI ( man\~pages ),
 .hy
@@ -139,7 +149,7 @@
 .
 This includes the
 .I \%groff
-native \%\f[CR]X\~Window\f[] viewer
+native \%\f(CRX\~Window\fP viewer
 .BR \%gxditview (@MAN1EXT@),
 each
 .IR \%Postcript ,
@@ -175,7 +185,7 @@
 .
 .
 .P
-Option handling is done in \f[CR]GNU\f[] style.
+Option handling is done in \f(CRGNU\fP style.
 .
 Options and file names can be mixed freely.
 .
@@ -294,7 +304,7 @@
 .OP \-\-troff\-device device
 .YS
 .P
-Further long options of \f[CR]GNU\f[]
+Further long options of \f(CRGNU\fP
 .B man
 are accepted as well.
 .RE
@@ -365,7 +375,7 @@
 The name of a
 .I man section
 is a single character from
-.BR \%[1\[en]9on] ,
+.BR \%[1\(en9on] ,
 the
 .I extension
 is some word.
@@ -524,7 +534,7 @@
 .IR "mode x" ,
 and
 .I "mode dvi"
-in \%\f[CR]X\~Window\f[] with different viewers and
+in \%\f(CRX\~Window\fP with different viewers and
 .I mode tty
 with device
 .I utf8
@@ -535,14 +545,14 @@
 .
 .
 .P
-In \%\f[CR]X\~Window\f[], many programs create their own window when
+In \%\f(CRX\~Window\fP, many programs create their own window when
 called.
 .
 .B \%groffer
 can run these viewers as an independent program in the background.
 .
 As this does not work in text mode on a terminal (tty) there must be a
-way to know which viewers are \%\f[CR]X\~Window\f[] graphical
+way to know which viewers are \%\f(CRX\~Window\fP graphical
 programs.
 .
 The
@@ -550,7 +560,7 @@
 script has a small set of information on some viewer names.
 .
 If a viewer argument of the command\-line chooses an element that is
-kept as \%\f[CR]X\~Window\f[] program in this list it is treated as a
+kept as \%\f(CRX\~Window\fP program in this list it is treated as a
 viewer that can run in the background.
 .
 All other, unknown viewer calls are not run in the background.
@@ -620,7 +630,7 @@
 .SM
 .BR $PATH .
 .
-Known \%\f[CR]X\~Window\f[]
+Known \%\f(CRX\~Window\fP
 .I \%dvi
 viewers include
 .BR \%xdvi (1)
@@ -781,7 +791,7 @@
 Format in a
 .I \%groff\~text\~mode
 and write the result to standard output using a text pager program,
-even when in \%\f[CR]X\~Window\f[].
+even when in \%\f(CRX\~Window\fP.
 .
 .
 .TP
@@ -800,7 +810,7 @@
 .BR \%gxditview (@MAN1EXT@)
 program being distributed together with
 .BR \%groff .
-But the standard \%\f[CR]X\~Window\f[] tool
+But the standard \%\f(CRX\~Window\fP tool
 .BR \%xditview (1)
 can also be chosen with the option
 .BR \-\-viewer .
@@ -1281,7 +1291,7 @@
 .I \%filespec
 argument search all
 .I \%man\~pages
-and display their description \[em] or say that it is not a
+and display their description \(em or say that it is not a
 .IR \%man\~page .
 This is written from anew, so it differs from
 .IR man 's
@@ -1355,10 +1365,10 @@
 .
 The long options of
 .B \%groffer
-were synchronized with the long options of \f[CR]GNU\f[]
+were synchronized with the long options of \f(CRGNU\fP
 .BR man .
 .
-All long options of \f[CR]GNU\f[]
+All long options of \f(CRGNU\fP
 .B man
 are recognized, but not all of these options are important to
 .BR \%groffer ,
@@ -1382,9 +1392,9 @@
 .
 .
 .P
-If your system has \f[CR]GNU\f[]
+If your system has \f(CRGNU\fP
 .B man
-installed the full set of long and short options of the \f[CR]GNU\f[]
+installed the full set of long and short options of the \f(CRGNU\fP
 .B man
 program can be passed via the environment variable
 .SM
@@ -1514,11 +1524,11 @@
 .\" --------------------------------------------------------------------
 .
 The following long options were adapted from the corresponding
-\%\f[CR]X\~Window\~Toolkit\f[] options.
+\%\f(CRX\~Window\~Toolkit\fP options.
 .
 .B \%groffer
 will pass them to the actual viewer program if it is an
-\%\f[CR]X\~Window\f[] program.
+\%\f(CRX\~Window\fP program.
 .
 Otherwise these options are ignored.
 .
@@ -1534,14 +1544,14 @@
 .B \%groffer
 uses the option
 .B \-\-font
-for the \%\f[CR]X\~Window\f[] option
+for the \%\f(CRX\~Window\fP option
 .BR \-font .
 .
 .
 .P
 See
 .BR X (7)
-and the documentation on the \%\f[CR]X\~Window\~Toolkit\f[] options
+and the documentation on the \%\f(CRX\~Window\~Toolkit\fP options
 for more details on these options and their arguments.
 .
 .
@@ -1581,8 +1591,8 @@
 .
 .TP
 .BI \-\-display \ X-display
-Set the \%\f[CR]X\~Window\f[] display on which the viewer program
-shall be started, see the \%\f[CR]X\~Window\f[] documentation for the
+Set the \%\f(CRX\~Window\fP display on which the viewer program
+shall be started, see the \%\f(CRX\~Window\fP documentation for the
 syntax of the argument.
 .
 .
@@ -1607,7 +1617,7 @@
 .BI \-\-font \ font_name
 Set the font used by the viewer window.
 .
-The argument is an \%\f[CR]X\~Window\f[] font name.
+The argument is an \%\f(CRX\~Window\fP font name.
 .
 .
 .TP
@@ -1628,7 +1638,7 @@
 .
 .TP
 .BI \-\-resolution \ value
-Set \%\f[CR]X\~Window\f[] resolution in dpi (dots per inch) in some
+Set \%\f(CRX\~Window\fP resolution in dpi (dots per inch) in some
 viewer programs.
 .
 The only supported dpi values are
@@ -1656,7 +1666,7 @@
 .
 .TP
 .BI \-\-xrm \ 'resource'
-Set \f[CR]\%X\~Window\f[] resource.
+Set \f(CR\%X\~Window\fP resource.
 .
 .
 .\" --------------------------------------------------------------------
@@ -1790,12 +1800,12 @@
 .
 .
 .P
-The strange \%\f[CR]POSIX\f[] behavior to regard all arguments behind
+The strange \%\f(CRPOSIX\fP behavior to regard all arguments behind
 the first non-option argument as
 .I \%filespec
 arguments is ignored.
 .
-The \f[CR]GNU\f[] behavior to recognize options even when mixed with
+The \f(CRGNU\fP behavior to recognize options even when mixed with
 .I \%filespec
 arguments is used throughout.
 .
@@ -1803,7 +1813,7 @@
 .B \-\-
 ends the option handling and interprets all following arguments as
 .I \%filespec
-arguments; so the \%\f[CR]POSIX\f[] behavior can be easily adopted.
+arguments; so the \%\f(CRPOSIX\fP behavior can be easily adopted.
 .
 .
 .P
@@ -2026,7 +2036,7 @@
 .
 .P
 Several different modes are offered, graphical modes for
-\f[CR]\%X\~Window\f[],
+\f(CR\%X\~Window\fP,
 .IR \%text\~modes ,
 and some direct
 .I \%groff\~modes
@@ -2060,7 +2070,7 @@
 .SS "Graphical Display Modes"
 .\" --------------------------------------------------------------------
 .
-The graphical display modes work mostly in the \%\f[CR]X\~Window\f[]
+The graphical display modes work mostly in the \%\f(CRX\~Window\fP
 environment (or similar implementations within other windowing
 environments).
 .
@@ -2069,11 +2079,11 @@
 .B \%$DISPLAY
 and the option
 .B \-\-display
-are used for specifying the \%\f[CR]X\~Window\f[] display to be used.
+are used for specifying the \%\f(CRX\~Window\fP display to be used.
 .
 If this environment variable is empty
 .B \%groffer
-assumes that no \%\f[CR]X\~Window\f[] is running and changes to a
+assumes that no \%\f(CRX\~Window\fP is running and changes to a
 .IR \%text\~mode .
 .
 You can change this automatic behavior by the option
@@ -2082,7 +2092,7 @@
 .
 .P
 Known viewers for the graphical display modes and their standard
-\%\f[CR]X\~Window\f[] viewer programs are
+\%\f(CRX\~Window\fP viewer programs are
 .
 .IP \*(BU 2m
 in a PDF viewer
@@ -2106,7 +2116,7 @@
 .hy
 .
 .IP \*(BU 2m
-\%\f[CR]X\~Window\f[]
+\%\f(CRX\~Window\fP
 .I roff
 viewers such as
 .BR \%gxditview (@MAN1EXT@)
@@ -2125,7 +2135,7 @@
 .P
 The
 .I \%pdf\~mode
-has a major advantage \[em] it is the only graphical display mode that
+has a major advantage \(em it is the only graphical display mode that
 allows to search for text within the viewer; this can be a really
 important feature.
 .
@@ -2135,12 +2145,12 @@
 .
 .P
 These graphical viewers can be customized by options of the
-\%\f[CR]X\~Window\~Toolkit\f[].
+\%\f(CRX\~Window\~Toolkit\fP.
 .
 But the
 .B \%groffer
 options use a leading double minus instead of the single minus used by
-the \%\f[CR]X\~Window\~Toolkit\f[].
+the \%\f(CRX\~Window\~Toolkit\fP.
 .
 .
 .\" --------------------------------------------------------------------
@@ -2315,7 +2325,7 @@
 .IR \%man\~pages .
 .
 All long options, all environment variables, and most of the
-functionality of the \f[CR]GNU\fP
+functionality of the \f(CRGNU\fP
 .BR \%man (1)
 program were implemented.
 .
@@ -2509,7 +2519,7 @@
 The
 .I default language
 can be specified by specifying one of the pseudo-language parameters
-\f[CR]C\fP or \f[CR]\%POSIX\fP.
+\f(CRC\fP or \f(CR\%POSIX\fP.
 .
 This is like deleting a formerly given
 .I language
@@ -2527,13 +2537,13 @@
 .I language
 name is determined by
 .BR man .
-In \f[CR]GNU\fP
+In \f(CRGNU\fP
 .BR man ,
-it is specified in the \%\f[CR]POSIX\~1003.1\fP based format:
+it is specified in the \%\f(CRPOSIX\~1003.1\fP based format:
 .P
 .nh
-\f[I]<language>\/\f[][\f[CB]_\f[]\,\f[I]<territory>\/\f[][\f[CB].\fP\
-\f[I]<character-set>\/\f[][\f[CB],\fP\,\f[I]<version>\/\fP]]],
+\fI<language>\/\fP[\f(CB_\fP\,\fI<territory>\/\fP[\f(CB.\fP\
+\fI<character-set>\/\fP[\f(CB,\fP\,\fI<version>\/\fP]]],
 .hy
 .P
 but the two-letter code in
@@ -2613,8 +2623,8 @@
 file in a
 .I section
 directory has the form
-.IR \%\f[CB]man\fP<section>\f[CB]/\fP<name>\f[CB].\fP<section>\
-[<extension>][\f[CB].\fP<compression>] ,
+.IR \%\f(CBman\fP<section>\f(CB/\fP<name>\f(CB.\fP<section>\
+[<extension>][\f(CB.\fP<compression>] ,
 where
 .I \%<extension>
 and
@@ -2753,7 +2763,7 @@
 .B /usr/share/man/man1/groff.1
 This is an uncompressed file for the
 .I \%man\~page
-\f[CR]groff\fP in
+\f(CRgroff\fP in
 .IR section\~1 .
 .
 It can be called by
@@ -2841,8 +2851,8 @@
 \fIsh#\fR\~groffer\~1e\~ctags
 \fIsh#\fR\~groffer\~\-\-extension=e\~\-\-sections=1\~ctags
 .EE
-where \f[CR]e\fP works as an abbreviation for the extension
-\f[CR]emacs21\fP.
+where \f(CRe\fP works as an abbreviation for the extension
+\f(CRemacs21\fP.
 .
 .
 .TP
@@ -2912,7 +2922,7 @@
 .BR \%bzip2 (1)
 it is decompressed on-the-fly.
 .
-This includes the \f[CR]GNU\fP
+This includes the \f(CRGNU\fP
 .BR \%.gz ,
 .BR \%.bz2 ,
 and the traditional
@@ -2934,7 +2944,7 @@
 .
 All environment variables of
 .BR \%groff (@MAN1EXT@)
-and \f[CR]GNU\fP
+and \f(CRGNU\fP
 .BR \%man (1)
 and some standard system variables are honored.
 .
@@ -2972,7 +2982,7 @@
 .TP
 .SM
 .B \%$DISPLAY
-If this variable is set this indicates that the \%\f[CR]X\~Window\fP
+If this variable is set this indicates that the \%\f(CRX\~Window\fP
 system is running.
 .
 Testing this variable decides on whether graphical or text output is
@@ -2981,7 +2991,7 @@
 This variable should not be changed by the user carelessly, but it can
 be used to start the graphical
 .B \%groffer
-on a remote \%\f[CR]X\~Window\fP terminal.
+on a remote \%\f(CRX\~Window\fP terminal.
 .
 For example, depending on your system,
 .B \%groffer
@@ -3026,7 +3036,7 @@
 see
 .BR \%setlocale (3).
 .
-The locale values \f[CR]C\fP and \%\f[CR]POSIX\fP
+The locale values \f(CRC\fP and \%\f(CRPOSIX\fP
 stand for the default, i.e.\& the
 .I \%man\~page
 directories without a language prefix.
@@ -3407,9 +3417,9 @@
 .BR /usr/local/share/doc/groff ,
 using the standard viewer
 .B \%gxditview
-as graphical viewer when in \%\f[CR]X\~Window\fP, or the
+as graphical viewer when in \%\f(CRX\~Window\fP, or the
 .BR \%less (1)
-pager program when not in \%\f[CR]X\~Window\fP.
+pager program when not in \%\f(CRX\~Window\fP.
 .
 .sp
 .EX
@@ -3476,7 +3486,7 @@
 .
 .sp
 .EX
-\fIsh#\fR\~groffer\~groff\~\[cq]troff(1)\[cq]\~man:roff
+\fIsh#\fR\~groffer\~groff\~\(cqtroff(1)\(cq\~man:roff
 .EE
 .sp
 The arguments that are not existing files are looked-up as the
@@ -3492,13 +3502,13 @@
 .
 The quotes around
 .nh
-.I \[cq]troff(1)\[cq]
+.I \(cqtroff(1)\(cq
 .hy
 are necessary because the parentheses are special shell characters;
 escaping them with a backslash character
-.I \[rs](
+.I \(rs(
 and
-.I \[rs])
+.I \(rs)
 would be possible, too.
 .
 The formatted files are concatenated and displayed in one piece.
@@ -3581,12 +3591,12 @@
 .
 .sp
 .EX
-\fIsh#\fR\~echo\~'\[rs]f[CB]WOW!'\~|
+\fIsh#\fR\~echo\~'\(rsf(CBWOW!'\~|
 > groffer \-\-x \-\-bg red \-\-fg yellow \-\-geometry 200x100 \-
 .EE
 .sp
 .
-Display the word \f[CB]WOW!\fP in a small window in constant-width
+Display the word \f(CBWOW!\fP in a small window in constant-width
 bold font, using color yellow on red background.
 .
 .
@@ -3602,9 +3612,9 @@
 .P
 .B \%groffer
 provides its own parser for command line arguments that is compatible
-to both \%\f[CR]POSIX\fP
+to both \%\f(CRPOSIX\fP
 .BR \%getopts (1)
-and \%\f[CR]GNU\fP
+and \%\f(CRGNU\fP
 .BR \%getopt (1).
 It can handle option arguments and file names containing white space
 and a large set of special characters.
@@ -3673,7 +3683,7 @@
 .I \%filespec
 parameters follows the GNU principle.
 .
-That does not fulfill the strange option behavior of \%\f[CR]POSIX\fP
+That does not fulfill the strange option behavior of \%\f(CRPOSIX\fP
 that ends option processing as soon as the first non-option argument
 has been reached.
 .
diff -Nuar groff-1.22.3.old/contrib/groffer/Makefile.sub groff-1.22.3/contrib/groffer/Makefile.sub
--- groff-1.22.3.old/contrib/groffer/Makefile.sub	2014-11-04 10:38:35.478520834 +0200
+++ groff-1.22.3/contrib/groffer/Makefile.sub	1970-01-01 02:00:00.000000000 +0200
@@ -1,109 +0,0 @@
-# Makefile.sub for `groffer' (integration into the `groff' source tree)
-
-# File position: <groff-source>/contrib/groffer/Makefile.sub
-
-# Copyright (C) 2001-2014  Free Software Foundation, Inc.
-# Written by Werner Lemberg <wl@gnu.org> and
-# Bernd Warken <groff-bernd.warken-72@web.de>.
-
-# This file is part of `groffer' which is part of `groff'.
-
-# `groff' is free software; you can redistribute it and/or modify it
-# under the terms of the GNU General Public License as published by
-# the Free Software Foundation, either version 2 of the License, or
-# (at your option) any later version.
-
-# `groff' is distributed in the hope that it will be useful, but
-# WITHOUT ANY WARRANTY; without even the implied warranty of
-# MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the GNU
-# General Public License for more details.
-
-# You should have received a copy of the GNU General Public License
-# along with this program. If not, see
-# <http://www.gnu.org/licenses/gpl-2.0.html>.
-
-########################################################################
-
-ROFF2MODES=dvi html pdf ps text x
-ROFF2PROGS=`echo $(ROFF2MODES) | sed 's/[a-z][a-z]*/roff2&/g'`
-ROFF2MAN=`echo $(ROFF2MODES) | sed 's/[a-z][a-z]*/roff2&.man/g'`
-ROFF2N=`echo $(ROFF2MODES) | sed 's/[a-z][a-z]*/roff2&.n/g'`
-
-MAN1=groffer.n \
-     roff2dvi.n \
-     roff2html.n \
-     roff2pdf.n \
-     roff2ps.n \
-     roff2text.n \
-     roff2x.n
-
-MOSTLYCLEANADD=groffer $(MAN1) $(ROFF2MAN) $(ROFF2N) $(ROFF2PROGS)
-
-RM=rm -f
-
-all: groffer
-
-GROFFER_PERL=subs.pl \
-             main_subs.pl \
-             man.pl \
-             split_env.sh
-GROFFER_REST=roff2.man \
-             version.sh \
-             groffer.man \
-             groffer.pl \
-             roff2.pl
-
-groffer: $(GROFFER_PERL) $(GROFFER_REST) $(SH_DEPS_SED_SCRIPT)
-	sed -f "$(SH_DEPS_SED_SCRIPT)" \
-	    -e "s|@g@|$(g)|g" \
-	    -e "s|@BINDIR@|$(DESTDIR)$(bindir)|g" \
-	    -e "s|@libdir@|$(DESTDIR)$(libdir)|g" \
-	    -e "s|@groffer_dir@|$(DESTDIR)$(groffer_dir)|g" \
-	    -e "s|@VERSION@|$(version)$(revision)|g" \
-	    -e "$(SH_SCRIPT_SED_CMD)" \
-	     $(srcdir)/groffer.pl >$@; \
-	for f in $(ROFF2PROGS); do \
-	  cp $(srcdir)/roff2.pl $$f; \
-	done; \
-	chmod +x $@
-	for m in $(ROFF2MODES); do \
-	  cat $(srcdir)/roff2.man \
-	    | sed 's/@ROFF2MODE@/'"$$m"'/g' > roff2$${m}.man; \
-	done
-
-install_data: groffer
-	-test -d $(DESTDIR)$(bindir) || $(mkinstalldirs) $(DESTDIR)$(bindir)
-	$(RM) $(DESTDIR)$(bindir)/groffer
-	$(INSTALL_SCRIPT) groffer $(DESTDIR)$(bindir)/groffer
-	for f in $(ROFF2PROGS); do \
-	  $(RM) $(DESTDIR)$(bindir)/$$f; \
-	  $(INSTALL_SCRIPT) $$f $(DESTDIR)$(bindir)/$$f; \
-	done
-	-test -d $(DESTDIR)$(groffer_dir) \
-	  || $(mkinstalldirs) $(DESTDIR)$(groffer_dir)
-	$(RM) $(DESTDIR)$(groffer_dir)/version.sh
-	$(INSTALL_DATA) $(srcdir)/version.sh $(DESTDIR)$(groffer_dir)/version.sh
-	for f in $(GROFFER_PERL); do \
-	  $(RM) $(DESTDIR)$(groffer_dir)/$$f; \
-	done
-	for f in $(GROFFER_PERL); do \
-	  $(INSTALL_SCRIPT) $(srcdir)/$$f $(DESTDIR)$(groffer_dir)/$$f; \
-	done;
-
-uninstall_sub:
-	$(RM) $(DESTDIR)$(bindir)/groffer
-	-for f in $(ROFF2PROGS); do $(RM) $(DESTDIR)$(bindir)/$$f; done
-	-for f in $(GROFFER_PERL) version.sh; do \
-	  $(RM) $(DESTDIR)$(groffer_dir)/$$f;\
-	done
-	-test -d $(DESTDIR)$(libdir)/groff/groffer && \
-	  rmdir $(DESTDIR)$(libdir)/groff/groffer
-
-
-########################################################################
-# Emacs settings
-########################################################################
-#
-# Local Variables:
-# mode: makefile
-# End:
diff -Nuar groff-1.22.3.old/contrib/groffer/roff2.man groff-1.22.3/contrib/groffer/roff2.man
--- groff-1.22.3.old/contrib/groffer/roff2.man	2014-11-04 10:38:35.478520834 +0200
+++ groff-1.22.3/contrib/groffer/roff2.man	2015-04-23 20:57:03.000000000 +0300
@@ -13,7 +13,7 @@
 .\" --------------------------------------------------------------------
 .
 .de co
-Copyright \[co] 2006-2014 Free Software Foundation, Inc.
+Copyright \(co 2006-2014 Free Software Foundation, Inc.
 
 This file is part of groffer, which is part of GNU groff, a free
 software project.
@@ -39,8 +39,8 @@
 .\" --------------------------------------------------------------------
 .
 .\" Ellipsis ...
-.ie t .ds EL \fS\N'188'\fP
-.el .ds EL \&.\|.\|.\&\
+.ie t .ds EL \fS\N'188'\fP\"
+.el .ds EL \&.\|.\|.\&\"
 .\" called with \*(EL
 .
 .
diff -Nuar groff-1.22.3.old/contrib/groffer/subs.pl groff-1.22.3/contrib/groffer/subs.pl
--- groff-1.22.3.old/contrib/groffer/subs.pl	2014-11-04 10:38:35.478520834 +0200
+++ groff-1.22.3/contrib/groffer/subs.pl	2015-04-23 20:57:03.000000000 +0300
@@ -749,7 +749,7 @@
     my @baseargs = ($n);
     while (@base) {
       my $base = join(' ', @base);
-      foreach my $d (@maon::Path) {
+      foreach my $d (@main::Path) {
 	my $file = File::Spec->catfile($d, $base);
 	if (-f $file && -x $file) {
 	  my $baseargs = join(' ', @baseargs);
diff -Nuar groff-1.22.3.old/contrib/groff_filenames/ChangeLog groff-1.22.3/contrib/groff_filenames/ChangeLog
--- groff-1.22.3.old/contrib/groff_filenames/ChangeLog	2014-11-04 10:38:35.471520922 +0200
+++ groff-1.22.3/contrib/groff_filenames/ChangeLog	2015-04-23 20:57:03.000000000 +0300
@@ -1,3 +1,7 @@
+2015-04-03  Werner LEMBERG  <wl@gnu.org>
+
+	* groff_filenames.man: Make it work in compatibility mode.
+
 2014-09-03  Bernd Warken  <groff-bernd.warken-72@web.de>
 
 	* groff_filenames.man, Makefile.sub: Repair copying and Emacs
diff -Nuar groff-1.22.3.old/contrib/groff_filenames/groff_filenames.am groff-1.22.3/contrib/groff_filenames/groff_filenames.am
--- groff-1.22.3.old/contrib/groff_filenames/groff_filenames.am	1970-01-01 02:00:00.000000000 +0200
+++ groff-1.22.3/contrib/groff_filenames/groff_filenames.am	2015-04-23 20:57:03.000000000 +0300
@@ -0,0 +1,30 @@
+# Automake rules for `groff_filenames'
+
+# File position: <groff-source>/contrib/groff_filenames/groff_filenames.am
+
+# Copyright (C) 2013-2014  Free Software Foundation, Inc.
+#
+# Written by Bernd Warken <groff-bernd.warken-72@web.de>.
+# Automake migration by Bertrand Garrigues
+
+# This file is part of `groff'.
+
+# `groff' is free software; you can redistribute it and/or modify it
+# under the terms of the GNU General Public License as published by
+# the Free Software Foundation, either version 2 of the License, or
+# (at your option) any later version.
+
+# `groff' is distributed in the hope that it will be useful, but
+# WITHOUT ANY WARRANTY; without even the implied warranty of
+# MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the GNU
+# General Public License for more details.
+
+# You should have received a copy of the GNU General Public License
+# along with this program. If not, see <http://www.gnu.org/licenses/>.
+
+########################################################################
+
+man7_MANS += contrib/groff_filenames/groff_filenames.n
+EXTRA_DIST += \
+  contrib/groff_filenames/ChangeLog \
+  contrib/groff_filenames/groff_filenames.man
diff -Nuar groff-1.22.3.old/contrib/groff_filenames/groff_filenames.man groff-1.22.3/contrib/groff_filenames/groff_filenames.man
--- groff-1.22.3.old/contrib/groff_filenames/groff_filenames.man	2014-11-04 10:38:35.471520922 +0200
+++ groff-1.22.3/contrib/groff_filenames/groff_filenames.man	2015-04-23 20:57:03.000000000 +0300
@@ -10,7 +10,7 @@
 .\" --------------------------------------------------------------------
 .
 .de co
-Copyright \[co] 2013-2014 Free Software Foundation, Inc.
+Copyright \(co 2013-2014 Free Software Foundation, Inc.
 
 This file is part of groff, a free software project.  You can
 redistribute it and/or modify it under the terms of the GNU General
@@ -74,7 +74,7 @@
 .IR "compressor name" .
 .
 So the whole filename has the structure
-.IR <name> \f[CB].\fP <extension>[ \f[CB].\fP <compression>] .
+.IR <name> \f(CB.\fP <extension>[ \f(CB.\fP <compression>] .
 .
 .
 .P
@@ -635,13 +635,13 @@
 .
 .P
 .UR https://\:github.com/\:n-t-roff/\:heirloom-doctools
-.I Gunnar Ritter\[aq]s Heirloom roff project
+.I Gunnar Ritter\(aqs Heirloom roff project
 .UE .
 .
 You can get this package with the shell command:
 .RS
 .EX
-\[Do] git clone https://github.com/n-t-roff/heirloom-doctools
+\(Do git clone https://github.com/n-t-roff/heirloom-doctools
 .EE
 .RE
 .
diff -Nuar groff-1.22.3.old/contrib/groff_filenames/Makefile.sub groff-1.22.3/contrib/groff_filenames/Makefile.sub
--- groff-1.22.3.old/contrib/groff_filenames/Makefile.sub	2014-11-04 10:38:35.471520922 +0200
+++ groff-1.22.3/contrib/groff_filenames/Makefile.sub	1970-01-01 02:00:00.000000000 +0200
@@ -1,35 +0,0 @@
-# Makefile.sub for `groff_filenames' (integration into the `groff' source tree)
-
-# File position: <groff-source>/contrib/groff_filenames/Makefile.sub
-
-# Copyright (C) 2013-2014  Free Software Foundation, Inc.
-#
-# Written by Bernd Warken <groff-bernd.warken-72@web.de>.
-
-# This file is part of `groff'.
-
-# `groff' is free software; you can redistribute it and/or modify it
-# under the terms of the GNU General Public License as published by
-# the Free Software Foundation, either version 2 of the License, or
-# (at your option) any later version.
-
-# `groff' is distributed in the hope that it will be useful, but
-# WITHOUT ANY WARRANTY; without even the implied warranty of
-# MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the GNU
-# General Public License for more details.
-
-# You should have received a copy of the GNU General Public License
-# along with this program. If not, see <http://www.gnu.org/licenses/>.
-
-########################################################################
-
-MAN7=\
-  groff_filenames.n
-
-MOSTLYCLEANADD=$(MAN7)
-
-########################################################################
-##### Emacs settings
-# Local Variables:
-# mode: makefile
-# End:
diff -Nuar groff-1.22.3.old/contrib/hdtbl/ChangeLog groff-1.22.3/contrib/hdtbl/ChangeLog
--- groff-1.22.3.old/contrib/hdtbl/ChangeLog	2014-11-04 10:38:35.482520784 +0200
+++ groff-1.22.3/contrib/hdtbl/ChangeLog	2015-04-23 20:57:03.000000000 +0300
@@ -1,3 +1,15 @@
+2015-04-03  Werner LEMBERG  <wl@gnu.org>
+
+	Fix Savannah bug #44798.
+
+	* examples/fonts_n.in, examples/fonts_x.in: Use @EGREP@.
+
+	* hdtbl.am (.in.roff): Handle @EGREP@.
+
+2015-04-03  Werner LEMBERG  <wl@gnu.org>
+
+	* groff_hdtbl.man: Make it work in compatibility mode.
+
 2013-09-03  Bernd Warken  <groff-bernd.warken-72@web.de>
 
 	* all files in groff_hdtbl: Copying and Emacs setup.
diff -Nuar groff-1.22.3.old/contrib/hdtbl/examples/fonts_n.in groff-1.22.3/contrib/hdtbl/examples/fonts_n.in
--- groff-1.22.3.old/contrib/hdtbl/examples/fonts_n.in	2014-11-04 10:38:35.593519396 +0200
+++ groff-1.22.3/contrib/hdtbl/examples/fonts_n.in	2015-04-23 20:57:03.000000000 +0300
@@ -102,7 +102,7 @@
 .    TBL border=.1n bc=red cpd=0 csp=.1n bgc=
 .      CPTN groff font \\*[*$1] \
             .br \
-            val=b ".pso grep -e internalname \\*[fontpath]/dev\*[.T]/\\*[*$1]"
+            val=b ".pso @EGREP@ internalname \\*[fontpath]/dev\*[.T]/\\*[*$1]"
 .      TR 
 .        TD
 .          TBL cols=12 border=.1n bc=red csp=.1n cpd=.2n fgc=red4 bgc=beige \
diff -Nuar groff-1.22.3.old/contrib/hdtbl/examples/fonts_x.in groff-1.22.3/contrib/hdtbl/examples/fonts_x.in
--- groff-1.22.3.old/contrib/hdtbl/examples/fonts_x.in	2014-11-04 10:38:35.593519396 +0200
+++ groff-1.22.3/contrib/hdtbl/examples/fonts_x.in	2015-04-23 20:57:03.000000000 +0300
@@ -102,7 +102,7 @@
 .    TBL border=.1n bc=red cpd=0 csp=.1n bgc=
 .      CPTN groff font \\*[*$1] \
             .br \
-            val=b ".pso grep -e internalname \\*[fontpath]/dev\*[.T]/\\*[*$1]"
+            val=b ".pso @EGREP@ internalname \\*[fontpath]/dev\*[.T]/\\*[*$1]"
 .      TR
 .        TD
 .          TBL cols=18 border=.1n bc=red csp=.1n cpd=.2n fgc=red4 bgc=beige \
diff -Nuar groff-1.22.3.old/contrib/hdtbl/examples/.gitignore groff-1.22.3/contrib/hdtbl/examples/.gitignore
--- groff-1.22.3.old/contrib/hdtbl/examples/.gitignore	1970-01-01 02:00:00.000000000 +0200
+++ groff-1.22.3/contrib/hdtbl/examples/.gitignore	2015-04-23 20:57:03.000000000 +0300
@@ -0,0 +1,14 @@
+stamp
+short_reference.ps
+rainbow.ps
+mixed_pickles.ps
+fonts_x.roff
+fonts_x.ps
+fonts_n.roff
+fonts_n.ps
+color_transitions.ps
+color_table_cells.ps
+color_nested_tables.ps
+color_boxes.ps
+col_rowspan_colors.ps
+chess_board.ps
diff -Nuar groff-1.22.3.old/contrib/hdtbl/.gitignore groff-1.22.3/contrib/hdtbl/.gitignore
--- groff-1.22.3.old/contrib/hdtbl/.gitignore	1970-01-01 02:00:00.000000000 +0200
+++ groff-1.22.3/contrib/hdtbl/.gitignore	2015-04-23 20:57:03.000000000 +0300
@@ -0,0 +1,5 @@
+stamp-strip
+hdtbl.tmac-s
+hdmisc.tmac-s
+groff_hdtbl.n
+gnu.eps
diff -Nuar groff-1.22.3.old/contrib/hdtbl/groff_hdtbl.man groff-1.22.3/contrib/hdtbl/groff_hdtbl.man
--- groff-1.22.3.old/contrib/hdtbl/groff_hdtbl.man	2014-11-04 10:38:35.483520772 +0200
+++ groff-1.22.3/contrib/hdtbl/groff_hdtbl.man	2015-04-23 20:57:03.000000000 +0300
@@ -3,6 +3,10 @@
 groff_hdtbl \- groff `hdtbl' macros for generation of tables
 .
 .
+.do nr groff_C \n[.C]
+.cp 0
+.
+.
 .\" --------------------------------------------------------------------
 .\" Legalese
 .\" --------------------------------------------------------------------
@@ -1261,7 +1265,7 @@
 .au
 .
 .
-.\" EOF
+.cp \n[groff_C]
 .
 .
 .\" --------------------------------------------------------------------
diff -Nuar groff-1.22.3.old/contrib/hdtbl/hdmisc.tmac groff-1.22.3/contrib/hdtbl/hdmisc.tmac
--- groff-1.22.3.old/contrib/hdtbl/hdmisc.tmac	2014-11-04 10:38:35.483520772 +0200
+++ groff-1.22.3/contrib/hdtbl/hdmisc.tmac	1970-01-01 02:00:00.000000000 +0200
@@ -1,325 +0,0 @@
-.\"	-*-	mode: nroff	-*-
-.ig
-
-hdmisc.tmac
-
-This file is part of groff, the GNU roff type-setting system.
-
-Copyright (C) 2005-2014  Free Software Foundation, Inc.
-written by Joachim Walsdorff <Joachim.Walsdorff@urz.uni-heidelberg.de>.
-
-groff is free software; you can redistribute it and/or modify it under
-the terms of the GNU General Public License as published by the Free
-Software Foundation, either version 3 of the License, or
-(at your option) any later version.
-
-groff is distributed in the hope that it will be useful, but WITHOUT
-ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or
-FITNESS FOR A PARTICULAR PURPOSE.  See the GNU General Public License
-for more details.
-
-You should have received a copy of the GNU General Public License
-along with this program. If not, see <http://www.gnu.org/licenses/>.
-
-..
-.
-.
-.\" %beginstrip%
-.
-.if d t*getarg \
-.  nx
-.
-.
-.\"	******************************************************************
-.\"	**	Some macros and default settings needed by hdtbl	**
-.\"	******************************************************************
-.
-.
-.\"	Utility macro:	.getarg <key> ...
-.\"
-.\"		Get macro argument.  This macro searches <key> in the
-.\"		remaining arguments and assigns its value to a string
-.\"		register named <key>.  The following syntax forms are
-.\"		recognized.
-.\"
-.\"			<key>=<val>	Assign <val> to string <key>.
-.\"					<val> must not contain spaces.
-.\"			<key>='<val>'	Assign <val> to string <key>.
-.\"					<val> can contain spaces.
-.\"			<key>=		Assign `=' to string <key>.
-.\"			<key>		Assign `key' to string <key>.
-.\"
-.\"		After return, the string `args' contains the remaining
-.\"		arguments.
-.\"
-.\"		Example: With the definition of string `foo' as
-.\"
-.\"			.ds foo aaa=xxx bbb ccc='yyy zzz' ddd= eee
-.\"
-.\"		a call to `getarg' with
-.\"
-.\"			.getarg ccc \*[foo]
-.\"
-.\"		sets string `ccc' to value `yyy zzz'.  The string `args'
-.\"		now contains `aaa=xxx bbb ddd= eee'.  An additional call
-.\"		like
-.\"
-.\"			.getarg ddd \*[args]
-.\"
-.\"		sets string `ddd' to value `=', and `args' contains
-.\"		`aaa=xxx bbb eee'.
-.de t*getarg
-.  ds \\$1
-.  ds args
-.
-.  if (\\n[.$] < 2) \
-.    return
-.
-.  ds $1 \\$1\"
-.  shift
-.
-.  length * \\*[$1]
-.  while \\n[.$] \{\
-.    ds * "\\$1\"
-.    ds ** "\\$1\"
-.    length ** \\*[**]
-.    shift
-.    if (\\n[*] > \\n[**]) \{\
-.      as args " "\\*[**]"\"			value too short, repeat
-.      continue
-.    \}
-.    substring * 0 (\\n[*] - 1)
-.    \" The surrounding \? escapes emulate string comparison.
-.    ie !"\?\\*[$1]\?"\?\\*[*]\?" \{\
-.      as args " "\\*[**]"\"			key not found, repeat
-.      continue
-.    \}
-.    el \{\
-.      ie "\?\\*[**]\?"\?\\*[$1]\?" \
-.        ds \\*[$1] \\*[$1]\"			return key as string
-.      el \{\
-.        ie "\?\\*[**]\?"\?\\*[$1]=\?" \
-.          ds \\*[$1] =\"			return `='
-.        el \{\
-.          substring ** (\\n[*] + 1) -1
-.          ds * \\*[**]\"
-.          substring * 0 0
-.
-.          \" check whether value starts with quote
-.          if "\?\\*[*]\?"\?'\?" \{\
-.            substring ** 1 -1
-.            ds * \\*[**]\"
-.            substring * -1 -1
-.
-.            \" search final quote
-.            ie "\?\\*[*]\?"\?'\?" \
-.              substring ** 0 -2
-.            el \{\
-.              as \\*[$1] \\*[**] \"		not found, append argument
-.
-.              while 1 \{\
-.                ds ** \\$1\"			get next argument
-.                ds * \\$1\"
-.                shift
-.                substring * -1 -1
-.
-.                if "\?\\*[*]\?"\?'\?" \{\
-.                  substring ** 0 -2
-.                  break		\"	break if no final quote
-.                \}
-.
-.                as \\*[$1] \\*[**] \"		otherwise append and repeat
-.              \}
-.          \}\}
-.
-.          as \\*[$1] \\*[**]\"
-.        \}
-.
-.        as args " \\$@\"
-.    \}\}
-.
-.    return
-.  \}
-..
-.
-.
-.\"	Utility macro:	.index <string1> <string2>
-.\"
-.\"		Check whether <string2> is a substring of <string1> and
-.\"		return its position in number register `t*index', starting
-.\"		with 1.  If not found, return 0.  If <string2> is empty,
-.\"		set `t*index' to -999.
-.de t*index
-.  if "\\$2"" \{\
-.    nr t*index -999
-.    return
-.  \}
-.
-.  length ** \\$1
-.  length $2 \\$2
-.  nr * 0-1 1
-.
-.  while (\\n+[*] < \\n[**]) \{\
-.    ds * \\$1\"
-.    substring * \\n[*] (\\n[*] + \\n[$2] - 1)
-.    \" The surrounding \? escapes emulate string comparison.
-.    if "\?\\*[*]\?"\?\\$2\?" \
-.      break
-.  \}
-.
-.  ie (\\n[*] == \\n[**]) \
-.    nr t*index 0
-.  el \
-.    nr t*index (\\n[*] + 1)
-..
-.
-.
-.\"	******************************************************************
-.\"	********	non-accumulating space .t*SP [v]	**********
-.\"	**                                                              **
-.\"	**	nl vor erster Seite -1, oben auf Seite 0 resp. tH	**
-.\"	**	.k nach .sp oder .br 0,					**
-.\"	**		sonst Laenge der angefangenen Zeile		**
-.\"	**	Der Merker M# fuer vorangegangenes .t*SP wird in .HM am	**
-.\"	**	Seitenanfang zurueckgesetzt.				**
-.\"	**	ganz richtig ist .sp + .br = .br + .sp = .sp		**
-.\"	******************************************************************
-.de t*SP
-.  if (\\n[nl] < 0) \
-.    br			\"	start very first page
-.  nr * \\n[.p]		\"	save current page length
-.
-.  ie "\\$1"" \
-.    pl +1		\"	without arg increase page length by 1v
-.  el \
-.    pl +\\$1		\"	otherwise use \\$1
-.
-.  nr ** (\\n[.p] - \\n[*])	\" ** now holds arg for .t*SP in base units
-.  pl \\n[*]u		\"	restore page length
-.
-.  \" we do nothing at start of new page or column
-.  if ((\\n[nl] - \\n[tH]) & (\\n[nl] - \\n[<<]) : \\n[.k]) \{\
-.    ie ((\\n[.d] - \\n[M#]) : \\n[.k]) \{\
-.      sp \\n[**]u	\"	execute .sp
-.      nr S# \\n[**]	\"	store ** in S#
-.    \}
-.    el \{\
-.      if (\\n[**] - \\n[S#]) \{\
-.        sp (\\n[**]u - \\n[S#]u)\"	emit difference to previous .t*SP
-.        nr S# \\n[**]	\"	store ** in S#
-.    \}\}
-.
-.    nr M# \\n[.d]	\"	store vertical position .d in M#
-.  \}
-..
-.
-.
-.\"	******************************************************************
-.\"	**		Perform all arguments once			**
-.\"	**			P1 is nestable				**
-.\"	******************************************************************
-.de t*P1
-.  \" `while' command is about five times faster than recursion!
-.  while \\n[.$] \{\
-.    nop \\$1
-.    shift
-.  \}
-..
-.
-.
-.\"	******************************************************************
-.\"	**	Hilfsmakro zum Einstellen von Schriftgroesse und	**
-.\"	**	Zeilenabstand, bezogen auf Anfangswerte \n[t*s]		**
-.\"	**	und \n[t*v] sowie fuer Hyphenation:			**
-.\"	**		.pv s v hy# hart;  macht .br			**
-.\"	**	Bei 4. Argument setzen der Register s und v und hy.	**
-.\"	**	Fuer angefangene Zeile die vorgefundenen Einstellungen	**
-.\"	**								**
-.\"	**   Auxiliary macro to set internal registers for font size	**
-.\"	**   and line spacing, relative to initial values \n[t*s] and	**
-.\"	**   \n[t*v]. Optionally sets hyphenation. A fourth argument	**
-.\"	**   initializes internal registers to global default values.	**
-.\"	******************************************************************
-.de t*pv
-.  br
-.
-.  if \\n[.$] \
-.    ps (\\n[t*s]u * \\$1z / 1z)
-.
-.  ie (\\n[.$] - 1) \
-.    vs (\\n[t*v]u * \\$2p / 1p)
-.  el \{\
-.    vs (\\n[t*v]u * \\$1p / 1p)
-.    return
-.  \}
-.
-.  if !""\\$3" \
-.    hy \\$3
-.
-.  if !""\\$4" \{\
-.    nr t*v \\n[.v]
-.    nr t*s \\n[.ps]
-.    nr t*hy \\n[.hy]
-.  \}
-..
-.
-.
-.\"	******************************************************************
-.\"	**		Hilfsmakros pop/pops/popr (pop stackelement):	**
-.\"	**		pop or popr:	pop register			**
-.\"	**		pops:		pop string			**
-.\"	**		.pop[s|r] reg|string stackname			**
-.\"	**		    reg|string: name of reg/string to get the	**
-.\"	**			 popped element				**
-.\"	**		    stack: name of stack			**
-.\"	******************************************************************
-.de *pop
-.  ie "\\$1"pops" \
-.    ds \\$2 \\$4\"		pop first stackelement
-.  el \
-.    nr \\$2 \\$4
-.
-.  ds $3 \\$3\"			remember stackname
-.  shift 4		\"	shift four args
-.
-.  ds \\*[$3] "\\$@\"		fill stack with remaining elements
-..
-.
-.de pop
-.  *pop \\$0 \\$1 \\$2 \\*[\\$2]
-..
-.
-.als popr pop
-.als pops pop
-.
-.
-.\"	******************************************************************
-.\"	**		process diversion				**
-.\"	******************************************************************
-.de t*DI
-.  nr * \\n[.u]
-.  nf		\"	diversion is already formatted - output it unchanged
-.  \\$1		\"	output the diversion ...
-.  rm \\$1	\"	... and remove it
-.  if \\n[*] \
-.    fi		\"	reactivate formatting
-..
-.
-.\"	******************************************************************
-.\"	**		error checking at end				**
-.\"	******************************************************************
-.de t*EM
-.
-.  if !"\\*[t*kept]"" \{\
-.    tm1 "hdtbl: Not all tables have been printed.
-.    tm1 "       Add `.bp' at the end of your document.
-.  \}
-.  if !"\\*[t*held]"" \{\
-.    tm1 "hdtbl: There are held tables which haven't been printed.
-.    tm1 "       Add `.t*free' at the end of your document.
-.  \}
-.  if \\n[t*#] \
-.    tm hdtbl: Missing `.ETB' macro; last .TBL in \\*[t*FN] at line \\*[t*LN].
-..
-.
-.\" EOF
diff -Nuar groff-1.22.3.old/contrib/hdtbl/hdmisc.tmac-u groff-1.22.3/contrib/hdtbl/hdmisc.tmac-u
--- groff-1.22.3.old/contrib/hdtbl/hdmisc.tmac-u	1970-01-01 02:00:00.000000000 +0200
+++ groff-1.22.3/contrib/hdtbl/hdmisc.tmac-u	2015-04-23 20:57:03.000000000 +0300
@@ -0,0 +1,325 @@
+.\"	-*-	mode: nroff	-*-
+.ig
+
+hdmisc.tmac
+
+This file is part of groff, the GNU roff type-setting system.
+
+Copyright (C) 2005-2014  Free Software Foundation, Inc.
+written by Joachim Walsdorff <Joachim.Walsdorff@urz.uni-heidelberg.de>.
+
+groff is free software; you can redistribute it and/or modify it under
+the terms of the GNU General Public License as published by the Free
+Software Foundation, either version 3 of the License, or
+(at your option) any later version.
+
+groff is distributed in the hope that it will be useful, but WITHOUT
+ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or
+FITNESS FOR A PARTICULAR PURPOSE.  See the GNU General Public License
+for more details.
+
+You should have received a copy of the GNU General Public License
+along with this program. If not, see <http://www.gnu.org/licenses/>.
+
+..
+.
+.
+.\" %beginstrip%
+.
+.if d t*getarg \
+.  nx
+.
+.
+.\"	******************************************************************
+.\"	**	Some macros and default settings needed by hdtbl	**
+.\"	******************************************************************
+.
+.
+.\"	Utility macro:	.getarg <key> ...
+.\"
+.\"		Get macro argument.  This macro searches <key> in the
+.\"		remaining arguments and assigns its value to a string
+.\"		register named <key>.  The following syntax forms are
+.\"		recognized.
+.\"
+.\"			<key>=<val>	Assign <val> to string <key>.
+.\"					<val> must not contain spaces.
+.\"			<key>='<val>'	Assign <val> to string <key>.
+.\"					<val> can contain spaces.
+.\"			<key>=		Assign `=' to string <key>.
+.\"			<key>		Assign `key' to string <key>.
+.\"
+.\"		After return, the string `args' contains the remaining
+.\"		arguments.
+.\"
+.\"		Example: With the definition of string `foo' as
+.\"
+.\"			.ds foo aaa=xxx bbb ccc='yyy zzz' ddd= eee
+.\"
+.\"		a call to `getarg' with
+.\"
+.\"			.getarg ccc \*[foo]
+.\"
+.\"		sets string `ccc' to value `yyy zzz'.  The string `args'
+.\"		now contains `aaa=xxx bbb ddd= eee'.  An additional call
+.\"		like
+.\"
+.\"			.getarg ddd \*[args]
+.\"
+.\"		sets string `ddd' to value `=', and `args' contains
+.\"		`aaa=xxx bbb eee'.
+.de t*getarg
+.  ds \\$1
+.  ds args
+.
+.  if (\\n[.$] < 2) \
+.    return
+.
+.  ds $1 \\$1\"
+.  shift
+.
+.  length * \\*[$1]
+.  while \\n[.$] \{\
+.    ds * "\\$1\"
+.    ds ** "\\$1\"
+.    length ** \\*[**]
+.    shift
+.    if (\\n[*] > \\n[**]) \{\
+.      as args " "\\*[**]"\"			value too short, repeat
+.      continue
+.    \}
+.    substring * 0 (\\n[*] - 1)
+.    \" The surrounding \? escapes emulate string comparison.
+.    ie !"\?\\*[$1]\?"\?\\*[*]\?" \{\
+.      as args " "\\*[**]"\"			key not found, repeat
+.      continue
+.    \}
+.    el \{\
+.      ie "\?\\*[**]\?"\?\\*[$1]\?" \
+.        ds \\*[$1] \\*[$1]\"			return key as string
+.      el \{\
+.        ie "\?\\*[**]\?"\?\\*[$1]=\?" \
+.          ds \\*[$1] =\"			return `='
+.        el \{\
+.          substring ** (\\n[*] + 1) -1
+.          ds * \\*[**]\"
+.          substring * 0 0
+.
+.          \" check whether value starts with quote
+.          if "\?\\*[*]\?"\?'\?" \{\
+.            substring ** 1 -1
+.            ds * \\*[**]\"
+.            substring * -1 -1
+.
+.            \" search final quote
+.            ie "\?\\*[*]\?"\?'\?" \
+.              substring ** 0 -2
+.            el \{\
+.              as \\*[$1] \\*[**] \"		not found, append argument
+.
+.              while 1 \{\
+.                ds ** \\$1\"			get next argument
+.                ds * \\$1\"
+.                shift
+.                substring * -1 -1
+.
+.                if "\?\\*[*]\?"\?'\?" \{\
+.                  substring ** 0 -2
+.                  break		\"	break if no final quote
+.                \}
+.
+.                as \\*[$1] \\*[**] \"		otherwise append and repeat
+.              \}
+.          \}\}
+.
+.          as \\*[$1] \\*[**]\"
+.        \}
+.
+.        as args " \\$@\"
+.    \}\}
+.
+.    return
+.  \}
+..
+.
+.
+.\"	Utility macro:	.index <string1> <string2>
+.\"
+.\"		Check whether <string2> is a substring of <string1> and
+.\"		return its position in number register `t*index', starting
+.\"		with 1.  If not found, return 0.  If <string2> is empty,
+.\"		set `t*index' to -999.
+.de t*index
+.  if "\\$2"" \{\
+.    nr t*index -999
+.    return
+.  \}
+.
+.  length ** \\$1
+.  length $2 \\$2
+.  nr * 0-1 1
+.
+.  while (\\n+[*] < \\n[**]) \{\
+.    ds * \\$1\"
+.    substring * \\n[*] (\\n[*] + \\n[$2] - 1)
+.    \" The surrounding \? escapes emulate string comparison.
+.    if "\?\\*[*]\?"\?\\$2\?" \
+.      break
+.  \}
+.
+.  ie (\\n[*] == \\n[**]) \
+.    nr t*index 0
+.  el \
+.    nr t*index (\\n[*] + 1)
+..
+.
+.
+.\"	******************************************************************
+.\"	********	non-accumulating space .t*SP [v]	**********
+.\"	**                                                              **
+.\"	**	nl vor erster Seite -1, oben auf Seite 0 resp. tH	**
+.\"	**	.k nach .sp oder .br 0,					**
+.\"	**		sonst Laenge der angefangenen Zeile		**
+.\"	**	Der Merker M# fuer vorangegangenes .t*SP wird in .HM am	**
+.\"	**	Seitenanfang zurueckgesetzt.				**
+.\"	**	ganz richtig ist .sp + .br = .br + .sp = .sp		**
+.\"	******************************************************************
+.de t*SP
+.  if (\\n[nl] < 0) \
+.    br			\"	start very first page
+.  nr * \\n[.p]		\"	save current page length
+.
+.  ie "\\$1"" \
+.    pl +1		\"	without arg increase page length by 1v
+.  el \
+.    pl +\\$1		\"	otherwise use \\$1
+.
+.  nr ** (\\n[.p] - \\n[*])	\" ** now holds arg for .t*SP in base units
+.  pl \\n[*]u		\"	restore page length
+.
+.  \" we do nothing at start of new page or column
+.  if ((\\n[nl] - \\n[tH]) & (\\n[nl] - \\n[<<]) : \\n[.k]) \{\
+.    ie ((\\n[.d] - \\n[M#]) : \\n[.k]) \{\
+.      sp \\n[**]u	\"	execute .sp
+.      nr S# \\n[**]	\"	store ** in S#
+.    \}
+.    el \{\
+.      if (\\n[**] - \\n[S#]) \{\
+.        sp (\\n[**]u - \\n[S#]u)\"	emit difference to previous .t*SP
+.        nr S# \\n[**]	\"	store ** in S#
+.    \}\}
+.
+.    nr M# \\n[.d]	\"	store vertical position .d in M#
+.  \}
+..
+.
+.
+.\"	******************************************************************
+.\"	**		Perform all arguments once			**
+.\"	**			P1 is nestable				**
+.\"	******************************************************************
+.de t*P1
+.  \" `while' command is about five times faster than recursion!
+.  while \\n[.$] \{\
+.    nop \\$1
+.    shift
+.  \}
+..
+.
+.
+.\"	******************************************************************
+.\"	**	Hilfsmakro zum Einstellen von Schriftgroesse und	**
+.\"	**	Zeilenabstand, bezogen auf Anfangswerte \n[t*s]		**
+.\"	**	und \n[t*v] sowie fuer Hyphenation:			**
+.\"	**		.pv s v hy# hart;  macht .br			**
+.\"	**	Bei 4. Argument setzen der Register s und v und hy.	**
+.\"	**	Fuer angefangene Zeile die vorgefundenen Einstellungen	**
+.\"	**								**
+.\"	**   Auxiliary macro to set internal registers for font size	**
+.\"	**   and line spacing, relative to initial values \n[t*s] and	**
+.\"	**   \n[t*v]. Optionally sets hyphenation. A fourth argument	**
+.\"	**   initializes internal registers to global default values.	**
+.\"	******************************************************************
+.de t*pv
+.  br
+.
+.  if \\n[.$] \
+.    ps (\\n[t*s]u * \\$1z / 1z)
+.
+.  ie (\\n[.$] - 1) \
+.    vs (\\n[t*v]u * \\$2p / 1p)
+.  el \{\
+.    vs (\\n[t*v]u * \\$1p / 1p)
+.    return
+.  \}
+.
+.  if !""\\$3" \
+.    hy \\$3
+.
+.  if !""\\$4" \{\
+.    nr t*v \\n[.v]
+.    nr t*s \\n[.ps]
+.    nr t*hy \\n[.hy]
+.  \}
+..
+.
+.
+.\"	******************************************************************
+.\"	**		Hilfsmakros pop/pops/popr (pop stackelement):	**
+.\"	**		pop or popr:	pop register			**
+.\"	**		pops:		pop string			**
+.\"	**		.pop[s|r] reg|string stackname			**
+.\"	**		    reg|string: name of reg/string to get the	**
+.\"	**			 popped element				**
+.\"	**		    stack: name of stack			**
+.\"	******************************************************************
+.de *pop
+.  ie "\\$1"pops" \
+.    ds \\$2 \\$4\"		pop first stackelement
+.  el \
+.    nr \\$2 \\$4
+.
+.  ds $3 \\$3\"			remember stackname
+.  shift 4		\"	shift four args
+.
+.  ds \\*[$3] "\\$@\"		fill stack with remaining elements
+..
+.
+.de pop
+.  *pop \\$0 \\$1 \\$2 \\*[\\$2]
+..
+.
+.als popr pop
+.als pops pop
+.
+.
+.\"	******************************************************************
+.\"	**		process diversion				**
+.\"	******************************************************************
+.de t*DI
+.  nr * \\n[.u]
+.  nf		\"	diversion is already formatted - output it unchanged
+.  \\$1		\"	output the diversion ...
+.  rm \\$1	\"	... and remove it
+.  if \\n[*] \
+.    fi		\"	reactivate formatting
+..
+.
+.\"	******************************************************************
+.\"	**		error checking at end				**
+.\"	******************************************************************
+.de t*EM
+.
+.  if !"\\*[t*kept]"" \{\
+.    tm1 "hdtbl: Not all tables have been printed.
+.    tm1 "       Add `.bp' at the end of your document.
+.  \}
+.  if !"\\*[t*held]"" \{\
+.    tm1 "hdtbl: There are held tables which haven't been printed.
+.    tm1 "       Add `.t*free' at the end of your document.
+.  \}
+.  if \\n[t*#] \
+.    tm hdtbl: Missing `.ETB' macro; last .TBL in \\*[t*FN] at line \\*[t*LN].
+..
+.
+.\" EOF
diff -Nuar groff-1.22.3.old/contrib/hdtbl/hdtbl.am groff-1.22.3/contrib/hdtbl/hdtbl.am
--- groff-1.22.3.old/contrib/hdtbl/hdtbl.am	1970-01-01 02:00:00.000000000 +0200
+++ groff-1.22.3/contrib/hdtbl/hdtbl.am	2015-04-23 20:57:03.000000000 +0300
@@ -0,0 +1,126 @@
+# Copyright (C) 2006-2014 Free Software Foundation, Inc.
+#      Written by Werner Lemberg (wl@gnu.org)
+#      Automake migration by Bertrand Garrigues
+#
+# This file is part of groff.
+#
+# groff is free software; you can redistribute it and/or modify it under
+# the terms of the GNU General Public License as published by the Free
+# Software Foundation, either version 3 of the License, or
+# (at your option) any later version.
+#
+# groff is distributed in the hope that it will be useful, but WITHOUT ANY
+# WARRANTY; without even the implied warranty of MERCHANTABILITY or
+# FITNESS FOR A PARTICULAR PURPOSE.  See the GNU General Public License
+# for more details.
+#
+# You should have received a copy of the GNU General Public License
+# along with this program. If not, see <http://www.gnu.org/licenses/>.
+
+hdtbl_srcdir = $(top_srcdir)/contrib/hdtbl
+hdtbl_builddir = $(top_builddir)/contrib/hdtbl
+
+man7_MANS += contrib/hdtbl/groff_hdtbl.n
+
+# Groff command used to generate .ps files
+HDTBL_TFLAG = -M$(hdtbl_srcdir) -M$(hdtbl_builddir)
+HDTLB_PFLAG=-t -p -e -U
+HDTBLGROFF = \
+  GROFF_COMMAND_PREFIX= \
+  GROFF_BIN_PATH="$(GROFF_BIN_PATH)" \
+  $(GROFFBIN) $(FFLAG) $(TFLAG) $(HDTBL_TFLAG) $(HDTLB_PFLAG)
+
+# Files installed in $(tmacdir).
+# These files are generated with `strip.sed' from their unstripped source file 
+# equivalent (e.g. hdtbl.tmac is generated from hdtbl.tmac-u)
+HDTBLSTRIPFILES = \
+  contrib/hdtbl/hdtbl.tmac \
+  contrib/hdtbl/hdmisc.tmac
+hdtbltmacdir = $(tmacdir)
+hdtbltmac_DATA = $(HDTBLSTRIPFILES)
+
+# Files installed in $(exampledir)/hdtbl.  HDTBLEXAMPLEFILES are
+# located in the source tree, while HDTBLPROCESSEDEXAMPLEFILES are
+# generated in the build tree.
+
+# These files are handled by the `.in.roff' rule.
+HDTBLGENFILES = \
+  contrib/hdtbl/examples/fonts_n.roff \
+  contrib/hdtbl/examples/fonts_x.roff
+EXTRA_DIST += \
+  contrib/hdtbl/examples/fonts_n.in \
+  contrib/hdtbl/examples/fonts_x.in
+
+HDTBLEXAMPLEFILES = \
+  contrib/hdtbl/examples/common.roff \
+  contrib/hdtbl/examples/chess_board.roff \
+  contrib/hdtbl/examples/color_boxes.roff \
+  contrib/hdtbl/examples/color_nested_tables.roff \
+  contrib/hdtbl/examples/color_table_cells.roff \
+  contrib/hdtbl/examples/color_transitions.roff \
+  contrib/hdtbl/examples/col_rowspan_colors.roff \
+  contrib/hdtbl/examples/mixed_pickles.roff \
+  contrib/hdtbl/examples/rainbow.roff \
+  contrib/hdtbl/examples/short_reference.roff
+
+HDTBLPROCESSEDEXAMPLEFILES = \
+  contrib/hdtbl/examples/chess_board.ps \
+  contrib/hdtbl/examples/color_boxes.ps \
+  contrib/hdtbl/examples/color_nested_tables.ps \
+  contrib/hdtbl/examples/color_table_cells.ps \
+  contrib/hdtbl/examples/color_transitions.ps \
+  contrib/hdtbl/examples/col_rowspan_colors.ps \
+  contrib/hdtbl/examples/fonts_n.ps \
+  contrib/hdtbl/examples/fonts_x.ps \
+  contrib/hdtbl/examples/mixed_pickles.ps \
+  contrib/hdtbl/examples/rainbow.ps \
+  contrib/hdtbl/examples/short_reference.ps
+
+hdtblexampledir = $(exampledir)/hdtbl
+
+if BUILD_EXAMPLES
+dist_hdtblexample_DATA = $(HDTBLEXAMPLEFILES)
+nodist_hdtblexample_DATA = \
+  $(HDTBLGENFILES) \
+  $(HDTBLPROCESSEDEXAMPLEFILES) \
+  gnu.eps
+else
+EXTRA_DIST += $(HDTBLEXAMPLEFILES) 
+endif
+$(hdtblexample_DATA): $(HDTBLSTRIPFILES)
+
+MOSTLYCLEANFILES += $(HDTBLGENFILES) $(HDTBLPROCESSEDEXAMPLEFILES) \
+  hdmisc.tmac-s hdtbl.tmac-s $(HDTBLSTRIPFILES)
+
+EXTRA_DIST += \
+  contrib/hdtbl/ChangeLog \
+  contrib/hdtbl/TODO \
+  contrib/hdtbl/groff_hdtbl.man \
+  contrib/hdtbl/hdtbl.tmac-u \
+  contrib/hdtbl/hdmisc.tmac-u
+
+# Rule to generate ps and roff files
+SUFFIXES += .roff .in .ps
+
+.roff.ps:
+	@$(MKDIR_P) `dirname $@`
+	$(HDTBLGROFF) -Tps -dfontpath=$(top_srcdir)/font -dsopath=$(hdtbl_srcdir)/ \
+	         -mhdtbl $< >$@
+.in.roff:
+	@$(MKDIR_P) `dirname $@`
+	sed -e "s|[@]fontdir[@]|$(fontdir)|" \
+	    -e "s|[@]EGREP[@]|$(EGREP)|" $< >$@
+
+
+$(HDTBLPROCESSEDEXAMPLEFILES): gnu.eps groff troff pic tbl \
+  contrib/hdtbl/examples/common.roff
+
+$(HDTBLSTRIPFILES): $(top_srcdir)/tmac/strip.sed
+	@$(MKDIR_P) `dirname $@`
+	sed -f $(top_srcdir)/tmac/strip.sed $(hdtbl_srcdir)/`basename $@`-u > $@;
+
+uninstall_groffdirs: uninstall-hdtbl-hook
+uninstall-hdtbl-hook:
+	if test -d $(DESTDIR)$(hdtblexampledir); then \
+	  rmdir $(DESTDIR)$(hdtblexampledir); \
+	fi
diff -Nuar groff-1.22.3.old/contrib/hdtbl/hdtbl.tmac groff-1.22.3/contrib/hdtbl/hdtbl.tmac
--- groff-1.22.3.old/contrib/hdtbl/hdtbl.tmac	2014-11-04 10:38:35.483520772 +0200
+++ groff-1.22.3/contrib/hdtbl/hdtbl.tmac	1970-01-01 02:00:00.000000000 +0200
@@ -1,1003 +0,0 @@
-.\"	-*- nroff -*-
-.ig
-
-hdtbl.tmac
-
-This file is part of groff, the GNU roff type-setting system.
-
-Copyright (C) 2005-2014  Free Software Foundation, Inc.
-written by Joachim Walsdorff <Joachim.Walsdorff@urz.uni-heidelberg.de>.
-
-groff is free software; you can redistribute it and/or modify it under
-the terms of the GNU General Public License as published by the Free
-Software Foundation, either version 3 of the License, or
-(at your option) any later version.
-
-groff is distributed in the hope that it will be useful, but WITHOUT
-ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or
-FITNESS FOR A PARTICULAR PURPOSE.  See the GNU General Public License
-for more details.
-
-You should have received a copy of the GNU General Public License
-along with this program. If not, see <http://www.gnu.org/licenses/>.
-
-..
-.
-.
-.\"	*****************************************************************
-.\"	*		hdtbl - Heidelberger table macros		*
-.\"	*			Vers. 0.91 December 2005		*
-.\"	*****************************************************************
-.
-.if d TBL \
-.  nx
-.
-.mso hdmisc.tmac
-.mso 62bit.tmac
-.
-.
-.\"	*****************************************************************
-.\"	*		default values for some arguments		*
-.\"	*****************************************************************
-.
-.ds t*hl s\"
-.ds t*vl s\"
-.ds t*tal l\"
-.ds t*hal b\"
-.ds t*val t\"
-.ds t*ff \\n[.fam]\"
-.ds t*fst \\n[.f]\"
-.ds t*fsz 1 1\"
-.ds t*fgc red4\"
-.ds t*bgc bisque\"
-.ds t*bc red4\"
-.nr t*cpd .5n
-.nr t*csp .5n
-.nr t*b .1n
-.nr t*cols 1
-.nr t*v \n[.v]
-.nr t*s \n[.ps]
-.nr t*hy \n[.hy]
-.nr t*l \n[.ll]
-.
-.
-.\"			defaults for table captions
-.nr t*cptn 0 1
-.ds t*cptn "".sp .4" \
-            ".t*pv 1.0 1.0" \
-            ".ad l" \
-            "\m[\\*[t*fgc]]Table \\n+[t*cptn]:\0\c\k*"\"
-.
-.
-.\" %beginstrip%
-.
-.\" for better error messages
-.ds nth-1 st\"
-.ds nth-2 nd\"
-.ds nth-3 rd\"
-.
-.\" initialization of various registers
-.nr t*# 0	\"	table nesting level
-.nr t*numb 0 1	\"	held table diversion #
-.
-.ds *#trc*
-.
-.
-.\"	*****************************************************************
-.\"	*	The four base macros and the two optional macros	*
-.\"	*****************************************************************
-.
-.ie n \
-.  ds g tty:\"
-.el \
-.  ds g ps: exec\"
-.
-.\"	TBL:	table start
-.\"		predecessor: 	text, TD or ETB
-.\"		successor:	CPTN or TR
-.de TBL
-.  ds t*m\\n[t*#] \\n[.m]\"
-.  ie \\n[t*#] \
-.    br
-.  el \{\
-.    ds * \\n[.ev]\"
-.    ev t*tbl
-.    evc \\*[*]
-.    di t*tbl0
-.    sp .4				\" XXX: hard-coded value
-.    nr t*i \\n[.i]
-.    ll -\\n[.i]u
-.    in 0
-.  \}
-.  nr t*# +1
-.
-.  \" Save current location for error checking at end
-.  ds t*FN \\[.F]
-.  ds t*LN \\[.c]
-.
-.  t*getarg cols \\$@\"	from here string `args' contains the rest of \\$@
-.  ie "\\*[cols]"" \
-.    nr t*cols\\n[t*#] \\n[t*cols]
-.  el \{\
-.    ie \B\\*[cols] \
-.      nr t*cols\\n[t*#] \\*[cols]
-.    el \
-.      tm \\n[.F]:\\n[.c]: Invalid number of columns value `\\*[cols]'.
-.  \}
-.
-.  t*getarg cpd \\*[args]                 \"	cell padding
-.  ie "\\*[cpd]"" \
-.    nr t*cpd\\n[t*#] \\n[t*cpd]
-.  el \{\
-.    ie \B\\*[cpd] \
-.      nr t*cpd\\n[t*#] \\*[cpd]
-.    el \
-.      tm \\n[.F]:\\n[.c]: Invalid cell padding value `\\*[cpd]'.
-.  \}
-.
-.  t*getarg csp \\*[args]                 \"	cell spacing
-.  ie "\\*[csp]"" \
-.    nr t*csp\\n[t*#] \\n[t*csp]
-.  el \{\
-.    ie \B\\*[csp] \
-.      nr t*csp\\n[t*#] \\*[csp]
-.    el \
-.      tm \\n[.F]:\\n[.c]: Invalid cell spacing value `\\*[csp]'.
-.  \}
-.
-.  t*getarg border \\*[args]              \"	border thickness
-.  ie "\\*[border]"=" \
-.    nr t*b\\n[t*#] 0-1
-.  el \{\
-.    ie "\\*[border]"" \
-.      nr t*b\\n[t*#] \\n[t*b]
-.    el \{\
-.      ie \B\\*[border] \
-.        nr t*b\\n[t*#] \\*[border]
-.      el \
-.        tm \\n[.F]:\\n[.c]: Invalid border thickness value `\\*[border]'.
-.  \}\}
-.
-.  t*getarg bc \\*[args]                  \"	border color
-.  ds t*bc\\n[t*#] \\*[t*bc]\"
-.  if !"\\*[bc]"" \{\
-.    ie m\\*[bc] \
-.      ds t*bc\\n[t*#] \\*[bc]\"
-.    el \{\
-.      ie "\\*[bc]"=" \
-.        ds t*bc\\n[t*#] =\"
-.      el \
-.        tm \\n[.F]:\\n[.c]: Invalid border color `\\*[bc]'.
-.  \}\}
-.  ie "\\*[bc]"=" \
-.    ds t*bc\\n[t*#]
-.  el \{\
-.    ie "\\*[bc]"" \
-.      ds t*bc\\n[t*#] \\*[t*bc]\"
-.    el \
-.      ds t*bc\\n[t*#] \\*[bc]\"
-.  \}
-.
-.  t*getarg width \\*[args]               \"	table/col widths
-.  if "\\*[width]"=" \
-.    ds width
-.
-.  nr b/2\\n[t*#] (\\n[t*b\\n[t*#]] / 2)\"	shortcut
-.  nr cscp\\n[t*#] (\\n[t*csp\\n[t*#]] + \\n[t*cpd\\n[t*#]])\"  aux. register
-.
-.  t*getarg height \\*[args]              \"	table outline height
-.  ie "\\*[height]"" \
-.    nr t*height\\n[t*#] 0
-.  el \{\
-.    ie \B\\*[height] \
-.      nr t*height\\n[t*#] (\\*[height] \
-                            - ((2 * \\n[cscp\\n[t*#]]) \
-                                + (3 * \\n[b/2\\n[t*#]])))
-.    el \
-.      tm \\n[.F]:\\n[.c]: Invalid height value `\\*[height]'.
-.  \}
-.
-.  t*cl \\*[width]                      \"	get cell widths and offsets
-.  t*args \\n[t*#]                      \"	look for common arguments
-.
-.  t*getarg tal \\*[args]                 \"	table horizontal alignment
-.  if "\\*[tal]"" \
-.    ds tal \\*[t*tal]\"
-.  ie "\\*[tal]"l" \
-.    nr in\\n[t*#] \\n[.i]
-.  el \{\
-.    ie "\\*[tal]"c" \
-.      nr in\\n[t*#] (\\n[.l] - \\n[ll\\n[t*#]]/2 + \\n[.i])
-.    el \{\
-.      ie "\\*[tal]"r" \
-.        nr in\\n[t*#] (\\n[.l] - \\n[ll\\n[t*#]] + \\n[.i])
-.      el \{\
-.        tmc \\n[.F]:\\n[.c]: Invalid horizontal table alignment `\\*[tal]':
-.        tm1 " must be `l', `c' or `r'.
-.  \}\}\}
-.
-.  nr t*r#\\n[t*#] 0		        \"	initialize row index
-.  mk toptbl\\n[t*#]
-.
-.  t*P1 \\*[args]
-..
-.
-.
-.\"	CPTN:	optional table caption
-.\"		predecessor:	TBL
-.\"		successor:	TR
-.de CPTN
-.  ft 1
-.
-.  if "\\$0"CPTN" \
-.    if \\n[t*r#\\n[t*#]] \{\
-.      tmc \\n[.F]:\\n[.c]: Invalid placement of `.CPTN';
-.      tm1 " must be called immediately after `.TBL'.
-.      return
-.    \}
-.
-.  t*getarg val \\$@
-.  ds args\\n[t*#] "\\*[args]\"
-.
-.  t*index "\\*[args]" .TR
-.  ie \\n[t*index] \{\
-.    ds *a\\n[t*#] "\\*[args]\"
-.    substring args\\n[t*#] 0 \\n[t*index]
-.    substring *a\\n[t*#] \\n[t*index]-2 -1
-.  \}
-.  el \
-.    ds *a\\n[t*#]
-.
-.  ie "\\*[val]"b" \{\
-.    de t*cptn\\n[t*#]
-.      *CPTN \\*[args\\n[t*#]]
-.      rm t*cptn\\n[t*#]
-\\..
-.  \}
-.  el \{\
-.    ll (\\n[ll\\n[t*#]]u + \\n[in\\n[t*#]]u)
-.    in \\n[in\\n[t*#]]u
-.    t*P1 \\*[t*cptn]
-'    in +\\n[*]u
-.    t*P1 \\*[args\\n[t*#]]
-.    t*pv 1 1
-.    in
-.    mk toptbl\\n[t*#]
-.  \}
-.
-.  t*P1 \\*[*a\\n[t*#]]
-..
-.
-.als *CPTN CPTN
-.
-.
-.\"	TR:	table row
-.\"		predecessor:	TBL, CPTN, text, TD or ETB
-.\"		successor:	TD
-.de TR
-.  ft 1
-.  if !\\n[t*#] \{\
-.    tm \\n[.F]:\\n[.c]: Table row (.TR) without preceding table start (.TBL).
-.    return
-.  \}
-.
-.  \" finish previous data cell, if any
-.  if \\n[t*r#\\n[t*#]] \
-.    t*dntr 1 \\n[c#\\*[#t#r]] \\n[t*cols\\n[t*#]] \\*[*#trc*]
-.
-.  nr t*r#\\n[t*#] +1			\"	row number in this table
-.  ds #t#r \\n[t*#]*\\n[t*r#\\n[t*#]]\"		table row identifier
-.					\"	(<level>*<row>)
-.  nr c#\\*[#t#r] 0 1			\"	clear cell counter
-.  nr dntr\\*[#t#r] 0 1			\"	clear accumulated row height
-.
-.  t*getarg height \\$@
-.  ie "\\*[height]"" \
-.    nr t*height\\*[#t#r] 0
-.  el \{\
-.    ie \B\\*[height] \
-.      nr t*height\\*[#t#r] \\*[height]
-.    el \
-.      tm \\n[.F]:\\n[.c]: Invalid table row height `\\*[height]'.
-.  \}
-.
-.  \"	If there is a TR with height `height', the total height of the table
-.  \"	is too high by 3/2 b, independent of the number of TR with `height'.
-.  t*args \\*[#t#r] \\n[t*#]            \"	look for common arguments
-.
-.  t*P1 \\*[args]
-..
-.
-.
-.\"	TH:	optional table header cell
-.\"		predecessor:	text, TD or TR
-.\"		successor:	text, TD, TR, TBL or ETB
-.\"								
-.\"		cell content bolded and horizontally and vertically centered,
-.\"		else like .TD
-.de TH
-.  ft 1
-.  t*getarg hal \\$@
-.  if "\\*[hal]"" \
-.    ds hal c\"
-.
-.  t*getarg val \\*[args]
-.  if "\\*[val]"" \
-.    ds val m\"
-.
-.  t*getarg fst \\*[args]
-.  if "\\*[fst]"" \
-.    ds fst B\"
-.
-.  TD hal=\\*[hal] val=\\*[val] fst=\\*[fst] \\*[args]
-..
-.
-.
-.\"	TD:	table data cell
-.\"		predecessor:	text, TD or TR
-.\"		successor:	text, TD, TR, TBL or ETB
-.de TD
-.  ft 1
-.  \" finish previous data cell -- note the use of \E
-.  t*dntr 0 \\n[c#\\*[#t#r]]-1 \En[c#\\*[#t#r]] \\*[*#trc*]
-.
-.  ds *#trc* \\*[#t#r]*\\n[c#\\*[#t#r]]\"	table cell identifier
-.					\"	(<level>*<row>*<column>)
-.
-.  t*getarg rowspan \\$@
-.  nr rowspan 1
-.  if !"\\*[rowspan]"" \{\
-.    ie \B\\*[rowspan] \{\
-.      nr rowspan (\\*[rowspan] >? 1)
-.      nr *rsp*\\*[*#trc*] (\\n[rowspan] - 1)
-.    \}
-.    el \
-.      tm \\n[.F]:\\n[.c]: Invalid value of `rowspan' keyword.
-.  \}
-.
-.  t*getarg colspan \\*[args]
-.  nr colspan 1
-.  if !"\\*[colspan]"" \{\
-.    ie \B\\*[colspan] \
-.      nr colspan (\\*[colspan] >? 1)
-.    el \
-.      tm \\n[.F]:\\n[.c]: Invalid value of `colspan' keyword.
-.  \}
-.
-.  t*args \\*[#trc] \\*[#t#r]           \"  look for common arguments
-.
-.  nr in\\*[#trc] \\n[in\\n[t*#]*\\n[c#\\*[#t#r]]]
-.  nr *cl \\n[cll\\n[t*#]*\\n[c#\\*[#t#r]]]
-.  nr * 0 1
-.  nr *r \\n[t*r#\\n[t*#]]
-.
-.  if (\\n[rowspan] - 1) \
-.    while (\\n+[*] <= \\n[rowspan]) \{\
-.      nr rspan\\n[t*#]*\\n[*r]*\\n[c#\\*[#t#r]] \\n[colspan]
-.      if (\\n[*] > 1) \
-.        nr cspan\\n[t*#]*\\n[*r]*\\n[c#\\*[#t#r]] \\n[colspan]
-.      nr *r +1
-.    \}
-.
-.  nr * 1 1
-.  nr *c \\n[c#\\*[#t#r]]
-.
-.  if (\\n[colspan] - 1) \{\
-.    nr vline\\*[*#trc*] 0-1		\"	set `no vl' flag
-.
-.    while (\\n+[*] <= \\n[colspan]) \{\
-.      nr *c +1
-.      nr *cl +(2 * \\n[cscp\\n[t*#]] \
-                + \\n[b/2\\n[t*#]] \
-                + \\n[cll\\n[t*#]*\\n[*c]])
-.      nr c#\\*[#t#r] +1
-.    \}
-.  \}
-.
-.  if (\\n[c#\\n[t*#]*\\n[t*r#\\n[t*#]]] > \\n[t*cols\\n[t*#]]) \{\
-.    ds * are\"
-.    ds ** columns\"
-.    if (\\n[c#\\*[#t#r]] == 1) \{\
-.      ds * is\"
-.      ds ** column\"
-.    \}
-.    tmc \\n[.F]:\\n[.c]: There \\*[*] \\n[c#\\*[#t#r]] table \\*[**] (.TD)
-.
-.    ds * are\"
-.    if (\\n[t*cols\\n[t*#]] == 1) \
-.      ds * is\"
-.    tm1 " but only \\n[t*cols\\n[t*#]] \\*[*] expected.
-.
-.    ds *
-.    length * \\n[.F]:\\n[.c]:
-.
-.    while \\n-[*] \
-.      ds * " \\*[*]\"
-.
-.    tm1 "\\*[*] Remaining .TDs and its contents are ignored.
-.
-.    di *t*dummy*                \"	bypass superfluous input
-.    return
-.  \}
-.
-.  di t*\\*[#trc]                \"	open cell diversion and set locals
-.  in 0
-.  nr cll\\*[#trc] \\n[*cl]
-.  ll \\n[*cl]u
-.  nr *cl\\n[t*#] \\n[.l]
-.  gcolor \\*[t*fgc\\*[#trc]]
-.  ad \\*[t*hal\\*[#trc]]
-.  fam \\*[t*ff\\*[#trc]]
-.  ft \\*[t*fst\\*[#trc]]
-.  t*pv \\*[t*fsz\\*[#trc]]
-.
-.  t*P1 \\*[args]
-..
-.
-.
-.\"	ETB:	end of table
-.\"		predecessor:	text, TD or ETB
-.\"		successor:	text, TD, TR or TBL
-.de ETB
-.  ie \\n[t*#] \
-.    if !\\n[t*r#\\n[t*#]] \{\
-.      tmc \\n[.F]:\\n[.c]: Each table (.TBL)
-.      tm1 " should contain at least one table row (.TR)!
-.    \}
-.  el \{\
-.    tmc \\n[.F]:\\n[.c]: Table end (.ETB)
-.    tm1 " without corresponding table start (.TBL)!
-.  \}
-.
-.  ds #t#r \\n[t*#]*\\n[t*r#\\n[t*#]]\"		refresh table row identifier
-.  t*dntr 2 \\n[c#\\*[#t#r]] \\n[t*cols\\n[t*#]] \\*[*#trc*]
-.
-.  t*divs                        \"	print this table
-.
-.  sp \\n[b/2\\n[t*#]]u
-.  t*cptn\\n[t*#]
-.  nr t*# -1
-.
-.  ll \\n[*cl\\n[t*#]]u          \"	restore ll outside this table
-.  in 0                          \"	reset indent
-.  gcolor \\*[t*m\\n[t*#]]       \"	reset previous fgc
-.
-.  t*getarg hold \\$@
-.  if !\\n[t*#] \{\
-.    sp .5
-.    di
-.    in \\n[t*i]u
-.    ie "\\*[hold]"" \{\
-.      ie (\\n[.t] - \\n[dn]) \
-.        t*DI t*tbl0
-.      el \{\
-.        rn t*tbl0 t*tbl\\n+[t*numb]
-.        ds t*kept \\*[t*kept] t*tbl\\n[t*numb] \\n[dn]\"
-.      \}
-.    \}
-.    el \{\
-.      rn t*tbl0 t*hold\\n+[t*numb]
-.      tm \\n[.F]:\\n[.c]: Table t*hold\\n[t*numb] held.
-.      ds t*held \\*[t*held] t*hold\\n[t*numb] \\n[dn]\"
-.    \}
-.
-.    ev				\"	restore previous environment
-.  \}
-.
-.  t*P1 \\*[args]
-..
-.
-.
-.\"	*****************************************************************
-.\"	*	Following the definition of five utility macros		*
-.\"	*	special to hdtbl.					*
-.\"	*	Other utility macros common to hdtbl and hdgroff	*
-.\"	*	are defined in the file hdmisc.tmac.			*
-.\"	*****************************************************************
-.
-.
-.\"	.t*free [n]
-.\"		print the next [n] held table[s].
-.\"             Don't call it within a table!
-.\"		If the table is higher than the remaining space
-.\"		on the page, the table is printed on the next page.
-.de t*free
-.  if "\\$0"CPTN" \
-.    if \\n[t*r#\\n[t*#]] \{\
-.      tmc \\n[.F]:\\n[.c]: Invalid placement of `.t*free' within a table;
-.      tm1 " it must be called outside of any table.
-.      return
-.    \}
-.
-.  if "\\*[t*held]"" \{\
-.    tm \\n[.F]:\\n[.c]: No held tables.
-.    return
-.  \}
-.
-.  nr ** (\\$1 >? 1) 1
-.  while !""\\*[t*held]" \{\
-.    pops * t*held
-.    popr * t*held
-.
-.    ie (\\n[.t] - \\n[*]) \{\
-.      ev t*tbl
-.      t*DI \\*[*]
-.      ev
-.    \}
-.    el \{\
-.      rn \\*[*] t*tbl\\n+[t*numb]
-.      ds t*kept \\*[t*kept] t*tbl\\n[t*numb] \\n[*]\"
-.    \}
-.
-.    if !(\\n-[**] - 1) \
-.      return
-.  \}
-..
-.
-.
-.\"	The main utility macro for tables:
-.\"		If a table is closed by ETB, this macro is called.  It
-.\"		processes one complete table, i.e., all the table cell
-.\"		diversions, paints the cell backgrounds, draws
-.\"		horizontal and vertical table lines and the table border.
-.\"
-.\"		Nested tables are processed from inside to outside.
-.
-.de t*divs
-.  ll (\\n[t*l]u + 1c)			\"	avoid warning `can't break line'
-.  nf
-.
-.  nr b/2 \\n[b/2\\n[t*#]]		\"	some abbreviations
-.  nr cscp \\n[cscp\\n[t*#]]
-.  nr cscpb (\\n[b/2] + \\n[cscp])
-.
-.  nr topdiv (\\n[.d] + \\n[b/2] - \\n[cscp])\"	top of cell diversion
-.  nr cscpb2 (\\n[b/2] / 2 + \\n[cscp])
-.
-.  nr #r 0 1
-.  \" outer loop for rows
-.  while (\\n+[#r] <= \\n[t*r#\\n[t*#]]) \{\
-.    \" TODO: insert code here for multipage tables
-.    nr * (\\n[#r] - 1)
-.    nr topdiv +(\\n[dntr\\n[t*#]*\\n[*]] + \\n[cscp] + \\n[cscpb])
-.
-.    \" if table still smaller than specified table height, increase it
-.    if ((\\n[#r] == \\n[t*r#\\n[t*#]]) & \\n[t*height\\n[t*#]]) \
-.      nr dntr\\n[t*#]*\\n[#r] (\\n[cscpb] \
-                                + \\n[toptbl\\n[t*#]] \
-                                + \\n[t*height\\n[t*#]] \
-                                - (\\n[topdiv] >? \\n[dntr\\n[t*#]*\\n[#r]]))
-.
-.    nr #c 0 1
-.    \" inner loop for cells
-.    while (\\n+[#c] <= \\n[t*cols\\n[t*#]]) \{\
-.      ds #trc \\n[t*#]*\\n[#r]*\\n[#c]\"
-.      \" continue if the diversion is empty
-.      if !d t*\\*[#trc] \
-.        continue
-.
-.      sp |\\n[topdiv]u
-.      in (\\n[in\\n[t*#]]u + \\n[in\\*[#trc]]u)\"	cell offset
-.      nr $1 \\n[dntr\\n[t*#]*\\n[#r]]	\"	cell height
-.
-.      \" if we have spanned rows, calculate resulting row height
-.      \" and position of lower horizontal line
-.      if \\n[*rsp*\\*[#trc]] \{\
-.        nr * \\n[#r] 1
-.        nr rspan\\*[#trc] 0-1		\"	set `no hl' flag
-.        nr corr (\\n[dn\\*[#trc]] - \\n[dntr\\n[t*#]*\\n[#r]])
-.
-.        \" clear row span flags in following rows and update row height
-.        while \\n[*rsp*\\*[#trc]] \{\
-.          nr *rsp*\\*[#trc] -1
-.          nr rspan\\n[t*#]*\\n+[*]*\\n[#c] 0
-.          nr ** (\\n[dntr\\n[t*#]*\\n[*]] + \\n[cscp] + \\n[cscpb])
-.          nr corr -\\n[**]
-.          nr $1 +\\n[**]
-.        \}
-.
-.        if (\\n-[*] == \\n[t*r#\\n[t*#]]) \
-.          nr $1 ((\\n[t*height\\n[t*#]] \
-                   - \\n[.d] \
-                   + \\n[toptbl\\n[t*#]] \
-                   + \\n[cscpb]) \
-                     >? \\n[$1])
-.        nr dntr\\n[t*#]*\\n[*] +(\\n[corr] >? 0)
-.      \}
-.
-.      \" paint cell background
-.      nr * (2 * \\n[t*cpd\\n[t*#]] + \\n[cll\\*[#trc]])\"	background width
-.      nr $1 (\\n[$1] >? \\n[dn\\*[#trc]])\"	cell height
-.
-.      if !"\\*[t*bgc\\*[#trc]]"=" \{\
-.        nop \h'\\n[t*csp\\n[t*#]]u'\
-\M[\\*[t*bgc\\*[#trc]]]\
-\v'(-.67v - \\n[t*cpd\\n[t*#]]u)'\
-\D'P \\n[*]u 0 \
-     0 (2u * \\n[t*cpd\\n[t*#]]u + \\n[$1]u) \
-     -\\n[*]u 0'\
-\M[]
-.        sp -1
-.      \}
-.
-.      \" ***   horizontal and vertical single or double lines   ***
-.      \" double and single lines have the same thickness;
-.      \" the double lines' distance is the line thickness.
-.      \"
-.      \" `border=x': horizontal/vertical lines x/2 thick, minimum .1n
-.      \" `border=0': no border; horizontal/vertical lines .1n thick
-.      \" `border=': neither border nor horizontal/vertical lines
-.
-.      nr *t (.1n >? \\n[b/2])		\"	thickness of hl/vl; min. .1n
-.      in +\\n[cscp]u
-.
-.      \" check for vertical and horizontal lines
-.      if (1 + \\n[t*b\\n[t*#]]) \{\
-.        if !"\\*[t*bc\\n[t*#]]"=" \{\
-.          \" draw horizontal line between this cell and the one below
-.          if (\\n[t*r#\\n[t*#]] - \\n[#r] + \\n[rspan\\*[#trc]]) \{\
-.            if !"\\*[t*hl\\*[#trc]]"=" \{\
-.              sp \\n[$1]u
-.              nr * (\\n[cscp] + \\n[cscpb] + \\n[cll\\*[#trc]])
-.              nop \X'\*[g] 1 setlinecap'\
-\h'(-\\n[cscpb2]u - \\n[*t]u)'\
-\v'(\\n[cscpb2]u - .67v)'\
-\m[\\*[t*bc\\n[t*#]]]\
-\D't \\n[*t]u'\c
-.
-.              ie "\\*[t*hl\\*[#trc]]"d" \
-.                nop \v'-\\n[*t]u'\
-\D'l \\n[*]u 0'\
-\v'(2u * \\n[*t]u)'\
-\D'l -\\n[*]u 0'\
-\D't 0'
-.              el \
-.                nop \D'l \\n[*]u 0'\
-\D't 0'
-.
-.              sp (-\\n[$1]u - 1v)
-.          \}\}
-.
-.          nr rspan\\*[#trc] 0
-.
-.          \" draw vertical line between this cell and the one to the right
-.          if (\\n[t*cols\\n[t*#]] - \\n[#c] + \\n[vline\\*[#trc]]) \{\
-.            if !"\\*[t*vl\\*[#trc]]"=" \{\
-.              nop \X'\*[g] 1 setlinecap'\
-\v'(-\\n[cscpb2]u - .67v)'\
-\m[\\*[t*bc\\n[t*#]]]\
-\h'(\\n[cscpb2]u - \\n[*t]u + \\n[cll\\*[#trc]]u)'\c
-.
-.              ie "\\*[t*vl\\*[#trc]]"d" \
-.                nop \h'-\\n[*t]u'\
-\D't \\n[*t]u'\
-\D'l 0 (2u * \\n[cscp]u + \\n[$1]u + (\\n[*t]u / 2u))'\
-\h'(2u * \\n[*t]u)'\
-\D'l 0 -(2u * \\n[cscp]u + \\n[$1]u + (\\n[*t]u / 2u))'\
-\D't 0'
-.              el \
-.                nop \D't \\n[*t]u'\
-\D'l 0 (2u * \\n[cscp]u + \\n[$1]u + (\\n[*t]u / 2u))'\
-\D't 0'
-.              sp -1
-.      \}\}\}\}
-.
-.      nr vline\\*[#trc] 0
-.
-.      \" vert. cell content alignment
-.      nr ** 0
-.
-.      ie "\\*[t*val\\*[#trc]]"m" \
-.        nr ** ((\\n[$1] - \\n[dn\\*[#trc]]) / 2)\"	val=m
-.      el \
-.        if "\\*[t*val\\*[#trc]]"b" \
-.          nr ** (\\n[$1] - \\n[dn\\*[#trc]])\"	val=b
-.
-.      sp \\n[**]u			\"	vertical content position
-.
-.      \" finally output the diversion
-.      t*\\*[#trc]
-.      rm t*\\*[#trc]
-.    \}
-.  \}
-.
-.  \" draw the box border
-.  in \\n[in\\n[t*#]]u
-.  nr ** (\\n[topdiv] + \\n[dntr\\n[t*#]*\\n-[#r]])
-.
-.  if \\n[t*b\\n[t*#]] \{\
-.    sp |(\\n[toptbl\\n[t*#]]u + \\n[b/2]u)
-.    nr $1 (\\n[toptbl\\n[t*#]] - \\n[**] - \\n[cscp])
-.    nr * (\\n[ll\\n[t*#]] - \\n[t*b\\n[t*#]])
-.
-.    if !"\\*[t*bc\\n[t*#]]"=" \
-.      nop \X'\*[g] 0 setlinejoin 2 setlinecap'\
-\v'-.67v'\
-\h'-\\n[b/2]u'\
-\m[\\*[t*bc\\n[t*#]]]\
-\D't \\n[t*b\\n[t*#]]u'\
-\D'l \\n[*]u 0'\
-\D'l 0 -\\n[$1]u'\
-\D'l -\\n[*]u 0'\
-\D'l 0 \\n[$1]u'\
-\D't 0'
-.  \}
-.
-.  sp |(\\n[**]u + \\n[cscpb]u)
-.  fi
-..
-.
-.
-.\"	Utility macro:	.t*cl [width1 [width2 [...]]]
-.\"
-.\"		Calculate cell widths, table width, and cell offsets.
-.de t*cl
-.  nr t*cols\\n[t*#] (\\n[.$] >? \\n[t*cols\\n[t*#]])
-.  nr ll\\n[t*#] 0			\"	accumulated cell widths
-.  nr ** (\\n[.l] / \\n[t*cols\\n[t*#]])\"	width for remaining cells
-.  nr * 0 1				\"	counter
-.
-.  \" while-loop: Parse user arguments to get each cell's width.
-.  while (\\n[t*cols\\n[t*#]] >= \\n+[*]) \{\
-.    nr $\\n[*] \\n[**]
-.    if !"\\$[\\n[*]]"" \{\
-.      \" check for `%' pseudo scaling indicator
-.      ds * \\$\\n[*]\"
-.      substring * -1 -1
-.      ie "\\*[*]"%" \{\
-.        ds ** \\$[\\n[*]]\"
-.        substring ** 0 -2
-.        ie \B\\*[**] \
-.          nr $\\n[*] (\\*[**] * \\n[.l] / 100)
-.        el \
-.          tm \\n[.F]:\\n[.c]: Invalid relative cell width `\\*[**]%'.
-.      \}
-.      el \{\
-.        ie \B\\$[\\n[*]] \
-.          nr $\\n[*] \\$[\\n[*]]
-.        el \
-.          tm \\n[.F]:\\n[.c]: Invalid cell width `\\$[\\n[*]]'.
-.    \}\}
-.
-.    nr ll\\n[t*#] +\\n[$\\n[*]]
-.    nr ** \\n[$\\n[*]]
-.  \}
-.
-.  if (\\n[ll\\n[t*#]] > \\n[.l]) \
-.    tm \\n[.F]:\\n[.c]: Table width larger than column width.
-.
-.  nr ** (0 >? \\n[t*b\\n[t*#]])
-.  nr * 0 1
-.
-.  \" second while loop: Compute final cell widths.
-.  while (\\n[t*cols\\n[t*#]] >= \\n+[*]) \{\
-.    \" Remove border width, if any.
-.    if \\n[t*b\\n[t*#]] \{\
-.      \" cell_width := cell_width * (length - 1.5*border) / length
-.      nr #* (\\n[ll\\n[t*#]] - (3 * \\n[t*b\\n[t*#]] / 2))
-.      nr *** (\\n[ll\\n[t*#]] / 2)
-.      \" avoid multiplication overflow
-.      mult31by31 $\\n[*] #* ****
-.      add31to62 *** **** ****
-.      div62by31 **** ll\\n[t*#] $\\n[*]
-.    \}
-.
-.    \" Get cell widths without padding, spacing, and separator line.
-.    nr cll\\n[t*#]*\\n[*] (\\n[$\\n[*]] \
-                            - (2 * \\n[cscp\\n[t*#]]) \
-                            - \\n[b/2\\n[t*#]])
-.
-.    \" Check whether value is non-positive.
-.    if !\\n[cll\\n[t*#]*\\n[*]] \{\
-.      nr #* (\\n[ll\\n[t*#]] - (3 * \\n[t*b\\n[t*#]] / 2))
-.      nr *** (\\n[#*] / 2)
-.      nr *h (2 * \\n[cscp\\n[t*#]] + \\n[b/2\\n[t*#]])
-.      mult31by31 *h ll\\n[t*#] ****
-.      add31to62 *** **** ****
-.      div62by31 **** #* *h
-.      ds * \\n[*]th\"
-.      nr *** (\\n[*] % 10)
-.      if d nth-\\n[***] \
-.        ds * \\n[*]\\*[nth-\\n[***]]\"
-.      tmc \\n[.F]:\\n[.c]: The \\*[*] width value (\\$\\n[*]) is too small.
-.      tm1 " It should be greater than \\n[*h].
-.    \}
-.
-.    nr in\\n[t*#]*\\n[*] \\n[**]	\"	cell offset
-.    nr ** +\\n[$\\n[*]]
-.  \}
-..
-.
-.
-.\"	Utility macro:	.t*dntr <origin> <cell position> ? <cell ID>
-.\"
-.\"		Close TD diversion, make some calculations, and set
-.\"		some help strings and registers.  <origin> is 0, 1,
-.\"		or 2 if the call of .t*dntr occurs in .TD, .TR, or
-.\"		.ETB, respectively.
-.de t*dntr
-.  nr dn 0				\"	reset diversion height
-.  br					\"	finish cell data
-.
-.  if "\\n[.z]"*t*dummy*" \
-.    return
-.
-.  ds #t#r \\n[t*#]*\\n[t*r#\\n[t*#]]\"		refresh table row identifier
-.
-.  if \\n[c#\\*[#t#r]] \{\
-.    di					\"	close diversion
-.    nr dn\\$4 \\n[dn]			\"	save height of this cell
-.    if !\\n[rspan\\*[#trc]] \{\
-.      \" update row height if not in a row span
-.      nr dntr\\*[#t#r] (\\n[dntr\\*[#t#r]] >? \\n[dn])
-.      if \\$2 \
-.        nr dntr\\*[#t#r] ((\\n[t*height\\*[#t#r]] \
-                            - (2 * \\n[cscp\\n[t*#]] + \\n[b/2\\n[t*#]])) \
-                            >? \\n[dntr\\*[#t#r]])
-.  \}\}
-.
-.  nr c#\\*[#t#r] +1
-.  nr * \\$2
-.
-.  \" update column span registers
-.  while (\\n+[*] <= \\$3) \{\
-.    if r cspan\\*[#t#r]*\\n[*] \
-.      nr c#\\*[#t#r] +\\n[cspan\\*[#t#r]*\\n[*]]
-.    nr cspan\\*[#t#r]*\\n[*] 0
-.  \}
-.
-.  ds #trc \\*[#t#r]*\\n[c#\\*[#t#r]]\"
-.
-.  \" only check for cell underflow if called by .TR or .ETB
-.  if (\\$1 & (\\n[c#\\*[#t#r]] <= \\n[t*cols\\n[t*#]])) \{\
-.    ds * are\"
-.    ds ** columns\"
-.    if (\\n-[c#\\*[#t#r]] == 1) \{\
-.      ds * is\"
-.      ds ** column\"
-.    \}
-.    tmc \\n[.F]:\\n[.c]: There \\*[*] only \\n[c#\\*[#t#r]] \\*[**]
-.
-.    nr * \\n[t*r#\\n[t*#]]
-.    ds * \\n[*]th\"
-.    nr *** (\\n[*] % 10)
-.    if d nth-\\n[***] \
-.      ds * \\n[*]\\*[nth-\\n[***]]\"
-.    tmc " in the \\*[*] row
-.
-.    ds * are\"
-.    if (\\n[t*cols\\n[t*#]] == 1) \
-.      ds * is\"
-.    tm1 " but \\n[t*cols\\n[t*#]] \\*[*] expected.
-.  \}
-..
-.
-.
-.\"	Utility-macro:	.t*args level_1 [level_2]
-.\"
-.\"		Get the arguments common to TBL, TR, and TD for the level
-.\"		in argument 1, using default values from the level in
-.\"		argument 2.  If argument 2 is missing, use the global
-.\"		default values.
-.\"
-.de t*args
-.  ds t*bgc\\$1 \\*[t*bgc\\$2]\"
-.  ds t*fgc\\$1 \\*[t*fgc\\$2]\"
-.  ds t*hl\\$1 \\*[t*hl\\$2]\"
-.  ds t*vl\\$1 \\*[t*vl\\$2]\"
-.  ds t*hal\\$1 \\*[t*hal\\$2]\"
-.  ds t*val\\$1 \\*[t*val\\$2]\"
-.  ds t*ff\\$1 \\*[t*ff\\$2]\"
-.  ds t*fst\\$1 \\*[t*fst\\$2]\"
-.  ds t*fsz\\$1 \\*[t*fsz\\$2]\"
-.
-.  if "\\*[args]"" \
-.    return
-.
-.  t*getarg bgc \\*[args]         \"	background color
-.  if !"\\*[bgc]"" \{\
-.    ie m\\*[bgc] \
-.      ds t*bgc\\$1 \\*[bgc]\"
-.    el \{\
-.      ie "\\*[bgc]"=" \
-.        ds t*bgc\\$1 =\"
-.      el \
-.        tm \\n[.F]:\\n[.c]: Invalid background color `\\*[bgc]'.
-.  \}\}
-.  if "\\*[args]"" \
-.    return
-.
-.  t*getarg fgc \\*[args]         \"	foreground color
-.  if !"\\*[fgc]"" \{\
-.    ie m\\*[fgc] \
-.      ds t*fgc\\$1 \\*[fgc]\"
-.    el \{\
-.      ie "\\*[fgc]"=" \
-.        ds t*fgc\\$1 =\"
-.      el \
-.        tm \\n[.F]:\\n[.c]: Invalid foreground color `\\*[fgc]'.
-.  \}\}
-.  if "\\*[args]"" \
-.    return
-.
-.  t*getarg hl \\*[args]          \"	horizontal line between cells
-.  if !"\\*[hl]"" \
-.    ds t*hl\\$1 \\*[hl]\"
-.  if "\\*[args]"" \
-.    return
-.
-.  t*getarg vl \\*[args]          \"	vertical line between cells
-.  if !"\\*[vl]"" \
-.    ds t*vl\\$1 \\*[vl]\"
-.  if "\\*[args]"" \
-.    return
-.
-.  t*getarg hal \\*[args]         \"	horizontal table cell alignment
-.  if !"\\*[hal]"" \{\
-.    t*index bcrl \\*[hal]
-.    ie \\n[t*index] \
-.      ds t*hal\\$1 \\*[hal]\"
-.    el \{\
-.      tmc \\n[.F]:\\n[.c]: Invalid horizontal alignment `\\*[hal]':
-.      tm1 " must be `b', `c', `l' or `r'.
-.  \}\}
-.  if "\\*[args]"" \
-.    return
-.
-.  t*getarg val \\*[args]         \"	vertical table cell alignment
-.  if !"\\*[val]"" \{\
-.    t*index tmb \\*[val]
-.    ie \\n[t*index] \
-.      ds t*val\\$1 \\*[val]\"
-.    el \{\
-.      tmc \\n[.F]:\\n[.c]: Invalid vertical alignment `\\*[val]':
-.      tm1 " must be `t', `m' or `b'.
-.  \}\}
-.  if "\\*[args]"" \
-.    return
-.
-.  t*getarg ff \\*[args]          \"	font family
-.  if !"\\*[ff]"" \
-.    ds t*ff\\$1 \\*[ff]\"
-.  if "\\*[args]"" \
-.    return
-.
-.  t*getarg fst \\*[args]         \"	font style
-.  if !"\\*[fst]"" \
-.    ds t*fst\\$1 \\*[fst]\"
-.  if "\\*[args]"" \
-.    return
-.
-.  t*getarg fsz \\*[args]         \"	font size and spacing factor
-.  if !"\\*[fsz]"" \
-.    ds t*fsz\\$1 \\*[fsz]\"
-..
-.
-.
-.\" Append to your page header macro ('pg@top' for MS)
-.\" to enable tables to span pages.
-.de t*hm
-.  ev t*tbl
-.  nr ** \\n[.t]
-.  while !""\\*[t*kept]" \{\
-.    pops * t*kept
-.    popr * t*kept
-.    if (\\n[*] - \\n[**]) \{\
-.      tm \\n[.F]:\\n[.c]: Table \\*[*] higher than page -- ignored!
-.      break
-.    \}
-.
-.    if (\\n[*] - \\n[.t]) \{\
-.      ds t*kept \\n[*] \\*[t*kept]\"
-.      ds t*kept \\*[*] \\*[t*kept]\"
-.      tmc \\n[.F]:\\n[.c]: Remaining table(s),
-.      tm1 " because not all fit onto this page.
-.      break
-.    \}
-.
-.    t*DI \\*[*]
-.  \}
-.  ev
-..
-.
-.\" EOF
diff -Nuar groff-1.22.3.old/contrib/hdtbl/hdtbl.tmac-u groff-1.22.3/contrib/hdtbl/hdtbl.tmac-u
--- groff-1.22.3.old/contrib/hdtbl/hdtbl.tmac-u	1970-01-01 02:00:00.000000000 +0200
+++ groff-1.22.3/contrib/hdtbl/hdtbl.tmac-u	2015-04-23 20:57:03.000000000 +0300
@@ -0,0 +1,1003 @@
+.\"	-*- nroff -*-
+.ig
+
+hdtbl.tmac
+
+This file is part of groff, the GNU roff type-setting system.
+
+Copyright (C) 2005-2014  Free Software Foundation, Inc.
+written by Joachim Walsdorff <Joachim.Walsdorff@urz.uni-heidelberg.de>.
+
+groff is free software; you can redistribute it and/or modify it under
+the terms of the GNU General Public License as published by the Free
+Software Foundation, either version 3 of the License, or
+(at your option) any later version.
+
+groff is distributed in the hope that it will be useful, but WITHOUT
+ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or
+FITNESS FOR A PARTICULAR PURPOSE.  See the GNU General Public License
+for more details.
+
+You should have received a copy of the GNU General Public License
+along with this program. If not, see <http://www.gnu.org/licenses/>.
+
+..
+.
+.
+.\"	*****************************************************************
+.\"	*		hdtbl - Heidelberger table macros		*
+.\"	*			Vers. 0.91 December 2005		*
+.\"	*****************************************************************
+.
+.if d TBL \
+.  nx
+.
+.mso hdmisc.tmac
+.mso 62bit.tmac
+.
+.
+.\"	*****************************************************************
+.\"	*		default values for some arguments		*
+.\"	*****************************************************************
+.
+.ds t*hl s\"
+.ds t*vl s\"
+.ds t*tal l\"
+.ds t*hal b\"
+.ds t*val t\"
+.ds t*ff \\n[.fam]\"
+.ds t*fst \\n[.f]\"
+.ds t*fsz 1 1\"
+.ds t*fgc red4\"
+.ds t*bgc bisque\"
+.ds t*bc red4\"
+.nr t*cpd .5n
+.nr t*csp .5n
+.nr t*b .1n
+.nr t*cols 1
+.nr t*v \n[.v]
+.nr t*s \n[.ps]
+.nr t*hy \n[.hy]
+.nr t*l \n[.ll]
+.
+.
+.\"			defaults for table captions
+.nr t*cptn 0 1
+.ds t*cptn "".sp .4" \
+            ".t*pv 1.0 1.0" \
+            ".ad l" \
+            "\m[\\*[t*fgc]]Table \\n+[t*cptn]:\0\c\k*"\"
+.
+.
+.\" %beginstrip%
+.
+.\" for better error messages
+.ds nth-1 st\"
+.ds nth-2 nd\"
+.ds nth-3 rd\"
+.
+.\" initialization of various registers
+.nr t*# 0	\"	table nesting level
+.nr t*numb 0 1	\"	held table diversion #
+.
+.ds *#trc*
+.
+.
+.\"	*****************************************************************
+.\"	*	The four base macros and the two optional macros	*
+.\"	*****************************************************************
+.
+.ie n \
+.  ds g tty:\"
+.el \
+.  ds g ps: exec\"
+.
+.\"	TBL:	table start
+.\"		predecessor: 	text, TD or ETB
+.\"		successor:	CPTN or TR
+.de TBL
+.  ds t*m\\n[t*#] \\n[.m]\"
+.  ie \\n[t*#] \
+.    br
+.  el \{\
+.    ds * \\n[.ev]\"
+.    ev t*tbl
+.    evc \\*[*]
+.    di t*tbl0
+.    sp .4				\" XXX: hard-coded value
+.    nr t*i \\n[.i]
+.    ll -\\n[.i]u
+.    in 0
+.  \}
+.  nr t*# +1
+.
+.  \" Save current location for error checking at end
+.  ds t*FN \\[.F]
+.  ds t*LN \\[.c]
+.
+.  t*getarg cols \\$@\"	from here string `args' contains the rest of \\$@
+.  ie "\\*[cols]"" \
+.    nr t*cols\\n[t*#] \\n[t*cols]
+.  el \{\
+.    ie \B\\*[cols] \
+.      nr t*cols\\n[t*#] \\*[cols]
+.    el \
+.      tm \\n[.F]:\\n[.c]: Invalid number of columns value `\\*[cols]'.
+.  \}
+.
+.  t*getarg cpd \\*[args]                 \"	cell padding
+.  ie "\\*[cpd]"" \
+.    nr t*cpd\\n[t*#] \\n[t*cpd]
+.  el \{\
+.    ie \B\\*[cpd] \
+.      nr t*cpd\\n[t*#] \\*[cpd]
+.    el \
+.      tm \\n[.F]:\\n[.c]: Invalid cell padding value `\\*[cpd]'.
+.  \}
+.
+.  t*getarg csp \\*[args]                 \"	cell spacing
+.  ie "\\*[csp]"" \
+.    nr t*csp\\n[t*#] \\n[t*csp]
+.  el \{\
+.    ie \B\\*[csp] \
+.      nr t*csp\\n[t*#] \\*[csp]
+.    el \
+.      tm \\n[.F]:\\n[.c]: Invalid cell spacing value `\\*[csp]'.
+.  \}
+.
+.  t*getarg border \\*[args]              \"	border thickness
+.  ie "\\*[border]"=" \
+.    nr t*b\\n[t*#] 0-1
+.  el \{\
+.    ie "\\*[border]"" \
+.      nr t*b\\n[t*#] \\n[t*b]
+.    el \{\
+.      ie \B\\*[border] \
+.        nr t*b\\n[t*#] \\*[border]
+.      el \
+.        tm \\n[.F]:\\n[.c]: Invalid border thickness value `\\*[border]'.
+.  \}\}
+.
+.  t*getarg bc \\*[args]                  \"	border color
+.  ds t*bc\\n[t*#] \\*[t*bc]\"
+.  if !"\\*[bc]"" \{\
+.    ie m\\*[bc] \
+.      ds t*bc\\n[t*#] \\*[bc]\"
+.    el \{\
+.      ie "\\*[bc]"=" \
+.        ds t*bc\\n[t*#] =\"
+.      el \
+.        tm \\n[.F]:\\n[.c]: Invalid border color `\\*[bc]'.
+.  \}\}
+.  ie "\\*[bc]"=" \
+.    ds t*bc\\n[t*#]
+.  el \{\
+.    ie "\\*[bc]"" \
+.      ds t*bc\\n[t*#] \\*[t*bc]\"
+.    el \
+.      ds t*bc\\n[t*#] \\*[bc]\"
+.  \}
+.
+.  t*getarg width \\*[args]               \"	table/col widths
+.  if "\\*[width]"=" \
+.    ds width
+.
+.  nr b/2\\n[t*#] (\\n[t*b\\n[t*#]] / 2)\"	shortcut
+.  nr cscp\\n[t*#] (\\n[t*csp\\n[t*#]] + \\n[t*cpd\\n[t*#]])\"  aux. register
+.
+.  t*getarg height \\*[args]              \"	table outline height
+.  ie "\\*[height]"" \
+.    nr t*height\\n[t*#] 0
+.  el \{\
+.    ie \B\\*[height] \
+.      nr t*height\\n[t*#] (\\*[height] \
+                            - ((2 * \\n[cscp\\n[t*#]]) \
+                                + (3 * \\n[b/2\\n[t*#]])))
+.    el \
+.      tm \\n[.F]:\\n[.c]: Invalid height value `\\*[height]'.
+.  \}
+.
+.  t*cl \\*[width]                      \"	get cell widths and offsets
+.  t*args \\n[t*#]                      \"	look for common arguments
+.
+.  t*getarg tal \\*[args]                 \"	table horizontal alignment
+.  if "\\*[tal]"" \
+.    ds tal \\*[t*tal]\"
+.  ie "\\*[tal]"l" \
+.    nr in\\n[t*#] \\n[.i]
+.  el \{\
+.    ie "\\*[tal]"c" \
+.      nr in\\n[t*#] (\\n[.l] - \\n[ll\\n[t*#]]/2 + \\n[.i])
+.    el \{\
+.      ie "\\*[tal]"r" \
+.        nr in\\n[t*#] (\\n[.l] - \\n[ll\\n[t*#]] + \\n[.i])
+.      el \{\
+.        tmc \\n[.F]:\\n[.c]: Invalid horizontal table alignment `\\*[tal]':
+.        tm1 " must be `l', `c' or `r'.
+.  \}\}\}
+.
+.  nr t*r#\\n[t*#] 0		        \"	initialize row index
+.  mk toptbl\\n[t*#]
+.
+.  t*P1 \\*[args]
+..
+.
+.
+.\"	CPTN:	optional table caption
+.\"		predecessor:	TBL
+.\"		successor:	TR
+.de CPTN
+.  ft 1
+.
+.  if "\\$0"CPTN" \
+.    if \\n[t*r#\\n[t*#]] \{\
+.      tmc \\n[.F]:\\n[.c]: Invalid placement of `.CPTN';
+.      tm1 " must be called immediately after `.TBL'.
+.      return
+.    \}
+.
+.  t*getarg val \\$@
+.  ds args\\n[t*#] "\\*[args]\"
+.
+.  t*index "\\*[args]" .TR
+.  ie \\n[t*index] \{\
+.    ds *a\\n[t*#] "\\*[args]\"
+.    substring args\\n[t*#] 0 \\n[t*index]
+.    substring *a\\n[t*#] \\n[t*index]-2 -1
+.  \}
+.  el \
+.    ds *a\\n[t*#]
+.
+.  ie "\\*[val]"b" \{\
+.    de t*cptn\\n[t*#]
+.      *CPTN \\*[args\\n[t*#]]
+.      rm t*cptn\\n[t*#]
+\\..
+.  \}
+.  el \{\
+.    ll (\\n[ll\\n[t*#]]u + \\n[in\\n[t*#]]u)
+.    in \\n[in\\n[t*#]]u
+.    t*P1 \\*[t*cptn]
+'    in +\\n[*]u
+.    t*P1 \\*[args\\n[t*#]]
+.    t*pv 1 1
+.    in
+.    mk toptbl\\n[t*#]
+.  \}
+.
+.  t*P1 \\*[*a\\n[t*#]]
+..
+.
+.als *CPTN CPTN
+.
+.
+.\"	TR:	table row
+.\"		predecessor:	TBL, CPTN, text, TD or ETB
+.\"		successor:	TD
+.de TR
+.  ft 1
+.  if !\\n[t*#] \{\
+.    tm \\n[.F]:\\n[.c]: Table row (.TR) without preceding table start (.TBL).
+.    return
+.  \}
+.
+.  \" finish previous data cell, if any
+.  if \\n[t*r#\\n[t*#]] \
+.    t*dntr 1 \\n[c#\\*[#t#r]] \\n[t*cols\\n[t*#]] \\*[*#trc*]
+.
+.  nr t*r#\\n[t*#] +1			\"	row number in this table
+.  ds #t#r \\n[t*#]*\\n[t*r#\\n[t*#]]\"		table row identifier
+.					\"	(<level>*<row>)
+.  nr c#\\*[#t#r] 0 1			\"	clear cell counter
+.  nr dntr\\*[#t#r] 0 1			\"	clear accumulated row height
+.
+.  t*getarg height \\$@
+.  ie "\\*[height]"" \
+.    nr t*height\\*[#t#r] 0
+.  el \{\
+.    ie \B\\*[height] \
+.      nr t*height\\*[#t#r] \\*[height]
+.    el \
+.      tm \\n[.F]:\\n[.c]: Invalid table row height `\\*[height]'.
+.  \}
+.
+.  \"	If there is a TR with height `height', the total height of the table
+.  \"	is too high by 3/2 b, independent of the number of TR with `height'.
+.  t*args \\*[#t#r] \\n[t*#]            \"	look for common arguments
+.
+.  t*P1 \\*[args]
+..
+.
+.
+.\"	TH:	optional table header cell
+.\"		predecessor:	text, TD or TR
+.\"		successor:	text, TD, TR, TBL or ETB
+.\"								
+.\"		cell content bolded and horizontally and vertically centered,
+.\"		else like .TD
+.de TH
+.  ft 1
+.  t*getarg hal \\$@
+.  if "\\*[hal]"" \
+.    ds hal c\"
+.
+.  t*getarg val \\*[args]
+.  if "\\*[val]"" \
+.    ds val m\"
+.
+.  t*getarg fst \\*[args]
+.  if "\\*[fst]"" \
+.    ds fst B\"
+.
+.  TD hal=\\*[hal] val=\\*[val] fst=\\*[fst] \\*[args]
+..
+.
+.
+.\"	TD:	table data cell
+.\"		predecessor:	text, TD or TR
+.\"		successor:	text, TD, TR, TBL or ETB
+.de TD
+.  ft 1
+.  \" finish previous data cell -- note the use of \E
+.  t*dntr 0 \\n[c#\\*[#t#r]]-1 \En[c#\\*[#t#r]] \\*[*#trc*]
+.
+.  ds *#trc* \\*[#t#r]*\\n[c#\\*[#t#r]]\"	table cell identifier
+.					\"	(<level>*<row>*<column>)
+.
+.  t*getarg rowspan \\$@
+.  nr rowspan 1
+.  if !"\\*[rowspan]"" \{\
+.    ie \B\\*[rowspan] \{\
+.      nr rowspan (\\*[rowspan] >? 1)
+.      nr *rsp*\\*[*#trc*] (\\n[rowspan] - 1)
+.    \}
+.    el \
+.      tm \\n[.F]:\\n[.c]: Invalid value of `rowspan' keyword.
+.  \}
+.
+.  t*getarg colspan \\*[args]
+.  nr colspan 1
+.  if !"\\*[colspan]"" \{\
+.    ie \B\\*[colspan] \
+.      nr colspan (\\*[colspan] >? 1)
+.    el \
+.      tm \\n[.F]:\\n[.c]: Invalid value of `colspan' keyword.
+.  \}
+.
+.  t*args \\*[#trc] \\*[#t#r]           \"  look for common arguments
+.
+.  nr in\\*[#trc] \\n[in\\n[t*#]*\\n[c#\\*[#t#r]]]
+.  nr *cl \\n[cll\\n[t*#]*\\n[c#\\*[#t#r]]]
+.  nr * 0 1
+.  nr *r \\n[t*r#\\n[t*#]]
+.
+.  if (\\n[rowspan] - 1) \
+.    while (\\n+[*] <= \\n[rowspan]) \{\
+.      nr rspan\\n[t*#]*\\n[*r]*\\n[c#\\*[#t#r]] \\n[colspan]
+.      if (\\n[*] > 1) \
+.        nr cspan\\n[t*#]*\\n[*r]*\\n[c#\\*[#t#r]] \\n[colspan]
+.      nr *r +1
+.    \}
+.
+.  nr * 1 1
+.  nr *c \\n[c#\\*[#t#r]]
+.
+.  if (\\n[colspan] - 1) \{\
+.    nr vline\\*[*#trc*] 0-1		\"	set `no vl' flag
+.
+.    while (\\n+[*] <= \\n[colspan]) \{\
+.      nr *c +1
+.      nr *cl +(2 * \\n[cscp\\n[t*#]] \
+                + \\n[b/2\\n[t*#]] \
+                + \\n[cll\\n[t*#]*\\n[*c]])
+.      nr c#\\*[#t#r] +1
+.    \}
+.  \}
+.
+.  if (\\n[c#\\n[t*#]*\\n[t*r#\\n[t*#]]] > \\n[t*cols\\n[t*#]]) \{\
+.    ds * are\"
+.    ds ** columns\"
+.    if (\\n[c#\\*[#t#r]] == 1) \{\
+.      ds * is\"
+.      ds ** column\"
+.    \}
+.    tmc \\n[.F]:\\n[.c]: There \\*[*] \\n[c#\\*[#t#r]] table \\*[**] (.TD)
+.
+.    ds * are\"
+.    if (\\n[t*cols\\n[t*#]] == 1) \
+.      ds * is\"
+.    tm1 " but only \\n[t*cols\\n[t*#]] \\*[*] expected.
+.
+.    ds *
+.    length * \\n[.F]:\\n[.c]:
+.
+.    while \\n-[*] \
+.      ds * " \\*[*]\"
+.
+.    tm1 "\\*[*] Remaining .TDs and its contents are ignored.
+.
+.    di *t*dummy*                \"	bypass superfluous input
+.    return
+.  \}
+.
+.  di t*\\*[#trc]                \"	open cell diversion and set locals
+.  in 0
+.  nr cll\\*[#trc] \\n[*cl]
+.  ll \\n[*cl]u
+.  nr *cl\\n[t*#] \\n[.l]
+.  gcolor \\*[t*fgc\\*[#trc]]
+.  ad \\*[t*hal\\*[#trc]]
+.  fam \\*[t*ff\\*[#trc]]
+.  ft \\*[t*fst\\*[#trc]]
+.  t*pv \\*[t*fsz\\*[#trc]]
+.
+.  t*P1 \\*[args]
+..
+.
+.
+.\"	ETB:	end of table
+.\"		predecessor:	text, TD or ETB
+.\"		successor:	text, TD, TR or TBL
+.de ETB
+.  ie \\n[t*#] \
+.    if !\\n[t*r#\\n[t*#]] \{\
+.      tmc \\n[.F]:\\n[.c]: Each table (.TBL)
+.      tm1 " should contain at least one table row (.TR)!
+.    \}
+.  el \{\
+.    tmc \\n[.F]:\\n[.c]: Table end (.ETB)
+.    tm1 " without corresponding table start (.TBL)!
+.  \}
+.
+.  ds #t#r \\n[t*#]*\\n[t*r#\\n[t*#]]\"		refresh table row identifier
+.  t*dntr 2 \\n[c#\\*[#t#r]] \\n[t*cols\\n[t*#]] \\*[*#trc*]
+.
+.  t*divs                        \"	print this table
+.
+.  sp \\n[b/2\\n[t*#]]u
+.  t*cptn\\n[t*#]
+.  nr t*# -1
+.
+.  ll \\n[*cl\\n[t*#]]u          \"	restore ll outside this table
+.  in 0                          \"	reset indent
+.  gcolor \\*[t*m\\n[t*#]]       \"	reset previous fgc
+.
+.  t*getarg hold \\$@
+.  if !\\n[t*#] \{\
+.    sp .5
+.    di
+.    in \\n[t*i]u
+.    ie "\\*[hold]"" \{\
+.      ie (\\n[.t] - \\n[dn]) \
+.        t*DI t*tbl0
+.      el \{\
+.        rn t*tbl0 t*tbl\\n+[t*numb]
+.        ds t*kept \\*[t*kept] t*tbl\\n[t*numb] \\n[dn]\"
+.      \}
+.    \}
+.    el \{\
+.      rn t*tbl0 t*hold\\n+[t*numb]
+.      tm \\n[.F]:\\n[.c]: Table t*hold\\n[t*numb] held.
+.      ds t*held \\*[t*held] t*hold\\n[t*numb] \\n[dn]\"
+.    \}
+.
+.    ev				\"	restore previous environment
+.  \}
+.
+.  t*P1 \\*[args]
+..
+.
+.
+.\"	*****************************************************************
+.\"	*	Following the definition of five utility macros		*
+.\"	*	special to hdtbl.					*
+.\"	*	Other utility macros common to hdtbl and hdgroff	*
+.\"	*	are defined in the file hdmisc.tmac.			*
+.\"	*****************************************************************
+.
+.
+.\"	.t*free [n]
+.\"		print the next [n] held table[s].
+.\"             Don't call it within a table!
+.\"		If the table is higher than the remaining space
+.\"		on the page, the table is printed on the next page.
+.de t*free
+.  if "\\$0"CPTN" \
+.    if \\n[t*r#\\n[t*#]] \{\
+.      tmc \\n[.F]:\\n[.c]: Invalid placement of `.t*free' within a table;
+.      tm1 " it must be called outside of any table.
+.      return
+.    \}
+.
+.  if "\\*[t*held]"" \{\
+.    tm \\n[.F]:\\n[.c]: No held tables.
+.    return
+.  \}
+.
+.  nr ** (\\$1 >? 1) 1
+.  while !""\\*[t*held]" \{\
+.    pops * t*held
+.    popr * t*held
+.
+.    ie (\\n[.t] - \\n[*]) \{\
+.      ev t*tbl
+.      t*DI \\*[*]
+.      ev
+.    \}
+.    el \{\
+.      rn \\*[*] t*tbl\\n+[t*numb]
+.      ds t*kept \\*[t*kept] t*tbl\\n[t*numb] \\n[*]\"
+.    \}
+.
+.    if !(\\n-[**] - 1) \
+.      return
+.  \}
+..
+.
+.
+.\"	The main utility macro for tables:
+.\"		If a table is closed by ETB, this macro is called.  It
+.\"		processes one complete table, i.e., all the table cell
+.\"		diversions, paints the cell backgrounds, draws
+.\"		horizontal and vertical table lines and the table border.
+.\"
+.\"		Nested tables are processed from inside to outside.
+.
+.de t*divs
+.  ll (\\n[t*l]u + 1c)			\"	avoid warning `can't break line'
+.  nf
+.
+.  nr b/2 \\n[b/2\\n[t*#]]		\"	some abbreviations
+.  nr cscp \\n[cscp\\n[t*#]]
+.  nr cscpb (\\n[b/2] + \\n[cscp])
+.
+.  nr topdiv (\\n[.d] + \\n[b/2] - \\n[cscp])\"	top of cell diversion
+.  nr cscpb2 (\\n[b/2] / 2 + \\n[cscp])
+.
+.  nr #r 0 1
+.  \" outer loop for rows
+.  while (\\n+[#r] <= \\n[t*r#\\n[t*#]]) \{\
+.    \" TODO: insert code here for multipage tables
+.    nr * (\\n[#r] - 1)
+.    nr topdiv +(\\n[dntr\\n[t*#]*\\n[*]] + \\n[cscp] + \\n[cscpb])
+.
+.    \" if table still smaller than specified table height, increase it
+.    if ((\\n[#r] == \\n[t*r#\\n[t*#]]) & \\n[t*height\\n[t*#]]) \
+.      nr dntr\\n[t*#]*\\n[#r] (\\n[cscpb] \
+                                + \\n[toptbl\\n[t*#]] \
+                                + \\n[t*height\\n[t*#]] \
+                                - (\\n[topdiv] >? \\n[dntr\\n[t*#]*\\n[#r]]))
+.
+.    nr #c 0 1
+.    \" inner loop for cells
+.    while (\\n+[#c] <= \\n[t*cols\\n[t*#]]) \{\
+.      ds #trc \\n[t*#]*\\n[#r]*\\n[#c]\"
+.      \" continue if the diversion is empty
+.      if !d t*\\*[#trc] \
+.        continue
+.
+.      sp |\\n[topdiv]u
+.      in (\\n[in\\n[t*#]]u + \\n[in\\*[#trc]]u)\"	cell offset
+.      nr $1 \\n[dntr\\n[t*#]*\\n[#r]]	\"	cell height
+.
+.      \" if we have spanned rows, calculate resulting row height
+.      \" and position of lower horizontal line
+.      if \\n[*rsp*\\*[#trc]] \{\
+.        nr * \\n[#r] 1
+.        nr rspan\\*[#trc] 0-1		\"	set `no hl' flag
+.        nr corr (\\n[dn\\*[#trc]] - \\n[dntr\\n[t*#]*\\n[#r]])
+.
+.        \" clear row span flags in following rows and update row height
+.        while \\n[*rsp*\\*[#trc]] \{\
+.          nr *rsp*\\*[#trc] -1
+.          nr rspan\\n[t*#]*\\n+[*]*\\n[#c] 0
+.          nr ** (\\n[dntr\\n[t*#]*\\n[*]] + \\n[cscp] + \\n[cscpb])
+.          nr corr -\\n[**]
+.          nr $1 +\\n[**]
+.        \}
+.
+.        if (\\n-[*] == \\n[t*r#\\n[t*#]]) \
+.          nr $1 ((\\n[t*height\\n[t*#]] \
+                   - \\n[.d] \
+                   + \\n[toptbl\\n[t*#]] \
+                   + \\n[cscpb]) \
+                     >? \\n[$1])
+.        nr dntr\\n[t*#]*\\n[*] +(\\n[corr] >? 0)
+.      \}
+.
+.      \" paint cell background
+.      nr * (2 * \\n[t*cpd\\n[t*#]] + \\n[cll\\*[#trc]])\"	background width
+.      nr $1 (\\n[$1] >? \\n[dn\\*[#trc]])\"	cell height
+.
+.      if !"\\*[t*bgc\\*[#trc]]"=" \{\
+.        nop \h'\\n[t*csp\\n[t*#]]u'\
+\M[\\*[t*bgc\\*[#trc]]]\
+\v'(-.67v - \\n[t*cpd\\n[t*#]]u)'\
+\D'P \\n[*]u 0 \
+     0 (2u * \\n[t*cpd\\n[t*#]]u + \\n[$1]u) \
+     -\\n[*]u 0'\
+\M[]
+.        sp -1
+.      \}
+.
+.      \" ***   horizontal and vertical single or double lines   ***
+.      \" double and single lines have the same thickness;
+.      \" the double lines' distance is the line thickness.
+.      \"
+.      \" `border=x': horizontal/vertical lines x/2 thick, minimum .1n
+.      \" `border=0': no border; horizontal/vertical lines .1n thick
+.      \" `border=': neither border nor horizontal/vertical lines
+.
+.      nr *t (.1n >? \\n[b/2])		\"	thickness of hl/vl; min. .1n
+.      in +\\n[cscp]u
+.
+.      \" check for vertical and horizontal lines
+.      if (1 + \\n[t*b\\n[t*#]]) \{\
+.        if !"\\*[t*bc\\n[t*#]]"=" \{\
+.          \" draw horizontal line between this cell and the one below
+.          if (\\n[t*r#\\n[t*#]] - \\n[#r] + \\n[rspan\\*[#trc]]) \{\
+.            if !"\\*[t*hl\\*[#trc]]"=" \{\
+.              sp \\n[$1]u
+.              nr * (\\n[cscp] + \\n[cscpb] + \\n[cll\\*[#trc]])
+.              nop \X'\*[g] 1 setlinecap'\
+\h'(-\\n[cscpb2]u - \\n[*t]u)'\
+\v'(\\n[cscpb2]u - .67v)'\
+\m[\\*[t*bc\\n[t*#]]]\
+\D't \\n[*t]u'\c
+.
+.              ie "\\*[t*hl\\*[#trc]]"d" \
+.                nop \v'-\\n[*t]u'\
+\D'l \\n[*]u 0'\
+\v'(2u * \\n[*t]u)'\
+\D'l -\\n[*]u 0'\
+\D't 0'
+.              el \
+.                nop \D'l \\n[*]u 0'\
+\D't 0'
+.
+.              sp (-\\n[$1]u - 1v)
+.          \}\}
+.
+.          nr rspan\\*[#trc] 0
+.
+.          \" draw vertical line between this cell and the one to the right
+.          if (\\n[t*cols\\n[t*#]] - \\n[#c] + \\n[vline\\*[#trc]]) \{\
+.            if !"\\*[t*vl\\*[#trc]]"=" \{\
+.              nop \X'\*[g] 1 setlinecap'\
+\v'(-\\n[cscpb2]u - .67v)'\
+\m[\\*[t*bc\\n[t*#]]]\
+\h'(\\n[cscpb2]u - \\n[*t]u + \\n[cll\\*[#trc]]u)'\c
+.
+.              ie "\\*[t*vl\\*[#trc]]"d" \
+.                nop \h'-\\n[*t]u'\
+\D't \\n[*t]u'\
+\D'l 0 (2u * \\n[cscp]u + \\n[$1]u + (\\n[*t]u / 2u))'\
+\h'(2u * \\n[*t]u)'\
+\D'l 0 -(2u * \\n[cscp]u + \\n[$1]u + (\\n[*t]u / 2u))'\
+\D't 0'
+.              el \
+.                nop \D't \\n[*t]u'\
+\D'l 0 (2u * \\n[cscp]u + \\n[$1]u + (\\n[*t]u / 2u))'\
+\D't 0'
+.              sp -1
+.      \}\}\}\}
+.
+.      nr vline\\*[#trc] 0
+.
+.      \" vert. cell content alignment
+.      nr ** 0
+.
+.      ie "\\*[t*val\\*[#trc]]"m" \
+.        nr ** ((\\n[$1] - \\n[dn\\*[#trc]]) / 2)\"	val=m
+.      el \
+.        if "\\*[t*val\\*[#trc]]"b" \
+.          nr ** (\\n[$1] - \\n[dn\\*[#trc]])\"	val=b
+.
+.      sp \\n[**]u			\"	vertical content position
+.
+.      \" finally output the diversion
+.      t*\\*[#trc]
+.      rm t*\\*[#trc]
+.    \}
+.  \}
+.
+.  \" draw the box border
+.  in \\n[in\\n[t*#]]u
+.  nr ** (\\n[topdiv] + \\n[dntr\\n[t*#]*\\n-[#r]])
+.
+.  if \\n[t*b\\n[t*#]] \{\
+.    sp |(\\n[toptbl\\n[t*#]]u + \\n[b/2]u)
+.    nr $1 (\\n[toptbl\\n[t*#]] - \\n[**] - \\n[cscp])
+.    nr * (\\n[ll\\n[t*#]] - \\n[t*b\\n[t*#]])
+.
+.    if !"\\*[t*bc\\n[t*#]]"=" \
+.      nop \X'\*[g] 0 setlinejoin 2 setlinecap'\
+\v'-.67v'\
+\h'-\\n[b/2]u'\
+\m[\\*[t*bc\\n[t*#]]]\
+\D't \\n[t*b\\n[t*#]]u'\
+\D'l \\n[*]u 0'\
+\D'l 0 -\\n[$1]u'\
+\D'l -\\n[*]u 0'\
+\D'l 0 \\n[$1]u'\
+\D't 0'
+.  \}
+.
+.  sp |(\\n[**]u + \\n[cscpb]u)
+.  fi
+..
+.
+.
+.\"	Utility macro:	.t*cl [width1 [width2 [...]]]
+.\"
+.\"		Calculate cell widths, table width, and cell offsets.
+.de t*cl
+.  nr t*cols\\n[t*#] (\\n[.$] >? \\n[t*cols\\n[t*#]])
+.  nr ll\\n[t*#] 0			\"	accumulated cell widths
+.  nr ** (\\n[.l] / \\n[t*cols\\n[t*#]])\"	width for remaining cells
+.  nr * 0 1				\"	counter
+.
+.  \" while-loop: Parse user arguments to get each cell's width.
+.  while (\\n[t*cols\\n[t*#]] >= \\n+[*]) \{\
+.    nr $\\n[*] \\n[**]
+.    if !"\\$[\\n[*]]"" \{\
+.      \" check for `%' pseudo scaling indicator
+.      ds * \\$\\n[*]\"
+.      substring * -1 -1
+.      ie "\\*[*]"%" \{\
+.        ds ** \\$[\\n[*]]\"
+.        substring ** 0 -2
+.        ie \B\\*[**] \
+.          nr $\\n[*] (\\*[**] * \\n[.l] / 100)
+.        el \
+.          tm \\n[.F]:\\n[.c]: Invalid relative cell width `\\*[**]%'.
+.      \}
+.      el \{\
+.        ie \B\\$[\\n[*]] \
+.          nr $\\n[*] \\$[\\n[*]]
+.        el \
+.          tm \\n[.F]:\\n[.c]: Invalid cell width `\\$[\\n[*]]'.
+.    \}\}
+.
+.    nr ll\\n[t*#] +\\n[$\\n[*]]
+.    nr ** \\n[$\\n[*]]
+.  \}
+.
+.  if (\\n[ll\\n[t*#]] > \\n[.l]) \
+.    tm \\n[.F]:\\n[.c]: Table width larger than column width.
+.
+.  nr ** (0 >? \\n[t*b\\n[t*#]])
+.  nr * 0 1
+.
+.  \" second while loop: Compute final cell widths.
+.  while (\\n[t*cols\\n[t*#]] >= \\n+[*]) \{\
+.    \" Remove border width, if any.
+.    if \\n[t*b\\n[t*#]] \{\
+.      \" cell_width := cell_width * (length - 1.5*border) / length
+.      nr #* (\\n[ll\\n[t*#]] - (3 * \\n[t*b\\n[t*#]] / 2))
+.      nr *** (\\n[ll\\n[t*#]] / 2)
+.      \" avoid multiplication overflow
+.      mult31by31 $\\n[*] #* ****
+.      add31to62 *** **** ****
+.      div62by31 **** ll\\n[t*#] $\\n[*]
+.    \}
+.
+.    \" Get cell widths without padding, spacing, and separator line.
+.    nr cll\\n[t*#]*\\n[*] (\\n[$\\n[*]] \
+                            - (2 * \\n[cscp\\n[t*#]]) \
+                            - \\n[b/2\\n[t*#]])
+.
+.    \" Check whether value is non-positive.
+.    if !\\n[cll\\n[t*#]*\\n[*]] \{\
+.      nr #* (\\n[ll\\n[t*#]] - (3 * \\n[t*b\\n[t*#]] / 2))
+.      nr *** (\\n[#*] / 2)
+.      nr *h (2 * \\n[cscp\\n[t*#]] + \\n[b/2\\n[t*#]])
+.      mult31by31 *h ll\\n[t*#] ****
+.      add31to62 *** **** ****
+.      div62by31 **** #* *h
+.      ds * \\n[*]th\"
+.      nr *** (\\n[*] % 10)
+.      if d nth-\\n[***] \
+.        ds * \\n[*]\\*[nth-\\n[***]]\"
+.      tmc \\n[.F]:\\n[.c]: The \\*[*] width value (\\$\\n[*]) is too small.
+.      tm1 " It should be greater than \\n[*h].
+.    \}
+.
+.    nr in\\n[t*#]*\\n[*] \\n[**]	\"	cell offset
+.    nr ** +\\n[$\\n[*]]
+.  \}
+..
+.
+.
+.\"	Utility macro:	.t*dntr <origin> <cell position> ? <cell ID>
+.\"
+.\"		Close TD diversion, make some calculations, and set
+.\"		some help strings and registers.  <origin> is 0, 1,
+.\"		or 2 if the call of .t*dntr occurs in .TD, .TR, or
+.\"		.ETB, respectively.
+.de t*dntr
+.  nr dn 0				\"	reset diversion height
+.  br					\"	finish cell data
+.
+.  if "\\n[.z]"*t*dummy*" \
+.    return
+.
+.  ds #t#r \\n[t*#]*\\n[t*r#\\n[t*#]]\"		refresh table row identifier
+.
+.  if \\n[c#\\*[#t#r]] \{\
+.    di					\"	close diversion
+.    nr dn\\$4 \\n[dn]			\"	save height of this cell
+.    if !\\n[rspan\\*[#trc]] \{\
+.      \" update row height if not in a row span
+.      nr dntr\\*[#t#r] (\\n[dntr\\*[#t#r]] >? \\n[dn])
+.      if \\$2 \
+.        nr dntr\\*[#t#r] ((\\n[t*height\\*[#t#r]] \
+                            - (2 * \\n[cscp\\n[t*#]] + \\n[b/2\\n[t*#]])) \
+                            >? \\n[dntr\\*[#t#r]])
+.  \}\}
+.
+.  nr c#\\*[#t#r] +1
+.  nr * \\$2
+.
+.  \" update column span registers
+.  while (\\n+[*] <= \\$3) \{\
+.    if r cspan\\*[#t#r]*\\n[*] \
+.      nr c#\\*[#t#r] +\\n[cspan\\*[#t#r]*\\n[*]]
+.    nr cspan\\*[#t#r]*\\n[*] 0
+.  \}
+.
+.  ds #trc \\*[#t#r]*\\n[c#\\*[#t#r]]\"
+.
+.  \" only check for cell underflow if called by .TR or .ETB
+.  if (\\$1 & (\\n[c#\\*[#t#r]] <= \\n[t*cols\\n[t*#]])) \{\
+.    ds * are\"
+.    ds ** columns\"
+.    if (\\n-[c#\\*[#t#r]] == 1) \{\
+.      ds * is\"
+.      ds ** column\"
+.    \}
+.    tmc \\n[.F]:\\n[.c]: There \\*[*] only \\n[c#\\*[#t#r]] \\*[**]
+.
+.    nr * \\n[t*r#\\n[t*#]]
+.    ds * \\n[*]th\"
+.    nr *** (\\n[*] % 10)
+.    if d nth-\\n[***] \
+.      ds * \\n[*]\\*[nth-\\n[***]]\"
+.    tmc " in the \\*[*] row
+.
+.    ds * are\"
+.    if (\\n[t*cols\\n[t*#]] == 1) \
+.      ds * is\"
+.    tm1 " but \\n[t*cols\\n[t*#]] \\*[*] expected.
+.  \}
+..
+.
+.
+.\"	Utility-macro:	.t*args level_1 [level_2]
+.\"
+.\"		Get the arguments common to TBL, TR, and TD for the level
+.\"		in argument 1, using default values from the level in
+.\"		argument 2.  If argument 2 is missing, use the global
+.\"		default values.
+.\"
+.de t*args
+.  ds t*bgc\\$1 \\*[t*bgc\\$2]\"
+.  ds t*fgc\\$1 \\*[t*fgc\\$2]\"
+.  ds t*hl\\$1 \\*[t*hl\\$2]\"
+.  ds t*vl\\$1 \\*[t*vl\\$2]\"
+.  ds t*hal\\$1 \\*[t*hal\\$2]\"
+.  ds t*val\\$1 \\*[t*val\\$2]\"
+.  ds t*ff\\$1 \\*[t*ff\\$2]\"
+.  ds t*fst\\$1 \\*[t*fst\\$2]\"
+.  ds t*fsz\\$1 \\*[t*fsz\\$2]\"
+.
+.  if "\\*[args]"" \
+.    return
+.
+.  t*getarg bgc \\*[args]         \"	background color
+.  if !"\\*[bgc]"" \{\
+.    ie m\\*[bgc] \
+.      ds t*bgc\\$1 \\*[bgc]\"
+.    el \{\
+.      ie "\\*[bgc]"=" \
+.        ds t*bgc\\$1 =\"
+.      el \
+.        tm \\n[.F]:\\n[.c]: Invalid background color `\\*[bgc]'.
+.  \}\}
+.  if "\\*[args]"" \
+.    return
+.
+.  t*getarg fgc \\*[args]         \"	foreground color
+.  if !"\\*[fgc]"" \{\
+.    ie m\\*[fgc] \
+.      ds t*fgc\\$1 \\*[fgc]\"
+.    el \{\
+.      ie "\\*[fgc]"=" \
+.        ds t*fgc\\$1 =\"
+.      el \
+.        tm \\n[.F]:\\n[.c]: Invalid foreground color `\\*[fgc]'.
+.  \}\}
+.  if "\\*[args]"" \
+.    return
+.
+.  t*getarg hl \\*[args]          \"	horizontal line between cells
+.  if !"\\*[hl]"" \
+.    ds t*hl\\$1 \\*[hl]\"
+.  if "\\*[args]"" \
+.    return
+.
+.  t*getarg vl \\*[args]          \"	vertical line between cells
+.  if !"\\*[vl]"" \
+.    ds t*vl\\$1 \\*[vl]\"
+.  if "\\*[args]"" \
+.    return
+.
+.  t*getarg hal \\*[args]         \"	horizontal table cell alignment
+.  if !"\\*[hal]"" \{\
+.    t*index bcrl \\*[hal]
+.    ie \\n[t*index] \
+.      ds t*hal\\$1 \\*[hal]\"
+.    el \{\
+.      tmc \\n[.F]:\\n[.c]: Invalid horizontal alignment `\\*[hal]':
+.      tm1 " must be `b', `c', `l' or `r'.
+.  \}\}
+.  if "\\*[args]"" \
+.    return
+.
+.  t*getarg val \\*[args]         \"	vertical table cell alignment
+.  if !"\\*[val]"" \{\
+.    t*index tmb \\*[val]
+.    ie \\n[t*index] \
+.      ds t*val\\$1 \\*[val]\"
+.    el \{\
+.      tmc \\n[.F]:\\n[.c]: Invalid vertical alignment `\\*[val]':
+.      tm1 " must be `t', `m' or `b'.
+.  \}\}
+.  if "\\*[args]"" \
+.    return
+.
+.  t*getarg ff \\*[args]          \"	font family
+.  if !"\\*[ff]"" \
+.    ds t*ff\\$1 \\*[ff]\"
+.  if "\\*[args]"" \
+.    return
+.
+.  t*getarg fst \\*[args]         \"	font style
+.  if !"\\*[fst]"" \
+.    ds t*fst\\$1 \\*[fst]\"
+.  if "\\*[args]"" \
+.    return
+.
+.  t*getarg fsz \\*[args]         \"	font size and spacing factor
+.  if !"\\*[fsz]"" \
+.    ds t*fsz\\$1 \\*[fsz]\"
+..
+.
+.
+.\" Append to your page header macro ('pg@top' for MS)
+.\" to enable tables to span pages.
+.de t*hm
+.  ev t*tbl
+.  nr ** \\n[.t]
+.  while !""\\*[t*kept]" \{\
+.    pops * t*kept
+.    popr * t*kept
+.    if (\\n[*] - \\n[**]) \{\
+.      tm \\n[.F]:\\n[.c]: Table \\*[*] higher than page -- ignored!
+.      break
+.    \}
+.
+.    if (\\n[*] - \\n[.t]) \{\
+.      ds t*kept \\n[*] \\*[t*kept]\"
+.      ds t*kept \\*[*] \\*[t*kept]\"
+.      tmc \\n[.F]:\\n[.c]: Remaining table(s),
+.      tm1 " because not all fit onto this page.
+.      break
+.    \}
+.
+.    t*DI \\*[*]
+.  \}
+.  ev
+..
+.
+.\" EOF
diff -Nuar groff-1.22.3.old/contrib/hdtbl/Makefile.sub groff-1.22.3/contrib/hdtbl/Makefile.sub
--- groff-1.22.3.old/contrib/hdtbl/Makefile.sub	2014-11-04 10:38:35.483520772 +0200
+++ groff-1.22.3/contrib/hdtbl/Makefile.sub	1970-01-01 02:00:00.000000000 +0200
@@ -1,174 +0,0 @@
-# Copyright (C) 2006-2014  Free Software Foundation, Inc.
-#      Written by Werner Lemberg (wl@gnu.org)
-#
-# This file is part of groff.
-#
-# groff is free software; you can redistribute it and/or modify it under
-# the terms of the GNU General Public License as published by the Free
-# Software Foundation, either version 3 of the License, or
-# (at your option) any later version.
-#
-# groff is distributed in the hope that it will be useful, but WITHOUT ANY
-# WARRANTY; without even the implied warranty of MERCHANTABILITY or
-# FITNESS FOR A PARTICULAR PURPOSE.  See the GNU General Public License
-# for more details.
-#
-# You should have received a copy of the GNU General Public License
-# along with this program. If not, see <http://www.gnu.org/licenses/>.
-
-# These may be overridden if cross-compiling.
-GROFFBIN=$(top_builddir)/src/roff/groff/groff
-GROFF_BIN_PATH=`echo $(groff_bin_dirs) | sed -e 's|  *|$(SH_SEP)|g'`
-
-groff_bin_dirs=\
-  $(top_builddir)/src/roff/groff \
-  $(top_builddir)/src/roff/troff \
-  $(top_builddir)/src/preproc/eqn \
-  $(top_builddir)/src/preproc/pic \
-  $(top_builddir)/src/preproc/tbl \
-  $(top_builddir)/src/devices/grops
-
-FFLAG=-F$(top_builddir)/font -F$(top_srcdir)/font
-TFLAG=-M$(top_builddir)/tmac -M$(top_srcdir)/tmac -M$(srcdir)
-PFLAG=-t -p -e -U
-
-GROFF=\
-  GROFF_COMMAND_PREFIX= \
-  GROFF_BIN_PATH="$(GROFF_BIN_PATH)" \
-  $(GROFFBIN) $(FFLAG) $(TFLAG) $(PFLAG)
-
-MAN7=\
-  groff_hdtbl.n
-
-# These files are processed with `strip.sed'.
-STRIPFILES=\
-  hdtbl.tmac \
-  hdmisc.tmac
-
-# These files are handled by the `.in.roff' rule.
-GENFILES=\
-  examples/fonts_n.roff \
-  examples/fonts_x.roff
-
-EXAMPLEFILES=\
-  examples/common.roff \
-  examples/chess_board.roff \
-  examples/color_boxes.roff \
-  examples/color_nested_tables.roff \
-  examples/color_table_cells.roff \
-  examples/color_transitions.roff \
-  examples/col_rowspan_colors.roff \
-  examples/mixed_pickles.roff \
-  examples/rainbow.roff \
-  examples/short_reference.roff
-
-PROCESSEDEXAMPLEFILES=\
-  examples/chess_board.ps \
-  examples/color_boxes.ps \
-  examples/color_nested_tables.ps \
-  examples/color_table_cells.ps \
-  examples/color_transitions.ps \
-  examples/col_rowspan_colors.ps \
-  examples/fonts_n.ps \
-  examples/fonts_x.ps \
-  examples/mixed_pickles.ps \
-  examples/rainbow.ps \
-  examples/short_reference.ps
-
-EXAMPLEFILES_=`echo $(EXAMPLEFILES) | sed 's|examples/||g'`
-GENFILES_=`echo $(GENFILES) | sed 's|examples/||g'`
-PROCESSEDEXAMPLEFILES_=`echo $(PROCESSEDEXAMPLEFILES) | sed 's|examples/||g'`
-
-MOSTLYCLEANADD=\
-  gnu.eps \
-  $(PROCESSEDEXAMPLEFILES) \
-  $(GENFILES) \
-  examples/stamp \
-  stamp-strip \
-  hdmisc.tmac-s hdtbl.tmac-s
-
-RM=rm -f
-
-.SUFFIXES: .roff .in .ps
-
-.roff.ps:
-	$(GROFF) -Tps -dfontpath=$(top_srcdir)/font -dsopath=$(srcdir)/ \
-	         -mhdtbl $< >$@
-
-.in.roff:
-	sed -e "s|@fontdir@|$(fontdir)|" $< >$@
-
-all: $(make_examples) stamp-strip
-
-.PHONY: examples
-examples: $(PROCESSEDEXAMPLEFILES)
-
-$(PROCESSEDEXAMPLEFILES): gnu.eps examples/stamp examples/common.roff
-
-gnu.eps:
-	if test -f $(top_srcdir)/doc/gnu.eps; then \
-	  cp $(top_srcdir)/doc/gnu.eps . ; \
-	elif test -f $(top_builddir)/doc/gnu.eps; then \
-	  cp $(top_builddir)/doc/gnu.eps . ; \
-	else \
-	  xpmtoppm $(top_srcdir)/doc/gnu.xpm | pnmdepth 15 \
-	    | $(pnmtops_nosetpage) -noturn -rle >$@ ; \
-	fi
-
-examples/stamp:
-	-test -d examples || $(mkinstalldirs) examples
-	touch $@
-
-stamp-strip: $(STRIPFILES)
-	for f in $(STRIPFILES); do \
-	  $(RM) $$f-s; \
-	  sed -f $(top_srcdir)/tmac/strip.sed $(srcdir)/$$f >$$f-s; \
-	done
-	touch $@
-
-$(GENFILES): examples/stamp
-
-install_data: install_always $(make_install_examples)
-
-install_always: $(STRIPFILES) $(GENFILES)
-	-test -d $(DESTDIR)$(tmacdir) || $(mkinstalldirs) $(DESTDIR)$(tmacdir)
-	for f in $(STRIPFILES); do \
-	  $(RM) $(DESTDIR)$(tmacdir)/$$f; \
-	  $(INSTALL_DATA) $$f-s $(DESTDIR)$(tmacdir)/$$f; \
-	done
-
-install_examples: install_always $(EXAMPLEFILES) $(PROCESSEDEXAMPLEFILES) \
-		  gnu.eps stamp-strip
-	-test -d $(DESTDIR)$(exampledir)/hdtbl \
-	  || $(mkinstalldirs) $(DESTDIR)$(exampledir)/hdtbl
-	for f in $(EXAMPLEFILES_); do \
-	  $(RM) $(DESTDIR)$(exampledir)/hdtbl/$$f; \
-	  $(INSTALL_DATA) $(srcdir)/examples/$$f \
-	    $(DESTDIR)$(exampledir)/hdtbl/$$f; \
-	done
-	for f in $(PROCESSEDEXAMPLEFILES_) $(GENFILES_); do \
-	  $(RM) $(DESTDIR)$(exampledir)/hdtbl/$$f; \
-	  $(INSTALL_DATA) examples/$$f $(DESTDIR)$(exampledir)/hdtbl/$$f; \
-	done
-	$(INSTALL_DATA) gnu.eps $(DESTDIR)$(exampledir)/hdtbl/gnu.eps
-
-uninstall_sub: uninstall_always $(make_uninstall_examples)
-
-uninstall_always:
-	-for f in $(STRIPFILES); do $(RM) $(DESTDIR)$(tmacdir)/$$f; done
-
-uninstall_examples: uninstall_always
-	-for f in $(EXAMPLEFILES_) $(PROCESSEDEXAMPLEFILES_) $(GENFILES_); do \
-	  $(RM) $(DESTDIR)$(exampledir)/hdtbl/$$f; \
-	done
-	$(RM) $(DESTDIR)$(exampledir)/hdtbl/gnu.eps
-	-test -d $(DESTDIR)$(exampledir)/hdtbl && \
-	  rmdir $(DESTDIR)$(exampledir)/hdtbl
-
-########################################################################
-# Emacs settings
-########################################################################
-#
-# Local Variables:
-# mode: makefile
-# End:
diff -Nuar groff-1.22.3.old/contrib/mm/ChangeLog groff-1.22.3/contrib/mm/ChangeLog
--- groff-1.22.3.old/contrib/mm/ChangeLog	2014-11-04 10:38:35.487520722 +0200
+++ groff-1.22.3/contrib/mm/ChangeLog	2015-04-23 20:57:03.000000000 +0300
@@ -1,3 +1,9 @@
+Fri Apr  3 16:33:22 2015  Werner LEMBERG  <wl@gnu.org>
+
+	Make man pages work in compatibility mode.
+
+	* groff_mm.man, groff_mmse.man, mmroff.man: Do it.
+
 Wed Sep  3 21:29:00 2014  Bernd Warken  <groff-bernd.warken-72@web.de>
 
 	* all files in contrib/mm: Copying and Emacs setting.
diff -Nuar groff-1.22.3.old/contrib/mm/.gitignore groff-1.22.3/contrib/mm/.gitignore
--- groff-1.22.3.old/contrib/mm/.gitignore	1970-01-01 02:00:00.000000000 +0200
+++ groff-1.22.3/contrib/mm/.gitignore	2015-04-23 20:57:03.000000000 +0300
@@ -0,0 +1,4 @@
+groff_mm.n
+groff_mmse.n
+mmroff
+mmroff.n
diff -Nuar groff-1.22.3.old/contrib/mm/groff_mm.man groff-1.22.3/contrib/mm/groff_mm.man
--- groff-1.22.3.old/contrib/mm/groff_mm.man	2014-11-04 10:38:35.487520722 +0200
+++ groff-1.22.3/contrib/mm/groff_mm.man	2015-04-23 20:57:03.000000000 +0300
@@ -4,6 +4,10 @@
 groff_mm \- groff mm macros
 .
 .
+.do nr groff_C \n[.C]
+.cp 0
+.
+.
 .de co
 Copyright \[co] 1989-2014 Free Software Foundation, Inc.
 
@@ -3977,6 +3981,9 @@
 .au
 .
 .
+.cp \n[groff_C]
+.
+.
 .\" Local Variables:
 .\" mode: nroff
 .\" coding: latin-1
diff -Nuar groff-1.22.3.old/contrib/mm/groff_mmse.man groff-1.22.3/contrib/mm/groff_mmse.man
--- groff-1.22.3.old/contrib/mm/groff_mmse.man	2014-11-04 10:38:35.487520722 +0200
+++ groff-1.22.3/contrib/mm/groff_mmse.man	2015-04-23 20:57:03.000000000 +0300
@@ -4,6 +4,10 @@
 groff_mmse \- svenska mm makro f�r groff
 .
 .
+.do nr groff_C \n[.C]
+.cp 0
+.
+.
 .ig
 Copyright \[co] 1989-2014 Free Software Foundation, Inc.
 
@@ -157,6 +161,9 @@
 .br
 .BR groff_mm (@MAN7EXT@)
 .
+.cp \n[groff_C]
+.
+.
 .\" Local Variables:
 .\" coding: latin-1
 .\" mode: nroff
diff -Nuar groff-1.22.3.old/contrib/mm/Makefile.sub groff-1.22.3/contrib/mm/Makefile.sub
--- groff-1.22.3.old/contrib/mm/Makefile.sub	2014-11-04 10:38:35.488520709 +0200
+++ groff-1.22.3/contrib/mm/Makefile.sub	1970-01-01 02:00:00.000000000 +0200
@@ -1,95 +0,0 @@
-# Copyright 1991-2014  Free Software Foundation, Inc.
-#
-# This file is part of groff.
-#
-# groff is free software; you can redistribute it and/or modify it under
-# the terms of the GNU General Public License as published by the Free
-# Software Foundation, either version 3 of the License, or
-# (at your option) any later version.
-#
-# groff is distributed in the hope that it will be useful, but WITHOUT ANY
-# WARRANTY; without even the implied warranty of MERCHANTABILITY or
-# FITNESS FOR A PARTICULAR PURPOSE.  See the GNU General Public License
-# for more details.
-#
-# You should have received a copy of the GNU General Public License
-# along with this program. If not, see <http://www.gnu.org/licenses/>.
-#
-# Makefile.sub
-#
-#
-PROG=mmroff
-MAN1=\
-  mmroff.n
-MAN7=\
-  groff_mm.n \
-  groff_mmse.n
-FILES=0.MT 5.MT 4.MT ms.cov se_ms.cov
-# Local configuration files with default values.
-LOCALE=locale se_locale
-MOSTLYCLEANADD=temp
-RM=rm -f
-
-all: mmroff
-
-install_bin: install_mmroff
-
-install_data: install_m
-	-test -d $(DESTDIR)$(tmacdir)/mm \
-	  || $(mkinstalldirs) $(DESTDIR)$(tmacdir)/mm
-	for f in $(FILES); do \
-	  $(RM) $(DESTDIR)$(tmacdir)/mm/$$f; \
-	  $(INSTALL_DATA) $(srcdir)/mm/$$f $(DESTDIR)$(tmacdir)/mm/$$f; \
-	done
-	for f in $(LOCALE); do \
-	  test -f $(DESTDIR)$(tmacdir)/mm/$$f \
-	    || touch $(DESTDIR)$(tmacdir)/mm/$$f; \
-	done
-	$(INSTALL_DATA) $(srcdir)/refer-mm.tmac \
-	  $(DESTDIR)$(tmacdir)/refer-mm.tmac
-
-install_m:
-	-test -d $(DESTDIR)$(tmacdir) || $(mkinstalldirs) $(DESTDIR)$(tmacdir)
-	$(RM) $(DESTDIR)$(tmacdir)/tmac.$(tmac_m_prefix)m
-	$(RM) $(DESTDIR)$(tmacdir)/$(tmac_m_prefix)m.tmac
-	$(INSTALL_DATA) $(srcdir)/m.tmac \
-	  $(DESTDIR)$(tmacdir)/$(tmac_m_prefix)m.tmac
-	@sed -e "s;^.mso m.tmac;.mso $(tmac_m_prefix)m.tmac;g" \
-	  $(srcdir)/mse.tmac > $(DESTDIR)$(tmacdir)/$(tmac_m_prefix)mse.tmac
-	@sed -e "s;^.mso mse.tmac;.mso $(tmac_m_prefix)mse.tmac;g" \
-	  $(srcdir)/mmse.tmac > $(DESTDIR)$(tmacdir)/$(tmac_m_prefix)mmse.tmac
-	@sed -e "s;^.mso m.tmac;.mso $(tmac_m_prefix)m.tmac;g" \
-	  $(srcdir)/mm.tmac > $(DESTDIR)$(tmacdir)/$(tmac_m_prefix)mm.tmac
-
-install_mmroff: mmroff
-	-test -d $(DESTDIR)$(bindir) || $(mkinstalldirs) $(DESTDIR)$(bindir)
-	$(RM) $(DESTDIR)$(bindir)/mmroff
-	$(INSTALL_SCRIPT) mmroff $(DESTDIR)$(bindir)/mmroff
-
-mmroff: mmroff.pl
-	sed -e 's;/usr/bin/perl;$(PERL);' $(srcdir)/mmroff.pl >$@
-	chmod +x $@
-
-uninstall_sub:
-	-for f in $(FILES); do $(RM) $(DESTDIR)$(tmacdir)/mm/$$f; done
-	-for f in $(LOCALE); do \
-	  test -s $(DESTDIR)$(tmacdir)/mm/$$f \
-	    || $(RM) $(DESTDIR)$(tmacdir)/mm/$$f; \
-	done
-	$(RM) $(DESTDIR)$(tmacdir)/tmac.$(tmac_m_prefix)m
-	$(RM) $(DESTDIR)$(tmacdir)/$(tmac_m_prefix)m.tmac
-	$(RM) $(DESTDIR)$(tmacdir)/$(tmac_m_prefix)mm.tmac
-	$(RM) $(DESTDIR)$(tmacdir)/$(tmac_m_prefix)mse.tmac
-	$(RM) $(DESTDIR)$(tmacdir)/$(tmac_m_prefix)mmse.tmac
-	$(RM) $(DESTDIR)$(tmacdir)/refer-mm.tmac
-	-test -d $(DESTDIR)$(tmacdir)/mm && \
-	  rmdir $(DESTDIR)$(tmacdir)/mm
-	$(RM) $(DESTDIR)$(bindir)/mmroff
-
-########################################################################
-# Emacs settings
-########################################################################
-#
-# Local Variables:
-# mode: makefile
-# End:
diff -Nuar groff-1.22.3.old/contrib/mm/mm.am groff-1.22.3/contrib/mm/mm.am
--- groff-1.22.3.old/contrib/mm/mm.am	1970-01-01 02:00:00.000000000 +0200
+++ groff-1.22.3/contrib/mm/mm.am	2015-04-23 20:57:03.000000000 +0300
@@ -0,0 +1,106 @@
+# Copyright 1991-2014
+#   Free Software Foundation, Inc.
+#
+# This file is part of groff.
+#
+# groff is free software; you can redistribute it and/or modify it under
+# the terms of the GNU General Public License as published by the Free
+# Software Foundation, either version 3 of the License, or
+# (at your option) any later version.
+#
+# groff is distributed in the hope that it will be useful, but WITHOUT ANY
+# WARRANTY; without even the implied warranty of MERCHANTABILITY or
+# FITNESS FOR A PARTICULAR PURPOSE.  See the GNU General Public License
+# for more details.
+#
+# You should have received a copy of the GNU General Public License
+# along with this program. If not, see <http://www.gnu.org/licenses/>.
+#
+# mm.am
+#
+
+mm_srcdir = $(top_srcdir)/contrib/mm
+mm_builddir = $(top_builddir)/contrib/mm
+
+bin_SCRIPTS += mmroff
+
+man1_MANS += contrib/mm/mmroff.n
+man7_MANS += \
+  contrib/mm/groff_mm.n \
+  contrib/mm/groff_mmse.n
+
+# Files installed in $(tmacdir)/mm
+MMFILES = \
+  contrib/mm/mm/0.MT \
+  contrib/mm/mm/5.MT \
+  contrib/mm/mm/4.MT \
+  contrib/mm/mm/ms.cov \
+  contrib/mm/mm/se_ms.cov
+mmdir = $(tmacdir)/mm
+dist_mm_DATA = $(MMFILES)
+
+# Files installed in $(tmacdir)
+tmacmmdir = $(tmacdir)
+dist_tmacmm_DATA = contrib/mm/refer-mm.tmac
+
+# Local configuration files with default values.
+MMLOCALE = \
+  locale \
+  se_locale
+
+EXTRA_DIST += \
+  contrib/mm/ChangeLog \
+  contrib/mm/examples \
+  contrib/mm/Makefile.sim \
+  contrib/mm/mm \
+  contrib/mm/NOTES \
+  contrib/mm/README \
+  contrib/mm/groff_mm.man \
+  contrib/mm/groff_mmse.man \
+  contrib/mm/mmroff.man \
+  contrib/mm/mmroff.pl
+
+mmroff: $(mm_srcdir)/mmroff.pl
+	sed -e 's;/usr/bin/perl;$(PERL);' $(mm_srcdir)/mmroff.pl >$@
+	chmod +x $@
+
+# Special installation rules for m.tmac, mse.tmac, mmse.tmac, mm.tmac
+# and MMLOCALE
+install-data-local: install_mm
+install_mm:
+	-test -d $(DESTDIR)$(tmacdir) || $(mkinstalldirs) $(DESTDIR)$(tmacdir)
+	-test -d $(DESTDIR)$(mmdir) || $(mkinstalldirs) $(DESTDIR)$(mmdir)
+	$(RM) $(DESTDIR)$(tmacdir)/tmac.$(tmac_m_prefix)m
+	$(RM) $(DESTDIR)$(tmacdir)/$(tmac_m_prefix)m.tmac
+	$(INSTALL_DATA) $(mm_srcdir)/m.tmac \
+	  $(DESTDIR)$(tmacdir)/$(tmac_m_prefix)m.tmac
+	sed -e "s;^.mso m.tmac;.mso $(tmac_m_prefix)m.tmac;g" \
+	  $(mm_srcdir)/mse.tmac > $(DESTDIR)$(tmacdir)/$(tmac_m_prefix)mse.tmac
+	@sed -e "s;^.mso mse.tmac;.mso $(tmac_m_prefix)mse.tmac;g" \
+	  $(mm_srcdir)/mmse.tmac > $(DESTDIR)$(tmacdir)/$(tmac_m_prefix)mmse.tmac
+	@sed -e "s;^.mso m.tmac;.mso $(tmac_m_prefix)m.tmac;g" \
+	  $(mm_srcdir)/mm.tmac > $(DESTDIR)$(tmacdir)/$(tmac_m_prefix)mm.tmac
+	@for f in $(MMLOCALE); do \
+	  test -f $(DESTDIR)$(tmacdir)/mm/$$f \
+	    || touch $(DESTDIR)$(tmacdir)/mm/$$f; \
+	done
+uninstall-local: uninstall_mm
+uninstall_mm:
+	-for f in $(MMLOCALE); do \
+	  test -s $(DESTDIR)$(tmacdir)/mm/$$f \
+	    || $(RM) $(DESTDIR)$(tmacdir)/mm/$$f; \
+	done
+	$(RM) $(DESTDIR)$(tmacdir)/tmac.$(tmac_m_prefix)m
+	$(RM) $(DESTDIR)$(tmacdir)/$(tmac_m_prefix)m.tmac
+	$(RM) $(DESTDIR)$(tmacdir)/$(tmac_m_prefix)mm.tmac
+	$(RM) $(DESTDIR)$(tmacdir)/$(tmac_m_prefix)mse.tmac
+	$(RM) $(DESTDIR)$(tmacdir)/$(tmac_m_prefix)mmse.tmac
+	-rmdir $(DESTDIR)$(tmacdir)/mm
+
+# Special distribution rule: we copy all .tmac files from contrib/mm
+dist-hook: dist_mm
+dist_mm:
+	chmod u+w $(distdir)/contrib/mm/
+	for i in $(mm_srcdir)/*.tmac; do \
+	  cp -f $$i $(distdir)/contrib/mm/; \
+	done
diff -Nuar groff-1.22.3.old/contrib/mm/mmroff.man groff-1.22.3/contrib/mm/mmroff.man
--- groff-1.22.3.old/contrib/mm/mmroff.man	2014-11-04 10:38:35.488520709 +0200
+++ groff-1.22.3/contrib/mm/mmroff.man	2015-04-23 20:57:03.000000000 +0300
@@ -8,7 +8,7 @@
 .\" --------------------------------------------------------------------
 .
 .de co
-Copyright \[co] 1989-2014 Free Software Foundation, Inc.
+Copyright \(co 1989-2014 Free Software Foundation, Inc.
 
 Permission is granted to make and distribute verbatim copies of
 this manual provided the copyright notice and this permission notice
@@ -69,7 +69,7 @@
 .B \-x
 Just create the cross reference file.
 .
-This can be used to refresh the cross reference file, it isn\[aq]t
+This can be used to refresh the cross reference file, it isn\(aqt
 always needed to have accurate cross references and by using this
 option
 .B groff
diff -Nuar groff-1.22.3.old/contrib/mom/BUGS groff-1.22.3/contrib/mom/BUGS
--- groff-1.22.3.old/contrib/mom/BUGS	2014-11-04 10:38:35.502520534 +0200
+++ groff-1.22.3/contrib/mom/BUGS	2015-04-23 20:57:03.000000000 +0300
@@ -1,5 +1,5 @@
     -*- text -*-
-    Copyright 2004-2014  Free Software Foundation, Inc.
+    Copyright 2004-2015  Free Software Foundation, Inc.
 
     Copying and distribution of this file, with or without modification,
     are permitted in any medium without royalty provided the copyright
@@ -22,6 +22,40 @@
 
 ====================================================================
 
+Version 2.1
+===========
+PDF_IMAGE and FLOAT environments conflicting.
+---Fixed---
+
+DROPCAP picking up color from last call to .gcolor.
+---Fixed---
+
+PAD not working properly with mom's indent macros.
+---Fixed---
+
+Margin notes not respecting differing recto-verso margins.
+---Fixed---
+
+Graphical object macros not clearing fill/no-fill registers and
+modes.
+---Fixed---
+
+LIST ALPHA emitting a number register to output.
+---Fixed---
+
+HEADER_PLAIN and FOOTER_PLAIN broken.
+---Fixed---
+
+Version 2.0-c_1
+===============
+
+.TS with no H causing FN_OVERFLOW warning when there are footnotes
+on same page.
+---Fixed---
+
+PDF_TARGET "descriptive text" not printing.
+---Fixed---
+
 Version 2.0-c
 =============
 
diff -Nuar groff-1.22.3.old/contrib/mom/ChangeLog groff-1.22.3/contrib/mom/ChangeLog
--- groff-1.22.3.old/contrib/mom/ChangeLog	2014-11-04 10:38:35.502520534 +0200
+++ groff-1.22.3/contrib/mom/ChangeLog	2015-04-23 20:57:03.000000000 +0300
@@ -1,3 +1,54 @@
+* Fri Apr 4 2015
+
+	o groff_mom.man: Make it work in compatibility mode.
+
+* Sat Feb 28 2015
+
+	o Added an ADJUST argument to QUOTE and BLOCKQUOTE to facilitate
+		optical centering tweaks
+
+* Sat Feb 21 2015
+
+	o Expanded scope of _STYLE macros to headers/footers and
+		page numbers
+
+* Thu Feb 5 2015
+
+	o Version 2.1 release (see NEWS)
+
+	o overhaul of control macro handling
+
+	o overhaul of cover and docheader management 
+
+	o general code cleanup to remove redundancies and reduce size of
+		om.tmac
+
+	o changes to example files to demonstrate new features
+
+	o copyrights updated in all files
+
+* Tue Jan 14 2015
+
+	o Added a new example in French, mon_premier_doc.mom
+
+	o Added README-fr.txt, a translation in French of the README.txt file
+
+	o Makefile.sub: generation of mon_premier_doc.mom, installation of
+	  README-fr.txt
+
+* Sun Nov 30 2014
+
+	o Added auto underscoring, caps, and color to TOC header
+		(first-page titles)
+
+	o Added vertical page positioning control macros for TOC and
+		ENDNOTES headers (first-page titles)
+
+* Tue Nov 25 2014
+
+	o Tweak so collated, non-chapter docs with the same author
+		don't require .AUTHOR "" to skip printing author in docheader
+
 * Wed Oct 29 2014
 
 	o Makefile.sub: KFLAG to run pdfmom with -k
diff -Nuar groff-1.22.3.old/contrib/mom/copyright groff-1.22.3/contrib/mom/copyright
--- groff-1.22.3.old/contrib/mom/copyright	2014-11-04 10:38:35.502520534 +0200
+++ groff-1.22.3/contrib/mom/copyright	2015-04-23 20:57:03.000000000 +0300
@@ -9,7 +9,7 @@
 ========================================================================
 
 The groff macro file om.tmac and the html documentation pertaining to
-it are Copyright (C) 2004-2014 Peter Schaffter.
+it are Copyright (C) 2004-2015 Peter Schaffter.
 
 om.tmac is issued under the GNU General Public License, a full copy of
 which can be had at
diff -Nuar groff-1.22.3.old/contrib/mom/examples/.gitignore groff-1.22.3/contrib/mom/examples/.gitignore
--- groff-1.22.3.old/contrib/mom/examples/.gitignore	1970-01-01 02:00:00.000000000 +0200
+++ groff-1.22.3/contrib/mom/examples/.gitignore	2015-04-23 20:57:03.000000000 +0300
@@ -0,0 +1,2 @@
+*.ps
+stamp
\ Dosya sonunda yenisatır yok.
diff -Nuar groff-1.22.3.old/contrib/mom/examples/letter.mom groff-1.22.3/contrib/mom/examples/letter.mom
--- groff-1.22.3.old/contrib/mom/examples/letter.mom	2014-11-04 10:38:35.606519234 +0200
+++ groff-1.22.3/contrib/mom/examples/letter.mom	2015-04-23 20:57:03.000000000 +0300
@@ -1,6 +1,6 @@
 .\" -*- mode: troff; coding: utf-8; -*-
 .
-\# Copyright (C) 2004-2014  Free Software Foundation, Inc.
+\# Copyright (C) 2004-2015  Free Software Foundation, Inc.
 \#
 \# Copying and distribution of this file, with or without modification,
 \# are permitted in any medium without royalty provided the copyright
diff -Nuar groff-1.22.3.old/contrib/mom/examples/mom-pdf.mom groff-1.22.3/contrib/mom/examples/mom-pdf.mom
--- groff-1.22.3.old/contrib/mom/examples/mom-pdf.mom	2014-11-04 10:38:35.606519234 +0200
+++ groff-1.22.3/contrib/mom/examples/mom-pdf.mom	2015-04-23 20:57:03.000000000 +0300
@@ -1,5 +1,5 @@
 .\" -*- nroff -*-
-.\" Copyright (C) 2012-2014  Free Software Foundation, Inc.
+.\" Copyright (C) 2012-2015  Free Software Foundation, Inc.
 .\"
 .\" This file is part of mom, which is part of groff, a free software
 .\" project.
@@ -8,68 +8,92 @@
 .\" GNU General Public License as published by the "Free Software
  \" Foundation", version\~2.
 .\"
-.\" The license text is available in the internet at
+.\" The license text is available on the internet at
 .\" <http://www.gnu.org/licenses/gpl-2.0.html>
 .\"
-.PAPER	    A4
+.PAPER A4
 .\" Reference macros (metadata)
 .TITLE     "Producing PDFs" "with groff and mom"
 .PDF_TITLE "\*[$TITLE]
-.AUTHOR    "\v'-.5v'\*[UP 4p]Deri James" \
-           "\v'-.5v'\*[UP 8p]and" \
-           "\v'-.5v'\*[UP 11p]Peter Schaffter"
-.MISC      "This file is part of groff." \
-           ".sp .25v" \
-           "groff is free software; you can redistribute it" \
-           "and\*[FU3]/or modify it under the terms of the GNU" \
-           "General Public License as published by the" \
-           "Free Software Foundation, either version 3" \
-           "of the License, or (at your option) any later" \
-           "version." \
-           ".sp .25v" \
-           "You should have received a copy of the GNU" \
-           "General Public License along with this program." \
-           "If not, see:" \
-           ".sp .25v" \
-           ".IL 2P" \
-           ".PDF_WWW_LINK http://www.gnu.org/licenses/" \
-           ".IQ CLEAR"
-.COPYRIGHT "20\*[BU3]1\*[BU2]2 Free Software Foundation
+.COPYRIGHT "20\*[BU3]1\*[BU2]5 Free Software Foundation
+.AUTHOR "Deri James" "\*[UP .5p]and" "Peter Schaffter"
+.\" Cover author style
+.COVER_AUTHOR_STYLE \
+  LEAD 15 \
+  SPACE -.5v
+.\" Docheader author style
+.AUTHOR_STYLE \
+ LEAD 14 \
+ SPACE -.75
 .ATTRIBUTE_STRING ""  \" Don't print 'by'
+.\"
 .PDF_BOOKMARKS_OPEN 2
-.\" Cover and page header
-.COVER       TITLE AUTHOR COPYRIGHT MISC
-.HEADER_LEFT "James, Schaffter"
-.\" Page, style, formatting
+.\" Formatting style, margins
 .PRINTSTYLE TYPESET
 .L_MARGIN   2.5c
 .R_MARGIN   2.5c
 .B_MARGIN   2.5c
-.\"
+.\" General defaults
 .FAM      H
 .FT       R
 .PT_SIZE  10.5
 .AUTOLEAD 3
-.PARA_INDENT 0  \" Because we're spacing paragraphs.
+.PARA_INDENT 0  \" No indent because we're spacing paragraphs.
+.\" Copyright notice
+.COVERTEXT
+.SP .5v
+.QUAD CENTER
+.HY off
+.IB 8P
+This file is part of groff.
+.SP .5v
+Groff is free software.  You can redistribute it
+and\*[FU3]/or modify it under the terms of the GNU
+General Public License as published by the
+Free Software Foundation, either version 3
+of the License, or (at your option) any later
+version.
+.SP .5v
+You should have received a copy of the GNU
+General Public License along with this program.
+If not, see:
+.SP .25v
+.PDF_WWW_LINK http://www.gnu.org/licenses/
+.IQ CLEAR
+.HY
+.COVERTEXT end
+.\" Cover and page header
+.COVER TITLE AUTHOR COPYRIGHT COVERTEXT
+.HEADER_LEFT "James, Schaffter"
 .\"
 .COVER_LEAD     +3.5
 .DOCHEADER_LEAD +3.5
 .\" Color for code snippets
 .NEWCOLOUR dark-grey RGB #343434
 .\" Make QUOTE look like CODE
-.QUOTE_FAMILY C
-.QUOTE_FONT   B
-.QUOTE_SIZE   +1.5
-.QUOTE_COLOR  dark-grey
-.QUOTE_INDENT 9p
-.\"
-.CODE_FONT  B
-.CODE_SIZE  115
-.CODE_COLOR dark-grey
-.CONDENSE   87
-.\"
-.HEADING_STYLE 1 NUMBER FONT B SIZE +1 BASELINE_ADJUST \n[.v]/5
-.HEADING_STYLE 2 NUMBER FONT I SIZE +.25 BASELINE_ADJUST \n[.v]/5
+.QUOTE_STYLE \
+  FAMILY C \
+  FONT   B \
+  SIZE   +1.5 \
+  COLOR  dark-grey \
+  INDENT 9p
+.\"
+.CODE_STYLE \
+  FONT  B \
+  SIZE  115 \
+  COLOR dark-grey
+.CONDENSE 87 \" Condense percentage used in COD
+.\"
+.HEADING_STYLE 1 \
+  NUMBER \
+  FONT B \
+  SIZE +1 \
+  BASELINE_ADJUST \n[.v]/5
+.HEADING_STYLE 2 \
+  NUMBER \
+  FONT I \
+  SIZE +.25 \
+  BASELINE_ADJUST \n[.v]/5
 .\"
 .FOOTNOTE_SIZE -1
 .\" Character definitions for program names, opts, etc.
@@ -119,10 +143,11 @@
 .TOC_ENTRY_STYLE 2 FONT I
 .TOC_LEAD 14
 .\"
-.DOCHEADER_ADVANCE 5c \" Begin this distance down from top of page
+.DOCHEADER_ADVANCE 5c \" Begin docheader this distance down from top of page
 .\"
 .START
 .\"
+.SP .5c
 .HEADING 1 NAMED intro "Introduction"
 .PP
 .RW .12
@@ -198,6 +223,7 @@
 heading for use later on when linking to it (see
 .PDF_LINK internal SUFFIX ). +
 If headings are being numbered, the heading number is prepended.
+.NO_SHIM off
 .HEADING 2 NAMED target  "Creating destination points at arbitrary locations"
 .PP
 Any part of a document can be a link destination, not just headings.
@@ -209,6 +235,7 @@
 \*[cod]HEADING\*[codx], \*[cod]<id>\*[codx] is any unique name.
 \*[cod]<text>\*[codx] is optional. \*[cod]<id>\*[codx] can now be linked
 to from anywhere in the document.
+.sp 2.5p
 .HEADING 2 NAMED internal "Creating internal links"
 .PP
 Internal links are clickable text areas that allow you to jump to
@@ -529,7 +556,7 @@
 .PP
 Several features described in this manual are not available when
 using \[pdfmom] with the \[-Tps] option, or when using \[pdfroff], or
-\[groff]\~\[-Tps]\~\[-mpdfmark].
+\[groff]\~\[-Tps]\~\[-mpdfmark]:
 .SP .25v
 .QUAD LEFT
 .HYPHENATION off
diff -Nuar groff-1.22.3.old/contrib/mom/examples/mon_premier_doc.mom groff-1.22.3/contrib/mom/examples/mon_premier_doc.mom
--- groff-1.22.3.old/contrib/mom/examples/mon_premier_doc.mom	1970-01-01 02:00:00.000000000 +0200
+++ groff-1.22.3/contrib/mom/examples/mon_premier_doc.mom	2015-04-23 20:57:03.000000000 +0300
@@ -0,0 +1,133 @@
+.\" -*- mode: troff; coding: utf-8; -*-
+\# Copyright (C) 2015  Free Software Foundation, Inc.
+\#
+\# Copying and distribution of this file, with or without modification,
+\# are permitted in any medium without royalty provided the copyright
+\# notice and this notice are preserved.
+\#
+\# A very simple document with basic elements: headings, paragraphs,
+\# lists, table of contents and clickable links.
+\# 
+.TITLE "Mon Premier Document"
+.AUTHOR "Cicéron"
+.DOCTYPE    DEFAULT
+.PRINTSTYLE TYPESET
+.PAPER      A4
+.DOC_COVERTITLE "Mon Premier Document"
+.DOC_COVER DOC_COVERTITLE
+.COVER TITLE AUTHOR
+.ATTRIBUTE_STRING "par"
+.TOC_HEADER_STRING "Table des matières"
+.AUTO_RELOCATE_TOC
+.HEADING_STYLE 1 NUMBER
+.HEADING_STYLE 2 NUMBER
+.INDENT_FIRST_PARAS
+.START
+\#
+.HEADING 1 "Les différentes versions"
+Voir également le chapitre sur 
+.PDF_LINK evolution "les évolutions"
+possibles.
+.HEADING 2 "La version originale"
+.PP
+Lorem ipsum dolor sit amet, consectetur adipiscing elit. Sed non
+risus. Suspendisse lectus tortor, dignissim sit amet, adipiscing nec,
+ultricies sed, dolor. Cras elementum ultrices diam. Maecenas ligula
+massa, varius a, semper congue, euismod non, mi. Proin porttitor, orci
+nec nonummy molestie, enim est eleifend mi, non fermentum diam nisl
+sit amet erat. Duis semper. Duis arcu massa, scelerisque vitae,
+consequat in, pretium a, enim. Pellentesque congue. Ut in risus
+volutpat libero pharetra tempor. Cras vestibulum bibendum augue.
+Praesent egestas leo in pede. Praesent blandit odio eu enim.
+Pellentesque sed dui ut augue blandit sodales. Vestibulum ante ipsum
+primis in faucibus orci luctus et ultrices posuere cubilia Curae;
+Aliquam nibh. Mauris ac mauris sed pede pellentesque fermentum.
+Maecenas adipiscing ante non diam sodales hendrerit.
+.PP
+Lorem ipsum dolor sit amet, consectetur adipiscing elit. Sed non
+risus. Suspendisse lectus tortor, dignissim sit amet, adipiscing nec,
+ultricies sed, dolor. Cras elementum ultrices diam. Maecenas ligula
+massa, varius a, semper congue, euismod non, mi. Proin porttitor, orci
+nec nonummy molestie, enim est eleifend mi, non fermentum diam nisl
+sit amet erat. Duis semper. Duis arcu massa, scelerisque vitae,
+consequat in, pretium a, enim. Pellentesque congue. Ut in risus
+volutpat libero pharetra tempor. Cras vestibulum bibendum augue.
+Praesent egestas leo in pede. Praesent blandit odio eu enim.
+Pellentesque sed dui ut augue blandit sodales. Vestibulum ante ipsum
+primis in faucibus orci luctus et ultrices posuere cubilia Curae;
+Aliquam nibh. Mauris ac mauris sed pede pellentesque fermentum.
+Maecenas adipiscing ante non diam sodales hendrerit.
+.PP
+Lorem ipsum dolor sit amet, consectetur adipiscing elit. Sed non
+risus. Suspendisse lectus tortor, dignissim sit amet, adipiscing nec,
+ultricies sed, dolor. Cras elementum ultrices diam. Maecenas ligula
+massa, varius a, semper congue, euismod non, mi. Proin porttitor, orci
+nec nonummy molestie, enim est eleifend mi, non fermentum diam nisl
+sit amet erat. Duis semper. Duis arcu massa, scelerisque vitae,
+consequat in, pretium a, enim. Pellentesque congue. Ut in risus
+volutpat libero pharetra tempor. Cras vestibulum bibendum augue.
+Praesent egestas leo in pede. Praesent blandit odio eu enim.
+Pellentesque sed dui ut augue blandit sodales. Vestibulum ante ipsum
+primis in faucibus orci luctus et ultrices posuere cubilia Curae;
+Aliquam nibh. Mauris ac mauris sed pede pellentesque fermentum.
+Maecenas adipiscing ante non diam sodales hendrerit.
+\#
+.HEADING 2 "La version moderne"
+.PP
+Lorem ipsum dolor sit amet, consectetur adipiscing elit. Sed non
+risus. Suspendisse lectus tortor, dignissim sit amet, adipiscing nec,
+ultricies sed, dolor. Cras elementum ultrices diam. Maecenas ligula
+massa, varius a, semper congue, euismod non, mi. Proin porttitor, orci
+nec nonummy molestie, enim est eleifend mi, non fermentum diam nisl
+sit amet erat. Duis semper. Duis arcu massa, scelerisque vitae,
+consequat in, pretium a, enim. Pellentesque congue. Ut in risus
+volutpat libero pharetra tempor. Cras vestibulum bibendum augue.
+Praesent egestas leo in pede. Praesent blandit odio eu enim.
+Pellentesque sed dui ut augue blandit sodales. Vestibulum ante ipsum
+primis in faucibus orci luctus et ultrices posuere cubilia Curae;
+Aliquam nibh. Mauris ac mauris sed pede pellentesque fermentum.
+Maecenas adipiscing ante non diam sodales hendrerit.
+.PP
+Lorem ipsum dolor sit amet, consectetur adipiscing elit. Sed non
+risus. Suspendisse lectus tortor, dignissim sit amet, adipiscing nec,
+ultricies sed, dolor. Cras elementum ultrices diam. Maecenas ligula
+massa, varius a, semper congue, euismod non, mi. Proin porttitor, orci
+nec nonummy molestie, enim est eleifend mi, non fermentum diam nisl
+sit amet erat. Duis semper. Duis arcu massa, scelerisque vitae,
+consequat in, pretium a, enim. Pellentesque congue. Ut in risus
+volutpat libero pharetra tempor. Cras vestibulum bibendum augue.
+Praesent egestas leo in pede. Praesent blandit odio eu enim.
+Pellentesque sed dui ut augue blandit sodales. Vestibulum ante ipsum
+primis in faucibus orci luctus et ultrices posuere cubilia Curae;
+Aliquam nibh. Mauris ac mauris sed pede pellentesque fermentum.
+Maecenas adipiscing ante non diam sodales hendrerit.
+\#
+.HEADING 1 NAMED evolution "Les évolutions du Lorem"
+.PP
+Trois axes de progressions sont envisageables:
+.LIST
+.SHIFT_LIST 3m
+.ITEM
+Lorem ipsum dolor sit amet.
+.ITEM
+Consectetur adipiscing elit.
+.ITEM
+.PDF_TARGET sed_non_risus
+Sed non risus.
+.LIST OFF
+Lorem ipsum dolor sit amet, consectetur adipiscing elit. Sed non
+risus. Suspendisse lectus tortor, dignissim sit amet, adipiscing nec,
+ultricies sed, dolor. Cras elementum ultrices diam. Maecenas ligula
+massa, varius a, semper congue, euismod non, mi. Proin porttitor, orci
+nec nonummy molestie, enim est eleifend mi, non fermentum diam nisl
+sit amet erat. Duis semper. Duis arcu massa, scelerisque vitae,
+consequat in, pretium a, enim. Pellentesque congue. Ut in risus
+volutpat libero pharetra tempor. Cras vestibulum bibendum augue.
+Praesent egestas leo in pede. Praesent blandit odio eu enim.
+Pellentesque sed dui ut augue blandit sodales. Vestibulum ante ipsum
+primis in faucibus orci luctus et ultrices posuere cubilia Curae;
+Aliquam nibh. Mauris ac mauris sed pede pellentesque fermentum.
+Maecenas adipiscing ante non diam sodales hendrerit.
+\#
+.TOC_RV_SWITCH
+.TOC
diff -Nuar groff-1.22.3.old/contrib/mom/examples/README-fr.txt groff-1.22.3/contrib/mom/examples/README-fr.txt
--- groff-1.22.3.old/contrib/mom/examples/README-fr.txt	1970-01-01 02:00:00.000000000 +0200
+++ groff-1.22.3/contrib/mom/examples/README-fr.txt	2015-04-23 20:57:03.000000000 +0300
@@ -0,0 +1,111 @@
+     -*- mode: text; coding: utf-8; -*-
+    Copyright (C) 2014-2015  Free Software Foundation, Inc.
+
+    Copying and distribution of this file, with or without modification,
+    are permitted in any medium without royalty provided the copyright
+    notice and this notice are preserved.
+
+========================================================================
+
+Les fichiers dans ce répertoire vous permettent de voir mom en pleine
+action.
+
+Si vous avez téléchargé et décompressé une version de mom depuis sa
+page d'accueil, vous verrez qu'aucun exemple n'est accompagné du
+fichier PDF (.pdf) correspondant, comme c'est le cas sur les versions
+pré-compilées de groff, ou groff compilé à partir des sources.
+
+Je n'ai pas inclu les PDF parce que je voulais conserver l'archive mom
+aussi petite que possible. Pour générer les PDF, traitez les fichiers
+avec pdfmom(1).
+
+    pdfmom -k letter.mom > letter.pdf
+    pdfmom mom-pdf.mom > mom-pdf.pdf
+    pdfmom -k mon_premier_doc.mom > mon_premier_doc.pdf
+    pdfmom sample_docs.mom > sample_docs.pdf
+    pdfmom typesetting.mom > typesetting.pdf
+
+Les fichiers
+------------
+
+Tous les fichiers sont configurés pour le format lettre US, exceptés
+mom-pdf.mom et mon_premier_doc.mom, qui utilisent le format A4.
+
+***typesetting.mom**
+
+Le fichier typesetting.mom montre l'utilisation d'éléments de
+composition typographique: tabulations, tabulations intégrées dans des
+chaînes de caractères, remplissage de lignes, texte sur plusieurs
+colonnes et différents styles d'indentation; ainsi que certaines
+subtilités et réglages précis disponibles via des macros et des
+échappements en ligne ("inline escape", des commandes insérées
+directement dans le texte, par opposition aux macros).
+
+Comme ce fichier montre également l'utilisation d'une petite image au
+milieu d'un texte et que cette image est la mascotte favorite de tout
+le monde -- Tux, le fichier PDF de cette image, penguin.pdf, a été
+ajouté dans ce répertoire.
+
+***sample_docs.mom***
+
+Le fichier sample_docs.mom montre en exemple les trois styles de
+documents apportés par les macros de formattage de document de mom,
+ansi que l'utilisation de COLLATE. Il montre également certaines
+fonctionnalités PDF de mom dont l'écriture d'une ébauche de nouvelle
+ou des liens cliquables dans une table des matières.
+
+Le dernier exemple démontre, par un texte séparé en deux colonnes, la
+souplesse de mom pour la conception de document.
+
+Le PRINTSTYLE de ce fichier est TYPESET et vous donne une idée du
+comportement par défaut de mom pour la composition typographique de
+document.
+
+Si vous souhaitez voir comment mom traite le même fichier quand
+PRINTSTYLE est TYPEWRITE (c'est-à-dire dactylographié, avec espace
+double) remplacez .PRINTSTYLE TYPESET par .PRINTSTYLE TYPEWRITE au
+début du fichier.
+
+***letter.mom***
+
+Ceci est simplement l'exemple du tutorial de momdocs, prêt à être vu.
+
+***mon_premier_doc.mom***
+
+Le fichier mon_premier_doc.mom est un exemple simple en français
+montrant l'utilisation d'éléments de formattage courants: titres de
+section, paragraphes, listes, table des matières et liens PDF
+cliquables. Il doit être généré avec l'option -k du fait de la
+présence de caractères accentués.
+
+Un certain nombre de réglages ont également été changés pour ce
+document en français:  ATTRIBUTE_STRING est utilisé pour remplacer
+"by" par "par" en tête de document (là où le titre et l'auteur sont
+affichés). TOC_HEADER_STRING sert à modifier le titre de la table des
+matières en "Table des matières" plutôt que "Table of Content". Enfin,
+le paramètre de configuration INDENT_FIRST_PARAS est activé afin
+d'indenter le premier paragraphe de chaque section -- ceci est l'usage
+en typographie française.
+
+***mom-pdf.mom***
+
+Le manuel "Producing PDFs with mom and groff".
+
+***mom.vim***
+
+Les règles de coloration syntaxique vim sont baséés sur celles
+fournies par Christian V. J. Brüssow (cvjb@cvjb.de). Copiez le fichier
+mom.vim dans votre répertoire ~/.vim/syntax directory; ensuite,
+autorisez la coloration syntaxique si ce n'est pas encore le cas:
+
+  :syntax enable
+ou
+  :syntax on
+
+***elvis_syntax.new***
+
+Ceux qui utilisent elvis, le clone de vi, peuvent directement
+copier-coller le contenu de ce fichier dans leur elvis.syn. Tous les
+fichiers ayant l'extension .mom auront la coloration syntaxique.  Les
+règles dans elvis_syntax ne sont pas exhaustive, mais aideront
+beaucoup à rendre les fichiers mom plus lisibles.
diff -Nuar groff-1.22.3.old/contrib/mom/examples/README.txt groff-1.22.3/contrib/mom/examples/README.txt
--- groff-1.22.3.old/contrib/mom/examples/README.txt	2014-11-04 10:38:35.606519234 +0200
+++ groff-1.22.3/contrib/mom/examples/README.txt	2015-04-23 20:57:03.000000000 +0300
@@ -1,5 +1,5 @@
      -*- text -*-
-    Copyright (C) 2004-2014  Free Software Foundation, Inc.
+    Copyright (C) 2004-2015  Free Software Foundation, Inc.
 
     Copying and distribution of this file, with or without modification,
     are permitted in any medium without royalty provided the copyright
@@ -18,16 +18,17 @@
 archive as lean as possible.  To view the PDF output, process the
 files with pdfmom(1).
 
-    pdfmom letter.mom > letter.pdf
+    pdfmom -k letter.mom > letter.pdf
     pdfmom mom-pdf.mom > mom-pdf.pdf
+    pdfmom -k mon_premier_doc.mom > mon_premier_doc.pdf
     pdfmom sample_docs.mom > sample_docs.pdf
     pdfmom typesetting.mom > typesetting.pdf
 
 The files themselves
 --------------------
 
-All are set up for US letter papersize except mom-pdf.mom, which
-uses A4.
+All are set up for US letter papersize except mom-pdf.mom and
+mon_premier_doc.mom, which uses A4.
 
 ***typesetting.mom**
 
@@ -64,6 +65,21 @@
 This is just the tutorial example from the momdocs, ready for
 previewing.
 
+***mon_premier_doc.mom***
+
+The file, mon_premier_doc.mom, is a simple example in French showing
+the use of common elements: section headings, paragraphs, lists, table
+of contents and clickable links.  It should be generated with option -k
+as there are some accented letters.
+
+A few settings were also changed for this French document:
+ATTRIBUTE_STRING is used to replace "by" by "par" in the document
+header (where the title and the author are displayed).
+TOC_HEADER_STRING is used to modity the Table of Content title to
+"Table des mati�res". And finally, INDENT_FIRST_PARAS is used to
+indent the first paragraph of a section -- this is the usual
+convention in French typesetting.
+
 ***mom-pdf.mom***
 
 The manual, Producing PDFs with mom and groff.
diff -Nuar groff-1.22.3.old/contrib/mom/examples/sample_docs.mom groff-1.22.3/contrib/mom/examples/sample_docs.mom
--- groff-1.22.3.old/contrib/mom/examples/sample_docs.mom	2014-11-04 10:38:35.607519221 +0200
+++ groff-1.22.3/contrib/mom/examples/sample_docs.mom	2015-04-23 20:57:03.000000000 +0300
@@ -1,4 +1,4 @@
-\# Copyright (C) 2004-2014  Free Software Foundation, Inc.
+\# Copyright (C) 2004-2015  Free Software Foundation, Inc.
 \#
 \# Copying and distribution of this file, with or without modification,
 \# are permitted in any medium without royalty provided the copyright
@@ -31,43 +31,102 @@
 \# subheads and paraheads.  I've turned the feature on merely to
 \# demonstrate it.
 \#
-\# Reference macros (metadata)
+\# Information for the cover pages
+\#
+\# Title, subtitle and copyright for the document cover.
+\#
+.TITLE DOC_COVER \
+  "Sample mom Documents"
+.SUBTITLE DOC_COVER \
+  "Three types of mom documents" \
+  "assembled and collated" \
+  "by mom's author"
+.COPYRIGHT DOC_COVER \
+  "2015 Peter Schaffter"
+\#
+\# What appears in the pdf viewer's window title
+\#
+.PDF_TITLE "Sample mom documents"
+\#
+\# Reference macros (metadata) for the first section of the collated
+\# document.
 \#
 .TITLE     "Lake Attica's Shores"
 .SUBTITLE  "A Romance Novel"
 .AUTHOR    "Rosemary Winspeare"
-.COPYRIGHT "2004 Alma Podborski"
-.PDF_TITLE "Sample mom documents"
+.COPYRIGHT "2015 Alma Podborski"
+\#
+\# What to put on the cover for the whole document (in mom-speak,
+\# the "doc cover").  The title, subtitle, and author are what were
+\# given to TITLE DOC_COVER, SUBTITLE DOC_COVER, and COPYRIGHT
+\# DOC_COVER.
 \#
-\# Additional information, for the cover
+.DOC_COVER TITLE SUBTITLE COPYRIGHT
 \#
-.DOC_COVERTITLE "Sample mom Documents"
-.MISC "Three types of mom documents" "assembled and collated by mom's author"
+\# What to put on the first document's title page (in mom-speak, the
+\# "cover").  In this case, we're using the metadata from TITLE,
+\# SUBTITLE, AUTHOR and COPYRIGHT, which will also be used to
+\# generate the docheader (minus the copyright).
+\#
+.COVER TITLE AUTHOR DOCTYPE COPYRIGHT
 \#
 \# Docstyle macros (templates)
 \#
 .DOCTYPE    NAMED "Outline"
-.PRINTSTYLE TYPESET   \" Or TYPEWRITE to preview "typewritten, double-spaced"
+.PRINTSTYLE TYPESET
 .PAPER      LETTER
 \#
-\# What to put on the cover and first title page
+\# Here we style the covers a bit.
+\#
+.DOC_COVER_TITLE_STYLE \
+  SIZE +8 \
+  SMALLCAPS \
+  UNDERLINE 1 3p
+.DOC_COVER_SUBTITLE_STYLE \
+  FONT I \
+  SIZE +3 \
+  LEAD 18 \
+  SPACE .5v
+.DOC_COVER_COPYRIGHT_SIZE +.5
+\#
+.COVER_TITLE_SIZE +5
+.COVER_ATTRIBUTE_STYLE \
+  SIZE +2 \
+  SPACE .25v
+.COVER_AUTHOR_STYLE \
+  SIZE +2 \
+  LEAD 18
+.COVER_DOCTYPE_STYLE \
+  SIZE +4 \
+  UNDERLINE DOUBLE 1
+.COVER_COPYRIGHT_SIZE +.5
 \#
-.DOC_COVER DOC_COVERTITLE MISC 
-.COVER     TITLE AUTHOR DOCTYPE COPYRIGHT
+\# Here we style the docheader a bit.
 \#
-\# Style for nested heading levels
+.SUBTITLE_SPACE .25v
+.DOCTYPE_UNDERLINE 1 2p
+\#
+\# Styles for nested heading levels
 \#
 \# The first two instances of level-1 headings will be paragraph heads
 \# so we set the paragraph head style here, then change it when
 \# level-1 headings become main heads.
 \#
-.HEADING_STYLE 1 FONT BI SIZE +.25
-.HEADING_STYLE 2 FONT B SIZE +.5 BASELINE_ADJUST \n[.v]/8 \" ie 1/8 the leading
+.HEADING_STYLE 1 \
+  FONT BI \
+  SIZE +.75
+.HEADING_STYLE 2 \
+  FONT B \
+  SIZE +.5 \
+  BASELINE_ADJUST \n[.v]/8 \" ie 1/8 the leading
+\#
+.AUTO_RELOCATE_TOC \" Move table of contents to the top of the doc
+.SPACE_TOC_ITEMS   \" Prettify TOC spacing
 \#
-.AUTO_RELOCATE_TOC
-.SPACE_TOC_ITEMS
+\# Begin the document
 \#
 .START
+\#
 .PP
 .HEADING 1 PARAHEAD "A note on the setting"
 Lorem ipsum dolor sit amet, consetetur sadipscing elitr, sed diam
@@ -99,8 +158,15 @@
 \#
 \# Change level-1 style and add numbering to levels 1 and 2
 \#
-.HEADING_STYLE 1 FONT B SIZE +1.5 CAPS UNDERSCORE .5 2p QUAD C \
-  NO_SPACE_AFTER BASELINE_ADJUST +0 NUMBER
+.HEADING_STYLE 1 \
+  FONT B \
+  SIZE +1.5 \
+  CAPS \
+  UNDERSCORE .5 2p \
+  QUAD C \
+  NO_SPACE_AFTER \
+  BASELINE_ADJUST +0 \
+  NUMBER
 .HEADING_STYLE 2 NUMBER
 \#
 .HEADING 1 "Part One"
@@ -168,32 +234,30 @@
 .PP
 At vero eos et accusam et justo duo do\%lo\%res et ea rebum.  Stet clita
 kasd gubergren.  Sea takimata sanctus est lorem ipsum dolor
-sit amet.  Accusam et justo duo do\%lo\%res et ea rebum
-.SPREAD
+sit amet.  Accusam et justo duo do\%lo\%res et ea rebum.  Diam
+nonumy eirmod tempor invidunt ut labore et do\%lo\%re magna.
 .RIGHT
 \*[BD]\&...end of sample outline\c
 .EL
 .COLLATE
 \#
-\# The .EL after the line "...end of sample outline" ensures that
-\# mom doesn't spring the page trap, which would deposit a header at
-\# the top of the next page.  COLLATE doesn't print a page header
-\# on the first page of a collated document, but if the page trap
-\# has already deposited one there, COLLATE can't undo it.
-\#
-\# Normally, this isn't necessary; here we require it because the
-\# line falls right at the bottom of the page.
-\#
-\# Please notice, too, the use of "\&" before "..."  Whenever an
-\# input line begins with either a period, an apostrophe or a space,
-\# you must precede it with \&, otherwise the line will disappear,
-\# even when, as here, there's an inline escape that starts the
-\# line.
+\# The '\c /.EL' keeps mom from depositing a line break which,
+\# because "...end of sample outline" falls exactly on the last
+\# baseline of the page, would spring the page trap that sets a
+\# header at the top of the next page.  Since the next page is a
+\# title page, we don't want that.  Normally, this isn't required,
+\# although using it routinely before COLLATE is a good habit.
+\#
+\# Notice, too, the use of "\&" before "..."  Whenever an input line
+\# begins with either a period, an apostrophe or a space, you must
+\# precede it with \&, otherwise the line will disappear, even when,
+\# as here, there's an inline escape beforehand.
 \#
 \# =====================================================================
 \#
-\# Next, two pages of a chapter, set in DRAFT style, showing the use
-\# of the EPIGRAPH BLOCK macro and the QUOTE macro.
+\# Next, a document composed of two pages of a chapter, set in DRAFT
+\# style, showing the use of the EPIGRAPH BLOCK macro and the QUOTE
+\# macro.
 \#
 \# You'll notice that the starting page number of this "draft" is 1 (in
 \# roman numerals).  COPYSTYLE DRAFT always numbers the first page of a
@@ -214,10 +278,20 @@
 .EPIGRAPH_FONT I       \" Epigraphs are normally set in roman
 .DRAFT_WITH_PAGENUMBER \" Draft/revision info usually goes in the header
 \#
-.COVER_MISC_FAMILY H
-.COVER_MISC_QUAD  RIGHT
+\# Style the title page
+\#
+.COVER_CHAPTER_SIZE +3
+.COVER_CHAPTER_TITLE_STYLE \
+  SIZE +5 \
+  SPACE .25v
+.COVER_MISC_SIZE +.5
+\#
+\# What goes on the title page
+\#
 .COVER CHAPTER+TITLE MISC
 \#
+\# Begin the document
+\#
 .START
 .EPIGRAPH BLOCK
 Lorem ipsum dolor sit amet, consetetur sadipscing elitr, sed diam
@@ -225,7 +299,8 @@
 sed diam voluptua.
 .RIGHT
 \#
-\# If running PRINTSTYLE TYPEWRITE, add space before citation
+\# If running PRINTSTYLE TYPEWRITE, this adds space before
+\# attribution ("Joseph E. Blough")
 \#
 .if \n[#PRINT_STYLE]=1 .sp
 \#
@@ -317,24 +392,45 @@
 \# create a stylesheet, along with some of the control macros that
 \# can be used.
 \#
-.TITLE     "CONTROL EQUALS CHAOS"
+\# Style the title page
+\#
+.COVER_TITLE_CAPS
+.COVER_ATTRIBUTE_SPACE .5v
+.COVER_AUTHOR_STYLE \
+  SIZE    +1.5 \
+  LEAD 14 \
+  SPACE .25v
+.COVER_MISC_STYLE \
+  QUAD L \
+  SIZE +0
+.COVER_COPYRIGHT_SIZE +0
+\#
+\# What goes on the title page
+\#
+.COVER TITLE AUTHOR COPYRIGHT MISC
+\#
+.DOCTYPE    DEFAULT
+.COPYSTYLE  FINAL
+\#
+.TITLE     "Control Equals Chaos"
 .SUBTITLE  "\*[ALD1]The Psychological and Auditory \
 Impact of Serial vs. Aleatoric Music\*[RLD1]"
 .AUTHOR    "Joe Chang" "and" "Brad Hegel Connors"
-.COPYRIGHT "2004 J. Chang, B.H. Connors
-.MISC      "Submitted June 3, 2004" "\*[IT]Piano Quarterly\*[PREV]"
+.COPYRIGHT "2015 J. Chang, B.H. Connors
+.MISC      "Submitted June 3, 2015" "\*[IT]Piano Quarterly\*[PREV]"
 \#
-.DOCTYPE    DEFAULT
-.COPYSTYLE  FINAL
+\# Style the docheader
+\#
+.TITLE_CAPS
+.ATTRIBUTE_SPACE .33
+.AUTHOR_SIZE   +1
+.SUBTITLE_SIZE +2
 \#
 .L_MARGIN   6P
 .R_MARGIN   4P+6p
 .PT_SIZE    10
 .AUTOLEAD   1.5
 \#
-.AUTHOR_SIZE   +.5
-.SUBTITLE_SIZE +1
-\#
 .RECTO_VERSO
 .PAGENUM   1
 \#
@@ -350,27 +446,30 @@
 .if \n[#PRINT_STYLE]=2 \{\
 . PARA_INDENT  1P
 . QUOTE_INDENT 2
+. BLOCKQUOTE_INDENT 2
 .\}
 \#
-.HEADING_STYLE 1 QUAD L SIZE +0 NO_NUMBER NO_CAPS NO_UNDERSCORE \
-  NO_SPACE_AFTER BASELINE_ADJUST \n[.v]/8 \" ie 1/8 of the leading
+\# Style heading 1
 \#
-.BLOCKQUOTE_FAMILY   H
-.BLOCKQUOTE_SIZE     -2
-.BLOCKQUOTE_AUTOLEAD 2
-\#
-.COVERTITLE "\*[UP 3p]\E*[$TITLE]" \" Use $TITLE, but raise 3 points
-\#
-.COVER_LEAD           +2
-.COVER_AUTHOR_SIZE    +1.5
-.COVER_MISC_FAMILY    T
-.COVER_MISC_QUAD      L
-.COVER_MISC_SIZE      +0
-.COVER_COPYRIGHT_SIZE +0
+.HEADING_STYLE 1 \
+  QUAD L \
+  SIZE +0 \
+  NO_NUMBER \
+  NO_CAPS \
+  NO_UNDERSCORE \
+  NO_SPACE_AFTER \
+  BASELINE_ADJUST \n[.v]/8 \" ie 1/8 of the leading
+\#
+\# Style the blockquotes
+\#
+.BLOCKQUOTE_STYLE \
+  FAMILY   H \
+  SIZE     -2 \
+  AUTOLEAD 2
 \#
-.COVER COVERTITLE AUTHOR COPYRIGHT MISC
+.COLUMNS 2 1P+6p \" Set in two columns
 \#
-.COLUMNS 2 1P+6p
+\# Being the document
 \#
 .START
 .PP
@@ -384,6 +483,7 @@
 invidunt ut labore et do\%lo\%re magna ali\%quyam erat.  Sed diam voluptua
 at vero eos et accusam et justo.
 \#
+.if \n[#PRINT_STYLE]=2 .sp 1p \" A little tweak
 .BLOCKQUOTE
 Stet clita kasd gubergren, no sea takimata sanctus est lorem.
 Ipsum dolor sit amet, consetetur sadipscing elitr, sed diam nonumy
diff -Nuar groff-1.22.3.old/contrib/mom/examples/typesetting.mom groff-1.22.3/contrib/mom/examples/typesetting.mom
--- groff-1.22.3.old/contrib/mom/examples/typesetting.mom	2014-11-04 10:38:35.607519221 +0200
+++ groff-1.22.3/contrib/mom/examples/typesetting.mom	2015-04-23 20:57:03.000000000 +0300
@@ -310,7 +310,7 @@
 simple enumerated lists.  Nested lists are possible, as the example
 shows; however, the more complex the nesting, the wiser it becomes
 to use (string) tabs, as seen in Example 4.
-.RLD .25v                  \" Move upwards 1/2 linespace
+.RLD .5v                  \" Move upwards 1/2 linespace
 .DBX .5 0 \n[.l]u 2P+9p   \" Draw box; \n[.l]u means "the current line length"
 .IB 6p                    \" Indent from both left and right margins
 .ALD 14p
diff -Nuar groff-1.22.3.old/contrib/mom/.gitignore groff-1.22.3/contrib/mom/.gitignore
--- groff-1.22.3.old/contrib/mom/.gitignore	1970-01-01 02:00:00.000000000 +0200
+++ groff-1.22.3/contrib/mom/.gitignore	2015-04-23 20:57:03.000000000 +0300
@@ -0,0 +1,4 @@
+groff_mom.n
+penguin.ps
+stamp-strip
+om.tmac-s
diff -Nuar groff-1.22.3.old/contrib/mom/groff_mom.man groff-1.22.3/contrib/mom/groff_mom.man
--- groff-1.22.3.old/contrib/mom/groff_mom.man	2014-11-04 10:38:35.502520534 +0200
+++ groff-1.22.3/contrib/mom/groff_mom.man	2015-04-23 20:57:03.000000000 +0300
@@ -4,6 +4,11 @@
 .
 .\" The .SH was moved to this place in order to appease `apropos'.
 .
+.
+.do nr groff_mom_C \n[.C]
+.cp 0
+.
+.
 .\" --------------------------------------------------------------------
 .\" Legalese
 .\" --------------------------------------------------------------------
@@ -80,9 +85,6 @@
 ..
 .
 .
-.do nr groff_mom_C \n[.C]
-.cp 0
-.
 .de TQ
 .br
 .ns
diff -Nuar groff-1.22.3.old/contrib/mom/Makefile.sub groff-1.22.3/contrib/mom/Makefile.sub
--- groff-1.22.3.old/contrib/mom/Makefile.sub	2014-11-04 10:38:35.502520534 +0200
+++ groff-1.22.3/contrib/mom/Makefile.sub	1970-01-01 02:00:00.000000000 +0200
@@ -1,230 +0,0 @@
-# -*- makefile -*-
-# Copyright (C) 2002-2014  Free Software Foundation, Inc.
-#      Written by Werner Lemberg (wl@gnu.org)
-#
-# This file is part of groff.
-#
-# groff is free software; you can redistribute it and/or modify it under
-# the terms of the GNU General Public License as published by the Free
-# Software Foundation, either version 3 of the License, or
-# (at your option) any later version.
-#
-# groff is distributed in the hope that it will be useful, but WITHOUT ANY
-# WARRANTY; without even the implied warranty of MERCHANTABILITY or
-# FITNESS FOR A PARTICULAR PURPOSE.  See the GNU General Public License
-# for more details.
-#
-# You should have received a copy of the GNU General Public License
-# along with this program. If not, see <http://www.gnu.org/licenses/>.
-
-# These may be overridden if cross-compiling.
-GROFFBIN=$(top_builddir)/src/roff/groff/groff
-GROFF_BIN_PATH=`echo $(groff_bin_dirs) | sed -e 's|  *|$(SH_SEP)|g'`
-PDFMOMBIN=$(top_builddir)/src/devices/gropdf/pdfmom
-
-groff_bin_dirs=\
-  $(top_builddir)/src/roff/groff \
-  $(top_builddir)/src/roff/troff \
-  $(top_builddir)/src/devices/grops \
-  $(top_builddir)/src/devices/gropdf
-
-FFLAG=-F$(top_builddir)/font -F$(top_srcdir)/font
-TFLAG=-M$(top_builddir)/tmac -M$(top_srcdir)/tmac -M$(srcdir)
-KFLAG=-k
-
-GROFF=\
-  GROFF_COMMAND_PREFIX= \
-  GROFF_BIN_PATH="$(GROFF_BIN_PATH)" \
-  $(GROFFBIN) $(FFLAG) $(TFLAG)
-
-PDFMOM=\
-  GROFF_COMMAND_PREFIX= \
-  GROFF_BIN_PATH="$(GROFF_BIN_PATH)" \
-  PDFMOM_BIN_PATH="$(top_builddir)/src/devices/gropdf" \
-  $(PDFMOMBIN) $(FFLAG) $(TFLAG) $(KFLAG)
-
-MAN7=\
-  groff_mom.n
-
-NORMALFILES=\
-  mom.tmac
-
-# These files are processed with `strip.sed'.
-STRIPFILES=\
-  om.tmac
-
-HTMLDOCFILES=\
-  momdoc/stylesheet.css \
-  momdoc/appendices.html \
-  momdoc/color.html \
-  momdoc/cover.html \
-  momdoc/definitions.html \
-  momdoc/docelement.html \
-  momdoc/docprocessing.html \
-  momdoc/goodies.html \
-  momdoc/graphical.html \
-  momdoc/headfootpage.html \
-  momdoc/images.html \
-  momdoc/inlines.html \
-  momdoc/intro.html \
-  momdoc/letters.html \
-  momdoc/macrolist.html \
-  momdoc/rectoverso.html \
-  momdoc/refer.html \
-  momdoc/reserved.html \
-  momdoc/tables-of-contents.html \
-  momdoc/toc.html \
-  momdoc/typesetting.html \
-  momdoc/using.html \
-  momdoc/version-2.html
-
-EXAMPLEFILES=\
-  examples/letter.mom \
-  examples/mom-pdf.mom \
-  examples/sample_docs.mom \
-  examples/typesetting.mom \
-  examples/README.txt \
-  examples/elvis_syntax \
-  examples/elvis_syntax.new \
-  examples/penguin.ps \
-  examples/penguin.pdf \
-  examples/mom.vim
-
-PROCESSEDEXAMPLEFILES=\
-  examples/letter.pdf \
-  examples/mom-pdf.pdf \
-  examples/sample_docs.pdf \
-  examples/typesetting.pdf
-
-HTMLDOCFILES_=`echo $(HTMLDOCFILES) | sed 's|momdoc/||g'`
-EXAMPLEFILES_=`echo $(EXAMPLEFILES) | sed 's|examples/||g'`
-PROCESSEDEXAMPLEFILES_=`echo $(PROCESSEDEXAMPLEFILES) | sed 's|examples/||g'`
-PDFDOCFILE=mom-pdf.pdf
-
-MOSTLYCLEANADD=\
-  stamp-strip \
-  penguin.ps \
-  penguin.pdf \
-  $(PROCESSEDEXAMPLEFILES) \
-  examples/stamp \
-  om.tmac-s
-
-RM=rm -f
-
-#.SUFFIXES: .mom .ps
-#.mom.ps:
-#	$(GROFF) -Tps -mom $< >$@
-
-.SUFFIXES: .mom .pdf
-.mom.pdf:
-	LC_ALL=C $(PDFMOM) $< >$@
-
-all: stamp-strip $(make_pdfexamples)
-
-$(PROCESSEDEXAMPLEFILES): penguin.ps penguin.pdf examples/stamp
-
-pdfexamples: $(PROCESSEDEXAMPLEFILES)
-
-penguin.ps:
-	cp $(srcdir)/examples/penguin.ps .
-penguin.pdf:
-	cp $(srcdir)/examples/penguin.pdf .
-
-examples/stamp:
-	-test -d examples || $(mkinstalldirs) examples
-	touch $@
-
-install_data: install_always \
-	      $(make_install_pdfdoc) $(make_install_shipped_htmldoc) \
-	      $(make_install_examples)
-
-install_always: stamp-strip $(NORMALFILES)
-	-test -d $(DESTDIR)$(tmacdir) || $(mkinstalldirs) $(DESTDIR)$(tmacdir)
-	for f in $(NORMALFILES); do \
-	  $(RM) $(DESTDIR)$(tmacdir)/$$f; \
-	  $(INSTALL_DATA) $(srcdir)/$$f $(DESTDIR)$(tmacdir)/$$f; \
-	done
-	for f in $(STRIPFILES); do \
-	  $(RM) $(DESTDIR)$(tmacdir)/$$f; \
-	  $(INSTALL_DATA) $$f-s $(DESTDIR)$(tmacdir)/$$f; \
-	done
-
-install_pdfdoc:
-# Since this uses examples/, it's in install_pdfexamples
-
-install_shipped_htmldoc: install_always $(HTMLDOCFILES)
-	-test -d $(DESTDIR)$(htmldocdir)/mom \
-	  || $(mkinstalldirs) $(DESTDIR)$(htmldocdir)/mom
-	for f in $(HTMLDOCFILES_); do \
-	  $(RM) $(DESTDIR)$(htmldocdir)/mom/$$f; \
-	  $(INSTALL_DATA) $(srcdir)/momdoc/$$f \
-	    $(DESTDIR)$(htmldocdir)/mom/$$f; \
-	done
-
-
-install_examples: install_examples_always $(make_install_pdfexamples)
-
-install_examples_always: $(EXAMPLEFILES)
-	-test -d $(DESTDIR)$(exampledir)/mom \
-	  || $(mkinstalldirs) $(DESTDIR)$(exampledir)/mom
-	for f in $(EXAMPLEFILES_); do \
-	  $(RM) $(DESTDIR)$(exampledir)/mom/$$f; \
-	  $(INSTALL_DATA) $(srcdir)/examples/$$f \
-	    $(DESTDIR)$(exampledir)/mom/$$f; \
-	done
-
-install_pdfexamples: install_examples_always $(PROCESSEDEXAMPLEFILES)
-	for f in $(PROCESSEDEXAMPLEFILES_); do \
-	  $(RM) $(DESTDIR)$(exampledir)/mom/$$f; \
-	  $(INSTALL_DATA) examples/$$f $(DESTDIR)$(exampledir)/mom/$$f; \
-	done
-	-test -d $(DESTDIR)$(pdfdocdir) \
-	  || $(mkinstalldirs) $(DESTDIR)$(pdfdocdir)
-	for f in $(PDFDOCFILE); do \
-	  $(RM) $(DESTDIR)$(pdfdocdir)/$$f; \
-	  ln -s $(exampledir)/mom/$$f $(DESTDIR)$(pdfdocdir)/$$f; \
-	done
-
-stamp-strip: $(STRIPFILES)
-	for f in $(STRIPFILES); do \
-	  $(RM) $$f-s; \
-	  LANG=C LC_ALL=C \
-	    sed -f $(top_srcdir)/tmac/strip.sed $(srcdir)/$$f >$$f-s; \
-	done
-	touch $@
-
-uninstall_sub: uninstall_always \
-		$(make_uninstall_pdfdoc) $(make_uninstall_shipped_htmldoc) \
-		$(make_uninstall_examples)
-
-uninstall_always:
-	-for f in $(NORMALFILES) $(STRIPFILES); do \
-	  $(RM) $(DESTDIR)$(tmacdir)/$$f; \
-	done
-
-uninstall_pdfdoc: uninstall_always
-# Since that used examples/, it's in uninstall_pdfexamples
-
-uninstall_shipped_htmldoc: uninstall_always
-	-for f in $(HTMLDOCFILES_); do \
-	  $(RM) $(DESTDIR)$(htmldocdir)/mom/$$f; \
-	done
-	-test -d $(DESTDIR)$(htmldocdir)/mom && \
-	  rmdir $(DESTDIR)$(htmldocdir)/mom
-
-uninstall_examples: uninstall_examples_always $(make_uninstall_pdfexamples)
-	-test -d $(DESTDIR)$(exampledir)/mom && \
-	  rmdir $(DESTDIR)$(exampledir)/mom
-
-uninstall_examples_always:
-	-for f in $(EXAMPLEFILES_); do \
-	  $(RM) $(DESTDIR)$(exampledir)/mom/$$f; \
-	done
-
-uninstall_pdfexamples: uninstall_examples_always
-	-for f in $(PDFDOCFILE); do \
-	  $(RM) $(DESTDIR)$(pdfdocdir)/$$f; \
-	done
-	-for f in $(PROCESSEDEXAMPLEFILES_); do \
-	  $(RM) $(DESTDIR)$(exampledir)/mom/$$f; \
-	done
diff -Nuar groff-1.22.3.old/contrib/mom/mom.am groff-1.22.3/contrib/mom/mom.am
--- groff-1.22.3.old/contrib/mom/mom.am	1970-01-01 02:00:00.000000000 +0200
+++ groff-1.22.3/contrib/mom/mom.am	2015-04-23 20:57:03.000000000 +0300
@@ -0,0 +1,168 @@
+# Copyright (C) 2002-2014
+#   Free Software Foundation, Inc.
+#      Written by Werner Lemberg (wl@gnu.org)
+#      Automake migration by Bertrand Garrigues
+#
+# This file is part of groff.
+#
+# groff is free software; you can redistribute it and/or modify it under
+# the terms of the GNU General Public License as published by the Free
+# Software Foundation, either version 3 of the License, or
+# (at your option) any later version.
+#
+# groff is distributed in the hope that it will be useful, but WITHOUT ANY
+# WARRANTY; without even the implied warranty of MERCHANTABILITY or
+# FITNESS FOR A PARTICULAR PURPOSE.  See the GNU General Public License
+# for more details.
+#
+# You should have received a copy of the GNU General Public License
+# along with this program. If not, see <http://www.gnu.org/licenses/>.
+
+mom_srcdir = $(top_srcdir)/contrib/mom
+mom_builddir = $(top_builddir)/contrib/mom
+
+# pdfmom command used to generated .pdf
+MOM_TFLAG = -M$(mom_srcdir) -M$(mom_builddir)
+MOM_KFLAG = -k
+MOMPDFMOM = \
+  GROFF_COMMAND_PREFIX= \
+  GROFF_BIN_PATH="$(GROFF_BIN_PATH)" \
+  PDFMOM_BIN_PATH="$(top_builddir)" \
+  $(PDFMOMBIN) $(FFLAG) $(TFLAG) $(MOM_TFLAG) $(MOM_KFLAG)
+
+man7_MANS += contrib/mom/groff_mom.n
+
+# Files installed in $(tmacdir).
+# MOMNORMALFILES are located in the source tree.
+# om.tmac is generated in the build tree from the unstripped file om.tmac-u with
+#  strip.sed
+MOMNORMALFILES = \
+  contrib/mom/mom.tmac
+MOMSTRIPFILES = \
+  contrib/mom/om.tmac
+momtmacdir = $(tmacdir)
+nodist_momtmac_DATA = $(MOMSTRIPFILES)
+dist_momtmac_DATA = $(MOMNORMALFILES)
+
+# Files installed in htmldocdir/mom
+if INSTALL_SHIPPED_HTML
+MOMHTMLDOCFILES=\
+  contrib/mom/momdoc/stylesheet.css \
+  contrib/mom/momdoc/appendices.html \
+  contrib/mom/momdoc/color.html \
+  contrib/mom/momdoc/cover.html \
+  contrib/mom/momdoc/definitions.html \
+  contrib/mom/momdoc/docelement.html \
+  contrib/mom/momdoc/docprocessing.html \
+  contrib/mom/momdoc/goodies.html \
+  contrib/mom/momdoc/graphical.html \
+  contrib/mom/momdoc/headfootpage.html \
+  contrib/mom/momdoc/images.html \
+  contrib/mom/momdoc/inlines.html \
+  contrib/mom/momdoc/intro.html \
+  contrib/mom/momdoc/letters.html \
+  contrib/mom/momdoc/macrolist.html \
+  contrib/mom/momdoc/rectoverso.html \
+  contrib/mom/momdoc/refer.html \
+  contrib/mom/momdoc/reserved.html \
+  contrib/mom/momdoc/tables-of-contents.html \
+  contrib/mom/momdoc/toc.html \
+  contrib/mom/momdoc/typesetting.html \
+  contrib/mom/momdoc/using.html \
+  contrib/mom/momdoc/version-2.html
+momhtmldir = $(htmldocdir)/mom
+momhtml_DATA = $(MOMHTMLDOCFILES)
+endif
+
+# Files installed in $(examplesdir)/mom.  MOMEXAMPLEFILES are located
+# in the source tree, while MOMPROCESSEDEXAMPLEFILES are generated in
+# the build tree.
+MOMEXAMPLEFILES=\
+  contrib/mom/examples/letter.mom \
+  contrib/mom/examples/mom-pdf.mom \
+  contrib/mom/examples/mon_premier_doc.mom \
+  contrib/mom/examples/sample_docs.mom \
+  contrib/mom/examples/typesetting.mom \
+  contrib/mom/examples/README.txt \
+  contrib/mom/examples/README-fr.txt \
+  contrib/mom/examples/elvis_syntax \
+  contrib/mom/examples/elvis_syntax.new \
+  contrib/mom/examples/penguin.ps \
+  contrib/mom/examples/penguin.pdf \
+  contrib/mom/examples/mom.vim
+if BUILD_EXAMPLES
+momexampledir = $(exampledir)/mom
+dist_momexample_DATA = $(MOMEXAMPLEFILES)
+else
+EXTRA_DIST += $(MOMEXAMPLEFILES)
+endif
+
+if BUILD_PDFEXAMPLES
+MOMPROCESSEDEXAMPLEFILES = \
+  contrib/mom/examples/letter.pdf \
+  contrib/mom/examples/mom-pdf.pdf \
+  contrib/mom/examples/mon_premier_doc.pdf \
+  contrib/mom/examples/sample_docs.pdf \
+  contrib/mom/examples/typesetting.pdf
+momprocessedexampledir = $(exampledir)/mom
+nodist_momprocessedexample_DATA = $(MOMPROCESSEDEXAMPLEFILES)
+endif
+
+# For this list of files we add a symlink from $(exampledir)/mom to $(pdfdocdir)
+PDFDOCFILE = mom-pdf.pdf
+
+EXTRA_DIST += $(MOMHTMLDOCFILES) $(MOMEXAMPLEFILES) \
+  contrib/mom/BUGS \
+  contrib/mom/ChangeLog \
+  contrib/mom/NEWS \
+  contrib/mom/TODO \
+  contrib/mom/copyright \
+  contrib/mom/groff_mom.man \
+  contrib/mom/om.tmac-u
+
+MOSTLYCLEANFILES += \
+  $(MOMPROCESSEDEXAMPLEFILES) \
+  contrib/mom/om.tmac \
+  penguin.ps \
+  penguin.pdf
+
+# Rule to generated .pdf files from .mom files
+SUFFIXES += .mom .pdf
+.mom.pdf:
+	@$(MKDIR_P) `dirname $@`
+	LC_ALL=C $(MOMPDFMOM) $< >$@
+
+$(MOMPROCESSEDEXAMPLEFILES): $(MOMSTRIPFILES) $(MOMNORMALFILES) \
+  groff troff gropdf pdfmom penguin.ps penguin.pdf \
+  gnu.eps font/devpdf/build_font_files
+
+penguin.ps:
+	cp $(mom_srcdir)/examples/penguin.ps $@
+penguin.pdf:
+	cp $(mom_srcdir)/examples/penguin.pdf $@
+
+$(MOMSTRIPFILES): $(top_srcdir)/tmac/strip.sed
+	@$(MKDIR_P) `dirname $@`
+	LANG=C LC_ALL=C \
+	sed -f $(top_srcdir)/tmac/strip.sed $(mom_srcdir)/`basename $@`-u > $@;
+
+install-data-hook: install_mom
+install_mom:
+if BUILD_PDFEXAMPLES
+	for f in $(PDFDOCFILE); do \
+	  $(RM) $(DESTDIR)$(pdfdocdir)/$$f; \
+	  ln -s $(exampledir)/mom/$$f $(DESTDIR)$(pdfdocdir)/$$f; \
+	done
+endif
+
+uninstall_groffdirs: uninstall_mom
+uninstall_mom:
+	for f in $(PDFDOCFILE); do \
+	  $(RM) $(DESTDIR)$(pdfdocdir)/$$f; \
+	done
+	if test -d $(DESTDIR)$(exampledir)/mom; then \
+	  rmdir $(DESTDIR)$(exampledir)/mom; \
+	fi
+	if test -d $(DESTDIR)$(htmldocdir)/mom; then \
+	  rmdir $(DESTDIR)$(htmldocdir)/mom; \
+	fi
diff -Nuar groff-1.22.3.old/contrib/mom/momdoc/appendices.html groff-1.22.3/contrib/mom/momdoc/appendices.html
--- groff-1.22.3.old/contrib/mom/momdoc/appendices.html	2014-11-04 10:38:35.612519159 +0200
+++ groff-1.22.3/contrib/mom/momdoc/appendices.html	2015-04-23 20:57:03.000000000 +0300
@@ -2,7 +2,7 @@
 <!--
 This file is part of groff, the GNU roff type-setting system.
 
-Copyright (C) 2004-2014  Free Software Foundation, Inc.
+Copyright (C) 2004-2015  Free Software Foundation, Inc.
 Written by Peter Schaffter (peter@schaffter.ca).
 
 Permission is granted to copy, distribute and/or modify this document
diff -Nuar groff-1.22.3.old/contrib/mom/momdoc/color.html groff-1.22.3/contrib/mom/momdoc/color.html
--- groff-1.22.3.old/contrib/mom/momdoc/color.html	2014-11-04 10:38:35.612519159 +0200
+++ groff-1.22.3/contrib/mom/momdoc/color.html	2015-04-23 20:57:03.000000000 +0300
@@ -2,7 +2,7 @@
 <!--
 This file is part of groff, the GNU roff type-setting system.
 
-Copyright (C) 2004-2014  Free Software Foundation, Inc.
+Copyright (C) 2004-2015  Free Software Foundation, Inc.
 Written by Peter Schaffter (peter@schaffter.ca).
 
 Permission is granted to copy, distribute and/or modify this document
diff -Nuar groff-1.22.3.old/contrib/mom/momdoc/cover.html groff-1.22.3/contrib/mom/momdoc/cover.html
--- groff-1.22.3.old/contrib/mom/momdoc/cover.html	2014-11-04 10:38:35.612519159 +0200
+++ groff-1.22.3/contrib/mom/momdoc/cover.html	2015-04-23 20:57:03.000000000 +0300
@@ -2,7 +2,7 @@
 <!--
 This file is part of groff, the GNU roff type-setting system.
 
-Copyright (C) 2004-2014  Free Software Foundation, Inc.
+Copyright (C) 2004-2015  Free Software Foundation, Inc.
 Written by Peter Schaffter (peter@schaffter.ca).
 
 Permission is granted to copy, distribute and/or modify this document
@@ -40,28 +40,42 @@
 
 <h1 class="docs">Creating cover pages</h1>
 
-<div style="width: 63%; margin: auto;">
+<div style="width: 66%; margin: auto;">
 <ul class="no-enumerator">
   <li><a href="#cover-intro">Introduction to cover pages</a>
   <ul style="margin-left: -.5em; list-style-type: disc;">
     <li><a href="#important-note">Important note</a></li>
     <li><a href="#desc">Description of cover pages</a></li>
-    <li><a href="#pagination">Headers/footers/pagination and cover pages</a></li>
+    <li><a href="#pagination">Headers/footers/pagination</a>
+      <ul style="margin-left: -1.25em; list-style-type: circle;">
+        <li><a href="#pagination">DOC_COVERS_COUNT_PAGES</a></li>
+        <li><a href="#pagination">COVERS_COUNT_PAGES</a></li>
+      </ul>
+    </li>
     <li><a href="#design">Designing your own cover pages</a></li>
+    <li><a href="#persistence">Persistence of data and formatting</a></li>
   </ul></li>
-  <li><a href="#index-covers">Cover and document cover macros</a>
+  <li><a href="#index-covers">Doc-cover and cover macros</a>
   <ul style="margin-left: -.5em; list-style-type: disc;">
-    <li><a href="#cover">COVER / DOC_COVER</a>
-    <ul style="margin-left: -.5em; list-style-type: circle;">
-      <li><a href="#required-arg">The required argument</a></li>
+    <li><a href="#cover">DOC_COVER / COVER</a>
+    <ul style="margin-left: -1.25em; list-style-type: circle;">
+      <li><a href="#cover-args">The argument list: saying what goes on doc-cover and cover pages</a></li>
+      <li><a href="#meanings">What the arguments mean</a></li>
       <li><a href="#chapter">How the CHAPTER argument and friends work</a></li>
-      <li><a href="#optional-args">The optional arguments</a></li>
-      <li><a href="#doctype">What the DOCTYPE argument means</a></li>
-      <li><a href="#blankpage">What the BLANKPAGE argument means</a></li>
     </ul></li>
+    <li><a href="#covertext">DOC_COVERTEXT / COVERTEXT</a>
+      <ul style="margin-left: -1.25em; list-style-type: circle;">
+        <li><a href="#placement">Placement</a></li>
+      </ul>
+    </li>
+    <li><a href="#coverimage">DOC_COVER_IMAGE / COVER_IMAGE</a>
+      <ul style="margin-left: -1.25em; list-style-type: circle;">
+        <li><a href="#positioning">Positioning of doc-cover and cover images</a></li>
+      </ul>
+    </li>
   </ul></li>
   <li><a href="#on-off">Enabling/disabling automatic generation of cover pages</a></li>
-  <li><a href="#cover-control">Control macros for covers and doc covers</a></li>
+  <li><a href="#cover-control">Control macros for covers and doc-covers</a></li>
 </ul>
 </div>
 
@@ -71,15 +85,15 @@
 
 <p>
 Though identical in treatment, mom provides two kinds of cover
-pages: document cover pages (&#8221;doc covers&#8221;), and section
+pages: document cover pages (&#8221;doc-covers&#8221;), and section
 cover pages (which I shall refer to simply as cover pages).
 </p>
 
 <p>
-A doc cover is what you&#8217;d most likely use at the start of a
+A doc-cover is what you&#8217;d most likely use at the start of a
 collated document, where you might want the name of the complete
 document, the author(s) and the copyright line to appear.  Another
-place you might use a doc cover is for a novel, where you want the
+place you might use a doc-cover is for a novel, where you want the
 title of the novel, not the chapter title or chapter number, as the
 first cover page.
 </p>
@@ -87,26 +101,26 @@
 <p>
 A cover is what you&#8217;d use for pages that separate sections
 of a collated document, ie title pages.  A cover page (but not a
-doc cover) in a collated document could, for example, simply read:
+doc-cover) in a collated document could, for example, simply read:
 &#8221;PART 1&#8221;.
 </p>
 
 <p>
 In non-collated documents (say, an essay) you can use either a cover
-or doc cover to generate the cover sheet.
+or doc-cover to generate the cover sheet.
 </p>
 
 <p>
-In addition, nothing prevents you from generating both a doc cover
+In addition, nothing prevents you from generating both a doc-cover
 and a cover for every document in a collated document.  Or you can
-selectively disable the automatic generation of either doc covers or
+selectively disable the automatic generation of either doc-covers or
 covers in a collated document on-the-fly.
 </p>
 
 <div id="important-note" class="box-important">
 <p class="tip">
 <span class="important">Important note:</span>
-Automatic generation of covers or doc covers after the first one(s)
+Automatic generation of covers or doc-covers after the first one(s)
 only takes place if you are working with collated documents.  Mom
 provides no mechanism for saying &#8221;print a section cover
 here even though I'm still working on the same (non-collated)
@@ -117,7 +131,7 @@
 <h3 id="desc" class="docs">Description of cover pages</h3>
 
 <p>
-By default, mom typesets covers and doc covers  identically to
+By default, mom typesets covers and doc-covers  identically to
 <a href="definitions.html#docheader">docheaders</a>
 (see
 <a href="docprocessing.html#docheader-control">How to change the look of docheaders</a>
@@ -127,28 +141,32 @@
 <ul style="margin-top: -.5em;  margin-bottom: -.5em;">
   <li>the position on the page where the information is output</li>
   <li>the (optional) addition of copyright and miscellaneous information</li>
-  <li>there&#8217;s no running text underneath</li>
+  <li>there&#8217;s no running text underneath, although you can add text
+      to a cover or doc-cover (for example, an Abstract) with
+      <a href="#covertext">COVERTEXT</a>
+   </li>
 </ul>
 
 <p>
 You tell mom what you want to appear on cover pages through the
 arguments you pass to
-<a href="#cover">COVER</a>
+<a href="#cover">DOC_COVER</a>
 and/or
-<a href="#cover">DOC_COVER</a>.
+<a href="#cover">COVER</a>.
 Provided you have already given mom the appropriate reference macros
 (eg
 <a href="docprocessing.html#title">TITLE</a>
 or
 <a href="docprocessing.html#author">AUTHOR</a>),
-she will output covers and doc covers identically to how she
+she will output covers and doc-covers identically to how she
 would output docheaders containing the same information.
 </p>
 
 <p>
-By default, mom starts covers and doc covers one-third of the way
+By default, mom starts covers and doc-covers one-third of the way
 down the page.  This can be changed through the use of the control
-macros COVER_ADVANCE / DOC_COVER_ADVANCE.
+macros DOC_COVER_START_POS / COVER_START_POS (or DOC_COVER_ADVANCE /
+COVER_ADVANCE).
 </p>
 
 <p>
@@ -157,7 +175,7 @@
 <a href="docprocessing.html#copyright">COPYRIGHT</a>),
 she sets it, by default, in a smaller
 <a href="definitions.html#ps">point size</a>
-in the bottom right hand corner of the cover or doc cover.  The
+in the bottom right hand corner of the cover or doc-cover.  The
 position, as well as all of the standard typesetting parameters, can be
 altered via control macros.
 </p>
@@ -167,11 +185,11 @@
 already given mom the reference macro,
 <a href="docprocessing.html#misc">MISC</a>),
 she sets it, by default, in a smaller point size in the bottom left
-hand corner of the cover or doc cover.  As with the copyright, the
+hand corner of the cover or doc-cover.  As with the copyright, the
 position and type specs can be altered via control macros.
 </p>
 
-<h3 id="pagination" class="docs">Headers/footers/pagination and cover pages</h3>
+<h3 id="pagination" class="docs">Headers/footers/pagination</h3>
 
 <p>
 Mom does not set any
@@ -179,81 +197,75 @@
 or
 <a href="definitions.html#footer">footers</a>
 on cover pages.  Neither does she set any page numbers.  From
-the point of view of pagination, covers and doc covers are by
+the point of view of pagination, covers and doc-covers are by
 default considered &#8221;null&#8221; pages.  If you wish them to
 be included in the pagination scheme (even though no page numbers
-appear), you must tell mom that&#8217;s what you want with the
-macros DOC_COVERS_COUNT_PAGES and/or COVERS_COUNT_PAGES.
+appear), you must tell mom that&#8217;s what you want by invoking
+<br/>
+<span class="pre-in-pp">
+  .DOC_COVERS_COUNT_PAGES
+</span>
+or
+<br/>
+<span class="pre-in-pp">
+  .COVERS_COUNT_PAGES
+</span>
 </p>
 
 <h3 id="design" class="docs">Designing your own cover pages</h3>
 
 <p>
 Finally, if you want to design your own cover page(s), you can
-always typeset them (using the
-<a href="typesetting.html#macros-typesetting">typesetting macros</a>),
-invoke
-<a href="typesetting.html#newpage"><kbd>.NEWPAGE</kbd></a>,
-set up your document (see
-<a href="docprocessing.html#docprocessing-tut">Tutorial &ndash; Setting up a mom document</a>),
-and lastly invoke
-<a href="docprocessing.html#start"><kbd>.START</kbd></a>.
-The cover page, and any typesetting commands on it, will have no
-effect on mom&#8217;s processing of the document after you invoke
-<kbd><a href="docprocessing.html#START">.START</a></kbd>.
+typeset them by hand inside a
+<a href="#covertext">COVERTEXT</a>
+block using mom&#8217;s typesetting macros to format the text.
+</p>
+
+<h3 id="persistence" class="docs">Persistence of data and formatting</h3>
+
+<p>
+Doc-cover and cover data&mdash;that is to say, the strings passed to
+reference macros that appear on doc-cover and cover
+pages&mdash;does not persist after
+<a href="docprocessing.html#start">START</a>,
+however the formatting of the various parts (TITLE, AUTHOR,
+COPYRIGHT, etc.) does.
 </p>
 
 <div class="macro-list-container">
 <h3 id="index-covers" class="macro-list">Cover and document cover macros</h3>
 <ul class="macro-list">
-  <li><a href="#cover">COVER and DOC_COVER</a>
+  <li><a href="#cover">DOC_COVER and COVER</a>
   <ul style="margin-left: -.5em; list-style-type: disc;">
-    <li><a href="#required-and-optional-args">Required and optional arguments</a></li>
+    <li><a href="#cover-args">The arguments: saying what goes on doc-cover and cover pages</a></li>
   </ul></li>
+  <li><a href="#covertext">DOC_COVERTEXT / COVERTEXT</a></li>
+  <li><a href="#coverimage">DOC_COVER_IMAGE / COVER_IMAGE</a></li>
   <li><a href="#on-off">Enabling/disabling automatic generation of cover pages</a>
   <ul style="margin-left: -.5em; list-style-type: disc;">
-    <li><a href="#covers">COVERS</a></li>
     <li><a href="#doc-covers">DOC_COVERS</a></li>
+    <li><a href="#covers">COVERS</a></li>
   </ul></li>
-  <li><a href="#cover-control">Control macros for covers and doc covers</a></li>
+  <li><a href="#cover-control">Control macros for doc-covers and covers</a></li>
 </ul>
 </div>
 
 <!-- -COVER- -->
 
 <div class="macro-id-overline">
-<h3 id="cover" class="macro-id">COVER and DOC_COVER</h3>
+<h3 id="cover" class="macro-id">DOC_COVER and COVER</h3>
 </div>
 
-<div class="box-macro-args">
-Macro: <b>COVER</b> <kbd class="macro-args">(see required and optional arguments, below)</kbd>
+<div id="doc-cover" class="box-macro-args">
+Macro: <b>DOC_COVER</b> <kbd class="macro-args">(see argument list, below)</kbd>
 </div>
 
-<div id="doc-cover" class="box-macro-args" style="margin-top: 1em;">
-Macro: <b>DOC_COVER</b> <kbd class="macro-args">(see required and optional arguments, below)</kbd>
+<div class="box-macro-args" style="margin-top: 1em;">
+Macro: <b>COVER</b> <kbd class="macro-args">(see argument list, below)</kbd>
 </div>
 
-<div id="required-and-optional-args" style="margin-top: 1em; padding-bottom: 3px; white-space: nowrap; overflow: auto;">
-<b><a href="#required-arg">Required argument:</a></b> <kbd class="macro-args">TITLE | DOCTITLE | COVERTITLE | CHAPTER | CHAPTER_TITLE | CHAPTER+TITLE</kbd>
-</div>
-
-<div style="margin-top: .5em; padding-bottom: 3px; white-space: nowrap; overflow: auto;">
-<b><a href="#optional-args">Optional arguments:</a></b> <kbd class="macro-args">[ SUBTITLE AUTHOR DOCTYPE COPYRIGHT MISC BLANKPAGE PDF_OUTLINE_LABEL &lt;label&gt; ]</kbd>
-</div>
-
-<div class="box-tip">
-<p class="tip">
-<span class="note">Note:</span>
-These macros should be placed in the style sheet section of your
-document setup (see
-<a href="docprocessing.html#docprocessing-tut">Tutorial &ndash; Setting up a mom document</a>),
-ie after PRINTSTYLE (and/or DOCTYPE and/or COPYSTYLE), but before
-START.
-</p>
-</div>
-
-<p style="margin-top: -.25em;">
-COVER and DOC_COVER behave identically.  The reason mom provides
+<p>
+DOC_COVER and COVER behave identically.  The reason mom provides
 two macros for cover page generation is so that you can have two
 different kinds of covers with different information on each.
 </p>
@@ -267,50 +279,166 @@
 author&#8217;s) name, and perhaps the copyright date.  Subsequently,
 you could use COVER, after each <kbd>.COLLATE</kbd> but before each
 <kbd><a href="docprocessing.html#start">.START</a></kbd>,
-to generate a cover page (or cover &#8221;sheet&#8221;, if you
-prefer) containing just the name of the section.
+to generate a cover page (title page, cover sheet) containing
+just the name of the section, for example, &#8220;Part 1&#8221;.
 </p>
 
-<h4 id="required-arg" class="docs" style="margin-top: -.5em;">The required argument</h4>
-
 <p>
-Both COVER and DOC_COVER, whenever invoked, require a first
-argument, as listed above.  This first argument will become the
-first bit of information mom prints on the cover or doc cover (ie
-the title).
+The arguments to <kbd>DOC_COVER</kbd> and <kbd>COVER</kbd> tell mom
+what you&#8217;d like on cover pages.  You may give as many or as
+few arguments as you need, in any order.  A very common setup would
+be:
+<br/>
+<span class="pre-in-pp">
+  .COVER TITLE AUTHOR COPYRIGHT
+</span>
 </p>
 
-<p>
-In order for the information to appear, you must, of course, have
-given mom the appropriate
-<a href="docprocessing.html#reference-macros">reference macro</a>.
-A list of first arguments with their equivalent reference macros follows.
-</p>
-
-<dl style="margin-top: -.5em;">
-  <dt class="no-italic"><kbd>TITLE</kbd></dt>
-  <dd>
-  &ndash; means the argument you gave to <a href="docprocessing.html#title">TITLE</a>
-  </dd>
-  <dt class="no-italic"><kbd>DOCTITLE</kbd></dt>
-  <dd>
-  &ndash; means the argument you gave to <a href="docprocessing.html#doc-title">DOCTITLE</a>
-  </dd>
-  <dt class="no-italic"><kbd>COVERTITLE</kbd></dt>
-  <dd>
-  &ndash; means the argument you gave to <a href="docprocessing.html#covertitle">COVERTITLE</a>
-  or
-  <a href="docprocessing.html#doc-covertitle">DOC_COVERTITLE</a>
-  </dd>
-  <dt class="no-italic"><kbd>CHAPTER, CHAPTER_TITLE, CHAPTER+TITLE</kbd></dt>
-  <dd>
-  &ndash; see below, <i>How the CHAPTER argument and friends work</i>
-  </dd>
-</dl>
+<h4 id="cover-args" class="docs" style="margin-top: -1em;">The argument list</h4>
 
-<h5 id="chapter" class="docs" style="margin-top: -.5em; text-transform: none;">How the CHAPTER argument and friends work</h5>
+<p style="margin-top: 1em">
+The arguments to <kbd>COVER</kbd> and <kbd>DOC_COVER</kbd> tell mom
+what you want on the cover page:
+<br/>
+<span class="pre-in-pp">
+  TITLE | DOCTITLE | DOC_COVERTITLE | COVERTITLE
+  CHAPTER | CHAPTER_TITLE | CHAPTER+TITLE
+  SUBTITLE
+  AUTHOR
+  DOCTYPE
+  DOC_COVERTEXT | COVERTEXT
+  DOC_COVER_IMAGE | COVER_IMAGE
+  COPYRIGHT
+  MISC
+  PDF_OUTLINE_LABEL "&lt;label&gt;"
+  BLANKPAGE
+</span>
+</p>
+
+<h4 id="meanings" class="docs" style="margin-top: -1em;">What the arguments mean</h4>
+
+<dl>
+  <dt class="params">TITLE</dt>
+    <dd class="cover-args">&ndash; the string(s) you gave to
+      <a href="docprocessing.html#title">TITLE</a>
+    </dd>
+  <dt class="params">DOCTITLE</dt>
+    <dd class="cover-args">&ndash; the string(s) you gave to
+      <a href="docprocessing.html#doc-title">DOCTITLE</a>
+    </dd>
+  <dt class="params">DOC_COVERTITLE / COVERTITLE</dt>
+    <dd class="cover-args">&ndash; the string(s) you gave to
+      <a href="docprocessing.html#doc-covertitle">DOC_COVERTITLE</a>
+      or
+      <a href="docprocessing.html#covertitle">COVERTITLE</a>
+    </dd>
+  <dt class="params">CHAPTER, CHAPTER_TITLE, CHAPTER+TITLE</dt>
+    <dd class="cover-args">&ndash; see below,
+      <a href="#chapter">How the CHAPTER argument and friends work</a>
+    </dd>
+  <dt class="params">SUBTITLE</dt>
+    <dd class="cover-args">&ndash; the string(s) you gave to
+      <a href="docprocessing.html#subtitle">SUBTITLE</a>
+    </dd>
+  <dt class="params">AUTHOR</dt>
+    <dd class="cover-args">&ndash; the string(s) you gave to
+      <a href="docprocessing.html#author">AUTHOR</a>
+    </dd>
+  <dt class="params">DOCTYPE</dt>
+    <dd class="cover-args">&ndash; the string you gave to
+      <a href="docprocessing.html#doctype">DOCTYPE NAMED</a>
+    </dd>
+  <dt class="params">DOC_COVERTEXT / COVERTEXT</dt>
+    <dd class="cover-args">&ndash; the block of type you entered for
+      <a href="#covertext">DOC_COVERTEXT</a>
+      or
+      <a href="#covertext">COVERTEXT</a>
+    </dd>
+  <dt class="params">DOC_COVER_IMAGE / COVER_IMAGE</dt>
+    <dd class="cover-args">&ndash; the image file you gave to
+      <a href="#covertext">DOC_COVER_IMAGE</a>
+      or
+      <a href="#covertext">COVER_IMAGE</a>
+    </dd>
+  <dt class="params">COPYRIGHT</dt>
+    <dd class="cover-args">&ndash; the string you gave to
+      <a href="docprocessing.html#copyright">COPYRIGHT</a>
+    </dd>
+  <dt class="params">MISC</dt>
+    <dd class="cover-args">&ndash; the string(s) you gave to
+      <a href="docprocessing.html#misc">MISC</a>
+    </dd>
+  <dt class="params">PDF_OUTLINE_LABEL &lt;label&gt;</dt>
+    <dd class="cover-args">
+      <span style="display:block; margin-left: 1em">
+      By default, mom identifies doc-covers in the outline panel of PDF
+      viewers with the prepended label, &#8220;Cover:&#8221;, and covers
+      with the label &#8220;Title Page:&#8221;.  If you would like
+      to change the label, give the <kbd>PDF_OUTLINE_LABEL</kbd>
+      argument to DOC_COVER or COVER along with the new label, in
+      quotation marks, as in this example:
+      <br/>
+      <kbd>&nbsp;&nbsp;.COVER TITLE AUTHOR COPYRIGHT PDF_LABEL "Cover Sheet: "</kbd>
+      </span>
+    </dd>
+  <dt class="params">BLANKPAGE</dt>
+    <dd class="cover-args">
+      <span style="display:block; margin-left: 1em">
+      If the final argument to DOC_COVER or COVER is <kbd>BLANKPAGE</kbd>,
+      mom will insert a blank page after the doc-cover or cover.  This is
+      particularly useful if you intend to print your document two-sided,
+      since, in two-sided printing, there may be instances where you do
+      not want text on the reverse side of cover or title pages
+      </span>
+      <span style="display:block; margin-left: 1em; margin-top: .5em">
+      If you enable
+      <a href="#pagination">DOC_COVERS_COUNT_PAGES</a>
+      and/or
+      <a href="#pagination">COVERS_COUNT_PAGES</a>,
+      the blank page will be taken into account in the pagination
+      scheme, though no page number appears on it.  Otherwise, blank
+      pages are invisible to mom's pagination.
+      </span>
+    </dd>
+<dl/>
+
+<p>
+Please note that in all cases, if you have passed
+a reference macro one of the optional arguments,
+<kbd>DOC_COVER</kbd> or <kbd>COVER</kbd> (e.g.
+<kbd>.TITLE&nbsp;DOC_COVER&nbsp;"Title"</kbd>), mom will print the
+appropriate string on the appropriate cover page.  Thus,
+<br/>
+<span class="pre-in-pp">
+  .TITLE DOC_COVER "Collected Essays"
+  .TITLE COVER "1985-2015"
+  .TITLE "Neo-liberalism: Who Did They Think They Were Fooling?"
+  .DOC_COVER TITLE
+  .COVER TITLE
+</span>
+will print &#8220;Collected Essays&#8221; on the doc-cover page,
+&#8220;1985-2015&#8221; on the cover page, and, assuming the
+docheader hasn&#8217;t been disabled, &#8220;Neo-liberalism: Who
+Did They Think They Were Fooling?&#8221; as the title in the
+docheader.
+</p>
 
 <p>
+Note that
+<br/>
+<span class="pre-in-pp">
+  .DOC_COVERTITLE "Collected Essays"
+  .COVERTITLE "1985-2015"
+  .TITLE "Neo-liberalism: Who Did They Think They Were Fooling?"
+  .DOC_COVER DOC_COVERTITLE
+  .COVER COVERTITLE
+</span>
+could be used to accomplish the same thing.
+</p>
+
+<h5 id="chapter" class="docs" style="margin-top: 0; text-transform: none;">How the CHAPTER argument and friends work</h5>
+
+<p style="margin-top: .75em">
 <span style="display: block; margin-bottom: -1.25em; font-weight: bold;">&bull;&nbsp;CHAPTER</span>
 <br/>
 The <kbd>CHAPTER</kbd> argument will print the
@@ -322,7 +450,7 @@
 <span class="pre-in-pp" style="color: #64614a;">
   .CHAPTER 1
   .CHAPTER_TITLE "The Bonny Blue Yonder"
-  <span style="color: #941614;">.COVER CHAPTER</span>  \"(or <span style="color: #941614;">.DOC_COVER CHAPTER</span>)
+  <span style="color: #941614;">.COVER CHAPTER</span>  \" (or <span style="color: #941614;">.DOC_COVER CHAPTER</span>)
 </span>
 will print (and only print)
 <br/>
@@ -371,72 +499,196 @@
 </span>
 </p>
 
-<h4 id="optional-args" class="docs" style="margin-top: -1em;">The optional arguments</h4>
+<div class="macro-id-overline">
+<h3 id="covertext" class="macro-id">DOC_COVERTEXT and COVERTEXT</h3>
+</div>
+
+<div class="box-macro-args">
+Macro: <b>DOC_COVERTEXT</b> <kbd class="macro-args">&lt;toggle&gt;</kbd>
+</div>
+<div class="box-macro-args" style="margin-top: 1em;">
+Macro: <b>COVERTEXT</b> <kbd class="macro-args">&lt;toggle&gt;</kbd>
+</div>
+
+<p class="requires">
+&bull;&nbsp;Must come after
+<a href="#printstyle"><span class="normal">PRINTSTYLE</span></a>
+</p>
+
+<p>
+<kbd>DOC_COVERTEXT</kbd> and <kbd>COVERTEXT</kbd> allow you to add
+text to doc-covers and covers in addition to, or instead of, what is
+generated by mom from the arguments you give to
+<a href="#doccover">DOC_COVER</a>
+and
+<a href="#doccover">COVER</a>.
+</p>
+
+<p>
+Invoke <kbd>.DOC_COVERTEXT</kbd> or <kbd>.COVERTEXT</kbd> on a line
+by itself, follow it with the text and formatting you desire, and
+terminate the text block with <kbd>.DOC_COVERTEXT&nbsp;OFF</kbd> or
+<kbd>COVERTEXT&nbsp;OFF</kbd> (or <kbd>QUIT, END, DONE</kbd>, etc.).
+</p>
+
+<p>
+By default, cover text is set over the full line length of the
+document, using the style parameters of
+<a href="definitions.html#running">running text</a>.
+Therefore, as noted, these macros must come after PRINTSTYLE
+and any global style changes (margins, family, size, leading,
+etc.).  Formatting within a cover text block must be done
+&#8220;manually&#8221; with mom&#8217;s typesetting macros;
+<a href="docelement.html#pp">PP</a>
+is the only allowed document element tag.
+</p>
+
+<h4 id="placement" class="docs">Placement</h4>
 
 <p>
-The remainder of the arguments to COVER and
-DOC_COVER are optional.  They refer specifically to
-the information you gave the
-<a href="docprocessing.html#reference-macros">reference macros</a>
-bearing the same name as the arguments.  You may enter as many or as
-few as you like, in any order.
+If you do not instruct mom to put anything on doc-cover or cover
+pages except <kbd>DOC_COVERTEXT</kbd> or <kbd>COVERTEXT</kbd>, the
+cover text will begin at the document&#8217;s top margin.  You must
+use
+<a href="typesetting.html#space">SP</a>
+or
+<a href="typesetting.html#ald">ALD</a>
+to move it further down the page.  Equally, if only
+<kbd>COPYRIGHT</kbd> and/or <kbd>MISC</kbd> are to go on the pages,
+cover text begins at the top margin.  In all other cases, cover text
+begins below the last element on the page, separated by a blank
+line.
 </p>
 
-<h5 id="doctype" class="docs" style="text-transform: none; margin-top: -.5em;">What the DOCTYPE argument means</h5>
+<p>
+<kbd>DOC_COVERTEXT</kbd> and <kbd>COVERTEXT</kbd> are particularly
+useful for putting abstracts on cover pages, as technical reports
+often require.
+</p>
 
 <p>
-When you pass COVER or DOC_COVER
-the argument, <kbd>DOCTYPE</kbd>, it refers to the argument you gave
-to
-<a href="docprocessing.html#doctype">DOCTYPE</a>&nbsp;<kbd>NAMED</kbd>.
-For example, if, in your
-<a href="docprocessing.html#docstyle-macros">docstyle macros</a>
-you gave a
+Here's a simple recipe for setting an abstract:
 <br/>
 <span class="pre-in-pp">
-    .DOCTYPE NAMED "Abstract"
+  .COVERTEXT
+  .FT BI
+  .PT_SIZE 14
+  .LS 14
+  .CENTER
+  Abstract
+  .SP .5v
+  .FT R
+  .PT_SIZE 12
+  .IB 6P
+  .JUSTIFY
+  Text of Abstract...
+  .COVERTEXT OFF
 </span>
-the argument, <kbd>DOCTYPE</kbd>, given to the COVER or DOC_COVER
-macros, would mean that you wanted the word, Abstract, to appear on
-the cover or doc cover underneath the title and/or author(s), just
-as it would in the
-<a href="docprocessing.html#docheader">docheader</a>.
+Assuming you have told mom to put the title and author on the
+cover page, the abstract will appear beneath the author with a
+14-point bold-italic title, centered, with the text of the abstract
+medium-roman and justified, indented 6 picas from both margins.
 </p>
 
-<h5 id="blankpage" class="docs" style="text-transform: none; margin-top: -.5em;">What the BLANKPAGE argument means</h5>
+<div class="macro-id-overline">
+<h3 id="coverimage" class="macro-id">DOC_COVER_IMAGE and COVER_IMAGE</h3>
+</div>
+
+<div id="coverimage" class="box-macro-args">
+Macro: <b>DOC_COVER_IMAGE</b> <kbd class="macro-args">&lt;image&gt; &lt;width&gt; &lt;height&gt; [ -L | -C | -R | -I &lt;indent&gt; &lt;Y-pos&gt; [ &lt;X-pos&gt; ] ]</kbd>
+</div>
+
+<div id="coverimage" class="box-macro-args" style="margin-top: 1em;">
+Macro: <b>COVER_IMAGE</b> <kbd class="macro-args">&lt;image&gt; &lt;width&gt; &lt;height&gt; [ -L | -C | -R | -I &lt;indent&gt; &lt;Y-pos&gt; [ &lt;X-pos&gt; ] ]</kbd> 
+</div>
 
 <p>
-If the final argument to DOC_COVER or COVER is <kbd>BLANKPAGE</kbd>,
-mom will insert a blank page after the doc cover or cover.  This is
-particularly useful if you intend to print your document two-sided,
-since, in two-sided printing, there may be instances where you do
-not want text on the reverse side of cover or title pages.
+There are times you need a full page image on a cover, for example
+the jacket of a book.  Equally, there are times when you need a small
+image on the cover, perhaps a company logo.
 </p>
 
 <p>
-If you enable DOC_COVERS_COUNT_PAGES and/or COVERS_COUNT_PAGES, the
-blank page will be taken into account in the pagination scheme,
-though no page number appears on it.  Otherwise, blank pages are
-invisible to mom's pagination.
+DOC_COVER_IMAGE and COVER_IMAGE take the same arguments
+as PDF_IMAGE, and in the same order.  Consult
+<a href="images.html#pdf-image">PDF_IMAGE</a>
+for a desciption.
 </p>
 
-<h5 id="pdf-label" class="docs" style="text-transform: none; margin-top: -.5em;">What the PDF_OUTLINE_LABEL argument means</h5>
+<p>
+Two additional arguments allow you to place images using x-y
+coordinates.  Please note that if you use x-y coordinates for
+positioning, <b>Y-pos</b> comes before <b>X-pos</b> in the order of
+arguments.
+</p>
 
 <p>
-By default, mom identifies doccovers in the outline panel of PDF
-viewers with the prepended string, &#8220;Cover:&#8221;, and covers
-with the string &#8220;Title Page:&#8221;.  If you would like
-to change the strings, pass the <kbd>PDF_OUTLINE_LABEL</kbd>
-argument to COVER or DOCCOVER, along with the new string.
+Like PDF_IMAGE, the image file must be in PDF format.  Mom
+apologizes, but PostScript images are not supported for inclusion on
+covers.  See
+<a href="images.html#pdf">Image conversion and file processing</a>
+for instructions on converting various image types to PDF, and
+<a href="images.html#bounding-box">here</a>
+for instructions on obtaining image dimensions.
 </p>
 
-<!-- -ENABLING/DISABLING- -->
+<h4 id="positioning" class="docs">Positioning of doc-cover and cover images</h4>
 
-<div class="macro-id-overline">
+<p>
+With no arguments other than <kbd>&lt;file name&gt;</kbd>,
+<kbd>&lt;width&gt;</kbd>, and <kbd>&lt;height&gt;</kbd>,
+DOC_COVER_IMAGE and COVER_IMAGE place images flush with the top
+left corner of the printer sheet.  This allows placing full-page
+background images on covers.  For example, assuming a US-letter page
+size,
+<br/>
+<span class="pre-in-pp">
+  .DOC_COVER_IMAGE image.pdf 612p 792p
+  .DOC_COVER TITLE AUTHOR DOC_COVER_IMAGE
+</span>
+will fill the doc-cover page with &#8220;image.pdf&#8221; and set
+the title and author in their usual locations.
+</p>
+
+<p>
+For smaller images, the horizontal position is established
+with one of the <kbd>-L</kbd>, <kbd>-C</kbd>, <kbd>-R</kbd>, or
+<kbd>-I&nbsp;&lt;indent&gt;</kbd> arguments, just like
+<a href="images.html#pdf-image">PDF_IMAGE</a>.
+You may instead use the <kbd>X-pos</kbd> argument, provided that it
+is preceded by a <kbd>Y-pos</kbd> argument.  The values given to
+<kbd>-I</kbd>, <kbd>Y-pos</kbd> and <kbd>X-pos</kbd> must have a
+<a href="definitions.html#unitofmeasure">unit of measure</a>
+appended to them.
+</p>
+
+<p>
+Vertical positioning of smaller images requires the <kbd>Y-pos</kbd>
+argument (which is why it precedes <kbd>X-pos</kbd> in the order of
+arguments) otherwise the image will be flush with the top edge of
+the printer sheet
+</p>
+
+<p>
+The positioning of images does not effect the placement of type on
+doc-cover and cover pages.
+</p>
+
+<div class="box-tip">
+<p class="tip">
+<span class="note">Tip:</span>
+The combination of
+<a href="#covertext">COVERTEXT</a>
+and COVER_IMAGE make it possible to design covers entirely to your
+own specifications.
+</p>
+</div>
+
+<div class="macro-id-overline" style="margin-top: .5em">
 <h3 id="on-off" class="macro-id">Enabling/disabling automatic generation of cover pages</h3>
 </div>
 
-<div id="covers" class="box-macro-args">
+<div id="covers" class="box-macro-args" style="margin-top: .5em">
 Macro: <b>COVERS</b> <kbd class="macro-args">&lt;toggle&gt;</kbd>
 </div>
 
@@ -449,7 +701,7 @@
 <a href="#cover">COVER</a>
 or
 <a href="#doc-cover">DOC_COVER</a>
-directive, she will print the cover or doc cover.  In a document
+directive, she will print the cover or doc-cover.  In a document
 that contains sections, articles or chapters formerly treated as
 &#8221;one-off&#8217;s&#8221; but now being
 <a href="rectoverso.html#collate-intro">collated</a>,
@@ -458,12 +710,11 @@
 
 <p>
 Mom lets you selectively enable or disable the generation of covers
-and/or doc covers with the toggle macros, COVERS and DOC_COVERS.
+and/or doc-covers with the toggle macros, COVERS and DOC_COVERS.
 Because they&#8217;re toggle macros, simply invoking them by
-themselves enables automatic cover or doc cover generation, while
+themselves enables automatic cover or doc-cover generation, while
 invoking them with any argument at all (<kbd>OFF, QUIT, X</kbd>,
-etc) disables cover or doc cover generation.
-</p>
+etc) disables cover or doc-cover generation. </p>
 
 <div class="box-tip">
 <p class="tip">
@@ -482,10 +733,10 @@
 
 <div class="rule-short"><hr/></div>
 
-<h2 id="cover-control" class="macro-group">Control macros for covers and doc covers</h2>
+<h2 id="cover-control" class="macro-group">Control macros for doc-covers and covers</h2>
 
 <p>
-The default typographic appearance of the items on a cover or doc
+The default typographic appearance of the items on a doc-cover or
 cover is identical to that of the items in a
 <a href="definitions.html#docheader">docheader</a>.
 (See
@@ -501,111 +752,80 @@
 characteristics:
 </p>
 <ul style="margin-top: -.5em; margin-bottom: -.5em;">
-  <li>the COPYRIGHT line is set in the bottom right hand corner
-      of the page, 2
+  <li>the COPYRIGHT line is set flush with the document&#8217;s right
+      and bottom margins, 2
       <a href="definitions.html#ps">point sizes</a>
       smaller than the size of
       <a href="definitions.html#running">running text</a>
   </li>
-  <li>MISC lines are set in the bottom left hand
-      corner of the page, in the same family, font and point size
-      as the copyright line.
+  <li>MISC lines are set flush with the document&#8217;s left and bottom
+      margins, in the same family, font and point size as the
+      copyright line.
   </li>
 </ul>
 
 <p>
-The defaults for the entirety of covers and doc covers, and all the
+The defaults for the entirety of doc-covers and covers, and all the
 elements thereon, can be changed with control macros whose defaults
-and arguments are identical to the corresponding control macros
-governing docheaders.  The only difference is the name by which you
-invoke them.
+and arguments are identical to the corresponding
+<a href="docprocessing.html#index-docheader-control">Control macros for docheaders</a>
+(q.v.)  The only difference is the name by which you invoke them.  Wherever
+<kbd>DOCHEADER</kbd> is used for overall changes, replace it
+with <kbd>DOC_COVER</kbd> or <kbd>COVER</kbd>.  For part-by-part
+changes, prepend <kbd>DOC_COVER_</kbd> or <kbd>COVER_</kbd> to the
+part/parameter.
 </p>
 
 <p>
-A complete list of cover and doc cover control macros follows.
-Please refer to
-<a href="docprocessing.html#index-docheader-control">docheader control</a>
-in order to get the defaults and any special instructions for usage.
-</p>
-
-<h3 id="index-cover-control" class="docs" style="margin-bottom: .25em;">Cover / doc cover control macros and defaults</h3>
-
-<div class="defaults-container" style="padding-bottom: 8px;">
-
-<span class="pre defaults">
-COVER_ADVANCE  DOC_COVER_ADVANCE -+
-COVER_FAMILY   DOC_COVER_FAMILY   | like
-COVER_LEAD     DOC_COVER_LEAD     | DOCHEADER_&lt;spec&gt;
-COVER_QUAD     DOC_COVER_QUAD    -+
-
-COVER_TITLE_FAMILY  DOC_COVER_TITLE_FAMILY -+
-COVER_TITLE_FONT    DOC_COVER_TITLE_FONT    | like
-COVER_TITLE_COLOR   DOC_COVER_TITLE_COLOR   | TITLE_&lt;spec&gt;
-COVER_TITLE_SIZE    DOC_COVER_TITLE_SIZE   -+
-
-COVER_CHAPTER_TITLE_FAMILY  DOC_COVER_CHAPTER_TITLE_FAMILY -+
-COVER_CHAPTER_TITLE_FONT    DOC_COVER_CHAPTER_TITLE_FONT    | like
-COVER_CHAPTER_TITLE_COLOR   DOC_COVER_CHAPTER_TITLE_COLOR   | CHAPTER_TITLE_&lt;spec&gt;
-COVER_CHAPTER_TITLE_SIZE    DOC_COVER_CHAPTER_TITLE_SIZE   -+
-
-COVER_SUBTITLE_FAMILY  DOC_COVER_SUBTITLE_FAMILY -+
-COVER_SUBTITLE_FONT    DOC_COVER_SUBTITLE_FONT    | like
-COVER_SUBTITLE_COLOR   DOC_COVER_SUBTITLE_COLOR   | SUBTITLE_&lt;spec&gt;
-COVER_SUBTITLE_SIZE    DOC_COVER_AUTHOR_SIZE     -+
-
-COVER_ATTRIBUTE_COLOR  DOC_COVER_ATTRIBUTE_COLOR - like ATTRIBUTE_COLOR
- - the macro, ATTRIBUTE_STRING, controls the attribution string
-   for both docheaders and cover pages; cover pages have no
-   separate ATTRIBUTE_STRING macro
-
-COVER_AUTHOR_FAMILY  DOC_COVER_AUTHOR_FAMILY -+
-COVER_AUTHOR_FONT    DOC_COVER_AUTHOR_FONT    | like
-COVER_AUTHOR_COLOR   DOC_COVER_AUTHOR_COLOR   | AUTHOR_&lt;spec&gt;
-COVER_AUTHOR_SIZE    DOC_COVER_AUTHOR_SIZE   -+
-
-COVER_DOCTYPE_FAMILY  DOC_COVER_DOCTYPE_FAMILY -+
-COVER_DOCTYPE_FONT    DOC_COVER_DOCTYPE_FONT    | like
-COVER_DOCTYPE_COLOR   DOC_COVER_DOCTYPE_COLOR   | DOCTYPE_&lt;spec&gt;
-COVER_DOCTYPE_SIZE    DOC_COVER_DOCTYPE_SIZE   -+
-
-COVER_COPYRIGHT_FAMILY  DOC_COVER_COPYRIGHT_FAMILY -+
-COVER_COPYRIGHT_FONT    DOC_COVER_COPYRIGHT_FONT    |
-COVER_COPYRIGHT_COLOR   DOC_COVER_COPYRIGHT_COLOR   | like any of the above
-COVER_COPYRIGHT_SIZE    DOC_COVER_COPYRIGHT_SIZE    |
-COVER_COPYRIGHT_QUAD    DOC_COVER_COPYRIGHT_QUAD   -+
-  - copyright quad sets both the position on the page and the quad
-    direction and can be either L (left) or R (right); default is right
-
-COVER_MISC_FAMILY  DOC_COVER_MISC_FAMILY -+
-COVER_MISC_FONT    DOC_COVER_MISC_FONT    |
-COVER_MISC_COLOR   DOC_COVER_MISC_COLOR   | like any of the above
-COVER_MISC_SIZE    DOC_COVER_MISC_SIZE    |
-COVER_MISC_QUAD    DOC_COVER_MISC_QUAD   -+
-  - misc quad sets both the position on the page and the quad
-    direction and can be either L (left) or R (right); default is left
-
-COVER_UNDERLINE    DOC_COVER_UNDERLINE - like DOCTYPE_UNDERLINE
-  - cover underline controls underlining of the argument given to
-    DOCTYPE NAMED "&lt;name&gt;" only
-
-COVER_COUNTS_PAGES DOC_COVER_COUNTS_PAGES
- - whether to consider cover pages in the pagination scheme; the
-   default is to ignore them
- - see Note
+Thus, to change the overall family, color, leading, quad and
+starting position of a doc-cover, you&#8217;d do
+<br/>
+<span class="pre-in-pp">
+  .DOC_COVER_FAMILY  H
+  .DOC_COVER_COLOR   blue
+  .DOC_COVER_LEADING +2
+  .DOC_COVER_QUAD    L
+  .DOC_COVER_ADVANCE 3i \" or .DOC_COVER_START_POS 3i
 </span>
-</div>
-
-<p style="margin-top: -2em;">
-<b>Note:</b>
+To change the style parameters for selected parts of a cover, you
+might do something like this:
 <br/>
-COVER_COUNTS_PAGES and DOC_COVER_COUNTS_PAGES are toggle macros,
-hence invoking them by themselves means that mom will consider
-covers and doc covers in the pagination scheme; invoking them with
-any argument (<kbd>OFF, NO, X</kbd>, etc.) means they are ignored.
-The default is to ignore them.
+<span class="pre-in-pp">
+  .COVER_TITLE_FONT B
+  .COVER_TITLE_SIZE +4
+  .COVER_SUBTITLE_FONT I
+  .COVER_AUTHOR_FONT R
+  .COVER_AUTHOR_SPACE_BEFORE 6p
+  .COVER_DOCTYPE_COLOR red
+  .COVER_MISC_SIZE -1
+  .COVER_MISC_LEAD 12
+  .COVER_COPYRIGHT_SIZE -2
+  .COVER_COPYRIGHT_QUAD L
+  .COVER_MISC_QUAD R
+</span>
+Note in the above example that _COPYRIGHT_QUAD and _MISC_QUAD set
+both the horizontal position on the page and the quad direction,
+either L (or LEFT) or R (or RIGHT), and have no corresponding
+docheader control macro.
 </p>
 
-<div class="rule-long"><hr/></div>
+<div class="box-tip">
+<p class="tip-top">
+<span class="note">Tip:</span>
+As with the docheader control macros, <kbd>DOC_COVER_</kbd> and
+<kbd>COVER_</kbd> part/parameter style changes may be
+<a href="docprocessing.html#grouping">grouped</a>,
+for example
+</br>
+<span class="pre-in-pp">
+  .DOC_COVER_TITLE_STYLE \
+  FAMILY A \
+  FONT B \
+  SIZE +4 \
+  CAPS
+</span>
+</p>
+</div>
 
 <!-- Navigation links -->
 <table style="width: 100%; margin-top: 12px;">
diff -Nuar groff-1.22.3.old/contrib/mom/momdoc/definitions.html groff-1.22.3/contrib/mom/momdoc/definitions.html
--- groff-1.22.3.old/contrib/mom/momdoc/definitions.html	2014-11-04 10:38:35.612519159 +0200
+++ groff-1.22.3/contrib/mom/momdoc/definitions.html	2015-04-23 20:57:03.000000000 +0300
@@ -2,7 +2,7 @@
 <!--
 This file is part of groff, the GNU roff type-setting system.
 
-Copyright (C) 2004-2014  Free Software Foundation, Inc.
+Copyright (C) 2004-2015  Free Software Foundation, Inc.
 Written by Peter Schaffter (peter@schaffter.ca).
 
 Permission is granted to copy, distribute and/or modify this document
diff -Nuar groff-1.22.3.old/contrib/mom/momdoc/docelement.html groff-1.22.3/contrib/mom/momdoc/docelement.html
--- groff-1.22.3.old/contrib/mom/momdoc/docelement.html	2014-11-04 10:38:35.613519146 +0200
+++ groff-1.22.3/contrib/mom/momdoc/docelement.html	2015-04-23 20:57:03.000000000 +0300
@@ -2,7 +2,7 @@
 <!--
 This file is part of groff, the GNU roff type-setting system.
 
-Copyright (C) 2004-2014 Free Software Foundation, Inc.
+Copyright (C) 2004-2015 Free Software Foundation, Inc.
 Written by Peter Schaffter (peter@schaffter.ca).
 
 Permission is granted to copy, distribute and/or modify this document
@@ -53,6 +53,7 @@
       <li><a href="#quad">quad/justification</a></li>
       <li><a href="#underline">underline style, rule weight</a></li>
     </ul></li>
+    <li><a href="#grouping">Grouping control macros</a></li>
   </ul></li>
 </ul>
 </div>
@@ -369,7 +370,20 @@
 If mom gives the option to underline a document element, the weight
 of the underline and its distance from the
 <a href="definitions.html#baseline">baseline</a>
-are controlled by macros that end in _UNDERLINE.
+are controlled by macros that end in _UNDERSCORE or _UNDERLINE.
+These macros take the following arguments:
+<br/>
+<span class="pre-in-pp">
+  DOUBLE     - double underscore
+  &lt;weight&gt;   - the underscore weight (in points, no unit of measure required
+  &lt;distance&gt; - distance from baseline (unit of measure required)
+  &lt;rule gap&gt; - distance between double underscore rules (unit of measure required_
+</span>
+<kbd>DOUBLE</kbd> by itself will double-underscore the element.  The
+remaining arguments must be entered in the order given.  You may not
+skip over any of them, which means that if you only wish to change
+<kbd>&lt;rule gap&gt;</kbd>, you must still enter a
+<kbd>&lt;weight&gt;</kbd> and <kbd>&lt;distance&gt;</kbd> argument.
 </p>
 
 <p>
@@ -386,6 +400,63 @@
 as is the argument to _RULE_WEIGHT macros.
 </p>
 
+<h3 id="grouping" class="docs">Grouping control macros</h3>
+
+<p>
+As of version 2.1, it is possible to group control macros for a
+particular tag into a single <kbd>&lt;element&gt;_STYLE</kbd> macro.
+For example, rather than setting the family, size, and indent of
+<a href="#blockquote-intro">BLOCKQUOTES</a>
+with
+<br/>
+<span class="pre-in-pp">
+  .BLOCKQUOTE_FAMILY H
+  .BLOCKQUOTE_SIZE -2
+  .BLOCKQUOTE_INDENT 4P
+</span>
+you can enter the same style parameter changes with
+<br/>
+<span class="pre-in-pp">
+  .BLOCKQUOTE_STYLE \
+  FAMILY H \
+  SIZE -2 \
+  INDENT 4P
+</span>
+<kbd>&lt;element&gt;_STYLE</kbd> macros use
+&#8220;keyword/value&#8221; pairs (<kbd>FAMILY</kbd> is a keyword,
+<kbd>H</kbd> is a value), and may be entered entirely on one line,
+or, as the example shows, broken into several readable lines using
+the backslash.  The macro itself and all but the last keyword/value
+pair require the backslash when this style is used.
+</p>
+
+<p>
+Not all the control macros for a particular tag may be available
+with an <kbd>&lt;element&gt;_STYLE</kbd> macro.  Generally speaking,
+though, if a tag has control macros for
+<br/>
+<span class="pre-in-pp">
+  FAMILY FONT SIZE
+  LEAD AUTOLEAD
+  QUAD INDENT
+  COLOR
+  CAPS SMALLCAPS
+  UNDERLINE/UNDERSCORE
+</span>
+those parameters may be used within an
+<kbd>&lt;element&gt;_STYLE</kbd> macro.
+</p>
+
+<div class="box-tip">
+<p class="tip">
+<span class="note">Note:</span>
+If you need to reverse the sense of <kbd>CAPS</kbd>,
+<kbd>SMALLCAPS</kbd> or <kbd>UNDERSCORE/UNDERLINE</kbd>, which
+do not take a value after the keyword, use <kbd>NO_CAPS</kbd>,
+<kbd>NO_SMALLCAPS</kbd> and <kbd>NO_UNDERSCORE/NO_UNDERLINE</kbd>.
+</p>
+</div>
+
 <div class="rule-short"><hr/></div>
 
 <!-- ==================================================================== -->
@@ -469,11 +540,24 @@
 
 <div class="box-tip">
 <p class="tip">
-<span class="tip">Tip:</span>
+<span class="tip">Tips on vertical spacing around epigraphs:</span>
+If you wish to change the vertical position of an epigraph with
+<a href="typesetting.html#space">SPACE</a>/
+<a href="typesetting.html#ald">ALD</a>/
+<a href="typesetting.html#rld">RLD</a>,
+do so before invoking <kbd>.EPIGRAPH</kbd>, like this:
+<br/>
+<span class="pre-in-pp">
+  .SP -6p
+  .EPIGRAPH
+  A notable quote.
+  .EPIGRAPH OFF
+</span>
 If you&#8217;re setting a document in
 <a href="docprocessing.html#columns">columns</a>
-and you&#8217;d like to add or subtract space after the epigraph,
-the place to do it is inside the epigraph, like this:
+and you&#8217;d like to add or subtract space <i>after</i> the
+epigraph, which is centered over the top of both columns, the place
+to do it is inside the epigraph, like this:
 <br/>
 <span class="pre-in-pp">
   .EPIGRAPH
@@ -493,6 +577,10 @@
 <p class="defaults">
 See
 <a href="#control-macro-args">Arguments to the control macros</a>.
+<br/>
+The following EPIGRAPH control macros may also be
+<a href="#grouping">grouped</a>
+using EPIGRAPH_STYLE.
 </p>
 
 <span class="pre defaults">
@@ -501,10 +589,7 @@
 .EPIGRAPH_SIZE      default = -1.5 (points)
 .EPIGRAPH_COLOR     default = black
 .EPIGRAPH_AUTOLEAD  default = 2 points
-
 (The next two apply to &#8220;block&#8221; style epigraphs only)
-
-.EPIGRAPH_QUAD      default = same as paragraphs
 .EPIGRAPH_INDENT*  (see Note on EPIGRAPH_INDENT, below)
 
 *Indent here refers to the indent from both the left and right margins
@@ -666,8 +751,11 @@
 The PP macro being so important, and representing, as it were, the
 basis of everything that goes on in a document, its control is
 managed in a manner somewhat different from other document element
-tags.
+tags.  As a result, the control macros for PP may not be
+<a href="#grouping">grouped</a>
+within a <kbd>_STYLE</kbd> macro.
 </p>
+
 <ol style="margin-top: .5em; padding-bottom: .5em;">
   <li><a href="#pp-family">Family control</a></li>
   <li><a href="#pp-font">Font control</a></li>
@@ -1270,6 +1358,7 @@
   UNDERSCORE  &lt;weight&gt; &lt;gap&gt; | NO_UNDERSCORE \
   UNDERSCORE2 &lt;weight&gt; &lt;gap1&gt; &lt;gap2&gt; | NO_UNDERSCORE2 \
   CAPS | NO_CAPS \
+  SMALLCAPS | NO_SMALLCAPS \
   BASELINE_ADJUST &lt;amount to raise heading from the baseline&gt; \
   SPACE_AFTER | NO_SPACE_AFTER \
   NUMBER | NO_NUMBER
@@ -1927,9 +2016,9 @@
 </p>
 
 <div class="box-tip">
-<h2 id="quote-spacing-notes" class="docs" style="padding-top: 9px; font-size: 100%;">Further notes on quote spacing</h2>
+<h3 id="quote-spacing-notes" class="docs" style="padding-top: 9px; font-size: 95%;">Notes on quote spacing</h3>
 
-<p clas"defaults">
+<p style="margin-top: .5em">
 If your quote (or blockquote) leading differs from the document
 leading, mom attempts to observe the same rules for vertical
 whitespace outlined above; however, she will also insert a small,
@@ -1945,12 +2034,12 @@
 which, by and large, processes text on a line-per-line basis.)
 </p>
 
-<h3 id="no-shim" class="docs">Disable shimming of quotes and blockquotes</h3>
+<h4 id="no-shim" class="docs">Disable shimming of quotes and blockquotes</h4>
 
 <p>
 If you don&#8217;t want the behaviour described above (ie you
-don&#8217;t want mom shimming 
-quotes and blockquotes), issue the macro
+don&#8217;t want mom shimming quotes and blockquotes), issue the
+macro
 <br/>
 <span class="pre-in-pp">
   .NO_SHIM
@@ -1961,6 +2050,17 @@
 </p>
 
 <p>
+If you set the leading of
+<a href="#quote-autolead">quotes</a>
+or
+<a href="#blockquote-autolead">blockquotes</a>
+to a value other than the one used in paragraphs, mom will apply
+shimming <i>after</i> the quote, whether or not <kbd>.NO_SHIM</kbd>
+is enabled.  This is the only way mom can guarantee that the
+difference in leading will not result in uneven bottom margins.
+</p>
+
+<p>
 If you&#8217;ve disabled shimming of quotes and blockquotes with
 <kbd>.NO_SHIM</kbd> and you want mom to return to her default
 behaviour in this matter, invoke <kbd>.NO_SHIM&nbsp;OFF</kbd> (or
@@ -2015,14 +2115,18 @@
 </div>
 
 <div class="box-macro-args">
-Macro: <b>QUOTE</b> <kbd class="macro-args">toggle</kbd>
+Macro: <b>QUOTE</b> <kbd class="macro-args">[ ADJUST +|-&lt;space&gt; ] | &lt;anything&gt;</kbd>
 </div>
+<p class="requires">
+&bull;&nbsp;The argument to <kbd style="font-style: normal">ADJUST</kbd> requires a
+<a href="definitions.html#unitofmeasure">unit of measure</a>
+</p>
 
 <p>
-QUOTE is a toggle macro.  To begin a section
-of quoted text, invoke it with no argument, then type in your
-quote.  When you&#8217;re finished, invoke <kbd>.QUOTE</kbd> with any
-argument (eg <kbd>OFF, END, X, Q</kbd>...) to turn it off.  Example:
+QUOTE is a toggle macro.  To begin a section of quoted text, invoke
+it with no argument, then type in your quote.  When you&#8217;re
+finished, invoke <kbd>.QUOTE</kbd> with any argument (eg <kbd>OFF,
+END, X, Q</kbd>...) to turn it off.  Example:
 <br/>
 <span class="pre-in-pp">
   .QUOTE
@@ -2033,9 +2137,28 @@
   And bits of her tits in Brazil.
   .QUOTE END
 </span>
+Mom does her best to equalize whitespace around quotes and make
+sure the line following it falls on a valid baseline.  On occasion,
+you may need to tweak the quote placement slightly, which is done
+by passing <kbd>ADJUST</kbd> to QUOTE with a plus or minus value.
+The quote will be lowered (<kbd>+</kbd>) or raised (<kbd>-</kbd>)
+<i>within the space allotted for it</i> by the given amount.  For
+example, to lower a quote slightly within the space allotted for it,
+you&#8217;d do
+<br/>
+<span class="pre-in-pp">
+  .QUOTE ADJUST +3p
+  There was a soprano named Golda
+  Whose lovers grew colda and colda
+  For during love-making
+  She'd sing the earth-shaking
+  Love theme from Tristan und Isolde.
+  .QUOTE off
+</span>
 </p>
 
 <div class="defaults-container" style="background-color: #ded4bd; border: none;">
+
 <h3 id="quote-control" class="docs defaults">QUOTE control macros and defaults</h3>
 
 <ol style="margin-top: .5em; padding-bottom: .5em;">
@@ -2051,14 +2174,27 @@
 <p class="defaults" style="padding-top: 6px;">
 See
 <a href="#control-macro-args">Arguments to the control macros</a>.
+<br/>
+The following QUOTE control macros may also be
+<a href="#grouping">grouped</a>
+using QUOTE_STYLE.  If you do so, <kbd>QUOTE_LEFT</kbd>, <kbd>QUOTE_CENTER</kbd>,
+and <kbd>QUOTE_RIGHT</kbd> must be entered as:
+<br/>
+<kbd>&nbsp;&nbsp;&nbsp;QUAD LEFT</kbd><br/>
+<kbd>&nbsp;&nbsp;&nbsp;QUAD CENTER</kbd><br/>
+<kbd>&nbsp;&nbsp;&nbsp;QUAD RIGHT</kbd>
 </p>
+
 <span class="pre defaults">
 .QUOTE_FAMILY   default = prevailing document family; default is Times Roman
 .QUOTE_FONT     default = italic; underlined in TYPEWRITE
 .QUOTE_SIZE     default = +0 (ie same size as paragraph text)
-.QUOTE_AUTOLEAD default = none; leading of quotes is the same as paragraphs
+<a id="quote-autolead">.QUOTE_AUTOLEAD default = none; leading of quotes is the same as paragraphs </a>
 .QUOTE_COLOR    default = black
 .QUOTE_INDENT  (see below, "Quote indent")
+.QUOTE_LEFT    -+  Quad direction of quote.
+.QUOTE_CENTER   |  LEFT observes QUOTE_INDENT;
+.QUOTE_RIGHT   -+  CENTER and RIGHT do not
 </span>
 </div>
 
@@ -2086,19 +2222,13 @@
 </p>
 
 <div class="box-tip">
-<p class="tip-top">
+<p class="tip">
 <span class="note">Note:</span>
 If your PARA_INDENT is 0 (ie no indenting of the first line of
 paragraphs), you <i>must</i> set a QUOTE_INDENT yourself, with a
 unit of measure appended to the argument. Mom has no default for
 QUOTE_INDENT if paragraph first lines are not being indented.
 </p>
-
-<p class="tip-bottom">
-<span class="note">Additional note:</span>
-QUOTE_INDENT also sets the indent for
-<a href="#blockquote">blockquotes</a>.
-</p>
 </div>
 
 <h4 id="always-fullspace-quotes" class="docs" style="margin-top: -.25em;">2. Spacing above and below quotes (typeset only)</h4>
@@ -2112,7 +2242,7 @@
 </span>
 with no argument.  If you wish to restore mom&#8217;s
 default behaviour regarding the spacing of quotes (see
-<a href="#quote-spacing">above</a>),
+<a href="#quote-spacing">Quote spacing</a>),
 invoke the macro with any argument (<kbd>OFF, QUIT, END, X</kbd>...)
 </p>
 
@@ -2179,7 +2309,7 @@
 Besides indenting blockquotes, mom further sets them off from
 running text with a small amount of vertical whitespace top and
 bottom.  (See
-<a href="#quote-spacing">above</a>
+<a href="#quote-spacing">Quote spacing</a>
 for a complete explanation of how this is managed, and how
 to control it.)
 </p>
@@ -2191,13 +2321,18 @@
 </div>
 
 <div class="box-macro-args">
-Macro: <b>BLOCKQUOTE</b> <kbd class="macro-args">toggle</kbd>
+Macro: <b>BLOCKQUOTE</b>  <kbd class="macro-args">[ ADJUST +|-&lt;space&gt; ] | &lt;anything&gt;</kbd>
 </div>
 
 <p class="alias" style="margin-bottom: 0;">
 <i>Aliases: </i> <b>CITE, CITATION</b>
 </p>
 
+<p class="requires">
+&bull;&nbsp;The argument to <kbd style="font-style: normal">ADJUST</kbd> requires a
+<a href="definitions.html#unitofmeasure">unit of measure</a>
+</p>
+
 <p>
 BLOCKQUOTE is a toggle macro.  To begin a cited passage, invoke
 the tag with no argument, then type in your blockquote.  When
@@ -2219,6 +2354,27 @@
 <kbd><a href="#pp">.PP</a></kbd>.
 </p>
 
+<p>
+Mom does her best to equalize whitespace around blockquotes and make
+sure the line following it falls on a valid baseline.  On occasion,
+you may need to tweak the blockquote placement slightly, which is
+done by passing <kbd>ADJUST</kbd> to BLOCKQUOTE with a plus or minus
+value.  The blockquote will be lowered (<kbd>+</kbd>) or raised
+(<kbd>-</kbd>) <i>within the space allotted for it</i> by the given
+amount.  For example, to raise a blockquote slightly within the
+space allotted for it, you&#8217;d do
+<br/>
+<span class="pre-in-pp">
+  .BLOCKQUOTE ADJUST -3p
+  True! - nervous - very, very dreadfully nervous I had been and
+  am; but why will you say that I am mad?  The disease had sharpened
+  my senses - not destroyed - not dulled them.
+  .RIGHT
+  \[em]Edgar Allen Poe, The Tell-Tale Heart
+  .QUOTE off
+</span>
+</p>
+
 <div class="box-tip">
 <p class="tip">
 <span class="note">Note:</span>
@@ -2243,12 +2399,16 @@
 <p class="defaults" style="padding-top: 6px;">
 See
 <a href="#control-macro-args">Arguments to the control macros</a>.
+<br/>
+The following BLOCKQUOTE control macros may also be
+<a href="#grouping">grouped</a>
+using BLOCKQUOTE_STYLE.
 </p>
 <span class="pre defaults">
 .BLOCKQUOTE_FAMILY   default = prevailing document family; default is Times Roman
 .BLOCKQUOTE_FONT     default = roman
 .BLOCKQUOTE_SIZE     default = -1 (point)
-.BLOCKQUOTE_AUTOLEAD default = none; leading of blockquotes is the same as paragraphs
+<a id="blockquote-autolead">.BLOCKQUOTE_AUTOLEAD default = none; leading of blockquotes is the same as paragraphs</a>
 .BLOCKQUOTE_COLOR    default = black
 .BLOCKQUOTE_QUAD     default = left
 .BLOCKQUOTE_INDENT  (see below)
@@ -2280,19 +2440,13 @@
 </p>
 
 <div class="box-tip">
-<p class="tip-top">
+<p class="tip">
 <span class="note">Note:</span>
 If your PARA_INDENT is 0 (ie no indenting of the first line of
 paragraphs), you <i>must</i> set a BLOCKQUOTE_INDENT yourself, with
 a unit of measure appended to the argument.  Mom has no default for
 BLOCKQUOTE_INDENT if paragraph first lines are not being indented.
 </p>
-
-<p class="tip-bottom">
-<span class="note">Additional note:</span>
-BLOCKQUOTE_INDENT also sets the indent for
-<a href="#quote">quotes</a>.
-</p>
 </div>
 
 
@@ -2308,7 +2462,7 @@
 </span>
 with no argument.  If you wish to restore mom&#8217;s default
 behaviour regarding the spacing of blockquotes (see
-<a href="#quote-spacing">above</a>),
+<a href="#quote-spacing">Quote spacing</a>),
 invoke the macro with any argument (<b>OFF, QUIT, END,
 X</b>...).
 </p>
@@ -2506,6 +2660,10 @@
 <p class="defaults" style="padding-top: 6px;">
 See
 <a href="#control-macro-args">Arguments to the control macros</a>.
+<br/>
+The following CODE control macros may also be
+<a href="#grouping">grouped</a>
+using CODE_STYLE.
 </p>
 <span class="pre defaults">
 .CODE_FAMILY  default = Courier
@@ -2883,9 +3041,6 @@
   Lorem ipsum dolor sit amet, consetetur sadipscing elitr,
   sed diam nonumy eirmod tempor invidunt ut labore.
 </span>
-</p>
-
-<p>
 Alternatively, you may use the single-purpose macro,
 <kbd>.QUIT_LISTS</kbd>, to get yourself out of a list structure.  In
 the example above, the two <kbd>.LIST&nbsp;OFF</kbd> lines could be
@@ -2935,7 +3090,12 @@
 <div class="defaults-container" style="background-color: #ded4bd; border: none;">
 <h3 id="list-control" class="docs defaults">LIST control macros and defaults</h3>
 
-<ol style="margin-top: .5em; padding-bottom: .5em;">
+<p style="margin-top: 0; margin-left: .5em">
+LIST control macros may not be
+<a href="#grouping">grouped</a>.
+</p>
+
+<ol style="margin-top: -.5em; padding-left: 1.5em; padding-bottom: .5em;">
   <li><a href="#shift-list">Indenting lists (SHIFT_LIST)</a></li>
   <li><a href="#reset-list">Resetting an initialized list&#8217;s enumerator (RESET_LIST)</a></li>
   <li><a href="#pad-list-digits">Padding digit enumerators (PAD_LIST_DIGITS)</a></li>
@@ -3377,8 +3537,9 @@
 
 <ol style="margin-top: .5em; padding-bottom: .5em;">
   <li><a href="#number-lines-general">Family/font/size/colour</a></li>
+  <li><a href="#number-lines-per-section">Reset line numbering after COLLATE</a></li>
   <li><a href="#number-quote-lines">Line numbering control for quotes and blockquotes</a>
-  <ul>
+  <ul style="padding-left: 1em">
     <li><a href="#number-quote-lines-global">Including QUOTEs and BLOCKQUOTEs in the line numbering scheme</a></li>
     <li><a href="#number-quote-lines-selective">Selectively enabling line numbering for QUOTEs and BLOCKQUOTEs</a></li>
     <li><a href="#number-quote-lines-gutter">Changing the line number gutter for QUOTEs and BLOCKQUOTEs</a></li>
@@ -3393,6 +3554,10 @@
 <p class="defaults" style="padding-top: 6px;">
 See
 <a href="#control-macro-args">Arguments to the control macros</a>.
+<br/>
+The following NUMBER_LINES control macros may also be
+<a href="#grouping">grouped</a>
+using LINENUMBER_STYLE.
 </p>
 <span class="pre defaults">
 .LINENUMBER_FAMILY default = prevailing family or document family; default is Times Roman
@@ -3402,7 +3567,22 @@
 </span>
 </div>
 
-<h4 id="number-quote-lines" class="docs" style="margin-top: -1.75em;">2. Line numbering control macros for QUOTE and BLOCKQUOTE</h4>
+<h4 id="number-lines-per-section" class="docs" style="margin-top: -1.75em;">2. Reset line numbering after COLLATE</h4>
+
+<p>
+After
+<a href="rectoverso.html#collate">COLLATE</a>,
+line numbering continues from where it left off.  If you would like
+each chapter or major document section to begin its line numbering
+at &#8220;1&#8221;, invoke
+<span class="pre-in-pp">
+  .NUMBER_LINES_PER_SECTION
+</span>
+after
+<a href="#number-lines"><kbd>.NUMBER_LINES</kbd></a>.
+</p>
+
+<h4 id="number-quote-lines" class="docs" style="margin-top: 0em;">3. Line numbering control macros for QUOTE and BLOCKQUOTE</h4>
 
 <h5 id="number-quote-lines-global" class="docs" style="font-size: 87%">&bull;&nbsp;Including QUOTEs and BLOCKQUOTEs in the line numbering scheme</h5>
 
@@ -3993,6 +4173,10 @@
 <p class="defaults" style="padding-top: 6px;">
 See
 <a href="#control-macro-args">Arguments to the control macros</a>.
+<br/>
+The following FOOTNOTE control macros may also be
+<a href="#grouping">grouped</a>
+using FOOTNOTE_STYLE.
 </p>
 <span class="pre defaults">
 .FOOTNOTE_FAMILY    default = prevailing document family; default is Times Roman
@@ -4711,19 +4895,18 @@
     <li><a href="#endnotes-hdrftr-center">Header/footer centre string when doctype is CHAPTER</a></li>
     <li><a href="#endnotes-allows-headers">Allow headers on endnotes pages</a></li>
   </ul></li>
-  <li><a href="#endnotes-main-title"><b>Endnotes' first-page title control</b></a>
+  <li><a href="#endnotes-header"><b>Endnotes header (first-page title) control</b></a>
   <ul style="margin-left: -.5em;">
-    <li><a href="#endnote-string">Title string</a></li>
-    <li><a href="#endnote-string-control">Title string control macros and defaults</a></li>
-    <li><a href="#endnote-string-placement">Title string placement</a></li>
-    <li><a href="#endnote-string-underline">Title string underscoring</a></li>
-    <li><a href="#endnote-string-caps">Title string capitalization</a></li>
+    <li><a href="#endnotes-header-string">Header string</a></li>
+    <li><a href="#endnotes-header-string-control">Header string control macros and defaults</a></li>
+    <li><a href="#endnotes-header-placement">Header string placement</a></li>
+    <li><a href="#endnotes-header-underscore">Header string underscoring</a></li>
+    <li><a href="#endnotes-header-caps">Header string capitalization</a></li>
   </ul></li>
   <li><a href="#endnotes-doc-title"><b>Endnotes document-identification string control</b></a>
   <ul style="margin-left: -.5em;">
     <li><a href="#endnote-title">Document-identification string(s)</a></li>
     <li><a href="#endnote-title-control">Document-identification string control macros and defaults</a></li>
-    <li><a href="#endnote-title-underscore">Document-identification string underscoring</a></li>
   </ul></li>
   <li><a href="#endnotes-numbering"><b>Endnotes referencing style</b></a>
   <ul style="margin-left: -.5em;">
@@ -4747,6 +4930,10 @@
 <p class="defaults" style="padding-top: 6px;">
 See
 <a href="#control-macro-args">Arguments to the control macros</a>.
+<br/>
+The following ENDNOTE control macros may also be
+<a href="#grouping">grouped</a>
+using ENDNOTE_STYLE.
 </p>
 <span class="pre defaults">
 .ENDNOTE_FAMILY    default = prevailing document family; default is Times Roman
@@ -5200,59 +5387,82 @@
 </p>
 </div>
 
-<h4 id="endnotes-main-title" class="docs">4. Endnotes' first-page title control</h4>
+<h4 id="endnotes-header" class="docs">4. Endnotes header (first-page title) control</h4>
 
-<!-- -ENDNOTE_STRING- -->
+<!-- -ENDNOTES_HEADER_STRING- -->
 
-<h5 id="endnote-string" class="docs" style="margin-top: 1em; margin-bottom: .5em; margin-left: .5em;">&bull;&nbsp;Title string</h5>
+<h5 id="endnotes-header-string" class="docs" style="margin-top: 1em; margin-bottom: .5em; margin-left: .5em;">&bull;&nbsp;Header (first-page title) string</h5>
 
 <div class="box-macro-args">
-Macro: <b>ENDNOTE_STRING</b> <kbd class="macro-args">&quot;&lt;head to print at the top of endnotes&gt;&quot;</kbd>
+Macro: <b>ENDNOTES_HEADER_STRING</b> <kbd class="macro-args">&quot;&lt;title to print at the top of endnotes&gt;&quot;</kbd>
 </div>
 
+<p class="alias" style="margin-bottom: 0;">
+<i>Alias:</i> <b>ENDNOTE_STRING</b> (for compatibility with older documents)
+</p>
+
 <p>
 By default, mom prints the word &#8220;ENDNOTES&#8221; as a head
 at the top of the first page of endnotes.  If you want her to
-print something else, invoke <kbd>.ENDNOTE_STRING</kbd> with the
-endnotes-page head you want, surrounded by double-quotes.  If you
-don&#8217;t want a head at the top of the first endnotes-page,
-invoke <kbd>.ENDNOTE_STRING</kbd> with a blank argument (either two
-double-quotes side by side&mdash;<kbd>&quot;&quot;</kbd>&mdash;or no
-argument at all).
+print something else, invoke <kbd>.ENDNOTES_HEADER_STRING</kbd>
+with the endnotes-page head you want, surrounded by double-quotes.
+If you don&#8217;t want a head at the top of the first
+endnotes-page, invoke <kbd>.ENDNOTES_HEADER_STRING</kbd>
+with a blank argument (either two double-quotes side by
+side&mdash;<kbd>&quot;&quot;</kbd>&mdash;or no argument at all).
 </p>
 
-<!-- -ENDNOTE_STRING_CONTROL- -->
+<!-- -ENDNOTES_HEADER_CONTROL- -->
 
-<h5 id="endnote-string-control" class="docs" style="margin-top: -.5em; margin-bottom: .5em; margin-left: .5em;">&bull;&nbsp;Title control macros and defaults</h5>
+<h5 id="endnotes-header-string-control" class="docs" style="margin-top: -.5em; margin-bottom: .5em; margin-left: .5em;">&bull;&nbsp;Header (first-page title) control macros and defaults</h5>
 
 <div class="defaults-container" style="padding-bottom: 8px;">
 <p class="defaults" style="padding-top: 6px;">
 See
 <a href="#control-macro-args">Arguments to the control macros</a>.
+<br/>
+The following ENDNOTES_HEADER control macros may also be
+<a href="#grouping">grouped</a>
+using ENDNOTES_HEADER_STYLE.
 </p>
+
+<p style="margin-top: .5em; margin-bottom: 0; margin-left: .5em">
+Please note that &#8220;_HEADER_&#8221;, here, refers to the title
+that appears at the top of the first endnotes page, not to the page
+headers of subsequent endnotes pages.
 <span class="pre defaults">
-.ENDNOTE_STRING_FAMILY  default = prevailing document family
-.ENDNOTE_STRING_FONT    default = bold
-.ENDNOTE_STRING_SIZE*   default = +1
-.ENDNOTE_STRING_QUAD    default = centred
-.ENDNOTE_STRING_COLOR   default = black
+.ENDNOTES_HEADER_FAMILY  default = prevailing document family
+.ENDNOTES_HEADER_FONT    default = bold
+.ENDNOTES_HEADER_SIZE*   default = +1
+.ENDNOTES_HEADER_QUAD    default = centred
+.ENDNOTES_HEADER_COLOR   default = black
 
 *Relative to the size of the endnotes text (set with ENDNOTE_PT_SIZE)
 </span>
+</p>
 </div>
 
-<!-- -ENDNOTE_STRING_ADVANCE- -->
+<p style="margin-top: -2em">
+<b>Note:</b> <i>For compatibility with older documents, these macros are aliased
+as</i> <kbd>.ENDNOTE_STRING_&lt;SPEC&gt;</kbd>, e.g. <kbd>.ENDNOTE_STRING_FAMILY</kbd>.
+</p>
+
+<!-- -ENDNOTES_HEADER_V_POS- -->
 
-<h5 id="endnote-string-placement" class="docs" style="margin-top: -1em; margin-bottom: .5em; margin-left: .5em;">&bull;&nbsp;Title string placement</h5>
+<h5 id="endnotes-header-placement" class="docs" style="margin-top: -.25em; margin-bottom: .5em; margin-left: .5em;">&bull;&nbsp;Header (first-page title) placement</h5>
 
 <div class="box-macro-args">
-Macro: <b>ENDNOTE_STRING_ADVANCE</b> <kbd class="macro-args">&lt;distance from top of page&gt;</kbd>
+Macro: <b>ENDNOTES_HEADER_V_POS</b> <kbd class="macro-args">&lt;distance from top of page&gt;</kbd>
 </div>
 
 <p class="requires">
 &bull;&nbsp;Argument requires a <a href="definitions.html#unitofmeasure">unit of measusure</a>
 </p>
 
+<p class="alias" style="margin-top: -1em; margin-bottom: 0;">
+<i>Alias:</i> <b>ENDNOTE_STRING_ADVANCE</b> (for compatibility with older documents)
+</p>
+
 <p>
 By default, mom places the title (the docheader, as it were) of
 endnotes pages (typically "ENDNOTES") on the same
@@ -5261,7 +5471,7 @@
 <a href="definitions.html#running">running text</a>.
 If you&#8217;d prefer another location, higher or lower on the page
 (thereby also raising or lowering the starting position of the
-endnotes themselves), invoke <kbd>.ENDNOTE_STRING_ADVANCE</kbd> with
+endnotes themselves), invoke <kbd>.ENDNOTES_HEADER_V_POS</kbd> with
 an argument stating the distance from the top edge of the page at
 which you&#8217;d like the title placed.
 </p>
@@ -5272,20 +5482,23 @@
 mom about it like this:
 <br/>
 <span class="pre-in-pp">
-  .ENDNOTE_STRING_ADVANCE 1.5i
+  .ENDNOTES_HEADER_V_POS 1.5i
 </span>
 </p>
 
-<!-- -ENDNOTE_STRING_UNDERLINE- -->
+<!--- ENDNOTES_HEADER_UNDERSCORE --->
 
-<h5 id="endnote-string-underline" class="docs" style="margin-top: -1em; margin-bottom: .5em; margin-left: .5em;">&bull;&nbsp;Title string underscoring</h5>
+<h5 id="endnotes-header-underscore" class="docs" style="margin-top: -1em; margin-bottom: .5em; margin-left: .5em;">&bull;&nbsp;Header (first-page title) underscoring</h5>
 
 <div class="box-macro-args">
-Macro: <b>ENDNOTE_STRING_UNDERSCORE</b> <kbd class="macro-args">[DOUBLE] [&lt;underscore weight&gt; [&lt;underscore gap&gt; [&lt;distance between double rules]]] | &lt;none&gt; | &lt;anything&gt;</kbd>
+Macro: <b>ENDNOTES_HEADER_UNDERSCORE</b> <kbd class="macro-args">[DOUBLE] [&lt;underscore weight&gt; [&lt;underscore gap&gt; [&lt;distance between double rules]]] | &lt;none&gt; | &lt;anything&gt;</kbd>
 </div>
 
 <p class="alias" style="margin-bottom: 0;">
-<i>Alias:</i> <b>ENDNOTE_STRING_UNDERLINE</b>
+<i>Alias:</i> <b>ENDNOTES_HEADER_UNDERLINE</b>.
+<i>(For compatibility with older documents, also
+aliased as</i> <b>ENDNOTE_STRING_UNDERSCORE</b> <i>and</i>
+<b>ENDNOTE_STRING_UNDERLINE</b>.)
 </p>
 
 <p class="requires">
@@ -5298,16 +5511,16 @@
 </p>
 
 <p>
-Invoked without an argument, <kbd>.ENDNOTE_STRING_UNDERSCORE</kbd>
+Invoked without an argument, <kbd>.ENDNOTES_HEADER_UNDERSCORE</kbd>
 will place a single rule underneath the endnotes page title.  Invoked
-with the argument, <kbd>DOUBLE</kbd>, ENDNOTE_STRING_UNDERSCORE will
+with the argument, <kbd>DOUBLE</kbd>, ENDNOTES_HEADER_UNDERSCORE will
 double-underscore the title.  Invoked with any other non-numeric
 argument, (eg <kbd>OFF, NO, X</kbd>, etc.) the macro disables
 underscoring of the title.
 </p>
 
 <p>
-In addition, you can use ENDNOTE_STRING_UNDERSCORE to control the
+In addition, you can use ENDNOTES_HEADER_UNDERSCORE to control the
 weight of the underscore rule(s), the gap between the title and the
 underscore, and, in the case of double-underscores, the distance
 between the two rules.
@@ -5317,27 +5530,27 @@
 Some examples:
 <br/>
 <span class="pre-in-pp">
-  .ENDNOTE_STRING_UNDERSCORE 1
+  .ENDNOTES_HEADER_UNDERSCORE 1
       - turn underscoring on; set the rule weight to 1 point
 
-  .ENDNOTE_STRING_UNDERSCORE 1 3p
+  .ENDNOTES_HEADER_UNDERSCORE 1 3p
       - turn underscoring on; set the rule weight to 1 point; set
         the gap between the title and the underscore to 3 points
   
-  .ENDNOTE_STRING_UNDERSCORE DOUBLE .75 3p
+  .ENDNOTES_HEADER_UNDERSCORE DOUBLE .75 3p
       - turn double-underscoring on; set the rule weight to 3/4 of
         a point; set the gap between the title and the upper
         underscore to 3 points; leave the gap between the upper
-        and the lower underunderscore at the default
+        and the lower underscore at the default
   
-  .ENDNOTE_STRING_UNDERSCORE DOUBLE 1.5 1.5p 1.5p
+  .ENDNOTES_HEADER_UNDERSCORE DOUBLE 1.5 1.5p 1.5p
       - turn double-underscoring on; set the rule weight to 1-1/2
         points; set the gap between the title and the upper
         underscore to 1-1/2 points; set the gap between the upper
         and the lower underscore to 1-1/2 points
 </span>
 Note, from the above, that in all instances, underscoring (single
-or double) is enabled whenever ENDNOTE_STRING_UNDERSCORE is used in
+or double) is enabled whenever ENDNOTES_HEADER_UNDERSCORE is used in
 this way.
 </p>
 
@@ -5347,16 +5560,20 @@
 title.
 </p>
 
-<!-- -ENDNOTE_STRING_CAPS- -->
+<!-- -ENDNOTES_HEADER_CAPS- -->
 
-<h5 id="endnote-string-caps" class="docs" style="margin-top: -.5em; margin-bottom: .5em; margin-left: .5em;">&bull;&nbsp;Title string capitalization</h5>
+<h5 id="endnotes-header-caps" class="docs" style="margin-top: -.5em; margin-bottom: .5em; margin-left: .5em;">&bull;&nbsp;Header (first-page title) capitalization</h5>
 
 <div class="box-macro-args">
-Macro: <b>ENDNOTE_STRING_CAPS</b> <kbd class="macro-args">toggle</kbd>
+Macro: <b>ENDNOTES_HEADER_CAPS</b> <kbd class="macro-args">toggle</kbd>
 </div>
 
+<p class="alias" style="margin-bottom: 0;">
+<i>Alias:</i> <b>ENDNOTE_STRING_CAPS</b> (for compatibility with older documents)
+</p>
+
 <p>
-Invoked by itself, <kbd>.ENDNOTE_STRING_CAPS</kbd> will
+Invoked by itself, <kbd>.ENDNOTES_HEADER_CAPS</kbd> will
 automatically capitalize the endnotes-page title.  Invoked with any
 other argument, the macro disables automatic capitalization of the
 title.
@@ -5366,8 +5583,8 @@
 If you&#8217;re generating a table of contents, you may want the
 endnotes pages title to be in caps, but the toc entry in caps/lower
 case.  If the argument to
-<kbd><a href="#endnote-string">ENDNOTE_STRING</a></kbd>
-is in caps/lower case and ENDNOTE_STRING_CAPS is on, this is exactly
+<kbd><a href="#endnotes-header-string">ENDNOTES_HEADER_STRING</a></kbd>
+is in caps/lower case and ENDNOTES_HEADER_CAPS is on, this is exactly
 what will happen.
 </p>
 
@@ -5412,87 +5629,25 @@
 <p class="defaults" style="padding-top: 6px;">
 See
 <a href="#control-macro-args">Arguments to the control macros</a>.
+<br/>
+The following ENDNOTE_TITLE_STYLE control macros may also be
+<a href="#grouping">grouped</a>
+using ENDNOTE_TITLE_STYLE_STYLE.
 </p>
 <span class="pre defaults">
-.ENDNOTE_TITLE_FAMILY  default = prevailing document family; default is Times Roman
-.ENDNOTE_TITLE_FONT    default = bold
-.ENDNOTE_TITLE_SIZE*   default = 0
-.ENDNOTE_TITLE_QUAD    default = left
+.ENDNOTE_TITLE_FAMILY default = prevailing document family; default is Times Roman
+.ENDNOTE_TITLE_FONT   default = bold
+.ENDNOTE_TITLE_SIZE*  default = 0
+.ENDNOTE_TITLE_COLOR  default = black
+.ENDNOTE_TITLE_QUAD   default = left
+.ENDNOTE_TITLE_CAPS
+.ENDNOTE_TITLE_SMALLCAPS
+.ENDNOTE_TITLE_UNDERSCORE default = single underscore 
 
 *Relative to the size of the endnotes text (set with ENDNOTE_PT_SIZE)
 </span>
 </div>
 
-<!-- -ENDNOTE_TITLE_UNDERLINE- -->
-
-<h5 id="endnote-title-underscore" class="docs" style="margin-top: -1.25em; margin-bottom: .5em; margin-left: .5em;">&bull;&nbsp;Endnotes document-identification underscoring</h5>
-
-<div class="box-macro-args">
-Macro: <b>ENDNOTE_TITLE_UNDERSCORE</b> <kbd class="macro-args">[DOUBLE] [&lt;underline weight&gt; [&lt;underline gap&gt; [&lt;distance between double rules]]] | &lt;none&gt; | &lt;anything&gt;</kbd>
-</div>
-
-<p class="alias" style="margin-bottom: 0;">
-<i>Alias:</i> <b>ENDNOTE_TITLE_UNDERLINE</b>
-</p>
-
-<p class="requires">
-&bull;&nbsp;The argument
-<span style="font-style: normal"><kbd>&lt;underscore weight&gt;</kbd></span>
-must not have the
-<a href="definitions.html#unitofmeasure">unit of measure</a>,
-<span style="font-style: normal;"><kbd>p</kbd></span>,
-appended to it; all other arguments require a unit of measure
-</p>
-
-<p>
-Invoked without an argument, <kbd>.ENDNOTE_TITLE_UNDERSCORE</kbd>
-will place a single rule underneath the document identification
-string.  Invoked with the argument <kbd>DOUBLE</kbd>,
-ENDNOTE_TITLE_UNDERSCORE will double-underscore the string.  Invoked
-with any other non-numeric argument, (eg <kbd>OFF, NO, X</kbd>,
-etc.) the macro disables underscoring of the string.
-</p>
-
-<p>
-In addition, you can use ENDNOTE_TITLE_UNDERSCORE to control the
-weight of the underscore rule(s), the gap between the title and the
-underscore, and, in the case of double-underscores, the distance
-between the two rules.
-</p>
-
-<p>
-Some examples:
-<br/>
-<span class="pre-in-pp">
-  .ENDNOTE_TITLE_UNDERSCORE 1
-      - turn underscoring on; set the rule weight to 1 point
-
-  .ENDNOTE_TITLE_UNDERSCORE 1 3p
-      - turn underscoring on; set the rule weight to 1 point; set
-        the gap between the string and the underscore to 3 points
-  
-  .ENDNOTE_TITLE_UNDERSCORE DOUBLE .75 3p
-      - turn double-underscoring on; set the rule weight to 3 points
-  
-  .ENDNOTE_TITLE_UNDERSCORE DOUBLE 1.5 1.5p 1.5p
-      - turn double-underscoring on; set the rule weight to 1-1/2
-        points; set the gap between the string and the upper
-        underscore to 1-1/2 points; set the gap between the upper
-        and the lower underscore to 1-1/2 points
-</span>
-</p>
-
-<p>
-Note, from the above, that in all instances, underscoring (single or
-double) is enabled whenever ENDNOTE_TITLE_UNDERSCORE is used in this
-way.
-</p>
-
-<p>
-Mom&#8217;s default is to single-underscore the string with a
-1/2-point rule placed 2 points below its baseline.
-</p>
-
 <!-- -ENDNOTE_NUMBERING- -->
 
 <h4 id="endnotes-numbering" class="docs" style="margin-top: -.25em;">6. Endnotes referencing style</h4>
@@ -6167,11 +6322,12 @@
 
 <ul style="margin-left: -.5em;">
   <li><a href="#finis">Tag: FINIS</a></li>
-  <li>FINIS control macros
+  <li><a href="#finis-control">FINIS control macros</a>
   <ul style="margin-left: -1.25em;">
     <li><a href="#finis-string">Changing the FINIS string</a></li>
     <li><a href="#finis-string-caps">Automatic capitalization of the FINIS string</a></li>
     <li><a href="#finis-color">Changing the FINIS colour</a></li>
+    <li><a href="#finis-no-dashes">Removing the dashes around FINIS</a></li>
   </ul></li>
 </ul>
 
@@ -6243,7 +6399,15 @@
 
 <h3 id="finis-control" class="docs" style="margin-bottom: -1em">Finis contol macros</h3>
 
-<h4 id="finis-string" class="docs">Changing the FINIS string</h4>
+<p>
+Since FINIS is only used once in a document, it has few control
+macros.  It is expected that you will make changes to style
+parameters such as family, font, and size with
+<a href="definitions.html#inlines">inline escapes</a>
+in the FINIS string itself (see below).  
+</p>
+
+<h4 id="finis-string" class="docs" style="margin-top: -.5em">Changing the FINIS string</h4>
 
 <p>
 By default, FINIS prints the word, END, between
@@ -6312,6 +6476,19 @@
 (usually black).
 </p>
 
+<!-- -FINIS DASHES- -->
+
+<h4 id="finis-no-dashes" class="docs">Removing the dashes around FINIS</h4>
+
+<p>
+If you don&#8217;t want the dashes around the FINIS string, you can
+remove them with
+<br/>
+<span class="pre-in-pp">
+  .FINIS_NO_DASHES
+</span>
+</p>
+
 <div class="rule-long"><hr/></div>
 
 <!-- Navigation links -->
diff -Nuar groff-1.22.3.old/contrib/mom/momdoc/docprocessing.html groff-1.22.3/contrib/mom/momdoc/docprocessing.html
--- groff-1.22.3.old/contrib/mom/momdoc/docprocessing.html	2014-11-04 10:38:35.613519146 +0200
+++ groff-1.22.3/contrib/mom/momdoc/docprocessing.html	2015-04-23 20:57:03.000000000 +0300
@@ -2,7 +2,7 @@
 <!--
 This file is part of groff, the GNU roff type-setting system.
 
-Copyright (C) 2004-2014 Free Software Foundation, Inc.
+Copyright (C) 2004-2015 Free Software Foundation, Inc.
 Written by Peter Schaffter (peter@schaffter.ca).
 
 Permission is granted to copy, distribute and/or modify this document
@@ -81,11 +81,24 @@
     <li><a href="#printstyle">PRINTSTYLE</a></li>
     <li><a href="#copystyle">COPYSTYLE</a></li>
   </ul></li>
+  <li><a href="cover.html"><b>Cover pages</b></a>
+  <li><a href="#docheader"><b>Managing the document header</b></a>
+  <ul class="toc-docproc">
+    <li><a href="#docheader">DOCHEADER</a></li>
+    <li><a href="#docheader-control">Docheader control</a>
+    <ul class="toc-docproc">
+      <li><a href="#docheader-desc">Docheader description</a></li>
+      <li><a href="#index-docheader-control">Macro list</a></li>
+    </ul></li>
+  </ul></li>
 </ul>
 <h3 class="toc toc-docproc-header"><a class="header-link" href="#start-macro">Initiate document processing</a></h3>
 <ul class="toc-docproc" style="margin-top: .5em;">
   <li><a href="#start"><b>The START macro</b></a></li>
 </ul>
+</div>
+<div class="mini-toc-col-2">
+<br/>
 <h3 class="toc toc-docproc-header"><a class="header-link" href="#style-before-start">Establishing type and formatting<br/><span style="display: block; margin-top: -.3em;">parameters before START</span></a></h3>
 <ul class="toc-docproc" style="margin-top: .5em;">
   <li><a href="#type-before-start"><b>Behaviour of the typesetting macros before START</b></a>
@@ -94,10 +107,7 @@
     <li><a href="#color">Initializing colours</a></li>
   </ul></li>
 </ul>
-</div>
-<div class="mini-toc-col-2" style="margin-top: -1em;">
-<br/>
-<ul class="toc-docproc" style="margin-top: .5em;">
+<ul class="toc-docproc" style="margin-top: -1em">
   <li><a href="#doc-lead-adjust"><b>Adjust linespacing to fill pages</b></a>
   <ul class="toc-docproc">
     <li><a href="#doc-lead-adjust">DOC_LEAD_ADJUST</a></li>
@@ -106,15 +116,6 @@
       <li><a href="#automatic-shimming">Automatic shimming (headings, etc)</a></li>
     </ul></li>
   </ul></li>
-  <li><a href="#docheader"><b>Managing the document header</b></a>
-  <ul class="toc-docproc">
-    <li><a href="#docheader">DOCHEADER</a></li>
-    <li><a href="#docheader-control">Docheader control</a>
-    <ul class="toc-docproc">
-      <li><a href="#docheader-desc">Docheader description</a></li>
-      <li><a href="#index-docheader-control">Macro list</a></li>
-    </ul></li>
-  </ul></li>
   <li><a href="#columns-intro"><b>Setting documents in columns</b></a>
   <ul class="toc-docproc">
     <li><a href="#columns">COLUMNS</a></li>
@@ -146,11 +147,11 @@
     </ul></li>
   </ul></li>
 </ul>
-<h3 class="toc toc-docproc-header"><a class="header-link" href="#terminating">Terminating a document</a></h3>
 </div>
+<h3 style="margin-top: -.5em; text-align: center; text-transform: uppercase; font-size: 95%;"><a class="header-link" href="#terminating">Terminating a document</a></h3>
 </div>
 
-<div class="rule-short"><br/><hr/></div>
+<div class="rule-short" style="margin-top: -1.75em"><br/><hr/></div>
 
 <!-- ==================================================================== -->
 
@@ -832,7 +833,7 @@
 
 <p>
 Moreover, DOCTITLE does not appear in the
-<a href="definitions.html#pdfoutline">PDF outline </a>,
+<a href="definitions.html#pdfoutline">PDF outline</a>,
 as its presence in window title would make it redundant.
 </p>
 
@@ -1255,7 +1256,7 @@
 <p>
 You may, if you wish, invoke <kbd>.REVISION</kbd> without an
 argument, in which case, no revision number will be printed beside
-&quot;Rev.&quot; in headers or footers.
+&#8220;Rev.&#8221; in headers or footers.
 </p>
 
 <!-- -REVISION_STRING- -->
@@ -1487,7 +1488,7 @@
 
 <p>
 Except for
-<a href="#doctitle">DOCTITLE</a>,
+<a href="#doc-title">DOCTITLE</a>,
 mom does not, by default, provide PDF viewers with a document title.
 You may set one, if you like, with PDF_TITLE.
 </p>
@@ -1509,9 +1510,6 @@
 <h3 id="index-docstyle" class="macro-list">Docstyle macros</h3>
 <ul class="macro-list">
   <li><a href="#doctype">DOCTYPE</a>
-  <ul style="margin-left: -.5em; list-style-type: disc;"> 
-    <li><a href="#doctype-underline">DOCTYPE_UNDERLINE</a> &ndash; how to control DOCTYPE <kbd>NAMED</kbd> underlining</li>      
-  </ul></li>
   <li><a href="#printstyle">PRINTSTYLE</a> &ndash; non-optional macro required for document processing
   <ul style="margin-left: -.5em; list-style-type: disc;">
     <li><a href="#typeset-defaults">Defaults for PRINTSTYLE TYPESET</a></li>
@@ -1603,100 +1601,21 @@
 for how mom outputs each part of the page header.)
 </p>
 
-<p>
-Additionally, if you wish the name of this particular kind of
-document to be coloured, you can pass DOCTYPE <kbd>NAMED</kbd> a
-third (optional) argument: the name of a colour pre-defined (or
-&#8220;initialized&#8221;) with
-<a href="color.html#newcolor">NEWCOLOR</a>
-or
-<a href="color.html#xcolor">XCOLOR</a>.
-For example, if you have a doctype named &#8220;Warning&#8221;,
-and you&#8217;d like &#8220;Warning&#8221; to be in red, assuming you&#8217;ve
-pre-defined (or &#8220;initialized&#8221;) the color, red, this is
-what the DOCTYPE entry would look like:
-<br/>
-<span class="pre">
-  .DOCTYPE NAMED "Warning" red
-</span>
-</p>
-
-<div class="box-tip" style="margin-top: 1.5em;">
-<h3 id="doctype-underline" class="docs control">How to control DOCTYPE NAMED underlining</h3>
-
-<p style="tip">
-By default, the string passed to DOCTYPE <kbd>NAMED</kbd> is
-underlined in the docheader, and on document-cover pages and cover
-(&#8220;title&#8221;) pages.  (See the
-<a href="cover.html#intro">Introduction to covers</a>
-for the difference between &#8220;doc cover&#8221; and
-&#8220;cover&#8221; pages.)
-</p>
-
-<p>
-You can use the macro DOCTYPE_UNDERLINE to set the weight of
-the underline and its distance from where the doctype-name appears
-in the docheader (doc covers and covers handle underlining of the
-doctype-name differently; see
-<a href="cover.html#cover-underline">COVER_UNDERLINE</a>),
-or simply toggle doctype underlining on or off.  Mom&#8217;s default
-is to underline the doctype-name.
-</p>
-
-<p>
-The order of arguments is <kbd>weight</kbd>, optionally followed by
-<kbd>gap</kbd>, where &#8220;gap&#8221; is the distance from the
-<a href="definitions.html#baseline">baseline</a>
-of the doctype-name to the underline.
-</p>
-
-<p>
-The <kbd>weight</kbd> argument is given in points, or fractions
-thereof, and must not have the
-<a href="definitions.html#unitofmeasure">unit of measure</a>,
-<kbd>p</kbd>, appended.  Like
-<a href="inlines.html#rule-weight">RULE_WEIGHT</a>,
-weights must be greater than 0 and less than 100.  Mom&#8217;s
-default for DOCTYPE <kbd>NAMED</kbd> underlining is 1/2 point.
-</p>
-
-<p>
-The <kbd>gap</kbd> argument can be given using any unit of measure,
-and must have the unit of measure appended to the argument.
-The distance of the gap is measured from the baseline of the
-DOCTYPE <kbd>NAMED</kbd> name to the upper edge of the underline.
-Mom&#8217;s default gap for named-doctype underlining is 2 points.
-</p>
-
-<p>
-As an example, suppose you want the doctype-name underlined in the
-docheader with a 2-point rule separated from the doctype-name by 3
-points.  The way to accomplish it is:
-<br/>
-<span class="pre-in-pp">
-  .DOCTYPE_UNDERLINE 2 3p
-</span>
-If you wanted the same thing, but were content with mom&#8217;s
-default gap of 2 points,
+<div class="box-tip">
+<p id="copystyle-note" class="tip">
+<span class="note">Note: version 2.1 change</span>
 <br/>
-<span class="pre-in-pp">
-  .DOCTYPE_UNDERLINE 2
-</span>
-would do the trick.
-</p>
-
-<p>
-If you merely want to toggle the underlining of
-the doctype-name in docheaders on or off, invoke
-<kbd>.DOCTYPE_UNDERLINE</kbd> by itself to turn the underlining on,
-or <kbd>.DOCTYPE_UNDERLINE&nbsp;OFF</kbd> (or NO, X, etc.)
-</p>
-
-<p class="tip-bottom">
-Please note that if you supply a weight to DOCTYPE_UNDERLINE, and
-optionally a gap, you also turn the underlining of the doctype-name
-in docheaders on; if this is not what you want, you must turn the
-underlining off manually afterwards.
+<kbd>DOCTYPE NAMED "string"</kbd> no longer accepts a color argument
+after <kbd>"string"</kbd>.  Setting the color of the string is now
+done with <kbd>DOCTYPE_COLOR &lt;color&gt;</kbd>.  Default
+underscoring of <kbd>"string"</kbd> in the docheader and on covers
+has been removed.  Use <kbd>DOCTYPE_UNDERLINE</kbd>,
+<kbd>DOC_COVER_DOCTYPE_UNDERLINE</kbd> and/or
+<kbd>COVER_DOCTYPE_UNDERLINE</kbd> to re-enable it.  All three
+take the same arguments listed in the
+<a href="docelement.html#underline">Underline style, rule weight</a>
+section of
+<a href="docelement.html#control-macro-args">Arguments to the control macros</a>.
 </p>
 </div>
 
@@ -2556,22 +2475,16 @@
 of the first line of type.
 </p>
 
-<div class="box-tip">
-<p class="tip">
-<span class="tip">Tip:</span>
-Since no document processing happens until you invoke
-<a href="#start"><kbd>.START</kbd></a>&mdash;including
-anything to do with docheaders&mdash;you can
-typeset your own docheader prior to START (if
-you don&#8217;t like the way mom does things) and use
-<kbd>.DOCHEADER&nbsp;OFF</kbd> with its optional distance
-argument to ensure that the body of your document starts where
-you want.  You can even insert a PDF or PostScript image file (see
-<a href="images.html#pspic">PSPIC</a>).
-and
-<a href="images.html#pdf-image">PDF_IMAGE</a>).
+<p>
+With <kbd>DOCHEADER OFF</kbd>, it is possible to create your own
+custom docheaders (after
+<a href="#start">START</a>)
+using mom&#8217;s typesetting macros.  It is recommended that if you
+do create a custom docheader, you make
+<a href="docprocessing.html#shim"><kbd>.SHIM</kbd></a>
+the last macro before the first item of your document (for
+example, <kbd>.PP</kbd> or <kbd>.HEADING 1</kbd>.  PP...)
 </p>
-</div>
 
 <!-- DOCHEADER CONTROL -->
 
@@ -2599,8 +2512,7 @@
       by        medium italic, same size as running text
    Author(s)    medium italic, same size as running text
 
-(Document type) bold italic, underscored, 3 points larger than running text
-
+(Document type) bold italic, 3 points larger than running text
 </span>
 </div>
 
@@ -2613,7 +2525,6 @@
 <span class="pre" style="color: #302419;">
  Chapter &lt;n&gt;   bold, 4 points larger than running text
 Chapter Title  bold italic, 4 points larger than running text
-
 </span>
 </div>
 
@@ -2624,7 +2535,6 @@
 author and document type are what you supply with the
 <a href="#reference-macros">reference macros</a>.
 Any you leave out will not appear; mom will compensate:
-
 </p>
 
 <div class="box-tip">
@@ -2633,44 +2543,48 @@
 If your DOCTYPE is <kbd>CHAPTER</kbd> and you have both &#8220;Chapter
 &lt;n&gt;&#8221; and a &#8220;Chapter Title&#8221; (as above), mom
 inserts a small amount of whitespace between them, equal to
-one-quarter of the <a href="definitions.html#leading">leading</a> in
-effect.  If this doesn&#8217;t suit you, you can alter the space by
-including the
-<a href="definitions.html#inlines">inline escapes</a>,
-<a href="inlines.html#up"><kbd>\*[UP]</kbd></a>
-or
-<a href="inlines.html#down"><kbd>\*[DOWN]</kbd></a>,
-in the argument you pass to
-<a href="#chapter-title">CHAPTER_TITLE</a>,
-like this:
-<br/>
-<span class="pre-in-pp" style="margin-bottom: -1em;">
-  .CHAPTER_TITLE "\*[DOWN 2p]Why Not Patent Calculus?"
-</span>
-or
-<span class="pre-in-pp" style="margin-top: -.5em;">
-  .CHAPTER_TITLE "\*[UP 2p]Why Not Patent Calculus?"
-</span>
+one-quarter of the
+<a href="definitions.html#leading">leading</a>
+in effect.  If this doesn&#8217;t suit you, you can remove or alter
+the space with
+<a href="#space-before">CHAPTER_TITLE_SPACE_BEFORE</a>.
 </p>
 </div>
 
 <div class="macro-list-container">
 <h3 id="index-docheader-control" class="macro-list">Docheader control</h3>
-<ol class="macro-list">
-  <li><a href="#change-start">Change the starting position of the docheader</a></li>
-  <li><a href="#docheader-quad">Change quad direction the entire docheader</a></li>
-  <li><a href="#docheader-family">Change the family of the entire docheader</a></li>
-  <li><a href="#change-family">Change the family of individual docheader elements</a></li>
-  <li><a href="#change-font">Change the font of individual docheader elements</a></li>
-  <li><a href="#change-size">Adjust the size of docheader elements</a></li>
-  <li><a href="#adjust-leading">Adjust the docheader leading</a></li>
-  <li><a href="#docheader-color">Change the colour of the entire docheader</a></li>
-  <li><a href="#change-color">Change the colour of the individual docheader elements</a></li>
-  <li><a href="#change-attribute">Change the attribution string (&#8220;by&#8221;)</a></li>
-</ol>
+
+<p style="margin-top: -1.5em; margin-left: .5em; margin-right: .5em">
+With the docheader control macros, you can change the family,
+colour, leading and quad direction of the entire docheader.  You can
+also set the style parameters for each part individually.  Style
+parameters include family, font, size, colour, lead, space before,
+caps, smallcaps and underscoring.
+</p>
+
+<ul class="macro-list" style="margin-top: -.5em">
+  <li><a href="#change-whole-docheader">1. Changes to the whole docheader</a>
+  <ul style="list-style-type: disc">
+    <li><a href="#change-start">Change the starting position of the docheader</a></li>
+    <li><a href="#docheader-family">Change the family of the whole docheader</a></li>
+    <li><a href="#docheader-color">Change the colour of the whole docheader</a></li>
+    <li><a href="#docheader-lead">Change the leading of the whole docheader</a></li>
+    <li><a href="#docheader-quad">Change the quad direction whole the docheader</a></li>
+  </ul>
+  </li>
+  <li><a href="#part-by-part">2. Part by part changes</a>
+  <ul style="list-style-type: disc">
+    <li><a href="#list-of-params">List of parameters and arguments</a></li>
+    <li><a href="#grouping">Grouping part/parameter changes</a> &ndash; very handy</li>
+  </ul>
+  </li>
+  <li><a href="#change-attribute">3. Changing or removing the attribution string (&#8220;by&#8221;)</a></li>
+</ul>
 </div>
 
-<h4 id="change-start" class="docs">1. Change the starting position of the docheader</h4>
+<h4 id="change-whole-docheader" class="docs" style="font-size: 100%">1. Changes to the whole docheader</h4>
+
+<h5 id="change-start" class="docs">Change the starting position of the docheader</h5>
 
 <p>
 By default, a docheader starts on the same
@@ -2707,7 +2621,7 @@
 </p>
 </div>
 
-<h4 id="docheader-quad" class="docs">2. Change the quad direction of the docheader</h4>
+<h5 id="docheader-quad" class="docs">Change the quad direction of the docheader</h5>
 
 <p>
 By default, mom centers the docheader.  If you&#8217;d prefer to
@@ -2718,7 +2632,7 @@
 <kbd>C</kbd>).
 </p>
 
-<h4 id="docheader-family" class="docs">3. Change the family of the entire docheader</h4>
+<h5 id="docheader-family" class="docs">Change the family of the entire docheader</h5>
 
 <p>
 By default, mom sets the docheader in the same
@@ -2743,186 +2657,199 @@
 
 <p>
 Please note that if you use DOCHEADER_FAMILY, you can still alter
-the family of individual parts of the docheader with the macros
-listed
-<a href="#change-family">here</a>.
+the family of individual parts of the docheader.
 </p>
 
-<h4 id="change-family" class="docs">4. Change the family of individual docheader elements</h4>
+<h5 id="docheader-color" class="docs">Change the color of the entire docheader</h5>
 
 <p>
-The following macros let you change the
-<a href="definitions.html#family">family</a>
-of each docheader element separately:
-</p>
-<ul style="list-style-type: none; margin: -.5em;">
-  <li>Macro: <b>TITLE_FAMILY</b> <kbd class="macro-args">&lt;family&gt;</kbd></li>
-  <li>Macro: <b>CHAPTER_TITLE_FAMILY</b> <kbd class="macro-args">&lt;family&gt;</kbd></li>
-  <li>Macro: <b>SUBTITLE_FAMILY</b> <kbd class="macro-args">&lt;family&gt;</kbd></li>
-  <li>Macro: <b>AUTHOR_FAMILY</b> <kbd class="macro-args">&lt;family&gt;</kbd></li>
-  <li>Macro: <b>DOCTYPE_FAMILY</b> <kbd class="macro-args">&lt;family&gt;</kbd>
-      (if <a href="#doctype">DOCTYPE</a> is <kbd>NAMED</kbd>)
-  </li>
-</ul>
-
-<p>
-Simply pass the appropriate macro the family you want, just as you
-would with
-<a href="typesetting.html#family">FAMILY</a>.
-</p>
-
-<h4 id="change-font" class="docs">5. Change the font of individual docheader elements</h4>
-
-<p>
-The following macros let you change the
-<a href="definitions.html#font">font</a>
-of each docheader element separately:
-</p>
-<ul style="list-style-type: none; margin: -.5em;">
-  <li>Macro: <b>TITLE_FONT</b> <kbd class="macro-args">R | B | I | BI</kbd></li>
-  <li>Macro: <b>CHAPTER_TITLE_FONT</b> <kbd class="macro-args">R | B | I | BI</kbd></li>
-  <li>Macro: <b>SUBTITLE_FONT</b> <kbd class="macro-args">R | B | I | BI</kbd></li>
-  <li>Macro: <b>AUTHOR_FONT</b> <kbd class="macro-args">R | B | I | BI</kbd></li>
-  <li>Macro: <b>DOCTYPE_FONT</b> <kbd class="macro-args">R | B | I | BI</kbd>
-      (if <a href="#doctype">DOCTYPE</a> is <kbd>NAMED</kbd>)
-  </li>
-</ul>
-
-<p>
-Simply pass the appropriate macro the font you want. <kbd>R, B,
-I</kbd> and <kbd>BI</kbd> have the same meaning as they do for
-<a href="typesetting.html#font">FT</a>.  You may also use any of the
-<a href="appendices.html#style-extensions">style extensions</a>
-provided by mom.
-</p>
-
-<h4 id="change-size" class="docs">6. Adjust the size of individual docheader elements</h4>
-
-<p>
-The following macros let you adjust the point size of each docheader
-element separately.
-</p>
-
-<p>
-Mom calculates the point size of docheader elements from the point
-size of paragraphs in running text, so you must prepend a + or -
-sign to the argument.  Points is assumed as the
-<a href="definitions.html#unitofmeasure">unit of measure</a>,
-so there&#8217;s no need to append a unit to the argument.
-Fractional point sizes are allowed.
+The default color for docheaders is black, as you&#8217;d expect.
+If you wish to change it, use
+<kbd>.DOCHEADER_COLOR&nbsp;&lt;color&gt;</kbd>, where
+<kbd>&nbsp;&lt;color&gt;</kbd> is a color pre-initialized with
+<a href="color.html#xcolor">XCOLOR</a>
+or
+<a href="color.html#newcolor">NEWCOLOR</a>.
 </p>
 
-<ul style="list-style-type: none; margin: -.5em;">
-  <li>Macro: <b>TITLE_SIZE</b> <kbd class="macro-args">&lt;+/-points&gt;</kbd>
-      <br/>
-      &nbsp;&nbsp;&nbsp;default = +3.5 (+4 if docheader title is &quot;Chapter &lt;n&gt;&quot;)
-  </li>
-  <li>Macro: <b>CHAPTER_TITLE_SIZE</b> <kbd class="macro-args">&lt;+/-points&gt;</kbd>
-      <br/>
-      &nbsp;&nbsp;&nbsp;default = +4
-  </li>
-  <li>Macro: <b>SUBTITLE_SIZE</b> <kbd class="macro-args">&lt;+/-points&gt;</kbd>
-      <br/>
-      &nbsp;&nbsp;&nbsp;default = +0
-  </li>
-  <li>Macro: <b>AUTHOR_SIZE</b> <kbd class="macro-args">&lt;+/-points&gt;</kbd>
-      <br/>
-      &nbsp;&nbsp;&nbsp;default = +0
-  </li>
-  <li>Macro: <b>DOCTYPE_SIZE</b> <kbd class="macro-args">&lt;+/-points&gt;</kbd>
-      (if <a href="#doctype">DOCTYPE</a> is <kbd>NAMED</kbd>)
-      <br/>
-      &nbsp;&nbsp;&nbsp;default = +3
-  </li>
-</ul>
+<h5 id="docheader-lead" class="docs">Change the leading of the entire docheader</h5>
 
 <p>
-Simply pass the appropriate macro the size adjustment you want.
+By default, mom uses the leading in effect for
+<a href="definitions.html#running">running text</a>
+for docheaders.  If you want to increase or
+decrease the overall docheader leading, use
+<kbd>.DOCHEADER_LEAD&nbsp;+|-&lt;amount&gt;</kbd>, where
+<kbd>&lt;amount&gt;</kbd> is the number of
+<a href="definitions.html#picaspoints">points</a>
+by which to make the adjustment.  
 </p>
 
-<h4 id="adjust-leading" class="docs">7. Adjust the docheader leading</h4>
+<h4 id="part-by-part" class="docs" style="font-size: 100%">2. Part by part changes</h4>
 
 <p>
-The
-<a href="definitions.html#leading">leading</a>
-of docheaders is the same as running text.  If you&#8217;d like your
-docheaders to have a different leading, say, 2 points more than the
-lead of running text, use:
+Whenever you want to change the style parameters for any part of
+the docheader, simply join the name of the part to the parameter
+you wish to change using an underscore, then supply any necessary
+arguments.  The subitle double-underlined?  No problem.
 <br/>
 <span class="pre-in-pp">
-  .DOCHEADER_LEAD +2
+  .SUBTITLE_UNDERLINE DOUBLE
 </span>
-Since the leading of docheaders is calculated from the lead of running
-text, a + or - sign is required before the argument (how much to add
-or subtract from the lead of running text).  No 
-<a href="definitions.html#unitofmeasure">unit of measure</a>
-is required; points is assumed.
-</p>
-
-<h4 id="docheader-color" class="docs">8. Change the colour of the entire docheader</h4>
-
-<p>
-If you want to colourize the entire docheader:
+Author in red?
 <br/>
 <span class="pre-in-pp">
-  .DOCHEADER_COLOR <kbd class="macro-args">&lt;color name&gt;</kbd>
+  .AUTHOR_COLOR red
+</span>
+Title in smallcaps?
+<span class="pre-in-pp">
+  .TITLE_SMALLCAPS
 </span>
-You must pre-define (or &#8220;initialize&#8221;) the colour with
-<a href="color.html#newcolor">NEWCOLOR</a>
-or
-<a href="color.html#xcolor">XCOLOR</a>.
-</p>
-
-
-<h4 id="change-color" class="docs">9. Change the colour of the docheader elements individually</h4>
-
-<p>
-The following macros let you change the colour of each
-docheader element separately.  You must pre-define (or
-&#8220;initialize&#8221;) the colour with
-<a href="color.html#newcolor">NEWCOLOR</a>
-or
-<a href="color.html#xcolor">XCOLOR</a>.
 </p>
-<ul style="list-style-type: none; margin: -.5em;">
-  <li>Macro: <b>TITLE_COLOR</b> <kbd class="macro-args">&lt;colorname&gt;</kbd></li>
-  <li>Macro: <b>CHAPTER_TITLE_COLOR</b> <kbd class="macro-args">&lt;colorname&gt;</kbd>
-  <ul style="list-style-type: disc; margin-left: -.5em;">
-    <li>Note: <b>CHAPTER_TITLE_COLOR</b> is needed only if you supply both a
-        <a href="#chapter">CHAPTER</a>
-        reference macro and a
-        <a href="#chapter-title">CHAPTER_TITLE</a>
-        macro.  Otherwise, TITLE_COLOR takes care of colorizing the
-        chapter header.
-    </li>
-  </ul></li>
-  <li>Macro: <b>SUBTITLE_COLOR</b> <kbd class="macro-args">&lt;colorname&gt;</kbd></li>
-  <li>Macro: <b>ATTRIBUTE_COLOR</b> <kbd class="macro-args">&lt;colorname&gt;</kbd>
-      (the &#8220;by&#8221; string preceding author[s] name[s])
-  </li>
-  <li>Macro: <b>AUTHOR_COLOR</b> <kbd class="macro-args">&lt;colorname&gt;</kbd></li>
-  <li>Macro: <b>DOCTYPE_COLOR</b> <kbd class="macro-args"> &lt;colorname&gt;</kbd>
-      (if <a href="#doctype">DOCTYPE</a> is <kbd>NAMED</kbd>)
-  </li>
-</ul>
 
-<p>
-It is not recommended that you embed colour (with the
-<a href="definitions.html#inlines">inline escape</a>,
-<a href="color.html#color-inline"><kbd>\*[&lt;colorname&gt;]</kbd></a>)
-in the strings passed to TITLE, CHAPTER_TITLE, SUBTITLE, AUTHOR or
-the name you give DOCTYPE <kbd>NAMED</kbd>.  The strings passed to
-these macros are used to generate page
-<a href="definitions.html#header">headers</a>
-and
-<a href="definitions.html#footer">footers</a>,
-with the result that an embedded colour will cause the string to be
-colourized in headers and/or footers as well.  (If you want headers
-or footers colourized, or parts thereof, use the header/footer
-control macros.)
+<div class="box-tip" style="margin-top: -1em;">
+<p class="tip">
+<span class="note">Note:</span>
+Use <kbd>ATTRIBUTE</kbd> as the part name for the attribution string
+(&#8220;by&#8221;) that precedes the author, and <kbd>DOCTYPE</kbd>
+as the name for the string passed to <kbd>DOCTYPE NAMED&nbsp;"string"</kbd>.
+</p>
+</div>
+
+<h5 id="list-of-params" class="docs">List of parameters with arguments</h5>
+
+<dl>
+  <dt class="params">_FAMILY</dt>
+    <dd>
+      Takes the same argument as <a href="typesetting.html#family">FAMILY</a>.
+    </dd>
+  <dt class="params">_FONT</dt>
+    <dd>
+      Takes the same argument as <a href="typesetting.html#font">FT</a>.
+    </dd>
+  <dt class="params">_SIZE</dt>
+    <dd>
+      Takes a <kbd>+</kbd> or <kbd>-</kbd> value relative to the size of
+      <a href="definitions.html#running">running text</a>.
+    </dd>
+  <dt class="params">_COLOR</dt>
+    <dd>
+      Takes the same argument as <a href="color.html#color">COLOR</a>.
+      Colors should be pre-initialized with
+      <a href="color.html#xcolor">XCOLOR</a>
+      or
+      <a href="color.html#newcolor">NEWCOLOR</a>.
+    </dd>
+  <dt class="params">_LEAD</dt>
+    <dd>
+      Takes an absolute leading value, i.e. not relative to the
+      overall leading of the docheader.  The leading applies to
+      multiple lines of type within the same docheader part, e.g.
+      several authors or a long title that must be split over two
+      lines.  No
+      <a href="definitions.html#unitofmeasure">unit of measure</a>
+      is required;
+      <a href="definitions.html#picaspoints">points</a>
+      is assumed.
+    </dd>
+  <dt id="space-before" class="params">_SPACE_BEFORE</dt>
+    <dd>
+      Takes a numeric value with a
+      <a href="definitions.html#unitofmeasure">unit of measure</a>
+      appended to it.  The value may be negative.  This allows you
+      to adjust the whitespace before a docheader part, for example
+      if you want more whitespace between the title and the author.
+      <span style="display: block; margin-top: .5em">
+      Note that <kbd>TITLE</kbd> does not have a <kbd>_SPACE_BEFORE</kbd>
+      parameter; use
+      <a href="#change-start">DOCHEADER_ADVANCE</a>
+      to move the title further down on the page.
+      </span>
+    </dd>
+  <dt class="params">_CAPS</dt>
+    <dd>
+      Capitalizes the entire docheader part.  No argument is
+      required.
+    </dd>
+  <dt class="params">_NO_CAPS</dt>
+    <dd>
+      Only used if you need to reverse the sense of <kbd>_CAPS</kbd>, as
+      can sometimes happen when
+      <a href="rectoverso.html#collate">collating</a>
+      documents that have differing docheader style requirements.
+    </dd>
+  <dt class="params">_SMALLCAPS</dt>
+    <dd>
+      Set the entire docheader part in smallcaps.  No argument is
+      required.
+    </dd>
+  <dt class="params">_NO_SMALLCAPS</dt>
+    <dd>
+      Only used if you need to reverse the sense of
+      <kbd>_SMALLCAPS</kbd>, as can sometimes happen when
+      <a href="rectoverso.html#collate">collating</a>
+      documents that have differing docheader style requirements.
+    </dd>
+  <dt class="params">_UNDERSCORE</dt>
+    <dd>
+      With no argument, underscores the docheader part.  With a
+      single, possibly decimal numeric argument, sets the weight of
+      the underscore.  A second numeric argument to which a
+      <a href="definitions.html#unitofmeasure">unit of measure</a>
+      is appended (most likely <kbd>p</kbd>) sets the distance
+      between the baseline and the underscore.
+      <span style="display: block; margin-top: .5em">
+      If the argument <kbd>DOUBLE</kbd> is given, double underscores
+      the docheader part.  With a single, possibly decimal numeric
+      argument afterwards, sets the weight of the underscore rules.
+      A third numeric argument to which a
+      <a href="definitions.html#unitofmeasure">unit of measure</a>
+      is appended (most likely <kbd>p</kbd>) sets the distance
+      between the baseline and the first underscore rule.  A fourth
+      numeric argument to which a unit of measure is appended sets
+      the distance between the two underscore rules.
+      </span>
+      <span style="display: block; margin-top: .5em">
+      You may give <kbd>_UNDERLINE</kbd> as the parameter instead of
+      <kbd>_UNDERSCORE</kbd> if you prefer.
+      </span>
+    </dd>
+  <dt class="params">NO_UNDERSCORE</dt>
+    <dd>
+      Only used if you need to reverse the sense of
+      <kbd>_UNDERSCORE</kbd>, as can sometimes happen when
+      <a href="rectoverso.html#collate">collating</a>
+      documents that have differing docheader style requirements.
+    </dd>
+</dl>
+
+<h5 id="grouping" class="docs">Grouping part/parameter changes</h5>
+
+<p>
+If you want to change several parameters for a particular docheader
+part, you may group the changes together in a single macro by
+joining the name of the part to <kbd>STYLE</kbd> with an underscore,
+for example <kbd>TITLE_STYLE</kbd> or <kbd>AUTHOR_STYLE</kbd>.
+The following demonstrates:
+<span class="pre-in-pp">
+  .CHAPTER_TITLE_STYLE \
+  FAMILY T \
+  SIZE +4 \
+  UNDERSCORE 2 \
+  SMALLCAPS
+</span>
+Notice the use of the backslash character, which is required after
+the macro name and all parameters except the last.  Grouping reduces
+clutter and the finger fatigue caused by entering
+<span class="pre-in-pp">
+   .CHAPTER_TITLE_FAMILY T
+   .CHAPTER_TITLE_SIZE +4
+   .CHAPTER_TITLE_UNDERSCORE 2
+   .CHAPTER_TITLE_SMALLCAPS
+</span>
 </p>
 
-<h4 id="change-attribute" class="docs">10. Change the attribution string (&#8220;by&#8221;)</h4>
+<h4 id="change-attribute" class="docs" style="font-size: 100%">3. Changing or removing the attribution string (&#8220;by&#8221;)</h4>
 
 <p>
 If you&#8217;re not writing in English, you can change what mom
@@ -2933,7 +2860,7 @@
 </span>
 changes &#8220;by&#8221; to &#8220;par&#8221;.  ATTRIBUTE_STRING
 can also be used, for example, to make the attribution read
-&quot;Edited by&quot;.
+&#8220;Edited by&#8221;.
 </p>
 
 <p>
@@ -2978,24 +2905,6 @@
 arguments, is sufficient.
 </p>
 
-<div class="box-tip">
-<p class="tip">
-<span class="note">Note:</span>
-The type specs for the attribution line in docheaders are the
-same as for the author line.  Although it&#8217;s highly unlikely
-you&#8217;ll want the attribution line in a different family, font,
-or point size, you can make such changes using
-<a href="definitions.html#inlines">inline escapes</a>
-in the argument to ATTRIBUTE_STRING.  For example,
-<br/>
-<span class="pre-in-pp">
-  .ATTRIBUTE_STRING "\f[HBI]\*[SIZE -2p] by \*[SIZE +2p]\*[PREV]"
-</span>
-would set &#8220;by&#8221; in Helvetica bold italic, 2 points
-smaller than normal.
-</p>
-</div>
-
 <div class="rule-short"><hr/></div>
 
 <!-- -COLUMNS- -->
@@ -3151,7 +3060,7 @@
 it left (assuming the type is justified or quad left), and moves over
 to the top of the next column.  If the column happens to be the last
 (rightmost) one on the page, mom starts a new page
-at the &quot;column 1&quot; position.  This is the macro to use when
+at the &#8220;column 1&#8221; position.  This is the macro to use when
 you want to start a new column after the end of a paragraph.
 </p>
 
@@ -3313,12 +3222,12 @@
                element tag is entered, the font reverts
                to the current default for the new tag.
 
-               N.B. &mdash; \&bull;[SLANT] and \&bull;[BOLDER] affect
+               N.B. &mdash; \*[SLANT] and \*[BOLDER] affect
                paragraph text, and remain in effect for all
                paragraphs until turned off.  If you want to
                use them in a macro that takes a string
                argument, include the escape in the string.
-               \&bull;[COND] and \&bull;[EXT] behave similarly.
+               \*[COND] and \*[EXT] behave similarly.
 
   PT_SIZE     &bull;Changes point size for the duration of the
                current tag only.  As soon as another document
@@ -3340,9 +3249,7 @@
                track when you&#8217;re ready to return to the
                document&#8217;s default leading.
 
-
-<a id="autolead"></a>
-  AUTOLEAD   &bull;Invoked before START, sets the overall document
+  <a id="autolead" style="margin-top: -1em">AUTOLEAD</a>   &bull;Invoked before START, sets the overall document
               leading as a function of the overall document
               point size (ie the point size used in paragraphs);
               subsequently disabled after START, except for calls
@@ -3822,9 +3729,6 @@
 </p>
 </div>
 
-
-<div class="rule-long"><hr/></div>
-
 <!-- Navigation links -->
 <table style="width: 100%; margin-top: 12px;">
 <tr>
diff -Nuar groff-1.22.3.old/contrib/mom/momdoc/goodies.html groff-1.22.3/contrib/mom/momdoc/goodies.html
--- groff-1.22.3.old/contrib/mom/momdoc/goodies.html	2014-11-04 10:38:35.613519146 +0200
+++ groff-1.22.3/contrib/mom/momdoc/goodies.html	2015-04-23 20:57:03.000000000 +0300
@@ -2,7 +2,7 @@
 <!--
 This file is part of groff, the GNU roff type-setting system.
 
-Copyright (C) 2004-2014 Free Software Foundation, Inc.
+Copyright (C) 2004-2015 Free Software Foundation, Inc.
 Written by Peter Schaffter (peter@schaffter.ca).
 
 Permission is granted to copy, distribute and/or modify this document
@@ -510,6 +510,21 @@
 </span>
 </p>
 
+<div class="box-tip">
+<p class="tip">
+<span class="note">Note:</span>
+<kbd>\*[LC]</kbd> must come after a terminating period.
+<br/>
+<span class="pre-in-pp">
+  \*[UC]All work and no play makes Jack a dull boy.\*[LC]
+</span>
+not
+<span class="pre-in-pp">
+  \*[UC]All work and no play makes Jack a dull boy\*[LC].
+</span>
+</p>
+</div>
+
 <!-- -STRING- -->
 
 <div class="macro-id-overline">
@@ -1433,7 +1448,7 @@
 you can change it by invoking SUPERSCRIPT_RAISE_AMOUNT with the
 amount you want them raised.  A
 <a href="definitions.html#unitofmeasure">unit of measure</a>
-must be appended directly to the amount.  Thus, you want
+must be appended directly to the amount.  Thus, if you want
 superscripts raised by 3
 <a href="definitions.html#picaspoints">points</a>
 instead of 1/3 em, you&#8217;d do
diff -Nuar groff-1.22.3.old/contrib/mom/momdoc/graphical.html groff-1.22.3/contrib/mom/momdoc/graphical.html
--- groff-1.22.3.old/contrib/mom/momdoc/graphical.html	2014-11-04 10:38:35.613519146 +0200
+++ groff-1.22.3/contrib/mom/momdoc/graphical.html	2015-04-23 20:57:03.000000000 +0300
@@ -2,7 +2,7 @@
 <!--
 This file is part of groff, the GNU roff type-setting system.
 
-Copyright (C) 2004-2014 Free Software Foundation, Inc.
+Copyright (C) 2004-2015 Free Software Foundation, Inc.
 Written by Peter Schaffter (peter@schaffter.ca).
 
 Permission is granted to copy, distribute and/or modify this document
diff -Nuar groff-1.22.3.old/contrib/mom/momdoc/headfootpage.html groff-1.22.3/contrib/mom/momdoc/headfootpage.html
--- groff-1.22.3.old/contrib/mom/momdoc/headfootpage.html	2014-11-04 10:38:35.613519146 +0200
+++ groff-1.22.3/contrib/mom/momdoc/headfootpage.html	2015-04-23 20:57:03.000000000 +0300
@@ -2,7 +2,7 @@
 <!--
 This file is part of groff, the GNU roff type-setting system.
 
-Copyright (C) 2004-2014 Free Software Foundation, Inc.
+Copyright (C) 2004-2015 Free Software Foundation, Inc.
 Written by Peter Schaffter (peter@schaffter.ca).
 
 Permission is granted to copy, distribute and/or modify this document
@@ -204,7 +204,7 @@
 You can, however, supply whatever strings you like&mdash;including
 page numbers&mdash;to go in any part of headers.  What&#8217;s more,
 you can set the family, font, size, colour and capitalization style
-(caps or caps/lower-case) for each header part individually.
+(caps, caps/lower-case, or smallcaps) for each header part individually.
 </p>
 
 <p>
@@ -242,7 +242,7 @@
 Size*        -.5 (points)        -.5 (points)        -2 (points)
             (-2 if all caps)    (-2 if all caps)    (-.5 if not all caps)
 
-*Relative to the point size of type in paragraphs
+*Relative to the point size of <a href="definitions.html#running">running text</a>
 </span>
 </div>
 
@@ -251,10 +251,10 @@
 control macros.  And should you wish to design headers from the
 ground up, mom has a special macro,
 <a href="#hdrftr-plain">HEADER_PLAIN</a>,
-that removes all type adjustments to headers.  The straightforward
-type specs for paragraphs are used instead, providing a simple
+that removes all type adjustments to headers.  The
+type specs for running text are used instead, providing a simple
 reference point for any alterations you want to make to the family,
-font, size and capitalization style of any header part.
+font, size, and capitalization style of any header part.
 </p>
 
 <h3 id="vertical-spacing" class="docs">Vertical placement and spacing of headers/footers</h3>
@@ -291,7 +291,9 @@
 <a href="#hdrftr-gap">HEADER_GAP</a>
 (effectively making HEADER_MARGIN + HEADER_GAP the top margin of
 running text unless you give mom a literal top margin (with
-<a href="typesetting.html#t-margin">T_MARGIN</a>),
+<a href="typesetting.html#t-margin">T_MARGIN</a>)
+or
+<a href="typesetting.html#page">PAGE</a>,
 in which case she ignores HEADER_GAP and begins the running text at
 whatever top margin you give.
 </p>
@@ -547,9 +549,9 @@
   <ul style="margin-left: -.5em;">
     <li><a href="#hdrftr-style-global">Global changes</a>
     <ul style="margin-left: -.5em;">
+      <li><a href="#hdrftr-plain">HEADER_PLAIN</a> &ndash; disable default adjustments to header parts</li>
       <li><a href="#hdrftr-global-family">HEADER_FAMILY</a> &ndash; family for entire header</li>
       <li><a href="#hdrftr-global-size">HEADER_SIZE</a> &ndash; size for entire header</li>
-      <li><a href="#hdrftr-plain">HEADER_PLAIN</a> &ndash; disable default adjustments to header parts</li>
       <li><a href="#hdrftr-color">HEADER_COLOR</a> &ndash; colourize the header</li>
     </ul></li>
     <li><a href="#hdrftr-style-part">Part-by-part changes</a>
@@ -558,6 +560,7 @@
       <li><a href="#_font">_FONT</a> &ndash; left, centre or right font</li>
       <li><a href="#_size">_SIZE</a> &ndash; left, centre or right size</li>
       <li><a href="#_caps">_CAPS</a> &ndash; left, centre or right all caps</li>
+      <li><a href="#_smallcaps">_SMALLCAPS</a> &ndash; left, centre or right smallcaps</li>
       <li><a href="#_color">_COLOR</a> &ndash; left, centre or right colour</li>
     </ul></li>
   </ul></li>
@@ -837,13 +840,34 @@
 
 <div class="macro-list-container">
 <ul style="padding-top: 6px; padding-bottom: 6px; margin-left: -.5em;">
+  <li><a href="#hdrftr-plain">HEADER_PLAIN</a></li>
   <li><a href="#hdrftr-global-family">HEADER_FAMILY</a></li>
   <li><a href="#hdrftr-global-size">HEADER_SIZE</a></li>
-  <li><a href="#hdrftr-plain">HEADER_PLAIN</a></li>
   <li><a href="#hdrftr-color">HEADER_COLOR</a></li>
 </ul>
 </div>
 
+<div id="hdrftr-plain" class="box-macro-args">
+Macro: <b>HEADER_PLAIN</b>
+</div>
+
+<p>
+By default, mom makes adjustments to the font, size, and
+capitalization style of each part of headers to achieve an
+aesthetically pleasing look.  Should you wish to design your own
+headers from the ground up without worrying how changes to the
+various elements of header style interact with mom&#8217;s defaults,
+invoke <kbd>.HEADER_PLAIN</kbd> by itself, with no argument. Mom
+will disable her default behaviour for headers, and reset all
+elements of header style to the same family, font, point size and
+colour as she uses in paragraphs.
+</p>
+
+<p>
+Replace HEADER_, above, with FOOTER_ to disable mom&#8217;s default
+behaviour for the various elements of footer style.
+</p>
+
 <div id="hdrftr-global-family" class="box-macro-args">
 Macro: <b>HEADER_FAMILY</b> <kbd class="macro-args">&lt;family&gt;</kbd>
 </div>
@@ -937,27 +961,6 @@
 Replace HEADER_, above, with FOOTER_ to colourize footers.
 </p>
 
-<div id="hdrftr-plain" class="box-macro-args">
-Macro: <b>HEADER_PLAIN</b>
-</div>
-
-<p>
-By default, mom makes adjustments to the font, size, and
-capitalization style of each part of headers to achieve an
-aesthetically pleasing look.  Should you wish to design your own
-headers from the ground up without worrying how changes to the
-various elements of header style interact with mom&#8217;s defaults,
-invoke <kbd>.HEADER_PLAIN</kbd> by itself, with no argument. Mom
-will disable her default behaviour for headers, and reset all
-elements of header style to the same family, font, point size and
-colour as she uses in paragraphs.
-</p>
-
-<p>
-Replace HEADER_, above, with FOOTER_ to disable mom&#8217;s default
-behaviour for the various elements of footer style.
-</p>
-
 <h4 id="hdrftr-style-part" class="docs">3. Part by part changes</h4>
 
 <p>
@@ -972,7 +975,9 @@
   <li><a href="#_font">HEADER_&lt;POSITION&gt;_FONT</a></li>
   <li><a href="#_size">HEADER_&lt;POSITION&gt;_SIZE</a></li>
   <li><a href="#_caps">HEADER_&lt;POSITION&gt;_CAPS</a></li>
+  <li><a href="#_smallcaps">HEADER_&lt;POSITION&gt;_SMALLCAPS</a></li>
   <li><a href="#_color">HEADER_&lt;POSITION&gt;_COLOR</a></li>
+  <li><a href="#grouping">Grouping style parameters for the individual header/footer parts</a></li>
 </ul>
 </div>
 
@@ -1046,6 +1051,24 @@
 capitalization style.
 </p>
 
+<div id="_smallcaps" class="box-macro-args">
+Macro: <b>HEADER_&lt;POSITION&gt;_SMALLCAPS</b> <kbd class="macro-args">toggle</kbd>
+</div>
+
+<p>
+HEADER_&lt;POSITION&gt;_SMALLCAPS is a
+<a href="definitions.html#toggle">toggle macro</a>.
+If you want any part of headers to be set in smallcaps, simply
+invoke this macro (using the appropriate position) with no argument.
+If you wish to turn the smallcaps off, invoke the macro with any
+argument (eg <kbd>OFF, QUIT, END, X</kbd>...).
+</p>
+
+<p>
+Replace HEADER,_ above, with FOOTER_ to invoke smallcaps for footer
+parts.
+</p>
+
 <div id="_color" class="box-macro-args">
 Macro: <b>HEADER_&lt;POSITION&gt;_COLOR</b> <kbd class="macro-args">&lt;colorname&gt;</kbd>
 </div>
@@ -1092,6 +1115,45 @@
 various elements of footers.
 </p>
 
+<h5 id="grouping" class="docs">Grouping style parameters for the individual header parts</h5>
+
+<p>
+Instead of using control macros for the style parameters
+of an individual header part, the parameters may be
+<a href="docelement.html#grouping">grouped</a>
+by invoking <kbd>HEADER_&lt;POSITION&gt;_STYLE</kbd> with a list of
+keyword/value pairs.  Acceptable keywords are
+<kbd>FAMILY FONT SIZE COLOR CAPS</kbd> and <kbd>SMALLCAPS</kbd>.
+Keyword/value pairs may appear on the same line as the macro, or
+separated into several lines using the backslash character
+(<kbd>\</kbd>).  If you use the latter style, all but the final
+parameter must be terminated with the backslash.
+</p>
+
+<p>
+Thus, to set the header-left part in Helvetica bold, red, 1 point larger
+than
+<a href="definitions.html#running">running text</a>
+and all caps, you could do either
+<br/>
+<span class="pre-in-pp">
+  .HEADER_LEFT_STYLE FAMILY H FONT B SIZE +1 COLOR red CAPS
+</span>
+or
+<br/>
+<span class="pre-in-pp">
+  .HEADER_LEFT_STYLE \
+   FAMILY H \
+   FONT B \
+   SIZE +1 \
+   COLOR red \
+   CAPS
+</span>
+If you need to reverse the sense of <kbd>CAPS</kbd>
+or <kbd>SMALLCAPS</kbd>, use <kbd>NO_CAPS</kbd> or
+<kbd>NO_SMALLCAPS</kbd>.
+</p>
+
 <!-- -HDRFTR_VERTICAL- -->
 
 <h4 id="hdrftr-vertical" class="docs">3. Header/footer vertical placement and spacing</h4>
@@ -2071,16 +2133,25 @@
 <p class="defaults" style="padding-top: 6px;">
 See
 <a href="docelement.html#control-macro-args">Arguments to the control macros</a>.
+<br/>
+The following control macros may also be
+<a href="docelement.html#grouping">grouped</a>
+using PAGENUMBER_STYLE.*
 </p>
 <span class="pre defaults">
-.PAGENUM_FAMILY default = prevailing document family; default is Times Roman
+.PAGENUM_FAMILY default = prevailing document family
 .PAGENUM_FONT   default = roman
-.PAGENUM_SIZE   default = 0 (ie same size as paragraph text)
+.PAGENUM_SIZE   default = +0 (ie same size as paragraph text)
 .PAGENUM_COLOR  default = black
 </span>
 </div>
 
-<h4 id="pagenum-pos" class="docs" style="margin-top: -1em;">2. Page number position</h4>
+<p style="margin-top: -2em">
+*Note: Do not confuse PAGENUMBER_STYLE with
+<a href="#pagenum-style">PAGENUM_STYLE</a>.
+</p>
+
+<h4 id="pagenum-pos" class="docs" style="margin-top: 0em;">2. Page number position</h4>
 
 <div class="box-macro-args" style="margin-top: 1em;">
 Macro: <b>PAGENUM_POS</b> <kbd class="macro-args">TOP | BOTTOM&nbsp;&nbsp;LEFT | CENTER | RIGHT</kbd>
diff -Nuar groff-1.22.3.old/contrib/mom/momdoc/images.html groff-1.22.3/contrib/mom/momdoc/images.html
--- groff-1.22.3.old/contrib/mom/momdoc/images.html	2014-11-04 10:38:35.614519134 +0200
+++ groff-1.22.3/contrib/mom/momdoc/images.html	2015-04-23 20:57:03.000000000 +0300
@@ -2,7 +2,7 @@
 <!--
 This file is part of groff, the GNU roff type-setting system.
 
-Copyright (C) 2004-2014 Free Software Foundation, Inc.
+Copyright (C) 2004-2015 Free Software Foundation, Inc.
 Written by Peter Schaffter (peter@schaffter.ca).
 
 Permission is granted to copy, distribute and/or modify this document
@@ -789,7 +789,7 @@
 therefore no <kbd>.TH</kbd>), tables that fit on the page are output
 in position.  If there is not enough room to output the table,
 <kbd>tbl</kbd> will abort with message instructing you to use
-<kbd>.TS H/.TH</kbd>.  Given that <kbd>.TS</kbd> without <kbd>TH</kbd>
+<kbd>.TS H/.TH</kbd>.  Given that <kbd>.TS</kbd> without <kbd>H</kbd>
 may sometimes fail, it is advisable to begin all <b>tbl</b> blocks
 with <kbd>.TS H</kbd>.
 </p>
diff -Nuar groff-1.22.3.old/contrib/mom/momdoc/inlines.html groff-1.22.3/contrib/mom/momdoc/inlines.html
--- groff-1.22.3.old/contrib/mom/momdoc/inlines.html	2014-11-04 10:38:35.614519134 +0200
+++ groff-1.22.3/contrib/mom/momdoc/inlines.html	2015-04-23 20:57:03.000000000 +0300
@@ -2,7 +2,7 @@
 <!--
 This file is part of groff, the GNU roff type-setting system.
 
-Copyright (C) 2004-2014 Free Software Foundation, Inc.
+Copyright (C) 2004-2015 Free Software Foundation, Inc.
 Written by Peter Schaffter (peter@schaffter.ca).
 
 Permission is granted to copy, distribute and/or modify this document
diff -Nuar groff-1.22.3.old/contrib/mom/momdoc/intro.html groff-1.22.3/contrib/mom/momdoc/intro.html
--- groff-1.22.3.old/contrib/mom/momdoc/intro.html	2014-11-04 10:38:35.614519134 +0200
+++ groff-1.22.3/contrib/mom/momdoc/intro.html	2015-04-23 20:57:03.000000000 +0300
@@ -2,7 +2,7 @@
 <!--
 This file is part of groff, the GNU roff type-setting system.
 
-Copyright (C) 2004-2014 Free Software Foundation, Inc.
+Copyright (C) 2004-2015 Free Software Foundation, Inc.
 Written by Peter Schaffter (peter@schaffter.ca).
 
 Permission is granted to copy, distribute and/or modify this document
diff -Nuar groff-1.22.3.old/contrib/mom/momdoc/letters.html groff-1.22.3/contrib/mom/momdoc/letters.html
--- groff-1.22.3.old/contrib/mom/momdoc/letters.html	2014-11-04 10:38:35.614519134 +0200
+++ groff-1.22.3/contrib/mom/momdoc/letters.html	2015-04-23 20:57:03.000000000 +0300
@@ -2,7 +2,7 @@
 <!--
 This file is part of groff, the GNU roff type-setting system.
 
-Copyright (C) 2004-2014 Free Software Foundation, Inc.
+Copyright (C) 2004-2015 Free Software Foundation, Inc.
 Written by Peter Schaffter (peter@schaffter.ca).
 
 Permission is granted to copy, distribute and/or modify this document
diff -Nuar groff-1.22.3.old/contrib/mom/momdoc/macrolist.html groff-1.22.3/contrib/mom/momdoc/macrolist.html
--- groff-1.22.3.old/contrib/mom/momdoc/macrolist.html	2014-11-04 10:38:35.614519134 +0200
+++ groff-1.22.3/contrib/mom/momdoc/macrolist.html	2015-04-23 20:57:03.000000000 +0300
@@ -2,7 +2,7 @@
 <!--
 This file is part of groff, the GNU roff type-setting system.
 
-Copyright (C) 2004-2014 Free Software Foundation, Inc.
+Copyright (C) 2004-2015 Free Software Foundation, Inc.
 Written by Peter Schaffter (peter@schaffter.ca).
 
 Permission is granted to copy, distribute and/or modify this document
@@ -68,6 +68,7 @@
   <li><a href="#qr-14">Nested lists</a></li>
   <li><a href="#qr-15">Colour</a></li>
   <li><a href="#qr-16">Dropcaps</a></li>
+  <li><a href="#qr-56">Smallcaps</a></li>
   <li><a href="#qr-17">Utilities</a></li>
   <li><a href="#qr-18">Graphical objects and images</a></li>
 </ul>
@@ -182,7 +183,7 @@
 <td><a href="typesetting.html#slant-inline">\*[SLANT]</a></td><td>-- invoke pseudo italic inline</td>
 </tr>
 <tr>
-<td><a href="typesetting.html#slant-inline">\*[SLANTX]</a></td><td>-- off pseudo italic inline</td>
+<td><a href="typesetting.html#slant-inline">\*[SLANTX]</a></td><td>-- turn off pseudo italic inline</td>
 </tr>
 <tr><td style="padding-left: 0;">Pseudo bold</td></tr>
 <tr>
@@ -192,7 +193,7 @@
 <td><a href="typesetting.html#bolder-inline">\*[BOLDER]</a></td><td>-- invoke pseudo bold inline</td>
 </tr>
 <tr>
-<td><a href="typesetting.html#bolder-inline">\*[BOLDERX]</a></td><td>-- off pseudo bold inline</td>
+<td><a href="typesetting.html#bolder-inline">\*[BOLDERX]</a></td><td>-- turn off pseudo bold inline</td>
 </tr>
 <tr><td style="padding-left: 0;">Pseudo condensed</td></tr> 
 <tr>
@@ -202,7 +203,7 @@
 <td><a href="typesetting.html#cond-inline">\*[COND]</a></td><td>-- invoke pseudo condensing inline</td>
 </tr>
 <tr>
-<td><a href="typesetting.html#cond-inline">\*[CONDX]</a></td><td>-- off pseudo condensing inlines</td>
+<td><a href="typesetting.html#cond-inline">\*[CONDX]</a></td><td>-- turn off pseudo condensing inline</td>
 </tr>
 <tr><td style="padding-left: 0;">Pseudo extended</td></tr>
 <tr>
@@ -212,7 +213,7 @@
 <td><a href="typesetting.html#ext-inline">\*[EXT]</a></td><td>-- invoke pseudo extending inline</td>
 </tr>
 <tr>
-<td><a href="typesetting.html#ext-inline">\*[EXTX]</a></td><td>-- off pseudo condensing inlinee</td>
+<td><a href="typesetting.html#ext-inline">\*[EXTX]</a></td><td>-- turn off pseudo condensing inline</td>
 </tr>
 </table>
 
@@ -512,6 +513,19 @@
 
 <table class="quick-ref">
 <tr>
+<th id="qr-56" class="quick-ref" colspan="2" >+++ Smallcaps</th>
+</tr>
+<tr>
+<td><a href="typesetting.html#smallcaps">SMALLCAPS</a></td>
+</tr>
+<tr>
+<td><a href="typesetting.html#smallcaps-style">SMALLCAPS_STYLE</a></td>
+</tr>
+</table>
+
+
+<table class="quick-ref">
+<tr>
 <th id="qr-17" class="quick-ref" colspan="2" >+++ Utilities</th>
 </tr>
 <tr>
@@ -666,6 +680,9 @@
 <tr>
 <td><a href="docelement.html#number-blockquote-lines">NUMBER_BLOCKQUOTE_LINES</a></td><td>-- numbering of BLOCKQUOTE lines on/off</td>
 </tr>
+<tr>
+<td><a href="docelement.html#number-lines-control">Control macros</a></td><td>-- numbering of BLOCKQUOTE lines on/off</td>
+</tr>
 </table>
 
 <table class="quick-ref">
@@ -1027,7 +1044,7 @@
 <td><a href="docelement.html#endnotes-header-control">Header/footer control</a></td>
 </tr>
 <tr>
-<td><a href="docelement.html#endnotes-main-title">Title control</a></td>
+<td><a href="docelement.html#endnotes-header-string-control">Title control</a></td>
 </tr>
 <tr>
 <td><a href="docelement.html#endnotes-doc-title">Document/section identification control</a></td>
@@ -1271,10 +1288,10 @@
 <th id="qr-46" class="quick-ref" colspan="2" >+++ Pagination</th>
 </tr>
 <tr>
-<td><a href="headfootpage.html#index-pagination">PAGINATE</a></td><td>-- pagination on/off</td>
+<td><a href="headfootpage.html#paginate">PAGINATE</a></td><td>-- pagination on/off</td>
 </tr>
 <tr>
-<td><a href="headfootpage.html#index-pagination-control">Control macros</a></td><td>-- change default style for pagination</td>
+<td><a href="headfootpage.html#index-paginate-control">Control macros</a></td><td>-- change default style for pagination</td>
 </tr>
 <tr>
 <td><a href="headfootpage.html#pagenumber">&nbsp;PAGENUMBER</a></td><td>-- user-defined (starting) page number</td>
@@ -1307,6 +1324,18 @@
 <td><a href="cover.html#on-off">DOC_COVERS</a></td><td>-- printing of document covers on/off</td>
 </tr>
 <tr>
+<td><a href="cover.html#covertext">DOC_COVERTEXT</a></td><td>-- printing of document covers on/off</td>
+</tr>
+<tr>
+<td><a href="cover.html#covertext">COVERTEXT</a></td><td>-- printing of document covers on/off</td>
+</tr>
+<tr>
+<td><a href="cover.html#coverimage">DOC_COVER_IMAGE</a></td><td>-- printing of document covers on/off</td>
+</tr>
+<tr>
+<td><a href="cover.html#coverimage">COVER_IMAGE</a></td><td>-- printing of document covers on/off</td>
+</tr>
+<tr>
 <td><a href="cover.html#cover-control">Control macros</a></td><td>-- change style defaults for covers</td>
 </tr>
 </table>
diff -Nuar groff-1.22.3.old/contrib/mom/momdoc/rectoverso.html groff-1.22.3/contrib/mom/momdoc/rectoverso.html
--- groff-1.22.3.old/contrib/mom/momdoc/rectoverso.html	2014-11-04 10:38:35.614519134 +0200
+++ groff-1.22.3/contrib/mom/momdoc/rectoverso.html	2015-04-23 20:57:03.000000000 +0300
@@ -2,7 +2,7 @@
 <!--
 This file is part of groff, the GNU roff type-setting system.
 
-Copyright (C) 2004-2014 Free Software Foundation, Inc.
+Copyright (C) 2004-2015 Free Software Foundation, Inc.
 Written by Peter Schaffter (peter@schaffter.ca).
 
 Permission is granted to copy, distribute and/or modify this document
@@ -264,9 +264,6 @@
   .CHAPTER 17
   .START
 </span>
-</p>
-
-<p>
 A slightly more complex version of the same thing, for chapters
 that require their own titles, looks like this:
 <br/>
@@ -277,7 +274,7 @@
 </span>
 </p>
 
-<div class="box-tip">
+<div class="box-tip" style="margin-top: -1em">
 <p class="tip">
 <span class="tip">Tip:</span>
 If the last line of text before <kbd>.COLLATE</kbd>
@@ -294,14 +291,14 @@
 concluding macros.  For example,
 <br/>
 <span class="pre-in-pp">
-  some concluding text.
+  some concluding text.\c
   .EL
   .COLLATE
 </span>
 or
 <br/>
 <span class="pre-in-pp">
-  some concluding text.
+  some concluding text.\c
   .EL
   .LIST OFF
   .COLLATE
diff -Nuar groff-1.22.3.old/contrib/mom/momdoc/refer.html groff-1.22.3/contrib/mom/momdoc/refer.html
--- groff-1.22.3.old/contrib/mom/momdoc/refer.html	2014-11-04 10:38:35.615519121 +0200
+++ groff-1.22.3/contrib/mom/momdoc/refer.html	2015-04-23 20:57:03.000000000 +0300
@@ -2,7 +2,7 @@
 <!--
 This file is part of groff, the GNU roff type-setting system.
 
-Copyright (C) 2004-2014 Free Software Foundation, Inc.
+Copyright (C) 2004-2015 Free Software Foundation, Inc.
 Written by Peter Schaffter (peter@schaffter.ca).
 
 Permission is granted to copy, distribute and/or modify this document
@@ -794,7 +794,7 @@
 %N journal number   &ndash; journal or magazine number
 %R report number    &ndash; technical report number
 %G gov&#8217;t.           &ndash; government ordering number
-<a class="quick" href="#O">%O</a> other            &ndash; information or which there is no appropriate
+<a class="quick" href="#O">%O</a> other            &ndash; information for which there is no appropriate
                       field letter
 <a class="quick" href="#C">%C</a> city             &ndash; city of publication
 %I publisher        &ndash; publisher
@@ -1008,7 +1008,7 @@
   %A Kazuo Ishiguro
   %T The Remains of the Day
   %d London: Faber, 1989
-  %D New York
+  %C New York
   %I Knopf
   %D 1990
 </span>
@@ -1929,6 +1929,9 @@
 <div class="box-macro-args">
 Macro: <b>BIBLIOGRAPHY_STRING</b> <kbd class="macro-args">&quot;&lt;title to print at the top of bibliography pages&gt;&quot;</kbd>
 </div>
+<p class="alias" style="margin-bottom: 0;">
+<i>Alias:</i> <b>BIBLIOGRAPHY_HEADER</b>
+</p>
 
 <p>
 By default, mom prints the word &#8220;BIBLIOGRAPHY&#8221; as a title
diff -Nuar groff-1.22.3.old/contrib/mom/momdoc/reserved.html groff-1.22.3/contrib/mom/momdoc/reserved.html
--- groff-1.22.3.old/contrib/mom/momdoc/reserved.html	2014-11-04 10:38:35.615519121 +0200
+++ groff-1.22.3/contrib/mom/momdoc/reserved.html	2015-04-23 20:57:03.000000000 +0300
@@ -2,7 +2,7 @@
 <!--
 This file is part of groff, the GNU roff type-setting system.
 
-Copyright (C) 2004-2014 Free Software Foundation, Inc.
+Copyright (C) 2004-2015 Free Software Foundation, Inc.
 Written by Peter Schaffter (peter@schaffter.ca).
 
 Permission is granted to copy, distribute and/or modify this document
diff -Nuar groff-1.22.3.old/contrib/mom/momdoc/stylesheet.css groff-1.22.3/contrib/mom/momdoc/stylesheet.css
--- groff-1.22.3.old/contrib/mom/momdoc/stylesheet.css	2014-11-04 10:38:35.615519121 +0200
+++ groff-1.22.3/contrib/mom/momdoc/stylesheet.css	2015-04-23 20:57:03.000000000 +0300
@@ -1,4 +1,4 @@
-/* Copyright (C) 2004-2014  Free Software Foundation, Inc. */
+/* Copyright (C) 2004-2015  Free Software Foundation, Inc. */
 /* This file is part of mom, which is part of groff, a free software */
 /* project. */
 
@@ -673,3 +673,14 @@
   font-style: italic ;
 }
 
+dt.params
+{
+  font-style: normal ;
+  font-weight: bold ;
+}
+
+dd.cover-args
+{
+  margin-bottom: .25em; 
+  margin-left: 1.25em ;
+}
diff -Nuar groff-1.22.3.old/contrib/mom/momdoc/tables-of-contents.html groff-1.22.3/contrib/mom/momdoc/tables-of-contents.html
--- groff-1.22.3.old/contrib/mom/momdoc/tables-of-contents.html	2014-11-04 10:38:35.615519121 +0200
+++ groff-1.22.3/contrib/mom/momdoc/tables-of-contents.html	2015-04-23 20:57:03.000000000 +0300
@@ -2,7 +2,7 @@
 <!--
 This file is part of groff, the GNU roff type-setting system.
 
-Copyright (C) 2004-2014 Free Software Foundation, Inc.
+Copyright (C) 2004-2015 Free Software Foundation, Inc.
 Written by Peter Schaffter (peter@schaffter.ca).
 
 Permission is granted to copy, distribute and/or modify this document
@@ -344,10 +344,10 @@
   </ul></li>
   <li><a href="#toc-header">Header string (eg &#8220;Contents&#8221;) and style</a>
   <ul style="margin-left: -.5em;">
-    <li><a href="#toc-header-string">Changing the header string</a>
-    <ul style="margin-left: -.5em;">
-      <li><a href="#toc-header-style">Header string control macros and defaults</a></li>
-    </ul></li>
+    <li><a href="#toc-header-string">Changing the header string</a></li>
+    <li><a href="#toc-header-v-pos">Header string vertical placement</a></li>
+    <li><a href="#toc-header-style">Header string control macros and defaults</a></li>
+    </li>
   </ul></li>
   <li><a href="#toc-style">Entries and reference page number style</a>
   <ul style="margin-left: -.5em;">
@@ -580,22 +580,50 @@
 </span>
 </p>
 
+<h5 id="toc-header-v-pos" class="docs" style="margin-top: 1em; text-transform: none;">Header string vertical placement</h5>
+
+<div id="toc-header-v-pos" class="box-macro-args" style="margin-top: 1em">
+Macro: <b>TOC_HEADER_V_POS</b> <kbd class="macro-args">&lt;distance from top of page&gt;</kbd>
+</div>
+<p class="requires">
+&bull;&nbsp;Requires a <a href="definitions.html#unitofmeasure">unit of measure</a>
+</p>
+
+<p>
+Normally, the TOC header string falls at the same vertical position
+as the
+<a href="definitions.html#docheader">docheader</a>.
+If you&#8217;d like it to fall at a different position, say 2 inches, use
+<br/>
+<span class="pre-in-pp">
+  .TOC_HEADER_V_POS 2i
+</span>
+</p>
+
 <h5 id="toc-header-style" class="docs" style="margin-top: -.5em; text-transform: none;">Header string control macros and defaults</h5>
 
 <div class="defaults-container" style="margin-top: 1em; padding-bottom: 8px;">
 <p class="defaults" style="padding-top: 6px;">
 See
 <a href="docelement.html#control-macro-args">Arguments to the control macros</a>.
+<br/>
+The following TOC_HEADER control macros may also be
+<a href="#grouping">grouped</a>
+using TOC_HEADER_STYLE.
 </p>
 <span class="pre defaults">
 .TOC_HEADER_FAMILY  default = prevailing doc family 
 .TOC_HEADER_FONT    default = bold
 .TOC_HEADER_SIZE    default = +4
 .TOC_HEADER_QUAD    default = left
+.TOC_HEADER_COLOR   default = black
+.TOC_HEADER_CAPS       default = no
+.TOC_HEADER_SMALLCAPS  default = no
+.TOC_HEADER_UNDERSCORE default = none
 </span>
 </div>
 
-<h4 id="toc-style" class="docs" style="margin-top: -1em;">4. Entries and reference page numbers style</h4>
+<h4 id="toc-style" class="docs" style="margin-top: -.5em;">4. Entries and reference page numbers style</h4>
 
 <p>
 &#8220;Entries&#8221; refers to the hierarchical arrangement of
@@ -679,7 +707,8 @@
 
 <p>
 <kbd>CAPS</kbd> instructs mom to capitalize title entries.
-Capitalization may be enabled or disabled on a per-title basis.
+Capitalization may be enabled or disabled on a per-entry-level
+basis.
 </p>
 
 <p>
diff -Nuar groff-1.22.3.old/contrib/mom/momdoc/toc.html groff-1.22.3/contrib/mom/momdoc/toc.html
--- groff-1.22.3.old/contrib/mom/momdoc/toc.html	2014-11-04 10:38:35.615519121 +0200
+++ groff-1.22.3/contrib/mom/momdoc/toc.html	2015-04-23 20:57:03.000000000 +0300
@@ -2,7 +2,7 @@
 <!--
 This file is part of groff, the GNU roff type-setting system.
 
-Copyright (C) 2004-2014 Free Software Foundation, Inc.
+Copyright (C) 2004-2015 Free Software Foundation, Inc.
 Written by Peter Schaffter (peter@schaffter.ca).
 
 Permission is granted to copy, distribute and/or modify this document
@@ -20,7 +20,7 @@
 
 <head>
   <meta http-equiv="content-type" content="text/html;charset=utf-8"/>
-  <title>Mom, version 2.1-c_1 -- Table of Contents</title>
+  <title>Mom, version 2.1 -- Table of Contents</title>
   <link rel="stylesheet" type="text/css" href="stylesheet.css" />
 </head>
 
@@ -31,7 +31,7 @@
 <div class="page">
 
   <div class="version">
-    mom, version 2.1-c_1
+    mom, version 2.1
   </div>
 
 <h1 class="toc" style="margin-top: 9px;">Table of Contents</h1>
@@ -47,6 +47,7 @@
     <a href="#full-toc">Full Table of Contents</a>.
     <br/>
     If you've been using mom for a while, you may prefer the
+    <br/>
     <a href="macrolist.html#top">Quick Reference Guide</a>.
     </p>
 
diff -Nuar groff-1.22.3.old/contrib/mom/momdoc/typesetting.html groff-1.22.3/contrib/mom/momdoc/typesetting.html
--- groff-1.22.3.old/contrib/mom/momdoc/typesetting.html	2014-11-04 10:38:35.616519109 +0200
+++ groff-1.22.3/contrib/mom/momdoc/typesetting.html	2015-04-23 20:57:03.000000000 +0300
@@ -2,7 +2,7 @@
 <!--
 This file is part of groff, the GNU roff type-setting system.
 
-Copyright (C) 2004-2014 Free Software Foundation, Inc.
+Copyright (C) 2004-2015 Free Software Foundation, Inc.
 Written by Peter Schaffter (peter@schaffter.ca).
 
 Permission is granted to copy, distribute and/or modify this document
@@ -2590,6 +2590,11 @@
     <li><a href="#extend">EXTEND</a> &ndash; percentage for pseudo-extended type</li>
     <li><a href="#ext-inline">\*[EXT]</a> &ndash; inline escape for pseudo-extending</li>
   </ul></li>
+  <li>Smallcaps
+  <ul style="list-style: none; margin-left: -1em;">
+    <li><a href="#smallcaps">SMALLCAPS</a> &ndash; enable smallcaps</li>
+    <li><a href="#smallcaps-style">SMALLCAPS_STYLE</a> &ndash; size, weight, and width of smallcaps</li>
+  </ul></li>
 </ul>
 </div>
 
@@ -2933,10 +2938,7 @@
 </span>
 <kbd>\*[EXT]</kbd> remains in effect until you turn it off with
 <kbd>\*[EXTX]</kbd>.
-</p>
-
-<div class="box-important">
-<p class="tip">
+</p> <div class="box-important"> <p class="tip">
 <span class="important">IMPORTANT:</span> You must turn
 <kbd>\*[EXT]</kbd> off before making any changes to the point size
 of your type, either via the
@@ -2958,6 +2960,108 @@
 </p>
 </div>
 
+<!-- SMALLCAPS -->
+
+<div class="macro-id-overline">
+<h3 id="smallcaps" class="macro-id">Smallcaps</h3>
+</div>
+
+<div class="box-macro-args">
+Macro: <b>SMALLCAPS</b> <kbd class="macro-args">&lt;toggle&gt;</kbd>
+</div>
+
+<p>
+To begin setting type in pseudo-smallcaps, simply invoke
+<kbd>.SMALLCAPS</kbd>.  When you no longer want them, invoke
+<kbd>SMALLCAPS&nbsp;OFF</kbd> (or <kbd>END</kbd>, <kbd>STOP</kbd>,
+<kbd>DONE</kbd>, etc).  If you are currently in a
+<a href="definitions.html#filled">no-fill mode</a>,
+(i.e. <kbd>.LEFT</kbd>, <kbd>.CENTER</kbd>, or <kbd>.RIGHT</kbd>)
+and you want the smallcaps to continue on the same line,
+append a <kbd>\c</kbd> to the line, like this
+<br/>
+<span class="pre-in-pp">
+  A line of type\c
+  .SMALLCAPS
+  with a few words in smallcaps.
+  .SMALLCAPS OFF
+</span>
+The line preceding <kbd>.SMALLCAPS OFF</kbd> should also have a
+<kbd>\c</kbd> appended to it if you wish it to continue unbroken.
+</p>
+
+<div class="box-tip">
+<p class="tip-top">
+<span class="note">Note:</span>
+SMALLCAPS does not have an inline equivalent to
+<a href="inlines.html#uc-lc"><kbd>\*[UC]</kbd> / <kbd>\*[LC]</kbd></a>.
+Furthermore, if you&#8217;re using the
+<a href="docprocessing.html#docprocessing">document processing macros</a>
+with
+<a href="docprocessing.html#printstyle">PRINTSTYLE TYPEWRITE</a>,
+mom ignores SMALLCAPS.
+</p>
+
+<p class="tip-bottom">
+Additionally, be aware that no automatic
+<a href="definitions.html#kern">kerning</a>
+takes place while pseudo-smallcaps are in effect.
+</p>
+</div>
+
+<div class="macro-id-overline">
+<h3 id="smallcaps-style" class="macro-id">Set size, weight, and width of smallcaps</h3>
+</div>
+
+<div class="box-macro-args">
+Macro: <b>SMALLCAPS_STYLE</b> <kbd class="macro-args">SIZE &lt;percentage&gt; WEIGHT_ADJ &lt;percentage&gt; EXTEND &lt;percentage&gt;</kbd>
+</div>
+
+<p>
+True smallcaps are not a font effect, but, like designer cuts of
+bold, condensed, and extended, actual fonts provided with some
+families.  It is highly recommended that you acquire real smallcaps
+fonts rather than relying on mom's pseudo version.
+</p>
+
+<p>
+To achieve a reasonable facsimile of designer-cut small fonts, mom
+needs to know the percentage of regular caps at a given point size
+by which to reduce the small caps.  To make adjustments for the
+difference in weight and width of the smaller caps, she also needs
+to know by how much to embolden (&#8220;fatten&#8221;) the
+smallcaps, and by how much to increase their width.
+</p>
+
+<p>
+All three arguments to SMALLCAPS_STYLE reflect a
+percentage of the point size in effect when
+<a href="#smallcaps">SMALLCAPS</a>
+is invoked.  Mom&#8217;s defaults for pseudo-smallcaps are:
+<br/>
+<span class="pre-in-pp">
+  SIZE       = 74%
+  WEIGHT_ADJ = .3%
+  EXTEND     = 5%
+</span>
+To change any or all of the defaults, you might enter
+<br/>
+<span class="pre-in-pp">
+  .SMALLCAPS_STYLE SIZE 80 WEIGHT_ADJ .25 EXTEND 3
+</span>
+or, more readably,
+<br/>
+<span class="pre-in-pp">
+  .SMALLCAPS_STYLE 
+  SIZE 80 \
+  WEIGHT_ADJ .25 \
+  EXTEND 3
+</span>
+Note that you do not have to give SMALLCAPS_STYLE all three
+arguments, and that the arguments may be entered in any order.  Any
+arguments you omit will remain at their former value.
+</p>
+
 <div class="rule-short" style="margin-bottom: 24px;"><hr/></div>
 
 <!-- ==================================================================== -->
diff -Nuar groff-1.22.3.old/contrib/mom/momdoc/using.html groff-1.22.3/contrib/mom/momdoc/using.html
--- groff-1.22.3.old/contrib/mom/momdoc/using.html	2014-11-04 10:38:35.616519109 +0200
+++ groff-1.22.3/contrib/mom/momdoc/using.html	2015-04-23 20:57:03.000000000 +0300
@@ -2,7 +2,7 @@
 <!--
 This file is part of groff, the GNU roff type-setting system.
 
-Copyright (C) 2004-2014 Free Software Foundation, Inc.
+Copyright (C) 2004-2015 Free Software Foundation, Inc.
 Written by Peter Schaffter (peter@schaffter.ca).
 
 Permission is granted to copy, distribute and/or modify this document
diff -Nuar groff-1.22.3.old/contrib/mom/momdoc/version-2.html groff-1.22.3/contrib/mom/momdoc/version-2.html
--- groff-1.22.3.old/contrib/mom/momdoc/version-2.html	2014-11-04 10:38:35.616519109 +0200
+++ groff-1.22.3/contrib/mom/momdoc/version-2.html	2015-04-23 20:57:03.000000000 +0300
@@ -2,7 +2,7 @@
 <!--
 This file is part of groff, the GNU roff type-setting system.
 
-Copyright (C) 2004-2014 Free Software Foundation, Inc.
+Copyright (C) 2004-2015 Free Software Foundation, Inc.
 Written by Peter Schaffter (peter@schaffter.ca).
 
 Permission is granted to copy, distribute and/or modify this document
@@ -54,8 +54,9 @@
     <li><a href="#headings">2.3 Headings</a></li>
     <li><a href="#margin-notes">2.4 Margin notes</a></li>
     <li><a href="#floats">2.5 Floats</a></li>
-    <li><a href="#table-of-contents">2.5 Table of contents</a></li>
+    <li><a href="#table-of-contents">2.5 Tables of contents</a></li>
   </ul></li>
+  <li><a href="#v2.1-changes">Version 2.1 changes</a></li>
   <li><a href="#pdfmom">The <strong>pdfmom</strong> wrapper around groff</a></li>
   <li><a href="#install-font">The <strong>install-font.sh</strong> script</a></li>
 </ol>
@@ -276,7 +277,7 @@
 for optical centering.
 </p>
 
-<h3 id="table-of-contents" class="docs">2.6. Table of contents</h3>
+<h3 id="table-of-contents" class="docs">2.6. Tables of contents</h3>
 
 <p>
 The default look of the Table of Contents has been overhauled to
@@ -321,7 +322,52 @@
 <a href="pdfmom"><strong>pdfmom</strong></a>.
 </p>
 
-<h2 id="pdfmom" class="docs">3. pdfmom</h2>
+<h2 id="v2.1-changes" class="docs">3. Version 2.1 changes</h2>
+
+<p>
+Version 2.1 adds these features:
+</p>
+<ul style="margin-top: -.5em; width: 90%">
+  <li>expansion of cover, docheader, page header, and heading
+  control macros to permit caps, smallcaps, color, and
+  underscoring</li>
+  <li>the ability to style every element appearing in docheaders and
+  automatically-generated cover/title pages separately</li>
+  <li>macros to place images on cover/title pages</li>
+  <li>a new macro, COVERTEXT, that allows adding text (e.g. an
+  Abstract) to automatically-generated cover/title pages or to
+  create cover/title pages entirely by hand</li>
+  <li>separate indent control macros for QUOTES and BLOCKQUOTES</li>
+  <li>pseudo-smallcaps, including a control macro to choose the
+  size, weight, and width of the small caps</li>
+  <li>new &lt;element&gt;_STYLE macros that allow setting
+  parameters for &lt;element&gt; with a single macro using
+  keyword/value pairs</li>
+</ul>
+
+<p>
+The following changes have been made:
+</p>
+
+<ul style="margin-top: -.5em; width: 90%">
+  <li>MISC_AUTOLEAD (including COVER_MISC_AUTOLEAD and
+  DOC_COVER_MISC_AUTOLEAD) has been replaced in favour of MISC_LEAD,
+  which takes an absolute leading value, rather than one derived
+  from the point size</li>
+  <li>COVER_UNDERLINE and DOC_COVER_UNDERLINE have been
+  removed in favour of COVER_DOCTYPE_UNDERLINE and
+  DOC_COVER_DOCTYPE_UNDERLINE</li>
+  <li>DOCTYPE NAMED &lt;string&gt; no longer accepts a color
+  argument; setting the color for &lt;string&gt; is accomplished with
+  DOCTYPE_COLOR &lt;color&gt;; in addition, the string now has a
+  complete set of control macros</li>
+  <li>default underscoring of the DOCTYPE NAMED string has been
+  removed, both in the docheader and on cover/title pages</li>
+  <li>no cover/title page data persists, however formatting for the
+  elements on them does</li>
+</ul>
+
+<h2 id="pdfmom" class="docs">4. pdfmom</h2>
 
 <p>
 Deri James has provided <strong>pdfmom</strong>, a wrapper around
@@ -339,7 +385,7 @@
 <a href="images.html#pdf-image"><kbd>PDF_IMAGE</kbd></a>.
 </p>
 
-<h2 id="install-font" class="docs">4. install-font.sh</h2>
+<h2 id="install-font" class="docs">5. install-font.sh</h2>
 
 <p>
 A bash script, <strong>install-font.sh</strong>, has been posted at the
diff -Nuar groff-1.22.3.old/contrib/mom/NEWS groff-1.22.3/contrib/mom/NEWS
--- groff-1.22.3.old/contrib/mom/NEWS	2014-11-04 10:38:35.503520521 +0200
+++ groff-1.22.3/contrib/mom/NEWS	2015-04-23 20:57:03.000000000 +0300
@@ -1,10 +1,26 @@
     -*- text -*-
-    Copyright (C) 2004-2014  Free Software Foundation, Inc.
+    Copyright (C) 2004-2015  Free Software Foundation, Inc.
 
     Copying and distribution of this file, with or without modification,
     are permitted in any medium without royalty provided the copyright
     notice and this notice are preserved.
 
+Release 2.1
+-----------
+Expanded support for doc-covers, covers, and docheaders:
+  - control macros for formatting every element separately (title,
+    subtitle, author, etc.); formatting options include family,
+    font, size, color, quad, caps, smallcaps and underscoring
+  - (DOC_)COVERTEXT for setting blocks of type on cover pages
+  - (DOC_)COVER_IMAGE for putting full page or small images on cover
+    pages
+
+New <ELEMENT>_STYLE macros that allow grouping of style parameters
+for most document elements into a single macro using keyword/value
+pairs.
+
+Smallcaps, with the ability to control size, weight, and width.
+
 Release 2.0-c
 -------------
 Mom now has full support for eqn, pic, and tbl, as well as
diff -Nuar groff-1.22.3.old/contrib/mom/om.tmac groff-1.22.3/contrib/mom/om.tmac
--- groff-1.22.3.old/contrib/mom/om.tmac	2014-11-04 10:38:35.504520509 +0200
+++ groff-1.22.3/contrib/mom/om.tmac	1970-01-01 02:00:00.000000000 +0200
@@ -1,21183 +0,0 @@
-.\" -*- nroff -*-      om.tmac
-.ig
-Mom -- a typesetting/document-processing macro set for groff.
-
-Copyright (C) 2002-2014  Free Software Foundation, Inc.
- Written by Peter Schaffter <peter@schaffter.ca>
- PDF integration contributed by Deri James <deri.james@chuzzlewit.co.uk>
-
-This file is part of groff.
-
-groff is free software; you can redistribute it and/or modify it
-under the terms of the GNU General Public License as published by
-the Free Software Foundation, either version 3 of the License, or
-(at your option) any later version.
-
-groff is distributed in the hope that it will be useful, but WITHOUT ANY
-WARRANTY; without even the implied warranty of MERCHANTABILITY or
-FITNESS FOR A PARTICULAR PURPOSE.  See the GNU General Public License
-for more details.
-
-You should have received a copy of the GNU General Public License
-along with this program. If not, see <http://www.gnu.org/licenses/>.
-
-Version 2.1-c_1
----------------
-Antoine de St-Exup�ry asserted that elegance in engineering is
-achieved not when there is nothing left to add, but when there is
-nothing left to take away.
-
-By those standards, mom is a Rube Goldberg contraption.  She was
-created over the years while groff, and my understanding of it,
-changed and evolved.  However, I'm a firm believer in "if it ain't
-broke, don't fix it."  Version 2.0 removes some of the redundancies
-and cruft, but mom still needs some nip and tuck.
-
-"<anything>" in the description of arguments that can be passed
-to a macro means that any argument turns the feature off.
-
-Thanks to everyone who has contributed suggestions and patches,
-and to those whose GPL'd work has been plundered.  Special thanks
-to Werner Lemberg (margin notes), Tadziu Hoffman (underlining),
-Deri James (pdf integration), Robin Haberkorn (tbl integration, eqn
-extentions, and float management).
-..
-.\" %beginstrip%
-\#
-\# ====================================================================
-\#
-\# Check which version of groff is being run
-.if (\n[.x]\n[.y] < 118) \
-.   ab [mom]: You need GNU troff version 1.18 or higher to run this version of mom.
-\# Check that GNU troff is being run
-.if !\n[.g]=1 \
-.   ab [mom]: The mom macros require that you be running GNU troff.
-.if \n[.C] \
-.   ab [mom]: The groff mom macros do not work in compatibility mode.
-\# Add supplementary styles
-.sty \n[.fp] UL      \"  Ultra Light
-.sty \n[.fp] ULI     \"  Ultra Light Italic
-.sty \n[.fp] ULCD    \"  Ultra Light Condensed
-.sty \n[.fp] ULCDI   \"  Ultra Light Condensed Italic
-.sty \n[.fp] ULEX    \"  Ultra Light Extended
-.sty \n[.fp] ULEXI   \"  Ultra Light Extended Italic
-\#
-.sty \n[.fp] XL      \"  Extra Light
-.sty \n[.fp] XLI     \"  Extra Light Italic
-.sty \n[.fp] XLCD    \"  Extra Light Condensed
-.sty \n[.fp] XLCDI   \"  Extra Light Condensed Italic
-.sty \n[.fp] XLEX    \"  Extra Light Extended
-.sty \n[.fp] XLEXI   \"  Extra Light Extended Italic
-\#
-.sty \n[.fp] TH      \"  Thin
-.sty \n[.fp] THI     \"  Thin Italic
-.sty \n[.fp] THCD    \"  Thin Condensed
-.sty \n[.fp] THCDI   \"  Thin Condensed Italic
-.sty \n[.fp] THEX    \"  Thin Extended
-.sty \n[.fp] THEXI   \"  Thin Extended Italic
-\#
-.sty \n[.fp] L       \"  Light Roman
-.sty \n[.fp] LI      \"  Light Italic
-.sty \n[.fp] LCD     \"  Light Condensed
-.sty \n[.fp] LCDI    \"  Light Condensed Italic
-.sty \n[.fp] LEX     \"  Light Extended
-.sty \n[.fp] LEXI    \"  Light Extended Italic
-\#
-.sty \n[.fp] BK      \"  Book Roman
-.sty \n[.fp] BKI     \"  Book Italic
-.sty \n[.fp] BKCD    \"  Book Condensed
-.sty \n[.fp] BKCDI   \"  Book Condensed Italic
-.sty \n[.fp] BKEX    \"  Book Extended
-.sty \n[.fp] BKEXI   \"  Book Extended Italic
-\#
-.sty \n[.fp] CD      \"  Medium Condensed
-.sty \n[.fp] CDI     \"  Medium Condensed Italic
-.sty \n[.fp] EX      \"  Medium Extended
-.sty \n[.fp] EXI     \"  Medium Extended Italic
-\#
-.sty \n[.fp] DB      \"  DemiBold Roman
-.sty \n[.fp] DBI     \"  DemiBold Italic
-.sty \n[.fp] DBCD    \"  DemiBold Condensed
-.sty \n[.fp] DBCDI   \"  DemiBold Condensed Italic
-.sty \n[.fp] DBEX    \"  DemiBold Extended
-.sty \n[.fp] DBEXI   \"  DemiBold Extended Italic
-\#
-.sty \n[.fp] SB      \"  SemiBold Roman
-.sty \n[.fp] SBI     \"  SemiBold Italic
-.sty \n[.fp] SBCD    \"  SemiBold Condensed
-.sty \n[.fp] SBCDI   \"  SemiBold Condensed Italic
-.sty \n[.fp] SBEX    \"  SemiBold Extended
-.sty \n[.fp] SBEXI   \"  SemiBold Extended Italic
-\#
-.sty \n[.fp] BCD     \"  Bold Condensed
-.sty \n[.fp] BCDI    \"  Bold Condensed Italic
-.sty \n[.fp] BEX     \"  Bold Extended
-.sty \n[.fp] BEXI    \"  Bold Extended Italic
-.sty \n[.fp] BO      \"  Bold Outline
-\#
-.sty \n[.fp] XB      \"  Extra Bold
-.sty \n[.fp] XBI     \"  Extra Bold Italic
-.sty \n[.fp] XBCD    \"  Extra Bold Condensed
-.sty \n[.fp] XBCDI   \"  Extra Bold Condensed Italic
-.sty \n[.fp] XBEX    \"  Extra Bold Extended
-.sty \n[.fp] XBEXI   \"  Extra Bold Extended Italic
-\#
-.sty \n[.fp] UB      \"  Ultra Bold
-.sty \n[.fp] UBI     \"  Ultra Bold Italic
-.sty \n[.fp] UBCD    \"  Ultra Bold Condensed
-.sty \n[.fp] UBCDI   \"  Ultra Bold Condensed Italic
-.sty \n[.fp] UBEX    \"  Ultra Bold Extended
-.sty \n[.fp] UBEXI   \"  Ultra Bold Extended Italic
-\#
-.sty \n[.fp] HV      \"  Heavy
-.sty \n[.fp] HVI     \"  Heavy Italic
-.sty \n[.fp] HVCD    \"  Heavy Condensed
-.sty \n[.fp] HVCDI   \"  Heavy Condensed Italic
-.sty \n[.fp] HVEX    \"  Heavy Extended
-.sty \n[.fp] HVEXI   \"  Heavy Extended Italic
-\#
-.sty \n[.fp] BL      \"  Black
-.sty \n[.fp] BLI     \"  Black Italic
-.sty \n[.fp] BLCD    \"  Black Condensed
-.sty \n[.fp] BLCDI   \"  Black Condensed Italic
-.sty \n[.fp] BLEX    \"  Black Extended
-.sty \n[.fp] BLEXI   \"  Black Extended Italic
-.sty \n[.fp] BLO     \"  Black Outline
-\#
-.sty \n[.fp] XBL     \"  Extra Black
-.sty \n[.fp] XBLI    \"  Extra Black Italic
-.sty \n[.fp] XBLCD   \"  Extra Black
-.sty \n[.fp] XBLCDI  \"  Extra Black
-.sty \n[.fp] XBLEX   \"  Extra Black Italic
-.sty \n[.fp] XBLEXI  \"  Extra Black Italic
-\#
-.sty \n[.fp] UBL     \"  Ultra Black
-.sty \n[.fp] UBLI    \"  Ultra Black Italic
-.sty \n[.fp] UBLCD   \"  Ultra Black Condensed
-.sty \n[.fp] UBLCDI  \"  Ultra Black Condensed Italic
-.sty \n[.fp] UBLEX   \"  Ultra Black Exteneded
-.sty \n[.fp] UBLEXI  \"  Ultra Black Extended Italic
-\#
-.sty \n[.fp] SC      \"  Small Caps Roman
-.sty \n[.fp] SCI     \"  Small Caps Italic
-.sty \n[.fp] SCDB    \"  Small Caps Demibold
-.sty \n[.fp] SCDBI   \"  Small Caps Demibold Italic
-.sty \n[.fp] SCSB    \"  Small Caps Semibold
-.sty \n[.fp] SCSBI   \"  Small Caps Semibold Italic
-\#
-\# Instruct grops to use square linecaps and joins.
-\# This instruction is also executed in DO_B_MARGIN, NEWPAGE, and HEADER
-\#
-.if !n \X'ps: exec 0 setlinejoin'\X'ps: exec 0 setlinecap'
-\#
-\# The following PostScript, provided by Tadziu Hoffmann, permits
-\# no-fail underlining
-\#
-.de ul*ps
-ps: def
-grops begin
-/decornone { grops begin /X { } def /Y { } def /y2 -1 def end } def
-/decorline { grops begin u neg /uld exch def u /ulw exch def
-             /X { currentpoint /y0 exch def /x0 exch def } def
-             /Y { currentpoint /y1 exch def /x1 exch def
-                  drawline /x2 x1 def /y2 y1 def } def end } def
-/drawline { gsave ulw setlinewidth 0 setlinecap x1 y1 uld sub moveto
-            y2 y0 eq { x2 y2 } { x0 y0 } ifelse uld sub lineto stroke
-            grestore } def
-decornone
-/uld 0 def
-/ulw 0 def
-/A { X show Y } def
-/B { 0 SC 3 -1 roll X widthshow Y } def
-/C { 0 exch X ashow Y } def
-/D { 0 exch 0 SC 5 2 roll X awidthshow Y } def
-/E { 0 rmoveto X show Y } def
-/F { 0 rmoveto 0 SC 3 -1 roll X widthshow Y } def
-/G { 0 rmoveto 0 exch X ashow Y } def
-/H { 0 rmoveto 0 exch 0 SC 5 2 roll X awidthshow Y } def
-/I { 0 exch rmoveto X show Y } def
-/J { 0 exch rmoveto 0 SC 3 -1 roll X widthshow Y } def
-/K { 0 exch rmoveto 0 exch X ashow Y } def
-/L { 0 exch rmoveto 0 exch 0 SC 5 2 roll X awidthshow Y } def
-/M { rmoveto X show Y } def
-/N { rmoveto 0 SC 3 -1 roll X widthshow Y } def
-/O { rmoveto 0 exch X ashow Y } def
-/P { rmoveto 0 exch 0 SC 5 2 roll X awidthshow Y } def
-/Q { moveto X show Y } def
-/R { moveto 0 SC 3 -1 roll X widthshow Y } def
-/S { moveto 0 exch X ashow Y } def
-/T { moveto 0 exch 0 SC 5 2 roll X awidthshow Y } def
-end
-..
-\#
-.if !n \Y[ul*ps]
-.if n .color 0
-.nr TOC.RELOCATE 0 \" TOC.RELOCATE is off by default
-.ds PDFHREF.TEXTCOL.DEFAULT 0.0 0.3 0.9
-\#
-\# ====================================================================
-\#
-\# TYPESETTING MACROS, STRINGS, AND ALIASES
-\# ========================================
-\#
-\# +++ALIASES+++
-\#
-\# Alias .als as ALIAS, and .aln (number registers) as ALIASN
-\#
-.als      ALIAS           als
-.als      ALIASN          aln
-\#
-\# ALIASES FOR GROFF REQUESTS
-\# --------------------------
-\#
-.ALIAS    MAC             de
-.ALIAS    BR              br
-.ALIAS    SPREAD          brp
-.ALIAS    ESC_CHAR        ec
-.ALIAS    STRING          ds
-.ALIAS    INCLUDE         so
-\#
-\# ALIASES FOR NUMBER REGISTERS
-\# ----------------------------
-\#
-.ALIASN  #PT_SIZE        .ps    \"fractional point size in units
-.ALIASN  #DIVER_DEPTH     dn    \"diversion depth
-.ALIASN  #DIVER_WIDTH     dl    \"diversion width
-.ALIASN  #TRAP_DISTANCE  .t     \"distance to next trap
-.ALIASN  #LEAD           .v     \"line space
-.ALIASN  #PAGE_LENGTH    .p     \"page length
-.ALIASN  #NUM_ARGS       .$     \"number of arguments passed to a macro
-.ALIASN  #INDENT         .i     \"value of current indent
-\#
-\# ====================================================================
-\#
-\# MISCELLANEOUS
-\# =============
-.nr #L_MARGIN \n[.o]  \" Tabs, etc require #L_MARGIN
-.cflags 4 /\[en]      \" So slash and en-dashes get broken
-\#
-\# ====================================================================
-\#
-\# +++PAGE LAYOUT+++
-\#
-\# Macros that control the physical layout of the page: paper size
-\# and margins.
-\#
-\# PAGE WIDTH
-\# ----------
-\# *Argument:
-\#   <width of printer sheet>
-\# *Function:
-\#   Stores user supplied page width in register #PAGE_WIDTH.
-\# *Notes:
-\#   #PAGE_WIDTH is used to establish the default LL (and right margin).
-\#   Requires unit of measure.
-\#
-.MAC PAGEWIDTH END
-.    br
-.    nr #PAGE_WIDTH \\$1
-.    if !r#L_MARGIN .L_MARGIN \\n[.o]
-.    if !r#R_MARGIN .R_MARGIN 1i
-.    if '\\*[.T]'pdf' \X'papersize=\\n[#PAGE_WIDTH]z,\\n[#PAGE_LENGTH]z'\c
-.END
-\#
-\# L_MARGIN
-\# --------
-\# *Argument:
-\#   <offset from page left>
-\# *Function:
-\#   Stores user supplied page offset in register #L_MARGIN.
-\#   Sets .po to user supplied offset.
-\# *Notes:
-\#   Requires unit of measure.
-\#
-.MAC L_MARGIN END
-.    br
-.    nr #L_MARGIN (\\$1)
-.    po \\n[#L_MARGIN]u
-.END
-\#
-\# R_MARGIN
-\# --------
-\# *Argument:
-\#   <width of right margin>
-\# *Function:
-\#   Stores user supplied right margin in register #R_MARGIN.
-\# *Notes:
-\#   This is a pseudo-margin.  Right margin is actually a function of
-\#   line length.  The macro calculates line length from the page offset
-\#   and the value plugged into #R_MARGIN.
-\#
-\#   N.B. -- PAGEWIDTH and L_MARGIN have to be defined before R_MARGIN.
-\#
-\#   Requires unit of measure.
-\#
-.MAC R_MARGIN END
-.    br
-.    nr #R_MARGIN (\\$1)
-.    ll \\n[#PAGE_WIDTH]u-\\n[#L_MARGIN]u-\\n[#R_MARGIN]u
-.    ta \\n[.l]u
-.    nr #L_LENGTH \\n[.l]
-.END
-\#
-\# T_MARGIN
-\# --------
-\# *Argument:
-\#   <distance to advance from top of page>
-\# *Function:
-\#   Stores the user supplied top margin in register #T_MARGIN.
-\#   Advances user supplied depth from the top of the page.
-\# *Notes:
-\#   Requires unit of measure.
-\#
-.MAC T_MARGIN END
-.    nr #T_MARGIN (\\$1)
-.    nr #TOP 1
-.    if !\\n[#DOCS] .sp |\\n[#T_MARGIN]u-1v
-.    wh 0i DO_T_MARGIN
-.END
-\#
-\# B_MARGIN
-\# --------
-\# *Argument:
-\#   <space to leave at the bottom of the page>
-\# *Function:
-\#   Stores the user supplied bottom margin in register #B_MARGIN.
-\# *Notes:
-\#   Requires unit of measure.
-\#
-.MAC B_MARGIN END
-.    br
-.    nr #B_MARGIN (\\$1)
-.    nr #ORIGINAL_B_MARGIN \\n[#B_MARGIN]
-.    nr #B_MARGIN_SET 1
-.    wh -\\n[#B_MARGIN]u DO_B_MARGIN
-.END
-\#
-\# PAGE
-\# ----
-\# *Arguments:
-\#   <pagewidth>  [pagelength [leftmargin [rightmargin [topmargin [bottommargin]]]]]
-\# *Function:
-\#   Page set-up.  Collects arguments and passes them to the appropriate
-\#   macros.
-\# *Notes:
-\#   All arguments after pagewidth are optional, but must appear
-\#   in the order given above.  (User can fill in as much or as
-\#   little as desired.)
-\#
-\#   All arguments require a unit of measure.
-\#
-.MAC PAGE END
-.    br
-.    PAGEWIDTH   \\$1
-.    PAGELENGTH  \\$2
-.    ie '\\$3''  .L_MARGIN \\n[.o]
-.    el          .L_MARGIN \\$3
-.    ie '\\$4''  .R_MARGIN 1i
-.    el          .R_MARGIN \\$4
-.    if !'\\$5'' .T_MARGIN \\$5
-.    if !'\\$6'' .B_MARGIN \\$6
-.END
-\#
-\# gropdf: pass pagelength to postprocessor; no need for -P-p
-\#
-.MAC PAGELENGTH END
-.    pl \\$*
-.    if '\\*[.T]'pdf' \X'papersize=\\n[#PAGE_WIDTH]z,\\n[#PAGE_LENGTH]z'\c
-.END
-\#
-\# =====================================================================
-\#
-\# +++PAGE CONTROL+++
-\#
-\# Generic macros for breaking pages.
-\#
-\# DO_T_MARGIN
-\# -----------
-\# *Argument:
-\#   <none>
-\# *Function:
-\#   Plants the top margin at the top of each page.
-\# *Notes:
-\#   The trap is set in .T_MARGIN or .PAGE
-\#
-.MAC DO_T_MARGIN END
-.    ev T_MARGIN
-.    nr #TOP 1
-.    sp |\\n[#T_MARGIN]u-1v
-.    ev
-.    sp -\\n[#T_MARGIN_LEAD_ADJ]u
-.END
-\#
-\# DO_B_MARGIN
-\# -----------
-\# *Argument:
-\#   <none>
-\# *Function:
-\#   Plants the bottom margin at the bottom of each page.
-\# *Notes:
-\#   The trap is set in .B_MARGIN or .PAGE.
-\#
-.MAC DO_B_MARGIN END
-.    nr #T_MARGIN_LEAD_ADJ \\n[#LEAD]-12000
-'    bp
-.    if !n .nop \X'ps: exec 0 setlinejoin'\X'ps: exec 0 setlinecap'
-.END
-\#
-\# NEWPAGE
-\# -------
-\# *Argument:
-\#   <none>
-\# *Function:
-\#   Breaks to a new page.
-\# *Notes:
-\#   If a B_MARGIN has been set, processes that, otherwise, just
-\#   breaks to a new page.
-\#
-.MAC NEWPAGE END
-.    if \\n[.vpt]=0 .vpt
-.    ie \\n[#NO_BREAK] \{\
-'       br
-.       rr #NO_BREAK
-.    \}
-.    el .br
-.    nr #NEWPAGE 1
-.    nr @TOP 1
-.    ie \\n[#B_MARGIN_SET]=1 \{\
-.       ie !\\n[#DOCS]=1 \{\
-.          ev NP
-.          DO_B_MARGIN
-.          ev
-.       \}
-.       el \{\
-.          if \\n[#COLUMNS]=1 .nr #COL_NUM \\n[#NUM_COLS]
-.          ie !\\n[#FN_DEPTH] \{\
-.             ch FN_OVERFLOW_TRAP
-.             DO_FOOTER
-.             wh -(\\n[#FN_OVERFLOW_TRAP_POS]u) FN_OVERFLOW_TRAP
-.          \}
-.          el .DO_B_MARGIN
-.       \}
-.    \}
-.    el 'bp
-.END
-\#
-\# =====================================================================
-\#
-\# +++GENERAL STYLE MACROS+++
-\#
-\# LINE LENGTH
-\# -----------
-\# *Argument:
-\#   <line length>
-\# *Function:
-\#   Stores user supplied line length in register #L_LENGTH.
-\#   Sets .ll to #L_LENGTHu
-\# *Notes:
-\#   Requires unit of measure.
-\#
-.MAC LL END
-.    nr #USER_SET_L_LENGTH 1
-.    ll \\$1
-.    nr #L_LENGTH \\n[.l]
-.    ta \\n[.l]u
-.END
-\#
-\# +++FAMILY AND FONT+++
-\#
-\# FALLBACK FONT
-\# -------------
-\# *Argument:
-\#   <fallback font> [ ABORT | WARN ] | ABORT | WARN
-\# *Function:
-\#   Sets register #ABORT_FT_ERRORS to 1, or defines a fallback font
-\#   called "dummy" at font position 0.
-\# *Notes:
-\#   Calls to non-existent families cause mom to continue processing
-\#   files using the fallback font until a valid family is entered.
-\#
-\#   Calls to non-existent fonts generate warnings.  If ABORT is passed
-\#   to FALLBACK_FONT, mom stops processing files after the warning.
-\#   Otherwise, she continues to process files using the fallback font
-\#   after the warning is issued.  The default fallback font is CR; the
-\#   default for font warnings is to abort.
-\#
-.MAC FALLBACK_FONT END
-.    if \\n[#NUM_ARGS]=1 \{\
-.       if '\\$1'ABORT' .nr #ABORT_FT_ERRORS 1
-.       if '\\$1'WARN' \
-.          if r #ABORT_FT_ERRORS .nr #ABORT_FT_ERRORS 0
-.       if !'\\$1'ABORT' \
-.          if !'\\$1'WARN' .fp 0 dummy \\$1
-.    \}
-.    if \\n[#NUM_ARGS]=2 \{\
-.       fp 0 dummy \\$1
-.       if '\\$2'ABORT' .nr #ABORT_FT_ERRORS 1
-.       if '\\$2'WARN'  .nr #ABORT_FT_ERRORS 0
-.    \}
-.END
-\#
-.FALLBACK_FONT CR ABORT
-\#
-\# FAMILY
-\# ------
-\# *Argument:
-\#   <font family>
-\# *Function:
-\#   Stores user supplied font family in string $FAMILY.  Sets .fam
-\#   to $FAMILY.
-\#
-.MAC FAMILY END
-.    ds $FAMILY \\$1
-.    if \\n[#PRINT_STYLE]=1 \{\
-.       fam \\*[$TYPEWRITER_FAM]
-.       return
-.    \}
-.    if \\n[#IGNORE] \{\
-.       fam \\*[$TYPEWRITER_FAM]
-.       return
-.    \}
-.    if (\\n[.x]\\n[.y]\\n[.Y] >= 1192) .ds $SAVED_STYLE \\n[.sty]
-.    ft 0
-.    fam \\*[$FAMILY]
-.    if (\\n[.x]\\n[.y]\\n[.Y] >= 1192) \{\
-.       ft \\*[$SAVED_STYLE]
-.       if !F\\n[.fn] .ft 0
-.    \}
-.    ie \\n[#PRE_COLLATE]=1 .
-.    el \{\
-.       if \\n[#COLLATE]=1 \
-.          if !r#START .ds $DOC_FAM \\*[$FAMILY]
-.    \}
-.END
-\#
-\# FONT
-\# ----
-\# *Argument:
-\#   R | I | B | BI | <other style extension>
-\# *Function:
-\#  Stores user supplied font in $FONT and sets .ft to $FONT.
-\#
-.MAC FT END
-.    ds $FONT \\$1
-.    if \\n[#PRINT_STYLE]=1 \{\
-.       ie '\\$1'I' \{\
-.          if \\n[#UNDERLINE_ITALIC]=1 \{\
-.             UNDERLINE
-.             return
-.          \}
-.          if \\n[#ITALIC_MEANS_ITALIC]=1 \{\
-.             ds $FONT \\$1
-.             ft \\*[$FONT]
-.             return
-.          \}
-.       \}
-.       el .UNDERLINE OFF
-.       return
-.    \}
-.    ft 0
-.    ft \\*[$FONT]
-.    if (\\n[.x]\\n[.y]\\n[.Y] >= 1192) \{\
-.       if '\\n[.sty]'' \{\
-.          if !F\\n[.fn] \{\
-.             if !S\\*[$FONT] \{\
-.                tm1 "[mom]: Font style "\\*[$FONT]" at line \\n[.c] has not been registered.
-.                ie \\n[#ABORT_FT_ERRORS]=0 \
-.                   tm1 "       Continuing to process using fallback font.
-.                el .ab Aborting '\\n[.F]' at \\$0, line \\n[.c].
-.             \}
-.             if \\n[.f]=0 \{\
-.                tm1 "[mom]: Either font style "\\*[$FONT]" at line \\n[.c] does not exist in family "\\n[.fam]",
-.                tm1 "       or family "\\n[.fam]" has not been installed.
-.                ie \\n[#ABORT_FT_ERRORS]=0 \
-.                   tm1 "       Continuing to process using fallback font.
-.                el .ab Aborting '\\n[.F]' at \\$0, line \\n[.c].
-.             \}
-.          \}
-.       \}
-.    \}
-.END
-\#
-\# POINT SIZE
-\# ----------
-\# *Arguments:
-\#   <point size of type>
-\# *Function:
-\#   Sets point size to user supplied value in scaled points.
-\#   If #AUTO_LEAD is on, resets lead accordingly.
-\# *Notes:
-\#   Must NOT use a unit of measure.
-\#
-.MAC PT_SIZE END
-.    if \\n[#PRINT_STYLE]=1 .return
-.    if \\n[#IGNORE] .return
-.    ps \\$1
-.    nr #PT_SIZE_IN_UNITS \\n[.ps]
-.    ie '\\$0'DOC_PT_SIZE' \{\
-.       if !\\n[#DOCS] .DOC_MACRO_ERROR \\$0
-.       br
-.       nr #NEW_DOC_PT_SIZE \\n[.ps]
-.       if \\n[#DOC_AUTOLEAD] \{\
-.          ie !\\n[#DOC_AUTOLEAD_FACTOR] .nr #AUTOLEADING \\n[#DOC_AUTOLEAD]
-.          el .nr #AUTOLEADING \\n[.ps]*\\n[#DOC_AUTOLEAD]/1000-\\n[.ps]
-.          nr #DOC_LEAD \\n[.ps]+\\n[#AUTOLEADING]
-.          nr #RESET_TRAPS 1
-.       \}
-.    \}
-.    el .if \\n[#AUTO_LEAD] .vs \\n[.ps]u+\\n[#AUTOLEADING]u
-.END
-\#
-\# SIZE (inline)
-\# -------------
-\# *Arguments:
-\#   <point size of type>
-\# *Function:
-\#   Sets point size to user supplied value in scaled points.
-\#   Intended to be called inline with \*[SIZE <n><unit>]
-\# *Notes:
-\#   Can be used with a unit of measure or not.
-\#
-.MAC SIZE END
-\c
-.ps \\$1
-.END
-\#
-\# LEADING
-\# -------
-\# *Argument:
-\#   <leading between lines of text>
-\# *Function:
-\#   Turns off #AUTOLEAD if it's on.
-\#   Sets .vs to user supplied value.
-\# *Notes:
-\#   Does not require unit of measure.  LS automatically turns off AUTOLEAD.
-\#
-.MAC LS END
-.    br
-.    nr #OLD_LEAD \\n[.v]
-.    if \\n[#PRINT_STYLE]=1 .return
-.    if \\n[#IGNORE] .return
-.    if \\n[#AUTO_LEAD] \{\
-.       rr #AUTO_LEAD
-.       rr #AUTOLEAD_VALUE
-.       rr #AUTOLEADING
-.    \}
-.    vs \\$1
-.    if \\n[.t]<\\n[.v] 'bp
-.    if \\n[#TOP] \{\
-.       nr #TOP_BASELINE_ADJ \\n[.v]-\\n[#OLD_LEAD]
-.       sp -\\n[#TOP_BASELINE_ADJ]u
-.       rr #TOP
-.       rr #TOP_BASELINE_ADJ
-.    \}
-.END
-\#
-\# AUTOLEAD
-\# --------
-\# *Argument:
-\#   <leading value to add to #PT_SIZE> [FACTOR]
-\# *Function:
-\#   Stores user supplied auto-lead value in register #AUTOLEAD_VALUE.
-\#   Adds #AUT0LEAD_VALUE to #PT_SIZE when invoked to set leading.
-\#   All subsequent PT_SIZE requests reset the leading in the same way until
-\#   AUTOLEAD is turned off.
-\# *Notes:
-\#   With the optional FACTOR argument, the current point size is
-\#   multiplied by #AUTOLEAD_VALUE/1000 instead of the two being added
-\#   together.
-\#
-.MAC AUTOLEAD END
-.    if \\n[#PRINT_STYLE]=1 .return
-.    if \\n[#IGNORE] .return
-.    nr #AUTO_LEAD 1 \" autolead on or off
-.    nr #OLD_LEAD \\n[.v]
-.    nr #AUTOLEAD_VALUE (p;\\$1) \" arg x 1000
-.    ie '\\$2'FACTOR' \{\
-.       if !\\n[#DOCS] .nr #DOC_AUTOLEAD_FACTOR \\n[#AUTOLEAD_VALUE] \" save for DOC_PT_SIZE
-.       nr #AUTOLEADING \\n[.ps]*\\n[#AUTOLEAD_VALUE]/1000-\\n[.ps]
-.    \}
-.    el .nr #AUTOLEADING \\n[#AUTOLEAD_VALUE]
-.    vs \\n[.ps]u+\\n[#AUTOLEADING]u
-.    if \\n[#TOP] \{\
-.       nr #TOP_BASELINE_ADJ \\n[.v]-\\n[#OLD_LEAD]
-.       sp -\\n[#TOP_BASELINE_ADJ]u
-.       rr #TOP
-.       rr #TOP_BASELINE_ADJ
-.    \}
-.END
-\#
-\# STRINGS FOR INLINE CONTROL OF GENERAL TYPE STYLE
-\# ------------------------------------------------
-.ds ROM  \Ef[R]
-.ds IT   \Ef[I]
-.ds BD   \Ef[B]
-.ds BDI  \Ef[BI]
-.ds PREV \Ef[]
-.ds S    \Es
-\#
-\# =====================================================================
-\#
-\# +++KERNING+++
-\#
-\# AUTOMATIC PAIRWISE KERNING
-\# --------------------------
-\# *Arguments:
-\#   <none> | <anything>
-\# *Function:
-\#   Turns automatic pairwise kerning on or off.
-\#
-.MAC KERN END
-.    ie '\\$1'' \{\
-.       kern
-.       nr #KERN 1
-.    \}
-.    el \{\
-.       kern 0
-.       nr #KERN 0
-.    \}
-.END
-\#
-\# INLINE KERNING AND HORIZONTAL MOVEMENT
-\# --------------------------------------
-\#
-\# Inline kerning provides a simple way to adjust the amount of
-\# space between any two letters.  It's predicated on a unit of
-\# measure "U", which, by default, is 1/36 of the current point
-\# size as returned by \n[.ps]; e.g., if the current point size is
-\# 18, \n[.ps] returns 18000u, therefore U=500u.  Since U remains
-\# proportional relative to the current point size, the amount of
-\# kerning between two letters as expressed in Us remains visually
-\# similar regardless of changes in point size.
-\#
-\# The default value for U may be changed or reset with the
-\# KERN_UNIT macro.
-\#
-.MAC KERN_UNIT END
-.    ie '\\$1'DEFAULT' .nr #KERN_UNIT 36
-.    el .nr #KERN_UNIT \\$1
-.END
-\#
-.nr #KERN_UNIT 36
-.ds BU   \h'-(\En[#PT_SIZE]u/\n[#KERN_UNIT]u*\\$1u)'
-.ds FU   \h'(\En[#PT_SIZE]u/\n[#KERN_UNIT]u*\\$1u)'
-\#
-\# Initialize strings for pre-1.1.3c-style BU and FU
-\#
-.nr #LOOP 0 1
-.while \n+[#LOOP]<37 \{\
-.   ds BU\n[#LOOP]  \h'-(\En[#PT_SIZE]u/\n[#KERN_UNIT]u*\n[#LOOP]u)'
-.\}
-\#
-.nr #LOOP 0 1
-.while \n+[#LOOP]<37 \{\
-.   ds FU\n[#LOOP] \h'(\En[#PT_SIZE]u/\n[#KERN_UNIT]u*\n[#LOOP]u)'
-.\}
-.rr #LOOP
-\#
-\# Horizontal movements
-\# --------------------
-\# BP1...12.75 and FP1...12.75 move backwards or forwards inline by the
-\# specified number of points.
-\#
-.ds BCK  \h'-\\$1'
-.ds FWD  \h'\\$1'
-\#
-.ds BP.25    \h'-.25'
-.ds BP.5     \h'-.5'
-.ds BP.75    \h'-.75'
-.ds BP1      \h'-1p'
-.ds BP1.25   \h'-1.25p'
-.ds BP1.5    \h'-1.5p'
-.ds BP1.75   \h'-1.75p'
-.ds BP2      \h'-2p'
-.ds BP2.25   \h'-2.25p'
-.ds BP2.5    \h'-2.5p'
-.ds BP2.75   \h'-2.75p'
-.ds BP3      \h'-3p'
-.ds BP3.25   \h'-3.25p'
-.ds BP3.5    \h'-3.5p'
-.ds BP3.75   \h'-3.75p'
-.ds BP4      \h'-4p'
-.ds BP4.25   \h'-4.25p'
-.ds BP4.5    \h'-4.5p'
-.ds BP4.75   \h'-4.75p'
-.ds BP5      \h'-5p'
-.ds BP5.25   \h'-5.25p'
-.ds BP5.5    \h'-5.5p'
-.ds BP5.75   \h'-5.75p'
-.ds BP6      \h'-6p'
-.ds BP6.25   \h'-6.25p'
-.ds BP6.5    \h'-6.5p'
-.ds BP6.75   \h'-6.75p'
-.ds BP7      \h'-7p'
-.ds BP7.25   \h'-7.25p'
-.ds BP7.5    \h'-7.5p'
-.ds BP7.75   \h'-7.75p'
-.ds BP8      \h'-8p'
-.ds BP8.25   \h'-8.25p'
-.ds BP8.5    \h'-8.5p'
-.ds BP8.75   \h'-8.75p'
-.ds BP9      \h'-9p'
-.ds BP9.25   \h'-9.25p'
-.ds BP9.5    \h'-9.5p'
-.ds BP9.75   \h'-9.75p'
-.ds BP10     \h'-10p'
-.ds BP10.25  \h'-10.25p'
-.ds BP10.5   \h'-10.5p'
-.ds BP10.75  \h'-10.75p'
-.ds BP11     \h'-11p'
-.ds BP11.25  \h'-11.25p'
-.ds BP11.5   \h'-11.5p'
-.ds BP11.75  \h'-11.75p'
-.ds BP12     \h'-12p'
-.ds BP12.25  \h'-12.25p'
-.ds BP12.5   \h'-12.5p'
-.ds BP12.75  \h'-12.75p'
-\#
-.ds FP.25    \h'.25'
-.ds FP.5     \h'.5'
-.ds FP.75    \h'.75'
-.ds FP1      \h'1p'
-.ds FP1.25   \h'1.25p'
-.ds FP1.5    \h'1.5p'
-.ds FP1.75   \h'1.75p'
-.ds FP2      \h'2p'
-.ds FP2.25   \h'2.25p'
-.ds FP2.5    \h'2.5p'
-.ds FP2.75   \h'2.75p'
-.ds FP3      \h'3p'
-.ds FP3.25   \h'3.25p'
-.ds FP3.5    \h'3.5p'
-.ds FP3.75   \h'3.75p'
-.ds FP4      \h'4p'
-.ds FP4.25   \h'4.25p'
-.ds FP4.5    \h'4.5p'
-.ds FP4.75   \h'4.75p'
-.ds FP5      \h'5p'
-.ds FP5.25   \h'5.25p'
-.ds FP5.5    \h'5.5p'
-.ds FP5.75   \h'5.75p'
-.ds FP6      \h'6p'
-.ds FP6.25   \h'6.25p'
-.ds FP6.5    \h'6.5p'
-.ds FP6.75   \h'6.75p'
-.ds FP7      \h'7p'
-.ds FP7.25   \h'7.25p'
-.ds FP7.5    \h'7.5p'
-.ds FP7.75   \h'7.75p'
-.ds FP8      \h'8p'
-.ds FP8.25   \h'8.25p'
-.ds FP8.5    \h'8.5p'
-.ds FP8.75   \h'8.75p'
-.ds FP9      \h'9p'
-.ds FP9.25   \h'9.25p'
-.ds FP9.5    \h'9.5p'
-.ds FP9.75   \h'9.75p'
-.ds FP10     \h'10p'
-.ds FP10.25  \h'10.25p'
-.ds FP10.5   \h'10.5p'
-.ds FP10.75  \h'10.75p'
-.ds FP11     \h'11p'
-.ds FP11.25  \h'11.25p'
-.ds FP11.5   \h'11.5p'
-.ds FP11.75  \h'11.75p'
-.ds FP12     \h'12p'
-.ds FP12.25  \h'12.25p'
-.ds FP12.5   \h'12.5p'
-.ds FP12.75  \h'12.75p'
-\#
-\# WHOLE LINE (TRACK) KERNING
-\# --------------------------
-\# *Argument:
-\#   <amount of track kerning>
-\# *Function:
-\#   Invokes .tkf (track kerning) for the current font with
-\#   1 as both the upper and lower point size limits, so that
-\#   the value entered by the user applies regardless of point
-\#   size.  RW ("Reduce Whitespace") reduces the amount of space
-\#   between all characters by an equal amount.  EW ("Extra
-\#   Whitespace") increases the amount of space.
-\# *Notes:
-\#   Decimal values are acceptable.
-\#
-\# A value of 1 will produce an unacceptably tight or loose line
-\# at most text point sizes; therefore, effective use of RW and
-\# EW is in the fractional range below 1.
-\#
-\# \n[.f] holds the current font number, which is acceptable to .tkf.
-\#
-\# RW and EW must be reset to 0 to cancel their effect on subsequent
-\# output lines.
-\#
-.MAC RW END
-.    if \\n[#BR_AT_LINE_KERN] \{\
-.       ie \\n[#JUSTIFY]=1 .brp
-.       el .br
-.    \}
-.    rr #EW
-.    rm $EW
-.    nr #RW 1
-.    ds $RW \\$1
-.    tkf \\n[.f] 1 -\\$1 1 -\\$1
-.END
-\#
-.MAC EW END
-.    if \\n[#BR_AT_LINE_KERN] \{\
-.       ie \\n[#JUSTIFY]=1 .brp
-.       el .br
-.    \}
-.    rr #RW
-.    rm $RW
-.    nr #EW 1
-.    ds $EW \\$1
-.    tkf \\n[.f] 1 \\$1 1 \\$1
-.END
-\#
-\# BREAK AT LINE KERN
-\# ------------------
-\# *Arguments:
-\#   toggle
-\# *Function:
-\#   Enables/disables .br's before .RW and .EW
-\# *Notes:
-\#   Mostly, users will want .br's before any kind of line kerning, but
-\#   there may be cases where they don't.  BR_AT_LINE_KERN is off by
-\#   default and must be invoked explicitly.
-\#
-.MAC BR_AT_LINE_KERN END
-.    ie '\\$1'' .nr #BR_AT_LINE_KERN  1
-.    el .rr #BR_AT_LINE_KERN
-.END
-\#
-\# =====================================================================
-\#
-\# +++HYPHENATION+++
-\#
-\# AUTO HYPHENATION
-\# ----------------
-\# *Arguments:
-\#   <none> | <anything> | DEFAULT
-\#                 or
-\#   LINES <n> | MARGIN <n> | SPACE <n>
-\# *Function:
-\#   Turns auto hyphenation on or off, resets the hyphenation style
-\#   to default, or permits the setting of various hyphenation
-\#   parameters.
-\# *Notes:
-\#   HY, by itself, defaults to .hy 14, i.e. no hyphens after the
-\#   first two or before the last two characters of a word, and no
-\#   hyphenation of the last line prior to a trap (e.g., at the
-\#   bottom of a page).
-\#
-\#   HY DEFAULT resets the hyphenation style to .hy 14 (see
-\#   above) if that behaviour is desired after changes have been
-\#   made to LINES, MARGIN, or SPACE.
-\#
-\#   HY LINES <n> sets the number of allowable consecutive hyphenated lines.
-\#
-\#   HY MARGIN <n> sets the amount of space (ipPcm) allowed at the end
-\#   of a line in QUAD mode before hyphenation is tripped (e.g. if there's
-\#   only 6 points left, groff won't try to hyphenate the next word).
-\#
-\#   HY SPACE sets the amount of extra interword space (ipPcm) that can
-\#   be added in JUSTIFY mode to prevent a line from being hyphenated.
-\#
-.MAC HY END
-.    ie '\\$1'' \{\
-.       hy 14
-.       if \\n[#LINES]  .hlm \\n[#LINES]
-.       if \\n[#MARGIN] .hym \\n[#MARGIN]]
-.       if \\n[#SPACE]  .hys \\n[#SPACE]
-.       nr #HYPHENATE 1
-.    \}
-.    el \{\
-.       if !'\\$1'LINES' \{\
-.          nh
-.          nr #HYPHENATE 0
-.       \}
-.       if !'\\$1'MARGIN' \{\
-.          nh
-.          nr #HYPHENATE 0
-.       \}
-.       if !'\\$1'SPACE' \{\
-.          nh
-.          nr #HYPHENATE 0
-.       \}
-.       if !'\\$1'DEFAULT' \{\
-.          nh
-.          nr #HYPHENATE 0
-.       \}
-.       if '\\$1'LINES'  \{\
-.          hlm \\$2
-.          nr #HY_LINES \\$2
-.       \}
-.       if '\\$1'MARGIN' \{\
-.          hym \\$2
-.          nr #HY_MARGIN \\$2
-.       \}
-.       if '\\$1'SPACE'  \{\
-.          hys \\$2
-.          nr #HY_SPACE \\$2
-.       \}
-.       if '\\$1'DEFAULT' \{\
-.          hlm -1
-.          hym 0
-.          hys 0
-.          rr #HY_LINES
-.          rr #HY_SPACE
-.          rr #HY_MARGIN
-.       \}
-.    \}
-.END
-\#
-\# HYPHENATION PARAMETERS
-\# ----------------------
-\# *Arguments:
-\#   <# of lines> | <size of margin> | <amount of interword space>
-\# *Function:
-\#   Allows user to specify .HY LINES, MARGIN, and SPACE with a single command.
-\#
-.MAC HY_SET END
-.    nr #HY_SET 1
-.    hlm \\$1
-.    hym \\$2
-.    hys \\$3
-.END
-\#
-\# =====================================================================
-\#
-\# +++VERTICAL SPACING+++
-\#
-\# ADVANCE LEAD
-\# ------------
-\# *Argument:
-\#   <user supplied lead to advance below current baseline>
-\# *Function:
-\#   Creates or modifies register #ALD.  Adds user supplied lead
-\#   below current baseline.
-\# *Notes:
-\#   Requires a unit of measure.
-\#
-.MAC ALD END
-.    br
-.    if \\n[nl]=0 .nr #TOP 1
-.    if '\\$0'ALD' \{\
-.       nr #ALD (\\$1)
-.       sp \\n[#ALD]u
-.    \}
-.    if '\\$0'ADD_SPACE' \{\
-.       vpt 0
-.       nr #ALD (\\$1)
-.       rs
-.       nop \&
-.       sp |\\n[#T_MARGIN]u-1v+\\n[#ALD]u
-.       rr @TOP
-.       nr #SPACE_ADDED 1
-.       vpt
-.    \}
-.    if '\\$0'SPACE' .sp \\$1
-.    if '\\$0'SP'    .sp \\$1
-.END
-\#
-\# REVERSE LEAD
-\# ------------
-\# *Argument:
-\#   <user supplied lead to reverse above current baseline>
-\# *Function:
-\#   Creates or modifies register #RLD.  Reverses user supplied
-\#   lead above current baseline.
-\# *Notes:
-\#   Requires a unit of measure.
-\#
-.MAC RLD END
-.    br
-.    nr #RLD (\\$1)
-.    sp -\\n[#RLD]u
-.END
-\#
-\# ALD/RLD STRINGS
-\# ---------------
-\# The strings \*[ALD.25]...\*[ALD12.75] and their corresponding
-\# \*[RLD] forms have been left in for backward compatibility with
-\# documents created using mom-1.1.3c or earlier.  The preferred methods
-\# of advancing and reversing on the page inline are \*[UP <n><unit>]
-\# and \*[DOWN <n><unit>].
-\#
-.ds DOWN      \v'\\$1'
-.ds UP        \v'-\\$1'
-\#
-.ds ALD.25    \v'.25p'
-.ds ALD.5     \v'.5p'
-.ds ALD.75    \v'.75p'
-.ds ALD1      \v'1p'
-.ds ALD1.25   \v'1.25p'
-.ds ALD1.5    \v'1.5p'
-.ds ALD1.75   \v'1.75p'
-.ds ALD2      \v'2p'
-.ds ALD2.25   \v'2.25p'
-.ds ALD2.5    \v'2.5p'
-.ds ALD2.75   \v'2.75p'
-.ds ALD3      \v'3p'
-.ds ALD3.25   \v'3.25p'
-.ds ALD3.5    \v'3.5p'
-.ds ALD3.75   \v'3.75p'
-.ds ALD4      \v'4p'
-.ds ALD4.25   \v'4.25p'
-.ds ALD4.5    \v'4.5p'
-.ds ALD4.75   \v'4.75p'
-.ds ALD5      \v'5p'
-.ds ALD5.25   \v'5.25p'
-.ds ALD5.5    \v'5.5p'
-.ds ALD5.75   \v'5.75p'
-.ds ALD6      \v'6p'
-.ds ALD6.25   \v'6.25p'
-.ds ALD6.5    \v'6.5p'
-.ds ALD6.75   \v'6.75p'
-.ds ALD7      \v'7p'
-.ds ALD7.25   \v'7.25p'
-.ds ALD7.5    \v'7.5p'
-.ds ALD7.75   \v'7.75p'
-.ds ALD8      \v'8p'
-.ds ALD8.25   \v'8.25p'
-.ds ALD8.5    \v'8.5p'
-.ds ALD8.75   \v'8.75p'
-.ds ALD9      \v'9p'
-.ds ALD9.25   \v'9.25p'
-.ds ALD9.5    \v'9.5p'
-.ds ALD9.75   \v'9.75p'
-.ds ALD10     \v'10p'
-.ds ALD10.25  \v'10.25p'
-.ds ALD10.5   \v'10.5p'
-.ds ALD10.75  \v'10.75p'
-.ds ALD11     \v'11p'
-.ds ALD11.25  \v'11.25p'
-.ds ALD11.5   \v'11.5p'
-.ds ALD11.75  \v'11.75p'
-.ds ALD12     \v'12p'
-.ds ALD12.25  \v'12.5p'
-.ds ALD12.5   \v'12.5p'
-.ds ALD12.75  \v'12.75p'
-\#
-.ds RLD.25    \v'-.25p'
-.ds RLD.5     \v'-.5p'
-.ds RLD.75    \v'-.75p'
-.ds RLD1      \v'-1p'
-.ds RLD1.25   \v'-1.25p'
-.ds RLD1.5    \v'-1.5p'
-.ds RLD1.75   \v'-1.75p'
-.ds RLD2      \v'-2p'
-.ds RLD2.25   \v'-2.25p'
-.ds RLD2.5    \v'-2.5p'
-.ds RLD2.75   \v'-2.75p'
-.ds RLD3      \v'-3p'
-.ds RLD3.25   \v'-3.25p'
-.ds RLD3.5    \v'-3.5p'
-.ds RLD3.75   \v'-3.75p'
-.ds RLD4      \v'-4p'
-.ds RLD4.25   \v'-4.25p'
-.ds RLD4.5    \v'-4.5p'
-.ds RLD4.75   \v'-4.75p'
-.ds RLD5      \v'-5p'
-.ds RLD5.25   \v'-5.25p'
-.ds RLD5.5    \v'-5.5p'
-.ds RLD5.75   \v'-5.75p'
-.ds RLD6      \v'-6p'
-.ds RLD6.25   \v'-6.25p'
-.ds RLD6.5    \v'-6.5p'
-.ds RLD6.75   \v'-6.75p'
-.ds RLD7      \v'-7p'
-.ds RLD7.25   \v'-7.25p'
-.ds RLD7.5    \v'-7.5p'
-.ds RLD7.75   \v'-7.75p'
-.ds RLD8      \v'-8p'
-.ds RLD8.25   \v'-8.25p'
-.ds RLD8.5    \v'-8.5p'
-.ds RLD8.75   \v'-8.75p'
-.ds RLD9      \v'-9p'
-.ds RLD9.25   \v'-9.25p'
-.ds RLD9.5    \v'-9.5p'
-.ds RLD9.75   \v'-9.75p'
-.ds RLD10     \v'-10p'
-.ds RLD10.25  \v'-10.25p'
-.ds RLD10.5   \v'-10.5p'
-.ds RLD10.75  \v'-10.75p'
-.ds RLD11     \v'-11p'
-.ds RLD11.25  \v'-11.25p'
-.ds RLD11.5   \v'-11.5p'
-.ds RLD11.75  \v'-11.75p'
-.ds RLD12     \v'-12p'
-.ds RLD12.25  \v'-12.5p'
-.ds RLD12.5   \v'-12.5p'
-.ds RLD12.75  \v'-12.75p'
-\#
-\# =====================================================================
-\#
-\# +++REFINEMENTS+++
-\#
-\# AUTOMATIC LIGATURES
-\# -------------------
-\# *Arguments:
-\#   <none> | <anything>
-\# *Function:
-\#   Turns automatic ligature generation on or off.
-\# *Notes:
-\#   Ligatures may be supplied manually with \[fi], \[fl], etc.
-\#
-.MAC LIGATURES END
-.    ie '\\$1'' \{\
-.       lg
-.       nr #LIGATURES 1
-.    \}
-.    el \{\
-.       lg 0
-.       nr #LIGATURES 0
-.    \}
-.END
-\#
-\# SMARTQUOTES
-\# -----------
-\# *Arguments:
-\#   [ ,, ] | [ << ] | [ >> ] | <anything>
-\#   or
-\#   [ DA | DE | EN | ES | FR | IT | NL | NO | PT | SV ] | <anything>
-\# *Function:
-\#   Turns smartquotes on (optionally with a quoting style from the
-\#   argument list, or off).
-\#   If no quoting style is given, then EN (English) is used by default.
-\#   If no quoting style is given and smart quotes have been turned off
-\#   previously, the old quoting style will be restored.
-\# *Notes:
-\#   The " character is read outside the macro when mom is
-\#   processed.  The strings for open/close ($QUOTE<n>) are then
-\#   defined in the macro.
-\#
-.char " \\*[$QUOTE\\n[#OPEN_CLOSE]]\R'#OPEN_CLOSE (1-\\n[#OPEN_CLOSE])'
-.nr #SQ_ON 0
-\#
-.MAC SMARTQUOTES END
-.\" First " will be translated to $QUOTE0
-.    nr #OPEN_CLOSE 0
-.    if '\\$1'' \{\
-.       if !'\\*[$RESTORE_SQ]'' \{\
-.          SMARTQUOTES \\*[$RESTORE_SQ]
-.          return
-.       \}
-.\" Default smart quotes (English)
-.       ds $QUOTE0 \[lq]
-.       ds $QUOTE1 \[rq]
-.       ds $RESTORE_SQ EN
-.       nr #SQ_ON 1
-.       return
-.    \}
-.    if '\\$1',,' \{\
-.       ds $QUOTE0 \[Bq]
-.       ds $QUOTE1 \[lq]
-.       ds $RESTORE_SQ \\$1
-.       nr #SQ_ON 1
-.       return
-.    \}
-.    if '\\$1'<<' \{\
-.       ds $QUOTE0 \[Fo]
-.       ds $QUOTE1 \[Fc]
-.       ds $RESTORE_SQ \\$1
-.       nr #SQ_ON 1
-.       return
-.    \}
-.    if '\\$1'>>' \{\
-.       ds $QUOTE0 \[Fc]
-.       ds $QUOTE1 \[Fo]
-.       ds $RESTORE_SQ \\$1
-.       nr #SQ_ON 1
-.       return
-.    \}
-.    if '\\$1'DA' \{\
-.       ds $QUOTE0 \[Fc]
-.       ds $QUOTE1 \[Fo]
-.       ds $RESTORE_SQ \\$1
-.       nr #SQ_ON 1
-.       return
-.    \}
-.    if '\\$1'DE' \{\
-.       ds $QUOTE0 \[Bq]
-.       ds $QUOTE1 \[lq]
-.       ds $RESTORE_SQ \\$1
-.       nr #SQ_ON 1
-.       return
-.    \}
-.    if '\\$1'EN' \{\
-.       ds $QUOTE0 \[lq]
-.       ds $QUOTE1 \[rq]
-.       ds $RESTORE_SQ \\$1
-.       nr #SQ_ON 1
-.       return
-.    \}
-.    if '\\$1'ES' \{\
-.       ds $QUOTE0 \[lq]
-.       ds $QUOTE1 \[rq]
-.       ds $RESTORE_SQ \\$1
-.       nr #SQ_ON 1
-.       return
-.    \}
-.    if '\\$1'FR' \{\
-.       ds $QUOTE0 \[Fo]\|
-.       ds $QUOTE1 \|\[Fc]
-.       ds $RESTORE_SQ \\$1
-.       nr #SQ_ON 1
-.       return
-.    \}
-.    if '\\$1'IT' \{\
-.       ds $QUOTE0 \[Fo]\|
-.       ds $QUOTE1 \|\[Fc]
-.       ds $RESTORE_SQ \\$1
-.       nr #SQ_ON 1
-.       return
-.    \}
-.    if '\\$1'NL' \{\
-.       ds $QUOTE0 \[rq]
-.       ds $QUOTE1 \[rq]
-.       ds $RESTORE_SQ \\$1
-.       nr #SQ_ON 1
-.       return
-.    \}
-.    if '\\$1'NO' \{\
-.       ds $QUOTE0 \[Fo]
-.       ds $QUOTE1 \[Fc]
-.       ds $RESTORE_SQ \\$1
-.       nr #SQ_ON 1
-.       return
-.    \}
-.    if '\\$1'PT' \{\
-.       ds $QUOTE0 \[Fo]
-.       ds $QUOTE1 \[Fc]
-.       ds $RESTORE_SQ \\$1
-.       nr #SQ_ON 1
-.       return
-.    \}
-.    if '\\$1'SV' \{\
-.       ds $QUOTE0 \[Fc]
-.       ds $QUOTE1 \[Fc]
-.       ds $RESTORE_SQ \\$1
-.       nr #SQ_ON 1
-.       return
-.    \}
-.\" None of the above -> turn smartquotes off
-.    ds $QUOTE0 \[dq]
-.    ds $QUOTE1 \[dq]
-.    nr #SQ_ON 0
-.END
-\#
-.ds $QUOTE0 \[lq]
-.ds $QUOTE1 \[rq]
-\#
-\# Strings for foot and inch marks
-\#
-.ds FOOT \[fm]
-.ds INCH \[fm]\[fm]
-\#
-\# =====================================================================
-\#
-\# +++LINE BREAKS+++
-\#
-\# NO-SPACE BREAK
-\# --------------
-\# *Argument:
-\#   <none>
-\# *Function:
-\#   Breaks a line without advancing.
-\# *Notes:
-\#   EL is the mnemonic used on older, dedicated typesetting machines
-\#   to indicate "process the line, without advancing the galley
-\#   medium."  It stands for End Line.
-\#
-\#   The \c inline must be appended to the end of input lines when in
-\#   nofill mode; in fill modes, the \c inline must not be used.
-\#
-.MAC EL END
-.    TRAP OFF
-.    if \\n[#PSEUDO_FILL]=1 \&
-.    br
-.    sp -1v
-.    TRAP
-.END
-\#
-\# An inline escape to accomplish the same thing.
-\# Preferable, since it works with filled and non-filled copy and
-\# doesn't require the user to remember whether to use (or not use)
-\# \c.
-\#
-.ds B \h'|0'\R'#NO_ADVANCE 1'\c
-\#
-\# =====================================================================
-\#
-\# +++FILLING/QUADDING/JUSTIFYING+++
-\#
-\# JUSTIFY
-\# -------
-\# *Argument:
-\#   <none>
-\# *Function:
-\#   Turns fill on and sets .ad to b.
-\# *Notes:
-\#   Justifies text left and right.
-\#
-.MAC JUSTIFY END
-.    if \\n[#TAB_ACTIVE]=0 \{\
-.       nr #QUAD 1
-.       ds $RESTORE_QUAD_VALUE \\*[$QUAD_VALUE]
-.    \}
-'    ce 0
-.    QUAD J
-.    if \\n[#PRINT_STYLE]=1 .QUAD L
-.    nr #PSEUDO_FILL 0
-.END
-\#
-\# QUAD
-\# ----
-\# *Arguments:
-\#   L | LEFT | R | RIGHT | C | CENTER/CENTRE
-\# *Function:
-\#   Turns fill on and sets .ad to l, r, or c.
-\# *Notes:
-\#   Terminology is a problem here.  Some people call quad left
-\#   left justified, flush left, or flush left/rag right (and the
-\#   reverse for quad right).  Quad center is sometimes called rag
-\#   both.  For our purposes, all "quad" modes mean that groff fill
-\#   mode is enabled.
-\#
-.MAC QUAD END
-.    ds $QUAD_VALUE \\$1
-.    if \\n[#TAB_ACTIVE]=0 \{\
-.       nr #QUAD 1
-.       ds $RESTORE_QUAD_VALUE \\*[$QUAD_VALUE]
-.    \}
-'    ce 0
-'    fi
-.    if '\\*[$QUAD_VALUE]'L' \{\
-.       nr #JUSTIFY 0
-.       ad l
-.    \}
-.    if '\\*[$QUAD_VALUE]'LEFT' \{\
-.       nr #JUSTIFY 0
-.       ad l
-.    \}
-.    if '\\*[$QUAD_VALUE]'R' \{\
-.       nr #JUSTIFY 0
-.       ad r
-.    \}
-.    if '\\*[$QUAD_VALUE]'RIGHT' \{\
-.       nr #JUSTIFY 0
-.       ad r
-.    \}
-.    if '\\*[$QUAD_VALUE]'C' \{\
-.       nr #JUSTIFY 0
-.       ad c
-.    \}
-.    if '\\*[$QUAD_VALUE]'CENTER' \{\
-.       nr #JUSTIFY 0
-.       ad c
-.    \}
-.    if '\\*[$QUAD_VALUE]'CENTRE' \{\
-.       nr #JUSTIFY 0
-.       ad c
-.    \}
-.    if '\\*[$QUAD_VALUE]'J' \{\
-.       nr #JUSTIFY 1
-.       ad b
-.    \}
-.    if '\\*[$QUAD_VALUE]'JUSTIFY' \{\
-.       nr #JUSTIFY 1
-.       ad b
-.    \}
-.    nr #PSEUDO_FILL 0
-.END
-\#
-\# LEFT, RIGHT, AND CENTER
-\# -----------------------
-\# The purpose of these macros is to allow the user to enter lines
-\# of text that will be quadded LRC having to stick .BR or .br
-\# between lines.  For the sake of consistency, all three appear to
-\# behave similarly (from the point of view of the user), although
-\# the underlying primitives don't.  For this reason, LEFT, RIGHT,
-\# and CENTER must be followed by .QUAD [L R C J] or .JUSTIFY to
-\# restore text to fill mode.
-\#
-\# LEFT
-\# ----
-\# *Argument:
-\#   <none>
-\# *Function:
-\#   Turns fill mode off.  Allows user to quad lines left without
-\#   requiring the .BR or .br macro.
-\# *Notes:
-\#   LEFT simply turns fill off.  Lines that exceed the current LL
-\#   will not be broken.  Note that this behaviour differs from the
-\#   RIGHT and CENTER macros.
-\#
-.MAC LEFT END
-.    if \\n[#TAB_ACTIVE]=0 \{\
-.       rr #QUAD
-.       ds $RESTORE_QUAD_VALUE LEFT
-.    \}
-.    ce 0
-.    nf
-.    nr #PSEUDO_FILL 1
-.\" Fix for a little conflict with DOCTYPE LETTER
-.    if '\\n[.z]'LETTERHEAD1' .rr #DATE_FIRST
-.END
-\#
-\# RIGHT
-\# -----
-\# *Argument:
-\#   <none>
-\# *Function:
-\#   Turns fill on.  Allows user to quad lines right without
-\#   requiring the .BR or .br macro.
-\# *Notes:
-\#   Lines that exceed the current LL will be broken, with the excess
-\#   text quadded right.
-\#
-.MAC RIGHT END
-.    if \\n[#TAB_ACTIVE]=0 \{\
-.       rr #QUAD
-.       ds $RESTORE_QUAD_VALUE RIGHT
-.    \}
-.    nf
-.    rj 100000
-.    nr #PSEUDO_FILL 1
-.END
-\#
-\# CENTER
-\# ------
-\# *Argument:
-\#   <none>
-\# *Function:
-\#   Turns fill on.  Allows user to center lines without
-\#   requiring the .BR or .br macro.
-\# *Notes:
-\#   Lines that exceed the current LL will be broken, with the excess
-\#   text centered.
-\#
-.MAC CENTER END
-.    if \\n[#TAB_ACTIVE]=0 \{\
-.       rr #QUAD
-.       ds $RESTORE_QUAD_VALUE CENTER
-.    \}
-.    nf
-.    ce 100000
-.    nr #PSEUDO_FILL 1
-.END
-\#
-\# =====================================================================
-\#
-\# +++TABS+++
-\#
-\# There are two different kinds of tabs: typesetting tabs and
-\# string tabs.
-\#
-\# Typesetting tabs are set with TAB_SET, which requires a tab number,
-\# an indent (offset) from the left margin and a length (optionally
-\# with a quad direction and an instruction to fill lines).  After tabs
-\# are set with TAB_SET, they are called with .TAB n, where "n"
-\# corresponds to the number passed to TAB_SET as a valid tab number.
-\#
-\# String tabs allow the user to mark off tab positions inline.  Tab
-\# indents and lengths are calculated from the beginning and end
-\# positions of the marks.  Up to 19 string tabs may be created,
-\# numbered 1-19.  Once created, they are called with .TAB n,
-\# just like typesetting tabs.
-\#
-\# Setting up string tabs is a two-step procedure.  First, the user
-\# enters an input line in which s/he wants to mark off string tabs.
-\# The beginning of a tab is marked with \*[STn], where "n" is
-\# the desired number of the tab.  The end of the the tab is marked
-\# with \*[STnX].  All ST's must have a matching STX.  String tabs
-\# may be nested.
-\#
-\# Next, the user invokes .ST n for every string tab defined, and
-\# optionally passes quad information to it.  That done, string tabs
-\# can be called just like typesetting tabs.
-\#
-\# Strings for string tab inlines
-\# ------------------------------
-\# Initialize string tab markers numbered 1 to 19.
-\#
-.nr #LOOP 0 1
-.while \n+[#LOOP]<20 \{\
-.   ds ST\n[#LOOP] \Ek[#ST\n[#LOOP]_OFFSET]
-.\}
-\#
-.nr #LOOP 0 1
-.while \n+[#LOOP]<20 \{\
-.   ds ST\n[#LOOP]X \Ek[#ST\n[#LOOP]_MARK]
-.\}
-.rr #LOOP
-\#
-\# These are reserved ST numbers for internal use
-.ds ST100  \Ek[#ST100_OFFSET]
-.ds ST100X \Ek[#ST100_MARK]
-.ds ST101  \Ek[#ST101_OFFSET]
-.ds ST101X \Ek[#ST101_MARK]
-.ds ST102  \Ek[#ST102_OFFSET]
-.ds ST102X \Ek[#ST102_MARK]
-.ds ST103  \Ek[#ST103_OFFSET]
-.ds ST103X \Ek[#ST103_MARK]
-\#
-\# QUAD AND SET STRING TABS
-\# ------------------------
-\# *Arguments:
-\#   <stringtab number>  L | R | C | J  [QUAD]
-\# *Function:
-\#   Creates strings $ST<#>_QUAD_DIR and $ST<#>_FILL, then sets up a
-\#   tab based on the collected information.
-\# *Notes:
-\#   Like TAB_SET, ST invoked without a quad direction will default to LEFT.
-\#   If lines should be filled and quadded, use the optional argument QUAD.
-\#   N.B. -- indents *must* be turned off before setting string tabs
-\#   inside .PAD
-\#
-.MAC ST END
-.    ds $ST\\$1_QUAD_DIR \\$2
-.    if \\n[#NUM_ARGS]=3 .ds $ST\\$1_FILL QUAD
-.    nr #ST\\$1_LENGTH \\n[#ST\\$1_MARK]-\\n[#ST\\$1_OFFSET]
-.    ie \\n[#IN_TAB] \
-.       TAB_SET \\$1 \\n[#ST\\$1_OFFSET]u+\\n[#ST_OFFSET]u \
-          \\n[#ST\\$1_LENGTH]u \\*[$ST\\$1_QUAD_DIR] \\*[$ST\\$1_FILL]
-.    el \
-.       TAB_SET \\$1 \\n[#ST\\$1_OFFSET]u \\n[#ST\\$1_LENGTH]u \
-          \\*[$ST\\$1_QUAD_DIR] \\*[$ST\\$1_FILL]
-.END
-\#
-\# TAB SET
-\# -------
-\# *Arguments:
-\#   <n>  ident(ipPcm)  length(ipPcm)  [L | R | C | J [QUAD]]
-\# *Function:
-\#   Creates macros TABn and TAB n, where "n" is any arbitrary number.
-\#   TABn is a typesetting tab (i.e. a tab defined as an indent
-\#   from the page left offset plus a line length.)
-\# *Notes:
-\#   n      = arbitrary digit to identify the tab
-\#   indent = indent from left margin; unit of measure required
-\#   length = length of tab (unit of measure required; can be
-\#            \w'<string>'u--if more than one word in string, surround
-\#            with double quotes "\w'<three word string>'"
-\#   LRCJ   = quad for tab (left, right, center, justified)
-\#            If option QUAD afterwards is not given, quad is line for line
-\#            (no fill mode), meaning that there's no need for .BR or .br
-\#            between lines.
-\#   QUAD   = fill tab (so it behaves as if .QUAD LRC or .JUSTIFY
-\#            had been given).
-\#
-\#   N.B. -- indents *must* be turned off before setting tabs
-\#
-\# Tabs are not columnar in behaviour.  .TN and \*[TB+] permit
-\# bottom-line to bottom-line tab movement.
-\#
-\# When resetting tabs, .TQ must be invoked before .TAB_SET.
-\#
-\# Indents are turned off automatically whenever a new tab is called
-\# with TAB <n>.
-\#
-\# Generally, it's a good idea to make sure all indents are off
-\# before setting tabs.
-\#
-.MAC TAB_SET END
-.    br
-.    nr #TAB_NUMBER \\$1
-.    ds $CURRENT_TAB \\n[#TAB_NUMBER]
-.    nr #TAB_OFFSET (\\$2)
-.    nr #TAB_LENGTH (\\$3)
-.    MAC TAB\\n[#TAB_NUMBER]
-.        if !\\\\n[#TB+]=1 .br
-.        if \\\\n[#TB+]=1 \{\
-.           EL
-.           vpt 0
-.           rr #TB+
-.        \}
-.        in 0
-.        nr #TAB_ACTIVE 1
-.        nr #CURRENT_TAB \\n[#TAB_NUMBER]
-.        ds $CURRENT_TAB \\*[$CURRENT_TAB]
-.        nr #TAB_OFFSET\\*[$CURRENT_TAB] \\n[#TAB_OFFSET]
-.        nr #ST_OFFSET \\n[#TAB_OFFSET]
-.        ie !'\\\\n[.z]'' \
-\!.         po \\\\n[#L_MARGIN]u+\\\\n[#TAB_OFFSET\\\\*[$CURRENT_TAB]]u
-.        el \
-.           po \\\\n[#L_MARGIN]u+\\\\n[#TAB_OFFSET\\\\*[$CURRENT_TAB]]u
-.        ll \\n[#TAB_LENGTH]u
-.        ta \En[.l]u
-.        ie '\\$5'QUAD' \{\
-.           if '\\$4'L' .QUAD L
-.           if '\\$4'R' .QUAD R
-.           if '\\$4'C' .QUAD C
-.           if '\\$4'J' .JUSTIFY
-.        \}
-.        el \{\
-.           if '\\$4''  .LEFT
-.           if '\\$4'L' .LEFT
-.           if '\\$4'R' .RIGHT
-.           if '\\$4'C' .CENTER
-.           if '\\$4'J' .JUSTIFY
-.        \}
-.        if \\\\n[#TN]=1 \{\
-.           TRAP
-.           rr #TN
-.        \}
-..
-.    rr #TAB_ACTIVE
-.END
-\#
-\# TAB
-\# ---
-\# *Arguments:
-\#   <tab number to tab into>
-\# *Function:
-\#   Moves to tab number passed as an argument.
-\#
-.MAC TAB END
-.    ds $TAB_NUMBER \\$1
-.    TAB\\*[$TAB_NUMBER]
-.    nr #IN_TAB 1
-.END
-\#
-\# TAB NEXT
-\# --------
-\# *Argument:
-\#   <none>
-\# *Function:
-\#   Automagically moves to TAB<n+1> on the same line as the last
-\#   line of the previous tab.
-\# *Notes:
-\#   The \c inline must be appended to the end of input lines when in
-\#   nofill mode; in fill modes, the \c inline must not be used.
-\#
-.MAC TN END
-.    nr #TN 1
-.    TRAP OFF
-.    sp -1v
-.    nr #NEXT_TAB \\n[#CURRENT_TAB]+1
-.    TAB\\n[#NEXT_TAB]
-.    TRAP
-.END
-\#
-\# An inline escape to accomplish the same thing.  Preferable, since
-\# it works with filled and non-filled copy and doesn't require the
-\# user to remember to use (or not use) the \c.
-\#
-.ds TB+ \
-"\c\R'#TB+ 1'\R'#TN 1'\R'#NEXT_TAB \\n[#CURRENT_TAB]+1'\\*[TAB\\n[#NEXT_TAB]]\c
-\#
-\# TAB QUIT
-\# --------
-\# *Argument:
-\#   <none>
-\# *Function:
-\#   Sets #TAB_ACTIVE to "0" (off).
-\#   Resets left margin to value in effect prior to tabs.
-\#   Resets line length to value in effect prior to tabs.
-\#   Checks #QUAD to see if we were in flush or quad mode
-\#   prior to tabs (0=off, 1=on).
-\#   Resets QUAD [ L|R|C ], LEFT, RIGHT, CENTER, or JUSTIFY
-\#   in effect prior to tabs.
-\# *Notes:
-\#   TQ must precede setting new tabs to get the tabs' indents
-\#   measured from page left.  Otherwise, the tabs' indents are
-\#   measured from the left margin of the currently active tab.
-\#
-.MAC TQ END
-.    br
-.    rr #TAB_ACTIVE
-.    rr #IN_TAB
-.    nr #LOOP 0 1
-.    while \\n+[#LOOP]<20 \{\
-.       rm $ST\\n[#LOOP]_FILL
-.    \}
-.    rr #LOOP
-.    po \\n[#L_MARGIN]u
-.    ll \\n[#L_LENGTH]u
-.    ta \\n[.l]u
-.    ie \\n[#QUAD] \{\
-.       ie '\\*[$RESTORE_QUAD_VALUE]'J' .JUSTIFY
-.       el .QUAD \\*[$RESTORE_QUAD_VALUE]
-.    \}
-.    el \{\
-.       if '\\*[$RESTORE_QUAD_VALUE]'LEFT' .LEFT
-.       if '\\*[$RESTORE_QUAD_VALUE]'RIGHT' .RIGHT
-.       if '\\*[$RESTORE_QUAD_VALUE]'CENTER' .CENTER
-.    \}
-.END
-\#
-\# ====================================================================
-\#
-\# COLOR HANDLING
-\# ==============
-\#
-\# COLOR
-\# -----
-\# *Arguments:
-\#   <pre-defined NEWCOLOR or XCOLOR>
-\# *Function:
-\#   Allows the inline escape for setting color to be called
-\#   as a macro.
-\#
-.MAC COLOR END
-.    ie \\n[.u]=1 \{\
-\c
-\\*[\\$1]\c
-.    \}
-.    el \\*[\\$1]
-.END
-\#
-\# NEWCOLOR
-\# --------
-\# *Arguments:
-\#   <color name> [<color scheme>] <color definition>
-\# *Function:
-\#   Based on .defcolor, allows users to name and define colors using
-\#   one of the four color schemes rgb, cmy, cmyk and grey.  The new
-\#   color is then defined as a string so that it can be called inline
-\#   with \*[COLORNAME] or with .COLOR.
-\# *Notes:
-\#   With only two args, the default color scheme is rgb.
-\#
-\#   It is highly recommended that users define new colors as
-\#   all-cap strings, to differentiate them from x colors, which must
-\#   be in lower case.
-\#
-.MAC NEWCOLOR END
-.    if \\n[#NUM_ARGS]=2 .defcolor \\$1 rgb \\$2
-.    if \\n[#NUM_ARGS]=3 \{\
-.       if '\\$2'RGB' .ds $COLOR_SCHEME rgb
-.       if '\\$2'CYM' .ds $COLOR_SCHEME cym
-.       if '\\$2'CMYK' .ds $COLOR_SCHEME cmyk
-.       if '\\$2'GRAY' .ds $COLOR_SCHEME gray
-.       if '\\$2'GREY' .ds $COLOR_SCHEME gray
-.       defcolor \\$1  \\*[$COLOR_SCHEME] \\$3
-.    \}
-.    ds \\$1 \\m[\\$1]
-.END
-\#
-\# XCOLOR
-\# ------
-\# *Arguments:
-\#   <x color name> [<alias>]
-\# *Function:
-\#   Defines a string of x color name (i.e. a predefined x
-\#   color).  If <alias> is given, creates a string of <alias name>
-\#   that references the x color name of the first argument.
-\# *Notes:
-\#   The color name must be a valid color name from rgb.txt, and
-\#   must be given entirely in lower case, all one word.
-\#
-.MAC XCOLOR END
-.    ds \\$1 \m[\\$1]
-.    if \\n[#NUM_ARGS]=2 \{\
-.       ds \\$2 \m[\\$1]
-.       ds $\\$2_FILL \\$1
-.       ds COLAL_\\$2 \\$1
-.    \}
-.END
-\#
-\# Pre-define xcolors black and white
-\#
-.ds black \m[black]
-.ds BLACK \m[black]
-.ds white \m[white]
-.ds WHITE \m[WHITE]
-\#
-\# =====================================================================
-\#
-\# +++MISCELLANEOUS USEFUL MACROS AND STRINGS+++
-\#
-\# UNDERLINE
-\# ---------
-\# *Arguments:
-\#   <none> | <anything>
-\# *Function:
-\#   Simulates typewriter-style underlining of italic passages.
-\# *Notes:
-\#   Defaults for rule weight and distance from baseline are below.
-\#   UNDERLINE_SPECS lets user change them
-\#
-.nr _w 500
-.nr _d 1250
-\#
-.MAC UNDERLINE_SPECS END
-.    ie \B'\\$1' .nr _w (u;\\$1)
-.    el \{\
-.       ie '\\$1'DEFAULT' .nr _w 500
-.       el \{\
-.          nr _w 500
-.          tm1 "[mom]: The first argument to \\$0 must be a numeric
-.          tm1 "       argument with a unit of measure appended, or DEFAULT.
-.          tm1 "       Setting underline weight to DEFAULT.
-.       \}
-.    \}
-.    shift
-.    ie \B'\\$1' .nr _d (u;\\$1)
-.    el \{\
-.       ie '\\$1'DEFAULT' .nr _d 1250
-.       el \{\
-.          nr _d 1250
-.          tm1 "[mom]: The second argument to \\$0 must be a numeric
-.          tm1 "       argument with a unit of measure appended, or DEFAULT.
-.          tm1 "       Setting underline distance from baseline to DEFAULT.
-.       \}
-.    \}
-.END
-\#
-.MAC UNDERLINE END
-\c
-.    ds $SAVED_SS_VAR \\*[$SS_VAR]
-.    ie '\\$1'' \{\
-.       nr #UNDERLINE_ON 1
-.       ss \\n[.ss] (\\n[.ss]-\\n[.ss])
-.       ie !n .nop \X'ps: exec \\n[_w] \\n[_d] decorline'\c
-.       el .ul 1000
-.    \}
-.    el \{\
-.       nr #UNDERLINE_ON 0
-.       SS \\*[$SAVED_SS_VAR]
-.       ie !n .nop \X'ps: exec decornone'\c
-.       el .ul 0
-.    \}
-.END
-\#
-\# UL/ULX
-\# ------
-\# *Arguments:
-\#   <none>
-\# *Function:
-\#   Simulates typewriter-style underlining of italic passages.
-\# *Notes:
-\#   Intended to be called with inline escapes \*[UL] (underline
-\#   on) and \*[ULX] (underline off).
-\#
-.MAC UL END
-\c
-.    ds $SAVED_SS_VAR \\*[$SS_VAR]
-.    ss \\n[.ss] (\\n[.ss]-\\n[.ss])
-.    ie !'\\n[.z]'' \{\
-\c
-.       ie !n \{\
-.          if !\\n[.k]=0 \?\h'-\w'\\n[.ss]'u'\?
-\?\R'#UNDERLINE_ON 1'\X'ps: exec \\n[_w] \\n[_d] decorline'\?\c
-.       \}
-.       el \{\
-\?\R'#UNDERLINE_ON 1'\?\c
-.          ul 1000
-.       \}
-.    \}
-.    el \{\
-.       ie !n \{\
-.          nr #UNDERLINE_ON 1
-.          nop \X'ps: exec \\n[_w] \\n[_d] decorline'\c
-.       \}
-.       el \{\
-\R'#UNDERLINE_ON 1'\c
-.          ul 1000
-.       \}
-.    \}
-.END
-\#
-.MAC ULX END
-\c
-.    SS \\*[$SAVED_SS_VAR]
-.    rm $SAVED_SS_VAR
-.    ie !'\\n[.z]'' \{\
-\c
-.       ie !n \{\
-\?\R'#UNDERLINE_ON 0'\X'ps: exec decornone'\?\c
-.       \}
-.       el \{\
-\?\R'#UNDERLINE_ON 0'\?\c
-.          ul 0
-.       \}
-.    \}
-.    el \{\
-.       ie !n \{\
-.          nr #UNDERLINE_ON 0
-.          nop \X'ps: exec decornone'\c
-.       \}
-.       el \{\
-.          nr #UNDERLINE_ON 0
-.          ul 0
-.       \}
-.    \}
-.END
-\#
-\# UNDERSCORE
-\# ----------
-\# *Arguments:
-\#   [<points below baseline>] "text"
-\# *Function:
-\#   Places an underscore 2 points under the string if no lead given,
-\#   otherwise places underscore under string by user specified amount.
-\# *Notes:
-\#   When using this macro, the string to be underscored must begin
-\#   with double-quotes ("), regardless of whether it's the sole
-\#   argument or the second.
-\#   E.g.:
-\#      .UNDERSCORE "Text to be underscored
-\#         or
-\#      .UNDERSCORE 2p "Text to be underscored
-\#
-\#   UNDERSCORE does not work across line breaks.  Each line of text
-\#   must be entered separately.  If the UNDERSCORE begins in the
-\#   middle of a line and crosses over a break, the portion before
-\#   the break and the portion afterwards must be entered
-\#   separately.
-\#
-.MAC UNDERSCORE END
-.    nr #SAVED_UNDERSCORE_WEIGHT     \\n[#UNDERSCORE_WEIGHT]
-.    nr #SAVED_UNDERSCORE_WEIGHT_ADJ \\n[#UNDERSCORE_WEIGHT_ADJ]
-.    ds $SAVED_UNDERSCORE_GAP        \\*[$UNDERSCORE_GAP]
-.    if \\n[#FROM_BIB_STRING]=1 \{\
-.       nr #UNDERSCORE_WEIGHT        \\n[#BIB_STRING_UNDERLINE_WEIGHT]
-.       nr #UNDERSCORE_WEIGHT_ADJ    \\n[#BIB_STRING_UNDERLINE_WEIGHT_ADJ]
-.       ds $UNDERSCORE_GAP           \\*[$BIB_STRING_UNDERLINE_GAP]
-.    \}
-.    if \\n[#FROM_COVER]=1 \{\
-.       nr #UNDERSCORE_WEIGHT        \\n[#COVER_UNDERLINE_WEIGHT]
-.       nr #UNDERSCORE_WEIGHT_ADJ    \\n[#COVER_UNDERLINE_WEIGHT_ADJ]
-.       ds $UNDERSCORE_GAP           \\*[$COVER_UNDERLINE_GAP]
-.    \}
-.    if \\n[#FROM_DOC_COVER]=1 \{\
-.       nr #UNDERSCORE_WEIGHT        \\n[#DOC_COVER_UNDERLINE_WEIGHT]
-.       nr #UNDERSCORE_WEIGHT_ADJ    \\n[#DOC_COVER_UNDERLINE_WEIGHT_ADJ]
-.       ds $UNDERSCORE_GAP           \\*[$DOC_COVER_UNDERLINE_GAP]
-.    \}
-.    if \\n[#FROM_DOCTYPE]=1 \{\
-.       nr #UNDERSCORE_WEIGHT        \\n[#DOCTYPE_UNDERLINE_WEIGHT]
-.       nr #UNDERSCORE_WEIGHT_ADJ    \\n[#DOCTYPE_UNDERLINE_WEIGHT_ADJ]
-.       ds $UNDERSCORE_GAP           \\*[$DOCTYPE_UNDERLINE_GAP]
-.    \}
-.    if \\n[#FROM_EN_STRING]=1 \{\
-.       nr #UNDERSCORE_WEIGHT        \\n[#EN_STRING_UNDERLINE_WEIGHT]
-.       nr #UNDERSCORE_WEIGHT_ADJ    \\n[#EN_STRING_UNDERLINE_WEIGHT_ADJ]
-.       ds $UNDERSCORE_GAP           \\*[$EN_STRING_UNDERLINE_GAP]
-.    \}
-.    if \\n[#FROM_EN_TITLE]=1 \{\
-.       nr #UNDERSCORE_WEIGHT        \\n[#EN_TITLE_UNDERLINE_WEIGHT]
-.       nr #UNDERSCORE_WEIGHT_ADJ    \\n[#EN_TITLE_UNDERLINE_WEIGHT_ADJ]
-.       ds $UNDERSCORE_GAP           \\*[$EN_TITLE_UNDERLINE_GAP]
-.    \}
-.    ie \\n[#NUM_ARGS]=1 \{\
-.       nr #TEXT_WIDTH \w'\\$1'
-\\$1\
-\D't \\n[#UNDERSCORE_WEIGHT]'\
-\h'-\\n[#TEXT_WIDTH]u-\\n[#UNDERSCORE_WEIGHT]u'\
-\v'+(\\*[$UNDERSCORE_GAP])+\\n[#UNDERSCORE_WEIGHT_ADJ]u'\
-\D'l \\n[#TEXT_WIDTH]u 0'\
-\D't \\n[#RULE_WEIGHT]'\
-\h'-\\n[#RULE_WEIGHT]u'\
-\v'-(\\*[$UNDERSCORE_GAP])-\\n[#UNDERSCORE_WEIGHT_ADJ]u'
-.    \}
-.    el \{\
-.       nr #TEXT_WIDTH \w'\\$2'
-\\$2\
-\h'-\\n[#TEXT_WIDTH]u-\\n[#UNDERSCORE_WEIGHT]u'\
-\v'+(\\$1)+\\n[#UNDERSCORE_WEIGHT_ADJ]u'\
-\D't \\n[#UNDERSCORE_WEIGHT]'\
-\D'l \\n[#TEXT_WIDTH]u 0'\
-\D't \\n[#RULE_WEIGHT]'\
-\h'-\\n[#RULE_WEIGHT]u'\
-\v'-(\\$1)-\\n[#UNDERSCORE_WEIGHT_ADJ]u'
-.    \}
-.    nr #UNDERSCORE_WEIGHT     \\n[#SAVED_UNDERSCORE_WEIGHT]
-.    nr #UNDERSCORE_WEIGHT_ADJ \\n[#SAVED_UNDERSCORE_WEIGHT_ADJ]
-.    ds $UNDERSCORE_GAP        \\*[$SAVED_UNDERSCORE_GAP]
-.    rr #SAVED_UNDERSCORE_WEIGHT
-.    rr #SAVED_UNDERSCORE_WEIGHT_ADJ
-.    rm $SAVED_UNDERSCORE_GAP
-.END
-\#
-\# DOUBLE UNDERSCORE
-\# -----------------
-\# *Arguments:
-\#   [points below baseline] [points distance between rules] "text"
-\# *Function:
-\#   Same as UNDERSCORE, except it produces a double underscore.  The default
-\#   distance between the rules is 2 points.
-\# *Notes:
-\#   The same double-quote requirement as UNDERSCORE.
-\#
-.MAC UNDERSCORE2 END
-.    nr #SAVED_UNDERSCORE_WEIGHT     \\n[#UNDERSCORE_WEIGHT]
-.    nr #SAVED_UNDERSCORE_WEIGHT_ADJ \\n[#UNDERSCORE_WEIGHT_ADJ]
-.    ds $SAVED_UNDERSCORE_GAP        \\*[$UNDERSCORE_GAP]
-.    ds $SAVED_RULE_GAP              \\*[$RULE_GAP]
-.    if \\n[#NUM_ARGS]=2 \{\
-.       ds $UNDERSCORE_GAP \\$1
-.    \}
-.    if \\n[#NUM_ARGS]=3 \{\
-.       ds $UNDERSCORE_GAP \\$1
-.       ds $RULE_GAP \\$2
-.    \}
-.    if \\n[#FROM_BIB_STRING] \{\
-.       nr #UNDERSCORE_WEIGHT        \\n[#BIB_STRING_UNDERLINE_WEIGHT]
-.       nr #UNDERSCORE_WEIGHT_ADJ    \\n[#BIB_STRING_UNDERLINE_WEIGHT_ADJ]
-.       ds $UNDERSCORE_GAP           \\*[$BIB_STRING_UNDERLINE_GAP]
-.       ds $RULE_GAP                 \\*[$BIB_STRING_RULE_GAP]
-.    \}
-.    if \\n[#FROM_EN_STRING] \{\
-.       nr #UNDERSCORE_WEIGHT        \\n[#EN_STRING_UNDERLINE_WEIGHT]
-.       nr #UNDERSCORE_WEIGHT_ADJ    \\n[#EN_STRING_UNDERLINE_WEIGHT_ADJ]
-.       ds $UNDERSCORE_GAP           \\*[$EN_STRING_UNDERLINE_GAP]
-.       ds $RULE_GAP                 \\*[$EN_STRING_RULE_GAP]
-.    \}
-.    if \\n[#NUM_ARGS]=1 \{\
-.       nr #TEXT_WIDTH \w'\\$1'
-\\$1\
-\D't \\n[#UNDERSCORE_WEIGHT]'\
-\v'+\\*[$UNDERSCORE_GAP]+\\n[#UNDERSCORE_WEIGHT_ADJ]u'\
-\h'-\\n[#TEXT_WIDTH]u-\\n[#UNDERSCORE_WEIGHT]u'\
-\D'l \\n[#TEXT_WIDTH]u 0'\
-\v'+\\*[$RULE_GAP]+\\n[#UNDERSCORE_WEIGHT]u'\
-\h'-\\n[#TEXT_WIDTH]u'\
-\D'l \\n[#TEXT_WIDTH]u 0'\
-\D't \\n[#RULE_WEIGHT]'\
-\h'-\\n[#RULE_WEIGHT]u'\
-\v'-(\\*[$UNDERSCORE_GAP]+\\*[$RULE_GAP])-(\\n[#UNDERSCORE_WEIGHT]u*2u)'
-.    \}
-.    if \\n[#NUM_ARGS]=2 \{\
-.       nr #TEXT_WIDTH \w'\\$2'
-\\$2\
-\D't \\n[#UNDERSCORE_WEIGHT]'\
-\v'+\\*[$UNDERSCORE_GAP]+\\n[#UNDERSCORE_WEIGHT_ADJ]u'\
-\h'-\\n[#TEXT_WIDTH]u-\\n[#UNDERSCORE_WEIGHT]u'\
-\D'l \\n[#TEXT_WIDTH]u 0'\
-\v'+(\\*[$RULE_GAP])+\\n[#UNDERSCORE_WEIGHT]u'\
-\h'-\\n[#TEXT_WIDTH]u'\
-\D'l \\n[#TEXT_WIDTH]u 0'\
-\D't \\n[#RULE_WEIGHT]'\
-\h'-\\n[#RULE_WEIGHT]u'\
-\v'-(\\*[$UNDERSCORE_GAP]+\\*[$RULE_GAP])+(\\n[#UNDERSCORE_WEIGHT]u*2u)'
-.    \}
-.    if \\n[#NUM_ARGS]=3 \{\
-.       nr #TEXT_WIDTH \w'\\$3'
-\\$3\
-\D't \\n[#UNDERSCORE_WEIGHT]'\
-\v'+\\*[$UNDERSCORE_GAP]+\\n[#UNDERSCORE_WEIGHT_ADJ]u'\
-\h'-\\n[#TEXT_WIDTH]u-\\n[#UNDERSCORE_WEIGHT]u'\
-\D'l \\n[#TEXT_WIDTH]u 0'\
-\v'+\\*[$RULE_GAP]+\\n[#UNDERSCORE_WEIGHT]u'\
-\h'-\\n[#TEXT_WIDTH]u'\
-\D'l \\n[#TEXT_WIDTH]u 0'\
-\D't \\n[#RULE_WEIGHT]'\
-\h'-\\n[#RULE_WEIGHT]u'\
-\v'-(\\*[$UNDERSCORE_GAP]+\\*[$RULE_GAP])-(\\n[#UNDERSCORE_WEIGHT]u*2u)'
-.    \}
-.    nr #UNDERSCORE_WEIGHT     \\n[#SAVED_UNDERSCORE_WEIGHT]
-.    nr #UNDERSCORE_WEIGHT_ADJ \\n[#SAVED_UNDERSCORE_WEIGHT_ADJ]
-.    ds $UNDERSCORE_GAP        \\*[$SAVED_UNDERSCORE_GAP]
-.    rr #SAVED_UNDERSCORE_WEIGHT
-.    rr #SAVED_UNDERSCORE_WEIGHT_ADJ
-.    rm $SAVED_UNDERSCORE_GAP
-.    rm $SAVED_RULE_GAP
-.END
-\#
-\# Default underscoring rule gaps
-\#
-.ds $BIB_STRING_UNDERLINE_GAP 2p
-.ds $BIB_STRING_RULE_GAP      2p
-.ds $COVER_UNDERLINE_GAP      2p
-.ds $DOC_COVER_UNDERLINE_GAP  2p
-.ds $DOCTYPE_UNDERLINE_GAP    2p
-.ds $EN_STRING_UNDERLINE_GAP  2p
-.ds $EN_STRING_RULE_GAP       2p
-.ds $EN_TITLE_UNDERLINE_GAP   2p
-.ds $RULE_GAP                 2p
-.ds $UNDERSCORE_GAP           2p
-\#
-\# SUPERSCRIPT
-\# -----------
-\# *Function:
-\#   Prints everything after inline invocation as superscript.
-\# *Notes:
-\#   \*[SUP] and \*[SUPX] turn superscript on and off respectively.
-\#   If running type is pseudo-condensed/expanded, invoke the superscript
-\#   strings as \*[CONDSUP] or \*[EXTSUP] and turn off with \*[CONDSUPX]
-\#   and \*[EXTSUPX] respectively.
-\#
-\# Default raise/lower amount
-.ds $SUP_RAISE \v'-.3m'
-.ds $SUP_LOWER \v'.3m'
-\#
-\# SUPERSCRIPT RAISE
-\# -----------------
-\# *Argument:
-\#   <amount to raise superscript>
-\# *Function:
-\#   Defines strings $SUP_RAISE and $SUP_LOWER for use with \*[SUP],
-\#   \*[CONDSUP] and \*[EXTSUP].
-\#
-.MAC SUPERSCRIPT_RAISE_AMOUNT END
-.    ds $SUP_RAISE_AMOUNT \\$1
-.    ds $SUP_RAISE \v'-\\*[$SUP_RAISE_AMOUNT]'
-.    ds $SUP_LOWER \v'\\*[$SUP_RAISE_AMOUNT]'
-.END
-\#
-.ds SUP \
-\R'#PT_SIZE_IN_UNITS \En[.ps]'\
-\R'#SUP_PT_SIZE \En[#PT_SIZE_IN_UNITS]u*6u/10u'\
-\s[\En[#PT_SIZE_IN_UNITS]u]\E*[$SUP_RAISE]\s[\En[#SUP_PT_SIZE]u]
-\#
-.ds SUPX \s[\En[#PT_SIZE_IN_UNITS]u]\E*[$SUP_LOWER]
-\#
-.ds CONDSUP \
-\R'#PT_SIZE_IN_UNITS \En[.ps]'\
-\R'#SUP_PT_SIZE \En[#PT_SIZE_IN_UNITS]u*6u/10u'\
-\s[\En[#PT_SIZE_IN_UNITS]u]\E*[$SUP_RAISE]\s[\En[#SUP_PT_SIZE]u]\E*[COND_FOR_SUP]
-\#
-.ds CONDSUPX \s[\En[#PT_SIZE_IN_UNITS]u]\E*[$SUP_LOWER]\E*[COND]
-\#
-.ds EXTSUP \
-\R'#PT_SIZE_IN_UNITS \En[.ps]'\
-\R'#SUP_PT_SIZE \En[#PT_SIZE_IN_UNITS]u*6u/10u'\
-\s[\En[#PT_SIZE_IN_UNITS]u]\E*[$SUP_RAISE]\s[\En[#SUP_PT_SIZE]u]\E*[EXT_FOR_SUP]
-\#
-.ds EXTSUPX \s[\En[#PT_SIZE_IN_UNITS]u]\E*[$SUP_LOWER]\E*[EXT]
-\#
-\# SLANT
-\# -----
-\#
-\# SETSLANT
-\# --------
-\# *Arguments:
-\#   <number of degrees> | RESET
-\# *Function:
-\#   Modifies register #DEGREES for use with \*[SLANT], or resets
-\#   it to the default.  Defines string \*[SLANTX]
-\# *Notes:
-\#   \*[SLANT] permits pseudo-italicizing of a font in cases where
-\#   no italic font exists in a particular family.
-\#
-\#   Default # of degrees is 15.
-\#
-\#   Do not use unit of measure with arg to SETSLANT.
-\#
-\#   It may be necessary to adjust the spacing on either side of
-\#   [SLANT] and [SLANTX].
-\#
-\#   In docs, SLANT carries over from para to para.
-\#
-.nr #DEGREES 15
-.ds SLANT \ER'#SLANT_ON 1'\ES'\En[#DEGREES]'
-.ds SLANTX \ER'#SLANT_ON 0'\ES'0'
-\#
-.MAC SETSLANT END
-.    ie '\\$1'RESET' \{\
-.       nr #DEGREES 15
-.       if \\n[#PRINT_STYLE]=1 \
-.          if \\n[#UNDERLINE_SLANT] .return
-.       ds SLANT \ER'#SLANT_ON 1'\ES'\En[#DEGREES]'
-.    \}
-.    el \{\
-.       nr #DEGREES \\$1
-.       if \\n[#PRINT_STYLE]=1 \
-.          if \\n[#UNDERLINE_SLANT] .return
-.       ds SLANT \ER'#SLANT_ON 1'\ES'\En[#DEGREES]'
-.    \}
-.    ds SLANTX \ER'#SLANT_ON 0'\ES'0'
-.END
-\#
-\# BOLDER
-\# ------
-\#
-\# SETBOLDER
-\# ---------
-\# *Arguments:
-\#   <amount of emboldening> | RESET
-\# *Function:
-\#   Modifies register #BOLDER_UNITS for use with \*[BOLDER], or resets
-\#   it to the default 700 units.
-\# *Notes:
-\#   \*[BOLDER] allows pseudo-emboldening of a font where no bold
-\#   font exists in a particular family.
-\#
-\#   Default for SETBOLDER is 700 units.  Do not use unit of measure
-\#   with arg to SETBOLDER.
-\#
-.nr #BOLDER_UNITS 700
-\#
-.MAC SETBOLDER END
-.    if \\n[#IGNORE]=1 .return
-.    ie '\\$1'RESET' .nr #BOLDER_UNITS 700
-.    el              .nr #BOLDER_UNITS \\$1
-.END
-\#
-.MAC BOLDER END
-\c
-.bd \\n[.f] \\n[#BOLDER_UNITS]
-.END
-\#
-.MAC BOLDERX END
-\c
-.bd \\n[.f]
-.END
-\#
-\# +++CONDENSE/EXTEND+++
-\#
-\# CONDENSE/EXTEND
-\# ---------------
-\# *Arguments:
-\#   <percentage to condense/expand type size>
-\# *Function:
-\#   Stores current point size in z's in #PT_SIZE_IN_UNITS, figures out
-\#   new point size (for character width) from arg, and defines string
-\#   COND or EXT, which set the type size to the new character width,
-\#   and sets the height of type to the value stored in CURRENT_PT_SIZE
-\# *Notes:
-\#   CONDENSE_OR_EXTEND is invoked from the aliases
-\#   CONDENSE and EXTEND.  CONDENSE implies <100, EXTEND
-\#   implies >100.  Do not use a percent sign in the argument.
-\#
-\#   There is no default setting for CONDENSE or EXTEND.
-\#   80 is a good approximation of condensed type, 120 is okay
-\#   for extended.
-\#
-\#   The value set by CONDENSE or EXTEND applies to all
-\#   subsequent \*[COND] or \*[EXT] escapes until a new value is set.
-\#
-\#  \*[COND] or \*[EXT] must be turned off before all changes of point
-\#  size, and reinvoked afterwards (if so desired).  This refers to
-\#  changes of point size via control lines AND via inlines.
-\#
-.MAC CONDENSE_OR_EXTEND END
-.    if '\\$0'CONDENSE' \{\
-.       ds $COND_PERCENT \\$1
-.       if \\n[#PRINT_STYLE]=1 \{\
-.          rm $COND_PERCENT
-.          ds $COND_PERCENT 100
-.       \}
-.       ds COND \
-\R'#PT_SIZE_IN_UNITS \En[.ps]'\
-\R'#CONDENSE 1'\
-\R'#COND_WIDTH (\En[#PT_SIZE_IN_UNITS]u*\E*[$COND_PERCENT]u)/100'\
-\Es[\En[#COND_WIDTH]u]\EH'\En[#PT_SIZE_IN_UNITS]u'
-.       ds COND_FOR_SUP \
-\R'#COND_WIDTH (\En[#SUP_PT_SIZE]u*\E*[$COND_PERCENT]u)/100'\
-\Es[\En[#COND_WIDTH]u]\H'\En[#SUP_PT_SIZE]u'
-.    \}
-.    if '\\$0'EXTEND' \{\
-.       ds $EXT_PERCENT \\$1
-.       if \\n[#PRINT_STYLE]=1 \{\
-.          rm $EXT_PERCENT
-.          ds $EXT_PERCENT 100
-.       \}
-.       ds EXT \
-\R'#PT_SIZE_IN_UNITS \En[.ps]'\
-\R'#EXTEND 1'\
-\R'#EXT_WIDTH (\En[#PT_SIZE_IN_UNITS]u*\E*[$EXT_PERCENT]u)/100'\
-\Es[\En[#EXT_WIDTH]u]\EH'\En[#PT_SIZE_IN_UNITS]u'
-.       ds EXT_FOR_SUP \
-\R'#EXT_WIDTH (\En[#SUP_PT_SIZE]u*\E*[$EXT_PERCENT]u)/100'\
-\Es[\En[#EXT_WIDTH]u]\H'\En[#EXT_PT_SIZE]u'
-.    \}
-.END
-\#
-.ds CONDX \
-\ER'#CONDENSE 0'\Es[0]\R'#PT_SIZE_IN_UNITS \En[.ps]'\H'\En[#PT_SIZE_IN_UNITS]u'
-.ds EXTX  \
-\ER'#EXTEND   0'\Es[0]\R'#PT_SIZE_IN_UNITS \En[.ps]'\H'\En[#PT_SIZE_IN_UNITS]u'
-\#
-\# +++PAD LINES+++ (insert space)
-\#
-\# PAD MARKER
-\# ----------
-\# *Arguments:
-\#   <character to use for marking pad points>
-\# *Function:
-\#   Defines string $PAD_MARKER, used in PAD
-\# *Notes:
-\#   $PAD_MARKER is normally # (the pound sign).
-\#
-.MAC PAD_MARKER END
-.    ds $PAD_MARKER \\$1
-.END
-\#
-\# PAD
-\# ---
-\# *Argments:
-\#   "<string of text with padding markers inserted>"
-\#   "<id of bookmark created by .PDF_BOOKMARK>"
-\# *Function:
-\#   Defines and redefines padding character (default=pound sign
-\#   unless padding character has been set with PAD_MARKER)
-\#   several times so that when the string is output at the end
-\#   of the macro, every # has been converted to an equal-sized
-\#   amount of padding (blank space) on a line.
-\# *Notes:
-\#   String tabs may be marked off during PAD.
-\#
-.MAC PAD END
-.    if \\n[.u]=1 .nr fill 1
-.    nf
-.    if !d$PAD_MARKER .ds $PAD_MARKER #
-.    char \\*[$PAD_MARKER] \R'#PAD_COUNT \En[#PAD_COUNT]+1'
-.    ds $FAMILY_FOR_PAD \\n[.fam]
-.\" .if !n .fp \\n[.fp] \\n[.sty]
-.    ds $FONT_FOR_PAD   \\n[.sty]
-.    nr #SIZE_FOR_PAD   \\n[.ps]
-.    ds $PAD_STRING \\$1
-.    as $PAD_STRING \Ekp
-.    di PAD_STRING
-.    fam \\*[$FAMILY_FOR_PAD]
-\\f[\\*[$FONT_FOR_PAD]]\\s[\\n[#SIZE_FOR_PAD]u]\\*[$PAD_STRING]
-.    br
-.    di
-.    char \\*[$PAD_MARKER] \
-\R'#SPACE_TO_END \En[.l]-\En[p]'\R'#PAD_SPACE \En[#SPACE_TO_END]/\En[#PAD_COUNT]'
-.    di PAD_STRING
-.    fam \\*[$FAMILY_FOR_PAD]
-\\f[\\*[$FONT_FOR_PAD]]\\s[\\n[#SIZE_FOR_PAD]u]\\*[$PAD_STRING]
-.    br
-.    di
-.    char \\*[$PAD_MARKER] \h'\En[#PAD_SPACE]u'
-.    if \\n[#SILENT] .SILENT
-.    fam \\*[$FAMILY_FOR_PAD]
-\\f[\\*[$FONT_FOR_PAD]]\\s[\\n[#SIZE_FOR_PAD]u]
-.    ie '\\$2'' .nop \\*[$PAD_STRING]
-.    el \{\
-.       ie !'\\$2'NOBREAK' .pdfhref L -D "\\$2" -E -- \&\\*[$PAD_STRING]
-.       el .nop \\*[$PAD_STRING]
-.    \}
-.    if \\n[#SILENT] .SILENT OFF
-.    br
-.    if \\n[fill] \{\
-.       fi
-.       rr fill
-.    \}
-.    rr #PAD_COUNT
-.    rr #SPACE_TO_END
-.    rr #PAD_SPACE
-.    rm $PAD_STRING
-.    rm PAD_STRING
-.    rchar #
-.    if '\\$2'NOBREAK' \{\
-.       TRAP OFF
-.       EOL
-.       TRAP
-.    \}
-.END
-\#
-\# +++LEADERS+++
-\#
-\# The leader mechanism is primitive, but it works.  Basically, every
-\# macro in this set that includes a line length also sets a single
-\# groff tab stop at the right hand end of the line.  That way,
-\# whenever Ctrl-A is invoked (always at the end of an input line),
-\# leader of the correct length gets deposited.  Ctrl-A is accessed by
-\# the string LEADER (i.e. inline, as \*[LEADER]).  Leaders within tabs
-\# get their length from the tab line length.
-\#
-\# SET LEADER CHARACTER
-\# --------------------
-\# *Arguments:
-\#   <character to use whenever \*[LEADER] is invoked>
-\# *Function:
-\#   Set leader character.
-\#
-.MAC LEADER_CHARACTER END
-.    lc \\$1
-.END
-\#
-.ds LEADER 
-\#
-\# +++DROP CAPS+++
-\#
-\# DROP CAP FAMILY
-\# ---------------
-\# *Argument:
-\#   <family of drop cap>
-\# *Function:
-\#   Creates or modifies string $DC_FAM.
-\#
-.MAC DROPCAP_FAMILY END
-.    ds $DC_FAM \\$1
-.END
-\#
-\# DROP CAP FONT
-\# -------------
-\# *Argument:
-\#   <font of drop cap>
-\# *Function:
-\#   Creates or modifies string $DC_FT.
-\#
-.MAC DROPCAP_FONT END
-.    ds $DC_FT \\$1
-.END
-\#
-\# DROPCAP COLOR
-\# -------------
-\# *Arguments:
-\#   <pre-defined XCOLOR or NEWCOLOR>
-\# *Function:
-\#   Defines string $DC_COLOR to argument.
-\# *Notes:
-\#   User must define an XCOLOR or NEWCOLOR before using
-\#   DC_COLOR.
-\#
-.MAC DROPCAP_COLOR END
-.    if \\n[#PRINT_STYLE]=1 .return
-.    nr #DC_COLOR 1
-.    ds $DC_COLOR \\$1
-.END
-\#
-\# DROP CAP GUTTER
-\# ---------------
-\# *Argument:
-\#   <width of gutter between drop cap and indented text>
-\# *Function:
-\#   Creates or modifies register #DC_GUT.
-\# *Notes:
-\#   Requires unit of measure.  Default is 3p.
-\#
-.MAC DROPCAP_GUTTER END
-.    nr #DC_GUT (\\$1)
-.END
-\#
-\# DROP CAP ADJUST
-\# ---------------
-\# *Argument:
-\#   <+|- # of points to in/decrease point size of drop cap letter>
-\# *Function:
-\#   Creates or modifies string $DC_ADJUST.
-\# *Notes:
-\#   Despite its best efforts, DROPCAP doesn't always get the point
-\#   size of the drop cap critically perfect.  DROPCAP_ADJUST lets
-\#   the user add or subtract points (or fractions of points) to
-\#   get the size right.
-\#
-\#   Requires the + or - sign.
-\#
-.MAC DROPCAP_ADJUST END
-.    ds $DC_ADJUST \\$1
-.END
-\#
-\# DROP CAP
-\# --------
-\# *Arguments:
-\#   <dropcap letter> <# of lines> [COND <% to condense> | EXT <% to extend>]
-\# *Function:
-\#   Calculates point size of dropcap based on # of lines passed as
-\#   arg 2.  Sets indent for text based on dropcap width+gutter.
-\#   Advances and prints dropcap; reverses and prints indented text
-\#   to bottom of dropcap, then resets indent to left margin (plus
-\#   any indent that was in effect prior to invoking DROPCAP).
-\# *Notes:
-\#   Drop caps when using the doc processing macro PP only work with
-\#   initial paragraphs (i.e. at doc start, or after heads), only when
-\#   DROPCAPS comes immediately after PP, and only when the PRINTSTYLE
-\#   is TYPESET.  If these conditions aren't met, DROPCAPS is silently
-\#   ignored.
-\#
-\#   The COND or EXT argument are processed separately from all
-\#   other COND or EXT inlines or macros, hence passing COND or
-\#   EXT has no effect on running type.
-\#
-.MAC DROPCAP END
-.    if \\n[#IGNORE]=1 \{\
-.       PRINT \\$1\c
-.       return
-.    \}
-.    br
-.    if n \{\
-.       PRINT \\$1\c
-.       return
-.    \}
-.    if \\n[#DOCS] \{\
-.       if \\n[#PRINT_STYLE]=1 \{\
-.          PRINT \\$1\c
-.          return
-.       \}
-.       if \\n[#PRINT_STYLE]=2 \{\
-.          if \\n[#PP_STYLE]=2 \{\
-.             PRINT \\$1\c
-.             return
-.          \}
-.          if \\n[#PP]>1 \{\
-.             PRINT \\$1\c
-.             return
-.          \}
-.          ti 0
-.       \}
-.    \}
-.    ds $DROPCAP         \\$1
-.    nr #DC_LINES        \\$2-1
-.    if \\n[#CONDENSE]=1 \{\
-.       ds $RESTORE_COND \\*[$COND_PERCENT]
-\\*[CONDX]
-.       nr #CONDENSE_WAS_ON 1
-.    \}
-.    if \\n[#EXTEND]=1 \{\
-.       ds $RESTORE_EXT \\*[$EXT_PERCENT]
-\\*[EXTX]
-.       nr #EXTEND_WAS_ON 1
-.    \}
-.    if '\\$3'COND' .CONDENSE \\$4
-.    if '\\$3'EXT' .EXTEND \\$4
-.    if !r#DC_GUT .nr #DC_GUT (3p)
-.    ie \\n[#DOCS] .ds $RESTORE_FAM \\*[$DOC_FAM]
-.    el .ds $RESTORE_FAM \\n[.fam]
-.    ie \\n[#DOCS] .ds $RESTORE_FT  \\*[$PP_FT]
-.    el .ds $RESTORE_FT  \\*[$FONT]
-.    nr #RESTORE_PT_SIZE \\n[#PT_SIZE]
-.    nr #RESTORE_INDENT  \\n[.i]
-.    SIZESPECS
-.    nr #DC_HEIGHT \\n[#DC_LINES]*\\n[#LEAD]+\\n[#CAP_HEIGHT]
-.    ie !d$DC_FAM .FAM \\n[.fam]
-.    el .FAM \\*[$DC_FAM]
-.    ie !d$DC_FT .FT \\*[$FONT]
-.    el .FT \\*[$DC_FT]
-.    while \\n[#GET_DC_HEIGHT]<\\n[#DC_HEIGHT] \{\
-.       ps \\n[#PT_SIZE]u+100u
-.       SIZESPECS
-.       nr #GET_DC_HEIGHT \\n[#CAP_HEIGHT]
-.    \}
-.    if d$DC_ADJUST .ps \\*[$DC_ADJUST]p
-.    nr #DC_LINES +1
-.    if \\n[#DC_LINES]v>\\n[.t] \{\
-.       nr pgnum \\n%+\\n[#PAGE_NUM_ADJ] 1
-.       tm1 "[mom]: Dropcap at line \\n[.c] does not fit on page \\n[pgnum].
-.       tm1 "       Shifting paragraph to page \\n+[pgnum].
-.       bp
-.    \}
-.    ie \\n[#DC_COLOR]=1 \{\
-.       ie !'\\$3'' \{\
-.          ie '\\$3'COND' \
-.             PRINT \
-\\*[DOWN \\n[#DC_LINES]v]\
-\m[\\*[$DC_COLOR]]\\*[COND]\\*[$DROPCAP]\\*[CONDX]\m[]\\*[UP \\n[#DC_LINES]v]
-.          el \
-.             PRINT \
-\\*[DOWN \\n[#DC_LINES]v]\
-\m[\\*[$DC_COLOR]]\\*[EXT]\\*[$DROPCAP]\\*[EXTX]\m[]\\*[UP \\n[#DC_LINES]v]
-.       \}
-.       el .PRINT \
-\\*[DOWN \\n[#DC_LINES]v]\
-\m[\\*[$DC_COLOR]]\\*[$DROPCAP]\m[]\\*[UP \\n[#DC_LINES]v]
-.    \}
-.    el \{\
-.       ie !'\\$3'' \{\
-.          ie '\\$3'COND' \
-.             PRINT \
-\\*[DOWN \\n[#DC_LINES]v]\
-\\*[COND]\\*[$DROPCAP]\\*[CONDX]\\*[UP \\n[#DC_LINES]v]
-.          el \
-.             PRINT \
-\\*[DOWN \\n[#DC_LINES]v]\
-\\*[EXT]\\*[$DROPCAP]\\*[EXTX]\\*[UP \\n[#DC_LINES]v]
-.       \}
-.       el .PRINT \
-\\*[DOWN \\n[#DC_LINES]v]\
-\m[\\*[$DC_COLOR]]\\*[$DROPCAP]\m[]\\*[UP \\n[#DC_LINES]v]
-.    \}
-.    if '\\$3'COND' \E*[COND]
-.    if '\\$3'EXT' \E*[EXT]
-.    ie \\n[.i] \{\
-.       vs 0
-.       br
-.       in +\w'\\*[$DROPCAP]'u+\\n[#DC_GUT]u
-.       vs
-.    \}
-.    el \{\
-.       vs 0
-.       br
-.       in \w'\\*[$DROPCAP]'u+\\n[#DC_GUT]u
-.       vs
-.    \}
-.    if '\\$3'COND' \E*[CONDX]\c
-.    if '\\$3'EXT' \E*[EXTX]\c
-.    FAM \\*[$RESTORE_FAM]
-.    FT  \\*[$RESTORE_FT]
-.    ps \\n[#RESTORE_PT_SIZE]u
-.    if \\n[#CONDENSE_WAS_ON] \{\
-.       CONDENSE \\*[$RESTORE_COND]
-\\*[COND]\c
-.    \}
-.    if \\n[#EXTEND_WAS_ON] \{\
-.       EXTEND \\*[$RESTORE_EXT]
-\\*[EXT]\c
-.    \}
-.    ie \\n[.u] .wh \\n[.d]u+\\n[#DC_HEIGHT]u-1v DROPCAP_OFF
-.    el .wh \\n[.d]u+\\n[#DC_HEIGHT]u DROPCAP_OFF
-.    rr #CONDENSE_WAS_ON
-.    rr #EXTEND_WAS_ON
-.    rm $DROPCAP
-.    rr #DC_LINES
-.    rm $RESTORE_COND
-.    rm $RESTORE_EXT
-.    rm $RESTORE_FAM
-.    rm $RESTORE_FT
-.    rr #RESTORE_PT_SIZE
-.    rr #RESTORE_INDENT
-.    rr #DC_HEIGHT
-.    rr #GET_DC_HEIGHT
-.    rr x
-.END
-\#
-.MAC DROPCAP_OFF END
-'    in \\n[#RESTORE_INDENT]u
-.    ch DROPCAP_OFF
-.END
-\#
-\# =====================================================================
-\#
-\# +++GRAPHICAL OBJECTS+++
-\#
-\# HORIZONTAL RULE - DRH
-\# ---------------------
-\# *Arguments:
-\#   <none> | <rule weight> <indent> <length> [ <color> ]
-\# *Function:
-\#   With no arg, draws a full measure rule.  With args, draws
-\#   described horizontal rule.
-\# *Notes:
-\#   Rules are drawn left-to-right, from the baseline down, and
-\#   return to their point of origin.  Color must be set in the
-\#   macro; otherwise the color will be black, regardless of current
-\#   .gcolor.  If no arg given, the rule weight is the one set by
-\#   RULE_WEIGHT.
-\#
-.MAC DRH END
-.    if \\n[.vpt]=1 \{\
-.       vpt 0
-.       nr #RESTORE_TRAP 1
-.    \}
-.    ie !\\n[#NO_ADVANCE]=1 .br
-.    el \{\
-.       sp -1v
-.       rr #NO_ADVANCE
-.    \}
-.    ie \\n[.u]=1 \{\
-.       nr #FILLED 1
-.       nr #FILL_MODE \\n[.j]
-.    \}
-.    el \{\
-.       nr #NOFILL 1
-.       if \\n[.ce]>0 .nr #NOFILL_MODE 3
-.       if \\n[.rj]>0 .nr #NOFILL_MODE 5
-.       ce 0
-.       rj 0
-.    \}
-.    nf
-.    ds $RL_WEIGHT \\$1
-.    ds $RL_INDENT \\$2
-.    ds $RL_LENGTH \\$3
-.    ie !'\\$4'' .ds $RL_COLOR  \\$4
-.    el          .ds $RL_COLOR default
-.    nr #SAVED_WEIGHT     \\n[#RULE_WEIGHT]
-.    nr #SAVED_WEIGHT_ADJ \\n[#RULE_WEIGHT_ADJ]
-.    di NULL
-.       if \\n[#NUM_ARGS]>=1 .RULE_WEIGHT \\*[$RL_WEIGHT]
-.    di
-.    gcolor \\*[$RL_COLOR]
-.    ie \\n[#NUM_ARGS]=0 \{\
-.       ie \\n[#INDENT_ACTIVE] \{\
-.          nr #RESTORE_L_LENGTH \\n[.l]
-.          if \\n[#INDENT_BOTH_ACTIVE] .ll \\n[.l]u-\\n[#BL_INDENT]u
-.          if \\n[#INDENT_LEFT_ACTIVE] .ll \\n[.l]u-\\n[#L_INDENT]u
-\D't \\n[#RULE_WEIGHT]'\
-\h'\\*[$RL_INDENT]-\\n[#RULE_WEIGHT]u'\
-\v'\\n[#RULE_WEIGHT_ADJ]u'\
-\D'l \En[.l]u 0'\v'-\\n[#RULE_WEIGHT_ADJ]u'\
-\v'-\\n[#RULE_WEIGHT_ADJ]u'\
-\D't \\n[#SAVED_RULE_WEIGHT]'
-.          ll \\n[#RESTORE_L_LENGTH]u
-.          rr #RESTORE_L_LENGTH
-.       \}
-.       el \{\
-\D't \\n[#RULE_WEIGHT]'\
-\h'\\*[$RL_INDENT]-\\n[#RULE_WEIGHT]u'\
-\v'\\n[#RULE_WEIGHT_ADJ]u'\
-\D'l \En[.l]u 0'\v'-\\n[#RULE_WEIGHT_ADJ]u'\
-\v'-\\n[#RULE_WEIGHT_ADJ]u'\
-\D't \\n[#SAVED_RULE_WEIGHT]'
-.       \}
-.    \}
-.    el \{\
-\D't \\n[#RULE_WEIGHT]'\
-\h'\\*[$RL_INDENT]-\\n[#RULE_WEIGHT]u'\
-\v'\\n[#RULE_WEIGHT_ADJ]u'\
-\D'l \\*[$RL_LENGTH] 0'\
-\v'-\\n[#RULE_WEIGHT_ADJ]u'\
-\D't \\n[#SAVED_RULE_WEIGHT]'
-.    \}
-.    if \\n[#FILLED]=1 \{\
-.       if \\n[#FILL_MODE]=0 .QUAD LEFT
-.       if \\n[#FILL_MODE]=1 .JUSTIFY
-.       if \\n[#FILL_MODE]=3 .QUAD CENTER
-.       if \\n[#FILL_MODE]=5 .QUAD RIGHT
-.       rr #FILLED
-.    \}
-.    sp -1v
-.    if \\n[#NOFILL]=1 \{\
-.       if \\n[#NOFILL_MODE]=3 .CENTER
-.       if \\n[#NOFILL_MODE]=5 .RIGHT
-.    \}
-.    gcolor
-.    nr #RULE_WEIGHT     \\n[#SAVED_WEIGHT]
-.    nr #RULE_WEIGHT_ADJ \\n[#SAVED_WEIGHT_ADJ]
-.    rr #SAVED_WEIGHT
-.    rr #SAVED_WEIGHT_ADJ
-.    if \\n[#RESTORE_TRAP]=1 \{\
-.       vpt 1
-.       rr #RESTORE_TRAP
-.    \}
-.    if '\\n[.z]'FLOAT*DIV' \
-.       if !(\\n[.d]+\\n[#WEIGHT])<\\n[D-float] .nr D-float \\n[.d]+\\n[#WEIGHT]
-.END
-\#
-\# RULE
-\# ----
-\# *Argument:
-\#   <none>
-\# *Function:
-\#   Draws a rule the length of the current measure.
-\# *Notes:
-\#   A convenience macro.  DRH with no argument does the same thing.
-\#   Kept in for backward compatibility.
-\#
-.MAC RULE END
-.    if \\n[.u]=1 \{\
-.       nr fill 1
-.       ds $CURRENT_QUAD \\*[$QUAD_VALUE]
-.       nf
-.    \}
-.    ie \\n[#INDENT_ACTIVE] \{\
-.       if \\n[#INDENT_BOTH_ACTIVE] .ll \\n[.l]u-\\n[#BL_INDENT]u
-.       if \\n[#INDENT_LEFT_ACTIVE] .ll \\n[.l]u-\\n[#L_INDENT]u
-.       PRINT \
-\D't \\n[#RULE_WEIGHT]'\v'\\n[#RULE_WEIGHT_ADJ]u'\
-\h'-\\n[#RULE_WEIGHT]u'\
-\D'l \En[.l]u 0'\v'-\\n[#RULE_WEIGHT_ADJ]u'\h'|0'\c
-.       ll
-.       rr #RESTORE_L_LENGTH
-.    \}
-.    el \{\
-.       PRINT \
-\D't \\n[#RULE_WEIGHT]'\v'\\n[#RULE_WEIGHT_ADJ]u'\
-\h'-\\n[#RULE_WEIGHT]u'\
-\D'l \En[.l]u 0'\v'-\\n[#RULE_WEIGHT_ADJ]u'\h'|0'\c
-.    \}
-.    if \\n[fill] \{\
-.       fi
-.       rr fill
-.       QUAD \\*[$CURRENT_QUAD]
-.       rm $CURRENT_QUAD
-.    \}
-.    EOL
-.END
-\#
-\# VERTICAL RULE - DRV
-\# -------------------
-\# *Arguments:
-\#   <rule weight> <indent> <depth> [ <color> ]
-\# *Function:
-\#   Draws described vertical rule.
-\# *Notes:
-\#   Rules are drawn left-to-right, from the baseline down, and
-\#   return to their point of origin.  Color must be set in the
-\#   macro; otherwise the color will be black, regardless of current
-\#   .gcolor.
-\#
-.MAC DRV END
-.    if \\n[.vpt]=1 \{\
-.       vpt 0
-.       nr #RESTORE_TRAP 1
-.    \}
-.    ie !\\n[#NO_ADVANCE]=1 .br
-.    el \{\
-.       sp -1v
-.       rr #NO_ADVANCE
-.    \}
-.    ie \\n[.u]=1 \{\
-.       nr #FILLED 1
-.       nr #FILL_MODE \\n[.j]
-.    \}
-.    el \{\
-.       nr #NOFILL 1
-.       if \\n[.ce]>0 .nr #NOFILL_MODE 3
-.       if \\n[.rj]>0 .nr #NOFILL_MODE 5
-.       ce 0
-.       rj 0
-.    \}
-.    nf
-.    ds $RL_WEIGHT \\$1
-.    ds $RL_INDENT \\$2
-.    ds $RL_DEPTH  \\$3
-.    ie !'\\$4'' \{\
-.       ds $RL_COLOR  \\$4
-.    \}
-.    el .ds $RL_COLOR default
-.    nr #SAVED_WEIGHT     \\n[#RULE_WEIGHT]
-.    nr #SAVED_WEIGHT_ADJ \\n[#RULE_WEIGHT_ADJ]
-.    RULE_WEIGHT \\*[$RL_WEIGHT]
-.    gcolor \\*[$RL_COLOR]
-\D't \\n[#RULE_WEIGHT]'\
-\h'\\*[$RL_INDENT]-\\n[#RULE_WEIGHT_ADJ]u'\
-\D'l 0 \\*[$RL_DEPTH]'\
-\D't \\n[#SAVED_RULE_WEIGHT]'
-.    if \\n[#FILLED]=1 \{\
-.       if \\n[#FILL_MODE]=0 .QUAD LEFT
-.       if \\n[#FILL_MODE]=1 .JUSTIFY
-.       if \\n[#FILL_MODE]=3 .QUAD CENTER
-.       if \\n[#FILL_MODE]=5 .QUAD RIGHT
-.       rr #FILLED
-.    \}
-.    sp -1v
-.    if \\n[#NOFILL]=1 \{\
-.       if \\n[#NOFILL_MODE]=3 .CENTER
-.       if \\n[#NOFILL_MODE]=5 .RIGHT
-.    \}
-.    gcolor
-.    nr #RULE_WEIGHT     \\n[#SAVED_WEIGHT]
-.    nr #RULE_WEIGHT_ADJ \\n[#SAVED_WEIGHT_ADJ]
-.    if \\n[#RESTORE_TRAP]=1 \{\
-.       vpt 1
-.       rr #RESTORE_TRAP
-.    \}
-.    if '\\n[.z]'FLOAT*DIV' \{\
-.       if !(\\n[.d]+\\*[$RL_DEPTH])<\\n[D-float] .nr D-float \\n[.d]+\\*[$RL_DEPTH]
-.    \}
-.END
-\#
-\# BOXES - DBX
-\# -----------
-\# *Arguments:
-\#   <rule weight | SOLID> <indent> <length> <depth> [ <color> ]
-\# *Function:
-\#   Draws described box.
-\# *Notes:
-\#   Boxes are drawn left-to-right, from the baseline down, and
-\#   return to their point of origin.  Box rules are drawn from the
-\#   perimeter inwards.  Color must be set in the macro; otherwise
-\#   the color will be black, regardless of current .gcolor.  If no
-\#   arg given, the rule weight is the one set by RULE_WEIGHT.
-\#
-.MAC DBX END
-.    if \\n[.vpt]=1 \{\
-.       vpt 0
-.       nr #RESTORE_TRAP 1
-.    \}
-.    ie !\\n[#NO_ADVANCE]=1 .br
-.    el \{\
-.       sp -1v
-.       rr #NO_ADVANCE
-.    \}
-.    ie \\n[.u]=1 \{\
-.       nr #FILLED 1
-.       nr #FILL_MODE \\n[.j]
-.    \}
-.    el \{\
-.       nr #NOFILL 1
-.       if \\n[.ce]>0 .nr #NOFILL_MODE 3
-.       if \\n[.rj]>0 .nr #NOFILL_MODE 5
-.       ce 0
-.       rj 0
-.    \}
-.    nf
-.    ie '\\$1'SOLID' .nr #BX_SOLID 1
-.    el              .ds $BX_WEIGHT \\$1
-.    ds $BX_INDENT \\$2
-.    ds $BX_WIDTH  \\$3
-.    ds $BX_DEPTH  \\$4
-.    ie !'\\$5'' \{\
-.       ie d$\\$5_FILL .ds $BX_COLOR \\*[$\\$5_FILL]
-.       el             .ds $BX_COLOR \\$5
-.    \}
-.    el .ds $BX_COLOR default
-.    nr #SAVED_WEIGHT     \\n[#RULE_WEIGHT]
-.    nr #SAVED_WEIGHT_ADJ \\n[#WEIGHT_ADJ]
-.    if !'\\$1'SOLID' .RULE_WEIGHT \\*[$BX_WEIGHT]
-.    ds $BX_INDENT \\*[$BX_INDENT]-\\n[#WEIGHT_ADJ]u
-.    ie \\n[#BX_SOLID]=1 \{\
-.       fcolor \\*[$BX_COLOR]
-\h'\\*[$BX_INDENT]'\
-\D'P \\*[$BX_WIDTH] 0 0 \\*[$BX_DEPTH] -\\*[$BX_WIDTH] 0 0 -\\*[$BX_DEPTH]'
-.       fcolor
-.       rr #BX_SOLID
-.    \}
-.    el \{\
-.       gcolor \\*[$BX_COLOR]
-\D't \\n[#RULE_WEIGHT]'\
-\h'\\*[$BX_INDENT]'\
-\v'\\n[#WEIGHT_ADJ]u'\
-\D'p \\*[$BX_WIDTH]-\\n[#RULE_WEIGHT]u 0 0 \\*[$BX_DEPTH]-\\n[#RULE_WEIGHT]u -\\*[$BX_WIDTH]+\\n[#RULE_WEIGHT]u 0 0 -\\*[$BX_DEPTH]+\\n[#RULE_WEIGHT]u'\
-\v'-\\n[#WEIGHT_ADJ]u'\
-\D't \\n[#SAVED_RULE_WEIGHT]'
-.       gcolor
-.    \}
-.    sp -1v
-.    if \\n[#FILLED]=1 \{\
-.       if \\n[#FILL_MODE]=0 .QUAD LEFT
-.       if \\n[#FILL_MODE]=1 .JUSTIFY
-.       if \\n[#FILL_MODE]=3 .QUAD CENTER
-.       if \\n[#FILL_MODE]=5 .QUAD RIGHT
-.       rr #FILLED
-.    \}
-.    if \\n[#NOFILL]=1 \{\
-.       if \\n[#NOFILL_MODE]=3 .CENTER
-.       if \\n[#NOFILL_MODE]=5 .RIGHT
-.    \}
-.    nr #RULE_WEIGHT \\n[#SAVED_WEIGHT]
-.    nr #WEIGHT_ADJ  \\n[#SAVED_WEIGHT_ADJ]
-.    rr #SAVED_WEIGHT
-.    rr #SAVED_WEIGHT_ADJ
-.    if \\n[#RESTORE_TRAP]=1 \{\
-.       vpt 1
-.       rr #RESTORE_TRAP
-.    \}
-.    if '\\n[.z]'FLOAT*DIV' \
-.       if !(\\n[.d]+\\*[$BX_DEPTH])<\\n[D-float] .nr D-float \\n[.d]+\\*[$BX_DEPTH]
-.END
-\#
-\# ELLIPSES - DCL
-\# --------------
-\# *Arguments:
-\#   <rule weight | SOLID> <indent> <width> <depth> [ <color> ]
-\# *Function:
-\#   Draws described ellipses.
-\# *Notes:
-\#   Ellipses (circles) are drawn left-to-right, from the baseline
-\#   down, and return to their point of origin.  Ellipse rules are
-\#   drawn from the perimeter inwards.  Color must be set in the
-\#   macro; otherwise the color will be black, regardless of current
-\#   .gcolor.  If no arg given, the rule weight is the one set by
-\#   RULE_WEIGHT.
-\#
-.MAC DCL END
-.    if \\n[.vpt]=1 \{\
-.       vpt 0
-.       nr #RESTORE_TRAP 1
-.    \}
-.    ie !\\n[#NO_ADVANCE]=1 .br
-.    el \{\
-.       sp -1v
-.       rr #NO_ADVANCE
-.    \}
-.    ie \\n[.u]=1 \{\
-.       nr #FILLED 1
-.       nr #FILL_MODE \\n[.j]
-.    \}
-.    el \{\
-.       nr #NOFILL 1
-.       if \\n[.ce]>0 .nr #NOFILL_MODE 3
-.       if \\n[.rj]>0 .nr #NOFILL_MODE 5
-.       ce 0
-.       rj 0
-.    \}
-.    nf
-.    ie '\\$1'SOLID' .nr #CL_SOLID 1
-.    el              .ds $CL_WEIGHT \\$1
-.    ds $CL_INDENT \\$2
-.    ds $CL_WIDTH  \\$3
-.    ds $CL_DEPTH  \\$4
-.    ie !'\\$5'' \{\
-.       ie d$\\$5_FILL .ds $CL_COLOR \\*[$\\$5_FILL]
-.       el             .ds $CL_COLOR \\$5
-.    \}
-.    el .ds $CL_COLOR default
-.    nr #SAVED_WEIGHT     \\n[#RULE_WEIGHT]
-.    nr #SAVED_WEIGHT_ADJ \\n[#WEIGHT_ADJ]
-.    if !'\\$1'SOLID' .RULE_WEIGHT \\*[$CL_WEIGHT]
-.    ds $CL_INDENT \\*[$CL_INDENT]-\\n[#WEIGHT_ADJ]u
-.    ie \\n[#CL_SOLID]=1 \{\
-.       fcolor \\*[$CL_COLOR]
-\h'\\*[$CL_INDENT]'\
-\v'\\*[$CL_DEPTH]/2u'\
-\D'E \\*[$CL_WIDTH]-\\n[#RULE_WEIGHT]u \\*[$CL_DEPTH]-\\n[#RULE_WEIGHT]u'\
-\v'-\\*[$CL_DEPTH]/2u'
-.       fcolor
-.       rr #CL_SOLID
-.    \}
-.    el \{\
-.       gcolor \\*[$CL_COLOR]
-\D't \\n[#RULE_WEIGHT]'\
-\h'\\*[$CL_INDENT]'\
-\v'\\*[$CL_DEPTH]/2u'\
-\D'e \\*[$CL_WIDTH]-\\n[#RULE_WEIGHT]u \\*[$CL_DEPTH]-\\n[#RULE_WEIGHT]u'\
-\v'-(\\*[$CL_DEPTH]/2u)'\
-\D't \\n[#SAVED_RULE_WEIGHT]'
-.       gcolor
-.    \}
-.    sp -1v
-.    if \\n[#FILLED]=1 \{\
-.       if \\n[#FILL_MODE]=0 .QUAD LEFT
-.       if \\n[#FILL_MODE]=1 .JUSTIFY
-.       if \\n[#FILL_MODE]=3 .QUAD CENTER
-.       if \\n[#FILL_MODE]=5 .QUAD RIGHT
-.       rr #FILLED
-.    \}
-.    if \\n[#NOFILL]=1 \{\
-.       if \\n[#NOFILL_MODE]=3 .CENTER
-.       if \\n[#NOFILL_MODE]=5 .RIGHT
-.    \}
-.    nr #RULE_WEIGHT \\n[#SAVED_WEIGHT]
-.    nr #WEIGHT_ADJ  \\n[#SAVED_WEIGHT_ADJ]
-.    rr #SAVED_WEIGHT
-.    rr #SAVED_WEIGHT_ADJ
-.    if \\n[#RESTORE_TRAP]=1 \{\
-.       vpt 1
-.       rr #RESTORE_TRAP
-.    \}
-.    if '\\n[.z]'FLOAT*DIV' \
-.       if !(\\n[.d]+\\*[$CL_DEPTH])<\\n[D-float] .nr D-float \\n[.d]+\\*[$CL_DEPTH]
-.END
-\#
-\# RULE WEIGHT
-\# -----------
-\# *Argument:
-\#   <weight of rules in points>
-\# *Function:
-\#   Sets \D't <n>' to the correct number of machine units for the
-\#   argument given in points.
-\# *Notes:
-\#   Decimal fractions are allowed.  Rule weight must be < 100.
-\#
-.MAC RULE_WEIGHT END
-.    di NULL \" Diverted so there's no problem with breaks, spacing, etc.
-.       ds $ARG \\$1
-.       substring $ARG -1
-.       if !\B'\\*[$ARG]' \{\
-.          tm1 "[mom]: The argument to \\$0 must not have a unit of measure appended.
-.          ab Aborting '\\n[.F]' at \\$0, line \\n[.c].
-.       \}
-.       length #STR_LENGTH \\$1
-.       ds $ARG \\$1
-.       substring $ARG 0 0
-.       ie '\\*[$ARG]'.' \{\
-.          ds $ARG \\$1
-.          substring $ARG 1 \\n[#STR_LENGTH]-1
-.          nr #WEIGHT \\*[$ARG]*100
-.          if (\\n[#WEIGHT]>=1000) \{\
-.              while (\\n[#WEIGHT]>=1000) \{\
-.                  nr #WEIGHT \\n[#WEIGHT]/10
-.              \}
-.          \}
-.       \}
-.       el \{\
-.          ds $ARG \\$1
-.          substring $ARG 1 1
-.          ie '\\*[$ARG]'.' \{\
-.             ds $LHS \\$1
-.             substring $LHS 0 0
-.             ds $RHS \\$1
-.             substring $RHS 2
-.             nr #WEIGHT \\*[$LHS]\\*[$RHS]*100
-.             if (\\n[#WEIGHT]>=10000) \{\
-.                while (\\n[#WEIGHT]>=10000) \{\
-.                   nr #WEIGHT \\n[#WEIGHT]/10
-.                \}
-.             \}
-.          \}
-.          el \{\
-.             ie \\n[#STR_LENGTH]<=2 .nr #WEIGHT \\$1*1000
-.             el \{\
-.                ds $ARG \\$1
-.                substring $ARG 2 2
-.                ie !'\\*[$ARG]'.' \{\
-.                   tm1 "[mom]: Invalid argument given to macro \\$0 at line \\n[.c].
-.                   tm1 "       Rule weight must be < 100 points.
-.                   tm1 "       Falling back to default weight .5 points.
-.                   nr #WEIGHT 500
-.                \}
-.                el \{\
-.                   ds $LHS \\$1
-.                   substring $LHS 0 1
-.                   ds $RHS \\$1
-.                   substring $RHS 3
-.                   nr #WEIGHT \\*[$LHS]\\*[$RHS]*1000
-.                   if (\\n[#WEIGHT]>=100000) \{\
-.                      while (\\n[#WEIGHT]>=100000) \{\
-.                         nr #WEIGHT \\n[#WEIGHT]/10
-.                      \}
-.                   \}
-.                \}
-.             \}
-.          \}
-.       \}
-.       nr #WEIGHT_ADJ \\n[#WEIGHT]/2
-.       if '\\$0'BIBLIOGRAPHY_STRING_UNDERLINE_WEIGHT' \{\
-.          nr #BIB_STRING_UNDERLINE_WEIGHT     \\n[#WEIGHT]
-.          nr #BIB_STRING_UNDERLINE_WEIGHT_ADJ \\n[#WEIGHT_ADJ]
-.       \}
-.       if '\\$0'COVER_UNDERLINE_WEIGHT' \{\
-.          nr #COVER_UNDERLINE_WEIGHT     \\n[#WEIGHT]
-.          nr #COVER_UNDERLINE_WEIGHT_ADJ \\n[#WEIGHT_ADJ]
-.       \}
-.       if '\\$0'DOC_COVER_UNDERLINE_WEIGHT' \{\
-.          nr #DOC_COVER_UNDERLINE_WEIGHT     \\n[#WEIGHT]
-.          nr #DOC_COVER_UNDERLINE_WEIGHT_ADJ \\n[#WEIGHT_ADJ]
-.       \}
-.       if '\\$0'DOCTYPE_UNDERLINE_WEIGHT' \{\
-.          nr #DOCTYPE_UNDERLINE_WEIGHT     \\n[#WEIGHT]
-.          nr #DOCTYPE_UNDERLINE_WEIGHT_ADJ \\n[#WEIGHT_ADJ]
-.       \}
-.       if '\\$0'ENDNOTE_STRING_UNDERLINE_WEIGHT' \{\
-.          nr #EN_STRING_UNDERLINE_WEIGHT     \\n[#WEIGHT]
-.          nr #EN_STRING_UNDERLINE_WEIGHT_ADJ \\n[#WEIGHT_ADJ]
-.       \}
-.       if '\\$0'ENDNOTE_TITLE_UNDERLINE_WEIGHT' \{\
-.          nr #EN_TITLE_UNDERLINE_WEIGHT     \\n[#WEIGHT]
-.          nr #EN_TITLE_UNDERLINE_WEIGHT_ADJ \\n[#WEIGHT_ADJ]
-.       \}
-.       if '\\$0'FOOTER_RULE_WEIGHT' \{\
-.          nr #FOOTER_RULE_WEIGHT     \\n[#WEIGHT]
-.          nr #FOOTER_RULE_WEIGHT_ADJ \\n[#WEIGHT_ADJ]
-.       \}
-.       if '\\$0'FOOTNOTE_RULE_WEIGHT' \{\
-.          nr #FN_RULE_WEIGHT     \\n[#WEIGHT]
-.          nr #FN_RULE_WEIGHT_ADJ \\n[#WEIGHT_ADJ]
-.       \}
-.       if '\\$0'HEADER_RULE_WEIGHT' \{\
-.          nr #HEADER_RULE_WEIGHT     \\n[#WEIGHT]
-.          nr #HEADER_RULE_WEIGHT_ADJ \\n[#WEIGHT_ADJ]
-.       \}
-.       if '\\$0'RULE_WEIGHT' \{\
-.          nr #RULE_WEIGHT     \\n[#WEIGHT]
-.          nr #RULE_WEIGHT_ADJ \\n[#WEIGHT_ADJ]
-.       \}
-.       if '\\$0'UNDERSCORE_WEIGHT' \{\
-.          nr #UNDERSCORE_WEIGHT     \\n[#WEIGHT]
-.          nr #UNDERSCORE_WEIGHT_ADJ \\n[#WEIGHT_ADJ]
-.       \}
-.    di
-.END
-\#
-\# Aliases
-\# 
-.ALIAS BIBLIOGRAPHY_STRING_UNDERLINE_WEIGHT RULE_WEIGHT
-.ALIAS COVER_UNDERLINE_WEIGHT               RULE_WEIGHT
-.ALIAS DOC_COVER_UNDERLINE_WEIGHT           RULE_WEIGHT
-.ALIAS DOCTYPE_UNDERLINE_WEIGHT             RULE_WEIGHT
-.ALIAS ENDNOTE_STRING_UNDERLINE_WEIGHT      RULE_WEIGHT
-.ALIAS ENDNOTE_TITLE_UNDERLINE_WEIGHT       RULE_WEIGHT
-.ALIAS FOOTER_RULE_WEIGHT                   RULE_WEIGHT
-.ALIAS FOOTNOTE_RULE_WEIGHT                 RULE_WEIGHT
-.ALIAS HEADER_RULE_WEIGHT                   RULE_WEIGHT
-.ALIAS UNDERSCORE_WEIGHT                    RULE_WEIGHT
-\#
-\# Default rule weights
-\# ~~~~~~~~~~~~~~~~~~~~
-.nr #BIB_STRING_UNDERLINE_WEIGHT 500
-.nr #COVER_UNDERLINE_WEIGHT      500
-.nr #DOC_COVER_UNDERLINE_WEIGHT  500
-.nr #DOCTYPE_UNDERLINE_WEIGHT    500
-.nr #EN_STRING_UNDERLINE_WEIGHT  500
-.nr #EN_TITLE_UNDERLINE_WEIGHT   500
-.nr #FN_RULE_WEIGHT              500
-.nr #FOOTER_RULE_WEIGHT          500
-.nr #HEADER_RULE_WEIGHT          500
-.nr #RULE_WEIGHT                 500
-.nr #UNDERSCORE_WEIGHT           500
-\#
-.nr #BIB_STRING_UNDERLINE_WEIGHT_ADJ \n[#BIB_STRING_UNDERLINE_WEIGHT]/2
-.nr #COVER_UNDERLINE_WEIGHT_ADJ      \n[#DOCTYPE_UNDERLINE_WEIGHT]/2
-.nr #DOC_COVER_UNDERLINE_WEIGHT_ADJ  \n[#DOCTYPE_RULE_WEIGHT]/2
-.nr #DOCTYPE_UNDERLINE_WEIGHT_ADJ    \n[#DOCTYPE_RULE_WEIGHT]/2
-.nr #EN_STRING_UNDERLINE_WEIGHT_ADJ  \n[#EN_STRING_UNDERLINE_WEIGHT]/2
-.nr #EN_TITLE_UNDERLINE_WEIGHT_ADJ   \n[#EN_STRING_UNDERLINE_WEIGHT]/2
-.nr #FOOTER_RULE_WEIGHT_ADJ          \n[#FOOTER_RULE_WEIGHT]/2
-.nr #FN_RULE_WEIGHT_ADJ              \n[#FN_RULE_WEIGHT]/2
-.nr #HEADER_RULE_WEIGHT_ADJ          \n[#HEADER_RULE_WEIGHT]/2
-.nr #RULE_WEIGHT_ADJ                 \n[#RULE_WEIGHT]/2
-.nr #UNDERSCORE_WEIGHT_ADJ           \n[#UNDERSCORE_WEIGHT]/2
-\#
-\# Set default rule weight
-\#
-.di NULL
-\D't 500'
-.di
-\#
-\# =====================================================================
-\#
-\# +++WORD AND SENTENCE SPACING+++
-\#
-\# WORD SPACE CONTROL
-\# ------------------
-\# *Argument:
-\#   <+|->wordspace | DEFAULT
-\# *Function:
-\#   Increases or decreases interword space by user supplied amount.
-\#   If DEFAULT, value is set to 12 (groff default).
-\# *Notes:
-\#   $WS_CONSTANT is the groff default word space.
-\#   $WS_VAR is the user supplied amount by which to in/decrease word space.
-\#   $WS is a concatenation of WS_CONSTANT and WS_VAR.
-\#
-\#   \n[.sss] holds the current sentence space value.
-\#
-.MAC WS END
-.    ds $WS_CURR \\n[.ss]
-.    ds $WS_VAR  \\$1
-.    ie '\\$1'DEFAULT' .ss 12 \\n[.sss]
-.    el \{\
-.       ds $WS (\\*[$WS_CURR]\\*[$WS_VAR])
-.       ie \\n[.sss]=12 .ss \\*[$WS] 12
-.       el \{\
-.          ss \\*[$WS] (\\*[$WS]\\*[$SS_VAR])
-.          SS \\*[$SS_VAR]
-.      \}
-.    \}
-.END
-\#
-\# SENTENCE SPACE CONTROL
-\# ----------------------
-\# *Argument:
-\#   <+-sentencespace> | 0 | DEFAULT
-\# *Function:
-\#   Increases or decreases sentence space by user supplied amount.
-\#   If 0, sentence spaces are ignored.  If DEFAULT, value is
-\#   set to 12 (groff default).
-\# *Notes:
-\#   Because the user supplied value requires a literal + or - sign,
-\#   the macro argument is stored in a string.
-\#
-\#   Sentence space applies only to input where sentences are separated
-\#   by two spaces (and/or, in fill mode [FLUSH L|R|C or JUSTIFY], an EOL).
-\#   Changing .SS when sentences are separated by only one space has
-\#   no effect on the space between sentences.
-\#
-\#   \n[.ss] holds the current wordspace value.
-\#   \n[.sss] holds the current sentence space value.
-\#
-.MAC SS END
-.    ds $SS_VAR \\$1
-.    ie '\\$1'0' .ss \\n[.ss] (\\n[.ss]-\\n[.ss])
-.    el \{\
-.       ie '\\$1'DEFAULT' .ss \\n[.ss]
-.       el                .ss \\n[.ss] (0\\*[$SS_VAR])
-.    \}
-.END
-\#
-\# =====================================================================
-\#
-\# INDENTS
-\# -------
-\#
-\# +++INDENT LEFT+++
-\#
-.MAC IL END
-.    if \\n[#INDENT_STYLE_BOTH] .IBX
-.    nr #INDENT_STYLE_LEFT  1
-.    nr #INDENT_ACTIVE      1
-.    nr #INDENT_LEFT_ACTIVE 1
-.    ie '\\$1'' \{\
-.       br
-.       in \\n[#L_INDENT]u
-.       ta \\n[.l]u-\\n[#L_INDENT]u
-.    \}
-.    el \{\
-.       br
-.       nr #L_INDENT +(\\$1)
-.       in \\n[#L_INDENT]u
-.       ta \\n[.l]u-\\n[#L_INDENT]u
-.    \}
-.    if \\n[#IN_ITEM] .nr #IN_ITEM_L_INDENT +(\\$1)
-.END
-\#
-\# +++INDENT RIGHT+++
-\#
-.MAC IR END
-.    if \\n[#INDENT_STYLE_BOTH] .IBX
-.    nr #INDENT_STYLE_RIGHT   1
-.    nr #INDENT_ACTIVE        1
-.    nr #INDENT_RIGHT_ACTIVE  1
-.    ie '\\$1'' \{\
-.       br
-.       ie \\n[#TAB_ACTIVE] \{\
-.          ll \\n[.l]u-\\n[#R_INDENT]u
-.          ta \\n[.l]u-\\n[#L_INDENT]u
-.       \}
-.       el \{\
-.          ll \\n[.l]u-\\n[#R_INDENT]u
-.          ta \\n[.l]u-\\n[#L_INDENT]u
-.       \}
-.    \}
-.    el \{\
-.       br
-.       nr #R_INDENT +(\\$1)
-.       ie \\n[#TAB_ACTIVE] \{\
-.          ll \\n[.l]u-\\n[#R_INDENT]u
-.          ta \\n[.l]u-\\n[#L_INDENT]u
-.       \}
-.       el \{\
-.          ll \\n[.l]u-\\n[#R_INDENT]u
-.          ta \\n[.l]u-\\n[#L_INDENT]u
-.       \}
-.    \}
-.END
-\#
-\# +++INDENT BOTH+++
-\#
-.MAC IB END
-.    if \\n[#INDENT_STYLE_LEFT] .ILX
-.    if \\n[#INDENT_STYLE_RIGHT] .IRX
-.    nr #INDENT_STYLE_BOTH  1
-.    nr #INDENT_ACTIVE      1
-.    nr #INDENT_BOTH_ACTIVE 1
-.    ie '\\$1'' \{\
-.       br
-.       in \\n[#BL_INDENT]u
-.       ie \\n[#TAB_ACTIVE] \{\
-.          ll \\n[.l]u-\\n[#BR_INDENT]u
-.          ta \\n[.l]u-\\n[#BR_INDENT]u
-.       \}
-.       el \{\
-.          ll \\n[.l]u-\\n[#BR_INDENT]u
-.          ta \\n[.l]u-\\n[#BR_INDENT]u
-.       \}
-.    \}
-.    el \{\
-.       br
-.       nr #BL_INDENT (\\n[#INDENT]+\\$1)
-.       ie \\n[#NUM_ARGS]=2 .nr #BR_INDENT +(\\$2)
-.       el .nr #BR_INDENT \\n[#BL_INDENT]
-.       ie \\n[#TAB_ACTIVE] \{\
-.          in \\n[#BL_INDENT]u
-.          ll \\n[.l]u-\\n[#BR_INDENT]u
-.          ta \\n[.l]u-\\n[#BL_INDENT]u
-.       \}
-.       el \{\
-.          in \\n[#BL_INDENT]u
-.          ll \\n[.l]u-\\n[#BR_INDENT]u
-.          ta \\n[.l]u-\\n[#BR_INDENT]u
-.       \}
-.    \}
-.END
-\#
-\# +++TEMPORARY INDENT+++
-\#
-.MAC TI END
-.    br
-.    ie '\\$1'' \{\
-.       ti \\n[#T_INDENT]u
-.       if \\n[#INDENT_LEFT_ACTIVE] .ti \\n[#T_INDENT]u+\\n[#L_INDENT]u
-.       if \\n[#INDENT_BOTH_ACTIVE] .ti \\n[#T_INDENT]u+\\n[#BL_INDENT]u
-.    \}
-.    el \{\
-.       nr #T_INDENT (\\$1)
-.       ti \\n[#T_INDENT]u
-.    \}
-.END
-\#
-\# +++HANGING INDENT+++
-\#
-.MAC HI END
-.    ie '\\$1'' .ti -\\n[#HL_INDENT]u
-.    el \{\
-.       nr #HL_INDENT (\\$1)
-.       ti -\\n[#HL_INDENT]u
-.    \}
-.END
-\#
-\# +++INDENTS OFF+++
-\#
-.MAC ILX END
-.    ie \\n[#IN_ITEM] .nr #L_INDENT -\\n[#IN_ITEM_L_INDENT]
-.    el \{\
-.       br
-.       in 0
-.       rr #INDENT_LEFT_ACTIVE
-.    \}
-.    if '\\$1'CLEAR' \{\
-.       rr #L_INDENT
-.       rr #INDENT_STYLE_LEFT
-.    \}
-.END
-\#
-.MAC IRX END
-.    br
-.    rr #INDENT_RIGHT_ACTIVE
-.    ie \\n[#TAB_ACTIVE] .TAB\\n[#CURRENT_TAB]
-.    el \{\
-.       ie \\n[#COLUMNS] \{\
-.          ll \\n[#COL_L_LENGTH]u
-.          ta \\n[.l]u
-.       \}
-.       el \{\
-.          ll \\n[#L_LENGTH]u
-.          ta \\n[.l]u
-.       \}
-.    \}
-.    if '\\$1'CLEAR' \{\
-.       rr #R_INDENT
-.       rr #INDENT_STYLE_RIGHT
-.    \}
-.END
-\#
-.MAC IBX END
-.    br
-.    in 0
-.    rr #INDENT_BOTH_ACTIVE
-.    ie \\n[#TAB_ACTIVE] .TAB\\n[#CURRENT_TAB]
-.    el \{\
-.       ie \\n[#COLUMNS] \{\
-.          ll \\n[#COL_L_LENGTH]u
-.          ta \\n[.l]u
-.       \}
-.       el \{\
-.          ll \\n[#L_LENGTH]u
-.          ta \\n[.l]u
-.       \}
-.    \}
-.    if '\\$1'CLEAR' \{\
-.       rr #BL_INDENT
-.       rr #BR_INDENT
-.       rr #INDENT_STYLE_BOTH
-.    \}
-.END
-\#
-.MAC IX END
-.    if '\\$0'IX' \{\
-.       if !\\n[#IX_WARN] \{\
-.          tm1 "[mom]: Use of .IX is deprecated.  Use .IQ instead.
-.          tm1 "      .IX will continue to behave as before, but to
-.          tm1 "       avoid this message, please update your document.
-.          nr #IX_WARN 1
-.       \}
-.    \}
-.    br
-.    in 0
-.    rr #INDENT_LEFT_ACTIVE
-.    rr #INDENT_RIGHT_ACTIVE
-.    rr #INDENT_BOTH_ACTIVE
-.    if \\n[#INDENT_STYLE_RIGHT] \{\
-.       ie \\n[#TAB_ACTIVE] .TAB\\n[#CURRENT_TAB]
-.       el \{\
-.          ie \\n[#COLUMNS] \{\
-.             ll \\n[#COL_L_LENGTH]u
-.             ta \\n[.l]u
-.          \}
-.          el \{\
-.             ll \\n[#L_LENGTH]u
-.             ta \\n[.l]u
-.          \}
-.       \}
-.    \}
-.    if \\n[#INDENT_STYLE_BOTH] \{\
-.       ie \\n[#TAB_ACTIVE] .TAB\\n[#CURRENT_TAB]
-.       el \{\
-.          ie \\n[#COLUMNS] \{\
-.             ll \\n[#COL_L_LENGTH]u
-.             ta \\n[.l]u
-.          \}
-.          el \{\
-.             ll \\n[#L_LENGTH]u
-.             ta \\n[.l]u
-.          \}
-.       \}
-.    \}
-.    if '\\$1'CLEAR' \{\
-.       if \\n[#INDENT_STYLE_RIGHT] \{\
-.          ie \\n[#TAB_ACTIVE] .TAB\\n[#CURRENT_TAB]
-.          el \{\
-.             ie \\n[#COLUMNS] \{\
-.                ll \\n[#COL_L_LENGTH]u
-.                ta \\n[.l]u
-.             \}
-.             el \{\
-.                ll \\n[#L_LENGTH]u
-.                ta \\n[.l]u
-.             \}
-.          \}
-.       \}
-.       if \\n[#INDENT_STYLE_BOTH] \{\
-.          ie \\n[#TAB_ACTIVE] .TAB\\n[#CURRENT_TAB]
-.          el \{\
-.             ie \\n[#COLUMNS] \{\
-.                ll \\n[#COL_L_LENGTH]u
-.                ta \\n[.l]u
-.             \}
-.             el \{\
-.                ll \\n[#L_LENGTH]u
-.                ta \\n[.l]u
-.             \}
-.          \}
-.       \}
-.       rr #L_INDENT
-.       rr #R_INDENT
-.       rr #BL_INDENT
-.       rr #BR_INDENT
-.       rr #T_INDENT
-.       rr #H_INDENT
-.       rr #INDENT_STYLE_LEFT
-.       rr #INDENT_STYLE_RIGHT
-.       rr #INDENT_STYLE_BOTH
-.    \}
-.    rr #INDENT_ACTIVE
-.END
-\#
-\# =====================================================================
-\#
-\# +++MULTIPLE COLUMNS+++
-\#
-\# MULTIPLE COLUMNS ON
-\# -------------------
-\# *Arguments:
-\#   <none>
-\# *Function:
-\#   Marks the top of a column set
-\#
-.MAC MCO END
-.    mk c
-.END
-\#
-\# MULTIPLE COLUMN RETURN
-\# ----------------------
-\# *Arguments:
-\#   <none>
-\# *Function:
-\#   Returns to the top of a column set
-\#
-.MAC MCR END
-.    TRAP OFF
-.    sp |\\n[c]u
-.    TRAP
-.END
-\#
-\# MULTIPLE COLUMNS OFF
-\# --------------------
-\# *Arguments:
-\#   <none> | <lead to advance beneath bottom of deepest column>
-\# *Function:
-\#   Advances to the end of a column set
-\# *Notes:
-\#   With no argument, advances to the next baseline (at the current
-\#   leading value) beneath the longest column.  With an argument
-\#   (which requires a unit of measure), advances arg distance
-\#   beneath the baseline of the deepest column.  If the argument
-\#   is zero, advances to the baseline of the deepest column.
-\#
-.MAC MCX END
-.    TRAP OFF
-.    ie '\\$1'' \{\
-.       TQ
-.       sp |\\n[.h]u
-.    \}
-.    el \{\
-.       nr #MCX_ALD (\\$1)
-.       TQ
-.       ie \\n[#MCX_ALD]=0 .sp |\\n[.h]u-1v
-.       el .sp |\\n[.h]u+\\n[#MCX_ALD]u
-.       rr #MCX_ALD
-.    \}
-.    TRAP
-.END
-\#
-\# =====================================================================
-\#
-\# +++TYPESETTING SUPPORT MACROS+++
-\#
-\# TRAP
-\# ----
-\# *Arguments:
-\#   toggle
-\# *Function:
-\#   Enables/disables traps.
-\# *Notes:
-\#   EL and TN don't function as advertised on the last line before
-\#   a trap (when they break the preceding line, they spring the
-\#   trap, and groff won't back up to the line preceding the trap).
-\#   TRAP is a kludge to get EL and TN work properly on last lines.
-\#   The user simply enloses the offending lines in TRAP OFF/TRAP.
-\#
-.MAC TRAP END
-.    ie '\\$1'' .vpt 1
-.    el         .vpt 0
-.END
-\#
-\# SILENT
-\# ------
-\# *Arguments:
-\#   <none> | <anything>
-\# *Function:
-\#   Diverts text so that it doesn't print, or turns the function off.
-\# *Notes:
-\#   Useful for setting up autotabs where you don't want the line with
-\#   the tab marks to print.
-\#
-\#   Also aliased as COMMENT, in case user wants to input a batch of
-\#   text that doesn't print.
-\#
-.MAC SILENT END
-.    nr #SILENT 1
-.    if \\n[#QUAD] .br
-.    ie '\\$1'' .di NO_FLASH
-.    el \{\
-.       br
-.       di
-.       rm NO_FLASH
-.       rr #SILENT
-.    \}
-.END
-\#
-\# PRINT
-\# -----
-\# *Function:
-\#   Prints anything.  A macro that helps keep my code nicely indented.
-\#
-.MAC PRINT END
-.    nop \\$*
-.END
-\#
-\# CAPS
-\# ----
-\# *Arguments:
-\#   <none> | <anything>
-\# *Function:
-\#   Converts text to caps, or, if OFF, reverts to normal caps/lc.
-\# *Notes:
-\#   For inline control of capitalization style, use \*[UC] and
-\#   \*[LC].
-\#
-.MAC CAPS END
-.    ie '\\$1'' \{\
-.       tr aAbBcCdDeEfFgGhHiIjJkKlLmMnNoOpPqQrRsStTuUvVwWxXyYzZ
-.       tr \[`a]\[`A]
-.       tr \[^a]\[^A]
-.       tr \['a]\['A]
-.       tr \[:a]\[:A]
-.       tr \[oa]\[oA]
-.       tr \[~a]\[~A]
-.       tr \[ae]\[AE]
-.       tr \[`e]\[`E]
-.       tr \[^e]\[^E]
-.       tr \['e]\['E]
-.       tr \[:e]\[:E]
-.       tr \[`i]\[`I]
-.       tr \[^i]\[^I]
-.       tr \['i]\['I]
-.       tr \[:i]\[:I]
-.       tr \[`o]\[`O]
-.       tr \[^o]\[^O]
-.       tr \['o]\['O]
-.       tr \[:o]\[:O]
-.       tr \[~o]\[~O]
-.       tr \[/o]\[/O]
-.       tr \[`u]\[`U]
-.       tr \[^u]\[^U]
-.       tr \['u]\['U]
-.       tr \[:u]\[:U]
-.       tr \[,c]\[,C]
-.       tr \[-d]\[-D]
-.       tr \[~n]\[~N]
-.       tr \[Sd]\[-D]
-.       tr \[Tp]\[TP]
-.       tr \['y]\['Y]
-.       tr \[:y]\[:Y]
-.       nr #CAPS_ON 1
-.    \}
-.    el \{\
-.       tr aabbccddeeffgghhiijjkkllmmnnooppqqrrssttuuvvwwxxyyzz
-.       tr \[`a]\[`a]
-.       tr \[^a]\[^a]
-.       tr \['a]\['a]
-.       tr \[:a]\[:a]
-.       tr \[oa]\[oa]
-.       tr \[~a]\[~a]
-.       tr \[ae]\[ae]
-.       tr \[`e]\[`e]
-.       tr \[^e]\[^e]
-.       tr \['e]\['e]
-.       tr \[:e]\[:e]
-.       tr \[`i]\[`i]
-.       tr \[^i]\[^i]
-.       tr \['i]\['i]
-.       tr \[:i]\[:i]
-.       tr \[`o]\[`o]
-.       tr \[^o]\[^o]
-.       tr \['o]\['o]
-.       tr \[:o]\[:o]
-.       tr \[~o]\[~o]
-.       tr \[/o]\[/o]
-.       tr \[`u]\[`u]
-.       tr \[^u]\[^u]
-.       tr \['u]\['u]
-.       tr \[:u]\[:u]
-.       tr \[,c]\[,c]
-.       tr \[Sd]\[Sd]
-.       tr \[~n]\[~n]
-.       tr \[Tp]\[Tp]
-.       tr \['y]\['y]
-.       tr \[:y]\[:y]
-.       rr #CAPS_ON
-.    \}
-.END
-\#
-.MAC UC END
-\c
-.    tr aAbBcCdDeEfFgGhHiIjJkKlLmMnNoOpPqQrRsStTuUvVwWxXyYzZ
-.    tr \[`a]\[`A]
-.    tr \[^a]\[^A]
-.    tr \['a]\['A]
-.    tr \[:a]\[:A]
-.    tr \[oa]\[oA]
-.    tr \[~a]\[~A]
-.    tr \[ae]\[AE]
-.    tr \[`e]\[`E]
-.    tr \[^e]\[^E]
-.    tr \['e]\['E]
-.    tr \[:e]\[:E]
-.    tr \[`i]\[`I]
-.    tr \[^i]\[^I]
-.    tr \['i]\['I]
-.    tr \[:i]\[:I]
-.    tr \[`o]\[`O]
-.    tr \[^o]\[^O]
-.    tr \['o]\['O]
-.    tr \[:o]\[:O]
-.    tr \[~o]\[~O]
-.    tr \[/o]\[/O]
-.    tr \[`u]\[`U]
-.    tr \[^u]\[^U]
-.    tr \['u]\['U]
-.    tr \[:u]\[:U]
-.    tr \[,c]\[,C]
-.    tr \[Sd]\[-D]
-.    tr \[~n]\[~N]
-.    tr \[Tp]\[TP]
-.    tr \['y]\['Y]
-.    tr \[:y]\[:Y]
-.    nr #CAPS_ON 1
-.END
-\#
-.MAC LC END
-\c
-.    tr aabbccddeeffgghhiijjkkllmmnnooppqqrrssttuuvvwwxxyyzz
-.    tr \[`a]\[`a]
-.    tr \[^a]\[^a]
-.    tr \['a]\['a]
-.    tr \[:a]\[:a]
-.    tr \[oa]\[oa]
-.    tr \[~a]\[~a]
-.    tr \[ae]\[ae]
-.    tr \[`e]\[`e]
-.    tr \[^e]\[^e]
-.    tr \['e]\['e]
-.    tr \[:e]\[:e]
-.    tr \[`i]\[`i]
-.    tr \[^i]\[^i]
-.    tr \['i]\['i]
-.    tr \[:i]\[:i]
-.    tr \[`o]\[`o]
-.    tr \[^o]\[^o]
-.    tr \['o]\['o]
-.    tr \[:o]\[:o]
-.    tr \[~o]\[~o]
-.    tr \[/o]\[/o]
-.    tr \[`u]\[`u]
-.    tr \[^u]\[^u]
-.    tr \['u]\['u]
-.    tr \[:u]\[:u]
-.    tr \[,c]\[,c]
-.    tr \[Sd]\[Sd]
-.    tr \[~n]\[~n]
-.    tr \[Tp]\[Tp]
-.    tr \['y]\['y]
-.    tr \[:y]\[:y]
-.    rr #CAPS_ON
-.END
-\#
-\# SIZESPECS
-\# ---------
-\# Argument:
-\#   <none>
-\# Function:
-\#   Gets cap-height, x-height, and descender depth of the
-\#   current font at the current point size.
-\# *Notes:
-\#   The routine is diverted so it remains invisible to output.
-\#
-.MAC SIZESPECS END
-.    if '\\n[.z]'FLOAT*DIV' \
-.       if \\n[dn] .nr saved-dn \\n[dn]
-.    di TYPESIZE
-E\R'#CAP_HEIGHT \\n[.cht]'
-e\R'#X_HEIGHT \\n[.cht]'
-y\R'#DESCENDER \\n[.cdp]'
-.    br
-.    ds $CAP_HEIGHT \\n[#CAP_HEIGHT]u
-.    ds $X_HEIGHT \\n[#X_HEIGHT]u
-.    ds $DESCENDER \\n[#DESCENDER]u
-.    di
-.    if '\\n[.z]'FLOAT*DIV' \
-.       nr dn \\n[saved-dn]
-.END
-\#
-\# =====================================================================
-\#
-\# +++TYPESETTING ALIASES+++
-\#
-.ALIAS    ADD_SPACE       ALD
-.ALIAS    CENTRE          CENTER
-.ALIAS    COLOUR          COLOR
-.ALIAS    COMMENT         SILENT
-.ALIAS    CONDENSE        CONDENSE_OR_EXTEND
-.ALIAS    EXTEND          CONDENSE_OR_EXTEND
-.ALIAS    FAM             FAMILY
-.ALIAS    FONT            FT
-.ALIAS    HYPHENATE       HY
-.ALIAS    HYPHENATION     HY
-.ALIAS    HYSET           HY_SET
-.ALIAS    IBQ             IBX
-.ALIAS    ILQ             ILX
-.ALIAS    IQ              IX
-.ALIAS    IRQ             IRX
-.ALIAS    LIG             LIGATURES
-.ALIAS    NEWCOLOUR       NEWCOLOR
-.ALIAS    PADMARKER       PAD_MARKER
-.ALIAS    SP              ALD
-.ALIAS    SPACE           ALD
-.ALIAS    TABSET          TAB_SET
-.ALIAS    TB              TAB
-.ALIAS    UNDERSCORE_2    UNDERSCORE2
-.ALIAS    XCOLOUR         XCOLOR
-.ALIAS    PDF_LINK_COLOUR PDF_LINK_COLOR
-.ALIAS    AUTO_TOC_RELOCATE AUTO_RELOCATE_TOC
-\#
-\# ====================================================================
-\#
-\# DOCUMENT PROCESSING MACROS, STRINGS AND ALIASES
-\# ===============================================
-\#
-\# DOC_MACRO_ERROR
-\# ----------
-\# *Arguments:
-\#   None.
-\# *Function:
-\#   Warning message if DOC_<PARAMETER> called before START.
-\#
-.MAC DOC_MACRO_ERROR END
-.    if '\\$1'DOC_L_MARGIN'    .ds $REPLACEMENT L_MARGIN
-.    if '\\$1'DOC_R_MARGIN'    .ds $REPLACEMENT R_MARGIN
-.    if '\\$1'DOC_LINE_LENGTH' .ds $REPLACEMENT LL
-.    if '\\$1'DOC_FAMILY'      .ds $REPLACEMENT "FAMILY or FAM
-.    if '\\$1'DOC_PT_SIZE'     .ds $REPLACEMENT PT_SIZE
-.    if '\\$1'DOC_LEAD'        .ds $REPLACEMENT LS
-.    if '\\$1'DOC_QUAD'        .ds $REPLACEMENT QUAD
-.    tm1 "[mom]: \\$1 at line \\n[.c] of '\\n[.F]' should not be used before START.
-.    tm1 "       Use \\*[$REPLACEMENT] instead.
-.    ab  Aborting.
-.END
-\#
-\# +++PAGE DIMENSIONS+++
-\#
-\# PAPER SIZE
-\# ----------
-\# *Arguments:
-\#   LETTER | LEGAL | STATEMENT | TABLOID | LEDGER | FOLIO | QUARTO | 10x14 | EXECUTIVE | A3 | A4 | A5 | B4 | B5
-\# *Function:
-\#   Sets up dimensions for different paper sizes.
-\#
-.MAC PAPER END
-.    ds $PAPER \\$1
-.    if '\\*[$PAPER]'LETTER' \{\
-.       PAGEWIDTH  8.5i
-.       PAGELENGTH 11i
-.    \}
-.    if '\\*[$PAPER]'LEGAL' \{\
-.       PAGEWIDTH  8.5i
-.       PAGELENGTH 14i
-.    \}
-.    if '\\*[$PAPER]'STATEMENT' \{\
-.       PAGEWIDTH  5.5i
-.       PAGELENGTH 8.5i
-.    \}
-.    if '\\*[$PAPER]'TABLOID' \{\
-.       PAGEWIDTH  11i
-.       PAGELENGTH 17i
-.    \}
-.    if '\\*[$PAPER]'LEDGER' \{\
-.       PAGEWIDTH  17i
-.       PAGELENGTH 11i
-.    \}
-.    if '\\*[$PAPER]'FOLIO' \{\
-.       PAGEWIDTH  8.5i
-.       PAGELENGTH 13i
-.    \}
-.    if '\\*[$PAPER]'QUARTO' \{\
-.       PAGEWIDTH  610p
-.       PAGELENGTH 780p
-.    \}
-.    if '\\*[$PAPER]'10x14' \{\
-.       PAGEWIDTH  10i
-.       PAGELENGTH 14i
-.    \}
-.    if '\\*[$PAPER]'EXECUTIVE' \{\
-.       PAGEWIDTH  7.25i
-.       PAGELENGTH 10.5i
-.    \}
-.    if '\\*[$PAPER]'A3' \{\
-.       PAGEWIDTH  842p
-.       PAGELENGTH 1190p
-.    \}
-.    if '\\*[$PAPER]'A4' \{\
-.       PAGEWIDTH  595p
-.       PAGELENGTH 842p
-.    \}
-.    if '\\*[$PAPER]'A5' \{\
-.       PAGEWIDTH  421p
-.       PAGELENGTH 595p
-.    \}
-.    if '\\*[$PAPER]'B4' \{\
-.       PAGEWIDTH  709p
-.       PAGELENGTH 1002p
-.    \}
-.    if '\\*[$PAPER]'B5' \{\
-.       PAGEWIDTH  501p
-.       PAGELENGTH 709p
-.    \}
-.    if '\\$2'LANDSCAPE' \{\
-.       nr #PAGE_WIDTH_TMP \\n[#PAGE_WIDTH]
-.       PAGEWIDTH \\n[#PAGE_LENGTH]u
-.       PAGELENGTH \\n[#PAGE_WIDTH_TMP]u
-.    \}
-.    if !r#L_MARGIN .L_MARGIN \\n[.o]
-.    if !r#R_MARGIN .R_MARGIN 1i
-.END
-\#
-\# ====================================================================
-\#
-\# +++PRINTSTYLE -- TYPEWRITE OR TYPESET+++
-\#
-\# PRINTSTYLE
-\# ----------
-\# *Arguments:
-\#   TYPESET | TYPEWRITE [SINGLESPACE]
-\# *Function:
-\#   Sets type specs for typewriter-style or typeset output.
-\# *Notes:
-\#   Number registers: TYPEWRITE=1, TYPESET=2.
-\#
-.MAC PRINTSTYLE END
-.    if !\\n[#COLLATE]=1 \{\
-.       if !d$PAPER .PAPER LETTER
-.       if '\\$1'TYPEWRITE' \{\
-.          nr #PRINT_STYLE 1
-.          if !\\n[#DOC_TYPE]=4 .L_MARGIN 6P
-.          if !\\n[#DOC_TYPE]=4 .R_MARGIN 6P
-.          ds $TYPEWRITER_FAM C
-.          ds $TYPEWRITER_PS  12
-.          TYPEWRITER
-.          color 0
-.          ie '\\$2'SINGLESPACE' \{\
-.             nr #SINGLE_SPACE 1
-.             vs 12
-.             ie \\n[#DOC_TYPE]=4 .nr #FOOTER_ADJ \\n[.v]
-.             el .nr #FOOTER_ADJ \\n[.v]*2
-.             nr #ORIGINAL_DOC_LEAD \\n[.v]
-.          \}
-.          el \{\
-.             if !\\n[#DOC_TYPE]=4 \{\
-.                vs 24
-.                nr #FOOTER_ADJ \\n[.v]/2
-.                nr #ORIGINAL_DOC_LEAD \\n[.v]
-.             \}
-.          \}
-.          QUAD    L
-.          HY      OFF
-.          SMARTQUOTES OFF
-.          if !\\n[#PP_INDENT] .nr #PP_INDENT 3P
-.          HDRFTR_RIGHT_CAPS
-.          nr #BOLDER_UNITS 0
-.          nr #CONDENSE 0
-.          nr #EXTEND 0
-.          if !\\n[#ITALIC_MEANS_ITALIC] .rm IT
-.          rm BD
-.          rm BDI
-.          if !\\n[#ITALIC_MEANS_ITALIC] .rm PREV
-.          if !\\n[#SLANT_MEANS_SLANT]   .UNDERLINE_SLANT
-.          if !\\n[#ITALIC_MEANS_ITALIC] .UNDERLINE_ITALIC
-.          if !\\n[#UNDERLINE_QUOTES]    .UNDERLINE_QUOTES
-.          nr #IGNORE_COLUMNS 1
-.          nr #RULE_WEIGHT 500
-.          char \[em] --
-.          tr `'
-.          tr \[lq]"
-.          tr \[rq]"
-.       \}
-.       if '\\$1'TYPESET' \{\
-.          nr #PRINT_STYLE 2
-.          if !\\n[#DOC_TYPE]=4 .L_MARGIN 6P
-.          if !\\n[#DOC_TYPE]=4 .R_MARGIN 6P
-.          FAMILY  T
-.          FT      R
-.          if !\\n[#DOC_TYPE]=4 .ps 12.5
-.          if !\\n[#DOC_TYPE]=4 .vs 16
-.\" In DEFAULTS, TRAPS is run with this leading, so we need a register to
-.\" hold it for use with the .sp in FOOTER
-.          nr #FOOTER_ADJ 12000
-.          JUSTIFY
-.          HY
-.          HY_SET 2 36p 1p
-.          KERN
-.          LIG
-.          SS 0
-.          SMARTQUOTES
-.          if !\\n[#PP_INDENT] \{\
-.             in 2m                 \"Set indent
-.             nr #PP_INDENT \\n[.i] \"Read into #PP_INDENT
-.             in 0                  \"Remove indent
-.          \}
-.          HDRFTR_RIGHT_CAPS
-.          rr #IGNORE_COLUMNS
-.       \}
-.\" Set up default style for nine levels of headings
-.       nr #HD_LEVEL 0 1 \" loop step
-.       nr #LOOP 9       \" loop count
-.       while \\n+[#HD_LEVEL]<=\\n[#LOOP] \{\
-.           HEADING_STYLE \\n[#HD_LEVEL] \
-            FONT   B \
-            SIZE  +0 \
-            QUAD   L \
-            COLOR  black
-.\"  Set up default style for nine levels of TOC headings
-.           TOC_ENTRY_STYLE \\n[#HD_LEVEL] \
-            FONT   R \
-            SIZE  +0 \
-            COLOR  black
-.       \}
-.\" Set up decreasing sizes for headings levels 1 - 3, starting at +3
-.       nr #HD_LEVEL 0 1 \" loop step
-.       nr #LOOP 3       \" loop count
-.       nr #HD_SIZE 4 1
-.       while \\n+[#HD_LEVEL]<=\\n[#LOOP] \{\
-.          nr #HD_SIZE_CHANGE \\n-[#HD_SIZE]
-.          ds $HEAD_\\n[#HD_LEVEL]_SIZE +\\n[#HD_SIZE_CHANGE]
-.       \}
-.\" Set up TOC title style
-.       TOC_TITLE_STYLE FONT R SIZE +0 INDENT 0
-.\" Set up captions, labels, sources
-.       LABELS ALL FONT B AUTOLEAD 2
-.       LABELS EQN FONT R QUAD RIGHT
-.       CAPTIONS ALL AUTOLEAD 2
-.       CAPTIONS EQN QUAD CENTER
-.       SOURCES TBL AUTOLEAD 2
-.    \}
-.END
-\#
-\# PRINTSTYLE TYPEWRITE control.
-\#
-.MAC TYPEWRITER_FAMILY END
-.    ds $TYPEWRITER_FAM \\$1
-.END
-\#
-.ALIAS TYPEWRITER_FAM TYPEWRITER_FAMILY
-\#
-.MAC TYPEWRITER_SIZE END
-.    ds $TYPEWRITER_PS \\$1
-.END
-\#
-.MAC TYPEWRITER END
-.    fam \\*[$TYPEWRITER_FAM]
-.    ft  R
-.    ps  \\*[$TYPEWRITER_PS]
-.END
-\#
-\# ITALIC MEANS ITALIC
-\# -------------------
-\# *Argument:
-\#   <none>
-\# *Function:
-\#   Instructs TYPEWRITE to treat italics as italics, whether
-\#   invoked via control lines or inline.
-\# *Notes:
-\#   ITALIC_MEANS_ITALIC and UNDERLINE_ITALIC are mututally exclusive,
-\#   hence invoking the one automatically turns off the other.
-\#
-.MAC ITALIC_MEANS_ITALIC END
-.    if \\n[#PRINT_STYLE]=1 \{\
-.       nr #ITALIC_MEANS_ITALIC 1
-.       rr #UNDERLINE_ITALIC
-.       rm ROM
-.       rm IT
-.       rm PREV
-.       ds ROM  \Ef[R]
-.       ds IT   \Ef[I]
-.       ds PREV \Ef[]
-.    \}
-.END
-\#
-\# UNDERLINE ITALIC
-\# ----------------
-\# *Argument:
-\#   <none>
-\# *Function:
-\#   Instructs TYPEWRITE to underline italics, whether invoked
-\#   via control lines or inline.
-\# *Notes:
-\#   UNDERLINE_ITALIC and ITALIC_MEANS_ITALIC are mututally exclusive,
-\#   hence invoking the one automatically turns off the other.
-\#
-\#   UNDERLINE_ITALIC is the default for TYPEWRITE.
-\#
-.MAC UNDERLINE_ITALIC END
-.    if \\n[#PRINT_STYLE]=1 \{\
-.       nr #UNDERLINE_ITALIC 1
-.       rr #ITALIC_MEANS_ITALIC
-.       rm ROM
-.       rm IT
-.       rm PREV
-.       ds ROM  \E*[ULX]
-.       ds IT   \E*[UL]
-.       ds PREV \E*[ULX]
-.    \}
-.END
-\#
-\# UNDERLINE SLANT
-\# ---------------
-\# *Arguments:
-\#   <none> | <anything>
-\# *Function:
-\#   Instructs TYPEWRITE to underline occurrences of \*[SLANT], or
-\#   turns feature off.
-\# *Notes:
-\#   Users may want \*[SLANT] to mean slant in TYPEWRITE, although
-\#   most of the time, \*[SLANT] most likely means the user wanted
-\#   italic but didn't have it, ergo the need to tell TYPEWRITE to
-\#   treat \*[SLANT] as italic (i.e. underlined).
-\#
-\#   UNDERLINE_SLANT and SLANT_MEANS_SLANT are mututally exclusive,
-\#   hence invoking the one automatically turns off the other.
-\#
-\#   UNDERLINE_SLANT is the default for TYPEWRITE.
-\#
-.MAC UNDERLINE_SLANT END
-.    if \\n[#PRINT_STYLE]=1 \{\
-.       rr #SLANT_MEANS_SLANT
-.       nr #UNDERLINE_SLANT 1
-.       rm SLANT
-.       rm SLANTX
-.       ds SLANT  \ER'#SLANT_ON 1'\E*[UL]
-.       ds SLANTX \ER'#SLANT_ON 0'\E*[ULX]
-.    \}
-.END
-\#
-.MAC SLANT_MEANS_SLANT END
-.    if \\n[#PRINT_STYLE]=1 \{\
-.       rr #UNDERLINE_SLANT
-.       nr #SLANT_MEANS_SLANT 1
-.       rm SLANT
-.       rm SLANTX
-.       ds SLANT  \ER'#SLANT_ON 1'\ES'\En[#DEGREES]'
-.       ds SLANTX \ER'#SLANT_ON 0'\ES'0'
-.    \}
-.END
-\#
-.MAC IGNORE_COLUMNS END
-.    if \\n[#PRINT_STYLE]=1 .nr #NO_COLUMNS 1
-.END
-\#
-\# ====================================================================
-\#
-\# +++COPY STYLE -- DRAFT OR FINAL+++
-\#
-\# COPY STYLE
-\# ----------
-\# *Arguments:
-\#   DRAFT | FINAL
-\# *Function:
-\#   Sets registers that are used to determine what to put
-\#   in the default header, and how to number pages.
-\# *Notes:
-\#   DOCTYPE must come before COPYSTYLE.
-\#
-.MAC COPYSTYLE END
-.    ds $COPY_STYLE \\$1
-.    if '\\*[$COPY_STYLE]'DRAFT' \{\
-.       nr #COPY_STYLE 1
-.       if !d$DRAFT .DRAFT 1
-.    \}
-.    if '\\*[$COPY_STYLE]'FINAL' .nr #COPY_STYLE 2
-.    if !d$CHAPTER_STRING  .CHAPTER_STRING "Chapter"
-.    if !d$DRAFT_STRING    .DRAFT_STRING "Draft"
-.    if !d$REVISION_STRING .REVISION_STRING "Rev."
-.\" Default
-.    if \\n[#DOC_TYPE]=1 \{\
-.       ie \\n[#COPY_STYLE]=1 \{\
-.          ie \\n[#PAGENUM_STYLE_SET] .PAGENUM_STYLE \\*[$PAGENUM_STYLE]
-.          el .PAGENUM_STYLE roman
-.          if \\n[#USER_DEF_HDRFTR_CENTER]=0 \{\
-.             ie \\n[#DRAFT_WITH_PAGENUM] .ds $HDRFTR_CENTER
-.             el \{\
-.                ie '\\*[$REVISION]'' \{\
-.                   ds $HDRFTR_CENTER \
-                    \\*[$DRAFT_STRING]\\*[$DRAFT]
-.                \}
-.                el \{\
-.                   ds $HDRFTR_CENTER \
-                    \\*[$DRAFT_STRING]\\*[$DRAFT], \
-                    \\*[$REVISION_STRING] \\*[$REVISION]
-.                \}
-.             \}
-.          \}
-.       \}
-.       el \{\
-.          ie \\n[#PAGENUM_STYLE_SET] .PAGENUM_STYLE \\*[$PAGENUM_STYLE]
-.          el                         .PAGENUM_STYLE DIGIT
-.          if \\n[#DRAFT_WITH_PAGENUM] .rr #DRAFT_WITH_PAGENUM
-.          if \\n[#USER_DEF_HDRFTR_CENTER]=0 \{\
-.             ds $HDRFTR_CENTER
-.             rr #USER_DEF_HDRFTR_CENTER
-.          \}
-.       \}
-.    \}
-.\" Chapter
-.    if \\n[#DOC_TYPE]=2 \{\
-.\" Copystyle DRAFT
-.       ie \\n[#COPY_STYLE]=1 \{\
-.          ie \\n[#PAGENUM_STYLE_SET] \
-.             PAGENUM_STYLE \\*[$PAGENUM_STYLE]
-.          el \
-.             PAGENUM_STYLE roman
-.          if \\n[#USER_DEF_HDRFTR_CENTER]=0 \{\
-.             ie \\n[#DRAFT_WITH_PAGENUM] \{\
-.                ie '\\*[$CHAPTER]'' \{\
-.                   ie !'\\*[$CHAPTER_TITLE_1]'' \
-.                       ds $HDRFTR_CENTER \\*[$CHAPTER_TITLE]
-.                   el .ds $HDRFTR_CENTER \\*[$CHAPTER_STRING]
-.                \}
-.                el \{\
-.                   ie !'\\*[$CHAPTER_TITLE_1]'' \
-.                       ds $HDRFTR_CENTER \\*[$CHAPTER_TITLE]
-.                   el .ds $HDRFTR_CENTER \\*[$CHAPTER_STRING] \\*[$CHAPTER]
-.                \}
-.             \}
-.             el \{\
-.                ie '\\*[$REVISION]'' \{\
-.                   ie '\\*[$CHAPTER]'' \{\
-.                      ie !'\\*[$CHAPTER_TITLE_1]'' \{\
-.                         ie '\\*[$DRAFT]'' \
-.                            ds $HDRFTR_CENTER \\*[$CHAPTER_TITLE]
-.                         el \{\
-.                            ds $HDRFTR_CENTER \
-                             \\*[$CHAPTER_TITLE], \
-                             \\*[$DRAFT_STRING]\\*[$DRAFT]
-.                         \}
-.                      \}
-.                      el \{\
-.                         ie '\\*[$DRAFT]'' \{\
-.                            ds $HDRFTR_CENTER \
-                             \\*[$CHAPTER_STRING]
-.                         \}
-.                         el \{\
-.                            ds $HDRFTR_CENTER \
-                             \\*[$CHAPTER_STRING], \
-                             \\*[$DRAFT_STRING]\\*[$DRAFT]
-.                         \}
-.                      \}
-.                   \}
-.                   el \{\
-.                      ie !'\\*[$CHAPTER_TITLE_1]'' \{\
-.                         ie '\\*[$DRAFT]'' \
-.                            ds $HDRFTR_CENTER \\*[$CHAPTER_TITLE]
-.                         el \{\
-.                            ds $HDRFTR_CENTER \
-                             \\*[$CHAPTER_TITLE_1], \
-                             \\*[$DRAFT_STRING]\\*[$DRAFT]
-.                         \}
-.                      \}
-.                      el \{\
-.                         ie '\\*[$DRAFT]'' \{\
-.                            ds $HDRFTR_CENTER \
-                             \\*[$CHAPTER_STRING] \\*[$CHAPTER]
-.                         \}
-.                         el \{\
-.                            ds $HDRFTR_CENTER \
-                             \\*[$CHAPTER_STRING] \\*[$CHAPTER], \
-                             \\*[$DRAFT_STRING]\\*[$DRAFT]
-.                         \}
-.                      \}
-.                   \}
-.                \}
-.                el \{\
-.                   ie '\\*[$CHAPTER]'' \{\
-.                      ie !'\\*[$CHAPTER_TITLE_1]'' \{\
-.                         ie '\\*[$DRAFT]'' \{\
-.                            ds $HDRFTR_CENTER \
-                             \\*[$CHAPTER_TITLE], \
-                             \\*[$REVISION_STRING] \\*[$REVISION]
-.                         \}
-.                         el \{\
-.                            ds $HDRFTR_CENTER \
-                             \\*[$CHAPTER_TITLE], \
-                             \\*[$DRAFT_STRING]\\*[$DRAFT], \
-                             \\*[$REVISION_STRING] \\*[$REVISION]
-.                         \}
-.                      \}
-.                      el \{\
-.                         ie '\\*[$DRAFT]'' \{\
-.                            ds $HDRFTR_CENTER \
-                             \\*[$CHAPTER_STRING], \
-                             \\*[$REVISION_STRING] \\*[$REVISION]
-.                         \}
-.                         el \{\
-.                            ds $HDRFTR_CENTER \
-                             \\*[$CHAPTER_STRING], \
-                             \\*[$DRAFT_STRING]\\*[$DRAFT], \
-                             \\*[$REVISION_STRING] \\*[$REVISION]
-.                         \}
-.                      \}
-.                   \}
-.                   el \{\
-.                      ie !'\\*[$CHAPTER_TITLE_1]'' \{\
-.                         ie '\\*[$DRAFT]'' \{\
-.                            ds $HDRFTR_CENTER \
-                             \\*[$CHAPTER_TITLE], \
-                             \\*[$REVISION_STRING] \\*[$REVISION]
-.                         \}
-.                         el \{\
-.                            ds $HDRFTR_CENTER \
-                             \\*[$CHAPTER_TITLE], \
-                             \\*[$DRAFT_STRING]\\*[$DRAFT], \
-                             \\*[$REVISION_STRING] \\*[$REVISION]
-.                         \}
-.                      \}
-.                      el \{\
-.                         ie '\\*[$DRAFT]'' \{\
-.                            ds $HDRFTR_CENTER \
-                             \\*[$CHAPTER_STRING] \\*[$CHAPTER], \
-                             \\*[$REVISION_STRING] \\*[$REVISION]
-.                         \}
-.                         el \{\
-.                            ds $HDRFTR_CENTER \
-                             \\*[$CHAPTER_STRING] \\*[$CHAPTER], \
-                             \\*[$DRAFT_STRING]\\*[$DRAFT], \
-                             \\*[$REVISION_STRING] \\*[$REVISION]
-.                         \}
-.                      \}
-.                   \}
-.                \}
-.             \}
-.          \}
-.       \}
-.\" Copystyle FINAL
-.       el \{\
-.          if \\n[#DRAFT_WITH_PAGENUM] .rr #DRAFT_WITH_PAGENUM
-.          if \\n[#USER_DEF_HDRFTR_CENTER]=0 \{\
-.             ie \\n[#PAGENUM_STYLE_SET] \
-.                PAGENUM_STYLE \\*[$PAGENUM_STYLE]
-.             el .PAGENUM_STYLE DIGIT
-.             ie '\\*[$CHAPTER]'' \{\
-.                ie !'\\*[$CHAPTER_TITLE_1]'' \
-.                   ds $HDRFTR_CENTER \\*[$CHAPTER_TITLE]
-.                el \
-.                   ds $HDRFTR_CENTER \\*[$CHAPTER_STRING]
-.             \}
-.             el \{\
-.                ie !'\\*[$CHAPTER_TITLE_1]'' \
-.                   ds $HDRFTR_CENTER \\*[$CHAPTER_TITLE]
-.                el \
-.                   ds $HDRFTR_CENTER \\*[$CHAPTER_STRING] \\*[$CHAPTER]
-.             \}
-.          \}
-.       \}
-.    \}
-.\" Named
-.    if \\n[#DOC_TYPE]=3 \{\
-.       ie \\n[#COPY_STYLE]=1 \{\
-.          ie \\n[#PAGENUM_STYLE_SET] .PAGENUM_STYLE \\*[$PAGENUM_STYLE]
-.          el                         .PAGENUM_STYLE roman
-.          ie \\n[#DRAFT_WITH_PAGENUM] \
-.             ds $HDRFTR_CENTER \\*[$DOC_TYPE]
-.          el \{\
-.             if \\n[#USER_DEF_HDRFTR_CENTER]=0 \{\
-.                ie '\\*[$REVISION]'' \{\
-.                   ie '\\*[$DRAFT]'' \
-.                      ds $HDRFTR_CENTER \\*[$DOC_TYPE]
-.                   el \{\
-.                      ds $HDRFTR_CENTER \
-                       \\*[$DOC_TYPE], \
-                       \\*[$DRAFT_STRING]\\*[$DRAFT]
-.                   \}
-.                \}
-.                el \{\
-.                   ie '\\*[$DRAFT]'' \{\
-.                      ds $HDRFTR_CENTER \
-                       \\*[$DOC_TYPE], \
-                       \\*[$REVISION_STRING] \\*[$REVISION]
-.                   \}
-.                   el \{\
-.                      ds $HDRFTR_CENTER \
-                       \\*[$DOC_TYPE], \
-                       \\*[$DRAFT_STRING]\\*[$DRAFT], \
-                       \\*[$REVISION_STRING] \\*[$REVISION]
-.                   \}
-.                \}
-.             \}
-.          \}
-.       \}
-.       el \{\
-.          if \\n[#DRAFT_WITH_PAGENUM] .rr #DRAFT_WITH_PAGENUM
-.          if \\n[#USER_DEF_HDRFTR_CENTER]=0 \{\
-.             ie \\n[#PAGENUM_STYLE_SET] .PAGENUM_STYLE \\*[$PAGENUM_STYLE]
-.             el .PAGENUM_STYLE DIGIT
-.             ds $HDRFTR_CENTER \\*[$DOC_TYPE]
-.          \}
-.       \}
-.    \}
-.END
-\#
-\# ====================================================================
-\#
-\# +++COLLECT DOC INFO -- STRINGS AND REGISTERS FOR REFERENCE MACROS+++
-\#
-\# *Arguments:
-\#   various string/register arguments
-\# *Function:
-\#   Collect information about documents.
-\#
-.MAC DOCTITLE END
-.    rr #DOCTITLE_NUM
-.    nr #DOCTITLE_NUM 0 1
-.    while \\n[#NUM_ARGS]>\\n[#DOCTITLE_NUM] \{\
-.       ds $DOC_TITLE_\\n+[#DOCTITLE_NUM] \\$\\n[#DOCTITLE_NUM]
-.    \}
-.    ds $DOC_TITLE \\$*
-.    PDF_TITLE \\*[$DOC_TITLE]
-.END
-\#
-.MAC TITLE END \"Document title
-.    ie \\n[#NUM_ARGS]=0 \{\
-.       if \\n[#TITLE_NUM] \{\
-.          nr #ITEM 0 1
-.          while \\n[#TITLE_NUM]>\\n[#ITEM] \{\
-.             rm $TITLE_\\n+[#ITEM]
-.          \}
-.          rr #TITLE_NUM
-.       \}
-.    \}
-.    el \{\
-.       nr #TITLE_NUM 0 1
-.       while \\n[#NUM_ARGS]>\\n[#TITLE_NUM] \{\
-.          ds $TITLE_\\n+[#TITLE_NUM] \\$\\n[#TITLE_NUM]
-.       \}
-.       ds $TITLE \\$*
-.    \}
-.END
-\#
-.MAC SUBTITLE END \"Document sub-title
-.    ie \\n[#NUM_ARGS]=0 \{\
-.       if \\n[#SUBTITLE_NUM] \{\
-.          nr #ITEM 0 1
-.          while \\n[#SUBTITLE_NUM]>\\n[#ITEM] \{\
-.             rm $SUBTITLE_\\n+[#ITEM]
-.          \}
-.          rr #SUBTITLE_NUM
-.          rm $SUBTITLE
-.       \}
-.    \}
-.    el \{\
-.       if '\\$1'DOC_COVER' \{\
-.          shift
-.          nr #SUBTITLE_DOC_COVER_NUM 0 1
-.          while \\n[#NUM_ARGS]>\\n[#SUBTITLE_DOC_COVER_NUM] \{\
-.              ds $SUBTITLE_DOC_COVER_\\n+[#SUBTITLE_DOC_COVER_NUM] \
-\\$\\n[#SUBTITLE_DOC_COVER_NUM]
-.          \}
-.          return
-.       \}
-.       if '\\$1'COVER' \{\
-.          shift
-.          nr #SUBTITLE_COVER_NUM 0 1
-.          while \\n[#NUM_ARGS]>\\n[#SUBTITLE_COVER_NUM] \{\
-.              ds $SUBTITLE_COVER_\\n+[#SUBTITLE_COVER_NUM] \
-\\$\\n[#SUBTITLE_COVER_NUM]
-.          \}
-.          return
-.       \}
-.       nr #SUBTITLE_NUM 0 1
-.       while \\n[#NUM_ARGS]>\\n[#SUBTITLE_NUM] \{\
-.          ds $SUBTITLE_\\n+[#SUBTITLE_NUM] \\$\\n[#SUBTITLE_NUM]
-.       \}
-.          ds $SUBTITLE \\$*
-.    \}
-.END
-\#
-.MAC CHAPTER END \"If document is a chapter, the chapter number
-.    nr #CHAPTER_CALLED 1
-.    ds $CHAPTER \\$1
-.    if r #CH_NUM \
-.       if \B'\\*[$CHAPTER]' .nr #CH_NUM \\*[$CHAPTER]
-.END
-\#
-.MAC CHAPTER_TITLE END \" This defines what comes after Chapter #
-.    ie \\n[#NUM_ARGS]=0 \{\
-.       if \\n[#CHAPTER_TITLE_NUM] \{\
-.          nr #ITEM 0 1
-.          while \\n[#CHAPTER_TITLE_NUM]>\\n[#ITEM] \{\
-.             rm $CHAPTER_TITLE_\\n+[#ITEM]
-.          \}
-.          rr #CHAPTER_TITLE_NUM
-.          rm $CHAPTER_TITLE
-.       \}
-.    \}
-.    el \{\
-.       rr #CHAPTER_TITLE_NUM
-.       nr #CHAPTER_TITLE_NUM 0 1
-.       while \\n[#NUM_ARGS]>\\n[#CHAPTER_TITLE_NUM] \{\
-.          ds $CHAPTER_TITLE_\\n+[#CHAPTER_TITLE_NUM] \
-\\$\\n[#CHAPTER_TITLE_NUM]
-.       \}
-.       ds $CHAPTER_TITLE \\$*
-.    \}
-.END
-\#
-.MAC DRAFT END \"Draft number
-.    ie '\\$1'' .ds $DRAFT
-.    el .ds $DRAFT " \\$1
-.END
-\#
-.MAC REVISION END \"Revision number
-.    ds $REVISION \\$1
-.END
-\#
-.MAC DRAFT_WITH_PAGENUMBER END \"Attach draft/revision strings to page number
-.    nr #DRAFT_WITH_PAGENUM 1
-.END
-\#
-.MAC AUTHOR END \"Author.  Enclose all args fully in double quotes.
-.    if '\\$1'DOC_COVER' \{\
-.       shift
-.       nr #AUTHOR_DOCCOVER_NUM 0 1
-.       while \\n[#NUM_ARGS]>\\n[#AUTHOR_DOCCOVER_NUM] \{\
-.           ds $AUTHOR_DOCCOVER_\\n+[#AUTHOR_DOCCOVER_NUM] \
-\\$\\n[#AUTHOR_DOCCOVER_NUM]
-.       \}
-.       return
-.    \}
-.    if '\\$1'COVER' \{\
-.       shift
-.       nr #AUTHOR_COVER_NUM 0 1
-.           while \\n[#NUM_ARGS]>\\n[#AUTHOR_COVER_NUM] \{\
-.              ds $AUTHOR_COVER_\\n+[#AUTHOR_COVER_NUM] \\$\\n[#AUTHOR_COVER_NUM]
-.           \}
-.       return
-.    \}
-.    nr #AUTHOR_NUM 0 1
-.    rm $AUTHORS
-.    while \\n[#NUM_ARGS]>\\n[#AUTHOR_NUM] \{\
-.       ds $AUTHOR_\\n+[#AUTHOR_NUM] \\$\\n[#AUTHOR_NUM]
-.       as $AUTHORS \\*[$AUTHOR_\\n[#AUTHOR_NUM]], \"
-.    \}
-.    ds $AUTHOR \\*[$AUTHOR_1]
-.    substring $AUTHORS 0 -2
-.    ds PDF_AUTHORS \\*[$AUTHORS]
-.    pdfmomclean PDF_AUTHORS
-.    nop \!x X ps:exec [/Author (\\*[PDF_AUTHORS]) /DOCINFO pdfmark
-.END
-\#
-.ALIAS EDITOR AUTHOR
-\#
-.MAC COPYRIGHT END          \"For use on cover pages only
-.   ie \\n[#NUM_ARGS]=1 \{\
-.       ds $COPYRIGHT \[co]\\$1
-.       rm $COPYRIGHT_DOCCOVER
-.       rm $COPYRIGHT_COVER
-.    \}
-.    el \{\
-.       if '\\$1'DOC_COVER' .ds $COPYRIGHT_DOCCOVER \[co]\\$2
-.       if '\\$1'COVER'     .ds $COPYRIGHT_COVER \[co]\\$2
-.    \}
-.END
-\#
-.MAC MISC END \"For use on cover pages only; enclose all args in double quotes
-.    ie \\n[#NUM_ARGS]=0 \{\
-.       if \\n[#MISC_NUM] \{\
-.          nr #ITEM 0 1
-.          while \\n[#MISC_NUM]>\\n[#ITEM] \{\
-.             rm $MISC_\\n+[#ITEM]
-.          \}
-.          rr #MISC_NUM
-.          rr #NUM_MISCS
-.       \}
-.       if \\n[#MISC_DOC_COVER_NUM] \{\
-.          nr #ITEM 0 1
-.          while \\n[#MISC_DOC_COVER_NUM]>\\n[#ITEM] \{\
-.             rm $MISC_DOC_COVER_\\n+[#ITEM]
-.          \}
-.          rr #MISC_DOC_COVER_NUM
-.          rr #NUM_MISCS
-.       \}
-.       if \\n[#MISC_COVER_NUM] \{\
-.          nr #ITEM 0 1
-.          while \\n[#MISC_COVER_NUM]>\\n[#ITEM] \{\
-.             rm $MISC_COVER_\\n+[#ITEM]
-.          \}
-.          rr #MISC_COVER_NUM
-.          rr #NUM_MISCS
-.       \}
-.    \}
-.    el \{\
-.       if !'\\$1'DOC_COVER' \{\
-.         if !'\\$1'COVER' .nr #NEITHER 1
-.       \}
-.       if !'\\$1'COVER' \{\
-.          if !'\\$1'DOC_COVER' .nr #NEITHER 1
-.       \}
-.       if '\\$1'DOC_COVER' \{\
-.          shift
-.          nr #MISC_DOC_COVER_NUM 0 1
-.          while \\n[#NUM_ARGS]>\\n[#MISC_DOC_COVER_NUM] \{\
-.             ds $MISC_DOC_COVER_\\n+[#MISC_DOC_COVER_NUM] \
-\\$[\\n[#MISC_DOC_COVER_NUM]]
-.          \}
-.          nr #NUM_MISCS_DOCCOVER \\n[#NUM_ARGS]
-.       \}
-.       if '\\$1'COVER' \{\
-.          shift
-.          nr #MISC_COVER_NUM 0 1
-.          while \\n[#NUM_ARGS]>\\n[#MISC_COVER_NUM] \{\
-.             ds $MISC_COVER_\\n+[#MISC_COVER_NUM] \\$[\\n[#MISC_COVER_NUM]]
-.          \}
-.          nr #NUM_MISCS_COVER \\n[#NUM_ARGS]
-.       \}
-.       if \\n[#NEITHER]=1 \{\
-.          nr #MISC_NUM 0 1
-.          while \\n[#NUM_ARGS]>\\n[#MISC_NUM] \{\
-.             ds $MISC_\\n+[#MISC_NUM] \\$[\\n[#MISC_NUM]]
-.          \}
-.          nr #NUM_MISCS \\n[#NUM_ARGS]
-.          rr #NEITHER
-.       \}
-.   \}
-.END
-\#
-.MAC PAGENUMBER END \"Page # that appears on page one.
-.    nr #n%_AT_PAGENUM_SET \\n%
-.    nr #PAGE_NUM_ADJ \\$1-\\n[#n%_AT_PAGENUM_SET]
-.    rr #n%_AT_PAGENUM_SET
-.    nr #PAGE_NUM_SET 1
-.END
-\#
-\# ====================================================================
-\#
-\# +++TYPE OF DOCUMENT+++
-\#
-\# DOCUMENT TYPE
-\# -------------
-\# *Argument:
-\#   DEFAULT | CHAPTER | NAMED "<whatever> | LETTER
-\# *Function:
-\#   Creates strings and sets registers for document types.
-\# *Notes:
-\#   Number registers: DEFAULT=1, CHAPTER=2, NAMED=3, LETTER=4
-\#
-.MAC DOCTYPE END
-.    if '\\$1'DEFAULT' .nr #DOC_TYPE 1
-.    if '\\$1'CHAPTER' .nr #DOC_TYPE 2
-.    if '\\$1'NAMED' \{\
-.       ds $DOC_TYPE \\$2
-.       nr #DOC_TYPE 3
-.    \}
-.    if '\\$1'LETTER' \{\
-.       nr #DOC_TYPE 4
-.       L_MARGIN 1.125i
-.       R_MARGIN 1.125i
-.       ps 12
-.       vs 13.5
-.       nr #FOOTER_ADJ \\n[.v]
-.       DOCHEADER OFF
-.       PARA_INDENT 3m
-.       INDENT_FIRST_PARAS
-.       PARA_SPACE
-.       ds $SUITE \En[#SUITE]
-.       HEADER_MARGIN 3P+6p
-.       HEADER_GAP 3P
-.       FOOTERS
-.       FOOTER_RULE OFF
-.       FOOTER_LEFT ""
-.       FOOTER_CENTER ""
-.       FOOTER_RIGHT_SIZE +0
-.       FOOTER_RIGHT "\&.../\E*[$SUITE]
-.       FOOTER_ON_FIRST_PAGE
-.       em ALL_DONE
-.    \}
-.END
-\#
-\# +++LETTER MACROS+++
-\#
-\# First, create a register to hold incrementing numbers to be
-\# appended to LETTERHEAD.
-\#
-.nr #FIELD 0 1
-\#
-\# DATE
-\# ----
-\# *Arguments:
-\#   <none>
-\# *Function:
-\#   Stores date (entered on the line after .DATE) in diversion
-\#   LETTERHEAD<n>
-\#
-.MAC DATE END
-.    if !'\\n[.z]'' .di
-.    di LETTERHEAD\\n+[#FIELD]
-.    ie \\n[#FIELD]=1 \{\
-.       nr #DATE_FIRST 1
-.       RIGHT
-.    \}
-.    el .LEFT
-.END
-\#
-\# TO
-\# --
-\# *Arguments:
-\#   <none>
-\# *Function:
-\#   Stores addressee address (entered on the line after .TO) in
-\#   diversion LETTERHEAD<n>
-\#
-.MAC TO END
-.    if !'\\n[.z]'' .di
-.    di LETTERHEAD\\n+[#FIELD]
-.    LEFT
-.END
-\#
-\# FROM
-\# ----
-\# *Arguments:
-\#   <none>
-\# *Function:
-\#   Stores addresser address (entered on the line after .FROM) in
-\#   diversion LETTERHEAD<n>
-\#
-.MAC FROM END
-.    if !'\\n[.z]'' .di
-.    di LETTERHEAD\\n+[#FIELD]
-.    LEFT
-.END
-\#
-\# GREETING
-\# --------
-\# *Arguments:
-\#   <none>
-\# *Function:
-\#   Stores greeting (entered on the line after .GREETING) in
-\#   diversion LETTERHEAD<n>
-\#
-.MAC GREETING END
-.    if !'\\n[.z]'' .di
-.    di LETTERHEAD\\n+[#FIELD]
-.    LEFT
-.END
-\#
-\# CLOSING
-\# -------
-\# *Arguments:
-\#   <closing string>
-\# *Function:
-\#   Stores greeting in diversion CLOSING.
-\#
-.MAC CLOSING END
-.    if '\\*[$SIG_SPACE]'' .ds $SIG_SPACE 3v
-.    ie ( (2v+\\*[$SIG_SPACE]) > \\n[.t] ) \{\
-.       ch HEADER
-.       ch FOOTER
-.       br
-.       tm1 "[mom]: Insufficient room for \\$0 and signature line.
-.       ab Aborting '\\n[.F]'.
-.    \}
-.    el .br
-.    nr #CLOSING 1
-.    di CLOSING_TEXT
-.END
-\#
-\# CLOSING INDENT
-\# --------------
-\# *Argument:
-\#   <amount to indent closing from left margin>
-\# *Function:
-\#   Defines string $CLOSE_INDENT for use in macro, ALL_DONE.
-\#
-.MAC CLOSING_INDENT END
-.    ds $CLOSE_INDENT \\$1
-.END
-\#
-\# SIGNATURE_SPACE
-\# ---------------
-\# *Argument:
-\#   <amount of space to leave for signature>
-\# *Function:
-\#   Defines string $SIG_SPACE for use in macro, ALL_DONE.
-\#
-.MAC SIGNATURE_SPACE END
-.    ds $SIG_SPACE \\$1
-.END
-\#
-\# NO SUITE
-\# --------
-\# *Arguments:
-\#   <none>
-\# *Function:
-\#   Redefines $FOOTER_RIGHT to blank so that a suite number doesn't
-\#   appear at the bottom of letter pages.
-\#
-.MAC NO_SUITE END
-.    FOOTER_RIGHT ""
-.END
-\#
-\# ====================================================================
-\#
-\# +++DEFAULTS+++
-\#
-\# TYPE-STYLE CONTROL MACROS
-\# -------------------------
-\# The control macros for family, font, size, quad and color are here
-\# grouped together.  Each (e.g. _FAMILY or _FONT) tests for a calling
-\# alias before performing the action(s) appropriate to the calling
-\# macro.  Defaults for all these guys are set in DEFAULTS, and listed
-\# in the "Control Macros" section of the documentation pertinent to
-\# the macro whose style is to be changed.
-\#
-.MAC _FAMILY END
-.    if '\\$0'AUTHOR_FAMILY' \
-.       ds $AUTHOR_FAM \\$1
-.    if '\\$0'BIBLIOGRAPHY_FAMILY' \
-.       ds $BIB_FAM \\$1
-.    if '\\$0'BIBLIOGRAPHY_STRING_FAMILY' \
-.       ds $BIB_STRING_FAM \\$1
-.    if '\\$0'BLOCKQUOTE_FAMILY' \
-.       ds $BQUOTE_FAM \\$1
-.    if '\\$0'CITATION_FAMILY' \
-.       ds $BQUOTE_FAM \\$1
-.    if '\\$0'CITE_FAMILY' \
-.       ds $BQUOTE_FAM \\$1
-.    if '\\$0'CHAPTER_TITLE_FAMILY' \
-.       ds $CHAPTER_TITLE_FAM \\$1
-.    if '\\$0'COVER_AUTHOR_FAMILY' \
-.       ds $COVER_AUTHOR_FAM \\$1
-.    if '\\$0'COVER_CHAPTER_TITLE_FAMILY' \
-.       ds $COVER_CHAPTER_TITLE_FAM \\$1
-.    if '\\$0'COVER_COPYRIGHT_FAMILY' \
-.       ds $COVER_COPYRIGHT_FAM \\$1
-.    if '\\$0'COVER_DOCTYPE_FAMILY' \
-.       ds $COVER_DOCTYPE_FAM \\$1
-.    if '\\$0'COVER_FAMILY' \
-.       ds $COVER_FAM \\$1
-.    if '\\$0'COVER_MISC_FAMILY' \
-.       ds $COVER_MISC_FAM \\$1
-.    if '\\$0'COVER_SUBTITLE_FAMILY' \
-.       ds $COVER_SUBTITLE_FAM \\$1
-.    if '\\$0'COVER_TITLE_FAMILY' \
-.       ds $COVER_TITLE_FAM \\$1
-.    if '\\$0'DOC_COVER_AUTHOR_FAMILY' \
-.       ds $DOC_COVER_AUTHOR_FAM \\$1
-.    if '\\$0'DOC_COVER_CHAPTER_TITLE_FAMILY' \
-.       ds $DOC_COVER_CHAPTER_TITLE_FAM \\$1
-.    if '\\$0'DOC_COVER_COPYRIGHT_FAMILY' \
-.       ds $DOC_COVER_COPYRIGHT_FAM \\$1
-.    if '\\$0'DOC_COVER_DOCTYPE_FAMILY' \
-.       ds $DOC_COVER_DOCTYPE_FAM \\$1
-.    if '\\$0'DOC_COVER_FAMILY' \
-.       ds $DOC_COVER_FAM \\$1
-.    if '\\$0'DOC_COVER_MISC_FAMILY' \
-.       ds $DOC_COVER_MISC_FAM \\$1
-.    if '\\$0'DOC_COVER_SUBTITLE_FAMILY' \
-.       ds $DOC_COVER_SUBTITLE_FAM \\$1
-.    if '\\$0'DOC_COVER_TITLE_FAMILY' \
-.       ds $DOC_COVER_TITLE_FAM \\$1
-.    if '\\$0'DOCHEADER_FAMILY' \
-.       ds $DOCHEADER_FAM \\$1
-.    if '\\$0'DOCTYPE_FAMILY' \
-.       ds $DOCTYPE_FAM \\$1
-.    if '\\$0'ENDNOTE_FAMILY' \
-.       ds $EN_FAM \\$1
-.    if '\\$0'ENDNOTE_NUMBER_FAMILY' \
-.       ds $EN_NUMBER_FAM \\$1
-.    if '\\$0'ENDNOTE_LINENUMBER_FAMILY' \
-.       ds $EN_LN_FAM \\$1
-.    if '\\$0'ENDNOTE_STRING_FAMILY' \
-.       ds $EN_STRING_FAM \\$1
-.    if '\\$0'ENDNOTE_TITLE_FAMILY' \
-.       ds $EN_TITLE_FAM \\$1
-.    if '\\$0'EPIGRAPH_FAMILY' \
-.       ds $EPI_FAM \\$1
-.    if '\\$0'FOOTNOTE_FAMILY' \
-.       ds $FN_FAM \\$1
-.    if '\\$0'HDRFTR_CENTER_FAMILY' \
-.       ds $HDRFTR_CENTER_FAM \\$1
-.    if '\\$0'HDRFTR_FAMILY' \{\
-.       ds $HDRFTR_FAM        \\$1
-.       ds $HDRFTR_LEFT_FAM   \\$1
-.       ds $HDRFTR_CENTER_FAM \\$1
-.       ds $HDRFTR_RIGHT_FAM  \\$1
-.    \}
-.    if '\\$0'HDRFTR_LEFT_FAMILY' \
-.       ds $HDRFTR_LEFT_FAM \\$1
-.    if '\\$0'HDRFTR_RIGHT_FAMILY' \
-.       ds $HDRFTR_RIGHT_FAM \\$1
-.    if '\\$0'LINENUMBER_FAMILY' \
-.       ds $LN_FAM \\$1
-.    if '\\$0'PAGENUM_FAMILY' \
-.       ds $PAGE_NUM_FAM \\$1
-.    if '\\$0'QUOTE_FAMILY' \
-.       ds $QUOTE_FAM \\$1
-.    if '\\$0'SUBTITLE_FAMILY' \
-.       ds $SUBTITLE_FAM \\$1
-.    if '\\$0'TITLE_FAMILY' \
-.       ds $TITLE_FAM \\$1
-.    if '\\$0'TOC_FAMILY' \
-.       ds $TOC_FAM \\$1
-.    if '\\$0'TOC_FAM' \
-.       ds $TOC_FAM \\$1
-.    if '\\$0'TOC_HEADER_FAMILY' \
-.       ds $TOC_HEADER_FAM \\$1
-.    if '\\$0'TOC_PN_FAMILY' \
-.       ds $TOC_PN_FAM \\$1
-.END
-\#
-.MAC _FONT END
-.    if '\\$0'AUTHOR_FONT' \
-.       ds $AUTHOR_FT \\$1
-.    if '\\$0'BIBLIOGRAPHY_FONT' \
-.       ds $BIB_FT \\$1
-.    if '\\$0'BIBLIOGRAPHY_STRING_FONT' \
-.       ds $BIB_STRING_FT \\$1
-.    if '\\$0'BLOCKQUOTE_FONT' \
-.       ds $BQUOTE_FT \\$1
-.    if '\\$0'CITATION_FONT' \
-.       ds $BQUOTE_FT \\$1
-.    if '\\$0'CITE_FONT' \
-.       ds $BQUOTE_FT \\$1
-.    if '\\$0'CHAPTER_TITLE_FONT' \
-.       ds $CHAPTER_TITLE_FT \\$1
-.    if '\\$0'COVER_AUTHOR_FONT' \
-.       ds $COVER_AUTHOR_FT \\$1
-.    if '\\$0'COVER_CHAPTER_TITLE_FONT' \
-.       ds $COVER_CHAPTER_TITLE_FT \\$1
-.    if '\\$0'COVER_COPYRIGHT_FONT' \
-.       ds $COVER_COPYRIGHT_FT \\$1
-.    if '\\$0'COVER_DOCTYPE_FONT' \
-.       ds $COVER_DOCTYPE_FT \\$1
-.    if '\\$0'COVER_MISC_FONT' \
-.       ds $COVER_MISC_FT \\$1
-.    if '\\$0'COVER_SUBTITLE_FONT' \
-.       ds $COVER_SUBTITLE_FT \\$1
-.    if '\\$0'COVER_TITLE_FONT' \
-.       ds $COVER_TITLE_FT \\$1
-.    if '\\$0'DOC_COVER_AUTHOR_FONT' \
-.       ds $DOC_COVER_AUTHOR_FT \\$1
-.    if '\\$0'DOC_COVER_CHAPTER_TITLE_FONT' \
-.       ds $DOC_COVER_CHAPTER_TITLE_FT \\$1
-.    if '\\$0'DOC_COVER_COPYRIGHT_FONT' \
-.       ds $DOC_COVER_COPYRIGHT_FT \\$1
-.    if '\\$0'DOC_COVER_DOCTYPE_FONT' \
-.       ds $DOC_COVER_DOCTYPE_FT \\$1
-.    if '\\$0'DOC_COVER_MISC_FONT' \
-.       ds $DOC_COVER_MISC_FT \\$1
-.    if '\\$0'DOC_COVER_SUBTITLE_FONT' \
-.       ds $DOC_COVER_SUBTITLE_FT \\$1
-.    if '\\$0'DOC_COVER_TITLE_FONT' \
-.       ds $DOC_COVER_TITLE_FT \\$1
-.    if '\\$0'DOCTYPE_FONT' \
-.       ds $DOCTYPE_FT \\$1
-.    if '\\$0'ENDNOTE_FONT' \
-.       ds $EN_FT \\$1
-.    if '\\$0'ENDNOTE_NUMBER_FONT' \
-.       ds $EN_NUMBER_FT \\$1
-.    if '\\$0'ENDNOTE_LINENUMBER_FONT' \
-.       ds $EN_LN_FT \\$1
-.    if '\\$0'ENDNOTE_STRING_FONT' \
-.       ds $EN_STRING_FT \\$1
-.    if '\\$0'ENDNOTE_TITLE_FONT' \
-.       ds $EN_TITLE_FT \\$1
-.    if '\\$0'EPIGRAPH_FONT' \
-.       ds $EPI_FT \\$1
-.    if '\\$0'FOOTNOTE_FONT' \
-.       ds $FN_FT \\$1
-.    if '\\$0'HDRFTR_CENTER_FONT' \
-.       ds $HDRFTR_CENTER_FT \\$1
-.    if '\\$0'HDRFTR_LEFT_FONT' \
-.       ds $HDRFTR_LEFT_FT \\$1
-.    if '\\$0'HDRFTR_RIGHT_FONT' \
-.       ds $HDRFTR_RIGHT_FT \\$1
-.    if '\\$0'LINENUMBER_FONT' \
-.       ds $LN_FT \\$1
-.    if '\\$0'PAGENUM_FONT' \
-.       ds $PAGE_NUM_FT \\$1
-.    if '\\$0'QUOTE_FONT' \
-.       ds $QUOTE_FT \\$1
-.    if '\\$0'SUBTITLE_FONT' \
-.       ds $SUBTITLE_FT \\$1
-.    if '\\$0'TITLE_FONT' \
-.       ds $TITLE_FT \\$1
-.    if '\\$0'TOC_HEADER_FONT' \
-.       ds $TOC_HEADER_FT \\$1
-.    if '\\$0'TOC_PN_FONT' \
-.       ds $TOC_PN_FT \\$1
-.END
-\#
-.MAC _SIZE END
-.    if '\\$0'AUTHOR_SIZE' \
-.       ds $AUTHOR_SIZE_CHANGE \\$1
-.    if '\\$0'BIBLIOGRAPHY_STRING_SIZE' \
-.       ds $BIB_STRING_SIZE_CHANGE \\$1
-.    if '\\$0'BLOCKQUOTE_SIZE' \
-.       ds $BQUOTE_SIZE_CHANGE \\$1
-.    if '\\$0'CITATION_SIZE' \
-.       ds $BQUOTE_SIZE_CHANGE \\$1
-.    if '\\$0'CITE_SIZE' \
-.       ds $BQUOTE_SIZE_CHANGE \\$1
-.    if '\\$0'CHAPTER_TITLE_SIZE' \
-.       ds $CHAPTER_TITLE_SIZE_CHANGE \\$1
-.    if '\\$0'COVER_AUTHOR_SIZE' \
-.       ds $COVER_AUTHOR_SIZE_CHANGE \\$1
-.    if '\\$0'COVER_CHAPTER_TITLE_SIZE' \
-.       ds $COVER_CHAPTER_TITLE_SIZE_CHANGE \\$1
-.    if '\\$0'COVER_COPYRIGHT_SIZE' \
-.       ds $COVER_COPYRIGHT_SIZE_CHANGE \\$1
-.    if '\\$0'COVER_DOCTYPE_SIZE' \
-.       ds $COVER_DOCTYPE_SIZE_CHANGE \\$1
-.    if '\\$0'COVER_MISC_SIZE' \
-.       ds $COVER_MISC_SIZE_CHANGE \\$1
-.    if '\\$0'COVER_SUBTITLE_SIZE' \
-.       ds $COVER_SUBTITLE_SIZE_CHANGE \\$1
-.    if '\\$0'COVER_TITLE_SIZE' \
-.       ds $COVER_TITLE_SIZE_CHANGE \\$1
-.    if '\\$0'DOC_COVER_AUTHOR_SIZE' \
-.       ds $DOC_COVER_AUTHOR_SIZE_CHANGE \\$1
-.    if '\\$0'DOC_COVER_CHAPTER_TITLE_SIZE' \
-.       ds $DOC_COVER_CHAPTER_TITLE_SIZE_CHANGE \\$1
-.    if '\\$0'DOC_COVER_COPYRIGHT_SIZE' \
-.       ds $DOC_COVER_COPYRIGHT_SIZE_CHANGE \\$1
-.    if '\\$0'DOC_COVER_DOCTYPE_SIZE' \
-.       ds $DOC_COVER_DOCTYPE_SIZE_CHANGE \\$1
-.    if '\\$0'DOC_COVER_MISC_SIZE' \
-.       ds $DOC_COVER_MISC_SIZE_CHANGE \\$1
-.    if '\\$0'DOC_COVER_SUBTITLE_SIZE' \
-.       ds $DOC_COVER_SUBTITLE_SIZE_CHANGE \\$1
-.    if '\\$0'DOC_COVER_TITLE_SIZE' \
-.       ds $DOC_COVER_TITLE_SIZE_CHANGE \\$1
-.    if '\\$0'DOCTYPE_SIZE' \
-.       ds $DOCTYPE_SIZE_CHANGE \\$1
-.    if '\\$0'ENDNOTE_NUMBER_SIZE' \
-.       ds $EN_NUMBER_SIZE_CHANGE \\$1
-.    if '\\$0'ENDNOTE_LINENUMBER_SIZE' \
-.       ds $EN_LN_SIZE_CHANGE \\$1
-.    if '\\$0'ENDNOTE_STRING_SIZE' \
-.       ds $EN_STRING_SIZE_CHANGE \\$1
-.    if '\\$0'ENDNOTE_TITLE_SIZE' \
-.       ds $EN_TITLE_SIZE_CHANGE \\$1
-.    if '\\$0'EPIGRAPH_SIZE' \
-.       ds $EPI_SIZE_CHANGE \\$1
-.    if '\\$0'FOOTNOTE_SIZE' \
-.       ds $FN_SIZE_CHANGE \\$1
-.    if '\\$0'HDRFTR_CENTER_SIZE' \
-.       ds $HDRFTR_CENTER_SIZE_CHANGE \\$1
-.    if '\\$0'HDRFTR_LEFT_SIZE' \
-.       ds $HDRFTR_LEFT_SIZE_CHANGE \\$1
-.    if '\\$0'HDRFTR_RIGHT_SIZE' \
-.       ds $HDRFTR_RIGHT_SIZE_CHANGE \\$1
-.    if '\\$0'HDRFTR_SIZE' \
-.       ds $HDRFTR_SIZE_CHANGE \\$1
-.    if '\\$0'LINENUMBER_SIZE' \
-.       ds $LN_SIZE_CHANGE \\$1
-.    if '\\$0'PAGENUM_SIZE' \
-.       ds $PAGE_NUM_SIZE_CHANGE \\$1
-.    if '\\$0'QUOTE_SIZE' \
-.       ds $QUOTE_SIZE_CHANGE \\$1
-.    if '\\$0'SUBTITLE_SIZE' \
-.       ds $SUBTITLE_SIZE_CHANGE \\$1
-.    if '\\$0'TITLE_SIZE' \
-.       ds $TITLE_SIZE_CHANGE \\$1
-.    if '\\$0'TOC_HEADER_SIZE' \
-.       ds $TOC_HEADER_SIZE_CHANGE \\$1
-.    if '\\$0'TOC_PN_SIZE' \
-.       ds $TOC_PN_SIZE_CHANGE \\$1
-.END
-\#
-.MAC _COLOR END
-.    if \\n[#PRINT_STYLE]=1 .return
-.    if '\\$0'ATTRIBUTE_COLOR' \{\
-.       nr #ATTRIBUTE_COLOR 1
-.       ds $ATTRIBUTE_COLOR \\$1
-.    \}
-.    if '\\$0'AUTHOR_COLOR' \{\
-.       nr #AUTHOR_COLOR 1
-.       ds $AUTHOR_COLOR \\$1
-.    \}
-.    if '\\$0'BLOCKQUOTE_COLOR' \{\
-.       nr #BQUOTE_COLOR 1
-.       ds $BQUOTE_COLOR \\$1
-.    \}
-.    if '\\$0'CITATION_COLOR' \{\
-.       nr #BQUOTE_COLOR 1
-.       ds $BQUOTE_COLOR \\$1
-.    \}
-.    if '\\$0'CITE_COLOR' \{\
-.       nr #BQUOTE_COLOR 1
-.       ds $BQUOTE_COLOR \\$1
-.    \}
-.    if '\\$0'CHAPTER_TITLE_COLOR' \{\
-.       nr #CHAPTER_TITLE_COLOR 1
-.       ds $CHAPTER_TITLE_COLOR \\$1
-.    \}
-.    if '\\$0'CODE_COLOR' \{\
-.       nr #CODE_COLOR 1
-.       ds $CODE_COLOR \\$1
-.    \}
-.    if '\\$0'COVER_ATTRIBUTE_COLOR' \{\
-.       nr #COVER_ATTRIBUTE_COLOR 1
-.       ds $COVER_ATTRIBUTE_COLOR \\$1
-.    \}
-.    if '\\$0'COVER_AUTHOR_COLOR' \{\
-.       nr #COVER_AUTHOR_COLOR 1
-.       ds $COVER_AUTHOR_COLOR \\$1
-.    \}
-.    if '\\$0'COVER_CHAPTER_TITLE_COLOR' \{\
-.       nr #COVER_CHAPTER_TITLE_COLOR 1
-.       ds $COVER_CHAPTER_TITLE_COLOR \\$1
-.    \}
-.    if '\\$0'COVER_COLOR' \{\
-.       nr #COVER_COLOR 1
-.       ds $COVER_COLOR \\$1
-.    \}
-.    if '\\$0'COVER_COPYRIGHT_COLOR' \{\
-.       nr #COVER_COPYRIGHT_COLOR 1
-.       ds $COVER_COPYRIGHT_COLOR \\$1
-.    \}
-.    if '\\$0'COVER_MISC_COLOR' \{\
-.       nr #COVER_MISC_COLOR 1
-.       ds $COVER_MISC_COLOR \\$1
-.    \}
-.    if '\\$0'COVER_TITLE_COLOR' \{\
-.       nr #COVER_TITLE_COLOR 1
-.       ds $COVER_TITLE_COLOR \\$1
-.    \}
-.    if '\\$0'COVER_SUBTITLE_COLOR' \{\
-.       nr #COVER_SUBTITLE_COLOR 1
-.       ds $COVER_SUBTITLE_COLOR \\$1
-.    \}
-.    if '\\$0'COVER_DOCTYPE_COLOR' \{\
-.       nr #COVER_DOCTYPE_COLOR 1
-.       ds $COVER_DOCTYPE_COLOR \\$1
-.    \}
-.    if '\\$0'DOC_COVER_ATTRIBUTE_COLOR' \{\
-.       nr #DOC_COVER_ATTRIBUTE_COLOR 1
-.       ds $DOC_COVER_ATTRIBUTE_COLOR \\$1
-.    \}
-.    if '\\$0'DOC_COVER_AUTHOR_COLOR' \{\
-.       nr #DOC_COVER_AUTHOR_COLOR 1
-.       ds $DOC_COVER_AUTHOR_COLOR \\$1
-.    \}
-.    if '\\$0'DOC_COVER_CHAPTER_TITLE_COLOR' \{\
-.       nr #DOC_COVER_CHAPTER_TITLE_COLOR 1
-.       ds $DOC_COVER_CHAPTER_TITLE_COLOR \\$1
-.    \}
-.    if '\\$0'DOC_COVER_COLOR' \{\
-.       nr #DOC_COVER_COLOR 1
-.       ds $DOC_COVER_COLOR \\$1
-.    \}
-.    if '\\$0'DOC_COVER_COPYRIGHT_COLOR' \{\
-.       nr #DOC_COVER_COPYRIGHT_COLOR 1
-.       ds $DOC_COVER_COPYRIGHT_COLOR \\$1
-.    \}
-.    if '\\$0'DOC_COVER_MISC_COLOR' \{\
-.       nr #DOC_COVER_MISC_COLOR 1
-.       ds $DOC_COVER_MISC_COLOR \\$1
-.    \}
-.    if '\\$0'DOC_COVER_TITLE_COLOR' \{\
-.       nr #DOC_COVER_TITLE_COLOR 1
-.       ds $DOC_COVER_TITLE_COLOR \\$1
-.    \}
-.    if '\\$0'DOC_COVER_SUBTITLE_COLOR' \{\
-.       nr #DOC_COVER_SUBTITLE_COLOR 1
-.       ds $DOC_COVER_SUBTITLE_COLOR \\$1
-.    \}
-.    if '\\$0'DOC_COVER_DOCTYPE_COLOR' \{\
-.       nr #DOC_COVER_DOCTYPE_COLOR 1
-.       ds $DOC_COVER_DOCTYPE_COLOR \\$1
-.    \}
-.    if '\\$0'DOCHEADER_COLOR' \{\
-.       nr #DOCHEADER_COLOR 1
-.       ds $DOCHEADER_COLOR \\$1
-.    \}
-.    if '\\$0'DOCTYPE_COLOR' \{\
-.       nr #DOCTYPE_COLOR 1
-.       ds $DOCTYPE_COLOR \\$1
-.    \}
-.    if '\\$0'ENDNOTE_STRING_COLOR' \{\
-.       nr #ENDNOTE_STRING_COLOR 1
-.       ds $ENDNOTE_STRING_COLOR \\$1
-.    \}
-.    if '\\$0'EPIGRAPH_COLOR' \{\
-.       nr #EPI_COLOR 1
-.       ds $EPI_COLOR \\$1
-.    \}
-.    if '\\$0'FINIS_COLOR' \{\
-.       nr #FINIS_COLOR 1
-.       ds $FINIS_COLOR \\$1
-.    \}
-.    if '\\$0'FOOTNOTE_COLOR' \{\
-.       nr #FOOTNOTE_COLOR 1
-.       ds $FOOTNOTE_COLOR \\$1
-.    \}
-.    if '\\$0'HDRFTR_CENTER_COLOR' \{\
-.       nr #HDRFTR_CENTER_COLOR 1
-.       ds $HDRFTR_CENTER_COLOR \\$1
-.    \}
-.    if '\\$0'HDRFTR_COLOR' \{\
-.       nr #HDRFTR_COLOR 1
-.       ds $HDRFTR_COLOR \\$1
-.    \}
-.    if '\\$0'HDRFTR_LEFT_COLOR' \{\
-.       nr #HDRFTR_LEFT_COLOR 1
-.       ds $HDRFTR_LEFT_COLOR \\$1
-.    \}
-.    if '\\$0'HDRFTR_RIGHT_COLOR' \{\
-.       nr #HDRFTR_RIGHT_COLOR 1
-.       ds $HDRFTR_RIGHT_COLOR \\$1
-.    \}
-.    if '\\$0'HDRFTR_RULE_COLOR' \{\
-.       nr #HDRFTR_RULE_COLOR 1
-.       ds $HDRFTR_RULE_COLOR \\$1
-.    \}
-.    if '\\$0'LINEBREAK_COLOR' \{\
-.       nr #LINEBREAK_COLOR 1
-.       ds $LINEBREAK_COLOR \\$1
-.    \}
-.    if '\\$0'LINENUMBER_COLOR' \{\
-.       nr #LINENUMBER_COLOR 1
-.       ds $LN_COLOR \\$1
-.    \}
-.    if '\\$0'PAGENUM_COLOR' \{\
-.       nr #PAGE_NUM_COLOR 1
-.       ds $PAGENUM_COLOR \\$1
-.    \}
-.    if '\\$0'QUOTE_COLOR' \{\
-.       nr #QUOTE_COLOR 1
-.       ds $QUOTE_COLOR \\$1
-.    \}
-.    if '\\$0'SECTION_COLOR' \{\
-.       nr #LINEBREAK_COLOR 1
-.       ds $LINEBREAK_COLOR \\$1
-.    \}
-.    if '\\$0'SUBTITLE_COLOR' \{\
-.       nr #SUBTITLE_COLOR 1
-.       ds $SUBTITLE_COLOR \\$1
-.    \}
-.    if '\\$0'TITLE_COLOR' \{\
-.       nr #TITLE_COLOR 1
-.       ds $TITLE_COLOR \\$1
-.    \}
-.END
-\#
-.MAC _QUAD END
-.    if '\\$0'BIBLIOGRAPHY_QUAD' \{\
-.       ds $BIB_QUAD \\$1
-.       if '\\*[$BIB_QUAD]'R' \
-.ab \\$0 at line \\n[.c] must be set to either L or J.  Aborting \\n'[.F]'.
-.       if '\\*[$BIB_QUAD]'C' \
-.ab \\$0 at line \\n[.c] must be set to either L or J.  Aborting \\n'[.F]'.
-.    \}
-.    if '\\$0'BIBLIOGRAPHY_STRING_QUAD' \
-.       ds $BIB_STRING_QUAD \\$1
-.    if '\\$0'BLOCKQUOTE_QUAD' \
-.       ds $BQUOTE_QUAD \\$1
-.    if '\\$0'CITATION_QUAD' \
-.       ds $BQUOTE_QUAD \\$1
-.    if '\\$0'CITE_QUAD' \
-.       ds $BQUOTE_QUAD \\$1
-.    if '\\$0'COVER_COPYRIGHT_QUAD' \
-.       ds $COVER_COPYRIGHT_QUAD \\$1
-.    if '\\$0'COVER_MISC_QUAD' \
-.       ds $COVER_MISC_QUAD \\$1
-.    if '\\$0'COVER_QUAD' \
-.       ds $COVER_QUAD \\$1
-.    if '\\$0'DOC_COVER_COPYRIGHT_QUAD' \
-.       ds $DOC_COVER_COPYRIGHT_QUAD \\$1
-.    if '\\$0'DOC_COVER_MISC_QUAD' \
-.       ds $DOC_COVER_MISC_QUAD \\$1
-.    if '\\$0'DOC_COVER_QUAD' \
-.       ds $DOC_COVER_QUAD \\$1
-.    if '\\$0'DOCHEADER_QUAD' \
-.       ds $DOCHEADER_QUAD \\$1
-.    if '\\$0'DOC_QUAD' \{\
-.       if !\\n[DOCS] .DOC_MACRO_ERROR \\$0
-.        ds $DOC_QUAD \\$1
-.        QUAD \\*[$DOC_QUAD]
-.    \}
-.    if '\\$0'ENDNOTE_QUAD' \{\
-.       ds $EN_QUAD \\$1
-.       if '\\*[$EN_QUAD]'R' \
-.ab \\$0 at line \\n[.c] must be set to either L or J.  Aborting \\n'[.F]'.
-.       if '\\*[$EN_QUAD]'C' \
-.ab \\$0 at line \\n[.c] must be set to either L or J.  Aborting \\n'[.F]'.
-.    \}
-.    if '\\$0'ENDNOTE_STRING_QUAD' \
-.       ds $EN_STRING_QUAD \\$1
-.    if '\\$0'ENDNOTE_TITLE_QUAD' \
-.       ds $EN_TITLE_QUAD \\$1
-.    if '\\$0'EPIGRAPH_QUAD' \
-.       ds $EPI_QUAD \\$1
-.    if '\\$0'FOOTNOTE_QUAD' \
-.       ds $FN_QUAD \\$1
-.    if '\\$0'TOC_HEADER_QUAD' \
-.       ds $TOC_HEADER_QUAD \\$1
-.END
-\#
-\# DEFAULTS
-\# --------
-\# *Arguments:
-\#   <none>
-\# *Function:
-\#   Sets up defaults if no values are entered prior to START.
-\# *Notes:
-\#   The defaults for $CHAPTER_STRING, $DRAFT_STRING, and
-\#   $REVISION_STRING are in the COPYSTYLE macro.
-\#
-.MAC DEFAULTS END
-.    if !d $PAPER .PAPER LETTER
-.    if !\\n[#DOC_TYPE] .DOCTYPE DEFAULT
-.    ie \\n[#PAGENUM_STYLE_SET] .PAGENUM_STYLE \\*[$PAGENUM_STYLE]
-.    el \
-.       if !\\n[#COPY_STYLE]=1 .PAGENUM_STYLE DIGIT
-.    if !\\n[#COPY_STYLE] .COPYSTYLE FINAL
-.    if \\n[#DRAFT_WITH_PAGENUM] .COPYSTYLE \\*[$COPY_STYLE]
-.    if \\n[#DOC_TYPE]=4 \{\
-.       if !\\n[#USER_SET_L_LENGTH] \{\
-.          R_MARGIN \\n[#R_MARGIN]u
-.          rr #USER_SET_L_LENGTH
-.       \}
-.       if \\n[#PRINT_STYLE]=1 .PRINTSTYLE TYPEWRITE SINGLESPACE
-.    \}
-.    if \\n[#COPY_STYLE]=1 \{\
-.       COPYSTYLE DRAFT
-.       PAGENUMBER 1
-.    \}
-.    if !r #DOC_HEADER .DOCHEADER
-.    if !r #HEADERS_ON .HEADERS
-.    if !r #PAGINATE   .PAGINATE
-.\"
-.    if !r #HEADER_MARGIN .HEADER_MARGIN 4P+6p
-.    if !r #HEADER_GAP    .HEADER_GAP 3P
-.\"
-.    if \\n[#FOOTERS_ON] \{\
-.       HEADERS OFF
-.       ie \\n[#PAGINATE] \
-.          if \\n[#PAGE_NUM_POS_SET]=0 .PAGENUM_POS TOP CENTER
-.       el \
-.          if !\\n[#T_MARGIN] .T_MARGIN 6P
-.    \}
-.    if !\\n[#HEADERS_ON] \{\
-.       if !\\n[#FOOTERS_ON] \{\
-.          ie \\n[#PAGE_NUM_V_POS]=1 \{\
-.             HEADER_MARGIN \\n[#HEADER_MARGIN]
-.             HEADER_GAP \\n[#HEADER_GAP]
-.          \}
-.          el .if !r #T_MARGIN .T_MARGIN 6P
-.       \}
-.    \}
-.    if !r #T_MARGIN          .T_MARGIN \\n[#HEADER_MARGIN]+\\n[#HEADER_GAP]
-.    if !r #DOCHEADER_ADVANCE .nr #DOCHEADER_ADVANCE \\n[#T_MARGIN]
-.    if !r #FOOTER_MARGIN     .FOOTER_MARGIN 3P
-.    if !r #FOOTER_GAP        .FOOTER_GAP 3P
-.    if !r #B_MARGIN          .B_MARGIN \\n[#FOOTER_MARGIN]u+\\n[#FOOTER_GAP]u
-.    if (\\n[#FOOTER_MARGIN]+\\n[.v]>=\\n[#B_MARGIN]) \{\
-.       tm1 "[mom]: Your chosen bottom margin for running text is too close to the footer margin.
-.       tm1 "       No footers or bottom-of-page page numbers will be printed.
-.       tm1 "       Please reset B_MARGIN or FOOTER_MARGIN to allow enough space.
-.       tm1 "       If no footers or bottom-of-page page numbers are required,
-.       tm1 "       invoke .FOOTER_MARGIN 0 before .START
-.    \}
-.    if !r #HEADER_RULE_GAP .HEADER_RULE_GAP 4p
-.    if !r #FOOTER_RULE_GAP .FOOTER_RULE_GAP 4p
-.    if !r #HDRFTR_RULE     .HDRFTR_RULE
-.    if !r #PAGE_NUM_SET    .PAGENUMBER 1
-.\" Read in number registers and strings for type parameters
-.    nr #DOC_L_MARGIN \\n[#L_MARGIN]
-.    nr #DOC_L_LENGTH \\n[#L_LENGTH]
-.    nr #DOC_R_MARGIN \\n[#PAGE_WIDTH]-(\\n[#DOC_L_MARGIN]+\\n[#L_LENGTH])
-.    if '\\*[$SAVED_DOC_FAM]'' \{\
-.       ds $DOC_FAM \\*[$FAMILY]
-.       rm $SAVED_DOC_FAM
-.    \}
-.    nr #DOC_PT_SIZE  \\n[#PT_SIZE]
-.\"
-.    if \\n[#TOC]          .nr #DOC_PT_SIZE \\n[#TOC_PS]
-.    if \\n[#ENDNOTES]     .nr #DOC_PT_SIZE \\n[#EN_PS]
-.    if \\n[#BIBLIOGRAPHY] .nr #DOC_PT_SIZE \\n[#BIB_PS]
-.\"
-.    nr #DOC_LEAD     \\n[.v]
-.    nr #DOC@LEAD     \\n[#DOC_LEAD]
-.    if \\n[#AUTO_LEAD] .nr #DOC_AUTOLEAD \\n[#AUTOLEAD_VALUE]
-.\" #SAVED_DOC_LEAD is set in COLLATE
-.    if \\n[#SAVED_DOC_LEAD] \{\
-.       if \
-(\\n[#TOC]=0):\
-(\\n[#LIST_OF_FIGURES]=0):\
-(\\n[#LIST_OF_TABLES]=0):\
-(\\n[#LIST_OF_EQUATIONS]=0) \
-.          if !\\n[#DOC_LEAD]=\\n[#SAVED_DOC_LEAD] .nr #RERUN_TRAPS 1
-.    \}
-.    ie \\n[#ADJ_DOC_LEAD]=1 .
-.    el \
-.       if !\\n[#DOC_LEAD_ADJUST_OFF] .DOC_LEAD_ADJUST
-.    ds $DOC_QUAD \\*[$QUAD_VALUE]
-.    if '\\*[$FONT]''   .FT R
-.    if '\\*[$PP_FT]''  .ds $PP_FT \\*[$FONT]
-.    if !'\\*[$PP_FT]'' .ds $PP_FT \\*[$FONT]
-.\" Counters
-.    nr #PP                0
-.    nr #FN_NUMBER         0 1
-.    nr #EN_NUMBER         0 1
-.    nr #FN_COUNT_FOR_COLS 0 1
-.    nr #DONE_ONCE         0 1
-.\" Enable shimming if user hasn't turned it off
-.    if \\n[#NO_SHIM]=2    .rr #NO_SHIM
-.\" General style defaults for both PRINTSTYLEs
-.    nr #PP_STYLE 1
-.    PARA_INDENT \\n[#PP_INDENT]u
-.    if !d $HDRFTR_FAM               .HDRFTR_FAMILY \\*[$DOC_FAM]
-.    if !d $HDRFTR_SIZE_CHANGE       .HDRFTR_SIZE +0
-.    if !d $PAGE_NUM_FAM             .PAGENUM_FAMILY \\*[$DOC_FAM]
-.    if !d $PAGE_NUM_FT              .PAGENUM_FONT R
-.    if !d $PAGE_NUM_SIZE_CHANGE     .PAGENUM_SIZE +0
-.    if !r #PAGE_NUM_POS_SET         .PAGENUM_POS BOTTOM CENTER
-.    ie \\n[#PAGE_NUM_HYPHENS_SET] \{\
-.       if \\n[#PAGE_NUM_HYPHENS]=0  .PAGENUM_HYPHENS OFF
-.       if \\n[#PAGE_NUM_HYPHENS]=1  .PAGENUM_HYPHENS
-.    \}
-.    el .PAGENUM_HYPHENS
-.    if !r #HDRFTR_RIGHT_CAPS .HDRFTR_RIGHT_CAPS
-.    if \\n[#HDRFTR_RIGHT_CAPS]=0 \
-.       if !d $HDRFTR_RIGHT_SIZE_CHANGE .HDRFTR_RIGHT_SIZE +0
-.    if !d $FN_FAM        .FOOTNOTE_FAMILY \\*[$DOC_FAM]
-.    if !d $FN_FT         .FOOTNOTE_FONT R
-.    if !d $FN_QUAD       .FOOTNOTE_QUAD \\*[$DOC_QUAD]
-.    if !r #FN_RULE       .FOOTNOTE_RULE
-.    if !r #FN_MARKERS    .FOOTNOTE_MARKERS
-.    if \\n[#FN_MARKERS]=1 \{\
-.       if \\n[#FN_REF]=1 \
-.          if !\\n[#FN_MARKER_STYLE] .FOOTNOTE_MARKER_STYLE NUMBER
-.       if !\\n[#FN_MARKER_STYLE] .FOOTNOTE_MARKER_STYLE STAR
-.    \}
-.    if !r #EN_MARKER_STYLE     .ENDNOTE_MARKER_STYLE SUPERSCRIPT
-.    if !d $EN_PN_STYLE         .ENDNOTES_PAGENUM_STYLE digit
-.    if !d $EN_FAM              .ENDNOTE_FAMILY \\*[$DOC_FAM]
-.    if !d $EN_FT               .ENDNOTE_FONT R
-.    if !d $EN_QUAD             .ENDNOTE_QUAD \\*[$DOC_QUAD]
-.    if !d $EN_STRING           .ENDNOTE_STRING "Endnotes"
-.    if !d $EN_STRING_FAM       .ENDNOTE_STRING_FAMILY \\*[$EN_FAM]
-.    if !d $EN_STRING_QUAD      .ENDNOTE_STRING_QUAD CENTER
-.    if !r #EN_STRING_UNDERLINE .nr #EN_STRING_UNDERLINE 2
-.    if !r #EN_STRING_CAPS      .ENDNOTE_STRING_CAPS
-.    if !d $EN_TITLE \{\
-.       ie \\n[#DOC_TYPE]=2 \{\
-.          ie !'\\*[$CHAPTER_TITLE_1]'' \{\
-.             ie '\\*[$CHAPTER]'' .ENDNOTE_TITLE "\\*[$CHAPTER_TITLE]"
-.             el .ENDNOTE_TITLE \
-"\\*[$CHAPTER_STRING] \\*[$CHAPTER]: \\*[$CHAPTER_TITLE]"
-.          \}
-.             el \{\
-.                ie '\\*[$CHAPTER]'' .ENDNOTE_TITLE "\\*[$CHAPTER_STRING]"
-.                el .ENDNOTE_TITLE "\\*[$CHAPTER_STRING] \\*[$CHAPTER]"
-.             \}
-.          \}
-.       el .ENDNOTE_TITLE "\\*[$TITLE]"
-.    \}
-.    if !d $EN_TITLE_FAM          .ENDNOTE_TITLE_FAMILY \\*[$EN_FAM]
-.    if !d $EN_TITLE_QUAD         .ENDNOTE_TITLE_QUAD LEFT
-.    if !r #EN_TITLE_UNDERLINE    .nr #EN_TITLE_UNDERLINE 1
-.    if !d $EN_NUMBER_FAM         .ENDNOTE_NUMBER_FAMILY \\*[$EN_FAM]
-.    if !d $EN_LN_FAM             .ENDNOTE_LINENUMBER_FAMILY \\*[$EN_FAM]
-.    if !r #EN_NUMBERS_ALIGN_LEFT \{\
-.       if !r #EN_NUMBERS_ALIGN_RIGHT \{\
-.          ie !\\n[#EN_MARKER_STYLE]=2 .ENDNOTE_NUMBERS_ALIGN RIGHT 2
-.          el .ENDNOTE_NUMBERS_ALIGN RIGHT 4
-.       \}
-.    \}
-.    if !r #EN_LN_GAP            .ENDNOTE_LINENUMBER_GAP 1m
-.    if !r #EN_ALLOWS_HEADERS    .ENDNOTES_ALLOWS_HEADERS
-.    if !d $BIB_PN_STYLE         .BIBLIOGRAPHY_PAGENUM_STYLE digit
-.    if !d $BIB_FAM              .BIBLIOGRAPHY_FAMILY \\*[$DOC_FAM]
-.    if !d $BIB_FT               .BIBLIOGRAPHY_FONT R
-.    if !d $BIB_QUAD             .BIBLIOGRAPHY_QUAD \\*[$DOC_QUAD]
-.    if !d $BIB_STRING           .BIBLIOGRAPHY_STRING "Bibliography"
-.    if !d $BIB_STRING_FAM       .BIBLIOGRAPHY_STRING_FAMILY \\*[$BIB_FAM]
-.    if !d $BIB_STRING_QUAD      .BIBLIOGRAPHY_STRING_QUAD CENTER
-.    if !r #BIB_STRING_UNDERLINE .nr #BIB_STRING_UNDERLINE 2
-.    if !r #BIB_STRING_CAPS      .BIBLIOGRAPHY_STRING_CAPS
-.    if !d $TOC_HEADER_STRING    .TOC_HEADER_STRING "Contents"
-.    if !d $TOC_HEADER_QUAD      .TOC_HEADER_QUAD LEFT
-.    if !d $TOC_PN_STYLE         .TOC_PAGENUM_STYLE roman
-.    if !r #TOC_PN_PADDING       .TOC_PADDING 3
-.\" Line numbering
-.    if !r #LN_GUTTER      .nr #LN_GUTTER 2
-.    if !r #Q_LN_GUTTER    .nr #Q_LN_GUTTER 2
-.    if !r #BQ_LN_GUTTER   .nr #BQ_LN_GUTTER 2
-.    if !d $LN_FAM         .ds $LN_FAM \\*[$DOC_FAM]
-.    if !d $LN_FT          .ds $LN_FT R
-.    if !d $LN_SIZE_CHANGE .ds $LN_SIZE_CHANGE +0
-.    if !d $LN_COLOR       .ds $LN_COLOR black
-.\" PDF link colour
-.    if !\\n[PDFHREF_COLOR_SET] .PDF_LINK_COLOR 0.0 0.3 0.9
-.\" PDF frame
-.    if !d pdf-img:frame-weight .ds pdf-img:frame-weight .5
-.    if !d pdf-img:frame-color  .ds pdf-img:frame-color  black
-.\" Captions, labels, sources
-.\" All at default doc specs except leading, which is autolead 2
-.   nr label-type-counter 0 1
-.   while \\n+[label-type-counter]<=4 \{\
-.      if \\n[label-type-counter]=1 .ds label-type eqn
-.      if \\n[label-type-counter]=2 .ds label-type pdf-img
-.      if \\n[label-type-counter]=3 .ds label-type pic
-.      if \\n[label-type-counter]=4 .ds label-type tbl
-.      nr spec-type-counter 0 1
-.      while \\n+[spec-type-counter]<=3 \{\
-.         if \\n[spec-type-counter]=1 .ds spec-type label
-.         if \\n[spec-type-counter]=2 .ds spec-type caption
-.         if \\n[spec-type-counter]=3 .ds spec-type source
-.         set-defaults
-.         set-inline-specs
-.      \}
-.   \}
-.\" String defaults for both PRINTSTYLEs
-.    ie \\n[#DOC_TYPE]=1 \{\
-.       ie '\\*[$DOC_TITLE]'' \{\
-.          if \\n[#USER_DEF_HDRFTR_LEFT]=0  .ds $HDRFTR_LEFT \\*[$AUTHOR_1]
-.          if \\n[#USER_DEF_HDRFTR_RIGHT]=0 .ds $HDRFTR_RIGHT \\*[$TITLE]
-.       \}
-.       el \{\
-.          if \\n[#COPY_STYLE]=1             .DRAFT_WITH_PAGENUMBER
-.          if \\n[#USER_DEF_HDRFTR_LEFT]=0   .ds $HDRFTR_LEFT \\*[$AUTHOR_1]
-.          if \\n[#USER_DEF_HDRFTR_CENTER]=0 .ds $HDRFTR_CENTER \\*[$TITLE]
-.          if \\n[#USER_DEF_HDRFTR_RIGHT]=0  .ds $HDRFTR_RIGHT \\*[$DOC_TITLE]
-.       \}
-.    \}
-.    el \{\
-.       if \\n[#USER_DEF_HDRFTR_LEFT]=0  .ds $HDRFTR_LEFT \\*[$AUTHOR_1]
-.       if \\n[#USER_DEF_HDRFTR_RIGHT]=0 .ds $HDRFTR_RIGHT \\*[$TITLE]
-.    \}
-.    if !d $ATTRIBUTE_STRING     .ds $ATTRIBUTE_STRING by
-.    if !d $FINIS_STRING         .FINIS_STRING "End"
-.    if !r #FINIS_STRING_CAPS    .nr #FINIS_STRING_CAPS 1
-.\" Covers
-.    if !r #DOC_COVERS_OFF           .nr #DOC_COVERS 1
-.    if !r #COVERS_OFF               .nr #COVERS 1
-.    if !d $COVER_COPYRIGHT_QUAD     .COVER_COPYRIGHT_QUAD R
-.    if !d $COVER_MISC_QUAD          .COVER_MISC_QUAD L
-.    if !d $DOC_COVER_COPYRIGHT_QUAD .DOC_COVER_COPYRIGHT_QUAD R
-.    if !d $DOC_COVER_MISC_QUAD      .DOC_COVER_MISC_QUAD L
-.    if !r #DOC_COVER_UNDERLINE      .DOC_COVER_UNDERLINE
-.    if !r #COVER_UNDERLINE          .COVER_UNDERLINE
-.\" Defaults for printstyle TYPEWRITE
-.    if \\n[#PRINT_STYLE]=1 \{\
-.       TYPEWRITER
-.       SS DEFAULT
-.       if \\n[#UNDERLINE_QUOTES]=1 .UNDERLINE_QUOTES
-.       if \\n[#UNDERLINE_QUOTES]=0 .UNDERLINE_QUOTES OFF
-.\" +Doctype underlining (if NAMED)
-.       if !r #DOCTYPE_UNDERLINE .nr #DOCTYPE_UNDERLINE 1
-.\" +Quotes and blockquotes
-.       if !r #Q_OFFSET_VALUE \{\
-.          if '\\*[$Q_OFFSET_VALUE]'' .QUOTE_INDENT 1
-.       \}
-.\" +Epigraphs
-.       if !r #EPI_OFFSET_VALUE \
-.          if '\\*[$EPI_OFFSET_VALUE]'' .EPIGRAPH_INDENT 2
-.\" +Linebreaks
-.       if !d $LINEBREAK_CHAR .LINEBREAK_CHAR * 3 2p
-.\" +Footnotes
-.       if !d $FN_SIZE_CHANGE    .FOOTNOTE_SIZE +0
-.       if !r #FN_RULE_LENGTH    .FOOTNOTE_RULE_LENGTH 2i
-.\" +Endnotes
-.       if !r #EN_PP_INDENT .ENDNOTE_PARA_INDENT \\n[#PP_INDENT]
-.\" +Footnotes
-.       if !r #FN_RULE_ADJ  .FOOTNOTE_RULE_ADJ 6p
-.\" +Slant stuff
-.       if !r #SLANT_MEANS_SLANT \{\
-.          ie \\n[#UNDERLINE_SLANT]=1 .UNDERLINE_SLANT
-.          el .UNDERLINE_SLANT OFF
-.       \}
-.    \}
-.\" Defaults for printstyle TYPESET
-.    if \\n[#PRINT_STYLE]=2 \{\
-.       if !d $DOCHEADER_LEAD_ADJ .DOCHEADER_LEAD +0
-.\" +Cover
-.       if !d $COVER_LEAD_ADJ .COVER_LEAD +0
-.       if !d $COVER_FAM      .COVER_FAMILY \\*[$DOC_FAM]
-.\" (title)
-.       if !d $COVER_TITLE_FAM \{\
-.          ie !d $COVER_FAM .COVER_TITLE_FAMILY \\*[$DOC_FAM]
-.          el .COVER_TITLE_FAMILY \\*[$COVER_FAM]
-.       \}
-.       if !d $COVER_TITLE_FT .COVER_TITLE_FONT B
-.       if !d $COVER_TITLE_SIZE_CHANGE .COVER_TITLE_SIZE +3.5
-.\" (chapter title)
-.       if !d $COVER_CHAPTER_TITLE_FAM \{\
-.          ie !d $COVER_FAM .COVER_CHAPTER_TITLE_FAMILY \\*[$DOC_FAM]
-.          el .COVER_CHAPTER_TITLE_FAMILY \\*[$COVER_FAM]
-.       \}
-.       if !d $COVER_CHAPTER_TITLE_FT .COVER_CHAPTER_TITLE_FONT BI
-.       if !d $COVER_CHAPTER_TITLE_SIZE_CHANGE .COVER_CHAPTER_TITLE_SIZE +4
-.\" (subtitle)
-.       if !d $COVER_SUBTITLE_FAM \{\
-.          ie !d $COVER_FAM .COVER_SUBTITLE_FAMILY \\*[$DOC_FAM]
-.          el .COVER_SUBTITLE_FAMILY \\*[$COVER_FAM]
-.       \}
-.       if !d $COVER_SUBTITLE_FT .COVER_SUBTITLE_FONT R
-.       if !d $COVER_SUBTITLE_SIZE_CHANGE .COVER_SUBTITLE_SIZE +0
-.\" (attribution and author[s])
-.       if !d $COVER_AUTHOR_FAM \{\
-.          ie !d $COVER_FAM .COVER_AUTHOR_FAMILY \\*[$DOC_FAM]
-.          el .COVER_AUTHOR_FAMILY \\*[$COVER_FAM]
-.       \}
-.       if !d $COVER_AUTHOR_FT .COVER_AUTHOR_FONT I
-.       if !d $COVER_AUTHOR_SIZE_CHANGE .COVER_AUTHOR_SIZE +0
-.\" (doctype if "named")
-.       if !d $COVER_DOCTYPE_FAM \{\
-.          ie !d $COVER_FAM .COVER_DOCTYPE_FAMILY \\*[$DOC_FAM]
-.          el .COVER_DOCTYPE_FAMILY \\*[$COVER_FAM]
-.       \}
-.       if !d $COVER_DOCTYPE_FT .COVER_DOCTYPE_FONT BI
-.       if !d $COVER_DOCTYPE_SIZE_CHANGE .COVER_DOCTYPE_SIZE +3
-.\" (copyright)
-.       if !d $COVER_COPYRIGHT_FAM \{\
-.          ie !d $COVER_FAM .COVER_COPYRIGHT_FAMILY \\*[$DOC_FAM]
-.          el .COVER_COPYRIGHT_FAMILY \\*[$COVER_FAM]
-.       \}
-.       if !d $COVER_COPYRIGHT_FT .COVER_COPYRIGHT_FONT R
-.       if !d $COVER_COPYRIGHT_SIZE_CHANGE .COVER_COPYRIGHT_SIZE -2
-.\" (misc)
-.       if !d $COVER_MISC_FAM         .COVER_MISC_FAMILY \\*[$DOC_FAM]
-.       if !d $COVER_MISC_FT          .COVER_MISC_FONT R
-.       if !d $COVER_MISC_SIZE_CHANGE .COVER_MISC_SIZE -2
-.       if !r #COVER_MISC_AUTOLEAD    .COVER_MISC_AUTOLEAD 2
-.\" +Doc cover
-.       if !d $DOC_COVER_LEAD_ADJ .DOC_COVER_LEAD +0
-.       if !d $DOC_COVER_FAM      .DOC_COVER_FAMILY \\*[$DOC_FAM]
-.\" (title)
-.       if !d $DOC_COVER_TITLE_FAM \{\
-.          ie !d $DOC_COVER_FAM .DOC_COVER_TITLE_FAMILY \\*[$DOC_FAM]
-.          el .DOC_COVER_TITLE_FAMILY \\*[$DOC_COVER_FAM]
-.       \}
-.       if !d $DOC_COVER_TITLE_FT          .DOC_COVER_TITLE_FONT B
-.       if !d $DOC_COVER_TITLE_SIZE_CHANGE .DOC_COVER_TITLE_SIZE +3.5
-.\" (chapter title)
-.       if !d $DOC_COVER_CHAPTER_TITLE_FAM \{\
-.          ie !d $DOC_COVER_FAM .DOC_COVER_CHAPTER_TITLE_FAMILY \\*[$DOC_FAM]
-.          el .DOC_COVER_CHAPTER_TITLE_FAMILY \\*[$DOC_COVER_FAM]
-.       \}
-.       if !d $DOC_COVER_CHAPTER_TITLE_FT .DOC_COVER_CHAPTER_TITLE_FONT BI
-.       if !d $DOC_COVER_CHAPTER_TITLE_SIZE_CHANGE .DOC_COVER_CHAPTER_TITLE_SIZE +4
-.\" (subtitle)
-.       if !d $DOC_COVER_SUBTITLE_FAM \{\
-.          ie !d $DOC_COVER_FAM .DOC_COVER_SUBTITLE_FAMILY \\*[$DOC_FAM]
-.          el .DOC_COVER_SUBTITLE_FAMILY \\*[$DOC_COVER_FAM]
-.       \}
-.       if !d $DOC_COVER_SUBTITLE_FT .DOC_COVER_SUBTITLE_FONT R
-.       if !d $DOC_COVER_SUBTITLE_SIZE_CHANGE .DOC_COVER_SUBTITLE_SIZE +0
-.\" (attribution and author[s])
-.       if !d $DOC_COVER_AUTHOR_FAM \{\
-.          ie !d $DOC_COVER_FAM .DOC_COVER_AUTHOR_FAMILY \\*[$DOC_FAM]
-.          el .DOC_COVER_AUTHOR_FAMILY \\*[$DOC_COVER_FAM]
-.       \}
-.       if !d $DOC_COVER_AUTHOR_FT .DOC_COVER_AUTHOR_FONT I
-.       if !d $DOC_COVER_AUTHOR_SIZE_CHANGE .DOC_COVER_AUTHOR_SIZE +0
-.\" (doctype if "named")
-.       if !d $DOC_COVER_DOCTYPE_FAM \{\
-.          ie !d $DOC_COVER_FAM .DOC_COVER_DOCTYPE_FAMILY \\*[$DOC_FAM]
-.          el .DOC_COVER_DOCTYPE_FAMILY \\*[$DOC_COVER_FAM]
-.       \}
-.       if !d $DOC_COVER_DOCTYPE_FT .DOC_COVER_DOCTYPE_FONT BI
-.       if !d $DOC_COVER_DOCTYPE_SIZE_CHANGE .DOC_COVER_DOCTYPE_SIZE +3
-.\" (copyright)
-.       if !d $DOC_COVER_COPYRIGHT_FAM \{\
-.          ie !d $DOC_COVER_FAM .DOC_COVER_COPYRIGHT_FAMILY \\*[$DOC_FAM]
-.          el .DOC_COVER_COPYRIGHT_FAMILY \\*[$DOC_COVER_FAM]
-.       \}
-.       if !d $DOC_COVER_COPYRIGHT_FT .DOC_COVER_COPYRIGHT_FONT R
-.       if !d $DOC_COVER_COPYRIGHT_SIZE_CHANGE .DOC_COVER_COPYRIGHT_SIZE -2
-.\" (misc)
-.       if !d $DOC_COVER_MISC_FAM         .DOC_COVER_MISC_FAMILY \\*[$DOC_FAM]
-.       if !d $DOC_COVER_MISC_FT          .DOC_COVER_MISC_FONT R
-.       if !d $DOC_COVER_MISC_SIZE_CHANGE .DOC_COVER_MISC_SIZE -2
-.       if !r #DOC_COVER_MISC_AUTOLEAD    .DOC_COVER_MISC_AUTOLEAD 2
-.\" +Docheader
-.       if !d $DOCHEADER_FAM .DOCHEADER_FAMILY \\*[$DOC_FAM]
-.       if !d $TITLE_FAM \{\
-.          ie !d $DOCHEADER_FAM .TITLE_FAMILY \\*[$DOC_FAM]
-.          el .TITLE_FAMILY \\*[$DOCHEADER_FAM]
-.       \}
-.       if !d $TITLE_FT .TITLE_FONT B
-.       if !d $TITLE_SIZE_CHANGE \{\
-.          ie \\n[#DOC_TYPE]=2 .TITLE_SIZE +4
-.          el .TITLE_SIZE +3.5
-.       \}
-.       if !d $CHAPTER_TITLE_FAM \{\
-.          ie !d $DOCHEADER_FAM .CHAPTER_TITLE_FAMILY \\*[$DOC_FAM]
-.          el .CHAPTER_TITLE_FAMILY \\*[$DOCHEADER_FAM]
-.       \}
-.       if !d $CHAPTER_TITLE_FT          .CHAPTER_TITLE_FONT BI
-.       if !d $CHAPTER_TITLE_SIZE_CHANGE .CHAPTER_TITLE_SIZE +4
-.       if !d $SUBTITLE_FAM \{\
-.          ie !d $DOCHEADER_FAM .SUBTITLE_FAMILY \\*[$DOC_FAM]
-.          el .SUBTITLE_FAMILY \\*[$DOCHEADER_FAM]
-.       \}
-.       if !d $SUBTITLE_FT          .SUBTITLE_FONT R
-.       if !d $SUBTITLE_SIZE_CHANGE .SUBTITLE_SIZE +0
-.       if !d $AUTHOR_FAM \{\
-.          ie !d $DOCHEADER_FAM .AUTHOR_FAMILY \\*[$DOC_FAM]
-.          el .AUTHOR_FAMILY \\*[$DOCHEADER_FAM]
-.       \}
-.       if !d $AUTHOR_FT          .AUTHOR_FONT I
-.       if !d $AUTHOR_SIZE_CHANGE .AUTHOR_SIZE +0
-.       if !d $DOCTYPE_FAM \{\
-.          ie !d $DOCHEADER_FAM .DOCTYPE_FAMILY \\*[$DOC_FAM]
-.          el .DOCTYPE_FAMILY \\*[$DOCHEADER_FAM]
-.       \}
-.       if !d $DOCTYPE_FT           .DOCTYPE_FONT BI
-.       if !d $DOCTYPE_SIZE_CHANGE  .DOCTYPE_SIZE +3
-.       if !r #DOCTYPE_UNDERLINE    .DOCTYPE_UNDERLINE
-.\" +Headers and footers
-.       if !d $HDRFTR_LEFT_FAM              .HDRFTR_LEFT_FAMILY \\*[$DOC_FAM]
-.       if !d $HDRFTR_LEFT_FT               .HDRFTR_LEFT_FONT R
-.       if \\n[#HDRFTR_LEFT_CAPS] \
-.          if !d $HDRFTR_LEFT_SIZE_CHANGE   .HDRFTR_LEFT_SIZE -2
-.       if !d $HDRFTR_LEFT_SIZE_CHANGE      .HDRFTR_LEFT_SIZE -.5
-.       if !d $HDRFTR_CENTER_FAM            .HDRFTR_CENTER_FAMILY \\*[$DOC_FAM]
-.       if !d $HDRFTR_CENTER_FT             .HDRFTR_CENTER_FONT I
-.       if \\n[#HDRFTR_CENTER_CAPS] \
-.          if !d $HDRFTR_CENTER_SIZE_CHANGE .HDRFTR_CENTER_SIZE -2
-.       if !d $HDRFTR_CENTER_SIZE_CHANGE    .HDRFTR_CENTER_SIZE -.5
-.       if !d $HDRFTR_RIGHT_FAM             .HDRFTR_RIGHT_FAMILY \\*[$DOC_FAM]
-.       if !d $HDRFTR_RIGHT_FT              .HDRFTR_RIGHT_FONT R
-.       if \\n[#HDRFTR_RIGHT_CAPS] \
-.          if !d $HDRFTR_RIGHT_SIZE_CHANGE  .HDRFTR_RIGHT_SIZE -2
-.       if !d $HDRFTR_RIGHT_SIZE_CHANGE     .HDRFTR_RIGHT_SIZE -.5
-.\" +Quotes
-.       if !d $QUOTE_FAM         .QUOTE_FAMILY \\*[$DOC_FAM]
-.       if !d $QUOTE_FT          .QUOTE_FONT I
-.       if !d $QUOTE_SIZE_CHANGE .QUOTE_SIZE+0
-.       if !r #Q_OFFSET_VALUE \
-.          if '\\*[$Q_OFFSET_VALUE]'' .QUOTE_INDENT 3
-.\" +Blockquotes
-.\"  Note: the leading for quotes and blockquotes is set after .DEFAULTS in START
-.       if !d $BQUOTE_FAM         .BLOCKQUOTE_FAMILY \\*[$DOC_FAM]
-.       if !d $BQUOTE_FT          .BLOCKQUOTE_FONT R
-.       if !d $BQUOTE_SIZE_CHANGE .BLOCKQUOTE_SIZE -1
-.       if !d $BQUOTE_QUAD        .BLOCKQUOTE_QUAD LEFT
-.\" +Epigraphs
-.       if !d $EPI_FAM         .EPIGRAPH_FAMILY \\*[$DOC_FAM]
-.       if !d $EPI_FT          .EPIGRAPH_FONT R
-.       if !d $EPI_SIZE_CHANGE .EPIGRAPH_SIZE -1.5
-.       if !r #EPI_AUTOLEAD    .EPIGRAPH_AUTOLEAD 2
-.       if !d $EPI_QUAD        .EPIGRAPH_QUAD \\*[$DOC_QUAD]
-.       if !r #EPI_OFFSET_VALUE \
-.          if '\\*[$EPI_OFFSET_VALUE]'' .EPIGRAPH_INDENT 3
-.\" +Linebreaks
-.       if !d $LINEBREAK_CHAR  .LINEBREAK_CHAR * 3 3p
-.       if !d $LINEBREAK_COLOR .LINEBREAK_COLOR black
-.\" +Footnotes
-.       if !r #FN_RULE_LENGTH .FOOTNOTE_RULE_LENGTH 4P
-.       if !r #FN_RULE_ADJ    .FOOTNOTE_RULE_ADJ 3p
-.       if !d $FN_SIZE_CHANGE .FOOTNOTE_SIZE -2
-.       if !r #FN_AUTOLEAD    .FOOTNOTE_AUTOLEAD 2
-.\" +Endnotes
-.       if !r #EN_PS                 .ENDNOTE_PT_SIZE (\\n[#DOC_PT_SIZE]u)
-.       if !d $EN_STRING_FT          .ENDNOTE_STRING_FONT B
-.       if !d $EN_STRING_SIZE_CHANGE .ENDNOTE_STRING_SIZE +1
-.       if !d $EN_TITLE_FT           .ENDNOTE_TITLE_FONT B
-.       if !d $EN_TITLE_SIZE_CHANGE  .ENDNOTE_TITLE_SIZE +0
-.       if !d $EN_NUMBER_FT          .ENDNOTE_NUMBER_FONT B
-.       if !d $EN_LN_FT              .ENDNOTE_LINENUMBER_FONT R
-.       if !d $EN_NUMBER_SIZE_CHANGE .ENDNOTE_NUMBER_SIZE +0
-.       if !d $EN_LN_SIZE_CHANGE     .ENDNOTE_LINENUMBER_SIZE +0
-.       if !r #EN_PP_INDENT          .ENDNOTE_PARA_INDENT 1.5m
-.       if !d $EN_SPACE              .ENDNOTE_SPACING 0
-.\" +Bibliography
-.       if !r #BIB_LIST               .BIBLIOGRAPHY_TYPE PLAIN
-.       if !r #BIB_PS                 .BIBLIOGRAPHY_PT_SIZE (\\n[#DOC_PT_SIZE]u)
-.       if !d $BIB_STRING_FT          .BIBLIOGRAPHY_STRING_FONT B
-.       if !d $BIB_STRING_SIZE_CHANGE .BIBLIOGRAPHY_STRING_SIZE +1
-.\" +Table of contents
-.       if !d $TOC_FAM                .TOC_FAMILY \\*[$DOC_FAM]
-.       if !r #TOC_PS                 .TOC_PT_SIZE (\\n[#DOC_PT_SIZE]u)
-.       if '\\*[$TOC_LEAD]''          .TOC_LEAD \\n[#DOC@LEAD]u ADJUST
-.       if !d $TOC_HEADER_FAM         .TOC_HEADER_FAMILY \\*[$TOC_FAM]
-.       if !d $TOC_HEADER_SIZE_CHANGE .TOC_HEADER_SIZE +4
-.       if !d $TOC_HEADER_FT          .TOC_HEADER_FONT B
-.       if !d $TOC_PN_FAM             .TOC_PN_FAMILY \\*[$TOC_FAM]
-.       if !d $TOC_PN_FT              .TOC_PN_FONT R
-.       if !d $TOC_PN_SIZE_CHANGE     .TOC_PN_SIZE +0
-.    \}
-.\" +Refer support
-.    if !r #EN_REF .nr #FN_REF 1
-.    if !d $REF_FN_INDENT \{\
-.       if \\n[#PRINT_STYLE]=1 .INDENT_REFS FOOTNOTE .5i
-.       if \\n[#PRINT_STYLE]=2 .INDENT_REFS FOOTNOTE 2m
-.    \}
-.    if !d $REF_EN_INDENT \{\
-.       if \\n[#PRINT_STYLE]=1 .INDENT_REFS ENDNOTE .5i
-.       if \\n[#PRINT_STYLE]=2 .INDENT_REFS ENDNOTE 2m
-.    \}
-.    if !d $REF_BIB_INDENT \{\
-.       if \\n[#PRINT_STYLE]=1 .INDENT_REFS BIBLIO .5i
-.       if \\n[#PRINT_STYLE]=2 .INDENT_REFS BIBLIO 2m
-.    \}
-.\" Define strings for idem entries
-.    if \\n[#PRINT_STYLE]=1 .char \[idem] \[hy]\[hy]\[hy]
-.    if \\n[#PRINT_STYLE]=2 .char \[idem] \v'-.3m'\l'3m'\v'.3m'
-.\" Adjust doc leading for PRINTSTYLE TYPESET
-.    if \\n[#PRINT_STYLE]=2 \
-.       if \\n[#ADJ_DOC_LEAD]=1 .DOC_LEAD_ADJUST
-.\" This diversion is to get a value for #FN_AUTOLEAD
-.    di NULL
-.       if \\n[#AUTO_LEAD] \{\
-.          nr #RESTORE_AUTO_LEAD 1
-.          nr #SAVED_AUTOLEAD_VALUE \\n[#AUTOLEAD_VALUE]
-.       \}
-.       ev NULL
-.       if \\n[#PRINT_STYLE]=1 \{\
-.          ps \\*[$TYPEWRITER_PS]
-.          ie \\n[#SINGLE_SPACE]=1 .vs \\n[#ORIGINAL_DOC_LEAD]u
-.          el .vs \\n[#ORIGINAL_DOC_LEAD]u/2u
-.       \}
-.       if \\n[#PRINT_STYLE]=2 \{\
-.          ps  \\n[#DOC_PT_SIZE]u\\*[$FN_SIZE_CHANGE]
-.          vs \\n[.ps]u+\\n[#FN_AUTOLEAD]u
-.       \}
-.       nr #FN_LEAD \\n[#LEAD]
-.       ev
-.    di
-.    if \\n[#RESTORE_AUTO_LEAD] \{\
-.       nr #AUTO_LEAD 1
-.       nr #AUTOLEAD_VALUE  \\n[#SAVED_AUTOLEAD_VALUE]
-.    \}
-.    ie !\\n[#COLLATE] \{\
-.\" DOC_LEAD adjusted (or not) here
-.       TRAPS
-.       if \\n[#REMOVE_ADJ] .DOC_LEAD \\n[#DOC_LEAD]u-\\n[#DOC_LEAD_ADJ]u
-.\" Endnote, bibliography and toc leading
-.       nr #OK_PROCESS_LEAD 1
-.       nr #RESTORE_DOC_LEAD \\n[.v]
-.       nr #RESTORE_B_MARGIN \\n[#B_MARGIN]
-.       if \\n[#PRINT_STYLE]=1 \{\
-.          ie \\n[#SINGLE_SPACE] \{\
-.             ENDNOTE_LEAD      12 ADJUST
-.             BIBLIOGRAPHY_LEAD 12 ADJUST
-.          \}
-.          el \{\
-.             ie \\n[#EN_SINGLESPACE] .ENDNOTE_LEAD 12 ADJUST
-.             el .ENDNOTE_LEAD 24 ADJUST
-.             ie \\n[#BIB_SINGLESPACE] .BIBLIOGRAPHY_LEAD 12 ADJUST
-.             el .BIBLIOGRAPHY_LEAD 24 ADJUST
-.          \}
-.       \}
-.       if \\n[#PRINT_STYLE]=2 \{\
-.          ie !d $EN_LEAD  .ENDNOTE_LEAD \\n[#UNADJUSTED_DOC_LEAD]u ADJUST
-.          el .ENDNOTE_LEAD \\*[$EN_LEAD] \\*[$ADJUST_EN_LEAD]
-.          ie !d $BIB_LEAD .BIBLIOGRAPHY_LEAD \\n[#UNADJUSTED_DOC_LEAD]u ADJUST
-.          el .BIBLIOGRAPHY_LEAD \\*[$BIB_LEAD] \\*[$ADJUST_BIB_LEAD]
-.          ie !d $TOC_LEAD .TOC_LEAD \\n[#UNADJUSTED_DOC_LEAD]u \\*[$ADJUST_TOC_LEAD]
-.          el .TOC_LEAD \\*[$TOC_LEAD] \\*[$ADJUST_TOC_LEAD]
-.       \}
-.       ie !d $BIB_SPACE .BIBLIOGRAPHY_SPACING 0
-.       el \{\
-.          if \\n[#DEFER_BIB_SPACING]=1 \{\
-.             BIBLIOGRAPHY_SPACING \\*[$BIB_SPACE]
-.             rr #DEFER_BIB_SPACING
-.          \}
-.       \}
-.       nr #DOC_LEAD \\n[#RESTORE_DOC_LEAD]u
-.       nr #B_MARGIN \\n[#RESTORE_B_MARGIN]
-.       vs \\n[#DOC_LEAD]u
-.    \}
-.    el \{\
-.       if \\n[#COLLATE] \{\
-.          if !\\n[#PRINT_STYLE]=1 \{\
-.             if \\n[#RERUN_TRAPS] \{\
-.                TRAPS
-.                rr #RERUN_TRAPS
-.             \}
-.          \}
-.       \}
-.    \}
-.\" Set default heading and toc-entry family if not done already
-.    nr #HD_LEVEL 0 1 \" loop step
-.    nr #LOOP 9       \" loop count
-.    while \\n+[#HD_LEVEL]<=\\n[#LOOP] \{\
-.       if '\\*[$HEAD_\\n[#HD_LEVEL]_FAM]'' \
-.           ds $HEAD_\\n[#HD_LEVEL]_FAM \\*[$DOC_FAM]
-.       if '\\*[$HEAD_\\n[#HD_LEVEL]_BASELINE_ADJ]'' \
-.           ds $HEAD_\\n[#HD_LEVEL]_BASELINE_ADJ \\n[.v]/10
-.       if '\\*[$TOC_HEAD_\\n[#HD_LEVEL]_FAM]'' \
-.           ds $TOC_HEAD_\\n[#HD_LEVEL]_FAM \\*[$DOC_FAM]
-.    \}
-.    if '\\*[$TOC_TITLE_FAM]'' .ds $TOC_TITLE_FAM \\*[$DOC_FAM]
-.\" Re-run MNinit to capture strings and registers set in DEFAULTS.
-.    if !'\\*[$MN-arg1]'' \{\
-.       MNinit \
-\\*[$MN-arg1] \\*[$MN-arg2] \
-\\*[$MN-arg3] \\*[$MN-arg4] \
-\\*[$MN-arg5] \\*[$MN-arg6] \
-\\*[$MN-arg7] \\*[$MN-arg8] \
-\\*[$MN-arg9]
-.    \}
-.    if \\n[#PRINT_STYLE]=1 .nr #IGNORE 1
-.    if \\n[#AUTO_LEAD] \{\
-.       rr #AUTO_LEAD
-.       rr #AUTOLEAD_VALUE
-.    \}
-.END
-\#
-\# ====================================================================
-\#
-\# +++START THE DOCUMENT+++
-\#
-\# THE START MACRO
-\# ---------------
-\# *Arguments:
-\#   <none>
-\# *Function:
-\#   Reads in default document style parameters and any parameters
-\#   the user has changed before issuing START.
-\#   Using the information gathered in the opening macros,
-\#   prints appropriate title (or chapter #), subtitle, author
-\#   and document type (if appropriate).
-\# *Notes:
-\#   The .PRINT \& (zero-width character) is required to get the
-\#   subsequent .sp request to work as advertised.
-\#
-\#   The overall document line length, family, and point-size
-\#   are stored in #DOC_L_LENGTH, $DOC_FAM, and #DOC_PT_SIZE for
-\#   use in the HEADER and FOOTER macros.
-\#
-\#  First, define some strings for point sizes
-\#
-\# Doc cover
-\#
-.ds $DOC_COVER_AUTHOR_PT_SIZE \
-    \\n[#DOC_PT_SIZE]u\\*[$DOC_COVER_AUTHOR_SIZE_CHANGE]
-.ds $DOC_COVER_CHAPTER_TITLE_PT_SIZE \
-    \\n[#DOC_PT_SIZE]u\\*[$DOC_COVER_CHAPTER_TITLE_SIZE_CHANGE]
-.ds $DOC_COVER_COPYRIGHT_PT_SIZE \
-    \\n[#DOC_PT_SIZE]u\\*[$DOC_COVER_COPYRIGHT_SIZE_CHANGE]
-.ds $DOC_COVER_DOCTYPE_PT_SIZE \
-    \\n[#DOC_PT_SIZE]u\\*[$DOC_COVER_DOCTYPE_SIZE_CHANGE]
-.ds $DOC_COVER_MISC_PT_SIZE \
-    \\n[#DOC_PT_SIZE]u\\*[$DOC_COVER_MISC_SIZE_CHANGE]
-.ds $DOC_COVER_SUBTITLE_PT_SIZE \
-    \\n[#DOC_PT_SIZE]u\\*[$DOC_COVER_SUBTITLE_SIZE_CHANGE]
-.ds $DOC_COVER_TITLE_PT_SIZE \
-    \\n[#DOC_PT_SIZE]u\\*[$DOC_COVER_TITLE_SIZE_CHANGE]
-\# Cover
-.ds $COVER_AUTHOR_PT_SIZE \
-    \\n[#DOC_PT_SIZE]u\\*[$COVER_AUTHOR_SIZE_CHANGE]
-.ds $COVER_CHAPTER_TITLE_PT_SIZE \
-    \\n[#DOC_PT_SIZE]u\\*[$COVER_CHAPTER_TITLE_SIZE_CHANGE]
-.ds $COVER_COPYRIGHT_PT_SIZE \
-    \\n[#DOC_PT_SIZE]u\\*[$COVER_COPYRIGHT_SIZE_CHANGE]
-.ds $COVER_DOCTYPE_PT_SIZE \
-    \\n[#DOC_PT_SIZE]u\\*[$COVER_DOCTYPE_SIZE_CHANGE]
-.ds $COVER_MISC_PT_SIZE \
-    \\n[#DOC_PT_SIZE]u\\*[$COVER_MISC_SIZE_CHANGE]
-.ds $COVER_SUBTITLE_PT_SIZE \
-    \\n[#DOC_PT_SIZE]u\\*[$COVER_SUBTITLE_SIZE_CHANGE]
-.ds $COVER_TITLE_PT_SIZE \
-    \\n[#DOC_PT_SIZE]u\\*[$COVER_TITLE_SIZE_CHANGE]
-\# Docheader
-.ds $AUTHOR_PT_SIZE \
-    \\n[#DOC_PT_SIZE]u\\*[$AUTHOR_SIZE_CHANGE]
-.ds $CHAPTER_TITLE_PT_SIZE \
-    \\n[#DOC_PT_SIZE]u\\*[$CHAPTER_TITLE_SIZE_CHANGE]
-.ds $COPYRIGHT_PT_SIZE \
-    \\n[#DOC_PT_SIZE]u\\*[$COPYRIGHT_SIZE_CHANGE]
-.ds $DOCTYPE_PT_SIZE \
-    \\n[#DOC_PT_SIZE]u\\*[$DOCTYPE_SIZE_CHANGE]
-.ds $SUBTITLE_PT_SIZE \
-    \\n[#DOC_PT_SIZE]u\\*[$SUBTITLE_SIZE_CHANGE]
-.ds $TITLE_PT_SIZE \
-    \\n[#DOC_PT_SIZE]u\\*[$TITLE_SIZE_CHANGE]
-\#
-\# Next, some utility macros for various routines to prevent repetition
-\#
-.MAC DOC_HEADER_QUAD END
-.    if '\\$0'DOC_HEADER_QUAD' .ds $CALLING_MACRO DOCHEADER
-.    if '\\$0'COVER_H_POS'     .ds $CALLING_MACRO COVER
-.    if '\\$0'DOC_COVER_H_POS' .ds $CALLING_MACRO DOC_COVER
-.    ie !'\\*[$\\*[$CALLING_MACRO]_QUAD]'' \{\
-.       if '\\*[$\\*[$CALLING_MACRO]_QUAD]'L'      .LEFT
-.       if '\\*[$\\*[$CALLING_MACRO]_QUAD]'LEFT'   .LEFT
-.       if '\\*[$\\*[$CALLING_MACRO]_QUAD]'R'      .RIGHT
-.       if '\\*[$\\*[$CALLING_MACRO]_QUAD]'RIGHT'  .RIGHT
-.       if '\\*[$\\*[$CALLING_MACRO]_QUAD]'C'      .RIGHT
-.       if '\\*[$\\*[$CALLING_MACRO]_QUAD]'CENTER' .CENTER
-.       if '\\*[$\\*[$CALLING_MACRO]_QUAD]'CENTRE' .CENTER
-.    \}
-.    el .CENTER
-.END
-\#
-\# Aliases for DOC_HEADER_QUAD
-\#
-.ALIAS COVER_H_POS      DOC_HEADER_QUAD
-.ALIAS DOC_COVER_H_POS  DOC_HEADER_QUAD
-\#
-.MAC PRINT_AUTHORS END
-.    ie r#DOING_COVER \{\
-.       if \\n[#DOC_COVER]=1 \{\
-.          ie !'\\*[$AUTHOR_DOCCOVER_1]'' \{\
-.             nr #AUTHORS \\n[#AUTHOR_DOCCOVER_NUM]
-.             nr #NEXT_AUTHOR 0 1
-.             while \\n[#AUTHORS]>\\n[#NEXT_AUTHOR] \{\
-.                ie \\n[#DOC_COVER_AUTHOR_COLOR]=1 \
-.                   PRINT \
-\m[\\*[$DOC_COVER_AUTHOR_COLOR]]\\*[$AUTHOR_DOCCOVER_\\n+[#NEXT_AUTHOR]]\m[]
-.                el .PRINT \\*[$AUTHOR_DOCCOVER_\\n+[#NEXT_AUTHOR]]
-.             \}
-.          \}
-.          el \{\
-.             nr #AUTHORS \\n[#AUTHOR_NUM]
-.             nr #NEXT_AUTHOR 0 1
-.             while \\n[#AUTHORS]>\\n[#NEXT_AUTHOR] \{\
-.                ie \\n[#DOC_COVER_AUTHOR_COLOR]=1 \
-.                   PRINT \
-\m[\\*[$DOC_COVER_AUTHOR_COLOR]]\\*[$AUTHOR_\\n+[#NEXT_AUTHOR]]\m[]
-.                el .PRINT \\*[$AUTHOR_\\n+[#NEXT_AUTHOR]]
-.             \}
-.          \}
-.          return
-.       \}
-.       if \\n[#COVER]=1 \{\
-.          ie !'\\*[$AUTHOR_COVER_1]'' \{\
-.             nr #AUTHORS \\n[#AUTHOR_COVER_NUM]
-.             nr #NEXT_AUTHOR 0 1
-.             while \\n[#AUTHORS]>\\n[#NEXT_AUTHOR] \{\
-.                ie \\n[#COVER_AUTHOR_COLOR]=1 \
-.                   PRINT \
-\m[\\*[$COVER_AUTHOR_COLOR]]\\*[$AUTHOR_COVER_\\n+[#NEXT_AUTHOR]]\m[]
-.                el .PRINT \\*[$AUTHOR_COVER_\\n+[#NEXT_AUTHOR]]
-.             \}
-.          \}
-.          el \{\
-.             nr #AUTHORS \\n[#AUTHOR_NUM]
-.             nr #NEXT_AUTHOR 0 1
-.             while \\n[#AUTHORS]>\\n[#NEXT_AUTHOR] \{\
-.                ie \\n[#COVER_AUTHOR_COLOR]=1 \
-.                   PRINT \
-\m[\\*[$COVER_AUTHOR_COLOR]]\\*[$AUTHOR_\\n+[#NEXT_AUTHOR]]\m[]
-.                el .PRINT \\*[$AUTHOR_\\n+[#NEXT_AUTHOR]]
-.             \}
-.          \}
-.          return
-.       \}
-.    \}
-.    el \{\
-.       nr #AUTHORS \\n[#AUTHOR_NUM]
-.       nr #NEXT_AUTHOR 0 1
-.       while \\n[#AUTHORS]>\\n[#NEXT_AUTHOR] \{\
-.          ie \\n[#AUTHOR_COLOR]=1 \
-.             PRINT \m[\\*[$AUTHOR_COLOR]]\\*[$AUTHOR_\\n+[#NEXT_AUTHOR]]\m[]
-.          el .PRINT \\*[$AUTHOR_\\n+[#NEXT_AUTHOR]]
-.       \}
-.    \}
-.END
-\#
-.MAC DEFAULT_DOCHEADER END
-.    DOC_HEADER_QUAD
-.    if !'\\*[$TITLE_1]'' \{\
-.       FAMILY  \\*[$TITLE_FAM]
-.       FT      \\*[$TITLE_FT]
-.       ps \\*[$TITLE_PT_SIZE]
-.       vs      \\n[#DOCHEADER_LEAD]u
-.       nr #ARG_NUM 0 1
-.       while \\n[#TITLE_NUM]>=\\n+[#ARG_NUM] \{\
-.          ie \\n[#TITLE_COLOR]=1 \
-.             PRINT "\m[\\*[$TITLE_COLOR]]\\*[$TITLE_\\n[#ARG_NUM]]\m[]
-.          el .PRINT "\\*[$TITLE_\\n[#ARG_NUM]]
-.       \}
-.    \}
-.    if !'\\*[$SUBTITLE_1]'' \{\
-.       FAMILY  \\*[$SUBTITLE_FAM]
-.       FT      \\*[$SUBTITLE_FT]
-.       ps \\*[$SUBTITLE_PT_SIZE]
-.       nr #ARG_NUM 0 1
-.       while \\n[#SUBTITLE_NUM]>=\\n+[#ARG_NUM] \{\
-.          ie \\n[#SUBTITLE_COLOR]=1 \
-.             PRINT "\m[\\*[$SUBTITLE_COLOR]]\\*[$SUBTITLE_\\n[#ARG_NUM]]\m[]
-.          el .PRINT "\\*[$SUBTITLE_\\n[#ARG_NUM]]
-.       \}
-.    \}
-.    if !'\\*[$AUTHOR_1]'' \{\
-.       FAMILY  \\*[$AUTHOR_FAM]
-.       FT      \\*[$AUTHOR_FT]
-.       ps \\*[$AUTHOR_PT_SIZE]
-.       ie \\n[#ATTRIBUTE_COLOR]=1 \
-.          PRINT \&\m[\\*[$ATTRIBUTE_COLOR]]\\*[$ATTRIBUTE_STRING]\m[]
-.       el .PRINT \&\\*[$ATTRIBUTE_STRING]
-.       PRINT_AUTHORS
-.    \}
-.    FAMILY \\*[$DOC_FAM]
-.    FT R
-.END
-\#
-.MAC CHAPTER_DOCHEADER END
-.    DOC_HEADER_QUAD
-.    FAMILY  \\*[$TITLE_FAM]
-.    FT      \\*[$TITLE_FT]
-.    ps \\*[$TITLE_PT_SIZE]
-.    vs \\n[#DOCHEADER_LEAD]u
-.\" Chapter title only
-.    ie '\\*[$CHAPTER]'' \{\
-.       ie !'\\*[$CHAPTER_TITLE_1]'' \{\
-.          if \\n[#PRINT_STYLE]=2 \{\
-.             FAMILY  \\*[$CHAPTER_TITLE_FAM]
-.             FT      \\*[$CHAPTER_TITLE_FT]
-.             ps \\*[$CHAPTER_TITLE_PT_SIZE]
-.             vs \\n[#DOCHEADER_LEAD]u
-.          \}
-.          nr #ARG_NUM 0 1
-.          while \\n[#CHAPTER_TITLE_NUM]>=\\n+[#ARG_NUM] \{\
-.             ie \\n[#TITLE_COLOR]=1 \{\
-.                PRINT \
-\m[\\*[$TITLE_COLOR]]\\*[$CHAPTER_TITLE_\\n[#ARG_NUM]]\m[]
-.             \}
-.             el .PRINT \\*[$CHAPTER_TITLE_\\n[#ARG_NUM]]
-.          \}
-.       \}
-.       el \{\
-.          ie \\n[#TITLE_COLOR]=1 \{\
-.             PRINT \m[\\*[$TITLE_COLOR]]\\*[$CHAPTER_STRING]\m[]
-.          \}
-.          el .PRINT \\*[$CHAPTER_STRING]
-.       \}
-.    \}
-.\" Chapter string, possibly with a chapter title
-.    el \{\
-.       ie \\n[#TITLE_COLOR]=1 \{\
-.          PRINT \m[\\*[$TITLE_COLOR]]\\*[$CHAPTER_STRING] \\*[$CHAPTER]\m[]
-.       \}
-.       el .PRINT \\*[$CHAPTER_STRING] \\*[$CHAPTER]
-.       if !'\\*[$CHAPTER_TITLE_1]'' \{\
-.          if \\n[#PRINT_STYLE]=2 \{\
-.             FAMILY  \\*[$CHAPTER_TITLE_FAM]
-.             FT      \\*[$CHAPTER_TITLE_FT]
-.             ps \\*[$CHAPTER_TITLE_PT_SIZE]
-.             vs \\n[#DOCHEADER_LEAD]u
-.             ALD     \\n[.v]u/4u \" Put a little space before the chapter title
-.          \}
-.          nr #ARG_NUM 0 1
-.          while \\n[#CHAPTER_TITLE_NUM]>=\\n+[#ARG_NUM] \{\
-.             ie \\n[#CHAPTER_TITLE_COLOR]=1 \{\
-.                PRINT \
-\m[\\*[$CHAPTER_TITLE_COLOR]]\\*[$CHAPTER_TITLE_\\n[#ARG_NUM]]\m[]
-.             \}
-.             el .PRINT \\*[$CHAPTER_TITLE_\\n[#ARG_NUM]]
-.          \}
-.          RLD \\n[#DOC_LEAD]u    \" Just looks better this way
-.       \}
-.    \}
-.    FAMILY \\*[$DOC_FAM]
-.    FT R
-.END
-\#
-.MAC NAMED_DOCHEADER END
-.    DOC_HEADER_QUAD
-.    FAMILY  \\*[$TITLE_FAM]
-.    FT      \\*[$TITLE_FT]
-.    ps \\*[$TITLE_PT_SIZE]
-.    vs      \\n[#DOCHEADER_LEAD]u
-.    if !'\\*[$TITLE_1]'' \{\
-.       nr #ARG_NUM 0 1
-.       while \\n[#TITLE_NUM]>=\\n+[#ARG_NUM] \{\
-.          ie \\n[#TITLE_COLOR]=1 \{\
-.             PRINT "\m[\\*[$TITLE_COLOR]]\\*[$TITLE_\\n[#ARG_NUM]]\m[]
-.          \}
-.          el .PRINT "\\*[$TITLE_\\n[#ARG_NUM]]
-.       \}
-.    \}
-.    if !'\\*[$SUBTITLE]'' \{\
-.       FAMILY  \\*[$SUBTITLE_FAM]
-.       FT      \\*[$SUBTITLE_FT]
-.       ps \\*[$SUBTITLE_PT_SIZE]
-.       nr #ARG_NUM 0 1
-.       while \\n[#SUBTITLE_NUM]>=\\n+[#ARG_NUM] \{\
-.          ie \\n[#SUBTITLE_COLOR]=1 \{\
-.             PRINT "\m[\\*[$SUBTITLE_COLOR]]\\*[$SUBTITLE_\\n[#ARG_NUM]]\m[]
-.          \}
-.          el .PRINT "\\*[$SUBTITLE_\\n[#ARG_NUM]]
-.       \}
-.    \}
-.    if !'\\*[$AUTHOR_1]'' \{\
-.       FAMILY  \\*[$AUTHOR_FAM]
-.       FT      \\*[$AUTHOR_FT]
-.       ps \\*[$AUTHOR_PT_SIZE]
-.       ie \\n[#ATTRIBUTE_COLOR]=1 \{\
-.          PRINT \&\m[\\*[$ATTRIBUTE_COLOR]]\\*[$ATTRIBUTE_STRING]\m[]
-.       \}
-.       el .PRINT \&\\*[$ATTRIBUTE_STRING]
-.       PRINT_AUTHORS
-.    \}
-.    FAMILY  \\*[$DOCTYPE_FAM]
-.    FT      \\*[$DOCTYPE_FT]
-.    ps \\*[$DOCTYPE_PT_SIZE]
-.    vs \\n[#DOCHEADER_LEAD]u
-.    ALD     \\n[#DOCHEADER_LEAD]u
-.    nr #FROM_DOCTYPE 1
-.    if \\n[#DOCTYPE_COLOR]=1 .COLOR \\*[$DOCTYPE_COLOR]
-.    ie \\n[#DOCTYPE_UNDERLINE]=1 \
-.       UNDERSCORE \\*[$DOCTYPE_UNDERLINE_GAP] "\\*[$DOC_TYPE]"
-.    el .PRINT "\\*[$DOC_TYPE]"
-.    COLOR black
-.    FAMILY \\*[$DOC_FAM]
-.    FT R
-.    rr #FROM_DOCTYPE
-.END
-\#
-\# COVER PAGE
-\# ----------
-\# *Arguments:
-\#   TITLE | DOCTITLE | CHAPTER | CHAPTER_TITLE | CHAPTER+TITLE | COVERTITLE \
-\#   [ SUBTITLE AUTHOR DOCTYPE COPYRIGHT MISC BLANKPAGE ]
-\# *Function:
-\#   Toggles the number register for each cover page element
-\#   passed as an argument.
-\# *Notes:
-\#   TITLE, DOCTITLE, CHAPTER, CHAPTER_TITLE or CHAPTER+TITLE must
-\#   be supplied.  After that, users may enter as many or as few of
-\#   the arguments as they like.  BLANKPAGE inserts a blank page
-\#   after the cover.
-\#
-\#   If called as DOC_COVER, performs the same operations, but
-\#   applies everything to a doc cover.
-\#
-.MAC COVER END
-.    ie '\\$0'DOC_COVER' \{\
-.       nr #DOC_COVER 1
-.       ds DOC_ DOC_
-.    \}
-.    el .nr #COVER 1
-.    nr #ARG_NUM 0 1
-.    nr #COVER_ITEM \\n[#NUM_ARGS]  \"loop count
-.    while \\n+[#ARG_NUM]<=\\n[#COVER_ITEM] \{\
-.       if '\\$1'TITLE' \{\
-.          nr #\\*[DOC_]COVER_TITLE 1
-.          shift
-.       \}
-.       if '\\$1'DOCTITLE' \{\
-.          nr #\\*[DOC_]COVER_TITLE 2
-.          shift
-.       \}
-.       if '\\$1'CHAPTER' \{\
-.          nr #\\*[DOC_]COVER_TITLE 3
-.          shift
-.       \}
-.       if '\\$1'CHAPTER_TITLE' \{\
-.          nr #\\*[DOC_]COVER_TITLE 4
-.          shift
-.       \}
-.       if '\\$1'CHAPTER+TITLE' \{\
-.          nr #\\*[DOC_]COVER_TITLE 5
-.          shift
-.       \}
-.       if '\\$1'\\*[DOC_]COVERTITLE' \{\
-.          nr #\\*[DOC_]COVER_TITLE 6
-.          shift
-.       \}
-.       if '\\$1'SUBTITLE' \{\
-.          nr #\\*[DOC_]COVER_SUBTITLE 1
-.          shift
-.       \}
-.       if '\\$1'AUTHOR' \{\
-.          nr #\\*[DOC_]COVER_AUTHOR 1
-.          shift
-.       \}
-.       if '\\$1'DOCTYPE' \{\
-.          nr #\\*[DOC_]COVER_DOCTYPE 1
-.          shift
-.       \}
-.       if '\\$1'COPYRIGHT' \{\
-.          nr #\\*[DOC_]COVER_COPYRIGHT 1
-.          shift
-.       \}
-.       if '\\$1'MISC' \{\
-.          nr #\\*[DOC_]COVER_MISC 1
-.          shift
-.       \}
-.       if '\\$1'PDF_OUTLINE_LABEL' \{\
-.          shift
-.          ds $PDF_\\*[DOC_]COVER_LABEL \\$1
-.          shift
-.       \}
-.       if '\\$1'BLANKPAGE' \{\
-.          nr #\\*[DOC_]COVER_BLANKPAGE 1
-.          shift
-.       \}
-.    \}
-.    if '\\$0'DOC_COVER' .rm DOC_
-.END
-\#
-.MAC COVERTITLE END
-.    ie '\\$0'DOC_COVERTITLE' \{\
-.       ie \\n[#NUM_ARGS]=0 \{\
-.          if \\n[#DOC_COVER_TITLE_NUM] \{\
-.             nr #ITEM 0 1
-.             while \\n[#DOC_COVER_TITLE_NUM]>\\n[#ITEM] \{\
-.                rm $DOC_COVER_TITLE_\\n+[#ITEM]
-.             \}
-.             rr #DOC_COVER_TITLE_NUM
-.             rm $DOC_COVER_TITLE
-.          \}
-.       \}
-.       el \{\
-.          nr #DOC_COVER_TITLE_NUM 0 1
-.          while \\n[#NUM_ARGS]>\\n[#DOC_COVER_TITLE_NUM] \{\
-.             ds \
-$DOC_COVER_TITLE_\\n+[#DOC_COVER_TITLE_NUM] \\$\\n[#DOC_COVER_TITLE_NUM]
-.          \}
-.          ds $DOC_COVER_TITLE \\$*
-.       \}
-.    \}
-.    el \{\
-.       ie \\n[#NUM_ARGS]=0 \{\
-.          if \\n[#COVER_TITLE_NUM] \{\
-.             nr #ITEM 0 1
-.             while \\n[#COVER_TITLE_NUM]>\\n[#ITEM] \{\
-.                rm $COVER_TITLE_\\n+[#ITEM]
-.             \}
-.             rr #COVER_TITLE_NUM
-.             rm $COVER_TITLE
-.          \}
-.       \}
-.       el \{\
-.          nr #COVER_TITLE_NUM 0 1
-.          while \\n[#NUM_ARGS]>\\n[#COVER_TITLE_NUM] \{\
-.             ds $COVER_TITLE_\\n+[#COVER_TITLE_NUM] \\$\\n[#COVER_TITLE_NUM]
-.          \}
-.          ds $COVER_TITLE \\$*
-.\" .          if \\n[#DOCTITLE_NUM]=0 .PDF_TITLE \\*[$COVER_TITLE]
-.       \}
-.    \}
-.END
-\#
-\# COVER PAGE LEADING
-\# ------------------
-\# *Arguments:
-\#   <+|- amount by which to in/decrease leading of cover/doc cover>
-\# *Function:
-\#   Stores user supplied lead in/decrease in string $COVER_LEAD_ADJ
-\#   or $DOC_COVER_LEAD_ADJ, depending on whether the macro was called
-\#   with an alias (DOC_COVER_LEAD).
-\# *Notes:
-\#   A unit of measure must be supplied.  Decimal fractions OK.
-\#   Default is +0, i.e. same as DOC_LEAD.
-\#
-.MAC COVER_LEAD END
-.    ie '\\$0'DOC_COVER_LEAD' .ds $DOC_COVER_LEAD_ADJ \\$1
-.    el .ds $COVER_LEAD_ADJ \\$1
-.END
-\#
-\# MISCs get treated similarly to QUOTEs and BLOCKQUOTEs with respect to
-\# leading
-\#
-.MAC MISC_AUTOLEAD END
-.    if '\\$0'DOC_COVER_MISC_AUTOLEAD' .nr #DOC_COVER_MISC_AUTOLEAD (p;\\$1)
-.    if '\\$0'COVER_MISC_AUTOLEAD'     .nr #COVER_MISC_AUTOLEAD (p;\\$1)
-.END
-\#
-.ALIAS DOC_COVER_MISC_AUTOLEAD  MISC_AUTOLEAD
-.ALIAS COVER_MISC_AUTOLEAD      MISC_AUTOLEAD
-\#
-\# COVER PAGE START POSITION
-\# -------------------------
-\# *Arguments:
-\#   <distance from page top at which to start cover/doc cover>
-\# *Function:
-\#   Stores user supplied lead in/decrease in #COVER_START_POS
-\#   or #DOC_COVER_START_POS, depending on whether the macro was
-\#   called by an alias (DOC_COVER_ADVANCE).
-\# *Notes:
-\#   A unit of measure must be supplied.  Decimal fractions OK.
-\#   If user doesn't invoke this macro, the default starting
-\#   position for both covers and doc covers is 1/3 of the way
-\#   down the page (setup in DO_COVER).
-\#
-.MAC COVER_ADVANCE END
-.    ie '\\$0'DOC_COVER_ADVANCE' .nr #DOC_COVER_START_POS (\\$1)
-.    el .nr #COVER_START_POS (\\$1)
-.END
-\#
-\# UNDERLINE CONTROL
-\# -----------------
-\# *Arguments:
-\#   [ DOUBLE ] [ <underline weight> [<underline gap>] ] | <none> | <anything>
-\# *Function:
-\#   Toggles underlining of the element indicated by the calling alias
-\#   on or off.  Uses #<element>_UNDERLINE_WEIGHT to set the weight,
-\#   and defines string $<element>_UNDERLINE_GAP.
-\# *Notes:
-\#   Calling aliases COVER_ and DOCCOVER_ only apply if DOCTYPE is
-\#   NAMED and the DOCTYPE arg is passed to COVER or DOC_COVER.
-\#
-.MAC _UNDERLINE END
-.    ie '\\$1'' \{\
-.       if '\\$0'BIBLIOGRAPHY_STRING_UNDERLINE' \
-.          nr #BIB_STRING_UNDERLINE 1
-.       if '\\$0'BIBLIOGRAPHY_STRING_UNDERSCORE' \
-.          nr #BIB_STRING_UNDERLINE 1
-.       if '\\$0'COVER_UNDERLINE' \
-.          nr #COVER_UNDERLINE 1
-.       if '\\$0'DOC_COVER_UNDERLINE' \
-.          nr #DOC_COVER_UNDERLINE 1
-.       if '\\$0'DOCTYPE_UNDERLINE' \
-.          nr #DOCTYPE_UNDERLINE 1
-.       if '\\$0'ENDNOTE_STRING_UNDERLINE' \
-.          nr #EN_STRING_UNDERLINE 1
-.       if '\\$0'ENDNOTE_STRING_UNDERSCORE' \
-.          nr #EN_STRING_UNDERLINE 1
-.       if '\\$0'ENDNOTE_TITLE_UNDERLINE' \
-.          nr #EN_TITLE_UNDERLINE 1
-.       if '\\$0'ENDNOTE_TITLE_UNDERSCORE' \
-.          nr #EN_TITLE_UNDERLINE 1
-.    \}
-.    el \{\
-.       ie \\n[#NUM_ARGS]=1 \{\
-.          ds $ARG \\$1
-.          substring $ARG -1
-.          ie \B'\\*[$ARG]' \{\
-.             if !\\n[#PRINT_STYLE]=1 \{\
-.                if '\\$0'BIBLIOGRAPHY_STRING_UNDERLINE' \
-.                   BIBLIOGRAPHY_STRING_UNDERLINE_WEIGHT \\$1
-.                if '\\$0'BIBLIOGRAPHY_STRING_UNDERSCORE' \
-.                   BIBLIOGRAPHY_STRING_UNDERLINE_WEIGHT \\$1
-.                if '\\$0'COVER_UNDERLINE' \
-.                   COVER_UNDERLINE_WEIGHT \\$1
-.                if '\\$0'DOC_COVER_UNDERLINE' \
-.                   DOC_COVER_UNDERLINE_WEIGHT \\$1
-.                if '\\$0'DOCTYPE_UNDERLINE' \
-.                   DOCTYPE_UNDERLINE_WEIGHT \\$1
-.                if '\\$0'ENDNOTE_STRING_UNDERLINE' \{\
-.                   ENDNOTE_STRING_UNDERLINE_WEIGHT \\$1
-.                   nr #EN_STRING_UNDERLINE 1
-.                \}
-.                if '\\$0'ENDNOTE_STRING_UNDERSCORE' \{\
-.                   ENDNOTE_STRING_UNDERLINE_WEIGHT \\$1
-.                   nr #EN_STRING_UNDERLINE 1
-.                \}
-.                if '\\$0'ENDNOTE_TITLE_UNDERLINE' \
-.                   ENDNOTE_TITLE_UNDERLINE_WEIGHT \\$1
-.                if '\\$0'ENDNOTE_TITLE_UNDERSCORE' \
-.                   ENDNOTE_TITLE_UNDERLINE_WEIGHT \\$1
-.             \}
-.          \}
-.          el \{\
-.             if '\\$0'BIBLIOGRAPHY_STRING_UNDERLINE' \{\
-.                ie '\\$1'DOUBLE' .nr #BIB_STRING_UNDERLINE 2
-.                el .nr #BIB_STRING_UNDERLINE 0
-.             \}
-.             if '\\$0'BIBLIOGRAPHY_STRING_UNDERSCORE' \{\
-.                ie '\\$1'DOUBLE' .nr #BIB_STRING_UNDERLINE 2
-.                el .nr #BIB_STRING_UNDERLINE 0
-.             \}
-.             if '\\$0'COVER_UNDERLINE'     .nr #COVER_UNDERLINE 0
-.             if '\\$0'DOC_COVER_UNDERLINE' .nr #DOC_COVER_UNDERLINE 0
-.             if '\\$0'DOCTYPE_UNDERLINE'   .nr #DOCTYPE_UNDERLINE 0
-.             if '\\$0'ENDNOTE_STRING_UNDERLINE' \{\
-.                ie '\\$1'DOUBLE' .nr #EN_STRING_UNDERLINE 2
-.                el .nr #EN_STRING_UNDERLINE 0
-.             \}
-.             if '\\$0'ENDNOTE_STRING_UNDERSCORE' \{\
-.                ie '\\$1'DOUBLE' .nr #EN_STRING_UNDERLINE 2
-.                el .nr #EN_STRING_UNDERLINE 0
-.             \}
-.             if '\\$0'ENDNOTE_TITLE_UNDERLINE' \{\
-.                ie '\\$1'DOUBLE' .nr #EN_TITLE_UNDERLINE 2
-.                el .nr #EN_TITLE_UNDERLINE 0
-.             \}
-.             if '\\$0'ENDNOTE_TITLE_UNDERSCORE' \{\
-.                ie '\\$1'DOUBLE' .nr #EN_TITLE_UNDERLINE 2
-.                el .nr #EN_TITLE_UNDERLINE 0
-.             \}
-.          \}
-.       \}
-.       el \{\
-.          if !\\n[#PRINT_STYLE]=1 \{\
-.             if '\\$0'BIBLIOGRAPHY_STRING_UNDERLINE' \{\
-.                nr #BIB_STRING_UNDERLINE 1
-.                if '\\$1'DOUBLE' \{\
-.                   nr #BIB_STRING_UNDERLINE 2
-.                   shift
-.                \}
-.                BIBLIOGRAPHY_STRING_UNDERLINE_WEIGHT \\$1
-.                if !'\\$2'' \
-.                   ds $BIB_STRING_UNDERLINE_GAP \\$2
-.                if !'\\$3'' \
-.                   ds $BIB_STRING_RULE_GAP \\$3
-.             \}
-.             if '\\$0'BIBLIOGRAPHY_STRING_UNDERSCORE' \{\
-.                nr #BIB_STRING_UNDERLINE 1
-.                if '\\$1'DOUBLE' \{\
-.                   nr #BIB_STRING_UNDERLINE 2
-.                   shift
-.                \}
-.                BIBLIOGRAPHY_STRING_UNDERLINE_WEIGHT \\$1
-.                if !'\\$2'' .ds $BIB_STRING_UNDERLINE_GAP \\$2
-.                if !'\\$3'' .ds $BIB_STRING_RULE_GAP \\$3
-.             \}
-.             if '\\$0'COVER_UNDERLINE' \{\
-.                nr #COVER_UNDERLINE 1
-.                COVER_UNDERLINE_WEIGHT \\$1
-.                ds $COVER_UNDERLINE_GAP \\$2
-.             \}
-.             if '\\$0'DOC_COVER_UNDERLINE' \{\
-.                nr #DOC_COVER_UNDERLINE 1
-.                DOC_COVER_UNDERLINE_WEIGHT \\$1
-.                ds $DOC_COVER_UNDERLINE_GAP \\$2
-.             \}
-.             if '\\$0'DOCTYPE_UNDERLINE' \{\
-.                nr #DOCTYPE_UNDERLINE 1
-.                DOCTYPE_UNDERLINE_WEIGHT \\$1
-.                ds $DOCTYPE_UNDERLINE_GAP \\$2
-.             \}
-.\" ENDNOTE_STRING_UNDERLINE and ENDNOTE_STRING_UNDERSCORE are identical
-.\" _UNDERLINE left in for backward compatibility
-.             if '\\$0'ENDNOTE_STRING_UNDERLINE' \{\
-.                nr #EN_STRING_UNDERLINE 1
-.                if '\\$1'DOUBLE' \{\
-.                   nr #EN_STRING_UNDERLINE 2
-.                   shift
-.                \}
-.                ENDNOTE_STRING_UNDERLINE_WEIGHT \\$1
-.                if !'\\$2'' .ds $EN_STRING_UNDERLINE_GAP \\$2
-.                if !'\\$3'' .ds $EN_STRING_RULE_GAP \\$3
-.             \}
-.             if '\\$0'ENDNOTE_STRING_UNDERSCORE' \{\
-.                nr #EN_STRING_UNDERLINE 1
-.                if '\\$1'DOUBLE' \{\
-.                   nr #EN_STRING_UNDERLINE 2
-.                   shift
-.                \}
-.                ENDNOTE_STRING_UNDERLINE_WEIGHT \\$1
-.                if !'\\$2'' .ds $EN_STRING_UNDERLINE_GAP \\$2
-.                if !'\\$3'' .ds $EN_STRING_RULE_GAP \\$3
-.             \}
-.\" ENDNOTE_TITLE_UNDERLINE and ENDNOTE_TITLE_UNDERSCORE are identical
-.\" _UNDERLINE left in for backward compatibility
-.             if '\\$0'ENDNOTE_TITLE_UNDERLINE' \{\
-.                nr #EN_TITLE_UNDERLINE 1
-.                ENDNOTE_TITLE_UNDERLINE_WEIGHT \\$1
-.                ds $EN_TITLE_UNDERLINE_GAP \\$2
-.             \}
-.             if '\\$0'ENDNOTE_TITLE_UNDERSCORE' \{\
-.                nr #EN_TITLE_UNDERLINE 1
-.                ENDNOTE_TITLE_UNDERLINE_WEIGHT \\$1
-.                ds $EN_TITLE_UNDERLINE_GAP \\$2
-.             \}
-.          \}
-.       \}
-.    \}
-.END
-\#
-.ALIAS BIBLIOGRAPHY_STRING_UNDERSCORE _UNDERLINE
-.ALIAS BIBLIOGRAPHY_STRING_UNDERLINE  _UNDERLINE
-.ALIAS COVER_UNDERLINE                _UNDERLINE
-.ALIAS DOC_COVER_UNDERLINE            _UNDERLINE
-.ALIAS DOCTYPE_UNDERLINE              _UNDERLINE
-.ALIAS ENDNOTE_STRING_UNDERLINE       _UNDERLINE
-.ALIAS ENDNOTE_STRING_UNDERSCORE      _UNDERLINE
-.ALIAS ENDNOTE_TITLE_UNDERLINE        _UNDERLINE
-.ALIAS ENDNOTE_TITLE_UNDERSCORE       _UNDERLINE
-\#
-\# COVERS - WHETHER TO PRINT
-\# -------------------------
-\# *Arguments:
-\#   <none> | <anything>
-\# *Function:
-\#   Creates or removes registers #COVERS and #COVERS_OFF, checked for
-\#   in DEFAULTS (in START) prior to printing
-\#
-.MAC COVERS END
-.    ie '\\$0'DOC_COVERS' \{\
-.       ie '\\$1'' \{\
-.          rr #DOC_COVERS_OFF
-.          nr #DOC_COVERS 1
-.       \}
-.       el \{\
-.          rr #DOC_COVERS
-.          nr #DOC_COVERS_OFF 1
-.       \}
-.    \}
-.    el \{\
-.       ie '\\$1'' \{\
-.          rr #COVERS_OFF
-.          nr #COVERS 1
-.       \}
-.       el \{\
-.          rr #COVERS
-.          nr #COVERS_OFF 1
-.       \}
-.    \}
-.END
-\#
-\# COVER_COUNTS_PAGES
-\# ------------------
-\# *Arguments:
-\#   <none> | <anything>
-\# *Function:
-\#   Creates or removes registers #COVERS_COUNT or #DOCCOVERS_COUNT,
-\#   used in END_COVER to determine whether to increment the page
-\#   number silently when doc covers or covers are output.
-\#
-.MAC COVER_COUNTS_PAGES END
-.    if '\\$0'DOC_COVER_COUNTS_PAGES' \{\
-.       ie '\\$1'' .nr #DOCCOVERS_COUNT 1
-.       el .rr #DOCCOVERS_COUNT
-.       return
-.    \}
-.    if '\\$0'COVER_COUNTS_PAGES' \{\
-.       ie '\\$1'' .nr #COVERS_COUNT 1
-.       el .rr #COVERS_COUNT
-.       return
-.    \}
-.END
-\#
-.MAC DO_COVER END
-.    nr #DOING_COVER 1
-.    ev COVER
-.    evc 0
-.    TRAP OFF
-.    if \\n[#PAGINATE]=1 \{\
-.       nr #PAGINATION_WAS_ON 1
-.       rr #PAGINATE
-.    \}
-.    if \\n[#HEADERS_ON]=1 \{\
-.       nr #HEADERS_WERE_ON 1
-.       HEADERS OFF
-.    \}
-.    if \\n[#FOOTERS_ON]=1 \{\
-.       nr #FOOTERS_WERE_ON 1
-.       FOOTERS OFF
-.    \}
-.    if \\n[#COLUMNS]=1 \{\
-.       nr #COLUMNS_WERE_ON 1
-.       rr #COLUMNS
-.    \}
-.    ds PDF_BM
-.    ie '\\$0'DO_DOC_COVER' \{\
-.       ds  DOC_  DOC_
-.       nr #DOC_COVER_DONE 1
-.       if '\\*[$PDF_DOC_COVER_LABEL]'' \
-.          ds $PDF_DOC_COVER_LABEL Cover:
-.    \}
-.    el \{\
-.       if '\\*[$PDF_COVER_LABEL]'' .ds $PDF_COVER_LABEL Title Page:
-.    \}
-.    if !r#\\*[DOC_]COVER_START_POS \
-.       nr #\\*[DOC_]COVER_START_POS \\n[#PAGE_LENGTH]/3
-.    if \\n[#PRINT_STYLE]=1 \{\
-.       ie \\n[#SINGLE_SPACE]=1 .vs \\n[#DOC_LEAD]u*2u
-.       el .vs \\n[#DOC_LEAD]u
-.    \}
-.    if \\n[#PRINT_STYLE]=2 \{\
-.       vs \\n[#DOC_LEAD]u\\*[$\\*[DOC_]COVER_LEAD_ADJ]
-.       nr #\\*[DOC_]COVER_LEAD \\n[#LEAD]
-.    \}
-.    if \\n[.ns] .rs
-.    if '\\$0'DO_COVER' \{\
-.       if \\n[TOC.RELOCATE]==5 \{\
-.          if !rTOC_BH .TOC_BEFORE_HERE
-.       \}
-.    \}
-.    if '\\$0'DO_DOC_COVER' \{\
-.       if \\n[TOC.RELOCATE]==3 \{\
-.          if !rTOC_BH .TOC_BEFORE_HERE
-.       \}
-.    \}
-.    RV_HARD_SET_MARGINS
-.    sp |\\n[#\\*[DOC_]COVER_START_POS]u-1v
-.    if \\n[#\\*[DOC_]COVER_COLOR]=1 \{\
-.       nf
-\m[\\*[$\\*[DOC_]COVER_COLOR]]
-.       EOL
-.    \}
-.    \\*[DOC_]COVER_H_POS
-.    fam \\*[$\\*[DOC_]COVER_TITLE_FAM]
-.    ft  \\*[$\\*[DOC_]COVER_TITLE_FT]
-.    ps  \\*[$\\*[DOC_]COVER_TITLE_PT_SIZE]
-.    ie \\n[#PRINT_STYLE]=1 \{\
-.       ie \\n[#SINGLE_SPACE]=1 \{ .vs \\n[#DOC_LEAD]u*2u \}
-.       el \{ .vs \\n[#DOC_LEAD]u \}
-.    \}
-.    el .vs \\n[#\\*[DOC_]COVER_LEAD]u
-.    if \\n[#PRINT_STYLE]=1 .TYPEWRITER
-.    if \\n[#\\*[DOC_]COVER_TITLE] \{\
-.       nr PDFHREF.VIEW.LEADING.H \\n[PDFHREF.VIEW.LEADING]
-.       nr PDFHREF.VIEW.LEADING   \\n[nl]u-1v-1000u
-.    \}
-.    if \\n[#\\*[DOC_]COVER_TITLE]=1 \{\
-.       ie \\n[#PRINT_STYLE]=1 \{\
-.          CAPS
-.          nr #ARG_NUM 0 1
-.          while \\n[#TITLE_NUM]>=\\n+[#ARG_NUM] \{\
-.             UNDERSCORE "\\*[$TITLE_\\n[#ARG_NUM]]"
-.             if \\n[#ARG_NUM]>1 .as PDF_BM " \"
-.             as PDF_BM \\*[$TITLE_\\n[#ARG_NUM]]
-.          \}
-.          CAPS OFF
-.       \}
-.       el \{\
-.          nr #ARG_NUM 0 1
-.          while \\n[#TITLE_NUM]>=\\n+[#ARG_NUM] \{\
-.             ie \\n[#\\*[DOC_]COVER_TITLE_COLOR]=1 \{\
-.                PRINT \
-\m[\\*[$\\*[DOC_]COVER_TITLE_COLOR]]\\*[$TITLE_\\n[#ARG_NUM]]\m[]
-.             \}
-.             el \
-.                PRINT "\\*[$TITLE_\\n[#ARG_NUM]]
-.             if \\n[#ARG_NUM]>1 .as PDF_BM " \"
-.             as PDF_BM \\*[$TITLE_\\n[#ARG_NUM]]
-.          \}
-.       \}
-.       PDF_BOOKMARK 1 \\*[$PDF_\\*[DOC_]COVER_LABEL] \\*[PDF_BM]
-.\" .          PDF_TITLE \\*[PDF_BM]
-.    \}
-.    if \\n[#\\*[DOC_]COVER_TITLE]=2 \{\
-.       ie \\n[#PRINT_STYLE]=1 \{\
-.          CAPS
-.          nr #ARG_NUM 0 1
-.          while \\n[#DOCTITLE_NUM]>=\\n+[#ARG_NUM] \{\
-.             UNDERSCORE "\\*[$\\*[DOC_]TITLE_\\n[#ARG_NUM]]"
-.             if \\n[#ARG_NUM]>1 .as PDF_BM " \"
-.             as PDF_BM \\*[$\\*[DOC_]TITLE_\\n[#ARG_NUM]]
-.          \}
-.          CAPS OFF
-.       \}
-.       el \{\
-.          nr #ARG_NUM 0 1
-.          while \\n[#DOCTITLE_NUM]>=\\n+[#ARG_NUM] \{\
-.             ie \\n[#\\*[DOC_]COVER_TITLE_COLOR]=1 \{\
-.                PRINT \
-\m[\\*[$\\*[DOC_]COVER_TITLE_COLOR]]\\*[$\\*[DOC_]TITLE_\\n[#ARG_NUM]]\m[]
-.             \}
-.             el .PRINT \\*[$\\*[DOC_]TITLE_\\n[#ARG_NUM]]
-.             if \\n[#ARG_NUM]>1 .as PDF_BM " \"
-.             as PDF_BM \\*[$\\*[DOC_]TITLE_\\n[#ARG_NUM]]
-.          \}
-.       \}
-.       PDF_BOOKMARK 1 \\*[$PDF_\\*[DOC_]COVER_LABEL] \\*[PDF_BM]
-.\" .          PDF_TITLE \\*[PDF_BM]
-.    \}
-.    if \\n[#\\*[DOC_]COVER_TITLE]=3 \{\
-.       ie \\n[#PRINT_STYLE]=1 \{\
-.          CAPS
-.          PRINT \\*[$CHAPTER_STRING] \\*[$CHAPTER]
-.          CAPS OFF
-.       \}
-.       el \{\
-.          ie \\n[#\\*[DOC_]COVER_TITLE_COLOR]=1 \{\
-.             PRINT \
-\m[\\*[$\\*[DOC_]COVER_TITLE_COLOR]]\\*[$CHAPTER_STRING] \\*[$CHAPTER]\m[]
-.          \}
-.          el .PRINT \\*[$CHAPTER_STRING] \\*[$CHAPTER]
-.       \}
-.       PDF_BOOKMARK 1 \
-\\*[$PDF_\\*[DOC_]COVER_LABEL] \\*[$CHAPTER_STRING] \\*[$CHAPTER]
-.\" .          PDF_TITLE \\*[$CHAPTER_STRING] \\*[$CHAPTER]
-.    \}
-.    if \\n[#\\*[DOC_]COVER_TITLE]=4 \{\
-.       ie \\n[#PRINT_STYLE]=1 \{\
-.          CAPS
-.          nr #ARG_NUM 0 1
-.             ie \\n[#SINGLE_SPACE]=0 .vs \\n[#DOC_LEAD]u/2u
-.             el .vs \\n[#DOC_LEAD]u
-.             sp
-.          while \\n[#CHAPTER_TITLE_NUM]>=\\n+[#ARG_NUM] \{\
-.             UNDERSCORE "\\*[$CHAPTER_TITLE_\\n[#ARG_NUM]]"
-.             if \\n[#ARG_NUM]>1 .as PDF_BM " \"
-.             as PDF_BM \\*[$CHAPTER_TITLE_\\n[#ARG_NUM]]
-.          \}
-.          CAPS OFF
-.          if \\n[#SINGLE_SPACE]=0 .vs \\n[#DOC_LEAD]u
-.       \}
-.       el \{\
-.          nr #ARG_NUM 0 1
-.          while \\n[#CHAPTER_TITLE_NUM]>=\\n+[#ARG_NUM] \{\
-.             ie \\n[#\\*[DOC_]COVER_TITLE_COLOR]=1 \{\
-.                PRINT \
-\m[\\*[$\\*[DOC_]COVER_TITLE_COLOR]]\\*[$CHAPTER_TITLE_\\n[#ARG_NUM]]\m[]
-.             \}
-.             el .PRINT \\*[$CHAPTER_TITLE_\\n[#ARG_NUM]]
-.             if \\n[#ARG_NUM]>1 .as PDF_BM " \"
-.             as PDF_BM \\*[$CHAPTER_TITLE_\\n[#ARG_NUM]]
-.          \}
-.       \}
-.       PDF_BOOKMARK 1 \\*[$PDF_\\*[DOC_]COVER_LABEL] \\*[PDF_BM]
-.\" .          PDF_TITLE \\*[PDF_BM]
-.    \}
-.    if \\n[#\\*[DOC_]COVER_TITLE]=5 \{\
-.       ie \\n[#PRINT_STYLE]=1 \{\
-.          CAPS
-.          PRINT \\*[$CHAPTER_STRING] \\*[$CHAPTER]
-.          CAPS OFF
-.       \}
-.       el \{\
-.          ie \\n[#\\*[DOC_]COVER_TITLE_COLOR]=1 \{\
-.             PRINT \
-\m[\\*[$\\*[DOC_]COVER_TITLE_COLOR]]\\*[$CHAPTER_STRING] \\*[$CHAPTER]\m[]
-.          \}
-.          el .PRINT \\*[$CHAPTER_STRING] \\*[$CHAPTER]
-.       \}
-.       if !'\\*[$CHAPTER_TITLE_1]'' \{\
-.          ie \\n[#PRINT_STYLE]=1 \{\
-.             ie \\n[#SINGLE_SPACE]=0 .vs \\n[#DOC_LEAD]u/2u
-.             el .vs \\n[#DOC_LEAD]u
-.             sp
-.             nr #ARG_NUM 0 1
-.             while \\n[#CHAPTER_TITLE_NUM]>=\\n+[#ARG_NUM] \{\
-.                UNDERSCORE "\\*[$CHAPTER_TITLE_\\n[#ARG_NUM]]"
-.                if \\n[#ARG_NUM]>1 .as PDF_BM " \"
-.                as PDF_BM \\*[$CHAPTER_TITLE_\\n[#ARG_NUM]]
-.             \}
-.             if \\n[#SINGLE_SPACE]=0 .vs \\n[#DOC_LEAD]u
-.          \}
-.          el \{\
-.             fam \\*[$\\*[DOC_]COVER_CHAPTER_TITLE_FAM]
-.             ft  \\*[$\\*[DOC_]COVER_CHAPTER_TITLE_FT]
-.             ps  \\*[$\\*[DOC_]COVER_CHAPTER_TITLE_PT_SIZE]
-.             ALD \\n[.v]u/4u \"Put a little space before the chapter title
-.             nr #ARG_NUM 0 1
-.             while \\n[#CHAPTER_TITLE_NUM]>=\\n+[#ARG_NUM] \{\
-.                ie \\n[#\\*[DOC_]COVER_TITLE_COLOR]=1 \{\
-.                   PRINT \
-\m[\\*[$\\*[DOC_]COVER_TITLE_COLOR]]\\*[$CHAPTER_TITLE_\\n[#ARG_NUM]]\m[]
-.                \}
-.                el .PRINT \\*[$CHAPTER_TITLE_\\n[#ARG_NUM]]
-.                if \\n[#ARG_NUM]>1 .as PDF_BM " \"
-.                as PDF_BM \\*[$CHAPTER_TITLE_\\n[#ARG_NUM]]
-.             \}
-.          \}
-.       \}
-.       PDF_BOOKMARK 1 \\*[$PDF_\\*[DOC_]COVER_LABEL] \\*[PDF_BM]
-.\" .          PDF_TITLE \\*[PDF_BM]
-.    \}
-.    if \\n[#\\*[DOC_]COVER_TITLE]=6 \{\
-.       ie \\n[#PRINT_STYLE]=1 \{\
-.          CAPS
-.          nr #ARG_NUM 0 1
-.          while \\n[#\\*[DOC_]COVER_TITLE_NUM]>=\\n+[#ARG_NUM] \{\
-.             UNDERSCORE "\\*[$\\*[DOC_]COVER_TITLE_\\n[#ARG_NUM]]"
-.                if \\n[#ARG_NUM]>1 .as PDF_BM " \"
-.                as PDF_BM \\*[$\\*[DOC_]COVER_TITLE_\\n[#ARG_NUM]]
-.          \}
-.          CAPS OFF
-.       \}
-.       el \{\
-.          nr #ARG_NUM 0 1
-.          while \\n[#\\*[DOC_]COVER_TITLE_NUM]>=\\n+[#ARG_NUM] \{\
-.             ie \\n[#\\*[DOC_]COVER_TITLE_COLOR]=1 \{\
-.                PRINT \
-\m[\\*[$\\*[DOC_]COVER_TITLE_COLOR]]\
-\\*[$\\*[DOC_]COVER_TITLE_\\n[#ARG_NUM]]\m[]
-.             \}
-.             el .PRINT \\*[$\\*[DOC_]COVER_TITLE_\\n[#ARG_NUM]]
-.             if \\n[#ARG_NUM]>1 .as PDF_BM " \"
-.             as PDF_BM \\*[$\\*[DOC_]COVER_TITLE_\\n[#ARG_NUM]]
-.          \}
-.       \}
-.       PDF_BOOKMARK 1 \\*[$PDF_\\*[DOC_]COVER_LABEL] \\*[PDF_BM]
-.\" .          PDF_TITLE \\*[PDF_BM]
-.    \}
-.    if \\n[#\\*[DOC_]COVER_TITLE] \{\
-.      nr PDFHREF.VIEW.LEADING \\n[PDFHREF.VIEW.LEADING.H]
-.      rr PDFHREF.VIEW.LEADING.H
-.    \}
-.    if !\\n[#DOC_TYPE]=2 \{\
-.       if \\n[#\\*[DOC_]COVER_SUBTITLE]=1 \{\
-.          fam \\*[$\\*[DOC_]COVER_SUBTITLE_FAM]
-.          ft  \\*[$\\*[DOC_]COVER_SUBTITLE_FT]
-.          ps  \\*[$\\*[DOC_]COVER_SUBTITLE_PT_SIZE]
-.          if \\n[#PRINT_STYLE]=1 \{\
-.             TYPEWRITER
-.             ie \\n[#SINGLE_SPACE]=0 .vs \\n[#DOC_LEAD]u/2u
-.             el .vs \\n[#DOC_LEAD]u
-.             sp
-.          \}
-.          if \\n[#\\*[DOC_]COVER]=1 \{\
-.             ie !'\\*[$SUBTITLE_\\*[DOC_]COVER_1]'' \{\
-.                nr #SUBTITLES \\n[#SUBTITLE_\\*[DOC_]COVER_NUM]
-.                nr #NEXT_SUBTITLE 0 1
-.                while \\n[#SUBTITLES]>\\n[#NEXT_SUBTITLE] \{\
-.                   ie \\n[#\\*[DOC_]COVER_SUBTITLE_COLOR]=1 \{\
-.                      PRINT \
-\m[\\*[$\\*[DOC_]COVER_SUBTITLE_COLOR]]\
-\\*[$SUBTITLE_\\*[DOC_]COVER_\\n+[#NEXT_SUBTITLE]]\m[]
-.                   \}
-.                   el .PRINT \
-\\*[$SUBTITLE_\\*[DOC_]COVER_\\n+[#NEXT_SUBTITLE]]
-.                \}
-.             \}
-.             el \{\
-.                nr #SUBTITLES \\n[#SUBTITLE_NUM]
-.                nr #NEXT_SUBTITLE 0 1
-.                while \\n[#SUBTITLES]>\\n[#NEXT_SUBTITLE] \{\
-.                   ie \\n[#\\*[DOC_]COVER_SUBTITLE_COLOR]=1 \{\
-.                      PRINT \
-\m[\\*[$\\*[DOC_]COVER_SUBTITLE_COLOR]]\\*[$SUBTITLE_\\n+[#NEXT_SUBTITLE]]\m[]
-.                   \}
-.                   el .PRINT \\*[$SUBTITLE_\\n+[#NEXT_SUBTITLE]]
-.                \}
-.             \}
-.          \}
-.          if \\n[#PRINT_STYLE]=1 \{\
-.             if \\n[#SINGLE_SPACE]=0 .vs
-.          \}
-.       \}
-.       if \\n[#PRINT_STYLE]=1 \{\
-.          if !r#\\*[DOC_]COVER_SUBTITLE .sp
-.       \}
-.    \}
-.    if \\n[#\\*[DOC_]COVER_AUTHOR]=1 \{\
-.       fam \\*[$\\*[DOC_]COVER_AUTHOR_FAM]
-.       ft  \\*[$\\*[DOC_]COVER_AUTHOR_FT]
-.       ps  \\*[$\\*[DOC_]COVER_AUTHOR_PT_SIZE]
-.       if \\n[#PRINT_STYLE]=1 \{\
-.          TYPEWRITER
-.          ie \\n[#SINGLE_SPACE]=1 .vs \\n[#DOC_LEAD]u
-.          el .vs \\n[#DOC_LEAD]u/2u
-.          sp
-.       \}
-.       ie d$ATTRIBUTE_STRING_DO_CCOVER \{\
-.          ie \\n[#\\*[DOC_]COVER_ATTRIBUTE_COLOR]=1 \{\
-.             PRINT \
-\&\m[\\*[$\\*[DOC_]COVER_ATTRIBUTE_COLOR]]\
-\\*[$ATTRIBUTE_STRING_\\*[DOC_]COVER]\m[]
-.          \}
-.          el .PRINT \&\\*[$ATTRIBUTE_STRING_\\*[DOC_]COVER]
-.       \}
-.       el \{\
-.          if d$ATTRIBUTE_STRING \{\
-.             ie \\n[#\\*[DOC_]COVER_ATTRIBUTE_COLOR]=1 \{\
-.                PRINT \
-\&\m[\\*[$\\*[DOC_]COVER_ATTRIBUTE_COLOR]]\\*[$ATTRIBUTE_STRING]\m[]
-.             \}
-.             el .PRINT \&\\*[$ATTRIBUTE_STRING]
-.          \}
-.       \}
-.       PRINT_AUTHORS
-.    \}
-.    fam \\*[$\\*[DOC_]COVER_DOCTYPE_FAM]
-.    ft  \\*[$\\*[DOC_]COVER_DOCTYPE_FT]
-.    ps  \\*[$\\*[DOC_]COVER_DOCTYPE_PT_SIZE]
-.    sp
-.    if \\n[#DOC_TYPE]=3 \{\
-.       if \\n[#\\*[DOC_]COVER_DOCTYPE]=1 \{\
-.          ie \\n[#PRINT_STYLE]=1 \{\
-.             TYPEWRITER
-.             vs \\n[#DOC_LEAD]u
-.             UNDERSCORE2 "\\*[$DOC_TYPE]"
-.          \}
-.          el \{\
-.             nr #FROM_\\*[DOC_]COVER 1
-.             ie \\n[#\\*[DOC_]COVER_DOCTYPE_COLOR]=1 \{\
-.                COLOR \\*[$\\*[DOC_]COVER_DOCTYPE_COLOR]
-.                ie \\n[#\\*[DOC_]COVER_UNDERLINE]=1 \
-.                   UNDERSCORE \\*[$\\*[DOC_]COVER_UNDERLINE_GAP] "\\*[$DOC_TYPE]"
-.                el .PRINT "\\*[$DOC_TYPE]"
-.             \}
-.             el \{\
-.                ie \\n[#\\*[DOC_]COVER_UNDERLINE]=1 \
-.                   UNDERSCORE \
-\\*[$\\*[DOC_]COVER_UNDERLINE_GAP] "\\*[$DOC_TYPE]"
-.                el .PRINT "\\*[$DOC_TYPE]"
-.             \}
-.             rr #FROM_\\*[DOC_]COVER
-.          \}
-.       \}
-.    \}
-.    sp |\\n[#VISUAL_B_MARGIN]u
-.    ie \\n[#PRINT_STYLE]=1 \{\
-.       TYPEWRITER
-.       ie \\n[#SINGLE_SPACE]=1 .vs \\n[#DOC_LEAD]u
-.       el .vs \\n[#DOC_LEAD]u/2u
-.       sp
-.    \}
-.    el \{\
-.       fam \\*[$\\*[DOC_]COVER_COPYRIGHT_FAM]
-.       ft  \\*[$\\*[DOC_]COVER_COPYRIGHT_FT]
-.       ps \\*[$\\*[DOC_]COVER_COPYRIGHT_PT_SIZE]
-.       vs \\n[.ps]u+\\n[#\\*[DOC_]COVER_MISC_AUTOLEAD]u
-.       nr #COPYRIGHT_V_ADJ \\n[#DOC_LEAD]-\\n[.v]
-.       sp \\n[#COPYRIGHT_V_ADJ]u
-.       rr #COPYRIGHT_V_ADJ
-.    \}
-.    if \\n[#\\*[DOC_]COVER_COPYRIGHT]=1 \{\
-.       if !'\\*[$COPYRIGHT_DOCCOVER]'' \{\
-.          ds $SAVED_COPYRIGHT \\*[$COPYRIGHT]
-.          ds $COPYRIGHT \\*[$COPYRIGHT_DOCCOVER]
-.       \}
-.       QUAD \\*[$\\*[DOC_]COVER_COPYRIGHT_QUAD]
-.       ie \\n[#\\*[DOC_]COVER_COPYRIGHT_COLOR]=1 \{\
-.          PRINT \m[\\*[$\\*[DOC_]COVER_COPYRIGHT_COLOR]]\\*[$COPYRIGHT]\m[]
-.       \}
-.       el .PRINT \\*[$COPYRIGHT]
-.       if d$SAVED_COPYRIGHT .ds $COPYRIGHT \\*[$SAVED_COPYRIGHT]
-.    \}
-.    br
-.    if \\n[#\\*[DOC_]COVER_MISC]=1 \{\
-.       if \\n[#PRINT_STYLE]=2 \{\
-.          fam \\*[$\\*[DOC_]COVER_MISC_FAM]
-.          ft  \\*[$\\*[DOC_]COVER_MISC_FT]
-.          ps \\*[$\\*[DOC_]COVER_MISC_PT_SIZE]
-.       \}
-.       QUAD \\*[$\\*[DOC_]COVER_MISC_QUAD]
-.       ie !'\\*[$MISC_\\*[DOC_]COVER_1]'' \{\
-.          nr #MISCS \\n[#MISC_\\*[DOC_]COVER_NUM]
-.          nr #NEXT_MISC 0 1
-.          while \\n[#MISCS]>\\n[#NEXT_MISC] \{\
-.             ie \\n[#\\*[DOC_]COVER_MISC_COLOR]=1 \{\
-.                da MISC_DIV
-.                PRINT \
-\m[\\*[$\\*[DOC_]COVER_MISC_COLOR]]\\*[$MISC_\\*[DOC_]COVER_\\n+[#NEXT_MISC]]\m[]
-.                br
-.                da
-.                rm $MISC_\\*[DOC_]COVER_\\n[#NEXT_MISC]
-.                rm $MISC_\\n[#NEXT_MISC]
-.             \}
-.             el \{\
-.                da MISC_DIV
-.                PRINT \\*[$MISC_\\*[DOC_]COVER_\\n+[#NEXT_MISC]]
-.                br
-.                da
-.                rm $MISC_\\*[DOC_]COVER_\\n[#NEXT_MISC]
-.                rm $MISC_\\n[#NEXT_MISC]
-.             \}
-.          \}
-.          rm $MISC_\\n+[#NEXT_MISC]
-.       \}
-.       el \{\
-.          nr #MISCS \\n[#MISC_NUM]
-.          nr #NEXT_MISC 0 1
-.          while (\\n[#MISCS]>=\\n+[#NEXT_MISC]) \{\
-.             ie \\n[#\\*[DOC_]COVER_MISC_COLOR]=1 \{\
-.                da MISC_DIV
-.                PRINT \
-\m[\\*[$\\*[DOC_]COVER_MISC_COLOR]]\\*[$MISC_\\n[#NEXT_MISC]]\m[]
-.                br
-.                da
-.             \}
-.             el \{\
-.                da MISC_DIV
-.                PRINT \\*[$MISC_\\n[#NEXT_MISC]]
-.                br
-.                da
-.             \}
-.             nr #MISC_DEPTH +\\n[dn]
-.          \}
-.       \}
-.       nr #MISC_DEPTH -\\n[#DOC_LEAD]
-.       sp |\\n[#VISUAL_B_MARGIN]u-\\n[#MISC_DEPTH]u
-.       nf
-.       MISC_DIV
-.       rm MISC_DIV
-.       rr #MISC_DEPTH
-.    \}
-.    if '\\$0'DO_COVER'     .nr #COVER_END 1
-.    if '\\$0'DO_DOC_COVER' .nr #DOC_COVER_END 1
-.    if \\n[TOC.RELOCATE]==1 \{\
-.       if !\\n[#COVER_BLANKPAGE] \
-.          if !rTOC_BH .TOC_AFTER_HERE
-.    \}
-.    if '\\$0'DO_COVER' \{\
-.       if \\n[TOC.RELOCATE]==6 \
-.          if !rTOC_BH .TOC_AFTER_HERE
-.    \}
-.    if '\\$0'DO_DOC_COVER' \{\
-.       if \\n[TOC.RELOCATE]==4 \
-.          if !rTOC_BH .TOC_AFTER_HERE
-.    \}
-.    if '\\$0'DO_DOC_COVER' .rm DOC_
-.    END_COVER
-.END
-\#
-\# Macro to terminate (doc)cover processing
-\#
-.MAC END_COVER END
-.    EOL
-.    TRAP
-.    NEWPAGE
-.    if \\n[#PAGINATION_WAS_ON]=1 .nr % +1
-.    if \\n[#DOC_COVER_END]=1 \{\
-.       ie \\n[#DOC_COVER_BLANKPAGE]=1 \{\
-.          if \\n[TOC.RELOCATE] \
-.             if !\\n[#TOC_BH] .TOC_AFTER_HERE
-.          NEWPAGE
-.          rr #DOC_COVER_BLANKPAGE
-.          if !\\n[#DOCCOVERS_COUNT]=1 .nr % -2
-.       \}
-.       el \
-.          if !\\n[#DOCCOVERS_COUNT]=1 .nr #PAGE_NUM_ADJ -1
-.       rr #DOC_COVER_END
-.    \}
-.    if \\n[#COVER_END]=1 \{\
-.       ie \\n[#COVER_BLANKPAGE]=1 \{\
-.          if \\n[TOC.RELOCATE] \
-.             if !\\n[TOC_BH] .TOC_AFTER_HERE
-.          NEWPAGE
-.          rr #COVER_BLANKPAGE
-.          if !\\n[#COVERS_COUNT]=1 .nr % -2
-.       \}
-.       el \
-.          if !\\n[#COVERS_COUNT]=1 .nr #PAGE_NUM_ADJ -1
-.       rr #COVER_END
-.    \}
-.    if !'\\n[.ev]'0' .ev
-.    if \\n[#PAGINATION_WAS_ON] \{\
-.       rr #PAGINATION_WAS_ON
-.       PAGINATE
-.       PAGENUMBER \\n%+\\n[#PAGE_NUM_ADJ]-1
-.    \}
-.    if \\n[#HEADERS_WERE_ON] \{\
-.       rr #HEADERS_WERE_ON
-.       HEADERS
-.    \}
-.    if \\n[#FOOTERS_WERE_ON] \{\
-.       rr #FOOTERS_WERE_ON
-.       FOOTERS
-.    \}
-.    if \\n[#COLUMNS_WERE_ON]=1 \{\
-.       rr #COLUMNS_WERE_ON 1
-.       nr #COLUMNS 1
-.    \}
-.    rr #DOING_COVER
-.    if \\n[.ns] .nop \&
-.    if \\n[#RECTO_VERSO] .nr #RV_POST_COVER 1
-.END
-\#
-\# Macro to begin document processing
-\#
-.MAC START END
-.    nr #DOCS 1
-.    if \\n[TOC.RELOCATE]==2 \{\
-.       if !\\n[TOC_BH] .TOC_BEFORE_HERE
-.    \}
-.    if !n .nop \X'ps: exec 0 setlinejoin'\X'ps: exec 0 setlinecap'
-.    if !\\n[#PRINT_STYLE] \{\
-.       PRINTSTYLE TYPEWRITE
-.       PRINT \&
-.       po 6P
-.       ll 39P
-.       ta \\n[.l]u
-.       sp |1i-1v
-.       CENTER
-.       PRINT "You neglected to enter a PRINTSTYLE"
-.       fl
-.       ab [mom]: PRINTSTYLE missing.  Aborting '\\n[.F]'.
-.    \}
-.    if \\n[#LINENUMBERS]=1 \{\
-.       nn
-.       NUMBER_LINES OFF
-.       nr #LINENUMBERS 2
-.    \}
-.    if \\n[#COLLATE] \{\
-.       COPYSTYLE \\*[$COPY_STYLE]
-.       nr #HEADERS_ON \\n[#HEADER_STATE]
-.       if \\n[#PAGE_NUM_V_POS]=1 .nr #PAGINATE \\n[#PAGINATION_STATE]
-.       PRINT \&
-.       if !'\\*[$RESTORE_PAGENUM_STYLE]'' \{\
-.          PAGENUM_STYLE \\*[$RESTORE_PAGENUM_STYLE]
-.          rm $RESTORE_PAGENUM_STYLE
-.       \}
-.    \}
-.    DEFAULTS
-.    nr #PAGE_TOP \\n[#T_MARGIN]u-\\n[#DOC_LEAD]u
-.    rr #RESET_TRAPS
-.    if !r#EN_Q_AUTOLEAD  .nr #EN_Q_LEAD \\n[#EN_LEAD]
-.    if !r#EN_BQ_AUTOLEAD .nr #EN_BQ_LEAD \\n[#EN_LEAD]
-.\"  TOC/recto-verso stuff
-.    if !r@L_MARGIN .nr @L_MARGIN \\n[#DOC_L_MARGIN]
-.    if !r@R_MARGIN .nr @R_MARGIN \\n[#DOC_R_MARGIN]
-.\" Covers and doc covers
-.    if \\n[#DOC_COVERS]=1 \{\
-.       if \\n[#DOC_COVER]=1 \{\
-.          DO_DOC_COVER
-.          rr #DOC_COVER
-.          rr #DOC_COVER_TITLE
-.          rr #DOC_COVER_SUBTITLE
-.          rr #DOC_COVER_AUTHOR
-.          rr #DOC_COVER_DOCTYPE
-.          rr #DOC_COVER_COPYRIGHT
-.          rr #DOC_COVER_MISC
-.       \}
-.    \}
-.    if \\n[#COVERS]=1 \{\
-.       if \\n[#COVER]=1 \{\
-.          DO_COVER
-.          rr #COVER
-.          rr #COVER_TITLE
-.          rr #COVER_SUBTITLE
-.          rr #COVER_AUTHOR
-.          rr #COVER_DOCTYPE
-.          rr #COVER_COPYRIGHT
-.          rr #COVER_MISC
-.       \}
-.    \}
-.    if !\\n[#TOC] .RV_HARD_SET_MARGINS
-.    if \\n[#COLUMNS] .COLUMNS \\n[#NUM_COLS] \\n[#GUTTER]u
-.\" Collect TITLE for TOC.
-.    if !\\n[#TOC]=1 \{\
-.       nr #TOC_ENTRY_PN \\n%+\\n[#PAGE_NUM_ADJ]
-.       af #TOC_ENTRY_PN \\g[#PAGENUMBER]
-.       ie \\n[#USER_SET_TITLE_ITEM] \{\
-.          ds $TOC_TITLE_ITEM \\*[$USER_SET_TITLE_ITEM]
-.          rr #USER_SET_TITLE_ITEM
-.          rm $USER_SET_TITLE_ITEM
-.       \}
-.       el \{\
-.          ie \\n[#DOC_TYPE]=2 \{\
-.             ie '\\*[$CHAPTER_TITLE]'' \
-.                ds $TOC_TITLE_ITEM \\*[$CHAPTER_STRING] \\*[$CHAPTER]
-.             el \{\
-.                ie '\\*[$CHAPTER]'' \
-.                   ds $TOC_TITLE_ITEM \\*[$CHAPTER_TITLE]
-.                el \
-.                   ds $TOC_TITLE_ITEM \
-\\*[$CHAPTER_STRING] \\*[$CHAPTER]: \\*[$CHAPTER_TITLE]
-.             \}
-.          \}
-.          el \
-.             ds $TOC_TITLE_ITEM \\*[$TITLE]
-.       \}
-.       if \\n[#TOC_AUTHORS]=1 \{\
-.          ie '\\*[$TOC_AUTHORS]'' \
-.             as $TOC_TITLE_ITEM / \\*[$AUTHOR_1]
-.          el \{\
-.             as $TOC_TITLE_ITEM / \\*[$TOC_AUTHORS]
-.             rm $TOC_AUTHORS
-.          \}
-.       \}
-.       sp |\\n[#DOCHEADER_ADVANCE]u-\\n[#DOC_LEAD]u
-.       PDF_BOOKMARK 1 \\*[$TOC_TITLE_ITEM]
-.       as $TOC_TITLE_ITEM \|
-.       if \\n[#PREFIX_CH_NUM] \{\
-.          rn $TOC_TITLE_ITEM $TOC_TITLE_ITEM_OLD
-.          ds $TOC_CH_NUM \\n[#CH_NUM].\[toc-hd-num-spacer]
-.          ds $TOC_TITLE_ITEM \\*[$TOC_CH_NUM]\\*[$TOC_TITLE_ITEM_OLD]
-.          rm $TOC_TITLE_ITEM_OLD
-.       \}
-.       TITLE_TO_TOC
-.    \}
-.    if !\\n[#TOC] .nr #POST_TOP 1
-.\" End TITLE collection
-.    if \\n[#PRINT_PAGENUM_ON_PAGE_1] \{\
-.       br
-.       sp |\\n[#HEADER_MARGIN]u
-.       PRINT_PAGE_NUMBER
-.    \}
-.    rr #COLLATE
-.    rr #PAGINATION_STATE
-.\" End collate stuff
-.    ie \\n[#DOC_HEADER]=0 \{\
-.       if \\n[.ns] .rs
-.       if \\n[#DOC_TYPE]=4 \
-.          if !'\\n[.z]'' .di
-.       nr #STORED_PP_INDENT \\n[#PP_INDENT]
-.       PARA_INDENT 0
-.       PP
-.       PARA_INDENT \\n[#STORED_PP_INDENT]u
-.       rr #STORED_PP_INDENT
-.       ie r#ADVANCE_FROM_TOP \{\
-.          br
-.          sp |\\n[#ADVANCE_FROM_TOP]u-1v
-.          if \\n[#ADJ_DOC_LEAD]=1 .SHIM
-.       \}
-.       el \{\
-.          br
-.          sp |\\n[#T_MARGIN]u-1v
-.       \}
-.       if \\n[#COLUMNS] \{\
-.          mk dc
-.          nr #COL_NUM 0 1
-.          po \\n[#COL_\\n+[#COL_NUM]_L_MARGIN]u
-.          nr #L_MARGIN \\n[.o]
-.          ll \\n[#COL_L_LENGTH]u
-.       \}
-.       nr #PP 0
-.    \}
-.    el \{\
-.       if \\n[#AUTO_LEAD] .nr #RESTORE_AUTO_LEAD 1
-.       if \\n[#PRINT_STYLE]=2 .vs \\n[#DOC_LEAD]u\\*[$DOCHEADER_LEAD_ADJ]
-.       if \\n[#RESTORE_AUTO_LEAD] \{\
-.          nr #AUTO_LEAD 1
-.          nr #AUTOLEAD_VALUE  \\n[#SAVED_AUTOLEAD_VALUE]
-.       \}
-.       nr #DOCHEADER_LEAD \\n[#LEAD]
-.\" Default doctype
-.       if \\n[#DOC_TYPE]=1 \{\
-.          if \\n[.ns] .rs
-.          ev DOCHEADER
-.          if \\n[#DOCHEADER_COLOR]=1 \{\
-.             nf
-\m[\\*[$DOCHEADER_COLOR]]
-.             EOL
-.          \}
-.          L_MARGIN \\n[#DOC_L_MARGIN]u
-.          LL       \\n[#DOC_L_LENGTH]u
-.          ta \\n[.l]u
-.          if \\n[#PRINT_STYLE]=1 \{\
-.             DOC_HEADER_QUAD
-.             TYPEWRITER
-.             if !\\n[#SINGLE_SPACE] \{\
-.                vs (\\n[#DOC_LEAD]u/2u)+(\\n[.v]u/3u)
-.                sp |\\n[#T_MARGIN]u-1v
-.             \}
-.             if !'\\*[$TITLE_1]'' \{\
-.                CAPS
-.                nr #ARG_NUM 0 1
-.                while \\n[#TITLE_NUM]>=\\n+[#ARG_NUM] \{\
-.                   UNDERSCORE 3p "\\*[$TITLE_\\n[#ARG_NUM]]"
-.                \}
-.                CAPS OFF
-.             \}
-.             if !'\\*[$SUBTITLE]'' \{\
-.                sp
-.                nr #ARG_NUM 0 1
-.                while \\n[#SUBTITLE_NUM]>=\\n+[#ARG_NUM] \{\
-.                   UNDERSCORE 3p "\\*[$SUBTITLE_\\n[#ARG_NUM]]"
-.                \}
-.             \}
-.             if !'\\*[$AUTHOR_1]'' \{\
-.                sp
-.                PRINT \&\\*[$ATTRIBUTE_STRING]
-.                nr #AUTHORS \\n[#AUTHOR_NUM]
-.                nr #NEXT_AUTHOR 0 1
-.                if !\\n[#SINGLE_SPACE] .vs (\\n[#DOC_LEAD]u/2u)+(\\n[.v]u/3u)
-.                while \\n[#AUTHORS]>\\n[#NEXT_AUTHOR] \{\
-.                   PRINT \\*[$AUTHOR_\\n+[#NEXT_AUTHOR]]
-.                \}
-.             \}
-.          \}
-.          if \\n[#PRINT_STYLE]=2 \{\
-.             DEFAULT_DOCHEADER
-.          \}
-.          ev
-.       \}
-.\" Chapter doctype
-.       if \\n[#DOC_TYPE]=2 \{\
-.          if \\n[.ns] .rs
-.          ev DOCHEADER
-.          if \\n[#DOCHEADER_COLOR]=1 \{\
-.             nf
-\m[\\*[$DOCHEADER_COLOR]]
-.             EOL
-.          \}
-.          L_MARGIN \\n[#DOC_L_MARGIN]u
-.          LL       \\n[#DOC_L_LENGTH]u
-.          ta \\n[.l]u
-.          if \\n[#PRINT_STYLE]=1 \{\
-.             CENTER
-.             TYPEWRITER
-.             if !\\n[#SINGLE_SPACE] \{\
-.                vs (\\n[#DOC_LEAD]u/2u)+(\\n[.v]u/3u)
-.                sp |\\n[#T_MARGIN]u-1v
-.             \}
-.             ie '\\*[$CHAPTER]'' \{\
-.                CAPS
-.                ie !'\\*[$CHAPTER_TITLE]'' \{\
-.                   nr #ARG_NUM 0 1
-.                   while \\n[#CHAPTER_TITLE_NUM]>=\\n+[#ARG_NUM] \{\
-.                      UNDERSCORE 3p "\\*[$CHAPTER_TITLE_\\n[#ARG_NUM]]"
-.                   \}
-.                \}
-.                el \{\
-.                   CAPS
-.                   UNDERSCORE 3p "\\*[$CHAPTER_STRING]"
-.                \}
-.                CAPS OFF
-.                RLD 1v
-.             \}
-.             el \{\
-.                CAPS
-.                PRINT \\*[$CHAPTER_STRING] \\*[$CHAPTER]
-.                CAPS OFF
-.                if !'\\*[$CHAPTER_TITLE]'' \{\
-.                   sp
-.                   nr #ARG_NUM 0 1
-.                   while \\n[#CHAPTER_TITLE_NUM]>=\\n+[#ARG_NUM] \{\
-.                      UNDERSCORE 3p "\\*[$CHAPTER_TITLE_\\n[#ARG_NUM]]"
-.                   \}
-.                \}
-.                RLD 1v
-.             \}
-.             vs \\n[#DOC_LEAD]u
-.             if \\n[#SINGLE_SPACE] .sp 2
-.          \}
-.          if \\n[#PRINT_STYLE]=2 \{\
-.             CHAPTER_DOCHEADER
-.             di DOCHEADER_DIVERSION \" This diversion is only
-.             br                     \" necessary to find the depth of the
-.             CHAPTER_DOCHEADER      \" docheader
-.             br
-.             di
-.             nr #DOCHEADER_DEPTH \\n[dn]-\\n[#DOCHEADER_LEAD] \" Storing the depth (height) of the diversion
-.                                                              \" in #DOCHEADER_DEPTH
-.             rm DOCHEADER_DIVERSION                           \" Removing the diversion macro
-.          \}
-.          ev
-.       \}
-.\" Named
-.       if \\n[#DOC_TYPE]=3 \{\
-.          if \\n[.ns] .rs
-.          ev DOCHEADER
-.          if \\n[#DOCHEADER_COLOR]=1 \{\
-.             nf
-\m[\\*[$DOCHEADER_COLOR]]
-.             EOL
-.          \}
-.          L_MARGIN \\n[#DOC_L_MARGIN]u
-.          LL       \\n[#DOC_L_LENGTH]u
-.          ta \\n[.l]u
-.          if \\n[#PRINT_STYLE]=1 \{\
-.             CENTER
-.             TYPEWRITER
-.             if !\\n[#SINGLE_SPACE] \{\
-.                vs (\\n[#DOC_LEAD]u/2u)+(\\n[.v]u/3u)
-.                sp |\\n[#T_MARGIN]u-1v
-.             \}
-.             if !'\\*[$TITLE_1]'' \{\
-.                CAPS
-.                nr #ARG_NUM 0 1
-.                while \\n[#TITLE_NUM]>=\\n+[#ARG_NUM] \{\
-.                   UNDERSCORE 3p "\\*[$TITLE_\\n[#ARG_NUM]]"
-.                \}
-.                CAPS OFF
-.             \}
-.             if !'\\*[$SUBTITLE]'' \{\
-.                sp
-.                nr #ARG_NUM 0 1
-.                while \\n[#SUBTITLE_NUM]>=\\n+[#ARG_NUM] \{\
-.                   UNDERSCORE 3p "\\*[$SUBTITLE_\\n[#ARG_NUM]]"
-.                \}
-.             \}
-.             if !'\\*[$AUTHOR_1]'' \{\
-.                sp
-.                PRINT \&\\*[$ATTRIBUTE_STRING]
-.                nr #AUTHORS \\n[#AUTHOR_NUM]
-.                nr #NEXT_AUTHOR 0 1
-.                if !\\n[#SINGLE_SPACE] .vs (\\n[#DOC_LEAD]u/2u)+(\\n[.v]u/3u)
-.                while \\n[#AUTHORS]>\\n[#NEXT_AUTHOR] \{\
-.                   PRINT \\*[$AUTHOR_\\n+[#NEXT_AUTHOR]]
-.                \}
-.             \}
-.             ie !\\n[#SINGLE_SPACE] .sp 2
-.             el .sp
-.             ie \\n[#DOCTYPE_UNDERLINE] \{\
-.             UNDERSCORE2 3p "\\*[$DOC_TYPE]"
-.             \}
-.             el \
-.                PRINT "\\*[$DOC_TYPE]"
-.             if \\n[#SINGLE_SPACE]=1 .sp
-.          \}
-.          if \\n[#PRINT_STYLE]=2 .NAMED_DOCHEADER
-.          ev
-.       \}
-.       if !\\n[#DOC_TYPE]=4 \{\
-.          if \\n[#PRINT_STYLE]=1 .sp
-.          if \\n[#PRINT_STYLE]=2 .sp \\n[#DOC_LEAD]u*2u
-.          if \\n[#COLUMNS] \{\
-.             nr #COL_NUM 0 1
-.             nr #L_LENGTH_FOR_EPI \\n[#L_LENGTH]
-.             ie \\n[#RV_POST_COVER] \{\
-.                nr #COL_\\n+[#COL_NUM]_L_MARGIN \\n[#DOC_L_MARGIN]
-.                po \\n[#COL_\\n[#COL_NUM]_L_MARGIN]u
-.                nr #L_MARGIN \\n[.o]
-.                rr #RV_POST_COVER
-.             \}
-.             el \{\
-.                po \\n[#COL_\\n+[#COL_NUM]_L_MARGIN]u
-.                nr #L_MARGIN \\n[.o]
-.             \}
-.             LL \\n[#COL_L_LENGTH]u
-.             ta \\n[.l]u
-.          \}
-.       \}
-.    \}
-.    vs \\n[#DOC_LEAD]u
-.    if \\n[#ADJ_DOC_LEAD]=1 \{\
-.       ie \\n[#ADVANCE_FROM_TOP]=0 \
-.          if \\n[#DOC_HEADER]=1 .SHIM
-.       el .rr #ADVANCE_FROM_TOP
-.    \}
-.    mk dc
-.    QUAD \\*[$DOC_QUAD]
-.    CLEANUP_DEFAULTS
-.    nr #START_FOR_FOOTERS 1
-.    if !\\n[#DOC_TYPE]=4 .em TERMINATE
-.    if \\n[#LINENUMBERS]=2 \{\
-.       NUMBER_LINES RESUME
-.       nr #LINENUMBERS 1
-.    \}
-.    if \\n[#RUN_ON]=1 \{\
-.       if \\n[#FN_MARKER_STYLE]=1 .RUNON_WARNING
-.       if \\n[#FN_MARKER_STYLE]=2 .RUNON_WARNING
-.    \}
-.END
-\#
-.MAC CLEANUP_DEFAULTS END
-.    nr #START 1
-.    if \\n[#DOC_HEADER]=1 .nr #DOC_HEADER 2
-.    rm $TOC_TITLE_ITEM
-.    rr #MISC_NUM
-.    rr #MISCS
-.    rr #NEXT_AUTHOR
-.    rr #NEXT_MISC
-.END
-\#
-\# ====================================================================
-\#
-\# +++MACROS TO CHANGE SOME DEFAULTS+++
-\#
-\# DOCUMENT HEADER
-\# ---------------
-\# *Argument:
-\#   <none> | <anything> [distance to advance from top of page]
-\# *Function:
-\#   Turns printing of document header on or off.  If a second
-\#   numeric argument with units of measure is given, advances that
-\#   distance from the top of the page without printing the document
-\#   header.
-\# *Notes:
-\#   Default is on.  If the 1st argument is <anything> (which turns
-\#   document headers off), the optional 2nd argument may be given
-\#   (with a unit of measure).
-\#
-.MAC DOCHEADER END
-.    ie '\\$1'' .nr #DOC_HEADER 1
-.    el \{\
-.       if !'\\$2'' .nr #ADVANCE_FROM_TOP (\\$2)
-.       nr #DOC_HEADER 0
-.    \}
-.END
-\#
-\# DOCUMENT HEADER LEADING
-\# -----------------------
-\# *Arguments:
-\#   <+|- amount by which to in/decrease leading of doc header>
-\# *Function:
-\#   Stores user supplied lead in/decrease in string $DOCHEADER_LEAD_ADJ.
-\# *Notes:
-\#   A unit of measure must be supplied.  Decimal fractions OK.
-\#   Default is +0, i.e. same as DOC_LEAD.
-\#
-.MAC DOCHEADER_LEAD END
-.    ds $DOCHEADER_LEAD_ADJ \\$1
-.END
-\#
-\# DOCHEADER ADVANCE
-\# -----------------
-\# *Arguments:
-\#   <docheader start position>
-\# *Function:
-\#   Creates register #DOCHEADER_ADVANCE, used in START.
-\# *Notes:
-\#   Unit of measure required.
-\#   Default is same as T_MARGIN.
-\#
-.MAC DOCHEADER_ADVANCE END
-.    nr #DOCHEADER_ADVANCE \\$1
-.END
-\#
-\# DOCUMENT LEFT MARGIN
-\# --------------------
-\# *Argument:
-\#   <left margin of document>
-\# *Function:
-\#   Creates or modifies register #DOC_L_MARGIN.
-\# *Notes:
-\#   Affects everything on the page.
-\#
-.MAC DOC_LEFT_MARGIN END
-.    if !\\n[#DOCS] .DOC_MACRO_ERROR \\$0
-.    br
-.    nr #DOC_L_MARGIN (\\$1)
-.    L_MARGIN \\n[#DOC_L_MARGIN]u
-.END
-\#
-\# DOCUMENT RIGHT MARGIN
-\# ---------------------
-\# *Argument:
-\#   <right margin of document>
-\# *Function:
-\#   Creates or modifies register #DOC_R_MARGIN.
-\# *Notes:
-\#   Affects everything on the page.
-\#
-.MAC DOC_RIGHT_MARGIN END
-.    br
-.    nr #DOC_R_MARGIN (\\$1)
-.    R_MARGIN \\n[#DOC_R_MARGIN]
-.    nr #DOC_L_LENGTH \\n[#L_LENGTH]
-.END
-\#
-\# DOCUMENT LINE LENGTH
-\# --------------------
-\# *Argument:
-\#   <line length of document>
-\# *Function:
-\#   Creates or modifies register #DOC_L_LENGTH.
-\# *Notes:
-\#   Affects everything on the page.
-\#
-.MAC DOC_LINE_LENGTH END
-.    if !\\n[DOCS] .DOC_MACRO_ERROR \\$0
-.    br
-.    nr #DOC_L_LENGTH (\\$1)
-.    LL \\n[#DOC_L_LENGTH]u
-.    ta \\n[.l]u
-.END
-\#
-\# DOCUMENT FAMILY
-\# ---------------
-\# *Argument:
-\#   <family of running text>
-\# *Function:
-\#   Creates or modifies string $DOC_FAM.
-\# *Notes:
-\#   Affects everything except headers and footers.
-\#
-.MAC DOC_FAMILY END
-.    if !\\n[DOCS] .DOC_MACRO_ERROR \\$0
-.    br
-.    ds $DOC_FAM \\$1
-.    ds $FAMILY  \\*[$DOC_FAM]
-.    AUTHOR_FAMILY     \\*[$DOC_FAM]
-.    BLOCKQUOTE_FAMILY \\*[$DOC_FAM]
-.    DOCHEADER_FAMILY  \\*[$DOC_FAM]
-.    DOCTYPE_FAMILY    \\*[$DOC_FAM]
-.    EPIGRAPH_FAMILY   \\*[$DOC_FAM]
-.    FOOTNOTE_FAMILY   \\*[$DOC_FAM]
-.    HDRFTR_FAMILY     \\*[$DOC_FAM]
-.    LINENUMBER_FAMILY \\*[$DOC_FAM]
-.    QUOTE_FAMILY      \\*[$DOC_FAM]
-.    SUBTITLE_FAMILY   \\*[$DOC_FAM]
-.    TITLE_FAMILY      \\*[$DOC_FAM]
-.END
-\#
-\# DOCUMENT POINT SIZE
-\# -------------------
-\# *Argument:
-\#   <point size of running text>
-\# *Function:
-\#   Creates or modifies register #DOC_PT_SIZE.
-\# *Notes:
-\#   DOC_PT_SIZE is the basis for calculating all type sizes in
-\#   a document.  Ignored if PRINTSTYLE TYPEWRITE.
-\#
-.ALIAS DOC_PT_SIZE PT_SIZE
-\#
-\# DOCUMENT LEAD
-\# -------------
-\# *Argument:
-\#   <lead (".vs") of running text> [ADJUST]
-\# *Function:
-\#   Creates or modifies register #DOC_LEAD.  If the optional
-\#   ADJUST argument is given, adjusts leading so that the last
-\#   line of text falls exactly on #B_MARGIN.
-\# *Notes:
-\#   DOC_LEAD is the basis for calculating all leading changes in
-\#   a document.  Default for TYPESET is 16; 24 for TYPEWRITE.
-\#
-\#   Because the visible bottom or footer margin of a page depends
-\#   on the overall document lead supplied by the register #DOC_LEAD,
-\#   DOC_LEAD, in the body of a document, should always be associated
-\#   with the start of a new page (in other words, just before or
-\#   just after a manual NEWPAGE).  Ignored if PRINTSTYLE TYPEWRITE.
-\#
-.MAC DOC_LEAD END
-.    if \\n[#IGNORE] .return
-.    if !\\n[#DOCS] .DOC_MACRO_ERROR \\$0
-.    br
-.    if '\\$0'DOC_LEAD' \{\
-.       vs \\$1
-.       rr #DOC_AUTOLEAD
-.       rr #DOC_AUTOLEAD_FACTOR
-.       nr #DOC_LEAD \\n[.v]
-.    \}
-.    nr #RESET_TRAPS 1
-.    if !\\n[#ADJ_DOC_LEAD] .nr #REMOVE_ADJ 1
-.    if !'\\$0'DOC_LEAD' \{\
-.       if '\\$0'EN_LEAD' .nr #DOC_LEAD \\n[#EN_LEAD]
-.       if '\\$0'BIB_LEAD' .nr #DOC_LEAD \\n[#BIB_LEAD]
-.       if '\\$0'TOC_LEAD' .nr #DOC_LEAD \\n[#TOC_LEAD]
-.       if '\\$2'ADJUST' .TRAPS
-.       rr #RESET_TRAPS
-.    \}
-.END
-\#
-\# ADJUST DOCUMENT LEAD
-\# --------------------
-\# *Arguments:
-\#   <none> | <anything>
-\# *Function:
-\#   Adjusts document lead so that the last line of text falls exactly
-\#   on #B_MARGIN.
-\#
-.MAC DOC_LEAD_ADJUST END
-.    ie '\\$1'' \{\
-.       nr #ADJ_DOC_LEAD 1
-.       rr #DOC_LEAD_ADJUST_OFF
-.    \}
-.    el \{\
-.       nr #ADJ_DOC_LEAD 0
-.       nr #DOC_LEAD_ADJUST_OFF 1
-.    \}
-.END
-\#
-\# SHIM
-\# ----
-\# *Argument:
-\#   None
-\# *Function:
-\#   Advances to the next "valid" baseline.
-\# *Notes:
-\#   If a user plays around with spacing in a doc (say, with ALD),
-\#   it isn't easy to get mom back on track so she can achieve
-\#   perfectly flush bottom margins.  Any time SHIM is used, it
-\#   ensures that the next output line falls on a valid baseline.
-\#
-\# First, a little convenience macro
-\#
-.MAC PROCESS_SHIM END
-.    while \\n+[#VALID_BASELINE]<\\n[#CURRENT_V_POS] \{\
-.
-.    \}
-.    nr #SHIM \\n[#VALID_BASELINE]-\\n[#CURRENT_V_POS]
-.END
-\#
-\# And a macro to disable SHIM
-\#
-.MAC NO_SHIM END
-.    ie '\\$1'' .nr #NO_SHIM 1
-.    el .rr #NO_SHIM
-.END
-\#
-.nr #NO_SHIM 2 \" Restored to 1 in DEFAULTS.
-\#
-.MAC SHIM END
-.    ie \\n[#NO_SHIM] .return
-.    el \{\
-.       nr #VALID_BASELINE \\n[#T_MARGIN]-\\n[#DOC_LEAD] \\n[#DOC_LEAD]
-.       if !r#CURRENT_V_POS .nr #CURRENT_V_POS \\n[.d]
-.       ie \\n[#ADVANCE_FROM_TOP] \{\
-.          ie \\n[#CURRENT_V_POS]<(\\n[#T_MARGIN]-1v) \{\
-.             while \\n-[#VALID_BASELINE]>\\n[#CURRENT_V_POS] .
-.             nr #VALID_BASELINE +\\n[#DOC_LEAD]
-.             nr #SHIM \\n[#VALID_BASELINE]-\\n[#CURRENT_V_POS]
-.          \}
-.          el .PROCESS_SHIM
-.       \}
-.       el .PROCESS_SHIM
-'       sp \\n[#SHIM]u
-.       rr #CURRENT_V_POS
-.    \}
-.END
-\#
-\# ====================================================================
-\#
-\# +++INTERNATIONALIZATION+++
-\#
-\# ATTRIBUTE STRING
-\# ----------------
-\# *Argument:
-\#   <what goes in the "by" slot before author in the document header>
-\# *Function:
-\#   Creates or modifies string $ATTRIBUTE_STRING.
-\# *Notes:
-\#   Default is "by".  A blank string ("") may be used if no
-\#   attribution is desired.  Blank line results.
-\#
-.MAC ATTRIBUTE_STRING END
-.    if !'\\$1'DOC_COVER' \
-.       if !'\\$1'COVER' .nr #NEITHER 1
-.    if !'\\$1'COVER' \
-.       if !'\\$1'DOC_COVER' .nr #NEITHER 1
-.    if '\\$1'DOC_COVER' \
-.       ds $ATTRIBUTE_STRING_DOC_COVER \\$2
-.    if '\\$1'COVER' \
-.       ds $ATTRIBUTE_STRING_COVER \\$2
-.    if \\n[#NEITHER]=1 \{\
-.       ds $ATTRIBUTE_STRING \\$1
-.       rr #NEITHER
-.    \}
-.END
-\#
-\# CHAPTER STRING
-\# --------------
-\# *Argument:
-\#   <what to print any time the word "chapter" is required>
-\# *Function:
-\#   Creates or modifies string $CHAPTER_STRING.
-\# *Notes:
-\#   Default is "chapter".
-\#
-.MAC CHAPTER_STRING END
-.    ds $CHAPTER_STRING \\$1
-.END
-\#
-\# DRAFT STRING
-\# ------------
-\# *Argument:
-\#   <what to print any time the word "draft" is required>
-\# *Function:
-\#   Creates or modifies string $DRAFT_STRING.
-\# *Notes:
-\#   Default is "draft".
-\#
-.MAC DRAFT_STRING END
-.    ds $DRAFT_STRING \\$1
-.END
-\#
-\# REVISION STRING
-\# ---------------
-\# *Argument:
-\#   <what to print any time the word "revision" is required>
-\# *Function:
-\#   Creates or modifies string $REVISION_STRING.
-\# *Notes:
-\#   Default is "revision".
-\#
-.MAC REVISION_STRING END
-.    ds $REVISION_STRING \\$1
-.END
-\#
-\# FINIS STRING
-\# ------------
-\# *Argument:
-\#   <what to print with the finis macro>
-\# *Function:
-\#   Creates or modifies string $FINIS_STRING.
-\# *Notes:
-\#   Default is "END".
-\#
-.MAC FINIS_STRING END
-.    ds $FINIS_STRING \\$1
-.END
-\#
-.MAC FINIS_STRING_CAPS END
-.    ie '\\$1'' .nr #FINIS_STRING_CAPS 1
-.    el .nr #FINIS_STRING_CAPS 0
-.END
-\#
-\# ====================================================================
-\#
-\# +++RECTO/VERSO+++
-\#
-\# RECTO_VERSO
-\# -----------
-\# *Arguments:
-\#   <none> | <anything>
-\# *Function:
-\#   Switches HDRFTR_LEFT and HDRFTR_RIGHT on alternate pages.  Also
-\#   switches page numbers left and right if either is chosen rather
-\#   than the default centered page numbers.  Switches left and right
-\#   margins if differing values have been entered.
-\# *Notes:
-\#   Default is OFF.
-\#
-.MAC RECTO_VERSO END
-.    ie '\\$1'' .nr #RECTO_VERSO 1
-.    el .nr #RECTO_VERSO 0
-.END
-\#
-\# FORCE RECTO
-\# -----------
-\# *Function:
-\#   Forces doccover and cover pages to recto
-\#
-.MAC RV_HARD_SET_MARGINS END
-.    DOC_LEFT_MARGIN  \\n[@L_MARGIN]u
-.    DOC_RIGHT_MARGIN \\n[@R_MARGIN]u
-.    po \\n[#DOC_L_MARGIN]u
-.    LL \\n[#DOC_L_LENGTH]u
-.END
-\#
-\# ====================================================================
-\#
-\# +++EPIGRAPHS+++
-\#
-\# EPIGRAPH INDENT
-\# ---------------
-\# *Argument:
-\#   <value by which to multiply PP_INDENT for block epigraphs>
-\# *Function:
-\#   Creates or modifies register #EPI_OFFSET_VALUE.
-\# *Notes:
-\#   Default is 2 for TYPEWRITE, 3 for TYPESET.
-\#
-.MAC EPIGRAPH_INDENT END
-.    rr #EPI_OFFSET_VALUE
-.    rm $EPI_OFFSET_VALUE
-.    ds $EVAL_EI_ARG \\$1
-.    substring $EVAL_EI_ARG -1
-.    ie \B'\\*[$EVAL_EI_ARG]' .nr #EPI_OFFSET_VALUE \\$1
-.    el .ds $EPI_OFFSET_VALUE \\$1
-.    rm $EVAL_EI_ARG
-.END
-\#
-\# EPIGRAPH AUTOLEAD
-\# -----------------
-\# *Argument:
-\#   <amount of lead to add to the epigraph ps for epigraph leading>
-\# *Function:
-\#   Creates or modifies register #EPI_AUTOLEAD.
-\# *Notes:
-\#   Default is 2 (for TYPESET; TYPEWRITE doesn't require this).
-\#
-.MAC EPIGRAPH_AUTOLEAD END
-.    nr #EPI_AUTOLEAD (p;\\$1)
-.END
-\#
-\# EPIGRAPH
-\# --------
-\# *Arguments:
-\#   BLOCK | <anything>
-\# *Function:
-\#   Places an epigraph before the document's text, after the
-\#   document header, or after a HEAD.
-\# *Notes:
-\#   #EPIGRAPH 1 = centered; 2 = block
-\#
-\#   By default, epigraphs are centered, allowing the user
-\#   to input them on a line per line basis.  To change this
-\#   behaviour, the user can supply the argument BLOCK, which
-\#   will produce indented, filled text similar to BLOCKQUOTE.
-\#
-\#   If a block epigraph contains more than one para, ALL paras of
-\#   the epigraph must be preceded by PP.  Otherwise, PP is optional.
-\#
-.MAC EPIGRAPH END
-.    nr #PP_STYLE 2
-.    nr #Q_PP     0
-.    if \\n[#LINENUMBERS]=1 \{\
-.       NUMBER_LINES OFF
-.       nr #LINENUMBERS 2
-.    \}
-.    if \\n[#START] \{\
-.       if \\n[#PRINT_STYLE]=1 \
-.          if \\n[#AUTHOR_LINES]=1 .sp \\n[#DOC_LEAD]u
-.    \}
-.    ie '\\$1'' \{\
-.       nr #EPIGRAPH 1
-.       ev EPIGRAPH
-.       nr #IN_DIVER 1
-.       ll \\n[#L_LENGTH]u
-.       ta \\n[.l]u
-.       CHECK_INDENT
-.       if \\n[#COLUMNS] \{\
-.          ie \\n[#START] \{\
-.              ll \\n[#DOC_L_LENGTH]u
-.              ta \\n[.l]u
-.          \}
-.          el \{\
-.             ll \\n[#COL_L_LENGTH]u
-.             ta \\n[.l]u
-.          \}
-.       \}
-.       CENTER
-.       if \\n[#PRINT_STYLE]=1 \{\
-.          fam \\*[$TYPEWRITER_FAM]
-.          ft  R
-.          if '\\*[$EPI_FT]'I' .FT I
-.          ps  \\*[$TYPEWRITER_PS]
-.          ie \\n[#SINGLE_SPACE] .vs \\n[#DOC_LEAD]u
-.          el .vs \\n[#DOC_LEAD]u/2u
-.          nr #EPI_LEAD      \\n[#LEAD]
-.          nr #EPI_LEAD_DIFF \\n[#DOC_LEAD]-\\n[#EPI_LEAD]
-.       \}
-.       if \\n[#PRINT_STYLE]=2 \{\
-.          FAMILY   \\*[$EPI_FAM]
-.          FT       \\*[$EPI_FT]
-.          ps  \\n[#DOC_PT_SIZE]u\\*[$EPI_SIZE_CHANGE]
-.          if \\n[#EPI_COLOR]=1 \{\
-.             nf
-\m[\\*[$EPI_COLOR]]
-.             EOL
-.          \}
-.          vs \\n[.ps]u+\\n[#EPI_AUTOLEAD]u
-.          nr #EPI_LEAD      \\n[#LEAD]
-.          nr #EPI_LEAD_DIFF \\n[#DOC_LEAD]-\\n[#EPI_LEAD]
-.       \}
-.       di EPI_TEXT
-.       nr #DIVERSIONS_HY_MARGIN (p;\\n[.ps]u*2.75)/1000
-.       HY_SET 1 \\n[#DIVERSIONS_HY_MARGIN]u (\\n[#PT_SIZE]u/1000u/8u)p
-.       hy 14
-.       nr #EPI_ACTIVE 1
-.    \}
-.    el \{\
-.       ie '\\$1'BLOCK' \{\
-.          nr #EPIGRAPH 2
-.          ev EPIGRAPH
-.          evc 0
-.          ie \\n[#START] \{\
-.             ie \\n[#COLUMNS] \{\
-.                ie r#EPI_OFFSET_VALUE \
-.                   ll \
-\\n[#L_LENGTH_FOR_EPI]u-(\\n[#PP_INDENT]u*(\\n[#EPI_OFFSET_VALUE]u*2u))
-.                el \
-.                   ll \
-\\n[#L_LENGTH_FOR_EPI]u-(\\*[$EPI_OFFSET_VALUE]u*2u)
-.                ta \\n[.l]u
-.             \}
-.             el \{\
-.                ie r#EPI_OFFSET_VALUE \
-.                   ll \
-\\n[#L_LENGTH]u-(\\n[#PP_INDENT]u*(\\n[#EPI_OFFSET_VALUE]u*2u))
-.                el \
-.                   ll \\n[#L_LENGTH]u-(\\*[$EPI_OFFSET_VALUE]*2u)
-.                ta \\n[.l]u
-.             \}
-.          \}
-.          el \{\
-.             ie r#EPI_OFFSET_VALUE \
-.                ll \
-\\n[#L_LENGTH]u-(\\n[#PP_INDENT]u*(\\n[#EPI_OFFSET_VALUE]u*2u))
-.             el \
-.                ll \\n[#L_LENGTH]u-(\\*[$EPI_OFFSET_VALUE]*2u)
-.             ta \\n[.l]u
-.             if \\n[#COLUMNS] \{\
-.                ie r#EPI_OFFSET_VALUE \
-.                   ll \
-\\n[#COL_L_LENGTH]u-(\\n[#PP_INDENT]u*(\\n[#EPI_OFFSET_VALUE]u*2u))
-.                el \
-.                   ll \\n[#COL_L_LENGTH]u-(\\*[$EPI_OFFSET_VALUE]*2u)
-.                ta \\n[.l]u
-.             \}
-.             CHECK_INDENT
-.          \}
-.          if \\n[#PRINT_STYLE]=1 \{\
-.             fam \\*[$TYPEWRITER_FAM]
-.             ft  R
-.             if '\\*[$EPI_FT]'I' .FT I
-.             ps  \\*[$TYPEWRITER_PS]
-.             ie \\n[#SINGLE_SPACE] .vs \\n[#DOC_LEAD]u
-.             el .vs \\n[#DOC_LEAD]u/2u
-.             QUAD LEFT
-.             HY OFF
-.             nr #EPI_LEAD \\n[#LEAD]
-.             nr #EPI_LEAD_DIFF \\n[#DOC_LEAD]-\\n[#EPI_LEAD]
-.             di EPI_TEXT
-.             nr #EPI_ACTIVE 1
-.          \}
-.          if \\n[#PRINT_STYLE]=2 \{\
-.             FAMILY   \\*[$EPI_FAM]
-.             FT       \\*[$EPI_FT]
-.             ps  \\n[#DOC_PT_SIZE]u\\*[$EPI_SIZE_CHANGE]
-.             if \\n[#EPI_COLOR]=1 \{\
-.                nf
-\m[\\*[$EPI_COLOR]]
-.                EOL
-.             \}
-.             vs \\n[.ps]u+\\n[#EPI_AUTOLEAD]u
-.             QUAD     \\*[$EPI_QUAD]
-.             nr #DIVERSIONS_HY_MARGIN (p;\\n[.ps]u*2.75)/1000
-.             HY_SET 1 \\n[#DIVERSIONS_HY_MARGIN]u (\\n[#PT_SIZE]u/1000u/8u)p
-.             hy 14
-.             nr #EPI_LEAD \\n[#LEAD]
-.             nr #EPI_LEAD_DIFF \\n[#DOC_LEAD]-\\n[#EPI_LEAD]
-.             di EPI_TEXT
-.             nr #EPI_ACTIVE 1
-.          \}
-.       \}
-.       el .DO_EPIGRAPH
-.    \}
-.END
-\#
-\# DO EPIGRAPH
-\# -----------
-\# *Arguments:
-\#   <none>
-\# *Function:
-\#   Ends diversion started in EPIGRAPH.  Makes spacing
-\#   adjustments to compensate for the difference between epigraph
-\#   leading and overall document leading, so that the bottom of
-\#   the pages remain flush.
-\# *Notes:
-\#   In addition to its usual place at the beginning of a
-\#   document, EPIGRAPH may also be used after HEAD.
-\#
-.MAC DO_EPIGRAPH END
-.    br
-.    di
-.    rr #IN_DIVER
-.    if \\n[#RESET_FN_COUNTERS]=2 \{\
-.       if !\\n[#FN_COUNT]=1 \{\
-.          if ((\\n[#PAGE_LENGTH]+\\n[#VARIABLE_FOOTER_POS])+\\n[#DIVER_DEPTH])>(\\n[#PAGE_LENGTH]+\\n[#VARIABLE_FOOTER_POS]) \{\
-.             DIVER_FN_2_POST
-.             rr #RESET_FN_COUNTERS
-.          \}
-.       \}
-.    \}
-.    nr #SAVED_FN_NUMBER \\n[#FN_NUMBER]
-.    nr #DONE_ONCE 0 1
-.    REMOVE_INDENT
-.    ev
-.    nr #EPI_DEPTH \\n[#DIVER_DEPTH]-\\n[#EPI_LEAD]
-.    nr #EPI_LINES \\n[#EPI_DEPTH]/\\n[#EPI_LEAD]
-.    ie \\n[#START] \{\
-.       RLD \\n[#SHIM]u
-.       nr #EPI_WHITESPACE (\\n[#DOC_LEAD]*\\n[#EPI_LINES])-\\n[#EPI_DEPTH]
-.       while \\n[#EPI_WHITESPACE]>\\n[#DOC_LEAD] \{\
-.          nr #EPI_WHITESPACE -\\n[#DOC_LEAD]
-.       \}
-.       if \\n[#PRINT_STYLE]=1 \
-.          if !\\n[#SINGLE_SPACE]=1 .ALD \\n[#DOC_LEAD]u
-.       if \\n[#PRINT_STYLE]=2 \{\
-.          ie !\\n[#DOC_TYPE]=2 .RLD \\n[#DOC_LEAD]u
-.          el \{\
-.             ie '\\*[$CHAPTER_TITLE]'' .RLD \\n[#DOC_LEAD]u
-.             el .if '\\*[$CHAPTER]''   .RLD \\n[#DOC_LEAD]u
-.          \}
-.          if \\n[#EPI_WHITESPACE]<\\n[#DOC_LEAD] \
-.             ALD \\n[#EPI_LEAD_DIFF]u+(\\n[#EPI_WHITESPACE]u/2u)
-.          if \\n[#EPI_WHITESPACE]>\\n[#DOC_LEAD] \
-.             ALD \
-\\n[#EPI_LEAD_DIFF]u+(\\n[#EPI_WHITESPACE]u/2u)-\\n[#DOC_LEAD]u
-.       \}
-.    \}
-.    el \{\
-.       ie \\n[#EPI_DEPTH]<\\n[#TRAP_DISTANCE] \{\
-.          nr #EPI_FITS 1
-.          nr #EPI_WHITESPACE (\\n[#DOC_LEAD]*\\n[#EPI_LINES])-\\n[#EPI_DEPTH]
-.          while \\n[#EPI_WHITESPACE]>\\n[#DOC_LEAD] \{\
-.             nr #EPI_WHITESPACE -\\n[#DOC_LEAD]
-.          \}
-.          ie \\n[#PRINT_STYLE]=1 \{\
-.             if \\n[#EPI_WHITESPACE]=\\n[#DOC_LEAD] \
-.                ALD \\n[#EPI_WHITESPACE]u/2u
-.          \}
-.          el \{\
-.             if \\n[#EPI_WHITESPACE]<\\n[#DOC_LEAD] \
-.                ALD \
-\\n[#EPI_LEAD_DIFF]u+(\\n[#EPI_WHITESPACE]u/2u)
-.             if \\n[#EPI_WHITESPACE]>\\n[#DOC_LEAD] \
-.                ALD \
-\\n[#EPI_LEAD_DIFF]u+(\\n[#EPI_WHITESPACE]u/2u)-\\n[#DOC_LEAD]u
-.          \}
-.          if \\n[#DIVER_FN]=2 .rr #DIVER_FN
-.       \}
-.       el \{\
-.          nr #EPI_LINES_TO_TRAP 0 1
-.          while \\n[#EPI_LEAD]*\\n+[#EPI_LINES_TO_TRAP]<\\n[#TRAP_DISTANCE] \{\
-.             nr #LOOP 1
-.          \}
-.          nr #EPI_LINES_TO_TRAP -1
-.          nr #EPI_WHITESPACE \
-(\\n[#EPI_LINES_TO_TRAP]*\\n[#DOC_LEAD])-(\\n[#EPI_LINES_TO_TRAP]*\\n[#EPI_LEAD])
-.          while \\n[#EPI_WHITESPACE]>\\n[#DOC_LEAD] \{\
-.             nr #EPI_WHITESPACE -\\n[#DOC_LEAD]
-.          \}
-.          if \\n[#EPI_WHITESPACE]<\\n[#DOC_LEAD] \
-.             ALD \\n[#EPI_WHITESPACE]u
-.          if \\n[#EPI_WHITESPACE]>\\n[#DOC_LEAD] \
-.             ALD \\n[#EPI_WHITESPACE]u-\\n[#DOC_LEAD]u
-.       \}
-.    \}
-.    if \\n[#EPIGRAPH]=1 \{\
-.       po \\n[#L_MARGIN]u
-.       if \\n[#COLUMNS] \{\
-.          po \\n[#COL_\\n[#COL_NUM]_L_MARGIN]u
-.          nr #L_MARGIN \\n[.o]
-.       \}
-.    \}
-.    if \\n[#EPIGRAPH]=2 \{\
-.       ie \\n[#EPI_OFFSET_VALUE] \
-.          nr #EPI_OFFSET \
-\\n[#L_MARGIN]+(\\n[#PP_INDENT]*\\n[#EPI_OFFSET_VALUE])
-.       el .nr #EPI_OFFSET \\n[#L_MARGIN]+\\*[$EPI_OFFSET_VALUE]
-.       if \\n[#COLUMNS] \{\
-.          ie r#EPI_OFFSET_VALUE \
-.             nr #EPI_OFFSET \
-\\n[#COL_\\n[#COL_NUM]_L_MARGIN]+(\\n[#PP_INDENT]*\\n[#EPI_OFFSET_VALUE])
-.          el .nr #EPI_OFFSET \
-\\n[#COL_\\n[#COL_NUM]_L_MARGIN]+\\*[$EPI_OFFSET_VALUE]
-.       \}
-.       po \\n[#EPI_OFFSET]u
-.    \}
-.    nf
-.    EPI_TEXT
-.    br
-.    ie \\n[#START] \{\
-.       if \\n[#PRINT_STYLE]=1 .SHIM
-.       if \\n[#PRINT_STYLE]=2 \{\
-.          if \\n[#EPI_WHITESPACE]<\\n[#DOC_LEAD] \
-.             ALD \\n[#EPI_WHITESPACE]u/2u
-.          if \\n[#EPI_WHITESPACE]>\\n[#DOC_LEAD] \
-.             ALD (\\n[#EPI_WHITESPACE]u/2u)-\\n[#DOC_LEAD]u
-.          SHIM
-.       \}
-.    \}
-.    el \{\
-.       rr #EPI_ACTIVE
-.       ie \\n[#EPI_FITS] \{\
-.          ie \\n[#FN_FOR_EPI] \{\
-.             nr #EPI_LINES_TO_END 1
-.             nr #EPI_WHITESPACE \
-(\\n[#EPI_LINES_TO_END]*\\n[#DOC_LEAD])-(\\n[#EPI_LINES_TO_END]*\\n[#EPI_LEAD])
-.             while \\n[#EPI_WHITESPACE]>\\n[#DOC_LEAD] \{\
-.                nr #EPI_WHITESPACE -\\n[#DOC_LEAD]
-.             \}
-.             ALD \\n[#EPI_WHITESPACE]u-(\\n[#DOC_LEAD]u-\\n[#EPI_LEAD]u)
-.          \}
-.          el \{\
-.             ie \\n[#PRINT_STYLE]=1 \{\
-.                if \\n[#EPI_WHITESPACE]=\\n[#DOC_LEAD] \
-.                   ALD \\n[#EPI_WHITESPACE]u
-.             \}
-.             el \{\
-.                if \\n[#EPI_WHITESPACE]<\\n[#DOC_LEAD] \
-.                   ALD \\n[#EPI_WHITESPACE]u/2u
-.                if \\n[#EPI_WHITESPACE]>\\n[#DOC_LEAD] \
-.                   ALD (\\n[#EPI_WHITESPACE]u/2u)-\\n[#DOC_LEAD]u
-.             \}
-.          \}
-.       \}
-.       el \{\
-.          nr #EPI_LINES_TO_END \\n[#EPI_LINES]-\\n[#EPI_LINES_TO_TRAP]
-.          if \\n[#LOOP] .nr #EPI_LINES_TO_END +1
-.          rr #LOOP
-.          nr #EPI_WHITESPACE \
-(\\n[#EPI_LINES_TO_END]*\\n[#DOC_LEAD])-(\\n[#EPI_LINES_TO_END]*\\n[#EPI_LEAD])
-.          while \\n[#EPI_WHITESPACE]>\\n[#DOC_LEAD] \{\
-.             nr #EPI_WHITESPACE -\\n[#DOC_LEAD]
-.          \}
-.          ALD \\n[#EPI_WHITESPACE]u-(\\n[#DOC_LEAD]u-\\n[#EPI_LEAD]u)
-.          if \\n[#PRINT_STYLE]=1 \{\
-.             if !\\n[#SINGLE_SPACE] \{\
-.                nr #EPI_LINES_EVEN \\n[#EPI_LINES_TO_END]%2
-.                ie \\n[#EPI_LINES_EVEN] .ALD .5v
-.                el .RLD .5v
-.                rr #EPI_LINES_EVEN
-.             \}
-.          \}
-.       \}
-.    \}
-.    nr #PP_STYLE 1
-.    rr #EPI_FITS
-.    ALD \\n[#DOC_LEAD]u
-.    QUAD \\*[$DOC_QUAD]
-.    po \\n[#L_MARGIN]u
-.    if \\n[#COLUMNS] \{\
-.       po \\n[#COL_\\n[#COL_NUM]_L_MARGIN]u
-.       nr #L_MARGIN \\n[.o]
-.    \}
-.    if \\n[#START] \{\
-.       if \\n[#COLUMNS] \{\
-.          po \\n[#COL_\\n[#COL_NUM]_L_MARGIN]u
-.          nr #L_MARGIN \\n[.o]
-.          mk dc
-.       \}
-.    \}
-.    if \\n[#LINENUMBERS]=2 \{\
-.       NUMBER_LINES RESUME
-.       nr #LINENUMBERS 1
-.    \}
-.END
-\#
-\# ====================================================================
-\#
-\# +++FINIS MACRO+++
-\#
-\# FINIS
-\# -----
-\# *Arguments:
-\#   <none>
-\# *Function:
-\#   Deposits --END-- at the end of a document.
-\#
-.MAC FINIS END
-.    if !\\n[@TOP] \{\
-.       if \\n[.t]<=2v \{\
-.          tm1 "[mom]: '\\n[.F]': Insufficient room to print \\$0 on last page.
-.          return
-.       \}
-.    \}
-.    br
-.    ev FINIS
-.    evc 0
-.    if \\n[#TAB_ACTIVE] .TQ
-.    if \\n[#INDENT_ACTIVE] .IQ CLEAR
-.    nr #EM_ADJUST (1m/8)
-.    if \\n[#COLUMNS] \{\
-.       po \\n[#COL_\\n[#COL_NUM]_L_MARGIN]u
-.       nr #L_MARGIN \\n[.o]
-.    \}
-.    ALD \\n[#DOC_LEAD]u
-.    CENTER
-.    if \\n[#FINIS_STRING_CAPS]=1 .CAPS
-.    if \\n[#PRINT_STYLE]=1 .PRINT "--\\*[$FINIS_STRING]--
-.    if \\n[#PRINT_STYLE]=2 \{\
-.       ie \\n[#FINIS_COLOR] \
-.          PRINT \
-\m[\\*[$FINIS_COLOR]]\v'-\\n[#EM_ADJUST]u'\[em]\v'+\\n[#EM_ADJUST]u'\
-\\*[$FINIS_STRING]\v'-\\n[#EM_ADJUST]u'\*[FU1]\[em]\m[]\c
-.       el .PRINT \
-\v'-\\n[#EM_ADJUST]u'\[em]\v'+\\n[#EM_ADJUST]u'\
-\\*[$FINIS_STRING]\v'-\\n[#EM_ADJUST]u'\*[FU1]\[em]\m[]\c
-.    \}
-.    EL
-.    if \\n[#FINIS_STRING_CAPS]=1 .CAPS OFF
-.    ev
-.    pdfsync
-.END
-\#
-\# ====================================================================
-\#
-\# +++HEADERS/FOOTERS+++
-\#
-\# Define a string so that the current page number can be incorporated
-\# into the strings for hdrftr left, right, and center.  NOTE: This is
-\# not the same thing as using the shortform # in hdrftr strings.
-\#
-.ds PAGE# \En[#PAGENUMBER]
-\#
-.MAC RESTORE_SPACE END
-.   vpt 0
-.   rs
-.   nop \&
-.   sp -1
-.   ch RR_@TOP
-.   rr @TOP
-.   vpt
-.END
-\#
-\# HDRFTR RULE GAP
-\# ---------------
-\# *Argument:
-\#   <amount of space between header/footer and header/footer rule>
-\# *Function:
-\#   Creates or modifies register #HDRFTR_RULE_GAP to hold amount
-\#   of space between header/footer and header/footer rule.
-\# *Notes:
-\#   Default is 4p.
-\#
-.MAC HDRFTR_RULE_GAP END
-.    nr #HDRFTR_RULE_GAP (\\$1)
-.    if '\\$0'HEADER_RULE_GAP' \{\
-.       nr #HEADER_RULE_GAP \\n[#HDRFTR_RULE_GAP]
-.       if r #FOOTER_RULE_GAP .nr #FOOTER_RULE_GAP \\n[#FOOTER_RULE_GAP]
-.    \}
-.    if '\\$0'FOOTER_RULE_GAP' \{\
-.       nr #FOOTER_RULE_GAP \\n[#HDRFTR_RULE_GAP]
-.       if r #HEADER_RULE_GAP .nr #HEADER_RULE_GAP \\n[#HEADER_RULE_GAP]
-.    \}
-.END
-\#
-\# HDRFTR LEFT
-\# -----------
-\# *Argument:
-\#   <what to put in the left position of page header/footers>
-\# *Function:
-\#   Creates or modifies string $HDRFTR_LEFT.
-\#   Creates register #USER_DEF_HDRFTR_LEFT, which, if 1,
-\#   overrides the $HDRFTR_LEFT string created by default
-\#   in DEFAULTS.
-\# *Notes:
-\#   Especially useful if doc has more than one author, and a list
-\#   of authors by last name is desired in header/footers.
-\#   Default is author.
-\#
-\#   If the argument is the # character, simply prints the current
-\#   page number.
-\#
-\#   If the user wants to incorporate the page number into the string,
-\#   \*[PAGE#] must be used.  For example, if the user wants to put
-\#   an elipsis before the page number in the string, s/he should use
-\#   ...\*[PAGE#], not ...#
-\#
-.MAC HDRFTR_LEFT END
-.    nr #USER_DEF_HDRFTR_LEFT 1
-.    ds $HDRFTR_LEFT \\$1
-.END
-\#
-\# HDRFTR LEFT CAPS
-\# ----------------
-\# *Argument:
-\#   <none> | <anything>
-\# *Function:
-\#   Turns capitalisation of $HDRFTR_LEFT (typically, the author of
-\#   the document) on or off.
-\# *Notes:
-\#   Default is on.
-\#
-.MAC HDRFTR_LEFT_CAPS END
-.    ie '\\$1'' .nr #HDRFTR_LEFT_CAPS 1
-.    el \{\
-.       nr #HDRFTR_LEFT_CAPS 0
-.       ds $HDRFTR_LEFT_SIZE_CHANGE +0
-.    \}
-.END
-\#
-\# HDRFTR CENTER
-\# -------------
-\# *Argument:
-\#   <what to put in the centre position of page header/footers>
-\# *Function:
-\#   Creates or modifies string $HDRFTR_CENTER.
-\#   Creates register #USER_DEF_HDRFTR_CENTER, which, if 1,
-\#   overrides the $HDRFTR_CENTER string created by default
-\#   in COPYSTYLE.
-\# *Notes:
-\#   Default is document type if DOCTYPE NAMED, Chapter # if DOCTYPE
-\#   CHAPTER, draft and revision number if COPYSTYLE DRAFT.
-\#
-\#   If the argument is the # character, simply prints the current
-\#   page number.
-\#
-\#   If the user wants to incorporate the page number into the string,
-\#   \*[PAGE#] must be used.  For example, if the user wants to put
-\#   an elipsis before the page number in the string, s/he should use
-\#   ...\*[PAGE#], not ...#
-\#
-.MAC HDRFTR_CENTER END
-.    nr #USER_DEF_HDRFTR_CENTER 1
-.    if '\\$0'FOOTER_CENTER' \{\
-.       ds $HDRFTR_CENTER_OLD \\*[$HDRFTR_CENTER]
-.       ds $HDRFTR_CENTER_NEW \\$1
-.    \}
-.    if '\\$0'FOOTER_CENTRE' \{\
-.       ds $HDRFTR_CENTER_OLD \\*[$HDRFTR_CENTER]
-.       ds $HDRFTR_CENTER_NEW \\$1
-.    \}
-.    ds $HDRFTR_CENTER \\$1
-.END
-\#
-\# HDRFTR CENTER CAPS
-\# ------------------
-\# *Argument:
-\#   <none> | <anything>
-\# *Function:
-\#   Turns capitalisation of $HDRFTR_CENTER (typically, doctype of
-\#   the document) on or off.
-\# *Notes:
-\#   Default is on.
-\#
-.MAC HDRFTR_CENTER_CAPS END
-.    ie '\\$1'' .nr #HDRFTR_CENTER_CAPS 1
-.    el \{\
-.       nr #HDRFTR_CENTER_CAPS 0
-.       ds $HDRFTR_CENTER_SIZE_CHANGE +0
-.    \}
-.END
-\#
-\# HDRFTR CENTER PADDING
-\# ---------------------
-\# *Argument:
-\#   LEFT | RIGHT <amount of padding to put left or right of hdrftr
-\#   center string>
-\# *Function:
-\#   Creates or modifies registers #HDRFTR_CTR_PAD_LEFT or
-\#   #HDRFTR_CTR_PAD_RIGHT.
-\# *Notes:
-\#   By default, the HDRFTR_CENTER string is centered on the doc
-\#   line length.  Long titles or long author names can screw up
-\#   visual centering, or create overprints.  This macro allows the
-\#   user to pad the center string by the specified amount of space
-\#   to fix these problems.
-\#
-\#   A unit of measure is required.
-\#
-.MAC HDRFTR_CENTER_PAD END
-.    if '\\$1'LEFT'  .nr #HDRFTR_CTR_PAD_LEFT (\\$2)
-.    if '\\$1'RIGHT' .nr #HDRFTR_CTR_PAD_RIGHT (\\$2)
-.END
-\#
-\# SWITCH HDRFTR CENTER PADDING SIDE - support macro
-\# --------------------------------
-\# *Argument:
-\#   <none>
-\# *Function:
-\#   Switches the padding side of hdrftr center padding.
-\# *Notes:
-\#   Required to keep spacing around hdrftr string constant
-\#   in recto/verso documents.
-\#
-.MAC SWITCH_HDRFTR_CENTER_PAD END
-.    nr #HDRFTR_CTR_PAD_TMP  \\n[#HDRFTR_CTR_PAD_LEFT]
-.    HDRFTR_CENTER_PAD LEFT  \\n[#HDRFTR_CTR_PAD_RIGHT]u
-.    HDRFTR_CENTER_PAD RIGHT \\n[#HDRFTR_CTR_PAD_TMP]u
-.END
-\#
-\# HDRFTR RIGHT
-\# ------------
-\# *Argument:
-\#   <what to put in the right position of page header/footers>
-\# *Function:
-\#   Creates or modifies string $HDRFTR_RIGHT.
-\#   Creates register #USER_DEF_HDRFTR_RIGHT, which, if 1,
-\#   overrides the $HDRFTR_RIGHT string created by default
-\#   in DEFAULTS.
-\# *Notes:
-\#   Default is document title.
-\#
-\#   If the argument is the # character, simply prints the current
-\#   page number.
-\#
-\#   If the user wants to incorporate the page number into the string,
-\#   \*[PAGE#] must be used.  For example, if the user wants to put
-\#   an elipsis before the page number in the string, s/he should use
-\#   ...\*[PAGE#], not ...#
-\#
-.MAC HDRFTR_RIGHT END
-.    nr #USER_DEF_HDRFTR_RIGHT 1
-.    ds $HDRFTR_RIGHT \\$1
-.END
-\#
-\# HDRFTR RIGHT CAPS
-\# -----------------
-\# *Argument:
-\#   <none> | <anything>
-\# *Function:
-\#   Turns capitalisation of $HDRFTR_RIGHT (typically, the title of
-\#   the document) on or off.
-\# *Notes:
-\#   Default is on.
-\#
-.MAC HDRFTR_RIGHT_CAPS END
-.    ie '\\$1'' .nr #HDRFTR_RIGHT_CAPS 1
-.    el \{\
-.       nr #HDRFTR_RIGHT_CAPS 0
-.       ds $HDRFTR_RIGHT_SIZE_CHANGE +0
-.    \}
-.END
-\#
-\# HDRFTR RULE
-\# -----------
-\# *Arguments:
-\#   <none> | <anything>
-\# *Function:
-\#   If invoked via the alias HDRFTR_RULE_INTERNAL in HDRFTR, prints a rule
-\#   under the header/over the footer.  Otherwise, turns HDRFTR_RULE
-\#   on or off.
-\#
-.MAC HDRFTR_RULE END
-.    if r #HEADERS_ON \
-.       if \\n[#HEADERS_ON]=1 .nr #HDRFTR_RULE_GAP \\n[#HEADER_RULE_GAP]
-.    if r #FOOTERS_ON \
-.       if \\n[#FOOTERS_ON]=1 .nr #HDRFTR_RULE_GAP \\n[#FOOTER_RULE_GAP]
-.    if '\\$0'HDRFTR_RULE_INTERNAL' \{\
-.       ie \\n[#USERDEF_HDRFTR] \{\
-.          nr #CAP_HEIGHT_ADJUST \\n[#HDRFTR_HEIGHT]
-.          if \\n[#HEADERS_ON] \{\
-.             rt \\n[y]u
-.             ALD \\n[#HDRFTR_RULE_GAP]u
-.             nr #HDRFTR_RULE_WEIGHT \\n[#HEADER_RULE_WEIGHT]
-.             nr #HDRFTR_RULE_WEIGHT_ADJ \\n[#HEADER_RULE_WEIGHT_ADJ]
-.          \}
-.          if \\n[#FOOTERS_ON] \{\
-.             rt \\n[y]u
-.             RLD \
-\\n[#HDRFTR_RULE_GAP]u+\\n[#CAP_HEIGHT_ADJUST]u+\\n[#FOOTER_RULE_WEIGHT]u
-.             nr #HDRFTR_RULE_WEIGHT \\n[#FOOTER_RULE_WEIGHT]
-.             nr #HDRFTR_RULE_WEIGHT_ADJ \\n[#FOOTER_RULE_WEIGHT_ADJ]
-.          \}
-.          ie \\n[#HDRFTR_RULE_COLOR]=1 \{\
-\m[\\*[$HDRFTR_RULE_COLOR]]\
-\D't \\n[#HDRFTR_RULE_WEIGHT]u'\
-\h'|0'\
-\v'+\\n[#HDRFTR_RULE_WEIGHT_ADJ]u'\
-\D'l \\n[#DOC_L_LENGTH]u 0'\
-\D't \\n[#RULE_WEIGHT]u'\
-\h'-\\n[#RULE_WEIGHT]u'\
-\m[]
-.          \}
-.          el \{\
-\D't \\n[#HDRFTR_RULE_WEIGHT]u'\
-\h'|0'\
-\v'+\\n[#HDRFTR_RULE_WEIGHT_ADJ]u'\
-\D'l \\n[#DOC_L_LENGTH]u 0'\
-\D't \\n[#RULE_WEIGHT]u'\
-\h'-\\n[#RULE_WEIGHT]u'
-.          \}
-.          br
-.       \}
-.       el \{\
-.          if \\n[#PRINT_STYLE]=1 .nr #CAP_HEIGHT_ADJUST \\n[#CAP_HEIGHT]
-.          if \\n[#PRINT_STYLE]=2 \{\
-.             ie \\n[#LEFT_CAP_HEIGHT]>\\n[#CENTER_CAP_HEIGHT] \
-.                nr #CAP_HEIGHT_ADJUST \\n[#LEFT_CAP_HEIGHT]
-.             el .nr #CAP_HEIGHT_ADJUST \\n[#CENTER_CAP_HEIGHT]
-.             ie \\n[#CAP_HEIGHT_ADJUST]>\\n[#RIGHT_CAP_HEIGHT] \
-.                nr #CAP_HEIGHT_ADJUST \\n[#CAP_HEIGHT_ADJUST]
-.             el .nr #CAP_HEIGHT_ADJUST \\n[#RIGHT_CAP_HEIGHT]
-.          \}
-.          if \\n[#HEADERS_ON] \{\
-.             rt \\n[y]u
-.             ALD \\n[#HDRFTR_RULE_GAP]u
-.             nr #HDRFTR_RULE_WEIGHT \\n[#HEADER_RULE_WEIGHT]
-.             nr #HDRFTR_RULE_WEIGHT_ADJ \\n[#HEADER_RULE_WEIGHT_ADJ]
-.          \}
-.          if \\n[#FOOTERS_ON] \{\
-.             rt \\n[y]u
-.             RLD \
-\\n[#HDRFTR_RULE_GAP]u+\\n[#CAP_HEIGHT_ADJUST]u+\\n[#FOOTER_RULE_WEIGHT]u
-.             nr #HDRFTR_RULE_WEIGHT \\n[#FOOTER_RULE_WEIGHT]
-.             nr #HDRFTR_RULE_WEIGHT_ADJ \\n[#FOOTER_RULE_WEIGHT_ADJ]
-.          \}
-.          ie \\n[#HDRFTR_RULE_COLOR]=1 \{\
-\m[\\*[$HDRFTR_RULE_COLOR]]\
-\D't \\n[#HDRFTR_RULE_WEIGHT]u'\
-\h'|0'\
-\v'+\\n[#HDRFTR_RULE_WEIGHT_ADJ]u'\
-\D'l \\n[#DOC_L_LENGTH]u 0'\
-\D't \\n[#RULE_WEIGHT]u'\
-\h'-\\n[#RULE_WEIGHT]u'\
-\m[]
-.          \}
-.          el \{\
-\D't \\n[#HDRFTR_RULE_WEIGHT]u'\
-\h'|0'\
-\v'+\\n[#HDRFTR_RULE_WEIGHT_ADJ]u'\
-\D'l \\n[#DOC_L_LENGTH]u 0'\
-\D't \\n[#RULE_WEIGHT]u'\
-\h'-\\n[#RULE_WEIGHT]u'
-.          \}
-.          br
-.       \}
-.    \}
-.    if '\\$0'HEADER_RULE' \{\
-.       ie '\\$1'' \{\
-.          nr #HEADER_RULE 1
-.          nr #HDRFTR_RULE 1
-.       \}
-.       el \{\
-.          nr #HEADER_RULE 0
-.          nr #HDRFTR_RULE 0
-.       \}
-.    \}
-.    if '\\$0'FOOTER_RULE' \{\
-.       ie '\\$1'' \{\
-.          nr #FOOTER_RULE 1
-.          nr #HDRFTR_RULE 1
-.       \}
-.       el \{\
-.          nr #FOOTER_RULE 0
-.          nr #HDRFTR_RULE 0
-.       \}
-.    \}
-.    if '\\$0'HDRFTR_RULE' \{\
-.       ie '\\$1'' .nr #HDRFTR_RULE 1
-.       el .nr #HDRFTR_RULE 0
-.    \}
-.END
-\#
-.ALIAS HDRFTR_RULE_INTERNAL HDRFTR_RULE
-\#
-\# HDRFTR PLAIN
-\# ------------
-\# *Arguments:
-\#   <none>
-\# *Function:
-\#   Sets the family, font, and point size of all strings in
-\#   header/footers to the same family and point size as running
-\#   text.  Font for the header/footer becomes roman throughout.
-\#
-.MAC HDRFTR_PLAIN END
-.    HDRFTR_FAMILY        \\*[$DOC_FAM]
-.    HDRFTR_PT_SIZE       \\n[#DOC_PT_SIZE]
-.    HDRFTR_LEFT_FAMILY   \\*[$DOC_FAM]
-.    HDRFTR_LEFT_FONT     R
-.    HDRFTR_LEFT_SIZE     +0
-.    HDRFTR_LEFT_CAPS     OFF
-.    HDRFTR_CENTER_FAMILY \\*[$DOC_FAM]
-.    HDRFTR_CENTER_FONT   R
-.    HDRFTR_CENTER_SIZE   +0
-.    HDRFTR_CENTER_CAPS   OFF
-.    HDRFTR_RIGHT_FAMILY  \\*[$DOC_FAM]
-.    HDRFTR_RIGHT_FONT    R
-.    HDRFTR_RIGHT_SIZE    +0
-.    HDRFTR_RIGHT_CAPS    OFF
-.END
-\#
-\# SWITCH HDRFTR
-\# -------------
-\# *Arguments:
-\#   <none> | <anything>
-\# *Function:
-\#   Creates or modifies register #SWITCH_HDRFTR, used to switch
-\#   default location of HDRFTR_LEFT and HDRFTR_RIGHT.
-\# *Notes:
-\#   Default is OFF.
-\#
-\# Typically, the author string appears at the left of header/footers,
-\# and the title string appears at the right.  This switches the
-\# location of the two.  Useful in conjunction with RECTO_VERSO to tweak
-\# switches on alternate pages to come out as the user wishes.  The
-\# assumption of RECTO_VERSO is that the first page of the document
-\# (recto) is odd, and even though it has no header/footer, if it did
-\# have one, it would print as AUTHOR...CENTER...TITLE (or whatever
-\# strings the user has supplied for HDRFTR_LEFT/RIGHT), meaning that
-\# the next page, which does have a header/footer, will come out as
-\# TITLE...CENTER...AUTHOR (or whatever strings the user has supplied
-\# for HDRFTR_LEFT/RIGHT).  SWITCH_HDRFTRS allows the user to get the
-\# desired string in the desired place on the desired recto/verso page.
-\#
-.MAC SWITCH_HDRFTR END
-.    ie '\\$1'' .nr #SWITCH_HDRFTR 1
-.    el .nr #SWITCH_HDRFTR 0
-.END
-\#
-\# USER DEFINED HDRFTR RECTO
-\# -------------------------
-\# *Arguments:
-\#   L | LEFT | C | CENTER | CENTER | R | RIGHT <hdrftr_recto_string>
-\# *Function:
-\#   Toggles #USERDEF_HDRFTR on, stores quad as #USERDEF_HDRFTR_RECTO_QUAD,
-\#   stores string in $USERDEF_HDRFTR_RECTO.
-\# *Notes:
-\#   For use when users don't want 3-part headers/footers, but rather
-\#   want to design their own headers/footers and need different
-\#   headers/footers on recto and verso pages.  Using just
-\#   HEADER_RECTO, even when recto/verso is not on, allows users to
-\#   design their own headers/footers for doc pages.
-\#
-.MAC HDRFTR_RECTO END
-.    nr #USERDEF_HDRFTR 1
-.    if '\\$1'L'      .nr #USERDEF_HDRFTR_RECTO_QUAD 1
-.    if '\\$1'LEFT'   .nr #USERDEF_HDRFTR_RECTO_QUAD 1
-.    if '\\$1'C'      .nr #USERDEF_HDRFTR_RECTO_QUAD 2
-.    if '\\$1'CENTER' .nr #USERDEF_HDRFTR_RECTO_QUAD 2
-.    if '\\$1'CENTRE' .nr #USERDEF_HDRFTR_RECTO_QUAD 2
-.    if '\\$1'R'      .nr #USERDEF_HDRFTR_RECTO_QUAD 3
-.    if '\\$1'RIGHT'  .nr #USERDEF_HDRFTR_RECTO_QUAD 3
-.    shift
-.    ie '\\$1'CAPS' \{\
-.       nr #HDRFTR_RECTO_CAPS 1
-.       ds $USERDEF_HDRFTR_RECTO \\$2
-.    \}
-.    el .ds $USERDEF_HDRFTR_RECTO \\$1
-.END
-\#
-\# USER DEFINED HDRFTR VERSO
-\# -------------------------
-\# *Arguments:
-\#   L | LEFT | C | CENTER | CENTER | R | RIGHT <hdrftr_verso_string>
-\# *Function:
-\#   Toggles #USERDEF_HDRFTR on, stores quad as #USERDEF_HDRFTR_VERSO_QUAD,
-\#   stores string in $USERDEF_HDRFTR_VERSO.
-\# *Notes:
-\#   For use when users don't want 3-part headers/footers, but rather
-\#   want to design their own headers/footers and need different
-\#   headers/footers on recto and verso pages.
-\#
-.MAC HDRFTR_VERSO END
-.    nr #USERDEF_HDRFTR 1
-.    if '\\$1'L'      .nr #USERDEF_HDRFTR_VERSO_QUAD 1
-.    if '\\$1'LEFT'   .nr #USERDEF_HDRFTR_VERSO_QUAD 1
-.    if '\\$1'C'      .nr #USERDEF_HDRFTR_VERSO_QUAD 2
-.    if '\\$1'CENTER' .nr #USERDEF_HDRFTR_VERSO_QUAD 2
-.    if '\\$1'CENTRE' .nr #USERDEF_HDRFTR_VERSO_QUAD 2
-.    if '\\$1'R'      .nr #USERDEF_HDRFTR_VERSO_QUAD 3
-.    if '\\$1'RIGHT'  .nr #USERDEF_HDRFTR_VERSO_QUAD 3
-.    shift
-.    ie '\\$1'CAPS' \{\
-.       nr #HDRFTR_VERSO_CAPS 1
-.       ds $USERDEF_HDRFTR_VERSO \\$2
-.    \}
-.    el .ds $USERDEF_HDRFTR_VERSO \\$1
-.END
-\#
-\# PRINT FOOTER ON FIRST PAGE
-\# --------------------------
-\# *Arguments:
-\#   <none> | <anything>
-\# *Function:
-\#   Toggles register #PRINT_FOOTER_ON_PAGE_1
-\# *Notes:
-\#   Lets user choose whether to print footer on first
-\#   page of doc.
-\#
-.MAC FOOTER_ON_FIRST_PAGE END
-.    ie '\\$1'' .nr #PRINT_FOOTER_ON_PAGE_1 1
-.    el .rr #PRINT_FOOTER_ON_PAGE_1
-.END
-\#
-\# PRINT PAGE NUMBER ON FIRST PAGE
-\# -------------------------------
-\# *Arguments:
-\#   <none> | <anything>
-\# *Function:
-\#   Toggles register #PRINT_PAGENUM_ON_PAGE_1
-\# *Notes:
-\#   Lets user choose whether to print page number on first
-\#   page of doc and after collate when footers are on or page numbering
-\#   has been user set at top of page.
-\#
-.MAC PAGENUM_ON_FIRST_PAGE END
-.    ie '\\$1'' .nr #PRINT_PAGENUM_ON_PAGE_1 1
-.    el .rr #PRINT_PAGENUM_ON_PAGE_1
-.END
-\#
-\# PRINT HEADER/FOOTER
-\# -------------------
-\# *Arguments:
-\#   <none>
-\# *Function:
-\#   Based on defaults or values entered by user, prints a
-\#   three-part title at either the top or the bottom of the page.
-\# *Notes:
-\#   Called from within either HEADER or FOOTER.
-\#
-.MAC PRINT_HDRFTR END
-.    if \\n[#DOC_TYPE]=4 .nr #SUITE \En[.pn]
-.    if \\n[#FOOTERS_ON] \{\
-.       if \\n[#START_FOR_FOOTERS] \{\
-.          rr #START_FOR_FOOTERS
-.          if !\\n[#PRINT_FOOTER_ON_PAGE_1] \{\
-.             ie !\\n[#HDRFTR_BOTH] .return
-.             el \{\
-.                rr #FOOTERS_ON
-.                nr #HEADERS_ON 1
-.                ie \\n[#HEADER_RULE]=1 .HEADER_RULE
-.                el .HEADER_RULE OFF
-.                ie \\n[#HDRFTR_BOTH] .HEADER_VERSO \\*[$HDR_VERSO_QUAD] "\\*[$HDR_VERSO_STRING]"
-.                el .HEADER_RECTO \\*[$HDR_RECTO_QUAD] "\\*[$HDR_RECTO_STRING]"
-.                return
-.             \}
-.          \}
-.       \}
-.    \}
-.    if \\n[#USERDEF_HDRFTR] \{\
-.       PRINT_USERDEF_HDRFTR
-.       return
-.    \}
-.    if \\n[#SWITCH_HDRFTR] \{\
-.       ds $HDRFTR_TMP_SWITCH             \\*[$HDRFTR_LEFT]
-.       ds $HDRFTR_LEFT                   \\*[$HDRFTR_RIGHT]
-.       ds $HDRFTR_RIGHT                  \\*[$HDRFTR_TMP_SWITCH]
-.       ds $HDRFTR_TMP_SIZE_CHANGE_SWITCH \\*[$HDRFTR_LEFT_SIZE_CHANGE]
-.       ds $HDRFTR_LEFT_SIZE_CHANGE       \\*[$HDRFTR_RIGHT_SIZE_CHANGE]
-.       ds $HDRFTR_RIGHT_SIZE_CHANGE      \\*[$HDRFTR_TMP_SIZE_CHANGE_SWITCH]
-.       nr #HDRFTR_TMP_CAPS_SWITCH        \\n[#HDRFTR_LEFT_CAPS]
-.       nr #HDRFTR_LEFT_CAPS              \\n[#HDRFTR_RIGHT_CAPS]
-.       nr #HDRFTR_RIGHT_CAPS             \\n[#HDRFTR_TMP_CAPS_SWITCH]
-.       ds $HDRFTR_TMP_COLOR_SWITCH       \\*[$HDRFTR_LEFT_COLOR]
-.       ds $HDRFTR_LEFT_COLOR             \\*[$HDRFTR_RIGHT_COLOR]
-.       ds $HDRFTR_RIGHT_COLOR            \\*[$HDRFTR_TMP_COLOR_SWITCH]
-.       rr #HDRFTR_TMP_CAPS_SWITCH
-.       rm $HDRFTR_TMP_SWITCH
-.       rm $HDRFTR_TMP_SIZE_CHANGE_SWITCH
-.       rm $HDRFTR_TMP_COLOR_SWITCH
-.       nr #SWITCH_HDRFTR 0
-.    \}
-.    nr #PAGENUMBER \\n%+\\n[#PAGE_NUM_ADJ]
-.    if \\n[#ENDNOTES] .PAGENUM_STYLE \\*[$EN_PN_STYLE]
-.    if \\n[#PRINT_STYLE]=1 \{\
-.       if \\n[#FOOTERS_ON] \{\
-.          di NULL
-.          SIZESPECS
-.          nr #LEFT_CAP_HEIGHT \\n[#CAP_HEIGHT]
-.          di
-.       \}
-.       if o .RIGHT
-.       if e .LEFT
-.       if \\n[#RECTO_VERSO]=0    .LEFT
-.       if \\n[#HDRFTR_LEFT_CAPS] .CAPS
-.       ie '\\*[$HDRFTR_LEFT]'#' .PRINT \\n[#PAGENUMBER]
-.       el \{\
-.          ie !'\\*[$HDRFTR_LEFT]'' .PRINT \\*[$HDRFTR_LEFT]
-.          el .PRINT \&
-.       \}
-.       if \\n[#HDRFTR_LEFT_CAPS]   .CAPS OFF
-.       CENTER
-.       if \\n[#HDRFTR_CENTER_CAPS] .CAPS
-.       rt \\n[y]u
-.       ie '\\*[$HDRFTR_CENTER]'#' .PRINT \
-\h'\\n[#HDRFTR_CTR_PAD_LEFT]u'\\n[#PAGENUMBER]\h'\\n[#HDRFTR_CTR_PAD_RIGHT]u'
-.       el \{\
-.          ie !'\\*[$HDRFTR_CENTER]'' .PRINT \
-\h'\\n[#HDRFTR_CTR_PAD_LEFT]u'\\*[$HDRFTR_CENTER]\h'\\n[#HDRFTR_CTR_PAD_RIGHT]u'
-.          el .PRINT \&
-.       \}
-.       if \\n[#HDRFTR_CENTER_CAPS] .CAPS OFF
-.       if o .LEFT
-.       if e .RIGHT
-.       if \\n[#RECTO_VERSO]=0     .RIGHT
-.       if \\n[#HDRFTR_RIGHT_CAPS] .CAPS
-.       rt \\n[y]u
-.       ie '\\*[$HDRFTR_RIGHT]'#' .PRINT \\n[#PAGENUMBER]
-.       el \{\
-.          ie !'\\*[$HDRFTR_RIGHT]'' .PRINT \\*[$HDRFTR_RIGHT]
-.          el .PRINT \&
-.       \}
-.       if \\n[#HDRFTR_RIGHT_CAPS] .CAPS OFF
-.    \}
-.    if \\n[#PRINT_STYLE]=2 \{\
-.       if \\n[#HDRFTR_COLOR]=1 \{\
-.          nf
-\m[\\*[$HDRFTR_COLOR]]
-.       \}
-.       fam \\*[$HDRFTR_LEFT_FAM]
-.       ft  \\*[$HDRFTR_LEFT_FT]
-.       ps  \\n[#HDRFTR_PT_SIZE]u\\*[$HDRFTR_LEFT_SIZE_CHANGE]
-.       if \\n[#FOOTERS_ON] \{\
-.          di NULL
-.          SIZESPECS
-.          nr #LEFT_CAP_HEIGHT \\n[#CAP_HEIGHT]
-.          di
-.       \}
-.       if o .LEFT
-.       if e .RIGHT
-.       if \\n[#RECTO_VERSO]=0 .LEFT
-.       if \\n[#HDRFTR_LEFT_CAPS] .CAPS
-.       ie '\\*[$HDRFTR_LEFT]'#' \{\
-.          ie \\n[#HDRFTR_LEFT_COLOR]=1 \
-.             PRINT \m[\\*[$HDRFTR_LEFT_COLOR]]\\n[#PAGENUMBER]\m[]
-.          el \
-.             PRINT \\n[#PAGENUMBER]
-.       \}
-.       el \{\
-.          ie !'\\*[$HDRFTR_LEFT]'' \{\
-.             ie \\n[#HDRFTR_LEFT_COLOR]=1 \
-.                PRINT \m[\\*[$HDRFTR_LEFT_COLOR]]\\*[$HDRFTR_LEFT]\m[]
-.             el \
-.                PRINT \\*[$HDRFTR_LEFT]
-.          \}
-.          el .nop \&
-.       \}
-.       if \\n[#HDRFTR_LEFT_CAPS] .CAPS OFF
-.       fam     \\*[$HDRFTR_CENTER_FAM]
-.       ft      \\*[$HDRFTR_CENTER_FT]
-.       ps      \\n[#HDRFTR_PT_SIZE]u\\*[$HDRFTR_CENTER_SIZE_CHANGE]
-.       if \\n[#FOOTERS_ON] \{\
-.          di NULL
-.          SIZESPECS
-.          nr #CENTER_CAP_HEIGHT \\n[#CAP_HEIGHT]
-.          di
-.       \}
-.       CENTER
-.       if \\n[#HDRFTR_CENTER_CAPS] .CAPS
-.       rt \\n[y]u
-.       ie '\\*[$HDRFTR_CENTER]'#' \{\
-.          ie \\n[#HDRFTR_CENTER_COLOR]=1 .PRINT \
-\h'\\n[#HDRFTR_CTR_PAD_LEFT]u'\m[\\*[$HDRFTR_CENTER_COLOR]]\
-\\n[#PAGENUMBER]\h'\\n[#HDRFTR_CTR_PAD_RIGHT]u'\m[]
-.          el .PRINT \
-\h'\\n[#HDRFTR_CTR_PAD_LEFT]u'\\n[#PAGENUMBER]\h'\\n[#HDRFTR_CTR_PAD_RIGHT]u'
-.       \}
-.       el \{\
-.          ie !'\\*[$HDRFTR_CENTER]'' \{\
-.             ie \\n[#HDRFTR_CENTER_COLOR]=1 .PRINT \
-\h'\\n[#HDRFTR_CTR_PAD_LEFT]u'\m[\\*[$HDRFTR_CENTER_COLOR]]\
-\\*[$HDRFTR_CENTER]\h'\\n[#HDRFTR_CTR_PAD_RIGHT]u'\m[]
-.             el .PRINT \
-\h'\\n[#HDRFTR_CTR_PAD_LEFT]u'\\*[$HDRFTR_CENTER]\h'\\n[#HDRFTR_CTR_PAD_RIGHT]u'
-.          \}
-.          el .PRINT \&
-.       \}
-.       if \\n[#HDRFTR_CENTER_CAPS] .CAPS OFF
-.       fam \\*[$HDRFTR_RIGHT_FAM]
-.       ft  \\*[$HDRFTR_RIGHT_FT]
-.       ps  \\n[#HDRFTR_PT_SIZE]u\\*[$HDRFTR_RIGHT_SIZE_CHANGE]
-.       if \\n[#FOOTERS_ON] \{\
-.          di NULL
-.          SIZESPECS
-.          nr #RIGHT_CAP_HEIGHT \\n[#CAP_HEIGHT]
-.          di
-.       \}
-.       if o .RIGHT
-.       if e .LEFT
-.       if \\n[#RECTO_VERSO]=0 .RIGHT
-.       if \\n[#HDRFTR_RIGHT_CAPS] .CAPS
-.       rt \\n[y]u
-.       ie '\\*[$HDRFTR_RIGHT]'#' \{\
-.          ie \\n[#HDRFTR_RIGHT_COLOR]=1 \
-.             PRINT \m[\\*[$HDRFTR_RIGHT_COLOR]]\\n[#PAGENUMBER]\m[]
-.          el \
-.             PRINT \\n[#PAGENUMBER]
-.       \}
-.       el \{\
-.          ie !'\\*[$HDRFTR_RIGHT]'' \{\
-.             ie \\n[#HDRFTR_RIGHT_COLOR]=1 \
-.                PRINT \m[\\*[$HDRFTR_RIGHT_COLOR]]\\*[$HDRFTR_RIGHT]\m[]
-.             el \
-.                PRINT \\*[$HDRFTR_RIGHT]
-.          \}
-.          el .PRINT \&
-.       \}
-.       if \\n[#HDRFTR_RIGHT_CAPS] .CAPS OFF
-.    \}
-.    if \\n[#HDRFTR_RULE] .HDRFTR_RULE_INTERNAL
-.    br
-.END
-\#
-\# PRINT USER DEFINED HEADER/FOOTER
-\# --------------------------------
-\# *Arguments:
-\#   <none>
-\# *Function:
-\#   Based on defaults or values entered by user, prints a single part
-\#   (i.e. not 3-part) title at either the top or the bottom of the page.
-\# *Notes:
-\#   Called from within PRINT_HDRFTR.
-\#
-.MAC PRINT_USERDEF_HDRFTR END
-.    nr #PAGENUMBER \\n%+\\n[#PAGE_NUM_ADJ]
-.    fc ^ #
-.    if \\n[#PRINT_STYLE]=2 \{\
-.       fam \\*[$HDRFTR_FAM]
-.       ft  R
-.       ps \\n[#HDRFTR_PT_SIZE]u
-.       if \\n[#HDRFTR_COLOR]=1 \{\
-.          nf
-.          COLOR \\*[$HDRFTR_COLOR]
-.       \}
-.    \}
-.    ie \\n[#RECTO_VERSO] \{\
-.       if o \{\
-.          if \\n[#USERDEF_HDRFTR_RECTO_QUAD]=1 .LEFT
-.          if \\n[#USERDEF_HDRFTR_RECTO_QUAD]=2 .CENTER
-.          if \\n[#USERDEF_HDRFTR_RECTO_QUAD]=3 .RIGHT
-.          if \\n[#HDRFTR_RECTO_CAPS]=1 .CAPS
-.          if '\\n[.ev]'FOOTER' .vs 0
-.          PRINT \\*[$USERDEF_HDRFTR_RECTO]
-.          if '\\n[.ev]'FOOTER' .vs
-.          if \\n[#HDRFTR_RECTO_CAPS]=1 .CAPS OFF
-.          EOL
-.          if \\n[#FOOTERS_ON] \{\
-.             di NULL
-.             SIZESPECS
-.             nr #HDRFTR_HEIGHT \\n[#CAP_HEIGHT]
-.             di
-.          \}
-.       \}
-.       if e \{\
-.          ie !'\\*[$USERDEF_HDRFTR_VERSO]'' \{\
-.             if \\n[#USERDEF_HDRFTR_VERSO_QUAD]=1 .LEFT
-.             if \\n[#USERDEF_HDRFTR_VERSO_QUAD]=2 .CENTER
-.             if \\n[#USERDEF_HDRFTR_VERSO_QUAD]=3 .RIGHT
-.             if \\n[#HDRFTR_VERSO_CAPS]=1 .CAPS
-.             if '\\n[.ev]'FOOTER' .vs 0
-.             PRINT \\*[$USERDEF_HDRFTR_VERSO]
-.             if '\\n[.ev]'FOOTER' .vs
-.             if \\n[#HDRFTR_VERSO_CAPS]=1 .CAPS OFF
-.             EOL
-.             if \\n[#FOOTERS_ON] \{\
-.                di NULL
-.                SIZESPECS
-.                nr #HDRFTR_HEIGHT \\n[#CAP_HEIGHT]
-.                di
-.             \}
-.          \}
-.          el \{\
-.             if \\n[#USERDEF_HDRFTR_RECTO_QUAD]=1 .LEFT
-.             if \\n[#USERDEF_HDRFTR_RECTO_QUAD]=2 .CENTER
-.             if \\n[#USERDEF_HDRFTR_RECTO_QUAD]=3 .RIGHT
-.             if \\n[#HDRFTR_RECTO_CAPS]=1 .CAPS
-.             if '\\n[.ev]'FOOTER' .vs 0
-.             PRINT \\*[$USERDEF_HDRFTR_RECTO]
-.             if '\\n[.ev]'FOOTER' .vs
-.             if \\n[#HDRFTR_RECTO_CAPS]=1 .CAPS OFF
-.             EOL
-.             if \\n[#FOOTERS_ON] \{\
-.                di NULL
-.                SIZESPECS
-.                nr #HDRFTR_HEIGHT \\n[#CAP_HEIGHT]
-.                di
-.             \}
-.          \}
-.       \}
-.    \}
-.    el \{\
-.       if \\n[#USERDEF_HDRFTR_RECTO_QUAD]=1 .LEFT
-.       if \\n[#USERDEF_HDRFTR_RECTO_QUAD]=2 .CENTER
-.       if \\n[#USERDEF_HDRFTR_RECTO_QUAD]=3 .RIGHT
-.       if \\n[#HDRFTR_RECTO_CAPS]=1 .CAPS
-.       if '\\n[.ev]'FOOTER' .vs 0
-.       PRINT \\*[$USERDEF_HDRFTR_RECTO]
-.       if '\\n[.ev]'FOOTER' .vs
-.       if \\n[#HDRFTR_RECTO_CAPS]=1 .CAPS OFF
-.       EOL
-.       if \\n[#FOOTERS_ON] \{\
-.          di NULL
-.          SIZESPECS
-.          nr #HDRFTR_HEIGHT \\n[#CAP_HEIGHT]
-.          di
-.       \}
-.    \}
-.    fc
-.    if \\n[#PRINT_STYLE]=2 \{\
-.       ie \\n[#HDRFTR_COLOR]=1 \m[\\*[$HDRFTR_COLOR]]
-.       el \m[black]
-.    \}
-.    if \\n[#HDRFTR_RULE] \{\
-.       HDRFTR_RULE_INTERNAL
-.    \}
-.END
-\#
-\# +++HEADERS+++
-\#
-\# HEADERS (off or on)
-\# -------------------
-\# *Arguments:
-\#   <none> | <anything>
-\# *Function:
-\#   Turns headers at the top of the page off or on.
-\# *Notes:
-\#   Default is on.
-\#
-.MAC HEADERS END
-.    ie '\\$1'' .nr #HEADERS_ON 1
-.    el .nr #HEADERS_ON 0
-.END
-\#
-\# HEADER MARGIN
-\# -------------
-\# *Argument:
-\#   <amount of space between top of page and header>
-\# *Function:
-\#   Creates or modifies register #HEADER_MARGIN to hold amount
-\#   of space between top of page and header.
-\# *Notes:
-\#   Requires unit of measure.  Default is 4P+6p, measured top-of-page
-\#   to baseline.
-\#
-.MAC HEADER_MARGIN END
-.    nr #HEADER_MARGIN (\\$1)
-.END
-\#
-\# HEADER GAP
-\# ----------
-\# *Argument:
-\#   <amount of space between header and running text>
-\# *Function:
-\#   Creates or modifies register #HEADER_GAP to hold amount
-\#   of space between header and running text.
-\# *Notes:
-\#   Default is 1P+6p.
-\#
-.MAC HEADER_GAP END
-.    nr #HEADER_GAP (\\$1)
-.END
-\#
-\# HEADER
-\# ------
-\# *Arguments:
-\#   <none>
-\# *Function:
-\#   Prints header appropriate to DOC_TYPE, PRINTSTYLE, and COPYSTYLE.
-\# *Notes:
-\#   In order to convert the title string to caps in the header
-\#   (in the event that the user enters .TITLE in caps/lc), I've
-\#   used quad left, quad centre, and quad right to arrange the
-\#   three bits of the header, rather than .tl.  This allows the
-\#   use of the CAPS macro.  The downside is that I have to add
-\#   \\v'-(\\n[#LEAD]u*<n>) in order for -Tlatin1 output to align
-\#   the header/footer strings on the baseline.  The console output
-\#   still isn't brilliant, but at least it's comprehensible.
-\#
-.MAC HEADER END
-.    vpt 0
-.    if \\n[#NEW_DOC_PT_SIZE] .nr #DOC_PT_SIZE \\n[#NEW_DOC_PT_SIZE]
-.    rr #NEW_DOC_PT_SIZE
-.    if \\n[#RESET_TRAPS] \{\
-.       TRAPS
-.       if \\n[#REMOVE_ADJ] .nr #DOC_LEAD -\\n[#DOC_LEAD_ADJ]
-.    \}
-.    rr #REMOVE_ADJ
-.    rr #RESET_TRAPS
-.    MNtop
-.    rr #FROM_FOOTER
-.    nr #FROM_HEADER 1
-.    nr #LAST_FN_COUNT_FOR_COLS \\n[#FN_COUNT_FOR_COLS]
-.    if \\n[#FN_DEPTH] .PROCESS_FN_LEFTOVER
-.    rr #RULED
-.    if \\n[#RESET_FN_NUMBER] .nr #FN_NUMBER 0 1
-.    po \\n[#DOC_L_MARGIN]u
-.    if \\n[#RECTO_VERSO] \{\
-.          nr #DOC_LR_MARGIN_TMP \\n[#DOC_L_MARGIN]
-.          DOC_LEFT_MARGIN  \\n[#DOC_R_MARGIN]u
-.          if \\n[#CROPS] .DOC_LEFT_MARGIN  \\n[#DOC_R_MARGIN]u+\\n[cropmarks]u
-.          DOC_RIGHT_MARGIN \\n[#DOC_LR_MARGIN_TMP]u
-.          if \\n[#CROPS] .DOC_RIGHT_MARGIN \\n[#DOC_LR_MARGIN_TMP]u-\\n[cropmarks]u
-.          SWITCH_HDRFTR_CENTER_PAD
-.       \}
-.    \}
-.    ev HEADER
-.    if \\n[#PAGE_NUM_V_POS]=1 .vs 0
-.    sp |\\n[#HEADER_MARGIN]u-1v
-.    mk y
-.    ll \\n[#DOC_L_LENGTH]u
-.    ta \\n[.l]u
-.    if \\n[#PRINT_STYLE]=1 \{\
-.       fam \\*[$TYPEWRITER_FAM]
-.       ft  R
-.       ps  \\*[$TYPEWRITER_PS]\\*[$HDRFTR_SIZE_CHANGE]
-.    \}
-.    if \\n[#PRINT_STYLE]=2 \{\
-.      fam \\*[$HDRFTR_FAM]
-.      ft  R
-.      ps  \\n[#DOC_PT_SIZE]u\\*[$HDRFTR_SIZE_CHANGE]
-.    \}
-.    nr #HDRFTR_PT_SIZE \\n[#PT_SIZE]
-.    if \\n[#CAPS_ON] \{\
-.       nr #CAPS_WAS_ON 1
-.       CAPS OFF
-.    \}
-.    if \\n[#PRINT_STYLE]=1 \{\
-.       if \\n[#ENDNOTES]=1 \{\
-.\" Single-spaced endotes have a different lead
-.          if \\n[#EN_SINGLESPACE] \{\
-.             nr #RESTORE_DOC_LEAD \\n[#DOC_LEAD]
-.             nr #DOC_LEAD \\n[#EN_LEAD]u
-.          \}
-.       \}
-.    \}
-.    if !n .nop \X'ps: exec 0 setlinejoin'\X'ps: exec 0 setlinecap'
-.    sp -1v
-.    ie \\n[#HEADERS_ON] .PRINT_HDRFTR
-.    el \{\
-.       if \\n[#PAGE_NUM_V_POS]=1 \{\
-.          if \\n[#PAGINATE] .PRINT_PAGE_NUMBER
-.       \}
-.    \}
-.    sp |\\n[#T_MARGIN]u-\\n[#DOC_LEAD]u
-.    if \\n[#PRINT_STYLE]=1 \{\
-.       if \\n[#ENDNOTES]=1 \{\
-.          if \\n[#EN_SINGLESPACE] \{\
-.             nr #DOC_LEAD \\n[#RESTORE_DOC_LEAD]u
-.             rr #RESTORE_DOC_LEAD
-.          \}
-.       \}
-.    \}
-.    nr #PAGE_TOP \\n[nl]
-.    ev
-.    po \\n[#L_MARGIN]u
-.    if \\n[#RECTO_VERSO] .nr #L_MARGIN +\\n[#L_MARGIN_DIFF]
-.    if \\n[#CAPS_WAS_ON] \{\
-.       CAPS
-.       rr #CAPS_WAS_ON
-.    \}
-.    if \\n[#TAB_ACTIVE] .TAB \\n[#CURRENT_TAB]
-.    if \\n[#QUOTE] \{\
-.       ie \\n[#TAB_ACTIVE] .TAB \\n[#CURRENT_TAB]
-.       el \{\
-.          ie \\n[#Q_OFFSET_VALUE] .nr #Q_OFFSET \
-\\n[#L_MARGIN]+(\\n[#PP_INDENT]*\\n[#Q_OFFSET_VALUE])
-.          el .nr #Q_OFFSET \\n[#L_MARGIN]+\\*[$Q_OFFSET_VALUE]
-.          po \\n[#Q_OFFSET]u
-.       \}
-.       if \\n[#PRINT_STYLE]=2 .sp \\n[#Q_LEAD_DIFF]u
-.    \}
-.    if \\n[#EPIGRAPH] \{\
-.       ie \\n[#TAB_ACTIVE] .TAB \\n[#CURRENT_TAB]
-.       el \{\
-.          ie r#EPI_OFFSET_VALUE \
-.             nr #EPI_OFFSET \
-\\n[#L_MARGIN]+(\\n[#PP_INDENT]*\\n[#EPI_OFFSET_VALUE])
-.          el \
-.             nr #EPI_OFFSET \\n[#L_MARGIN]+\\*[$EPI_OFFSET_VALUE]
-.          po \\n[#EPI_OFFSET]u
-.       \}
-.    \}
-.    ie \\n[#EPIGRAPH] \{\
-.       ie !\\n[#EPI_ACTIVE] \{\
-.          ns
-.          rr #EPI_ACTIVE
-.       \}
-.       el \{\
-.          ie \\n[#EPI_FITS] .ns
-.          el .sp \\n[#DOC_LEAD]u-\\n[#EPI_LEAD]u
-.       \}
-.    \}
-.    el .ns
-.    if \\n[#COLUMNS] \{\
-.       nr #FN_COUNT_FOR_COLS 0 1
-.       nr #L_MARGIN \\n[#DOC_L_MARGIN]
-.       if \\n[#RECTO_VERSO] .COLUMNS \\n[#NUM_COLS] \\n[#GUTTER]u
-.       nr #COL_NUM 0 1
-.       mk dc
-.       po \\n[#COL_\\n+[#COL_NUM]_L_MARGIN]u
-.       nr #L_MARGIN \\n[.o]
-.       if \\n[#TAB_ACTIVE] .TAB \\n[#CURRENT_TAB]
-.       ll \\n[#COL_L_LENGTH]u
-.       ta \\n[.l]u
-.       if \\n[#QUOTE] \{\
-.          ie \\n[#Q_OFFSET_VALUE] \
-.             po +(\\n[#PP_INDENT]u*\\n[#Q_OFFSET_VALUE]u)
-.          el \
-.             po +\\*[$Q_OFFSET_VALUE]
-.       \}
-.       if \\n[#EPIGRAPH] \{\
-.          if \\n[#EPI_ACTIVE] \{\
-.             ie \\n[#EPI_FITS] .
-.             el .nr dc -\\n[#EPI_LEAD_DIFF]
-.          \}
-.          ie r#EPI_OFFSET_VALUE \{\
-.             po \
-\\n[#COL_\\n[#COL_NUM]_L_MARGIN]u+(\\n[#PP_INDENT]u*\\n[#EPI_OFFSET_VALUE]u)
-.          \}
-.          el .po \\n[#COL_\\n[#COL_NUM]_L_MARGIN]u+\\*[$EPI_OFFSET_VALUE]
-.       \}
-.    \}
-.    if \\n[#RESET_FN_COUNTERS]=1 \{\
-.       rr #RESET_FN_COUNTERS
-.       PROCESS_FN_IN_DIVER
-.       nr #FN_COUNT \\n[#SAVED_FN_COUNT] 1
-.       if \\n[#COLUMNS]=1 .nr #FN_COUNT_FOR_COLS \\n[#SAVED_FN_COUNT_FOR_COLS] 1
-.       ie \\n[#RESET_FN_NUMBER]=1 .nr #FN_NUMBER \\n[#SAVED_FN_NUMBER] 1
-.       el .nr #FN_NUMBER \\n[#FN_NUMBER] 1
-.       rm FN_IN_DIVER
-.       if dRUNON_FN_IN_DIVER .rm RUNON_FN_IN_DIVER
-.    \}
-.    rr #FROM_HEADER
-.    rr #DEFER_SPACE_ADDED
-.    if !\\n[#FN_DEPTH] .if r #DIVERTED .rr #DIVERTED
-.    if \\n[#MN_OVERFLOW_LEFT]=1 \{\
-.       MN LEFT
-.       nf
-.       MN_OVERFLOW_LEFT
-.       MN
-.    \}
-.    if \\n[#MN_OVERFLOW_RIGHT]=1 \{\
-.       MN RIGHT
-.       nf
-.       MN_OVERFLOW_RIGHT
-.       MN
-.    \}
-.    rm MN_OVERFLOW_LEFT
-.    rr #MN_OVERFLOW_LEFT
-.    rr #no-repeat-MN-left
-.    rm MN_OVERFLOW_RIGHT
-.    rr #MN_OVERFLOW_RIGHT
-.    rr #no-repeat-MN-right
-.    if \\n[#PRE_COLLATE]=1 .rr #PRE_COLLATE
-.    if \\n[#UNDERLINE_WAS_ON]=1 \{\
-.       vs 0
-.       ie !n \
-.          nop \R'#UNDERLINE_ON 1'\X'ps: exec \\n[_w] \\n[_d] decorline'
-.       el .ul 1000
-.       br
-.       ns
-.       rr #UNDERLINE_WAS_ON
-.    \}
-.    if \\n[#RESTORE_PAGINATION] \{\
-.       PAGINATE
-.       rr #RESTORE_PAGINATION
-.    \}
-.    ch RR_@TOP
-.    ie \\n[tbl*have-header] .rr @TOP
-.    el .wh \\n[nl]u+1u RR_@TOP
-.    ie \\n[defer] .PROCESS_FLOATS
-.    el \{\
-.       if \\n[tbl*have-caption] \{\
-.          RESTORE_SPACE
-.          ie \\n[#MLA] .sp \n[tbl*label-lead-diff]u
-.          el .sp \n[tbl*caption-lead-diff]u
-.       \}
-.    \}
-.\" So tables without TH that don't fit don't overprint first row
-.\" at top of page
-.    ie \\n[tbl*no-header] \{\
-.       rs
-.       nop \&
-.       vpt
-.       rr \\n[tbl*no-header]
-.       SHIM
-.    \}
-.    el .vpt
-.    if \\n[#NEWPAGE] .rr #NEWPAGE
-.    ie \\n[tbl*interrupted] \{\
-.       tbl*print-header
-.       rr tbl*interrupted
-.      \}
-.    el .tbl@top-hook
-.END
-\#
-\# ====================================================================
-\#
-\# +++FOOTERS+++
-\#
-\# FOOTERS (off or on)
-\# -------------------
-\# *Arguments:
-\#   <none> | <anything>
-\# *Function:
-\#   Turns footers at the bottom of the page off or on.
-\# *Notes:
-\#   Default is off.  If on, page numbers automatically go at
-\#   the top, centered, unless pagination has been turned off,
-\#   or the pagenumber position has been changed to left or right.
-\#
-.MAC FOOTERS END
-.    ie '\\$1'' \{\
-.       rr #HEADERS_ON
-.       nr #FOOTERS_ON 1
-.       PAGENUM_POS TOP CENTER
-.    \}
-.    el .nr #FOOTERS_ON 0
-.END
-\#
-\# FOOTER MARGIN
-\# -------------
-\# *Argument:
-\#   <footer margin>
-\# *Function:
-\#   Creates or modifies register #FOOTER_MARGIN which holds the
-\#   amount of space to leave between the page number and the bottom
-\#   of the page.
-\# *Notes:
-\#   Unit of measure required.  Default is 3P.
-\#
-.MAC FOOTER_MARGIN END
-.    ie \\n%>0 .nr #FOOTER_MARGIN (\\$1)
-.    el .
-.END
-\#
-\# FOOTER GAP
-\# ----------
-\# *Argument:
-\#   <distance from end of running text to page # or footer>
-\# *Function:
-\#   Creates or modifies register #FOOTER_GAP which holds the
-\#   amount of space to leave between running text and the page number.
-\# *Notes:
-\#   Requires unit of measure.  Default is 3P.  Measured baseline to
-\#   baseline.
-\#
-.MAC FOOTER_GAP END
-.    ie \\n%>0 .nr #FOOTER_GAP (\\$1)
-.    el .
-.END
-\#
-\# FOOTER
-\# ------
-\# *Arguments:
-\#   <none>
-\# *Function:
-\#   Places footer at bottom of page if #FOOTERS=1, otherwise
-\#   places page number at bottom of page (if #PAGINATE=1).
-\#   Page numbers are in arabic or roman according to COPYSTYLE.
-\#   DRAFT starts the document at page 1 regardless of PAGENUMBER.
-\#   FINAL respects PAGENUMBER.
-\#
-.MAC FOOTER END
-.    vpt 0
-.    rr #LB_4_HD
-.    rr #QUOTE_4_HD
-.    nr #SAVED_LEAD \\n[.v]
-.    ev PAGE_TRANSITION
-.    pdfmarksuspend
-.    ie !n .nop \X'ps: exec decornone'
-.    el .ul 0
-.    br
-.    if \\n[#UNDERLINE_ON]=1 .nr #UNDERLINE_WAS_ON 1
-.    if \\n[MN-left]>0 \{\
-.       if !\\n[#no-repeat-MN-left]=1 \{\
-.          MNbottom-left
-.          nr #no-repeat-MN-left 1
-.       \}
-.       if '\\n[.z]'MN_OVERFLOW_LEFT' \{\
-.          di
-.          nr #MN_OVERFLOW_LEFT 1
-.          rr #OVERFLOW_LEFT
-.       \}
-.    \}
-.    if \\n[MN-right]>0 \{\
-.       if (\\n[MN-right] > 0) \
-.          if !\\n[#no-repeat-MN-right]=1 .MNbottom-right
-.       if '\\n[.z]'MN_OVERFLOW_RIGHT' \{\
-.          di
-.          nr #MN_OVERFLOW_RIGHT 1
-.          rr #OVERFLOW_RIGHT
-.       \}
-.    \}
-\# Table bottom hook, draws the table borders in
-\# multipage boxed tables.
-.    tbl@bottom-hook
-.    ch MN_OVERFLOW_TRAP
-.    nr #L_MARGIN_DIFF \\n[#L_MARGIN]-\\n[#DOC_L_MARGIN]
-.    if !\\n[#FN_DEFER] \{\
-.       nr #DIVER_DEPTH 0
-.       if \\n[#FN_DEPTH] \{\
-.          if \\n[#DIVERTED]=3 .nr #FN_DEPTH +\\n[#VFP_DIFF]
-.          vpt 0
-.          sp \
-|\\n[#PAGE_LENGTH]u-(\\n[#B_MARGIN]u+\\n[#FN_DEPTH]u-\\n[#DOC_LEAD]u)
-.          vpt 1
-.          po \\n[#DOC_L_MARGIN]u
-.          if \\n[#COLUMNS] \{\
-.             po \\n[#COL_\\n[#COL_NUM]_L_MARGIN]u
-.             nr #L_MARGIN \\n[.o]
-.             nr #FROM_FOOTER 1
-.          \}
-.          nf
-.          FOOTNOTES
-.          rm FOOTNOTES
-.          if d RUNON_FOOTNOTES    .rm RUNON_FOOTNOTES
-.          if \\n[#PRINT_STYLE]=1 .vs \\n[#SAVED_LEAD]u
-.          if \\n[#PRINT_STYLE]=2 .LS \\n[#SAVED_LEAD]u
-.          if '\\n[.z]'FN_OVERFLOW' \{\
-.              di
-.              nr #FN_OVERFLOW_DEPTH \\n[#DIVER_DEPTH]
-.          \}
-.          nr #FN_COUNT_AT_FOOTER \\n[#FN_COUNT]
-.          nr #FN_COUNT 0
-.          if \\n[#COL_NEXT] \{\
-.             ie !\\n[#COL_NUM]=\\n[#NUM_COLS] .nr #COL_NUM \\n-[#COL_NUM]
-.             el .nr #COL_NUM \\n[#NUM_COLS] 1
-.          \}
-.       \}
-.       rr #DIVERTED
-.    \}
-.    nr @TOP 1
-.    ie \\n[#COLUMNS]=1 \{\
-.       ie \\n[#COL_NUM]=\\n[#NUM_COLS] .DO_FOOTER
-.       el \{\
-.          ie (\\n[#ENDNOTES]=1):(\\n[#BIBLIOGRAPHY]=1) \{\
-.             if \\n[#ENDNOTES] .sp |\\n[ec]u-\\n[#EN_LEAD]u
-.             if \\n[#BIBLIOGRAPHY] .sp |\\n[bc]u-\\n[#BIB_LEAD]u
-.          \}
-.          el \{\
-.            vs \\n[#SAVED_LEAD]u
-.            sp |\\n[dc]u
-.          \}
-.          po \\n[#COL_\\n+[#COL_NUM]_L_MARGIN]u
-.          nr #L_MARGIN \\n[.o]
-.          if \\n[#FN_DEPTH] .PROCESS_FN_LEFTOVER
-.          vs \\n[#SAVED_LEAD]u
-.          if \\n[#PREV_FN_DEFERRED] .nr #PREV_FN_DEFERRED 2
-.          rr #RULED
-.          if !\\n[#EPIGRAPH] .rr #COL_NEXT
-.          if !\\n[#QUOTE] .rr #COL_NEXT
-.          if \\n[#RESET_FN_COUNTERS]=1 \{\
-.             rr #RESET_FN_COUNTERS
-.             PROCESS_FN_IN_DIVER
-.             LS \\n[#SAVED_LEAD]u
-.             nr #FN_COUNT \\n[#FN_COUNT] 1
-.             nr #FN_COUNT_FOR_COLS \\n[#FN_COUNT_FOR_COLS] 1
-.             rm FN_IN_DIVER
-.             if dRUNON_FN_IN_DIVER .rm RUNON_FN_IN_DIVER
-.          \}
-.          rr #DEFER_SPACE_ADDED
-.          if \\n[#TAB_ACTIVE] .TAB \\n[#CURRENT_TAB]
-.          if \\n[#QUOTE] \{\
-.             ie \\n[#TAB_ACTIVE] .TAB \\n[#CURRENT_TAB]
-.             el \{\
-.                ie \\n[#Q_OFFSET_VALUE] \
-.                   nr #Q_OFFSET \
-\\n[#L_MARGIN]+(\\n[#PP_INDENT]*\\n[#Q_OFFSET_VALUE])
-.                el \
-.                   nr #Q_OFFSET \\n[#L_MARGIN]+\\*[$Q_OFFSET_VALUE]
-.                if \\n[#COLUMNS] \{\
-.                   ie \\n[#Q_OFFSET_VALUE] .nr #Q_OFFSET \
-\\n[#COL_\\n[#COL_NUM]_L_MARGIN]+(\\n[#PP_INDENT]*\\n[#Q_OFFSET_VALUE])
-.                   el .nr #Q_OFFSET \
-\\n[#COL_\\n[#COL_NUM]_L_MARGIN]+\\*[$Q_OFFSET_VALUE]
-.                \}
-.                po \\n[#Q_OFFSET]u
-.             \}
-.          \}
-.          if \\n[#EPIGRAPH] \{\
-.             ie \\n[#TAB_ACTIVE] .TAB \\n[#CURRENT_TAB]
-.             el \{\
-.                ie r#EPI_OFFSET_VALUE .nr #EPI_OFFSET \
-\\n[#L_MARGIN]+(\\n[#PP_INDENT]*\\n[#EPI_OFFSET_VALUE])
-.                el .nr #EPI_OFFSET \
-\\n[#L_MARGIN]+\\*[$EPI_OFFSET_VALUE]
-.                if \\n[#COLUMNS] \{\
-.                   ie r#EPI_OFFSET_VALUE .nr #EPI_OFFSET \
-\\n[#COL_\\n[#COL_NUM]_L_MARGIN]+(\\n[#PP_INDENT]*\\n[#EPI_OFFSET_VALUE])
-.                   el .nr #EPI_OFFSET \
-\\n[#COL_\\n[#COL_NUM]_L_MARGIN]+\\*[$EPI_OFFSET_VALUE]
-.                \}
-.                po \\n[#EPI_OFFSET]u
-.             \}
-.          \}
-.          ie \\n[#EPIGRAPH] \{\
-.             ie !\\n[#EPI_ACTIVE] \{\
-.                ns
-.                rr #EPI_ACTIVE
-.             \}
-.             el \{\
-.                sp |\\n[dc]u+(\\n[#DOC_LEAD]u-\\n[#EPI_LEAD]u)
-.                rr #EPI_ACTIVE
-.             \}
-.          \}
-.          el .ns
-.          ev
-.       \}
-.       ns
-.       rr #DIVERTED
-.       ch RR_@TOP
-.       wh \\n[nl]u+1u RR_@TOP
-.       if \\n[tbl*have-header] .tbl@bottom-hook
-.       if \\n[defer] .PROCESS_FLOATS
-.       ie \\n[tbl*no-header] \{\
-.          rs
-.          nop \&
-.          vpt
-.          rr \\n[tbl*no-header]
-.          SHIM
-.       \}
-.       el .vpt
-.       if \\n[tbl*interrupted] .tbl*print-header
-.       rr tbl*interrupted
-.    \}
-.    el .DO_FOOTER
-.    pdfmarkrestart
-.END
-\#
-\# PROCESS FOOTER
-\# --------------
-\# *Arguments:
-\#   <none>
-\# *Function:
-\#   Prints footer (page number, or 3-part footer).
-\#   Resets CAPS and UNDERLINE if they were on.
-\#
-.MAC DO_FOOTER END
-.\" Part of workaround for refer spitting out a blank page if the
-.\" last reference falls on the bottom line.
-.    if \\n[num*refs] \{\
-.       if \\n[ref*num]=\\n[num*refs] \{\
-.          rr num*refs
-.          nr ref*last 1
-.       \}
-.    \}
-.    PRINT_FOOTER
-.    if !\\n[ref*last] \{\
-.       ie \\n[defer]>0 \{\
-\c
-'       bp
-.       \}
-.       el 'bp
-.    \}
-.    if !'\\n[.ev]'0' .ev
-.    rr ref*last
-.    po \" Ensure reset to last value
-.END
-\#
-.MAC PRINT_FOOTER END
-.   br
-.\" Have to change position of FN_OVERFLOW_TRAP or it screws up the
-.\" placement of page numbers (or footers).  It's reset to its original
-.\" position at the end of the macro.
-.    if r #SAVED_FOOTER_POS .ch FOOTER \\n[#SAVED_FOOTER_POS]u
-.    rr #SAVED_FOOTER_POS
-.    ie (\\n[#FOOTER_MARGIN]+\\n[.v]>\\n[#B_MARGIN]) .nr #SKIP_FOOTER 1
-.    el \{\
-.       ev FOOTER
-.       vpt 0
-.       ie n \
-.          sp |\\n[#PAGE_LENGTH]u-\\n[#FOOTER_MARGIN]u
-.       el \
-.          sp |\\n[#PAGE_LENGTH]u-\\n[#FOOTER_MARGIN]u-\\n[#FOOTER_ADJ]u
-.       mk y
-.    \}
-.    UNDERLINE OFF
-.    po \\n[#DOC_L_MARGIN]u
-.    ll \\n[#DOC_L_LENGTH]u
-.    ta \\n[.l]u
-.    if \\n[#PRINT_STYLE]=1 .TYPEWRITER
-.    if \\n[#PRINT_STYLE]=2 \{\
-.       fam  \\*[$HDRFTR_FAM]
-.       ft      R
-.       ps \\n[#DOC_PT_SIZE]u\\*[$HDRFTR_SIZE_CHANGE]
-.    \}
-.    nr #HDRFTR_PT_SIZE \\n[#PT_SIZE]
-.    if \\n[#CAPS_ON] \{\
-.       nr #CAPS_WAS_ON 1
-.       CAPS OFF
-.    \}
-.    ie \\n[#FOOTERS_ON] \{\
-.       if !\\n[#SKIP_FOOTER]=1 .PRINT_HDRFTR
-.    \}
-.    el \{\
-.       if \\n[#PAGINATE] \{\
-.          if \\n[#PAGE_NUM_V_POS]=2 \
-.             if !\\n[#SKIP_FOOTER]=1 .PRINT_PAGE_NUMBER
-.       \}
-.    \}
-.    rr #SKIP_FOOTER
-.    if \\n[#CAPS_WAS_ON] \{\
-.       CAPS
-.       rr #CAPS_WAS_ON
-.    \}
-.    ev
-.    vpt 1
-.END
-\#
-\# ====================================================================
-\#
-\# +++HEADERS AND FOOTERS+++
-\#
-\# HEADERS_AND_FOOTERS
-\# -------------------
-\# *Arguments:
-\#   HEADER_RECTO_QUAD \
-\#   HEADER_RECTO_STRING \
-\#   FOOTER_RECTO_QUAD \
-\#   FOOTER_RECTO_STRING \
-\#   HEADER_VERSO_QUAD \
-\#   HEADER_VERSO_STRING \
-\#   FOOTER_VERSO_QUAD \
-\#   FOOTER_VERSO_STRING
-\#   | <anything>
-\# *Function:
-\#   Allows having both headers and footers.  Sets register
-\#   #HDRFTR_BOTH to 1; collects HEADER/FOOTER_RECTO/VERSO
-\#   information; appends FOOTER_RECTO and FOOTER_VERSO to
-\#   START and turns off pagination; appends to macros
-\#   PRINT_USERDEF_HDRFTR and HEADER the necessary number
-\#   register manipulations and redefinitions of the
-\#   HEADER/FOOTER_RECTO/VERSO strings so that both
-\#   headers and footers get printed, with the appropriate
-\#   strings for each
-\# *Notes:
-\#   Works in conjunction with HDRFTR_RECTO and HDRFTR_VERSO (qqv.),
-\#   ergo all style changes must be done inline in the strings
-\#   passed as arguments.
-\#
-.MAC HEADERS_AND_FOOTERS END
-.    ie \\n[#NUM_ARGS]>1 \{\
-.    nr #HDRFTR_BOTH 1
-.    nr #FOOTERS_ON  1
-.    if !r#HEADER_RULE .nr #HEADER_RULE 1
-.    if !r#FOOTER_RULE .nr #FOOTER_RULE 1
-.    ds $HDR_RECTO_QUAD   \\$1
-.    ds $HDR_RECTO_STRING \\$2
-.    ds $FTR_RECTO_QUAD   \\$3
-.    ds $FTR_RECTO_STRING \\$4
-.    ds $HDR_VERSO_QUAD   \\$5
-.    ds $HDR_VERSO_STRING \\$6
-.    ds $FTR_VERSO_QUAD   \\$7
-.    ds $FTR_VERSO_STRING \\$8
-.am START DONE
-.   if \\\\n[#HDRFTR_BOTH]=1 \{\
-.      FOOTER_RECTO \\*[$FTR_RECTO_QUAD] "\\*[$FTR_RECTO_STRING]"
-.      FOOTER_VERSO \\*[$FTR_VERSO_QUAD] "\\*[$FTR_VERSO_STRING]"
-.      if \\\\n[#HEADER_RULE]=1 .HEADER_RULE
-.      ie \\\\n[#FOOTER_RULE]=1 .FOOTER_RULE
-.      el .FOOTER_RULE OFF
-.      if r #PAGINATE .rr #PAGINATE
-.      if r #PAGE_NUM_V_POS .rr #PAGE_NUM_V_POS
-.   \}
-.DONE
-.am PRINT_USERDEF_HDRFTR DONE
-.   if \\\\n[#HDRFTR_BOTH]=1 \{\
-.      if \\n[#FOOTERS_ON]=1 \{\
-.         if !\\\\n[#COLLATE]=1 \{\
-.            HEADER_RECTO \\*[$HDR_RECTO_QUAD] "\\*[$HDR_RECTO_STRING]"
-.            HEADER_VERSO \\*[$HDR_VERSO_QUAD] "\\*[$HDR_VERSO_STRING]"
-.            rr #FOOTERS_ON
-.            nr #HEADERS_ON 1
-.            ie \\\\n[#HEADER_RULE]=1 .HEADER_RULE
-.            el .HEADER_RULE OFF
-.         \}
-.      \}
-.      if \\n[#HEADERS_ON]=1 \{\
-.         FOOTER_RECTO \\*[$FTR_RECTO_QUAD] "\\*[$FTR_RECTO_STRING]"
-.         FOOTER_VERSO \\*[$FTR_VERSO_QUAD] "\\*[$FTR_VERSO_STRING]"
-.      \}
-.   \}
-.DONE
-.am HEADER DONE
-.   if \\\\n[#HDRFTR_BOTH]=1 \{\
-.      if r #START_FOR_FOOTERS .rr #START_FOR_FOOTERS
-.      rr #HEADERS_ON
-.      nr #FOOTERS_ON 1
-.      FOOTER_RECTO \\*[$FTR_RECTO_QUAD] "\\*[$FTR_RECTO_STRING]"
-.      FOOTER_VERSO \\*[$FTR_VERSO_QUAD] "\\*[$FTR_VERSO_STRING]"
-.      ie \\\\n[#FOOTER_RULE]=1 .FOOTER_RULE
-.      el .FOOTER_RULE OFF
-.   \}
-.DONE
-.    \}
-.    el \{\
-.       rr #HDRFTR_BOTH
-.       rr #USERDEF_HDRFTR
-.       rm $USERDEF_HDRFTR_RECTO
-.       rm $USERDEF_HDRFTR_VERSO
-.       FOOTERS OFF
-.       HEADERS
-.       if \\n[#COLLATE]=1 \{\
-.          nr #HEADER_STATE 1
-.          nr #PAGINATION_STATE 1
-.       \}
-.       PAGINATE
-.       PAGENUM_POS BOTTOM CENTER
-.       nr #HF_OFF 1
-.    \}
-.END
-\#
-\# ====================================================================
-\#
-\# +++HEADS+++
-\#
-.char \[hd-num-spacer]     \0
-.char \[parahead-spacer]   \~\~
-.char \[toc-hd-num-spacer] \h'\w'\[en]'u'
-.ds toc-word-space \ \" ie an unbreakable space
-\#
-\# HEADING
-\# -------
-\# *Arguments:
-\#   <heading level> [PARAHEAD] [NAMED <pdf-id>] <heading text>
-\# *Function:
-\#   Assigns a heading level to the heading text and prints heading
-\#   in the style set up for that level.  If PARAHEAD given, the
-\#   heading is attached to the body of the paragraph.  If NAMED
-\#   given, creates a target for pdf links.  Collects the heading
-\#   for the TOC and sets TOC indenting appropriate for the level.
-\# *Notes:
-\#   If PARAHEAD given, HEADING must come after PP.
-\#
-.MAC HEADING END
-.    if !\B'\\$1' \{\
-.       tm1 "[mom]: The first argument to \\$0 must be a numeric heading level.
-.       ab Aborting '\\n[.F]' at \\$0, line \\n[.c].
-.    \}
-.    if r #QUOTE     .rr #QUOTE
-.    if r #END_QUOTE .rr #END_QUOTE
-.    if r #EPIGRAPH  .rr #EPIGRAPH
-.    vs \\n[#DOC_LEAD]u
-.    if \\$1<\\n[#LEVEL] \
-.       nr #ACTIVE_LEVELS \\n[#LEVEL] \" loop count for resetting numbering registers
-.    nr #LAST_LEVEL \\n[#LEVEL]       \" used during TOC collection, if SPACE_TOC_ITEMS
-.    nr #LEVEL \\$1                   \" reset #LEVEL to arg
-.    shift
-.    nr #ARG_NUM 0 1
-.    while \\n+[#ARG_NUM]<=2 \{\
-.      if '\\$1'NAMED' \{\
-.         ds PDF_NM "\\$1 \\$2
-.         shift 2 \" \\$1 is now heading text
-.      \}
-.      if '\\$1'PARAHEAD' \{\
-.         nr #PARAHEAD 1
-.         shift \" \\$1 is now NAMED, if we have it; otherwise heading text
-.      \}
-.    \}
-.\" Spacing
-.    if \\n[#Q_LEAD_DIFF_CHECK] .sp -1v
-.    ie \\n[#PARAHEAD] 'br
-.    el .br
-.    ie !\\n[#PARAHEAD] \{\
-.       if !\\n[@TOP] \{\
-.          nr #HEAD 1
-.          ie \\n[#HEAD_\\n[#LEVEL]_SPACE_AFTER] .ne \\n[#NUM_ARGS]+2
-.          el .ne \\n[#NUM_ARGS]+1
-.          vpt 0
-.          ie !\\n[#START] \
-.             if !\\n[#SPACE_ADDED] .if !\\n[#LINEBREAK] .sp
-.          el \{\
-.             ie !\\n[#PP] .rr #START
-.             el .sp
-.          \}
-.          if \\n[#EPIGRAPH] \
-.             if \\n[#SINGLE_SPACE] .sp
-.       \}
-.       if \\n[#PP_SPACE] \
-.          if \\n[#QUOTE_4_HD] .sp .5v
-.       if !\\n[#SPACE_ADDED] .SHIM
-.       if \\n[#SPACE_ADDED] .rr #SPACE_ADDED
-.    \}
-.    el \{\
-.       if \\n[#NUM_ARGS]>1 \{\
-.          tm1 "[mom]: Error at line \\n[.c], \\$0.
-.          tm1 "       PARAHEAD may not be given more than 1 line of text.
-.          ab  Aborting '\\n[.F]' at \\$0, line \\n[.c].
-.       \}
-.       vpt 0
-.       if !(\\n[#PRINT_STYLE]=1)&(\\n[#SINGLE_SPACE]=1) .sp -1v
-.       if \\n[#QUOTE_4_HD] \{\
-.          sp -1v
-.          if \\n[#PP_SPACE] \{\
-.             sp .5v
-.             SHIM
-.         \}
-.       \}
-.       if (\\n[#QUOTE_4_HD]=0)&(\\n[#LB_4_HD]=0)&(\\n[#START]=0) \
-.          if !\\n[#LB_4_PARAHEAD] .sp -1v
-.    \}
-.    ev HEADING
-.    evc 0
-.\" Style
-.    if \\n[#PRINT_STYLE]=2 \{\
-.       fam \\*[$HEAD_\\n[#LEVEL]_FAM]
-.       ft  \\*[$HEAD_\\n[#LEVEL]_FT]
-.       ps  \\n[#DOC_PT_SIZE]u+\\*[$HEAD_\\n[#LEVEL]_SIZE]
-.       nf
-.    \}
-.\" Numbering
-.    ds $TOC_HD_NUM_PREV \\*[$TOC_HD_NUM]
-.    rm $TOC_HD_NUM
-.    rm $PDF_HD_NUM
-.    ie \\n[#NUMBER_HEAD_\\n[#LEVEL]] \{\
-.       if \\n[#PREFIX_CH_NUM] .ds $HD_NUM \\n[#CH_NUM].
-.       nr #HEAD_\\n[#LEVEL]_NUM +1       \" incremented manually here; still auto-increments
-.\" Reset numbering registers for headings beneath current level
-.       nr @LEVEL \\n[#LEVEL] 1           \" loop step
-.       nr #LOOP \\n[#ACTIVE_LEVELS]      \" loop count
-.       while \\n+[@LEVEL]<=\\n[#LOOP] \
-.          if \\n[#HEAD_\\n[@LEVEL]_NUM] \
-.             nr #HEAD_\\n[@LEVEL]_NUM 0 1
-.\" Build numbering strings for body and toc
-.       nr @LEVEL 0 1                     \" loop step
-.       nr #LOOP \\n[#LEVEL]              \" loop count
-.       while \\n+[@LEVEL]<=\\n[#LOOP] \
-.          if \\n[#HEAD_\\n[@LEVEL]_NUM] \
-.             as $HD_NUM \\n[#HEAD_\\n[@LEVEL]_NUM].
-.       ie \\n[#TRUNC_TOC_HD_NUM] \
-.          ds $TOC_HD_NUM \\n[#HEAD_\\n[#LEVEL]_NUM].
-.       el .ds $TOC_HD_NUM \\*[$HD_NUM]
-.       if \\n[#LEVEL]=1 \
-.          ds $TOC_HD_NUM_PREV \\*[$TOC_HD_NUM]
-.       if \\n[#TOC_NO_HD_NUM] .rm $TOC_HD_NUM
-.       if !\\n[#HEAD_\\n[#LEVEL]_NUM]] .rm $TOC_HD_NUM
-.       as $HD_NUM \[hd-num-spacer]
-.       ds $PDF_HD_NUM \\*[$TOC_HD_NUM]
-.       if !'\\*[$TOC_HD_NUM]'' .as $TOC_HD_NUM \[toc-hd-num-spacer]
-.       if !'\\*[$PDF_HD_NUM]'' .as $PDF_HD_NUM " "
-.    \}
-.    el .nr @LEVEL \\n[#LEVEL] 1
-.\" TOC collection and formatting
-.    nr #TOC_ENTRY_PN \\n%+\\n[#PAGE_NUM_ADJ]
-.    af #TOC_ENTRY_PN \\g[#PAGENUMBER]
-.    nr #ARG_NUM 0 1
-.    while \\n[#ARG_NUM]<\\n[#NUM_ARGS] \{\
-.       as $TOC_HEAD_\\n[#LEVEL]_ITEM "\\$[\\n+[#ARG_NUM]]
-.       if \\n[#NUM_ARGS]>\\n[#ARG_NUM] \
-.          as $TOC_HEAD_\\n[#LEVEL]_ITEM "\\*[toc-word-space]
-.    \}
-.    PDF_BOOKMARK \
-        \\*[PDF_NM] \\n[#LEVEL]+1 \
-        \\*[$PDF_HD_NUM] \\*[$TOC_HEAD_\\n[#LEVEL]_ITEM]
-.    rm PDF_NM
-.    rm $PDF_HD_NUM
-.    ev TOC_EV
-.    ie \\n[#PRINT_STYLE]=1 \{\
-.       fam \\*[$TYPEWRITER_FAM]
-.       ft  R
-.       ps  \\*[$TYPEWRITER_PS]
-.    \}
-.    el \{\
-.       FAMILY  \\*[$TOC_HEAD_\\n[#LEVEL]_FAM]
-.       FT      \\*[$TOC_HEAD_\\n[#LEVEL]_FT]
-.       ps \\n[#TOC_PS]u\\*[$TOC_HEAD_\\n[#LEVEL]_SIZE]
-.    \}
-.\" Indents for TOC heading levels.
-.\" First, numbered heads.  @LEVEL here is #LEVEL+1
-.    ie \\n[#NUMBER_HEAD_\\n[#LEVEL]] \{\
-.       ie !\\n[#TOC_NO_HD_NUM] \{\
-.          ie \\n[#TRUNC_TOC_HD_NUM] \{\
-.             if !\\n[#TOC_HEAD_\\n[@LEVEL]_INDENT_SET] \{\
-.                ie !\\n[#FROM_STYLE_\\n[@LEVEL]] \{\
-.                   ie !\\n[#NUMBER_HEAD_\\n[@LEVEL]] \
-.                      nr #TOC_HEAD_\\n[@LEVEL]_INDENT \
-\\n[#TOC_HEAD_\\n-[@LEVEL]_INDENT]+\w'\\*[$TOC_HD_NUM]'+1.5m
-.                   el \
-.                      nr #TOC_HEAD_\\n[@LEVEL]_INDENT \
-\\n[#TOC_HEAD_\\n-[@LEVEL]_INDENT]+\w'\\*[$TOC_HD_NUM]'
-.                \}
-.                el \
-.                   nr #TOC_HEAD_\\n[@LEVEL]_INDENT \
-                      \\n[#TOC_HEAD_\\n-[@LEVEL]_INDENT]
-.             \}
-.          \}
-.          el \{\
-.             if !\\n[#TOC_HEAD_\\n[@LEVEL]_INDENT_SET] \{\
-.                ie !\\n[#FROM_STYLE_\\n[@LEVEL]] \{\
-.                   ie \\n[#NUMBER_HEAD_\\n-[@LEVEL]] \{\
-.                      ie !\\n[#NUMBER_HEAD_\\n+[@LEVEL]] \
-.                         nr #TOC_HEAD_\\n[@LEVEL]_INDENT \
-\\n[#TOC_HEAD_\\n-[@LEVEL]_INDENT]+\w'\\*[$TOC_HD_NUM_PREV]'+1.5m
-.                      el \
-.                         nr #TOC_HEAD_\\n[@LEVEL]_INDENT \
-\\n[#TOC_HEAD_\\n-[@LEVEL]_INDENT]+\w'.\[toc-hd-num-spacer]'
-.                   \}
-.                   el \
-.                      nr #TOC_HEAD_\\n[@LEVEL]_INDENT \
-\\n[#TOC_HEAD_\\n-[@LEVEL]_INDENT]+\w'\\n[#TOC_HD_NUM].'
-.                   ie \\n[#LEVEL]=1 \
-.                      nr #TOC_HEAD_\\n+[@LEVEL]_INDENT +\w'\0'
-.                   el \{\
-.                      if !\\n[#NUMBER_HEAD_\\n[@LEVEL]] \{\
-.                         nr @LEVEL \\n+[@LEVEL] 1
-.                         nr #TOC_HEAD_\\n+[@LEVEL]_INDENT +\w'\0'
-.                      \}
-.                   \}
-.                \}
-.                el \
-.                   nr #TOC_HEAD_\\n[@LEVEL]_INDENT \
-\\n[#TOC_HEAD_\\n-[@LEVEL]_INDENT]+\\n[#TOC_HEAD_\\n+[@LEVEL]_INDENT]
-.             \}
-.             if \\n[#LEVEL]=1 \{\
-.                if \\n[#NUMBER_HEAD_\\n[@LEVEL]] \{\
-.                   if \\n[#PREFIX_CH_NUM] \
-.                      nr #TOC_HEAD_\\n[@LEVEL]_INDENT \w'\\*[$TOC_HD_NUM]'
-.                \}
-.             \}
-.          \}
-.       \}
-.       el \{\
-.          ie !\\n[#FROM_STYLE_\\n[@LEVEL]] \{\
-.             if !\\n[#TOC_HEAD_\\n[@LEVEL]_INDENT_SET] \
-.                nr #TOC_HEAD_\\n[@LEVEL]_INDENT \
-                    \\n[#TOC_HEAD_\\n-[@LEVEL]_INDENT]+1.5m
-.          \}
-.          el \{\
-.             if !\\n[#TOC_HEAD_\\n[@LEVEL]_INDENT_SET] \
-.                nr #TOC_HEAD_\\n[@LEVEL]_INDENT \
-\\n[#TOC_HEAD_\\n-[@LEVEL]_INDENT]+\\n[#TOC_HEAD_\\n+[@LEVEL]_INDENT]
-.          \}
-.       \}
-.    \}
-.\" Non-numbered heads
-.    el \{\
-.       nr @LEVEL \\n[#LEVEL] 1
-.       ie \\n[#FROM_STYLE_\\n+[@LEVEL]] \{\    \" increments @LEVEL even if false
-.          if !\\n[#TOC_HEAD_\\n[@LEVEL]_INDENT_SET] \{\
-.             nr #TOC_HEAD_\\n[@LEVEL]_INDENT \
-\\n[#TOC_HEAD_\\n[#LEVEL]_INDENT]+\\n[#TOC_HEAD_\\n[@LEVEL]_INDENT]
-.             if !\\n[#LEVEL]=\\n[#LAST_LEVEL] \{\
-.                if \\n[#NUMBER_HEAD_\\n[@LEVEL]] \
-.                   nr #TOC_HEAD_\\n[#LEVEL]_INDENT \
-\\n[#TOC_HEAD_\\n[@LEVEL]_INDENT]+\w'\\*[$TOC_HD_NUM_PREV]'
-.             \}
-.          \}
-.       \}
-.       el \{\
-.          nr #TOC_HEAD_\\n[@LEVEL]_INDENT \
-              \\n[#TOC_HEAD_\\n-[@LEVEL]_INDENT]+1.5m
-.          if \\n[#LEVEL]=1 \{\
-.             if !\\n[#FROM_STYLE_1] \
-.                nr #TOC_HEAD_1_INDENT 0
-.          \}
-.       \}
-.    \}
-.    nr #TOC_HEAD_\\n[@LEVEL]_INDENT_SET 1
-.    HD_TO_TOC
-.    rm $TOC_HEAD_\\n[#LEVEL]_ITEM
-.\" Print heading
-.    if !\\n[#PARAHEAD] .\\*[$HEAD_\\n[#LEVEL]_QUAD]
-.    if \\n[#CAPS_ON] \{\
-.       CAPS OFF
-.       nr #CAPS_RESTORE 1
-.    \}
-.    if \\n[#HEAD_\\n[#LEVEL]_CAPS] \{\
-.       CAPS 
-.       nr #CAPS_OFF 1
-.    \}
-.    if !'\\*[$HEAD_\\n[#LEVEL]_COLOR]'' \
-.       COLOR \\*[$HEAD_\\n[#LEVEL]_COLOR]
-.    nop \X'ps: exec decornone'\c
-.    nr #ARG_NUM 0 1
-.    while \\n+[#ARG_NUM]<=\\n[#NUM_ARGS] \{\
-.       if \\n[#PARAHEAD] \
-.          nr #PP_TEXT_OFFSET \
-              \w'\\*[$HD_NUM]\\$[\\n[#ARG_NUM]]'+\w'\[parahead-spacer]'
-.       if (\\n[#HEAD_\\n[#LEVEL]_UNDERSCORE]=0)&(\\n[#HEAD_\\n[#LEVEL]_UNDERSCORE2]=0) \{\
-.          ie \\n[#HD_NUM_INDENT] \{\
-.             if !'\\*[$HEAD_\\n[#LEVEL]_QUAD]'CENTER' \
-.                ti \\n[#HD_NUM_INDENT]u 
-.             PRINT \
-"\v'-\\*[$HEAD_\\n[#LEVEL]_BASELINE_ADJ]'\\$[\\n[#ARG_NUM]]
-.             br
-.          \}
-.          el \{\
-.             ie !\\n[#PARAHEAD] \{\
-.                PRINT \
-"\v'-\\*[$HEAD_\\n[#LEVEL]_BASELINE_ADJ]'\\*[$HD_NUM]\\$[\\n[#ARG_NUM]]
-.                br
-.             \}
-.             el \{\
-.                if (\\n[#PP]>0):(\\n[#INDENT_FIRST_PARAS]) \{\
-.                   if !\\n[#LB_4_PARAHEAD] \{\
-.                      if !\\n[#START] \{\
-.                         if \\n[#PP_ACTIVE] \{\
-.                            ie \\n[#PP]=1 .br
-.                            el \{\
-.                               nr #PP_TEXT_OFFSET +\\n[#PP_INDENT]
-.                               ti \\n[#PP_INDENT]u
-.                            \}
-.                         \}
-.                      \}
-.                   \}
-.                \}
-.                ie \\n[#PRINT_STYLE]=1 \
-.                   PRINT "\\*[UL]\\*[$HD_NUM]\\$[\\n[#ARG_NUM]]\\*[ULX]
-.                el .PRINT "\\*[$HD_NUM]\\$[\\n[#ARG_NUM]]
-.                rr #LB_4_PARAHEAD
-.                sp -1v
-.             \}
-.          \}
-.       \}
-.       if \\n[#HEAD_\\n[#LEVEL]_UNDERSCORE] \{\
-.          nr #SAVED_UL_WEIGHT \\n[#UNDERSCORE_WEIGHT]
-.          UNDERSCORE_WEIGHT \\*[$HEAD_\\n[#LEVEL]_UL_WEIGHT]
-.          ie \\n[#HD_NUM_INDENT] \{\
-.             if !'\\*[$HEAD_\\n[#LEVEL]_QUAD]'CENTER' \
-.                ti \\n[#HD_NUM_INDENT]u 
-.             UNDERSCORE \\*[$HEAD_\\n[#LEVEL]_UL_GAP] \
-                "\v'-\\*[$HEAD_\\n[#LEVEL]_BASELINE_ADJ]'\\$[\\n[#ARG_NUM]]
-.             br
-.          \}
-.          el \{\
-.             ie !\\n[#PARAHEAD] \{\
-.                UNDERSCORE \\*[$HEAD_\\n[#LEVEL]_UL_GAP] \
-"\v'-\\*[$HEAD_\\n[#LEVEL]_BASELINE_ADJ]'\\*[$HD_NUM]\\$[\\n[#ARG_NUM]]
-.                br
-.             \}
-.             el \{\
-.                if (\\n[#PP]>0):(\\n[#INDENT_FIRST_PARAS]) \{\
-.                   if !\\n[#LB_4_HD] \{\
-.                      if !\\n[#START] \{\
-.                         if \\n[#PP_ACTIVE] \{\
-.                   nr #PP_TEXT_OFFSET +\\n[#PP_INDENT]
-.                   if (\\n[#PRINT_STYLE]=1)&(\\n[#SINGLE_SPACE]=1) .sp -1v
-.                   ti \\n[#PP_INDENT]u
-.                         \}
-.                      \}
-.                   \}
-.                \}
-.                UNDERSCORE \\*[$HEAD_\\n[#LEVEL]_UL_GAP] \
-                   "\\*[$HD_NUM]\\$[\\n[#ARG_NUM]]
-.                sp -1v
-.             \}
-.          \}
-.          nr #UNDERSCORE_WEIGHT \\n[#SAVED_UL_WEIGHT]
-.       \}
-.       if \\n[#HEAD_\\n[#LEVEL]_UNDERSCORE2] \{\
-.          nr #SAVED_UL2_WEIGHT \\n[#UNDERSCORE_WEIGHT]
-.          UNDERSCORE_WEIGHT \\*[$HEAD_\\n[#LEVEL]_UL2_WEIGHT]
-.          ie \\n[#HD_NUM_INDENT] \{\
-.             if !'\\*[$HEAD_\\n[#LEVEL]_QUAD]'CENTER' \
-.                ti \\n[#HD_NUM_INDENT]u 
-.             UNDERSCORE2 \\*[$HEAD_\\n[#LEVEL]_UL2_GAP_1] \
-                \\*[$HEAD_\\n[#LEVEL]_UL2_GAP_2] \
-                "\v'-\\*[$HEAD_\\n[#LEVEL]_BASELINE_ADJ]'\\$[\\n[#ARG_NUM]]
-.             br
-.          \}
-.          el \{\
-.             ie !\\n[#PARAHEAD] \{\
-.                UNDERSCORE2 \\*[$HEAD_\\n[#LEVEL]_UL2_GAP_1] \
-                   \\*[$HEAD_\\n[#LEVEL]_UL2_GAP_2] \
-"\v'-\\*[$HEAD_\\n[#LEVEL]_BASELINE_ADJ]'\\*[$HD_NUM]\\$[\\n[#ARG_NUM]]
-.                br
-.             \}
-.             el \{\
-.                if (\\n[#PP]>0):(\\n[#INDENT_FIRST_PARAS]) \{\
-.                   if !\\n[#LB_4_HD] \{\
-.                      if !\\n[#START] \{\
-.                         if \\n[#PP_ACTIVE] \{\
-.                            nr #PP_TEXT_OFFSET +\\n[#PP_INDENT]
-.                            if (\\n[#PRINT_STYLE]=1)&(\\n[#SINGLE_SPACE]=1) \
-.                               sp -1v
-.                            ti \\n[#PP_INDENT]u
-.                         \}
-.                      \}
-.                   \}
-.                \}
-.                UNDERSCORE2 \\*[$HEAD_\\n[#LEVEL]_UL2_GAP_1] \
-\\*[$HEAD_\\n[#LEVEL]_UL2_GAP_2] "\\*[$HD_NUM]\\$[\\n[#ARG_NUM]]
-.                sp -1v
-.             \}
-.          \}
-.          nr #UNDERSCORE_WEIGHT \\n[#SAVED_UL2_WEIGHT]
-.       \}
-.       if !\\n[#HD_NUM_INDENT] .nr #HD_NUM_INDENT \w'\\*[$HD_NUM]'
-.    \}
-.    if !\\n[#PARAHEAD] \{\
-.       if \\n[#HEAD_\\n[#LEVEL]_SPACE_AFTER] .sp
-.    \}
-.    if \\n[#CAPS_OFF] \{\
-.       CAPS OFF
-.       rr #CAPS_OFF
-.    \}
-.    if \\n[#CAPS_RESTORE] \{\
-.       CAPS
-.       rr #CAPS_RESTORE
-.    \}
-.    ev
-.    rm $HD_NUM
-.    rr #HD_NUM_INDENT
-.    if \\n[#PARAHEAD]   .ti \\n[#PP_TEXT_OFFSET]u
-.    if !\\n[#PARAHEAD]  .nr #PP 0
-.    rr #PARAHEAD
-.    if \\n[#LB_4_HD]    .rr #LB_4_HD
-.    if \\n[#QUOTE_4_HD] .rr #QUOTE_4_HD
-.    if \\n[@TOP] \{\
-.       ch RR_@TOP
-.       rr @TOP
-.       rs
-.       nop \&
-.       sp -1
-.    \}
-.    vpt
-.END
-\#
-\# HEADING_STYLE
-\# -------------
-\# *Arguments:
-\#   <level>
-\#   FAMILY <family>
-\#   FONT   <font>
-\#   SIZE   <+|-n>
-\#   COLOR  <color>
-\#   CAPS | NO_CAPS
-\#---when called as HEADING_STYLE, these are also available---
-\#   QUAD   <direction>
-\#   NUMBER | NO_NUMBER
-\#   SPACE_AFTER | NO_SPACE_AFTER
-\#   UNDERSCORE <weight> <gap> | UNDERSCORE2 <weight> <gap1> <gap2> 
-\#   NO_UNDERSCORE | NO_UNDERSCORE2
-\#   BASELINE_ADJUST
-\#---when called as TOC_ENTRY_STYLE this is also available---
-\#   INDENT
-\# *Function:
-\#   Sets up complete style parameters for HEADING <level>.  If
-\#   invoked as TOC_ENTRY_STYLE, sets up parameters for the
-\#   corresponding TOC entry at <level>.
-\# *Notes:
-\#   Arguments may be given in any order.  Any not given retain
-\#   their current values.  Defaults for an initial 9 levels of
-\#   heading are set up in PRINTSTYLE.
-\#
-\#   NUMBER indicates that hierarchic numbering of <level> should be
-\#   prepended to heading text.  If invoked as TOC_ENTRY_STYLE,
-\#   prepend numbering to TOC entries at <level> (only works if
-\#   NUMBER is given to the corresponding HEADING <level>).
-\#
-\#   INDENT refers to the indent for <level> in the TOC.  It is
-\#   measured from the left offset of the entry level above it
-\#   (including numbering, if present).  TOC entry levels beneath
-\#   <level> will have their indents adjusted accordingly.
-\#
-.MAC HEADING_STYLE END
-.    if !\B'\\$1' \{\
-.       tm1 "[mom]: The first argument to \\$0 must be a numeric heading level.
-.       ab Aborting '\\n[.F]' at \\$0, line \\n[.c].
-.    \}
-.    nr #LEVEL \\$1
-.    if \\n[#FROM_OLDSTYLE] .nr #LEVEL_\\n[#LEVEL]_SET 1
-.    shift
-.\" Prepend TOC_ to style strings if called as TOC_ENTRY_STYLE
-.    if '\\$0'TOC_ENTRY_STYLE' .ds $TOC TOC_
-.    nr #ARG_NUM 0 1
-.    nr #ATTRIB \\n[#NUM_ARGS]
-.    while \\n+[#ARG_NUM]<=\\n[#ATTRIB] \{\
-.       if '\\$1'UNDERSCORE' \{\
-.          nr #HEAD_\\n[#LEVEL]_UNDERSCORE 1
-.          shift
-.          if '\\$1'' \{\
-.             tm1 "[mom]: The UNDERSCORE argument to \\$0 requires a rule weight.
-.             ab Aborting '\\n[.F]' at \\$0, line \\n[.c].
-.          \}
-.          ds $HEAD_\\n[#LEVEL]_UL_WEIGHT \\$1
-.          shift
-.          if '\\$1'' \{\
-.             tm1 "[mom]: The UNDERSCORE argument to \\$0 requires a rule gap.
-.             ab Aborting '\\n[.F]' at \\$0, line \\n[.c].
-.          \}
-.          ds $HEAD_\\n[#LEVEL]_UL_GAP    \\$1
-.          shift
-.       \}
-.       if '\\$1'NO_UNDERSCORE' \{\
-.          rr #HEAD_\\n[#LEVEL]_UNDERSCORE
-.          shift
-.       \}
-.       if '\\$1'UNDERSCORE2' \{\
-.          nr #HEAD_\\n[#LEVEL]_UNDERSCORE2 1
-.          shift
-.          if '\\$1'' \{\
-.             tm1 "[mom]: The UNDERSCORE2 argument to \\$0 requires a rule weight.
-.             ab Aborting '\\n[.F]' at \\$0, line \\n[.c].
-.          \}
-.          ds $HEAD_\\n[#LEVEL]_UL2_WEIGHT \\$1
-.          shift
-.          if '\\$1'' \{\
-.             tm1 "[mom]: The UNDERSCORE2 argument to \\$0 requires a rule gap.
-.             ab Aborting '\\n[.F]' at \\$0, line \\n[.c].
-.          \}
-.          ds $HEAD_\\n[#LEVEL]_UL2_GAP_1  \\$1
-.          shift
-.          if '\\$1'' \{\
-.             tm1 "[mom]: The UNDERSCORE2 argument to \\$0 requires an inter-rule gap.
-.             ab Aborting '\\n[.F]' at \\$0, line \\n[.c].
-.          \}
-.          ds $HEAD_\\n[#LEVEL]_UL2_GAP_2  \\$1
-.          shift
-.       \}
-.       if '\\$1'NO_UNDERSCORE2' \{\
-.          rr #HEAD_\\n[#LEVEL]_UNDERSCORE2
-.       \}
-.       if '\\$1'SPACE_AFTER' \{\
-.          nr #HEAD_\\n[#LEVEL]_SPACE_AFTER 1
-.          shift
-.       \}
-.       if '\\$1'NO_SPACE_AFTER' \{\
-.          rr #HEAD_\\n[#LEVEL]_SPACE_AFTER
-.          shift
-.       \}
-.       if '\\$1'FAMILY' \{\
-.          shift
-.          ds $\\*[$TOC]HEAD_\\n[#LEVEL]_FAM  \\$1
-.          shift
-.       \}
-.       if '\\$1'FONT' \{\
-.          shift
-.          ds $\\*[$TOC]HEAD_\\n[#LEVEL]_FT   \\$1
-.          shift
-.       \}
-.       if '\\$1'SIZE' \{\
-.          shift
-.          ds $\\*[$TOC]HEAD_\\n[#LEVEL]_SIZE \\$1
-.          shift
-.       \}
-.       if '\\$1'QUAD' \{\
-.          shift
-.          if '\\$1'L'      .ds $HEAD_\\n[#LEVEL]_QUAD LEFT
-.          if '\\$1'LEFT'   .ds $HEAD_\\n[#LEVEL]_QUAD LEFT
-.          if '\\$1'C'      .ds $HEAD_\\n[#LEVEL]_QUAD CENTER
-.          if '\\$1'CENTRE' .ds $HEAD_\\n[#LEVEL]_QUAD CENTER
-.          if '\\$1'CENTER' .ds $HEAD_\\n[#LEVEL]_QUAD CENTER
-.          if '\\$1'R'      .ds $HEAD_\\n[#LEVEL]_QUAD RIGHT
-.          if '\\$1'RIGHT'  .ds $HEAD_\\n[#LEVEL]_QUAD RIGHT
-.          shift
-.       \}
-.       if '\\$1'COLOR' \{\
-.          shift
-.          ds $\\*[$TOC]HEAD_\\n[#LEVEL]_COLOR \\$1
-.          shift
-.       \}
-.       if '\\$1'BASELINE_ADJUST' \{\
-.          shift
-.          ds $HEAD_\\n[#LEVEL]_BASELINE_ADJ \\$1
-.          shift
-.       \}
-.       if '\\$1'CAPS' \{\
-.          nr #\\*[$TOC]HEAD_\\n[#LEVEL]_CAPS 1
-.          shift
-.       \}
-.       if '\\$1'NO_CAPS' \{\
-.          rr #HEAD_\\n[#LEVEL]_CAPS
-.          shift
-.       \}
-.       if '\\$1'NUMBER' \{\
-.          nr #NUMBER_HEAD_\\n[#LEVEL] 1
-.          nr #HEAD_\\n[#LEVEL]_NUM 0 1
-.          shift
-.       \}
-.       if '\\$1'NO_NUMBER' \{\
-.          rr #NUMBER_HEAD_\\n[#LEVEL]
-.          shift
-.       \}
-.       if '\\$1'INDENT' \{\
-.          shift
-.          nr #TOC_HEAD_\\n[#LEVEL]_INDENT \\$1
-.          nr #FROM_STYLE_\\n[#LEVEL] 1
-.          shift
-.       \}
-.    \}
-.    rr #LEVEL
-.    if d$TOC .rm $TOC
-.END
-\#
-.ALIAS TOC_ENTRY_STYLE HEADING_STYLE
-\#
-\# OLDSTYLE HEADINGS
-\# -----------------
-\# *Arguments:
-\#   None.
-\# *Function:
-\#   Called from HEAD, SUBHEAD, and SUBSUBHEAD, sets style
-\#   parameters for HEADINGs 1-3 to former mom defaults for those macros.
-\#   Any styles already assigned to those levels are retained.
-\#
-\#   Called by user with no argument, allows use of old style HEAD,
-\#   SUBHEAD, and SUBSUBHEAD without generating the deprecated msg.
-\# *Notes:
-\#   For backward compatibility, and to ease the transition to
-\#   the HEADING scheme for heads.
-\#
-\#   Paraheads must be set with .HEADING <level> PARAHEAD; attempts
-\#   to call PARAHEAD abort with an instructive message.
-\#
-.MAC OLDSTYLE_HEADINGS END
-.    if '\\$1'' .nr #SKIP_MSG 1
-.    nr #FROM_OLDSTYLE 1 \" Used in HEADING
-.    if \\n[#PRINT_STYLE]=1 \{\
-.       if !\\n[#LEVEL_1_SET] \{\
-.          HEADING_STYLE 1 \
-             FONT R \
-             SIZE +0 \
-             QUAD C \
-             CAPS \
-             UNDERSCORE .5 2p \
-             BASELINE_ADJUST 0 \
-             SPACE_AFTER
-.            nr #OLDSTYLE_HD 1
-.            return
-.       \}
-.       if !\\n[#LEVEL_2_SET] \{\
-.          HEADING_STYLE 2 \
-             FONT R \
-             SIZE +0 \
-             UNDERSCORE .5 2p \
-             BASELINE_ADJUST \\n[.v]/8
-.            nr #OLDSTYLE_SH 1
-.            return
-.       \}
-.       if !\\n[#LEVEL_3_SET] \{\
-.          HEADING_STYLE 3 \
-             FONT R \
-             SIZE +0 \
-             BASELINE_ADJUST \\n[.v]/8
-.            nr #OLDSTYLE_SSH 1
-.            return
-.       \}
-.    \}
-.    if \\n[#PRINT_STYLE]=2 \{\
-.       if !\\n[#LEVEL_1_SET] \{\
-.          HEADING_STYLE 1 \
-             FAMILY \E*[$DOC_FAM] \
-             FONT B \
-             SIZE +1 \
-             QUAD C \
-             CAPS \
-             UNDERSCORE .5 2p \
-             BASELINE_ADJUST 0 \
-             SPACE_AFTER
-.            nr #OLDSTYLE_HD 1
-.            return
-.       \}
-.       if !\\n[#LEVEL_2_SET] \{\
-.          HEADING_STYLE 2 \
-             FAMILY \E*[$DOC_FAM] \
-             FONT B \
-             SIZE +.5 \
-             BASELINE_ADJUST \\n[.v]/8
-.            nr #OLDSTYLE_SH 1
-.            return
-.       \}
-.       if !\\n[#LEVEL_3_SET] \{\
-.          HEADING_STYLE 3 \
-             FAMILY \E*[$DOC_FAM] \
-             FONT I \
-             SIZE +.5 \
-             BASELINE_ADJUST \\n[.v]/8
-.            nr #OLDSTYLE_SSH 1
-.            return
-.       \}
-.    \}
-.    rr #FROM_OLDSTYLE
-.END
-\#
-\# "Deprecated" message
-\#
-.MAC DEPRECATED END
-.    if !\\n[#SKIP_MSG] \{\
-.       tm1 "[mom]: Macro '\\$1' at line \\n[.c] is deprecated.
-.       tm1 "       Invoking HEADING \\$2 instead and assigning style defaults
-.       tm1 "          from former \\$1 as described in the documentation.
-.       tm1 "       If another style is desired, use HEADING_STYLE \\$2 to
-.       tm1 "          create it (see docs).
-.       tm1 "       Further warnings will not be emitted for \\$1.
-.       tm1 "       To avoid this message when using the deprecated HEAD,
-.       tm1 "          SUBHEAD, and SUBSUBHEAD macros, add '.OLDSTYLE_HEADINGS'
-.       tm1 "          after PRINTSTYLE before START.
-.       rm $MACRO
-.    \}
-.END
-\#
-\# Wrappers around old-style headings.
-\#
-.MAC HEAD END
-.    if !\\n[#OLDSTYLE_HD] \{\
-.       DEPRECATED HEAD 1
-.       OLDSTYLE_HEADINGS HEAD
-.    \}
-.    HEADING 1 \\$@
-.END
-\#
-.MAC SUBHEAD END
-.    if !\\n[#OLDSTYLE_SH] \{\
-.       DEPRECATED SUBHEAD 2
-.       OLDSTYLE_HEADINGS SUBHEAD
-.    \}
-.     HEADING 2 \\$@
-.END
-\#
-.MAC SUBSUBHEAD END
-.    if !\\n[#OLDSTYLE_SSH] \{\
-.       DEPRECATED SUBSUBHEAD 3
-.       OLDSTYLE_HEADINGS SUBSUBHEAD
-.    \}
-.    HEADING 3 \\$@
-.END
-\#
-.MAC PARAHEAD END
-.    tm1 "[mom]: \\$0 is no longer a valid macro.
-.    tm1 "       Use 'HEADING <level> PARAHEAD <text>' instead.
-.    tm1 "       You will probably want to invoke HEADING_STYLE to set
-.    tm1 "       the type parameters for the parahead.  See docs.
-.    ab Aborting '\\n[.F]' at \\$0, line \\n[.c].
-.END
-\#
-\# Wrapper macro for oldstyle NUMBER_HEADS, NUMBER_SUBHEADS...
-\#
-.MAC HEADING_NUMBERS END
-.    if '\\$0'NUMBER_PARAHEADS' \{\
-.       tm1 "[mom]: \\$0 is no longer a valid macro.
-.       tm1 "       Use 'HEADING_STYLE <level> NUMBER' instead.  See docs.
-.       ab Aborting '\\n[.F]' at \\$0, line \\n[.c].
-.       return
-.    \}
-.    if '\\$0'NUMBER_HEADS'       .nr level 1
-.    if '\\$0'NUMBER_SUBHEADS'    .nr level 2
-.    if '\\$0'NUMBER_SUBSUBHEADS' .nr level 3
-.    ds mom "[mom]:\"
-.    ie '\\$1'' .ds $PARAM NUMBER
-.    el \{\
-.       ds $PARAM NO_NUMBER
-.       ds $SWITCH " \\$1
-.    \}
-.    HEADING_STYLE \\n[level] \\*[$PARAM]
-.    if (\\n[#OLDSTYLE_HD]=1):(\\n[#OLDSTYLE_SH]=1):(\\n[#OLDSTYLE_SSH]=1) \{\
-.       tm1 "\\*[mom] OLDSTYLE_HEADINGS detected.
-.       ds mom "      \"
-.    \}
-.    tm1 "\\*[mom] Setting HEADING_STYLE \\n[level] to '\\*[$PARAM]' at '\\$0\\*[$SWITCH]', line \\n[.c].
-.    rm $PARAM
-.    rm $SWITCH
-.END
-\#
-.ALIAS NUMBER_HEADS       HEADING_NUMBERS
-.ALIAS NUMBER_SUBHEADS    HEADING_NUMBERS
-.ALIAS NUMBER_SUBSUBHEADS HEADING_NUMBERS
-.ALIAS NUMBER_PARAHEADS   HEADING_NUMBERS
-\#
-\# PREFIX CHAPTER NUMBERS TO HEADINGS/TOC ENTRIES
-\# ----------------------------------------------------------------
-\# *Arguments:
-\#   <none> | <chapter number> | <anything>
-\# *Function:
-\#   Toggles register #PREFIX_CH_NUM. Sets register #CH_NUM from
-\#   string $CHAPTER if $CHAPTER is a digit; if <chapter number> arg
-\#   given, sets #CH_NUM to arg.
-\# *Notes:
-\#   Default is OFF.
-\#
-.MAC PREFIX_CHAPTER_NUMBER END
-.    ie '\\$1'' \{\
-.       ie r#CH_NUM \{\
-.          nr #PREFIX_CH_NUM 1
-.          if \\n[#CHAPTER_CALLED] \{\
-.             ie \B'\\*[$CHAPTER]' .nr #CH_NUM \\*[$CHAPTER]
-.             el .PREFIX_CH_NUM_WARNING
-.             rr #CHAPTER_CALLED
-.          \}
-.       \}
-.       el \{\
-.          ie \B'\\*[$CHAPTER]' \{\
-.             nr #PREFIX_CH_NUM 1
-.             nr #CH_NUM \\*[$CHAPTER]
-.          \}
-.          el .PREFIX_CH_NUM_WARNING
-.       \}
-.    \}
-.    el \{\
-.       ie \B'\\$1' \{\
-.          nr #CH_NUM \\$1
-.          nr #PREFIX_CH_NUM 1
-.       \}
-.       el .rr #PREFIX_CH_NUM
-.    \}
-.END
-\#
-.MAC PREFIX_CH_NUM_WARNING END
-.    tm1 "[mom]: PREFIX_CHAPTER_NUMBER cannot determine a chapter number.
-.    tm1 "       Enter the current chapter number as a digit after
-.    tm1 "       PREFIX_CHAPTER_NUMBER.
-.    ab Aborting '\\n[.F]', line \\n[.c].
-.END
-\#
-\# ====================================================================
-\#
-\# +++LINE BREAKS+++
-\#
-\# LINEBREAK CHARACTER
-\# -------------------
-\# *Arguments:
-\#   [character] [iterations] [vertical adjustment]
-\# *Function:
-\#   Allows user to specify a line break character and the number
-\#   of times to repeat it horiontally.
-\# *Notes:
-\#   Without an argument, LINEBREAK_CHAR will deposit a blank line.
-\#
-\#   Vertical adjustment requires a unit of measure (most likely
-\#   "p"), and has to be preceded by +|-
-\#
-.MAC LINEBREAK_CHAR END
-.    nr #REPEAT 1
-.    ds $LINEBREAK_CHAR \\$1
-.    if !'\\$2'' .nr #LB_CHAR_ITERATIONS \\$2
-.    if !'\\$3'' .ds $LINEBREAK_CHAR_V_ADJ \\$3
-.    if '\\*[$LINEBREAK_CHAR_V_ADJ]'' .ds $LINEBREAK_CHAR_V_ADJ +0
-.    if \\n[#LB_CHAR_ITERATIONS] \{\
-.       while (\\n[#LB_CHAR_ITERATIONS]>\\n[#REPEAT]) \{\
-.          as $LINEBREAK_CHAR "\\ \\$1
-.          nr #REPEAT \\n[#REPEAT]+1
-.       \}
-.    \}
-.    rr #REPEAT
-.    rr #LB_CHAR_ITERATIONS
-.END
-\#
-\# LINE BREAK
-\# ----------
-\# *Arguments:
-\#   <none>
-\# *Function:
-\#   Deposits line break character.
-\# *Notes:
-\#   If $LINEBREAK_CHAR is blank, simply advances 2 line spaces.
-\#
-.MAC LINEBREAK END
-.    if r #Q_AT_TOP .rr #Q_AT_TOP
-.    ie  '\\*[$LINEBREAK_CHAR]'' .sp 2
-.    el \{\
-.       ie \\n[#END_QUOTE] .
-.       el .sp
-.       ev LINEBREAK
-.       evc 0
-.       CENTER
-.       PRINT \
-\m[\\*[$LINEBREAK_COLOR]]\v'\\*[$LINEBREAK_CHAR_V_ADJ]'\
-\\*[$LINEBREAK_CHAR]\m[]
-.       sp
-.       ev
-.       QUAD \\*[$DOC_QUAD]
-.    \}
-.    nr #LINEBREAK 1
-.    if r #QUOTE .rr #QUOTE
-.    if r #END_QUOTE .rr #END_QUOTE
-.    nr #PP 0
-.    nr #LB_4_HD       1
-.    nr #LB_4_PARAHEAD 1
-.END
-\#
-\# ====================================================================
-\#
-\# +++PARAGRAPHS+++
-\#
-\# PARAGRAPH FONT
-\# --------------
-\# *Argument:
-\#   <font of running text>
-\# *Function:
-\#   Creates or modifies string $PP_FT.
-\# *Notes:
-\#   Affects all paragraphs.
-\#
-.MAC PP_FONT END
-.    if \\n[#PRINT_STYLE]=1 \{\
-.       ie \\n[#ITALIC_MEANS_ITALIC] .nop
-.       el .return
-.    \}
-.    if \\n[#COLLATE]=1 \
-.       if !'\\*[$SAVED_PP_FT]'' .rm $SAVED_PP_FT
-.    ds $PP_FT \\$1
-.    FT \\*[$PP_FT]
-.END
-\#
-\# PARAGRAPH INDENT
-\# ----------------
-\# *Argument:
-\#   <amount to indent paragraphs in running text (ipPcm)>
-\# *Function:
-\#   Allows user to change the default para indent.  The change will
-\#   affect the indent of QUOTEs and BLOCKQUOTEs as well.
-\# *Notes:
-\#   Default for printstyle TYPEWRITE is 1/2-inch.  Default for
-\#   printstyle TYPESET is 2 ems.  The defaults are set in
-\#   PRINTSTYLE, not DEFAULTS.
-\#
-.MAC PARA_INDENT END
-.    ie \B'\\$1' \{\
-.       nr #PP_INDENT (\\$1)
-.       nr #SAVED_PP_INDENT \\n[#PP_INDENT]
-.    \}
-.    el \{\
-.       ie '\\$1'' \{\
-.          nr #PP_INDENT \\n[#SAVED_PP_INDENT]
-.          rr #SAVED_PP_INDENT
-.       \}
-.       el \{\
-.          nr #SAVED_PP_INDENT \\n[#PP_INDENT]
-.          rr #PP_INDENT
-.       \}
-.    \}
-.END
-\#
-\# INDENT FIRST PARAGRAPHS
-\# -----------------------
-\# *Arguments:
-\#   <none> | <anything>
-\# *Function:
-\#   By default, the first para of a document, as well as the first
-\#   paras of blockquotes and block-style epigraphs are not indented.
-\#   When invoked, this macro will indent all paras.
-\# *Notes:
-\#   Default is OFF.
-\#
-.MAC INDENT_FIRST_PARAS END
-.    ie '\\$1'' .nr #INDENT_FIRST_PARAS 1
-.    el .rr #INDENT_FIRST_PARAS
-.END
-\#
-\# INTER-PARAGRAPH SPACING
-\# -----------------------
-\# *Arguments:
-\#   <none> | <anything>
-\# *Function:
-\#   Adds a line space between paragraphs in body text.  Block quotes
-\#   are unaffected.
-\# *Notes:
-\#   Default is OFF.  PARA_SPACE is not recommended for use with
-\#   PRINTSTYLE TYPEWRITE without SINGLESPACE.
-\#
-.MAC PARA_SPACE END
-.    ie '\\$1'' \{\
-.       nr #PP_SPACE 1
-.    \}
-.    el \{\
-.       ie \B'\\$1' \{\
-.          nr #PP_SPACE 1
-.          ds $PP_SPACE_AMOUNT \\$1
-.       \}
-.       el .rr #PP_SPACE
-.    \}
-.END
-\#
-\# PARAGRAPH
-\# ---------
-\# *Arguments:
-\#   <none>
-\# *Function:
-\#   Figures out what to do with paragraphs under differing conditions.
-\# *Notes:
-\#   Note the use of transparent line break (\!.br) to get
-\#   PP to work within blockquotes and epigraphs.
-\#
-\#   PP_STYLE 1 = regular paras; 2 = blockquotes, epigraphs
-\#
-.MAC PP END
-.    if \\n[#DOC_TYPE]=4 \{\
-.       if !'\\n[.z]'' .di
-.       nr #TOTAL_FIELDS \\n[#FIELD]
-.       nr #FIELD        0 1
-.       nr #NUM_FIELDS   0 1
-.       if \\n[#TOTAL_FIELDS]>0 \{\
-.          while \\n+[#NUM_FIELDS]<=\\n[#TOTAL_FIELDS] \{\
-.             nf
-.             LETTERHEAD\\n+[#FIELD]
-.             QUAD \\*[$DOC_QUAD]
-.             ALD \\n[#DOC_LEAD]u
-.             if \\n[#DATE_FIRST]=1 .ALD \\n[#DOC_LEAD]u
-.             rr #DATE_FIRST
-.             rm LETTERHEAD\\n[#FIELD]
-.          \}
-.          rr #FIELD
-.          rr #NUM_FIELDS
-.          rr #TOTAL_FIELDS
-.       \}
-.    \}
-.    rr #PP_ACTIVE
-.    if r #Q_AT_TOP .rr #Q_AT_TOP
-.    if \\n[#PP_STYLE]=1 \{\
-.       if \\n[#ENDNOTE] \{\
-.          nr #RESET_PARA_SPACE \\n[#PP_SPACE]
-.          ie \\n[#EN_PP_SPACE] .PARA_SPACE
-.          el .PARA_SPACE OFF
-.       \}
-.       if !\\n[#ENDNOTE] .po \\n[#L_MARGIN]u
-.       if \\n[#COLUMNS] \{\
-.          if !\\n[#ENDNOTE] \{\
-.             po \\n[#COL_\\n[#COL_NUM]_L_MARGIN]u
-.             nr #L_MARGIN \\n[.o]
-.          \}
-.       \}
-.       if \\n[#TAB_ACTIVE] .TAB \\n[#CURRENT_TAB]
-.       ie \\n[#PRINT_STYLE]=1 \{\
-.          TYPEWRITER
-.          ie \\n[#ENDNOTE] .vs \\n[#EN_LEAD]u
-.          el .vs \\n[#DOC_LEAD]u
-.          QUAD \\*[$DOC_QUAD]
-.          if \\n[#SLANT_ON] \{\
-.             if \\n[#UNDERLINE_SLANT] .UNDERLINE
-.          \}
-.          if '\\*[$PP_FT]'I' \
-.             if \\n[#ITALIC_MEANS_ITALIC] .FT I
-.       \}
-.       el \{\
-.          ie \\n[#ENDNOTE] \{\
-.             FAMILY  \\*[$EN_FAM]
-.             FT      \\*[$EN_FT]
-.             ps \\n[#EN_PS]u
-.             vs \\n[#EN_LEAD]u
-.             QUAD    \\*[$EN_QUAD]
-.          \}
-.          el \{\
-.             FAMILY  \\*[$DOC_FAM]
-.             if !'\\*[$SAVED_PP_FT]'' \{\
-.                ds $PP_FT \\*[$SAVED_PP_FT]
-.                rm $SAVED_PP_FT
-.             \}
-.             FT \\*[$PP_FT]
-.             ps \\n[#DOC_PT_SIZE]u
-.             vs      \\n[#DOC_LEAD]u
-.             QUAD    \\*[$DOC_QUAD]
-.          \}
-.       \}
-.       ie \\n[#PP]=0 \{\
-.          if \\n[#INDENT_FIRST_PARAS] \{\
-.             ie \\n[#INDENT_ACTIVE] .ti \\n[#INDENT]u+\\n[#PP_INDENT]u
-.             el .ti \\n[#PP_INDENT]u
-.             if '\\n[.z]'END_NOTES' \
-.                ti \\n[#EN_PP_INDENT]u+\\n[#EN_TEXT_INDENT]u
-.          \}
-.          if r #END_QUOTE \{\
-.             if \\n[#END_QUOTE] \{\
-.                if !\\n[#LINEBREAK] \{\
-.                   ie \\n[#INDENT_ACTIVE] .ti \\n[#INDENT]u+\\n[#PP_INDENT]u
-.                   el .ti \\n[#PP_INDENT]u
-.                   if '\\n[.z]'END_NOTES' \
-.                      ti \\n[#EN_PP_INDENT]u+\\n[#EN_TEXT_INDENT]u
-.                \}
-.             \}
-.          \}
-.       \}
-.       el \{\
-\#.          br
-.          if \\n[#PP_SPACE] \{\
-.             ie \\n[#END_QUOTE] \{\
-.                ie !'\\*[$PP_SPACE_AMOUNT]'' .ALD \\*[$PP_SPACE_AMOUNT]
-.                el .sp
-.                rr #END_QUOTE
-.                nr #NO_SPACE 1
-.                nr #BASELINE_MARK \\n[nl]
-.             \}
-.             el \{\
-.                if \\n[#NO_SPACE]=1 .rr #NO_SPACE
-.                if !\\n[nl]=\\n[#BASELINE_MARK] \{\
-.                ie !'\\*[$PP_SPACE_AMOUNT]'' .ALD \\*[$PP_SPACE_AMOUNT]
-.                el .sp
-.                   rr #BASELINE_MARK
-.                \}
-.             \}
-.          \}
-.          ie \\n[#INDENT_ACTIVE] .ti \\n[#INDENT]u+\\n[#PP_INDENT]u
-.          el .ti \\n[#PP_INDENT]u
-.          if '\\n[.z]'END_NOTES' \
-.             ti \\n[#EN_PP_INDENT]u+\\n[#EN_TEXT_INDENT]u
-.       \}
-.       if r #START     .rr #START
-.       if r #QUOTE     .rr #QUOTE
-.       if r #END_QUOTE .rr #END_QUOTE
-.       if r #HEAD      .rr #HEAD
-.       if r #SUBHEAD   .rr #SUBHEAD
-.       if r #EPIGRAPH  .rr #EPIGRAPH
-.       if r #Q_FITS    .rr #Q_FITS
-.       if r #LINEBREAK .rr #LINEBREAK
-.       if \\n[#ENDNOTE] \{\
-.          ie \\n[#RESET_PARA_SPACE] .PARA_SPACE
-.          el .PARA_SPACE OFF
-.       \}
-.       if \\n[#CONDENSE] \{\
-\E*[COND]\c
-.       \}
-.       if \\n[#EXTEND]=1 \{\
-\E*[EXT]\c
-.       \}
-.       nr #PP +1
-.    \}
-.    if \\n[#PP_STYLE]=2 \{\
-\!.     br
-.       if \\n[#BROKEN_QUOTE] \{\
-.          ie \\n[nl]=\\n[#PAGE_TOP] .nr #Q_PP 1
-.          el .nr #Q_PP 0
-.          rr #BROKEN_QUOTE
-.       \}
-.       ie \\n[#Q_PP]=0 \{\
-.          if \\n[#INDENT_FIRST_PARAS] \
-.             ti \\n[#PP_INDENT]u/2u
-.          if \\n[#ENDNOTE] \{\
-.             ie \\n[#INDENT_FIRSTS] .ti \\n[#PP_INDENT]u/2u
-.             el .ti 0
-.          \}
-.       \}
-.       el \{\
-.          ti \\n[#PP_INDENT]u/2u
-.          if \\n[#PP_SPACE]=1 \{\
-.             ie !'\\*[$PP_SPACE_AMOUNT]'' .ALD \\*[$PP_SPACE_AMOUNT]
-.             el .sp
-.          \}
-.       \}
-.       if \\n[#CONDENSE] \{\
-\E*[COND]\c
-.       \}
-.       if \\n[#EXTEND]=1 \{\
-\E*[EXT]\c
-.       \}
-.    nr #Q_PP +1
-.    \}
-.\" This takes care of multi-paragraph dialogue, where each para
-.\" is introduced by an open quote whereas the previous para has
-.\" no close quote.
-.    if \\n[#OPEN_CLOSE]=1 .nr #OPEN_CLOSE 0
-.    nr #PP_ACTIVE 1
-.    UNDERLINE OFF
-.    if r #QUOTE_4_HD .rr #QUOTE_4_HD
-.    if r #LB_4_HD .rr #LB_4_HD
-.END
-\# ====================================================================
-\#
-\# +++QUOTES+++
-\#
-\# ---Line for line quotes, i.e. poetry or code snippets---
-\#
-\# UNDERLINE QUOTES
-\# ----------------
-\# *Arguments:
-\#   <none> | <anything>
-\# *Function:
-\#   Creates or modifies register #UNDERLINE_QUOTES (toggle).
-\#   If on, line for line quotes are underlined when printstyle
-\#   is TYPEWRITE.
-\# *Notes:
-\#   Default is ON for printstyle TYPEWRITE.
-\#
-.MAC UNDERLINE_QUOTES END
-.    ie '\\$1'' .nr #UNDERLINE_QUOTES 1
-.    el .rr #UNDERLINE_QUOTES
-.END
-\#
-\# QUOTE INDENT
-\# ------------
-\# *Argument:
-\#   <integer> | <integer with unit of measure appended>
-\# *Function:
-\#   Creates or modifies register #Q_OFFSET_VALUE or string
-\#   $Q_OFFSET_VALUE.
-\# *Notes:
-\#   If just an integer given, value by which to multiply PARA_INDENT
-\#   to get quote indent.  If integer with a unit of measure appended,
-\#   absolute value of quote indent.
-\#
-\#  Default is 3 for typeset; 2 for typewrite.
-\#
-.MAC QUOTE_INDENT END
-.    rr #Q_OFFSET_VALUE
-.    rm $Q_OFFSET_VALUE
-.    ds $EVAL_QI_ARG \\$1
-.    substring $EVAL_QI_ARG -1
-.    ie \B'\\*[$EVAL_QI_ARG]' .nr #Q_OFFSET_VALUE \\$1
-.    el .ds $Q_OFFSET_VALUE \\$1
-.    rm $EVAL_QI_ARG
-.END
-\#
-\# QUOTE_AUTOLEAD
-\# --------------
-\# *Arguments:
-\#   <autolead value>
-\# *Function:
-\#   Sets autolead for quotes and/or blockquotes.
-\#
-.MAC QUOTE_AUTOLEAD END
-.    rr #\\$0_DEFAULT
-.    if '\\$0'QUOTE_AUTOLEAD'              .nr #Q_AUTOLEAD (p;\\$1)
-.    if '\\$0'BLOCKQUOTE_AUTOLEAD'         .nr #BQ_AUTOLEAD (p;\\$1)
-.    if '\\$0'ENDNOTE_QUOTE_AUTOLEAD'      .nr #EN_Q_AUTOLEAD (p;\\$1)
-.    if '\\$0'ENDNOTE_BLOCKQUOTE_AUTOLEAD' .nr #EN_BQ_AUTOLEAD (p;\\$1)
-.END
-\#
-.ALIAS BLOCKQUOTE_AUTOLEAD         QUOTE_AUTOLEAD
-.ALIAS ENDNOTE_QUOTE_AUTOLEAD      QUOTE_AUTOLEAD
-.ALIAS ENDNOTE_BLOCKQUOTE_AUTOLEAD QUOTE_AUTOLEAD
-\#
-\# ALWAYS FULLSPACE QUOTES
-\# -----------------------
-\# *Arguments:
-\#   <none> | <anything>
-\# *Function:
-\#   Toggles register #FULLSPACE_QUOTES.
-\# *Notes:
-\#   If user doesn't like the default 1/2 line space above and below
-\#   quotes, s/he can turn it off here.  Has no effect in TYPEWRITE.
-\#
-.MAC ALWAYS_FULLSPACE_QUOTES END
-.    if '\\$1'' .nr #FULLSPACE_QUOTES 1
-.    el .rr #FULLSPACE_QUOTES
-.END
-\#
-\# QUOTE
-\# -----
-\# *Arguments:
-\#   <none> | <anything>
-\# *Function:
-\#   Indents quoted text on a line for line basis, or turns QUOTE off.
-\# *Notes:
-\#   Owing to the need to bottom align TYPESET pages, quoted text gets
-\#   diverted so its depth can be measured (in DO_QUOTE) for determining
-\#   how much space to put before and after.
-\#
-\# QUOTE
-\# -----
-\# *Arguments:
-\#   <none> | <anything>
-\# *Function:
-\#   Indents quoted text on a line for line basis, or turns QUOTE off.
-\# *Notes:
-\#   Owing to the need to bottom align TYPESET pages, quoted text gets
-\#   diverted so its depth can be measured (in DO_QUOTE) for determining
-\#   how much space to put before and after.
-\#
-.MAC QUOTE END
-.    br
-.    if \\n[#PP]>0 .rr #START
-.    if \\n[#LINENUMBERS]=1 \{\
-.       nr #LINENUMBERS 2
-.       nr #NEXT_LN \\n[ln]
-.       nm
-.    \}
-.    ie '\\$1'' \{\
-.       ev QUOTE
-.       evc 0
-.       if \\n[#LINENUMBERS]=2 \{\
-.          if \\n[#SILENT_QUOTE_LN]=1 .nm \\n[#NEXT_LN] 1000 -4
-.       \}
-.       nr #IN_DIVER 1
-.       nr #QUOTE 1
-.       di P_QUOTE
-.       ie !'\\*[$Q_OFFSET_VALUE]'' .ll \\n[#L_LENGTH]u-(\\*[$Q_OFFSET_VALUE]*2u)
-.       el .ll \\n[#L_LENGTH]u-(\\n[#PP_INDENT]u*(\\n[#Q_OFFSET_VALUE]u*2u))
-.       ta \\n[.l]u
-.       if \\n[#COLUMNS] \{\
-.          ie \\n[#Q_OFFSET_VALUE] \
-.             ll \\n[#COL_L_LENGTH]u-(\\n[#PP_INDENT]u*\\n[#Q_OFFSET_VALUE]u)
-.          el .ll \\n[#COL_L_LENGTH]u-\\*[$Q_OFFSET_VALUE]
-.          ta \\n[.l]u
-.       \}
-.       if \\n[#PRINT_STYLE]=1 \{\
-.          TYPEWRITER
-.          vs \\n[#DOC_LEAD]u
-.          LEFT
-.       \}
-.       if \\n[#PRINT_STYLE]=2 \{\
-.          FAMILY  \\*[$QUOTE_FAM]
-.          FT      \\*[$QUOTE_FT]
-.          ps \\n[#DOC_PT_SIZE]u\\*[$QUOTE_SIZE_CHANGE]
-.          ie !r #Q_AUTOLEAD .vs \\n[#DOC_LEAD]u
-.          el \{\
-.             vs \\n[.ps]u+\\n[#Q_AUTOLEAD]u
-.             nr #Q_LEAD \\n[.v]
-.          \}
-.          if \\n[#ENDNOTE] \{\
-.             ps \\n[#EN_PS]u\\*[$QUOTE_SIZE_CHANGE]
-.             ie !r #EN_Q_AUTOLEAD .vs \\n[#EN_Q_LEAD]u
-.             el \{\
-.                vs \\n[.ps]u+\n[#EN_Q_AUTOLEAD]u
-.                nr #EN_Q_LEAD \\n[.v]
-.             \}
-.          \}
-.          nr #Q_LEAD_REAL \\n[.v]
-.          LEFT
-.          if \\n[#QUOTE_COLOR]=1 \{\
-.             nf
-\m[\\*[$QUOTE_COLOR]]
-.             EOL
-.          \}
-.       \}
-.       if \\n[#LINENUMBERS]=2 \{\
-.          ie \\n[#QUOTE_LN]=1 \{\
-.             if '\\n[#Q_LN_GUTTER]'' .nr #Q_LN_GUTTER \\n[#LN_GUTTER]
-.             LN_PARAMS
-.             nm \\n[ln] "" \\n[#Q_LN_GUTTER] -3-\\n[#Q_LN_GUTTER]
-.             RESTORE_PARAMS
-.          \}
-.          el \{\
-.             if !\\n[#SILENT_QUOTE_LN] .NUMBER_LINES OFF
-.          \}
-.       \}
-.       nr #Q_TOP \\n[nl]
-.       if \\n[#PRINT_STYLE]=1 \
-.          if \\n[#UNDERLINE_QUOTES] .FT I
-.    \}
-.    el .DO_QUOTE
-.END
-\#
-\# CODE
-\# ----
-\# *Arguments:
-\#   <none> [ BR | BREAK | SPREAD ]
-\#    or
-\#   <anything> [ BR | BREAK | SPREAD ]
-\# *Function:
-\#   Takes care of administrivia associated with setting code snippets.
-\#
-.MAC CODE END
-\c
-.    if '\\$1'BR' \{\
-.       br
-.       nr #BREAK_OR_SPREAD 1
-.       shift
-.    \}
-.    if '\\$1'BREAK' \{\
-.       nr #BREAK_OR_SPREAD 1
-.       br
-.       shift
-.    \}
-.    if '\\$1'SPREAD' \{\
-.       nr #BREAK_OR_SPREAD 2
-.       brp
-.       shift
-.    \}
-.    ie '\\$1'' \{\
-.       ds $RESTORE_FAM \\n[.fam]
-.       ds $RESTORE_FT  \\n[.sty]
-.       ie \\n[#PRINT_STYLE]=1 \{\
-.          CODE_FAMILY C
-.          ie \\n[#CODE_FT]=1 .ft \\*[$CODE_FT]
-.          el \{\
-.             CODE_FONT R
-.             ft R
-.             char ' \[aq]
-.          \}
-.          if \\n[#UNDERLINE_QUOTES]=1 \{\
-.             nr #RESTORE_UNDERLINE 1
-.             UNDERLINE_QUOTES OFF
-.             FT \\*[$CODE_FT]
-.             char ' \[aq]
-.          \}
-.       \}
-.       el \{\
-.          ie \\n[#CODE_FAM]=1 .fam \\*[$CODE_FAM]
-.          el \{\
-.             CODE_FAMILY C
-.             fam \\*[$CODE_FAM]
-.          \}
-.          ie \\n[#CODE_FT]=1 .ft \\*[$CODE_FT]
-.          el \{\
-.             CODE_FONT R
-.             ft \\*[$CODE_FT]
-.          \}
-.          if \\n[#CODE_COLOR]=1 .COLOR \\*[$CODE_COLOR]
-.          char ' \[aq]
-.          if !\\n[#CODE_SIZE_ADJ]=0 .ps \\n[#PT_SIZE]u*\\n[#CODE_SIZE_ADJ]u/100u
-.          if \\n[#SQ_ON] \{\
-.             nr #SQ_WAS_ON 1
-.             SMARTQUOTES OFF
-.          \}
-.       \}
-.    \}
-.    el \{\
-.       fam \\*[#RESTORE_FAM]
-.       ft  \\*[#RESTORE_FT]
-.       rm $RESTORE_FAM
-.       rm $RESTORE_FT
-.       if !\\n[#CODE_SIZE_ADJ]=0 .ps
-.       char ' \[aq]
-.       if !'\\n[.z]'' \
-.          if \\n[#LINENUMBERS] .nn
-.       if \\n[#CODE_COLOR]=1 .gcolor
-.       if \\n[#RESTORE_UNDERLINE]=1 \{\
-.          rr #RESTORE_UNDERLINE
-.          UNDERLINE_QUOTES
-.       \}
-.       if \\n[#SQ_WAS_ON]=1 \{\
-.          rr #SQ_WAS_ON
-.          SMARTQUOTES
-.       \}
-.       if \\n[#QUOTE] .sp 1v
-.    \}
-.END
-\#
-\# CODE_FAMILY
-\# -----------
-\# *Arguments:
-\#   <family>
-\# *Function:
-\#   Creates register #CODE_FAM and string $CODE_FAM for use by CODE.
-\#
-.MAC CODE_FAMILY END
-.    nr #CODE_FAM 1
-.    ds $CODE_FAM \\$1
-.END
-\#
-\# CODE_FONT
-\# ---------
-\# *Arguments:
-\#   <font>
-\# *Function:
-\#   Creates register #CODE_FT and string $CODE_FT for use by CODE.
-\#
-.MAC CODE_FONT END
-.    nr #CODE_FT 1
-.    ds $CODE_FT \\$1
-.END
-\#
-\# CODE_SIZE
-\# ---------
-\# *Arguments:
-\#   <percentage to zoom code font>
-\# *Function:
-\#   Creates register #CODE_SIZE_ADJ, used in CODE to zoom the
-\#   CODE_FONT to a percentage of the current point size.
-\#
-.MAC CODE_SIZE END
-. nr #CODE_SIZE_ADJ \\$1
-.END
-\#
-\# ---Blockquotes---
-\#
-\# BLOCKQUOTE
-\# ----------
-\# *Arguments:
-\#   <none> | <anything>
-\# *Function:
-\#   Indents quoted text in fill mode and shortens line length
-\#   equivalently, or turns BLOCKQUOTE off.
-\# *Notes:
-\#   Owing to the need to bottom align TYPESET pages, quoted text gets
-\#   diverted so its depth can be measured (in DO_QUOTE) for determining
-\#   how much space to put before and after.
-\#
-\#   .PP after blockquote is optional if there's only one para,
-\#   but required if there's more than one.
-\#
-.MAC BLOCKQUOTE END
-.    br
-.    if \\n[#LINENUMBERS]=1 \{\
-.       nr #LINENUMBERS 2
-.       nr #NEXT_LN \\n[ln]
-.       nm
-.    \}
-.    ie '\\$1'' \{\
-.       ev BLOCKQUOTE
-.       evc 0
-.       nr #IN_DIVER 1
-.       nr #QUOTE    2
-.       nr #PP_STYLE 2
-.       nr #Q_PP     0
-.       di B_QUOTE
-.       ie !'\\*[$Q_OFFSET_VALUE]'' .ll \\n[#L_LENGTH]u-(\\*[$Q_OFFSET_VALUE]*2u)
-.       el .ll \\n[#L_LENGTH]u-(\\n[#PP_INDENT]u*(\\n[#Q_OFFSET_VALUE]u*2u))
-.       if \\n[#ENDNOTE] \{\
-.          if \\n[#EN_NUMBERS_ALIGN_RIGHT] \{\
-.             ie r#Q_OFFSET_VALUE \
-.                ll \
-\\n[#RESET_L_LENGTH]u-\\n[#EN_TEXT_INDENT]u-(\\n[#EN_PP_INDENT]u*(\\n[#Q_OFFSET_VALUE]u*2u))
-.             el \
-.                ll \
-\\n[#RESET_L_LENGTH]u-\\n[#EN_TEXT_INDENT]u-(\\*[$Q_OFFSET_VALUE]*2u)
-.          \}
-.          if \\n[#EN_NUMBERS_ALIGN_LEFT] \{\
-.             ie r#Q_OFFSET_VALUE \
-.                ll \\n[#L_LENGTH]u-(\\n[#EN_PP_INDENT]u*(\\n[#Q_OFFSET_VALUE]u*2u))
-.             el \
-.                ll \\n[#L_LENGTH]u-(\\*[$Q_OFFSET_VALUE]u*2u)
-.          \}
-.       \}
-.       ta \\n[.l]u
-.       CHECK_INDENT
-.       if \\n[#COLUMNS] \{\
-.          ie r#Q_OFFSET_VALUE \
-.             ll \
-\\n[#COL_L_LENGTH]u-(\\n[#PP_INDENT]u*(\\n[#Q_OFFSET_VALUE]u*2u))
-.          el \
-.             ll \\n[#COL_L_LENGTH]u-(\\*[$Q_OFFSET_VALUE]*2u)
-.          if \\n[#ENDNOTE] \{\
-.             if \\n[#EN_NUMBERS_ALIGN_RIGHT] \{\
-.                ie r#Q_OFFSET_VALUE \
-.                   ll \
-\\n[#RESET_L_LENGTH]u-\\n[#EN_TEXT_INDENT]u-(\\n[#EN_PP_INDENT]u*(\\n[#Q_OFFSET_VALUE]u*2u))
-.                el \
-.                   ll \
-\\n[#RESET_L_LENGTH]u-\\n[#EN_TEXT_INDENT]u-(\\*[$Q_OFFSET_VALUE]*2u)
-.             \}
-.             if \\n[#EN_NUMBERS_ALIGN_LEFT] \{\
-.                ie r#Q_OFFSET_VALUE \
-.                   ll \
-\\n[#COL_L_LENGTH]u-(\\n[#EN_PP_INDENT]u*(\\n[#Q_OFFSET_VALUE]u*2u))
-.                el \
-.                   ll \\n[#COL_L_LENGTH]u-(\\*[$Q_OFFSET_VALUE]*2u)
-.             \}
-.          \}
-.          ta \\n[.l]u
-.       \}
-.       if \\n[#PRINT_STYLE]=1 \{\
-.          TYPEWRITER
-.          vs \\n[#DOC_LEAD]u
-.          QUAD LEFT
-.          HY OFF
-.       \}
-.       if \\n[#PRINT_STYLE]=2 \{\
-.          FAMILY  \\*[$BQUOTE_FAM]
-.          FT      \\*[$BQUOTE_FT]
-.          ps \\n[#DOC_PT_SIZE]u\\*[$BQUOTE_SIZE_CHANGE]
-.          ie !r #BQ_AUTOLEAD .vs \\n[#DOC_LEAD]u
-.          el \{\
-.             vs \\n[.ps]u+\\n[#BQ_AUTOLEAD]u
-.             nr #BQ_LEAD \\n[.v]
-.          \}
-.          if \\n[#ENDNOTE] \{\
-.             ps \\n[#EN_PS]u\\*[$BQUOTE_SIZE_CHANGE]
-.             ie !r#EN_BQ_AUTOLEAD .vs \\n[#EN_BQ_LEAD]u
-.             el \{\
-.                vs \\n[.ps]u+\\n[#EN_BQ_AUTOLEAD]u
-.                nr #EN_BQ_LEAD \\n[.v]
-.             \}
-.          \}
-.          nr #Q_LEAD_REAL \\n[.v]
-.          if \\n[#BQUOTE_COLOR]=1 \{\
-.             nf
-\m[\\*[$BQUOTE_COLOR]]
-.             EOL
-.          \}
-.          QUAD \\*[$BQUOTE_QUAD]
-.          nr #DIVERSIONS_HY_MARGIN (p;\\n[.ps]u*2.75)/1000
-.          HY_SET 1 \\n[#DIVERSIONS_HY_MARGIN]u (\\n[#PT_SIZE]u/1000u/8u)p
-.          hy 14
-.       \}
-.       if \\n[#LINENUMBERS]=2 \{\
-.          ie \\n[#BQUOTE_LN]=1 \{\
-.             if '\\n[#BQ_LN_GUTTER]'' .nr #BQ_LN_GUTTER \\n[#LN_GUTTER]
-.             LN_PARAMS
-.             nm \\n[ln] "" \\n[#BQ_LN_GUTTER] -3-\\n[#BQ_LN_GUTTER]
-.             RESTORE_PARAMS
-.          \}
-.          el \
-.             if !\\n[#SILENT_BQUOTE_LN] .NUMBER_LINES OFF
-.       \}
-.       nr #Q_TOP \\n[nl]
-.       if \\n[#INDENT_FIRST_PARAS] \{\
-.          ie !\\n[#ENDNOTE] \{\
-.             if \\n[#PRINT_STYLE]=1 .ti \\n[#PP_INDENT]u/2u
-.             if \\n[#PRINT_STYLE]=2 .ti \\n[#PP_INDENT]u/2u
-.          \}
-.          el \{\
-.             if \\n[#INDENT_FIRSTS]=1 \{\
-.                if \\n[#PRINT_STYLE]=1 .ti \\n[#EN_PP_INDENT]u/2u
-.                if \\n[#PRINT_STYLE]=2 .ti \\n[#EN_PP_INDENT]u/2u
-.             \}
-.          \}
-.       \}
-.    \}
-.    el .DO_QUOTE
-.END
-\#
-\# DO QUOTE
-\# --------
-\# *Arguments:
-\#   <none>
-\# *Function:
-\#   Ends the diversion P_QUOTE or B_QUOTE.  Spaces them according to
-\#   PRINTSTYLE, whether there's inter-paragraph spacing, and page
-\#   position.  TYPEWRITE treats spacing the same way in all circumstance
-\#   (viz. an extra line space).  TYPESET puts in only half
-\#   line spaces if the entire quote plus 1 line of body under the quote
-\#   fits on the the page; otherwise it puts in a full extra blank
-\#   line.  (This is to ensure the page remains bottom aligned).
-\#
-.MAC DO_QUOTE END
-.    br
-.    if \\n[#DIVER_LN_OFF] \{\
-\!.     NUMBER_LINES OFF
-.       rr #DIVER_LN_OFF
-.    \}
-.    di
-.    rr #IN_DIVER
-.    if \\n[#RESET_FN_COUNTERS]=2 \{\
-.       if !\\n[#FN_COUNT]=1 \{\
-.          if ((\\n[#PAGE_LENGTH]+\\n[#VARIABLE_FOOTER_POS])+\\n[#DIVER_DEPTH])>(\\n[#PAGE_LENGTH]+\\n[#VARIABLE_FOOTER_POS]) \{\
-.             DIVER_FN_2_POST
-.             rr #RESET_FN_COUNTERS
-.          \}
-.       \}
-.    \}
-.    nr #SAVED_FN_NUMBER \\n[#FN_NUMBER]
-.    nr #DONE_ONCE 0 1
-.    REMOVE_INDENT
-.    ev
-.    nr #Q_DEPTH (\\n[#DIVER_DEPTH]-\\n[#Q_LEAD_REAL])
-.    nr #Q_LEAD_DIFF \\n[#LEAD]-\\n[#Q_LEAD_REAL]
-.    if !\\n[.v]=\\n[#Q_LEAD_REAL] \{\
-.       SILENT
-.       br
-.       nf
-.       nr #CURRENT_V_POS \
-\\n[nl]+\\n[#Q_LEAD_DIFF]+(\\n[#DIVER_DEPTH]-\\n[#Q_DEPTH_REAL])
-.       SHIM
-.       SILENT OFF
-.       nr #Q_SPACE_ADJ \\n[#SHIM]/2
-.       nr #TRAP \\n[.t]-1
-.    \}
-.    if \\n[#ENDNOTE] \{\
-.       nr #RESET_QUOTE_SPACING \\n[#FULLSPACE_QUOTES]
-.       ALWAYS_FULLSPACE_QUOTES
-.    \}
-.    if \\n[#PRINT_STYLE]=1 \{\
-.       if \\n[#START]=1 .
-.       if \\n[#START]=0 \
-.          if !\\n[#LINEBREAK] .ALD \\n[#DOC_LEAD]u
-.       if \\n[#HEAD] \
-.          if \\n[#HEAD]=1 .RLD \\n[#DOC_LEAD]u
-.    \}
-.    if \\n[#PRINT_STYLE]=2 \{\
-.       ie \\n[#PP_SPACE] \{\
-.          ie \\n[#HEAD] .
-.          el \{\
-.             ie \\n[#START] .
-.             el \{\
-.                ie \\n[#FULLSPACE_QUOTES] .ALD \\n[#DOC_LEAD]u
-.                el .ALD \\n[#DOC_LEAD]u/2u
-.             \}
-.          \}
-.       \}
-.       el \{\
-.          ie \\n[#Q_DEPTH]<(\\n[#TRAP_DISTANCE]-1) \{\
-.             ie ((\\n[#TRAP_DISTANCE]-1)-\\n[#Q_DEPTH])<\\n[#DOC_LEAD] \
-.                Q_NOFIT
-.             el \{\
-.                ie (\\n[#TRAP_DISTANCE]-\\n[#DOC_LEAD])<\\n[#DOC_LEAD] .Q_NOFIT
-.                el \{\
-.                   ie (\\n[#Q_DEPTH]+\\n[.v])=(\\n[#TRAP_DISTANCE]-1) .Q_NOFIT
-.                   el .Q_FITS
-.                \}
-.             \}
-.          \}
-.          el .Q_NOFIT
-.       \}
-.       if \\n[#LINEBREAK] \{\
-.          ie !\\n[@TOP] .RLD \\n[#DOC_LEAD]u
-.          el \{\
-.             nop
-.             sp |\\n[#T_MARGIN]u-\\n[#BQ_LEAD]u
-.          \}
-.       \}
-.    \}
-.    ie !'\\*[$Q_OFFSET_VALUE]'' .nr #Q_OFFSET \\n[#L_MARGIN]+\\*[$Q_OFFSET_VALUE]
-.    el \
-.       nr #Q_OFFSET \\n[#L_MARGIN]+(\\n[#PP_INDENT]*\\n[#Q_OFFSET_VALUE])
-.    if \\n[#COLUMNS] \{\
-.       ie r#Q_OFFSET_VALUE \
-.          nr #Q_OFFSET \
-\\n[#COL_\\n[#COL_NUM]_L_MARGIN]+(\\n[#PP_INDENT]*\\n[#Q_OFFSET_VALUE])
-.       el .nr #Q_OFFSET \\n[#COL_\\n[#COL_NUM]_L_MARGIN]+\\*[$Q_OFFSET_VALUE]
-.    \}
-.    if !\\n[#ENDNOTE] \{\
-.       po \\n[#Q_OFFSET]u
-.       if '\\n[.z]'FLOAT*DIV' \!.po \\n[#Q_OFFSET]u
-.    \}
-.    if \\n[#ENDNOTE] \{\
-.       ie \\n[#Q_OFFSET_VALUE] .in +\\n[#EN_PP_INDENT]u*\\n[#Q_OFFSET_VALUE]u
-.       el .in +\\*[$Q_OFFSET_VALUE]
-.    \}
-.    ie \\n[#START]=1 \{\
-.       ie !\\n[#Q_LEAD_DIFF]<0 .ALD \\n[#Q_SPACE_ADJ]u
-.       el .RLD 0-\\n[#Q_LEAD_DIFF]u
-.    \}
-.    el \{\
-.       if \\n[#PRINT_STYLE]=2 \{\
-.           if !\\n[.v]=\\n[#Q_LEAD] .ALD \\n[#Q_SPACE_ADJ]u
-.       \}
-.    \}
-.    if \\n[#QUOTE]=1 \{\
-.       nf
-.       P_QUOTE
-.       br
-.       if !\\n[#START] .rr #QUOTE
-.    \}
-.    if \\n[#QUOTE]=2 \{\
-.       nf
-.       B_QUOTE
-.       br
-.    \}
-.    if \\n[#PRINT_STYLE]=1 \
-.       if !\\n[.v]=\\n[#DOC_LEAD] .SHIM
-.    if \\n[#PRINT_STYLE]=2 \{\
-.       ie \\n[#START] \{\
-.          ie \\n[#PP_SPACE] .
-.          el \{\
-.             ALD \\n[#DOC_LEAD]u
-.             SHIM
-.          \}
-.       \}
-.       el \{\
-.          ie \\n[#HEAD]=1 \{\
-.             ALD \\n[#DOC_LEAD]u
-.             SHIM
-.          \}
-.          el \{\
-.             ie \\n[#FULLSPACE_QUOTES] \{\
-.                ie \\n[#ENDNOTE] .ALD \\n[#EN_LEAD]u
-.                el .ALD \\n[#DOC_LEAD]u
-.             \}
-.             el .ALD (\\n[#DOC_LEAD]/2)u
-.             ie \\n[#Q_FITS] \{\
-.                ie (\\n[#Q_TOP]=\\n[#PAGE_TOP]):(\\n[@TOP]=1) \{\
-.                   nr #Q_AT_TOP 1
-.                   nr #DELAY_SHIM 1
-.                \}
-.                el \
-.                   if !\\n[.v]=\\n[#Q_LEAD_REAL] .SHIM
-.             \}
-.             el \{\
-.                SHIM
-.\" Make sure that Q_LEAD_DIFF is not added to the first line of
-.\" normal text at the top of any page following output of a quote
-.\" whose last line falls on B_MARGIN of the previous page.
-.                if \\n[#Q_LEAD_DIFF] \{\
-.                   if \\n[nl]=(\\n[#T_MARGIN]-\\n[#DOC_LEAD]+\\n[#Q_LEAD_DIFF]) \{\
-.                      PRINT \&
-.                      br
-.                      sp -1v-\\n[#Q_LEAD_DIFF]u
-.                      nr #Q_LEAD_DIFF_CHECK 1
-.                   \}
-.                \}
-.             \}
-.          \}
-.       \}
-.    \}
-.    rr #Q_SPACE_ADJ
-.    if \\n[#LINENUMBERS]=2 \{\
-.       nr #LINENUMBERS 1
-.       if !\\n[#ENDNOTE] \{\
-.          ie \\n[#RESTORE_LN_NUM]=1 \{\
-.             LN_PARAMS
-.             nm \\n[#NEXT_LN]
-.             RESTORE_PARAMS
-.          \}
-.          el \{\
-.             LN_PARAMS
-.             nm +0
-.             RESTORE_PARAMS
-.          \}
-.       \}
-.    \}
-.    if \\n[#ENDNOTE] .nr #FULLSPACE_QUOTES \\n[#RESET_QUOTE_SPACING]
-.    if r #HEAD .rr #HEAD
-.    if r #EPIGRAPH .rr #EPIGRAPH
-.    rr #Q_PP
-.    rr #LINEBREAK
-.    nr #PP_STYLE  1
-.    nr #END_QUOTE 1
-.    if !\\n[#ENDNOTE] \{\
-.       po \\n[#L_MARGIN]u
-.       if '\\n[.z]'FLOAT*DIV' \!.po \\n[#L_MARGIN]u
-.    \}
-.    if \\n[#ENDNOTE]  .in \\n[#EN_TEXT_INDENT]u
-.    if \\n[#COLUMNS] \{\
-.       if !\\n[#ENDNOTE] \{\
-.          po \\n[#COL_\\n[#COL_NUM]_L_MARGIN]u
-.          nr #L_MARGIN \\n[.o]
-.       \}
-.       if \\n[#ENDNOTE] .in \\n[#EN_TEXT_INDENT]u
-.    \}
-.    ie !\\n[#ENDNOTE] .QUAD \\*[$DOC_QUAD]
-.    el .QUAD \\*[EN_QUAD]
-.    if r #DELAY_SHIM \{\
-.       SHIM
-.       rr #DELAY_SHIM
-.    \}
-.    if \\n[#PRINT_STYLE]=1 \
-.       if \\n[#UNDERLINE_QUOTES] .FT R
-.    nr #QUOTE_4_HD 1
-.END
-\#
-\# Utility macros for DO_QUOTE
-\# ---------------------------
-\#
-.MAC Q_FITS END
-.    nr #Q_FITS 1
-.    ie \\n[#HEAD]=1 .ALD \\n[#Q_LEAD_DIFF]u
-.    el \{\
-.       ie \\n[#START] .
-.       el \{\
-.          ie \\n[#FULLSPACE_QUOTES] \{\
-.             ie \\n[#ENDNOTE] .ALD \\n[#EN_LEAD]u+\\n[#Q_LEAD_DIFF]u
-.             el .ALD \\n[#DOC_LEAD]u+\\n[#Q_LEAD_DIFF]u
-.          \}
-.          el \{\
-.\" This seems to be the only way to get the baseline of quotes that
-.\" start at the top of the page to fall on the first line of the
-.\" grid (ie. on the first valid baseline of the page).
-.             ie \\n[#Q_TOP]=\\n[#PAGE_TOP] \{\
-.                if \\n[#QUOTE]=1 \{\
-.                   rn P_QUOTE Q_TEMP
-.                   di P_QUOTE
-.                   nf
-.                   vs \\n[#Q_LEAD]u
-.                   PRINT \&
-.                   sp -1v+\\n[#Q_LEAD_DIFF]u
-.                   Q_TEMP
-.                   di
-.                \}
-.                if \\n[#QUOTE]=2 \{\
-.                   rn B_QUOTE Q_TEMP
-.                   di B_QUOTE
-.                   nf
-.                   vs \\n[#BQ_LEAD]u
-.                   PRINT \&
-.                   sp -1v+\\n[#Q_LEAD_DIFF]u
-.                   Q_TEMP
-.                   di
-.                \}
-.                rm Q_TEMP
-.             \}
-.             el .ALD (\\n[#DOC_LEAD]u/2u)+\\n[#Q_SPACE_ADJ]u
-.          \}
-.       \}
-.       if \\n[#DIVER_FN]=2 .rr #DIVER_FN
-.    \}
-.END
-\#
-.MAC Q_NOFIT END
-.    rr #Q_FITS
-.    ie r#HEAD \
-.       if \\n[#HEAD]=1 .
-.    el \{\
-.       if \\n[#Q_DEPTH]=0 \
-.          if \\n[.ns] .rs
-.       ie \\n[#FULLSPACE_QUOTES] \{\
-.          ie \\n[#ENDNOTE] .ALD \\n[#EN_LEAD]u+\\n[#Q_LEAD_DIFF]u
-.          el .ALD \\n[#DOC_LEAD]u+\\n[#Q_LEAD_DIFF]u
-.       \}
-.       el \{\
-.          ALD \\n[#DOC_LEAD]u+\\n[#Q_LEAD_DIFF]
-.          if \\n[@TOP] .rs
-.       \}
-.       nr #Q_PARTIAL_DEPTH 0 \\n[#Q_LEAD_REAL]
-.       while \\n+[#Q_PARTIAL_DEPTH]<(\\n[#TRAP_DISTANCE]-1) \{\
-.
-.       \}
-.       nr #Q_PARTIAL_DEPTH -\\n[#Q_LEAD_REAL]
-.       nr #Q_SPACE_ADJ \
-(\\n[#TRAP_DISTANCE]-1)-\\n[#Q_PARTIAL_DEPTH]+\\n[#Q_LEAD_DIFF]u
-.       if \\n[#FN_COUNT]>0 .nr #Q_SPACE_ADJ (\\n[#Q_SPACE_ADJ] / 2u)
-.\" Hack to deal with the fact that even though the above routine
-.\" makes the bottom line of the quote fall exactly on the bottom
-.\" margin when traps are disabled, it refuses to do so when traps
-.\" are on.  The difference by which it's off is #Q_LEAD_DIFF
-.\" (the +\\n[#Q_LEAD_DIFF] at the end of the line, above).  Hack
-.\" solution: temporarily lower the FOOTER trap position.
-.       if !\\n[#Q_DEPTH]=0 \{\
-.          nr #SAVED_FOOTER_POS \\n[#VARIABLE_FOOTER_POS]
-.          ch FOOTER \\n[#VARIABLE_FOOTER_POS]u+.25v
-.       \}
-.    \}
-.END
-\#
-\# ====================================================================
-\#
-\# +++PAGINATION+++
-\#
-\# PAGINATE
-\# --------
-\# *Arguments:
-\#   <none> | <anything>
-\# *Function:
-\#   Turns page numbering off or on during document processing.
-\# *Notes:
-\#   Default is on.
-\#
-.MAC PAGINATE END
-.    ie '\\$1'' .nr #PAGINATE 1
-.    el \{\
-.      nr #PAGINATE 0
-.      if !\\n[#COLLATE] .rr #PAGE_NUM_V_POS
-.    \}
-.    if \\n[#HF_OFF]=1 \{\
-.       rr #PAGINATION_STATE
-.       rr #HF_OFF
-.    \}
-.END
-\#
-\# SUSPEND PAGINATION (before ENDNOTES)
-\# ------------------
-\# *Argument:
-\#   <none>
-\# *Function:
-\#   Creates register #SUSPEND_PAGINATION
-\# *Notes:
-\#   Useful only to suspend pagination before outputting endnotes.
-\#
-.MAC SUSPEND_PAGINATION END
-.    nr #SUSPEND_PAGINATION 1
-.END
-\#
-\# RESTORE PAGINATION (after ENDNOTES)
-\# ------------------
-\# *Argument:
-\#   <none>
-\# *Function:
-\#   Removes register #SUSPEND_PAGINATION.  Creates register
-\#   #DEFER_PAGINATION
-\# *Notes:
-\#   Useful only to restore pagination after outputting endnotes.
-\#
-.MAC RESTORE_PAGINATION END
-.    rr #SUSPEND_PAGINATION
-.    if \\n[#PAGE_NUM_V_POS]=1 .PAGINATE
-.    if \\n[#PAGE_NUM_V_POS]=2 .nr #DEFER_PAGINATION 1
-.END
-\#
-\# PAGE NUMBER FORMAT
-\# ------------------
-\# *Arguments:
-\#   DIGIT | ROMAN | roman | ALPHA | alpha
-\# *Function:
-\#   Assigns user entered format to #PAGENUMBER.
-\#
-.MAC PAGENUM_STYLE END
-.    nr #PAGENUM_STYLE_SET 1
-.    if '\\$1'DIGIT' \{\
-.       ds $PAGENUM_STYLE \\$1
-.       af #PAGENUMBER 1
-.    \}
-.    if '\\$1'ROMAN' \{\
-.       ds $PAGENUM_STYLE \\$1
-.       af #PAGENUMBER I
-.    \}
-.    if '\\$1'roman' \{\
-.       ds $PAGENUM_STYLE \\$1
-.       af #PAGENUMBER i
-.    \}
-.    if '\\$1'ALPHA' \{\
-.       ds $PAGENUM_STYLE \\$1
-.       af #PAGENUMBER A
-.    \}
-.    if '\\$1'alpha' \{\
-.       ds $PAGENUM_STYLE \\$1
-.       af #PAGENUMBER a
-.    \}
-.END
-\#
-\# HYPHENS AROUND PAGE NUMBERS
-\# ---------------------------
-\# *Arguments:
-\#   <none> | <anything>
-\# *Function:
-\#   Creates or modifies register #PAGE_NUM_HYPHENS.
-\#   Used to dis/enable hyphens on either side of page numbers.
-\# *Notes:
-\#   Default is on.
-\#
-.MAC PAGENUM_HYPHENS END
-.    nr #PAGE_NUM_HYPHENS_SET 1
-.    ie '\\$1'' .nr #PAGE_NUM_HYPHENS 1
-.    el .rr #PAGE_NUM_HYPHENS
-.END
-\#
-\# PAGENUMBER POSITION
-\# -------------------
-\# *Arguments:
-\#   TOP | BOTTOM  LEFT | CENTER | RIGHT
-\# *Function:
-\#   Creates or modifies various PAGE_NUM_H | V_POS registers.
-\#   Used to position page numbers.
-\# *Notes:
-\#   Default is center/bottom.
-\#
-.MAC PAGENUM_POS END
-.    nr #PAGE_NUM_POS_SET 1
-.    if '\\$1'TOP'    .nr #PAGE_NUM_V_POS 1
-.    if '\\$1'BOTTOM' .nr #PAGE_NUM_V_POS 2
-.    if '\\$2'LEFT'   .nr #PAGE_NUM_H_POS 1
-.    if '\\$2'CENTER' .nr #PAGE_NUM_H_POS 2
-.    if '\\$2'CENTRE' .nr #PAGE_NUM_H_POS 2
-.    if '\\$2'RIGHT'  .nr #PAGE_NUM_H_POS 3
-.END
-\#
-.MAC PN_WITH_HYPHENS END
-.    nr #HYPHEN_ADJ \\n[#CAP_HEIGHT]/12
-.    ds $HYPHEN \v'-\En[#HYPHEN_ADJ]u'-\v'\En[#HYPHEN_ADJ]u'
-.    ds $PN_FOR_KN \\n[#PAGENUMBER]
-.\"  Check for initial or terminal 1's or 7's, and apply a little kerning
-.    substring $PN_FOR_KN 0 0 \" 1st digit
-.    if '\\*[$PN_FOR_KN]'1' .ds $PRE_HY_KN \*[BU3]
-.    if '\\*[$PN_FOR_KN]'7' .ds $PRE_HY_KN \*[BU3]
-.    ds $PN_FOR_KN \\n[#PAGENUMBER]
-.    substring $PN_FOR_KN -1 -1 \" last digit
-.    if '\\*[$PN_FOR_KN]'1' .ds $POST_HY_KN \*[BU3]
-.    if '\\*[$PN_FOR_KN]'7' .ds $POST_HY_KN \*[BU3]
-.    PRINT \
-\m[\\*[$PAGENUM_COLOR]]\
-\\*[$HYPHEN]\|\\*[$PRE_HY_KN]\\n[#PAGENUMBER]\\*[$POST_HY_KN]\|\\*[$HYPHEN]
-.    br
-.    rm $PRE_HY_KERN
-.    rm $POST_HY_KERN
-.END
-\#
-\# PRINT PAGE NUMBER
-\# -----------------
-\# *Arguments:
-\#   <none>
-\# *Function:
-\#   Prints page number if PAGINATE=1.
-\#
-.MAC PRINT_PAGE_NUMBER END
-.    ev PAGENUMBER
-.    nf
-.    po  \\n[#DOC_L_MARGIN]u
-.    ll  \\n[#DOC_L_LENGTH]u
-.    ta  \\n[.l]u
-.    fam \\*[$PAGE_NUM_FAM]
-.    ft  \\*[$PAGE_NUM_FT]
-.    ps  \\n[#DOC_PT_SIZE]u\\*[$PAGE_NUM_SIZE_CHANGE]
-.    if  \\n[#PRINT_STYLE]=1 .TYPEWRITER
-.    if  \\n[#PAGE_NUM_V_POS]=1 .vs 0
-.    if o \{\
-.       ie \\n[#PAGE_NUM_H_POS]=1 .LEFT
-.       el .RIGHT
-.    \}
-.    if e \{\
-.       ie \\n[#PAGE_NUM_H_POS]=1 .RIGHT
-.       el .LEFT
-.    \}
-.    if \\n[#PAGE_NUM_H_POS]=2 .CENTER
-.    if \\n[#RECTO_VERSO]=0 \{\
-.       if \\n[#PAGE_NUM_H_POS]=1 .LEFT
-.       if \\n[#PAGE_NUM_H_POS]=2 .CENTER
-.       if \\n[#PAGE_NUM_H_POS]=3 .RIGHT
-.    \}
-.    nr #PAGENUMBER \\n%+\\n[#PAGE_NUM_ADJ]
-.    if \\n[#EN_FIRST_PAGE] \{\
-.       if \\n[#EN_FIRST_PN] .PAGENUMBER \\n[#EN_FIRST_PN]
-.       rr #EN_FIRST_PAGE
-.    \}
-.    if \\n[#BIB_FIRST_PAGE] \{\
-.       if \\n[#BIB_FIRST_PN] .PAGENUMBER \\n[#BIB_FIRST_PN]
-.       rr #BIB_FIRST_PAGE
-.    \}
-.    ie \\n[#DRAFT_WITH_PAGENUM] \{\
-.       ie '\\*[$REVISION]'' \
-.          PRINT "\\*[$DRAFT_STRING]\\*[$DRAFT] / \\n[#PAGENUMBER]"
-.       el \{\
-.          ie '\\*[$DRAFT]'' \
-.             PRINT "\\*[$REVISION_STRING] \\*[$REVISION] / \\n[#PAGENUMBER]"
-.          el \
-.             PRINT \
-"\\*[$DRAFT_STRING]\\*[$DRAFT], \\*[$REVISION_STRING] \\*[$REVISION] / \
-\\n[#PAGENUMBER]"
-.       \}
-.    \}
-.    el \{\
-.       ie \\n[#PAGE_NUM_HYPHENS] \{\
-.          if '\\*[$PAGENUM_STYLE]'DIGIT' \{\
-.             di NULL
-1\\R'#CAP_HEIGHT \\n[.cht]'
-.             di
-.             PN_WITH_HYPHENS
-.          \}
-.          if '\\*[$PAGENUM_STYLE]'ROMAN' \{\
-.             di NULL
-I\\R'#CAP_HEIGHT \\n[.cht]'
-.             di
-.             PN_WITH_HYPHENS
-.          \}
-.          if '\\*[$PAGENUM_STYLE]'ALPHA' \{\
-.             di NULL
-E\\R'#CAP_HEIGHT \\n[.cht]'
-.             di
-.             PN_WITH_HYPHENS
-.          \}
-.          if '\\*[$PAGENUM_STYLE]'roman' \
-.             PRINT \m[\\*[$PAGENUM_COLOR]]-\|\\n[#PAGENUMBER]\|-
-.          if '\\*[$PAGENUM_STYLE]'alpha' \
-.             PRINT \m[\\*[$PAGENUM_COLOR]]-\|\\n[#PAGENUMBER]\|-
-.       \}
-.       el .PRINT \m[\\*[$PAGENUM_COLOR]]\\n[#PAGENUMBER]
-.    \}
-.    ev
-.    nr #DIVER_DEPTH 0
-.END
-\#
-\# ====================================================================
-\#
-\# +++FOOTNOTES+++
-\#
-\# Mom's footnote handling is baroque, to say the least.  There are
-\# redundancies in a number of the macros involved, as well as some
-\# registers that probably don't get used anymore.  The baggage is left
-\# in in case some new footnote oddity/challenge gets thrown at her.
-\#
-\# The macros are heavily commented.
-\#
-\# FOOTNOTE AUTOLEAD
-\# -----------------
-\# *Arguments:
-\#   <autolead value for footnotes>
-\# *Function:
-\#   Creates or modifies register #FN_AUTOLEAD.
-\# *Notes:
-\#   Default is #DOC_LEAD/2 for TYPEWRITE; 2 for TYPESET
-\#
-.MAC FOOTNOTE_AUTOLEAD END
-.    nr #FN_AUTOLEAD (p;\\$1)
-.END
-\#
-\# FOOTNOTE MARKERS
-\# ----------------
-\# *Arguments:
-\#   <none> | <anything>
-\# *Function:
-\#   Turns generation of footnote markers on or off.
-\# *Notes:
-\#   Default is on.
-\#
-.MAC FOOTNOTE_MARKERS END
-.    ie '\\$1'' .nr #FN_MARKERS 1
-.    el .nr #FN_MARKERS 0
-.END
-\#
-\# FOOTNOTE MARKER STYLE
-\# ---------------------
-\# *Arguments:
-\#   STAR | NUMBER | LINE
-\# *Function:
-\#   Sets register #FN_MARKER_STYLE, used in FOOTNOTE to determine
-\#   the style of footnote markers.
-\# *Notes:
-\#   1=STAR; 2=NUMBER; 3=LINE.  LINE means "use output line numbers".
-\#   Default is STAR.
-\#
-.MAC FOOTNOTE_MARKER_STYLE END
-.    if '\\$1'STAR' \{\
-.       if \\n[#FN_MARKER_STYLE]=3 \{\
-.          if !\\n[#NEWPAGE]=1 \{\
-.             tm1 "[mom]: Your current FOOTNOTE_MARKER STYLE is LINE.
-.             tm1 "       You cannot change footnote marker style without
-.             tm1 "       first breaking to a new page with NEWPAGE.
-.             tm1 "       Ignoring request FOOTNOTE_MARKER_STYLE STAR at line \\n[.c].
-.             return
-.          \}
-.       \}
-.       if \\n[#RUN_ON]=1 \{\
-.          tm1 "[mom]: FOOTNOTE_MARKER_STYLE STAR at line \\n[.c] is incompatible
-.          tm1 "       with RUN_ON footnotes.  Ignoring request.
-.          return
-.       \}
-.       nr #FN_MARKER_STYLE 1
-.       if \\n[#NEWPAGE]=1 .rr #NEWPAGE
-.       FOOTNOTE_MARKERS
-.    \}
-.    if '\\$1'NUMBER' \{\
-.       if \\n[#FN_MARKER_STYLE]=3 \{\
-.          if !\\n[#NEWPAGE]=1 \{\
-.             tm1 "[mom]: Your current FOOTNOTE_MARKER STYLE is NUMBER.
-.             tm1 "       You cannot change footnote marker style without
-.             tm1 "       first breaking to a new page with NEWPAGE.
-.             tm1 "       Ignoring request FOOTNOTE_MARKER_STYLE NUMBER at line \\n[.c].
-.             return
-.          \}
-.       \}
-.       if \\n[#RUN_ON]=1 \{\
-.          tm1 "[mom]: FOOTNOTE_MARKER_STYLE NUMBER at line \\n[.c] is incompatible
-.          tm1 "       with RUN_ON footnotes.  Ignoring request.
-.          return
-.       \}
-.       nr #FN_MARKER_STYLE 2
-.       shift
-.       if '\\$1'NO_SUPERSCRIPT' .nr #NO_SUPERSCRIPT 1
-.       if \\n[#NEWPAGE]=1 .rr #NEWPAGE
-.       FOOTNOTE_MARKERS
-.    \}
-.    if '\\$1'LINE' \{\
-.       nr #FN_MARKER_STYLE 3
-.       FOOTNOTE_MARKERS OFF
-.       if !\\n[#FN_LN_SEP] \
-.          if !\\n[#FN_LN_BRACKETS] .FOOTNOTE_LINENUMBER_BRACKETS SQUARE
-.    \}
-.END
-\#
-\# FOOTNOTE NUMBER PLACEHOLDERS
-\# ----------------------------
-\# *Argument:
-\#   <number of placeholders>
-\# *Function:
-\#   Sets register #FN_NUMBER_PLACEHOLDERS, used to establish whether to
-\#   right pad a footnote number (in the footnote itself, not body copy).
-\# *Notes:
-\#   No default is set for this; user must determine if, and where, it's
-\#   required
-\#
-.MAC FOOTNOTE_NUMBER_PLACEHOLDERS END
-.    nr #FN_NUMBER_PLACEHOLDERS \\$1
-.END
-\#
-\# FOOTNOTE LINENUMBER MARK
-\# ------------------------
-\# *Function:
-\#   This string, when called inline, stores the current output line
-\#   number in register #FN_MARK for use with FOOTNOTE.
-\#
-.ds FN_MARK \R'#FN_MARK \En[ln]'
-\#
-\# FOOTNOTE LINENUMBER SEPARATOR
-\# -----------------------------
-\# *Argument:
-\#   <user-defined separator>
-\# *Function:
-\#   Stores user-defined separator (for use then
-\#   FOOTNOTE_MARKER_STYLE is LINE) in string $FN_LN_SEP.  The
-\#   separator is intended to be used when the user wishes a
-\#   separator, rather than the choice of brackets offered by
-\#   FOOTNOTE_LINENUMBER_BRACKETS.
-\#
-.MAC FOOTNOTE_LINENUMBER_SEPARATOR END
-.    rr #FN_LN_BRACKETS
-.    nr #FN_LN_SEP 1
-.    ds $FN_LN_SEP "\\$1
-.END
-\#
-\# FOOTNOTE LINENUMBER BRACKETS
-\# ----------------------------
-\# *Argument:
-\#   PARENS | SQUARE | BRACES or ( | [ | {
-\# *Function:
-\#   Sets register #FN_LN_BRACKETS to 1, and creates strings
-\#   $FN_OPEN_BRACKET and $FN_CLOSE_BRACKET according to the given
-\#   argument.
-\#
-.MAC FOOTNOTE_LINENUMBER_BRACKETS END
-.    rr #FN_LN_SEP
-.    nr #FN_LN_BRACKETS 1
-.    if '\\$1'PARENS' \{\
-.       ds $FN_OPEN_BRACKET (
-.       ds $FN_CLOSE_BRACKET )
-.    \}
-.    if '\\$1'(' \{\
-.       ds $FN_OPEN_BRACKET (
-.       ds $FN_CLOSE_BRACKET )
-.    \}
-.    if '\\$1'SQUARE' \{\
-.       ds $FN_OPEN_BRACKET [
-.       ds $FN_CLOSE_BRACKET ]
-.    \}
-.    if '\\$1'[' \{\
-.       ds $FN_OPEN_BRACKET [
-.       ds $FN_CLOSE_BRACKET ]
-.    \}
-.    if '\\$1'BRACES' \{\
-.       ds $FN_OPEN_BRACKET {
-.       ds $FN_CLOSE_BRACKET }
-.    \}
-.    if '\\$1'{' \{\
-.       ds $FN_OPEN_BRACKET {
-.       ds $FN_CLOSE_BRACKET }
-.    \}
-.END
-\#
-\# RESET FOOTNOTE NUMBER
-\# ---------------------
-\# *Arguments:
-\#   <none> | PAGE
-\# *Function:
-\#   Resets register #FN_NUMBER to 1.  If argument is PAGE, creates
-\#   toggle #RESET_FN_NUMBER which is checked in HEADER.  If 1,
-\#   numbered footnotes on every page start at 1.
-\#
-.MAC RESET_FOOTNOTE_NUMBER END
-.    ie '\\$1'' .nr #FN_NUMBER 0 1
-.    el .nr #RESET_FN_NUMBER 1
-.END
-\#
-\# FOOTNOTE RULE LENGTH
-\# --------------------
-\# *Arguments:
-\#   <length of rule used to separate footnotes from running text>
-\# *Function:
-\#   Creates or modifies registers #FN_RULE_LENGTH.
-\# *Notes:
-\#   Requires unit of measure (iPpcm).
-\#   Default is 4P for both PRINTSTYLEs.
-\#
-.MAC FOOTNOTE_RULE_LENGTH END
-.    nr #FN_RULE_LENGTH (\\$1)
-.END
-\#
-\# FOOTNOTE_RULE_ADJ
-\# -----------------
-\# *Arguments:
-\#   <number of points to raise footnote rule from it's baseline position>
-\# *Function:
-\#   Creates or modifies register #FN_RULE_ADJ.
-\# *Notes:
-\#   Default is 3p for both TYPESTYLES.
-\#
-\#   Requires unit of measure.
-\#
-.MAC FOOTNOTE_RULE_ADJ END
-.    nr #FN_RULE_ADJ (\\$1)
-.END
-\#
-\# FOOTNOTE RULE
-\# -------------
-\# *Arguments:
-\#   <none> | <anything>
-\# *Function:
-\#   Turns printing of footnote separator rule on or off.  If invoked as
-\#   PRINT_FOOTNOTE_RULE, prints footnote separator rule.
-\# *Notes:
-\#   Default is on.
-\#
-\#   Invoked in FOOTNOTE (as PRINT_FOOTNOTE_RULE) as 1st line of a footnote
-\#   if the footnote number (#FN_COUNT) is 1.
-\#
-.MAC FOOTNOTE_RULE END
-.    ie '\\$0'PRINT_FOOTNOTE_RULE' \{\
-.       if \\n[#FN_RULE]=0 .RLD 1v
-.       RLD 1v
-.       LEFT
-\v'-\\n[#FN_RULE_ADJ]u-\\n[#FN_RULE_WEIGHT_ADJ]u'\
-\D't \\n[#FN_RULE_WEIGHT]'\
-\h'-\\n[#FN_RULE_WEIGHT]u'\
-\D'l \\n[#FN_RULE_LENGTH]u 0'\
-\v'+\\n[#FN_RULE_ADJ]u+\\n[#FN_RULE_WEIGHT_ADJ]u'
-\!.     ps \\n[#DOC_PT_SIZE]u\\*$[FN_SIZE_CHANGE]
-.       QUAD \\*[$FN_QUAD]
-.    \}
-.    el \{\
-.       ie '\\$1'' .nr #FN_RULE 1
-.       el .nr #FN_RULE 0
-.    \}
-.END
-\#
-\# FOOTNOTE SPACING
-\# ----------------
-\# *Arguments:
-\#   <per item post footnote spacing> | <anything>
-\# *Function:
-\#   Enables printing of post footnote spacing.
-\# *Notes:
-\#   Default is no space.
-\#
-.MAC FOOTNOTE_SPACING END
-.    ie \B'\\$1' .ds $FN_SPACE \\$1
-.    el .rm $FN_SPACE
-.END
-\#
-\# RUN ON FOOTNOTES
-\# ----------------
-\# *Arguments:
-\#   <none> | <anything>
-\# *Function:
-\#   Toggles run-on footnotes on or off.
-\#
-.MAC FOOTNOTES_RUN_ON END
-.    ie '\\$1'' \{\
-.       if \\n[#FN_COUNT]>0 \{\
-.          tm1 "[mom]: Switching to run-on footnotes at line \\n[.c] will cause
-.          tm1 "       you to loose footnotes already formatted for this page.
-.          tm1 "       Ignoring request FOOTNOTES_RUN_ON.
-.          rr #RUN_ON
-.          return
-.       \}
-.       nr #RUN_ON 1
-.       if \\n[#FN_MARKER_STYLE]=1 .RUNON_WARNING
-.       if \\n[#FN_MARKER_STYLE]=2 .RUNON_WARNING
-.    \}
-.    el \{\
-.       if \\n[#FN_COUNT]>0 \{\
-.          if \\n[#RUN_ON]=1 \{\
-.             tm1 "[mom]: Switching off run-on footnotes at line \\n[.c] will cause
-.             tm1 "       you to loose footnotes already formatted for this page.
-.             tm1 "       Ignoring request FOOTNOTES_RUN_ON \\$1.
-.             return
-.          \}
-.       \}
-.       rr #RUN_ON
-.    \}
-.END
-\#
-.MAC RUNON_WARNING END
-.    if \\n[#FN_MARKER_STYLE]=1 \{\
-.       tm1 "[mom]: The footnote marker style active at line \\n[.c] is STAR,
-.       tm1 "       which is incompatible with run-on footnotes.  Please change
-.       tm1 "       the footnote marker style to LINE.  Continuing to process,
-.       tm1 "       but ignoring request FOOTNOTES_RUN_ON.
-.       rr #RUN_ON
-.    \}
-.    if \\n[#FN_MARKER_STYLE]=2 \{\
-.       tm1 "[mom]: The footnote marker style active at line \\n[.c] is NUMBER,
-.       tm1 "       which is incompatible with run-on footnotes.  Please change
-.       tm1 "       the footnote marker style to LINE.  Continuing to process,
-.       tm1 "       but ignoring request FOOTNOTES_RUN_ON.
-.       rr #RUN_ON
-.    \}
-.END
-\#
-\# FOOTNOTE
-\# --------
-\# *Arguments:
-\#   <none> | INDENT  L|LEFT|R|RIGHT|B|BOTH  <indent value> | <anything>
-\# *Function:
-\#   Begins collecting and diverting footnote text if no argument
-\#   given.  Otherwise, ends diversion FOOTNOTES, measures footnote
-\#   depth, and sets footnote trap.
-\# *Notes:
-\#   The input line preceding a footnote call MUST terminate with \c
-\#   or the footnote marker will be spaced away from the word it
-\#   should be joined to.
-\#
-\#   If FOOTNOTE is invoked with INDENT, the footnote will
-\#   be indented.  An indent style and an indent value must be given.
-\#   Subsequent footnotes will NOT be indented; INDENT must be given
-\#   for each footnote the user wants indented.
-\#
-.MAC FOOTNOTE END
-.    ie '\\$1'' \{\
-.       if \\n[#UNDERLINE_ON] \{\
-.          UNDERLINE OFF
-.          nr #UNDERLINE_WAS_ON_FN 1
-.       \}
-.       if \\n[#FN_MARKER_STYLE]=3 \{\
-.          if !\\n[#LINENUMBERS] \{\
-.             tm1 "[mom]: Line numbering must be enabled with NUMBER_LINES when
-.             tm1 "       FOOTNOTE_MARKER_STYLE is LINE.
-.             ab Aborting '\\n[.F]' at \\$0, line \\n[.c].
-.          \}
-.          if \\n[#FN_MARK]=0 .nr #FN_MARK \\n[ln]
-.          nr #FN_MARK_2 \\n[ln]
-.          if '\\n[.z]'P_QUOTE' \{\
-.             nr #FN_MARK -1
-.             nr #FN_MARK_2 -1
-.          \}
-.          if \\n[#IN_DIVER]=1 \{\
-.             if '\\n[.z]'P_QUOTE' \{\
-.                if !\\n[#QUOTE_LN]=1 \{\
-.                   if !\\n[#SILENT_QUOTE_LN]=1 \{\
-.                      tm1 "[mom]: You have requested a line-numbered footnote inside a
-.                      tm1 "       QUOTE at line \\n[.c], but line-numbering has not been enabled
-.                      tm1 "       for QUOTES.  Printing footnote with label "0".
-.                      rr #FN_MARK
-.                      rr #FN_MARK_2
-.                   \}
-.                \}
-.             \}
-.             if '\\n[.z]'B_QUOTE' \{\
-.                if !\\n[#BQUOTE_LN]=1 \{\
-.                   if !\\n[#SILENT_BQUOTE_LN]=1 \{\
-.                      tm1 "[mom]: You have requested a line-numbered footnote inside a
-.                      tm1 "       BLOCKQUOTE at line \\n[.c], but line-numbering has not been enabled
-.                      tm1 "       for BLOCKQUOTES.  Printing footnote with label "0".
-.                      rr #FN_MARK
-.                      rr #FN_MARK_2
-.                   \}
-.                \}
-.             \}
-.          \}
-.       \}
-.\" Begin processing footnotes that occur inside QUOTE, BLOCKQUOTE
-.\" or EPIGRAPH.
-.       if \\n[#IN_DIVER]=1 \{\
-.          nr #PAGE_POS \\n[nl]+\\n[.d]+\\n[#DOC_LEAD]
-.          nr #FOOTER_POS \\n[#PAGE_LENGTH]+(\\n[#VARIABLE_FOOTER_POS]-1)
-.          nr #SPACE_TO_FOOTER \\n[#FOOTER_POS]-\\n[#PAGE_POS]
-.\" Are we on a "defer" line?  If so, defer the text of the footnote.
-.          ie \\n[#SPACE_TO_FOOTER]<=\\n[#DOC_LEAD] \
-.             nr #DIVER_FN 2 \" treat like a normal deferred footnote
-.          el \
-.             nr #DIVER_FN 2 \" treat like a normal footnote
-.          if \\n[#PAGE_POS]>\\n[#FOOTER_POS] \
-.             nr #DIVER_FN 1 \" move this footnote
-.\" Test for situation where, because a final line of QUOTE, BLOCKQUOTE
-.\" or EPIGRAPH isn't yet adjusted at this point, the last word on the
-.\" line may *seem* to belong to the final line of the page, but will,
-.\" in fact, become the first word of the subsequent page.  In such
-.\" circumstances, we want the the footnote to be treated as a "moved"
-.\" diversion footnote.
-.          if \\n[.k]>\\n[.l] .nr #DIVER_FN 1
-.          if r #DIVER_FN \{\
-.             if !\\n[#DIVER_FN]=2 .\\n+[#DONE_ONCE]
-.\" A footnote inside a diversion will become the 1st footnote on the
-.\" following page/column.
-.             if \\n[#DIVER_FN]=1 .DIVER_FN_1_PRE
-.\" A footnote inside a diversion that should be treated like a
-.\" normal footnote (including defers.)
-.             if \\n[#DIVER_FN]=2 .DIVER_FN_2_PRE
-.          \}
-.          nr #SAVED_FN_COUNT \\n[#FN_COUNT]+1
-.          nr #SAVED_FN_COUNT_FOR_COLS \\n[#FN_COUNT_FOR_COLS]+1
-.       \}
-.\" End processing footnotes that occur inside QUOTE, BLOCKQUOTE or
-.\" EPIGRAPH.
-.\"
-.\" Test for situation where, because a final line of running text
-.\" isn't yet adjusted at this point, the last word on the line may
-.\" *seem* to belong to the final line of the page, but will, in
-.\" fact, become the first word of the subsequent page.  In such
-.\" circumstances, we want the footnote marker in running text to
-.\" be the correct one for the 1st footnote on the page.
-.       if \\n[.k]>\\n[.l] \{\
-.          if (\\n[nl]+\\n[#DOC_LEAD])>(\\n[#PAGE_LENGTH]+\\n[#VARIABLE_FOOTER_POS]) \{\
-.             ie \\n[#COLUMNS]=1 \{\
-.                if \\n[#COL_NUM]=\\n[#NUM_COLS] \{\
-.                   if \\n[#FN_MARKER_STYLE]=1 .nr #FN_COUNT_FOR_COLS 0 1
-.                   if \\n[#FN_MARKER_STYLE]=2 \{\
-.                      if \\n[#RESET_FN_NUMBER] \{\
-.                         nr #FN_NUMBER 0 1
-.                         nr #NOT_YET_ADJUSTED 1
-.                      \}
-.                   \}
-.                \}
-.             \}
-.             el \{\
-.                if \\n[#FN_MARKER_STYLE]=1 .nr #FN_COUNT 0 1
-.                if \\n[#FN_MARKER_STYLE]=2 \{\
-.                   if \\n[#RESET_FN_NUMBER] \{\
-.                      nr #FN_NUMBER 0 1
-.                      nr #NOT_YET_ADJUSTED 1
-.                   \}
-.                \}
-.             \}
-.          \}
-.       \}
-.       if \\n[#FN_MARKERS] \{\
-.\" Housekeeping
-.          if \\n[#CONDENSE] \*[CONDX]\c
-.          if \\n[#EXTEND] \*[EXTX]\c
-.\" Add footnote markers to running text...
-.          if !\\n[#NO_FN_MARKER] \{\
-.\" ...but not if TERMINATE has not been called
-.             if !r#TERMINATE \{\
-.\" Marker style star/dagger/double-dagger
-.                if \\n[#FN_MARKER_STYLE]=1 \{\
-.\" Columnar docs either move col to col, or last col to next page.
-.\" They require their own special FN_COUNT because regular FN_COUNT
-.\" is used to figure out things like whether or not to put a rule
-.\" above footnotes (in addition to keeping track of the footnote
-.\" count in non-columnar docs).
-.                   ie \\n[#COLUMNS]=1 \{\
-.                      if \\n[#FN_COUNT_FOR_COLS]=0 .PRINT \*[BU2]*\c
-.                      if \\n[#FN_COUNT_FOR_COLS]=1 .PRINT \*[BU1]\[dg]\c
-.                      if \\n[#FN_COUNT_FOR_COLS]=2 .PRINT \[dd]\c
-.                      if \\n[#FN_COUNT_FOR_COLS]=3 .PRINT \*[BU2]**\c
-.                      if \\n[#FN_COUNT_FOR_COLS]=4 .PRINT \*[BU1]\[dg]\[dg]\c
-.                      if \\n[#FN_COUNT_FOR_COLS]=5 .PRINT \[dd]\[dd]\c
-.                      if \\n[#FN_COUNT_FOR_COLS]=6 .PRINT \*[BU2]***\c
-.                      if \\n[#FN_COUNT_FOR_COLS]=7 .PRINT \*[BU1]\[dg]\[dg]\[dg]\c
-.                      if \\n[#FN_COUNT_FOR_COLS]=8 .PRINT \[dd]\[dd]\[dd]\c
-.                      if \\n[#FN_COUNT_FOR_COLS]=9 .PRINT \*[BU2]****\c
-.                   \}
-.                   el \{\
-.                      if \\n[#FN_COUNT]=0 .PRINT \*[BU2]*\c
-.                      if \\n[#FN_COUNT]=1 .PRINT \*[BU1]\[dg]\c
-.                      if \\n[#FN_COUNT]=2 .PRINT \[dd]\c
-.                      if \\n[#FN_COUNT]=3 .PRINT \*[BU2]**\c
-.                      if \\n[#FN_COUNT]=4 .PRINT \*[BU1]\[dg]\[dg]\c
-.                      if \\n[#FN_COUNT]=5 .PRINT \[dd]\[dd]\c
-.                      if \\n[#FN_COUNT]=6 .PRINT \*[BU2]***\c
-.                      if \\n[#FN_COUNT]=7 .PRINT \*[BU1]\[dg]\[dg]\[dg]\c
-.                      if \\n[#FN_COUNT]=8 .PRINT \[dd]\[dd]\[dd]\c
-.                      if \\n[#FN_COUNT]=9 .PRINT \*[BU2]****\c
-.                   \}
-.                \}
-.\" Marker style superscript numbers
-.                if \\n[#FN_MARKER_STYLE]=2 \{\
-.                   if \\n[#PRINT_STYLE]=1 \
-.                      PRINT \
-"\s-2\v'-\\n[#DOC_LEAD]u/5u'\\n+[#FN_NUMBER]\v'+\\n[#DOC_LEAD]u/5u'\s+2\c"
-.                   if \\n[#PRINT_STYLE]=2 \
-.                      PRINT \
-"\*[SUP]\\n+[#FN_NUMBER]\*[SUPX]\c"
-.                \}
-.             \}
-.          \}
-.       \}
-.\" More housekeeping
-.\"
-.\" #SPACE_REMAINING is the space left between where we are
-.\" on the page and the bottom margin.  It's used to determine whether
-.\" or not the footnote will overflow, and how many lines of
-.\" footnotes will fit on the page if some have to overflow.
-.       ie \\n[#DIVER_FN]=2 \
-.          nr #SPACE_REMAINING (\\n[#PAGE_LENGTH]-\\n[#B_MARGIN])-(\\n[#PAGE_POS])
-.       el \
-.          nr #SPACE_REMAINING (\\n[#PAGE_LENGTH]-\\n[#B_MARGIN])-\\n[nl]
-.       if \\n[#FROM_DIVERT_FN]=1 \{\
-.          nr #SPACE_REMAINING \\n[#PAGE_LENGTH]-\\n[#B_MARGIN]
-.          rr #FROM_DIVERT_FN
-.       \}
-.       nr #PP_STYLE_PREV \\n[#PP_STYLE]
-.       nr #PP_STYLE 2
-.       if \\n[#INDENT_FIRST_PARAS] .nr #INDENT_FIRSTS 1
-.       INDENT_FIRST_PARAS
-.\" Prepare FOOTNOTE to receive footnote text.
-.       ev FOOTNOTES
-.       ll \\n[#DOC_L_LENGTH]u
-.       ta \\n[.l]u
-.       if \\n[#COLUMNS]=1 \{\
-.          ll \\n[#COL_L_LENGTH]u
-.          ta \\n[.l]u
-.       \}
-.       if \\n[#FN_R_INDENT] \{\
-.          ll -\\n[#FN_R_INDENT]u
-.          ta \\n[.l]u
-.       \}
-.       if \\n[#FN_BR_INDENT] \{\
-.          ll -\\n[#FN_BR_INDENT]u
-.          ta \\n[.l]u
-.       \}
-.       FAMILY   \\*[$FN_FAM]
-.       FT       \\*[$FN_FT]
-.       ps  \\n[#DOC_PT_SIZE]u\\*[$FN_SIZE_CHANGE]
-.       vs \\n[.ps]u+\\n[#FN_AUTOLEAD]u
-.       QUAD     \\*[$FN_QUAD]
-.       if \\n[#PRINT_STYLE]=1 \{\
-.          TYPEWRITER
-.          ie \\n[#SINGLE_SPACE] .vs \\n[#ORIGINAL_DOC_LEAD]u
-.          el .vs \\n[#ORIGINAL_DOC_LEAD]u/2u
-.          QUAD LEFT
-.          HY OFF
-.       \}
-.       nr #FN_LEAD \\n[#LEAD]
-.\" Begin diversion FOOTNOTES or FN_IN_DIVER
-.       ie r#COUNTERS_RESET \{\
-.          ie \\n[#DONE_ONCE]=1 \{\
-.             ie \\n[#RUN_ON] \{\
-.                di RUNON_FN_IN_DIVER
-.                nr #RUNON_FN_IN_DIVER 1
-.             \}
-.             el .di FN_IN_DIVER
-.          \}
-.          el \{\
-.             ie \\n[#RUN_ON] \{\
-.                da RUNON_FN_IN_DIVER
-.                nr #RUNON_FN_IN_DIVER 1
-.             \}
-.             el .da FN_IN_DIVER
-.          \}
-.       \\n+[#DONE_ONCE]
-.       \}
-.       el \{\
-.          ie \\n[#RUN_ON] \{\
-.             da RUNON_FOOTNOTES
-.             nr #RUNON_FOOTNOTES 1
-.          \}
-.          el .da FOOTNOTES
-.       \}
-.       if \\n[#FOOTNOTE_COLOR]=1 \{\
-.          TRAP OFF
-.          nf
-\m[\\*[$FOOTNOTE_COLOR]]
-.          EOL
-.          fi
-.          TRAP
-.       \}
-.       if \\n[#EPIGRAPH] .nr #FN_FOR_EPI 1
-.\" When a deferred footnote is also the 1st footnote on the page,
-.\" and when the page it's output on also has footnotes, some
-.\" whitespace is needed between the deferred footnote and the
-.\" first footnote belonging to the output page so that there's
-.\" no confusion when two stars (or two number 1s) appear in
-.\" footnotes...
-.       if \\n[#FN_DEFER_SPACE] \{\
-.\" ...but only add the extra space if TERMINATE has not been called
-.          if !r#TERMINATE \{\
-.\" ...and not if defer space has already been added
-.             if !\\n[#DEFER_SPACE_ADDED] \{\
-.\" ...and not if the footnote count the last time we checked for
-.\" a defer situation inside a diversion is greater than 1.
-.                if !\\n[#SAVED_DIVER_FN_COUNT]>1 \{\
-.                   if \\n[#FN_MARKER_STYLE]=1 .ALD 1v
-.                   if \\n[#RESET_FN_NUMBER] .ALD 1v
-.                   nr #DEFER_SPACE_ADDED 1
-.                \}
-.             \}
-.          \}
-.          rr #FN_DEFER_SPACE
-.          rr #SAVED_DIVER_FN_COUNT
-.       \}
-.       if \\n[#DIVERTED]=3 \{\
-.          if \\n[#FN_COUNT]>0 \{\
-\!.           RLD 1v
-.          \}
-.       \}
-.\" Add footnote rule (or, if no rule, some whitespace).
-.\" N.B.- this line increments #FN_COUNT each and every time FOOTNOTE
-.\" is run.
-.       if \\n+[#FN_COUNT]=1 \{\
-.\" If a footnote is called in a diversion, and the footnote has to
-.\" be moved, don't put in the rule now (it's taken care of when
-.\" FN_IN_DIVER is output into FOOTNOTE in PROCESS_FN_IN_DIVER).
-.          if !\\n[#DONT_RULE_ME]=1 \{\
-.             if !\\n[#FN_DEPTH] \{\
-.                if \\n[#PRINT_STYLE]=1 \{\
-.                   if !\\n[#RUN_ON] .sp \\n[#DOC_LEAD]u
-.                \}
-.                ie \\n[#FN_RULE]=1 \{\
-.                   if !\\n[#RUN_ON] \{\
-.                      if \\n[#SINGLE_SPACE] .sp \\n[#DOC_LEAD]u
-.                      PRINT_FOOTNOTE_RULE
-.                      if !'\\*[$FN_SPACE]'' .sp -\\*[$FN_SPACE]
-.                   \}
-.                \}
-.                el .sp 1v
-.                nr #RULED 1
-.             \}
-.          \}
-.       \}
-.       rr #DONT_RULE_ME
-.       ds $RESTORE_SS_VAR \\*[$SS_VAR]
-.       SS 0
-.\" Add footnote markers to footnote text...
-.       ie \\n[#FN_MARKERS] \{\
-.          if !'\\*[$FN_SPACE]'' \{\
-.             if \\n[#FN_COUNT]>0 .ALD \\*[$FN_SPACE]
-.          \}
-.          if !\\n[#NO_FN_MARKER] \{\
-.\" ...but not if TERMINATE has been called.
-.             if !r#TERMINATE \{\
-.                if \\n[#REF]=1 \{\
-.                   nr #REF_FN_INDENT (u;\\*[$REF_FN_INDENT])
-.                   ti \\n[#REF_FN_INDENT]u
-.                \}
-.                if \\n[#FN_MARKER_STYLE]=1 \{\
-.                   ie \\n[#COLUMNS]=1 \{\
-.                      \\n+[#FN_COUNT_FOR_COLS]
-.                      if \\n[#FN_COUNT_FOR_COLS]=1 .PRINT *\c
-.                      if \\n[#FN_COUNT_FOR_COLS]=2 .PRINT \[dg]\c
-.                      if \\n[#FN_COUNT_FOR_COLS]=3 .PRINT \[dd]\c
-.                      if \\n[#FN_COUNT_FOR_COLS]=4 .PRINT **\c
-.                      if \\n[#FN_COUNT_FOR_COLS]=5 .PRINT \[dg]\[dg]\c
-.                      if \\n[#FN_COUNT_FOR_COLS]=6 .PRINT \[dd]\[dd]\c
-.                      if \\n[#FN_COUNT_FOR_COLS]=7 .PRINT ***\c
-.                      if \\n[#FN_COUNT_FOR_COLS]=8 .PRINT \[dg]\[dg]\[dg]\c
-.                      if \\n[#FN_COUNT_FOR_COLS]=9 .PRINT \[dd]\[dd]\[dd]\c
-.                      if \\n[#FN_COUNT_FOR_COLS]=10 .PRINT ****\c
-.                   \}
-.                   el \{\
-.                      if \\n[#FN_COUNT]=1 .PRINT *\c
-.                      if \\n[#FN_COUNT]=2 .PRINT \[dg]\c
-.                      if \\n[#FN_COUNT]=3 .PRINT \[dd]\c
-.                      if \\n[#FN_COUNT]=4 .PRINT **\c
-.                      if \\n[#FN_COUNT]=5 .PRINT \[dg]\[dg]\c
-.                      if \\n[#FN_COUNT]=6 .PRINT \[dd]\[dd]\c
-.                      if \\n[#FN_COUNT]=7 .PRINT ***\c
-.                      if \\n[#FN_COUNT]=8 .PRINT \[dg]\[dg]\[dg]\c
-.                      if \\n[#FN_COUNT]=9 .PRINT \[dd]\[dd]\[dd]\c
-.                      if \\n[#FN_COUNT]=10 .PRINT ****\c
-.                   \}
-.                \}
-.                if \\n[#FN_MARKER_STYLE]=2 \{\
-.                   ds $FN_NUMBER \\n[#FN_NUMBER]
-.                   length #FN_NUMBER_LENGTH \\*[$FN_NUMBER]
-.                   if \\n[#COLUMNS]=1 \{\
-.                      \\n+[#FN_COUNT_FOR_COLS]
-.                   \}
-.                   if \\n[#NOT_YET_ADJUSTED]=1 \{\
-.                      nr #FN_NUMBER 1 1
-.                      rr #NOT_YET_ADJUSTED
-.                   \}
-.                   if \\n[#PRINT_STYLE]=1 \{\
-.                      ie \\n[#NO_SUPERSCRIPT] \{\
-.                         ie \\n[#FN_NUMBER_LENGTH]<\\n[#FN_NUMBER_PLACEHOLDERS] \
-.                            PRINT "\0(\\n[#FN_NUMBER])\|\c"
-.                         el \
-.                            PRINT "(\\n[#FN_NUMBER])\|\c"
-.                      \}
-.                      el \{\
-.                         ie \\n[#FN_NUMBER_LENGTH]<\\n[#FN_NUMBER_PLACEHOLDERS] \
-.                            PRINT \
-"\s-2\v'-\\n[.v]u/5u'\0\\n[#FN_NUMBER]\|\v'+\\n[.v]u/5u'\s+2\|\c"
-.                         el \
-.                            PRINT \
-"\s-2\v'-\\n[.v]u/5u'\\n[#FN_NUMBER]\|\v'+\\n[.v]u/5u'\s+2\|\c"
-.                      \}
-.                   \}
-.                   if \\n[#PRINT_STYLE]=2 \{\
-.                      ie \\n[#FN_NUMBER_LENGTH]<\\n[#FN_NUMBER_PLACEHOLDERS] \
-.                         PRINT "\*[SUP]\0\\n[#FN_NUMBER]\*[SUPX]\*[FU 3]\c"
-.                      el \
-.                         PRINT "\*[SUP]\\n[#FN_NUMBER]\*[SUPX]\*[FU 3]\c"
-.                   \}
-.                \}
-.             \}
-.          \}
-.       \}
-.       el \{\
-.\" Line-numbered footnotes handling
-.          if \\n[#FN_MARKER_STYLE]=3 \{\
-.             if \\n[#FN_SPACE]>0 \{\
-.                if !\\n[#RUN_ON]=1 \
-.                   if \\n[#FN_COUNT]>0 .ALD \\n[#FN_SPACE]u
-.             \}
-.             if \\n[#REF]=1 \{\
-.                if !\\n[#RUN_ON]=1 \{\
-\!.                 ti +\\n[#REF_FN_INDENT]u
-.                \}
-.             \}
-.             ie \\n[#FN_LN_BRACKETS]=1 \{\
-.                ds $FN_LINENUMBER \v'-.085m'\\*[$FN_OPEN_BRACKET]\v'.085m'
-.                ie \\n[#FN_MARK_2]=\\n[#FN_MARK] \
-.                   as $FN_LINENUMBER \
-\\n[#FN_MARK]\v'-.085m'\\*[$FN_CLOSE_BRACKET]\v'.085m'\h'.25m'
-.                el \
-.                   as $FN_LINENUMBER \
-\\n[#FN_MARK]\v'-.1m'-\v'.1m'\\n[#FN_MARK_2]\v'-.085m'\
-\\*[$FN_CLOSE_BRACKET]\v'.085m'\h'.25m'
-.             \}
-.             el \{\
-.                ie \\n[#FN_MARK_2]=\\n[#FN_MARK] \
-.                   ds $FN_LINENUMBER \\n[#FN_MARK]\\*[$FN_LN_SEP]
-.                el \
-.                   ds $FN_LINENUMBER \
-\\n[#FN_MARK]\v'-.1m'-\v'.1m'\\n[#FN_MARK_2]\\*[$FN_LN_SEP]
-.                \}
-.             \}
-.             if !\\n[#NO_FN_MARKER] \
-.                PRINT \\*[$FN_LINENUMBER]\c
-.             rm $FN_LINENUMBER
-.             nr #FN_MARK 0
-.          \}
-.       \}
-.    \}
-.    el \{\
-.\" If INDENT arg is passed to FOOTNOTE, calculate the indent...
-.       ie '\\$1'INDENT' \{\
-.          ev FOOTNOTES
-.          if '\\$2'L' .in (\\$3)
-.          if '\\$2'LEFT' .in (\\$3)
-.          if '\\$2'R' .nr #FN_R_INDENT (\\$3)
-.          if '\\$2'RIGHT' .nr #FN_R_INDENT (\\$3)
-.          if '\\$2'B' \{\
-.             nr #FN_BL_INDENT (\\$3)
-.             ie '\\$4'' .nr #FN_BR_INDENT \\n[#FN_BL_INDENT]
-.             el .nr #FN_BR_INDENT (\\$4)
-.             in \\n[#FN_BL_INDENT]u
-.          \}
-.          if '\\$2'BOTH' \{\
-.             nr #FN_BL_INDENT (\\$3)
-.             ie '\\$4'' .nr #FN_BR_INDENT \\n[#FN_BL_INDENT]
-.             el .nr #FN_BR_INDENT (\\$4)
-.             in \\n[#FN_BL_INDENT]u
-.          \}
-.          ev
-.\" ...then re-run FOOTNOTE without an argument.
-.          FOOTNOTE
-.       \}
-.       el \{\
-.          br
-.\" Add "defer space" if the previously diverted footnote was the
-.\" 1st footnote proper to its page (i.e. it looks like a deferred
-.\" footnote but it's really an overflow).
-.          if \\n[#DIVERTED] \{\
-.             if \\n[#PREV_FN_DEFERRED]=1 \{\
-.                if \\n[#FN_MARKER_STYLE]=1 .ALD \\n[#FN_LEAD]u
-.                if \\n[#RESET_FN_NUMBER] .ALD \\n[#FN_LEAD]u
-.                nr #PREV_FN_DEFERRED 2
-.             \}
-.          \}
-.          if \\n[#REF]=1 \{\
-\!.           in
-.          \}
-.\" Terminate FOOTNOTES or FN_IN_DIVER diversion
-.          di
-.          HY_SET 1 \\n[#DIVERSIONS_HY_MARGIN]u (\\n[#PT_SIZE]u/1000u/8u)p
-.          hy 14
-.\" More housekeeping
-.\" Turn off indent possibly set by FOOTNOTE INDENT
-.          in 0
-.          ev
-.          if \\n[#UNDERLINE_WAS_ON_FN] \{\
-.             UNDERLINE
-.             rr #UNDERLINE_WAS_ON_FN
-.          \}
-.\" Restore sentence spacing
-.          if \\n[#PRINT_STYLE]=2 \{\
-.             if d $RESTORE_SS_VAR .SS \\*[$RESTORE_SS_VAR]
-.             rm $RESTORE_SS_VAR
-.          \}
-.          rr #FN_R_INDENT
-.          rr #FN_BR_INDENT
-.          nr #PP_STYLE \\n[#PP_STYLE_PREV]
-.          if !\\n[#INDENT_FIRSTS] .INDENT_FIRST_PARAS OFF
-.          rr #INDENT_FIRSTS
-.\" Calculate footnote depth, but not if #COUNTERS_RESET (created in
-.\" DIVER_FN_1_PRE) to instruct FOOTNOTES to skip this step for now
-.\" (it's taken care of when FN_IN_DIVER is output into FOOTNOTES in
-.\" PROCESS_FN_IN_DIVER).
-.          ie r#COUNTERS_RESET .rr #COUNTERS_RESET
-.          el \{\
-.             nr #GET_DEPTH 1
-.\" If the footnote is the 1st on the page and it falls too close
-.\" to the bottom margin, defer the footnote text to the next page...
-.             if (\\n[#SPACE_REMAINING]-1)<=(\\n[.v]) \{\
-.\" ...but not if PROCESS_FN_LEFTOVER has set #PREV_FN_DEFERRED to 1
-.                if !\\n[#PREV_FN_DEFERRED]=1 \{\
-.                   nr #FN_DEFER 1
-.                   nr #FN_DEPTH +\\n[#DIVER_DEPTH]
-.                   rr #GET_DEPTH
-.\" This is required so that the defer space clause can distinguish
-.\" a real #FN_COUNT=1 from one generated if FOOTNOTE is run inside
-.\" QUOTE, BLOCKQUOTE or EPIGRAPH
-.                   if \\n[#DIVER_FN]=2 \{\
-.                      nr #SAVED_DIVER_FN_COUNT \\n[#FN_COUNT]
-.                      rr #DIVER_FN
-.                   \}
-.                \}
-.             \}
-.\" Calculate the footnote depth.
-.             if \\n[#GET_DEPTH]=1 \{\
-.\" Save the previous footnote depth (for use when there will be
-.\" some overflowed footnote text).
-.                nr #SAVED_FN_DEPTH_1 \\n[#FN_DEPTH]
-.\" Add the depth of the current footnote to any already existent
-.\" footnotes.
-.                nr #FN_DEPTH +\\n[#DIVER_DEPTH]
-.\" Special handling for run-on footnotes
-.                if \\n[#RUN_ON]=1 \{\
-.                   if \\n[#RUNON_FOOTNOTES]   .unformat RUNON_FOOTNOTES
-.                   if \\n[#RUNON_FN_IN_DIVER] .unformat RUNON_FN_IN_DIVER
-.                   ev FOOTNOTES
-.\" Recreate FOOTNOTES with rule followed by text of unformatted
-.\" run-on footnotes.
-.                   di FOOTNOTES
-.                   ie \\n[#FN_RULE]=0 .RLD 1v
-.                   el \{\
-\v'-\\n[#FN_RULE_ADJ]u-\\n[#FN_RULE_WEIGHT_ADJ]u'\
-\D't \\n[#FN_RULE_WEIGHT]'\
-\h'-\\n[#FN_RULE_WEIGHT]u'\
-\D'l \\n[#FN_RULE_LENGTH]u 0'\
-\v'+\\n[#FN_RULE_ADJ]u+\\n[#FN_RULE_WEIGHT_ADJ]u'
-.                   \}
-.                   br
-.                   if \\n[#RUNON_FOOTNOTES] \{\
-.                      RUNON_FOOTNOTES
-.                      rr #RUNON_FOOTNOTES
-.                   \}
-.                   if \\n[#RUNON_FN_IN_DIVER] \{\
-.                      RUNON_FN_IN_DIVER
-.                      rr #RUNON_FN_IN_DIVER
-.                   \}
-.                   br
-.                   di
-.                   ev
-.                   nr #FN_DEPTH \\n[#DIVER_DEPTH]
-.                   nr #SAVED_VFP 0+\\n[#VARIABLE_FOOTER_POS]
-.                   nr #VARIABLE_FOOTER_POS 0-\\n[#B_MARGIN]u
-.                \}
-.\" Save the new depth
-.                nr #SAVED_FN_DEPTH_2 \\n[#FN_DEPTH]
-.\" Signal that defer space should be added when PROCESS_FN_LEFTOVER
-.\" processes deferred footnotes.
-.                if \\n[#FN_DEFER] \{\
-.                   if \\n[#FN_COUNT]=2 \{\
-.                      ie \\n[#COLUMNS] \{\
-.                         if !\\n[#FROM_FOOTER] \{\
-.                            if \\n[#FN_DEFER]=1 .nr #FN_DEFER_SPACE 1
-.                            if \\n[#FN_COUNT_FOR_COLS]>=1 .rr #FN_DEFER_SPACE
-.                            if \\n[#FROM_HEADER] .nr #FN_DEFER_SPACE 1
-.                         \}
-.                      \}
-.                      el .nr #FN_DEFER_SPACE 1
-.                   \}
-.                   rr #FN_DEFER
-.                \}
-.\" If the depth of the whole footnote won't fit in the space
-.\" between where we are on the page and the bottom margin, calculate
-.\" how much of it will fit.
-.                if \\n[#FN_DEPTH]>\\n[#SPACE_REMAINING] \{\
-.                   nr #FN_LINES 0 1
-.                   while (\\n+[#FN_LINES]*\\n[#FN_LEAD])<\\n[#SPACE_REMAINING] \{\
-.                      nr #FN_DEPTH (\\n[#FN_LINES]*\\n[#FN_LEAD])
-.                   \}
-.                   nr #VFP_DIFF \\n[#FN_DEPTH]-\\n[#SAVED_FN_DEPTH_1]
-.                   nr #OVERFLOW 1
-.\" Very occasionally, #VFP_DIFF, on a 1st footnote that isn't to
-.\" be deferred, comes up with a depth equal to exactly 1 line
-.\" of footnotes, i.e. enough room to print the rule and nothing
-.\" else.  The following tests for such a condition, and rather than
-.\" attempting to treat the footnote as an overflow, it tells mom to
-.\" treat it as a special kind of deferred footnote (#FN_DEFER 2).
-.                   if \\n[#SAVED_FN_DEPTH_1]=0 \{\
-.                      if \\n[#FN_DEPTH]=\\n[#FN_LEAD] \{\
-.                         nr #FN_DEFER 2
-.                         nr #FN_DEPTH \\n[#SAVED_FN_DEPTH_2]
-.                         rr #OVERFLOW
-.                      \}
-.                   \}
-.                \}
-.\" Calculate VFP based on whether the footnote overflows, or is to
-.\" be treated normally.
-.                ie \\n[#OVERFLOW]=1 \{\
-.                   if \\n[#RUN_ON] \{\
-.                      rr #VARIABLE_FOOTER_POS
-.                      nr #VARIABLE_FOOTER_POS \\n[#SAVED_VFP]
-.                   \}
-.                   ie \\n[#FN_COUNT]=1 \{\
-.                      ie \\n[#RULED]=1 \{\
-.                         ie \\n[#COLUMNS]=1 \{\
-.                            ie \\n[#COL_NUM]=\\n[#NUM_COLS] \{\
-.                               ie \\n[#FROM_FOOTER] \{\
-.                                  ie \\n[#FN_COUNT_FOR_COLS]>1 \{\
-.                                     nr #FN_DEPTH -\\n[#FN_DEPTH]
-.                                     if \\n[#DIVERTED]=1 .nr #DIVERTED 3
-.                                     if !\\n[#PREV_FN_DEFERRED]=1 \
-.                                        nr #FN_DEPTH -\\n[#VFP_DIFF]
-.                                  \}
-.                                  el \{\
-.                                     nr #VARIABLE_FOOTER_POS -\\n[#FN_DEPTH]
-.                                     if \\n[#DIVERTED]=1 .nr #DIVERTED 3
-.                                  \}
-.                               \}
-.                               el .nr #VARIABLE_FOOTER_POS -(\\n[#FN_DEPTH])
-.                            \}
-.                            el .nr #VARIABLE_FOOTER_POS -(\\n[#FN_DEPTH])
-.                         \}
-.                         el .nr #VARIABLE_FOOTER_POS -(\\n[#FN_DEPTH])
-.                      \}
-.                      el \{\
-.                         nr #VARIABLE_FOOTER_POS -\\n[#VFP_DIFF]
-.                         if \\n[#DIVERTED]=1 .nr #DIVERTED 3
-.                         if !\\n[#PREV_FN_DEFERRED]=1 \{\
-.                            ie \\n[#COLUMNS]=1 \{\
-.                               if !\\n[#FROM_FOOTER] .
-.                            \}
-.                            el .nr #FN_DEPTH -\\n[#VFP_DIFF]
-.                         \}
-.                         if \\n[#DIVERTED]=3 \{\
-.                            if !\\n[#PREV_FN_DEFERRED] \{\
-.                               if !\\n[#FROM_FOOTER] \{\
-.                                  if \\n[#FN_COUNT]=1 \{\
-.                                     if !\\n[#VFP_DIFF] \{\
-.                                        if \\n[#FN_MARKER_STYLE]=1 \{\
-.                                           da FOOTNOTES
-\!.                                            ALD \\n[#FN_LEAD]u
-.                                           di
-.                                        \}
-.                                        if \\n[#RESET_FN_NUMBER] \{\
-.                                           da FOOTNOTES
-\!.                                            ALD \\n[#FN_LEAD]u
-.                                           di
-.                                        \}
-.                                     \}
-.                                  \}
-.                               \}
-.                            \}
-.                         \}
-.                      \}
-.                      nr #FN_DEPTH \\n[#SAVED_FN_DEPTH_1]+\\n[#VFP_DIFF]
-.                   \}
-.                   el \{\
-.                      nr #VARIABLE_FOOTER_POS -\\n[#VFP_DIFF]
-.                      nr #FN_DEPTH \\n[#SAVED_FN_DEPTH_1]+\\n[#VFP_DIFF]
-.                   \}
-.                   rr #OVERFLOW
-.                   rr #RULED
-.                \}
-.                el \{\
-.                   nr #VARIABLE_FOOTER_POS -\\n[#DIVER_DEPTH]
-.                   if \\n[#PREV_FN_DEFERRED]=1 \{\
-.                      if \\n[#DIVERTED] \{\
-.                         if !\\n[#FN_DEPTH]=\\n[#SAVED_FN_DEPTH_1] \{\
-.                            nr #FN_DEPTH +\\n[#FN_LEAD]
-.                            nr #VARIABLE_FOOTER_POS -\\n[#FN_LEAD]
-.                            rr #PREV_FN_DEFERRED
-.                         \}
-.                      \}
-.                   \}
-.                   if \\n[#FN_COUNT]>1 \{\
-.                      nr #NO_BACK_UP 1
-.                      rr #DIVERTED
-.                      rr #RULED
-.                   \}
-.                \}
-.             \}
-.          \}
-.          ch FOOTER \\n[#VARIABLE_FOOTER_POS]u
-.\" If we have a footnote whose text has to be deferred to the next
-.\" page, reset the FOOTER trap to its original location.
-.          if \\n[#FN_DEFER] \{\
-.             nr #VARIABLE_FOOTER_POS 0-\\n[#B_MARGIN]u
-.             ch FOOTER \\n[#VARIABLE_FOOTER_POS]u
-.          \}
-.       \}
-.       nr #NO_FN_MARKER 0
-.    \}
-.    if \\n[#NUM_ARGS]=2 \{\
-.       if '\\$2'BREAK' .BR
-.       if '\\$2'BR' .BR
-.    \}
-.END
-\#
-\# Utility macros to manage footnotes that occur inside diversions
-\# ---------------------------------------------------------------
-\#
-\# There are some redundancies here; they're left in in case unforeseen
-\# footnote situations crop up in the future that might require
-\# manipulation of them.
-\#
-\# 1. Pre-footnote processing for footnotes in diversions
-\#
-\# a) A footnote inside a diversion will be moved entirely (marker
-\# in running text and text of footnote) to the next page/column.
-\#
-.MAC DIVER_FN_1_PRE END
-.    nr #RESET_FN_COUNTERS 1
-.    nr #COUNTERS_RESET 1
-.    if \\n[#DONE_ONCE]=1 \{\
-.       if \\n[#FN_DEFER] \{\
-.          if \\n[#SAVED_DIVER_FN_COUNT]=1 \{\
-.             ie \\n[#COLUMNS]=1 \
-.                if \\n[#COL_NUM]=\\n[#NUM_COLS] .nr #FN_DEFER_SPACE 1
-.             el .nr #FN_DEFER_SPACE 1
-.          \}
-.       \}
-.       if \\n[#FN_MARKER_STYLE]=1 \{\
-.          if \\n[#FN_COUNT]>0 .nr #FN_COUNT 0 1
-.          if \\n[#COLUMNS]=1 \
-.             if \\n[#COL_NUM]=\\n[#NUM_COLS] .nr #FN_COUNT_FOR_COLS 0 1
-.       \}
-.       if \\n[#FN_MARKER_STYLE]=2 \{\
-.          if \\n[#RESET_FN_NUMBER]=1 \{\
-.             ie \\n[#COLUMNS]=1 \
-.                if \\n[#COL_NUM]=\\n[#NUM_COLS] .nr #FN_NUMBER 0 1
-.             el .nr #FN_NUMBER 0 1
-.          \}
-.       \}
-.    \}
-.END
-\#
-\# b) Treat as a normal footnote, including defers.
-\#
-.MAC DIVER_FN_2_PRE END
-.    nr #RESET_FN_COUNTERS 2
-.END
-\#
-\# 2. Post-footnote processing for footnotes in diversions
-\#
-\# Even when a footnote inside a diversion is treated as
-\# "normal," some manipulation of registers is required.  The
-\# macro is called in DO_QUOTE (i.e. at the termination of
-\# quotes and blockquotes) and in DO_EPIGRAPH.
-\#
-.MAC DIVER_FN_2_POST END
-.    if \\n[#DONE_ONCE]=1 \{\
-.       if \\n[#FN_MARKER_STYLE]=1 \{\
-.          if \\n[#FN_COUNT]=0 .nr #DONT_RULE_ME 1
-.          if \\n[#FN_COUNT]>0 .nr #FN_COUNT 0 1
-.          if \\n[#COLUMNS]=1 \{\
-.             if \\n[#COL_NUM]=\\n[#NUM_COLS] .nr #FN_COUNT_FOR_COLS 0 1
-.             if !\\n[#COL_NUM]=\\n[#NUM_COLS] .
-.          \}
-.       \}
-.       if \\n[#FN_MARKER_STYLE]=2 \{\
-.          if \\n[#FN_COUNT]=0 .nr #DONT_RULE_ME 1
-.          if \\n[#FN_COUNT]>0 .nr #FN_COUNT 0 1
-.          if \\n[#RESET_FN_NUMBER]=1 \{\
-.             ie \\n[#COLUMNS]=1 \
-.                if \\n[#COL_NUM]=\\n[#NUM_COLS] .nr #FN_NUMBER 0 1
-.             el .nr #FN_NUMBER 0 1
-.          \}
-.       \}
-.    \}
-.END
-\#
-\# The main macros that handle footnote processing.
-\# -----------------------------------------------
-\#
-\# FN_OVERFLOW_TRAP starts off "underneath" FOOTER, but is revealed
-\# as #VARIABLE_FOOTER_POSITION changes the position of FOOTER.
-\# FN_OVERFLOW_TRAP simply starts diversion FN_OVERFLOW to "catch"
-\# the overflow.  The diversion is ended in FOOTER, immediately after
-\# FOOTER outputs the diversion, FOOTNOTES, before PROCESS_FN_LEFTOVER
-\# is run (either in HEADER, or in FOOTER if moving col to col).
-\#
-.MAC FN_OVERFLOW_TRAP END
-.    if \\n[#FN_COUNT] \{\
-.       di FN_OVERFLOW
-.       ie !\\n[#NO_BACK_UP]=1 \{\
-.          if \\n[#PREV_FN_DEFERRED] \{\
-.             ie \\n[#COLUMNS]=1 \{\
-.                if \\n[#FROM_FOOTER] \{\
-.                   if \\n[#PREV_FN_DEFERRED] \{\
-.                      if !\\n[#COL_NUM]=\\n[#NUM_COLS] \
-.                      rr #PREV_FN_DEFERRED
-.                   \}
-.                \}
-.                if !\\n[#FROM_FOOTER] \{\
-.                   if !\\n[#COL_NUM]=\\n[#NUM_COLS] \{\
-.                      if !\\n[#LAST_FN_COUNT_FOR_COLS]>1 \{\
-\!.                       RLD \\n[#FN_LEAD]u
-.                      \}
-.                   \}
-.                \}
-.             \}
-.             el \{\
-\!.              RLD \\n[#FN_LEAD]u
-.             \}
-.          \}
-.       \}
-.       el \{\
-.          rr #NO_BACK_UP
-.          rr #PREV_FN_DEFERRED
-.       \}
-.    \}
-.\" When #FROM_DIVERT_FN is 1, it signals to FOOTNOTE, when run from
-.\" within DIVERT_FN_LEFTOVER, to set #SPACE_REMAINING to the total
-.\" area allowable for running text.
-\#.    nr #FROM_DIVERT_FN 1
-.END
-\#
-\# PROCESS_FN_LEFTOVER is called at the top of HEADER, and in
-\# FOOTER if we're moving from one column to the next (i.e. after
-\# outputting FOOTNOTES).  It checks for whether we have a "deferred
-\# footnote" situation, and resets counters and number registers
-\# accordingly.  Lastly, if we have some footnote overflow, it calls
-\# DIVERT_FN_OVERFLOW.
-\#
-.MAC PROCESS_FN_LEFTOVER END
-.    if \\n[#PREV_FN_DEFERRED]=2 \
-.       if \\n[#FN_COUNT_AT_FOOTER]>1 .rr #PREV_FN_DEFERRED
-.    ie !\\n[#FN_DEFER] \{\
-.       nr #FN_COUNT 0 1
-.       nr #FN_DEPTH 0
-.       nr #VARIABLE_FOOTER_POS 0-\\n[#B_MARGIN]
-.    \}
-.    el \{\
-.       if \\n[#FN_DEFER]=1 .nr #VARIABLE_FOOTER_POS -\\n[#FN_DEPTH]
-.       if \\n[#FN_DEFER]=2 \{\
-.          nr #FN_DEPTH 0
-.          nr #VARIABLE_FOOTER_POS 0-\\n[#B_MARGIN]
-.       \}
-.    \}
-.    nr #SPACE_REMAINING 0
-.    ch FOOTER -\\n[#B_MARGIN]u
-.    if \\n[#FN_DEFER] \{\
-.       nr #NO_FN_MARKER 1
-.       FOOTNOTE
-.       nf
-.       FOOTNOTE OFF
-.       ie \\n[#COLUMNS]=1 \{\
-.          if \\n[#COL_NUM]=\\n[#NUM_COLS] \{\
-.             if !\\n[#FROM_FOOTER] \{\
-.                if \\n[#FN_COUNT_FOR_COLS]=1 .nr #PREV_FN_DEFERRED 1
-.             \}
-.          \}
-.       \}
-.       el .nr #PREV_FN_DEFERRED 1
-.    \}
-.    if !\\n[#FN_DEFER] \
-.       if \\n[#FN_OVERFLOW_DEPTH] .DIVERT_FN_LEFTOVER
-.    ie \\n[#COLUMNS]=1 \{\
-.       if \\n[#COL_NUM]>1 \
-.          if \\n[#COL_NUM]=\\n[#NUM_COLS] .nr #FN_COUNT 0 1
-.    \}
-.    el .nr #FN_COUNT 0 1
-.    if \\n[#DIVER_FN]=2 .rr #DIVER_FN
-.    rr #FROM_DIVERT_FN
-.END
-\#
-\# DIVERT_FN_LEFTOVER is called in PROCESS_FN_LEFTOVER (at
-\# the top of HEADER, and in FOOTER if we're moving from one column
-\# to the next).
-\#
-.MAC DIVERT_FN_LEFTOVER END
-.    nr #NO_FN_MARKER 1
-.    nr #DIVERTED 1
-.    FOOTNOTE
-.    nf
-.    FN_OVERFLOW
-.    FOOTNOTE OFF
-.    if \\n[#PREV_FN_DEFERRED] \{\
-.       nr #FN_DEPTH -\\n[#FN_LEAD]
-.       nr #VARIABLE_FOOTER_POS +\\n[#FN_LEAD]
-.       ch FOOTER \\n[#VARIABLE_FOOTER_POS]u
-.       if \\n[#PREV_FN_DEFERRED]=2 \{\
-.          nr #PREV_FN_DEFERRED 1
-.          rr #DIVERTED
-.       \}
-.    \}
-.    rr #FN_OVERFLOW_DEPTH
-.END
-\#
-\# This is a special macro to deal with footnotes that are set inside
-\# diversions (QUOTE, BLOCKQUOTE and EPIGRAPH).  It's called in HEADER
-\# (and in FOOTER, if we're moving from column to column), and comes
-\# after PROCESS_FOOTNOTE_LEFTOVER in those two macros.
-\#
-.MAC PROCESS_FN_IN_DIVER END
-.    nr #SPACE_REMAINING 0
-.    ch FOOTER -\\n[#B_MARGIN]u
-.    nr #NO_FN_MARKER 1
-.    if !\\n[#RESET_FN_COUNTERS]=2 .rr #RESET_FN_COUNTERS
-.    FOOTNOTE
-.    if \\n[#FN_OVERFLOW_DEPTH] .nf
-.    ie dRUNON_FN_IN_DIVER \{\
-.       RUNON_FN_IN_DIVER
-.       rm RUNON_FN_IN_DIVER
-.    \}
-.    el \{\
-.       nf
-.       FN_IN_DIVER
-.    \}
-.    FOOTNOTE OFF
-.    rr #DIVER_FN
-.END
-\#
-\# ====================================================================
-\#
-\# +++ENDNOTES+++
-\#
-\# When endnotes are output, the spacing between the notes is always
-\# 1 extra linespace.  This can have bottom margin consequences.  If
-\# this doesn't bother you, don't worry about it.  If it does bother
-\# you, and you want to adjust the spacing between any two endnotes (as
-\# they're output), make the spacing adjustments (.ALD/.RLD) at the
-\# *end* of endnotes (i.e. just before .ENDNOTE OFF), not at the top.
-\#
-\# Endnotes must be output manually with .ENDNOTES. This allows user
-\# the flexibility to output endnotes at the end of each collated
-\# document, or to output them at the end of the entire document.
-\#
-\# Control macros
-\# --------------
-\#
-\# ENDNOTE POINT SIZE
-\# ------------------
-\# *Argument:
-\#   <base point size for endnotes>
-\# *Function:
-\#   Creates or modifies register #EN_PS.
-\# *Notes:
-\#   Default is same as running text in body of document.
-\#
-\#   This size control macro differs from other size control macros
-\#   in that it sets an absolute point size, not a relative one.  This
-\#   is because a) endnotes always appear separate from the body of
-\#   a document and therefore don't need to be relative to the body
-\#   of the document, and b) there are quite a few elements of the
-\#   endnotes page(s) that need to be relative to the base point size
-\#   of that page.  If the base endnote point size were relative to
-\#   the body of the document (i.e. a _SIZE macro taking a +|- value)
-\#   getting the rest of the endnote elements sized properly could
-\#   become very confusing.
-\#
-.MAC ENDNOTE_PT_SIZE END
-.    nr #EN_PS (p;\\$1)
-.END
-\#
-\# ENDNOTES, BIBLIOGRAPHY and TOC LEADING
-\# --------------------------------------
-\# *Argument:
-\#   <leading> [ ADJUST ]
-\# *Function:
-\#   Depending on the name by which it's called, creates or modifies
-\#   register #<type>_LEAD, where <type> is BIB, EN, or TOC.  Creates or removes
-\#   register #ADJ_<type>_LEAD.  Stores arguments in strings if BIB,
-\#   EN, or TOC leading are set before START.
-\# *Notes:
-\#   Default is same as doc lead for TYPESET, adjusted; 24 for TYPEWRITE.
-\#
-.MAC _LEAD END
-.    if '\\$0'BIBLIOGRAPHY_LEAD' .ds $SECTION BIB
-.    if '\\$0'ENDNOTE_LEAD' .ds $SECTION EN
-.    if '\\$0'TOC_LEAD' .ds $SECTION TOC
-.    ds $\\*[$SECTION]_LEAD \\$1
-.    ds $ADJUST_\\*[$SECTION]_LEAD \\$2
-.    if !\\n[#OK_PROCESS_LEAD] .return
-.    nr #\\*[$SECTION]_LEAD (p;\\$1)
-.    rr #ADJ_\\*[$SECTION]_LEAD
-.    als \\*[$SECTION]_LEAD DOC_LEAD
-.    if '\\$2'ADJUST' \{\
-.       nr #ORIG_DOC_LEAD \\n[#UNADJUSTED_DOC_LEAD]
-.       nr #RESTORE_ADJ_DOC_LEAD \\n[#ADJ_DOC_LEAD]
-.       nr #ADJ_DOC_LEAD 1
-.       nr #ADJ_\\*[$SECTION]_LEAD 1
-.       nr #NO_TRAP_RESET 1
-.       \\*[$SECTION]_LEAD \\n[#\\*[$SECTION]_LEAD]u ADJUST
-.       nr #\\*[$SECTION]_LEAD \\n[#DOC_LEAD]
-.       DOC_LEAD \\n[#ORIG_DOC_LEAD]u
-.       rr #NO_TRAP_RESET
-.       nr #ADJ_DOC_LEAD \\n[#RESTORE_ADJ_DOC_LEAD]
-.       rr #ORIG_DOC_LEAD
-.    \}
-.END
-\#
-.ALIAS BIBLIOGRAPHY_LEAD _LEAD
-.ALIAS ENDNOTE_LEAD _LEAD
-.ALIAS TOC_LEAD _LEAD
-\#
-\# ENDNOTE SPACING
-\# ----------------
-\# *Arguments:
-\#   <per item endnote spacing> | <anything>
-\# *Function:
-\#   Enables space between endnotes items.
-\# *Notes:
-\#   Default is no space.
-\#
-.MAC ENDNOTE_SPACING END
-.    ie \B'\\$1' .ds $EN_SPACE \\$1
-.    el .rm $EN_SPACE
-.END
-\#
-\# ENDNOTES_HDRFTR_CENTER
-\# ----------------------
-\# *Argument:
-\#   toggle
-\# *Function:
-\#   Creates or removes toggle register #EN_HDRFTR_CENTER, used to
-\#   determine whether mom should print a/the hdrftr center string
-\#   on the endnotes page.  Primarily to enable/disable printing of the
-\#   chapter name in hdrftrs when DOCTYPE CHAPTER.
-\# *Notes:
-\#   Default is OFF
-\#
-.MAC ENDNOTES_HDRFTR_CENTER END
-.    ie '\\$1'' .nr #EN_HDRFTR_CENTER 1
-.    el .rr #EN_HDRFTR_CENTER
-.END
-\#
-\# ENDNOTE STRING
-\# --------------
-\# *Argument:
-\#   <title for endnotes page>
-\# *Function:
-\#   Creates or modifies string $EN_STRING.
-\# *Notes:
-\#   Default is "Endnotes"
-\#
-.MAC ENDNOTE_STRING END
-.    ds $EN_STRING \\$1
-.END
-\#
-.MAC ENDNOTE_STRING_ADVANCE END
-.    nr #EN_STRING_ADVANCE (\\$1)
-.END
-\#
-\# ENDNOTE STRING CAPS
-\# -------------------
-\# *Arguments:
-\#   <none> | <anything>
-\# *Function:
-\#   Turns capitalization of the endnotes pages title string
-\#   "Endnotes" on or off.
-\# *Notes:
-\#   Users may want the endnotes pages title string to be in caps,
-\#   but the toc entry for endnotes in lower case.  If the argument
-\#   to ENDNOTE_STRING is in lower case and ENDNOTE_STRING_CAPS is
-\#   turned on, this is exactly what will happen.
-\#
-\#   Default is on.
-\#
-.MAC ENDNOTE_STRING_CAPS END
-.   ie '\\$1'' .nr #EN_STRING_CAPS 1
-.   el .nr #EN_STRING_CAPS 0
-.END
-\#
-\# ENDNOTE TITLE
-\# -------------
-\# *Argument:
-\#   <string that appears before the first endnote pertaining to any document>
-\# *Function:
-\#   Creates string $EN_TITLE.
-\# *Notes:
-\#   Default is the document title, or, if doc is a chapter, "Chapter #"
-\#
-.MAC ENDNOTE_TITLE END
-.    ds $EN_TITLE \\$1
-.END
-\#
-\# ENDNOTE MARKER STYLE
-\# --------------------
-\# *Arguments:
-\#   NUMBER | LINE | SUPERSCRIPT
-\# *Function:
-\#   Sets register #EN_MARKER_STYLE, used in ENDNOTE to determine
-\#   the style of endnote markers (labels).
-\# *Notes:
-\#   1=NUMBER; 2=LINE.  LINE means "use output line numbers".
-\#   Default is NUMBER.
-\#
-.MAC ENDNOTE_MARKER_STYLE END
-.    if '\\$1'NUMBER' .nr #EN_MARKER_STYLE 1
-.    if '\\$1'LINE' \{\
-.       nr #EN_MARKER_STYLE 2
-.       if !\\n[#EN_LN_SEP] \
-.          if !\\n[#EN_LN_BRACKETS] .ENDNOTE_LINENUMBER_BRACKETS SQUARE
-.    \}
-.    if '\\$1'SUPERSCRIPT' .nr #EN_MARKER_STYLE 3
-.END
-\#
-\# ENDNOTE LINENUMBER MARK
-\# -----------------------
-\# *Function:
-\#   This string, when called inline, stores the current output line
-\#   number in register #EN_MARK for use with ENDNOTE.
-\#
-.ds EN_MARK \R'#EN_MARK \En[ln]'
-\#
-\# ENDNOTE LINENUMBER SEPARATOR
-\# ----------------------------
-\# *Argument:
-\#   <user-defined separator>
-\# *Function:
-\#   Stores user-defined separator (for use then
-\#   ENDNOTE_MARKER_STYLE is LINE) in string $EN_LN_SEP.  The
-\#   separator is intended to be used when the user wishes a
-\#   separator, rather than the choice of brackets offered by
-\#   ENDNOTE_LINENUMBER_BRACKETS.
-\#
-.MAC ENDNOTE_LINENUMBER_SEPARATOR END
-.    rr #EN_LN_BRACKETS
-.    nr #EN_LN_SEP 1
-.    ds $EN_LN_SEP "\\$1
-.END
-\#
-\# ENDNOTE LINENUMBER BRACKETS
-\# ---------------------------
-\# *Argument:
-\#   PARENS | SQUARE | BRACES or ( | [ | {
-\# *Function:
-\#   Sets register #EN_LN_BRACKETS to 1, and creates strings
-\#   $EN_OPEN_BRACKET and $EN_CLOSE_BRACKET according to the given argument.
-\#
-.MAC ENDNOTE_LINENUMBER_BRACKETS END
-.    rr #EN_LN_SEP
-.    nr #EN_LN_BRACKETS 1
-.    if '\\$1'PARENS' \{\
-.       ds $EN_OPEN_BRACKET (
-.       ds $EN_CLOSE_BRACKET )
-.    \}
-.    if '\\$1'(' \{\
-.       ds $EN_OPEN_BRACKET (
-.       ds $EN_CLOSE_BRACKET )
-.    \}
-.    if '\\$1'SQUARE' \{\
-.       ds $EN_OPEN_BRACKET [
-.       ds $EN_CLOSE_BRACKET ]
-.    \}
-.    if '\\$1'[' \{\
-.       ds $EN_OPEN_BRACKET [
-.       ds $EN_CLOSE_BRACKET ]
-.    \}
-.    if '\\$1'BRACES' \{\
-.       ds $EN_OPEN_BRACKET {
-.       ds $EN_CLOSE_BRACKET }
-.    \}
-.    if '\\$1'{' \{\
-.       ds $EN_OPEN_BRACKET {
-.       ds $EN_CLOSE_BRACKET }
-.    \}
-.END
-\#
-\# ENDNOTE LINENUMBER GAP
-\# ----------------------
-\# *Argument:
-\#   <space between line-number labels and endnotes text>
-\# *Function:
-\#   Defines string $EN_LN_GAP, used during printing of line-number
-\#   labels in ENDNOTE.
-\#
-.MAC ENDNOTE_LINENUMBER_GAP END
-.    nr #EN_LN_GAP (u;\\$1)
-.END
-\#
-\# ENDNOTE NUMBERS ALIGNMENT
-\# -------------------------
-\# *Argument:
-\#   LEFT | RIGHT <max. number of digit placeholders that will appear in endnotes>
-\# *Function:
-\#   Creates registers for _LEFT or _RIGHT; creates register
-\#   #EN_NUMBER_PLACEHOLDERS.
-\# *Notes:
-\#   Default is for endnote numbers to be right aligned to 2 placeholders.
-\#
-.MAC ENDNOTE_NUMBERS_ALIGN END
-.    if '\\$1'LEFT' \{\
-.       rr #EN_NUMBERS_ALIGN_RIGHT
-.       nr #EN_NUMBERS_ALIGN_LEFT 1
-.    \}
-.    if '\\$1'RIGHT' \{\
-.       rr #EN_NUMBERS_ALIGN_LEFT
-.       nr #EN_NUMBERS_ALIGN_RIGHT 1
-.    \}
-.    nr #EN_NUMBER_PLACEHOLDERS \\$2
-.END
-\#
-\# ENDNOTE PARAGRAPH INDENT
-\# ------------------------
-\# *Argument:
-\#   <first line indent of paras subsequent to 1st in endnotes>
-\# *Function:
-\#   Creates register #EN_PP_INDENT for use in .PP.
-\# *Notes:
-\#   Requires a unit of measure.
-\#
-\#   Default is 1.5m for TYPESET; same indent as PARA_INDENT for TYPEWRITE.
-\#
-.MAC ENDNOTE_PARA_INDENT END
-.    nr #EN_PP_INDENT (\\$1)
-.END
-\#
-\# TURN OFF COLUMN MODE FOR ENDNOTES
-\# ---------------------------------
-\# *Argument:
-\#   <none> | <anything>
-\# *Function:
-\#   Creates or removes register #EN_NO_COLS
-\# *Notes:
-\#   Allows user to tell mom not to set endnotes in columnar
-\#   documents in columns.  Default is to set endnotes in columns.
-\#
-.MAC ENDNOTES_NO_COLUMNS END
-.    ie '\\$1'' .nr #EN_NO_COLS 1
-.    el .rr #EN_NO_COLS
-.END
-\#
-\# NO FIRST PAGE NUMBER ON ENDNOTES FIRST PAGE
-\# -------------------------------------------
-\# *Argument:
-\#   <none> | <anything>
-\# *Function:
-\#   Creates or removes register #EN_NO_FIRST_PN
-\# *Notes:
-\#   For use if FOOTERS are on.  Tells ENDNOTES not to put a page
-\#   number on the first endnotes page.  Some users may want this.
-\#   Default is to print a page number at the top of the first
-\#   endnotes page when footers are on.
-\#
-.MAC ENDNOTES_NO_FIRST_PAGENUM END
-.    ie '\\$1'' .nr #EN_NO_FIRST_PN 1
-.    el .rr #EN_NO_FIRST_PN
-.END
-\#
-\# PAGE HEADERS ON ENDNOTES PAGES
-\# ------------------------------
-\# *Argument:
-\#   <none> | ALL
-\# *Function:
-\#   Creates or removes register #EN_ALLOWS_HEADERS or
-\#   #EN_ALLOWS_HEADERS_ALL
-\# *Notes:
-\#   Whether ENDNOTES puts a page header at the top of endnotes
-\#   pages if page headers are used throughout the document.
-\#   Default is to insert the page headers, but not on the first
-\#   page.  If the optional argument ALL is given, ENDNOTES puts a
-\#   page header on the first page as well.
-\#
-.MAC ENDNOTES_ALLOWS_HEADERS END
-.    ie '\\$1'' .nr #EN_ALLOWS_HEADERS 1
-.    el \{\
-.       ie '\\$1'ALL' \{\
-.          nr #EN_ALLOWS_HEADERS 1
-.          nr #EN_ALLOWS_HEADERS_ALL 1
-.       \}
-.       el \{\
-.          nr #EN_ALLOWS_HEADERS 0
-.          nr #EN_ALLOWS_HEADERS_ALL 0
-.       \}
-.    \}
-.END
-\#
-\# ENDNOTES PAGES PAGE NUMBERING STYLE
-\# -----------------------------------
-\# *Argument:
-\#   DIGIT | ROMAN | roman | ALPHA | alpha
-\# *Function:
-\#   Creates or modifies $EN_PN_STYLE.
-\# *Notes:
-\#   Allows user to define what style should be used for endnotes
-\#   pages page numbering.  Arguments are the same as for
-\#   PAGENUM_STYLE.
-\#
-\#   Default is DIGIT.
-\#
-.MAC ENDNOTES_PAGENUM_STYLE END
-.    ds $EN_PN_STYLE \\$1
-.END
-\#
-\# FIRST PAGE NUMBER FOR ENDNOTES
-\# ------------------------------
-\# *Argument:
-\#   <page number that appears on page 1 of endnotes pages>
-\# *Function:
-\#   Creates or modifies string $EN_FIRST_PN
-\# *Notes:
-\#   To be used with caution, only if all endnotes
-\#   are to be output at once, i.e. not at the end of the separate
-\#   docs of a collated doc
-\#
-.MAC ENDNOTES_FIRST_PAGENUMBER END
-.    nr #EN_FIRST_PN \\$1
-.END
-\#
-\# SINGLESPACE ENDNOTES
-\# --------------------
-\# *Argument:
-\#   <none> | <anything>
-\# *Function:
-\#   Sets lead of endnotes pages in TYPEWRITE to 12 points,
-\#   adjusted.
-\# *Notes:
-\#   Default is to double-space endnotes pages.
-\#
-.MAC SINGLESPACE_ENDNOTES END
-.    if \\n[#PRINT_STYLE]=1 \{\
-.       ie \\n[#SINGLE_SPACE] \{\
-.          nr #EN_SINGLESPACE 1
-.          rr #IGNORE
-.          if \\n[#OK_PROCESS_LEAD] \{\
-.             ENDNOTE_LEAD 12 ADJUST
-.             nr #IGNORE 1
-.          \}
-.       \}
-.       el \{\
-.          ie '\\$1'' \{\
-.             nr #EN_SINGLESPACE 1
-.             rr #IGNORE
-.             if \\n[#OK_PROCESS_LEAD] \{\
-.                ENDNOTE_LEAD 12 ADJUST
-.                nr #IGNORE 1
-.             \}
-.          \}
-.          el \{\
-.             rr #EN_SINGLESPACE
-.             rr #IGNORE
-.             if \\n[#OK_PROCESS_LEAD] \{\
-.                ENDNOTE_LEAD 24 ADJUST
-.                nr #IGNORE 1
-.             \}
-.          \}
-.       \}
-.    \}
-.END
-\#
-\# ENDNOTE PARAGRAPH SPACE
-\# -----------------------
-\# *Argument:
-\#   toggle
-\# *Function:
-\#   Creates toggle register #EN_PP_SPACE for use in .PP.
-\# *Notes:
-\#   Like PARA_SPACE.  Default is not to space endnote paras.
-\#
-.MAC ENDNOTE_PARA_SPACE END
-.    ie '\\$1'' .nr #EN_PP_SPACE 1
-.    el .rr #EN_PP_SPACE
-.END
-\#
-\# ENDNOTE
-\# -------
-\# *Argument:
-\#   toggle
-\# *Function:
-\#   Places superscript endnote number in text, then collects and
-\#   processes endnote in diversion END_NOTES.
-\# *Notes:
-\#   \c must be appended to the word immediately preceding .ENDNOTE
-\#   when ENDNOTE_MARKER_STYLE is NUMBER.
-\#
-.MAC ENDNOTE END
-.    ie '\\$1'' \{\
-.       nr #ENDNOTE 1
-.       ie !\\n[#EN_MARKER_STYLE]=2 \{\
-.          if \\n[#CONDENSE] .nop \*[CONDX]\c
-.          if \\n[#EXTEND] .nop \*[EXTX]\c
-.             if \\n[#UNDERLINE_ON] \{\
-.                nr #UNDERLINE_WAS_ON 1
-.                UNDERLINE OFF
-.             \}
-.          if \\n[#PRINT_STYLE]=1 \{\
-.             if \\n[#SLANT_ON] \{\
-.                 nr #SLANT_WAS_ON 1
-.                 nop \*[SLANTX]\c
-.             \}
-.\" Vertical raise amount here is more than when the same string is printed in
-.\" the endnotes so bottom of number aligns with top of bowl.
-.             PRINT \
-"\s-2\v'-\\n[#DOC_LEAD]u/5u'\\n+[#EN_NUMBER]\v'+\\n[#DOC_LEAD]u/5u'\s+2\c"
-.          \}
-.          if \\n[#PRINT_STYLE]=2 .PRINT \*[SUP]\\n+[#EN_NUMBER]\*[SUPX]\c
-.       \}
-.       el \{\
-.          ie r#EN_NUMBER .nr #EN_NUMBER \\n[#EN_NUMBER]+1
-.          el .nr #EN_NUMBER 1 1
-.          if !\\n[#LINENUMBERS] \{\
-.             tm1 "[mom]: Line numbering must be enabled with NUMBER_LINES when
-.             tm1 "       ENDNOTE_MARKER_STYLE is LINE.
-.             ab Aborting '\\n[.F]' at \\$0, line \\n[.c].
-.          \}
-.          if \\n[#EN_MARK]=0 .nr #EN_MARK \\n[ln]
-.          nr #EN_MARK_2 \\n[ln]
-.          if '\\n[.z]'P_QUOTE' \{\
-.             nr #EN_MARK -1
-.             nr #EN_MARK_2 -1
-.          \}
-.       \}
-.       nr #PP_STYLE_PREV \\n[#PP_STYLE]
-.       nr #PP_STYLE 1
-.       if \\n[#INDENT_FIRST_PARAS] .nr #INDENT_FIRSTS 1
-.       INDENT_FIRST_PARAS
-.       ev EN
-.       da END_NOTES
-.       LL \\n[#DOC_L_LENGTH]u
-.       ta \\n[.l]u
-.       if \\n[#COLUMNS] \{\
-.          ie \\n[#EN_NO_COLS] .LL \\n[#DOC_L_LENGTH]u
-.          el .LL \\n[#COL_L_LENGTH]u
-.          ta \\n[.l]u
-.       \}
-\!.     if \\\\n[.vpt]=0 .vpt
-\!.     ne 3
-.       vs \\n[#EN_LEAD]u
-.\" Print identifying doc title (eg Chapter n)
-.       if \\n[#EN_NUMBER]=1 \{\
-.          if \\n[#PRINT_STYLE]=1 .TYPEWRITER
-.          if \\n[#PRINT_STYLE]=2 \{\
-.             FAMILY  \\*[$EN_TITLE_FAM]
-.             FT      \\*[$EN_TITLE_FT]
-.             ps \\n[#EN_PS]u\\*[$EN_TITLE_SIZE_CHANGE]
-.          \}
-.          sp
-.          if !'\\*[$EN_TITLE]'' \{\
-.             if '\\*[$EN_TITLE_QUAD]'L'      .LEFT
-.             if '\\*[$EN_TITLE_QUAD]'LEFT'   .LEFT
-.             if '\\*[$EN_TITLE_QUAD]'C'      .CENTER
-.             if '\\*[$EN_TITLE_QUAD]'CENTER' .CENTER
-.             if '\\*[$EN_TITLE_QUAD]'CENTRE' .CENTER
-.             if '\\*[$EN_TITLE_QUAD]'R'      .RIGHT
-.             if '\\*[$EN_TITLE_QUAD]'RIGHT'  .RIGHT
-.             ie \\n[#EN_TITLE_UNDERLINE] \{\
-.                nr #FROM_EN_TITLE 1
-.                UNDERSCORE "\\*[$EN_TITLE]"
-.                rr #FROM_EN_TITLE
-.             \}
-.             el .PRINT "\\*[$EN_TITLE]"
-.          \}
-.       \}
-.\" Get indent from endnotes point size; convert string to reg in
-.\" case indent string is, e.g., m or n
-.       ps \\n[#EN_PS]u
-.       nr #REF_EN_INDENT (u;\\*[$REF_EN_INDENT])
-.       if \\n[#PRINT_STYLE]=1 \{\
-.          TYPEWRITER
-.          if \\n[#EN_NUMBER]=1 .sp
-.          if \\n[#EN_MARKER_STYLE]=3 .ps -2
-.       \}
-.       if \\n[#PRINT_STYLE]=2 \{\
-.          if \\n[#EN_NUMBER]=1 \
-.             if !'\\*[$EN_TITLE]'' .sp .5v
-.          if \\n[#EN_MARKER_STYLE]=1 \{\
-.             FAMILY  \\*[$EN_NUMBER_FAM]
-.             FT      \\*[$EN_NUMBER_FT]
-.             ps \\n[#EN_PS]u\\*[$EN_NUMBER_SIZE_CHANGE]
-.          \}
-.          if \\n[#EN_MARKER_STYLE]=2 \{\
-.             FAMILY  \\*[$EN_LN_FAM]
-.             FT      \\*[$EN_LN_FT]
-.             ps \\n[#EN_PS]u\\*[$EN_LN_SIZE_CHANGE]
-.          \}
-.          if \\n[#EN_MARKER_STYLE]=3 \{\
-.             FAMILY  \\*[$EN_NUMBER_FAM]
-.             FT      \\*[$EN_NUMBER_FT]
-.             ps \\n[#PT_SIZE_IN_UNITS]u*6u/10u
-.          \}
-.       \}
-.\" Build string for line-numbered endnotes
-.       if \\n[#EN_MARKER_STYLE]=2 \{\
-.          ie \\n[#EN_LN_BRACKETS]=1 \{\
-.             ds $EN_LINENUMBER \v'-.085m'\\*[$EN_OPEN_BRACKET]\v'.085m'
-.             ie \\n[#EN_MARK_2]=\\n[#EN_MARK] .as $EN_LINENUMBER \
-\\n[#EN_MARK]\v'-.085m'\\*[$EN_CLOSE_BRACKET]\v'.085m'\"
-.             el .as $EN_LINENUMBER \
-\\n[#EN_MARK]\v'-.1m'-\v'.1m'\\n[#EN_MARK_2]\v'-.085m'\
-\\*[$EN_CLOSE_BRACKET]\v'.085m'\"
-.          \}
-.          el \{\
-.             ie \\n[#EN_MARK_2]=\\n[#EN_MARK] \
-.                ds $EN_LINENUMBER \
-\\n[#EN_MARK]\\*[$EN_LN_SEP]
-.             el \
-.                ds $EN_LINENUMBER \
-\\n[#EN_MARK]\v'-.1m'-\v'.1m'\\n[#EN_MARK_2]\\*[$EN_LN_SEP]
-.          \}
-.          nr #EN_MARK 0
-.       \}
-.       vpt 0
-.       ie \\n[#EN_NUMBERS_ALIGN_RIGHT] .RIGHT
-.       el .LEFT
-.       if \\n[#EN_MARKER_STYLE]=1 \
-.          nr #EN_NUMBER_L_LENGTH \w'\0'*\\n[#EN_NUMBER_PLACEHOLDERS]+\w'.'
-.       if \\n[#EN_MARKER_STYLE]=2 \{\
-.          ie \\n[#EN_LN_BRACKETS]=1 .nr #EN_NUMBER_L_LENGTH \
-(\w'\0'*(\\n[#EN_NUMBER_PLACEHOLDERS]*2))+\w'-[]'
-.          el .nr #EN_NUMBER_L_LENGTH \
-(\w'\0'*(\\n[#EN_NUMBER_PLACEHOLDERS]*2))+\w'-\\*[$EN_LN_SEP]'
-.          RIGHT
-.       \}
-.       if \\n[#EN_MARKER_STYLE]=3 \{\
-.          nr #EN_NUMBER_L_LENGTH \
-\w'\0'*\\n[#EN_NUMBER_PLACEHOLDERS]+.15m
-.          RIGHT
-.       \}
-.       ie \\n[#REF]=1 \
-.          ll \\n[#EN_NUMBER_L_LENGTH]u+\\n[#REF_EN_INDENT]u
-.       el .ll \\n[#EN_NUMBER_L_LENGTH]u
-.       if \\n[#EN_MARKER_STYLE]=1 \{\
-.          if \\n[#REF]=1 .ti \\n[#REF_EN_INDENT]u
-.          nop \En[#EN_NUMBER].
-.       \}
-.       if \\n[#EN_MARKER_STYLE]=2 \{\
-.          nop \\*[$EN_LINENUMBER]
-.          rm $EN_LINENUMBER
-.       \}
-.       if \\n[#EN_MARKER_STYLE]=3 \{\
-.          ps \" Reset ps changed to get width of s-script numbers
-.          ie \\n[#PRINT_STYLE]=1 \{\
-.\" Vertical raise amount here is less than when the same string is printed in
-.\" the body of the text because number precedes a cap.
-.             nop \
-\s-2\v'-\\n[#DOC_LEAD]u/7u'\\n[#EN_NUMBER]\|\v'+\\n[#DOC_LEAD]u/7u'\s+2
-.          \}
-.          el .nop \E*[SUP]\\n[#EN_NUMBER]\E*[SUPX]\h'.15m'
-.       \}
-.       EOL
-.       ll
-.       nr #EN_FIGURE_SPACE \w'\0'
-.       if \\n[#EN_MARKER_STYLE]=1 \{\
-.          ie \\n[#REF]=1 .ti \
-\\n[#EN_NUMBER_L_LENGTH]u+\\n[#REF_EN_INDENT]u+\\n[#EN_FIGURE_SPACE]u
-.          el .in \
-\\n[#EN_NUMBER_L_LENGTH]u+\\n[#EN_FIGURE_SPACE]u
-.       \}
-.       if \\n[#EN_MARKER_STYLE]=2 \{\
-.          ie \\n[#REF]=1 .ti \
-\\n[#EN_NUMBER_L_LENGTH]u+\\n[#REF_EN_INDENT]u+\\n[#EN_LN_GAP]u
-.          el .ti \
-\\n[#EN_NUMBER_L_LENGTH]u+\\n[#EN_LN_GAP]u
-.       \}
-.       if \\n[#EN_MARKER_STYLE]=3 \{\
-.          ie \\n[#REF]=1 .ti \
-\\n[#EN_NUMBER_L_LENGTH]u+\\n[#REF_EN_INDENT]u+\w'\|'u
-.          el .in \
-\\n[#EN_NUMBER_L_LENGTH]u
-.       \}
-.       nr #EN_TEXT_INDENT \\n[.i]
-.       QUAD \\*[$EN_QUAD]
-.       vpt 1
-.       if \\n[#PRINT_STYLE]=1 .TYPEWRITER
-.       if \\n[#PRINT_STYLE]=2 \{\
-.          FAMILY  \\*[$EN_FAM]
-.          FT      \\*[$EN_FT]
-.          ps \\n[#EN_PS]u
-.       \}
-.    \}
-.    el \{\
-\!.     ie \\n[#EN_NUMBER]=\\\\n[#LAST_EN] .vpt 0
-\!.     el .br
-.       if \\n[#PRINT_STYLE]=2 .sp \\*[$EN_SPACE]
-.       in 0
-.       if \\n[#EN_MARKER_STYLE]=2 \{\
-\!.        in 0
-.       \}
-.       da
-.\" Restore sentence spacing
-.       if \\n[#PRINT_STYLE]=2 \{\
-.          if d$RESTORE_SS_VAR .SS \\*[$RESTORE_SS_VAR]
-.          rm $RESTORE_SS_VAR
-.       \}
-.       ev
-.\" Restore lead -- need
-.       nr #PP_STYLE \\n[#PP_STYLE_PREV]
-.       if !\\n[#INDENT_FIRSTS] .INDENT_FIRST_PARAS OFF
-.       rr #INDENT_FIRSTS
-.       rr #ENDNOTE
-.       if \\n[#UNDERLINE_WAS_ON] \{\
-.          rr #UNDERLINE_WAS_ON
-.          UNDERLINE
-.       \}
-.       if \\n[#SLANT_WAS_ON] \{\
-.          rr #SLANT_WAS_ON
-\*[SLANT]\c
-.       \}
-.    \}
-.    if \\n[#NUM_ARGS]=2 \{\
-.       if '\\$2'BREAK' .BR
-.       if '\\$2'BR' .BR
-.    \}
-.END
-\#
-\# ENDNOTES
-\# --------
-\# *Arguments:
-\#   none
-\# *Function:
-\#   Sets new document leading from #EN_LEAD, breaks to a new page,
-\#   sets up an endnotes page based on registers and strings associated
-\#   with endnotes, then outputs diversion END_NOTES.
-\#
-.MAC ENDNOTES END
-.    if \\n[defer] .NEWPAGE
-.    nr #LAST_EN \\n[#EN_NUMBER]
-.    nr #ENDNOTES 1
-.    nr #EN_FIRST_PAGE 1
-.    nr #HEADER_STATE \\n[#HEADERS_ON]
-.    ds $RESTORE_PAGENUM_STYLE \\*[$PAGENUM_STYLE]
-.    if \\n[#LINENUMBERS]=1 \{\
-.       NUMBER_LINES OFF
-.       nr #LINENUMBERS 2
-.    \}
-.    if \\n[#HEADERS_ON]=1 \
-.       if !\\n[#EN_ALLOWS_HEADERS_ALL] .HEADERS OFF
-.    if \\n[#HEADER_STATE]=1 \{\
-.       ie \\n[#EN_HDRFTR_CENTER]=1 .
-.       el .rm $HDRFTR_CENTER
-.    \}
-.    ie !\\n[#SUSPEND_PAGINATION] \{\
-.       if \\n[#PAGINATE]=1 \{\
-.          if \\n[#PAGE_NUM_V_POS]=1 \{\
-.             PAGENUM_STYLE \\*[$EN_PN_STYLE]
-.             if \\n[#EN_FIRST_PN] .PAGENUMBER \\n[#EN_FIRST_PN]-1
-.             if r #EN_NO_FIRST_PN .nr #PAGINATE 0
-.          \}
-.       \}
-.    \}
-.    el \{\
-.       ie \\n[#PAGE_NUM_V_POS]=2 .nr #PAGINATE 1
-.       el .nr #PAGINATE 0
-.    \}
-.    if \\n[#FOOTERS_ON]=1 \{\
-.       if !'\\*[$HDRFTR_CENTER_OLD]'' \
-.          ds $HDRFTR_CENTER \\*[$HDRFTR_CENTER_OLD]
-.    \}
-.    NEWPAGE
-.    if \\n[#FOOTERS_ON]=1 \{\
-.       ds $HDRFTR_CENTER \\*[$HDRFTR_CENTER_NEW]
-.       rm $HDRFTR_CENTER_OLD
-.       rm $HDRFTR_CENTER_NEW
-.    \}
-.    ie !\\n[#SUSPEND_PAGINATION] \{\
-.       if \\n[#PAGE_NUM_V_POS]=1 \{\
-.          if r #EN_NO_FIRST_PN \
-.             if \\n[#PAGINATION_STATE]=1 .nr #PAGINATE 1
-.       \}
-.    \}
-.    el \
-.       if \\n[#PAGE_NUM_V_POS]=2 .nr #PAGINATE 0
-.    rr #PAGINATION_STATE
-.    PAGENUM_STYLE \\*[$EN_PN_STYLE]
-.    if \\n[#EN_FIRST_PN] .PAGENUMBER \\n[#EN_FIRST_PN]
-.    if \\n[#HEADER_STATE]=1 \
-.       if \\n[#EN_ALLOWS_HEADERS] .HEADERS
-.\" Collect endnotes title string for TOC
-.    nr #TOC_ENTRY_PN \\n%+\\n[#PAGE_NUM_ADJ]
-.    af #TOC_ENTRY_PN \\g[#PAGENUMBER]
-.    ds $TOC_TITLE_ITEM \\*[$EN_STRING]\|
-.    PDF_BOOKMARK 1 \\*[$EN_STRING]
-.    TITLE_TO_TOC
-.\" End collection of endnotes title string for TOC
-.\" Process endnotes
-.    if \\n[#PRINT_STYLE]=1 .vs \\n[#EN_LEAD]u
-.    if \\n[#PRINT_STYLE]=2 \{\
-.       if \\n[#EN_NO_COLS] \{\
-.          if \\n[#COLUMNS] .nr #COLUMNS_WERE_ON 1
-.          nr #COLUMNS 0
-.       \}
-.       nr #RESTORE_DOC_LEAD \\n[#DOC_LEAD]
-.       ie \\n[#ADJ_EN_LEAD] .nr #DOC_LEAD \\n[#EN_LEAD]
-.       el .DOC_LEAD \\n[#EN_LEAD]u
-.    \}
-.    vpt 0
-.    ie r#EN_STRING_ADVANCE .sp |\\n[#EN_STRING_ADVANCE]u-1v
-.    el .sp |\\n[#T_MARGIN]u-1v
-.    vpt 1
-.    mk ec
-.    if \\n[#SLANT_ON] \{\
-\*[SLANTX]\c
-.    \}
-.    sp
-.    if !'\\*[$EN_STRING]'' \{\
-.       if \\n[#PRINT_STYLE]=1 \{\
-.          TYPEWRITER
-.          vs \\n[#EN_LEAD]u
-.       \}
-.       if \\n[#PRINT_STYLE]=2 \{\
-.          LL \\n[#DOC_L_LENGTH]u
-.          ta \\n[.l]u
-.          if \\n[#COLUMNS] \{\
-.             ie \\n[#EN_NO_COLS] .LL \\n[#DOC_L_LENGTH]u
-.             el .LL \\n[#COL_L_LENGTH]u
-.             ta \\n[.l]u
-.          \}
-.          FAMILY  \\*[$EN_STRING_FAM]
-.          FT      \\*[$EN_STRING_FT]
-.          ps \\n[#EN_PS]u\\*[$EN_STRING_SIZE_CHANGE]
-.          vs      \\n[#EN_LEAD]u
-.          if \\n[#ENDNOTE_STRING_COLOR]=1 \{\
-.             COLOR \\*[$ENDNOTE_STRING_COLOR]
-.             EOL
-.          \}
-.       \}
-.       if '\\*[$EN_STRING_QUAD]'L'      .LEFT
-.       if '\\*[$EN_STRING_QUAD]'LEFT'   .LEFT
-.       if '\\*[$EN_STRING_QUAD]'C'      .CENTER
-.       if '\\*[$EN_STRING_QUAD]'CENTER' .CENTER
-.       if '\\*[$EN_STRING_QUAD]'CENTRE' .CENTER
-.       if '\\*[$EN_STRING_QUAD]'R'      .RIGHT
-.       if '\\*[$EN_STRING_QUAD]'RIGHT'  .RIGHT
-.       EOL
-.       if \\n[#EN_STRING_CAPS] .CAPS
-.       ie \\n[#EN_STRING_UNDERLINE] \{\
-.          nr #FROM_EN_STRING 1
-.          ie \\n[#EN_STRING_UNDERLINE]=2 \
-.             UNDERSCORE2 \\*[$EN_UNDERLINE_GAP] \\*[$EN_RULE_GAP] "\\*[$EN_STRING]"
-.          el .UNDERSCORE "\\*[$EN_STRING]"
-.          rr #FROM_EN_STRING
-.       \}
-.       el .PRINT "\\*[$EN_STRING]
-.    \}
-.    CAPS OFF
-.    if \\n[#PRINT_STYLE]=1 \{\
-.       ie \\n[#SINGLE_SPACE]=1 .sp
-.       el \{\
-.          ie \\n[#EN_SINGLESPACE]=1 .sp
-.          el .
-.       \}
-.    \}
-.    if \\n[#PRINT_STYLE]=2 .ALD \\n[#EN_LEAD]u
-.    QUAD \\*[$EN_QUAD]
-.    chop END_NOTES
-.    nf
-.    END_NOTES
-.    rm END_NOTES
-.    ps \\n[#DOC_PT_SIZE]u
-.    if \\n[#PRINT_STYLE]=1 .vs \\n[#DOC_LEAD]u
-.    if \\n[#PRINT_STYLE]=2 \{\
-.       ie \\n[#ADJ_EN_LEAD] \
-.          nr #DOC_LEAD \\n[#RESTORE_DOC_LEAD]
-.       el .DOC_LEAD \\n[#RESTORE_DOC_LEAD]u
-.       rr #RESTORE_DOC_LEAD
-.    \}
-.    if \\n[#COLUMNS_WERE_ON] .nr #COLUMNS 1
-.    if \\n[#HEADER_STATE]=1 .HEADERS
-.    if \\n[#LINENUMBERS]=2 \{\
-.       NUMBER_LINES RESUME
-.       nr #LINENUMBERS 1
-.    \}
-.
-.    PRINT_FOOTER
-.    rr #ENDNOTES
-.END
-\#
-\# ====================================================================
-\#
-\# +++BIBLIOGRAPHY+++
-\#
-\# Mom treats bibliographies and endnotes very similarly.  The chief
-\# difference is that endnotes are collected and formatted inside a
-\# diversion, while bibliographies are built "by hand."  ENDNOTES sets
-\# up the endnotes page and outputs the formatted diversion.
-\# BIBLIOGRAPHY sets up the bibliography page, then awaits refer
-\# commands.
-\#
-\# All of the bibliography control macros have their exact
-\# counterparts in the endnotes control macros.  See, therefore,
-\# Arguments, Functions, and Notes in the Endnotes section.
-\#
-\# Bibliography control macros
-\#
-.MAC BIBLIOGRAPHY_PT_SIZE END
-.    nr #BIB_PS (p;\\$1)
-.END
-\#
-.MAC BIBLIOGRAPHY_HDRFTR_CENTER END
-.    ie '\\$1'' .nr #BIB_HDRFTR_CENTER 1
-.    el .rr #BIB_HDRFTR_CENTER
-.END
-\#
-.MAC BIBLIOGRAPHY_STRING END
-.    ds $BIB_STRING \\$1
-.END
-\#
-.MAC BIBLIOGRAPHY_STRING_ADVANCE END
-.    nr #BIB_STRING_ADVANCE (\\$1)
-.END
-\#
-.MAC BIBLIOGRAPHY_STRING_CAPS END
-.   ie '\\$1'' .nr #BIB_STRING_CAPS 1
-.   el .nr #BIB_STRING_CAPS 0
-.END
-\#
-.MAC BIBLIOGRAPHY_NO_COLUMNS END
-.    ie '\\$1'' .nr #BIB_NO_COLS 1
-.    el .rr #BIB_NO_COLS
-.END
-\#
-.MAC BIBLIOGRAPHY_NO_FIRST_PAGENUM END
-.    ie '\\$1'' .nr #BIB_NO_FIRST_PN 1
-.    el .rr #BIB_NO_FIRST_PN
-.END
-\#
-.MAC BIBLIOGRAPHY_ALLOWS_HEADERS END
-.    ie '\\$1'' .nr #BIB_ALLOWS_HEADERS 1
-.    el \{\
-.       ie '\\$1'ALL' \{\
-.          nr #BIB_ALLOWS_HEADERS 1
-.          nr #BIB_ALLOWS_HEADERS_ALL 1
-.       \}
-.       el \{\
-.          rr #BIB_ALLOWS_HEADERS
-.          rr #BIB_ALLOWS_HEADERS_ALL
-.       \}
-.    \}
-.END
-\#
-.MAC BIBLIOGRAPHY_PAGENUM_STYLE END
-.    ds $BIB_PN_STYLE \\$1
-.END
-\#
-.MAC BIBLIOGRAPHY_FIRST_PAGENUMBER END
-.    nr #BIB_FIRST_PN \\$1
-.END
-\#
-.MAC SINGLESPACE_BIBLIOGRAPHY END
-.    if \\n[#PRINT_STYLE]=1 \{\
-.       ie \\n[#SINGLE_SPACE] \{\
-.          nr #BIB_SINGLESPACE 1
-.          rr #IGNORE
-.          if \\n[#OK_PROCESS_LEAD] \{\
-.             BIBLIOGRAPHY_LEAD 12 ADJUST
-.             nr #IGNORE 1
-.          \}
-.       \}
-.       el \{\
-.          ie '\\$1'' \{\
-.             nr #BIB_SINGLESPACE 1
-.             rr #IGNORE
-.             if \\n[#OK_PROCESS_LEAD] \{\
-.                BIBLIOGRAPHY_LEAD 12 ADJUST
-.                nr #IGNORE 1
-.             \}
-.          \}
-.          el \{\
-.             rr #BIB_SINGLESPACE
-.             rr #IGNORE
-.             if \\n[#OK_PROCESS_LEAD] \{\
-.                BIBLIOGRAPHY_LEAD 24 ADJUST
-.                nr #IGNORE 1
-.             \}
-.          \}
-.       \}
-.    \}
-.END
-\#
-\# Style for outputting collected bibliographic references
-\# -------------------------------------------------------
-\# *Argument:
-\#   LIST | PLAIN [ <list separator> ] [ <list prefix> ]
-\# *Function:
-\#   Sets #BIB_LIST to 1 for numbered list style, 0 for plain output
-\# *Notes:
-\#   Technically, user is supposed to enter PLAIN if s/he wants an
-\#   unumbered bibliography, but the el clause says "any arg but
-\#   LIST means unumbered."  Effectively, any arg but LIST produces
-\#   a "plain" bibliographic list.
-\#
-\#   The 2nd and 3rd args have the same options as the 2nd arg to LIST.
-\#
-.MAC BIBLIOGRAPHY_TYPE END
-.    ie '\\$1'LIST' \{\
-.       nr #BIB_LIST 1
-.       ie '\\$2'' \{\
-.          if '\\*[$BIB_LIST_SEPARATOR]'' .ds $BIB_LIST_SEPARATOR .
-.       \}
-.       el .ds $BIB_LIST_SEPARATOR \\$2
-.       ie '\\$3'' .ds $BIB_LIST_PREFIX
-.       el .ds $BIB_LIST_PREFIX \\$3
-.    \}
-.    el .nr #BIB_LIST 0
-.END
-\#
-\# Spacing between items in bibliographies
-\# ---------------------------------------
-\# *Argument:
-\#   <amount of space>
-\# *Function:
-\#   Gets value for #BIB_SPACE in units.
-\# *Notes:
-\#   Requires a unit of measure.
-\#
-.MAC BIBLIOGRAPHY_SPACING END
-.    ds $BIB_SPACE \\$1
-.    if \\n[#BIB_LEAD]=0 \{\
-.       nr #DEFER_BIB_SPACING 1
-.       return
-.    \}
-.    ds $EVAL_BIB_SPACE \\*[$BIB_SPACE]
-.    substring $EVAL_BIB_SPACE -1
-.    ie '\\*[$EVAL_BIB_SPACE]'v' \{\
-.       substring $BIB_SPACE 0 0
-.       nr #BIB_SPACE \\n[#BIB_LEAD]*\\*[$BIB_SPACE]
-.    \}
-.    el .nr #BIB_SPACE (\\$1)
-.END
-\#
-\# Set up bibliography page
-\# ------------------------
-\# *Function:
-\#   Sets up a new page, with title, ready to accept the output
-\#   of refer's $LIST$ or .R1 bibliography .R2
-\# *Notes:
-\#   Bibliography pages are set up almost identically to endnotes pages.
-\#
-.MAC BIBLIOGRAPHY END
-.    ie '\\$1'' \{\
-.       rr #FN_REF
-.       rr #EN_REF
-.       nr #BIBLIOGRAPHY 1
-.       nr #BIB_FIRST_PAGE 1
-.       nr #HEADER_STATE \\n[#HEADERS_ON]
-.       ds $RESTORE_PAGENUM_STYLE \\*[$PAGENUM_STYLE]
-.       if \\n[#LINENUMBERS]=1 \{\
-.          NUMBER_LINES OFF
-.          nr #LINENUMBERS 2
-.       \}
-.       if \\n[#HEADERS_ON]=1 \
-.          if !\\n[#BIB_ALLOWS_HEADERS_ALL] .HEADERS OFF
-.       if \\n[#HEADER_STATE]=1 \{\
-.          ie \\n[#BIB_HDRFTR_CENTER]=1 .
-.          el .rm $HDRFTR_CENTER
-.       \}
-.       ie !\\n[#SUSPEND_PAGINATION] \{\
-.          if \\n[#PAGINATE]=1 \{\
-.             if \\n[#PAGE_NUM_V_POS]=1 \{\
-.                PAGENUM_STYLE \\*[$BIB_PN_STYLE]
-.                if \\n[#BIB_FIRST_PN] .PAGENUMBER \\n[#BIB_FIRST_PN]-1
-.                if r #BIB_NO_FIRST_PN .nr #PAGINATE 0
-.             \}
-.          \}
-.       \}
-.       el \{\
-.          ie \\n[#PAGE_NUM_V_POS]=2 .nr #PAGINATE 1
-.          el .nr #PAGINATE 0
-.       \}
-.       if \\n[#FOOTERS_ON]=1 \{\
-.          if !'\\*[$HDRFTR_CENTER_OLD]'' \
-.             ds $HDRFTR_CENTER \\*[$HDRFTR_CENTER_OLD]
-.       \}
-.       NEWPAGE
-.       if \\n[#FOOTERS_ON]=1 \{\
-.          ds $HDRFTR_CENTER \\*[$HDRFTR_CENTER_NEW]
-.          rm $HDRFTR_CENTER_OLD
-.          rm $HDRFTR_CENTER_NEW
-.       \}
-.       ie !\\n[#SUSPEND_PAGINATION] \{\
-.          if \\n[#PAGE_NUM_V_POS]=1 \{\
-.             if r #BIB_NO_FIRST_PN \{\
-.                if \\n[#PAGINATION_STATE]=1 .nr #PAGINATE 1
-.             \}
-.          \}
-.       \}
-.       el \
-.          if \\n[#PAGE_NUM_V_POS]=2 .nr #PAGINATE 0
-.       rr #PAGINATION_STATE
-.       PAGENUM_STYLE \\*[$BIB_PN_STYLE]
-.       if \\n[#BIB_FIRST_PN] .PAGENUMBER \\n[#BIB_FIRST_PN]
-.       if \\n[#HEADER_STATE]=1 \
-.          if \\n[#BIB_ALLOWS_HEADERS] .HEADERS
-.\" Collect bibliography title string for TOC
-.       nr #TOC_ENTRY_PN \\n%+\\n[#PAGE_NUM_ADJ]
-.       af #TOC_ENTRY_PN \\g[#PAGENUMBER]
-.       ds $TOC_TITLE_ITEM \\*[$BIB_STRING]\\|
-.       PDF_BOOKMARK 1 \\*[$BIB_STRING]
-.       TITLE_TO_TOC
-.\" End collection of bibliography title string for TOC
-.\" Process bibliography
-.       if \\n[#PRINT_STYLE]=1 .vs \\n[#BIB_LEAD]u
-.       if \\n[#PRINT_STYLE]=2 \{\
-.          if \\n[#BIB_NO_COLS] \{\
-.             if \\n[#COLUMNS] .nr #COLUMNS_WERE_ON 1
-.             nr #COLUMNS 0
-.          \}
-.          nr #RESTORE_DOC_LEAD \\n[#DOC_LEAD]
-.          ie \\n[#ADJ_BIB_LEAD] .nr #DOC_LEAD \\n[#BIB_LEAD]
-.          el .DOC_LEAD \\n[#BIB_LEAD]u
-.       \}
-.       vpt 0
-.       ie r#BIB_STRING_ADVANCE .sp |\\n[#BIB_STRING_ADVANCE]u-1v
-.       el .sp |\\n[#T_MARGIN]u-1v
-.       vpt 1
-.       mk bc
-.       if \\n[#SLANT_ON] \{\
-\*[SLANTX]\c
-.       \}
-.       sp
-.       if !'\\*[$BIB_STRING]'' \{\
-.          if \\n[#PRINT_STYLE]=1 \{\
-.             TYPEWRITER
-.             vs \\n[#BIB_LEAD]u
-.          \}
-.          if \\n[#PRINT_STYLE]=2 \{\
-.             LL \\n[#DOC_L_LENGTH]u
-.             ta \\n[.l]u
-.             if \\n[#COLUMNS] \{\
-.                ie \\n[#BIB_NO_COLS] .LL \\n[#DOC_L_LENGTH]u
-.                el .LL \\n[#COL_L_LENGTH]u
-.                ta \\n[.l]u
-.             \}
-.             FAMILY  \\*[$BIB_STRING_FAM]
-.             FT      \\*[$BIB_STRING_FT]
-.             ps \\n[#BIB_PS]u\\*[$BIB_STRING_SIZE_CHANGE]
-.             vs      \\n[#BIB_LEAD]u
-.          \}
-.          if '\\*[$BIB_STRING_QUAD]'LEFT'   .LEFT
-.          if '\\*[$BIB_STRING_QUAD]'C'      .CENTER
-.          if '\\*[$BIB_STRING_QUAD]'CENTER' .CENTER
-.          if '\\*[$BIB_STRING_QUAD]'CENTRE' .CENTER
-.          if '\\*[$BIB_STRING_QUAD]'R'      .RIGHT
-.          if '\\*[$BIB_STRING_QUAD]'RIGHT'  .RIGHT
-.          EOL
-.          if \\n[#BIB_STRING_CAPS] .CAPS
-.          ie \\n[#BIB_STRING_UNDERLINE] \{\
-.             nr #FROM_BIB_STRING 1
-.             ie \\n[#BIB_STRING_UNDERLINE]=2 \
-.                UNDERSCORE2 "\\*[$BIB_STRING]"
-.             el .UNDERSCORE "\\*[$BIB_STRING]"
-.             rr #FROM_BIB_STRING
-.          \}
-.          el .PRINT "\\*[$BIB_STRING]"
-.       \}
-.       CAPS OFF
-.       FAMILY \\*[$BIB_FAMILY]
-.       FT \\*[$BIB_FT]
-.       ps -\\*[$BIB_STRING_SIZE_CHANGE]
-.       if \\n[#PRINT_STYLE]=1 \{\
-.          ie \\n[#SINGLE_SPACE]=1 .ALD \\n[#BIB_LEAD]*3u
-.          el \{\
-.             ie \\n[#BIB_SINGLESPACE]=1 .ALD \\n[#BIB_LEAD]u*3u
-.             el .ALD \\n[#BIB_LEAD]u
-.          \}
-.       \}
-.       if \\n[#PRINT_STYLE]=2 .ALD \\n[#BIB_LEAD]u*2u
-.       QUAD \\*[$BIB_QUAD]
-.       if \\n[#PRINT_STYLE]=1 \{\
-.          ie \\n[#SINGLE_SPACE]=1 .vs \\n[#BIB_LEAD]u
-.          el \{\
-.             ie \\n[#BIB_SINGLESPACE]=1 .vs \\n[#BIB_LEAD]u
-.             el .vs \\n[#BIB_LEAD]u
-.          \}
-.       \}
-.       if \\n[#PRINT_STYLE]=2 \{\
-.          ie \\n[#ADJ_BIB_LEAD] \
-.             nr #DOC_LEAD \\n[#RESTORE_DOC_LEAD]
-.          el .DOC_LEAD \\n[#RESTORE_DOC_LEAD]u
-.          rr #RESTORE_DOC_LEAD
-.       \}
-.       if \\n[#COLUMNS_WERE_ON] .nr #COLUMNS 1
-.       if \\n[#HEADER_STATE]=1 .HEADERS
-.       if \\n[#LINENUMBERS]=2 \{\
-.          NUMBER_LINES RESUME
-.          nr #LINENUMBERS 1
-.       \}
-.       di BIB
-.    \}
-.    el \{\
-.       br
-.       di
-.\" Part of workaround for refer spitting out a blank page if the
-.\" last ref falls on the bottom line.
-.       nr num*refs \\n[ref*num*first-pass]
-.       nf
-.       chop BIB
-.       BIB
-.    \}
-.END
-\#
-\# ====================================================================
-\#
-\# +++TABLE OF CONTENTS+++
-\#
-\# Strings to allocate space for leaders and entry page numbers
-\#
-.ds $TOC_PN \\*[ST102]\F[\\*[$TOC_PN_FAM]]\f[\\*[$TOC_PN_FT]]\
-\s[\\n[#TOC_PS]u]^\\*[ST102X]\\*[ST103]\s[\\*[$TOC_PN_SIZE_CHANGE]]\
-\|\|\|\h'\w'0'u*\\n[#TOC_PN_PADDING]u'\\*[ST103X]
-\#
-.ds $TOC_PN_TYPEWRITE \\*[ST102]^\\*[ST102X]\\*[ST103]\
-\h'\w'0'u*\\n[#TOC_PN_PADDING]u'\\*[ST103X]
-\#
-\# TOC collector
-\#
-.MAC TO_TOC END
-.    if !'\\n[.ev]'TOC_EV' .ev TOC_EV
-.    nr #TOC_CH_NUM_INDENT \w'\\*[$TOC_CH_NUM]'
-.    da TOC_ENTRIES
-\!.  ie \\\\n[#SKIP_ENTRY]=1 \{\
-.     rr #SKIP_ENTRY
-\!.  \}
-\!.  el \{\
-.       br
-.       ie \\n[#PRINT_STYLE]=1 \{\
-\!.        fam \\*[$TYPEWRITER_FAM]
-\!.        ft  R
-\!.        ps \\*[$TYPEWRITER_PS]
-.          ds _TYPEWRITE _TYPEWRITE
-.       \}
-.       el \{\
-.          ie '\\$0'HD_TO_TOC' \{\
-\!.           ps \\n[#TOC_PS]u\\*[$TOC_HEAD_\\n[#LEVEL]_SIZE]
-.          \}
-.          el \{\
-\!.           FAMILY  \\*[$TOC_TITLE_FAM]
-\!.           FT      \\*[$TOC_TITLE_FT]
-\!.           ps \\n[#TOC_PS]u\\*[$TOC_TITLE_SIZE]
-.          \}
-.       \}
-.       if \\n[#PRINT_STYLE]=2 \{\
-.          rm _TYPEWRITE
-.          if \\n[#SPACE_TOC_ITEMS] \{\
-.             if \\n[#POST_TOP]=1 \{\
-.                ie !\\n[#LEVEL]=\\n[#LAST_LEVEL] \{\
-.                   ie \\n[#LEVEL]>\\n[#LAST_LEVEL] \!.sp .2v
-.                   el \!.sp .4v
-.                \}
-.                el \{\
-.                   if \\n[#COLLATED_DOC] \
-.                      if '\\$0'TITLE_TO_TOC' \!.sp .4v
-.                \}
-.             \}
-.          \}
-.       \}
-\!.     PAD_MARKER ^
-.       if !'\\$0'HD_TO_TOC' \{\
-\!.        if \\n[#TOC_TITLE_CAPS]=1 .CAPS
-.       \}
-.       if '\\$0'HD_TO_TOC' \{\
-.          nr #POST_TOP 1
-\!.        if \\n[#TOC_HEAD_\\n[#LEVEL]_CAPS]=1 .CAPS
-.       \}
-\!.     vpt 0
-.       ie '\\$0'HD_TO_TOC' \{\
-\!.        PAD \
-"\\f[\\*[$TOC_HEAD_\\n[#LEVEL]_FAM]\
-\\*[$TOC_HEAD_\\n[#LEVEL]_FT]]\
-\h'\\\\n[#TOC_INDENT_ADJ]u'\h'\\n[#TOC_HEAD_\\n[#LEVEL]_INDENT]u'\
-\\*[$TOC_HD_NUM]\\*[$TOC_HEAD_\\n[#LEVEL]_ITEM]\\*[$TOC_PN\\*[_TYPEWRITE]]" \
-"\\*[PDFBOOKMARK.NAME]"
-.       \}
-.       el \{\
-\!.        PAD \
-"\\f[\\*[$TOC_TITLE_FAM]\\*[$TOC_TITLE_FT]]\
-\h'\\n[#TOC_TITLE_INDENT]u'\\*[$TOC_TITLE_ITEM]\\*[$TOC_PN\\*[_TYPEWRITE]]" \
-"\\*[PDFBOOKMARK.NAME]"
-.       \}
-.       if '\\$0'HD_TO_TOC' \{\
-\!.        if \\n[#TOC_HEAD_\\n[#LEVEL]_CAPS]=1 .CAPS OFF
-.       \}
-.       if !'\\$0'HD_TO_TOC' \{\
-\!.        if \\n[#TOC_TITLE_CAPS]=1 .CAPS OFF
-.       \}
-\!.     PAD_MARKER #
-\!.     EOL
-\!.     ST 102 L
-\!.     ST 103 R
-.       if \\n[#PRINT_STYLE]=2 \{\
-\!.        FAMILY  \\*[$TOC_PN_FAM]
-\!.        FT      \\*[$TOC_PN_FT]
-\!.        ps \\n[#TOC_PS]u
-.       \}
-\!.     TAB 102
-\!.     PRINT \\*[LEADER]
-\!.     TN
-.       if \\n[#PRINT_STYLE]=2 \{\
-\!.        ps \\*[$TOC_PN_SIZE_CHANGE]u
-.       \}
-\!.     PRINT \\n[#TOC_ENTRY_PN]
-\!.     TQ
-\!.     vpt
-\!. \}
-.   da
-.   ev
-.END
-\#
-.ALIAS HD_TO_TOC  TO_TOC
-.ALIAS TITLE_TO_TOC TO_TOC
-\#
-\# Control macros for toc
-\# ----------------------
-\#
-\# TOC TITLE STYLE
-\# ---------------
-\# *Arguments:
-\#   FAMILY <family>
-\#   FONT   <font>
-\#   SIZE   <+|-n>
-\#   COLOR  <color>
-\#   CAPS
-\#   INDENT
-\# *Function:
-\#   Assigns complete style parameters to TITLEs (doc titles,
-\#   chapter titles, etc) in the TOC.
-\# *Notes:
-\#   TITLEs are not headings, therefore they require their own style
-\#   macro.  Otherwise, the same as TOC_ENTRY_STYLE.
-\#
-.MAC TOC_TITLE_STYLE END
-.    nr #ARG_NUM 0 1
-.    nr #ATTRIB \\n[#NUM_ARGS]
-.    while \\n+[#ARG_NUM]<=\\n[#ATTRIB] \{\
-.       if '\\$1'FAMILY' \{\
-.          shift
-.          ds $TOC_TITLE_FAM  \\$1
-.          shift
-.       \}
-.       if '\\$1'FONT' \{\
-.          shift
-.          ds $TOC_TITLE_FT   \\$1
-.          shift
-.       \}
-.       if '\\$1'SIZE' \{\
-.          shift
-.          ds $TOC_TITLE_SIZE \\$1
-.          shift
-.       \}
-.       if '\\$1'CAPS' \{\
-.          nr #TOC_TITLE_CAPS 1
-.          shift
-.       \}
-.       if '\\$1'NO_CAPS' \{\
-.          rr #TOC_TITLE_CAPS
-.          shift
-.       \}
-.       if '\\$1'INDENT' \{\
-.          shift
-.          nr #TOC_TITLE_INDENT \\$1
-.          shift
-.       \}
-.    \}
-.END
-\#
-\# TOC HEADER STRING
-\# -----------------
-\# *Argument:
-\#   <string for "doc header" of first toc page>
-\# *Function:
-\#   Creates or modifies string $TOC_HEADER_STRING
-\# *Notes:
-\#   Default is "Contents".
-\#
-.MAC TOC_HEADER_STRING END
-.    ds $TOC_HEADER_STRING \\$1
-.END
-\#
-\# TOC POINT SIZE
-\# --------------
-\# *Argument:
-\#   <base point size for toc pages>
-\# *Function:
-\#   Creates or modifies register #TOC_PS.
-\# *Notes:
-\#   This size control macro differs from other size control macros
-\#   in that it sets an absolute point size, not a relative one.
-\#   See notes for ENDNOTE_PT_SIZE for explanation.
-\#
-\#   No unit of measure required (points assumed).  Default is 12.5
-\#   for TYPESET.
-\#
-.MAC TOC_PT_SIZE END
-.    nr #TOC_PS (p;\\$1)
-.END
-\#
-\# TOC ENTRIES PAGE NUMBERS PADDING
-\# --------------------------------
-\# *Argument:
-\#   <number of placeholders for toc entries page numbers>
-\# *Function:
-\#   Creates or modifies register #TOC_PN_PADDING.
-\# *Notes:
-\#   "Placeholders" is the maximum number of digits in a page
-\#   number numeral.
-\#
-\#   Default is 3.
-\#
-.MAC TOC_PADDING END
-.    nr #TOC_PN_PADDING \\$1
-.END
-\#
-\# PAGINATE TOC
-\# ------------
-\# *Argument:
-\#   <none> | <anything>
-\# *Function:
-\#   Creates or removes register #PAGINATE_TOC.
-\# *Notes:
-\#   Default is to paginate toc.
-\#
-.MAC PAGINATE_TOC END
-.    ie '\\$1'' .nr #PAGINATE_TOC 1
-.    el .nr #PAGINATE_TOC 0
-.END
-\#
-.MAC TOC_FIRST_PAGENUM END
-.    nr #TOC_START_PAGENUM \\$1
-.END
-\#
-\# TOC PAGES PAGE-NUMBERING STYLE
-\# ------------------------------
-\# *Argument:
-\#   DIGIT | ROMAN | roman | ALPHA | alpha
-\# *Function:
-\#   Creates or modifies string $TOC_PN_STYLE
-\# *Notes:
-\#   Page numbering style for page numbers that appear in the
-\#   headers/footers of toc pages.  See notes for PAGENUM_STYLE.
-\#
-\#   Default is roman.
-\#
-.MAC TOC_PAGENUM_STYLE END
-.    ds $TOC_PN_STYLE \\$1
-.END
-\#
-\# TOC RECTO_VERSO SWITCH
-\# ----------------------
-\# *Argument:
-\#   <none> | <anything>
-\# *Function:
-\#   Creates or removes register #TOC_RV_SWITCH
-\# *Notes:
-\#   Allows switching of L/R margins if a doc is recto/verso and
-\#   the first toc page happens to fall the wrong way
-\#
-.MAC TOC_RV_SWITCH END
-.    ie '\\$1'' .nr #TOC_RV_SWITCH 1
-.    el .rr #TOC_RV_SWITCH
-.END
-\#
-\# TOC ENTRY SPACING
-\# -----------------
-\# *Arguments:
-\#   <none> | <anything>
-\# *Function:
-\#   Toggles whether a small amount of space is inserted between TOC
-\#   entries for greater legibility.
-\#
-.MAC SPACE_TOC_ITEMS END
-.    ie !'\\$1'' .rr #SPACE_TOC_ITEMS
-.    el .nr #SPACE_TOC_ITEMS 1
-.END
-\#
-\# NUMBERING OF TOC ENTRIES
-\# ------------------------
-\# *Arguments:
-\#   FULL | TRUNCATE | NONE
-\# *Function:
-\#   Determines how, or whether, to prepend heading numbers to TOC
-\#   entries.
-\# *Notes:
-\#   FULL means the complete numbering string (default).
-\#
-\#   TRUNCATE means prepend a single digit sufficient to identify
-\#   an entry's place in the numbering scheme with reference to the
-\#   level above it.  Thus, if a HEADING 1 is the second HEADING 1
-\#   and therefore numbered "2.", a HEADING 2 beneath it (in the TOC)
-\#   will have only "1." prepended to the entry; TOC indenting makes it
-\#   evident under which level the HEADING 2 belongs.
-\#
-\#   Note that TRUNCATE also removes chapter numbers, if
-\#   PREFIX_CHAPTER_NUMBER is on.
-\#
-.MAC TOC_ENTRY_NUMBERS END
-.    if '\\$1'TRUNCATE' .nr #TRUNC_TOC_HD_NUM 1
-.    if '\\$1'FULL'     .nr #TRUNC_TOC_HD_NUM 0
-.    if '\\$1'NONE'     .nr #TOC_NO_HD_NUM 1
-.END
-\#
-\# User defined TITLE entry string
-\#
-.MAC TOC_TITLE_ENTRY END
-.    nr #USER_SET_TITLE_ITEM 1
-.    ds $USER_SET_TITLE_ITEM \\$1
-.END
-\#
-\# APPEND AUTHOR(S) TO TOC DOC TITLE ENTRIES
-\# -----------------------------------------
-\# *Argument:
-\#   <none> | <name(s) of author(s) as they should appear in toc doc title entries>
-\# *Function:
-\#   Creates register #TOC_AUTHORS (to tell TOC to append authors
-\#   to toc doc title entries).  Optionally creates string
-\#   $TOC_AUTHORS.
-\# *Notes:
-\#   Normally, TOC does not append the author(s) to a toc doc title
-\#   entry.  This special macro instructs TOC to do so.
-\#
-\#   If user has multiple authors for each doc when collating,
-\#   TOC_APPENDS_AUTHOR "<string>" must be inserted somewhere between
-\#   COLLATE and START in each doc.  Otherwise, mom prints only the
-\#   first author given to AUTHOR.
-\#
-.MAC TOC_APPENDS_AUTHOR END
-.    nr #TOC_AUTHORS 1
-.    if !'\\$1'' .ds $TOC_AUTHORS \\$1
-.END
-\#
-\# TABLE OF CONTENTS
-\# -----------------
-\# *Arguments:
-\#   none
-\# *Function:
-\#   Takes care of the administrivia of setting up the TOC as if
-\#   it's a collated doc, then outputs the formatted TOC_ENTRIES
-\#   diversion.
-\#
-.MAC TOC END
-.    char \[leader] " .
-.    LEADER_CHARACTER \[leader]
-.    ie \\n[#COLLATED_DOC] \{\
-.       nr #TOC_INDENT_ADJ 1.5m
-.       if \\n[#PREFIX_CH_NUM] .nr #TOC_INDENT_ADJ \\n[#TOC_CH_NUM_INDENT]
-.    \}
-.    el \{\
-.       nr #SKIP_ENTRY 1
-.       nr #TOC_INDENT_ADJ 0
-.    \}
-.    nr #TOC 1
-.    nr TOC.RELOCATE 0
-.    if \\n[#LINENUMBERS]=1 \{\
-.       NUMBER_LINES OFF
-.       nr #LINENUMBERS 2
-.    \}
-.    if !r #PAGINATE_TOC .PAGINATE_TOC
-.    nr #TOC_FIRST_PAGE 1
-.    if \\n[#FINIS] \{\
-.       if \\n[#FOOTERS_WERE_ON] \
-.          FOOTERS \" Have to turn FOOTERS on for next bit to work, so we can't skip this step
-.    \}
-.    if \\n[#FOOTERS_ON]=1 \{\
-.       if !'\\*[$HDRFTR_CENTER_OLD]'' .ds $HDRFTR_CENTER \\*[$HDRFTR_CENTER_OLD]
-.       ie \\n[#PAGINATE_TOC]=1 .PAGINATE
-.       el .PAGINATION OFF
-.    \}
-.    if \\n[#FOOTERS_WERE_ON] .FOOTERS OFF  \" But have to turn FOOTERS off again so they don't print when FINIS was called
-.    rr #COLUMNS
-.    COLLATE
-.    if \\n[#PRINT_STYLE]=1 \{\
-.       if \\n[#SINGLE_SPACE] .vs 24
-.       DOC_LEAD_ADJUST
-.    \}
-.    if \\n[#PRINT_STYLE]=2 .vs \\n[#TOC_LEAD]u
-.    if \\n[#FINIS] \{\
-.       if \\n[#FOOTERS_WERE_ON] .FOOTERS  \" Finally, turn footers on if they were on
-.       rr #FOOTERS_WERE_ON
-.       if \\n[#PAGINATION_WAS_ON] \{\
-.          nr #PAGINATE 1
-.          rr #PAGINATION_WAS_ON
-.       \}
-.       rr #FINIS
-.    \}
-.    ie \\n[#PAGINATE_TOC]=1 .PAGINATE
-.    el .PAGINATION OFF
-.    ds $HDRFTR_CENTER \\*[$HDRFTR_CENTER_NEW]
-.    rm $HDRFTR_CENTER_OLD
-.    rm $HDRFTR_CENTER_NEW
-.    rr #COLLATED_DOC
-.    DOCHEADER OFF \\n[#T_MARGIN]u-\\n[#DOC_LEAD]u
-.    if !r #TOC_START_PAGENUM .nr #TOC_START_PAGENUM 1
-.       PAGENUMBER \\n[#TOC_START_PAGENUM]
-.    if \\n[#LINENUMBERS]=2 .nr #LINENUMBERS 3
-.    L_MARGIN   \\n[#DOC_L_MARGIN]u
-.    LL         \\n[#DOC_L_LENGTH]u
-.    HEADER_CENTER "\\*[$TOC_HEADER_STRING]
-.    if \\n[#SLANT_ON] .nop \\*[SLANTX]
-.    START
-.    PAGENUM_STYLE \\*[$TOC_PN_STYLE]
-.    PDF_BOOKMARK 1 \\*[$TOC_HEADER_STRING]
-.    if \\n[#PRINT_STYLE]=1 .TYPEWRITER
-.    if \\n[#PRINT_STYLE]=2 \{\
-.       FAMILY  \\*[$TOC_HEADER_FAM]
-.       FT      \\*[$TOC_HEADER_FT]
-.       ps \\n[#TOC_PS]u\\*[$TOC_HEADER_SIZE_CHANGE]
-.    \}
-.    ie \\n[#PRINT_STYLE]=1 \{\
-.       CAPS
-.       UNDERSCORE 3p "\\*[$TOC_HEADER_STRING]"
-.       CAPS      OFF
-.    \}
-.    el .PRINT \\*[$TOC_HEADER_STRING]
-.    sp
-.    nf
-.    TOC_ENTRIES
-.    rr #TOC
-.    if \\n[#LINENUMBERS]=3 \{\
-.       NUMBER_LINES RESUME
-.       nr #LINENUMBERS 1
-.       nn 1
-.    \}
-.    rr #TOC
-.    pdfsync
-.END
-\#
-\# ====================================================================
-\#
-\# +++COLUMNS+++
-\#
-\# COLUMNS
-\# -------
-\# *Arguments:
-\#   <number of columns>  <width of gutters>
-\# *Function:
-\#   Creates registers associated with setting docs in columns.
-\#   Calculates column line lengths and offsets
-\# *Notes:
-\#   COLUMNS, if used, s/b the last macro invoked before START.
-\#
-.MAC COLUMNS END
-.    if \\n[#IGNORE_COLUMNS]=1 .return
-.    nr #COLUMNS 1
-.    nr #NUM_COLS \\$1
-.    nr #GUTTER (\\$2)
-.    nr #COL_L_LENGTH \\n[#L_LENGTH]-(\\n[#GUTTER]*(\\n[#NUM_COLS]-1))/\\n[#NUM_COLS]
-.    nr #COL_TOTAL 0 \\n[#COL_L_LENGTH]+\\n[#GUTTER]
-.    nr #COL_NUM 0 1
-.    while !\\n[#COL_NUM]=\\n[#NUM_COLS] \{\
-.       nr #COL_\\n+[#COL_NUM]_L_MARGIN \\n[#L_MARGIN]+\\n[#COL_TOTAL]
-.       nr #COL_TOTAL \\n+[#COL_TOTAL]
-.    \}
-.    if \\n[#NUM_COLS]=1 \
-.       if !\\n[#COLLATE]=1 .MN_INIT
-.    rr #COL_TOTAL
-.    rr #COL_NUM
-.END
-\#
-\# MARK COL V-POSITION AFTER DOCHEADER
-\# -----------------------------------
-\# *Arguments:
-\#   none
-\# *Function:
-\#   Sets 1st page dc register.
-\# *Notes:
-\#   Only required if manual spacing, positive or negative, precedes
-\#   start of columns on first page of doc.
-\#
-.MAC COL_MARK END
-.    mk dc
-.END
-\#
-\# NEXT COLUMN
-\# -----------
-\# *Arguments:
-\#   <none>
-\# *Function:
-\#   Breaks current column and moves to next column.
-\#   If current column is the last on the page, breaks
-\#   to a new page.
-\#
-.MAC COL_NEXT END
-.    if \\n[#COLUMNS] \{\
-.       nr #COL_NEXT 1
-.       ie '\\$0'COL_NEXT' .br
-.       el \{\
-.          brp
-.          RLD 1v
-.       \}
-.       ie \\n[#COL_NUM]=\\n[#NUM_COLS] .bp
-.       el .FOOTER
-.    \}
-.END
-\#
-\# ====================================================================
-\#
-\# +++LISTS+++
-\#
-\# LIST
-\# ----
-\# *Arguments:
-\#   [ BULLET | DASH | DIGIT | alpha | ALPHA | roman | ROMAN | USER ] \
-\#   [ <separator> | NONE ] [ <prefix> ] [ <anything> ]
-\# *Function:
-\#   Stores indent information in effect prior to invocation and
-\#   initializes a list with the supplied enumerator (and separator).
-\# *Notes:
-\#   Default enumerator is a bullet.
-\#
-\#   Enumerator *must* be supplied for every list that's to the
-\#   right of another list, every time, unless the default bullet is
-\#   desired.
-\#
-\#   <anything> moves back one list level intuitively, or exits lists
-\#   completely if the level in which it's invoked is the first.
-\#
-.MAC LIST END
-.    ds $1ST_LETTER \\$1
-.    if !'\\*[$1ST_LETTER]'' .substring $1ST_LETTER 0 0
-.    if '\\*[$1ST_LETTER]'r' .ds $1ST_LETTER R
-.    ie '\\*[$1ST_LETTER]'R' \{\
-.       ds $LAST_CHAR \\$1
-.       substring $LAST_CHAR -1
-.       if !\B'\\*[$LAST_CHAR]' \{\
-.          if !'\\$1'ROMAN' \{\
-.             LIST OFF
-.             return
-.          \}
-.          if !'\\$1'roman' \{\
-.             LIST OFF
-.             return
-.          \}
-.          tm1 "[mom]: You must append a number to the \\$1 argument to \\$0.
-.          tm1 "       The number should be the total number of items in this list.
-.          tm1 "       See the documentation.
-.          ab Aborting '\\n[.F]' at \\$0, line \\n[.c].
-.       \}
-.       ds $ROMAN_WIDTH \\$1
-.          substring $ROMAN_WIDTH 1
-.       while !\B'\\*[$ROMAN_WIDTH]' \{\
-.          substring $ROMAN_WIDTH 1
-.       \}
-.       length #ROMAN_LENGTH \\*[$ROMAN_WIDTH]
-.       ds $LIST_ARG_1 \\$1
-.       substring $LIST_ARG_1 0 -(\\n[#ROMAN_LENGTH]+1)
-.    \}
-.    el .ds $LIST_ARG_1 \\$1
-.    if !r#DEPTH \{\
-.       nr #STORED_HL_INDENT \\n[#HL_INDENT]
-.       nr #STORED_T_INDENT  \\n[#T_INDENT]
-.       nr #CURRENT_L_LENGTH \\n[.l]
-.       nr #DEPTH 0 1
-.       if \\n[#INDENT_ACTIVE]=1 \{\
-.          if \\n[#INDENT_LEFT_ACTIVE]=1 \{\
-.             nr #STORED_L_INDENT \\n[#L_INDENT]
-.             nr #RESTORE_PREV_INDENT 1
-.          \}
-.          if \\n[#INDENT_BOTH_ACTIVE]=1 \{\
-.             nr #STORED_BL_INDENT \\n[#BL_INDENT]
-.             nr #STORED_BR_INDENT \\n[#BR_INDENT]
-.             IBX
-.             nr #ORIG_L_LENGTH \\n[.l]
-.             IB
-.             nr #RESTORE_PREV_INDENT 2
-.          \}
-.          if \\n[#INDENT_RIGHT_ACTIVE]=1 \{\
-.             nr #STORED_R_INDENT \\n[#R_INDENT]
-.             IRX
-.             nr #ORIG_L_LENGTH \\n[.l]
-.             IR
-.             nr #RESTORE_PREV_INDENT 3
-.             if \\n[#INDENT_LEFT_ACTIVE]=1 .nr #RESTORE_PREV_INDENT 4
-.          \}
-.       \}
-.    \}
-.    if \\n[#NUM_ARGS]=0 \{\
-.       nr #ARGS_TO_LIST 1 \" So default behaves as if LIST BULLET
-.       ds $ENUMERATOR\\n+[#DEPTH] \[bu]
-.       ds $ENUMERATOR_TYPE\\n[#DEPTH] other
-.       ds $SEPARATOR
-.    \}
-.    if \\n[#NUM_ARGS]>0 \{\
-.       rr #ARGS_TO_LIST \" Clear this before processing arg 1.
-.       if '\\*[$LIST_ARG_1]'DASH' \{\
-.          nr #ARGS_TO_LIST 1
-.          ds $ENUMERATOR\\n+[#DEPTH] \[en]
-.          ds $ENUMERATOR_TYPE\\n[#DEPTH] other
-.          ds $SEPARATOR\\n[#DEPTH]
-.       \}
-.       if '\\*[$LIST_ARG_1]'BULLET' \{\
-.          nr #ARGS_TO_LIST 1
-.          ds $ENUMERATOR\\n+[#DEPTH] \[bu]
-.          ds $ENUMERATOR_TYPE\\n[#DEPTH] other
-.          ds $SEPARATOR\\n[#DEPTH]
-.       \}
-.       if '\\*[$LIST_ARG_1]'DIGIT' \{\
-.          nr #ARGS_TO_LIST 1
-.          nr #ENUMERATOR\\n+[#DEPTH] 0 1
-.          ds $ENUMERATOR_TYPE\\n[#DEPTH] register
-.          ds $SEPARATOR\\n[#DEPTH] .
-.          ds $PREFIX\\n[#DEPTH]
-.          if \\n[#NUM_ARGS]>=2 \{\
-.             ie '\\$2'NONE' .ds $SEPARATOR\\n[#DEPTH]
-.             el .ds $SEPARATOR\\n[#DEPTH] \\$2
-.             if \\n[#NUM_ARGS]=3 .ds $PREFIX\\n[#DEPTH] \\$3
-.          \}
-.       \}
-.       if '\\*[$LIST_ARG_1]'alpha' \{\
-.          nr #ARGS_TO_LIST 1
-.          nr #ENUMERATOR\\n+[#DEPTH] 0 1
-.          af #ENUMERATOR\\n[#DEPTH] a
-.          ds $ENUMERATOR_TYPE\\n[#DEPTH] register
-.          ds $SEPARATOR\\n[#DEPTH] )
-.          ds $PREFIX\\n[#DEPTH]
-.          if \\n[#NUM_ARGS]>=2 \{\
-.             ie '\\$2'NONE' .ds $SEPARATOR\\n[#DEPTH]
-.             el .ds $SEPARATOR\\n[#DEPTH] \\$2
-.             if \\n[#NUM_ARGS]=3 .ds $PREFIX\\n[#DEPTH] \\$3
-.          \}
-.       \}
-.       if '\\*[$LIST_ARG_1]'ALPHA' \{\
-.          nr #ARGS_TO_LIST 1
-.          nr #ENUMERATOR\\n+[#DEPTH] 0 1
-.          af #ENUMERATOR\\n[#DEPTH] A
-.          ds $ENUMERATOR_TYPE\\n[#DEPTH] register
-.          ds $SEPARATOR\\n[#DEPTH] )
-.          ds $PREFIX\\n[#DEPTH]
-.          if \\n[#NUM_ARGS]>=2 \{\
-.             ie '\\$2'NONE' .ds $SEPARATOR\\n[#DEPTH]
-.             el .ds $SEPARATOR\\n[#DEPTH] \\$2
-.             if \\n[#NUM_ARGS]=3 \{\
-.                ds $PREFIX\\n[#DEPTH] \\$3
-.             \}
-.          \}
-.       \}
-.       if '\\*[$1ST_LETTER]'R' \{\
-.          nr #ARGS_TO_LIST 1
-.          nr #ENUMERATOR\\n+[#DEPTH] 0 1
-.          if '\\*[$LIST_ARG_1]'roman' .af #ENUMERATOR\\n[#DEPTH] i
-.          if '\\*[$LIST_ARG_1]'ROMAN' .af #ENUMERATOR\\n[#DEPTH] I
-.          ds $ENUMERATOR_TYPE\\n[#DEPTH] roman
-.          ds $SEPARATOR\\n[#DEPTH] )
-.          ds $PREFIX\\n[#DEPTH]
-.          if \\n[#NUM_ARGS]>=2 \{\
-.             ie '\\$2'NONE' .ds $SEPARATOR\\n[#DEPTH]
-.             el .ds $SEPARATOR\\n[#DEPTH] \\$2
-.             if \\n[#NUM_ARGS]=3 .ds $PREFIX\\n[#DEPTH] \\$3
-.          \}
-.       \}
-.       if '\\*[$LIST_ARG_1]'USER' \{\
-.          nr #ARGS_TO_LIST 1
-.          ds $ENUMERATOR\\n+[#DEPTH] \\$2
-.          ds $ENUMERATOR_TYPE\\n[#DEPTH] other
-.          ds $SEPARATOR\\n[#DEPTH]
-.          ds $PREFIX\\n[#DEPTH]
-.       \}
-.       if \\n[#NUM_ARGS]=1 \{\
-.          if !r#ARGS_TO_LIST \{\
-.             ie \\n[#DEPTH]=1 \{\
-.                ie \\n[#NEXT_DEPTH_BACK]=0 \{\
-.                   SET_LIST_INDENT
-.                   if \\n[#QUIT]=1 \{\
-.                      QUIT_LISTS
-.                      return
-.                   \}
-.                   return
-.                \}
-.                el \{\
-.                   QUIT_LISTS
-.                   return
-.                \}
-.             \}
-.             el \{\
-.                SET_LIST_INDENT
-.                return
-.             \}
-.          \}
-.       \}
-.    \}
-.    nr #TOTAL_LISTS \\n[#DEPTH]
-.    if '\\*[$ENUMERATOR_TYPE\\n[#DEPTH]]'register' \{\
-.       nr #LIST_INDENT\\n[#DEPTH] \
-\w'\\*[$PREFIX\\n[#DEPTH]]m\\*[$SEPARATOR\\n[#DEPTH]]\ '
-.       if '\\*[$LIST_ARG_1]'ALPHA' nr #LIST_INDENT\\n[#DEPTH] \
-\w'\\*[$PREFIX\\n[#DEPTH]]M\\*[$SEPARATOR\\n[#DEPTH]]\ '
-.    \}
-.    if '\\*[$ENUMERATOR_TYPE\\n[#DEPTH]]'roman' \
-.       GET_ROMAN_INDENT
-.    if '\\*[$ENUMERATOR_TYPE\\n[#DEPTH]]'other' \
-.       nr #LIST_INDENT\\n[#DEPTH] \w'\\*[$ENUMERATOR\\n[#DEPTH]]\0'
-.    ll \\n[#CURRENT_L_LENGTH]u
-.    ie \\n[#DEPTH]=1 \{\
-.       ie \\n[#INDENT_ACTIVE]=1 \{\
-.          if \\n[#INDENT_LEFT_ACTIVE]=1 \{\
-.             nr #L_INDENT \\n[#L_INDENT]+\\n[#LIST_INDENT\\n[#DEPTH]]
-.             nr #HL_INDENT\\n[#DEPTH] \\n[#LIST_INDENT\\n[#DEPTH]]
-.             nr #LIST_INDENT\\n[#DEPTH] \\n[#L_INDENT]
-.          \}
-.          if \\n[#INDENT_BOTH_ACTIVE]=1 \{\
-.             nr #L_INDENT \\n[#BL_INDENT]+\\n[#LIST_INDENT\\n[#DEPTH]]
-.             nr #HL_INDENT\\n[#DEPTH] \\n[#LIST_INDENT\\n[#DEPTH]]
-.             nr #LIST_INDENT\\n[#DEPTH] \\n[#L_INDENT]
-.          \}
-.          if \\n[#INDENT_RIGHT_ACTIVE]=1 \{\
-.             ie \\n[#INDENT_LEFT_ACTIVE]=1 \{\
-.             \" Don't do anything; we already have a left indent
-.             \}
-.             el \{\
-.                nr #L_INDENT +\\n[#LIST_INDENT\\n[#DEPTH]]
-.                nr #HL_INDENT\\n[#DEPTH] \\n[#LIST_INDENT\\n[#DEPTH]]
-.             \}
-.          \}
-.       \}
-.       el \{\
-.          nr #L_INDENT +\\n[#LIST_INDENT\\n[#DEPTH]]
-.          nr #HL_INDENT\\n[#DEPTH] \\n[#LIST_INDENT\\n[#DEPTH]]
-.       \}
-.    \}
-.    el \{\
-.       nr #L_INDENT +\\n[#LIST_INDENT\\n[#DEPTH]]
-.       nr #HL_INDENT\\n[#DEPTH] \\n[#LIST_INDENT\\n[#DEPTH]]
-.    \}
-.END
-\#
-\# ITEM
-\# ----
-\# *Arguments:
-\#   none
-\# *Function:
-\#   Prints enumerator for a given list depth and prepares mom to
-\#   receive the text of an item.
-\#
-.MAC ITEM END
-.    if !r#DEPTH .return
-.    if \\n[#LINENUMBERS]=1 \{\
-.       NUMBER_LINES OFF
-.       nr #LINENUMBERS 2
-.    \}
-.    if \\n[#KERN]=1 \{\
-.       nr #KERN_WAS_ON 1
-.       KERN OFF
-.    \}
-.    rr #IN_ITEM
-.    IL
-.    nr #IN_ITEM 1
-.    ll \\n[#CURRENT_L_LENGTH]u \" Set ll again because IL turns IB off.
-.    TRAP OFF
-.    HI \\n[#HL_INDENT\\n[#DEPTH]]u
-.    if '\\*[$SEPARATOR\\n[#DEPTH]]')' .nr #SEP_TYPE 1
-.    if '\\*[$SEPARATOR\\n[#DEPTH]]']' .nr #SEP_TYPE 1
-.    if '\\*[$SEPARATOR\\n[#DEPTH]]'}' .nr #SEP_TYPE 1
-.    ie \\n[#IN_BIB_LIST]=1 \{\
-.       ie \\n[#ENUMERATOR\\n[#DEPTH]]<9 \{\
-.          ie \\n[#SEP_TYPE]=1 .PRINT \
-\v'-.085m'\\*[$PREFIX\\n[#DEPTH]]\v'.085m'\
-\\n+[#ENUMERATOR\\n[#DEPTH]]\v'-.085m'\\*[$SEPARATOR\\n[#DEPTH]]\v'.085m'
-.          el .PRINT \
-\\*[$PREFIX\\n[#DEPTH]]\\n+[#ENUMERATOR\\n[#DEPTH]]\\*[$SEPARATOR\\n[#DEPTH]]
-.       \}
-.       el \{\
-.          ie \\n[#SEP_TYPE]=1 .PRINT \
-\h'-\w'\0'u'\v'-.085m'\\*[$PREFIX\\n[#DEPTH]]\v'.085m'\
-\\n+[#ENUMERATOR\\n[#DEPTH]]\v'-.085m'\\*[$SEPARATOR\\n[#DEPTH]]\v'.085m'
-.          el .PRINT \
-\h'-\w'\0'u'\
-\\*[$PREFIX\\n[#DEPTH]]\\n+[#ENUMERATOR\\n[#DEPTH]]\\*[$SEPARATOR\\n[#DEPTH]]
-.       \}
-.    \}
-.    el \{\
-.       ie '\\*[$ENUMERATOR_TYPE\\n[#DEPTH]]'register' \{\
-.\" DIGIT
-.          ie '\\g[#ENUMERATOR\\n[#DEPTH]]'0' \{\
-.             ie \\n[#PAD_LIST_DIGITS\\n[#DEPTH]]=1 \{\
-.                ie \\n[#ENUMERATOR\\n[#DEPTH]]<9 \{\
-.                   ie \\n[#SEP_TYPE]=1 .PRINT \
-\0\v'-.085m'\\*[$PREFIX\\n[#DEPTH]]\v'.085m'\\n+[#ENUMERATOR\\n[#DEPTH]]\
-\v'-.085m'\\*[$SEPARATOR\\n[#DEPTH]]\v'.085m'
-.                   el .PRINT \
-\0\\*[$PREFIX\\n[#DEPTH]]\\n+[#ENUMERATOR\\n[#DEPTH]]\\*[$SEPARATOR\\n[#DEPTH]]
-.                \}
-.                el \{\
-.                   ie \\n[#SEP_TYPE]=1 .PRINT \
-\v'-.085m'\\*[$PREFIX\\n[#DEPTH]]\v'.085m'\\n+[#ENUMERATOR\\n[#DEPTH]]\
-\v'-.085m'\\*[$SEPARATOR\\n[#DEPTH]]\v'.085m'
-.                   el .PRINT \
-\\*[$PREFIX\\n[#DEPTH]]\\n+[#ENUMERATOR\\n[#DEPTH]]\\*[$SEPARATOR\\n[#DEPTH]]
-.                \}
-.             \}
-.             el \{\
-.                ie \\n[#SEP_TYPE]=1 .PRINT \
-\v'-.085m'\\*[$PREFIX\\n[#DEPTH]]\v'.085m'\\n+[#ENUMERATOR\\n[#DEPTH]]\
-\v'-.085m'\\*[$SEPARATOR\\n[#DEPTH]]\v'.085m'
-.                el .PRINT \
-\\*[$PREFIX\\n[#DEPTH]]\\n+[#ENUMERATOR\\n[#DEPTH]]\\*[$SEPARATOR\\n[#DEPTH]]
-.             \}
-.          \}
-.          el \{\
-.\" ALPHA
-.             ie '\\g[#ENUMERATOR\\n[#DEPTH]]'A' \{\
-.                ie \\n[#SEP_TYPE]=1 .PRINT \
-\v'-.085m'\\*[$PREFIX\\n[#DEPTH]]\v'.085m'\\n+[#ENUMERATOR\\n[#DEPTH]]\
-\v'-.085m'\\*[$SEPARATOR\\n[#DEPTH]]\v'.085m'
-.                el .PRINT \
-\\*[$PREFIX\\n[#DEPTH]]\\n+[#ENUMERATOR\\n[#DEPTH]]\\*[$SEPARATOR\\n[#DEPTH]]
-.             \}
-.\" alpha
-.             el .PRINT \
-\\*[$PREFIX\\n[#DEPTH]]\\n+[#ENUMERATOR\\n[#DEPTH]]\\*[$SEPARATOR\\n[#DEPTH]]
-.          \}
-.       \}
-.       if '\\*[$ENUMERATOR_TYPE\\n[#DEPTH]]'roman' \{\
-.          ie \\n[#PAD_LIST_DIGITS\\n[#DEPTH]]=1 \{\
-.\" ROMAN I, padded
-.             ie '\\g[#ENUMERATOR\\n[#DEPTH]]'I' \{\
-.                ie \\n[#SEP_TYPE]=1 .PRINT \
-\h'\\n[#HL_INDENT\\n[#DEPTH]]u'\h'-\w'\\*[$PREFIX\\n[#DEPTH]]\
-\\n+[#ENUMERATOR\\n[#DEPTH]]\\*[$SEPARATOR\\n[#DEPTH]]\0'u'\
-\v'-.085m'\\*[$PREFIX\\n[#DEPTH]]\v'.085m'\\n[#ENUMERATOR\\n[#DEPTH]]\
-\v'-.085m'\\*[$SEPARATOR\\n[#DEPTH]]\v'.085m'
-.                el .PRINT \
-\h'\\n[#HL_INDENT\\n[#DEPTH]]u'\h'-\w'\\*[$PREFIX\\n[#DEPTH]]\
-\\n+[#ENUMERATOR\\n[#DEPTH]]\\*[$SEPARATOR\\n[#DEPTH]]\
-\0'u'\\*[$PREFIX\\n[#DEPTH]]\\n[#ENUMERATOR\\n[#DEPTH]]\
-\\*[$SEPARATOR\\n[#DEPTH]]
-.             \}
-.\" roman i, padded
-.             el .PRINT \
-\h'\\n[#HL_INDENT\\n[#DEPTH]]u'\h'-\w'\\*[$PREFIX\\n[#DEPTH]]\
-\\n+[#ENUMERATOR\\n[#DEPTH]]\\*[$SEPARATOR\\n[#DEPTH]]\0'u'\
-\\*[$PREFIX\\n[#DEPTH]]\\n[#ENUMERATOR\\n[#DEPTH]]\\*[$SEPARATOR\\n[#DEPTH]]
-.          \}
-.\" No pad
-.          el \{\
-.\" ROMAN I, no pad
-.             ie '\\g[#ENUMERATOR\\n[#DEPTH]]'I' \{\
-.                ie \\n[#SEP_TYPE]=1 .PRINT \
-\v'-.085m'\\*[$PREFIX\\n[#DEPTH]]\v'.085m'\\n+[#ENUMERATOR\\n[#DEPTH]]\
-\v'-.085m'\\*[$SEPARATOR\\n[#DEPTH]]\v'.085m'
-.                el .PRINT \
-\\*[$PREFIX\\n[#DEPTH]]\\n+[#ENUMERATOR\\n[#DEPTH]]\\*[$SEPARATOR\\n[#DEPTH]]
-.             \}
-.\" roman i, no pad
-.             el .PRINT \
-\\*[$PREFIX\\n[#DEPTH]]\\n+[#ENUMERATOR\\n[#DEPTH]]\\*[$SEPARATOR\\n[#DEPTH]]
-.          \}
-.       \}
-.       if '\\*[$ENUMERATOR_TYPE\\n[#DEPTH]]'other' \
-.          PRINT \\*[$ENUMERATOR\\n[#DEPTH]]\\*[$SEPARATOR\\n[#DEPTH]]
-.    \}
-.    rr #SEP_TYPE
-.    EOL
-.    if \\n[#REF]=1 \{\
-.       IL +\\n[#REF_BIB_INDENT]u
-.       ti \\n[#L_INDENT]u-\\n[#REF_BIB_INDENT]u
-.    \}
-.    TRAP
-.    if \\n[#KERN_WAS_ON]=1 \{\
-.       KERN
-.       rr #KERN_WAS_ON
-.    \}
-.    if \\n[#LINENUMBERS]=2 \{\
-.       NUMBER_LINES RESUME
-.       nr #LINENUMBERS 1
-.    \}
-.END
-\#
-\# A utility macro that determines the space to reserve for
-\# roman numeral enumerated lists.  Limit is 20 roman numerals
-\# per list.  If this isn't enough, the user can add to the
-\# macro.
-\#
-.MAC GET_ROMAN_INDENT END
-.    if '\\*[$LIST_ARG_1]'roman' \{\
-.       if '\\*[$ROMAN_WIDTH]'1' \{\
-.          ds $ROMAN_WIDTH\\n[#DEPTH] 1
-.          nr #LIST_INDENT\\n[#DEPTH] \
-\w'\\*[$PREFIX\\n[#DEPTH]]i\\*[$SEPARATOR\\n[#DEPTH]]\0'
-.       \}
-.       if '\\*[$ROMAN_WIDTH]'2' \{\
-.          ds $ROMAN_WIDTH\\n[#DEPTH] 2
-.          nr #LIST_INDENT\\n[#DEPTH] \
-\w'\\*[$PREFIX\\n[#DEPTH]]ii\\*[$SEPARATOR\\n[#DEPTH]]\0'
-.       \}
-.       if '\\*[$ROMAN_WIDTH]'3' \{\
-.          ds $ROMAN_WIDTH\\n[#DEPTH] 3
-.          nr #LIST_INDENT\\n[#DEPTH] \
-\w'\\*[$PREFIX\\n[#DEPTH]]iii\\*[$SEPARATOR\\n[#DEPTH]]\0'
-.       \}
-.       if '\\*[$ROMAN_WIDTH]'4' \{\
-.          ds $ROMAN_WIDTH\\n[#DEPTH] 4
-.          nr #LIST_INDENT\\n[#DEPTH] \
-\w'\\*[$PREFIX\\n[#DEPTH]]iii\\*[$SEPARATOR\\n[#DEPTH]]\0'
-.       \}
-.       if '\\*[$ROMAN_WIDTH]'5' \{\
-.          ds $ROMAN_WIDTH\\n[#DEPTH] 5
-.          nr #LIST_INDENT\\n[#DEPTH] \
-\w'\\*[$PREFIX\\n[#DEPTH]]iii\\*[$SEPARATOR\\n[#DEPTH]]\0'
-.       \}
-.       if '\\*[$ROMAN_WIDTH]'6' \{\
-.          ds $ROMAN_WIDTH\\n[#DEPTH] 6
-.          nr #LIST_INDENT\\n[#DEPTH] \
-\w'\\*[$PREFIX\\n[#DEPTH]]iii\\*[$SEPARATOR\\n[#DEPTH]]\0'
-.       \}
-.       if '\\*[$ROMAN_WIDTH]'7' \{\
-.          ds $ROMAN_WIDTH\\n[#DEPTH] 7
-.          nr #LIST_INDENT\\n[#DEPTH] \
-\w'\\*[$PREFIX\\n[#DEPTH]]vii\\*[$SEPARATOR\\n[#DEPTH]]\0'
-.       \}
-.       if '\\*[$ROMAN_WIDTH]'8' \{\
-.          ds $ROMAN_WIDTH\\n[#DEPTH] 8
-.          nr #LIST_INDENT\\n[#DEPTH] \
-\w'\\*[$PREFIX\\n[#DEPTH]]viii\\*[$SEPARATOR\\n[#DEPTH]]\0'
-.       \}
-.       if '\\*[$ROMAN_WIDTH]'9' \{\
-.          ds $ROMAN_WIDTH\\n[#DEPTH] 9
-.          nr #LIST_INDENT\\n[#DEPTH] \
-\w'\\*[$PREFIX\\n[#DEPTH]]viii\\*[$SEPARATOR\\n[#DEPTH]]\0'
-.       \}
-.       if '\\*[$ROMAN_WIDTH]'10' \{\
-.          ds $ROMAN_WIDTH\\n[#DEPTH] 10
-.          nr #LIST_INDENT\\n[#DEPTH] \
-\w'\\*[$PREFIX\\n[#DEPTH]]viii\\*[$SEPARATOR\\n[#DEPTH]]\0'
-.       \}
-.       if '\\*[$ROMAN_WIDTH]'11' \{\
-.          ds $ROMAN_WIDTH\\n[#DEPTH] 11
-.          nr #LIST_INDENT\\n[#DEPTH] \
-\w'\\*[$PREFIX\\n[#DEPTH]]viii\\*[$SEPARATOR\\n[#DEPTH]]\0'
-.       \}
-.       if '\\*[$ROMAN_WIDTH]'12' \{\
-.          ds $ROMAN_WIDTH\\n[#DEPTH] 12
-.          nr #LIST_INDENT\\n[#DEPTH] \
-\w'\\*[$PREFIX\\n[#DEPTH]]viii\\*[$SEPARATOR\\n[#DEPTH]]\0'
-.       \}
-.       if '\\*[$ROMAN_WIDTH]'13' \{\
-.          ds $ROMAN_WIDTH\\n[#DEPTH] 13
-.          nr #LIST_INDENT\\n[#DEPTH] \
-\w'\\*[$PREFIX\\n[#DEPTH]]xiii\\*[$SEPARATOR\\n[#DEPTH]]\0'
-.       \}
-.       if '\\*[$ROMAN_WIDTH]'14' \{\
-.          ds $ROMAN_WIDTH\\n[#DEPTH] 14
-.          nr #LIST_INDENT\\n[#DEPTH] \
-\w'\\*[$PREFIX\\n[#DEPTH]]xiii\\*[$SEPARATOR\\n[#DEPTH]]\0'
-.       \}
-.       if '\\*[$ROMAN_WIDTH]'15' \{\
-.          ds $ROMAN_WIDTH\\n[#DEPTH] 15
-.          nr #LIST_INDENT\\n[#DEPTH] \
-\w'\\*[$PREFIX\\n[#DEPTH]]xiii\\*[$SEPARATOR\\n[#DEPTH]]\0'
-.       \}
-.       if '\\*[$ROMAN_WIDTH]'16' \{\
-.          ds $ROMAN_WIDTH\\n[#DEPTH] 16
-.          nr #LIST_INDENT\\n[#DEPTH] \
-\w'\\*[$PREFIX\\n[#DEPTH]]xiii\\*[$SEPARATOR\\n[#DEPTH]]\0'
-.       \}
-.       if '\\*[$ROMAN_WIDTH]'17' \{\
-.          ds $ROMAN_WIDTH\\n[#DEPTH] 17
-.          nr #LIST_INDENT\\n[#DEPTH] \
-\w'\\*[$PREFIX\\n[#DEPTH]]xvii\\*[$SEPARATOR\\n[#DEPTH]]\0'
-.       \}
-.       if '\\*[$ROMAN_WIDTH]'18' \{\
-.          ds $ROMAN_WIDTH\\n[#DEPTH] 18
-.          nr #LIST_INDENT\\n[#DEPTH] \
-\w'\\*[$PREFIX\\n[#DEPTH]]xviii\\*[$SEPARATOR\\n[#DEPTH]]\0'
-.       \}
-.       if '\\*[$ROMAN_WIDTH]'19' \{\
-.          ds $ROMAN_WIDTH\\n[#DEPTH] 19
-.          nr #LIST_INDENT\\n[#DEPTH] \
-\w'\\*[$PREFIX\\n[#DEPTH]]xviii\\*[$SEPARATOR\\n[#DEPTH]]\0'
-.       \}
-.       if '\\*[$ROMAN_WIDTH]'20' \{\
-.          ds $ROMAN_WIDTH\\n[#DEPTH] 20
-.          nr #LIST_INDENT\\n[#DEPTH] \
-\w'\\*[$PREFIX\\n[#DEPTH]]xviii\\*[$SEPARATOR\\n[#DEPTH]]\0'
-.       \}
-.    \}
-.    if '\\*[$LIST_ARG_1]'ROMAN' \{\
-.       if '\\*[$ROMAN_WIDTH]'1' \{\
-.          ds $ROMAN_WIDTH\\n[#DEPTH] 1
-.          nr #LIST_INDENT\\n[#DEPTH] \
-\w'\\*[$PREFIX\\n[#DEPTH]]I\\*[$SEPARATOR\\n[#DEPTH]]\0'
-.       \}
-.       if '\\*[$ROMAN_WIDTH]'2' \{\
-.          ds $ROMAN_WIDTH\\n[#DEPTH] 2
-.          nr #LIST_INDENT\\n[#DEPTH] \
-\w'\\*[$PREFIX\\n[#DEPTH]]II\\*[$SEPARATOR\\n[#DEPTH]]\0'
-.       \}
-.       if '\\*[$ROMAN_WIDTH]'3' \{\
-.          ds $ROMAN_WIDTH\\n[#DEPTH] 3
-.          nr #LIST_INDENT\\n[#DEPTH] \
-\w'\\*[$PREFIX\\n[#DEPTH]]III\\*[$SEPARATOR\\n[#DEPTH]]\0'
-.       \}
-.       if '\\*[$ROMAN_WIDTH]'4' \{\
-.          ds $ROMAN_WIDTH\\n[#DEPTH] 4
-.          nr #LIST_INDENT\\n[#DEPTH] \
-\w'\\*[$PREFIX\\n[#DEPTH]]IV\\*[$SEPARATOR\\n[#DEPTH]]\0'
-.       \}
-.       if '\\*[$ROMAN_WIDTH]'5' \{\
-.          ds $ROMAN_WIDTH\\n[#DEPTH] 5
-.          nr #LIST_INDENT\\n[#DEPTH] \
-\w'\\*[$PREFIX\\n[#DEPTH]]IV\\*[$SEPARATOR\\n[#DEPTH]]\0'
-.       \}
-.       if '\\*[$ROMAN_WIDTH]'6' \{\
-.          ds $ROMAN_WIDTH\\n[#DEPTH] 6
-.          nr #LIST_INDENT\\n[#DEPTH] \
-\w'\\*[$PREFIX\\n[#DEPTH]]IV\\*[$SEPARATOR\\n[#DEPTH]]\0'
-.       \}
-.       if '\\*[$ROMAN_WIDTH]'7' \{\
-.          ds $ROMAN_WIDTH\\n[#DEPTH] 7
-.          nr #LIST_INDENT\\n[#DEPTH] \
-\w'\\*[$PREFIX\\n[#DEPTH]]VII\\*[$SEPARATOR\\n[#DEPTH]]\0'
-.       \}
-.       if '\\*[$ROMAN_WIDTH]'8' \{\
-.          ds $ROMAN_WIDTH\\n[#DEPTH] 8
-.          nr #LIST_INDENT\\n[#DEPTH] \
-\w'\\*[$PREFIX\\n[#DEPTH]]VIII\\*[$SEPARATOR\\n[#DEPTH]]\0'
-.       \}
-.       if '\\*[$ROMAN_WIDTH]'9' \{\
-.          ds $ROMAN_WIDTH\\n[#DEPTH] 9
-.          nr #LIST_INDENT\\n[#DEPTH] \
-\w'\\*[$PREFIX\\n[#DEPTH]]VIII\\*[$SEPARATOR\\n[#DEPTH]]\0'
-.       \}
-.       if '\\*[$ROMAN_WIDTH]'10' \{\
-.          ds $ROMAN_WIDTH\\n[#DEPTH] 10
-.          nr #LIST_INDENT\\n[#DEPTH] \
-\w'\\*[$PREFIX\\n[#DEPTH]]VIII\\*[$SEPARATOR\\n[#DEPTH]]\0'
-.       \}
-.       if '\\*[$ROMAN_WIDTH]'11' \{\
-.          ds $ROMAN_WIDTH\\n[#DEPTH] 11
-.          nr #LIST_INDENT\\n[#DEPTH] \
-\w'\\*[$PREFIX\\n[#DEPTH]]VIII\\*[$SEPARATOR\\n[#DEPTH]]\0'
-.       \}
-.       if '\\*[$ROMAN_WIDTH]'12' \{\
-.          ds $ROMAN_WIDTH\\n[#DEPTH] 12
-.          nr #LIST_INDENT\\n[#DEPTH] \
-\w'\\*[$PREFIX\\n[#DEPTH]]VIII\\*[$SEPARATOR\\n[#DEPTH]]\0'
-.       \}
-.       if '\\*[$ROMAN_WIDTH]'13' \{\
-.          ds $ROMAN_WIDTH\\n[#DEPTH] 13
-.          nr #LIST_INDENT\\n[#DEPTH] \
-\w'\\*[$PREFIX\\n[#DEPTH]]XIII\\*[$SEPARATOR\\n[#DEPTH]]\0'
-.       \}
-.       if '\\*[$ROMAN_WIDTH]'14' \{\
-.          ds $ROMAN_WIDTH\\n[#DEPTH] 14
-.          nr #LIST_INDENT\\n[#DEPTH] \
-\w'\\*[$PREFIX\\n[#DEPTH]]XIV\\*[$SEPARATOR\\n[#DEPTH]]\0'
-.       \}
-.       if '\\*[$ROMAN_WIDTH]'15' \{\
-.          ds $ROMAN_WIDTH\\n[#DEPTH] 15
-.          nr #LIST_INDENT\\n[#DEPTH] \
-\w'\\*[$PREFIX\\n[#DEPTH]]XIV\\*[$SEPARATOR\\n[#DEPTH]]\0'
-.       \}
-.       if '\\*[$ROMAN_WIDTH]'16' \{\
-.          ds $ROMAN_WIDTH\\n[#DEPTH] 16
-.          nr #LIST_INDENT\\n[#DEPTH] \
-\w'\\*[$PREFIX\\n[#DEPTH]]XIV\\*[$SEPARATOR\\n[#DEPTH]]\0'
-.       \}
-.       if '\\*[$ROMAN_WIDTH]'17' \{\
-.          ds $ROMAN_WIDTH\\n[#DEPTH] 17
-.          nr #LIST_INDENT\\n[#DEPTH] \
-\w'\\*[$PREFIX\\n[#DEPTH]]XVII\\*[$SEPARATOR\\n[#DEPTH]]\0'
-.       \}
-.       if '\\*[$ROMAN_WIDTH]'18' \{\
-.          ds $ROMAN_WIDTH\\n[#DEPTH] 18
-.          nr #LIST_INDENT\\n[#DEPTH] \
-\w'\\*[$PREFIX\\n[#DEPTH]]XVIII\\*[$SEPARATOR\\n[#DEPTH]]\0'
-.       \}
-.       if '\\*[$ROMAN_WIDTH]'19' \{\
-.          ds $ROMAN_WIDTH\\n[#DEPTH] 19
-.          nr #LIST_INDENT\\n[#DEPTH] \
-\w'\\*[$PREFIX\\n[#DEPTH]]XVIII\\*[$SEPARATOR\\n[#DEPTH]]\0'
-.       \}
-.       if '\\*[$ROMAN_WIDTH]'20' \{\
-.          ds $ROMAN_WIDTH\\n[#DEPTH] 20
-.          nr #LIST_INDENT\\n[#DEPTH] \
-\w'\\*[$PREFIX\\n[#DEPTH]]XVIII\\*[$SEPARATOR\\n[#DEPTH]]\0'
-.       \}
-.    \}
-.END
-\#
-\# SHIFT LIST
-\# ----------
-\# *Arguments:
-\#   <amount by which to indent a list to the right>
-\# *Function:
-\#   Adds the value of the arg to the current list's indent.
-\# *Notes:
-\#   Requires a unit of measure.
-\#
-.MAC SHIFT_LIST END
-.    nr #SHIFT_LIST\\n[#DEPTH] (\\$1)
-.    nr #L_INDENT +\\n[#SHIFT_LIST\\n[#DEPTH]]
-.END
-\#
-\# PAD LIST DIGITS
-\# ---------------
-\# *Arguments:
-\#   [ LEFT ]
-\# *Function:
-\#   Adds a figure space to a list's hanging and left indent.  If
-\#   LEFT is given, sets reg. #PAD_LIST_DIGITS to 1 for use in ITEM.
-\#
-.MAC PAD_LIST_DIGITS END
-.    if '\\g[#ENUMERATOR\\n[#DEPTH]]'0' \{\
-.       nr #LIST_INDENT\\n[#DEPTH] +\\w'\\0'
-.       nr #L_INDENT \\n[#LIST_INDENT\\n[#DEPTH]]+\\n[#LIST_INDENT\\n-[#DEPTH]]
-.       nr #HL_INDENT\\n+[#DEPTH] +\\w'\\n[#ENUMERATOR\\n[#DEPTH]]'
-.       if '\\$1'LEFT' .nr #PAD_LIST_DIGITS\\n[#DEPTH] 1
-.    \}
-.    if '\\g[#ENUMERATOR\\n[#DEPTH]]'i' \
-.       if '\\$1'LEFT' .nr #PAD_LIST_DIGITS\\n[#DEPTH] 1
-.    if '\\g[#ENUMERATOR\\n[#DEPTH]]'I' \
-.       if '\\$1'LEFT' .nr #PAD_LIST_DIGITS\\n[#DEPTH] 1
-.END
-\#
-\# RESET LIST
-\# ----------
-\# *Arguments:
-\#   none
-\# *Function:
-\#   Resets register enumerators to 1 or a.
-\#
-.MAC RESET_LIST END
-.    ie '\\$1'' .nr #ENUMERATOR\\n[#DEPTH] 0 1
-.    el .nr #ENUMERATOR\\n[#DEPTH] \\$1-1 1
-.END
-\#
-\# QUIT LISTS
-\# ----------
-\# *Arguments:
-\#   none
-\# *Function:
-\#   Exits lists cleanly and restores any indents that were in
-\#   effect prior to LIST.
-\#
-.MAC QUIT_LISTS END
-.   IQ CLEAR
-.   nr #HL_INDENT \\n[#STORED_HL_INDENT]
-.   nr #T_INDENT  \\n[#STORED_T_INDENT]
-.   rr #STORED_HL_INDENT
-.   if \\n[#RESTORE_PREV_INDENT]=1 \{\
-.      nr #L_INDENT  \\n[#STORED_L_INDENT]
-.      IL
-.      rr #STORED_L_INDENT
-.   \}
-.   if \\n[#RESTORE_PREV_INDENT]=2 \{\
-.      nr #BL_INDENT \\n[#STORED_BL_INDENT]
-.      nr #BR_INDENT \\n[#STORED_BR_INDENT]
-.      ll \\n[#ORIG_L_LENGTH]u
-.      IB
-.      rr #STORED_BL_INDENT
-.      rr #STORED_BR_INDENT
-.   \}
-.   if \\n[#RESTORE_PREV_INDENT]=3 \{\
-.      nr #R_INDENT \\n[#STORED_R_INDENT]
-.      ll \\n[#ORIG_L_LENGTH]u
-.      IR
-.      rr #STORED_R_INDENT
-.   \}
-.   if \\n[#RESTORE_PREV_INDENT]=4 \{\
-.      nr #R_INDENT \\n[#STORED_R_INDENT]
-.      nr #L_INDENT \\n[#STORED_L_INDENT]
-.      ll \\n[#ORIG_L_LENGTH]u
-.      IR
-.      IL
-.      rr #STORED_R_INDENT
-.      rr #STORED_L_INDENT
-.   \}
-.\" Clean up after exiting last depth of list
-.   nr #REMOVE 0 1
-.   while \\n+[#REMOVE]<=\\n[#TOTAL_LISTS] \{\
-.      rr #LIST_INDENT\\n[#REMOVE]
-.      rr #ENUMERATOR\\n[#REMOVE]
-.      rm $ENUMERATOR\\n[#REMOVE]
-.      rm $SEPARATOR\\n[#REMOVE]
-.      rm $ENUMERATOR_TYPE\\n[#REMOVE]
-.      rr #PAD_LIST_DIGITS\\n[#REMOVE]
-.   \}
-.   rr #REMOVE
-.   rr #TOTAL_LISTS
-.   rr #QUIT
-.   rr #DEPTH
-.   rr #NEXT_DEPTH_BACK
-.   rr #RESTORE_PREV_INDENT
-.   rr #ORIG_L_LENGTH
-.   rr #CURRENT_L_LENGTH
-.   rr #IN_ITEM
-.   rr #IN_ITEM_L_INDENT
-.END
-\#
-\# SET LIST INDENT
-\# ---------------
-\# *Arguments:
-\#   none
-\# *Function:
-\#   Restores indent of prev. list in nested lists.  Also sets the
-\#   #QUIT register if an invocation of LIST OFF applies to the first
-\#   level of list.
-\#
-.MAC SET_LIST_INDENT END
-.    nr #NEXT_DEPTH_BACK \\n[#DEPTH]-1
-.    if \\n[#NEXT_DEPTH_BACK]=0 \{\
-.       nr #QUIT 1
-.       return
-.    \}
-.    nr #L_INDENT -\\n[#LIST_INDENT\\n[#DEPTH]]+\\n[#SHIFT_LIST\\n[#DEPTH]]
-.    nr #HL_INDENT \\n[#HL_INDENT\\n-[#DEPTH]]
-.END
-\#
-\# ====================================================================
-\#
-\# +++DOCUMENT PROCESSING MISC AND SUPPORT MACROS+++
-\#
-\# COLLATE
-\# -------
-\# *Arguments:
-\#   <none>
-\# *Function:
-\#   Turns headers off (if on) and saves header state, sets register
-\#   #COLLATE to 1 (toggle), and breaks to a new page.
-\# *Notes:
-\#   COLLATE exists primarily to allow putting multiple chapters in
-\#   a single file, although it can be used for any document type.  After
-\#   COLLATE, any of the macros that normally precede START may be
-\#   used, and should behave as expected.
-\#
-\#   N.B.--the START macro must be used after every COLLATE
-\#
-.MAC COLLATE END
-.    if \\n[defer] \
-.       DO_FOOTER
-.    EOL
-.    nr #COLLATED_DOC 1
-.    if ( (\\n[.t]-1) <= \\n[.v] ) .nr #NO_BREAK 1
-.    ds $SAVED_DOC_FAM \\*[$DOC_FAM]
-.    ds $SAVED_PP_FT   \\*[$PP_FT]
-.    nr #COLLATE 1
-.    nr #PRE_COLLATE 1
-.    nr #HEADER_STATE \\n[#HEADERS_ON]
-.    nr #POST_TOP 1
-.    nr #ARG_NUM 0 1
-.    nr #LOOP \\n[#ACTIVE_LEVELS]      \" loop count                                   
-.    nr #HEAD_1_NUM 0 1
-.    nr eqn*label-width     (\\n[eqn*label-num] >? \\n[eqn*label-width])
-.    nr pdf-img*label-width (\\n[pdf-img*label-num] >? \\n[pdf-img*label-width])
-.    nr pic*label-width     (\\n[pic*label-num] >? \\n[pic*label-width])
-.    nr tbl*label-width     (\\n[tbl*label-num] >? \\n[tbl*label-width])
-.    nr fig*label-width     (\\n[pdf-img*label-width] >? \\n[pic*label-width])
-.    if \\n[eqn*label-with-chapter]=1     .nr eqn*label-num     0 1
-.    if \\n[pdf-img*label-with-chapter]=1 .nr pdf-img*label-num 0 1
-.    if \\n[pic*label-with-chapter]=1     .nr pic*label-num     0 1
-.    if \\n[tbl*label-with-chapter]=1     .nr tbl*label-num     0 1
-.    if (\\n[defer]=0)&(\\n[float*defer]=0) .HEADERS OFF
-.    if \\n[#DOC_HEADER]=2 .nr #DOC_HEADER 1
-.    if \\n[#PAGE_NUM_V_POS]=1 \{\
-.       nr #PAGINATION_STATE \\n[#PAGINATE]
-.       PAGINATION OFF
-.    \}
-.    IQ CLEAR
-.    TQ
-.    LL \\n[#DOC_L_LENGTH]u
-.    QUAD \\*[$DOC_QUAD]
-.    nr #SAVED_DOC_LEAD \\n[#DOC_LEAD]
-.    vs \\n[#DOC_LEAD]u
-\*[SLANTX]
-\*[CONDX]
-\*[EXTX]
-.    if \\n[#TOC] \{\
-.       if \\n[TOC_BH]=1 .pdfswitchtopage before MOM:TOC
-.       if \\n[TOC_BH]=2 .pdfswitchtopage after MOM:TOC
-.    \}
-.    if !\\n[#NO_NEWPAGE] .NEWPAGE
-.    rr #NO_NEWPAGE
-.    ch RR_@TOP
-.    rr @TOP
-.    if \\n[.ns] \{\
-.      rs
-.      nop \&
-.    \}
-.    if '\\n[.ev]'PAGE_TRANSITION' .ev
-.    if \\n[#DEFER_PAGINATION] .PAGINATE
-.    if !'\\*[$RESTORE_PAGENUM_STYLE]'' \{\
-.       PAGENUM_STYLE \\*[$RESTORE_PAGENUM_STYLE]
-.       rm $RESTORE_PAGENUM_STYLE
-.    \}
-.    if \\n[#CH_NUM] \
-.       if \\n[#TOC]=0 .nr #CH_NUM +1
-.    rm $EN_TITLE
-.    COVERTITLE
-.    DOCCOVERTITLE
-.    MISC
-.    TITLE
-.    SUBTITLE
-.    CHAPTER
-.    CHAPTER_TITLE
-.    rr #PAGENUM_STYLE_SET
-.    rr #DOC_COVER
-.    rr #COVER
-.    rr #LAST_LEVEL
-.    rr #LEVEL
-.    if \\n[#RESTORE_PN_V_POS] \{\
-.       nr #PAGE_NUM_V_POS \\n[#RESTORE_PN_V_POS]
-.       rr #RESTORE_PN_V_POS
-.    \}
-.END
-\#
-\# NUMBER_LINES
-\# ------------
-\# *Arguments:
-\#   <starting line number> [ <increment> [ <gutter> ] ]
-\#   or
-\#   <anything> | RESUME
-\# *Function:
-\#   Begin, suspend/turn off, or resume numbering of output lines.
-\#
-.MAC NUMBER_LINES END
-.    br
-.    if \\n[#QUOTE] \{\
-.       if \\n[#QUOTE]=1 .ds macro QUOTE
-.       if \\n[#QUOTE]=2 .ds macro BLOCKQUOTE
-.       tm1 "[mom]: \\$0 at line \\n[.c] may not be used inside \\*[macro].
-.       tm1 "       Please set NUMBER_LINES before \\*[macro], followed by
-.       tm1 "       NUMBER_\\*[macro]_LINES.
-.       ab Aborting '\\n[.F]' at \\$0, line \\n[.c].
-.    \}
-.    if '\\n[.z]'EPI_TEXT' .return
-.    if '\\$1'' \{\
-.       tm1 "[mom]: NUMBER_LINES at line \\n[.c] has no argument.
-.       tm1 "       Most likely, you have forgotten to give it a starting line number.
-.       ab Aborting '\\n[.F]' at \\$0, line \\n[.c].
-.    \}
-.    if !\\n[#LINENUMBERS]=2 .nr #LINENUMBERS 1
-.\" Test whether the first arg is a digit.
-.    if \B'\\$1' \{\
-.       nr #LN \\$1
-.       ds $LN_NUM \\$1
-.       if !'\\n[.z]'' .nr #RESTORE_LN_NUM 1
-.       ie '\\$2'' \
-.          if '\\*[$LN_INC]'' .ds $LN_INC 1
-.       el .ds $LN_INC \\$2
-.       ie '\\$3'' \
-.          if !\\n[#LN_GUTTER] .nr #LN_GUTTER 2
-.       el .nr #LN_GUTTER \\$3
-.    \}
-.    ie !\\n[#LN] \{\
-.\" In other words, the first arg was not a digit.
-.       rr #LN
-.       ie '\\$1'RESUME' \{\
-.          LN_PARAMS
-.          nm \\*[$LN_NUM]
-.          RESTORE_PARAMS
-.       \}
-.       el \{\
-.          nm
-.\" register ln is still set and may confuse preprocessors like tbl
-.\" still, resuming line numbering must be possible, so save ln in $LN_NUM
-.          ds $LN_NUM \\n[ln]
-.          if !\\n[#QUOTE] .nr ln 0
-.          if !\\n[#LINENUMBERS]=2 .rr #LINENUMBERS
-.       \}
-.    \}
-.    el \{\
-.       LN_PARAMS
-.       nm \\*[$LN_NUM] \\*[$LN_INC] \\n[#LN_GUTTER] -3-\\n[#LN_GUTTER]
-.       RESTORE_PARAMS
-.       if !'\\n[.z]'' .nr #DIVER_LN_OFF 1
-.    \}
-.    rr #LN
-.END
-\#
-\# LINENUMBER STYLE PARAMETERS
-\# ---------------------------
-\# *Arguments:
-\#   none
-\# *Function:
-\#   LN_PARAMS sets parameters for line numbers.
-\#   RESTORE_PARAMS restores them after internal calls to .nm
-\#
-.MAC LN_PARAMS END
-.    ie d$LN_FAM .fam \\*[$LN_FAM]
-.    el .fam \\n[.fam]
-.    ie d$LN_FT .ft \\*[$LN_FT]
-.    el .ft \\n[.sty]
-.    ie d$LN_SIZE_CHANGE .ps \\*[$LN_SIZE_CHANGE]
-.    el .ps \\n[.s]
-.    ie d$LN_COLOR .gcolor \\*[$LN_COLOR]
-.    el .gcolor \\n[.m]
-.END
-\#
-.MAC RESTORE_PARAMS END
-.    fam
-.    ft
-.    ps
-.    gcolor
-.END
-\#
-\# NUMBER QUOTE AND BLOCKQUOTE LINES AS PART OF RUNNING TEXT
-\# ---------------------------------------------------------
-\# *Argument:
-\#   <gutter> | <anything>
-\# *Function:
-\#   Sets #(B)QUOTE_LN to 1 if no argument, or a single numeric
-\#   argument, is given; otherwise, turns (BLOCK)QUOTE linenumbering
-\#   off.
-\# *Notes:
-\#   #(B)QUOTE is checked for in QUOTE and BLOCKQUOTE.
-\#   The single numeric argument allows establishing a different gutter from
-\#   the one used for line numbers in running text.
-\#
-.MAC NUMBER_QUOTE_LINES END
-.    ie \\n[#NUM_ARGS]=0 .nr #QUOTE_LN 1
-.    el \{\
-.       ie \B'\\$1' \{\
-.          nr #QUOTE_LN 1
-.          nr #Q_LN_GUTTER \\$1
-.       \}
-.       el \{\
-.          ie '\\$1'SILENT' .nr #SILENT_QUOTE_LN 1
-.          el \{\
-.             rr #QUOTE_LN
-.             rr #SILENT_QUOTE_LN
-.          \}
-.       \}
-.    \}
-.END
-\#
-.MAC NUMBER_BLOCKQUOTE_LINES END
-.    ie \\n[#NUM_ARGS]=0 .nr #BQUOTE_LN 1
-.    el \{\
-.       ie \B'\\$1' \{\
-.          nr #BQUOTE_LN 1
-.          nr #BQ_LN_GUTTER \\$1
-.       \}
-.       el \{\
-.          ie '\\$1'SILENT' .nr #SILENT_BQUOTE_LN 1
-.          el \{\
-.             rr #BQUOTE_LN
-.             rr #SILENT_BQUOTE_LN
-.          \}
-.       \}
-.    \}
-.END
-\#
-\# OUTPUT BLANK PAGES
-\# ------------------
-\# *Argument:
-\#   <number of blank pages to output> [ DIVIDER [ NULL ] ]
-\# *Function:
-\#   Outputs blank pages.
-\# *Notes:
-\#   If recto/verso, each page is recto/verso, even if there's
-\#   nothing on it.
-\#
-\#   The 1st argument to BLANKPAGE is non-optional.  DIVIDER is for
-\#   blank pages before endnotes, bibliographies, tocs, new chapters.
-\#
-.MAC BLANKPAGE END
-.    nr #HOW_MANY \\$1
-.    nr #PAGES 0 1
-.    if \\n[#LINENUMBERS] \{\
-.       nr #LINENUMBERS_WERE_ON 1
-.       NUMBER_LINES OFF
-.    \}
-.    while \\n+[#PAGES]<=\\n[#HOW_MANY] \{\
-.       if \\n[#HEADERS_ON]=1 \{\
-.          nr #HEADERS_WERE_ON 1
-.          HEADERS OFF
-.       \}
-.       if \\n[#PAGE_NUM_V_POS]=1 \{\
-.          if \\n[#PAGINATE]=1 .nr #PAGINATE_WAS_ON 1
-.          PAGINATION OFF
-.       \}
-.       NEWPAGE
-.       PRINT \&
-.       if \\n[#FOOTERS_ON]=1 \{\
-.          nr #FOOTERS_WERE_ON 1
-.          FOOTERS OFF
-.       \}
-.       if \\n[#PAGE_NUM_V_POS]=2 \{\
-.          if \\n[#PAGINATE]=1 .nr #PAGINATE_WAS_ON 1
-.             nr #RESTORE_PN_V_POS \\n[#PAGE_NUM_V_POS]
-.          PAGINATION OFF
-.       \}
-.       if \\n[#HEADERS_WERE_ON] .HEADERS
-.       if \\n[#PAGE_NUM_V_POS]=1 \
-.          if \\n[#PAGINATE_WAS_ON] .PAGINATE
-.    \}
-.    shift
-.    ie '\\$1'DIVIDER' \{\
-.       if \\n[#FOOTERS_WERE_ON] .FOOTERS
-.       if \\n[#RESTORE_PN_V_POS]=2 \{\
-.          if \\n[#PAGINATE_WAS_ON] .nr #RESTORE_PAGINATION 1
-.       \}
-.       shift
-.       if '\\$1'NULL' .nr #PAGE_NUM_ADJ -\\n[#HOW_MANY]
-.    \}
-.    el \{\
-.       if '\\$1'' \{\
-.          NEWPAGE
-.          if \\n[#FOOTERS_WERE_ON] .FOOTERS
-.          if \\n[#PAGE_NUM_V_POS]=2 \
-.             if \\n[#PAGINATE_WAS_ON] .PAGINATE
-.       \}
-.       if '\\$1'NULL' \{\
-.          NEWPAGE
-.          if \\n[#FOOTERS_WERE_ON] .FOOTERS
-.          if \\n[#PAGE_NUM_V_POS]=2 \
-.             if \\n[#PAGINATE_WAS_ON] .PAGINATE
-.       \}
-.    \}
-.    if \\n[#PAGINATE]=1 \
-.       if '\\$1'NULL' .nr #PAGE_NUM_ADJ -\\n[#HOW_MANY]
-.    if \\n[#LINENUMBERS_WERE_ON] .NUMBER_LINES RESUME
-.    rr #HOW_MANY
-.    rr #HEADERS_WERE_ON
-.    rr #FOOTERS_WERE_ON
-.    rr #PAGINATE_WAS_ON
-.END
-\#
-\# FLOATS
-\# ------
-\#
-.am PSPIC \" Need to do this for PSPIC inside a float
-.  vpt 0
-\h'(\\n[ps-offset]u + \\n[ps-deswid]u)'
-.  sp -1
-.  vpt 1
-..
-\#
-.MAC PROCESS_FLOATS END
-.    if (\\n[float*defer]>0):(\\n[defer]=0) \{\
-.        if !\\n[tbl*no-top-hook] .tbl@top-hook
-.        rr tbl*no-top-hook
-.    \}
-.    if \\n[defer] \{\
-.       ev protect
-.       evc FLOAT
-.       nf
-.       rs
-.       nop \&
-.       sp |\\n[#T_MARGIN]u-\\n[#DOC_LEAD]u
-.       if '\\*[float*type:1]'boxed-tbl' \{\
-.          ch RR_@TOP
-.          if (\\n[.t] >= 1)&(\\n[float-depth:1] > \\n[.t]) \
-.             tbl*float-warning
-.          if \\n[#MLA] .sp \\n[tbl*label-lead-diff]u
-.          if (\\n[tbl*have-caption]=1)&(\\n[tbl*caption-after-label]=0) \
-.             sp \\n[tbl*caption-lead-diff]u
-.          if \\n[tbl*caption-after-label] .sp 1n+(\\n[tbl*caption-lead-diff]u*2u)
-.       \}
-.       if \\n[float*pic] \{\
-.          if (\\n[pic*have-caption]=1)&(\\n[pic*caption-after-label]=0) \{\
-.             ie \\n[#COLUMNS] \{\
-.                sp |\\n[dc]u-.5v
-.             \}
-.             el \
-.                sp |\\n[#T_MARGIN]u-\\n[#DOC_LEAD]u-.5v
-.          \}
-.          rr pic*caption-lead-diff
-.          rr pic*top-lead-diff
-.          rr float*pic
-.       \}
-.       if \\n[float*img] \{\
-.             ie \\n[#COLUMNS] \
-.                sp |\\n[dc]u
-.             el \
-.                sp |\\n[#T_MARGIN]u-\\n[#DOC_LEAD]u
-.       \}
-.       nr defer-count \\n[defer]
-.       nr loop-count  0 1
-.       nr new-defer   0 1
-.       while \\n+[loop-count]<=\\n[defer-count] \{\
-.          nr tbl*no-top-hook 1
-.          if \\n[defer] .rnn defer float*defer \" So '.if \n[defer]' is skipped during float output
-.          vpt
-.          ch RR_@TOP
-.          rr @TOP
-.          if \\n[pdf-img*have-caption] \{\
-.             if !\\n[pdf-img*caption-after-label] .sp -.5v
-.          \}
-.          rr pdf-img*have-caption
-.          rr pic*have-caption
-.          if '\\*[float*type:\\n[loop-count]]'table' \{\
-.             ch FOOTER \\n[#VARIABLE_FOOTER_POS]u+\\n[#DOC_LEAD]u
-.             ch FN_OVERFLOW_TRAP -\\n[#FN_OVERFLOW_TRAP_POS]u+\\n[#DOC_LEAD]u
-.          \}
-.          ie !\\n[float-span:\\n[loop-count]] \{\
-.             ie ((\\n[float-depth:\\n[loop-count]]-\\n[.v])>\\n[.t]):(\\n[D-float:\\n[loop-count]]>\\n[.t]) \{\
-.\" Insufficient space, defer to next page
-.                rn FLOAT*DIV:\\n[loop-count] NEW*FLOAT*DIV:\\n+[new-defer]
-.                rnn float-depth:\\n[loop-count] new-float-depth:\\n[new-defer]
-.                rnn D-float:\\n[loop-count] new-D-float:\\n[new-defer]
-.             \}
-.             el \{\
-.                output-float
-.             \}
-.          \}
-.          el \{\
-.             rr tbl*no-top-hook
-.             output-float
-.          \}
-.       \}
-.       rm FLOAT*DIV:\\n[loop-count]
-.       rr float-depth:\\n[loop-count]
-.       rm tbl*header-div:\\n[loop-count]
-.       rm float*type:\\n[loop-count]
-.\" FLOAT arrays are empty now
-.\" Rename new arrays (FLOATs deferred to next page) to proper names
-.       nr loop-count 0 1
-.       rnn new-defer defer
-.       while \\n+[loop-count]<=\\n[defer] \{\
-.          rn NEW*FLOAT*DIV:\\n[loop-count] FLOAT*DIV:\\n[loop-count]
-.          rnn new-float-depth:\\n[loop-count] float-depth:\\n[loop-count]
-.          rnn new-D-float:\\n[loop-count] D-float:\\n[loop-count]
-.       \}
-.       rr float*defer
-.       ch FOOTER \\n[#VARIABLE_FOOTER_POS]u
-.       ch FN_OVERFLOW_TRAP -\\n[#FN_OVERFLOW_TRAP_POS]u
-.       ev
-.       SHIM
-.       if \\n[#SHIM]>(\\n[#DOC_LEAD]-(\\n[#DOC_LEAD]/4)) 'sp -\\n[#DOC_LEAD]u
-.       nr tbl*have-header 0
-.       rr loop-count
-.       rr defer-count
-.       rr float*before-shim
-.       rr float*after-shim
-.       rm float-adj
-.       rm float-adj:top
-.       rm float-adj:bottom
-.       if \\n[#NEWPAGE] \{\
-.          vpt
-'          bp
-.          rr #NEWPAGE
-.       \}
-.    \}
-.    rr float*img
-.    rr float*eqn
-.    rr float*tbl
-.    rr float*pic
-.END
-\#
-.MAC output-float END
-.    vpt 0
-.    nop \&
-.    sp -1
-.    if \\n[no-top-space] \{\
-.       ie !\\n[#COLUMNS] \{\
-.          sp |\\n[#T_MARGIN]u-\\n[#DOC_LEAD]u
-.          ns
-.       \}
-.       el .sp |\\n[dc]u
-.       if \\n[float*tbl] \{\
-.          rs
-.          if \\n[tbl*caption-top-lead-diff] \{\
-.             sp \\n[tbl*caption-top-lead-diff]u
-.             rr tbl*caption-top-lead-diff
-.          \}
-.          rr float*tbl
-.       \}
-.    \}
-.    if \\n[float*pic] \{\
-.       nr pic*top-space-adj \\n[#DOC_LEAD]-\\n[pic@text-lead]
-.       if (\\n[pic*have-caption]=0):(\\n[pic*caption-after-label]=1) \{\
-.          sp \\n[pic*top-space-adj]u
-.       \}
-.       if \\n[#COLUMNS] \{\
-.          if !'\\*[pic*space-adj]'' .sp \\*[pic*space-adj]
-.       \}
-.       rr float*pic
-.    \}
-.    if \\n[float*eqn] \{\
-.       sp -.5v
-.       rr float*eqn
-.    \}
-.    FLOAT*DIV:\\n[loop-count]
-.    if \\n[no-top-space] \{\
-.       rs
-.       nop \&
-.       sp -1
-.       rr no-top-space
-.    \}
-.    if \\n[#COLUMNS] \
-.       if !'\\*[pic*space-adj]'' .sp -\\*[pic*space-adj]
-.    rm pic*space-adj
-.    if \\n[D-float:\\n[loop-count]] \{\
-.       sp \
--\\n[float-depth:\\n[loop-count]]u+\\n[D-float:\\n[loop-count]]u+\\n[#DOC_LEAD]u
-.       rr D-float:\\n[loop-count]
-.    \}
-.END
-\#
-\# FLOAT
-\# -----
-\# *Arguments:
-\#   [ ADJUST +|-<amount> ] [ FORCE] [ SPAN] [ NO_SHIM] | <anything>
-\# *Function:
-\#   Captures input in a diversion, which is output immediately if
-\#   there's room on the page; otherwise outputs diversion at top of
-\#   next page.
-\# *Notes:
-\#   ADJUST allows for raising or lowering the contents of
-\#   the diversion within the space allotted.  FORCE breaks to
-\#   a new page immediately.
-\#
-.MAC FLOAT END
-.\"  Case where upcoming .br breaks to a new page, causing a defered float
-.\"  to be output by HEADER and the defer register to be cleared.
-.    nr pagenum \\n%+\\n[#PAGE_NUM_ADJ]
-.    br
-.\" Clear .ns when a single line of running text precededs float
-.\" at the top of the page.
-.    if \\n[nl]=\\n[#PAGE_TOP] \{\
-.       vpt 0
-.       sp -1v
-.       sp
-.       ch RR_@TOP
-.       rr @TOP
-.       vpt
-.    \}
-.    if \\n[#NUM_ARGS]>0 \{\
-.    nr loop-count 0 1
-.    nr loop-counter \\n[#NUM_ARGS]
-.       while \\n+[loop-count]<=\\n[loop-counter] \{\
-.          if '\\$1'FORCE' \{\
-.             nr #FORCE 1
-.             shift
-.          \}
-.          if '\\$1'SPAN' \{\
-.              nr float-span 1
-.              shift
-.          \}
-.          if '\\$1'ADJUST' \{\
-.             shift
-.             ds float-adj \\$1
-.             shift
-.          \}
-.          if '\\$1'NO_SHIM' \{\
-.             nr float*no-shim 1
-.             shift
-.          \}
-.       \}
-.    \}
-.    ie '\\$1'' \{\
-.       ev FLOAT
-.       evc 0
-.       nf
-.       di FLOAT*DIV
-.    \}
-.    el \{\
-.       br
-.       di
-.       if \\n[float*table] \
-.          if !\\n[tbl*have-header] .ev
-.       ev
-.       if \\n[tbl*boxed] \{\
-.          ie !\\n[#MLA] \{\
-.             ie (\\n[tbl@label]=1):(\\n[tbl@source]=1) .nr dn -.65v
-.             el .nr dn +.65v
-.          \}
-.          el \{\
-.             if !\\n[tbl@source] .nr dn -1.65v
-.          \}
-.       \}
-.       if (\\n[dn]>\\n[.t]):(\\n[D-float]>\\n[.t]) \{\
-.          ie \\n[@TOP] \
-.             if \\n[tbl*boxed] .rs
-.          el \{\
-.             if !\\n[defer] .nr defer 0 1
-.             rn FLOAT*DIV FLOAT*DIV:\\n+[defer]
-.             if \\n[float-span] \
-.                if !\\n[tbl*boxed] .rnn float-span float-span:\\n[defer]
-.             if \\n[float*tbl] \{\
-.                if \\n[defer]=1 .nr no-top-space 1
-.                ie \\n[tbl*boxed] \{\
-.                   ds float*type:\\n[defer] boxed-tbl
-.                   rr float-span
-.                \}
-.                el .ds float*type:\\n[defer] table
-.                if \\n[tbl*center] .nr float*tbl-center:\\n[defer] 1
-.                rn tbl*header-div tbl*header-div:\\n[defer]
-.                rr tbl*center
-.             \}
-.             if \\n[float*eqn] \{\
-.                if \\n[defer]=1 .nr no-top-space 1
-.                ds float*type:\\n[defer] eqn
-.             \}
-.             if \\n[float*pic] \{\
-.                ds float*type:\\n[defer] pic
-.             \}
-.             if \\n[float*img] \{\
-.                ds float*type:\\n[defer] img
-.             \}
-.             if \\n[D-float] .nr D-float:\\n[defer] \\n[D-float]
-.             nr float-depth:\\n[defer] \\n[dn]
-.             if \\n[#FORCE] \{\
-.                bp
-.                rr #FORCE
-.             \}
-.             return \" output div after header
-.          \}
-.       \}
-.       if !'\\*[float-adj]'' .sp \\*[float-adj]
-.       if \\n[.u] .nr fill 1
-.       if \\n[@TOP] \{\
-.          nr no-adjust 1
-.          rr @TOP
-.       \}
-.       nf
-.       if \\n[float*tbl] \
-.          if (\\n[#MLA]=1)&(\\n[tbl@source]=0) \
-.             chop FLOAT*DIV
-.          if \\n[nl]=\\n[#PAGE_TOP] \{\
-.             if \\n[tbl*have-caption] \{\
-.                ie !\\n[#MLA] .sp \\n[tbl*caption-lead-diff]u
-.                el \{\
-.                ch RR_@TOP
-.                sp \\n[tbl*label-lead-diff]u-.5v
-.             \}
-.          \}
-.       \}
-.       FLOAT*DIV
-.       if \\n[float*tbl] \{\
-.          ie \\n[tbl*boxed] \{\
-.             if \\n[dn]=\\n[bx-tbl-depth] .sp .35v
-.             if \\n[tbl*plain-boxed] .sp .5v
-.             ch FOOTER \\n[#VARIABLE_FOOTER_POS]u
-.             ch FN_OVERFLOW_TRAP -\\n[#FN_OVERFLOW_TRAP_POS]u
-.             rr tbl*boxed
-.             rr bx-tbl-depth
-.          \}
-.          el \{\
-.             if '\\*[tbl*label]'' \
-.                if \\n[tbl*autolabel]=0 .sp
-.          \}
-.          rr float*tbl
-.          rr tbl*center
-.          rm tbl*header-div
-.          rr tbl*have-caption
-.          rr tbl*have-label
-.          rr tbl*have-source
-.          rm tbl*caption
-.          rm tbl*label
-.          rm tbl*source
-.       \}
-.       if \\n[D-float] \
-.          sp -\\n[dn]u+\\n[#DOC_LEAD]u+\\n[D-float]u
-.       if \\n[fill] \{\
-.          fi
-.          rr fill
-.       \}
-.       rm FLOAT*DIV
-.       if !'\\*[float-adj]'' \
-.          if !\\n[no-adjust] .sp -\\*[float-adj]
-.          if !\\n[float*no-shim] .SHIM
-.       rm float-adj
-.       rm no-adjust
-.       rm float-adj:top
-.       rm float-adj:bottom
-.       rr D-float
-.       rr float*no-shim
-.       rr #FORCE
-.    \}
-.END
-\#
-\# SET TRAPS FOR HEADERS/FOOTERS/FOOTNOTES
-\# ---------------------------------------
-\# *Arguments:
-\#   <none>
-\# *Function:
-\#   Sets header/footer/footnotes/etc... traps.
-\#
-\#   Calculates the number of lines that actually fit on a
-\#   page based on #B_MARGIN and resets page bottom trap to coincide
-\#   with the depth of that number of lines, or, if #ADJ_DOC_LEAD=1,
-\#   adjusts #DOC_LEAD so that the last line of text on a page falls
-\#   exactly on #B_MARGIN.
-\#
-.MAC RR_@TOP END \" Trap-invoked after first line of text on a new page
-.    rr @TOP
-.    if \\n[.ns] \{\
-.       vpt 0
-.       rs
-.       if \\n[.u] .nr fill 1
-.       nf
-.       nop \&
-.       sp -1
-.       if \\n[fill] .fi
-.    \}
-.    if \\n[.vpt]=0 .vpt
-.END
-\#
-.MAC TRAPS END
-.    if !\\n[#UNADJUSTED_DOC_LEAD]  .nr #UNADJUSTED_DOC_LEAD \\n[#DOC@LEAD]
-.\" Remove all header/footer traps
-.    if !\\n[#NO_TRAP_RESET] \{\
-.       ch DO_T_MARGIN
-.       ch DO_B_MARGIN
-.       ch HEADER
-.       ch FOOTER
-.       ch FN_OVERFLOW_TRAP
-.\" Plant header trap
-.       wh 0 HEADER
-.    \}
-.\" Adjust lead so last line of text falls on B_MARGIN
-.       nr #LINES_PER_PAGE 0 1
-.       nr #DOC_LEAD_ADJ 0 1
-.       nr #DEPTH_TO_B_MARGIN \\n[#PAGE_LENGTH]-\\n[#ORIGINAL_B_MARGIN]-\\n[#DOC_LEAD]
-.\" Get the number of unadjusted lines that fit on the page; always a
-.\" bit short of the bottom margin
-.       while \\n[#T_MARGIN]+(\\n[#DOC_LEAD]*\\n+[#LINES_PER_PAGE])<\\n[#DEPTH_TO_B_MARGIN] \{\
-.
-.       \}
-.       nr #LINES_PER_PAGE -1
-.\" Add machine units, 1 at a time, increasing the leading until the
-.\" new leading fills the page properly
-.       while \\n[#T_MARGIN]+(\\n[#DOC_LEAD]+\\n+[#DOC_LEAD_ADJ]*\\n[#LINES_PER_PAGE])<=\\n[#DEPTH_TO_B_MARGIN] \{\
-.
-.       \}
-.       DOC_LEAD \\n[#DOC_LEAD]u+\\n[#DOC_LEAD_ADJ]u
-.\" The "visual" bottom margin is what \n[nl] would report on the
-.\" last line before the FOOTER trap is sprung
-.       nr #VISUAL_B_MARGIN \\n[#T_MARGIN]+(\\n[#LINES_PER_PAGE]*\\n[#DOC_LEAD])
-.\" Get the difference between #B_MARGIN and #VISUAL_B_MARGIN
-.       nr #FOOTER_DIFF (\\n[#PAGE_LENGTH]-\\n[#B_MARGIN])-\\n[#VISUAL_B_MARGIN]
-.\" Set #B_MARGIN to 1 machine unit lower on the page than #VISUAL_B_MARGIN
-.       nr #B_MARGIN \\n[#B_MARGIN]+(\\n[#FOOTER_DIFF]-1)
-.\" Set the FN_OVERFLOW_TRAP position
-.       nr #FN_OVERFLOW_TRAP_POS \\n[#B_MARGIN]-\\n[#FN_LEAD]
-.       if \\n[#PRINT_STYLE]=1 .nr #FN_OVERFLOW_TRAP_POS \\n[#ORIGINAL_B_MARGIN]u
-.\" Set footer and footnote overflow traps
-.    if !\\n[#NO_TRAP_RESET] \{\
-.       nr #FN_COUNT 0 1
-.       nr #SPACE_REMAINING 0
-.       nr #FN_DEPTH 0
-.       nr #VARIABLE_FOOTER_POS 0-\\n[#B_MARGIN]u
-.       wh \\n[.p]u FOOTER
-.       wh -(\\n[#FN_OVERFLOW_TRAP_POS]u) FN_OVERFLOW_TRAP
-.       ch FOOTER -\\n[#B_MARGIN]u
-.    \}
-.END
-\#
-\# CHECK INDENT
-\# ------------
-\# *Arguments:
-\#   <none>
-\# *Function:
-\#   Adds left, right, or both indent values to document elements
-\#   like heads and subheads that are processed in environments.
-\#
-.MAC CHECK_INDENT END
-.    if \\n[#INDENT_LEFT_ACTIVE] \{\
-.       in \\n[#L_INDENT]u
-.       if \\n[#QUOTE] \{\
-.          in -\\n[#L_INDENT]u \"Because you added an indent in 2nd line of macro
-.          ll -\\n[#L_INDENT]u
-.          ta \\n[.l]u
-.       \}
-.       if \\n[#EPIGRAPH] \{\
-.          in -\\n[#L_INDENT]u
-.          ll -\\n[#L_INDENT]u
-.          ta \\n[.l]u
-.       \}
-.    \}
-.    if \\n[#INDENT_RIGHT_ACTIVE] \{\
-.       ll -\\n[#R_INDENT]u
-.       ta \\n[.l]u
-.    \}
-.    if \\n[#INDENT_BOTH_ACTIVE] \{\
-.       in \\n[#BL_INDENT]u
-.       ll -\\n[#BR_INDENT]u
-.       ta \\n[.l]u
-.       if \\n[#QUOTE] \{\
-.          in -\\n[#BL_INDENT]u
-.          ie \\n[#BR_INDENT]=\\n[#BL_INDENT] \{\
-.             ll -\\n[#BR_INDENT]u
-.             ta \\n[.l]u
-.          \}
-.          el \{\
-.             ll -(\\n[#BR_INDENT]u/2u)
-.             ta \\n[.l]u
-.          \}
-.       \}
-.       if \\n[#EPIGRAPH] \{\
-.          in -\\n[#BL_INDENT]u
-.          ie \\n[#BR_INDENT]=\\n[#BL_INDENT] \{\
-.             ll -\\n[#BR_INDENT]u
-.             ta \\n[.l]u
-.          \}
-.          el \{\
-.             ll -(\\n[#BR_INDENT]u/2u)
-.             ta \\n[.l]u
-.          \}
-.       \}
-.    \}
-.END
-\#
-\# REMOVE INDENT
-\# -------------
-\# *Arguments:
-\#   <none>
-\# *Function:
-\#   Removes left, right, or both indent values from document elements
-\#   like heads and subheads that are processed in environments.
-\#
-.MAC REMOVE_INDENT END
-.    in 0
-.    ll \\n[#L_LENGTH]u
-.    ta \\n[.l]u
-.END
-\#
-\# This .em (for all DOC_TYPEs, except 4 [LETTER]) ensures that
-\# deferred footnotes that happen on the 2nd to last page get
-\# output.
-\#
-.MAC TERMINATE END
-.    ie \\n[#FN_DEPTH] \{\
-.       ie \\n[#FN_DEFER] \{\
-.          br
-.          nr #TERMINATE 1
-.          FOOTNOTE
-.          nf
-.          FOOTNOTE OFF
-.       \}
-.       el \{\
-.          br
-.          ch FN_OVERFLOW_TRAP
-.          DO_FOOTER
-.       \}
-.    \}
-.    el \{\
-.       ch FN_OVERFLOW_TRAP
-.       DO_FOOTER
-.    \}
-.END
-\#
-\# END MACRO FOR LETTERS
-\# ---------------------
-\# *Arguments:
-\#   none
-\# *Function:
-\#   The .em macro executed at the end of letters.  Turns footers
-\#   and pagination off, terminates and outputs diversion CLOSING
-\#   (indented with the author's name underneath).
-\#
-.MAC ALL_DONE END
-.    ch FOOTER
-.    ch HEADER
-.    br
-.    if \\n[#DOC_TYPE]=4 \{\
-.       if !'\\n[.z]'' \{\
-.          br
-.          ALD \\*[$SIG_SPACE]
-.          di
-.       \}
-.       IQ CLEAR
-.       TQ
-.       LEFT
-.       ie !'\\*[$CLOSE_INDENT]'' .IL \\*[$CLOSE_INDENT]
-.       el .IL \\n[#DOC_L_LENGTH]u/2u
-.       SP
-.       if \\n[#CLOSING] \{\
-.          CLOSING_TEXT
-.          br
-.       \}
-.       PRINT \\*[$AUTHOR_1]
-.    \}
-.END
-\#
-\# Set up a default papersize of US letter
-\#
-.PAPER LETTER
-\#
-\# ====================================================================
-\#
-\# +++DOCUMENT PROCESSING ALIASES+++
-\#
-\# Aliases to make life easier for users: synonyms, short forms
-\# and alternate spellings.
-\#
-.ALIAS   BREAK_BLOCKQUOTE    BREAK_QUOTE
-.ALIAS   BREAK_CITATION      BREAK_QUOTE
-.ALIAS   BREAK_CITE          BREAK_QUOTE
-.ALIAS   BLOCKQUOTE_INDENT   QUOTE_INDENT
-.ALIAS   CITATION            BLOCKQUOTE
-.ALIAS   CITATION_FAMILY     BLOCKQUOTE_FAMILY
-.ALIAS   CITATION_FONT       BLOCKQUOTE_FONT
-.ALIAS   CITATION_SIZE       BLOCKQUOTE_SIZE
-.ALIAS   CITATION_COLOR      BLOCKQUOTE_COLOR
-.ALIAS   CITATION_QUAD       BLOCKQUOTE_QUAD
-.ALIAS   CITE                BLOCKQUOTE
-.ALIAS   CITE_FAMILY         BLOCKQUOTE_FAMILY
-.ALIAS   CITE_FONT           BLOCKQUOTE_FONT
-.ALIAS   CITE_SIZE           BLOCKQUOTE_SIZE
-.ALIAS   CITE_COLOR          BLOCKQUOTE_COLOR
-.ALIAS   CITE_QUAD           BLOCKQUOTE_QUAD
-.ALIAS   DOC_R_MARGIN        DOC_RIGHT_MARGIN
-.ALIAS   DOC_L_MARGIN        DOC_LEFT_MARGIN
-.ALIAS   DOC_L_LENGTH        DOC_LINE_LENGTH
-.ALIAS   DOC_RMARGIN         DOC_RIGHT_MARGIN
-.ALIAS   DOC_LMARGIN         DOC_LEFT_MARGIN
-.ALIAS   DOC_LLENGTH         DOC_LINE_LENGTH
-.ALIAS   DOC_FAM             DOC_FAMILY
-.ALIAS   DOC_LS              DOC_LEAD
-.ALIAS   DOC_PS              DOC_PT_SIZE
-.ALIAS   FILL                QUAD
-.ALIAS   PAGENUM             PAGENUMBER
-.ALIAS   PAGINATION          PAGINATE
-.ALIAS   PP_FT               PP_FONT
-.ALIAS   REF_INDENT          INDENT_REFS
-.ALIAS   TOC_PS              TOC_PT_SIZE
-\#
-\# HEADER and FOOTER macros
-\# ------------------------
-\# Because the type-style of headers and footers are managed
-\# identically, and the type-style macros (_<type parameter>) all
-\# require the correct name of the calling macro, it's necessary
-\# to create HEADER_ and FOOTER_ macros here.  They're basically
-\# aliases of HDRFTR_, but required because you can't alias an
-\# alias.
-\#
-.MAC FOOTER_CENTER_COLOR END
-.    HDRFTR_CENTER_COLOR \\$1
-.END
-\#
-.MAC FOOTER_CENTER_COLOUR END
-.    HDRFTR_CENTER_COLOR \\$1
-.END
-\#
-.MAC FOOTER_CENTER_FAM END
-.    HDRFTR_CENTER_FAMILY \\$1
-.END
-\#
-.MAC FOOTER_CENTER_FAMILY END
-.    HDRFTR_CENTER_FAMILY \\$1
-.END
-\#
-.MAC FOOTER_CENTER_FONT END
-.    HDRFTR_CENTER_FONT \\$1
-.END
-\#
-.MAC FOOTER_CENTER_FT END
-.    HDRFTR_CENTER_FONT \\$1
-.END
-\#
-.MAC FOOTER_CENTER_PS END
-.    HDRFTR_CENTER_SIZE \\$1
-.END
-\#
-.MAC FOOTER_CENTER_SIZE END
-.    HDRFTR_CENTER_SIZE \\$1
-.END
-\#
-.MAC FOOTER_CENTRE_CAPS END
-.    HDRFTR_CENTER_CAPS \\$1
-.END
-\#
-.MAC FOOTER_CENTRE_COLOR END
-.    HDRFTR_CENTRE_COLOR \\$1
-.END
-\#
-.MAC FOOTER_CENTRE_COLOUR END
-.    HDRFTR_CENTRE_COLOR \\$1
-.END
-\#
-.MAC FOOTER_CENTRE_FAM END
-.    HDRFTR_CENTER_FAMILY \\$1
-.END
-\#
-.MAC FOOTER_CENTRE_FAMILY END
-.    HDRFTR_CENTER_FAMILY \\$1
-.END
-\#
-.MAC FOOTER_CENTRE_FONT END
-.    HDRFTR_CENTER_FONT \\$1
-.END
-\#
-.MAC FOOTER_CENTRE_FT END
-.    HDRFTR_CENTER_FONT \\$1
-.END
-\#
-.MAC FOOTER_CENTRE_PS END
-.    HDRFTR_CENTER_SIZE \\$1
-.END
-\#
-.MAC FOOTER_CENTRE_SIZE END
-.    HDRFTR_CENTER_SIZE \\$1
-.END
-\#
-.MAC FOOTER_COLOR END
-.    HDRFTR_COLOR \\$1
-.END
-\#
-.MAC FOOTER_COLOUR END
-.    HDRFTR_COLOR \\$1
-.END
-\#
-.MAC FOOTER_FAM END
-.    HDRFTR_FAMILY \\$1
-.END
-\#
-.MAC FOOTER_FAMILY END
-.    HDRFTR_FAMILY \\$1
-.END
-\#
-.MAC FOOTER_LEFT_COLOR END
-.    HDRFTR_LEFT_COLOR \\$1
-.END
-\#
-.MAC FOOTER_LEFT_COLOUR END
-.    HDRFTR_LEFT_COLOR \\$1
-.END
-\#
-.MAC FOOTER_LEFT_FAM END
-.    HDRFTR_LEFT_FAMILY \\$1
-.END
-\#
-.MAC FOOTER_LEFT_FAMILY END
-.    HDRFTR_LEFT_FAMILY \\$1
-.END
-\#
-.MAC FOOTER_LEFT_FONT END
-.    HDRFTR_LEFT_FONT \\$1
-.END
-\#
-.MAC FOOTER_LEFT_FT END
-.    HDRFTR_LEFT_FONT \\$1
-.END
-\#
-.MAC FOOTER_LEFT_PS END
-.    HDRFTR_LEFT_SIZE \\$1
-.END
-\#
-.MAC FOOTER_LEFT_SIZE END
-.    HDRFTR_LEFT_SIZE \\$1
-.END
-\#
-.MAC FOOTER_RIGHT_COLOR END
-.    HDRFTR_RIGHT_COLOR \\$1
-.END
-\#
-.MAC FOOTER_RIGHT_COLOUR END
-.    HDRFTR_RIGHT_COLOR \\$1
-.END
-\#
-.MAC FOOTER_RIGHT_FAM END
-.    HDRFTR_RIGHT_FAMILY \\$1
-.END
-\#
-.MAC FOOTER_RIGHT_FAMILY END
-.    HDRFTR_RIGHT_FAMILY \\$1
-.END
-\#
-.MAC FOOTER_RIGHT_FONT END
-.    HDRFTR_RIGHT_FONT \\$1
-.END
-\#
-.MAC FOOTER_RIGHT_FT END
-.    HDRFTR_RIGHT_FONT \\$1
-.END
-\#
-.MAC FOOTER_RIGHT_PS END
-.    HDRFTR_RIGHT_SIZE \\$1
-.END
-\#
-.MAC FOOTER_RIGHT_SIZE END
-.    HDRFTR_RIGHT_SIZE \\$1
-.END
-\#
-.MAC FOOTER_RULE_COLOR END
-.    HDRFTR_RULE_COLOR \\$1
-.END
-\#
-.MAC FOOTER_SIZE END
-.    HDRFTR_SIZE \\$1
-.END
-\#
-.MAC HEADER_CENTER_COLOR END
-.    HDRFTR_CENTER_COLOR \\$1
-.END
-\#
-.MAC HEADER_CENTER_COLOUR END
-.    HDRFTR_CENTER_COLOR \\$1
-.END
-\#
-.MAC HEADER_CENTER_FAM END
-.    HDRFTR_CENTER_FAMILY \\$1
-.END
-\#
-.MAC HEADER_CENTER_FAMILY END
-.    HDRFTR_CENTER_FAMILY \\$1
-.END
-\#
-.MAC HEADER_CENTER_FONT END
-.    HDRFTR_CENTER_FONT \\$1
-.END
-\#
-.MAC HEADER_CENTER_FT END
-.    HDRFTR_CENTER_FONT \\$1
-.END
-\#
-.MAC HEADER_CENTER_PS END
-.    HDRFTR_CENTER_SIZE \\$1
-.END
-\#
-.MAC HEADER_CENTER_SIZE END
-.    HDRFTR_CENTER_SIZE \\$1
-.END
-\#
-.MAC HEADER_CENTRE_COLOR END
-.    HDRFTR_CENTRE_COLOR \\$1
-.END
-\#
-.MAC HEADER_CENTRE_COLOUR END
-.    HDRFTR_CENTRE_COLOR \\$1
-.END
-\#
-.MAC HEADER_CENTRE_FAM END
-.    HDRFTR_CENTER_FAMILY \\$1
-.END
-\#
-.MAC HEADER_CENTRE_FAMILY END
-.    HDRFTR_CENTER_FAMILY \\$1
-.END
-\#
-.MAC HEADER_CENTRE_FONT END
-.    HDRFTR_CENTER_FONT \\$1
-.END
-\#
-.MAC HEADER_CENTRE_FT END
-.    HDRFTR_CENTER_FONT \\$1
-.END
-\#
-.MAC HEADER_CENTRE_PS END
-.    HDRFTR_CENTER_SIZE \\$1
-.END
-\#
-.MAC HEADER_CENTRE_SIZE END
-.    HDRFTR_CENTER_SIZE \\$1
-.END
-\#
-.MAC HEADER_COLOR END
-.    HDRFTR_COLOR \\$1
-.END
-\#
-.MAC HEADER_COLOUR END
-.    HDRFTR_COLOR \\$1
-.END
-\#
-.MAC HEADER_FAM END
-.    HDRFTR_FAMILY \\$1
-.END
-\#
-.MAC HEADER_FAMILY END
-.    HDRFTR_FAMILY \\$1
-.END
-\#
-.MAC HEADER_LEFT_COLOR END
-.    HDRFTR_LEFT_COLOR \\$1
-.END
-\#
-.MAC HEADER_LEFT_COLOUR END
-.    HDRFTR_LEFT_COLOR \\$1
-.END
-\#
-.MAC HEADER_LEFT_FAM END
-.    HDRFTR_LEFT_FAMILY \\$1
-.END
-\#
-.MAC HEADER_LEFT_FAMILY END
-.    HDRFTR_LEFT_FAMILY \\$1
-.END
-\#
-.MAC HEADER_LEFT_FONT END
-.    HDRFTR_LEFT_FONT \\$1
-.END
-\#
-.MAC HEADER_LEFT_FT END
-.    HDRFTR_LEFT_FONT \\$1
-.END
-\#
-.MAC HEADER_LEFT_PS END
-.    HDRFTR_LEFT_SIZE \\$1
-.END
-\#
-.MAC HEADER_LEFT_SIZE END
-.    HDRFTR_LEFT_SIZE \\$1
-.END
-\#
-.MAC HEADER_RIGHT_COLOR END
-.    HDRFTR_RIGHT_COLOR \\$1
-.END
-\#
-.MAC HEADER_RIGHT_COLOUR END
-.    HDRFTR_RIGHT_COLOR \\$1
-.END
-\#
-.MAC HEADER_RIGHT_FAM END
-.    HDRFTR_RIGHT_FAMILY \\$1
-.END
-\#
-.MAC HEADER_RIGHT_FAMILY END
-.    HDRFTR_RIGHT_FAMILY \\$1
-.END
-\#
-.MAC HEADER_RIGHT_FONT END
-.    HDRFTR_RIGHT_FONT \\$1
-.END
-\#
-.MAC HEADER_RIGHT_FT END
-.    HDRFTR_RIGHT_FONT \\$1
-.END
-\#
-.MAC HEADER_RIGHT_PS END
-.    HDRFTR_RIGHT_SIZE \\$1
-.END
-\#
-.MAC HEADER_RIGHT_SIZE END
-.    HDRFTR_RIGHT_SIZE \\$1
-.END
-\#
-.MAC HEADER_RULE_COLOR END
-.    HDRFTR_RULE_COLOR \\$1
-.END
-\#
-.MAC HEADER_SIZE END
-.    HDRFTR_SIZE \\$1
-.END
-\#
-\# HEADER and FOOTER aliases for HDRFTR macros.
-\#
-.ALIAS   BIBLIOGRAPHY_FOOTER_CENTER    BIBLIOGRAPHY_HDRFTR_CENTER
-.ALIAS   BIBLIOGRAPHY_FOOTER_CENTRE    BIBLIOGRAPHY_HDRFTR_CENTRE
-.ALIAS   BIBLIOGRAPHY_HEADER_CENTER    BIBLIOGRAPHY_HDRFTR_CENTER
-.ALIAS   BIBLIOGRAPHY_HEADER_CENTRE    BIBLIOGRAPHY_HDRFTR_CENTRE
-.ALIAS   ENDNOTES_FOOTER_CENTER    ENDNOTES_HDRFTR_CENTER
-.ALIAS   ENDNOTES_FOOTER_CENTRE    ENDNOTES_HDRFTR_CENTRE
-.ALIAS   ENDNOTES_HEADER_CENTER    ENDNOTES_HDRFTR_CENTER
-.ALIAS   ENDNOTES_HEADER_CENTRE    ENDNOTES_HDRFTR_CENTRE
-.ALIAS   FOOTER_CENTER_CAPS        HDRFTR_CENTER_CAPS
-.ALIAS   FOOTER_CENTER             HDRFTR_CENTER
-.ALIAS   FOOTER_CENTER_PAD         HDRFTR_CENTER_PAD
-.ALIAS   FOOTER_CENTRE             HDRFTR_CENTER
-.ALIAS   FOOTER_CENTRE_PAD         HDRFTR_CENTER_PAD
-.ALIAS   FOOTER_LEFT_CAPS          HDRFTR_LEFT_CAPS
-.ALIAS   FOOTER_LEFT               HDRFTR_LEFT
-.ALIAS   FOOTER_PLAIN              HDRFTR_PLAIN
-.ALIAS   FOOTER_RECTO              HDRFTR_RECTO
-.ALIAS   FOOTER_RIGHT_CAPS         HDRFTR_RIGHT_CAPS
-.ALIAS   FOOTER_RIGHT              HDRFTR_RIGHT
-.ALIAS   FOOTER_RULE_GAP           HDRFTR_RULE_GAP
-.ALIAS   FOOTER_RULE               HDRFTR_RULE
-.ALIAS   FOOTER_VERSO              HDRFTR_VERSO
-.ALIAS   HEADER_CENTER_CAPS        HDRFTR_CENTER_CAPS
-.ALIAS   HEADER_CENTER             HDRFTR_CENTER
-.ALIAS   HEADER_CENTER_PAD         HDRFTR_CENTER_PAD
-.ALIAS   HEADER_CENTRE_CAPS        HDRFTR_CENTER_CAPS
-.ALIAS   HEADER_CENTRE             HDRFTR_CENTER
-.ALIAS   HEADER_CENTRE_PAD         HDRFTR_CENTER_PAD
-.ALIAS   HEADER_LEFT_CAPS          HDRFTR_LEFT_CAPS
-.ALIAS   HEADER_LEFT               HDRFTR_LEFT
-.ALIAS   HEADER_PLAIN              HDRFTR_PLAIN
-.ALIAS   HEADER_RECTO              HDRFTR_RECTO
-.ALIAS   HEADER_RIGHT_CAPS         HDRFTR_RIGHT_CAPS
-.ALIAS   HEADER_RIGHT              HDRFTR_RIGHT
-.ALIAS   HEADER_RULE_GAP           HDRFTR_RULE_GAP
-.ALIAS   HEADER_RULE               HDRFTR_RULE
-.ALIAS   HEADER_VERSO              HDRFTR_VERSO
-.ALIAS   SWITCH_FOOTERS            SWITCH_HDRFTR
-.ALIAS   SWITCH_HEADERS            SWITCH_HDRFTR
-\#
-\# Type-style aliases
-\#
-.ALIAS   AUTHOR_FAMILY                    _FAMILY
-.ALIAS   BIBLIOGRAPHY_FAMILY              _FAMILY
-.ALIAS   BIBLIOGRAPHY_STRING_FAMILY       _FAMILY
-.ALIAS   BLOCKQUOTE_FAMILY                _FAMILY
-.ALIAS   CHAPTER_TITLE_FAMILY             _FAMILY
-.ALIAS   COVER_AUTHOR_FAMILY              _FAMILY
-.ALIAS   COVER_CHAPTER_TITLE_FAMILY       _FAMILY
-.ALIAS   COVER_COPYRIGHT_FAMILY           _FAMILY
-.ALIAS   COVER_DOCTYPE_FAMILY             _FAMILY
-.ALIAS   COVER_FAMILY                     _FAMILY
-.ALIAS   COVER_MISC_FAMILY                _FAMILY
-.ALIAS   COVER_SUBTITLE_FAMILY            _FAMILY
-.ALIAS   COVER_TITLE_FAMILY               _FAMILY
-.ALIAS   DOC_COVER_AUTHOR_FAMILY          _FAMILY
-.ALIAS   DOC_COVER_CHAPTER_TITLE_FAMILY   _FAMILY
-.ALIAS   DOC_COVER_COPYRIGHT_FAMILY       _FAMILY
-.ALIAS   DOC_COVER_DOCTYPE_FAMILY         _FAMILY
-.ALIAS   DOC_COVER_FAMILY                 _FAMILY
-.ALIAS   DOC_COVER_MISC_FAMILY            _FAMILY
-.ALIAS   DOC_COVER_SUBTITLE_FAMILY        _FAMILY
-.ALIAS   DOC_COVER_TITLE_FAMILY           _FAMILY
-.ALIAS   DOCHEADER_FAMILY                 _FAMILY
-.ALIAS   DOCTYPE_FAMILY                   _FAMILY
-.ALIAS   ENDNOTE_FAMILY                   _FAMILY
-.ALIAS   ENDNOTE_NUMBER_FAMILY            _FAMILY
-.ALIAS   ENDNOTE_LINENUMBER_FAMILY        _FAMILY
-.ALIAS   ENDNOTE_STRING_FAMILY            _FAMILY
-.ALIAS   ENDNOTE_TITLE_FAMILY             _FAMILY
-.ALIAS   EPIGRAPH_FAMILY                  _FAMILY
-.ALIAS   FOOTNOTE_FAMILY                  _FAMILY
-.ALIAS   HDRFTR_CENTER_FAMILY             _FAMILY
-.ALIAS   HDRFTR_FAMILY                    _FAMILY
-.ALIAS   HDRFTR_LEFT_FAMILY               _FAMILY
-.ALIAS   HDRFTR_RIGHT_FAMILY              _FAMILY
-.ALIAS   LINENUMBER_FAMILY                _FAMILY
-.ALIAS   PAGENUM_FAMILY                   _FAMILY
-.ALIAS   QUOTE_FAMILY                     _FAMILY
-.ALIAS   SUBTITLE_FAMILY                  _FAMILY
-.ALIAS   TITLE_FAMILY                     _FAMILY
-.ALIAS   TOC_FAM                          _FAMILY
-.ALIAS   TOC_FAMILY                       _FAMILY
-.ALIAS   TOC_HEADER_FAMILY                _FAMILY
-.ALIAS   TOC_PN_FAMILY                    _FAMILY
-\#
-.ALIAS   AUTHOR_FONT                    _FONT
-.ALIAS   BIBLIOGRAPHY_STRING_FONT       _FONT
-.ALIAS   BIBLIOGRAPHY_FONT              _FONT
-.ALIAS   BLOCKQUOTE_FONT                _FONT
-.ALIAS   CHAPTER_TITLE_FONT             _FONT
-.ALIAS   COVER_AUTHOR_FONT              _FONT
-.ALIAS   COVER_CHAPTER_TITLE_FONT       _FONT
-.ALIAS   COVER_COPYRIGHT_FONT           _FONT
-.ALIAS   COVER_DOCTYPE_FONT             _FONT
-.ALIAS   COVER_MISC_FONT                _FONT
-.ALIAS   COVER_SUBTITLE_FONT            _FONT
-.ALIAS   COVER_TITLE_FONT               _FONT
-.ALIAS   DOC_COVER_AUTHOR_FONT          _FONT
-.ALIAS   DOC_COVER_CHAPTER_TITLE_FONT   _FONT
-.ALIAS   DOC_COVER_COPYRIGHT_FONT       _FONT
-.ALIAS   DOC_COVER_DOCTYPE_FONT         _FONT
-.ALIAS   DOC_COVER_MISC_FONT            _FONT
-.ALIAS   DOC_COVER_SUBTITLE_FONT        _FONT
-.ALIAS   DOC_COVER_TITLE_FONT           _FONT
-.ALIAS   DOCTYPE_FONT                   _FONT
-.ALIAS   ENDNOTE_FONT                   _FONT
-.ALIAS   ENDNOTE_NUMBER_FONT            _FONT
-.ALIAS   ENDNOTE_LINENUMBER_FONT        _FONT
-.ALIAS   ENDNOTE_STRING_FONT            _FONT
-.ALIAS   ENDNOTE_TITLE_FONT             _FONT
-.ALIAS   EPIGRAPH_FONT                  _FONT
-.ALIAS   FOOTNOTE_FONT                  _FONT
-.ALIAS   HDRFTR_CENTER_FONT             _FONT
-.ALIAS   HDRFTR_LEFT_FONT               _FONT
-.ALIAS   HDRFTR_RIGHT_FONT              _FONT
-.ALIAS   LINENUMBER_FONT                _FONT
-.ALIAS   PAGENUM_FONT                   _FONT
-.ALIAS   QUOTE_FONT                     _FONT
-.ALIAS   SUBTITLE_FONT                  _FONT
-.ALIAS   TITLE_FONT                     _FONT
-.ALIAS   TOC_HEADER_FONT                _FONT
-.ALIAS   TOC_PN_FONT                    _FONT
-\#
-.ALIAS   AUTHOR_SIZE                    _SIZE
-.ALIAS   BIBLIOGRAPHY_STRING_SIZE       _SIZE
-.ALIAS   BLOCKQUOTE_SIZE                _SIZE
-.ALIAS   CHAPTER_TITLE_SIZE             _SIZE
-.ALIAS   COVER_AUTHOR_SIZE              _SIZE
-.ALIAS   COVER_CHAPTER_TITLE_SIZE       _SIZE
-.ALIAS   COVER_COPYRIGHT_SIZE           _SIZE
-.ALIAS   COVER_DOCTYPE_SIZE             _SIZE
-.ALIAS   COVER_MISC_SIZE                _SIZE
-.ALIAS   COVER_SUBTITLE_SIZE            _SIZE
-.ALIAS   COVER_TITLE_SIZE               _SIZE
-.ALIAS   DOC_COVER_AUTHOR_SIZE          _SIZE
-.ALIAS   DOC_COVER_CHAPTER_TITLE_SIZE   _SIZE
-.ALIAS   DOC_COVER_COPYRIGHT_SIZE       _SIZE
-.ALIAS   DOC_COVER_DOCTYPE_SIZE         _SIZE
-.ALIAS   DOC_COVER_MISC_SIZE            _SIZE
-.ALIAS   DOC_COVER_SUBTITLE_SIZE        _SIZE
-.ALIAS   DOC_COVER_TITLE_SIZE           _SIZE
-.ALIAS   DOCTYPE_SIZE                   _SIZE
-.ALIAS   ENDNOTE_NUMBER_SIZE            _SIZE
-.ALIAS   ENDNOTE_LINENUMBER_SIZE        _SIZE
-.ALIAS   ENDNOTE_STRING_SIZE            _SIZE
-.ALIAS   ENDNOTE_TITLE_SIZE             _SIZE
-.ALIAS   EPIGRAPH_SIZE                  _SIZE
-.ALIAS   FOOTNOTE_SIZE                  _SIZE
-.ALIAS   HDRFTR_CENTER_SIZE             _SIZE
-.ALIAS   HDRFTR_LEFT_SIZE               _SIZE
-.ALIAS   HDRFTR_RIGHT_SIZE              _SIZE
-.ALIAS   HDRFTR_SIZE                    _SIZE
-.ALIAS   LINENUMBER_SIZE                _SIZE
-.ALIAS   PAGENUM_SIZE                   _SIZE
-.ALIAS   QUOTE_SIZE                     _SIZE
-.ALIAS   SUBTITLE_SIZE                  _SIZE
-.ALIAS   TITLE_SIZE                     _SIZE
-.ALIAS   TOC_HEADER_SIZE                _SIZE
-.ALIAS   TOC_PN_SIZE                    _SIZE
-\#
-.ALIAS   ATTRIBUTE_COLOR                 _COLOR
-.ALIAS   AUTHOR_COLOR                    _COLOR
-.ALIAS   BLOCKQUOTE_COLOR                _COLOR
-.ALIAS   CHAPTER_TITLE_COLOR             _COLOR
-.ALIAS   CODE_COLOR                      _COLOR
-.ALIAS   COVER_ATTRIBUTE_COLOR           _COLOR
-.ALIAS   COVER_AUTHOR_COLOR              _COLOR
-.ALIAS   COVER_CHAPTER_TITLE_COLOR       _COLOR
-.ALIAS   COVER_COLOR                     _COLOR
-.ALIAS   COVER_COPYRIGHT_COLOR           _COLOR
-.ALIAS   COVER_DOCTYPE_COLOR             _COLOR
-.ALIAS   COVER_MISC_COLOR                _COLOR
-.ALIAS   COVER_SUBTITLE_COLOR            _COLOR
-.ALIAS   COVER_TITLE_COLOR               _COLOR
-.ALIAS   DOC_COVER_ATTRIBUTE_COLOR       _COLOR
-.ALIAS   DOC_COVER_AUTHOR_COLOR          _COLOR
-.ALIAS   DOC_COVER_CHAPTER_TITLE_COLOR   _COLOR
-.ALIAS   DOC_COVER_COLOR                 _COLOR
-.ALIAS   DOC_COVER_COPYRIGHT_COLOR       _COLOR
-.ALIAS   DOC_COVER_DOCTYPE_COLOR         _COLOR
-.ALIAS   DOC_COVER_MISC_COLOR            _COLOR
-.ALIAS   DOC_COVER_SUBTITLE_COLOR        _COLOR
-.ALIAS   DOC_COVER_TITLE_COLOR           _COLOR
-.ALIAS   DOCHEADER_COLOR                 _COLOR
-.ALIAS   DOCTYPE_COLOR                   _COLOR
-.ALIAS   ENDNOTE_STRING_COLOR            _COLOR
-.ALIAS   EPIGRAPH_COLOR                  _COLOR
-.ALIAS   FINIS_COLOR                     _COLOR
-.ALIAS   FOOTNOTE_COLOR                  _COLOR
-.ALIAS   HDRFTR_CENTER_COLOR             _COLOR
-.ALIAS   HDRFTR_COLOR                    _COLOR
-.ALIAS   HDRFTR_LEFT_COLOR               _COLOR
-.ALIAS   HDRFTR_RIGHT_COLOR              _COLOR
-.ALIAS   HDRFTR_RULE_COLOR               _COLOR
-.ALIAS   LINEBREAK_COLOR                 _COLOR
-.ALIAS   LINENUMBER_COLOR                _COLOR
-.ALIAS   PAGENUM_COLOR                   _COLOR
-.ALIAS   QUOTE_COLOR                     _COLOR
-.ALIAS   SECTION_COLOR                   _COLOR
-.ALIAS   SUBTITLE_COLOR                  _COLOR
-.ALIAS   TITLE_COLOR                     _COLOR
-\#
-.ALIAS   BIBLIOGRAPHY_QUAD          _QUAD
-.ALIAS   BIBLIOGRAPHY_STRING_QUAD   _QUAD
-.ALIAS   BLOCKQUOTE_QUAD            _QUAD
-.ALIAS   COVER_COPYRIGHT_QUAD       _QUAD
-.ALIAS   COVER_MISC_QUAD            _QUAD
-.ALIAS   COVER_QUAD                 _QUAD
-.ALIAS   DOC_COVER_COPYRIGHT_QUAD   _QUAD
-.ALIAS   DOC_COVER_MISC_QUAD        _QUAD
-.ALIAS   DOC_COVER_QUAD             _QUAD
-.ALIAS   DOCHEADER_QUAD             _QUAD
-.ALIAS   DOC_QUAD                   _QUAD
-.ALIAS   ENDNOTE_QUAD               _QUAD
-.ALIAS   ENDNOTE_STRING_QUAD        _QUAD
-.ALIAS   ENDNOTE_TITLE_QUAD         _QUAD
-.ALIAS   EPIGRAPH_QUAD              _QUAD
-.ALIAS   FOOTNOTE_QUAD              _QUAD
-.ALIAS   TOC_HEADER_QUAD            _QUAD
-\#
-\# Support aliases
-\#
-.ALIAS   COL_BREAK               COL_NEXT
-.ALIAS   DOC_COVER_ADVANCE       COVER_ADVANCE
-.ALIAS   DOC_COVER               COVER
-.ALIAS   DOC_COVER_COUNTS_PAGES  COVER_COUNTS_PAGES
-.ALIAS   DOC_COVERS              COVERS
-.ALIAS   DOC_COVER_LEAD          COVER_LEAD
-.ALIAS   DOC_COVERTITLE          COVERTITLE
-.ALIAS   DO_DOC_COVER            DO_COVER
-.ALIAS   PRINT_FOOTNOTE_RULE     FOOTNOTE_RULE
-\#
-\# Miscellaneous aliases
-.ALIAS   SECTION        LINEBREAK
-.ALIAS   SECTION_CHAR   LINEBREAK_CHAR
-\#
-\# Miscellaneous macros to take care of backward compatibility
-\# -----------------------------------------------------------
-\#
-\# As of 1.1.9, EL and TN got changed to make TRAP...TRAP OFF
-\# unnecessary for users.  However, I used both macros extensively
-\# throughout this file (in conjunction with TRAP...TRAP OFF).
-\# EOL is the old EL; used only in om.tmac.
-\#
-.MAC EOL END
-.    if \\n[.vpt] \{\
-.       vpt 0
-.       nr #RESTORE_TRAP 1
-.    \}
-.    br
-.    sp -1v
-.    if \\n[#RESTORE_TRAP] \{\
-.       vpt
-.       rr #RESTORE_TRAP
-.    \}
-.END
-\#
-\#
-\# PREPROCESSOR SUPPORT
-\# ====================
-\#
-\# Utility macros--label and caption styles, lists collector, lists
-\# generator.
-\#
-.nr lists*target 0 1
-.
-.MAC get-label-type END
-.    if \\n[all]=1 .ds label-type eqn
-.    if \\n[all]=2 .ds label-type pdf-img
-.    if \\n[all]=3 .ds label-type pic
-.    if \\n[all]=4 .ds label-type tbl
-.END
-\#
-.MAC set-defaults END
-.    if '\\*[\\*[label-type]*\\*[spec-type]-family]'' \
-.       ds \\*[label-type]*\\*[spec-type]-family \\*[$DOC_FAM]\"
-.    if '\\*[\\*[label-type]*\\*[spec-type]-font]'' \
-.       ds \\*[label-type]*\\*[spec-type]-font R\"
-.    if '\\*[\\*[label-type]*\\*[spec-type]-size-change]'' \
-.       ds \\*[label-type]*\\*[spec-type]-size-change +0\"
-.    if !r \\*[label-type]*\\*[spec-type]-autolead \
-.       nr \\*[label-type]*\\*[spec-type]-autolead 2
-.    if '\\*[\\*[label-type]*\\*[spec-type]-color]'' \
-.       ds \\*[label-type]*\\*[spec-type]-color black\"
-.    if '\\*[\\*[label-type]*\\*[spec-type]-quad]'' \{\
-.       ie '\\*[label-type]'eqn' \{\
-.          if '\\*[spec-type]'caption' \
-.             ds \\*[label-type]*\\*[spec-type]-quad C\"
-.       \}
-.       el .ds \\*[label-type]*\\*[spec-type]-quad L\"
-.    \}
-.    if '\\n[\\*[label-type]*\\*[spec-type]-quad-on-ll]'' \
-.       nr \\*[label-type]*\\*[spec-type]-quad-on-ll 1
-.    if '\\*[spec-type]'caption' \{\
-.       nr default-left 1
-.    \}
-.END
-\#
-.MAC set-inline-specs END
-.    ds \\*[label-type]*\\*[spec-type]-specs \
-\f[\\*[\\*[label-type]*\\*[spec-type]-family]\\*[\\*[label-type]*\\*[spec-type]-font]]\
-\s[\\*[\\*[label-type]*\\*[spec-type]-size-change]]\
-\m[\\*[\\*[label-type]*\\*[spec-type]-color]]
-.END
-\#
-\# Line lengths, indents, and quads for captions and labels.
-\# Aliased for eqn, pic, pdf-image, and tbl.
-\#
-.MAC SET_QUAD END
-.    ds label-type \\$0
-.    substring label-type 0 2
-.    if '\\*[label-type]'PDF'  .ds label-type pdf-img
-.    if '\\*[label-type]'TBL'  .ds label-type tbl
-.    if '\\*[label-type]'PIC'  .ds label-type pic
-.    if '\\*[label-type]'EQN'  .ds label-type eqn
-.    ds spec-type \\$0
-.    substring spec-type -6 -10
-.    if '\\*[spec-type]'PTION' .ds spec-type caption
-.    if '\\*[spec-type]'LABEL' .ds spec-type label
-.    if '\\*[spec-type]'OURCE' .ds spec-type source
-.    QUAD \\$1
-.    ds \\*[label-type]*\\*[spec-type]-quad \\$1
-.    substring \\*[label-type]*\\*[spec-type]-quad 0 0
-.    if '\\*[label-type]'pdf-img' \{\
-.       if '\\*[\\*[label-type]*\\*[spec-type]-quad]'L' \{\
-.          if !\\n[pdf-img*\\*[spec-type]-quad-on-ll] \{\
-.             ie !'\\*[pdf-img:pos]'-R' \
-.                ll \\n[pdf-img:ind]u+\\n[pdf-img:width]u+\\n[pdf-img:frame-inset]u
-.             el .ll -\\n[ind-pre-img]u
-.             if '\\*[pdf-img:pos]'-C' \
-.                in \\n[pdf-img:ind]u-\\n[pdf-img:frame-inset]u
-.             if '\\*[pdf-img:pos]'-R' \
-.                in \\n[.l]u-(\\n[pdf-img:width]u+(\\n[pdf-img:frame-inset]u*2u))
-.             if '\\*[pdf-img:pos]'-I' \
-.                in \\n[pdf-img:ind]u
-.          \}
-.       \}
-.       if '\\*[\\*[label-type]*\\*[spec-type]-quad]'C' \{\
-.          if !\\n[pdf-img*\\*[spec-type]-quad-on-ll] \{\
-.             if '\\*[pdf-img:pos]'-L' \
-.                ll \\n[pdf-img:width]u+(\\n[pdf-img:frame-inset]u*2u)
-.             if '\\*[pdf-img:pos]'-C' \{\
-.                ll (\\n[ll-pre-img]u-\\n[pdf-img:width]u/2u+(\\n[pdf-img:frame-inset]u))+\\n[pdf-img:width]u
-.                in \\n[.l]u-(\\n[pdf-img:width]u+(\\n[pdf-img:frame-inset]u*2u))
-.             \}
-.             if '\\*[pdf-img:pos]'-R' \{\
-.                ll -\\n[ind-pre-img]u
-.                in \\n[.l]u-(\\n[pdf-img:width]u+(\\n[pdf-img:frame-inset]u*2u))
-.             \}
-.             if '\\*[pdf-img:pos]'-I' \{\
-.                ll \\n[pdf-img:ind]u+\\n[pdf-img:width]u+(\\n[pdf-img:frame-inset]u*2u)
-.                in \\n[pdf-img:ind]u
-.             \}
-.          \}
-.       \}
-.       if '\\*[\\*[label-type]*\\*[spec-type]-quad]'R' \{\
-.          if !\\n[pdf-img*\\*[spec-type]-quad-on-ll] \{\
-.             if '\\*[pdf-img:pos]'-L' \
-.                ll \\n[pdf-img:width]u+(\\n[pdf-img:frame-inset]u*2u]
-.             if '\\*[pdf-img:pos]'-C' \{\
-.                ll (\\n[.l]u-\\n[ind-pre-img]u-\\n[pdf-img:width]u/2u)+\\n[pdf-img:width]u+\\n[pdf-img:frame-inset]u
-.                in \\n[pdf-img:ind]u
-.             \}
-.             if '\\*[pdf-img:pos]'-R' \{\
-.                ll -\\n[ind-pre-img]u
-.                in \\n[.l]u-\\n[pdf-img:width]u
-.             \}
-.             if '\\*[pdf-img:pos]'-I' \{\
-.                ll \\n[pdf-img:ind]u+\\n[pdf-img:width]u+(\\n[pdf-img:frame-inset]u*2u)
-.                in \\n[pdf-img:ind]u
-.             \}   
-.          \}
-.       \}
-.    \}
-.    if '\\*[label-type]'pic' \{\
-.       if !\\n[pic*\\*[spec-type]-quad-on-ll] \{\
-.          ie \\n[pic*left] .ll \\n[pic*div-width]u
-.          el \{\
-.             ll \\n[pic*div-width]u
-\!.           in \\n[ll-pre-pic]u-\\n[pic*div-width]u/2u
-.          \}
-.       \}
-.    \}
-.    if '\\*[label-type]'tbl' \{\
-.       if !\\n[tbl*\\*[spec-type]-quad-on-ll] \{\
-.          ie \\n[tbl*center] \{\
-.             ie '\\*[spec-type]'label' \{\
-.                ll \\n[ll-pre-tbl]u-\\n[TW]u/2u+\\n[TW]u
-\!.                in \\n[ll-pre-tbl]u-\\n[TW]u/2u
-.             \}
-.             el \{\
-.                ll \\n[TW]u
-\!.              in \\n[ll-pre-tbl]u-\\n[TW]u/2u
-.             \}
-.          \}
-.          el .ll \\n[TW]u
-.       \}
-.    \}
-.END
-\#
-.ALIAS TBL*SET_CAPTION_QUAD     SET_QUAD
-.ALIAS TBL*SET_LABEL_QUAD       SET_QUAD
-.ALIAS TBL*SET_SOURCE_QUAD      SET_QUAD
-.ALIAS PDF_IMG*SET_CAPTION_QUAD SET_QUAD
-.ALIAS PDF_IMG*SET_LABEL_QUAD   SET_QUAD
-.ALIAS PIC*SET_CAPTION_QUAD     SET_QUAD
-.ALIAS PIC*SET_LABEL_QUAD       SET_QUAD
-\#
-.MAC style END
-.    ds label-type \\$0
-.    substring label-type 0 2
-.    if '\\*[label-type]'img' .ds label-type pdf-img
-.    if '\\*[label-type]'tbl' .ds label-type tbl
-.    if '\\*[label-type]'pic' .ds label-type pic
-.    ds spec-type \\$0
-.    substring spec-type 4 6
-.    if '\\*[spec-type]'cap' .ds spec-type caption
-.    if '\\*[spec-type]'lab' .ds spec-type label
-.    if '\\*[spec-type]'sou' .ds spec-type source
-.    fam \\*[\\*[label-type]*\\*[spec-type]-family]
-.    ft \\*[\\*[label-type]*\\*[spec-type]-font]
-.    ps \\n[#DOC_PT_SIZE]u\\*[\\*[label-type]*\\*[spec-type]-size-change]
-.    gcolor \\*[\\*[label-type]*\\*[spec-type]-color]
-.END
-\#
-.ALIAS tbl*caption-style style
-.ALIAS tbl*label-style   style
-.ALIAS tbl*source-style  style
-.ALIAS img*caption-style style
-.ALIAS img*label-style   style
-.ALIAS img*source-style  style
-.ALIAS pic*caption-style style
-.ALIAS pic*label-style   style
-.ALIAS pic*source-style  style
-\#
-\# User style macros
-\#
-\# TYPE SPECS FOR LABELS, CAPTIONS, AND SOURCES
-\# --------------------------------------------
-\#  Aliased as CAPTIONS and LABELS for eqn, pic, tbl, and pdf images.
-\# *Arguments:
-\#   EQN | IMG | PIC | TBL \
-\#   Remaining arguments are optional
-\#   FAMILY fam \
-\#   FONT   sty \
-\#   SIZE   +|-size \
-\#   QUAD   LEFT | CENTRE | RIGHT [ ON_LL ] \
-\#   COLOR  color \
-\#   AUTOLEAD n \
-\#   ADJUST   +|-n
-\# *Function:
-\#   Sets type specs for captions, labels, and sources according to
-\#   calling alias name
-\# *Notes:
-\#   SIZE is relative to running text.
-\#   QUAD optional arg says quad on full line length rather than
-\#    pdf-img or pre-processor output.  
-\#
-.MAC CAPTION_LABEL_SPECS END
-.    if '\\$0'CAPTIONS' .ds spec-type caption
-.    if '\\$0'LABELS'   .ds spec-type label
-.    if '\\$0'SOURCES'  .ds spec-type source
-.    if '\\$1'EQN' .ds label-type eqn
-.    if '\\$1'IMG' .ds label-type pdf-img
-.    if '\\$1'PIC' .ds label-type pic
-.    if '\\$1'TBL' .ds label-type tbl
-.    if '\\$1'ALL' .nr all 1
-.    shift
-.    nr loop-counter \\n[#NUM_ARGS]
-.    nr loop-count 0 1
-.    while \\n+[loop-count]<=\\n[loop-counter] \{\
-.       if '\\$1'FAMILY' \{\
-.          shift
-.          ie r all \{\
-.             nr all 0 1
-.             while \\n+[all]<=4 \{\
-.                 get-label-type
-.                 ds \\*[label-type]*\\*[spec-type]-family \\$1
-.             \}
-.          \}
-.          el .ds \\*[label-type]*\\*[spec-type]-family \\$1
-.          if \\n[#PRINT_STYLE]=1 \
-.             ds \\*[label-type]*\\*[spec-type]-family \\*[$TYPEWRITER_FAM]
-.          shift
-.       \}
-.       if '\\$1'FONT' \{\
-.          shift
-.          ie r all \{\
-.             nr all 0 1
-.             while \\n+[all]<=4 \{\
-.                 get-label-type
-.                 ds \\*[label-type]*\\*[spec-type]-font \\$1
-.             \}
-.          \}
-.          el .ds \\*[label-type]*\\*[spec-type]-font \\$1
-.          if \\n[#PRINT_STYLE]=1 \
-.             ds \\*[label-type]*\\*[spec-type]-font R
-.          shift
-.       \}
-.       if '\\$1'SIZE' \{\
-.          shift
-.          ie r all \{\
-.             nr all 0 1
-.             while \\n+[all]<=4 \{\
-.                 get-label-type
-.                 ds \\*[label-type]*\\*[spec-type]-size-change \\$1
-.             \}
-.          \}
-.          el .ds \\*[label-type]*\\*[spec-type]-size-change \\$1
-.          if \\n[#PRINT_STYLE]=1 \
-.             ds \\*[label-type]*\\*[spec-type]-size-change +0
-.          shift
-.       \}
-.       if '\\$1'AUTOLEAD' \{\
-.          shift
-.          ie r all \{\
-.             nr all 0 1
-.             while \\n+[all]<=4 \{\
-.                 get-label-type
-.                 nr \\*[label-type]*\\*[spec-type]-autolead (p;\\$1)
-.             \}
-.          \}
-.          el .nr \\*[label-type]*\\*[spec-type]-autolead (p;\\$1)
-.          shift
-.       \}
-.       if '\\$1'QUAD' \{\
-.          shift
-.          ie r all \{\
-.             nr all 0 1
-.             while \\n+[all]<=4 \{\
-.                 get-label-type
-.                 ds \\*[label-type]*\\*[spec-type]-quad \\$1
-.                 substring \\*[label-type]*\\*[spec-type]-quad 0 0
-.             \}
-.          \}
-.          el \{\
-.             ds \\*[label-type]*\\*[spec-type]-quad \\$1
-.             substring \\*[label-type]*\\*[spec-type]-quad 0 0
-.             if \\n[\\*[label-type]*\\*[spec-type]-quad-on-ll] \
-.                rr \\*[label-type]*\\*[spec-type]-quad-on-ll 
-.          \}
-.          shift
-.          if '\\$1'ON_LL' \{\
-.             nr \\*[label-type]*\\*[spec-type]-quad-on-ll 1
-.             shift
-.          \}
-.       \}
-.       if '\\$1'COLOR' \{\
-.          shift
-.          ie r all \{\
-.             nr all 0 1
-.             while \\n+[all]<=4 \{\
-.                 get-label-type
-.                 ds \\*[label-type]*\\*[spec-type]-color \\$1
-.             \}
-.          \}
-.          el .ds \\*[label-type]*\\*[spec-type]-color \\$1
-.          if \\n[#PRINT_STYLE]=1 \
-.             ds \\*[label-type]*\\*[spec-type]-color black
-.          shift
-.       \}
-.       if '\\$1'ADJUST' \{\
-.          shift
-.          ie r all \{\
-.             nr all 0 1
-.             while \\n+[all]<=4 \{\
-.                 get-label-type
-.                 ds \\*[label-type]*\\*[spec-type]-space \\$1
-.             \}
-.          \}
-.          el .ds \\*[label-type]*\\*[spec-type]-space \\$1
-.          if \\n[#PRINT_STYLE]=1 \
-.             ds \\*[label-type]*\\*[spec-type]-space +0
-.          shift
-.       \}
-.    \}
-.    ie r all \{\
-.       nr all 0 1
-.       while \\n+[all]<=4 \{\
-.          get-label-type
-.          set-defaults
-.          set-inline-specs
-.       \}
-.    \}
-.    el \{\
-.       set-defaults
-.       set-inline-specs
-.    \}
-.    ds revert-specs \f[]\s[0]\m[]
-.    rr all
-.END
-\#
-.ALIAS CAPTIONS CAPTION_LABEL_SPECS
-.ALIAS LABELS   CAPTION_LABEL_SPECS
-.ALIAS SOURCES  CAPTION_LABEL_SPECS
-\#
-\# CAPTION_AFTER_LABEL
-\# -------------------
-\# *Arguments:
-\#   <none> | <anything>
-\# *Function:
-\#   Sets register indicating non-MLA captions should come after labels.
-\#
-.MAC CAPTION_AFTER_LABEL END
-.    if '\\$1'IMG' .ds type pdf-img
-.    if '\\$1'PIC' .ds type pic
-.    if '\\$1'TBL' .ds type tbl
-.    if !\\n[#MLA] \{\
-.       nr \\*[type]*caption-after-label 1
-.       if '\\$1'ALL' \{\
-.          if '\\$1'IMG' .nr pdf-img*caption-after-label 1
-.          if '\\$1'TBL' .nr tbl*caption-after-label 1
-.          if '\\$1'PIC' .nr pic*caption-after-label 1
-.       \}
-.       if !'\\$2'' \{\
-.          ie !'\\$1'ALL' .rr \\*[type]*caption-after-label
-.          el \{\
-.             rr pdf-img*caption-after-label
-.             rr tbl*caption-after-label
-.             rr pic*caption-after-label
-.          \}
-.       \}
-.    \}
-.END
-\#
-\# AUTOLABELLING
-\# -------------
-\# *Argument:
-\#   [ PREFIX <prefix> SUFFIX <suffix> ] | <anything>
-\# *Function:
-\#   Turns label autonumbering on of off; optionally lets user set
-\#   prefix and suffix for labels.
-\# *Notes:
-\#   Aliased for images (pdf), tbl, pic, and eqn.
-\#
-.MAC AUTOLABEL END
-.    if '\\$0'AUTOLABEL_EQUATIONS' .ds label-type eqn
-.    if '\\$0'AUTOLABEL_IMAGES'    .ds label-type pdf-img
-.    if '\\$0'AUTOLABEL_PIC'       .ds label-type pic
-.    if '\\$0'AUTOLABEL_TABLES'    .ds label-type tbl
-.    if !'\\$1'' \{\
-.       ds \\*[label-type]-label-args \\$1
-.       substring \\*[label-type]-label-args -1 -3
-.    \}
-.    if '\\*[\\*[label-type]-label-args]'FIX' .nr \\*[label-type]-label-args 1
-.    if '\\*[\\*[label-type]-label-args]'TER' .nr \\*[label-type]-label-args 1
-.    if !\\n[\\*[label-type]*label-num] \
-.       nr \\*[label-type]*label-num 0 1
-.    if '\\*[label-type]'pdf-img' .nr fig*label-num 0 1
-.    if '\\*[label-type]'pic'     .nr fig*label-num 0 1
-.    nr \\*[label-type]*autolabel 1
-.    nr loop-counter 0 1
-.    nr loop-count \\n[#NUM_ARGS]
-.    while \\n+[loop-counter]<=\\n[loop-count] \{\
-.       if '\\$1'PREFIX' \{\
-.          ds \\*[label-type]*label-prfx \\$2
-.          nr \\*[label-type]*label-prfx-set 1
-.          shift 2
-.       \}
-.       if '\\$1'SUFFIX' \{\
-.          ds \\*[label-type]*label-sffx \\$2
-.          nr \\*[label-type]*label-sffx-set 1
-.          shift 2
-.       \}
-.       if '\\$1'PREFIX_CHAPTER' \{\
-.          nr \\*[label-type]*label-with-chapter 1
-.          ie !'\\$2'' \{\
-.             ie \B'\\$2' .nr #CH_NUM \\$2
-.             el .autolabel@error
-.          \}
-.          el \{\
-.             ie \\n[#CHAPTER_CALLED] \
-.                ie \B'\\*[$CHAPTER]' .nr #CH_NUM \\*[$CHAPTER]
-.                el .autolabel@error \\$0
-.             el .autolabel@error \\$0
-.          \}
-.          shift 2
-.       \}
-.    \}
-.    if '\\*[\\*[label-type]*label-prfx]'' \{\
-.       if '\\*[label-type]'eqn' \
-.          if !\\n[\\*[label-type]*label-prfx-set] \
-.             ds \\*[label-type]*label-prfx (\"
-.       if '\\*[label-type]'pic' \
-.          if !\\n[\\*[label-type]*label-prfx-set] \
-.             ds \\*[label-type]*label-prfx Fig. \"
-.       if '\\*[label-type]'pdf-img' \
-.          if !\\n[\\*[label-type]*label-prfx-set] \
-.             ds \\*[label-type]*label-prfx Fig. \"
-.       if '\\*[label-type]'tbl' \
-.          if !\\n[\\*[label-type]*label-prfx-set] \
-.             ds \\*[label-type]*label-prfx Table \"
-.    \}
-.    if '\\*[\\*[label-type]*label-sffx]'' \{\
-.       if '\\*[label-type]'eqn' \
-.          if !\\n[\\*[label-type]*label-sffx-set] \
-.             ds \\*[label-type]*label-sffx )\"
-.       if '\\*[label-type]'pic' \
-.          if !\\n[\\*[label-type]*label-sffx-set] \
-.             ds \\*[label-type]*label-sffx .\"
-.       if '\\*[label-type]'pdf-img' \
-.          if !\\n[\\*[label-type]*label-sffx-set] \
-.             ds \\*[label-type]*label-sffx .\"
-.       if '\\*[label-type]'tbl' \
-.          if !\\n[\\*[label-type]*label-sffx-set] \
-.             ds \\*[label-type]*label-sffx .\"
-.    \}
-.    ie \\n[args]>0 \{\
-.       if \\n[\\*[label-type]*label-prfx-set]+\\n[\\*[label-type]*label-sffx-set]=1 \{\
-.          ie (\\n[\\*[label-type]*label-prfx-set]=1)&(\\n[\\*[label-type]*label-sffx-set]=0) \
-.             ds missing-arg SUFFIX
-.          el .ds missing-arg PREFIX
-.          tm1 "[mom]: You must supply a \\*[missing-arg] argument to \\$0.
-.          tm1 "       If you wish the \\*[missing-arg] to be blank, use \\*[missing-arg] "".
-.          ab Aborting '\\n[.F]' at \\$0, line \\n[.c].
-.       \}
-.       if !\\n[\\*[label-type]-label-args] \{\
-.          rr \\*[label-type]*autolabel
-.          rr \\*[label-type]*label-prfx-set
-.          rr \\*[label-type]*label-suffx-set
-.          rr \\*[label-type]-label-args
-.       \}
-.    \}
-.    rr \\*[label-type]-label-args
-.END
-\#
-.ALIAS AUTOLABEL_EQUATIONS AUTOLABEL
-.ALIAS AUTOLABEL_IMAGES    AUTOLABEL
-.ALIAS AUTOLABEL_PIC       AUTOLABEL
-.ALIAS AUTOLABEL_TABLES    AUTOLABEL
-\#
-.MAC autolabel@error END
-.    tm1 "[mom]: \\$1 cannot determine a chapter number.
-.    tm1 "       Enter the current chapter number as a digit after the
-.    tm1 "       PREFIX_CHAPTER argument at line \\n[.c].
-.    ab Aborting '\\n[.F]', line \\n[.c]. 
-.END
-\#
-\# MLA STYLE
-\# ---------
-\# *Argument:
-\#   <none> | <anything>
-\# *Function:
-\#   Sets or removes register #MLA.
-\# *Notes:
-\#   MLA formatting differs from other styles wrt caption and
-\#   label placement.
-\#
-.MAC MLA END
-.    ie '\\$1'' \{\
-.       nr #MLA 1
-.       nr pdf-img*caption-after-label 1
-.       nr pic*caption-after-label 1
-.       rr tbl*caption-after-label
-.    \}
-.    el \{\
-.       rr #MLA
-.    \}
-.END
-\#
-.MAC mla@error END
-.    tm1 "[mom]: MLA style enabled, but \\$1 has no corresponding \\$2.
-.    ab Aborting '\\$3' at \\$4, line \\$5.
-.END
-\#
-\# LISTS_OF
-\# --------
-\# *Aliases:
-\#   LIST_OF_EQUATIONS
-\#   LIST_OF_FIGURES
-\#   LIST_OF_TABLES
-\# *Arguments:
-\#   TITLE_STRING <string> START_PAGENUM <pagenumber>
-\# *Function:
-\#   Generates lists-of based on calling alias.
-\# *Notes:
-\#   Called at end of file.
-\#   If after TOC, and TOC is being auto-relocated, lists are also
-\#   relocated.  If called before, lists are output at end of file.
-\#
-.MAC LISTS_OF END
-.    ds $LIST_TYPE \\$0
-.    substring $LIST_TYPE -1 -4
-.    if '\\*[$LIST_TYPE]'URES' \{\
-.       ds $LIST_TYPE FIGURES
-.       ds \\*[$LIST_TYPE]_TITLE_STRING "List of Figures
-.    \}
-.    if '\\*[$LIST_TYPE]'BLES' \{\
-.       ds $LIST_TYPE TABLES
-.       ds \\*[$LIST_TYPE]_TITLE_STRING "List of Tables
-.    \}
-.    if '\\*[$LIST_TYPE]'IONS' \{\
-.       ds $LIST_TYPE EQUATIONS
-.       ds \\*[$LIST_TYPE]_TITLE_STRING "List of Equations
-.    \}
-.    nr #LIST_OF_\\*[$LIST_TYPE] 1
-.    nr loop-count 0 1
-.    nr loop-counter \\n[#NUM_ARGS]
-.    while \\n+[loop-count]<=\\n[loop-counter] \{\
-.       if '\\$1'TITLE_STRING' \{\
-.          ds \\*[$LIST_TYPE]_TITLE_STRING \\$2
-.          shift 2
-.       \}
-.       if '\\$1'START_PAGENUM' \{\
-.          nr #\\*[$LIST_TYPE]_START_PAGENUM \\$2
-.          shift 2
-.       \}
-.    \}
-.    char \[leader] " .
-.    LEADER_CHARACTER \[leader]
-.    if \\n[#LINENUMBERS]=1 \{\
-.       NUMBER_LINES OFF
-.       nr #LINENUMBERS 2
-.    \}
-.    if \\n[#FINIS] \{\
-.       if \\n[#FOOTERS_WERE_ON] \
-.          FOOTERS
-.    \}
-.    if \\n[#FOOTERS_ON]=1 \{\
-.       if !'\\*[$HDRFTR_CENTER_OLD]'' .ds $HDRFTR_CENTER \\*[$HDRFTR_CENTER_OLD]
-.       ie \\n[#LISTS_NO_PAGENUM]=1 .PAGINATION off
-.       el .PAGINATE
-.    \}
-.    if \\n[#FOOTERS_WERE_ON] .FOOTERS OFF
-.    rr #COLUMNS
-.    COLLATE
-.    if \\n[#PRINT_STYLE]=1 \{\
-.       if \\n[#SINGLE_SPACE] .LS 24
-.       DOC_LEAD_ADJUST
-.    \}
-.    if \\n[#FINIS] \{\
-.       if \\n[#FOOTERS_WERE_ON] .FOOTERS
-.       rr #FOOTERS_WERE_ON
-.       if \\n[#PAGINATION_WAS_ON] \{\
-.          nr #PAGINATE 1
-.          rr #PAGINATION_WAS_ON
-.       \}
-.       rr #FINIS
-.    \}
-.    ds $HDRFTR_CENTER \\*[$HDRFTR_CENTER_NEW]
-.    rm $HDRFTR_CENTER_OLD
-.    rm $HDRFTR_CENTER_NEW
-.    rr #COLLATED_DOC
-.    DOCTYPE DEFAULT
-.    DOCHEADER
-.    TITLE "\\*[\\*[$LIST_TYPE]_TITLE_STRING]
-.    AUTHOR ""
-.    L_MARGIN \\n[#DOC_L_MARGIN]u
-.    LL       \\n[#DOC_L_LENGTH]u
-.    if '\\*[$LISTS_FAM]'' \
-.       ds $LISTS_FAM \\*[$TOC_FAM]
-.    if '\\*[$LISTS_FT]'' \
-.       ds $LISTS_FT \\*[$TOC_TITLE_FT]
-.    if !\\n[#LISTS_PS] \
-.       nr #LISTS_PS \\n[#TOC_PS]
-.    ps \\n[#LISTS_PS]u
-.    if !\\n[#LISTS_LEAD] \
-.       nr #LISTS_LEAD \\n[#TOC_LEAD]
-.    if \\n[#PRINT_STYLE]=2 \{\
-.       ie \\n[#LISTS_LEAD_ADJUST]=1 \{\
-.          vs \\n[#LISTS_LEAD]u
-.          DOC_LEAD_ADJUST
-.       \}
-.       el \{\
-.          vs \\n[#LISTS_LEAD]u
-.          DOC_LEAD_ADJUST OFF
-.       \}
-.    \}
-.    ie !'\\*[$LISTS_TITLE_QUAD]'' \
-.       DOCHEADER_QUAD \\*[$LISTS_TITLE_QUAD]
-.    el .DOCHEADER_QUAD \\*[$TOC_HEADER_QUAD]
-.    if '\\*[$LISTS_TITLE_QUAD]'' \
-.       ds $LISTS_TITLE_QUAD \\*[$TOC_HEADER_QUAD]
-.    if !'\\*[$LISTS_TITLE_FAM]'' \
-.       TITLE_FAMILY \\*[$LISTS_TITLE_FAM]
-.    if !'\\*[$LISTS_TITLE_FT]'' \
-.       TITLE_FONT  \\*[$LISTS_TITLE_FT]
-.    if !'\\*[$LISTS_TITLE_SIZE]'' \
-.       TITLE_SIZE \\*[$LISTS_TITLE_SIZE]
-.    if !'\\*[$LISTS_TITLE_COLOR]'' \
-.       TITLE_COLOR \\*[$LISTS_TITLE_COLOR]
-.    if '\\*[$LISTS_PN_FAM]'' \
-.       ds $LISTS_PN_FAM \\*[$TOC_PN_FAM]
-.    if '\\*[$LISTS_PN_FT]'' \
-.       ds $LISTS_PN_FT \\*[$TOC_PN_FT]
-.    if '\\*[$LISTS_PN_SIZE_CHANGE]'' \
-.       ds $LISTS_PN_SIZE_CHANGE \\*[$TOC_PN_SIZE_CHANGE]
-.    if !\\n[#EQN_PN_PADDING] \
-.       nr #EQN_PN_PADDING \\n[#TOC_PN_PADDING]
-.    if !\\n[#FIG_PN_PADDING] \
-.       nr #FIG_PN_PADDING \\n[#TOC_PN_PADDING]
-.    if !\\n[#TBL_PN_PADDING] \
-.       nr #TBL_PN_PADDING \\n[#TOC_PN_PADDING]
-.    ie '\\*[$LISTS_PAGENUM_STYLE]'' \
-.       PAGENUM_STYLE \\*[$TOC_PAGENUM_STYLE]
-.    el \
-.       PAGENUM_STYLE \\*[$LISTS_PAGENUM_STYLE]
-.    if r #\\*[$LIST_TYPE]_START_PAGENUM  \
-.       PAGENUMBER \\n[#\\*[$LIST_TYPE]_START_PAGENUM]
-.    if r #LISTS_NO_PAGENUM .PAGINATION off
-.    HEADER_LEFT "\\*[$HDRFTR_LEFT]
-.    HEADER_RIGHT "\\*[$HDRFTR_RIGHT]
-.    HEADER_CENTER "\\*[\\*[$LIST_TYPE]_TITLE_STRING]
-.    if \\n[#LINENUMBERS]=2 .nr #LINENUMBERS 3
-.\" Get num placeholders for ch. num and label num.
-.    if \\n[\\*[list-type]*autolabel] \{\
-.       if \\n[#CH_NUM]<1000 .nr chapno-width 3
-.       if \\n[#CH_NUM]<100  .nr chapno-width 2
-.       if \\n[#CH_NUM]<10   .nr chapno-width 1
-.       if \\n[\\*[list-type]*label-width]<1000 .nr label-width 3
-.       if \\n[\\*[list-type]*label-width]<100  .nr label-width 2
-.       if \\n[\\*[list-type]*label-width]<10   .nr label-width 1
-.\" Calculate width of label-num tab
-.       nr label-width \w'\0'*(\\n[chapno-width]+\\n[label-width])+\w'.'
-.    \}
-.    if \\n[#SLANT_ON] .nop \\*[SLANTX]
-.    if \\n[#COLUMNS]=1 .nr #COLUMNS 0
-.    START
-.    if \\n[#PRINT_STYLE]=2 .sp -1
-.    if '\\*[$LIST_TYPE]'FIGURES'   .LIST_OF_FIG
-.    if '\\*[$LIST_TYPE]'TABLES'    .LIST_OF_TBL
-.    if '\\*[$LIST_TYPE]'EQUATIONS' .LIST_OF_EQN
-.    if \\n[#LINENUMBERS]=3 \{\
-.       NUMBER_LINES RESUME
-.       nr #LINENUMBERS 1
-.       nn 1
-.    \}
-.    pdfsync
-.END
-.\"
-.ALIAS LIST_OF_EQUATIONS LISTS_OF
-.ALIAS LIST_OF_FIGURES   LISTS_OF
-.ALIAS LIST_OF_TABLES    LISTS_OF
-\#
-\# LISTS-OF STYLE
-\# --------------
-\# *Arguments:
-\#   FAMILY        fam  /
-\#   FONT          sty /
-\#   PT_SIZE       size /
-\#   LEAD          leading [ADJUST] /
-\#   TITLE_FAMILY  fam /
-\#   TITLE_FONT    sty /
-\#   TITLE_SIZE    +|-size /
-\#   TITLE_QUAD    LEFT | CENTER | RIGHT /
-\#   TITLE_COLOR   color /
-\#   NO_PAGINATION /
-\#   PAGENUM_STYLE format /
-\#   PN_FAMILY     fam /
-\#   PN_FONT       sty /
-\#   PN_SIZE       +|-size /
-\#   PN_PADDING    n
-\# *Function:
-\#   Allows setting of all style parameters for lists-of.
-\# *Notes:
-\#   Assumption is that lists-of will all have the same style.
-\#   TOC style is used if LISTS_STYLE is omitted.
-\#
-.MAC LISTS_STYLE END
-.    nr loop-count 0 1
-.    nr loop-counter \\n[#NUM_ARGS]
-.    while \\n+[loop-count]<=\\n[loop-counter] \{\
-.       if '\\$1'FAMILY' \{\
-.          ds $LISTS_FAM \\$2
-.          shift 2
-.       \}
-.       if '\\$1'FONT' \{\
-.          ds $LISTS_FT \\$2
-.          shift 2
-.       \}
-.       if '\\$1'TITLE_FAMILY' \{\
-.          ds $LISTS_TITLE_FAM \\$2
-.          shift 2
-.       \}
-.       if '\\$1'TITLE_FONT' \{\
-.          ds $LISTS_TITLE_FT \\$2
-.          shift 2
-.       \}
-.       if '\\$1'TITLE_SIZE' \{\
-.          ds $LISTS_TITLE_SIZE \\$2
-.          shift 2
-.       \}
-.       if '\\$1'TITLE_QUAD' \{\
-.          ds $LISTS_TITLE_QUAD \\$2
-.          shift 2
-.       \}
-.       if '\\$1'TITLE_COLOR' \{\
-.          ds $LISTS_TITLE_COLOR \\$2
-.          shift 2
-.       \}
-.       if '\\$1'PT_SIZE' \{\
-.          nr #LISTS_PS (p;\\$2)
-.          shift 2
-.       \}
-.       if '\\$1'LEAD' \{\
-.          nr #LISTS_LEAD (p;\\$2)
-.          ie !'\\$3'ADJUST' \{\
-.             nr #LISTS_LEAD_ADJUST 0
-.             shift 2
-.          \}
-.          el \{\
-.             nr #LISTS_LEAD_ADJUST 1
-.             shift 3
-.          \}
-.       \}
-.       if '\\$1'NO_PAGINATION' \{\
-.          nr #LISTS_NO_PAGENUM 1
-.          shift 1
-.       \}
-.       if '\\$1'PAGENUM_STYLE' \{\
-.          ds $LISTS_PAGENUM_STYLE \\$2
-.          shift 2
-.       \}
-.       if '\\$1'PN_FAMILY' \{\
-.          ds $LISTS_PN_FAM \\$2
-.          shift 2
-.       \}
-.       if '\\$1'PN_FONT' \{\
-.          ds $LISTS_PN_FT \\$2
-.          shift 2
-.       \}
-.       if '\\$1'PN_SIZE' \{\
-.          ds $LISTS_PN_SIZE_CHANGE \\$2
-.          shift 2
-.       \}
-.       if '\\$1'EQN_PN_PADDING' \{\
-.          nr #EQN_PN_PADDING \\$2
-.          shift 2
-.       \}
-.       if '\\$1'FIG_PN_PADDING' \{\
-.          nr #FIG_PN_PADDING \\$2
-.          shift 2
-.       \}
-.       if '\\$1'TBL_PN_PADDING' \{\
-.          nr #TBL_PN_PADDING \\$2
-.          shift 2
-.       \}
-.    \}
-.END
-\#
-\# Lists-of collector
-\# Strings to allocate space for leaders and entry page numbers
-\#
-.ds $LISTS_PN \\*[ST102]\F[\\*[$LISTS_PN_FAM]]\f[\\*[$LISTS_PN_FT]]\
-\s[\\n[#LISTS_PS]u]^\\*[ST102X]\\*[ST103]\s[\\\\*[$LISTS_PN_SIZE_CHANGE]]\
-\|\|\|\h'\w'0'u*\\\\n[#LISTS_PN_PADDING]u'\\*[ST103X]
-\#
-.ds $LISTS_PN_TYPEWRITE \\*[ST102]^\\*[ST102X]\\*[ST103]\|\
-\h'\w'0'u*\\\\n[#LISTS_PN_PADDING]u'\\*[ST103X]
-\#
-.MAC LISTS_COLLECTOR END
-.    if '\\$0'TO_EQUATIONS' \{\
-.       ds list-type eqn
-.       da LIST_OF_EQN
-\!.       nr #LISTS_PN_PADDING \\\\n[#EQN_PN_PADDING]
-.       nr label-width \w'\\$1'
-.    \}
-.    if '\\$0'TO_FIGURES' \{\
-.       ds list-type fig
-.       da LIST_OF_FIG
-\!.       nr #LISTS_PN_PADDING \\\\n[#FIG_PN_PADDING]
-.       nr label-width \w'\\$1'
-.    \}
-.    if '\\$0'TO_TABLES' \{\
-.       ds list-type tbl
-.       da LIST_OF_TBL
-\!.       nr #LISTS_PN_PADDING \\\\n[#TBL_PN_PADDING]
-.       nr label-width \w'\\$1'
-.    \}
-.    br
-.    nr #LISTS_ENTRY_PN \\n%+\\n[#PAGE_NUM_ADJ]
-.    ie \\n[#PRINT_STYLE]=1 \{\
-\!.     fam \\*[$TYPEWRITER_FAM]
-\!.     ft  R
-\!.     ps \\*[$TYPEWRITER_PS]
-.       ds _TYPEWRITE _TYPEWRITE
-.    \}
-.    el \{\
-\!.     FAMILY \\\\*[$LISTS_FAM]
-\!.     FONT \\\\*[$LISTS_FT]
-\!.     ps \\\\n[#LISTS_PS]u
-.    \}
-.    if \\n[#PRINT_STYLE]=2 .rm _TYPEWRITE
-\!.  PAD_MARKER ^
-\!.  vpt 0
-\!.  PAD \
-"\\*[ST100]\h'\\n[label-width]u'\\*[ST100X]\0\\*[ST101]\h'\w'\\$2'u'\\*[ST101X]\\\\*[$LISTS_PN\\*[_TYPEWRITE]]" \
-"\\*[PDFBOOKMARK.NAME]"
-\!.  PAD_MARKER #
-\!.  EOL
-.    ie !\\n[\\*[label-type]*autolabel] \
-\!.     ST 100 L
-.    el \
-\!.     ST 100 R
-\!.  ST 101 L
-\!.  ST 102 L
-\!.  ST 103 R
-.    if \\n[#PRINT_STYLE]=2 \{\
-\!.     FAMILY  \\\\*[$LISTS_FAM]
-\!.     FT      \\\\*[$LISTS_FT]
-\!.     ps \\\\n[#LISTS_PS]u
-.    \}
-\!.  TAB 100
-\!.  PDF_LINK \\*[list-type]:\\n[lists*target] "\\$1"
-\!.  TN
-\!.  PDF_LINK \\*[list-type]:\\n[lists*target] "\\$2"
-\!.  TN
-\!.  PRINT \\*[LEADER]
-\!.  TN
-.    if \\n[#PRINT_STYLE]=2 \{\
-\!.     FAMILY  \\\\*[$LISTS_PN_FAM]
-\!.     FT      \\\\*[$LISTS_PN_FT]
-\!.     ps \\\\*[$LISTS_PN_SIZE_CHANGE]u
-.    \}
-\!.  PRINT \\n[#LISTS_ENTRY_PN]
-\!.  TQ
-\!.  vpt
-.    da
-.END
-\#
-.ALIAS TO_EQUATIONS LISTS_COLLECTOR
-.ALIAS TO_FIGURES   LISTS_COLLECTOR
-.ALIAS TO_TABLES    LISTS_COLLECTOR
-\#
-\# ***tbl***
-\#
-\# Support for multipage tables with headers borrowed from ms and
-\# mommified by Robin Haberkorn <robin.haberkorn@googlemail.com>
-\# with extensions by Peter Schaffter.
-\#
-.nr tbl*have-header 0
-.ds T&
-\#
-.MAC TS END
-.    di NULL \" Set rule weight for boxed tables
-\D't 500'
-.    di
-.    br
-.    if !\\n[@TOP] \
-.       if \\n[.t]=1 .sp \\n[.t]u
-.    rr tbl*have-header
-.    rr float*tbl
-.    if '\\n[.z]'FLOAT*DIV' .nr float*tbl 1
-.    if !'\\n[.z]'FLOAT*DIV' \{\
-.       if \\n[.t]=1 \{\
-.          if !\\n[@TOP] \{\
-.             if \\n[#COL_NUM]=\\n[#NUM_COLS] \
-.                NEWPAGE
-.          \}
-.       \}
-.    \}
-.    rr tbl*boxed
-.    rm tbl*label
-.    rm tbl*caption
-.    nr loop-count 0 1
-.    nr loop-counter \\n[#NUM_ARGS]
-.    while \\n+[loop-count]<=\\n[loop-counter] \{\
-.       if '\\$1'H' \{\
-.          nr tbl*have-header 1
-.          shift
-.          if \\n[#NUM_ARGS]=0 .nr tbl*plain 1
-.       \}
-.       if '\\$1'BOXED' \{\
-.          nr tbl*boxed 1
-.          shift
-.       \}
-.       if '\\$1'CENTER' \{\
-.          nr tbl*center 1
-.          shift
-.       \}
-.       if '\\$1'NEEDS' \{\
-.          nr tbl*needs \\$2
-.          shift 2
-.       \}
-.       if '\\$1'NO_SHIM' \{\
-.          nr tbl*no-shim 1
-.          shift
-.       \}
-.       if '\\$1'ADJUST' \{\
-.          ds tbl*space-adj \\$2
-.          shift 2
-.       \}
-.       if '\\$1'CAPTION' \{\
-.          nr tbl*have-caption 1
-.          ds tbl*caption \\$2
-.          shift 2
-.       \}
-.       if '\\$1'SHORT_CAPTION' \{\
-.          ds tbl*caption-short \\$2
-.          shift 2
-.       \}
-.       if '\\$1'LABEL' \{\
-.          nr tbl*have-label 1
-.          ds tbl*label \\$2
-.          ds label-type tbl
-.          shift 2
-.       \}
-.    \}
-.    if \\n[tbl*boxed]=1 \{\
-.       if (\\n[tbl*have-label]=0)&(\\n[tbl*have-caption]=0)&\
-(\\n[tbl*autolabel]=0)&(\\n[tbl*have-source]=0) \
-.       nr tbl*plain-boxed 1
-.    \}
-.    if !\\n[tbl*needs] .nr tbl*needs 1
-.    if !\\n[tbl*have-header] .nr tbl*no-header 1
-.    ds tbl*label-sffx-tmp \\*[tbl*label-sffx]
-.    substring tbl*label-sffx-tmp -1
-.    if '\\*[tbl*label-sffx-tmp]'.' \
-.       if (\\n[tbl*caption-after-label]=0):(\\n[#MLA]=1) .chop tbl*label-sffx
-.    if \\n[tbl*caption-after-label] \{\
-.       if !'\\*[tbl*label-sffx]'' \
-.          if '\\*[tbl*caption]'' .chop tbl*label-sffx
-.    \}
-.    ie \\n[@TOP] \{\
-.       if !'\\n[.z]'FLOAT*DIV' \{\
-.          vpt 0
-.          rr @TOP
-.          ch RR_@TOP
-.          rs
-.          nop \&
-.          if \\n[#COLUMNS] \
-.             if !'\\*[tbl*space-adj]'' \
-.                sp \\*[tbl*space-adj]-1v
-.          nr tbl*boxed 2
-.          vpt
-.       \}
-.    \}
-.    el \
-.       if !'\\*[tbl*space-adj]'' .sp \\*[tbl*space-adj]u
-.    if !\\n[#MLA] \{\
-.      if (\\n[tbl*have-caption]=0):(\\n[tbl*caption-after-label]=1) \{\
-.         ie !'\\n[.z]'FLOAT*DIV' \{\
-.            sp .5v
-.            if \\n[tbl*boxed] .sp .25v
-.         \}
-.         el .sp 1n
-.      \}
-.    \}
-.    if '\\n[.z]'FLOAT*DIV' \{\
-.       if \\n[defer]>0 .sp .5v
-.    \}
-.    ds ev-current   \\n[.ev]
-.    nr ll-pre-tbl   \\n[.l]
-.    nr lead-pre-tbl \\n[.v]
-.    nr ind-pre-tbl  \\n[.i]
-.    ll \\n[.l]u-\\n[.i]u
-.    if (\\n[nl]=\\n[#PAGE_TOP]):(\\n[nl]=\\n[dc]) \
-.       nr tbl*caption-lead-diff-adj 1
-.    if \\n[#MLA] \
-.       if \\n[tbl*have-label]+\\n[tbl*have-caption]=0 \
-.          sp .5v
-.    if \\n[tbl*boxed]=2 \{\
-.       if \\n[#MLA]=0 \
-.          if (\\n[tbl*caption-after-label]=1):(\\n[tbl*have-caption]=0) \
-.             sp 1n
-.    \}
-.    if \\n[tbl*have-header] \{\
-.       ev table-header
-.       evc \\*[ev-current]
-.       di tbl*header-div
-.       if !\\n[float-span] \!.in 0
-.    \}
-.END
-\#
-.MAC TH END
-.    ie '\\n[.z]'tbl*header-div' \{\
-.       nr T. 0
-.       T#
-.       di
-.       ev
-.       PDF_TARGET tbl:\\n+[lists*target]
-.       if !'\\n[.z]'FLOAT*DIV' \{\
-.          ie !\\n[tbl*boxed] \{\
-.             nr th*needs (u;\\n[dn]+\\n[tbl*needs]v)
-.             if \\n[th*needs]>\\n[.t] \{\
-.                ne \\n[dn]u+\\n[tbl*needs]
-.                nr tbl@needs 1
-.             \}
-.          \}
-.          el \{\
-.             nr th*needs (u;\\n[dn]+2p+\\n[tbl*needs]v)
-.             if \\n[th*needs]>\\n[.t] \{\
-.                ne \\n[dn]u+2p+\\n[tbl*needs]
-.                if \\n[#COLUMNS] \
-.                   if !\\n[#COL_NUM]=\\n[#NUM_COLS] .nr tbl*no-top-hook 1
-.                nr tbl@needs 1
-.             \}
-.          \}
-.          if \\n[defer] .nr tbl*interrupted 1
-.       \}
-.       ie (\\n[dn]-\\n[.v])>\\n[.t] \{\
-.          if !\\n[@TOP] .@error ridiculously long table header
-.          if \\n[tbl@needs] \{\
-.             if \\n[tbl*boxed] \{\
-.                rs
-.                nop \&
-.                sp -1n
-.             \}
-.             rr tbl@needs
-.          \}
-.          if \\n[tbl*have-caption] .TBL*CAPTION
-.          tbl*print-header
-.       \}
-.       el \{\
-.          nr tbl*header-ht \\n[dn]
-.          if \\n[tbl@needs] \{\
-.             if \\n[tbl*boxed] \{\
-.                rs
-.                nop \&
-.                sp -1n
-.             \}
-.             rr tbl@needs
-.          \}
-.          if \\n[tbl*have-caption] .TBL*CAPTION
-.          vs
-.          tbl*print-header
-.       \}
-.    \}
-.    el \{\
-.       if \\n[tbl*have-caption] \{\
-.          TBL*CAPTION
-.          nr skip-th-warning 1
-.       \}
-.       if !\\n[skip-th-warning] .@error .TH without .TS H
-.       rr skip-th-warning
-.    \}
-.\" When centering a boxed table inside a float, .T# won't place
-.\" vertical rules in the correct horizontal position unless .ll is
-.\" given a nominal value (can be anything) and an indent is set
-.\" manually.
-.    if '\\n[.z]'FLOAT*DIV' \{\
-.       if \\n[tbl*center] \{\
-.          nr float*ll \\n[.l]
-.          ll 0
-.          in \\n[float*ll]u-\\n[TW]u/2u
-.       \}
-.    \}
-.END
-\#
-.MAC TE END
-.    ev tbl*end \" Needed because of .ad changes
-.    evc \\*[ev-current] 
-.    nh
-.    nf
-.    rr tbl*no-header
-.    if !'\\n[.z]'FLOAT*DIV' \{\
-.       ie \\n[.t]<(\\n[.v]+(\\n[.v]/2u)) \{\
-.          rm tbl*header-div
-.          nr tbl*no-top-hook 1
-.          nr pgnum \\n%+\\n[#PAGE_NUM_ADJ]
-.          tm1 "[mom]: '\\n[.F]', macro \\$0, line \\n[.c]:
-.          tm1 "        Insufficient room for label, caption, and/or source after
-.          tm1 "        table on page \\n[pgnum].  Omitting, but continuing to process.
-.          NEWPAGE
-.          nr tbl*skip-source 1
-.          nr tbl*skip-label 1
-.          ch FN_OVERFLOW_TRAP -\\n[#FN_OVERFLOW_TRAP_POS]u
-.       \}
-.       el \{\
-.          ch FOOTER 0+\\n[pre-tbl-vfp]u
-.          ch FN_OVERFLOW_TRAP -\\n[#FN_OVERFLOW_TRAP_POS]u
-.       \}
-.    \}
-.    if !'\\$1'' \{\
-.       if '\\$1'SOURCE' \{\
-.          nr tbl*have-source 1
-.          shift
-.       \}
-.    \}
-.    if !\\n[#MLA] \{\
-.       if (\\n[tbl*have-label]=1):(\\n[tbl*autolabel]=1):(\\n[tbl*caption-after-label]=1) \{\
-.          ev label
-.          evc tbl*end
-.          ie \\n[#PRINT_STYLE]=1 .TYPEWRITER
-.          el \{\
-.             tbl*label-style
-.             vs \\n[.ps]u+\\n[tbl*label-autolead]u
-.          \}
-.          SIZESPECS
-.          if \\n[tbl*label-with-chapter] \
-.             ds chapno \\n[#CH_NUM].
-.          TBL*SET_LABEL_QUAD \\*[tbl*label-quad]
-.          di tbl*label-div
-\!.        in -\\n[ind-pre-tbl]u
-.          ie \\n[tbl*boxed] .sp \\n[#CAP_HEIGHT]u
-.          el .sp \\n[#DOC_LEAD]u/4u
-.          if (\\n[tbl*have-label]=1):(\\n[tbl*autolabel]=1) \{\
-.             if !'\\*[tbl*label-space]'' .sp \\*[tbl*label-space]
-.             ie \\n[tbl*autolabel] \{\
-.                ie !\\n[tbl*caption-after-label] .nop \
-\\*[tbl*label-prfx]\\*[chapno]\\n+[tbl*label-num]\\*[tbl*label-sffx]
-.                el \{\
-.                   nop \\*[tbl*label-prfx]\\*[chapno]\\n+[tbl*label-num]\\*[tbl*label-sffx]\|
-.                   tbl*caption-style
-.                   vs \\n[.ps]u+\\n[tbl*caption-autolead]u
-.                   ds tbl*caption " \\*[tbl*caption]
-.                   nop \\*[tbl*caption]
-.                \}
-.             \}
-.             el \{\
-.                if !'\\*[tbl*label]'' \{\
-.                   ie !\\n[tbl*caption-after-label] .nop \\*[tbl*label]
-.                   el \{\
-.                      nop \\*[tbl*label]\ \|\c
-.                      tbl*caption-style
-.                      vs \\n[.ps]u+\\n[tbl*caption-autolead]u
-.                      ds tbl*caption " \\*[tbl*caption]
-.                      nop \\*[tbl*caption]
-.                   \}
-.                \}
-.             \}
-.             if \\n[tbl*autolabel] \
-.                ds tbl*label \\*[chapno]\\n[tbl*label-num]
-.             br
-.          \}
-.          di
-.          ev
-.          nr pgnum \\n%+\\n[#PAGE_NUM_ADJ]
-.          ie !'\\n[.z]'FLOAT*DIV' \{\
-.             ie \\n[dn]>\\n[.t] \{\
-.                tm1 "[mom]: '\\n[.F]', macro \\$0, line \\n[.c]:
-.                tm1 "        Insufficient room for label, caption, and/or source after
-.                tm1 "        table on page \\n[pgnum].  Omitting, but continuing to process.
-.                if d tbl*header-div .rm tbl*header-div
-.                rr tbl*caption-top-lead-diff
-.                rr tbl*have-header
-.                nr tbl*skip-source 1
-.                nr tbl*skip-label 1
-.                NEWPAGE
-.             \}
-.             el .print-label
-.          \}
-.          el .print-label
-.       \}
-.    \}
-.    if !'\\*[tbl*caption-short]'' .ds short -short
-.    ie !'\\*[tbl*label]'' \
-.       TO_TABLES "\\*[tbl*label]" "\\*[tbl*caption\\*[short]]"
-.    el .TO_TABLES "\\*[tbl*caption]\\*[short]]"
-.    if !\\n[tbl*skip-source] \{\
-.       if \\n[tbl*have-source] \{\
-.          ds tbl*source \\$1
-.          SIZESPECS
-.          ev source
-.          nh
-.          ie \\n[#PRINT_STYLE]=1 \{\
-.             TYPEWRITER
-.             sp
-.          \}
-.          el \{\
-.             tbl*source-style
-.             vs \\n[.ps]u+\\n[tbl*source-autolead]u
-.          \}
-.          di tbl*source-div
-.          TBL*SET_SOURCE_QUAD \\*[tbl*source-quad]
-.          if \\n[#MLA] \{\
-.             if '\\*[tbl*source-quad]'L' \{\
-.                in \\n[ind-pre-tbl]u+\\n[tmp-ind]u
-.                ti -\\n[tmp-ind]u
-.             \}
-.          \}
-.          if (\\n[tbl*have-label]=0)&(\\n[#MLA]=0) \
-.             if !\\n[tbl*autolabel] .sp \\n[#CAP_HEIGHT]u
-.          if \\n[#MLA] \
-.             sp \\n[#CAP_HEIGHT]u
-.          if !'\\*[tbl*source-space]'' .sp \\*[tbl*source-space]
-.          nop \\*[tbl*source]
-.          br
-.          if \\n[#MLA] .in
-.          di
-.          nf
-.          tbl*source-div
-.          ev
-.       \}
-.    \}
-.    if '\\n[.z]'FLOAT*DIV' .nr bx-tbl-depth \\n[.d]-1v
-.    if '\\n[.z]'tbl*header-div' \{\
-.       @error .TS with 'H' flag but no corresponding .TH
-.       ab Aborting.
-.    \}
-.    ev
-.    if !\\n[tbl*plain] \{\
-.       ie \\n[tbl*plain-boxed] .sp 1
-.       el .sp .5v
-.    \}
-.    ll \\n[ll-pre-tbl]u
-.    if !'\\*[tbl*space-adj]'' .sp -\\*[tbl*space-adj]u
-.    if !\\n[tbl*no-shim] .SHIM
-.    TBL*CLEANUP
-.END
-\#
-\# Utility macros for tbl
-\#
-.MAC TBL*CAPTION END
-.    if \\n[tbl*have-caption] \{\
-.       vs \\n[.ps]u+\\n[tbl*caption-autolead]u
-.       nr tbl*caption-lead-diff \\n[lead-pre-tbl]-\\n[.v]
-.       nr tbl*caption-top-lead-diff \\n[tbl*caption-lead-diff]
-.       ie !\\n[#MLA] \{\
-.          if !\\n[tbl*caption-after-label] \{\
-.             ie !'\\n[.z]'FLOAT*DIV' \{\
-.                ie (\\n[nl]=\\n[#PAGE_TOP]):(\\n[nl]=\\n[dc]) \{\
-.                   ie \\n[#COLUMNS] .sp |\\n[dc]u
-.                   el .sp |\\n[#T_MARGIN]u-\\n[#DOC_LEAD]u
-.                   sp \\n[tbl*caption-lead-diff]u
-.                \}
-.                el .sp .5v
-.             \}
-.             el .sp .5v
-.          \}
-.          ev caption
-.          evc \\*[ev-current]
-.          nh
-.       \}
-.       el \{\
-.          if !\\n[tbl*autolabel] \{\
-.             ie !\\n[tbl*have-label] \
-.                mla@error caption label \\n[.F] \\$0 \\n[.c]
-.             el .ev label
-.          \}
-.       \}
-.       ie \\n[#PRINT_STYLE]=1 .nr tmp-ind 2m
-.       el .nr tmp-ind 1.25m
-.       ie \\n[#PRINT_STYLE]=1 .TYPEWRITER
-.       el \{\
-.          if !\\n[#MLA] \{\
-.             tbl*caption-style
-.             nr lead-current \\n[.v]
-.          \}
-.       \}
-.       ie !\\n[#MLA] \{\
-.          ie !\\n[tbl*caption-after-label] \{\
-.             di tbl*caption-div
-\!.           in -\\n[ind-pre-tbl]u
-.             TBL*SET_CAPTION_QUAD \\*[tbl*caption-quad]
-.             nop \\*[tbl*caption]
-.             br
-.             di
-.             if !'\\n[.z]'FLOAT*DIV' \{\
-.                nr caption-needs 2
-.                if (\\n[dn]+(\\n[#DOC_LEAD]*(\\n[tbl*needs]*2)))>\\n[.t] \{\
-.                   nr pgnum \\n%+\\n[#PAGE_NUM_ADJ] 1
-.                   ie \\n[#COL_NUM]=\\n[#NUM_COLS] \{\
-.                      tm1 "[mom]: Table with caption at line \\n[.c] does not fit on page \\n[pgnum].
-.                      tm1 "       Shifting table to page \\n+[pgnum].
-.                      rr tbl*no-header
-.                      NEWPAGE
-.                   \}
-.                   el \{\
-.                      sp \\n[.t]u
-.                      sp |\\n[#PAGE_TOP]u+\\n[tbl*caption-lead-diff]u
-.                   \}
-.                \}
-.             \}
-.             if \\n[.u] .nr fill 1
-.             nf
-.             if \\n[.ns] .RESTORE_SPACE
-.             tbl*caption-div
-.             if \\n[#PRINT_STYLE]=1 .sp .5v
-.             if !'\\*[tbl*caption-space]'' \
-.                sp \\*[tbl*caption-space]
-.             if \\n[tbl*caption-lead-diff-adj] \{\
-.                sp -\\n[tbl*caption-lead-diff]u
-.                rr tbl*label-lead-diff-adj
-.             \}
-.             if \\n[fill] .fi
-.             rr fill
-.          \}
-.          el \{\
-.             if (\\n[tbl*have-label]=0) \{\
-.                if !\\n[tbl*autolabel] \{\
-.                   tm1 "[mom]: CAPTION_AFTER_LABEL enabled, but no label given
-.                   tm1 "       for table at line \\n[.c].
-.                   tm1 "       Skipping caption but continuing to process.
-.                \}
-.             \}
-.          \}
-.       \}
-.       el \{\
-.          if (\\n[tbl*have-label]=1):(\\n[tbl*autolabel]=1) \{\
-.             ie !\\n[tbl*have-caption] \
-.                mla@error label caption \\n[.F] \\$0 \\n[.c]
-.             el \{\
-.                ie !'\\n[.z]'FLOAT*DIV' \{\
-.                   ie (\\n[nl]=\\n[#PAGE_TOP]):(\\n[nl]=\\n[dc]) \{\
-.                      ie !\\n[#COLUMNS] .sp |\\n[#PAGE_TOP]u+\\n[tbl*caption-lead-diff]u
-.                      el .sp |\\n[dc]u+\\n[tbl*caption-lead-diff]u
-.                   \}
-.                   el .sp .5v
-.                \}
-.                el .sp .5v
-.             \}
-.             ev label
-.             evc \\*[ev-current]
-.             nh
-.             ie \\n[#PRINT_STYLE]=1 .TYPEWRITER
-.             el \{\
-.                tbl*label-style
-.                vs \\n[.ps]u+\\n[tbl*label-autolead]u
-.                nr tbl*label-lead-diff \\n[lead-pre-tbl]-\\n[.v]
-.             \}
-.             if \\n[tbl*label-with-chapter] \
-.                ds chapno \\n[#CH_NUM].
-.             TBL*SET_LABEL_QUAD \\*[tbl*label-quad]
-.             di tbl*mla-label-caption
-.             ie '\\*[tbl*label-quad]'L' \{\
-\!.              in -\\n[ind-pre-tbl]u
-\!.              in \\n[tmp-ind]u
-\!.              ti -\\n[tmp-ind]u
-.             \}
-.             el \{\
-.                if \\n[tbl*label-quad-on-ll] \{\
-.                   if '\\n[tbl*label-quad]'L' \
-\!.                 in
-.                \}
-.             \}
-.             ie \\n[tbl*autolabel] \
-.                nop \
-\\*[tbl*label-prfx]\\*[chapno]\\n+[tbl*label-num]\\*[tbl*label-sffx]
-.             el .if !'\\*[tbl*label]'' .nop \\*[tbl*label]
-.             if \\n[tbl*autolabel] \
-.                ds tbl*label \\*[chapno]\\n[tbl*label-num]
-.             br
-.             di
-.          \}
-.          da tbl*mla-label-caption
-.          ie \\n[#PRINT_STYLE]=1 .TYPEWRITER
-.          el .tbl*caption-style
-.          if '\\*[tbl*caption-quad]'L' \{\
-\!.           ti -\\n[tmp-ind]u
-\!.           fi
-.          \}
-.          nop \\*[tbl*caption]
-.          br
-\!.        in
-.          da
-.       \}
-.       if !'\\n[.z]'FLOAT*DIV' \{\
-.          ie \\n[#MLA] .nr caption-needs 3
-.          el .nr caption-needs 2
-.          if (\\n[dn]+(\\n[#DOC_LEAD]*(\\n[tbl*needs]+\\n[caption-needs])))>\\n[.t] \{\
-.             nr pgnum \\n%+\\n[#PAGE_NUM_ADJ] 1
-.             ie \\n[#COL_NUM]=\\n[#NUM_COLS] \{\
-.                tm1 "[mom]: Table with caption at line \\n[.c] does not fit on page \\n[pgnum].
-.                tm1 "       Shifting table to page \\n+[pgnum].
-.                rr tbl*no-header
-.                if \\n[defer] .nr skip-th-warning 1
-.                NEWPAGE
-.             \}
-.             el \{\
-.                nr tbl*no-top-hook 1
-.                sp \\n[.t]u
-.                if (\\n[tbl*caption-after-label]=1):(\\n[tbl*plain]) \
-.                   sp 1n-2p
-.             \}
-.          \}
-.       \}
-.       nf
-.       if (\\n[nl]=\\n[#PAGE_TOP]):(\\n[nl]=\\n[dc]) \
-.          nr tbl*label-lead-diff-adj 1
-.       ie (\\n[.t]>1)&(\\n[@TOP]=0) \{\
-.          sp \\n[tbl*label-lead-diff]u
-.       \}
-.       el \{\
-.          if \\n[.t]=1 .sp \\n[.t]u
-.          ie \\n[#COL_NUM]>1 \
-.             ie (\\n[nl]=\\n[#PAGE_TOP]):(\\n[nl]=\\n[dc]) \
-.                sp |\\n[dc]u+\\n[tbl*label-lead-diff]u
-.             el .sp .5v
-.       \}
-.       tbl*mla-label-caption
-.       ie \\n[#PRINT_STYLE]=1 .sp .5v
-.       el .sp .5n
-.       if \\n[tbl*label-lead-diff-adj] \{\
-.          sp -\\n[tbl*label-lead-diff]u
-.          rr tbl*label-lead-diff-adj
-.       \}
-.       br
-.       if !'\\*[tbl*caption-space]'' .sp \\*[tbl*caption-space]
-.    \}
-.    if !'\\n[.ev]'0' .ev
-.END
-\#
-.MAC TBL*CLEANUP END
-.    if !'\\n[.z]'FLOAT*DIV' \{\
-.       rr tbl*center
-.       rm tbl*header-div
-.       rr tbl*caption-top-lead-diff
-.    \}
-.    rr tbl*have-header
-.    if !'\\n[.z]'FLOAT*DIV' \{\
-.       rr tbl*have-caption
-.       rr tbl*have-label
-.    \}
-.    rr tbl*label-warning
-.    rr tbl*no-shim
-.    rr tbl*skip-source
-.    if !'\\n[.z]'FLOAT*DIV' \{\
-.       rm short
-.       rm tbl*caption
-.       rm tbl*caption-short
-.       rm tbl*label
-.    \}
-.    rm tbl*space-adj
-.    rnn tbl*have-label tbl@label
-.    rnn tbl*have-source tbl@source
-.    rr tbl*have-label
-.    rr tbl*plain
-.    if '\\*[tbl*label-sffx-tmp]'.' .ds tbl*label-sffx .
-.END
-\#
-.MAC print-label END
-.    if \\n[.u] .nr fill 1
-.    nf
-.    if !\\n[tbl*skip-label] \{\
-.       tbl*label-div
-.    \}
-.    if \\n[fill] .fi
-.    rr fill
-.END
-\#
-.MAC tbl@top-hook END
-.    if \\n[tbl*have-header] \{\
-.       nf
-.       rr @TOP
-.       ch RR_@TOP
-.       ev top-hook
-.       evc 0
-.       rs
-.       nop \&
-.       ie !\\n[tbl*boxed] .sp -1
-.       el .sp -1n
-.       tbl*print-header
-.       ev
-.    \}
-.END
-\#
-.MAC tbl*print-header END
-.    if \\n[.u]=1 \{\
-.       nf
-.       nr fill 1
-.    \}
-.    if \\n[#COL_NUM]>1 \
-.       sp 2p
-.    ie d tbl*header-div:\\n[loop-count] \
-.       tbl*header-div:\\n[loop-count]
-.    el .tbl*header-div
-.    if '\\n[.z]'FLOAT*DIV' \
-.       if \\n[tbl*center] .ce 1000
-.    mk #T
-.    if !'\\n[.z]'FLOAT*DIV' \{\
-.       nr pre-tbl-vfp 0+\\n[#VARIABLE_FOOTER_POS]
-.       ch FOOTER \\n[#VARIABLE_FOOTER_POS]u+\\n[#DOC_LEAD]u
-.       ch FN_OVERFLOW_TRAP -\\n[#FN_OVERFLOW_TRAP_POS]u+\\n[#DOC_LEAD]u
-.    \}
-.END
-\#
-.MAC tbl@bottom-hook END
-.       if \\n[.ns] .rs
-.       rr #DIVERTED
-.       rr @TOP
-.       ch RR_@TOP
-.END
-\#
-.MAC tbl*float-warning END
-.    tm1 "[mom]: Table in FLOAT, output page \\n[#PAGENUMBER], exceeds page vertical limits.
-.    tm1 "       Multipage boxed tables cannot be contained within floats.
-.    ab Aborting '\\n[.F]'.
-.END
-\#
-.MAC ds@need END \" Move vertically until there is enough space for \$1
-.    if '\\n(.z'' \{\
-.       while \\n[.t]<=(\\$1)&(\\n[nl]>\\n[#PAGE_TOP]) \{\
-.          rs
-'          sp \\n[.t]u
-.       \}
-.    \}
-.END
-\#
-\# ***eqn***
-\#
-\# EQ/EN macros borrowed from ms, mommified by Robin Haberkorn
-\# <robin.haberkorn@googlemail.com>, expanded by Peter Schaffter.
-\#
-\# EQ [ -L | -C | -I <indent> ] [label]
-\# EN [ CONT | CONTINUED | ... ]
-\#
-\# Equations are centered by default, but can be left-justified
-\# (EQ -L), explicitly centered, or indented (EQ -I).
-\#
-\# Each eqn block for multi-line equations aligned with 'mark' and
-\# 'lineup' should be terminated by passing 'CONT' or 'CONTINUED'
-\# or '...' to EN.
-\#
-\# Note that geqn mark and lineup work correctly in centered equations.
-\#
-.MAC EQ END
-.    if \\n[eqn*copy-in]=1 \{\
-.       if !\\n[eqn-linenum] .nr eqn-linenum \\n[.c]
-.       if !\\n[pgnum] .nr pgnum \\n%+\\n[#PAGE_NUM_ADJ]
-.       br
-.       if \\n[.u] .nr fill 1
-.       rr float*eqn
-.       if '\\n[.z]'FLOAT*DIV' .nr float*eqn 1
-.       nr eqn*restore-adj \\n[.j]
-.       if !\\n[continued] \{\
-.          PDF_TARGET eqn:\\n+[lists*target]
-.          rr eqn*type
-.          nr loop-counter \\n[#NUM_ARGS]
-.          nr loop-count 0 1
-.          while \\n+[loop-count]<=\\n[loop-counter] \{\
-.             if '\\$1'-L' \{\
-.                nr eqn*left 1
-.                nr eqn*type 1
-.                shift
-.             \}
-.             if '\\$1'-I' \{\
-.                nr eqn*ind  1
-.                nr eqn*type 2
-.                shift
-.                ds DI \\$1
-.                ds DI@cont \\*[DI]
-.                shift
-.             \}
-.             if '\\$1'-C' \{\
-.                nr eqn*center 1
-.                nr eqn*type   3
-.                shift
-.             \}
-.             if '\\$1'ADJUST' \{\
-.                ds eqn*space-adj \\$2
-.                shift 2
-.             \}
-.             if '\\$1'NO_SHIM' \{\
-.                nr eqn*no-shim 1
-.                shift 1
-.             \}
-.             if '\\$1'LABEL' \{\
-.                ds eqn*label \\$2
-.                ds label-type eqn
-.                shift 2
-.             \}
-.             if '\\$1'SHIFT_LABEL' \{\
-.                ds eqn*shift-label \\$2
-.                shift 2
-.             \}
-.             if '\\$1'CAPTION' \{\
-.                ds eqn*caption \\$2
-.                shift 2
-.             \}
-.             if '\\$1'SHORT_CAPTION' \{\
-.                ds eqn*caption-short \\$2
-.                shift 2
-.             \}
-.          \}
-.       \}
-.       if '\\*[eqn*shift-label]'' .ds eqn*shift-label 0
-.       if !\\n[eqn*type] \{\
-.          nr eqn*center 1
-.          nr eqn*type   3
-.          shift
-.       \}
-.       if !'\\*[eqn*caption]'' \{\
-.          if '\\*[caption-quad]'L' \{\
-.             if \\n[default-left] .ds caption-quad R
-.             rr default-left
-.          \}
-.       \}
-.       if \\n[continued] \{\
-.          rm continued
-.          rr continued
-.       \}
-.       if \\n[eqn@left*cont] .nr eqn*type 1
-.       if \\n[eqn@ind*cont]  \{\
-.           nr eqn*type 2
-.           ds DI \\*[DI@cont]
-.       \}
-.    \}
-.    if \\n[eqn@center*cont] .nr eqn*type 3
-.    ev EQN
-.    evc 0
-.    di eqn*div
-.    in 0
-.    nf
-.END
-\#
-.MAC EN END
-.    if !'\\n(.z'eqn*div' \{\
-.       @error mismatched EN
-.       return
-.    \}
-.    br
-.    di
-.    ev
-.    if !'\\*[eqn*label]''   .nr eqn*have-label   1
-.    if !'\\*[eqn*caption]'' .nr eqn*have-caption 1
-.    if !'\\$1'' \{\
-.       ie '\\$1'...' .ds continued CONT
-.       el .ds continued \\$1
-.       substring continued 0 3
-.       ie '\\*[continued]'CONT' \{\
-.          nr continued 1
-.          rm continued
-.          if \\n[eqn*ind]    .nr eqn@ind*cont    1
-.          if \\n[eqn*left]   .nr eqn@left*cont   1
-.          if \\n[eqn*center] .nr eqn@center*cont 1
-.       \}
-.       el \{\
-.          tm1 "[mom]: Invalid argument \\$1 to \\$0.
-.          tm1 "       Must be 'CONTINUED', 'CONT', or '...'
-.          ab Aborting '\\n[.F]' at line \\n[.c].
-.       \}
-.    \}
-.    if \\n[dl]:\\n[eqn*have-label] \{\
-.       ds eqn*tabs \\n[.tabs]
-.       if \\n[eqn*label-with-chapter] \
-.          ds chapno \\n[#CH_NUM].
-.       nf
-.       ie \\n[dl] \{\
-.          if !'\\n[.z]'FLOAT*DIV' \{\
-.             ie \\n[eqn*have-caption] .ne \\n[dn]u-\\n[.V]
-.             el .ne \\n[dn]u-1v-\\n[.V]
-.          \}
-.          chop eqn*div
-.          if '\\*[DD]'' \{\
-.             ds DD .5v
-.             if !\\n[@TOP] \{\
-.                sp \\*[DD]
-.                if !'\\*[eqn*space-adj]'' .sp \\*[eqn*space-adj]u
-.             \}
-.          \}
-.          if \\n[cutaround] .ll \\n[eqn*cutaround-width]u
-.          ie \\n[eqn*type]=1 \{\
-.             ta (u;\\n[.l]-\\n[.i])R
-.             ie \\n[continued] .nop \\*[eqn*div]
-.             el \{\
-.                ie \\n[eqn*autolabel] \
-.nop \
-\\*[eqn*div]\
-\\*[eqn*label-specs]\
-\t\v'+\\*[eqn*shift-label]'\
-\\*[eqn*label-prfx]\\*[chapno]\\n+[eqn*label-num]\\*[eqn*label-sffx]\
-\v'-\\*[eqn*shift-label]'\
-\\*[revert-specs]
-.                el \
-.nop \
-\\*[eqn*div]\
-\\*[eqn*label-specs]\
-\t\v'+\\*[eqn*shift-label]'\
-\\*[eqn*label]\
-\v'-\\*[eqn*shift-label]'\
-\\*[revert-specs]
-.             \}
-.             if \\n[eqn-cutaround] .ll
-.             if !\\n[continued] \{\
-.                if \\n[eqn*have-caption] \
-.                   ADD_CAPTION
-.             \}
-.          \}
-.          el \{\
-.             ie \\n[eqn*type]=2 \{\
-.                ie '\\*[eqn*label-quad]'L' \{\
-.                   ta \\*[DI]
-.                   ie \\n[continued] .nop \t\\*[eqn*div]
-.                   el \{\
-.                      ie \\n[eqn*autolabel] \
-.nop \
-\\*[eqn*label-specs]\
-\v'+\\*[eqn*shift-label]'\
-\\*[eqn*label-prfx]\\*[chapno]\\n+[eqn*label-num]\\*[eqn*label-sffx]\
-\v'-\\*[eqn*shift-label]'\
-\t\\*[eqn*div]\
-\\*[revert-specs]
-.                      el \
-.nop \
-\\*[eqn*label-specs]\
-\v'+\\*[eqn*shift-label]'\
-\\*[eqn*label]\
-\v'-\\*[eqn*shift-label]'\
-\\*[revert-specs]\
-\t\\*[eqn*div]
-.                   \}
-.                \}
-.                el \{\
-.                   ta \\*[DI] (u;\\n[.l]-\\n[.i])R
-.                   ie \\n[continued] .nop \t\\*[eqn*div]
-.                   el \{\
-.                      ie \\n[eqn*autolabel] \
-.nop \
-\t\\*[eqn*div]\
-\\*[eqn*label-specs]\
-\t\v'+\\*[eqn*shift-label]'\
-\\*[eqn*label-prfx]\\*[chapno]\\n+[eqn*label-num]\\*[eqn*label-sffx]\
-\v'-\\*[eqn*shift-label]'\
-\\*[revert-specs]
-.                      el \
-.nop \
-\t\\*[eqn*div]\
-\\*[eqn*label-specs]\
-\t\v'+\\*[eqn*shift-label]'\
-\\*[eqn*label]\
-\v'-\\*[eqn*shift-label]'\
-\\*[revert-specs]
-.                   \}
-.                \}
-.                if !\\n[continued] \{\
-.                   if \\n[eqn*have-caption] \
-.                      ADD_CAPTION
-.                \}
-.             \}
-.             el \{\
-.                ie '\\*[eqn*label-quad]'L' \{\
-.                   ta (u;\\n[.l]-\\n[.i]/2)C
-.                   ie \\n[continued] .nop \t\\*[eqn*div]
-.                   el \{\
-.                      ie \\n[eqn*autolabel] \
-.nop \
-\\*[eqn*label-specs]\
-\v'+\\*[eqn*shift-label]'\
-\\*[eqn*label-prfx]\\*[chapno]\\n+[eqn*label-num]\\*[eqn*label-sffx]\
-\v'-\\*[eqn*shift-label]'\
-\t\\*[eqn*div]\
-\\*[revert-specs]
-.                      el \
-.nop \
-\\*[eqn*label-specs]\
-\v'+\\*[eqn*shift-label]'\
-\\*[eqn*label]\
-\v'-\\*[eqn*shift-label]'\
-\\*[revert-specs]\
-\t\\*[eqn*div]
-.                   \}
-.                \}
-.                el \{\
-.                   ta (u;\\n[.l]-\\n[.i]/2)C (u;\\n[.l]-\\n[.i])R
-.                   ie \\n[continued] .nop \t\\*[eqn*div]
-.                   el \{\
-.                      ie \\n[eqn*autolabel] \
-.nop \
-\t\\*[eqn*div]\
-\\*[eqn*label-specs]\
-\t\v'+\\*[eqn*shift-label]'\
-\\*[eqn*label-prfx]\\*[chapno]\\n+[eqn*label-num]\\*[eqn*label-sffx]\
-\v'-\\*[eqn*shift-label]'\
-\\*[revert-specs]
-.                      el \
-.nop \
-\t\\*[eqn*div]\
-\\*[eqn*label-specs]\
-\t\v'+\\*[eqn*shift-label]'\
-\\*[eqn*label]\
-\v'-\\*[eqn*shift-label]'\
-\\*[revert-specs]
-.                   \}
-.                \}
-.                if !\\n[continued] \{\
-.                   if \\n[eqn*have-caption] \
-.                      ADD_CAPTION
-.                \}
-.             \}
-.          \}
-.       \}
-.       el \{\
-.          ta (u;\\n[.l]-\\n[.i])R
-.nop \
-\\*[eqn*label-specs]\
-\t\v'+\\*[eqn*shift-label]'\
-\t\\*[eqn*label]\
-\v'-\\*[eqn*shift-label]'\
-\\*[revert-specs]
-.       \}
-.       ta \\*[eqn*tabs]
-.\" if continuing (ie is a multi-line equation), don't space and SHIM
-.       if !\\n[continued] \{\
-.          sp \\*[DD]
-.          if !'\\*[eqn*space-adj]'' .sp -\\*[eqn*space-adj]u
-.          if !'\\n[.z]'FLOAT*DIV' \{\
-.             if !\\n[eqn*no-shim] .SHIM
-.          \}
-.          if !'\\*[eqn*caption-short]'' .ds short -short
-.          if \\n[eqn*autolabel] \
-.             ds eqn*label \\*[chapno]\\n[eqn*label-num]
-.          ie !'\\*[eqn*label]'' \
-.             TO_EQUATIONS "\\*[eqn*label]" "\\*[eqn*caption\\*[short]]"
-.          el .TO_EQUATIONS "\\*[eqn*caption\\*[short]]"
-.          rm DD
-.          rm eqn*caption
-.          rm eqn*caption-short
-.          rm eqn*label
-.          rm short
-.          rr eqn*copy-in
-.       \}
-.       rm DI@cont
-.       rr eqn*center
-.       rr eqn@center*cont
-.       rr eqn*have-label
-.       rr eqn*ind
-.       rr eqn@ind*cont
-.       rr eqn*left
-.       rr eqn@left*cont
-.       if !\\n[eqn-cutaround] .rm eqn*space-adj
-.    \}
-.    nr eqn*copy-in 1
-.    if \\n[fill] .fi
-.    ad \\n[eqn*restore-adj]
-.    rr fill
-.END
-\#
-.MAC ADD_CAPTION END
-.    ie \\n[.t]<\\n[.v] \{\
-.       if !'\\n[.z]'FLOAT*DIV' \{\
-.          if \\n[#COL_NUM]=\\n[#NUM_COLS] \{\
-.             tm1 "[mom]: '\\n[.F]', macro EQ, line \\n[eqn-linenum]: Insufficient room for
-.             tm1 "        equation caption on page \\n[pgnum].
-.             tm1 "        Skipping caption, but continuing to process.
-.             if !\\n[@TOP] \{\
-.                if \\n[#COL_NUM]=\\n[#NUM_COLS] \
-.                   NEWPAGE
-.             \}
-.             rr eqn-linenum
-.             rr pgnum
-.          \}
-.       \}
-.    \}
-.    el \{\
-.       if \\n[#PRINT_STYLE]=2 \{\
-.          ps \\*[eqn*caption-size-change]
-.          nr lead-curr \\n[.v]
-.          sp .5v
-.          vs \\n[.ps]u+\\n[eqn*caption-autolead]u
-.          nr eqn*caption-lead-diff \\n[lead-curr]-\\n[.v]
-.          sp \\n[eqn*caption-lead-diff]u
-.          ps
-.          if !'\\*[eqn*caption-space]'' \
-.             sp \\*[eqn*caption-space]
-.       \}
-.       if '\\*[eqn*caption-quad]'L' \{\
-.          fi
-.          ad l
-.          nop \
-\\*[eqn*caption-specs]\
-\\*[eqn*caption]\
-\\*[revert-specs]
-.          nf
-.       \}
-.       if '\\*[eqn*caption-quad]'C' \{\
-.          fi
-.          ad c
-.          nop \
-\\*[eqn*caption-specs]\
-\\*[eqn*caption]\
-\\*[revert-specs]
-.          nf
-.       \}
-.       if '\\*[eqn*caption-quad]'R' \{\
-.          fi
-.          ad r
-.          nop \
-\\*[eqn*caption-specs]\
-\\*[eqn*caption]\
-\\*[revert-specs]
-.          nf
-.       \}
-.       if !'\\*[eqn*caption-space]'' \
-.          sp -\\*[eqn*caption-space]
-.       vs
-.    \}
-.END
-\#
-\# ***pic***
-\#
-.MAC have-adjust END
-.    nr #ARGS  0 1
-.    nr #COUNT \\n[#NUM_ARGS]
-.    while \\n+[#ARGS]<=\\n[#COUNT] \{\
-.       if '\\$1'ADJUST' \{\
-.          ds pic*space-adj \\$2
-.          break
-.       \}
-.       shift
-.    \}
-.END
-\#
-\# User settable text style for pic
-\#
-\# PIC_TEXT_STYLE
-\# --------------
-\# *Argument:
-\#   <offset from page left>
-\# *Function:
-\#   Stores user supplied page offset in register #L_MARGIN.
-\#   Sets .po to user supplied offset.
-\# *Notes:
-\#   Requires unit of measure.
-\#
-.MAC PIC_TEXT_STYLE END
-.    nr #ARGS  0 1
-.    nr #COUNT \\n[#NUM_ARGS]
-.    while \\n+[#ARGS]<=\\n[#COUNT] \{\
-.       if '\\$1'FAMILY' \{\
-.          shift
-.          ds pic*text-family \\$1
-.          shift
-.       \}
-.       if '\\$1'FONT' \{\
-.          shift
-.          ds pic*text-font \\$1
-.          shift
-.       \}
-.       if '\\$1'SIZE' \{\
-.          shift
-.          ds pic*text-size-change \\$1
-.          shift
-.       \}
-.       if '\\$1'AUTOLEAD' \{\
-.          shift
-.          nr pic*text-autolead \\$1
-.          shift
-.       \}
-.    \}
-.END
-\#
-\# Main macros
-\#
-.MAC PS END
-.    br
-.    have-adjust \\$@ \" Adjusting is handled by FLOAT
-.    ds ev-current \\n[.ev]
-.    rr float*pic
-.    if !'\\n[.z]'FLOAT*DIV' .FLOAT ADJUST \\*[pic*space-adj]
-.    PDF_TARGET fig:\\n+[lists*target]
-.    nr float*pic 1
-.    nr ind-pre-pic  \\n[.i]
-.    nr ll-pre-pic   \\n[.l]
-.    nr lead-pre-pic \\n[.v]
-.    if \\n[#MLA] .sp .5v
-.    in 0
-.    ev PIC
-.    evc \\n[ev-current]
-.    nf
-.    ie \\n[#NUM_ARGS]<2 .@error bad arguments to PS (not preprocessed with pic?)
-.    el \{\
-.       if \B'\\$1' \{\
-.          ie !\B'\\$2' .ds pic*scale-width \\$1
-.          el .ds pic*scale-width \\$2
-.       \}
-.    \}
-. \" This is a bit confusing. pic is decorated with 2 args (width
-. \" and height), which are read during pre-processing but have to be
-. \" ignored when parsing args during main processing.  We shift pic's
-. \" args out of the way, then pop them off the arg stack because
-. \" they're not needed during macro processing.
-.    while \B'\\$1' .shift
-.    nr loop-counter \\n[#NUM_ARGS]
-.    nr loop-count 0 1
-.    while \\n+[loop-count]<=\\n[loop-counter] \{\
-.       if '\\$1'NO_SHIM' \{\
-.          nr float*no-shim 1
-.          shift 1
-.       \}
-.       if '\\$1'LEFT' \{\
-.          nr pic*left 1
-.          shift 1
-.       \}
-.       if '\\$1'CAPTION' \{\
-.          nr pic*have-caption 1
-.          ds pic*caption \\$2
-.          shift 2
-.       \}
-.       if '\\$1'SHORT_CAPTION' \{\
-.          ds pic*caption-short \\$2
-.          shift 2
-.       \}
-.       if '\\$1'LABEL' \{\
-.          nr pic*have-label 1
-.          ds pic*label \\$2
-.          ds label-type pic
-.          shift 2
-.       \}
-.    \}
-.    ds pic*label-sffx-tmp \\*[pic*label-sffx]
-.    substring pic*label-sffx-tmp -1
-.    if '\\*[pic*label-sffx-tmp]'.' \
-.       if \\n[pic*caption-after-label]=0 .chop pic*label-sffx
-.    if \\n[#MLA] \{\
-.       if (\\n[pic*have-label]=1):(\\n[pic*autolabel]=1) \{\
-.          if !\\n[pic*have-caption] \
-.             mla@error label caption \\n[.F] \\$0 \\n[.c]
-.       \}
-.       if \\n[pic*have-caption] \{\
-.          if !\\n[pic*have-label] \{\
-.             if !\\n[pic*autolabel] \
-.                mla@error caption label \\n[.F] \\$0 \\n[.c]
-.          \}
-.       \}
-.    \}
-.    if !'\\*[pic*text-family]'' \
-.       fam \\*[pic*text-family]
-.    if !'\\*[pic*text-font]'' \
-.       ft \\*[pic*text-font]
-.    if !'\\*[pic*text-size-change]'' \
-.       ps \\n[#DOC_PT_SIZE]u\\*[pic*text-size-change]
-.    nr lead-current \\n[.v]
-.    ie \\n[pic*text-autolead] \
-.       vs \\n[.ps]u+(\\n[pic*text-autolead]u*1000u)
-.    el .vs \\n[.ps]u
-.    nr pic@text-lead \\n[.v]
-.    nr pic@text-size \\n[.ps]
-.    if !'\\*[pic*text-color]'' .gcolor \\*[pic*text-color]
-.    if \\n[@TOP] \{\
-.       RESTORE_SPACE
-.       nr pic*top-lead-adj 1
-.    \}
-.    nr pic*top-lead-diff \\n[lead-pre-pic]u-\\n[.v]u
-.    if (\\n[pic*have-caption]=0):(\\n[pic*caption-after-label]=1) \{\
-.       ie \\n[pic*top-lead-adj] \{\
-.          sp \\n[pic*top-lead-diff]u
-.          rr pic*top-lead-adj
-.       \}
-.       el .if (\\n[pic*caption-after-label]=0):(\\n[#MLA]=0) .sp \\n[lead-pre-pic]u/2u
-.    \}
-.    di pic*div
-.END
-\#
-.MAC PE END
-.    di
-.    nr pic*div-width \\n[dl]
-.    if \\n[@TOP] \{\
-.       RESTORE_SPACE
-.    \}
-.    sp \\n[lead-pre-pic]u/2u
-.    if (\\n[pic*have-caption]=1)&(\\n[pic*caption-after-label]=0) \{\
-.       sp .5v
-.       ev caption
-.       evc \\*[ev-current]
-.       nh
-.       ie \\n[#PRINT_STYLE]=1 .TYPEWRITER
-.       el \{\
-.          pic*caption-style
-.          nr lead-current \\n[.v]
-.          vs \\n[.ps]u+\\n[pic*caption-autolead]u
-.          nr pic*caption-lead-diff \\n[lead-current]-\\n[.v]
-.          in \\n[ind-pre-pic]u
-.       \}
-.       PIC*SET_CAPTION_QUAD \\*[pic*caption-quad]
-.       if \\n[@TOP] .RESTORE_SPACE
-\!.     in -\\n[ind-pre-pic]u
-.       sp \\n[pic*caption-lead-diff]u
-\!.     if \\\\n[.ns] .rs
-.       nop \\*[pic*caption]
-.       if \\n[#PRINT_STYLE]=1 .sp .5v
-.       if !'\\*[pic*caption-space]'' \
-.          sp \\*[pic*caption-space]
-.       br
-.       ev
-.    \}
-.    if !\\n[pic*left] .in \\n[ll-pre-pic]u-\\n[pic*div-width]u/2u
-.    pic*div
-.    sp
-.    if (\\n[pic*have-label]=1):(\\n[pic*autolabel]=1):(\\n[pic*caption-after-label]=1) \{\
-.       nr lead-pre-label \\n[.v]
-.       ev label
-.       evc \\*[ev-current]
-.       ie \\n[#PRINT_STYLE]=1 .TYPEWRITER
-.       el \{\
-.          pic*label-style
-.          nr lead-current \\n[.v]
-.          vs \\n[.ps]u+\\n[pic*label-autolead]u
-.          in \\n[ind-pre-pic]u
-.          sp \\n[lead-current]u-\\n[.v]u
-.       \}
-.       if \\n[pic*label-with-chapter] \
-.          ds chapno \\n[#CH_NUM].
-.       PIC*SET_LABEL_QUAD \\*[pic*label-quad]
-\!.     in -\\n[ind-pre-pic]u
-.       sp \\n[lead-pre-label]u-\\n[.v]u
-.       if !'\\*[pic*label-space]'' .sp \\*[pic*label-space]
-.       if \\n[#PRINT_STYLE]=1 .sp .5v
-.       ie \\n[pic*autolabel] \
-.         nop \
-\\*[pic*label-prfx]\\*[chapno]\\n+[fig*label-num]\\*[pic*label-sffx]\|
-.       el .if !'\\*[pic*label]'' .nop \\*[pic*label]
-.       if \\n[pic*autolabel] \
-.          ds pic*label \\*[chapno]\\n[fig*label-num]
-.       fam
-.       ft
-.       ps
-.       gcolor
-.       ie !\\n[pic*caption-after-label] .br
-.       el \{\
-.          if !'\\*[pic*caption]'' .nop \
-\\*[pic*caption-specs]\\*[pic*caption]\\*[revert-specs]
-.          br
-.       \}
-.       ev
-.       in 0
-.    \}
-.    ev
-.    sp .5v
-.    FLOAT off
-.    in \\n[ind-pre-pic]u
-.    if !'\\*[pic*caption-short]'' .ds short -short
-.    ie !'\\*[pic*label]'' \
-.       TO_FIGURES "\\*[pic*label]" "\\*[pic*caption\\*[short]]"
-.    el .TO_FIGURES "\\*[pic*caption\\*[short]]"
-.    rm pic*caption
-.    rm pic*label
-.    rm pic*left
-.    rm short
-.    if !\\n[cutaround] .rm pic*space-adj
-.    if !\\n[defer] .rr pic*have-caption
-.    rr pic*have-label
-.    rr float*pic
-.    if '\\*[pic*label-sffx-tmp]'.' .ds pic*label-sffx .
-.END
-\#
-\# ***refer***
-\#
-\# Footnote references
-\# -------------------
-\# *Function:
-\#   Instruct REF to put references in footnotes.
-\#
-.MAC FOOTNOTE_REFS END
-.    ie !'\\$1'' .rr #FN_REF
-.    el \{\
-.       if r #EN_REF .rr #EN_REF
-.       nr #FN_REF 1
-.    \}
-.    REF_STYLE NOTE
-.END
-\#
-\# Endnote references
-\# ------------------
-\# *Function:
-\#   Instruct REF to collect references for endnotes output.
-\#
-.MAC ENDNOTE_REFS END
-.    ie !'\\$1'' .rr #EN_REF
-.    el \{\
-.       if r #FN_REF .rr #FN_REF
-.       nr #EN_REF 1
-.       if !r#EN_MARKER_STYLE .ENDNOTE_MARKER_STYLE SUPERSCRIPT
-.    \}
-.    REF_STYLE NOTE
-.END
-\#
-\# Prepare mom for a reference
-\# ---------------------------
-\# *Argument:
-\#   <none> | INDENT  L|LEFT|R|RIGHT|B|BOTH  <indent value>
-\# *Function:
-\#   Calls FOOTNOTE or ENDNOTE, depending on whether #REF_FN or
-\#   #REF_EN is set to 1.
-\# *Notes:
-\#   For convenience, REF is a toggle.
-\#
-\#   REF optionally takes the same arguments as FOOTNOTE, allowing
-\#   users to indent references that go in footnotes when footnote
-\#   indenting is required.  FOOTNOTE_REFS must be on for this.
-\#
-.MAC REF END
-.    ie \\n[#FN_REF]+\\n[#EN_REF]=0 \{\
-.       if !\\n[#REF_WARNING]=1 \{\
-.          tm1 "[mom]: Before REF at line \\n[.c], neither FOOTNOTE_REFS nor ENDNOTE_REFS
-.          tm1 "       has been selected.  If "sort" and "accumulate" are in your refer
-.          tm1 "       commands, references will be collected for later output with $LIST$.
-.          tm1 "       Otherwise, they will disappear.
-.          nr #REF_WARNING 1
-.       \}
-.    \}
-.    el \{\
-.       ie \\n[#REF]=1 \{\
-.          if \\n[#FN_REF]=1 .FOOTNOTE OFF
-.          if \\n[#EN_REF]=1 .ENDNOTE OFF
-.          rr #REF
-.       \}
-.       el \{\
-.          rr #REF_WARNING
-.          nr #REF 1
-.          if \\n[#FN_REF]=1 .FOOTNOTE \\$1 \\$2 \\$3
-.          if \\n[#EN_REF]=1 .ENDNOTE
-.       \}
-.    \}
-.END
-\#
-\# Embedded references in text (with brackets)
-\# -------------------------------------------
-\#
-.MAC REF_BRACKETS_NOTICE END
-.    tm1 "[mom]: \\$1 has been removed from mom.  See the mom documentation 'refer.html'
-.    tm1 "       for instructions on parenthetical insertions of references into text.
-.    ie '\\$1'REF_STYLE' .tm1 "       Continuing to process '\\n[.F]' from line \\n[.c].
-.    el .ab Aborting '\\n[.F]' at \\$1, line \\n[.c].
-.END
-\#
-.MAC REF_BRACKETS_START END
-.    REF_BRACKETS_NOTICE \\$0
-.END
-\#
-.MAC REF_BRACKETS_END END
-.    REF_BRACKETS_NOTICE \\$0
-.END
-\#
-\# These four pairs of aliases allow users to embed references in
-\# text and have them surrounded by (), [], {} or <>.
-\#
-.ALIAS REF( REF_BRACKETS_START
-.ALIAS REF) REF_BRACKETS_END
-\#
-.ALIAS REF[ REF_BRACKETS_START
-.ALIAS REF] REF_BRACKETS_END
-\#
-.ALIAS REF{ REF_BRACKETS_START
-.ALIAS REF} REF_BRACKETS_END
-\#
-.ALIAS REF< REF_BRACKETS_START
-.ALIAS REF> REF_BRACKETS_END
-\#
-.MAC REF_STYLE END
-.    REF_BRACKETS_NOTICE \\$0
-.END
-\#
-\# Refer indenting
-\# ---------------
-\# *Argument:
-\#   FOOTNOTE | ENDNOTE | BIBLIO <indent for 2nd and subsequent lines of discrete reference entries>
-\# *Function:
-\#   Sets registers #REF_FN_INDENT, #REF_EN_INDENT or #REF_BIB_INDENT.
-\# *Notes:
-\#   Indent value requires a unit of measure.  If refs are going
-\#   into footnotes or endnotes, first lines get indented; if going
-\#   into a bibliography, second lines get indented
-\#
-.MAC INDENT_REFS END
-.    if '\\$1'FOOTNOTE' .ds $REF_FN_INDENT  \\$2
-.    if '\\$1'ENDNOTE'  .ds $REF_EN_INDENT  \\$2
-.    if '\\$1'BIBLIO'   .ds $REF_BIB_INDENT \\$2
-.END
-\#
-\# Hyphenation of references
-\# -------------------------
-\# *Argument:
-\#   <none> | <anything>
-\# *Function:
-\#   Sets register #REF_HY
-\#
-.MAC HYPHENATE_REFS END
-.    ie '\\$1'' .nr #REF_HY 1
-.    el \{\
-.       if r #REF_HY .rr #REF_HY
-.    \}
-.END
-\#
-\# The remainder of the definitions in this section are modified
-\# versions of the definitions found in the refer module of s.tmac.
-\#
-.de @error
-.tm [mom]: '\\n[.F]', line \\n[.c]: \\$*
-..
-\#
-\# Underlining unavoidably turns off sentence spacing.
-\#
-.de ref*restore-ss
-\c
-.SS \\*[$SAVED_SS_VAR]
-.if '\\n[.z]'END_NOTES' \{\
-\c
-\E*[PREV]\c
-.\}
-..
-\# The following strings define the order of entries for different
-\# types of references.  Each letter in the string refers to a database
-\# field (A for author, T1/T2 for article and book titles, etc).
-\#
-.de ref*specs
-.if \\n[#PRINT_STYLE]=1 \{\
-.   char '     \[aq]
-.   char \[oq] \[aq]
-.\}
-.\" Internet site - type 0
-.ds ref*spec!0 i Q A m p T2 s o D c a u n
-.\" Journal article - type 1
-.ds ref*spec!1 i Q A m p T2 q O J V S N D P n
-.\" Book - type 2
-.ds ref*spec!2 i Q A m p T1 q b d l r E S e V O C I D P t n
-.\" Article within book - type 3
-.ds ref*spec!3 i Q A m p T2 B b d l r E S e V O C I D P t n
-.\" Tech report - type 4
-.ds ref*spec!4 i Q A m p T1 R G O C I D P n
-.\" Magazine or newspaper article - type 5
-.ds ref*spec!5 i Q A m p T2 O M V S N D P n
-..
-\#
-\# Refer's "1st" macro.  Since it is possible to define database
-\# fields using any single letter, we remove all possible string
-\# definitions of the form [X and [x.  Also, reset ref*spec!<n>
-\# strings to their defaults.
-\#
-.de ]-
-.ref*specs
-.rm [A [B [C [D [E [F [G [H [I [J [K [L [M \
-    [N [O [P [Q [R [S [T [U [V [W [X [Y [Z \
-    [a [b [c [d [e [f [g [h [i [j [k [l [m \
-    [n [o [p [q [r [s [t [u [v [w [x [y [z
-.if r [e .rr [e \" [e persists if %e field is last
-.rr ref*type
-.rm ref*string
-..
-\#
-\# Refer's "2nd" macro; builds up a reference with ref*build, and
-\# prints it with ref*print.
-\#
-.de ][
-.nr ref*type \\$1
-.if \\n[ref*type]=0 \{\
-.   ie d [C \{\
-.      if !d [I \{\
-.         nr pre-1900 1 \" If pre-1900, MLA allows excluding publisher
-.         nr ref*type 2
-.      \}
-.   \}
-.   el .nr ref*type 2
-.   if d [q .nr ref*type 2
-.\}
-.if \\n[ref*type]=3 \{\
-.   if !'\\*([R'' \{\
-.      nr ref*type 4
-.      ds ref*spec!4 i Q A m p T2 B R O C I D P n
-.   \}
-.   if !'\\*([G'' \{\
-.      nr ref*type 4
-.      ds ref*spec!4 i A m p T2 B G O C I D P O n
-.   \}
-.\}
-.if r [T \{\
-.   als [T1 [T
-.   als [T2 [T
-.\}
-.ie d ref*spec!\\n[ref*type] .ref*build \\*[ref*spec!\\n[ref*type]]
-.el \{\
-.   @error unknown reference type `\\n[ref*type]'
-.   ref*build \\*[ref*spec!0]
-.\}
-.if !\\n[.hy]=0 \{\
-.nr #RESTORE_HY \\n[.hy]
-.if !r#REF_HY .nh
-.\}
-.ref*print
-.if !\\n[#RESTORE_HY]=0 .hy \\n[#RESTORE_HY]
-.rr #RESTORE_HY
-.rm ref*string
-.rm [F [T1 [T2
-..
-\#
-\# Refer's "3rd" macros, which set up and terminate the output
-\# of collected references
-\#
-.de ]<
-.als ref*print ref*end-print
-.nr #REF 1
-.if \\n[#BIB_LIST]=1 \{\
-.   nr #IN_BIB_LIST 1
-.   LIST DIGIT \\*[$BIB_LIST_SEPARATOR] \\*[$BIB_LIST_PREFIX]
-.\}
-..
-\#
-.de ]>
-.LIST OFF
-.rr #REF
-.rr #IN_BIB_LIST
-.als ref*print ref*normal-print
-..
-\#
-\# Output
-\# ------
-\#
-\# Output normal, non-collected refs
-\#
-.de ref*normal-print
-.nr #CURRENT_HY \\n[.hy]
-\\*[ref*string]
-..
-\#
-\# Output collected refs
-\#
-.de ref*end-print
-.\" 10 is arbitrary
-.nn 10
-.nr #REF_BIB_INDENT (u;\\*[$REF_BIB_INDENT])
-.ie \\n[#BIB_LIST]=0 \{\
-.   in +\\n[#REF_BIB_INDENT]u
-.   ti -\\n[#REF_BIB_INDENT]u
-.\}
-.el .ITEM
-.\" Part of workaround for refer spitting out a blank page if the
-.\" last ref falls on the bottom line.
-\\*[ref*string]\R'ref*num*first-pass +1'\?\R'ref*num +1'\?
-.sp \\n[#BIB_SPACE]u
-.ie \\n[#BIB_LIST]=0 .in
-.el .IL -\\n[#REF_BIB_INDENT]u
-.nn 0
-..
-\#
-.als ref*print ref*normal-print
-\#
-\# Build up the ref*string
-\#
-\# Correct MLA "typewritten" style (printstyle TYPEWRITE) demands
-\# two spaces after each period.  The spaces are hardwired into the
-\# string definitions (ref*add-<x>), so we have to make sure that there
-\# aren't two spaces when the printstyle is TYPESET.  Since I find that
-\# references look a bit crowded with 0 sentence space, I've bumped it
-\# up to +4.  User's sentence spacing is reset in FOOTNOTES and ENDNOTES.
-\#
-.de ref*build
-.if \\n[#PRINT_STYLE]=2 \{\
-.   ds $RESTORE_SS_VAR \\*[$SS_VAR]
-.   SS +8
-.\}
-.rm ref*string
-.while \\n[.$] \{\
-.   if d [\\$1 \{\
-.      ie d ref*add-\\$1 .ref*add-\\$1
-.      el .ref*add-dflt \\$1
-.   \}
-.   shift
-.\}
-.\" now add a final period
-.ie d ref*string \{\
-.   if !\\n[ref*suppress-period] .as ref*string .
-.   if d ref*post-punct \{\
-.      as ref*string "\\*[ref*post-punct]
-.      rm ref*post-punct
-.   \}
-.\}
-.el .ds ref*string
-..
-\#
-\# The following macros determine how entries are formatted WRT
-\# punctuation, type style, additional strings, etc.
-\#
-\# o First argument is the database field letter.
-\# o Second argument is the punctuation character to use to separate this
-\#   field from the previous field.
-\# o Third argument is a string with which to prefix this field.
-\# o Fourth argument is a string with which to postfix this field.
-\# o Fifth argument is a string to add after the punctuation character
-\#   supplied by the next field.
-\#
-\# %A Author(s)
-.de ref*add-A
-.ds eval*[A \\*([A
-.substring eval*[A -1
-.if '\\*[eval*[A]'.' \{\
-.   if !'\\*[$REF_STYLE]'NOTE' .chop [A
-.\}
-.\" Per MLA, NOTE should not use idem, therefore if %i contains other than
-.\" idem (eg. ed., trans.), transpose it to after author's name
-.ie '\\*[$REF_STYLE]'NOTE' \{\
-.   ie !'\\*[idem]'' .ref*field A "" "" ", \\*[idem]"
-.   el .ref*field A
-.   rm idem
-.el .ref*field A
-.\}
-.if \\n([A .nr ref*suppress-period 1
-..
-\# %i Idem.  BIBLIO: In all instances, removes %A field and replaces
-\# it with a dash; if %i field contains other than the word, idem,
-\# appends it to the dash
-.de ref*add-i
-.ie '\\*[$REF_STYLE]'NOTE' \{\
-.   ie '\\*([i'idem' .rm [i
-.   el .ds idem \\*([i
-.\}
-.el \{\
-.   ie '\\*([i'idem' \{\
-.      rm [A
-.      rm [i
-.      ref*field i "" \[idem] "" " "
-.   \}
-.   el \{\
-.      ds eval*[i \\*([i
-.      substring eval*[i -1
-.      if '\\*[eval*[i]'.' \{\
-.         chop [i
-.         ds idem \\*([i
-.      \}
-.      rm [i
-.      rm [A
-.      ref*field i "" \[idem] ", \\*[idem]" " "
-.   \}
-.\}
-..
-\# %m Multiple authors (et al.)
-.de ref*add-m
-.if !'\\*[$REF_STYLE]'NOTE' \{\
-.   ds eval*[m \\*([m
-.   substring eval*[m -1
-.   if '\\*[eval*[m]'.' .chop [m
-.\}
-.ref*field m ,
-..
-\# %p Post-author string (eg. Preface, Foreword, etc)
-.de ref*add-p
-.\" Convert first letter to uppercase, per MLA, if BIBLIO
-.if '\\*[$REF_STYLE]'BIBLIO' \{\
-.   ds initial*cap \\*([p
-.   substring initial*cap 0 0
-.   ds [p*string \\*([p
-.   substring [p*string 1
-.   ds [p \E*[UC]\\*[initial*cap]\E*[LC]\\*[[p*string]
-.\}
-.ie '\\*[$REF_STYLE]'NOTE' .ref*field p ,
-.el .ref*field p . " "
-..
-\# %Q Author(s) when author is not a person
-.de ref*add-Q
-.ie '\\*[$REF_STYLE]'NOTE' .ref*field Q
-.el .ref*field Q
-..
-\# %T Title (generic)
-.de ref*add-T1
-.ie '\\*[$REF_STYLE]'NOTE' .ref*field T , \E*[IT] \E*[ref*restore-ss]
-.el \{\
-.   ie !'\\*([A'' .ref*field T . " \E*[IT]" \E*[ref*restore-ss]
-.   el \{\
-.      ie !'\\*([Q'' .ref*field T . " \E*[IT]" \E*[ref*restore-ss]
-.      el .ref*field T . \E*[IT] \E*[ref*restore-ss]
-.   \}
-.\}
-.if \\n([T .nr ref*suppress-period \\n([T
-.
-..
-\# %T Title of a chapter or article
-.de ref*add-T2
-.ie '\\*[$REF_STYLE]'NOTE' \{\
-.   ref*field T , \[lq] "" \[rq]
-.\}
-.el \{\
-.   ie '\\*([A'' \{\
-.      ref*field T . \[lq] "" \[rq]
-.      if !'\\*([Q''.ref*field T . " \[lq]" "" \[rq]
-.   \}
-.   el .ref*field T . " \[lq]" "" \[rq]
-.\}
-.if \\n([T .nr ref*suppress-period \\n([T
-..
-\# %B Book title (when citing an article from a book)
-.de ref*add-B
-.ie '\\*[$REF_STYLE]'NOTE' \{\
-.   ie \\n([T .ref*field B "" \E*[IT] \E*[ref*restore-ss]
-.   el .ref*field B , \E*[IT] \E*[ref*restore-ss]
-.\}
-.el \{\
-.   ie \\n([T .ref*field B "" ".\E*[IT]" \E*[ref*restore-ss]
-.   el .ref*field B . " \E*[IT]" \E*[ref*restore-ss]
-.\}
-\# refer doesn't set reg [T to 1 for these book titles, so we do it here
-.ds eval*[B \\*([B
-.substring eval*[B -1
-.rr [T
-.if '\\*[eval*[B]'!' .nr [T 1
-.if '\\*[eval*[B]'?' .nr [T 1
-.rm eval*[B
-..
-\# %q Titles that must go in quotes (e.g. an unpublished dissertation)
-.de ref*add-q
-.ie '\\*[$REF_STYLE]'NOTE' .ref*field q , \[lq] "" \[rq]
-.el \{\
-.   ie !'\\*([A'' .ref*field q . " \[lq]" "" \[rq]
-.   el \{\
-.      ie !'\\*([Q'' .ref*field q . " \[lq]" "" \[rq]
-.      el .ref*field q . \[lq] "" \[rq]
-.   \}
-.\}
-..
-\# %R Report number for technical reports
-.de ref*add-R
-.ref*field R . " "
-..
-\# %J Journal name
-.de ref*add-J
-.ie '\\*[$REF_STYLE]'NOTE' \{\
-.   ie \\n([T .ref*field J "" "\E*[IT]" \E*[ref*restore-ss]
-.   el .ref*field J , "\E*[IT]" \E*[ref*restore-ss]
-.\}
-.el \{\
-.   ie \\n([T .ref*field J "" " \E*[IT]" \E*[ref*restore-ss]
-.   el .ref*field J . " \E*[IT]" \E*[ref*restore-ss]
-.\}
-..
-\# %M Magazine or newspaper name
-.de ref*add-M
-.ie '\\*[$REF_STYLE]'NOTE' \{\
-.   ie \\n([T .ref*field M "" "\E*[IT]" \E*[ref*restore-ss]
-.   el .ref*field M , "\E*[IT]" \E*[ref*restore-ss]
-.\}
-.el \{\
-.   ie \\n([T .ref*field M "" " \E*[IT]" \E*[ref*restore-ss]
-.   el .ref*field M . " \E*[IT]" \E*[ref*restore-ss]
-.\}
-..
-\# %E Editor(s)
-.de ref*add-E
-.ds eval*[E \\*([E
-.substring eval*[E -1
-.if '\\*[eval*[E]'.' \{\
-.   if !\\n[#FN_REF]+\\n[#EN_REF] .chop [E
-.   rm eval*[E
-.\}
-.\" Workaround for join-authors also joining editors.  MLA style
-.\" requires a comma after first editor only if there are more than
-.\" two, whereas join-authors always puts a comma after the first if
-.\" there's more than one.
-.rm eval*[E
-.nr position 1 1
-.nr counter 1 1
-.while !'\\*[eval*[E]',' \{\
-.   ds eval*[E \\*([E
-.   substring eval*[E \\n+[position] \\n[position]
-.   if \\n+[counter]>30 .break \" 30 is abitrary
-.\}
-.\" Check for " and"
-.if '\\*[eval*[E]',' \{\
-.   ds eval*[E \\*([E
-.   nr and-check \\n[position]+4
-.   substring eval*[E \\n+[position] \\n[and-check]
-.\}
-.if '\\*[eval*[E]' and' \{\
-.   nr counter 1 1
-.   nr start-range -1 1
-.   nr end-range 3 1
-.   while !'\\*[eval*[E]', and' \{\
-.      ds eval*[E \\*([E
-.      substring eval*[E \\n+[start-range] \\n+[end-range]
-.      if \\n+[counter]>50 .break \" just in case; 50 is arbitrary
-.   \}
-.   if '\\*[eval*[E]', and' \{\
-.      length len*[E \\*([E
-.      nr rhs \\n[len*[E]-\\n[start-range]
-.      ds lhs \\*([E
-.      ds rhs \\*([E
-.      substring lhs 0 \\n[start-range]-1
-.      substring rhs -(\\n[rhs]-1)
-.      ds [E \\*[lhs]\\*[rhs]
-.   \}
-.   rm lhs
-.   rm rhs
-.   rr and-check
-.   rr counter
-.   rr start-range
-.   rr end-range
-.   rr len*[E
-.\}
-.\" End workaround
-.ie !\\n[ref*type]=0 \{\
-.   ie \\n([E>0 \{\
-.      ie '\\*[$REF_STYLE]'NOTE' \{\
-.         ie \\n([T .ref*field E "" "ed. "
-.         el .ref*field E , "ed. "
-.      \}
-.      el \{\
-.         ie \\n([T .ref*field E "" " Eds. "
-.         el .ref*field E . " Eds. "
-.      \}
-.   \}
-.   el \{\
-.      ie '\\*[$REF_STYLE]'NOTE' \{\
-.         ie \\n([T .ref*field E "" "ed. "
-.         el .ref*field E , "ed. "
-.      \}
-.      el \{\
-.         ie \\n([T .ref*field E "" " Ed. "
-.         el .ref*field E . " Ed. "
-.      \}
-.   \}
-.\}
-.el \{\
-.   ie \\n([T .ref*field E "" " "
-.   el .ref*field E . " "
-.\}
-.rr [T
-.rr [E
-..
-\# %e Edition
-.de ref*add-e
-.ie \\n([T .ref*field e "" "" " ed."
-.el \{\
-.   ie '\\*[$REF_STYLE]'NOTE' .ref*field e , "" " ed."
-.   el .ref*field e . " " " ed."
-.\}
-.nr ref*suppress-period 1
-.nr [e 1
-.rr [T
-..
-\# %V Volume (of a journal, or series of books); for journals, %N may be preferable
-.de ref*add-V
-.if \\n[ref*type]=1 \{\
-.   ref*field V
-.\}
-.if \\n[ref*type]=2 \{\
-.   ie '\\*[$REF_STYLE]'NOTE' .ref*field V , "vol. "
-.   el \{\
-.      ie \\n([T .ref*field V "" " Vol. "
-.      el .ref*field V . " Vol. "
-.   \}
-.\}
-.if \\n[ref*type]=3 \{\
-.   ie \\n([T .ref*field V "" " "
-.   el .ref*field V . " "
-.\}
-.rr [T
-..
-\# %N Journal number
-.de ref*add-N
-.ref*field N
-..
-\# %S Series (books or journals)
-.de ref*add-S
-.if \\n[ref*type]=1 \{\
-.   ref*field S
-.\}
-.if \\n[ref*type]=2 \{\
-.   ie '\\*[$REF_STYLE]'NOTE' \{\
-.      ie \\n([T .ref*field S
-.      el .ref*field S ,
-.   \}
-.   el \{\
-.      ie \\n([T .ref*field S "" " "
-.      el .ref*field S . " "
-.   \}
-.\}
-.if \\n[ref*type]=3 \{\
-.   ie \\n([T .ref*field S "" " "
-.   el .ref*field S . " "
-.\}
-.rr [T
-\# refer doesn't set reg [T to 1 for series titles, so we do it here
-.ds eval*[S \\*([S
-.substring eval*[S -1
-.if '\\*[eval*[S]'!' .nr [T 1
-.if '\\*[eval*[S]'?' .nr [T 1
-.rm eval*[S
-..
-\# %C City
-.de ref*add-C
-.ie '\\*[$REF_STYLE]'NOTE' \{\
-.   ie r [d \{\
-.      ref*field C
-.      rr [d
-.   \}
-.   el \{\
-.      ref*field C "" \*[FU 2](
-.   \}
-.   if \\n([T .nr ref*suppress-period \\n([T
-.\}
-.el \{\
-.   ie \\n([T .ref*field C "" " "
-.   el \{\
-.      ie r [e .ref*field C "" " "
-.      el .ref*field C . " "
-.   \}
-.\}
-.rr [T
-.rr [e
-..
-\# %I Publisher (I stands for Issuer)
-.de ref*add-I
-.ie '\\*[$REF_STYLE]'NOTE' \{\
-.   ie !'\\*([C'' .ref*field I :
-.   el .ref*field I "" (
-.\}
-.el \{\
-.   ie !'\\*([C'' .ref*field I :
-.   el \{\
-.      ie \\n([T .ref*field I "" " "
-.      el .ref*field I . " "
-.   \}
-.\}
-.rr [T
-..
-\# %D Date of publication
-.de ref*add-D
-.if \\n[ref*type]=0 \{\
-.   ie '\\*[$REF_STYLE]'NOTE' .ref*field D ,
-.   el .ref*field D . " "
-.\}
-.if \\n[ref*type]=1 \{\
-.   ref*field D "" "(" ")"
-.\}
-.if \\n[ref*type]=2 \{\
-.   ie '\\*[$REF_STYLE]'NOTE' .ref*field D , "" )
-.   el .ref*field D ,
-.\}
-.if \\n[ref*type]=3 \{\
-.   ie !'\\*([C'' \{\
-.      ie '\\*[$REF_STYLE]'NOTE' .ref*field D , "" )
-.      el .ref*field D ,
-.   \}
-.   el \{\
-.      if '\\*([I'' \{\
-.         ds eval*[D \\*([D
-.         substring eval*[D 0 -4
-.         ie '\\*[eval*[D]'1' .ds kern \*[BU3]
-.         el .ds kern \*[BU2]
-.         ie \\n[#PRINT_STYLE]=2 \{\
-.           if '\\*[$REF_STYLE]'NOTE' .ref*field D "" (\\*[kern] )
-.         \}
-.         el .ref*field D
-.      \}
-.      rm eval*[D
-.      rm kern
-.   \}
-.\}
-.if \\n[ref*type]=4 .ref*field D ,
-.if \\n[ref*type]=5 .ref*field D
-.ds eval*[D \\*([D
-.substring eval*[D -1
-.if '\\*[eval*[D]'.' .nr ref*suppress-period 1
-..
-\# %P Page number(s)
-.de ref*add-P
-.if \\n[ref*type]=5 .nr ref*type 1
-.ie '\\*[$REF_STYLE]'NOTE' \{\
-.   ie \\n[ref*type]=1 .ref*field P : "" .
-.   el .ref*field P "" "\|"
-.   if \\n[ref*type]=1 .nr ref*suppress-period 1
-.\}
-.el \{\
-.   ie \\n[ref*type]=1 .ref*field P \|:
-.   el \{\
-.      ie d [n .ref*field P . \| .
-.      el .ref*field P . " "
-.   \}
-.\}
-..
-\# %G Gov't. ordering number
-.de ref*add-G
-.ie '\\*[$REF_STYLE]'NOTE' ref*field G ,
-.el .ref*field G . " "
-..
-\# %O Other (info that goes after %T [or %B] but is hard to categorize; eg a dissertation)
-.de ref*add-O
-.ds eval*[O \\*([O
-.substring eval*[O -1
-.if '\\*[eval*[O]'.' .nr [O 1
-.ds initial*cap \\*([O
-.substring initial*cap 0 0
-.ds [O*string \\*([O
-.substring [O*string 1
-.if '\\*[$REF_STYLE]'BIBLIO' \{\
-.   ds [O \E*[UC]\\*[initial*cap]\E*[LC]\\*[[O*string]
-.\}
-.ie '\\*[$REF_STYLE]'NOTE' .ref*field O ,
-.el \{\
-.   if \\n([O=1 .chop [O
-.   ie r [e .ref*field O "" " "
-.   el \{\
-.      ie !d [A .ref*field O
-.      el .ref*field O . " "
-.   \}
-.\}
-.rr [O
-.rr [e
-..
-\# %n Annotations (after ref)
-.de ref*add-n
-.ds eval*[n \\*([n
-.substring eval*[n -1
-.if '\\*[eval*[n]'.' .chop [n
-.if '\\*[eval*[n]'?' .nr [n 1
-.if '\\*[eval*[n]'!' .nr [n 1
-.ie '\\*[$REF_STYLE]'NOTE' .ref*field n ,
-.el \{\
-.   ie !'\\*([P'' .ref*field n "" " "
-.   el .ref*field n . " "
-.\}
-.if r [n .nr ref*suppress-period 1
-.rr [n
-..
-\#
-.de ref*add-dflt
-.ref*field \\$1 ,
-..
-\#
-\# Book reprints
-\# -------------
-\# %d date of publication (the orignal date of publication)
-.de ref*add-d
-.ie '\\*[$REF_STYLE]'NOTE' \{\
-.   ref*field d "" ( ;
-.   nr [d 1
-.\}
-.el \{\
-.   ie \\n([T .ref*field d "" " "
-.   el .ref*field d . " "
-.\}
-.rr [T
-..
-\# %b main author when citing from a preface, introduction, foreword
-\# or afterword
-.de ref*add-b
-.ie '\\*[$REF_STYLE]'NOTE' \{\
-.   ie \\n([T .ref*field b "" "by"
-.   el .ref*field b , "by "
-.\}
-.el \{\
-.   ie \\n([T .ref*field b "" " By "
-.   el .ref*field b . " By "
-.\}
-.rr [T
-..
-\# %t title, if different from original title (the T field, which s/b
-\# the original title)
-.de ref*add-t
-.ie '\\*[$REF_STYLE]'NOTE' .ref*field t , "rpt. of \E*[IT] " \E*[ref*restore-ss]
-.el \{\
-.   ie \\n([T .ref*field t "" " Rpt. of \E*[IT] " \E*[ref*restore-ss]
-.   el .ref*field t . " Rpt. of \E*[IT] " \E*[ref*restore-ss]
-.\}
-.rr [T
-..
-\#
-\# Translated works
-\# ----------------
-\# %l Trans(l)ator
-.de ref*add-l
-.ie '\\*[$REF_STYLE]'NOTE' \{\
-.   ie \\n([T .ref*field l "" "trans. "
-.   el .ref*field l , "trans. "
-.\}
-.el \{\
-.   ie \\n([T .ref*field l "" " Trans. "
-.   el .ref*field l . " Trans. "
-.\}
-.rr [T
-..
-\# %r Translato(r) and edito(r)
-.de ref*add-r
-.ie '\\*[$REF_STYLE]'NOTE' .ref*field r , "trans. and ed. "
-.el \{\
-.   ie \\n([T .ref*field r "" " Trans. and ed. "
-.   el .ref*field r . " Trans. and ed. "
-.\}
-.rr [T
-..
-\#
-\# Internet
-\# --------
-\# %s Site name
-.de ref*add-s
-.ie '\\*[$REF_STYLE]'NOTE' .ref*field s , \E*[IT] \E*[ref*restore-ss]
-.el \{\
-.ie \\n([s .ref*field s "" ".\E*[IT]" \E*[ref*restore-ss]
-.el .ref*field s . " \E*[IT]" \E*[ref*restore-ss]
-.\}
-.\" refer doesn't set reg [T to 1 for these titles, so we do it here
-.if !'\\*[$REF_STYLE]'NOTE' \{\
-.   ds eval*[s \\*([s
-.   substring eval*[s -1
-.   rr [T
-.   if '\\*[eval*[s]'.' .nr [T 1
-.   if '\\*[eval*[s]'!' .nr [T 1
-.   if '\\*[eval*[s]'?' .nr [T 1
-.   rm eval*[s
-.\}
-..
-\# %c content of site (ie. Web, Online posting, etc)
-.de ref*add-c
-.ie '\\*[$REF_STYLE]'NOTE' .ref*field c ,
-.el \{\
-.   ie \\n([T .ref*field c "" " "
-.   el .ref*field c . " "
-.\}
-.rr [T
-..
-\# %o organization, group or sponsor of site
-.de ref*add-o
-.ie '\\*[$REF_STYLE]'NOTE' .ref*field o ,
-.el \{\
-.   ie \\n([T .ref*field o "" " "
-.   el .ref*field o . " "
-.\}
-.rr [T
-..
-\# %a access date, i.e. the date you read it
-.de ref*add-a
-.ie '\\*[$REF_STYLE]'NOTE' .ref*field a ,
-.el \{\
-.   ie \\n([T .ref*field a "" " "
-.   el .ref*field a . " "
-.\}
-.rr [T
-..
-\# %u URL
-.de ref*add-u
-.ref*field u "" < >
-.rr [T
-..
-.de ref*add-z
-.ref*field z
-..
-\#
-\# Build up reference string from ref*add-<x> macros.
-\#
-\# First, a string to ensure next field's font is reset to roman
-\# (TYPESET) or non-underlined (TYPEWRITE)
-\#
-.ie !n .ds ref*roman \f[R]\X'ps: exec decornone'\?\R'#UNDERLINE_ON 0'\?
-.el .ds ref*roman \f[R]\?\R'#UNDERLINE_ON 0'\?
-\#
-.de ref*field
-.if d ref*string \{\
-.   ie d ref*post-punct \{\
-.      as ref*string "\\$2\\*[ref*post-punct] \"
-.      rm ref*post-punct
-.   \}
-.   el .as ref*string "\\$2 \"
-.\}
-.as ref*string "\\$3\\*([\\$1\\$4\E*[ref*roman]
-.if \\n[.$]>4 .ds ref*post-punct "\\$5\E*[ref*roman]
-.nr ref*suppress-period 0
-..
-\#
-\# MARGIN NOTES
-\# ------------
-\#
-\# Wrapper for MNinit.
-\#
-.MAC MN_INIT END
-.    if \B'\\$2' \{\
-.       tm1 "[mom]: 1.x-style \\$0 detected, but you are using v2.x.
-.       tm1 "       v2.x requires flags before arguments to \\$0.
-.       tm1 "       Please read docelement.html#mn-init and update your file.
-.       ab Aborting '\\n[.F]' at \\$0, line \\n[.c].
-.    \}
-.    nr #ARGS  0 1
-.    nr #COUNT 9
-.    while \\n+[#ARGS]<=\\n[#COUNT] \{\
-.      ds $MN-arg\\n[#ARGS] @
-.    \}
-.    nr #FLAG 0 1
-.    nr #COUNT \\n[#NUM_ARGS]
-.    while \\n+[#FLAG]<=\\n[#COUNT] \{\
-.       if '\\$1'RAGGED' \{\
-.          ds $MN-arg1 \\$1
-.       shift
-.       \}
-.       if '\\$1'SYMMETRIC' \{\
-.          ds $MN-arg1 \\$1
-.          shift
-.       \}
-.       if '\\$1'L_WIDTH' \{\
-.          shift
-.          ds $MN-arg2 \\$1
-.          shift
-.       \}
-.       if '\\$1'R_WIDTH' \{\
-.          shift
-.          ds $MN-arg3 \\$1
-.          shift
-.       \}
-.       if '\\$1'GUTTER' \{\
-.          shift
-.          ds $MN-arg4 \\$1
-.          shift
-.       \}
-.       if '\\$1'FONTSTYLE' \{\
-.          shift
-.          ds $MN-arg5 \\$1
-.          shift
-.       \}
-.       if '\\$1'SIZE' \{\
-.          shift
-.          ds $MN-arg6 \\$1
-.          shift
-.       \}
-.       if '\\$1'LEAD' \{\
-.          shift
-.          ds $MN-arg7 \\$1
-.          shift
-.       \}
-.       if '\\$1'COLOR' \{\
-.          shift
-.          ds $MN-arg8 \\$1
-.          shift
-.       \}
-.       if '\\$1'HY' \{\
-.          shift
-.          ds $MN-arg9 \\$1
-.          shift
-.       \}
-.    \}
-.    if '\\*[$MN-arg5]'@' .ds $MN-arg5 \E*[$DOC_FAM]R
-.    MNinit \
-\\*[$MN-arg1] \\*[$MN-arg2] \
-\\*[$MN-arg3] \\*[$MN-arg4] \
-\\*[$MN-arg5] \\*[$MN-arg6] \
-\\*[$MN-arg7] \\*[$MN-arg8] \
-\\*[$MN-arg9]
-.END
-\#
-.MAC MN_OVERFLOW_TRAP END
-.    if \\n[#OVERFLOW_LEFT]=1 \{\
-.       nr #no-repeat-MN-left 1
-.       di MN_OVERFLOW_LEFT
-.    \}
-.    if \\n[#OVERFLOW_RIGHT]=1 \{\
-.       nr #no-repeat-MN-right 1
-.       di MN_OVERFLOW_RIGHT
-.    \}
-.    rr #OVERFLOW_LEFT
-.    rr #OVERFLOW_RIGHT
-.END
-\#
-\# The remainder of the margin notes macros and routines are adapted
-\# from Werner Lemberg's MN.tmac.
-\#
-\# MNinit
-\# ------
-\# Usage:
-\# MNinit [ragged|symmetric] \
-\#        left-width right-width separation \
-\#        font fontsize vertical-spacing \
-\#        color hyphenation-flags
-\#
-\# Initialize margin notes.  Empty arguments (denoted with "") set
-\# default values.  If the first argument is the string `ragged',
-\# left and right margin notes are printed ragged-right.  If it is
-\# `symmetric', left margin notes are printed ragged-left and right
-\# margin notes ragged-right.  If omitted, margin notes are left
-\# and right adjusted.
-\#
-.de MNinit
-.  nr #MNinit 1
-.  ds MN-left-ad b\"
-.  ds MN-right-ad b\"
-.  if '\\$1'@' .shift
-.  if '\\$1'RAGGED' \{\
-.    ds MN-left-ad l\"
-.    ds MN-right-ad l\"
-.    shift
-.  \}
-.  if '\\$1'SYMMETRIC' \{\
-.    ds MN-left-ad r\"
-.    ds MN-right-ad l\"
-.    shift
-.  \}
-.  ie \B'\\$3' .nr MN-sep (n;\\$3)
-.  el .nr MN-sep 1m
-.  if ((\\n[.o] - \\n[MN-sep]) < 1n) \
-.    ab MN: Left margin too small (<1n) for requested margin notes separation.
-.  ie \B'\\$1' \{\
-.    nr MN-left-width (n;\\$1)
-.    nr MN-left-start (\\n[.o] - \\n[MN-sep] - \\n[MN-left-width])
-.  \}
-.  el \{\
-.    nr MN-left-width (\\n[.o] - \\n[MN-sep])
-.    nr MN-left-start 0
-.  \}
-.  if (\\n[MN-left-start] < 0) \
-.    ab MN: Left margin too small for requested margin notes settings.
-.  if (\\n[MN-left-width] < 1n) \
-.    ab MN: Left margin notes width too small (<1n).
-.  ie \B'\\$2' \{\
-.    nr MN-right-width (n;\\$2)
-.    nr MN-right-start (\\n[.o] + \\n[.l] + \\n[MN-sep])
-.    if \\n[#COLUMNS]=1 \{\
-.      if !\\n[#NUM_COLS]=1 \{\
-.        nr MN-right-start (\\n[#COL_2_L_MARGIN] + \\n[#COL_L_LENGTH] + \\n[MN-sep])
-.      \}
-.    \}
-.  \}
-.  el \{\
-.    nr MN-right-width \\n[MN-left-width]
-.    nr MN-right-start (\\n[.o] + \\n[.l] + \\n[MN-sep])
-.    if \\n[#COLUMNS]=1 \{\
-.      if !\\n[#NUM_COLS]=1 \{\
-.        nr MN-right-start (\\n[#COL_2_L_MARGIN] + \\n[#COL_L_LENGTH] + \\n[MN-sep])
-.      \}
-.    \}
-.  \}
-.  ie \A'\\$4' \{\
-.    ds MN-font \\$4\"
-.    if \\n[#PRINT_STYLE]=1 .ds MN-font CR
-.  \}
-.  el \{\
-.    ds MN-font \\*[$PP_FT]
-.    if \\n[#PRINT_STYLE]=1 .ds MN-font CR
-.  \}
-.  ie \B'\\$5' \{\
-.    ps \\$5
-.    nr MN-size \\n[.ps]
-.    ps
-.    if \\n[#PRINT_STYLE]=1 \{\
-.       ps \\*[$TYPEWRITER_PS]
-.       nr MN-size \\n[.ps]
-.       ps
-.    \}
-.  \}
-.  el \
-.    nr MN-size \\n[#DOC_PT_SIZE]
-.  ie \B'\\$6' \{\
-'    vs \\$6
-.    nr MN-spacing \\n[.v]
-'    vs
-.    if \\n[#PRINT_STYLE]=1 \
-.       nr MN-spacing \\n[#DOC_LEAD]
-.  \}
-.  el .nr MN-spacing \\n[#DOC_LEAD]
-.  ie \A'\\$7' \
-.    if !\\n[#PRINT_STYLE]=1 .ds MN-color \\$7\"
-.  el \
-.    if !\\n[#PRINT_STYLE]=1 .ds MN-color
-.  ie \B'\\$8' .nr MN-hy \\$8
-.  el .nr MN-hy \\n[.hy]
-.  ev MNbottom-left-env
-.  if \A'\\*[MN-font]' .ft \\*[MN-font]
-.  if \\n[MN-size] .ps \\n[MN-size]u
-.  if \\n[MN-spacing] .vs \\n[MN-spacing]u
-.  ll \\n[MN-left-width]u
-.  ad \\*[MN-left-ad]
-.  hy \\n[MN-hy]
-'  in 0
-.  nop \m[\\*[MN-color]]\c
-.  ev
-.  ev MNbottom-right-env
-.  if \A'\\*[MN-font]' .ft \\*[MN-font]
-.  if \\n[MN-size] .ps \\n[MN-size]u
-.  if \\n[MN-spacing] .vs \\n[MN-spacing]u
-.  ll \\n[MN-right-width]u
-.  ad \\*[MN-right-ad]
-.  hy \\n[MN-hy]
-'  in 0
-.  nop \m[\\*[MN-color]]\c
-.  ev
-.  nr MN-active 0
-..
-\# MN
-\# --
-\# Usage:
-\#
-\#   MN LEFT|RIGHT
-\#   margin note text
-\#   MN
-\#
-\# With a parameter, start a margin note, otherwise end a margin note.
-\# If the parameter is the string `left', define a left margin note,
-\# otherwise define a right margin note.
-\#
-.de MN
-.ds MN-dir \\$1
-.if !'\\$1'LEFT' \{\
-.  if !'\\$1'RIGHT' \{\
-.    MN_QUIT
-.    return
-.  \}
-.\}
-.if \\n[#COLUMNS]=1 \{\
-.  if \\n[#NUM_COLS]>2 \{\
-.    tm [mom]: Macro MN: More than two columns.  Ignoring margin notes.
-.    return
-.  \}
-.  if !\\n[#NUM_COLS]=1 \{\
-.    ie \\n[#COL_NUM]=1 .ds MN-dir LEFT
-.    el .ds MN-dir RIGHT
-.  \}
-.\}
-.  if !\\n[#MNinit]=1 \{\
-.    tm [mom]: Macro MN: You must set parameters with MN_INIT before using MN.
-.    ab Aborting '\\n[.F]' at MN, line \\n[.c].
-.  \}
-.  ie !'\\$1'' \{\
-.    if \\n[MN-active] \{\
-.      tm [mom]: Macro MN: Can't handle nested margin notes, line \\n[.c].
-.      return
-.    \}
-.    nr MN-active 1
-.    ev MN-env
-.    ie '\\*[MN-dir]'LEFT' \{\
-.      nr MN-left +1
-.      ds MN-curr l-\\n[MN-left]\"
-.      evc MNbottom-left-env
-.    \}
-.    el \{\
-.      nr MN-right +1
-.      ds MN-curr r-\\n[MN-right]\"
-.      evc MNbottom-right-env
-.    \}
-.    mk MN-mk-\\*[MN-curr]
-.    di MN-div-\\*[MN-curr]
-.  \}
-.  el .MN_QUIT
-..
-\#
-\# MN_QUIT
-\# -------
-\# Utility macro to handle .MN OFF | QUIT | X etc
-\#
-.de MN_QUIT
-.   if \\n[MN-active] \{\
-.      br
-.      di
-.      nr MN-div-\\*[MN-curr]-depth \\n[dn]
-.      ev
-.   \}
-.   nr MN-active 0
-..
-\#
-\# MNtop
-\# -----
-\# Resets these registers (called in HEADER)
-.de MNtop
-.  nr MN-left 0
-.  nr MN-right 0
-.  nr MN-active 0
-.  rr MN-shifted
-.  ch FOOTER \\n[#VARIABLE_FOOTER_POS]u
-..
-\#
-\# MNbottom-left
-\# -------------
-\# The "left" half of Werner's original MNbottom.
-\#
-.de MNbottom-left
-.  nr MN-curr 0
-.  nr MN-last-pos 0
-.  nr MN-lead-adj \\n[#DOC_LEAD]-\\n[MN-spacing]
-.  vpt 0
-.  mk MN-curr-pos
-.  if \\n[MN-active] \{\
-.    di
-.    tm [mom]: Macro MN: Margin note finished by new page.  Ignored.
-.  \}
-.  po \\n[MN-left-start]u
-.  ev MNbottom-left-env
-.  nr #P \\n%+\\n[#PAGE_NUM_ADJ]
-.  while (\\n[MN-curr] < \\n[MN-left]) \{\
-.    nr MN-curr +1
-.    ie (\\n[MN-last-pos] < \\n[MN-mk-l-\\n[MN-curr]]) \
-.      sp |\\n[MN-mk-l-\\n[MN-curr]]u+\\n[MN-lead-adj]u
-.    el \{\
-.      nr MN-shifted 1
-.      sp 1v
-.      SHIM
-.      if \\n[#SHIM]>\\n[MN-spacing] .sp -(1v+\\n[MN-lead-adj]u)
-.      tm \
-[mom]: Macro MN: Warning: Left margin note #\\n[MN-curr] on page \\n[#P] shifted down.
-.    \}
-.\" If last margin note doesn't fit
-.    if ( (\\n[nl]+\\n[MN-div-l-\\n[MN-curr]-depth]) > (\\n[.p]+\\n[#VARIABLE_FOOTER_POS]-1) ) \{\
-.      if \\n[MN-shifted]=1 \{\
-.        sp -(1v+\\n[#SHIM]u)
-.        rm MN-div-l-\\n[MN-curr]
-.        tm1 "[mom]: No room to start left margin note #\\n[MN-curr] on page \\n[#P].
-.        tm1 "       Ignoring margin note.
-.        rr MN-shifted
-.      \}
-.      nr #no-repeat-MN-left 1
-.      nr #OVERFLOW_LEFT 1
-.      ie \\n[#FN_COUNT]=0 \{\
-.        ch FOOTER \\n[.p]u
-.        wh \\n[#VARIABLE_FOOTER_POS]u+\\n[MN-lead-adj]u+1u MN_OVERFLOW_TRAP
-.      \}
-.      el \
-.        wh \\n[.p]u+\\n[#VARIABLE_FOOTER_POS]u-1u MN_OVERFLOW_TRAP
-.      vpt 1
-.    \}
-.    nf
-.    MN-div-l-\\n[MN-curr]
-.    fi
-.    br
-.    nr MN-last-pos \\n[nl]
-.  \}
-.  ev
-.  po
-.  if !\\n[#no-repeat-MN-left]=1 \
-.     if \\n[MN-right]=0 .vpt 1
-..
-\#
-\# MNbottom-right
-\# --------------
-\# The "right" half of Werner's original MNbottom.
-\#
-.de MNbottom-right
-.   nr MN-curr 0
-.   nr MN-last-pos 0
-.   nr MN-lead-adj \\n[#DOC_LEAD]-\\n[MN-spacing]
-.   vpt 0
-.   po \\n[MN-right-start]u
-.   ev MNbottom-right-env
-.   nr #P \\n%+\\n[#PAGE_NUM_ADJ]
-.   while (\\n[MN-curr] < \\n[MN-right]) \{\
-.      nr MN-curr +1
-.      ie (\\n[MN-last-pos] < \\n[MN-mk-r-\\n[MN-curr]]) \
-.         sp |\\n[MN-mk-r-\\n[MN-curr]]u+\\n[MN-lead-adj]u
-.      el \{\
-.         nr MN-shifted 1
-.         sp 1v
-.         SHIM
-.         if \\n[#SHIM]>\\n[MN-spacing] .sp -(1v+\\n[MN-lead-adj]u)
-.         tm [mom]: \
-Macro MN: Warning: Right margin note #\\n[MN-curr] on page \\n[#P] shifted down.
-.      \}
-.\" If last margin note doesn't fit
-.      if ( (\\n[nl]+\\n[MN-div-r-\\n[MN-curr]-depth]) > (\\n[.p]+\\n[#VARIABLE_FOOTER_POS]-1) ) \{\
-.         if \\n[MN-shifted]=1 \{\
-.            sp -(1v+\\n[#SHIM]u)
-.            rm MN-div-r-\\n[MN-curr]
-.            tm1 \
-[mom]: No room to start right margin note #\\n[MN-curr] on page \\n[#P] on page \\n[#P].
-.            tm1 "       Ignoring margin note.
-.            rr MN-shifted
-.         \}
-.         nr #no-repeat-MN-right 1
-.         nr #OVERFLOW_RIGHT 1
-.         ie \\n[#FN_COUNT]=0 \{\
-.            ch FOOTER \\n[.p]u
-.            wh \\n[#VARIABLE_FOOTER_POS]u+\\n[MN-lead-adj]u+1u MN_OVERFLOW_TRAP
-.         \}
-.         el \
-.            wh \\n[.p]u+\\n[#VARIABLE_FOOTER_POS]u-1u MN_OVERFLOW_TRAP
-.         vpt 1
-.      \}
-.      nf
-.      MN-div-r-\\n[MN-curr]
-.      fi
-.      br
-.      nr MN-last-pos \\n[nl]
-.   \}
-.   ev
-.   po
-.   if !\\n[#no-repeat-MN-right]=1 .vpt 1
-..
-\#
-\# PDF SUPPORT
-\# ===========
-\#
-\# Initial setup
-\#
-.nr CURRENT_LEVEL 0
-.nr VIRTUAL_LEVEL 0
-.nr #PDF_BOOKMARKS 1
-.nr #PDF_BOOKMARKS_OPEN 1
-.pdfview /PageMode /UseOutlines
-\#
-\# TOC_BEFORE_HERE
-\# ---------------
-\#
-\# Call this and the TOC will be placed preceding this page
-\#
-.MAC TOC_BEFORE_HERE END
-.    nr TOC_BH 1
-.    pdfpagename MOM:TOC
-.END
-\#
-\# TOC_AFTER_HERE
-\# ---------------
-\#
-\# Call this and the TOC will be placed after this page
-\#
-.MAC TOC_AFTER_HERE END
-.    nr TOC_BH 2
-.    pdfpagename MOM:TOC
-.END
-\#
-\# PDF_LINK_COLOR
-\# -----------------
-\#
-\# Arguments:-
-\#   <name defined by previous call to XCOLOR or NEWCOLOR> or
-\#   <red> <green> <blue> all 0.0 -> 1.0
-\# Notes
-\#   Should be called before START but can also be called at any time to change colour
-\#   The colour assigned at the end of the document is used for all links in the TOC
-\#
-.MAC PDF_LINK_COLOR END
-.    ie \\n[.$]==3 \{\
-.       ds PDFHREF.COLOUR \\$*
-.       if !(\B'\\$1' & \B'\\$2' & \B'\\$3') \{\
-.          tm1 "[mom]: All three arguments to \\$0 at line \\n[.c] must be decimal.
-.          tm1 "       Continuing to process using default link color.
-.          ds PDFHREF.COLOUR 0.0 0.3 0.9
-.       \}
-.       defcolor pdf:href.colour rgb \\*[PDFHREF.COLOUR]
-.       ds PDFHREF.TEXT.COLOUR pdf:href.colour
-.    \}
-.    el \{\
-.       ie \\n[.$]==0 \{\
-.          if dPDFHREF.TEXTCOL.DEFAULT \
-.             PDF_LINK_COLOR \\*[PDFHREF.TEXTCOL.DEFAULT]
-.       \}
-.       el \{\
-.          ds ARG_1 \\$1
-.          substring ARG_1 0 0
-.          ie '\\*[ARG_1]'#' \{\
-.             defcolor pdf:href.colour rgb \\$1
-.             ds PDFHREF.TEXT.COLOUR pdf:href.colour
-.          \}
-.          el \{\
-.             ie dCOLAL_\\$1 .ds PDFHREF.TEXT.COLOUR \\*[COLAL_\\$1]
-.             el .ds PDFHREF.TEXT.COLOUR \\$1
-.          \}
-.       \}
-.    \}
-.    if !\\n[PDFHREF_COLOR_SET]=1 \{\
-.       nr PDFHREF_COLOR_SET 1
-.    \}
-.END
-\#
-\# AUTO_RELOCATE_TOC
-\# -----------------
-\#
-\# Call before START to have TOC automatically relocated to after the
-\# DOC COVER (if there is one) or the COVER if there isn't
-\#
-.MAC AUTO_RELOCATE_TOC END
-.    if '\\$1''                .nr TOC.RELOCATE 1
-.    if '\\$1'TOP'             .nr TOC.RELOCATE 2
-.    if '\\$1'BEFORE_DOCCOVER' .nr TOC.RELOCATE 3 \" Same as TOP unless no DOCCOVER
-.    if '\\$1'AFTER_DOCCOVER'  .nr TOC.RELOCATE 4
-.    if '\\$1'BEFORE_COVER'    .nr TOC.RELOCATE 5
-.    if '\\$1'AFTER_COVER'     .nr TOC.RELOCATE 6
-.END
-\#
-\# PDF_BOOKMARK
-\# ------------
-\# *Argument:
-\#   Hierarchy Level
-\#   Bookmark Text
-\# *Function:
-\#   Creates a bookmark using the given text
-\#   The level controls the hierarchy of the bookmarks
-\# *Notes
-\#   Bookmarks can be turned off (will not be added to document outline) by calling
-\#   "PDF_BOOKMARKS NO" and turned on with "PDF_BOOKMARKS".
-\#
-\#   Bookmarks can be open or closed by calling PDF_BOOKMARKS_OPEN
-\#
-.MAC PDF_BOOKMARK END
-.    if \\n[#PDF_BOOKMARKS] \{\
-.       ie '\\$1'NAMED' \{\
-.          ds PDF_NM -T \\$2
-.          ds PDF_NM2 \\$2
-.          shift 2
-.       \}
-.       el .ds PDF_NM
-.       nr LEVEL_REQ \\$1
-.       shift
-.       ie \\n[LEVEL_REQ]>\\n[VIRTUAL_LEVEL] \{\
-.          nr VIRTUAL_LEVEL \\n[LEVEL_REQ]
-.          nr LEVEL_REQ \\n[CURRENT_LEVEL]+1
-.       \}
-.       el \{\
-.          ie \\n[LEVEL_REQ]<\\n[VIRTUAL_LEVEL] \{\
-.             nr VIRTUAL_DIFF \\n[VIRTUAL_LEVEL]-\\n[LEVEL_REQ]
-.             nr VIRTUAL_LEVEL \\n[LEVEL_REQ]
-.             nr LEVEL_REQ (\\n[CURRENT_LEVEL]-\\n[VIRTUAL_DIFF])>?1
-.          \}
-.          el .nr LEVEL_REQ \\n[CURRENT_LEVEL]
-.       \}
-.       ds PDF_TX \\$*
-.       pdfmomclean PDF_TX
-.\" .   ev protect
-.       nr PDF_LEV (\\n[LEVEL_REQ]*\\n[#PDF_BOOKMARKS_OPEN])
-.       ie '\\*[.T]'ps' \{\
-.           if !'\\*[PDF_NM]'' \{\
-.              pdfhref M -N \\*[PDF_NM2] -- \\*[PDF_TX]
-.              if !dpdf:href.map .tm gropdf-info:href \\*[PDF_NM2] \\*[PDF_TX]
-.           \}
-.           pdfbookmark \\n[PDF_LEV] \\*[PDF_TX]
-.       \}
-.       el .pdfbookmark \\*[PDF_NM] \\n[PDF_LEV] \\$*
-.\" .   ev
-.       nr CURRENT_LEVEL \\n[LEVEL_REQ]
-.       rr LEVEL_REQ
-.       rr PDF_LEV
-.       rr VIRTUAL_DIFF
-.       rm PDF_NM
-.    \}
-.END
-\#
-\# PDF_TITLE
-\# ---------
-\# *Argument:
-\#   Title Text
-\# *Function
-\#   Set the PDF title (this is often used by PDF readers to title the main window)
-\#
-.MAC PDF_TITLE END
-.    ds pdftitle \\$*
-.    pdfmomclean pdftitle
-.    nop \!x X ps:exec [/Title (\\*[pdftitle]) /DOCINFO pdfmark
-.END
-\#
-\# PDF_BOOKMARKS
-\# -------------
-\# *Argument:
-\#   <nothing> | <anything>
-\# *Function:
-\#   With no parameter turns on outline bookmarks
-\#   With any parameter turns off outline bookmarks
-\#
-.MAC PDF_BOOKMARKS END
-.    ie '\\$1'' .nr #PDF_BOOKMARKS 1
-.    el .nr #PDF_BOOKMARKS 0
-.END
-\#
-\# PDF_BOOKMARKS_OPEN
-\# ------------------
-\# *Argument:
-\#   <number> | <nothing> | <text>
-\# *Function:
-\#   If arg is numeric all Bookmark levels > arg are closed
-\#   If arg is empty all bookmarks are open
-\#   If arg is any text then any following bookmarks are closed
-\#
-.MAC PDF_BOOKMARKS_OPEN END
-.    ie \B'\\$1' \{\
-.       nr PDFOUTLINE.FOLDLEVEL \\$1
-.       nr #PDF_BOOKMARKS_OPEN 1
-.    \}
-.    el .if '\\*[.T]'pdf' \{\
-.       nr PDFOUTLINE.FOLDLEVEL 10000
-.       ie '\\$1'' .nr #PDF_BOOKMARKS_OPEN 1
-.       el .nr #PDF_BOOKMARKS_OPEN 0-1
-.    \}
-.END
-\#
-\# PDF_LINK
-\# --------
-\# *Arguments:
-\#    $1 = named link
-\#    [PREFIX text] : text to prefix link
-\#    [SUFFIX text] : text after link
-\#    text
-\#
-\# *Notes
-\#    Text is output as a hotspot link to named destination.
-\#    If text has final '*' it is replaced with the text associated with the link
-\#
-.MAC PDF_LINK END
-.    ds PDF_NM \\$1
-.    shift
-.    ie '\\$1'PREFIX' \{\
-.       ds PDF_PRE -P "\&\\$2"
-.       shift 2
-.    \}
-.    el .ds PDF_PRE
-.    ie '\\$1'SUFFIX' \{\
-.       ds PDF_POST -A "\\$2"
-.       shift 2
-.    \}
-.    el .ds PDF_POST
-.    ds PDF_AST_Q
-.    ds PDF_TXT \&\\$1
-.    ds PDF_AST \\*[PDF_TXT]
-.    substring PDF_AST -1 -1
-.    if '\\*[PDF_AST]'+' \{\
-.       ds PDF_AST *
-.       ds PDF_AST_Q ""
-.    \}
-.    if '\\*[PDF_AST]'*' \{\
-.        chop PDF_TXT
-.        ie '\\*[.T]'pdf' \{\
-.           ie d pdf:look(\\*[PDF_NM]) \
-.               as PDF_TXT \&\\*[PDF_AST_Q]\\*[pdf:look(\\*[PDF_NM])]\\*[PDF_AST_Q]
-.           el \{\
-.               as PDF_TXT Unknown
-.               if !rPDF_UNKNOWN .tm \
-\\n[.F]:\\n[.c]: forward reference detected (please run using 'pdfmom')
-.               nr PDF_UNKNOWN 1
-.           \}
-.        \}
-.        el \{\
-.            ie d pdf:href(\\*[PDF_NM]).info \
-.               as PDF_TXT \&\\*[PDF_AST_Q]\\*[pdf:href(\\*[PDF_NM]).info]\\*[PDF_AST_Q]
-.            el .as PDF_TXT Unknown
-.       \}
-.    \}
-.    pdfhref L \\*[PDF_PRE] \\*[PDF_POST] -D \\*[PDF_NM] -- \\*[PDF_TXT]
-.    rm PDF_NM
-.    rm PDF_PRE
-.    rm PDF_POST
-.    rm PDF_TXT
-.    rm PDF_AST
-.    rm PDF_AST_Q
-.END
-\#
-.MAC PDF_WWW_LINK END
-.    ds PDF_NM \\$1
-.    shift
-.    ie '\\$1'PREFIX' \{\
-.       ds PDF_PRE -P "\\$2"
-.       shift 2
-.    \}
-.    el .ds PDF_PRE
-.    ie '\\$1'SUFFIX' \{\
-.       ds PDF_POST -A "\\$2"
-.       shift 2
-.    \}
-.    el .ds PDF_POST
-.    ds PDF_AST_Q
-.    ds PDF_TXT \\$1
-.    ie !'\\*[PDF_TXT]'' \{\
-.       ds PDF_AST \\*[PDF_TXT]
-.       substring PDF_AST -1 -1
-.       if '\\*[PDF_AST]'+' \{\
-.          ds PDF_AST *
-.          ds PDF_AST_Q ""
-.       \}
-.       if '\\*[PDF_AST]'*' \{\
-.          chop PDF_TXT
-.          as PDF_TXT \&\\*[PDF_AST_Q]\\*[PDF_NM]\\*[PDF_AST_Q]
-.       \}
-.    \}
-.    el .ds PDF_TXT \\*[PDF_NM]
-.    pdfhref W -D "\\*[PDF_NM]" \\*[PDF_PRE] \\*[PDF_POST] -- \\*[PDF_TXT]
-.    rm PDF_NM
-.    rm PDF_PRE
-.    rm PDF_POST
-.    rm PDF_TXT
-.    rm PDF_AST PDF_AST_Q
-.END
-\#
-.MAC PDF_TARGET END
-.    ds ARG_1 \\$1
-.    shift
-.    pdfhref M -N \\*[ARG_1] -- \\$*
-.    if '\\*[.T]'ps' .if !dpdf:href.map .tm gropdf-info:href \\*[ARG_1] \\$*
-.END
-\#
-\# PDF_IMAGE
-\# ---------
-\# *Arguments:
-\#   [ -L -| -R | -C | -I <indent> ] \
-\#     <image file> <width> <height> \
-\#     [ SCALE <factor> ] [ ADJUST +|-<vertical shift> ]
-\# *Function:
-\#   Allows embedding of PDF images with the same arguments as PSPIC
-\#   plus SCALE and ADJUST options.
-\# *Notes:
-\#   <image file> <width> <height> are required.
-\#
-.MAC PDF_IMAGE END
-.    rr float*img
-.    if !'\\n[.z]'FLOAT*DIV' .FLOAT
-.    nr float*img 1
-.    ds ev-current \\n[.ev]
-.    ev IMG
-.    evc \\*[ev-current]
-.    if \\n[#HYPHENATE] .nh
-.    nr ind-pre-img \\n[.i]
-.    nr ll-pre-img  \\n[.l]
-.    in 0
-.    ds pos:tmp \\$1
-.    substring pos:tmp 0 0
-.    ie !'\\*[pos:tmp]'-' .ds pdf-img:pos -C
-.    el \{\
-.       ds pdf-img:pos \\$1
-.       shift
-.    \}
-.    if '\\*[pdf-img:pos]'-I' \{\
-.       nr pdf-img:ind \\$1
-.       shift
-.    \}
-.    ds pdf-img:file \\$1
-.    ds pdf-img@file \\$1
-.    substring pdf-img@file -1 -3
-.    if !'\\*[pdf-img@file]'pdf' \{\
-.       tm1 "[mom]: Image file '\\*[pdf-img:file]' at line \\n[.c] not found, or not a PDF image.
-.       ab Aborting '\\n[.F]' at \\$0, line \\n[.c].
-.    \}
-.    nr pdf-img:width \\$2
-.    nr pdf-img:depth \\$3
-.    shift 3
-.    nr loop-counter \\n[#NUM_ARGS]
-.    nr loop-count 0 1
-.    while \\n+[loop-count]<=\\n[loop-counter] \{\
-.       if '\\$1'SCALE' \{\
-.          shift
-.          nr pdf-img:scale \\$1
-.          shift
-.          nr pdf-img:width \\n[pdf-img:width]*\\n[pdf-img:scale]/100
-.          nr pdf-img:depth \\n[pdf-img:depth]*\\n[pdf-img:scale]/100
-.       \}
-.       if '\\$1'ADJUST' \{\
-.         shift
-.         ds pdf-img:adj \\$1
-.         shift
-.       \}
-.       if '\\$1'FRAME' \{\
-.          nr pdf-img:frame 1
-.          if !r pdf-img:frame-inset .nr pdf-img:frame-inset 6p
-.          shift
-.       \}
-.       if '\\$1'CAPTION' \{\
-.          nr pdf-img*have-caption 1
-.          ds pdf-img*caption \\$2
-.          shift 2
-.       \}
-.       if '\\$1'SHORT_CAPTION' \{\
-.          ds pdf-img*caption-short \\$2
-.          shift 2
-.       \}
-.       if '\\$1'LABEL' \{\
-.          nr pdf-img*have-label 1
-.          ds pdf-img*label \\$2
-.          ds label-type pdf-img
-.          shift 2
-.       \}
-.       if '\\$1'NO_SHIM' \{\
-.          nr float*no-shim 1
-.       \}
-.    \}
-.    ds pdf-img*label-sffx-tmp \\*[pdf-img*label-sffx]
-.    substring pdf-img*label-sffx-tmp -1
-.    if '\\*[pdf-img*label-sffx-tmp]'.' \
-.       if \\n[pdf-img*caption-after-label]=0 .chop pdf-img*label-sffx
-.    PDF_TARGET fig:\\n+[lists*target]
-.    if '\\*[pdf-img:pos]'-C' \
-.       nr pdf-img:ind (\\n[.ll]-\\n[ind-pre-img]-\\n[pdf-img:width])/2
-.    if '\\*[pdf-img:pos]'-R' \{\
-.       nr pdf-img:ind \\n[.ll]-\\n[pdf-img:width]-\\n[ind-pre-img]
-.    \}
-.    di PDF*IMAGE
-.    if \\n[@TOP] \{\
-.       ch RR_@TOP
-.       rs
-.       nop \&
-.       sp -1v
-.    \}
-.    if \\n[pdf-img*have-caption] \{\
-.       if !\\n[pdf-img*autolabel] \{\
-.          if !\\n[pdf-img*have-label] \{\
-.             if \\n[#MLA] \
-.                mla@error caption label \\n[.F] \\$0 \\n[.c]
-.          \}
-.       \}
-.       if !\\n[pdf-img*caption-after-label] \{\
-.          if !\\n[@TOP] .sp .5v
-.          nr lead-pre-caption \\n[.v]
-.          ev caption
-.          evc IMG
-.          ie \\n[#PRINT_STYLE]=1 .TYPEWRITER
-.          el \{\
-.             img*caption-style
-.             vs \\n[.ps]u+\\n[pdf-img*caption-autolead]u
-.          \}
-.          PDF_IMG*SET_CAPTION_QUAD \\*[pdf-img*caption-quad]
-.          sp \\n[lead-pre-caption]u-\\n[.v]u
-.          nop \\*[pdf-img*caption]
-.          br
-.          if !'\\*[pdf-img*caption-space]'' .sp \\*[pdf-img*caption-space]
-.          ev
-.          in 0
-.          sp -.5v
-.       \}
-.    \}
-.    nf
-.    if \\n[pdf-img:frame] \{\
-.       nr frame-width \\n[pdf-img:width]+(\\n[pdf-img:frame-inset]*2)
-.       nr frame-depth \\n[pdf-img:depth]+(\\n[pdf-img:frame-inset]*2)
-.       if '\\*[pdf-img:pos]'-L' \{\
-.          nr pdf-img:ind \\n[pdf-img:frame-inset]
-.          nr pdf-img:dbx-ind 0
-.       \}
-.       if '\\*[pdf-img:pos]'-C' \{\
-.          nr pdf-img:dbx-ind \
-\\n[.ll]-\\n[ind-pre-img]-\\n[pdf-img:width]/2-\\n[pdf-img:frame-inset]
-.       \}
-.       if '\\*[pdf-img:pos]'-R' \{\
-.          nr pdf-img:ind -\\n[pdf-img:frame-inset]
-.          nr pdf-img:dbx-ind \
-\\n[.l]u-(\\n[pdf-img:width]u+(\\n[pdf-img:frame-inset]u*2u)+\\n[ind-pre-img]u)
-.       \}
-.       if '\\*[pdf-img:pos]'-I' \{\
-.          nr pdf-img:ind +\\n[pdf-img:frame-inset]
-.          nr pdf-img:dbx-ind \\n[pdf-img:ind]-\\n[pdf-img:frame-inset]
-.       \}
-.       DBX \\*[pdf-img:frame-weight] \
-            \\n[pdf-img:dbx-ind]u \
-            \\n[frame-width]u \
-            \\n[frame-depth]u \
-            \\*[pdf-img:frame-color]
-.       sp \\n[pdf-img:frame-inset]u
-.       nr pdf-img:ind -\\n[pdf-img:frame-inset]
-.    \}
-.    ti \\n[pdf-img:ind]u+\\n[pdf-img:frame-inset]u
-.    nop \X'pdf: pdfpic \\*[pdf-img:file] -L \\n[pdf-img:width]z \\n[pdf-img:depth]z'
-.    if '\\*[pdf-img:pos]'-C' .nr pdf-img:ind +\\n[pdf-img:frame-inset]
-.    sp \\n[pdf-img:depth]u
-.    if \\n[pdf-img:frame] .sp \\n[pdf-img:frame-inset]u
-.    if (\\n[pdf-img*have-label]=1):(\\n[pdf-img*autolabel]=1):(\\n[pdf-img*caption-after-label]=1) \{\
-.       if \\n[#MLA] \{\
-.          if (\\n[pdf-img*have-label]=1):(\\n[pdf-img*autolabel]=1) \{\
-.             if !\\n[pdf-img*have-caption] \
-.                mla@error label caption \\n[.F] \\$0 \\n[.c]
-.          \}
-.       \}
-.       nr lead-pre-label \\n[.v]
-.       ev label
-.       evc IMG
-.       ie \\n[#PRINT_STYLE]=1 .TYPEWRITER
-.       el \{\
-.          img*label-style
-.          vs \\n[.ps]u+\\n[pdf-img*label-autolead]u
-.       \}
-.       if \\n[pdf-img*label-with-chapter] \
-.          ds chapno \\n[#CH_NUM].
-.       PDF_IMG*SET_LABEL_QUAD \\*[pdf-img*label-quad]
-.       sp \\n[lead-pre-label]u-\\n[.v]u
-.       if !'\\*[pdf-img*label-space]'' .sp \\*[pdf-img*label-space]
-.       ie \\n[pdf-img*autolabel] \
-.          nop \
-\\*[pdf-img*label-prfx]\\*[chapno]\\n+[fig*label-num]\\*[pdf-img*label-sffx]\|
-.       el .if !'\\*[pdf-img*label]'' .nop \\*[pdf-img*label]
-.       if \\n[pdf-img*autolabel] \
-.          ds pdf-img*label \\*[chapno]\\n[fig*label-num]
-.       fam
-.       ft
-.       ps
-.       gcolor
-.       if !'\\*[pdf-img*caption]'' \{\
-.          if \\n[pdf-img*caption-after-label] \{\
-.             ds pdf-img*caption " \\*[pdf-img*caption]
-.             nop \\*[pdf-img*caption-specs]\\*[pdf-img*caption]\\*[revert-specs]
-.          \}
-.       \}
-.       sp .5v
-.       ev
-.       in 0
-.    \}
-\!.  in
-.    di
-.    nf
-.    vpt 0
-.    if !'\\*[pdf-img:adj]'' \{\
-.       if \\n[@TOP] \
-.          if \\n[#COLUMNS]>1 \
-\!.           rs
-\!.     sp \\*[pdf-img:adj]
-.    \}
-.    PDF*IMAGE
-.    if !'\\*[pdf-img:adj]'' \
-.       if !\\n[@TOP] \!.sp -\\*[pdf-img:adj]
-.    vpt
-.    ev
-.    FLOAT off
-.    nr dl \\n[pdf-img:width]
-.    if !'\\*[pdf-img*caption-short]'' .ds short -short
-.    ie !'\\*[pdf-img*label]'' \
-.       TO_FIGURES "\\*[pdf-img*label]" "\\*[pdf-img*caption\\*[short]]"
-.    el .TO_FIGURES "\\*[pdf-img*caption\\*[short]]"
-.    PDF_IMAGE_CLEAN 
-.END
-\#
-\# PDF_IMAGE_FRAME
-\# ---------------
-\# *Arguments:
-\#   [ <inset> ] [ <rule weight> ] [ <color> ]
-\# *Function:
-\#   Sets parameters for pdf image frames.
-\# *Notes:
-\#   Defaults are '6p' '.5' 'black'.  Arguments to be left at default
-\#   must be entered as "".
-\#
-.MAC PDF_IMAGE_FRAME END
-.    if !'\\$1''\{\
-.       ds frame-arg \\$1
-.       substring frame-arg -1
-.       ie \B'\\*[frame-arg]' \{\
-.          tm1 "[mom]: \\$0 inset argument at line \\n[.c]
-.          tm1 "       of '\\n[.F]' requires a unit of measure.
-.          tm1 "       Default 6 point inset will be used instead.
-.       \}
-.       el .nr pdf-img:frame-inset \\$1
-.    \}
-.    shift
-.    if !'\\$1'' \{\
-.       ds frame-arg \\$1
-.       substring frame-arg -1
-.       ie \B'\\*[frame-arg]' \{\
-.          ds pdf-img:frame-weight \\$1
-.          shift
-.       \}
-.       el \{\
-.          ds frame-arg \\$1
-.          substring frame-arg -1 
-.          length arg-len \\*[frame-arg]
-.          if \\n[arg-len]=1 \{\
-.             tm1 "[mom]: \\$0 rule weight argument at line \\n[.c]
-.             tm1 "       of '\\n[.F]' must not have a unit of measure appended.
-.             tm1 "       Default .5 rule weight will be used instead.
-.             shift
-.          \}
-.       \}
-.    \}
-.    if !'\\$1'' \{\
-.       ie m \\$1 .ds pdf-img:frame-color \\$1
-.       el \{\
-.          tm1 "[mom]: \\$0 color argument '\\$1' at line \\n[.c]
-.          tm1 "       of '\\n[.F]' is not a valid color.
-.          tm1 "       Default black will be used instead.
-.       \}
-.    \}
-.END
-\#
-.MAC PDF_IMAGE_CLEAN END
-.    rm PDF*IMAGE
-.    rm pdf-img:adj
-.    rm pdf-img*caption
-.    rm pdf-img*caption-short
-.    rm pdf-img*caption-space
-.    rm pdf-img:file
-.    rm pdf-img*label
-.    rm pdf-img*label-space
-.    rm pdf-img:pos
-.    rm short
-.    rr ind-pre-img
-.    rr pdf-img:depth
-.    rr pdf-img:float
-.    rr pdf-img:frame
-.    rr pdf-img:ind
-.    rr pdf-img:no-shim
-.    rr pdf-img:scale
-.\" Cutarounds not yet implemented
-.    if !\\n[defer] \
-.       if !\\n[cutaround] \
-.          rr pdf-img*have-caption
-.    if !\\n[cutaround] \{\
-.       rr pdf-img:frame-inset
-.       rr pdf-img:width
-.    \}
-.    if '\\*[pdf-img*label-sffx-tmp]'.' .ds pdf-img*label-sffx .
-.END
-\#
-.de pdfmomclean
-.   ie '\\n[.z]'' \{\
-.      ds pdfcleaned \\$*
-.      ev pdfcln
-.      tr \[em]-
-.      nf
-.      box pdf:clean
-.      nop \\*[\\*[pdfcleaned]]
-.      fl
-.      box
-.      chop pdf:clean
-.      asciify pdf:clean
-.      ev
-.      ds \\*[pdfcleaned] "\\*[pdf:clean]
-.      rm pdf:clean
-.      tr \[em]\[em]
-.    \}
-.    el .nop \!.pdfmomclean \\$@
-..
-\# vim: ft=groff: encoding=latin1: fileencoding=latin1: nomodified:
diff -Nuar groff-1.22.3.old/contrib/mom/om.tmac-u groff-1.22.3/contrib/mom/om.tmac-u
--- groff-1.22.3.old/contrib/mom/om.tmac-u	1970-01-01 02:00:00.000000000 +0200
+++ groff-1.22.3/contrib/mom/om.tmac-u	2015-04-23 20:57:03.000000000 +0300
@@ -0,0 +1,21595 @@
+.\" -*- nroff -*-      om.tmac
+.ig
+Mom -- a typesetting/document-processing macro set for groff.
+
+Copyright (C) 2002-2015  Free Software Foundation, Inc.
+ Written by Peter Schaffter <peter@schaffter.ca>
+ PDF integration contributed by Deri James <deri.james@chuzzlewit.co.uk>
+
+This file is part of groff.
+
+groff is free software; you can redistribute it and/or modify it
+under the terms of the GNU General Public License as published by
+the Free Software Foundation, either version 3 of the License, or
+(at your option) any later version.
+
+groff is distributed in the hope that it will be useful, but WITHOUT ANY
+WARRANTY; without even the implied warranty of MERCHANTABILITY or
+FITNESS FOR A PARTICULAR PURPOSE.  See the GNU General Public License
+for more details.
+
+You should have received a copy of the GNU General Public License
+along with this program. If not, see <http://www.gnu.org/licenses/>.
+
+Version 2.1
+-----------
+Antoine de St-Exup�ry asserted that elegance in engineering is
+achieved not when there is nothing left to add, but when there is
+nothing left to take away.
+
+By those standards, mom is a Rube Goldberg contraption.  She was
+created over the years while groff, and my understanding of it,
+changed and evolved.  However, I'm a firm believer in "if it ain't
+broke, don't fix it."  Version 2.0 removes some of the redundancies
+and cruft, but mom still needs some nip and tuck.
+
+"<anything>" in the description of arguments that can be passed
+to a macro means that any argument turns the feature off.
+
+Thanks to everyone who has contributed suggestions and patches,
+and to those whose GPL'd work has been plundered.  Special thanks
+to Werner Lemberg (margin notes), Tadziu Hoffman (underlining),
+Deri James (pdf integration), Robin Haberkorn (tbl integration, eqn
+extensions, and float management).
+..
+.\" %beginstrip%
+\#
+\# ====================================================================
+\#
+\# Check which version of groff is being run
+.if (\n[.x]\n[.y] < 118) \
+.   ab [mom]: You need GNU troff version 1.18 or higher to run this version of mom.
+\# Check that GNU troff is being run
+.if !\n[.g]=1 \
+.   ab [mom]: The mom macros require that you be running GNU troff.
+.if \n[.C] \
+.   ab [mom]: The groff mom macros do not work in compatibility mode.
+\# Add supplementary styles
+.sty \n[.fp] UL      \"  Ultra Light
+.sty \n[.fp] ULI     \"  Ultra Light Italic
+.sty \n[.fp] ULCD    \"  Ultra Light Condensed
+.sty \n[.fp] ULCDI   \"  Ultra Light Condensed Italic
+.sty \n[.fp] ULEX    \"  Ultra Light Extended
+.sty \n[.fp] ULEXI   \"  Ultra Light Extended Italic
+\#
+.sty \n[.fp] XL      \"  Extra Light
+.sty \n[.fp] XLI     \"  Extra Light Italic
+.sty \n[.fp] XLCD    \"  Extra Light Condensed
+.sty \n[.fp] XLCDI   \"  Extra Light Condensed Italic
+.sty \n[.fp] XLEX    \"  Extra Light Extended
+.sty \n[.fp] XLEXI   \"  Extra Light Extended Italic
+\#
+.sty \n[.fp] TH      \"  Thin
+.sty \n[.fp] THI     \"  Thin Italic
+.sty \n[.fp] THCD    \"  Thin Condensed
+.sty \n[.fp] THCDI   \"  Thin Condensed Italic
+.sty \n[.fp] THEX    \"  Thin Extended
+.sty \n[.fp] THEXI   \"  Thin Extended Italic
+\#
+.sty \n[.fp] L       \"  Light Roman
+.sty \n[.fp] LI      \"  Light Italic
+.sty \n[.fp] LCD     \"  Light Condensed
+.sty \n[.fp] LCDI    \"  Light Condensed Italic
+.sty \n[.fp] LEX     \"  Light Extended
+.sty \n[.fp] LEXI    \"  Light Extended Italic
+\#
+.sty \n[.fp] BK      \"  Book Roman
+.sty \n[.fp] BKI     \"  Book Italic
+.sty \n[.fp] BKCD    \"  Book Condensed
+.sty \n[.fp] BKCDI   \"  Book Condensed Italic
+.sty \n[.fp] BKEX    \"  Book Extended
+.sty \n[.fp] BKEXI   \"  Book Extended Italic
+\#
+.sty \n[.fp] CD      \"  Medium Condensed
+.sty \n[.fp] CDI     \"  Medium Condensed Italic
+.sty \n[.fp] EX      \"  Medium Extended
+.sty \n[.fp] EXI     \"  Medium Extended Italic
+\#
+.sty \n[.fp] DB      \"  DemiBold Roman
+.sty \n[.fp] DBI     \"  DemiBold Italic
+.sty \n[.fp] DBCD    \"  DemiBold Condensed
+.sty \n[.fp] DBCDI   \"  DemiBold Condensed Italic
+.sty \n[.fp] DBEX    \"  DemiBold Extended
+.sty \n[.fp] DBEXI   \"  DemiBold Extended Italic
+\#
+.sty \n[.fp] SB      \"  SemiBold Roman
+.sty \n[.fp] SBI     \"  SemiBold Italic
+.sty \n[.fp] SBCD    \"  SemiBold Condensed
+.sty \n[.fp] SBCDI   \"  SemiBold Condensed Italic
+.sty \n[.fp] SBEX    \"  SemiBold Extended
+.sty \n[.fp] SBEXI   \"  SemiBold Extended Italic
+\#
+.sty \n[.fp] BCD     \"  Bold Condensed
+.sty \n[.fp] BCDI    \"  Bold Condensed Italic
+.sty \n[.fp] BEX     \"  Bold Extended
+.sty \n[.fp] BEXI    \"  Bold Extended Italic
+.sty \n[.fp] BO      \"  Bold Outline
+\#
+.sty \n[.fp] XB      \"  Extra Bold
+.sty \n[.fp] XBI     \"  Extra Bold Italic
+.sty \n[.fp] XBCD    \"  Extra Bold Condensed
+.sty \n[.fp] XBCDI   \"  Extra Bold Condensed Italic
+.sty \n[.fp] XBEX    \"  Extra Bold Extended
+.sty \n[.fp] XBEXI   \"  Extra Bold Extended Italic
+\#
+.sty \n[.fp] UB      \"  Ultra Bold
+.sty \n[.fp] UBI     \"  Ultra Bold Italic
+.sty \n[.fp] UBCD    \"  Ultra Bold Condensed
+.sty \n[.fp] UBCDI   \"  Ultra Bold Condensed Italic
+.sty \n[.fp] UBEX    \"  Ultra Bold Extended
+.sty \n[.fp] UBEXI   \"  Ultra Bold Extended Italic
+\#
+.sty \n[.fp] HV      \"  Heavy
+.sty \n[.fp] HVI     \"  Heavy Italic
+.sty \n[.fp] HVCD    \"  Heavy Condensed
+.sty \n[.fp] HVCDI   \"  Heavy Condensed Italic
+.sty \n[.fp] HVEX    \"  Heavy Extended
+.sty \n[.fp] HVEXI   \"  Heavy Extended Italic
+\#
+.sty \n[.fp] BL      \"  Black
+.sty \n[.fp] BLI     \"  Black Italic
+.sty \n[.fp] BLCD    \"  Black Condensed
+.sty \n[.fp] BLCDI   \"  Black Condensed Italic
+.sty \n[.fp] BLEX    \"  Black Extended
+.sty \n[.fp] BLEXI   \"  Black Extended Italic
+.sty \n[.fp] BLO     \"  Black Outline
+\#
+.sty \n[.fp] XBL     \"  Extra Black
+.sty \n[.fp] XBLI    \"  Extra Black Italic
+.sty \n[.fp] XBLCD   \"  Extra Black
+.sty \n[.fp] XBLCDI  \"  Extra Black
+.sty \n[.fp] XBLEX   \"  Extra Black Italic
+.sty \n[.fp] XBLEXI  \"  Extra Black Italic
+\#
+.sty \n[.fp] UBL     \"  Ultra Black
+.sty \n[.fp] UBLI    \"  Ultra Black Italic
+.sty \n[.fp] UBLCD   \"  Ultra Black Condensed
+.sty \n[.fp] UBLCDI  \"  Ultra Black Condensed Italic
+.sty \n[.fp] UBLEX   \"  Ultra Black Exteneded
+.sty \n[.fp] UBLEXI  \"  Ultra Black Extended Italic
+\#
+.sty \n[.fp] SC      \"  Small Caps Roman
+.sty \n[.fp] SCI     \"  Small Caps Italic
+.sty \n[.fp] SCDB    \"  Small Caps Demibold
+.sty \n[.fp] SCDBI   \"  Small Caps Demibold Italic
+.sty \n[.fp] SCSB    \"  Small Caps Semibold
+.sty \n[.fp] SCSBI   \"  Small Caps Semibold Italic
+\#
+\# Instruct grops to use square linecaps and joins.
+\# This instruction is also executed in DO_B_MARGIN, NEWPAGE, and HEADER
+\#
+.if !n \X'ps: exec 0 setlinejoin'\X'ps: exec 0 setlinecap'
+\#
+\# The following PostScript, provided by Tadziu Hoffmann, permits
+\# no-fail underlining
+\#
+.de ul*ps
+ps: def
+grops begin
+/decornone { grops begin /X { } def /Y { } def /y2 -1 def end } def
+/decorline { grops begin u neg /uld exch def u /ulw exch def
+             /X { currentpoint /y0 exch def /x0 exch def } def
+             /Y { currentpoint /y1 exch def /x1 exch def
+                  drawline /x2 x1 def /y2 y1 def } def end } def
+/drawline { gsave ulw setlinewidth 0 setlinecap x1 y1 uld sub moveto
+            y2 y0 eq { x2 y2 } { x0 y0 } ifelse uld sub lineto stroke
+            grestore } def
+decornone
+/uld 0 def
+/ulw 0 def
+/A { X show Y } def
+/B { 0 SC 3 -1 roll X widthshow Y } def
+/C { 0 exch X ashow Y } def
+/D { 0 exch 0 SC 5 2 roll X awidthshow Y } def
+/E { 0 rmoveto X show Y } def
+/F { 0 rmoveto 0 SC 3 -1 roll X widthshow Y } def
+/G { 0 rmoveto 0 exch X ashow Y } def
+/H { 0 rmoveto 0 exch 0 SC 5 2 roll X awidthshow Y } def
+/I { 0 exch rmoveto X show Y } def
+/J { 0 exch rmoveto 0 SC 3 -1 roll X widthshow Y } def
+/K { 0 exch rmoveto 0 exch X ashow Y } def
+/L { 0 exch rmoveto 0 exch 0 SC 5 2 roll X awidthshow Y } def
+/M { rmoveto X show Y } def
+/N { rmoveto 0 SC 3 -1 roll X widthshow Y } def
+/O { rmoveto 0 exch X ashow Y } def
+/P { rmoveto 0 exch 0 SC 5 2 roll X awidthshow Y } def
+/Q { moveto X show Y } def
+/R { moveto 0 SC 3 -1 roll X widthshow Y } def
+/S { moveto 0 exch X ashow Y } def
+/T { moveto 0 exch 0 SC 5 2 roll X awidthshow Y } def
+end
+..
+\#
+.if !n \Y[ul*ps]
+.if n .color 0
+.nr TOC.RELOCATE 0 \" TOC.RELOCATE is off by default
+.ds PDFHREF.TEXTCOL.DEFAULT 0.0 0.3 0.9
+.nr PDFHREF.VIEW.LEADING.C 3i
+.nr PDFHREF.VIEW.LEADING.T 1i
+.nr PDFHREF.VIEW.LEADING.H \n[PDFHREF.VIEW.LEADING]
+\#
+\# ====================================================================
+\#
+\# TYPESETTING MACROS, STRINGS, AND ALIASES
+\# ========================================
+\#
+\# +++ALIASES+++
+\#
+\# Alias .als as ALIAS, and .aln (number registers) as ALIASN
+\#
+.als      ALIAS           als
+.als      ALIASN          aln
+\#
+\# ALIASES FOR GROFF REQUESTS
+\# --------------------------
+\#
+.ALIAS    MAC             de
+.ALIAS    BR              br
+.ALIAS    SPREAD          brp
+.ALIAS    ESC_CHAR        ec
+.ALIAS    STRING          ds
+.ALIAS    INCLUDE         so
+\#
+\# ALIASES FOR NUMBER REGISTERS
+\# ----------------------------
+\#
+.ALIASN  #PT_SIZE        .ps    \"fractional point size in units
+.ALIASN  #DIVER_DEPTH     dn    \"diversion depth
+.ALIASN  #DIVER_WIDTH     dl    \"diversion width
+.ALIASN  #TRAP_DISTANCE  .t     \"distance to next trap
+.ALIASN  #LEAD           .v     \"line space
+.ALIASN  #PAGE_LENGTH    .p     \"page length
+.ALIASN  #NUM_ARGS       .$     \"number of arguments passed to a macro
+.ALIASN  #INDENT         .i     \"value of current indent
+\#
+\# ====================================================================
+\#
+\# MISCELLANEOUS
+\# =============
+.nr #L_MARGIN \n[.o]  \" Tabs, etc require #L_MARGIN
+.cflags 4 /\[en]      \" So slash and en-dashes get broken
+\#
+\# ====================================================================
+\#
+\# +++PAGE LAYOUT+++
+\#
+\# Macros that control the physical layout of the page: paper size
+\# and margins.
+\#
+\# PAGE WIDTH
+\# ----------
+\# *Argument:
+\#   <width of printer sheet>
+\# *Function:
+\#   Stores user supplied page width in register #PAGE_WIDTH.
+\# *Notes:
+\#   #PAGE_WIDTH is used to establish the default LL (and right margin).
+\#   Requires unit of measure.
+\#
+.MAC PAGEWIDTH END
+.    br
+.    nr #PAGE_WIDTH \\$1
+.    if !r#L_MARGIN .L_MARGIN \\n[.o]
+.    if !r#R_MARGIN .R_MARGIN 1i
+.    if '\\*[.T]'pdf' \X'papersize=\\n[#PAGE_WIDTH]z,\\n[#PAGE_LENGTH]z'\c
+.END
+\#
+\# L_MARGIN
+\# --------
+\# *Argument:
+\#   <offset from page left>
+\# *Function:
+\#   Stores user supplied page offset in register #L_MARGIN.
+\#   Sets .po to user supplied offset.
+\# *Notes:
+\#   Requires unit of measure.
+\#
+.MAC L_MARGIN END
+.    br
+.    nr #L_MARGIN (\\$1)
+.    po \\n[#L_MARGIN]u
+.END
+\#
+\# R_MARGIN
+\# --------
+\# *Argument:
+\#   <width of right margin>
+\# *Function:
+\#   Stores user supplied right margin in register #R_MARGIN.
+\# *Notes:
+\#   This is a pseudo-margin.  Right margin is actually a function of
+\#   line length.  The macro calculates line length from the page offset
+\#   and the value plugged into #R_MARGIN.
+\#
+\#   N.B. -- PAGEWIDTH and L_MARGIN have to be defined before R_MARGIN.
+\#
+\#   Requires unit of measure.
+\#
+.MAC R_MARGIN END
+.    br
+.    nr #R_MARGIN (\\$1)
+.    ll \\n[#PAGE_WIDTH]u-\\n[#L_MARGIN]u-\\n[#R_MARGIN]u
+.    ta \\n[.l]u
+.    nr #L_LENGTH \\n[.l]
+.END
+\#
+\# T_MARGIN
+\# --------
+\# *Argument:
+\#   <distance to advance from top of page>
+\# *Function:
+\#   Stores the user supplied top margin in register #T_MARGIN.
+\#   Advances user supplied depth from the top of the page.
+\# *Notes:
+\#   Requires unit of measure.
+\#
+.MAC T_MARGIN END
+.    nr #T_MARGIN (\\$1)
+.    if !\\n[#DOCS] .sp |\\n[#T_MARGIN]u-1v
+.    wh 0i DO_T_MARGIN
+.END
+\#
+\# B_MARGIN
+\# --------
+\# *Argument:
+\#   <space to leave at the bottom of the page>
+\# *Function:
+\#   Stores the user supplied bottom margin in register #B_MARGIN.
+\# *Notes:
+\#   Requires unit of measure.
+\#
+.MAC B_MARGIN END
+.    br
+.    nr #B_MARGIN (\\$1)
+.    nr #ORIGINAL_B_MARGIN \\n[#B_MARGIN]
+.    nr #B_MARGIN_SET 1
+.    wh -\\n[#B_MARGIN]u DO_B_MARGIN
+.END
+\#
+\# PAGE
+\# ----
+\# *Arguments:
+\#   <pagewidth>  [pagelength [leftmargin [rightmargin [topmargin [bottommargin]]]]]
+\# *Function:
+\#   Page set-up.  Collects arguments and passes them to the appropriate
+\#   macros.
+\# *Notes:
+\#   All arguments after pagewidth are optional, but must appear
+\#   in the order given above.  (User can fill in as much or as
+\#   little as desired.)
+\#
+\#   All arguments require a unit of measure.
+\#
+.MAC PAGE END
+.    br
+.    PAGEWIDTH   \\$1
+.    PAGELENGTH  \\$2
+.    ie '\\$3''  .L_MARGIN \\n[.o]
+.    el          .L_MARGIN \\$3
+.    ie '\\$4''  .R_MARGIN 1i
+.    el          .R_MARGIN \\$4
+.    if !'\\$5'' .T_MARGIN \\$5
+.    if !'\\$6'' .B_MARGIN \\$6
+.END
+\#
+\# gropdf: pass pagelength to postprocessor; no need for -P-p
+\#
+.MAC PAGELENGTH END
+.    pl \\$*
+.    if '\\*[.T]'pdf' \X'papersize=\\n[#PAGE_WIDTH]z,\\n[#PAGE_LENGTH]z'\c
+.END
+\#
+\# =====================================================================
+\#
+\# +++PAGE CONTROL+++
+\#
+\# Generic macros for breaking pages.
+\#
+\# DO_T_MARGIN
+\# -----------
+\# *Argument:
+\#   <none>
+\# *Function:
+\#   Plants the top margin at the top of each page.
+\# *Notes:
+\#   The trap is set in .T_MARGIN or .PAGE
+\#
+.MAC DO_T_MARGIN END
+.    ev T_MARGIN
+.    sp |\\n[#T_MARGIN]u-1v
+.    ev
+.END
+\#
+\# DO_B_MARGIN
+\# -----------
+\# *Argument:
+\#   <none>
+\# *Function:
+\#   Plants the bottom margin at the bottom of each page.
+\# *Notes:
+\#   The trap is set in .B_MARGIN or .PAGE.
+\#
+.MAC DO_B_MARGIN END
+.    nr #T_MARGIN_LEAD_ADJ \\n[#LEAD]-12000
+.    ev B_MARGIN
+.    if !n .nop \X'ps: exec 0 setlinejoin'\X'ps: exec 0 setlinecap'
+.    ie \\n[#DOCS] \
+.       if !\\n[#NEWPAGE] .bp
+.    el .bp
+.    ev
+.END
+\#
+\# NEWPAGE
+\# -------
+\# *Argument:
+\#   <none>
+\# *Function:
+\#   Breaks to a new page.
+\# *Notes:
+\#   If a B_MARGIN has been set, processes that, otherwise, just
+\#   breaks to a new page.
+\#
+.MAC NEWPAGE END
+.    nr #NEWPAGE 1
+.    if \\n[.vpt]=0 .vpt
+.    ie \\n[#NO_BREAK] \{\
+'       br
+.       rr #NO_BREAK
+.    \}
+.    el .br
+.    nr @TOP 1
+.    ie \\n[#B_MARGIN_SET]=1 \{\
+.       ie !\\n[#DOCS]=1 .DO_B_MARGIN
+.       el \{\
+.          if \\n[#COLUMNS]=1 .nr #COL_NUM \\n[#NUM_COLS]
+.          ie !\\n[#FN_DEPTH] \{\
+.             ch FN_OVERFLOW_TRAP
+.             DO_FOOTER
+.             wh -\\n[#FN_OVERFLOW_TRAP_POS]u FN_OVERFLOW_TRAP
+.          \}
+.          el .FOOTER
+.       \}
+.    \}
+.    el 'bp
+.END
+\#
+\# =====================================================================
+\#
+\# +++GENERAL STYLE MACROS+++
+\#
+\# LINE LENGTH
+\# -----------
+\# *Argument:
+\#   <line length>
+\# *Function:
+\#   Stores user supplied line length in register #L_LENGTH.
+\#   Sets .ll to #L_LENGTHu
+\# *Notes:
+\#   Requires unit of measure.
+\#
+.MAC LL END
+.    nr #USER_SET_L_LENGTH 1
+.    ll \\$1
+.    nr #L_LENGTH \\n[.l]
+.    ta \\n[.l]u
+.END
+\#
+\# +++FAMILY AND FONT+++
+\#
+\# FALLBACK FONT
+\# -------------
+\# *Argument:
+\#   <fallback font> [ ABORT | WARN ] | ABORT | WARN
+\# *Function:
+\#   Sets register #ABORT_FT_ERRORS to 1, or defines a fallback font
+\#   called "dummy" at font position 0.
+\# *Notes:
+\#   Calls to non-existent families cause mom to continue processing
+\#   files using the fallback font until a valid family is entered.
+\#
+\#   Calls to non-existent fonts generate warnings.  If ABORT is passed
+\#   to FALLBACK_FONT, mom stops processing files after the warning.
+\#   Otherwise, she continues to process files using the fallback font
+\#   after the warning is issued.  The default fallback font is CR; the
+\#   default for font warnings is to abort.
+\#
+.MAC FALLBACK_FONT END
+.    if \\n[#NUM_ARGS]=1 \{\
+.       if '\\$1'ABORT' .nr #ABORT_FT_ERRORS 1
+.       if '\\$1'WARN' \
+.          if r #ABORT_FT_ERRORS .nr #ABORT_FT_ERRORS 0
+.       if !'\\$1'ABORT' \
+.          if !'\\$1'WARN' .fp 0 dummy \\$1
+.    \}
+.    if \\n[#NUM_ARGS]=2 \{\
+.       fp 0 dummy \\$1
+.       if '\\$2'ABORT' .nr #ABORT_FT_ERRORS 1
+.       if '\\$2'WARN'  .nr #ABORT_FT_ERRORS 0
+.    \}
+.END
+\#
+.FALLBACK_FONT CR ABORT
+\#
+\# FAMILY
+\# ------
+\# *Argument:
+\#   <font family>
+\# *Function:
+\#   Stores user supplied font family in string $FAMILY.  Sets .fam
+\#   to $FAMILY.
+\#
+.MAC FAMILY END
+.    if '\\n[.ev]'COVER_TEXT' .ds $SAVED_DOC_FAM \\n[.fam]
+.    if \\n[#COLLATE] .rm $SAVED_DOC_FAM
+.    ds $FAMILY \\$1
+.    if \\n[#PRINT_STYLE]=1 \{\
+.       fam \\*[$TYPEWRITER_FAM]
+.       return
+.    \}
+.    if \\n[#IGNORE] \{\
+.       fam \\*[$TYPEWRITER_FAM]
+.       return
+.    \}
+.    if (\\n[.x]\\n[.y]\\n[.Y] >= 1192) .ds $SAVED_STYLE \\n[.sty]
+.    ft 0
+.    fam \\*[$FAMILY]
+.    if (\\n[.x]\\n[.y]\\n[.Y] >= 1192) \{\
+.       ft \\*[$SAVED_STYLE]
+.       if !F\\n[.fn] .ft 0
+.    \}
+.    ie \\n[#PRE_COLLATE]=1 .
+.    el \{\
+.       if \\n[#COLLATE]=1 \
+.          if !r#START .ds $DOC_FAM \\*[$FAMILY]
+.    \}
+.END
+\#
+\# FONT
+\# ----
+\# *Argument:
+\#   R | I | B | BI | <other style extension>
+\# *Function:
+\#  Stores user supplied font in $FONT and sets .ft to $FONT.
+\#
+.MAC FT END
+.    ds $FONT \\$1
+.    if \\n[#PRINT_STYLE]=1 \{\
+.       ie '\\$1'I' \{\
+.          if \\n[#UNDERLINE_ITALIC]=1 \{\
+.             UNDERLINE
+.             return
+.          \}
+.          if \\n[#ITALIC_MEANS_ITALIC]=1 \{\
+.             ds $FONT \\$1
+.             ft \\*[$FONT]
+.             return
+.          \}
+.       \}
+.       el .UNDERLINE OFF
+.       return
+.    \}
+.    ft 0
+.    ft \\*[$FONT]
+.    if (\\n[.x]\\n[.y]\\n[.Y] >= 1192) \{\
+.       if '\\n[.sty]'' \{\
+.          if !F\\n[.fn] \{\
+.             if !S\\*[$FONT] \{\
+.                tm1 "[mom]: Font style "\\*[$FONT]" at line \\n[.c] has not been registered.
+.                ie \\n[#ABORT_FT_ERRORS]=0 \
+.                   tm1 "       Continuing to process using fallback font.
+.                el .ab [mom]: Aborting '\\n[.F]' at \\$0, line \\n[.c].
+.             \}
+.             if \\n[.f]=0 \{\
+.                tm1 "[mom]: Either font style "\\*[$FONT]" at line \\n[.c] does not exist in family "\\n[.fam]",
+.                tm1 "       or family "\\n[.fam]" has not been installed.
+.                ie \\n[#ABORT_FT_ERRORS]=0 \
+.                   tm1 "       Continuing to process using fallback font.
+.                el .ab [mom]: Aborting '\\n[.F]' at \\$0, line \\n[.c].
+.             \}
+.          \}
+.       \}
+.    \}
+.END
+\#
+\# POINT SIZE
+\# ----------
+\# *Arguments:
+\#   <point size of type>
+\# *Function:
+\#   Sets point size to user supplied value in scaled points.
+\#   If #AUTO_LEAD is on, resets lead accordingly.
+\# *Notes:
+\#   Must NOT use a unit of measure.
+\#
+.MAC PT_SIZE END
+.    if \\n[#PRINT_STYLE]=1 .return
+.    if \\n[#IGNORE] .return
+.    ps \\$1
+.    nr #PT_SIZE_IN_UNITS \\n[.ps]
+.    ie '\\$0'DOC_PT_SIZE' \{\
+.       if !\\n[#DOCS] .DOC_MACRO_ERROR \\$0
+.       br
+.       nr #NEW_DOC_PT_SIZE \\n[.ps]
+.       if \\n[#DOC_AUTOLEAD] \{\
+.          ie !\\n[#DOC_AUTOLEAD_FACTOR] .nr #AUTOLEADING \\n[#DOC_AUTOLEAD]
+.          el .nr #AUTOLEADING \\n[.ps]*\\n[#DOC_AUTOLEAD]/1000-\\n[.ps]
+.          nr #DOC_LEAD \\n[.ps]+\\n[#AUTOLEADING]
+.          nr #RESET_TRAPS 1
+.       \}
+.    \}
+.    el .if \\n[#AUTO_LEAD] .vs \\n[.ps]u+\\n[#AUTOLEADING]u
+.END
+\#
+\# SIZE (inline)
+\# -------------
+\# *Arguments:
+\#   <point size of type>
+\# *Function:
+\#   Sets point size to user supplied value in scaled points.
+\#   Intended to be called inline with \*[SIZE <n><unit>]
+\# *Notes:
+\#   Can be used with a unit of measure or not.
+\#
+.MAC SIZE END
+\c
+.ps \\$1
+.END
+\#
+\# LEADING
+\# -------
+\# *Argument:
+\#   <leading between lines of text>
+\# *Function:
+\#   Turns off #AUTOLEAD if it's on.
+\#   Sets .vs to user supplied value.
+\# *Notes:
+\#   Does not require unit of measure.  LS automatically turns off AUTOLEAD.
+\#
+.MAC LS END
+.    br
+.    if \\n[#PRINT_STYLE]=1 .return
+.    if \\n[#IGNORE] .return
+.    if \\n[#AUTO_LEAD] \{\
+.       rr #AUTO_LEAD
+.       rr #AUTOLEAD_VALUE
+.       rr #AUTOLEADING
+.    \}
+.    vs \\$1
+.    if \\n[.t]<\\n[.v] 'bp
+.END
+\#
+\# AUTOLEAD
+\# --------
+\# *Argument:
+\#   <leading value to add to #PT_SIZE> [FACTOR]
+\# *Function:
+\#   Stores user supplied auto-lead value in register #AUTOLEAD_VALUE.
+\#   Adds #AUT0LEAD_VALUE to #PT_SIZE when invoked to set leading.
+\#   All subsequent PT_SIZE requests reset the leading in the same way until
+\#   AUTOLEAD is turned off.
+\# *Notes:
+\#   With the optional FACTOR argument, the current point size is
+\#   multiplied by #AUTOLEAD_VALUE/1000 instead of the two being added
+\#   together.
+\#
+.MAC AUTOLEAD END
+.    if \\n[#PRINT_STYLE]=1 .return
+.    if \\n[#IGNORE] .return
+.    nr #AUTO_LEAD 1 \" autolead on or off
+.    nr #AUTOLEAD_VALUE (p;\\$1) \" arg x 1000
+.    ie '\\$2'FACTOR' \{\
+.       if !\\n[#DOCS] .nr #DOC_AUTOLEAD_FACTOR \\n[#AUTOLEAD_VALUE] \" save for DOC_PT_SIZE
+.       nr #AUTOLEADING \\n[.ps]*\\n[#AUTOLEAD_VALUE]/1000-\\n[.ps]
+.    \}
+.    el .nr #AUTOLEADING \\n[#AUTOLEAD_VALUE]
+.    vs \\n[.ps]u+\\n[#AUTOLEADING]u
+.END
+\#
+\# STRINGS FOR INLINE CONTROL OF GENERAL TYPE STYLE
+\# ------------------------------------------------
+.ds ROM  \Ef[R]
+.ds IT   \Ef[I]
+.ds BD   \Ef[B]
+.ds BDI  \Ef[BI]
+.ds PREV \Ef[]
+.ds S    \Es
+\#
+\# =====================================================================
+\#
+\# +++KERNING+++
+\#
+\# AUTOMATIC PAIRWISE KERNING
+\# --------------------------
+\# *Arguments:
+\#   <none> | <anything>
+\# *Function:
+\#   Turns automatic pairwise kerning on or off.
+\#
+.MAC KERN END
+.    ie '\\$1'' \{\
+.       kern
+.       nr #KERN 1
+.    \}
+.    el \{\
+.       kern 0
+.       nr #KERN 0
+.    \}
+.END
+\#
+\# INLINE KERNING AND HORIZONTAL MOVEMENT
+\# --------------------------------------
+\#
+\# Inline kerning provides a simple way to adjust the amount of
+\# space between any two letters.  It's predicated on a unit of
+\# measure "U", which, by default, is 1/36 of the current point
+\# size as returned by \n[.ps]; e.g., if the current point size is
+\# 18, \n[.ps] returns 18000u, therefore U=500u.  Since U remains
+\# proportional relative to the current point size, the amount of
+\# kerning between two letters as expressed in Us remains visually
+\# similar regardless of changes in point size.
+\#
+\# The default value for U may be changed or reset with the
+\# KERN_UNIT macro.
+\#
+.MAC KERN_UNIT END
+.    ie '\\$1'DEFAULT' .nr #KERN_UNIT 36
+.    el .nr #KERN_UNIT \\$1
+.END
+\#
+.nr #KERN_UNIT 36
+.ds BU   \h'-(\En[#PT_SIZE]u/\n[#KERN_UNIT]u*\\$1u)'
+.ds FU   \h'(\En[#PT_SIZE]u/\n[#KERN_UNIT]u*\\$1u)'
+\#
+\# Initialize strings for pre-1.1.3c-style BU and FU
+\#
+.nr #LOOP 0 1
+.while \n+[#LOOP]<37 \{\
+.   ds BU\n[#LOOP] \h'-(\En[#PT_SIZE]u/\n[#KERN_UNIT]u*\n[#LOOP]u)'
+.   ds FU\n[#LOOP] \h'(\En[#PT_SIZE]u/\n[#KERN_UNIT]u*\n[#LOOP]u)'
+.\}
+\#
+\# Horizontal movements
+\# --------------------
+\# BP1...12.75 and FP1...12.75 move backwards or forwards inline by the
+\# specified number of points.
+\#
+.ds BCK  \h'-\\$1'
+.ds FWD  \h'\\$1'
+\#
+.ds BP.25    \h'-.25'
+.ds BP.5     \h'-.5'
+.ds BP.75    \h'-.75'
+.ds BP1      \h'-1p'
+.ds BP1.25   \h'-1.25p'
+.ds BP1.5    \h'-1.5p'
+.ds BP1.75   \h'-1.75p'
+.ds BP2      \h'-2p'
+.ds BP2.25   \h'-2.25p'
+.ds BP2.5    \h'-2.5p'
+.ds BP2.75   \h'-2.75p'
+.ds BP3      \h'-3p'
+.ds BP3.25   \h'-3.25p'
+.ds BP3.5    \h'-3.5p'
+.ds BP3.75   \h'-3.75p'
+.ds BP4      \h'-4p'
+.ds BP4.25   \h'-4.25p'
+.ds BP4.5    \h'-4.5p'
+.ds BP4.75   \h'-4.75p'
+.ds BP5      \h'-5p'
+.ds BP5.25   \h'-5.25p'
+.ds BP5.5    \h'-5.5p'
+.ds BP5.75   \h'-5.75p'
+.ds BP6      \h'-6p'
+.ds BP6.25   \h'-6.25p'
+.ds BP6.5    \h'-6.5p'
+.ds BP6.75   \h'-6.75p'
+.ds BP7      \h'-7p'
+.ds BP7.25   \h'-7.25p'
+.ds BP7.5    \h'-7.5p'
+.ds BP7.75   \h'-7.75p'
+.ds BP8      \h'-8p'
+.ds BP8.25   \h'-8.25p'
+.ds BP8.5    \h'-8.5p'
+.ds BP8.75   \h'-8.75p'
+.ds BP9      \h'-9p'
+.ds BP9.25   \h'-9.25p'
+.ds BP9.5    \h'-9.5p'
+.ds BP9.75   \h'-9.75p'
+.ds BP10     \h'-10p'
+.ds BP10.25  \h'-10.25p'
+.ds BP10.5   \h'-10.5p'
+.ds BP10.75  \h'-10.75p'
+.ds BP11     \h'-11p'
+.ds BP11.25  \h'-11.25p'
+.ds BP11.5   \h'-11.5p'
+.ds BP11.75  \h'-11.75p'
+.ds BP12     \h'-12p'
+.ds BP12.25  \h'-12.25p'
+.ds BP12.5   \h'-12.5p'
+.ds BP12.75  \h'-12.75p'
+\#
+.ds FP.25    \h'.25'
+.ds FP.5     \h'.5'
+.ds FP.75    \h'.75'
+.ds FP1      \h'1p'
+.ds FP1.25   \h'1.25p'
+.ds FP1.5    \h'1.5p'
+.ds FP1.75   \h'1.75p'
+.ds FP2      \h'2p'
+.ds FP2.25   \h'2.25p'
+.ds FP2.5    \h'2.5p'
+.ds FP2.75   \h'2.75p'
+.ds FP3      \h'3p'
+.ds FP3.25   \h'3.25p'
+.ds FP3.5    \h'3.5p'
+.ds FP3.75   \h'3.75p'
+.ds FP4      \h'4p'
+.ds FP4.25   \h'4.25p'
+.ds FP4.5    \h'4.5p'
+.ds FP4.75   \h'4.75p'
+.ds FP5      \h'5p'
+.ds FP5.25   \h'5.25p'
+.ds FP5.5    \h'5.5p'
+.ds FP5.75   \h'5.75p'
+.ds FP6      \h'6p'
+.ds FP6.25   \h'6.25p'
+.ds FP6.5    \h'6.5p'
+.ds FP6.75   \h'6.75p'
+.ds FP7      \h'7p'
+.ds FP7.25   \h'7.25p'
+.ds FP7.5    \h'7.5p'
+.ds FP7.75   \h'7.75p'
+.ds FP8      \h'8p'
+.ds FP8.25   \h'8.25p'
+.ds FP8.5    \h'8.5p'
+.ds FP8.75   \h'8.75p'
+.ds FP9      \h'9p'
+.ds FP9.25   \h'9.25p'
+.ds FP9.5    \h'9.5p'
+.ds FP9.75   \h'9.75p'
+.ds FP10     \h'10p'
+.ds FP10.25  \h'10.25p'
+.ds FP10.5   \h'10.5p'
+.ds FP10.75  \h'10.75p'
+.ds FP11     \h'11p'
+.ds FP11.25  \h'11.25p'
+.ds FP11.5   \h'11.5p'
+.ds FP11.75  \h'11.75p'
+.ds FP12     \h'12p'
+.ds FP12.25  \h'12.25p'
+.ds FP12.5   \h'12.5p'
+.ds FP12.75  \h'12.75p'
+\#
+\# WHOLE LINE (TRACK) KERNING
+\# --------------------------
+\# *Argument:
+\#   <amount of track kerning>
+\# *Function:
+\#   Invokes .tkf (track kerning) for the current font with
+\#   1 as both the upper and lower point size limits, so that
+\#   the value entered by the user applies regardless of point
+\#   size.  RW ("Reduce Whitespace") reduces the amount of space
+\#   between all characters by an equal amount.  EW ("Extra
+\#   Whitespace") increases the amount of space.
+\# *Notes:
+\#   Decimal values are acceptable.
+\#
+\# A value of 1 will produce an unacceptably tight or loose line
+\# at most text point sizes; therefore, effective use of RW and
+\# EW is in the fractional range below 1.
+\#
+\# \n[.f] holds the current font number, which is acceptable to .tkf.
+\#
+\# RW and EW must be reset to 0 to cancel their effect on subsequent
+\# output lines.
+\#
+.MAC RW END
+.    if \\n[#BR_AT_LINE_KERN] \{\
+.       ie \\n[#JUSTIFY]=1 .brp
+.       el .br
+.    \}
+.    rr #EW
+.    rm $EW
+.    nr #RW 1
+.    ds $RW \\$1
+.    tkf \\n[.f] 1 -\\$1 1 -\\$1
+.END
+\#
+.MAC EW END
+.    if \\n[#BR_AT_LINE_KERN] \{\
+.       ie \\n[#JUSTIFY]=1 .brp
+.       el .br
+.    \}
+.    rr #RW
+.    rm $RW
+.    nr #EW 1
+.    ds $EW \\$1
+.    tkf \\n[.f] 1 \\$1 1 \\$1
+.END
+\#
+\# BREAK AT LINE KERN
+\# ------------------
+\# *Arguments:
+\#   toggle
+\# *Function:
+\#   Enables/disables .br's before .RW and .EW
+\# *Notes:
+\#   Mostly, users will want .br's before any kind of line kerning, but
+\#   there may be cases where they don't.  BR_AT_LINE_KERN is off by
+\#   default and must be invoked explicitly.
+\#
+.MAC BR_AT_LINE_KERN END
+.    ie '\\$1'' .nr #BR_AT_LINE_KERN  1
+.    el .rr #BR_AT_LINE_KERN
+.END
+\#
+\# =====================================================================
+\#
+\# +++HYPHENATION+++
+\#
+\# AUTO HYPHENATION
+\# ----------------
+\# *Arguments:
+\#   <none> | <anything> | DEFAULT
+\#                 or
+\#   LINES <n> | MARGIN <n> | SPACE <n>
+\# *Function:
+\#   Turns auto hyphenation on or off, resets the hyphenation style
+\#   to default, or permits the setting of various hyphenation
+\#   parameters.
+\# *Notes:
+\#   HY, by itself, defaults to .hy 14, i.e. no hyphens after the
+\#   first two or before the last two characters of a word, and no
+\#   hyphenation of the last line prior to a trap (e.g., at the
+\#   bottom of a page).
+\#
+\#   HY DEFAULT resets the hyphenation style to .hy 14 (see
+\#   above) if that behaviour is desired after changes have been
+\#   made to LINES, MARGIN, or SPACE.
+\#
+\#   HY LINES <n> sets the number of allowable consecutive hyphenated lines.
+\#
+\#   HY MARGIN <n> sets the amount of space (ipPcm) allowed at the end
+\#   of a line in QUAD mode before hyphenation is tripped (e.g. if there's
+\#   only 6 points left, groff won't try to hyphenate the next word).
+\#
+\#   HY SPACE sets the amount of extra interword space (ipPcm) that can
+\#   be added in JUSTIFY mode to prevent a line from being hyphenated.
+\#
+.MAC HY END
+.    ie '\\$1'' \{\
+.       hy 14
+.       if \\n[#LINES]  .hlm \\n[#LINES]
+.       if \\n[#MARGIN] .hym \\n[#MARGIN]]
+.       if \\n[#SPACE]  .hys \\n[#SPACE]
+.       nr #HYPHENATE 1
+.    \}
+.    el \{\
+.       if !'\\$1'LINES' \{\
+.          nh
+.          nr #HYPHENATE 0
+.       \}
+.       if !'\\$1'MARGIN' \{\
+.          nh
+.          nr #HYPHENATE 0
+.       \}
+.       if !'\\$1'SPACE' \{\
+.          nh
+.          nr #HYPHENATE 0
+.       \}
+.       if !'\\$1'DEFAULT' \{\
+.          nh
+.          nr #HYPHENATE 0
+.       \}
+.       if '\\$1'LINES'  \{\
+.          hlm \\$2
+.          nr #HY_LINES \\$2
+.       \}
+.       if '\\$1'MARGIN' \{\
+.          hym \\$2
+.          nr #HY_MARGIN \\$2
+.       \}
+.       if '\\$1'SPACE'  \{\
+.          hys \\$2
+.          nr #HY_SPACE \\$2
+.       \}
+.       if '\\$1'DEFAULT' \{\
+.          hlm -1
+.          hym 0
+.          hys 0
+.          rr #HY_LINES
+.          rr #HY_SPACE
+.          rr #HY_MARGIN
+.       \}
+.    \}
+.END
+\#
+\# HYPHENATION PARAMETERS
+\# ----------------------
+\# *Arguments:
+\#   <# of lines> | <size of margin> | <amount of interword space>
+\# *Function:
+\#   Allows user to specify .HY LINES, MARGIN, and SPACE with a single command.
+\#
+.MAC HY_SET END
+.    nr #HY_SET 1
+.    hlm \\$1
+.    hym \\$2
+.    hys \\$3
+.END
+\#
+\# =====================================================================
+\#
+\# +++VERTICAL SPACING+++
+\#
+\# ADVANCE LEAD
+\# ------------
+\# *Argument:
+\#   <user supplied lead to advance below current baseline>
+\# *Function:
+\#   Creates or modifies register #ALD.  Adds user supplied lead
+\#   below current baseline.
+\# *Notes:
+\#   Requires a unit of measure.
+\#
+.MAC ALD END
+.    br
+.    if '\\$0'ALD' \{\
+.       nr #ALD (u;\\$1)
+.       sp \\n[#ALD]u
+.    \}
+.    if '\\$0'ADD_SPACE' \{\
+.       vpt 0
+.       nr #ALD (u;\\$1)
+.       rs
+.       nop \&
+.       sp |\\n[#T_MARGIN]u-1v+\\n[#ALD]u
+.       rr @TOP
+.       nr #SPACE_ADDED 1
+.       vpt
+.    \}
+.    if '\\$0'SPACE' .sp \\$1
+.    if '\\$0'SP'    .sp \\$1
+.END
+\#
+\# REVERSE LEAD
+\# ------------
+\# *Argument:
+\#   <user supplied lead to reverse above current baseline>
+\# *Function:
+\#   Creates or modifies register #RLD.  Reverses user supplied
+\#   lead above current baseline.
+\# *Notes:
+\#   Requires a unit of measure.
+\#
+.MAC RLD END
+.    br
+.    nr #RLD (u;\\$1)
+.    sp -\\n[#RLD]u
+.END
+\#
+\# ALD/RLD STRINGS
+\# ---------------
+\# The strings \*[ALD.25]...\*[ALD12.75] and their corresponding
+\# \*[RLD] forms have been left in for backward compatibility with
+\# documents created using mom-1.1.3c or earlier.  The preferred methods
+\# of advancing and reversing on the page inline are \*[UP <n><unit>]
+\# and \*[DOWN <n><unit>].
+\#
+.ds DOWN      \v'\\$1'
+.ds UP        \v'-\\$1'
+\#
+.ds ALD.25    \v'.25p'
+.ds ALD.5     \v'.5p'
+.ds ALD.75    \v'.75p'
+.ds ALD1      \v'1p'
+.ds ALD1.25   \v'1.25p'
+.ds ALD1.5    \v'1.5p'
+.ds ALD1.75   \v'1.75p'
+.ds ALD2      \v'2p'
+.ds ALD2.25   \v'2.25p'
+.ds ALD2.5    \v'2.5p'
+.ds ALD2.75   \v'2.75p'
+.ds ALD3      \v'3p'
+.ds ALD3.25   \v'3.25p'
+.ds ALD3.5    \v'3.5p'
+.ds ALD3.75   \v'3.75p'
+.ds ALD4      \v'4p'
+.ds ALD4.25   \v'4.25p'
+.ds ALD4.5    \v'4.5p'
+.ds ALD4.75   \v'4.75p'
+.ds ALD5      \v'5p'
+.ds ALD5.25   \v'5.25p'
+.ds ALD5.5    \v'5.5p'
+.ds ALD5.75   \v'5.75p'
+.ds ALD6      \v'6p'
+.ds ALD6.25   \v'6.25p'
+.ds ALD6.5    \v'6.5p'
+.ds ALD6.75   \v'6.75p'
+.ds ALD7      \v'7p'
+.ds ALD7.25   \v'7.25p'
+.ds ALD7.5    \v'7.5p'
+.ds ALD7.75   \v'7.75p'
+.ds ALD8      \v'8p'
+.ds ALD8.25   \v'8.25p'
+.ds ALD8.5    \v'8.5p'
+.ds ALD8.75   \v'8.75p'
+.ds ALD9      \v'9p'
+.ds ALD9.25   \v'9.25p'
+.ds ALD9.5    \v'9.5p'
+.ds ALD9.75   \v'9.75p'
+.ds ALD10     \v'10p'
+.ds ALD10.25  \v'10.25p'
+.ds ALD10.5   \v'10.5p'
+.ds ALD10.75  \v'10.75p'
+.ds ALD11     \v'11p'
+.ds ALD11.25  \v'11.25p'
+.ds ALD11.5   \v'11.5p'
+.ds ALD11.75  \v'11.75p'
+.ds ALD12     \v'12p'
+.ds ALD12.25  \v'12.5p'
+.ds ALD12.5   \v'12.5p'
+.ds ALD12.75  \v'12.75p'
+\#
+.ds RLD.25    \v'-.25p'
+.ds RLD.5     \v'-.5p'
+.ds RLD.75    \v'-.75p'
+.ds RLD1      \v'-1p'
+.ds RLD1.25   \v'-1.25p'
+.ds RLD1.5    \v'-1.5p'
+.ds RLD1.75   \v'-1.75p'
+.ds RLD2      \v'-2p'
+.ds RLD2.25   \v'-2.25p'
+.ds RLD2.5    \v'-2.5p'
+.ds RLD2.75   \v'-2.75p'
+.ds RLD3      \v'-3p'
+.ds RLD3.25   \v'-3.25p'
+.ds RLD3.5    \v'-3.5p'
+.ds RLD3.75   \v'-3.75p'
+.ds RLD4      \v'-4p'
+.ds RLD4.25   \v'-4.25p'
+.ds RLD4.5    \v'-4.5p'
+.ds RLD4.75   \v'-4.75p'
+.ds RLD5      \v'-5p'
+.ds RLD5.25   \v'-5.25p'
+.ds RLD5.5    \v'-5.5p'
+.ds RLD5.75   \v'-5.75p'
+.ds RLD6      \v'-6p'
+.ds RLD6.25   \v'-6.25p'
+.ds RLD6.5    \v'-6.5p'
+.ds RLD6.75   \v'-6.75p'
+.ds RLD7      \v'-7p'
+.ds RLD7.25   \v'-7.25p'
+.ds RLD7.5    \v'-7.5p'
+.ds RLD7.75   \v'-7.75p'
+.ds RLD8      \v'-8p'
+.ds RLD8.25   \v'-8.25p'
+.ds RLD8.5    \v'-8.5p'
+.ds RLD8.75   \v'-8.75p'
+.ds RLD9      \v'-9p'
+.ds RLD9.25   \v'-9.25p'
+.ds RLD9.5    \v'-9.5p'
+.ds RLD9.75   \v'-9.75p'
+.ds RLD10     \v'-10p'
+.ds RLD10.25  \v'-10.25p'
+.ds RLD10.5   \v'-10.5p'
+.ds RLD10.75  \v'-10.75p'
+.ds RLD11     \v'-11p'
+.ds RLD11.25  \v'-11.25p'
+.ds RLD11.5   \v'-11.5p'
+.ds RLD11.75  \v'-11.75p'
+.ds RLD12     \v'-12p'
+.ds RLD12.25  \v'-12.5p'
+.ds RLD12.5   \v'-12.5p'
+.ds RLD12.75  \v'-12.75p'
+\#
+\# =====================================================================
+\#
+\# +++REFINEMENTS+++
+\#
+\# AUTOMATIC LIGATURES
+\# -------------------
+\# *Arguments:
+\#   <none> | <anything>
+\# *Function:
+\#   Turns automatic ligature generation on or off.
+\# *Notes:
+\#   Ligatures may be supplied manually with \[fi], \[fl], etc.
+\#
+.MAC LIGATURES END
+.    ie '\\$1'' \{\
+.       lg
+.       nr #LIGATURES 1
+.    \}
+.    el \{\
+.       lg 0
+.       nr #LIGATURES 0
+.    \}
+.END
+\#
+\# SMARTQUOTES
+\# -----------
+\# *Arguments:
+\#   [ ,, ] | [ << ] | [ >> ] | <anything>
+\#   or
+\#   [ DA | DE | EN | ES | FR | IT | NL | NO | PT | SV ] | <anything>
+\# *Function:
+\#   Turns smartquotes on (optionally with a quoting style from the
+\#   argument list, or off).
+\#   If no quoting style is given, then EN (English) is used by default.
+\#   If no quoting style is given and smart quotes have been turned off
+\#   previously, the old quoting style will be restored.
+\# *Notes:
+\#   The " character is read outside the macro when mom is
+\#   processed.  The strings for open/close ($QUOTE<n>) are then
+\#   defined in the macro.
+\#
+.char " \\*[$QUOTE\\n[#OPEN_CLOSE]]\R'#OPEN_CLOSE (1-\\n[#OPEN_CLOSE])'
+.nr #SQ_ON 0
+\#
+.MAC SMARTQUOTES END
+.\" First " will be translated to $QUOTE0
+.    nr #OPEN_CLOSE 0
+.    if '\\$1'' \{\
+.       if !'\\*[$RESTORE_SQ]'' \{\
+.          SMARTQUOTES \\*[$RESTORE_SQ]
+.          return
+.       \}
+.\" Default smart quotes (English)
+.       ds $QUOTE0 \[lq]
+.       ds $QUOTE1 \[rq]
+.       ds $RESTORE_SQ EN
+.       nr #SQ_ON 1
+.       return
+.    \}
+.    if '\\$1',,' \{\
+.       ds $QUOTE0 \[Bq]
+.       ds $QUOTE1 \[lq]
+.       ds $RESTORE_SQ \\$1
+.       nr #SQ_ON 1
+.       return
+.    \}
+.    if '\\$1'<<' \{\
+.       ds $QUOTE0 \[Fo]
+.       ds $QUOTE1 \[Fc]
+.       ds $RESTORE_SQ \\$1
+.       nr #SQ_ON 1
+.       return
+.    \}
+.    if '\\$1'>>' \{\
+.       ds $QUOTE0 \[Fc]
+.       ds $QUOTE1 \[Fo]
+.       ds $RESTORE_SQ \\$1
+.       nr #SQ_ON 1
+.       return
+.    \}
+.    if '\\$1'DA' \{\
+.       ds $QUOTE0 \[Fc]
+.       ds $QUOTE1 \[Fo]
+.       ds $RESTORE_SQ \\$1
+.       nr #SQ_ON 1
+.       return
+.    \}
+.    if '\\$1'DE' \{\
+.       ds $QUOTE0 \[Bq]
+.       ds $QUOTE1 \[lq]
+.       ds $RESTORE_SQ \\$1
+.       nr #SQ_ON 1
+.       return
+.    \}
+.    if '\\$1'EN' \{\
+.       ds $QUOTE0 \[lq]
+.       ds $QUOTE1 \[rq]
+.       ds $RESTORE_SQ \\$1
+.       nr #SQ_ON 1
+.       return
+.    \}
+.    if '\\$1'ES' \{\
+.       ds $QUOTE0 \[lq]
+.       ds $QUOTE1 \[rq]
+.       ds $RESTORE_SQ \\$1
+.       nr #SQ_ON 1
+.       return
+.    \}
+.    if '\\$1'FR' \{\
+.       ds $QUOTE0 \[Fo]\|
+.       ds $QUOTE1 \|\[Fc]
+.       ds $RESTORE_SQ \\$1
+.       nr #SQ_ON 1
+.       return
+.    \}
+.    if '\\$1'IT' \{\
+.       ds $QUOTE0 \[Fo]\|
+.       ds $QUOTE1 \|\[Fc]
+.       ds $RESTORE_SQ \\$1
+.       nr #SQ_ON 1
+.       return
+.    \}
+.    if '\\$1'NL' \{\
+.       ds $QUOTE0 \[rq]
+.       ds $QUOTE1 \[rq]
+.       ds $RESTORE_SQ \\$1
+.       nr #SQ_ON 1
+.       return
+.    \}
+.    if '\\$1'NO' \{\
+.       ds $QUOTE0 \[Fo]
+.       ds $QUOTE1 \[Fc]
+.       ds $RESTORE_SQ \\$1
+.       nr #SQ_ON 1
+.       return
+.    \}
+.    if '\\$1'PT' \{\
+.       ds $QUOTE0 \[Fo]
+.       ds $QUOTE1 \[Fc]
+.       ds $RESTORE_SQ \\$1
+.       nr #SQ_ON 1
+.       return
+.    \}
+.    if '\\$1'SV' \{\
+.       ds $QUOTE0 \[Fc]
+.       ds $QUOTE1 \[Fc]
+.       ds $RESTORE_SQ \\$1
+.       nr #SQ_ON 1
+.       return
+.    \}
+.\" None of the above -> turn smartquotes off
+.    ds $QUOTE0 \[dq]
+.    ds $QUOTE1 \[dq]
+.    nr #SQ_ON 0
+.END
+\#
+.ds $QUOTE0 \[lq]
+.ds $QUOTE1 \[rq]
+\#
+\# Strings for foot and inch marks
+\#
+.ds FOOT \[fm]
+.ds INCH \[fm]\[fm]
+\#
+\# =====================================================================
+\#
+\# +++LINE BREAKS+++
+\#
+\# NO-SPACE BREAK
+\# --------------
+\# *Argument:
+\#   <none>
+\# *Function:
+\#   Breaks a line without advancing.
+\# *Notes:
+\#   EL is the mnemonic used on older, dedicated typesetting machines
+\#   to indicate "process the line, without advancing the galley
+\#   medium."  It stands for End Line.
+\#
+\#   The \c inline must be appended to the end of input lines when in
+\#   nofill mode; in fill modes, the \c inline must not be used.
+\#
+.MAC EL END
+.    TRAP OFF
+.    if \\n[#PSEUDO_FILL]=1 \&
+.    br
+.    sp -1v
+.    TRAP
+.END
+\#
+\# An inline escape to accomplish the same thing.
+\# Preferable, since it works with filled and non-filled copy and
+\# doesn't require the user to remember whether to use (or not use)
+\# \c.
+\#
+.ds B \h'|0'\R'#NO_ADVANCE 1'\c
+\#
+\# =====================================================================
+\#
+\# +++FILLING/QUADDING/JUSTIFYING+++
+\#
+\# JUSTIFY
+\# -------
+\# *Argument:
+\#   <none>
+\# *Function:
+\#   Turns fill on and sets .ad to b.
+\# *Notes:
+\#   Justifies text left and right.
+\#
+.MAC JUSTIFY END
+.    if \\n[#TAB_ACTIVE]=0 \{\
+.       nr #QUAD 1
+.       ds $RESTORE_QUAD_VALUE \\*[$QUAD_VALUE]
+.    \}
+'    ce 0
+.    QUAD J
+.    if \\n[#PRINT_STYLE]=1 .QUAD L
+.    nr #PSEUDO_FILL 0
+.END
+\#
+\# QUAD
+\# ----
+\# *Arguments:
+\#   L | LEFT | R | RIGHT | C | CENTER/CENTRE
+\# *Function:
+\#   Turns fill on and sets .ad to l, r, or c.
+\# *Notes:
+\#   Terminology is a problem here.  Some people call quad left
+\#   left justified, flush left, or flush left/rag right (and the
+\#   reverse for quad right).  Quad center is sometimes called rag
+\#   both.  For our purposes, all "quad" modes mean that groff fill
+\#   mode is enabled.
+\#
+.MAC QUAD END
+.    if \\n[#COVERTEXT_PP] \
+.       ds $RESTORE_DOC_QUAD \\*[$QUAD_VALUE]
+.    ds $QUAD_VALUE \\$1
+.    if \\n[#TAB_ACTIVE]=0 \{\
+.       nr #QUAD 1
+.       ds $RESTORE_QUAD_VALUE \\*[$QUAD_VALUE]
+.    \}
+'    ce 0
+'    fi
+.    if '\\*[$QUAD_VALUE]'L' \{\
+.       nr #JUSTIFY 0
+.       ad l
+.    \}
+.    if '\\*[$QUAD_VALUE]'LEFT' \{\
+.       nr #JUSTIFY 0
+.       ad l
+.    \}
+.    if '\\*[$QUAD_VALUE]'R' \{\
+.       nr #JUSTIFY 0
+.       ad r
+.    \}
+.    if '\\*[$QUAD_VALUE]'RIGHT' \{\
+.       nr #JUSTIFY 0
+.       ad r
+.    \}
+.    if '\\*[$QUAD_VALUE]'C' \{\
+.       nr #JUSTIFY 0
+.       ad c
+.    \}
+.    if '\\*[$QUAD_VALUE]'CENTER' \{\
+.       nr #JUSTIFY 0
+.       ad c
+.    \}
+.    if '\\*[$QUAD_VALUE]'CENTRE' \{\
+.       nr #JUSTIFY 0
+.       ad c
+.    \}
+.    if '\\*[$QUAD_VALUE]'J' \{\
+.       nr #JUSTIFY 1
+.       ad b
+.    \}
+.    if '\\*[$QUAD_VALUE]'JUSTIFY' \{\
+.       nr #JUSTIFY 1
+.       ad b
+.    \}
+.    nr #PSEUDO_FILL 0
+.END
+\#
+\# LEFT, RIGHT, AND CENTER
+\# -----------------------
+\# The purpose of these macros is to allow the user to enter lines
+\# of text that will be quadded LRC without having to stick .BR
+\# or .br between lines.  For the sake of consistency, all three
+\# appear to behave similarly (from the point of view of the user),
+\# although the underlying primitives don't.  For this reason, LEFT,
+\# RIGHT, and CENTER must be followed by .QUAD [L R C J] or .JUSTIFY
+\# to restore text to fill mode.
+\#
+\# LEFT
+\# ----
+\# *Argument:
+\#   <none>
+\# *Function:
+\#   Turns fill mode off.  Allows user to quad lines left without
+\#   requiring the .BR or .br macro.
+\# *Notes:
+\#   LEFT simply turns fill off.  Lines that exceed the current LL
+\#   will not be broken.  Note that this behaviour differs from the
+\#   RIGHT and CENTER macros.
+\#
+.MAC LEFT END
+.    if \\n[#TAB_ACTIVE]=0 \{\
+.       rr #QUAD
+.       ds $RESTORE_QUAD_VALUE LEFT
+.    \}
+.    ce 0
+.    nf
+.    nr #PSEUDO_FILL 1
+.\" Fix for a little conflict with DOCTYPE LETTER
+.    if '\\n[.z]'LETTERHEAD1' .rr #DATE_FIRST
+.END
+\#
+\# RIGHT
+\# -----
+\# *Argument:
+\#   <none>
+\# *Function:
+\#   Turns fill on.  Allows user to quad lines right without
+\#   requiring the .BR or .br macro.
+\# *Notes:
+\#   Lines that exceed the current LL will be broken, with the excess
+\#   text quadded right.
+\#
+.MAC RIGHT END
+.    if \\n[#TAB_ACTIVE]=0 \{\
+.       rr #QUAD
+.       ds $RESTORE_QUAD_VALUE RIGHT
+.    \}
+.    nf
+.    rj 100000
+.    nr #PSEUDO_FILL 1
+.END
+\#
+\# CENTER
+\# ------
+\# *Argument:
+\#   <none>
+\# *Function:
+\#   Turns fill on.  Allows user to center lines without
+\#   requiring the .BR or .br macro.
+\# *Notes:
+\#   Lines that exceed the current LL will be broken, with the excess
+\#   text centered.
+\#
+.MAC CENTER END
+.    if \\n[#TAB_ACTIVE]=0 \{\
+.       rr #QUAD
+.       ds $RESTORE_QUAD_VALUE CENTER
+.    \}
+.    nf
+.    ce 100000
+.    nr #PSEUDO_FILL 1
+.END
+\#
+\# =====================================================================
+\#
+\# +++TABS+++
+\#
+\# There are two different kinds of tabs: typesetting tabs and
+\# string tabs.
+\#
+\# Typesetting tabs are set with TAB_SET, which requires a tab number,
+\# an indent (offset) from the left margin and a length (optionally
+\# with a quad direction and an instruction to fill lines).  After tabs
+\# are set with TAB_SET, they are called with .TAB n, where "n"
+\# corresponds to the number passed to TAB_SET as a valid tab number.
+\#
+\# String tabs allow the user to mark off tab positions inline.  Tab
+\# indents and lengths are calculated from the beginning and end
+\# positions of the marks.  Up to 19 string tabs may be created,
+\# numbered 1-19.  Once created, they are called with .TAB n,
+\# just like typesetting tabs.
+\#
+\# Setting up string tabs is a two-step procedure.  First, the user
+\# enters an input line in which s/he wants to mark off string tabs.
+\# The beginning of a tab is marked with \*[STn], where "n" is
+\# the desired number of the tab.  The end of the the tab is marked
+\# with \*[STnX].  All ST's must have a matching STX.  String tabs
+\# may be nested.
+\#
+\# Next, the user invokes .ST n for every string tab defined, and
+\# optionally passes quad information to it.  That done, string tabs
+\# can be called just like typesetting tabs.
+\#
+\# Strings for string tab inlines
+\# ------------------------------
+\# Initialize string tab markers numbered 1 to 19.
+\#
+.nr #LOOP 0 1
+.while \n+[#LOOP]<20 \{\
+.   ds ST\n[#LOOP] \Ek[#ST\n[#LOOP]_OFFSET]
+.\}
+\#
+.nr #LOOP 0 1
+.while \n+[#LOOP]<20 \{\
+.   ds ST\n[#LOOP]X \Ek[#ST\n[#LOOP]_MARK]
+.\}
+.rr #LOOP
+\#
+\# These are reserved ST numbers for internal use
+.ds ST100  \Ek[#ST100_OFFSET]
+.ds ST100X \Ek[#ST100_MARK]
+.ds ST101  \Ek[#ST101_OFFSET]
+.ds ST101X \Ek[#ST101_MARK]
+.ds ST102  \Ek[#ST102_OFFSET]
+.ds ST102X \Ek[#ST102_MARK]
+.ds ST103  \Ek[#ST103_OFFSET]
+.ds ST103X \Ek[#ST103_MARK]
+\#
+\# QUAD AND SET STRING TABS
+\# ------------------------
+\# *Arguments:
+\#   <stringtab number>  L | R | C | J  [QUAD]
+\# *Function:
+\#   Creates strings $ST<#>_QUAD_DIR and $ST<#>_FILL, then sets up a
+\#   tab based on the collected information.
+\# *Notes:
+\#   Like TAB_SET, ST invoked without a quad direction will default to LEFT.
+\#   If lines should be filled and quadded, use the optional argument QUAD.
+\#   N.B. -- indents *must* be turned off before setting string tabs
+\#   inside .PAD
+\#
+.MAC ST END
+.    ds $ST\\$1_QUAD_DIR \\$2
+.    if \\n[#NUM_ARGS]=3 .ds $ST\\$1_FILL QUAD
+.    nr #ST\\$1_LENGTH \\n[#ST\\$1_MARK]-\\n[#ST\\$1_OFFSET]
+.    ie \\n[#IN_TAB] \
+.       TAB_SET \\$1 \\n[#ST\\$1_OFFSET]u+\\n[#ST_OFFSET]u \
+          \\n[#ST\\$1_LENGTH]u \\*[$ST\\$1_QUAD_DIR] \\*[$ST\\$1_FILL]
+.    el \
+.       TAB_SET \\$1 \\n[#ST\\$1_OFFSET]u \\n[#ST\\$1_LENGTH]u \
+          \\*[$ST\\$1_QUAD_DIR] \\*[$ST\\$1_FILL]
+.END
+\#
+\# TAB SET
+\# -------
+\# *Arguments:
+\#   <n>  ident(ipPcm)  length(ipPcm)  [L | R | C | J [QUAD]]
+\# *Function:
+\#   Creates macros TABn and TAB n, where "n" is any arbitrary number.
+\#   TABn is a typesetting tab (i.e. a tab defined as an indent
+\#   from the page left offset plus a line length.)
+\# *Notes:
+\#   n      = arbitrary digit to identify the tab
+\#   indent = indent from left margin; unit of measure required
+\#   length = length of tab (unit of measure required; can be
+\#            \w'<string>'u--if more than one word in string, surround
+\#            with double quotes "\w'<three word string>'"
+\#   LRCJ   = quad for tab (left, right, center, justified)
+\#            If option QUAD afterwards is not given, quad is line for line
+\#            (no fill mode), meaning that there's no need for .BR or .br
+\#            between lines.
+\#   QUAD   = fill tab (so it behaves as if .QUAD LRC or .JUSTIFY
+\#            had been given).
+\#
+\#   N.B. -- indents *must* be turned off before setting tabs
+\#
+\# Tabs are not columnar in behaviour.  .TN and \*[TB+] permit
+\# bottom-line to bottom-line tab movement.
+\#
+\# When resetting tabs, .TQ must be invoked before .TAB_SET.
+\#
+\# Indents are turned off automatically whenever a new tab is called
+\# with TAB <n>.
+\#
+\# Generally, it's a good idea to make sure all indents are off
+\# before setting tabs.
+\#
+.MAC TAB_SET END
+.    br
+.    nr #TAB_NUMBER \\$1
+.    ds $CURRENT_TAB \\n[#TAB_NUMBER]
+.    nr #TAB_OFFSET (\\$2)
+.    nr #TAB_LENGTH (\\$3)
+.    MAC TAB\\n[#TAB_NUMBER]
+.        if !\\\\n[#TB+]=1 .br
+.        if \\\\n[#TB+]=1 \{\
+.           EL
+.           vpt 0
+.           rr #TB+
+.        \}
+.        in 0
+.        nr #TAB_ACTIVE 1
+.        nr #CURRENT_TAB \\n[#TAB_NUMBER]
+.        ds $CURRENT_TAB \\*[$CURRENT_TAB]
+.        nr #TAB_OFFSET\\*[$CURRENT_TAB] \\n[#TAB_OFFSET]
+.        nr #ST_OFFSET \\n[#TAB_OFFSET]
+.        ie !'\\\\n[.z]'' \
+\!.         po \\\\n[#L_MARGIN]u+\\\\n[#TAB_OFFSET\\\\*[$CURRENT_TAB]]u
+.        el \
+.           po \\\\n[#L_MARGIN]u+\\\\n[#TAB_OFFSET\\\\*[$CURRENT_TAB]]u
+.        ll \\n[#TAB_LENGTH]u
+.        ta \En[.l]u
+.        ie '\\$5'QUAD' \{\
+.           if '\\$4'L' .QUAD L
+.           if '\\$4'R' .QUAD R
+.           if '\\$4'C' .QUAD C
+.           if '\\$4'J' .JUSTIFY
+.        \}
+.        el \{\
+.           if '\\$4''  .LEFT
+.           if '\\$4'L' .LEFT
+.           if '\\$4'R' .RIGHT
+.           if '\\$4'C' .CENTER
+.           if '\\$4'J' .JUSTIFY
+.        \}
+.        if \\\\n[#TN]=1 \{\
+.           TRAP
+.           rr #TN
+.        \}
+..
+.    rr #TAB_ACTIVE
+.END
+\#
+\# TAB
+\# ---
+\# *Arguments:
+\#   <tab number to tab into>
+\# *Function:
+\#   Moves to tab number passed as an argument.
+\#
+.MAC TAB END
+.    ds $TAB_NUMBER \\$1
+.    TAB\\*[$TAB_NUMBER]
+.    nr #IN_TAB 1
+.END
+\#
+\# TAB NEXT
+\# --------
+\# *Argument:
+\#   <none>
+\# *Function:
+\#   Automagically moves to TAB<n+1> on the same line as the last
+\#   line of the previous tab.
+\# *Notes:
+\#   The \c inline must be appended to the end of input lines when in
+\#   nofill mode; in fill modes, the \c inline must not be used.
+\#
+.MAC TN END
+.    nr #TN 1
+.    TRAP OFF
+.    sp -1v
+.    nr #NEXT_TAB \\n[#CURRENT_TAB]+1
+.    TAB\\n[#NEXT_TAB]
+.    TRAP
+.END
+\#
+\# An inline escape to accomplish the same thing.  Preferable, since
+\# it works with filled and non-filled copy and doesn't require the
+\# user to remember to use (or not use) the \c.
+\#
+.ds TB+ \
+"\c\R'#TB+ 1'\R'#TN 1'\R'#NEXT_TAB \\n[#CURRENT_TAB]+1'\\*[TAB\\n[#NEXT_TAB]]\c
+\#
+\# TAB QUIT
+\# --------
+\# *Argument:
+\#   <none>
+\# *Function:
+\#   Sets #TAB_ACTIVE to "0" (off).
+\#   Resets left margin to value in effect prior to tabs.
+\#   Resets line length to value in effect prior to tabs.
+\#   Checks #QUAD to see if we were in flush or quad mode
+\#   prior to tabs (0=off, 1=on).
+\#   Resets QUAD [ L|R|C ], LEFT, RIGHT, CENTER, or JUSTIFY
+\#   in effect prior to tabs.
+\# *Notes:
+\#   TQ must precede setting new tabs to get the tabs' indents
+\#   measured from page left.  Otherwise, the tabs' indents are
+\#   measured from the left margin of the currently active tab.
+\#
+.MAC TQ END
+.    br
+.    rr #TAB_ACTIVE
+.    rr #IN_TAB
+.    nr #LOOP 0 1
+.    while \\n+[#LOOP]<20 \{\
+.       rm $ST\\n[#LOOP]_FILL
+.    \}
+.    rr #LOOP
+.    ie '\\n[.z]'FLOAT*DIV' \{\
+\!.     po \\n[#L_MARGIN]u
+\!.     ll \\n[#L_LENGTH]u
+.    \}
+.    el \{\
+.       po \\n[#L_MARGIN]u
+.       ll \\n[#L_LENGTH]u
+.    \}
+.    ll \\n[#L_LENGTH]u
+.    ta \\n[.l]u
+.    ie \\n[#QUAD] \{\
+.       ie '\\*[$RESTORE_QUAD_VALUE]'J' .JUSTIFY
+.       el .QUAD \\*[$RESTORE_QUAD_VALUE]
+.    \}
+.    el \{\
+.       if '\\*[$RESTORE_QUAD_VALUE]'LEFT' .LEFT
+.       if '\\*[$RESTORE_QUAD_VALUE]'RIGHT' .RIGHT
+.       if '\\*[$RESTORE_QUAD_VALUE]'CENTER' .CENTER
+.    \}
+.END
+\#
+\# ====================================================================
+\#
+\# COLOR HANDLING
+\# ==============
+\#
+\# COLOR
+\# -----
+\# *Arguments:
+\#   <pre-defined NEWCOLOR or XCOLOR>
+\# *Function:
+\#   Allows the inline escape for setting color to be called
+\#   as a macro.
+\#
+.MAC COLOR END
+.    ie \\n[.u]=1 \{\
+\c
+\\*[\\$1]\c
+.    \}
+.    el \\*[\\$1]
+.END
+\#
+\# NEWCOLOR
+\# --------
+\# *Arguments:
+\#   <color name> [<color scheme>] <color definition>
+\# *Function:
+\#   Based on .defcolor, allows users to name and define colors using
+\#   one of the four color schemes rgb, cmy, cmyk and grey.  The new
+\#   color is then defined as a string so that it can be called inline
+\#   with \*[COLORNAME] or with .COLOR.
+\# *Notes:
+\#   With only two args, the default color scheme is rgb.
+\#
+\#   It is highly recommended that users define new colors as
+\#   all-cap strings, to differentiate them from x colors, which must
+\#   be in lower case.
+\#
+.MAC NEWCOLOR END
+.    if \\n[#NUM_ARGS]=2 .defcolor \\$1 rgb \\$2
+.    if \\n[#NUM_ARGS]=3 \{\
+.       if '\\$2'RGB' .ds $COLOR_SCHEME rgb
+.       if '\\$2'CYM' .ds $COLOR_SCHEME cym
+.       if '\\$2'CMYK' .ds $COLOR_SCHEME cmyk
+.       if '\\$2'GRAY' .ds $COLOR_SCHEME gray
+.       if '\\$2'GREY' .ds $COLOR_SCHEME gray
+.       defcolor \\$1  \\*[$COLOR_SCHEME] \\$3
+.    \}
+.    ds \\$1 \\m[\\$1]
+.END
+\#
+\# XCOLOR
+\# ------
+\# *Arguments:
+\#   <x color name> [<alias>]
+\# *Function:
+\#   Defines a string of x color name (i.e. a predefined x
+\#   color).  If <alias> is given, creates a string of <alias name>
+\#   that references the x color name of the first argument.
+\# *Notes:
+\#   The color name must be a valid color name from rgb.txt, and
+\#   must be given entirely in lower case, all one word.
+\#
+.MAC XCOLOR END
+.    ds \\$1 \m[\\$1]
+.    if \\n[#NUM_ARGS]=2 \{\
+.       ds \\$2 \m[\\$1]
+.       ds $\\$2_FILL \\$1
+.       ds COLAL_\\$2 \\$1
+.    \}
+.END
+\#
+\# Pre-define xcolors black and white
+\#
+.ds black   \m[black]
+.ds BLACK   \m[black]
+.ds white   \m[white]
+.ds WHITE   \m[white]
+.ds default \m[black]
+\#
+\# =====================================================================
+\#
+\# +++MISCELLANEOUS USEFUL MACROS AND STRINGS+++
+\#
+.nr _w 500
+.nr _d 1250
+\#
+\# These string are used for creating aliases within loops that set
+\# style for doc-cover, cover, and docheader items.  They're defined
+\# here because underscoring needs them.
+\#
+.ds TITLE_TYPE_1  ATTRIBUTE
+.ds TITLE_TYPE_2  AUTHOR
+.ds TITLE_TYPE_3  CHAPTER
+.ds TITLE_TYPE_4  CHAPTER_TITLE
+.ds TITLE_TYPE_12 COPYRIGHT
+.ds TITLE_TYPE_5  COVERTITLE
+.ds TITLE_TYPE_14 COVER_TITLE
+.ds TITLE_TYPE_6  DOCTITLE
+.ds TITLE_TYPE_7  DOCTYPE
+.ds TITLE_TYPE_8  DOC_COVERTITLE
+.ds TITLE_TYPE_13 DOC_COVER_TITLE
+.ds TITLE_TYPE_11 MISC
+.ds TITLE_TYPE_9  SUBTITLE
+.ds TITLE_TYPE_10 TITLE
+\#
+\# UNDERLINE
+\# ---------
+\# *Arguments:
+\#   <none> | <anything>
+\# *Function:
+\#   Simulates typewriter-style underlining of italic passages.
+\# *Notes:
+\#   Defaults for rule weight and distance from baseline are below.
+\#   UNDERLINE_SPECS lets user change them
+\#
+.MAC UNDERLINE_SPECS END
+.    ie \B'\\$1' .nr _w (u;\\$1)
+.    el \{\
+.       ie '\\$1'DEFAULT' .nr _w 500
+.       el \{\
+.          nr _w 500
+.          tm1 "[mom]: The first argument to \\$0 must be a numeric
+.          tm1 "       argument with a unit of measure appended, or DEFAULT.
+.          tm1 "       Setting underline weight to DEFAULT.
+.       \}
+.    \}
+.    shift
+.    ie \B'\\$1' .nr _d (u;\\$1)
+.    el \{\
+.       ie '\\$1'DEFAULT' .nr _d 1250
+.       el \{\
+.          nr _d 1250
+.          tm1 "[mom]: The second argument to \\$0 must be a numeric
+.          tm1 "       argument with a unit of measure appended, or DEFAULT.
+.          tm1 "       Setting underline distance from baseline to DEFAULT.
+.       \}
+.    \}
+.END
+\#
+.MAC UNDERLINE END
+\c
+.    ds $SAVED_SS_VAR \\*[$SS_VAR]
+.    ie '\\$1'' \{\
+.       nr #UNDERLINE_ON 1
+.       ss \\n[.ss] (\\n[.ss]-\\n[.ss])
+.       ie !n .nop \X'ps: exec \\n[_w] \\n[_d] decorline'\c
+.       el .ul 1000
+.    \}
+.    el \{\
+.       nr #UNDERLINE_ON 0
+.       if !'\\*[$SAVED_SS_VAR]'' .SS \\*[$SAVED_SS_VAR]
+.       ie !n .nop \X'ps: exec decornone'\c
+.       el .ul 0
+.    \}
+.END
+\#
+\# UL/ULX
+\# ------
+\# *Arguments:
+\#   <none>
+\# *Function:
+\#   Simulates typewriter-style underlining of italic passages.
+\# *Notes:
+\#   Intended to be called with inline escapes \*[UL] (underline
+\#   on) and \*[ULX] (underline off).
+\#
+.MAC UL END
+\c
+.    ds $SAVED_SS_VAR \\*[$SS_VAR]
+.    ss \\n[.ss] (\\n[.ss]-\\n[.ss])
+.    ie !'\\n[.z]'' \{\
+\c
+.       ie !n \{\
+.          if !\\n[.k]=0 \?\h'-\w'\\n[.ss]'u'\?
+\?\R'#UNDERLINE_ON 1'\X'ps: exec \\n[_w] \\n[_d] decorline'\?\c
+.       \}
+.       el \{\
+\?\R'#UNDERLINE_ON 1'\?\c
+.          ul 1000
+.       \}
+.    \}
+.    el \{\
+.       ie !n \{\
+.          nr #UNDERLINE_ON 1
+.          nop \X'ps: exec \\n[_w] \\n[_d] decorline'\c
+.       \}
+.       el \{\
+\R'#UNDERLINE_ON 1'\c
+.          ul 1000
+.       \}
+.    \}
+.END
+\#
+.MAC ULX END
+\c
+.    SS \\*[$SAVED_SS_VAR]
+.    rm $SAVED_SS_VAR
+.    ie !'\\n[.z]'' \{\
+\c
+.       ie !n \{\
+\?\R'#UNDERLINE_ON 0'\X'ps: exec decornone'\?\c
+.       \}
+.       el \{\
+\?\R'#UNDERLINE_ON 0'\?\c
+.          ul 0
+.       \}
+.    \}
+.    el \{\
+.       ie !n \{\
+.          nr #UNDERLINE_ON 0
+.          nop \X'ps: exec decornone'\c
+.       \}
+.       el \{\
+.          nr #UNDERLINE_ON 0
+.          ul 0
+.       \}
+.    \}
+.END
+\#
+\# UNDERSCORE
+\# ----------
+\# *Arguments:
+\#   [<points below baseline>] "text"
+\# *Function:
+\#   Places an underscore 2 points under the string if no lead given,
+\#   otherwise places underscore under string by user specified amount.
+\# *Notes:
+\#   When using this macro, the string to be underscored must begin
+\#   with double-quotes ("), regardless of whether it's the sole
+\#   argument or the second.
+\#   E.g.:
+\#      .UNDERSCORE "Text to be underscored
+\#         or
+\#      .UNDERSCORE 2p "Text to be underscored
+\#
+\#   UNDERSCORE does not work across line breaks.  Each line of text
+\#   must be entered separately.  If the UNDERSCORE begins in the
+\#   middle of a line and crosses over a break, the portion before
+\#   the break and the portion afterwards must be entered
+\#   separately.
+\#
+.MAC UNDERSCORE END
+.    nr #SAVED_UNDERSCORE_WEIGHT     \\n[#UNDERSCORE_WEIGHT]
+.    nr #SAVED_UNDERSCORE_WEIGHT_ADJ \\n[#UNDERSCORE_WEIGHT_ADJ]
+.    ds $SAVED_UNDERSCORE_GAP        \\*[$UNDERSCORE_GAP]
+.    if \\n[#NUM_ARGS]=2 \{\
+.       ds $UNDERSCORE_GAP \\$1
+.       shift
+.    \}
+.    if !'\\*[$TITLE_TYPE]'' \{\
+.       nr #UNDERSCORE_WEIGHT     \\n[#\\*[$TITLE_TYPE]_UNDERLINE_WEIGHT]
+.       nr #UNDERSCORE_WEIGHT_ADJ \\n[#\\*[$TITLE_TYPE]_UNDERLINE_WEIGHT_ADJ]
+.       ds $UNDERSCORE_GAP        \\*[$\\*[$TITLE_TYPE]_UNDERLINE_GAP]
+.    \}
+.    nr #TEXT_WIDTH \w'\\$1'
+\Z'\\$1'\
+\Z'\D't \\n[#UNDERSCORE_WEIGHT]''\
+\v'\\*[$UNDERSCORE_GAP]+\\n[#UNDERSCORE_WEIGHT_ADJ]u'\
+\D'l \\n[#TEXT_WIDTH]u 0'\
+\Z'\D't \\n[#RULE_WEIGHT]''\
+\v'-(\\*[$UNDERSCORE_GAP]+\\n[#UNDERSCORE_WEIGHT_ADJ]u)'
+.    nr #UNDERSCORE_WEIGHT     \\n[#SAVED_UNDERSCORE_WEIGHT]
+.    nr #UNDERSCORE_WEIGHT_ADJ \\n[#SAVED_UNDERSCORE_WEIGHT_ADJ]
+.    ds $UNDERSCORE_GAP        \\*[$SAVED_UNDERSCORE_GAP]
+.    rr #SAVED_UNDERSCORE_WEIGHT
+.    rr #SAVED_UNDERSCORE_WEIGHT_ADJ
+.    rm $SAVED_UNDERSCORE_GAP
+.    rm $TITLE_TYPE
+.END
+\#
+\# DOUBLE UNDERSCORE
+\# -----------------
+\# *Arguments:
+\#   [points below baseline] [points distance between rules] "text"
+\# *Function:
+\#   Same as UNDERSCORE, except it produces a double underscore.  The default
+\#   distance between the rules is 2 points.
+\# *Notes:
+\#   The same double-quote requirement as UNDERSCORE.
+\#
+.MAC UNDERSCORE2 END
+.    nr #SAVED_UNDERSCORE_WEIGHT     \\n[#UNDERSCORE_WEIGHT]
+.    nr #SAVED_UNDERSCORE_WEIGHT_ADJ \\n[#UNDERSCORE_WEIGHT_ADJ]
+.    ds $SAVED_UNDERSCORE_GAP        \\*[$UNDERSCORE_GAP]
+.    ds $SAVED_RULE_GAP              \\*[$RULE_GAP]
+.    if \\n[#NUM_ARGS]=2 \{\
+.       ds $UNDERSCORE_GAP \\$1
+.       shift
+.    \}
+.    if \\n[#NUM_ARGS]=3 \{\
+.       ds $UNDERSCORE_GAP \\$1
+.       ds $RULE_GAP \\$2
+.       shift 2
+.    \}
+.    if !'\\*[$TITLE_TYPE]'' \{\
+.       nr #UNDERSCORE_WEIGHT     \\n[#\\*[$TITLE_TYPE]_UNDERLINE_WEIGHT]
+.       nr #UNDERSCORE_WEIGHT_ADJ \\n[#\\*[$TITLE_TYPE]_UNDERLINE_WEIGHT_ADJ]
+.       ds $UNDERSCORE_GAP        \\*[$\\*[$TITLE_TYPE]_UNDERLINE_GAP]
+.       ds $RULE_GAP              \\*[$\\*[$TITLE_TYPE]_RULE_GAP]
+.    \}
+.    nr #TEXT_WIDTH \w'\\$1'
+\Z'\\$1'\
+\Z'\D't \\n[#UNDERSCORE_WEIGHT]''\
+\v'\\*[$UNDERSCORE_GAP]+\\n[#UNDERSCORE_WEIGHT_ADJ]u'\
+\Z'\D'l \\n[#TEXT_WIDTH]u 0''\
+\v'\\*[$RULE_GAP]+\\n[#UNDERSCORE_WEIGHT]u'\
+\D'l \\n[#TEXT_WIDTH]u 0'\
+\Z'\D't \\n[#RULE_WEIGHT]''\
+\v'-(\\*[$UNDERSCORE_GAP]+\\*[$RULE_GAP])-(\\n[#UNDERSCORE_WEIGHT]u*2u)'
+.    nr #UNDERSCORE_WEIGHT     \\n[#SAVED_UNDERSCORE_WEIGHT]
+.    nr #UNDERSCORE_WEIGHT_ADJ \\n[#SAVED_UNDERSCORE_WEIGHT_ADJ]
+.    ds $UNDERSCORE_GAP        \\*[$SAVED_UNDERSCORE_GAP]
+.    rr #SAVED_UNDERSCORE_WEIGHT
+.    rr #SAVED_UNDERSCORE_WEIGHT_ADJ
+.    rm $SAVED_UNDERSCORE_GAP
+.    rm $SAVED_RULE_GAP
+.    rm $TITLE_TYPE
+.END
+\#
+\# Default underscoring underline and rule gaps
+\#
+.ds $BIB_STRING_RULE_GAP      2p
+.ds $BIB_STRING_UNDERLINE_GAP 2p
+.ds $EN_STRING_RULE_GAP       2p
+.ds $EN_STRING_UNDERLINE_GAP  2p
+.ds $EN_TITLE_UNDERLINE_GAP   2p
+.ds $RULE_GAP                 2p
+.ds $TOC_HEADER_RULE_GAP      2p
+.ds $TOC_HEADER_UNDERLINE_GAP 2p
+.ds $UNDERSCORE_GAP           2p
+\#
+.nr #LOOP 0 1
+.while \n+[#LOOP]<=14 \{\
+. ds $\*[TITLE_TYPE_\n[#LOOP]]_RULE_GAP                2p
+. ds $COVER_\*[TITLE_TYPE_\n[#LOOP]]_RULE_GAP          2p
+. ds $DOC_COVER_\*[TITLE_TYPE_\n[#LOOP]]_RULE_GAP      2p
+. ds $\*[TITLE_TYPE_\n[#LOOP]]_UNDERLINE_GAP           2p
+. ds $COVER_\*[TITLE_TYPE_\n[#LOOP]]_UNDERLINE_GAP     2p
+. ds $DOC_COVER_\*[TITLE_TYPE_\n[#LOOP]]_UNDERLINE_GAP 2p
+.\}
+\#
+\# SUPERSCRIPT
+\# -----------
+\# *Function:
+\#   Prints everything after inline invocation as superscript.
+\# *Notes:
+\#   \*[SUP] and \*[SUPX] turn superscript on and off respectively.
+\#   If running type is pseudo-condensed/expanded, invoke the superscript
+\#   strings as \*[CONDSUP] or \*[EXTSUP] and turn off with \*[CONDSUPX]
+\#   and \*[EXTSUPX] respectively.
+\#
+\# Default raise/lower amount
+.ds $SUP_RAISE \v'-.3m'
+.ds $SUP_LOWER \v'.3m'
+\#
+\# SUPERSCRIPT RAISE
+\# -----------------
+\# *Argument:
+\#   <amount to raise superscript>
+\# *Function:
+\#   Defines strings $SUP_RAISE and $SUP_LOWER for use with \*[SUP],
+\#   \*[CONDSUP] and \*[EXTSUP].
+\#
+.MAC SUPERSCRIPT_RAISE_AMOUNT END
+.    ds $SUP_RAISE_AMOUNT \\$1
+.    ds $SUP_RAISE \v'-\\*[$SUP_RAISE_AMOUNT]'
+.    ds $SUP_LOWER \v'\\*[$SUP_RAISE_AMOUNT]'
+.END
+\#
+.ds SUP \
+\R'#PT_SIZE_IN_UNITS \En[.ps]'\
+\R'#SUP_PT_SIZE \En[#PT_SIZE_IN_UNITS]u*6u/10u'\
+\s[\En[#PT_SIZE_IN_UNITS]u]\E*[$SUP_RAISE]\s[\En[#SUP_PT_SIZE]u]
+\#
+.ds SUPX \s[\En[#PT_SIZE_IN_UNITS]u]\E*[$SUP_LOWER]
+\#
+.ds CONDSUP \
+\R'#PT_SIZE_IN_UNITS \En[.ps]'\
+\R'#SUP_PT_SIZE \En[#PT_SIZE_IN_UNITS]u*6u/10u'\
+\s[\En[#PT_SIZE_IN_UNITS]u]\E*[$SUP_RAISE]\s[\En[#SUP_PT_SIZE]u]\E*[COND_FOR_SUP]
+\#
+.ds CONDSUPX \s[\En[#PT_SIZE_IN_UNITS]u]\E*[$SUP_LOWER]\E*[COND]
+\#
+.ds EXTSUP \
+\R'#PT_SIZE_IN_UNITS \En[.ps]'\
+\R'#SUP_PT_SIZE \En[#PT_SIZE_IN_UNITS]u*6u/10u'\
+\s[\En[#PT_SIZE_IN_UNITS]u]\E*[$SUP_RAISE]\s[\En[#SUP_PT_SIZE]u]\E*[EXT_FOR_SUP]
+\#
+.ds EXTSUPX \s[\En[#PT_SIZE_IN_UNITS]u]\E*[$SUP_LOWER]\E*[EXT]
+\#
+\# SLANT
+\# -----
+\#
+\# SETSLANT
+\# --------
+\# *Arguments:
+\#   <number of degrees> | RESET
+\# *Function:
+\#   Modifies register #DEGREES for use with \*[SLANT], or resets
+\#   it to the default.  Defines string \*[SLANTX]
+\# *Notes:
+\#   \*[SLANT] permits pseudo-italicizing of a font in cases where
+\#   no italic font exists in a particular family.
+\#
+\#   Default # of degrees is 15.
+\#
+\#   Do not use unit of measure with arg to SETSLANT.
+\#
+\#   It may be necessary to adjust the spacing on either side of
+\#   [SLANT] and [SLANTX].
+\#
+\#   In docs, SLANT carries over from para to para.
+\#
+.nr #DEGREES 15
+.ds SLANT \ER'#SLANT_ON 1'\ES'\En[#DEGREES]'
+.ds SLANTX \ER'#SLANT_ON 0'\ES'0'
+\#
+.MAC SETSLANT END
+.    ie '\\$1'RESET' \{\
+.       nr #DEGREES 15
+.       if \\n[#PRINT_STYLE]=1 \
+.          if \\n[#UNDERLINE_SLANT] .return
+.       ds SLANT \ER'#SLANT_ON 1'\ES'\En[#DEGREES]'
+.    \}
+.    el \{\
+.       nr #DEGREES \\$1
+.       if \\n[#PRINT_STYLE]=1 \
+.          if \\n[#UNDERLINE_SLANT] .return
+.       ds SLANT \ER'#SLANT_ON 1'\ES'\En[#DEGREES]'
+.    \}
+.    ds SLANTX \ER'#SLANT_ON 0'\ES'0'
+.END
+\#
+\# BOLDER
+\# ------
+\#
+\# SETBOLDER
+\# ---------
+\# *Arguments:
+\#   <amount of emboldening> | RESET
+\# *Function:
+\#   Modifies register #BOLDER_UNITS for use with \*[BOLDER], or resets
+\#   it to the default 700 units.
+\# *Notes:
+\#   \*[BOLDER] allows pseudo-emboldening of a font where no bold
+\#   font exists in a particular family.
+\#
+\#   Default for SETBOLDER is 700 units.  Do not use unit of measure
+\#   with arg to SETBOLDER.
+\#
+.nr #BOLDER_UNITS 700
+\#
+.MAC SETBOLDER END
+.    if \\n[#IGNORE]=1 .return
+.    ie '\\$1'RESET' .nr #BOLDER_UNITS 700
+.    el              .nr #BOLDER_UNITS \\$1
+.END
+\#
+.MAC BOLDER END
+\c
+.bd \\n[.f] \\n[#BOLDER_UNITS]
+.END
+\#
+.MAC BOLDERX END
+\c
+.bd \\n[.f]
+.END
+\#
+\# +++CONDENSE/EXTEND+++
+\#
+\# CONDENSE/EXTEND
+\# ---------------
+\# *Arguments:
+\#   <percentage to condense/expand type size>
+\# *Function:
+\#   Stores current point size in z's in #PT_SIZE_IN_UNITS, figures out
+\#   new point size (for character width) from arg, and defines string
+\#   COND or EXT, which set the type size to the new character width,
+\#   and sets the height of type to the value stored in CURRENT_PT_SIZE
+\# *Notes:
+\#   CONDENSE_OR_EXTEND is invoked from the aliases
+\#   CONDENSE and EXTEND.  CONDENSE implies <100, EXTEND
+\#   implies >100.  Do not use a percent sign in the argument.
+\#
+\#   There is no default setting for CONDENSE or EXTEND.
+\#   80 is a good approximation of condensed type, 120 is okay
+\#   for extended.
+\#
+\#   The value set by CONDENSE or EXTEND applies to all
+\#   subsequent \*[COND] or \*[EXT] escapes until a new value is set.
+\#
+\#  \*[COND] or \*[EXT] must be turned off before all changes of point
+\#  size, and reinvoked afterwards (if so desired).  This refers to
+\#  changes of point size via control lines AND via inlines.
+\#
+.MAC CONDENSE_OR_EXTEND END
+.    if '\\$0'CONDENSE' \{\
+.       ds $COND_PERCENT \\$1
+.       if \\n[#PRINT_STYLE]=1 \{\
+.          rm $COND_PERCENT
+.          ds $COND_PERCENT 100
+.       \}
+.       ds COND \
+\R'#PT_SIZE_IN_UNITS \En[.ps]'\
+\R'#CONDENSE 1'\
+\R'#COND_WIDTH (\En[#PT_SIZE_IN_UNITS]u*\E*[$COND_PERCENT]u)/100'\
+\Es[\En[#COND_WIDTH]u]\EH'\En[#PT_SIZE_IN_UNITS]u'
+.       ds COND_FOR_SUP \
+\R'#COND_WIDTH (\En[#SUP_PT_SIZE]u*\E*[$COND_PERCENT]u)/100'\
+\Es[\En[#COND_WIDTH]u]\H'\En[#SUP_PT_SIZE]u'
+.    \}
+.    if '\\$0'EXTEND' \{\
+.       ds $EXT_PERCENT \\$1
+.       if \\n[#PRINT_STYLE]=1 \{\
+.          rm $EXT_PERCENT
+.          ds $EXT_PERCENT 100
+.       \}
+.       ds EXT \
+\R'#PT_SIZE_IN_UNITS \En[.ps]'\
+\R'#EXTEND 1'\
+\R'#EXT_WIDTH (\En[#PT_SIZE_IN_UNITS]u*\E*[$EXT_PERCENT]u)/100'\
+\Es[\En[#EXT_WIDTH]u]\EH'\En[#PT_SIZE_IN_UNITS]u'
+.       ds EXT_FOR_SUP \
+\R'#EXT_WIDTH (\En[#SUP_PT_SIZE]u*\E*[$EXT_PERCENT]u)/100'\
+\Es[\En[#EXT_WIDTH]u]\H'\En[#EXT_PT_SIZE]u'
+.    \}
+.END
+\#
+.ds CONDX \
+\ER'#CONDENSE 0'\Es[0]\R'#PT_SIZE_IN_UNITS \En[.ps]'\H'\En[#PT_SIZE_IN_UNITS]u'
+.ds EXTX  \
+\ER'#EXTEND   0'\Es[0]\R'#PT_SIZE_IN_UNITS \En[.ps]'\H'\En[#PT_SIZE_IN_UNITS]u'
+\#
+\# +++PAD LINES+++ (insert space)
+\#
+\# PAD MARKER
+\# ----------
+\# *Arguments:
+\#   <character to use for marking pad points>
+\# *Function:
+\#   Defines string $PAD_MARKER, used in PAD
+\# *Notes:
+\#   $PAD_MARKER is normally # (the pound sign).
+\#
+.MAC PAD_MARKER END
+.    ds $PAD_MARKER \\$1
+.END
+\#
+\# PAD
+\# ---
+\# *Argments:
+\#   "<string of text with padding markers inserted>"
+\#   "<id of bookmark created by .PDF_BOOKMARK>"
+\# *Function:
+\#   Defines and redefines padding character (default=pound sign
+\#   unless padding character has been set with PAD_MARKER)
+\#   several times so that when the string is output at the end
+\#   of the macro, every # has been converted to an equal-sized
+\#   amount of padding (blank space) on a line.
+\# *Notes:
+\#   String tabs may be marked off during PAD.
+\#
+.MAC PAD END
+.    if \\n[.u]=1 .nr fill 1
+.    nf
+.    if !d$PAD_MARKER .ds $PAD_MARKER #
+.    char \\*[$PAD_MARKER] \R'#PAD_COUNT \En[#PAD_COUNT]+1'
+.    ds $FAMILY_FOR_PAD \\n[.fam]
+.\" .if !n .fp \\n[.fp] \\n[.sty]
+.    ds $FONT_FOR_PAD   \\n[.sty]
+.    nr #SIZE_FOR_PAD   \\n[.ps]
+.    ds $PAD_STRING \\$1
+.    as $PAD_STRING \Ekp
+.    di PAD_STRING
+.    fam \\*[$FAMILY_FOR_PAD]
+\\f[\\*[$FONT_FOR_PAD]]\\s[\\n[#SIZE_FOR_PAD]u]\\*[$PAD_STRING]
+.    br
+.    di
+.    if \\n[#INDENT_ACTIVE] \{\
+.       if \\n[#INDENT_LEFT_ACTIVE]  .ll -\\n[#L_INDENT]u
+.       if \\n[#INDENT_RIGHT_ACTIVE] .ll -\\n[#R_INDENT]u
+.       if \\n[#INDENT_BOTH_ACTIVE]  .ll -\\n[#BR_INDENT]u
+.    \}
+.    char \\*[$PAD_MARKER] \
+\R'#SPACE_TO_END \En[.l]-\En[p]'\R'#PAD_SPACE \En[#SPACE_TO_END]/\En[#PAD_COUNT]'
+.    di PAD_STRING
+.    fam \\*[$FAMILY_FOR_PAD]
+\\f[\\*[$FONT_FOR_PAD]]\\s[\\n[#SIZE_FOR_PAD]u]\\*[$PAD_STRING]
+.    br
+.    di
+.    if \\n[#INDENT_ACTIVE] \
+.       if (\\n[#INDENT_LEFT_ACTIVE]=1):(\\n[#INDENT_BOTH_ACTIVE]) .ll
+.    char \\*[$PAD_MARKER] \h'\En[#PAD_SPACE]u'
+.    if \\n[#SILENT] .SILENT
+.    fam \\*[$FAMILY_FOR_PAD]
+\\f[\\*[$FONT_FOR_PAD]]\\s[\\n[#SIZE_FOR_PAD]u]
+.    ie '\\$2'' .nop \\*[$PAD_STRING]
+.    el \{\
+.       ie !'\\$2'NOBREAK' .pdfhref L -D "\\$2" -E -- \&\\*[$PAD_STRING]
+.       el .nop \\*[$PAD_STRING]
+.    \}
+.    if \\n[#SILENT] .SILENT OFF
+.    br
+.    if \\n[fill] \{\
+.       fi
+.       rr fill
+.    \}
+.    rr #PAD_COUNT
+.    rr #SPACE_TO_END
+.    rr #PAD_SPACE
+.    rm $PAD_STRING
+.    rm PAD_STRING
+.    rchar \\*[$PAD_MARKER]
+.    if '\\$2'NOBREAK' \{\
+.       TRAP OFF
+.       EOL
+.       TRAP
+.    \}
+.END
+\#
+\# +++LEADERS+++
+\#
+\# The leader mechanism is primitive, but it works.  Basically, every
+\# macro in this set that includes a line length also sets a single
+\# groff tab stop at the right hand end of the line.  That way,
+\# whenever Ctrl-A is invoked (always at the end of an input line),
+\# leader of the correct length gets deposited.  Ctrl-A is accessed by
+\# the string LEADER (i.e. inline, as \*[LEADER]).  Leaders within tabs
+\# get their length from the tab line length.
+\#
+\# SET LEADER CHARACTER
+\# --------------------
+\# *Arguments:
+\#   <character to use whenever \*[LEADER] is invoked>
+\# *Function:
+\#   Set leader character.
+\#
+.MAC LEADER_CHARACTER END
+.    lc \\$1
+.END
+\#
+.ds LEADER 
+\#
+\# +++DROP CAPS+++
+\#
+\# DROP CAP FAMILY
+\# ---------------
+\# *Argument:
+\#   <family of drop cap>
+\# *Function:
+\#   Creates or modifies string $DC_FAM.
+\#
+.MAC DROPCAP_FAMILY END
+.    ds $DC_FAM \\$1
+.END
+\#
+\# DROP CAP FONT
+\# -------------
+\# *Argument:
+\#   <font of drop cap>
+\# *Function:
+\#   Creates or modifies string $DC_FT.
+\#
+.MAC DROPCAP_FONT END
+.    ds $DC_FT \\$1
+.END
+\#
+\# DROPCAP COLOR
+\# -------------
+\# *Arguments:
+\#   <pre-defined XCOLOR or NEWCOLOR>
+\# *Function:
+\#   Defines string $DC_COLOR to argument.
+\# *Notes:
+\#   User must define an XCOLOR or NEWCOLOR before using
+\#   DC_COLOR.
+\#
+.MAC DROPCAP_COLOR END
+.    if \\n[#PRINT_STYLE]=1 .return
+.    nr #DC_COLOR 1
+.    ds $DC_COLOR \\$1
+.END
+\#
+\# DROP CAP GUTTER
+\# ---------------
+\# *Argument:
+\#   <width of gutter between drop cap and indented text>
+\# *Function:
+\#   Creates or modifies register #DC_GUT.
+\# *Notes:
+\#   Requires unit of measure.  Default is 3p.
+\#
+.MAC DROPCAP_GUTTER END
+.    nr #DC_GUT (\\$1)
+.END
+\#
+\# DROP CAP ADJUST
+\# ---------------
+\# *Argument:
+\#   <+|- # of points to in/decrease point size of drop cap letter>
+\# *Function:
+\#   Creates or modifies string $DC_ADJUST.
+\# *Notes:
+\#   Despite its best efforts, DROPCAP doesn't always get the point
+\#   size of the drop cap critically perfect.  DROPCAP_ADJUST lets
+\#   the user add or subtract points (or fractions of points) to
+\#   get the size right.
+\#
+\#   Requires the + or - sign.
+\#
+.MAC DROPCAP_ADJUST END
+.    ds $DC_ADJUST \\$1
+.END
+\#
+\# DROP CAP
+\# --------
+\# *Arguments:
+\#   <dropcap letter> <# of lines> [COND <% to condense> | EXT <% to extend>]
+\# *Function:
+\#   Calculates point size of dropcap based on # of lines passed as
+\#   arg 2.  Sets indent for text based on dropcap width+gutter.
+\#   Advances and prints dropcap; reverses and prints indented text
+\#   to bottom of dropcap, then resets indent to left margin (plus
+\#   any indent that was in effect prior to invoking DROPCAP).
+\# *Notes:
+\#   Drop caps when using the doc processing macro PP only work with
+\#   initial paragraphs (i.e. at doc start, or after heads), only when
+\#   DROPCAPS comes immediately after PP, and only when the PRINTSTYLE
+\#   is TYPESET.  If these conditions aren't met, DROPCAPS is silently
+\#   ignored.
+\#
+\#   The COND or EXT argument are processed separately from all
+\#   other COND or EXT inlines or macros, hence passing COND or
+\#   EXT has no effect on running type.
+\#
+.MAC DROPCAP END
+.    if \\n[#IGNORE]=1 \{\
+.       PRINT \\$1\c
+.       return
+.    \}
+.    br
+.    if n \{\
+.       PRINT \\$1\c
+.       return
+.    \}
+.    if \\n[#DOCS] \{\
+.       if \\n[#PRINT_STYLE]=1 \{\
+.          PRINT \\$1\c
+.          return
+.       \}
+.       if \\n[#PRINT_STYLE]=2 \{\
+.          if \\n[#PP_STYLE]=2 \{\
+.             PRINT \\$1\c
+.             return
+.          \}
+.          if \\n[#PP]>1 \{\
+.             PRINT \\$1\c
+.             return
+.          \}
+.          ti 0
+.       \}
+.    \}
+.    ds $DROPCAP         \\$1
+.    nr #DC_LINES        \\$2-1
+.    if \\n[#CONDENSE]=1 \{\
+.       ds $RESTORE_COND \\*[$COND_PERCENT]
+\\*[CONDX]
+.       nr #CONDENSE_WAS_ON 1
+.    \}
+.    if \\n[#EXTEND]=1 \{\
+.       ds $RESTORE_EXT \\*[$EXT_PERCENT]
+\\*[EXTX]
+.       nr #EXTEND_WAS_ON 1
+.    \}
+.    if '\\$3'COND' .CONDENSE \\$4
+.    if '\\$3'EXT' .EXTEND \\$4
+.    if !r#DC_GUT .nr #DC_GUT (3p)
+.    ie \\n[#DOCS] .ds $RESTORE_FAM \\*[$DOC_FAM]
+.    el .ds $RESTORE_FAM \\n[.fam]
+.    ie \\n[#DOCS] .ds $RESTORE_FT  \\*[$PP_FT]
+.    el .ds $RESTORE_FT  \\*[$FONT]
+.    nr #RESTORE_PT_SIZE \\n[#PT_SIZE]
+.    nr #RESTORE_INDENT  \\n[.i]
+.    SIZESPECS
+.    nr #DC_HEIGHT \\n[#DC_LINES]*\\n[#LEAD]+\\n[#CAP_HEIGHT]
+.    ie !d$DC_FAM .FAM \\n[.fam]
+.    el .FAM \\*[$DC_FAM]
+.    ie !d$DC_FT .FT \\*[$FONT]
+.    el .FT \\*[$DC_FT]
+.    while \\n[#GET_DC_HEIGHT]<\\n[#DC_HEIGHT] \{\
+.       ps \\n[#PT_SIZE]u+100u
+.       SIZESPECS
+.       nr #GET_DC_HEIGHT \\n[#CAP_HEIGHT]
+.    \}
+.    if d$DC_ADJUST .ps \\*[$DC_ADJUST]p
+.    nr #DC_LINES +1
+.    if \\n[#DC_LINES]v>\\n[.t] \{\
+.       nr pgnum \\n%+\\n[#PAGE_NUM_ADJ] 1
+.       tm1 "[mom]: Dropcap at line \\n[.c] does not fit on page \\n[pgnum].
+.       tm1 "       Shifting paragraph to page \\n+[pgnum].
+.       bp
+.    \}
+.    ie \\n[#DC_COLOR]=1 \{\
+.       ie !'\\$3'' \{\
+.          ie '\\$3'COND' \
+.             PRINT \
+\\*[DOWN \\n[#DC_LINES]v]\
+\m[\\*[$DC_COLOR]]\\*[COND]\\*[$DROPCAP]\\*[CONDX]\m[]\\*[UP \\n[#DC_LINES]v]
+.          el \
+.             PRINT \
+\\*[DOWN \\n[#DC_LINES]v]\
+\m[\\*[$DC_COLOR]]\\*[EXT]\\*[$DROPCAP]\\*[EXTX]\m[]\\*[UP \\n[#DC_LINES]v]
+.       \}
+.       el .PRINT \
+\\*[DOWN \\n[#DC_LINES]v]\
+\m[\\*[$DC_COLOR]]\\*[$DROPCAP]\m[]\\*[UP \\n[#DC_LINES]v]
+.    \}
+.    el \{\
+.       ie !'\\$3'' \{\
+.          ie '\\$3'COND' \
+.             PRINT \
+\\*[DOWN \\n[#DC_LINES]v]\
+\\*[COND]\\*[$DROPCAP]\\*[CONDX]\\*[UP \\n[#DC_LINES]v]
+.          el \
+.             PRINT \
+\\*[DOWN \\n[#DC_LINES]v]\
+\\*[EXT]\\*[$DROPCAP]\\*[EXTX]\\*[UP \\n[#DC_LINES]v]
+.       \}
+.       el .PRINT \
+\\*[DOWN \\n[#DC_LINES]v]\
+\\*[$DROPCAP]\\*[UP \\n[#DC_LINES]v]
+.    \}
+.    if '\\$3'COND' \E*[COND]
+.    if '\\$3'EXT' \E*[EXT]
+.    ie \\n[.i] \{\
+.       vs 0
+.       br
+.       in +\w'\\*[$DROPCAP]'u+\\n[#DC_GUT]u
+.       vs
+.    \}
+.    el \{\
+.       vs 0
+.       br
+.       in \w'\\*[$DROPCAP]'u+\\n[#DC_GUT]u
+.       vs
+.    \}
+.    if '\\$3'COND' \E*[CONDX]\c
+.    if '\\$3'EXT' \E*[EXTX]\c
+.    FAM \\*[$RESTORE_FAM]
+.    FT  \\*[$RESTORE_FT]
+.    ps \\n[#RESTORE_PT_SIZE]u
+.    if \\n[#CONDENSE_WAS_ON] \{\
+.       CONDENSE \\*[$RESTORE_COND]
+\\*[COND]\c
+.    \}
+.    if \\n[#EXTEND_WAS_ON] \{\
+.       EXTEND \\*[$RESTORE_EXT]
+\\*[EXT]\c
+.    \}
+.    ie \\n[.u] .wh \\n[.d]u+\\n[#DC_HEIGHT]u-1v DROPCAP_OFF
+.    el .wh \\n[.d]u+\\n[#DC_HEIGHT]u DROPCAP_OFF
+.    rr #CONDENSE_WAS_ON
+.    rr #EXTEND_WAS_ON
+.    rm $DROPCAP
+.    rr #DC_LINES
+.    rm $RESTORE_COND
+.    rm $RESTORE_EXT
+.    rm $RESTORE_FAM
+.    rm $RESTORE_FT
+.    rr #RESTORE_PT_SIZE
+.    rr #RESTORE_INDENT
+.    rr #DC_HEIGHT
+.    rr #GET_DC_HEIGHT
+.    rr x
+.END
+\#
+.MAC DROPCAP_OFF END
+'    in \\n[#RESTORE_INDENT]u
+.    ch DROPCAP_OFF
+.END
+\#
+\# =====================================================================
+\#
+\# +++GRAPHICAL OBJECTS+++
+\#
+\# HORIZONTAL RULE - DRH
+\# ---------------------
+\# *Arguments:
+\#   <none> | <rule weight> <indent> <length> [ <color> ]
+\# *Function:
+\#   With no arg, draws a full measure rule.  With args, draws
+\#   described horizontal rule.
+\# *Notes:
+\#   Rules are drawn left-to-right, from the baseline down, and
+\#   return to their point of origin.  Color must be set in the
+\#   macro; otherwise the color will be black, regardless of current
+\#   .gcolor.  If no arg given, the rule weight is the one set by
+\#   RULE_WEIGHT.
+\#
+.MAC DRH END
+.    rr #FILLED
+.    rr #FILL_MODE
+.    rr #NOFILL
+.    rr #NOFILL_MODE
+.    if \\n[.vpt]=1 \{\
+.       vpt 0
+.       nr #RESTORE_TRAP 1
+.    \}
+.    ie !\\n[#NO_ADVANCE]=1 .br
+.    el \{\
+.       sp -1v
+.       rr #NO_ADVANCE
+.    \}
+.    ie \\n[.u]=1 \{\
+.       nr #FILLED 1
+.       nr #FILL_MODE \\n[.j]
+.    \}
+.    el \{\
+.       nr #NOFILL 1
+.       if \\n[.ce]>0 .nr #NOFILL_MODE 3
+.       if \\n[.rj]>0 .nr #NOFILL_MODE 5
+.       ce 0
+.       rj 0
+.    \}
+.    nf
+.    ds $RL_WEIGHT \\$1
+.    ds $RL_INDENT \\$2
+.    ds $RL_LENGTH \\$3
+.    ie !'\\$4'' .ds $RL_COLOR  \\$4
+.    el          .ds $RL_COLOR \\*[default]
+.    nr #SAVED_WEIGHT     \\n[#RULE_WEIGHT]
+.    nr #SAVED_WEIGHT_ADJ \\n[#RULE_WEIGHT_ADJ]
+.    di NULL
+.       if \\n[#NUM_ARGS]>=1 .RULE_WEIGHT \\*[$RL_WEIGHT]
+.    di
+.    gcolor \\*[$RL_COLOR]
+.    ie \\n[#NUM_ARGS]=0 \{\
+.       ie \\n[#INDENT_ACTIVE] \{\
+.          nr #RESTORE_L_LENGTH \\n[.l]
+.          if \\n[#INDENT_BOTH_ACTIVE] .ll \\n[.l]u-\\n[#BL_INDENT]u
+.          if \\n[#INDENT_LEFT_ACTIVE] .ll \\n[.l]u-\\n[#L_INDENT]u
+\D't \\n[#RULE_WEIGHT]'\
+\h'\\*[$RL_INDENT]-\\n[#RULE_WEIGHT]u'\
+\v'\\n[#RULE_WEIGHT_ADJ]u'\
+\D'l \En[.l]u 0'\v'-\\n[#RULE_WEIGHT_ADJ]u'\
+\v'-\\n[#RULE_WEIGHT_ADJ]u'\
+\D't \\n[#SAVED_RULE_WEIGHT]'
+.          ll \\n[#RESTORE_L_LENGTH]u
+.          rr #RESTORE_L_LENGTH
+.       \}
+.       el \{\
+\D't \\n[#RULE_WEIGHT]'\
+\h'\\*[$RL_INDENT]-\\n[#RULE_WEIGHT]u'\
+\v'\\n[#RULE_WEIGHT_ADJ]u'\
+\D'l \En[.l]u 0'\v'-\\n[#RULE_WEIGHT_ADJ]u'\
+\v'-\\n[#RULE_WEIGHT_ADJ]u'\
+\D't \\n[#SAVED_RULE_WEIGHT]'
+.       \}
+.    \}
+.    el \{\
+\D't \\n[#RULE_WEIGHT]'\
+\h'\\*[$RL_INDENT]-\\n[#RULE_WEIGHT]u'\
+\v'\\n[#RULE_WEIGHT_ADJ]u'\
+\D'l \\*[$RL_LENGTH] 0'\
+\v'-\\n[#RULE_WEIGHT_ADJ]u'\
+\D't \\n[#SAVED_RULE_WEIGHT]'
+.          rr #RESTORE_L_LENGTH
+.    \}
+.    if \\n[#FILLED]=1 \{\
+.       if \\n[#FILL_MODE]=0 .QUAD LEFT
+.       if \\n[#FILL_MODE]=1 .JUSTIFY
+.       if \\n[#FILL_MODE]=3 .QUAD CENTER
+.       if \\n[#FILL_MODE]=5 .QUAD RIGHT
+.       rr #FILLED
+.    \}
+.    sp -1v
+.    if \\n[#NOFILL]=1 \{\
+.       if \\n[#NOFILL_MODE]=3 .CENTER
+.       if \\n[#NOFILL_MODE]=5 .RIGHT
+.    \}
+.    gcolor
+.    nr #RULE_WEIGHT     \\n[#SAVED_WEIGHT]
+.    nr #RULE_WEIGHT_ADJ \\n[#SAVED_WEIGHT_ADJ]
+.    rr #SAVED_WEIGHT
+.    rr #SAVED_WEIGHT_ADJ
+.    if \\n[#RESTORE_TRAP]=1 \{\
+.       vpt 1
+.       rr #RESTORE_TRAP
+.    \}
+.    if '\\n[.z]'FLOAT*DIV' \
+.       if !(\\n[.d]+\\n[#WEIGHT])<\\n[D-float] .nr D-float \\n[.d]+\\n[#WEIGHT]
+.END
+\#
+\# RULE
+\# ----
+\# *Argument:
+\#   <none>
+\# *Function:
+\#   Draws a rule the length of the current measure.
+\# *Notes:
+\#   A convenience macro.  DRH with no argument does the same thing.
+\#   Kept in for backward compatibility.
+\#
+.MAC RULE END
+.    if \\n[.u]=1 \{\
+.       nr fill 1
+.       ds $CURRENT_QUAD \\*[$QUAD_VALUE]
+.       nf
+.    \}
+.    ie \\n[#INDENT_ACTIVE] \{\
+.       if \\n[#INDENT_BOTH_ACTIVE] .ll \\n[.l]u-\\n[#BL_INDENT]u
+.       if \\n[#INDENT_LEFT_ACTIVE] .ll \\n[.l]u-\\n[#L_INDENT]u
+.       PRINT \
+\D't \\n[#RULE_WEIGHT]'\v'\\n[#RULE_WEIGHT_ADJ]u'\
+\h'-\\n[#RULE_WEIGHT]u'\
+\D'l \En[.l]u 0'\v'-\\n[#RULE_WEIGHT_ADJ]u'\h'|0'\c
+.       ll
+.       rr #RESTORE_L_LENGTH
+.    \}
+.    el \{\
+.       PRINT \
+\D't \\n[#RULE_WEIGHT]'\v'\\n[#RULE_WEIGHT_ADJ]u'\
+\h'-\\n[#RULE_WEIGHT]u'\
+\D'l \En[.l]u 0'\v'-\\n[#RULE_WEIGHT_ADJ]u'\h'|0'\c
+.    \}
+.    if \\n[fill] \{\
+.       fi
+.       rr fill
+.       QUAD \\*[$CURRENT_QUAD]
+.       rm $CURRENT_QUAD
+.    \}
+.    EOL
+.END
+\#
+\# VERTICAL RULE - DRV
+\# -------------------
+\# *Arguments:
+\#   <rule weight> <indent> <depth> [ <color> ]
+\# *Function:
+\#   Draws described vertical rule.
+\# *Notes:
+\#   Rules are drawn left-to-right, from the baseline down, and
+\#   return to their point of origin.  Color must be set in the
+\#   macro; otherwise the color will be black, regardless of current
+\#   .gcolor.
+\#
+.MAC DRV END
+.    rr #FILLED
+.    rr #FILL_MODE
+.    rr #NOFILL
+.    rr #NOFILL_MODE
+.    if \\n[.vpt]=1 \{\
+.       vpt 0
+.       nr #RESTORE_TRAP 1
+.    \}
+.    ie !\\n[#NO_ADVANCE]=1 .br
+.    el \{\
+.       sp -1v
+.       rr #NO_ADVANCE
+.    \}
+.    ie \\n[.u]=1 \{\
+.       nr #FILLED 1
+.       nr #FILL_MODE \\n[.j]
+.    \}
+.    el \{\
+.       nr #NOFILL 1
+.       if \\n[.ce]>0 .nr #NOFILL_MODE 3
+.       if \\n[.rj]>0 .nr #NOFILL_MODE 5
+.       ce 0
+.       rj 0
+.    \}
+.    nf
+.    ds $RL_WEIGHT \\$1
+.    ds $RL_INDENT \\$2
+.    ds $RL_DEPTH  \\$3
+.    ie !'\\$4'' \{\
+.       ds $RL_COLOR  \\$4
+.    \}
+.    el .ds $RL_COLOR \\*[default]
+.    nr #SAVED_WEIGHT     \\n[#RULE_WEIGHT]
+.    nr #SAVED_WEIGHT_ADJ \\n[#RULE_WEIGHT_ADJ]
+.    RULE_WEIGHT \\*[$RL_WEIGHT]
+.    gcolor \\*[$RL_COLOR]
+\D't \\n[#RULE_WEIGHT]'\
+\h'\\*[$RL_INDENT]-\\n[#RULE_WEIGHT_ADJ]u'\
+\D'l 0 \\*[$RL_DEPTH]'\
+\D't \\n[#SAVED_RULE_WEIGHT]'
+.    if \\n[#FILLED]=1 \{\
+.       if \\n[#FILL_MODE]=0 .QUAD LEFT
+.       if \\n[#FILL_MODE]=1 .JUSTIFY
+.       if \\n[#FILL_MODE]=3 .QUAD CENTER
+.       if \\n[#FILL_MODE]=5 .QUAD RIGHT
+.       rr #FILLED
+.    \}
+.    sp -1v
+.    if \\n[#NOFILL]=1 \{\
+.       if \\n[#NOFILL_MODE]=3 .CENTER
+.       if \\n[#NOFILL_MODE]=5 .RIGHT
+.    \}
+.    gcolor
+.    nr #RULE_WEIGHT     \\n[#SAVED_WEIGHT]
+.    nr #RULE_WEIGHT_ADJ \\n[#SAVED_WEIGHT_ADJ]
+.    if \\n[#RESTORE_TRAP]=1 \{\
+.       vpt 1
+.       rr #RESTORE_TRAP
+.    \}
+.    if '\\n[.z]'FLOAT*DIV' \
+.       if !(\\n[.d]+\\*[$RL_DEPTH])<\\n[D-float] .nr D-float \\n[.d]+\\*[$RL_DEPTH]
+.END
+\#
+\# BOXES - DBX
+\# -----------
+\# *Arguments:
+\#   <rule weight | SOLID> <indent> <length> <depth> [ <color> ]
+\# *Function:
+\#   Draws described box.
+\# *Notes:
+\#   Boxes are drawn left-to-right, from the baseline down, and
+\#   return to their point of origin.  Box rules are drawn from the
+\#   perimeter inwards.  Color must be set in the macro; otherwise
+\#   the color will be black, regardless of current .gcolor.  If no
+\#   arg given, the rule weight is the one set by RULE_WEIGHT.
+\#
+.MAC DBX END
+.    rr #FILLED
+.    rr #FILL_MODE
+.    rr #NOFILL
+.    rr #NOFILL_MODE
+.    if \\n[.vpt]=1 \{\
+.       vpt 0
+.       nr #RESTORE_TRAP 1
+.    \}
+.    ie !\\n[#NO_ADVANCE]=1 .br
+.    el \{\
+.       sp -1v
+.       rr #NO_ADVANCE
+.    \}
+.    ie \\n[.u]=1 \{\
+.       nr #FILLED 1
+.       nr #FILL_MODE \\n[.j]
+.    \}
+.    el \{\
+.       nr #NOFILL 1
+.       if \\n[.ce]>0 .nr #NOFILL_MODE 3
+.       if \\n[.rj]>0 .nr #NOFILL_MODE 5
+.       ce 0
+.       rj 0
+.    \}
+.    nf
+.    ie '\\$1'SOLID' .nr #BX_SOLID 1
+.    el              .ds $BX_WEIGHT \\$1
+.    ds $BX_INDENT \\$2
+.    ds $BX_WIDTH  \\$3
+.    ds $BX_DEPTH  \\$4
+.    ie !'\\$5'' \{\
+.       ie d$\\$5_FILL .ds $BX_COLOR \\*[$\\$5_FILL]
+.       el             .ds $BX_COLOR \\$5
+.    \}
+.    el .ds $BX_COLOR \\*[default]
+.    nr #SAVED_WEIGHT     \\n[#RULE_WEIGHT]
+.    nr #SAVED_WEIGHT_ADJ \\n[#WEIGHT_ADJ]
+.    if !'\\$1'SOLID' .RULE_WEIGHT \\*[$BX_WEIGHT]
+.    ds $BX_INDENT \\*[$BX_INDENT]-\\n[#WEIGHT_ADJ]u
+.    ie \\n[#BX_SOLID]=1 \{\
+.       fcolor \\*[$BX_COLOR]
+\h'\\*[$BX_INDENT]'\
+\D'P \\*[$BX_WIDTH] 0 0 \\*[$BX_DEPTH] -\\*[$BX_WIDTH] 0 0 -\\*[$BX_DEPTH]'
+.       fcolor
+.       rr #BX_SOLID
+.    \}
+.    el \{\
+.       gcolor \\*[$BX_COLOR]
+\D't \\n[#RULE_WEIGHT]'\
+\h'\\*[$BX_INDENT]'\
+\v'\\n[#WEIGHT_ADJ]u'\
+\D'p \\*[$BX_WIDTH]-\\n[#RULE_WEIGHT]u 0 0 \\*[$BX_DEPTH]-\\n[#RULE_WEIGHT]u -\\*[$BX_WIDTH]+\\n[#RULE_WEIGHT]u 0 0 -\\*[$BX_DEPTH]+\\n[#RULE_WEIGHT]u'\
+\v'-\\n[#WEIGHT_ADJ]u'\
+\D't \\n[#SAVED_RULE_WEIGHT]'
+.       gcolor
+.    \}
+.    sp -1v
+.    if \\n[#FILLED]=1 \{\
+.       if \\n[#FILL_MODE]=0 .QUAD LEFT
+.       if \\n[#FILL_MODE]=1 .JUSTIFY
+.       if \\n[#FILL_MODE]=3 .QUAD CENTER
+.       if \\n[#FILL_MODE]=5 .QUAD RIGHT
+.    \}
+.    if \\n[#NOFILL]=1 \{\
+.       if \\n[#NOFILL_MODE]=3 .CENTER
+.       if \\n[#NOFILL_MODE]=5 .RIGHT
+.    \}
+.    nr #RULE_WEIGHT \\n[#SAVED_WEIGHT]
+.    nr #WEIGHT_ADJ  \\n[#SAVED_WEIGHT_ADJ]
+.    rr #SAVED_WEIGHT
+.    rr #SAVED_WEIGHT_ADJ
+.    if \\n[#RESTORE_TRAP]=1 \{\
+.       vpt 1
+.       rr #RESTORE_TRAP
+.    \}
+.    if '\\n[.z]'FLOAT*DIV' \
+.       if !(\\n[.d]+\\*[$BX_DEPTH])<\\n[D-float] .nr D-float \\n[.d]+\\*[$BX_DEPTH]
+.END
+\#
+\# ELLIPSES - DCL
+\# --------------
+\# *Arguments:
+\#   <rule weight | SOLID> <indent> <width> <depth> [ <color> ]
+\# *Function:
+\#   Draws described ellipses.
+\# *Notes:
+\#   Ellipses (circles) are drawn left-to-right, from the baseline
+\#   down, and return to their point of origin.  Ellipse rules are
+\#   drawn from the perimeter inwards.  Color must be set in the
+\#   macro; otherwise the color will be black, regardless of current
+\#   .gcolor.  If no arg given, the rule weight is the one set by
+\#   RULE_WEIGHT.
+\#
+.MAC DCL END
+.    rr #FILLED
+.    rr #FILL_MODE
+.    rr #NOFILL
+.    rr #NOFILL_MODE
+.    if \\n[.vpt]=1 \{\
+.       vpt 0
+.       nr #RESTORE_TRAP 1
+.    \}
+.    ie !\\n[#NO_ADVANCE]=1 .br
+.    el \{\
+.       sp -1v
+.       rr #NO_ADVANCE
+.    \}
+.    ie \\n[.u]=1 \{\
+.       nr #FILLED 1
+.       nr #FILL_MODE \\n[.j]
+.    \}
+.    el \{\
+.       nr #NOFILL 1
+.       if \\n[.ce]>0 .nr #NOFILL_MODE 3
+.       if \\n[.rj]>0 .nr #NOFILL_MODE 5
+.       ce 0
+.       rj 0
+.    \}
+.    nf
+.    ie '\\$1'SOLID' .nr #CL_SOLID 1
+.    el              .ds $CL_WEIGHT \\$1
+.    ds $CL_INDENT \\$2
+.    ds $CL_WIDTH  \\$3
+.    ds $CL_DEPTH  \\$4
+.    ie !'\\$5'' \{\
+.       ie d$\\$5_FILL .ds $CL_COLOR \\*[$\\$5_FILL]
+.       el             .ds $CL_COLOR \\$5
+.    \}
+.    el .ds $CL_COLOR \\*[default]
+.    nr #SAVED_WEIGHT     \\n[#RULE_WEIGHT]
+.    nr #SAVED_WEIGHT_ADJ \\n[#WEIGHT_ADJ]
+.    if !'\\$1'SOLID' .RULE_WEIGHT \\*[$CL_WEIGHT]
+.    ds $CL_INDENT \\*[$CL_INDENT]-\\n[#WEIGHT_ADJ]u
+.    ie \\n[#CL_SOLID]=1 \{\
+.       fcolor \\*[$CL_COLOR]
+\h'\\*[$CL_INDENT]'\
+\v'\\*[$CL_DEPTH]/2u'\
+\D'E \\*[$CL_WIDTH]-\\n[#RULE_WEIGHT]u \\*[$CL_DEPTH]-\\n[#RULE_WEIGHT]u'\
+\v'-\\*[$CL_DEPTH]/2u'
+.       fcolor
+.       rr #CL_SOLID
+.    \}
+.    el \{\
+.       gcolor \\*[$CL_COLOR]
+\D't \\n[#RULE_WEIGHT]'\
+\h'\\*[$CL_INDENT]'\
+\v'\\*[$CL_DEPTH]/2u'\
+\D'e \\*[$CL_WIDTH]-\\n[#RULE_WEIGHT]u \\*[$CL_DEPTH]-\\n[#RULE_WEIGHT]u'\
+\v'-(\\*[$CL_DEPTH]/2u)'\
+\D't \\n[#SAVED_RULE_WEIGHT]'
+.       gcolor
+.    \}
+.    sp -1v
+.    if \\n[#FILLED]=1 \{\
+.       if \\n[#FILL_MODE]=0 .QUAD LEFT
+.       if \\n[#FILL_MODE]=1 .JUSTIFY
+.       if \\n[#FILL_MODE]=3 .QUAD CENTER
+.       if \\n[#FILL_MODE]=5 .QUAD RIGHT
+.       rr #FILLED
+.    \}
+.    if \\n[#NOFILL]=1 \{\
+.       if \\n[#NOFILL_MODE]=3 .CENTER
+.       if \\n[#NOFILL_MODE]=5 .RIGHT
+.    \}
+.    nr #RULE_WEIGHT \\n[#SAVED_WEIGHT]
+.    nr #WEIGHT_ADJ  \\n[#SAVED_WEIGHT_ADJ]
+.    rr #SAVED_WEIGHT
+.    rr #SAVED_WEIGHT_ADJ
+.    if \\n[#RESTORE_TRAP]=1 \{\
+.       vpt 1
+.       rr #RESTORE_TRAP
+.    \}
+.    if '\\n[.z]'FLOAT*DIV' \
+.       if !(\\n[.d]+\\*[$CL_DEPTH])<\\n[D-float] .nr D-float \\n[.d]+\\*[$CL_DEPTH]
+.END
+\#
+\# RULE WEIGHT
+\# -----------
+\# *Argument:
+\#   <weight of rules in points>
+\# *Function:
+\#   Sets \D't <n>' to the correct number of machine units for the
+\#   argument given in points.
+\# *Notes:
+\#   Decimal fractions are allowed.  Rule weight must be < 100.
+\#
+.MAC RULE_WEIGHT END
+.    di NULL \" Diverted so there's no problem with breaks, spacing, etc.
+.       ds $ARG \\$1
+.       substring $ARG -1
+.       if !\B'\\*[$ARG]' \{\
+.          tm1 "[mom]: The argument to \\$0 must not have a unit of measure appended.
+.          ab   [mom]: Aborting '\\n[.F]' at \\$0, line \\n[.c].
+.       \}
+.       length #STR_LENGTH \\$1
+.       ds $ARG \\$1
+.       substring $ARG 0 0
+.       ie '\\*[$ARG]'.' \{\
+.          ds $ARG \\$1
+.          substring $ARG 1 \\n[#STR_LENGTH]-1
+.          nr #WEIGHT \\*[$ARG]*100
+.          if (\\n[#WEIGHT]>=1000) \{\
+.              while (\\n[#WEIGHT]>=1000) \{\
+.                 nr #WEIGHT \\n[#WEIGHT]/10
+.              \}
+.          \}
+.       \}
+.       el \{\
+.          ds $ARG \\$1
+.          length #ARG_LENGTH \\*[$ARG]
+.          if \\n[#ARG_LENGTH]>1 .substring $ARG 1 1
+.          ie '\\*[$ARG]'.' \{\
+.             ds $LHS \\$1
+.             substring $LHS 0 0
+.             ds $RHS \\$1
+.             substring $RHS 2
+.             nr #WEIGHT \\*[$LHS]\\*[$RHS]*100
+.             if (\\n[#WEIGHT]>=10000) \{\
+.                while (\\n[#WEIGHT]>=10000) \{\
+.                   nr #WEIGHT \\n[#WEIGHT]/10
+.                \}
+.             \}
+.          \}
+.          el \{\
+.             ie \\n[#STR_LENGTH]<=2 .nr #WEIGHT \\$1*1000
+.             el \{\
+.                ds $ARG \\$1
+.                substring $ARG 2 2
+.                ie !'\\*[$ARG]'.' \{\
+.                   tm1 "[mom]: Invalid argument given to macro \\$0 at line \\n[.c].
+.                   tm1 "       Rule weight must be < 100 points.
+.                   tm1 "       Falling back to default weight .5 points.
+.                   nr #WEIGHT 500
+.                \}
+.                el \{\
+.                   ds $LHS \\$1
+.                   substring $LHS 0 1
+.                   ds $RHS \\$1
+.                   substring $RHS 3
+.                   nr #WEIGHT \\*[$LHS]\\*[$RHS]*1000
+.                   if (\\n[#WEIGHT]>=100000) \{\
+.                      while (\\n[#WEIGHT]>=100000) \{\
+.                         nr #WEIGHT \\n[#WEIGHT]/10
+.                      \}
+.                   \}
+.                \}
+.             \}
+.          \}
+.       \}
+.       nr #WEIGHT_ADJ \\n[#WEIGHT]/2
+.       if '\\$0'BIBLIOGRAPHY_STRING_UNDERLINE_WEIGHT' \
+.          ds $TITLE_TYPE BIB_STRING_
+.       if '\\$0'ENDNOTE_TITLE_UNDERLINE_WEIGHT' \
+.          ds $TITLE_TYPE EN_TITLE_
+.       if '\\$0'EN_HEADER_UNDERLINE_WEIGHT' \
+.          ds $TITLE_TYPE EN_STRING_
+.       if !'\\*[$TITLE_TYPE]'BIB_STRING' \
+.          if !'\\*[$TITLE_TYPE]'EN_TITLE' \
+.             if !'\\*[$TITLE_TYPE]'EN_STRING' \
+.                ds _TYPE \\$0
+.       length type-len _TYPE
+.       if \\n[type-len]>17 \{\
+.          substring _TYPE 0 -17
+.          ds $TITLE_TYPE \\*[_TYPE]
+.       \}
+.       if !'\\*[$TITLE_TYPE]'' \{\
+.          nr #\\*[$TITLE_TYPE]UNDERLINE_WEIGHT \\n[#WEIGHT]
+.          nr #\\*[$TITLE_TYPE]UNDERLINE_WEIGHT_ADJ \\n[#WEIGHT_ADJ]
+.       \}
+.       if '\\$0'RULE_WEIGHT' \{\
+.          nr #RULE_WEIGHT     \\n[#WEIGHT]
+.          nr #RULE_WEIGHT_ADJ \\n[#WEIGHT_ADJ]
+.       \}
+.       if '\\$0'UNDERSCORE_WEIGHT' \{\
+.          nr #UNDERSCORE_WEIGHT     \\n[#WEIGHT]
+.          nr #UNDERSCORE_WEIGHT_ADJ \\n[#WEIGHT_ADJ]
+.       \}
+.       if '\\$0'FOOTER_RULE_WEIGHT' \{\
+.          nr #FOOTER_RULE_WEIGHT     \\n[#WEIGHT]
+.          nr #FOOTER_RULE_WEIGHT_ADJ \\n[#WEIGHT_ADJ]
+.       \}
+.       if '\\$0'FOOTNOTE_RULE_WEIGHT' \{\
+.          nr #FN_RULE_WEIGHT     \\n[#WEIGHT]
+.          nr #FN_RULE_WEIGHT_ADJ \\n[#WEIGHT_ADJ]
+.       \}
+.       if '\\$0'HEADER_RULE_WEIGHT' \{\
+.          nr #HEADER_RULE_WEIGHT     \\n[#WEIGHT]
+.          nr #HEADER_RULE_WEIGHT_ADJ \\n[#WEIGHT_ADJ]
+.       \}
+.    di
+.END
+\#
+\# Aliases for RULE_WEIGHT
+\# 
+.ALIAS BIB_STRING_UNDERLINE_WEIGHT RULE_WEIGHT
+.ALIAS DOCTYPE_UNDERLINE_WEIGHT    RULE_WEIGHT
+.ALIAS EN_STRING_UNDERLINE_WEIGHT  RULE_WEIGHT
+.ALIAS EN_TITLE_UNDERLINE_WEIGHT   RULE_WEIGHT
+.ALIAS FN_RULE_WEIGHT              RULE_WEIGHT
+.ALIAS FOOTER_RULE_WEIGHT          RULE_WEIGHT
+.ALIAS FOOTNOTE_RULE_WEIGHT        RULE_WEIGHT
+.ALIAS HEADER_RULE_WEIGHT          RULE_WEIGHT
+.ALIAS RULE_WEIGHT                 RULE_WEIGHT
+.ALIAS TOC_HEADER_UNDERLINE_WEIGHT RULE_WEIGHT
+.ALIAS UNDERSCORE_WEIGHT           RULE_WEIGHT
+\#
+\# Default rule weights
+\# 
+.nr #BIB_STRING_UNDERLINE_WEIGHT 500
+.nr #DOCTYPE_UNDERLINE_WEIGHT    500
+.nr #EN_STRING_UNDERLINE_WEIGHT  500
+.nr #EN_TITLE_UNDERLINE_WEIGHT   500
+.nr #FN_RULE_WEIGHT              500
+.nr #FOOTER_RULE_WEIGHT          500
+.nr #HEADER_RULE_WEIGHT          500
+.nr #RULE_WEIGHT                 500
+.nr #TOC_HEADER_UNDERLINE_WEIGHT 500
+.nr #UNDERSCORE_WEIGHT           500
+\#
+.nr #BIB_STRING_UNDERLINE_WEIGHT_ADJ \n[#BIB_STRING_UNDERLINE_WEIGHT]/2
+.nr #DOCTYPE_UNDERLINE_WEIGHT_ADJ    \n[#DOCTYPE_UNDERLINE_WEIGHT]/2
+.nr #EN_STRING_UNDERLINE_WEIGHT_ADJ  \n[#EN_STRING_UNDERLINE_WEIGHT]/2
+.nr #EN_TITLE_UNDERLINE_WEIGHT_ADJ   \n[#EN_TITLE_UNDERLINE_WEIGHT]/2
+.nr #FN_RULE_WEIGHT_ADJ              \n[#FN_RULE_WEIGHT]/2
+.nr #FOOTER_RULE_WEIGHT_ADJ          \n[#FOOTER_RULE_WEIGHT]/2
+.nr #HEADER_RULE_WEIGHT_ADJ          \n[#HEADER_RULE_WEIGHT]/2
+.nr #RULE_WEIGHT_ADJ                 \n[#RULE_WEIGHT]/2
+.nr #TOC_HEADER_UNDERLINE_WEIGHT_ADJ \n[#TOC_HEADER_UNDERLINE_WEIGHT]/2
+.nr #UNDERSCORE_WEIGHT_ADJ           \n[#UNDERSCORE_WEIGHT]/2
+\#
+\# Read in remaining aliases and default rule weights
+\#
+.nr #LOOP 0 1
+.while \n+[#LOOP]<=14 \{\
+. ALIAS \*[TITLE_TYPE_\n[#LOOP]]_UNDERLINE_WEIGHT           RULE_WEIGHT
+. ALIAS COVER_\*[TITLE_TYPE_\n[#LOOP]]_UNDERLINE_WEIGHT     RULE_WEIGHT
+. ALIAS DOC_COVER_\*[TITLE_TYPE_\n[#LOOP]]_UNDERLINE_WEIGHT RULE_WEIGHT
+. nr #\*[TITLE_TYPE_\n[#LOOP]]_UNDERLINE_WEIGHT            500
+. nr #COVER_\*[TITLE_TYPE_\n[#LOOP]]_UNDERLINE_WEIGHT      500
+. nr #DOC_COVER_\*[TITLE_TYPE_\n[#LOOP]]_UNDERLINE_WEIGHT  500
+. nr #\*[TITLE_TYPE_\n[#LOOP]]_UNDERLINE_WEIGHT_ADJ \
+    \n[#\*[TITLE_TYPE_\n[#LOOP]]_UNDERLINE_WEIGHT]/2
+. nr #COVER_\*[TITLE_TYPE_\n[#LOOP]]_UNDERLINE_WEIGHT_ADJ \
+    \n[#COVER_\*[TITLE_TYPE_\n[#LOOP]]_UNDERLINE_WEIGHT]/2
+. nr #DOC_COVER_\*[TITLE_TYPE_\n[#LOOP]]_UNDERLINE_WEIGHT_ADJ \
+    \n[#DOC_COVER_\*[TITLE_TYPE_\n[#LOOP]]_UNDERLINE_WEIGHT]/2
+.\}
+\#
+\# Set default rule weight
+\#
+.di NULL
+\D't 500'
+.di
+\#
+\# =====================================================================
+\#
+\# +++WORD AND SENTENCE SPACING+++
+\#
+\# WORD SPACE CONTROL
+\# ------------------
+\# *Argument:
+\#   <+|->wordspace | DEFAULT
+\# *Function:
+\#   Increases or decreases interword space by user supplied amount.
+\#   If DEFAULT, value is set to 12 (groff default).
+\# *Notes:
+\#   $WS_CONSTANT is the groff default word space.
+\#   $WS_VAR is the user supplied amount by which to in/decrease word space.
+\#   $WS is a concatenation of WS_CONSTANT and WS_VAR.
+\#
+\#   \n[.sss] holds the current sentence space value.
+\#
+.MAC WS END
+.    ds $WS_CURR \\n[.ss]
+.    ds $WS_VAR  \\$1
+.    ie '\\$1'DEFAULT' .ss 12 \\n[.sss]
+.    el \{\
+.       ds $WS (\\*[$WS_CURR]\\*[$WS_VAR])
+.       ie \\n[.sss]=12 .ss \\*[$WS] 12
+.       el \{\
+.          ss \\*[$WS] (\\*[$WS]\\*[$SS_VAR])
+.          SS \\*[$SS_VAR]
+.      \}
+.    \}
+.END
+\#
+\# SENTENCE SPACE CONTROL
+\# ----------------------
+\# *Argument:
+\#   <+-sentencespace> | 0 | DEFAULT
+\# *Function:
+\#   Increases or decreases sentence space by user supplied amount.
+\#   If 0, sentence spaces are ignored.  If DEFAULT, value is
+\#   set to 12 (groff default).
+\# *Notes:
+\#   Because the user supplied value requires a literal + or - sign,
+\#   the macro argument is stored in a string.
+\#
+\#   Sentence space applies only to input where sentences are separated
+\#   by two spaces (and/or, in fill mode [FLUSH L|R|C or JUSTIFY], an EOL).
+\#   Changing .SS when sentences are separated by only one space has
+\#   no effect on the space between sentences.
+\#
+\#   \n[.ss] holds the current wordspace value.
+\#   \n[.sss] holds the current sentence space value.
+\#
+.MAC SS END
+.    ds $SS_VAR \\$1
+.    ie '\\$1'0' .ss \\n[.ss] (\\n[.ss]-\\n[.ss])
+.    el \{\
+.       ie '\\$1'DEFAULT' .ss \\n[.ss]
+.       el                .ss \\n[.ss] (0+\\*[$SS_VAR])
+.    \}
+.END
+\#
+\# =====================================================================
+\#
+\# INDENTS
+\# -------
+\#
+\# +++INDENT LEFT+++
+\#
+.MAC IL END
+.    if \\n[#INDENT_STYLE_BOTH] .IBX
+.    nr #INDENT_STYLE_LEFT  1
+.    nr #INDENT_ACTIVE      1
+.    nr #INDENT_LEFT_ACTIVE 1
+.    ie '\\$1'' \{\
+.       br
+.       in \\n[#L_INDENT]u
+.       ta \\n[.l]u-\\n[#L_INDENT]u
+.    \}
+.    el \{\
+.       br
+.       nr #L_INDENT +(\\$1)
+.       in \\n[#L_INDENT]u
+.       ta \\n[.l]u-\\n[#L_INDENT]u
+.    \}
+.    if \\n[#IN_ITEM] .nr #IN_ITEM_L_INDENT +(\\$1)
+.END
+\#
+\# +++INDENT RIGHT+++
+\#
+.MAC IR END
+.    if \\n[#INDENT_STYLE_BOTH] .IBX
+.    nr #INDENT_STYLE_RIGHT   1
+.    nr #INDENT_ACTIVE        1
+.    nr #INDENT_RIGHT_ACTIVE  1
+.    ie '\\$1'' \{\
+.       br
+.       ie \\n[#TAB_ACTIVE] \{\
+.          ll \\n[.l]u-\\n[#R_INDENT]u
+.          ta \\n[.l]u-\\n[#L_INDENT]u
+.       \}
+.       el \{\
+.          ll \\n[.l]u-\\n[#R_INDENT]u
+.          ta \\n[.l]u-\\n[#L_INDENT]u
+.       \}
+.    \}
+.    el \{\
+.       br
+.       nr #R_INDENT +(\\$1)
+.       ie \\n[#TAB_ACTIVE] \{\
+.          ll \\n[.l]u-\\n[#R_INDENT]u
+.          ta \\n[.l]u-\\n[#L_INDENT]u
+.       \}
+.       el \{\
+.          ll \\n[.l]u-\\n[#R_INDENT]u
+.          ta \\n[.l]u-\\n[#L_INDENT]u
+.       \}
+.    \}
+.END
+\#
+\# +++INDENT BOTH+++
+\#
+.MAC IB END
+.    if \\n[#INDENT_STYLE_LEFT] .ILX
+.    if \\n[#INDENT_STYLE_RIGHT] .IRX
+.    nr #INDENT_STYLE_BOTH  1
+.    nr #INDENT_ACTIVE      1
+.    nr #INDENT_BOTH_ACTIVE 1
+.    ie '\\$1'' \{\
+.       br
+.       in \\n[#BL_INDENT]u
+.       ie \\n[#TAB_ACTIVE] \{\
+.          ll \\n[.l]u-\\n[#BR_INDENT]u
+.          ta \\n[.l]u-\\n[#BR_INDENT]u
+.       \}
+.       el \{\
+.          ll \\n[.l]u-\\n[#BR_INDENT]u
+.          ta \\n[.l]u-\\n[#BR_INDENT]u
+.       \}
+.    \}
+.    el \{\
+.       br
+.       nr #BL_INDENT (\\n[#INDENT]+\\$1)
+.       ie \\n[#NUM_ARGS]=2 .nr #BR_INDENT +(\\$2)
+.       el .nr #BR_INDENT \\n[#BL_INDENT]
+.       ie \\n[#TAB_ACTIVE] \{\
+.          in \\n[#BL_INDENT]u
+.          ll \\n[.l]u-\\n[#BR_INDENT]u
+.          ta \\n[.l]u-\\n[#BL_INDENT]u
+.       \}
+.       el \{\
+.          in \\n[#BL_INDENT]u
+.          ll \\n[.l]u-\\n[#BR_INDENT]u
+.          ta \\n[.l]u-\\n[#BR_INDENT]u
+.       \}
+.    \}
+.END
+\#
+\# +++TEMPORARY INDENT+++
+\#
+.MAC TI END
+.    br
+.    ie '\\$1'' \{\
+.       ti \\n[#T_INDENT]u
+.       if \\n[#INDENT_LEFT_ACTIVE] .ti \\n[#T_INDENT]u+\\n[#L_INDENT]u
+.       if \\n[#INDENT_BOTH_ACTIVE] .ti \\n[#T_INDENT]u+\\n[#BL_INDENT]u
+.    \}
+.    el \{\
+.       nr #T_INDENT (\\$1)
+.       ti \\n[#T_INDENT]u
+.    \}
+.END
+\#
+\# +++HANGING INDENT+++
+\#
+.MAC HI END
+.    ie '\\$1'' .ti -\\n[#HL_INDENT]u
+.    el \{\
+.       nr #HL_INDENT (\\$1)
+.       ti -\\n[#HL_INDENT]u
+.    \}
+.END
+\#
+\# +++INDENTS OFF+++
+\#
+.MAC ILX END
+.    ie \\n[#IN_ITEM] .nr #L_INDENT -\\n[#IN_ITEM_L_INDENT]
+.    el \{\
+.       br
+.       in 0
+.       rr #INDENT_LEFT_ACTIVE
+.    \}
+.    if '\\$1'CLEAR' \{\
+.       rr #L_INDENT
+.       rr #INDENT_STYLE_LEFT
+.    \}
+.END
+\#
+.MAC IRX END
+.    br
+.    rr #INDENT_RIGHT_ACTIVE
+.    ie \\n[#TAB_ACTIVE] .TAB\\n[#CURRENT_TAB]
+.    el \{\
+.       ie \\n[#COLUMNS] \{\
+.          ll \\n[#COL_L_LENGTH]u
+.          ta \\n[.l]u
+.       \}
+.       el \{\
+.          ll \\n[#L_LENGTH]u
+.          ta \\n[.l]u
+.       \}
+.    \}
+.    if '\\$1'CLEAR' \{\
+.       rr #R_INDENT
+.       rr #INDENT_STYLE_RIGHT
+.    \}
+.END
+\#
+.MAC IBX END
+.    br
+.    in 0
+.    rr #INDENT_BOTH_ACTIVE
+.    ie \\n[#TAB_ACTIVE] .TAB\\n[#CURRENT_TAB]
+.    el \{\
+.       ie \\n[#COLUMNS] \{\
+.          ll \\n[#COL_L_LENGTH]u
+.          ta \\n[.l]u
+.       \}
+.       el \{\
+.          ll \\n[#L_LENGTH]u
+.          ta \\n[.l]u
+.       \}
+.    \}
+.    if '\\$1'CLEAR' \{\
+.       rr #BL_INDENT
+.       rr #BR_INDENT
+.       rr #INDENT_STYLE_BOTH
+.    \}
+.END
+\#
+.MAC IX END
+.    if '\\$0'IX' \{\
+.       if !\\n[#IX_WARN] \{\
+.          tm1 "[mom]: Use of .IX is deprecated.  Use .IQ instead.
+.          tm1 "      .IX will continue to behave as before, but to
+.          tm1 "       avoid this message, please update your document.
+.          nr #IX_WARN 1
+.       \}
+.    \}
+.    br
+.    in 0
+.    rr #INDENT_LEFT_ACTIVE
+.    rr #INDENT_RIGHT_ACTIVE
+.    rr #INDENT_BOTH_ACTIVE
+.    if \\n[#INDENT_STYLE_RIGHT] \{\
+.       ie \\n[#TAB_ACTIVE] .TAB\\n[#CURRENT_TAB]
+.       el \{\
+.          ie \\n[#COLUMNS] \{\
+.             ll \\n[#COL_L_LENGTH]u
+.             ta \\n[.l]u
+.          \}
+.          el \{\
+.             ll \\n[#L_LENGTH]u
+.             ta \\n[.l]u
+.          \}
+.       \}
+.    \}
+.    if \\n[#INDENT_STYLE_BOTH] \{\
+.       ie \\n[#TAB_ACTIVE] .TAB\\n[#CURRENT_TAB]
+.       el \{\
+.          ie \\n[#COLUMNS] \{\
+.             ll \\n[#COL_L_LENGTH]u
+.             ta \\n[.l]u
+.          \}
+.          el \{\
+.             ll \\n[#L_LENGTH]u
+.             ta \\n[.l]u
+.          \}
+.       \}
+.    \}
+.    if '\\$1'CLEAR' \{\
+.       if \\n[#INDENT_STYLE_RIGHT] \{\
+.          ie \\n[#TAB_ACTIVE] .TAB\\n[#CURRENT_TAB]
+.          el \{\
+.             ie \\n[#COLUMNS] \{\
+.                ll \\n[#COL_L_LENGTH]u
+.                ta \\n[.l]u
+.             \}
+.             el \{\
+.                ll \\n[#L_LENGTH]u
+.                ta \\n[.l]u
+.             \}
+.          \}
+.       \}
+.       if \\n[#INDENT_STYLE_BOTH] \{\
+.          ie \\n[#TAB_ACTIVE] .TAB\\n[#CURRENT_TAB]
+.          el \{\
+.             ie \\n[#COLUMNS] \{\
+.                ll \\n[#COL_L_LENGTH]u
+.                ta \\n[.l]u
+.             \}
+.             el \{\
+.                ll \\n[#L_LENGTH]u
+.                ta \\n[.l]u
+.             \}
+.          \}
+.       \}
+.       rr #L_INDENT
+.       rr #R_INDENT
+.       rr #BL_INDENT
+.       rr #BR_INDENT
+.       rr #T_INDENT
+.       rr #H_INDENT
+.       rr #INDENT_STYLE_LEFT
+.       rr #INDENT_STYLE_RIGHT
+.       rr #INDENT_STYLE_BOTH
+.    \}
+.    rr #INDENT_ACTIVE
+.END
+\#
+\# =====================================================================
+\#
+\# +++MULTIPLE COLUMNS+++
+\#
+\# MULTIPLE COLUMNS ON
+\# -------------------
+\# *Arguments:
+\#   <none>
+\# *Function:
+\#   Marks the top of a column set
+\#
+.MAC MCO END
+.    mk c
+.END
+\#
+\# MULTIPLE COLUMN RETURN
+\# ----------------------
+\# *Arguments:
+\#   <none>
+\# *Function:
+\#   Returns to the top of a column set
+\#
+.MAC MCR END
+.    TRAP OFF
+.    sp |\\n[c]u
+.    TRAP
+.END
+\#
+\# MULTIPLE COLUMNS OFF
+\# --------------------
+\# *Arguments:
+\#   <none> | <lead to advance beneath bottom of deepest column>
+\# *Function:
+\#   Advances to the end of a column set
+\# *Notes:
+\#   With no argument, advances to the next baseline (at the current
+\#   leading value) beneath the longest column.  With an argument
+\#   (which requires a unit of measure), advances arg distance
+\#   beneath the baseline of the deepest column.  If the argument
+\#   is zero, advances to the baseline of the deepest column.
+\#
+.MAC MCX END
+.    TRAP OFF
+.    ie '\\$1'' \{\
+.       TQ
+.       sp |\\n[.h]u
+.    \}
+.    el \{\
+.       nr #MCX_ALD (\\$1)
+.       TQ
+.       ie \\n[#MCX_ALD]=0 .sp |\\n[.h]u-1v
+.       el .sp |\\n[.h]u+\\n[#MCX_ALD]u
+.       rr #MCX_ALD
+.    \}
+.    TRAP
+.END
+\#
+\# =====================================================================
+\#
+\# +++TYPESETTING SUPPORT MACROS+++
+\#
+\# TRAP
+\# ----
+\# *Arguments:
+\#   toggle
+\# *Function:
+\#   Enables/disables traps.
+\# *Notes:
+\#   EL and TN don't function as advertised on the last line before
+\#   a trap (when they break the preceding line, they spring the
+\#   trap, and groff won't back up to the line preceding the trap).
+\#   TRAP is a kludge to get EL and TN work properly on last lines.
+\#   The user simply enloses the offending lines in TRAP OFF/TRAP.
+\#
+.MAC TRAP END
+.    ie '\\$1'' .vpt 1
+.    el         .vpt 0
+.END
+\#
+\# SILENT
+\# ------
+\# *Arguments:
+\#   <none> | <anything>
+\# *Function:
+\#   Diverts text so that it doesn't print, or turns the function off.
+\# *Notes:
+\#   Useful for setting up autotabs where you don't want the line with
+\#   the tab marks to print.
+\#
+\#   Also aliased as COMMENT, in case user wants to input a batch of
+\#   text that doesn't print.
+\#
+.MAC SILENT END
+.    nr #SILENT 1
+.    if \\n[#QUAD] .br
+.    ie '\\$1'' .di NO_FLASH
+.    el \{\
+.       br
+.       di
+.       rm NO_FLASH
+.       rr #SILENT
+.    \}
+.END
+\#
+\# PRINT
+\# -----
+\# *Function:
+\#   Prints anything.  A macro that helps keep my code nicely indented.
+\#
+.MAC PRINT END
+.    nop \\$*
+.END
+\#
+\# Numbered strings for while loop in SMALLCAPS.
+\#
+.ds $c1 a
+.ds $c2 b
+.ds $c3 c
+.ds $c4 d
+.ds $c5 e
+.ds $c6 f
+.ds $c7 g
+.ds $c8 h
+.ds $c9 i
+.ds $c10 j
+.ds $c11 k
+.ds $c12 l
+.ds $c13 m
+.ds $c14 n
+.ds $c15 o
+.ds $c16 p
+.ds $c17 q
+.ds $c18 r
+.ds $c19 s
+.ds $c20 t
+.ds $c21 u
+.ds $c22 v
+.ds $c23 w
+.ds $c24 x
+.ds $c25 y
+.ds $c26 z
+.ds $c27 \[`a]
+.ds $c28 \[^a]
+.ds $c29 \['a]
+.ds $c30 \[:a]
+.ds $c31 \[oa]
+.ds $c32 \[~a]
+.ds $c33 \[ae]
+.ds $c34 \[`e]
+.ds $c35 \[^e]
+.ds $c36 \['e]
+.ds $c37 \[:e]
+.ds $c38 \[`i]
+.ds $c39 \[^i]
+.ds $c40 \['i]
+.ds $c41 \[:i]
+.ds $c42 \[`o]
+.ds $c43 \[^o]
+.ds $c44 \['o]
+.ds $c45 \[:o]
+.ds $c46 \[~o]
+.ds $c47 \[/o]
+.ds $c48 \[`u]
+.ds $c49 \[^u]
+.ds $c50 \['u]
+.ds $c51 \[:u]
+.ds $c52 \[,c]
+.ds $c53 \[Sd]
+.ds $c54 \[~n]
+.ds $c55 \[Sd]
+.ds $c56 \[Tp]
+.ds $c57 \['y]
+.ds $c58 \[:y]
+\#
+.ds $C1 A
+.ds $C2 B
+.ds $C3 C
+.ds $C4 D
+.ds $C5 E
+.ds $C6 F
+.ds $C7 G
+.ds $C8 H
+.ds $C9 I
+.ds $C10 J
+.ds $C11 K
+.ds $C12 L
+.ds $C13 M
+.ds $C14 N
+.ds $C15 O
+.ds $C16 P
+.ds $C17 Q
+.ds $C18 R
+.ds $C19 S
+.ds $C20 T
+.ds $C21 U
+.ds $C22 V
+.ds $C23 W
+.ds $C24 X
+.ds $C25 Y
+.ds $C26 Z
+.ds $C27 \[`A]
+.ds $C28 \[^A]
+.ds $C29 \['A]
+.ds $C30 \[:A]
+.ds $C31 \[oA]
+.ds $C32 \[~A]
+.ds $C33 \[AE]
+.ds $C34 \[`E]
+.ds $C35 \[^E]
+.ds $C36 \['E]
+.ds $C37 \[:E]
+.ds $C38 \[`I]
+.ds $C39 \[^I]
+.ds $C40 \['I]
+.ds $C41 \[:I]
+.ds $C42 \[`O]
+.ds $C43 \[^O]
+.ds $C44 \['O]
+.ds $C45 \[:O]
+.ds $C46 \[~O]
+.ds $C47 \[/O]
+.ds $C48 \[`U]
+.ds $C49 \[^U]
+.ds $C50 \['U]
+.ds $C51 \[:U]
+.ds $C52 \[,C]
+.ds $C53 \[-D]
+.ds $C54 \[~N]
+.ds $C55 \[-D]
+.ds $C56 \[TP]
+.ds $C57 \['Y]
+.ds $C58 \[:Y]
+\#
+\# CAPS
+\# ----
+\# *Arguments:
+\#   <none> | <anything>
+\# *Function:
+\#   Converts text to caps, or, if OFF, reverts to normal caps/lc.
+\# *Notes:
+\#   For inline control of capitalization style, use \*[UC] and
+\#   \*[LC].
+\#
+.MAC CAPS END
+.    ie '\\$1'' \{\
+.       LC_TO_CAPS
+.       nr #CAPS_ON 1
+.    \}
+.    el \{\
+.       CAPS_TO_LC
+.       rr #CAPS_ON
+.    \}
+.END
+\#
+.MAC UC END
+\c
+.    LC_TO_CAPS
+.    nr #CAPS_ON 1
+.END
+\#
+.MAC LC END
+\c
+.    CAPS_TO_LC
+.    rr #CAPS_ON
+.END
+\#
+\# Perform lowercase conversion to caps or revert to lowercase
+\#
+.MAC CONVERT_CASE END
+.    if '\\$0'LC_TO_CAPS' \{\
+.       nr #LOOP 0 1
+.       while \\n+[#LOOP]<=58 \{\
+.          tr \\*[$c\\n[#LOOP]]\\*[$C\\n[#LOOP]]  
+.       \}
+.    \}
+.    if '\\$0'CAPS_TO_LC' \{\
+.       nr #LOOP 0 1
+.       while \\n+[#LOOP]<=58 \{\
+.          tr \\*[$c\\n[#LOOP]]\\*[$c\\n[#LOOP]]  
+.       \}
+.    \}
+.END
+.
+.ALIAS LC_TO_CAPS CONVERT_CASE
+.ALIAS CAPS_TO_LC CONVERT_CASE
+.
+\#
+\# SMALLCAPS
+\# ---------
+\# *Arguments:
+\#   <none> | <anything>
+\# *Function:
+\#   Converts text to smallcaps, or, if OFF, reverts to normal caps/lc.
+\# *Notes:
+\#   SMALLCAPS has no inline escape eqiv. to \*[UC].
+\#
+.MAC SMALLCAPS END
+.    if \\n[.int] .nop \& \c
+.    nr sc*size \\n[.ps]*\\n[sc*factor]/1000
+.    if \\n[sc*wt-adj] .nr sc*wt-adj-factor \\n[sc*size]*\\n[sc*wt-adj]/1000
+.    if \\n[sc*extend] .nr sc*extend-factor \\n[sc*size]*\\n[sc*extend]/1000
+.    ie '\\$1'' \{\
+.       nr #SMALLCAPS_ON 1
+.       nr #LOOP 0 1
+.       while \\n+[#LOOP]<=58 \{\
+.       char \\*[$c\\n[#LOOP]] \
+\Z'\s[\\n[sc*size]u+\\n[sc*extend-factor]u]\H'-\\n[sc*extend-factor]u'\
+\\*[$C\\n[#LOOP]]'\
+\h'\\n[sc*wt-adj-factor]u'\\*[$C\\n[#LOOP]]\s[0]
+.       \}
+.    \}
+.    el \{\
+.       nr #LOOP 0 1
+.       while \\n+[#LOOP]<=58 \{\
+.          rchar \\*[$c\\n[#LOOP]]
+.      \}
+.      rr sc*wt-adj-factor
+.      rr sc*extend-factor
+.      rr #SMALLCAPS_ON
+.    \}
+.END
+\#
+\# SMALLCAPS_SIZE
+\# --------------
+\# *Arguments:
+\#   <size> [ <weight adjustment>
+\# *Function:
+\#   Sets registers 'sc*factor', 'sc*wt-adj', and sc*extend.
+\# *Notes:
+\#   Weight adjustment pseudo-emboldens small caps to visually match the
+\#   weight of the larger real caps.
+\#
+\#   Both sc*factor (size) and sc*wt-adj (weight adjustment) args are
+\#   expressed as percentages of type size.
+\#
+.MAC SMALLCAPS_STYLE END
+.    nr #LOOP 0 1
+.    while \\n+[#LOOP]<=\\n[#NUM_ARGS] \{\
+.       if '\\$1'SIZE' \{\
+.          shift
+.          nr sc*factor (z;\\$1)/100
+.          shift
+.       \}
+.       if '\\$1'WEIGHT_ADJ' \{\
+.          shift
+.          nr sc*wt-adj (z;\\$1)/100
+.          shift
+.       \}
+.       if '\\$1'EXTEND' \{\
+.          shift
+.          nr sc*extend (z;\\$1)/100
+.          shift
+.       \}
+.    \}
+.    if \\n[sc*wt-adj]=0 .rr sc*wt-adj
+.    if \\n[sc*extend]=0 .rr sc*extend
+.END
+.
+.SMALLCAPS_STYLE \
+SIZE 74 \
+WEIGHT_ADJ .3 \
+EXTEND 5
+\#
+\# SIZESPECS
+\# ---------
+\# Argument:
+\#   <none>
+\# Function:
+\#   Gets cap-height, x-height, and descender depth of the
+\#   current font at the current point size.
+\# *Notes:
+\#   The routine is diverted so it remains invisible to output.
+\#
+.MAC SIZESPECS END
+.    if '\\n[.z]'FLOAT*DIV' \
+.       if \\n[dn] .nr saved-dn \\n[dn]
+.    di TYPESIZE
+E\R'#CAP_HEIGHT \\n[.cht]'
+e\R'#X_HEIGHT \\n[.cht]'
+y\R'#DESCENDER \\n[.cdp]'
+.    br
+.    ds $CAP_HEIGHT \\n[#CAP_HEIGHT]u
+.    ds $X_HEIGHT \\n[#X_HEIGHT]u
+.    ds $DESCENDER \\n[#DESCENDER]u
+.    di
+.    if '\\n[.z]'FLOAT*DIV' \
+.       nr dn \\n[saved-dn]
+.END
+\#
+\# =====================================================================
+\#
+\# +++TYPESETTING ALIASES+++
+\#
+.ALIAS ADD_SPACE         ALD
+.ALIAS CENTRE            CENTER
+.ALIAS COLOUR            COLOR
+.ALIAS COMMENT           SILENT
+.ALIAS CONDENSE          CONDENSE_OR_EXTEND
+.ALIAS EXTEND            CONDENSE_OR_EXTEND
+.ALIAS FAM               FAMILY
+.ALIAS FONT              FT
+.ALIAS HYPHENATE         HY
+.ALIAS HYPHENATION       HY
+.ALIAS HYSET             HY_SET
+.ALIAS IBQ               IBX
+.ALIAS ILQ               ILX
+.ALIAS IQ                IX
+.ALIAS IRQ               IRX
+.ALIAS LIG               LIGATURES
+.ALIAS NEWCOLOUR         NEWCOLOR
+.ALIAS PADMARKER         PAD_MARKER
+.ALIAS SP                ALD
+.ALIAS SPACE             ALD
+.ALIAS TABSET            TAB_SET
+.ALIAS TB                TAB
+.ALIAS UNDERSCORE_2      UNDERSCORE2
+.ALIAS XCOLOUR           XCOLOR
+.ALIAS PDF_LINK_COLOUR   PDF_LINK_COLOR
+.ALIAS AUTO_TOC_RELOCATE AUTO_RELOCATE_TOC
+\#
+\# ====================================================================
+\#
+\# DOCUMENT PROCESSING MACROS, STRINGS AND ALIASES
+\# ===============================================
+\#
+\# DOC_MACRO_ERROR
+\# ---------------
+\# *Arguments:
+\#   None.
+\# *Function:
+\#   Warning message if DOC_<PARAMETER> called before START.
+\#
+.MAC DOC_MACRO_ERROR END
+.    if '\\$1'DOC_L_MARGIN'    .ds $REPLACEMENT L_MARGIN
+.    if '\\$1'DOC_R_MARGIN'    .ds $REPLACEMENT R_MARGIN
+.    if '\\$1'DOC_LINE_LENGTH' .ds $REPLACEMENT LL
+.    if '\\$1'DOC_FAMILY'      .ds $REPLACEMENT "FAMILY or FAM
+.    if '\\$1'DOC_PT_SIZE'     .ds $REPLACEMENT PT_SIZE
+.    if '\\$1'DOC_LEAD'        .ds $REPLACEMENT LS
+.    if '\\$1'DOC_QUAD'        .ds $REPLACEMENT QUAD
+.    tm1 "[mom]: \\$1 at line \\n[.c] of '\\n[.F]' should not be used before START.
+.    tm1 "       Use \\*[$REPLACEMENT] instead.
+.    ab   [mom]: Aborting.
+.END
+\#
+\# +++PAGE DIMENSIONS+++
+\#
+\# PAPER SIZE
+\# ----------
+\# *Arguments:
+\#   LETTER | LEGAL | STATEMENT | TABLOID | LEDGER | FOLIO | QUARTO | 10x14 | EXECUTIVE | A3 | A4 | A5 | B4 | B5
+\# *Function:
+\#   Sets up dimensions for different paper sizes.
+\#
+.MAC PAPER END
+.    ds $PAPER \\$1
+.    if '\\*[$PAPER]'LETTER' \{\
+.       PAGEWIDTH  8.5i
+.       PAGELENGTH 11i
+.    \}
+.    if '\\*[$PAPER]'LEGAL' \{\
+.       PAGEWIDTH  8.5i
+.       PAGELENGTH 14i
+.    \}
+.    if '\\*[$PAPER]'STATEMENT' \{\
+.       PAGEWIDTH  5.5i
+.       PAGELENGTH 8.5i
+.    \}
+.    if '\\*[$PAPER]'TABLOID' \{\
+.       PAGEWIDTH  11i
+.       PAGELENGTH 17i
+.    \}
+.    if '\\*[$PAPER]'LEDGER' \{\
+.       PAGEWIDTH  17i
+.       PAGELENGTH 11i
+.    \}
+.    if '\\*[$PAPER]'FOLIO' \{\
+.       PAGEWIDTH  8.5i
+.       PAGELENGTH 13i
+.    \}
+.    if '\\*[$PAPER]'QUARTO' \{\
+.       PAGEWIDTH  610p
+.       PAGELENGTH 780p
+.    \}
+.    if '\\*[$PAPER]'10x14' \{\
+.       PAGEWIDTH  10i
+.       PAGELENGTH 14i
+.    \}
+.    if '\\*[$PAPER]'EXECUTIVE' \{\
+.       PAGEWIDTH  7.25i
+.       PAGELENGTH 10.5i
+.    \}
+.    if '\\*[$PAPER]'A3' \{\
+.       PAGEWIDTH  842p
+.       PAGELENGTH 1190p
+.    \}
+.    if '\\*[$PAPER]'A4' \{\
+.       PAGEWIDTH  595p
+.       PAGELENGTH 842p
+.    \}
+.    if '\\*[$PAPER]'A5' \{\
+.       PAGEWIDTH  421p
+.       PAGELENGTH 595p
+.    \}
+.    if '\\*[$PAPER]'B4' \{\
+.       PAGEWIDTH  709p
+.       PAGELENGTH 1002p
+.    \}
+.    if '\\*[$PAPER]'B5' \{\
+.       PAGEWIDTH  501p
+.       PAGELENGTH 709p
+.    \}
+.    if '\\$2'LANDSCAPE' \{\
+.       nr #PAGE_WIDTH_TMP \\n[#PAGE_WIDTH]
+.       PAGEWIDTH \\n[#PAGE_LENGTH]u
+.       PAGELENGTH \\n[#PAGE_WIDTH_TMP]u
+.    \}
+.    if !r#L_MARGIN .L_MARGIN \\n[.o]
+.    if !r#R_MARGIN .R_MARGIN 1i
+.END
+\#
+\# ====================================================================
+\#
+\# +++PRINTSTYLE -- TYPEWRITE OR TYPESET+++
+\#
+\# PRINTSTYLE
+\# ----------
+\# *Arguments:
+\#   TYPESET | TYPEWRITE [SINGLESPACE]
+\# *Function:
+\#   Sets type specs for typewriter-style or typeset output.
+\# *Notes:
+\#   Number registers: TYPEWRITE=1, TYPESET=2.
+\#
+.MAC PRINTSTYLE END
+.    if !\\n[#COLLATE]=1 \{\
+.       if !d$PAPER .PAPER LETTER
+.       if '\\$1'TYPEWRITE' \{\
+.          nr #PRINT_STYLE 1
+.          if !\\n[#DOC_TYPE]=4 .L_MARGIN 6P
+.          if !\\n[#DOC_TYPE]=4 .R_MARGIN 6P
+.          ds $TYPEWRITER_FAM C
+.          ds $TYPEWRITER_PS  12
+.          TYPEWRITER
+.          color 0
+.          ie '\\$2'SINGLESPACE' \{\
+.             nr #SINGLE_SPACE 1
+.             vs 12
+.             ie \\n[#DOC_TYPE]=4 .nr #FOOTER_ADJ \\n[.v]
+.             el .nr #FOOTER_ADJ \\n[.v]
+.             nr #ORIGINAL_DOC_LEAD \\n[.v]
+.          \}
+.          el \{\
+.             if !\\n[#DOC_TYPE]=4 \{\
+.                vs 24
+.                nr #FOOTER_ADJ \\n[.v]/2
+.                nr #ORIGINAL_DOC_LEAD \\n[.v]
+.             \}
+.          \}
+.          QUAD    L
+.          HY      OFF
+.          SMARTQUOTES OFF
+.          if !\\n[#PP_INDENT] .nr #PP_INDENT 3P
+.          HDRFTR_RIGHT_CAPS
+.          nr #BOLDER_UNITS 0
+.          nr #CONDENSE 0
+.          nr #EXTEND 0
+.          if !\\n[#ITALIC_MEANS_ITALIC] .rm IT
+.          rm BD
+.          rm BDI
+.          if !\\n[#ITALIC_MEANS_ITALIC] .rm PREV
+.          if !\\n[#SLANT_MEANS_SLANT]   .UNDERLINE_SLANT
+.          if !\\n[#ITALIC_MEANS_ITALIC] .UNDERLINE_ITALIC
+.          if !\\n[#UNDERLINE_QUOTES]    .UNDERLINE_QUOTES
+.          nr #IGNORE_COLUMNS 1
+.          nr #RULE_WEIGHT 500
+.          char \[em] --
+.          tr `'
+.          tr \[lq]"
+.          tr \[rq]"
+.       \}
+.       if '\\$1'TYPESET' \{\
+.          nr #PRINT_STYLE 2
+.          if !\\n[#DOC_TYPE]=4 .L_MARGIN 6P
+.          if !\\n[#DOC_TYPE]=4 .R_MARGIN 6P
+.          FAMILY  T
+.          FT      R
+.          if !\\n[#DOC_TYPE]=4 .ps 12.5
+.          if !\\n[#DOC_TYPE]=4 .vs 16
+.\" In DEFAULTS, TRAPS is run with this leading, so we need a register to
+.\" hold it for use with the .sp in FOOTER
+.          nr #FOOTER_ADJ 12000
+.          JUSTIFY
+.          HY
+.          HY_SET 2 36p 1p
+.          KERN
+.          LIG
+.          SS 0
+.          SMARTQUOTES
+.          if !\\n[#PP_INDENT] \{\
+.             in 2m                 \"Set indent
+.             nr #PP_INDENT \\n[.i] \"Read into #PP_INDENT
+.             in 0                  \"Remove indent
+.          \}
+.          HDRFTR_RIGHT_CAPS
+.          rr #IGNORE_COLUMNS
+.       \}
+.\" Set up default style for nine levels of headings
+.       nr #HD_LEVEL 0 1 \" loop step
+.       nr #LOOP 9       \" loop count
+.       while \\n+[#HD_LEVEL]<=\\n[#LOOP] \{\
+.           HEADING_STYLE \\n[#HD_LEVEL] \
+            FONT   B \
+            SIZE  +0 \
+            QUAD   L \
+            COLOR  black
+.\"  Set up default style for nine levels of TOC headings
+.           TOC_ENTRY_STYLE \\n[#HD_LEVEL] \
+            FONT   R \
+            SIZE  +0 \
+            COLOR  black
+.       \}
+.\" Set up decreasing sizes for headings levels 1 - 3, starting at +3
+.       nr #HD_LEVEL 0 1 \" loop step
+.       nr #LOOP 3       \" loop count
+.       nr #HD_SIZE 4 1
+.       while \\n+[#HD_LEVEL]<=\\n[#LOOP] \{\
+.          nr #HD_SIZE_CHANGE \\n-[#HD_SIZE]
+.          ds $HEAD_\\n[#HD_LEVEL]_SIZE +\\n[#HD_SIZE_CHANGE]
+.       \}
+.\" Set up TOC title style
+.       TOC_TITLE_STYLE FONT R SIZE +0 INDENT 0
+.\" Set up captions, labels, sources
+.       LABELS ALL FONT B AUTOLEAD 2
+.       LABELS EQN FONT R QUAD RIGHT
+.       CAPTIONS ALL AUTOLEAD 2
+.       CAPTIONS EQN QUAD CENTER
+.       SOURCES TBL AUTOLEAD 2
+.    \}
+.END
+\#
+\# Set limited parameters to TYPEWRITE.
+\#
+.MAC TYPEWRITER_FAMILY END
+.    ds $TYPEWRITER_FAM \\$1
+.END
+\#
+.ALIAS TYPEWRITER_FAM TYPEWRITER_FAMILY
+\#
+.MAC TYPEWRITER_SIZE END
+.    ds $TYPEWRITER_PS \\$1
+.END
+\#
+.MAC TYPEWRITER END
+.    fam \\*[$TYPEWRITER_FAM]
+.    ft  R
+.    ps  \\*[$TYPEWRITER_PS]
+.END
+\#
+\# ITALIC MEANS ITALIC
+\# -------------------
+\# *Argument:
+\#   <none>
+\# *Function:
+\#   Instructs TYPEWRITE to treat italics as italics, whether
+\#   invoked via control lines or inline.
+\# *Notes:
+\#   ITALIC_MEANS_ITALIC and UNDERLINE_ITALIC are mututally exclusive,
+\#   hence invoking the one automatically turns off the other.
+\#
+.MAC ITALIC_MEANS_ITALIC END
+.    if \\n[#PRINT_STYLE]=1 \{\
+.       nr #ITALIC_MEANS_ITALIC 1
+.       rr #UNDERLINE_ITALIC
+.       rm ROM
+.       rm IT
+.       rm PREV
+.       ds ROM  \Ef[R]
+.       ds IT   \Ef[I]
+.       ds PREV \Ef[]
+.    \}
+.END
+\#
+\# UNDERLINE ITALIC
+\# ----------------
+\# *Argument:
+\#   <none>
+\# *Function:
+\#   Instructs TYPEWRITE to underline italics, whether invoked
+\#   via control lines or inline.
+\# *Notes:
+\#   UNDERLINE_ITALIC and ITALIC_MEANS_ITALIC are mututally exclusive,
+\#   hence invoking the one automatically turns off the other.
+\#
+\#   UNDERLINE_ITALIC is the default for TYPEWRITE.
+\#
+.MAC UNDERLINE_ITALIC END
+.    if \\n[#PRINT_STYLE]=1 \{\
+.       nr #UNDERLINE_ITALIC 1
+.       rr #ITALIC_MEANS_ITALIC
+.       rm ROM
+.       rm IT
+.       rm PREV
+.       ds ROM  \E*[ULX]
+.       ds IT   \E*[UL]
+.       ds PREV \E*[ULX]
+.    \}
+.END
+\#
+\# UNDERLINE SLANT
+\# ---------------
+\# *Arguments:
+\#   <none> | <anything>
+\# *Function:
+\#   Instructs TYPEWRITE to underline occurrences of \*[SLANT], or
+\#   turns feature off.
+\# *Notes:
+\#   Users may want \*[SLANT] to mean slant in TYPEWRITE, although
+\#   most of the time, \*[SLANT] most likely means the user wanted
+\#   italic but didn't have it, ergo the need to tell TYPEWRITE to
+\#   treat \*[SLANT] as italic (i.e. underlined).
+\#
+\#   UNDERLINE_SLANT and SLANT_MEANS_SLANT are mututally exclusive,
+\#   hence invoking the one automatically turns off the other.
+\#
+\#   UNDERLINE_SLANT is the default for TYPEWRITE.
+\#
+.MAC UNDERLINE_SLANT END
+.    if \\n[#PRINT_STYLE]=1 \{\
+.       rr #SLANT_MEANS_SLANT
+.       nr #UNDERLINE_SLANT 1
+.       rm SLANT
+.       rm SLANTX
+.       ds SLANT  \ER'#SLANT_ON 1'\E*[UL]
+.       ds SLANTX \ER'#SLANT_ON 0'\E*[ULX]
+.    \}
+.END
+\#
+.MAC SLANT_MEANS_SLANT END
+.    if \\n[#PRINT_STYLE]=1 \{\
+.       rr #UNDERLINE_SLANT
+.       nr #SLANT_MEANS_SLANT 1
+.       rm SLANT
+.       rm SLANTX
+.       ds SLANT  \ER'#SLANT_ON 1'\ES'\En[#DEGREES]'
+.       ds SLANTX \ER'#SLANT_ON 0'\ES'0'
+.    \}
+.END
+\#
+.MAC IGNORE_COLUMNS END
+.    if \\n[#PRINT_STYLE]=1 .nr #NO_COLUMNS 1
+.END
+\#
+\# ====================================================================
+\#
+\# +++COPY STYLE -- DRAFT OR FINAL+++
+\#
+\# COPY STYLE
+\# ----------
+\# *Arguments:
+\#   DRAFT | FINAL
+\# *Function:
+\#   Sets registers that are used to determine what to put
+\#   in the default header, and how to number pages.
+\# *Notes:
+\#   DOCTYPE must come before COPYSTYLE.
+\#
+.MAC COPYSTYLE END
+.    ds $COPY_STYLE \\$1
+.    if '\\*[$COPY_STYLE]'DRAFT' \{\
+.       nr #COPY_STYLE 1
+.       if !d$DRAFT .DRAFT 1
+.    \}
+.    if '\\*[$COPY_STYLE]'FINAL' .nr #COPY_STYLE 2
+.    if !d$CHAPTER_STRING  .CHAPTER_STRING "Chapter"
+.    if !d$DRAFT_STRING    .DRAFT_STRING "Draft"
+.    if !d$REVISION_STRING .REVISION_STRING "Rev."
+.\" Default
+.    if \\n[#DOC_TYPE]=1 \{\
+.       ie \\n[#COPY_STYLE]=1 \{\
+.          ie \\n[#PAGENUM_STYLE_SET] .PAGENUM_STYLE \\*[$PAGENUM_STYLE]
+.          el .PAGENUM_STYLE roman
+.          if \\n[#USER_DEF_HDRFTR_CENTER]=0 \{\
+.             ie \\n[#DRAFT_WITH_PAGENUM] .ds $HDRFTR_CENTER
+.             el \{\
+.                ie '\\*[$REVISION]'' \{\
+.                   ds $HDRFTR_CENTER \
+                    \\*[$DRAFT_STRING]\\*[$DRAFT]
+.                \}
+.                el \{\
+.                   ds $HDRFTR_CENTER \
+                    \\*[$DRAFT_STRING]\\*[$DRAFT], \
+                    \\*[$REVISION_STRING] \\*[$REVISION]
+.                \}
+.             \}
+.          \}
+.       \}
+.       el \{\
+.          ie \\n[#PAGENUM_STYLE_SET] .PAGENUM_STYLE \\*[$PAGENUM_STYLE]
+.          el                         .PAGENUM_STYLE DIGIT
+.          if \\n[#DRAFT_WITH_PAGENUM] .rr #DRAFT_WITH_PAGENUM
+.          if \\n[#USER_DEF_HDRFTR_CENTER]=0 \{\
+.             ds $HDRFTR_CENTER
+.             rr #USER_DEF_HDRFTR_CENTER
+.          \}
+.       \}
+.    \}
+.\" Chapter
+.    if \\n[#DOC_TYPE]=2 \{\
+.\" Copystyle DRAFT
+.       ie \\n[#COPY_STYLE]=1 \{\
+.          ie \\n[#PAGENUM_STYLE_SET] \
+.             PAGENUM_STYLE \\*[$PAGENUM_STYLE]
+.          el \
+.             PAGENUM_STYLE roman
+.          if \\n[#USER_DEF_HDRFTR_CENTER]=0 \{\
+.             ie \\n[#DRAFT_WITH_PAGENUM] \{\
+.                ie '\\*[$CHAPTER]'' \{\
+.                   ie !'\\*[$CHAPTER_TITLE_1]'' \
+.                       ds $HDRFTR_CENTER \\*[$CHAPTER_TITLE]
+.                   el .ds $HDRFTR_CENTER \\*[$CHAPTER_STRING]
+.                \}
+.                el \{\
+.                   ie !'\\*[$CHAPTER_TITLE_1]'' \
+.                       ds $HDRFTR_CENTER \\*[$CHAPTER_TITLE]
+.                   el .ds $HDRFTR_CENTER \\*[$CHAPTER_STRING] \\*[$CHAPTER]
+.                \}
+.             \}
+.             el \{\
+.                ie '\\*[$REVISION]'' \{\
+.                   ie '\\*[$CHAPTER]'' \{\
+.                      ie !'\\*[$CHAPTER_TITLE_1]'' \{\
+.                         ie '\\*[$DRAFT]'' \
+.                            ds $HDRFTR_CENTER \\*[$CHAPTER_TITLE]
+.                         el \{\
+.                            ds $HDRFTR_CENTER \
+                             \\*[$CHAPTER_TITLE], \
+                             \\*[$DRAFT_STRING]\\*[$DRAFT]
+.                         \}
+.                      \}
+.                      el \{\
+.                         ie '\\*[$DRAFT]'' \{\
+.                            ds $HDRFTR_CENTER \
+                             \\*[$CHAPTER_STRING]
+.                         \}
+.                         el \{\
+.                            ds $HDRFTR_CENTER \
+                             \\*[$CHAPTER_STRING], \
+                             \\*[$DRAFT_STRING]\\*[$DRAFT]
+.                         \}
+.                      \}
+.                   \}
+.                   el \{\
+.                      ie !'\\*[$CHAPTER_TITLE_1]'' \{\
+.                         ie '\\*[$DRAFT]'' \
+.                            ds $HDRFTR_CENTER \\*[$CHAPTER_TITLE]
+.                         el \{\
+.                            ds $HDRFTR_CENTER \
+                             \\*[$CHAPTER_TITLE_1], \
+                             \\*[$DRAFT_STRING]\\*[$DRAFT]
+.                         \}
+.                      \}
+.                      el \{\
+.                         ie '\\*[$DRAFT]'' \{\
+.                            ds $HDRFTR_CENTER \
+                             \\*[$CHAPTER_STRING] \\*[$CHAPTER]
+.                         \}
+.                         el \{\
+.                            ds $HDRFTR_CENTER \
+                             \\*[$CHAPTER_STRING] \\*[$CHAPTER], \
+                             \\*[$DRAFT_STRING]\\*[$DRAFT]
+.                         \}
+.                      \}
+.                   \}
+.                \}
+.                el \{\
+.                   ie '\\*[$CHAPTER]'' \{\
+.                      ie !'\\*[$CHAPTER_TITLE_1]'' \{\
+.                         ie '\\*[$DRAFT]'' \{\
+.                            ds $HDRFTR_CENTER \
+                             \\*[$CHAPTER_TITLE], \
+                             \\*[$REVISION_STRING] \\*[$REVISION]
+.                         \}
+.                         el \{\
+.                            ds $HDRFTR_CENTER \
+                             \\*[$CHAPTER_TITLE], \
+                             \\*[$DRAFT_STRING]\\*[$DRAFT], \
+                             \\*[$REVISION_STRING] \\*[$REVISION]
+.                         \}
+.                      \}
+.                      el \{\
+.                         ie '\\*[$DRAFT]'' \{\
+.                            ds $HDRFTR_CENTER \
+                             \\*[$CHAPTER_STRING], \
+                             \\*[$REVISION_STRING] \\*[$REVISION]
+.                         \}
+.                         el \{\
+.                            ds $HDRFTR_CENTER \
+                             \\*[$CHAPTER_STRING], \
+                             \\*[$DRAFT_STRING]\\*[$DRAFT], \
+                             \\*[$REVISION_STRING] \\*[$REVISION]
+.                         \}
+.                      \}
+.                   \}
+.                   el \{\
+.                      ie !'\\*[$CHAPTER_TITLE_1]'' \{\
+.                         ie '\\*[$DRAFT]'' \{\
+.                            ds $HDRFTR_CENTER \
+                             \\*[$CHAPTER_TITLE], \
+                             \\*[$REVISION_STRING] \\*[$REVISION]
+.                         \}
+.                         el \{\
+.                            ds $HDRFTR_CENTER \
+                             \\*[$CHAPTER_TITLE], \
+                             \\*[$DRAFT_STRING]\\*[$DRAFT], \
+                             \\*[$REVISION_STRING] \\*[$REVISION]
+.                         \}
+.                      \}
+.                      el \{\
+.                         ie '\\*[$DRAFT]'' \{\
+.                            ds $HDRFTR_CENTER \
+                             \\*[$CHAPTER_STRING] \\*[$CHAPTER], \
+                             \\*[$REVISION_STRING] \\*[$REVISION]
+.                         \}
+.                         el \{\
+.                            ds $HDRFTR_CENTER \
+                             \\*[$CHAPTER_STRING] \\*[$CHAPTER], \
+                             \\*[$DRAFT_STRING]\\*[$DRAFT], \
+                             \\*[$REVISION_STRING] \\*[$REVISION]
+.                         \}
+.                      \}
+.                   \}
+.                \}
+.             \}
+.          \}
+.       \}
+.\" Copystyle FINAL
+.       el \{\
+.          if \\n[#DRAFT_WITH_PAGENUM] .rr #DRAFT_WITH_PAGENUM
+.          if \\n[#USER_DEF_HDRFTR_CENTER]=0 \{\
+.             ie \\n[#PAGENUM_STYLE_SET] \
+.                PAGENUM_STYLE \\*[$PAGENUM_STYLE]
+.             el .PAGENUM_STYLE DIGIT
+.             ie '\\*[$CHAPTER]'' \{\
+.                ie !'\\*[$CHAPTER_TITLE_1]'' \
+.                   ds $HDRFTR_CENTER \\*[$CHAPTER_TITLE]
+.                el \
+.                   ds $HDRFTR_CENTER \\*[$CHAPTER_STRING]
+.             \}
+.             el \{\
+.                ie !'\\*[$CHAPTER_TITLE_1]'' \
+.                   ds $HDRFTR_CENTER \\*[$CHAPTER_TITLE]
+.                el \
+.                   ds $HDRFTR_CENTER \\*[$CHAPTER_STRING] \\*[$CHAPTER]
+.             \}
+.          \}
+.       \}
+.    \}
+.\" Named
+.    if \\n[#DOC_TYPE]=3 \{\
+.       ie \\n[#COPY_STYLE]=1 \{\
+.          ie \\n[#PAGENUM_STYLE_SET] .PAGENUM_STYLE \\*[$PAGENUM_STYLE]
+.          el                         .PAGENUM_STYLE roman
+.          ie \\n[#DRAFT_WITH_PAGENUM] \
+.             ds $HDRFTR_CENTER \\*[$DOC_TYPE]
+.          el \{\
+.             if \\n[#USER_DEF_HDRFTR_CENTER]=0 \{\
+.                ie '\\*[$REVISION]'' \{\
+.                   ie '\\*[$DRAFT]'' \
+.                      ds $HDRFTR_CENTER \\*[$DOC_TYPE]
+.                   el \{\
+.                      ds $HDRFTR_CENTER \
+                       \\*[$DOC_TYPE], \
+                       \\*[$DRAFT_STRING]\\*[$DRAFT]
+.                   \}
+.                \}
+.                el \{\
+.                   ie '\\*[$DRAFT]'' \{\
+.                      ds $HDRFTR_CENTER \
+                       \\*[$DOC_TYPE], \
+                       \\*[$REVISION_STRING] \\*[$REVISION]
+.                   \}
+.                   el \{\
+.                      ds $HDRFTR_CENTER \
+                       \\*[$DOC_TYPE], \
+                       \\*[$DRAFT_STRING]\\*[$DRAFT], \
+                       \\*[$REVISION_STRING] \\*[$REVISION]
+.                   \}
+.                \}
+.             \}
+.          \}
+.       \}
+.       el \{\
+.          if \\n[#DRAFT_WITH_PAGENUM] .rr #DRAFT_WITH_PAGENUM
+.          if \\n[#USER_DEF_HDRFTR_CENTER]=0 \{\
+.             ie \\n[#PAGENUM_STYLE_SET] .PAGENUM_STYLE \\*[$PAGENUM_STYLE]
+.             el .PAGENUM_STYLE DIGIT
+.             ds $HDRFTR_CENTER \\*[$DOC_TYPE]
+.          \}
+.       \}
+.    \}
+.END
+\#
+\# ====================================================================
+\#
+\# +++COLLECT DOC INFO (reference macros, metadata)+++
+\#
+\# *Arguments:
+\#   various string/register arguments
+\# *Function:
+\#   Set strings and registers for covers, docheaders, page headers.
+\#
+.MAC DOCTITLE END
+.    rr #DOCTITLE_NUM
+.    nr #DOCTITLE_NUM 0 1
+.    while \\n[#NUM_ARGS]>\\n[#DOCTITLE_NUM] \{\
+.       ds $DOCTITLE_\\n+[#DOCTITLE_NUM] \\$\\n[#DOCTITLE_NUM]
+.    \}
+.    ds $DOCTITLE \\$*
+.    PDF_TITLE \\*[$DOCTITLE]
+.END
+\#
+.MAC TITLE END \"Document title
+.    if '\\$1'DOC_COVER' \{\
+.       shift
+.       DOC_COVERTITLE \\$@
+.       nr #FROM_DOC_COVERTITLE 1
+.       return
+.    \}
+.    if '\\$1'COVER' \{\
+.       shift
+.       COVERTITLE \\$@
+.       nr #FROM_COVERTITLE 1
+.       return
+.    \}
+.    ie \\n[#NUM_ARGS]=0 \{\
+.       if \\n[#TITLE_NUM] \{\
+.          nr #ITEM 0 1
+.          while \\n[#TITLE_NUM]>\\n[#ITEM] \{\
+.             rm $TITLE_\\n+[#ITEM]
+.          \}
+.          rr #TITLE_NUM
+.       \}
+.    \}
+.    el \{\
+.       nr #TITLE_NUM 0 1
+.       while \\n[#NUM_ARGS]>\\n[#TITLE_NUM] \{\
+.          ds $TITLE_\\n+[#TITLE_NUM] \\$\\n[#TITLE_NUM]
+.       \}
+.       ds $TITLE \\$*
+.    \}
+.END
+\#
+.MAC SUBTITLE END \"Document sub-title
+.    ie \\n[#NUM_ARGS]=0 \{\
+.       if \\n[#DOC_COVER_SUBTITLE_NUM] \
+.          ds COVER_ DOC_COVER_
+.       if \\n[#COVER_SUBTITLE_NUM] \
+.          ds COVER_ COVER_
+.       if \\n[#\\*[COVER_]SUBTITLE_NUM] \{\
+.          nr #ITEM 0 1
+.          while \\n[#\\*[COVER_]SUBTITLE_NUM]>\\n[#ITEM] \{\
+.             rm $\\*[COVER_]SUBTITLE_\\n+[#ITEM]
+.          \}
+.          rr #\\*[COVER_]SUBTITLE_NUM
+.          rm $SUBTITLE
+.       \}
+.    \}
+.    el \{\
+.       if '\\$1'DOC_COVER' \{\
+.          ds COVER_ DOC_COVER_
+.          shift
+.       \}
+.       if '\\$1'COVER' \{\
+.          ds COVER_ COVER_
+.          shift
+.       \}
+.       nr #\\*[COVER_]SUBTITLE_NUM 0 1
+.       while \\n[#NUM_ARGS]>\\n[#\\*[COVER_]SUBTITLE_NUM] \{\
+.          ds $\\*[COVER_]SUBTITLE_\\n+[#\\*[COVER_]SUBTITLE_NUM] \
+\\$\\n[#\\*[COVER_]SUBTITLE_NUM]
+.       \}
+.       rm COVER_
+.       ds $SUBTITLE \\$*
+.    \}
+.END
+\#
+.MAC CHAPTER END \"If document is a chapter, the chapter number
+.    nr #CHAPTER_CALLED 1
+.    ds $CHAPTER \\$1
+.    if r #CH_NUM \
+.       if \B'\\*[$CHAPTER]' .nr #CH_NUM \\*[$CHAPTER]
+.END
+\#
+.MAC CHAPTER_TITLE END \" This defines what comes after Chapter #
+.    ie \\n[#NUM_ARGS]=0 \{\
+.       if \\n[#CHAPTER_TITLE_NUM] \{\
+.          nr #ITEM 0 1
+.          while \\n[#CHAPTER_TITLE_NUM]>\\n[#ITEM] \{\
+.             rm $CHAPTER_TITLE_\\n+[#ITEM]
+.          \}
+.          rr #CHAPTER_TITLE_NUM
+.          rm $CHAPTER_TITLE
+.       \}
+.    \}
+.    el \{\
+.       rr #CHAPTER_TITLE_NUM
+.       nr #CHAPTER_TITLE_NUM 0 1
+.       while \\n[#NUM_ARGS]>\\n[#CHAPTER_TITLE_NUM] \{\
+.          ds $CHAPTER_TITLE_\\n+[#CHAPTER_TITLE_NUM] \
+\\$\\n[#CHAPTER_TITLE_NUM]
+.       \}
+.       ds $CHAPTER_TITLE \\$*
+.    \}
+.END
+\#
+.MAC DRAFT END \"Draft number
+.    ie '\\$1'' .ds $DRAFT
+.    el .ds $DRAFT " \\$1
+.END
+\#
+.MAC REVISION END \"Revision number
+.    ds $REVISION \\$1
+.END
+\#
+.MAC DRAFT_WITH_PAGENUMBER END \"Attach draft/revision strings to page number
+.    nr #DRAFT_WITH_PAGENUM 1
+.END
+\#
+.MAC AUTHOR END \"Author.  Enclose all args fully in double quotes.
+.    rr #NO_PRINT_AUTHOR
+.    if '\\$1'DOC_COVER' \{\
+.       ds COVER_ DOC_COVER_
+.       shift
+.    \}
+.    if '\\$1'COVER' \{\
+.       ds COVER_ COVER_
+.       shift
+.    \}
+.    nr #\\*[COVER_]AUTHOR_NUM 0 1
+.    while \\n[#NUM_ARGS]>\\n[#\\*[COVER_]AUTHOR_NUM] \{\
+.       ds $\\*[COVER_]AUTHOR_\\n+[#\\*[COVER_]AUTHOR_NUM] \
+\\$\\n[#\\*[COVER_]AUTHOR_NUM]
+.       if !'\\*[$\\*[COVER_]AUTHOR_\\n[#\\*[COVER_]AUTHOR_NUM]]'' \
+.          as $AUTHORS \
+"\\*[$\\*[COVER_]AUTHOR_\\n[#\\*[COVER_]AUTHOR_NUM]], \"
+.    \}
+.    ds $AUTHOR \\*[$AUTHOR_1]
+.    substring $AUTHORS 0 -3
+.    ds PDF_AUTHORS \\*[$AUTHORS]
+.    pdfmomclean PDF_AUTHORS
+.    nop \!x X ps:exec [/Author (\\*[PDF_AUTHORS]) /DOCINFO pdfmark
+.END
+.
+.ALIAS EDITOR AUTHOR
+\#
+.MAC COPYRIGHT END          \"For use on cover pages only
+.   ie \\n[#NUM_ARGS]=1 \
+.       ds $COVER_COPYRIGHT \[co]\\$1
+.    el \
+.       if '\\$1'DOC_COVER' .ds $DOC_COVER_COPYRIGHT \[co]\\$2
+.END
+\#
+.MAC MISC END \"Doc cover and cover pages only; enclose all args in double quotes
+.    rm COVER_
+.    ie \\n[#NUM_ARGS]=0 \{\
+.       if \\n[#DOC_COVER_MISC_LINES] \
+.          ds COVER_ DOC_COVER_
+.       if \\n[#COVER_MISC_LINES] \
+.          ds COVER_ COVER_
+.       if \\n[#\\*[COVER_]MISC_LINES] \{\
+.          nr #LINE 0 1
+.          while \\n[#\\*[COVER_]MISC_LINES]>\\n[#LINE] \{\
+.             rm $\\*[COVER_]MISC_\\n+[#LINE]
+.          \}
+.          rr #\\*[COVER_]MISC_LINES
+.       \}
+.    \}
+.    el \{\
+.       if '\\$1'DOC_COVER' \{\
+.          ds COVER_ DOC_COVER_
+.          shift
+.       \}
+.       if '\\$1'COVER' \{\
+.          ds COVER_ COVER_
+.          shift
+.       \}
+.       nr #\\*[COVER_]MISC_LINE 0 1
+.       while \\n[#NUM_ARGS]>\\n[#\\*[COVER_]MISC_LINE] \{\
+.          ds $\\*[COVER_]MISC_\\n+[#\\*[COVER_]MISC_LINE] \
+\\$[\\n[#\\*[COVER_]MISC_LINE]]
+.       \}
+.       nr #\\*[COVER_]MISC_LINES \\n[#NUM_ARGS]
+.       rm COVER_
+.    \}
+.END
+\#
+.MAC PAGENUMBER END \"Page # that appears on page one.
+.    nr #n%_AT_PAGENUM_SET \\n%
+.    nr #PAGE_NUM_ADJ \\$1-\\n[#n%_AT_PAGENUM_SET]
+.    rr #n%_AT_PAGENUM_SET
+.    nr #PAGE_NUM_SET 1
+.END
+\#
+\# ====================================================================
+\#
+\# +++TYPE OF DOCUMENT+++
+\#
+\# DOCUMENT TYPE
+\# -------------
+\# *Argument:
+\#   DEFAULT | CHAPTER | NAMED "<whatever> | LETTER
+\# *Function:
+\#   Creates strings and sets registers for document types.
+\# *Notes:
+\#   Number registers: DEFAULT=1, CHAPTER=2, NAMED=3, LETTER=4
+\#
+.MAC DOCTYPE END
+.    if '\\$1'DEFAULT' .nr #DOC_TYPE 1
+.    if '\\$1'CHAPTER' .nr #DOC_TYPE 2
+.    if '\\$1'NAMED' \{\
+.       rr #NO_PRINT_DOCTYPE
+.       ds $DOC_TYPE \\$2
+.       nr #DOC_TYPE 3
+.    \}
+.    if '\\$1'LETTER' \{\
+.       nr #DOC_TYPE 4
+.       L_MARGIN 1.125i
+.       R_MARGIN 1.125i
+.       ps 12
+.       vs 13.5
+.       nr #FOOTER_ADJ \\n[.v]
+.       DOCHEADER OFF
+.       PARA_INDENT 3m
+.       INDENT_FIRST_PARAS
+.       PARA_SPACE
+.       ds $SUITE \En[#SUITE]
+.       HEADER_MARGIN 3P+6p
+.       HEADER_GAP 3P
+.       FOOTERS
+.       FOOTER_RULE OFF
+.       FOOTER_LEFT ""
+.       FOOTER_CENTER ""
+.       FOOTER_RIGHT_SIZE +0
+.       FOOTER_RIGHT "\&.../\E*[$SUITE]
+.       FOOTER_ON_FIRST_PAGE
+.       em ALL_DONE
+.    \}
+.END
+\#
+\# +++LETTER MACROS+++
+\#
+\# First, create a register to hold incrementing numbers to be
+\# appended to LETTERHEAD.
+\#
+.nr #FIELD 0 1
+\#
+\# DATE
+\# ----
+\# *Arguments:
+\#   <none>
+\# *Function:
+\#   Stores date (entered on the line after .DATE) in diversion
+\#   LETTERHEAD<n>
+\#
+.MAC DATE END
+.    if !'\\n[.z]'' .di
+.    di LETTERHEAD\\n+[#FIELD]
+.    ie \\n[#FIELD]=1 \{\
+.       nr #DATE_FIRST 1
+.       RIGHT
+.    \}
+.    el .LEFT
+.END
+\#
+\# TO
+\# --
+\# *Arguments:
+\#   <none>
+\# *Function:
+\#   Stores addressee address (entered on the line after .TO) in
+\#   diversion LETTERHEAD<n>
+\#
+.MAC TO END
+.    if !'\\n[.z]'' .di
+.    di LETTERHEAD\\n+[#FIELD]
+.    LEFT
+.END
+\#
+\# FROM
+\# ----
+\# *Arguments:
+\#   <none>
+\# *Function:
+\#   Stores addresser address (entered on the line after .FROM) in
+\#   diversion LETTERHEAD<n>
+\#
+.MAC FROM END
+.    if !'\\n[.z]'' .di
+.    di LETTERHEAD\\n+[#FIELD]
+.    LEFT
+.END
+\#
+\# GREETING
+\# --------
+\# *Arguments:
+\#   <none>
+\# *Function:
+\#   Stores greeting (entered on the line after .GREETING) in
+\#   diversion LETTERHEAD<n>
+\#
+.MAC GREETING END
+.    if !'\\n[.z]'' .di
+.    di LETTERHEAD\\n+[#FIELD]
+.    LEFT
+.END
+\#
+\# CLOSING
+\# -------
+\# *Arguments:
+\#   <closing string>
+\# *Function:
+\#   Stores greeting in diversion CLOSING.
+\#
+.MAC CLOSING END
+.    if '\\*[$SIG_SPACE]'' .ds $SIG_SPACE 3v
+.    ie ( (2v+\\*[$SIG_SPACE]) > \\n[.t] ) \{\
+.       ch HEADER
+.       ch FOOTER
+.       br
+.       tm1 "[mom]: Insufficient room for \\$0 and signature line.
+.       ab   [mom]: Aborting '\\n[.F]'.
+.    \}
+.    el .br
+.    nr #CLOSING 1
+.    di CLOSING_TEXT
+.END
+\#
+\# CLOSING INDENT
+\# --------------
+\# *Argument:
+\#   <amount to indent closing from left margin>
+\# *Function:
+\#   Defines string $CLOSE_INDENT for use in macro, ALL_DONE.
+\#
+.MAC CLOSING_INDENT END
+.    ds $CLOSE_INDENT \\$1
+.END
+\#
+\# SIGNATURE_SPACE
+\# ---------------
+\# *Argument:
+\#   <amount of space to leave for signature>
+\# *Function:
+\#   Defines string $SIG_SPACE for use in macro, ALL_DONE.
+\#
+.MAC SIGNATURE_SPACE END
+.    ds $SIG_SPACE \\$1
+.END
+\#
+\# NO SUITE
+\# --------
+\# *Arguments:
+\#   <none>
+\# *Function:
+\#   Redefines $FOOTER_RIGHT to blank so that a suite number doesn't
+\#   appear at the bottom of letter pages.
+\#
+.MAC NO_SUITE END
+.    FOOTER_RIGHT ""
+.END
+\#
+\# ====================================================================
+\#
+\# +++DEFAULTS FOR DOCUMENT PROCESSING+++
+\#
+\# TYPE-STYLE CONTROL MACROS
+\# -------------------------
+\# The control macros for family, font, size, color and quad are
+\# here grouped together.  Each (eg _FAMILY) uses the calling alias
+\# to determine the document element to which the style parameter
+\# applies.  Defaults for all these guys are set in DEFAULTS, and
+\# listed in the "Control Macros" section of the documentation
+\# pertinent to the element whose style is to be changed.
+\#
+.MAC _FAMILY END
+.    ds PARAM      FAM
+.    ds ELEMENT    \\$0
+.    if '\\$0'COPYRIGHT_FAMILY' \
+.       ds ELEMENT COVER_COPYRIGHT_FAMILY
+.    ds FROM_ALIAS \\$0
+.    substring ELEMENT 0 -4    \" Strip 'ILY' from FAMILY
+.    ASSIGN_ELEMENT \\$1
+.END
+\#
+.MAC _FONT END
+.    ds PARAM      FT
+.    ds ELEMENT    \\$0
+.    ds FROM_ALIAS \\$0
+.    if '\\$0'COPYRIGHT_FONT' \
+.       ds ELEMENT COVER_COPYRIGHT_FONT
+.    substring ELEMENT 0 -5
+.    ds ELEMENT \\*[ELEMENT]FT \" ELEMENT is now \\$0_FT
+.    ASSIGN_ELEMENT \\$1
+.END
+\#
+.MAC _SIZE END
+.    ds PARAM       SIZE_CHANGE
+.    ds ELEMENT     \\$0_CHANGE
+.    if '\\$0'CODE_SIZE' \{\
+.       ds PARAM SIZE_ADJ
+.       ds ELEMENT \\$0_ADJ
+.    \}
+.    if '\\$0'COPYRIGHT_SIZE' \
+.       ds ELEMENT COVER_COPYRIGHT_SIZE_CHANGE
+.    ds FROM_ALIAS  \\$0
+.    ASSIGN_ELEMENT \\$1
+.END
+\#
+.MAC _COLOR END
+.    if \\n[#PRINT_STYLE]=1 .return
+.    ds PARAM       COLOR
+.    ds ELEMENT     \\$0
+.    if '\\$0'COPYRIGHT_COLOR' \
+.       ds ELEMENT COVER_COPYRIGHT_COLOR
+.    ds FROM_ALIAS  \\$0
+.    ASSIGN_ELEMENT \\$1
+.END
+\#
+.MAC _CAPS END
+.    ds CAPS_TYPE \\$0
+.    substring CAPS_TYPE 0 7
+.    ds CALLED_AS \\$0
+.    substring CALLED_AS -7
+.    ie '\\*[CALLED_AS]'NO_CAPS' \{\
+.       ie '\\*[CAPS_TYPE]'BIBLIOGR' \{\
+.          if '\\$0'BIBLIOGRAPHY_HEADER_NO_CAPS' .rr #BIB_STRING_CAPS
+.          if '\\$0'BIBLIOGRAPHY_STRING_NO_CAPS' .rr #BIB_STRING_CAPS
+.       \}
+.       el \{\
+.          ie '\\*[CAPS_TYPE]'ENDNOTES' \{\
+.             if '\\$0'ENDNOTES_HEADER_NO_CAPS' .rr #EN_STRING_CAPS
+.             if '\\$0'ENDNOTES_STRING_NO_CAPS' .rr #EN_STRING_CAPS
+.          \}
+.          el \{\
+.             ie '\\$0'TOC_HEADER_NO_CAPS' .rr #TOC_STRING_CAPS
+.             el \{\
+.                ds REGISTER_TYPE \\$0
+.                substring REGISTER_TYPE 0 -8
+.                as REGISTER_TYPE CAPS
+.                rr #\\*[REGISTER_TYPE]
+.             \}
+.          \}
+.       \}
+.    \}
+.    el \{\
+.       ie '\\*[CAPS_TYPE]'BIBLIOGR' \{\
+.          if '\\$0'BIBLIOGRAPHY_HEADER_CAPS' .nr #BIB_STRING_CAPS 1
+.          if '\\$0'BIBLIOGRAPHY_STRING_CAPS' .nr #BIB_STRING_CAPS 1
+.       \}
+.       el .nr #\\$0 1
+.    \}
+.END
+.
+.ALIAS _NO_CAPS _CAPS
+\#
+.MAC _SMALLCAPS END
+.    ds SMALLCAPS_TYPE \\$0
+.    substring SMALLCAPS_TYPE 0 7
+.    ds CALLED_AS \\$0
+.    substring CALLED_AS -12
+.    ie '\\*[CALLED_AS]'NO_SMALLCAPS' \{\
+.       ie '\\*[SMALLCAPS_TYPE]'BIBLIOGR' \{\
+.          if '\\$0'BIBLIOGRAPHY_HEADER_NO_SMALLCAPS' .rr #BIB_STRING_SMALLCAPS
+.          if '\\$0'BIBLIOGRAPHY_STRING_NO_SMALLCAPS' .rr #BIB_STRING_SMALLCAPS
+.       \}
+.       el \{\
+.          ie '\\*[SMALLCAPS_TYPE]'ENDNOTES' \{\
+.             if '\\$0'ENDNOTES_HEADER_NO_SMALLCAPS' .rr #EN_STRING_SMALLCAPS
+.             if '\\$0'ENDNOTES_STRING_NO_SMALLCAPS' .rr #EN_STRING_SMALLCAPS
+.          \}
+.          el \{\
+.             ie '\\$0'TOC_HEADER_NO_SMALLCAPS' .rr #TOC_STRING_SMALLCAPS
+.             el \{\
+.                ds REGISTER_TYPE \\$0
+.                substring REGISTER_TYPE 0 -13
+.                as REGISTER_TYPE SMALLCAPS
+.                rr #\\*[REGISTER_TYPE]
+.             \}
+.          \}
+.       \}
+.    \}
+.    el \{\
+.       ie '\\*[SMALLCAPS_TYPE]'BIBLIOGR' \{\
+.          if '\\$0'BIBLIOGRAPHY_HEADER_SMALLCAPS' .nr #BIB_STRING_SMALLCAPS 1
+.          if '\\$0'BIBLIOGRAPHY_STRING_SMALLCAPS' .nr #BIB_STRING_SMALLCAPS 1
+.       \}
+.       el .nr #\\$0 1
+.    \}
+.END
+.
+.ALIAS _NO_SMALLCAPS _SMALLCAPS
+\#
+.MAC _QUAD END
+.    if '\\$0'BIBLIOGRAPHY_QUAD' \{\
+.       if '\\$1'R' .QUAD-ERROR \\$0
+.       if '\\$1'C' .QUAD-ERROR \\$0
+.    \}
+.    if '\\$0'ENDNOTE_QUAD' \{\
+.       if '\\$1'R' .QUAD-ERROR \\$0
+.       if '\\$1'C' .QUAD-ERROR \\$0
+.    \}
+.    if '\\$0'DOC_QUAD' \{\
+.       if !\\n[#DOCS] .DOC_MACRO_ERROR \\$0
+.    \}
+.    ds PARAM       QUAD
+.    ds ELEMENT     \\$0
+.    if '\\$0'COPYRIGHT_QUAD' \
+.       ds ELEMENT COVER_COPYRIGHT_QUAD
+.    ds FROM_ALIAS  \\$0
+.    ASSIGN_ELEMENT \\$1
+.END
+\#
+\# Special handling for QUOTE quadding
+\#
+.MAC QUOTE_QUAD END
+.    ds $Q_QUAD \\$0
+.    substring $Q_QUAD 6
+.END
+.
+.ALIAS QUOTE_LEFT   QUOTE_QUAD
+.ALIAS QUOTE_CENTER QUOTE_QUAD
+.ALIAS QUOTE_RIGHT  QUOTE_QUAD
+\#
+.MAC QUAD-ERROR END
+.    tm1 "[mom]: \\$1 at line \\n[.c] of '\\n[.F]' must be set to either L or J.
+.    ab   [mom]: Aborting.
+.END
+\#
+.MAC ASSIGN_ELEMENT END
+.\" HDRFTR_<POSITION>_<PARAMETER> need special handling.
+.    ds hdrftr \\*[FROM_ALIAS]
+.    substring hdrftr 0 5
+.    if '\\*[hdrftr]'HDRFTR' \{\
+.       ds hdrftr-pos-element \\*[ELEMENT]
+.\" See if ELEMENT is of the form HDRFTR_<pos>_<param>
+.       substring hdrftr-pos-element 0 7
+.       substring hdrftr-pos-element -1
+.       if '\\*[hdrftr-pos-element]'L' .nr hdrftr-pos-element 1
+.       if '\\*[hdrftr-pos-element]'C' .nr hdrftr-pos-element 1
+.       if '\\*[hdrftr-pos-element]'R' .nr hdrftr-pos-element 1
+.    \}
+.    if !\\n[hdrftr-pos-element] \{\
+.       ds c1-c5 \\*[ELEMENT]
+.       substring c1-c5 0 4  \" Grab first five letters of the alias
+.    \}
+.    rr hdrftr-pos-element
+.\"  If none of the following, convert the substring of the
+.\"  calling alias, ie \*[ELEMENT], into the parameter string, eg
+.\"  $TITLE_FAM, assign arg, and set register.
+.    if !'\\*[c1-c5]'BIBLI' \
+.    if !'\\*[c1-c5]'BLOCK' \
+.    if !'\\*[c1-c5]'CITAT' \
+.    if !'\\*[c1-c5]'ENDNO' \
+.    if !'\\*[c1-c5]'EPIGR' \
+.    if !'\\*[c1-c5]'FOOTN' \
+.    if !'\\*[c1-c5]'HDRFT' \
+.    if !'\\*[c1-c5]'LINEN' \
+.    if !'\\*[c1-c5]'PAGEN' \{\
+.       ie '\\*[ELEMENT]'CODE_SIZE_ADJ' .nr #\\*[ELEMENT] \\$1
+.       el \{\
+.          ds $\\*[ELEMENT] \\$1
+.          nr #\\*[ELEMENT] 1
+.       \}
+.    \}
+.    if '\\*[$\\*[ELEMENT]]'' \{\
+.       if '\\*[c1-c5]'BIBLI' .ASSIGN_PARAM BIB       \\$1
+.       if '\\*[c1-c5]'BLOCK' .ASSIGN_PARAM BQUOTE_   \\$1
+.       if '\\*[c1-c5]'CITAT' .ASSIGN_PARAM BQUOTE_   \\$1
+.       if '\\*[c1-c5]'ENDNO' .ASSIGN_PARAM EN        \\$1
+.       if '\\*[c1-c5]'EPIGR' .ASSIGN_PARAM EPI_      \\$1
+.       if '\\*[c1-c5]'FOOTN' .ASSIGN_PARAM FN_       \\$1
+.       if '\\*[c1-c5]'HDRFT' .ASSIGN_PARAM HDRFTR_   \\$1
+.       if '\\*[c1-c5]'LINEN' .ASSIGN_PARAM LN_       \\$1
+.       if '\\*[c1-c5]'PAGEN' .ASSIGN_PARAM PAGE_NUM_ \\$1
+.    \}
+.END
+\#
+.MAC ASSIGN_PARAM END
+.    if '\\*[PARAM]'FAM'         .nr substr-index -7
+.    if '\\*[PARAM]'FT'          .nr substr-index -5
+.    if '\\*[PARAM]'SIZE_CHANGE' .nr substr-index -5
+.    if '\\*[PARAM]'COLOR'       .nr substr-index -6
+.    if '\\*[PARAM]'QUAD'        .nr substr-index -5
+.    if '\\$1'BIB' \{\
+.       ds ELEMENT \\*[FROM_ALIAS]
+.       substring ELEMENT 12 \\n[substr-index]
+.       if '\\*[ELEMENT]'_HEADER_' \
+.          ds ELEMENT _STRING_
+.    \}
+.    if '\\$1'BQUOTE_' .rm ELEMENT
+.    if '\\$1'EN' \{\
+.       ds ELEMENT \\*[FROM_ALIAS]
+.       substring ELEMENT 7 \\n[substr-index]
+.       if '\\*[ELEMENT]'S_HEADER_' \
+.          ds ELEMENT _STRING_
+.       if '\\*[ELEMENT]'_LINENUMBER_' \
+.          ds ELEMENT _LN_
+.    \}
+.    if '\\$1'EPI_' .rm ELEMENT
+.    if '\\$1'FN_'  .rm ELEMENT
+.    if '\\$1'HDRFTR_' \{\
+.       ie '\\*[ELEMENT]'HDRFTR_FAM' \{\
+.          nr #HDRFTR 1
+.          ds $HDRFTR_FAM        \\$2
+.          ds $HDRFTR_LEFT_FAM   \\$2
+.          ds $HDRFTR_CENTER_FAM \\$2
+.          ds $HDRFTR_RIGHT_FAM  \\$2
+.       \}
+.       el \{\
+.          substring ELEMENT 7 \\n[substr-index]
+.          if '\\*[ELEMENT]'_LEFT' \
+.             ds ELEMENT _STRING_
+.       \}
+.    \}
+.    if '\\$1'LN_'       .rm ELEMENT
+.    if '\\$1'PAGE_NUM_' .rm ELEMENT
+.    if !r #HDRFTR \{\
+.       ds $\\$1\\*[ELEMENT]\\*[PARAM] \\$2
+.       nr #\\$1\\*[ELEMENT]\\*[PARAM] 1
+.    \}
+.    rr #HDRFTR
+.    rm hdrftr-pos-element
+.    rr substr-index
+.    rm FROM_ALIAS
+.    rm ELEMENT
+.END
+\#
+.MAC TITLE_LEAD END
+.    ds $TYPE \\$0
+.    substring $TYPE 0 2
+.    if '\\*[$TYPE]'DOC' .nr DOC_ 1
+.    ds $TYPE \\$0
+.    ie '\\*[$TYPE]'MISC_LEAD' .ds $TYPE COVER_MISC
+.    el .substring $TYPE -6 0
+.    ds $\\*[$TYPE]_LEAD \\$1
+.    nr #\\*[$TYPE]_LEAD 1
+.    rm $TYPE
+.END
+\#
+\# The _STYLE macro, called by various aliases, allows grouping
+\# style parameters for most document elements in a single macro
+\# using 'KEYWORD value' pairs.
+\#
+.MAC _STYLE END
+.    ds $STYLE_TYPE \\$0
+.    substring $STYLE_TYPE 0 -7
+.    ds $HDR_FTR \\*[$STYLE_TYPE]
+.    substring $HDR_FTR 0 5 \" HEADER or FOOTER
+.    if '\\*[$HDR_FTR]'HEADER' .ds $HDR_FTR HEADER
+.    if '\\*[$HDR_FTR]'FOOTER' .ds $HDR_FTR FOOTER
+.    ds $POS \\$0
+.    substring $POS 7 7
+.    if '\\*[$POS]'L' .ds $POS LEFT
+.    if '\\*[$POS]'C' .ds $POS CENTER
+.    if '\\*[$POS]'R' .ds $POS RIGHT
+.    if '\\*[$STYLE_TYPE]'\\*[$HDR_FTR]_\\*[$POS]' \{\
+.       ds $\\*[$HDR_FTR]_\\*[$POS] \\*[$HDR_FTR]_\\*[$POS]
+.       ds $STYLE_TYPE HDRFTR_\\*[$POS]
+.    \}
+.    if '\\*[$STYLE_TYPE]'ENDNOTES_HEADER' \
+.       ds $BIB-EN-TOC EN_STRING
+.    if '\\*[$STYLE_TYPE]'ENDNOTE_STRING' \
+.       ds $BIB-EN-TOC EN_STRING
+.    if '\\*[$STYLE_TYPE]'BIBLIOGRAPHY_HEADER' \
+.       ds $BIB-EN-TOC BIB_STRING
+.    if '\\*[$STYLE_TYPE]'TOC_HEADER' \
+.       ds $BIB-EN-TOC TOC_STRING
+.    if '\\*[$STYLE_TYPE]'PAGENUMBER' \
+.       ds $STYLE_TYPE PAGENUM
+.    nr #LOOP 0 1
+.    nr #STYLE_PARAMS \\n[#NUM_ARGS]
+.    while \\n+[#LOOP]<=\\n[#STYLE_PARAMS] \{\ 
+.       if '\\$1'FAMILY' \{\
+.          shift
+.          \\*[$STYLE_TYPE]_FAMILY \\$1
+.          shift
+.       \}
+.       if '\\$1'FONT' \{\
+.          shift
+.          \\*[$STYLE_TYPE]_FONT \\$1
+.          shift
+.       \}
+.       if '\\$1'SIZE' \{\
+.          shift
+.          \\*[$STYLE_TYPE]_SIZE \\$1
+.          shift
+.       \}
+.       if '\\$1'COLOR' \{\
+.          shift
+.          \\*[$STYLE_TYPE]_COLOR \\$1
+.          shift
+.       \}
+.       if '\\$1'CAPS' \{\
+.          if \\n[#\\*[$STYLE_TYPE]_SMALLCAPS] \{\
+.             tm1 \
+"[mom]: '\\*[$STYLE_TYPE]_STYLE' contains CAPS and SMALLCAPS. \
+CAPS takes precedence.
+.             rr #\\*[$STYLE_TYPE]_SMALLCAPS
+.          \}
+.          \\*[$STYLE_TYPE]_CAPS
+.          if d $\\*[$HDR_FTR]_LEFT   .HEADER_LEFT_CAPS
+.          if d $\\*[$HDR_FTR]_CENTER .HEADER_CENTER_CAPS
+.          if d $\\*[$HDR_FTR]_CENTRE .HEADER_CENTER_CAPS
+.          if d $\\*[$HDR_FTR]_RIGHT  .HEADER_RIGHT_CAPS
+.          shift
+.       \}
+.       if '\\$1'NO_CAPS' \{\
+.          nr #\\*[$STYLE_TYPE]_CAPS 0
+.          if !'\\*[$BIB-EN-TOC]'' \
+.             rr #\\*[$BIB-EN-TOC]_CAPS
+.          shift
+.       \}
+.       if '\\$1'SMALLCAPS' \{\
+.          if \\n[#\\*[$STYLE_TYPE]_CAPS] \{\
+.             tm1 \
+"[mom]: '\\*[$STYLE_TYPE]_STYLE' contains CAPS and SMALLCAPS. \
+SMALLCAPS takes precedence.
+.             rr #\\*[$STYLE_TYPE]_CAPS
+.          \}
+.          \\*[$STYLE_TYPE]_SMALLCAPS
+.          shift
+.       \}
+.       if '\\$1'NO_SMALLCAPS' \{\
+.          rr #\\*[$STYLE_TYPE]_SMALLCAPS
+.          if !'\\*[$BIB-EN-TOC]'' \
+.             rr #\\*[$BIB-EN-TOC]_SMALLCAPS
+.          shift
+.       \}
+.       if '\\$1'LEAD' \{\
+.          shift
+.          \\*[$STYLE_TYPE]_LEAD \\$1
+.          shift
+.       \}
+.       if '\\$1'AUTOLEAD' \{\
+.          shift
+.          \\*[$STYLE_TYPE]_AUTOLEAD \\$1
+.          shift
+.       \}
+.       if '\\$1'SPACE' \{\
+.          shift
+.          \\*[$STYLE_TYPE]_SPACE \\$1
+.          shift
+.       \}
+.       if '\\$1'QUAD' \{\
+.          shift
+.          ie '\\*[$STYLE_TYPE]'QUOTE' \{\
+.              if '\\$1'L'      .QUOTE_LEFT
+.              if '\\$1'LEFT'   .QUOTE_LEFT
+.              if '\\$1'C'      .QUOTE_CENTER
+.              if '\\$1'CENTER' .QUOTE_CENTER
+.              if '\\$1'CENTRE' .QUOTE_CENTER
+.              if '\\$1'R'      .QUOTE_RIGHT
+.              if '\\$1'RIGHT'  .QUOTE_RIGHT
+.          \}
+.          el .\\*[$STYLE_TYPE]_QUAD \\$1
+.          shift
+.       \}
+.       if '\\$1'INDENT' \{\
+.          shift
+.          \\*[$STYLE_TYPE]_INDENT \\$1
+.          shift
+.       \}
+.\" UNDERLINE and UNDERSCORE are identical but we can't use : or &
+.\" in string comparisons.
+.       if '\\$1'UNDERLINE' \{\
+.          shift
+.          if '\\$1'DOUBLE' \{\
+.             as ul-args \\$1 \"
+.             shift
+.          \}
+.          nr #COUNT 0 1
+.          while \\n+[#COUNT]<=3 \{\
+.             if \B'\\$1' \{\
+.                as ul-args \\$1 \"
+.                shift
+.             \}
+.          \}
+.          \\*[$STYLE_TYPE]_UNDERSCORE \\*[ul-args]
+.       \}
+.       if '\\$1'UNDERSCORE' \{\
+.          shift
+.          if '\\$1'DOUBLE' \{\
+.             as ul-args \\$1 \"
+.             shift
+.          \}
+.          nr #COUNT 0 1
+.          while \\n+[#COUNT]<=3 \{\
+.             if \B'\\$1' \{\
+.                as ul-args \\$1 \"
+.                shift
+.             \}
+.          \}
+.          \\*[$STYLE_TYPE]_UNDERSCORE \\*[ul-args]
+.       \}
+.       if '\\$1'NO_UNDERSCORE' \{\
+.          rr #\\*[$STYLE_TYPE]_UNDERLINE
+.          if !'\\*[$BIB-EN-TOC]'' \
+.             rr #\\*[$BIB-EN-TOC]_UNDERLINE
+.          shift
+.       \}
+.       if '\\$1'NO_UNDERLINE' \{\
+.          rr #\\*[$STYLE_TYPE]_UNDERLINE
+.          if !'\\*[$BIB-EN-TOC]'' \
+.             rr #\\*[$BIB-EN-TOC]_UNDERLINE
+.          shift
+.       \}
+.    \}
+.    br
+.    rm $STYLE_TYPE
+.    rm $HDR_FTR
+.    rm $POS
+.    rm $HEADER_LEFT
+.    rm $HEADER_CENTER
+.    rm $HEADER_RIGHT
+.    rm $BIB-EN-TOC
+.    rm ul-args
+.END
+.
+.ds STYLE_TYPE_1  ATTRIBUTE
+.ds STYLE_TYPE_2  AUTHOR
+.ds STYLE_TYPE_3  BIBLIOGRAPHY_HEADER
+.ds STYLE_TYPE_4  BIBLIOGRAPHY_STRING
+.ds STYLE_TYPE_5  BLOCKQUOTE
+.ds STYLE_TYPE_6  CHAPTER
+.ds STYLE_TYPE_7  CHAPTER_TITLE
+.ds STYLE_TYPE_8  CODE
+.ds STYLE_TYPE_9  COPYRIGHT
+.ds STYLE_TYPE_10 COVER
+.ds STYLE_TYPE_11 COVERTITLE
+.ds STYLE_TYPE_12 DOC_COVERTITLE
+.ds STYLE_TYPE_13 DOCHEADER
+.ds STYLE_TYPE_14 DOCTITLE
+.ds STYLE_TYPE_15 DOCTYPE
+.ds STYLE_TYPE_16 ENDNOTE_TITLE
+.ds STYLE_TYPE_17 ENDNOTES_HEADER
+.ds STYLE_TYPE_18 ENDNOTE_STRING
+.ds STYLE_TYPE_19 EPIGRAPH
+.ds STYLE_TYPE_20 FINIS
+.ds STYLE_TYPE_21 FOOTER_LEFT
+.ds STYLE_TYPE_22 FOOTER_CENTER
+.ds STYLE_TYPE_23 FOOTER_CENTRE
+.ds STYLE_TYPE_24 FOOTER_RIGHT
+.ds STYLE_TYPE_25 HEADER_LEFT
+.ds STYLE_TYPE_26 HEADER_CENTER
+.ds STYLE_TYPE_27 HEADER_CENTRE
+.ds STYLE_TYPE_28 HEADER_RIGHT
+.ds STYLE_TYPE_29 LEAD
+.ds STYLE_TYPE_30 LINENUMBER
+.ds STYLE_TYPE_31 MISC
+.ds STYLE_TYPE_32 QUOTE
+.ds STYLE_TYPE_33 PAGENUMBER
+.ds STYLE_TYPE_34 SUBTITLE
+.ds STYLE_TYPE_35 TITLE
+.ds STYLE_TYPE_36 TOC_HEADER
+.
+.
+.nr #LOOP 0 1
+.while \n+[#LOOP]<=36 \{\
+. ALIAS \*[STYLE_TYPE_\n[#LOOP]]_STYLE           _STYLE
+. ALIAS COVER_\*[STYLE_TYPE_\n[#LOOP]]_STYLE     _STYLE
+. ALIAS DOC_COVER_\*[STYLE_TYPE_\n[#LOOP]]_STYLE _STYLE
+.\}
+\#
+\# UNDERLINE CONTROL
+\# -----------------
+\# *Arguments:
+\#   [ DOUBLE ] [ <underline weight> [<underline gap>] ] | <none> | <anything>
+\# *Function:
+\#   Toggles underlining of the element indicated by the calling alias
+\#   on or off.  Uses #<element>_UNDERLINE_WEIGHT to set the weight,
+\#   and defines string $<element>_UNDERLINE_GAP.
+\#
+.MAC _UNDERLINE END
+.    ds $GET_TITLE_TYPE \\$0
+.    substring $GET_TITLE_TYPE -2
+.    ie '\\*[$GET_TITLE_TYPE]'NE' \{\
+.\" Called as _UNDERLINE
+.        ds $GET_TITLE_TYPE \\$0
+.        substring $GET_TITLE_TYPE 0 -10
+.        ds $TITLE_TYPE \\*[$GET_TITLE_TYPE]
+.    \}
+.    el \{\
+.\" Called as _UNDERSCORE
+.        ds $GET_TITLE_TYPE \\$0
+.        substring $GET_TITLE_TYPE 0 -11
+.        ds $TITLE_TYPE \\*[$GET_TITLE_TYPE]
+.    \}
+.    ds $GET_TITLE_TYPE \\$0
+.    substring $GET_TITLE_TYPE 0 2
+.    if '\\*[$GET_TITLE_TYPE]'BIB' .ds $TITLE_TYPE BIB_STRING_
+.    if '\\*[$GET_TITLE_TYPE]'SUB' .ds $TITLE_TYPE SUBTITLE_
+.    ds $GET_TITLE_TYPE \\$0
+.    substring $GET_TITLE_TYPE 0 7
+.    if '\\*[$GET_TITLE_TYPE]'ENDNOTES' .ds $TITLE_TYPE EN_STRING_
+.    ds $GET_TITLE_TYPE \\$0
+.    substring $GET_TITLE_TYPE 0 10
+.    if '\\*[$GET_TITLE_TYPE]'ENDNOTE_STR' .ds $TITLE_TYPE EN_STRING_
+.    if '\\*[$GET_TITLE_TYPE]'ENDNOTE_TIT' .ds $TITLE_TYPE EN_TITLE_
+.    ie '\\$1'' .nr #\\*[$TITLE_TYPE]UNDERLINE 1
+.    el \{\
+.       ie \\n[#NUM_ARGS]=1 \{\
+.          ie \B'\\$1' \{\
+.             if !\\n[#PRINT_STYLE]=1 \{\
+.                \\*[$TITLE_TYPE]UNDERLINE_WEIGHT \\$1
+.                nr #\\*[$TITLE_TYPE]UNDERLINE 1
+.             \}
+.          \}
+.          el \{\
+.             ie '\\$1'DOUBLE' .nr #\\*[$TITLE_TYPE]UNDERLINE 2
+.             el .nr #\\*[$TITLE_TYPE]UNDERLINE 0
+.          \}
+.       \}
+.       el \{\
+.          if !\\n[#PRINT_STYLE]=1 \{\
+.               nr #\\*[$TITLE_TYPE]UNDERLINE 1
+.               if '\\$1'DOUBLE' \{\
+.                  nr #\\*[$TITLE_TYPE]UNDERLINE 2
+.                  shift
+.               \}
+.               \\*[$TITLE_TYPE]UNDERLINE_WEIGHT \\$1
+.               if !'\\$2'' \
+.                  ds $\\*[$TITLE_TYPE]UNDERLINE_GAP \\$2
+.               if !'\\$3'' \
+.                  ds $\\*[$TITLE_TYPE]RULE_GAP \\$3
+.          \}
+.       \}
+.    \}
+.    rm $TITLE_TYPE
+.END
+.
+.ALIAS ENDNOTE_STRING_UNDERLINE _UNDERLINE
+.ALIAS ENDNOTE_STRING_UNDERSCORE _UNDERLINE
+\#
+\# DEFAULTS
+\# --------
+\# *Arguments:
+\#   <none>
+\# *Function:
+\#   Sets up defaults if no values are entered prior to START.
+\# *Notes:
+\#   The defaults for $CHAPTER_STRING, $DRAFT_STRING, and
+\#   $REVISION_STRING are in the COPYSTYLE macro.
+\#
+.MAC DEFAULTS END
+.    if !d $PAPER .PAPER LETTER
+.    if !\\n[#DOC_TYPE] .DOCTYPE DEFAULT
+.    ie \\n[#PAGENUM_STYLE_SET] .PAGENUM_STYLE \\*[$PAGENUM_STYLE]
+.    el \
+.       if !\\n[#COPY_STYLE]=1 .PAGENUM_STYLE DIGIT
+.    if !\\n[#COPY_STYLE] .COPYSTYLE FINAL
+.    if \\n[#DRAFT_WITH_PAGENUM] .COPYSTYLE \\*[$COPY_STYLE]
+.    if \\n[#DOC_TYPE]=4 \{\
+.       if !\\n[#USER_SET_L_LENGTH] \{\
+.          R_MARGIN \\n[#R_MARGIN]u
+.          rr #USER_SET_L_LENGTH
+.       \}
+.       if \\n[#PRINT_STYLE]=1 .PRINTSTYLE TYPEWRITE SINGLESPACE
+.    \}
+.    if \\n[#COPY_STYLE]=1 \{\
+.       COPYSTYLE DRAFT
+.       PAGENUMBER 1
+.    \}
+.    if !r #DOC_HEADER .DOCHEADER
+.    if !r #HEADERS_ON .HEADERS
+.    if !r #PAGINATE   .PAGINATE
+.\"
+.    if !r #HEADER_MARGIN .HEADER_MARGIN 4P+6p
+.    if !r #HEADER_GAP    .HEADER_GAP 3P
+.\"
+.    if \\n[#FOOTERS_ON] \{\
+.       HEADERS OFF
+.       ie \\n[#PAGINATE] \
+.          if \\n[#PAGE_NUM_POS_SET]=0 .PAGENUM_POS TOP CENTER
+.       el \
+.          if !\\n[#T_MARGIN] .T_MARGIN 6P
+.    \}
+.    if !\\n[#HEADERS_ON] \{\
+.       if !\\n[#FOOTERS_ON] \{\
+.          ie \\n[#PAGE_NUM_V_POS]=1 \{\
+.             HEADER_MARGIN \\n[#HEADER_MARGIN]
+.             HEADER_GAP \\n[#HEADER_GAP]
+.          \}
+.          el .if !r #T_MARGIN .T_MARGIN 6P
+.       \}
+.    \}
+.    if !r #T_MARGIN          .T_MARGIN \\n[#HEADER_MARGIN]+\\n[#HEADER_GAP]
+.    if !r #DOCHEADER_ADVANCE .nr #DOCHEADER_ADVANCE \\n[#T_MARGIN]
+.    if !r #FOOTER_MARGIN     .FOOTER_MARGIN 3P
+.    if !r #FOOTER_GAP        .FOOTER_GAP 3P
+.    if !r #B_MARGIN          .B_MARGIN \\n[#FOOTER_MARGIN]u+\\n[#FOOTER_GAP]u
+.    if !r #HEADER_RULE_GAP .HEADER_RULE_GAP 4p
+.    if !r #FOOTER_RULE_GAP .FOOTER_RULE_GAP 4p
+.    if !r #HDRFTR_RULE     .HDRFTR_RULE
+.    if !r #PAGE_NUM_SET    .PAGENUMBER 1
+.\" Read in number registers and strings for type parameters
+.    nr #DOC_L_MARGIN \\n[#L_MARGIN]
+.    nr #DOC_L_LENGTH \\n[#L_LENGTH]
+.    nr #DOC_R_MARGIN \\n[#PAGE_WIDTH]-(\\n[#DOC_L_MARGIN]+\\n[#L_LENGTH])
+.    ie !'\\*[$SAVED_DOC_FAM]'' \{\
+.       ds $DOC_FAM \\*[$SAVED_DOC_FAM]
+.       rm $SAVED_DOC_FAM
+.    \}
+.    el .ds $DOC_FAM \\*[$FAMILY]
+.    nr #DOC_PT_SIZE  \\n[#PT_SIZE]
+.\"
+.    if \\n[#TOC]          .nr #DOC_PT_SIZE \\n[#TOC_PS]
+.    if \\n[#ENDNOTES]     .nr #DOC_PT_SIZE \\n[#EN_PS]
+.    if \\n[#BIBLIOGRAPHY] .nr #DOC_PT_SIZE \\n[#BIB_PS]
+.\"
+.    nr #DOC_LEAD     \\n[.v]
+.    nr #DOC@LEAD     \\n[#DOC_LEAD]
+.    if \\n[#AUTO_LEAD] .nr #DOC_AUTOLEAD \\n[#AUTOLEAD_VALUE]
+.\" #SAVED_DOC_LEAD is set in COLLATE
+.    if \\n[#SAVED_DOC_LEAD] \{\
+.       if \
+(\\n[#TOC]=0):\
+(\\n[#LIST_OF_FIGURES]=0):\
+(\\n[#LIST_OF_TABLES]=0):\
+(\\n[#LIST_OF_EQUATIONS]=0) \
+.          if !\\n[#DOC_LEAD]=\\n[#SAVED_DOC_LEAD] .nr #RERUN_TRAPS 1
+.    \}
+.    ie \\n[#ADJ_DOC_LEAD]=1 .
+.    el \
+.       if !\\n[#DOC_LEAD_ADJUST_OFF] .DOC_LEAD_ADJUST
+.    ie d$RESTORE_DOC_QUAD \{\
+.       ds $DOC_QUAD \\*[$RESTORE_DOC_QUAD]
+.       rm $RESTORE_DOC_QUAD
+.    \}
+.    el .ds $DOC_QUAD \\*[$QUAD_VALUE]
+.    if '\\*[$FONT]''   .FT R
+.    if '\\*[$PP_FT]''  .ds $PP_FT \\*[$FONT]
+.    FT \\*[$PP_FT]
+.\" Counters
+.    nr #PP                0
+.    nr #FN_NUMBER         0 1
+.    nr #EN_NUMBER         0 1
+.    nr #FN_COUNT_FOR_COLS 0 1
+.    nr #DONE_ONCE         0 1
+.\" Enable shimming if user hasn't turned it off
+.    if \\n[#NO_SHIM]=2    .rr #NO_SHIM
+.\" General style defaults for both PRINTSTYLEs
+.    nr #PP_STYLE 1
+.    PARA_INDENT \\n[#PP_INDENT]u
+.    if !d $HDRFTR_FAM           .ds $HDRFTR_FAM \\*[$DOC_FAM]
+.    if !d $HDRFTR_SIZE_CHANGE   .HDRFTR_SIZE +0
+.    if !d $PAGE_NUM_FAM         .PAGENUM_FAMILY \\*[$DOC_FAM]
+.    if !d $PAGE_NUM_FT          .PAGENUM_FONT R
+.    if !d $PAGE_NUM_SIZE_CHANGE .PAGENUM_SIZE +0
+.    if !r #PAGE_NUM_POS_SET     .PAGENUM_POS BOTTOM CENTER
+.    ie \\n[#PAGE_NUM_HYPHENS_SET] \{\
+.       if \\n[#PAGE_NUM_HYPHENS]=0 .PAGENUM_HYPHENS OFF
+.       if \\n[#PAGE_NUM_HYPHENS]=1 .PAGENUM_HYPHENS
+.    \}
+.    el .PAGENUM_HYPHENS
+.    if !d $FN_FAM     .FOOTNOTE_FAMILY \\*[$DOC_FAM]
+.    if !d $FN_FT      .FOOTNOTE_FONT R
+.    if !d $FN_QUAD    .FOOTNOTE_QUAD \\*[$DOC_QUAD]
+.    if !r #FN_RULE    .FOOTNOTE_RULE
+.    if !r #FN_MARKERS .FOOTNOTE_MARKERS
+.    if \\n[#FN_MARKERS]=1 \{\
+.       if \\n[#FN_REF]=1 \
+.          if !\\n[#FN_MARKER_STYLE] .FOOTNOTE_MARKER_STYLE NUMBER
+.       if !\\n[#FN_MARKER_STYLE] .FOOTNOTE_MARKER_STYLE STAR
+.    \}
+.    if !r #EN_MARKER_STYLE .ENDNOTE_MARKER_STYLE SUPERSCRIPT
+.    if !d $EN_PN_STYLE     .ENDNOTES_PAGENUM_STYLE digit
+.    if !d $EN_FAM          .ENDNOTE_FAMILY \\*[$DOC_FAM]
+.    if !d $EN_FT           .ENDNOTE_FONT R
+.    if !d $EN_QUAD         .ENDNOTE_QUAD \\*[$DOC_QUAD]
+.    if !d $EN_STRING       .ENDNOTES_HEADER_STRING "Endnotes"
+.    if !d $EN_STRING_FAM   .ENDNOTES_HEADER_FAMILY \\*[$EN_FAM]
+.    if !d $EN_STRING_QUAD  .ENDNOTES_HEADER_QUAD CENTER
+.    if !d $EN_TITLE \{\
+.       ie \\n[#DOC_TYPE]=2 \{\
+.          ie !'\\*[$CHAPTER_TITLE_1]'' \{\
+.             ie '\\*[$CHAPTER]'' .ENDNOTE_TITLE "\\*[$CHAPTER_TITLE]"
+.             el .ENDNOTE_TITLE \
+"\\*[$CHAPTER_STRING] \\*[$CHAPTER]: \\*[$CHAPTER_TITLE]"
+.          \}
+.             el \{\
+.                ie '\\*[$CHAPTER]'' .ENDNOTE_TITLE "\\*[$CHAPTER_STRING]"
+.                el .ENDNOTE_TITLE "\\*[$CHAPTER_STRING] \\*[$CHAPTER]"
+.             \}
+.          \}
+.       el .ENDNOTE_TITLE "\\*[$TITLE]"
+.    \}
+.    if !d $EN_TITLE_FAM  .ENDNOTE_TITLE_FAMILY \\*[$EN_FAM]
+.    if !d $EN_TITLE_QUAD .ENDNOTE_TITLE_QUAD LEFT
+.    if !d $EN_NUMBER_FAM .ENDNOTE_NUMBER_FAMILY \\*[$EN_FAM]
+.    if !d $EN_LN_FAM     .ENDNOTE_LINENUMBER_FAMILY \\*[$EN_FAM]
+.    if !r #EN_NUMBERS_ALIGN_LEFT \{\
+.       if !r #EN_NUMBERS_ALIGN_RIGHT \{\
+.          ie !\\n[#EN_MARKER_STYLE]=2 .ENDNOTE_NUMBERS_ALIGN RIGHT 2
+.          el .ENDNOTE_NUMBERS_ALIGN RIGHT 4
+.       \}
+.    \}
+.    if !r #EN_LN_GAP         .ENDNOTE_LINENUMBER_GAP 1m
+.    if !r #EN_ALLOWS_HEADERS .ENDNOTES_ALLOWS_HEADERS
+.    if !d $BIB_PN_STYLE      .BIBLIOGRAPHY_PAGENUM_STYLE digit
+.    if !d $BIB_FAM           .BIBLIOGRAPHY_FAMILY \\*[$DOC_FAM]
+.    if !d $BIB_FT            .BIBLIOGRAPHY_FONT R
+.    if !d $BIB_QUAD          .BIBLIOGRAPHY_QUAD \\*[$DOC_QUAD]
+.    if !d $BIB_STRING        .BIBLIOGRAPHY_STRING "Bibliography"
+.    if !d $BIB_STRING_FAM    .BIBLIOGRAPHY_STRING_FAMILY \\*[$BIB_FAM]
+.    if !d $BIB_STRING_QUAD   .BIBLIOGRAPHY_STRING_QUAD CENTER
+.    if !d $TOC_HEADER_STRING .TOC_HEADER_STRING "Contents"
+.    if !d $TOC_HEADER_QUAD   .TOC_HEADER_QUAD LEFT
+.    if !d $TOC_PN_STYLE      .TOC_PAGENUM_STYLE roman
+.    if !r #TOC_PN_PADDING    .TOC_PADDING 3
+.\" Line numbering
+.    if !r #LN_GUTTER      .nr #LN_GUTTER 2
+.    if !r #Q_LN_GUTTER    .nr #Q_LN_GUTTER 2
+.    if !r #BQ_LN_GUTTER   .nr #BQ_LN_GUTTER 2
+.    if !d $LN_FAM         .ds $LN_FAM \\*[$DOC_FAM]
+.    if !d $LN_FT          .ds $LN_FT R
+.    if !d $LN_SIZE_CHANGE .ds $LN_SIZE_CHANGE +0
+.    if !d $LN_COLOR       .ds $LN_COLOR black
+.\" PDF link colour
+.    if !\\n[PDFHREF_COLOR_SET] .PDF_LINK_COLOR 0.0 0.3 0.9
+.\" PDF frame
+.    if !d pdf-img:frame-weight .ds pdf-img:frame-weight .5
+.    if !d pdf-img:frame-color  .ds pdf-img:frame-color  black
+.\" Captions, labels, sources
+.\" All at default doc specs except leading, which is autolead 2
+.   nr label-type-counter 0 1
+.   while \\n+[label-type-counter]<=4 \{\
+.      if \\n[label-type-counter]=1 .ds label-type eqn
+.      if \\n[label-type-counter]=2 .ds label-type pdf-img
+.      if \\n[label-type-counter]=3 .ds label-type pic
+.      if \\n[label-type-counter]=4 .ds label-type tbl
+.      nr spec-type-counter 0 1
+.      while \\n+[spec-type-counter]<=3 \{\
+.         if \\n[spec-type-counter]=1 .ds spec-type label
+.         if \\n[spec-type-counter]=2 .ds spec-type caption
+.         if \\n[spec-type-counter]=3 .ds spec-type source
+.         set-defaults
+.         set-inline-specs
+.      \}
+.   \}
+.\" String defaults for both PRINTSTYLEs
+.    ie \\n[#DOC_TYPE]=1 \{\
+.       ie '\\*[$DOCTITLE]'' \{\
+.          if \\n[#USER_DEF_HDRFTR_LEFT]=0  .ds $HDRFTR_LEFT \\*[$AUTHOR_1]
+.          if \\n[#USER_DEF_HDRFTR_RIGHT]=0 .ds $HDRFTR_RIGHT \\*[$TITLE]
+.       \}
+.       el \{\
+.          if \\n[#COPY_STYLE]=1             .DRAFT_WITH_PAGENUMBER
+.          if \\n[#USER_DEF_HDRFTR_LEFT]=0   .ds $HDRFTR_LEFT \\*[$AUTHOR_1]
+.          if \\n[#USER_DEF_HDRFTR_CENTER]=0 .ds $HDRFTR_CENTER \\*[$TITLE]
+.          if \\n[#USER_DEF_HDRFTR_RIGHT]=0  .ds $HDRFTR_RIGHT \\*[$DOCTITLE]
+.       \}
+.    \}
+.    el \{\
+.       if \\n[#USER_DEF_HDRFTR_LEFT]=0  .ds $HDRFTR_LEFT \\*[$AUTHOR_1]
+.       if \\n[#USER_DEF_HDRFTR_RIGHT]=0 .ds $HDRFTR_RIGHT \\*[$TITLE]
+.    \}
+.    if !d $ATTRIBUTE_STRING  .ds $ATTRIBUTE_STRING by
+.    if !d $FINIS_STRING      .FINIS_STRING "End"
+.    if !r #FINIS_STRING_CAPS .nr #FINIS_STRING_CAPS 1
+.\" Covers
+.    if !r #DOC_COVERS_OFF           .nr #DOC_COVERS 1
+.    if !r #COVERS_OFF               .nr #COVERS 1
+.    if !d $COVER_COPYRIGHT_QUAD     .COVER_COPYRIGHT_QUAD R
+.    if !d $COVER_MISC_QUAD          .COVER_MISC_QUAD L
+.    if !d $MISC_QUAD                .MISC_QUAD L
+.    if !d $DOC_COVER_COPYRIGHT_QUAD .DOC_COVER_COPYRIGHT_QUAD R
+.    if !d $DOC_COVER_MISC_QUAD      .DOC_COVER_MISC_QUAD L
+.\" Defaults for printstyle TYPEWRITE
+.    if \\n[#PRINT_STYLE]=1 \{\
+.       TYPEWRITER
+.       SS DEFAULT
+.       if \\n[#UNDERLINE_QUOTES]=1 .UNDERLINE_QUOTES
+.       if \\n[#UNDERLINE_QUOTES]=0 .UNDERLINE_QUOTES OFF
+.       if !\\n[#HDRFTR_PLAIN] \{\
+.          if !r #HDRFTR_RIGHT_CAPS .nr #HDRFTR_RIGHT_CAPS 1
+.          if \\n[#HDRFTR_RIGHT_CAPS]=0 \
+.             if !d $HDRFTR_RIGHT_SIZE_CHANGE .HDRFTR_RIGHT_SIZE +0
+.       \}
+.\" +Doctype underlining (if NAMED)
+.       if !r #DOCTYPE_UNDERLINE .nr #DOCTYPE_UNDERLINE 1
+.\" +Quotes and blockquotes
+.       if !r #Q_OFFSET_VALUE \
+.          if '\\*[$Q_OFFSET_VALUE]'' \
+.             QUOTE_INDENT \\n[#PP_INDENT]u+(\\n[#PP_INDENT]u/2u)
+.       if !d $Q_QUAD .QUOTE_LEFT
+.       if !d $BQUOTE_QUAD        .BLOCKQUOTE_QUAD LEFT
+.       if !r #BQ_OFFSET_VALUE \
+.          if '\\*[$BQ_OFFSET_VALUE]'' \
+.             BLOCKQUOTE_INDENT \\n[#PP_INDENT]u+(\\n[#PP_INDENT]u/2u)
+.\" +Epigraphs
+.       if !r #EPI_OFFSET_VALUE \
+.          if '\\*[$EPI_OFFSET_VALUE]'' .EPIGRAPH_INDENT 2
+.\" +Linebreaks
+.       if !d $LINEBREAK_CHAR .LINEBREAK_CHAR * 3 2p
+.\" +Footnotes
+.       if !d $FN_SIZE_CHANGE .FOOTNOTE_SIZE +0
+.       if !r #FN_RULE_LENGTH .FOOTNOTE_RULE_LENGTH 2i
+.\" +Endnotes
+.       if !r #EN_PP_INDENT .ENDNOTE_PARA_INDENT \\n[#PP_INDENT]
+.       if !r #EN_STRING_UNDERLINE .nr #EN_STRING_UNDERLINE 2
+.       if !r #EN_STRING_CAPS .ENDNOTES_HEADER_CAPS
+.\" +Footnotes
+.       if !r #FN_RULE_ADJ .FOOTNOTE_RULE_ADJ 6p
+.\" +Slant stuff
+.       if !r #SLANT_MEANS_SLANT \{\
+.          ie \\n[#UNDERLINE_SLANT]=1 .UNDERLINE_SLANT
+.          el .UNDERLINE_SLANT OFF
+.       \}
+.\" +Bibliography
+.       if !r #BIB_STRING_UNDERLINE .nr #BIB_STRING_UNDERLINE 2
+.       if !r #BIB_STRING_CAPS .BIBLIOGRAPHY_STRING_CAPS
+.    \}
+.\" Defaults for printstyle TYPESET
+.    if \\n[#PRINT_STYLE]=2 \{\
+.       if !d $DOCHEADER_LEAD_ADJ .DOCHEADER_LEAD +0
+.\" +Cover
+.       if !d $COVER_LEAD_ADJ .COVER_LEAD +0
+.       if !d $COVER_FAM      .COVER_FAMILY \\*[$DOC_FAM]
+.\" (title)
+.       if !d $COVER_TITLE_FAM \{\
+.          ie !d $COVER_FAM .COVER_TITLE_FAMILY \\*[$DOC_FAM]
+.          el .COVER_TITLE_FAMILY \\*[$COVER_FAM]
+.       \}
+.       if !d $COVER_TITLE_FT .COVER_TITLE_FONT B
+.       if !d $COVER_TITLE_SIZE_CHANGE .COVER_TITLE_SIZE +3.5
+.\" (doctitle)
+.       if !d $COVER_DOCTITLE_FAM \{\
+.          ie !d $DOC_COVER_FAM .COVER_DOCTITLE_FAMILY \\*[$DOC_FAM]
+.          el .COVER_DOCTITLE_FAMILY \\*[$COVER_FAM]
+.       \}
+.       if !d $COVER_DOCTITLE_FT          .COVER_DOCTITLE_FONT B
+.       if !d $COVER_DOCTITLE_SIZE_CHANGE .COVER_DOCTITLE_SIZE +3.5
+.\" (covertitle)
+.       if !d $COVER_COVERTITLE_FAM \{\
+.          ie !d $COVER_FAM .COVER_COVERTITLE_FAMILY \\*[$DOC_FAM]
+.          el .COVER_COVERTITLE_FAMILY \\*[$COVER_FAM]
+.       \}
+.       if !d $COVER_COVERTITLE_FT .COVER_COVERTITLE_FONT B
+.       if !d $COVER_COVERTITLE_SIZE_CHANGE .COVER_COVERTITLE_SIZE +3.5
+.\" (doc_covertitle)
+.       if !d $COVER_DOC_COVERTITLE_FAM \{\
+.          ie !d $COVER_FAM .COVER_DOC_COVERTITLE_FAMILY \\*[$DOC_FAM]
+.          el .COVER_DOC_COVERTITLE_FAMILY \\*[$COVER_FAM]
+.       \}
+.       if !d $COVER_DOC_COVERTITLE_FT .COVER_DOC_COVERTITLE_FONT B
+.       if !d $COVER_DOC_COVERTITLE_SIZE_CHANGE .COVER_DOC_COVERTITLE_SIZE +3.5
+.\" (chapter)
+.       if !d $COVER_CHAPTER_FAM \{\
+.          ie !d $COVER_FAM .COVER_CHAPTER_FAMILY \\*[$DOC_FAM]
+.          el .COVER_CHAPTER_FAMILY \\*[$COVER_FAM]
+.       \}
+.       if !d $COVER_CHAPTER_FT .COVER_CHAPTER_FONT B
+.       if !d $COVER_CHAPTER_SIZE_CHANGE .COVER_CHAPTER_SIZE +3.5
+.\" (chapter title)
+.       if !d $COVER_CHAPTER_TITLE_FAM \{\
+.          ie !d $COVER_FAM .COVER_CHAPTER_TITLE_FAMILY \\*[$DOC_FAM]
+.          el .COVER_CHAPTER_TITLE_FAMILY \\*[$COVER_FAM]
+.       \}
+.       if !d $COVER_CHAPTER_TITLE_FT .COVER_CHAPTER_TITLE_FONT BI
+.       if !d $COVER_CHAPTER_TITLE_SIZE_CHANGE .COVER_CHAPTER_TITLE_SIZE +4
+.\" (subtitle)
+.       if !d $COVER_SUBTITLE_FAM \{\
+.          ie !d $COVER_FAM .COVER_SUBTITLE_FAMILY \\*[$DOC_FAM]
+.          el .COVER_SUBTITLE_FAMILY \\*[$COVER_FAM]
+.       \}
+.       if !d $COVER_SUBTITLE_FT .COVER_SUBTITLE_FONT R
+.       if !d $COVER_SUBTITLE_SIZE_CHANGE .COVER_SUBTITLE_SIZE +0
+.\" (attribution and author[s])
+.       if !d $COVER_ATTRIBUTE_FAM \{\
+.          ie !d $COVER_FAM .COVER_ATTRIBUTE_FAMILY \\*[$DOC_FAM]
+.          el .COVER_ATTRIBUTE_FAMILY \\*[$COVER_FAM]
+.       \}
+.       if !d $COVER_ATTRIBUTE_FT .COVER_ATTRIBUTE_FONT I
+.       if !d $COVER_ATTRIBUTE_SIZE_CHANGE .COVER_ATTRIBUTE_SIZE +0
+.       if !d $COVER_AUTHOR_FAM \{\
+.          ie !d $COVER_FAM .COVER_AUTHOR_FAMILY \\*[$DOC_FAM]
+.          el .COVER_AUTHOR_FAMILY \\*[$COVER_FAM]
+.       \}
+.       if !d $COVER_AUTHOR_FT .COVER_AUTHOR_FONT I
+.       if !d $COVER_AUTHOR_SIZE_CHANGE .COVER_AUTHOR_SIZE +0
+.\" (doctype if "named")
+.       if !d $COVER_DOCTYPE_FAM \{\
+.          ie !d $COVER_FAM .COVER_DOCTYPE_FAMILY \\*[$DOC_FAM]
+.          el .COVER_DOCTYPE_FAMILY \\*[$COVER_FAM]
+.       \}
+.       if !d $COVER_DOCTYPE_FT .COVER_DOCTYPE_FONT BI
+.       if !d $COVER_DOCTYPE_SIZE_CHANGE .COVER_DOCTYPE_SIZE +3
+.\" (copyright)
+.       if !d $COVER_COPYRIGHT_FAM \{\
+.          ie !d $COVER_FAM .COVER_COPYRIGHT_FAMILY \\*[$DOC_FAM]
+.          el .COVER_COPYRIGHT_FAMILY \\*[$COVER_FAM]
+.       \}
+.       if !d $COVER_COPYRIGHT_FT .COVER_COPYRIGHT_FONT R
+.       if !d $COVER_COPYRIGHT_SIZE_CHANGE .COVER_COPYRIGHT_SIZE -2
+.\" (misc)
+.       if !d $COVER_MISC_FAM         .COVER_MISC_FAMILY \\*[$DOC_FAM]
+.       if !d $COVER_MISC_FT          .COVER_MISC_FONT R
+.       if !d $COVER_MISC_SIZE_CHANGE .COVER_MISC_SIZE -2
+.       if !r #COVER_MISC_LEAD        .COVER_MISC_LEAD 14.5
+.\" +Doc cover
+.       if !d $DOC_COVER_LEAD_ADJ .DOC_COVER_LEAD +0
+.       if !d $DOC_COVER_FAM      .DOC_COVER_FAMILY \\*[$DOC_FAM]
+.\" (title)
+.       if !d $DOC_COVER_TITLE_FAM \{\
+.          ie !d $DOC_COVER_FAM .DOC_COVER_TITLE_FAMILY \\*[$DOC_FAM]
+.          el .DOC_COVER_TITLE_FAMILY \\*[$DOC_COVER_FAM]
+.       \}
+.       if !d $DOC_COVER_TITLE_FT          .DOC_COVER_TITLE_FONT B
+.       if !d $DOC_COVER_TITLE_SIZE_CHANGE .DOC_COVER_TITLE_SIZE +3.5
+.\" (doctitle)
+.       if !d $DOC_COVER_DOCTITLE_FAM \{\
+.          ie !d $DOC_COVER_FAM .DOC_COVER_DOCTITLE_FAMILY \\*[$DOC_FAM]
+.          el .DOC_COVER_DOCTITLE_FAMILY \\*[$DOC_COVER_FAM]
+.       \}
+.       if !d $DOC_COVER_DOCTITLE_FT          .DOC_COVER_DOCTITLE_FONT B
+.       if !d $DOC_COVER_DOCTITLE_SIZE_CHANGE .DOC_COVER_DOCTITLE_SIZE +3.5
+.\" (covertitle)
+.       if !d $DOC_COVER_COVERTITLE_FAM \{\
+.          ie !d $COVER_FAM .DOC_COVER_COVERTITLE_FAMILY \\*[$DOC_FAM]
+.          el .DOC_COVER_COVERTITLE_FAMILY \\*[$COVER_FAM]
+.       \}
+.       if !d $DOC_COVER_COVERTITLE_FT .DOC_COVER_COVERTITLE_FONT B
+.       if !d $DOC_COVER_COVERTITLE_SIZE_CHANGE .DOC_COVER_COVERTITLE_SIZE +3.5
+.\" (doc_covertitle)
+.       if !d $DOC_COVER_DOC_COVERTITLE_FAM \{\
+.          ie !d $COVER_FAM .DOC_COVER_DOC_COVERTITLE_FAMILY \\*[$DOC_FAM]
+.          el .DOC_COVER_DOC_COVERTITLE_FAMILY \\*[$COVER_FAM]
+.       \}
+.       if !d $DOC_COVER_DOC_COVERTITLE_FT .DOC_COVER_DOC_COVERTITLE_FONT B
+.       if !d $DOC_COVER_DOC_COVERTITLE_SIZE_CHANGE .DOC_COVER_DOC_COVERTITLE_SIZE +3.5
+.\" (chapter)
+.       if !d $DOC_COVER_CHAPTER_FAM \{\
+.          ie !d $DOC_COVER_FAM .DOC_COVER_CHAPTER_FAMILY \\*[$DOC_FAM]
+.          el .DOC_COVER_CHAPTER_FAMILY \\*[$DOC_COVER_FAM]
+.       \}
+.       if !d $DOC_COVER_CHAPTER_FT          .DOC_COVER_CHAPTER_FONT B
+.       if !d $DOC_COVER_CHAPTER_SIZE_CHANGE .DOC_COVER_CHAPTER_SIZE +3.5
+.\" (chapter title)
+.       if !d $DOC_COVER_CHAPTER_TITLE_FAM \{\
+.          ie !d $DOC_COVER_FAM .DOC_COVER_CHAPTER_TITLE_FAMILY \\*[$DOC_FAM]
+.          el .DOC_COVER_CHAPTER_TITLE_FAMILY \\*[$DOC_COVER_FAM]
+.       \}
+.       if !d $DOC_COVER_CHAPTER_TITLE_FT .DOC_COVER_CHAPTER_TITLE_FONT BI
+.       if !d $DOC_COVER_CHAPTER_TITLE_SIZE_CHANGE .DOC_COVER_CHAPTER_TITLE_SIZE +4
+.\" (subtitle)
+.       if !d $DOC_COVER_SUBTITLE_FAM \{\
+.          ie !d $DOC_COVER_FAM .DOC_COVER_SUBTITLE_FAMILY \\*[$DOC_FAM]
+.          el .DOC_COVER_SUBTITLE_FAMILY \\*[$DOC_COVER_FAM]
+.       \}
+.       if !d $DOC_COVER_SUBTITLE_FT .DOC_COVER_SUBTITLE_FONT R
+.       if !d $DOC_COVER_SUBTITLE_SIZE_CHANGE .DOC_COVER_SUBTITLE_SIZE +0
+.\" (attribution and author[s])
+.       if !d $DOC_COVER_ATTRIBUTE_FAM \{\
+.          ie !d $DOC_COVER_FAM .DOC_COVER_ATTRIBUTE_FAMILY \\*[$DOC_FAM]
+.          el .DOC_COVER_ATTRIBUTE_FAMILY \\*[$DOC_COVER_FAM]
+.       \}
+.       if !d $DOC_COVER_ATTRIBUTE_FT .DOC_COVER_ATTRIBUTE_FONT I
+.       if !d $DOC_COVER_ATTRIBUTE_SIZE_CHANGE .DOC_COVER_ATTRIBUTE_SIZE +0
+.       if !d $DOC_COVER_AUTHOR_FAM \{\
+.          ie !d $DOC_COVER_FAM .DOC_COVER_AUTHOR_FAMILY \\*[$DOC_FAM]
+.          el .DOC_COVER_AUTHOR_FAMILY \\*[$DOC_COVER_FAM]
+.       \}
+.       if !d $DOC_COVER_AUTHOR_FT .DOC_COVER_AUTHOR_FONT I
+.       if !d $DOC_COVER_AUTHOR_SIZE_CHANGE .DOC_COVER_AUTHOR_SIZE +0
+.\" (doctype if "named")
+.       if !d $DOC_COVER_DOCTYPE_FAM \{\
+.          ie !d $DOC_COVER_FAM .DOC_COVER_DOCTYPE_FAMILY \\*[$DOC_FAM]
+.          el .DOC_COVER_DOCTYPE_FAMILY \\*[$DOC_COVER_FAM]
+.       \}
+.       if !d $DOC_COVER_DOCTYPE_FT .DOC_COVER_DOCTYPE_FONT BI
+.       if !d $DOC_COVER_DOCTYPE_SIZE_CHANGE .DOC_COVER_DOCTYPE_SIZE +3
+.\" (copyright)
+.       if !d $DOC_COVER_COPYRIGHT_FAM \{\
+.          ie !d $DOC_COVER_FAM .DOC_COVER_COPYRIGHT_FAMILY \\*[$DOC_FAM]
+.          el .DOC_COVER_COPYRIGHT_FAMILY \\*[$DOC_COVER_FAM]
+.       \}
+.       if !d $DOC_COVER_COPYRIGHT_FT .DOC_COVER_COPYRIGHT_FONT R
+.       if !d $DOC_COVER_COPYRIGHT_SIZE_CHANGE .DOC_COVER_COPYRIGHT_SIZE -2
+.\" (misc)
+.       if !d $DOC_COVER_MISC_FAM         .DOC_COVER_MISC_FAMILY \\*[$DOC_FAM]
+.       if !d $DOC_COVER_MISC_FT          .DOC_COVER_MISC_FONT R
+.       if !d $DOC_COVER_MISC_SIZE_CHANGE .DOC_COVER_MISC_SIZE -2
+.       if !r #DOC_COVER_MISC_LEAD        .DOC_COVER_MISC_LEAD 14.5
+.\" +Docheader
+.       if !d $DOCHEADER_FAM .DOCHEADER_FAMILY \\*[$DOC_FAM]
+.       if !d $TITLE_FAM \{\
+.          ie !d $DOCHEADER_FAM .TITLE_FAMILY \\*[$DOC_FAM]
+.          el .TITLE_FAMILY \\*[$DOCHEADER_FAM]
+.       \}
+.       if !d $TITLE_FT .TITLE_FONT B
+.       if !d $TITLE_SIZE_CHANGE \{\
+.          ie \\n[#DOC_TYPE]=2 .TITLE_SIZE +4
+.          el .TITLE_SIZE +3.5
+.       \}
+.       if !d $CHAPTER_FAM \{\
+.          ie !d $DOCHEADER_FAM .CHAPTER_FAMILY \\*[$DOC_FAM]
+.          el .CHAPTER_FAMILY \\*[$DOCHEADER_FAM]
+.       \}
+.       if !d $CHAPTER_FT .CHAPTER_FONT B
+.       if !d $CHAPTER_SIZE_CHANGE .CHAPTER_SIZE +4
+.       if !d $CHAPTER_TITLE_FAM \{\
+.          ie !d $DOCHEADER_FAM .CHAPTER_TITLE_FAMILY \\*[$DOC_FAM]
+.          el .CHAPTER_TITLE_FAMILY \\*[$DOCHEADER_FAM]
+.       \}
+.       if !d $CHAPTER_TITLE_FT          .CHAPTER_TITLE_FONT BI
+.       if !d $CHAPTER_TITLE_SIZE_CHANGE .CHAPTER_TITLE_SIZE +4
+.       if !d $SUBTITLE_FAM \{\
+.          ie !d $DOCHEADER_FAM .SUBTITLE_FAMILY \\*[$DOC_FAM]
+.          el .SUBTITLE_FAMILY \\*[$DOCHEADER_FAM]
+.       \}
+.       if !d $SUBTITLE_FT          .SUBTITLE_FONT R
+.       if !d $SUBTITLE_SIZE_CHANGE .SUBTITLE_SIZE +0
+.       if !d $ATTRIBUTE_FAM \{\
+.          ie !d $DOCHEADER_FAM .ATTRIBUTE_FAMILY \\*[$DOC_FAM]
+.          el .ATTRIBUTE_FAMILY \\*[$DOCHEADER_FAM]
+.       \}
+.       if !d $ATTRIBUTE_FT          .ATTRIBUTE_FONT I
+.       if !d $ATTRIBUTE_SIZE_CHANGE .ATTRIBUTE_SIZE +0
+.       if !d $AUTHOR_FAM \{\
+.          ie !d $DOCHEADER_FAM .AUTHOR_FAMILY \\*[$DOC_FAM]
+.          el .AUTHOR_FAMILY \\*[$DOCHEADER_FAM]
+.       \}
+.       if !d $AUTHOR_FT          .AUTHOR_FONT I
+.       if !d $AUTHOR_SIZE_CHANGE .AUTHOR_SIZE +0
+.       if !d $DOCTYPE_FAM \{\
+.          ie !d $DOCHEADER_FAM .DOCTYPE_FAMILY \\*[$DOC_FAM]
+.          el .DOCTYPE_FAMILY \\*[$DOCHEADER_FAM]
+.       \}
+.       if !d $DOCTYPE_FT          .DOCTYPE_FONT BI
+.       if !d $DOCTYPE_SIZE_CHANGE .DOCTYPE_SIZE +3
+.\" +Headers and footers
+.       if !\\n[#HDRFTR_PLAIN] \{\
+.          if !d $HDRFTR_LEFT_FAM \
+.             HDRFTR_LEFT_FAMILY \\*[$DOC_FAM]
+.          if !d $HDRFTR_LEFT_FT \
+.              HDRFTR_LEFT_FONT R
+.          if \\n[#HDRFTR_LEFT_CAPS] \
+.             if !d $HDRFTR_LEFT_SIZE_CHANGE \
+.                HDRFTR_LEFT_SIZE -2
+.          if !d $HDRFTR_LEFT_SIZE_CHANGE \
+.              HDRFTR_LEFT_SIZE -.5
+.          if !d $HDRFTR_CENTER_FAM \
+.              HDRFTR_CENTER_FAMILY \\*[$DOC_FAM]
+.          if !d $HDRFTR_CENTER_FT .HDRFTR_CENTER_FONT I
+.          if \\n[#HDRFTR_CENTER_CAPS] \
+.             if !d $HDRFTR_CENTER_SIZE_CHANGE \
+.                HDRFTR_CENTER_SIZE -2
+.          if !d $HDRFTR_CENTER_SIZE_CHANGE \
+.              HDRFTR_CENTER_SIZE -.5
+.          if !d $HDRFTR_RIGHT_FAM \
+.             HDRFTR_RIGHT_FAMILY \\*[$DOC_FAM]
+.          if !d $HDRFTR_RIGHT_FT .HDRFTR_RIGHT_FONT R
+.          ie !r #HDRFTR_RIGHT_CAPS \{\
+.             nr #HDRFTR_RIGHT_CAPS 1
+.             if !d $HDRFTR_RIGHT_SIZE_CHANGE \
+.                HDRFTR_RIGHT_SIZE -2
+.          \}
+.          el \{\
+.             if \\n[#HDRFTR_RIGHT_CAPS]=0 \
+.                if !d $HDRFTR_RIGHT_SIZE_CHANGE \
+.                   HDRFTR_RIGHT_SIZE -.5
+.          \}
+.          ie !\\n[#HDRFTR_RIGHT_SMALLCAPS] \{\
+.             if \\n[#HDRFTR_RIGHT_CAPS] \
+.                if !d $HDRFTR_RIGHT_SIZE_CHANGE \
+.                   HDRFTR_RIGHT_SIZE -2
+.          \}
+.          el \{\
+.             nr #SKIP_CAPS_SMALLCAPS_WARNING 1
+.             if \\n[#HDRFTR_RIGHT_CAPS] .HDRFTR_RIGHT_CAPS OFF
+.          \}
+.          if !d $HDRFTR_RIGHT_SIZE_CHANGE .HDRFTR_RIGHT_SIZE -.5
+.       \}
+.\" +Quotes
+.       if !d $QUOTE_FAM         .QUOTE_FAMILY \\*[$DOC_FAM]
+.       if !d $QUOTE_FT          .QUOTE_FONT I
+.       if !d $QUOTE_SIZE_CHANGE .QUOTE_SIZE +0
+.       if !r #Q_OFFSET_VALUE \
+.          if '\\*[$Q_OFFSET_VALUE]'' .QUOTE_INDENT 3
+.       if !d $Q_QUAD .QUOTE_LEFT
+.\" +Blockquotes
+.\"  Note: the leading for quotes and blockquotes is set after .DEFAULTS in START
+.       if !d $BQUOTE_FAM         .BLOCKQUOTE_FAMILY \\*[$DOC_FAM]
+.       if !d $BQUOTE_FT          .BLOCKQUOTE_FONT R
+.       if !d $BQUOTE_SIZE_CHANGE .BLOCKQUOTE_SIZE -1
+.       if !d $BQUOTE_QUAD        .BLOCKQUOTE_QUAD LEFT
+.       if !r #BQ_OFFSET_VALUE \
+.          if '\\*[$BQ_OFFSET_VALUE]'' .BLOCKQUOTE_INDENT 3
+.\" +Epigraphs
+.       if !d $EPI_FAM         .EPIGRAPH_FAMILY \\*[$DOC_FAM]
+.       if !d $EPI_FT          .EPIGRAPH_FONT R
+.       if !d $EPI_SIZE_CHANGE .EPIGRAPH_SIZE -1.5
+.       if !r #EPI_AUTOLEAD    .EPIGRAPH_AUTOLEAD 2
+.       if !d $EPI_QUAD        .EPIGRAPH_QUAD \\*[$DOC_QUAD]
+.       if !r #EPI_OFFSET_VALUE \
+.          if '\\*[$EPI_OFFSET_VALUE]'' .EPIGRAPH_INDENT 3
+.\" +Linebreaks
+.       if !d $LINEBREAK_CHAR  .LINEBREAK_CHAR * 3 3p
+.       if !d $LINEBREAK_COLOR .LINEBREAK_COLOR black
+.\" +Footnotes
+.       if !r #FN_RULE_LENGTH .FOOTNOTE_RULE_LENGTH 4P
+.       if !r #FN_RULE_ADJ    .FOOTNOTE_RULE_ADJ 3p
+.       if !d $FN_SIZE_CHANGE .FOOTNOTE_SIZE -2
+.       if !r #FN_AUTOLEAD    .FOOTNOTE_AUTOLEAD 2
+.\" +Endnotes
+.       if !r #EN_PS                 .ENDNOTE_PT_SIZE (\\n[#DOC_PT_SIZE]u)
+.       if !d $EN_STRING_FT          .ENDNOTES_HEADER_FONT B
+.       if !d $EN_STRING_SIZE_CHANGE .ENDNOTES_HEADER_SIZE +3.5
+.       if !d $EN_TITLE_FT           .ENDNOTE_TITLE_FONT B
+.       if !d $EN_TITLE_SIZE_CHANGE  .ENDNOTE_TITLE_SIZE +0
+.       if !d $EN_NUMBER_FT          .ENDNOTE_NUMBER_FONT B
+.       if !d $EN_LN_FT              .ENDNOTE_LINENUMBER_FONT R
+.       if !d $EN_NUMBER_SIZE_CHANGE .ENDNOTE_NUMBER_SIZE +0
+.       if !d $EN_LN_SIZE_CHANGE     .ENDNOTE_LINENUMBER_SIZE +0
+.       if !r #EN_PP_INDENT          .ENDNOTE_PARA_INDENT 1.5m
+.       if !d $EN_SPACE              .ENDNOTE_SPACING 0
+.\" +Bibliography
+.       if !r #BIB_LIST               .BIBLIOGRAPHY_TYPE PLAIN
+.       if !r #BIB_PS                 .BIBLIOGRAPHY_PT_SIZE (\\n[#DOC_PT_SIZE]u)
+.       if !d $BIB_STRING_FT          .BIBLIOGRAPHY_STRING_FONT B
+.       if !d $BIB_STRING_SIZE_CHANGE .BIBLIOGRAPHY_STRING_SIZE +3.5
+.\" +Table of contents
+.       if !d $TOC_FAM                .TOC_FAMILY \\*[$DOC_FAM]
+.       if !r #TOC_PS                 .TOC_PT_SIZE (\\n[#DOC_PT_SIZE]u)
+.       if '\\*[$TOC_LEAD]''          .TOC_LEAD \\n[#DOC@LEAD]u ADJUST
+.       if !d $TOC_HEADER_FAM         .TOC_HEADER_FAMILY \\*[$TOC_FAM]
+.       if !d $TOC_HEADER_SIZE_CHANGE .TOC_HEADER_SIZE +3.5
+.       if !d $TOC_HEADER_FT          .TOC_HEADER_FONT B
+.       if !d $TOC_PN_FAM             .TOC_PN_FAMILY \\*[$TOC_FAM]
+.       if !d $TOC_PN_FT              .TOC_PN_FONT R
+.       if !d $TOC_PN_SIZE_CHANGE     .TOC_PN_SIZE +0
+.       if !d $TOC_TITLE_FAM          .TOC_TITLE_FAMILY \\*[$TOC_FAM]
+.    \}
+.\" +Refer support
+.    if !r #EN_REF .nr #FN_REF 1
+.    if !d $REF_FN_INDENT \{\
+.       if \\n[#PRINT_STYLE]=1 .INDENT_REFS FOOTNOTE .5i
+.       if \\n[#PRINT_STYLE]=2 .INDENT_REFS FOOTNOTE 2m
+.    \}
+.    if !d $REF_EN_INDENT \{\
+.       if \\n[#PRINT_STYLE]=1 .INDENT_REFS ENDNOTE .5i
+.       if \\n[#PRINT_STYLE]=2 .INDENT_REFS ENDNOTE 2m
+.    \}
+.    if !d $REF_BIB_INDENT \{\
+.       if \\n[#PRINT_STYLE]=1 .INDENT_REFS BIBLIO .5i
+.       if \\n[#PRINT_STYLE]=2 .INDENT_REFS BIBLIO 2m
+.    \}
+.\" Define strings for idem entries
+.    if \\n[#PRINT_STYLE]=1 .char \[idem] \[hy]\[hy]\[hy]
+.    if \\n[#PRINT_STYLE]=2 .char \[idem] \v'-.3m'\l'3m'\v'.3m'
+.\" Adjust doc leading for PRINTSTYLE TYPESET
+.    if \\n[#PRINT_STYLE]=2 \
+.       if \\n[#ADJ_DOC_LEAD]=1 .DOC_LEAD_ADJUST
+.\" This diversion is to get a value for #FN_AUTOLEAD
+.    di NULL
+.       if \\n[#AUTO_LEAD] \{\
+.          nr #RESTORE_AUTO_LEAD 1
+.          nr #SAVED_AUTOLEAD_VALUE \\n[#AUTOLEAD_VALUE]
+.       \}
+.       ev NULL
+.       if \\n[#PRINT_STYLE]=1 \{\
+.          ps \\*[$TYPEWRITER_PS]
+.          ie \\n[#SINGLE_SPACE]=1 .vs \\n[#ORIGINAL_DOC_LEAD]u
+.          el .vs \\n[#ORIGINAL_DOC_LEAD]u/2u
+.       \}
+.       if \\n[#PRINT_STYLE]=2 \{\
+.          ps  \\n[#DOC_PT_SIZE]u\\*[$FN_SIZE_CHANGE]
+.          vs \\n[.ps]u+\\n[#FN_AUTOLEAD]u
+.       \}
+.       nr #FN_LEAD \\n[#LEAD]
+.       ev
+.    di
+.    if \\n[#RESTORE_AUTO_LEAD] \{\
+.       nr #AUTO_LEAD 1
+.       nr #AUTOLEAD_VALUE  \\n[#SAVED_AUTOLEAD_VALUE]
+.    \}
+.    ie !\\n[#COLLATE] \{\
+.\" DOC_LEAD adjusted (or not) here
+.       TRAPS
+.       if \\n[#REMOVE_ADJ] .DOC_LEAD \\n[#DOC_LEAD]u-\\n[#DOC_LEAD_ADJ]u
+.       if (\\n[#FOOTER_MARGIN]+\\n[.v]>=\\n[#B_MARGIN]) \{\
+.          tm1 "[mom]: Your chosen bottom margin for running text is too close to the footer margin.
+.          tm1 "       No footers or bottom-of-page page numbers will be printed.
+.          tm1 "       Please reset B_MARGIN or FOOTER_MARGIN to allow enough space.
+.          tm1 "       If no footers or bottom-of-page page numbers are required,
+.          tm1 "       invoke .FOOTER_MARGIN 0 before .START
+.          nr #SKIP_FOOTER 1
+.       \}
+.\" Endnote, bibliography and toc leading
+.       nr #OK_PROCESS_LEAD 1
+.       nr #RESTORE_DOC_LEAD \\n[.v]
+.       nr #RESTORE_B_MARGIN \\n[#B_MARGIN]
+.       if \\n[#PRINT_STYLE]=1 \{\
+.          ie \\n[#SINGLE_SPACE] \{\
+.             ENDNOTE_LEAD      12 ADJUST
+.             BIBLIOGRAPHY_LEAD 12 ADJUST
+.          \}
+.          el \{\
+.             ie \\n[#EN_SINGLESPACE] .ENDNOTE_LEAD 12 ADJUST
+.             el .ENDNOTE_LEAD 24 ADJUST
+.             ie \\n[#BIB_SINGLESPACE] .BIBLIOGRAPHY_LEAD 12 ADJUST
+.             el .BIBLIOGRAPHY_LEAD 24 ADJUST
+.          \}
+.       \}
+.       if \\n[#PRINT_STYLE]=2 \{\
+.          ie !d $EN_LEAD  .ENDNOTE_LEAD \\n[#UNADJUSTED_DOC_LEAD]u ADJUST
+.          el .ENDNOTE_LEAD \\*[$EN_LEAD] \\*[$ADJUST_EN_LEAD]
+.          ie !d $BIB_LEAD .BIBLIOGRAPHY_LEAD \\n[#UNADJUSTED_DOC_LEAD]u ADJUST
+.          el .BIBLIOGRAPHY_LEAD \\*[$BIB_LEAD] \\*[$ADJUST_BIB_LEAD]
+.          ie !d $TOC_LEAD .TOC_LEAD \\n[#UNADJUSTED_DOC_LEAD]u \\*[$ADJUST_TOC_LEAD]
+.          el .TOC_LEAD \\*[$TOC_LEAD] \\*[$ADJUST_TOC_LEAD]
+.       \}
+.       ie !d $BIB_SPACE .BIBLIOGRAPHY_SPACING 0
+.       el \{\
+.          if \\n[#DEFER_BIB_SPACING]=1 \{\
+.             BIBLIOGRAPHY_SPACING \\*[$BIB_SPACE]
+.             rr #DEFER_BIB_SPACING
+.          \}
+.       \}
+.       nr #DOC_LEAD \\n[#RESTORE_DOC_LEAD]u
+.       nr #B_MARGIN \\n[#RESTORE_B_MARGIN]
+.       vs \\n[#DOC_LEAD]u
+.    \}
+.    el \{\
+.       if \\n[#COLLATE] \{\
+.          if !\\n[#PRINT_STYLE]=1 \{\
+.             if \\n[#RERUN_TRAPS] \{\
+.                TRAPS
+.                rr #RERUN_TRAPS
+.             \}
+.          \}
+.       \}
+.    \}
+.\" Set default heading and toc-entry family if not done already
+.    nr #HD_LEVEL 0 1 \" loop step
+.    nr #LOOP 9       \" loop count
+.    while \\n+[#HD_LEVEL]<=\\n[#LOOP] \{\
+.       if '\\*[$HEAD_\\n[#HD_LEVEL]_FAM]'' \
+.           ds $HEAD_\\n[#HD_LEVEL]_FAM \\*[$DOC_FAM]
+.       if '\\*[$HEAD_\\n[#HD_LEVEL]_BASELINE_ADJ]'' \
+.           ds $HEAD_\\n[#HD_LEVEL]_BASELINE_ADJ \\n[.v]/10
+.       if '\\*[$TOC_HEAD_\\n[#HD_LEVEL]_FAM]'' \
+.           ds $TOC_HEAD_\\n[#HD_LEVEL]_FAM \\*[$TOC_FAM]
+.    \}
+.    if '\\*[$TOC_TITLE_FAM]'' .TOC_TITLE_FAMILY \\*[$DOC_FAM]
+.\" Re-run MNinit to capture strings and registers set in DEFAULTS.
+.    if !'\\*[$MN-arg1]'' \{\
+.       MNinit \
+\\*[$MN-arg1] \\*[$MN-arg2] \
+\\*[$MN-arg3] \\*[$MN-arg4] \
+\\*[$MN-arg5] \\*[$MN-arg6] \
+\\*[$MN-arg7] \\*[$MN-arg8] \
+\\*[$MN-arg9]
+.    \}
+.    if \\n[#PRINT_STYLE]=1 .nr #IGNORE 1
+.    if \\n[#AUTO_LEAD] \{\
+.       rr #AUTO_LEAD
+.       rr #AUTOLEAD_VALUE
+.    \}
+.END
+\#
+\# =================================================================
+\#
+\# Macros and aliases needed for doccover, cover, and docheader in
+\# START.
+\#
+.MAC DOC_HEADER_QUAD END
+.    if '\\$0'DOC_HEADER_QUAD' .ds $CALLING_MACRO DOCHEADER
+.    if '\\$0'COVER_H_POS'     .ds $CALLING_MACRO COVER
+.    if '\\$0'DOC_COVER_H_POS' .ds $CALLING_MACRO DOC_COVER
+.    ie !'\\*[$\\*[$CALLING_MACRO]_QUAD]'' \{\
+.       if '\\*[$\\*[$CALLING_MACRO]_QUAD]'L'      .LEFT
+.       if '\\*[$\\*[$CALLING_MACRO]_QUAD]'LEFT'   .LEFT
+.       if '\\*[$\\*[$CALLING_MACRO]_QUAD]'R'      .RIGHT
+.       if '\\*[$\\*[$CALLING_MACRO]_QUAD]'RIGHT'  .RIGHT
+.       if '\\*[$\\*[$CALLING_MACRO]_QUAD]'C'      .RIGHT
+.       if '\\*[$\\*[$CALLING_MACRO]_QUAD]'CENTER' .CENTER
+.       if '\\*[$\\*[$CALLING_MACRO]_QUAD]'CENTRE' .CENTER
+.    \}
+.    el .CENTER
+.END
+.
+.ALIAS COVER_H_POS     DOC_HEADER_QUAD
+.ALIAS DOC_COVER_H_POS DOC_HEADER_QUAD
+\#
+.MAC DO_TITLE_OR_AUTHOR END
+.    ie '\\$0'DO_AUTHORS' .ds $TTL_AUTH AUTHOR
+.    el .ds $TTL_AUTH TITLE
+.    if !'\\*[$\\*[$PRFX]\\*[$TTL_AUTH]_1]'' \{\
+.       if '\\$0'DO_SUBTITLE' \{\
+.          if '\\*[$PRFX]'\\*[DOC_]COVER_SUB' \{\
+.             ds $PRFX SUB
+.             nr #\\*[DOC_]COVER_SUB 1
+.          \}
+.       \}
+.       if !\\n[#PRINT_STYLE]=1 \{\
+.          fam  \\*[$\\*[$COVER_TYPE]\\*[$PRFX]\\*[$TTL_AUTH]_FAM]
+.          ft      \\*[$\\*[$COVER_TYPE]\\*[$PRFX]\\*[$TTL_AUTH]_FT]
+.          ps \
+\\n[#DOC_PT_SIZE]u\\*[$\\*[$COVER_TYPE]\\*[$PRFX]\\*[$TTL_AUTH]_SIZE_CHANGE]
+.          if '\\*[$COVER_TYPE]'' .vs \\n[#DOCHEADER_LEAD]u
+.          if \\n[#\\*[$COVER_TYPE]\\*[$PRFX]\\*[$TTL_AUTH]_LEAD] \{\
+.            vs \\*[$\\*[$COVER_TYPE]\\*[$PRFX]\\*[$TTL_AUTH]_LEAD]
+.            if \\n[#DOCHEADER] .sp |\\n[#T_MARGIN]u-1v
+.          \}
+.          if \\n[#CHAPTER+TITLE]=1 .ALD \\n[.v]u/4u \" A little space before the chapter title
+.          if \\n[#\\*[$COVER_TYPE]\\*[$PRFX]\\*[$TTL_AUTH]_COLOR]=1 \
+.             gcolor \\*[$\\*[$COVER_TYPE]\\*[$PRFX]\\*[$TTL_AUTH]_COLOR]
+.          if \\n[#\\*[$COVER_TYPE]\\*[$PRFX]\\*[$TTL_AUTH]_CAPS]=1 .CAPS
+.          if \\n[#\\*[$COVER_TYPE]\\*[$PRFX]\\*[$TTL_AUTH]_SMALLCAPS]=1 .SMALLCAPS
+.       \}
+.       if \\n[#\\*[DOC_]COVER_SUB] \{\
+.          rr #\\*[DOC_]COVER_SUB
+.          ds $PRFX \\*[DOC_]COVER_SUB
+.          ds $SAVED_COVER_TYPE \\*[$COVER_TYPE]
+.          rm $COVER_TYPE
+.       \}
+.       nr #ARG_NUM 0 1
+.       while \\n[#\\*[$PRFX]\\*[$TTL_AUTH]_NUM]>=\\n+[#ARG_NUM] \{\
+.          ie \\n[#\\*[$COVER_TYPE]\\*[$PRFX]\\*[$TTL_AUTH]_UNDERLINE] \{\
+.             ds $TITLE_TYPE \\*[$COVER_TYPE]\\*[$PRFX]\\*[$TTL_AUTH]
+.             ie \\n[#\\*[$COVER_TYPE]\\*[$PRFX]\\*[$TTL_AUTH]_UNDERLINE]=2 \{\
+.                ie !\\n[#PRINT_STYLE]=1 \
+.                   UNDERSCORE2 \\*[$\\*[$PRFX]\\*[$TTL_AUTH]_UNDERLINE_GAP] \
+\\*[$\\*[$PRFX]\\*[$TTL_AUTH]_RULE_GAP] \
+"\\*[$\\*[$PRFX]\\*[$TTL_AUTH]_\\n[#ARG_NUM]]
+.                el .UNDERSCORE "\\*[$\\*[$PRFX]\\*[$TTL_AUTH]_\\n[#ARG_NUM]]
+.             \}
+.             el \{\
+.                ie !\\n[#PRINT_STYLE]=1 \
+.                   UNDERSCORE "\\*[$\\*[$PRFX]\\*[$TTL_AUTH]_\\n[#ARG_NUM]]
+.                el .PRINT "\\*[$\\*[$PRFX]\\*[$TTL_AUTH]_\\n[#ARG_NUM]]
+.             \}
+.          \}
+.          el \{\
+.             PRINT "\\*[$\\*[$PRFX]\\*[$TTL_AUTH]_\\n[#ARG_NUM]]
+.          \}
+.          if \\n[#ARG_NUM]>1 .as PDF_BM " \"
+.          as PDF_BM \\*[$\\*[$PRFX]\\*[$TTL_AUTH]_\\n[#ARG_NUM]]
+.       \}
+.       rm $TITLE_TYPE
+.       if \\n[#PRINT_STYLE]=2 .vs
+.       if \\n[#\\*[$COVER_TYPE]\\*[$PRFX]\\*[$TTL_AUTH]_COLOR]=1 \
+.          gcolor
+.       SMALLCAPS off
+.       CAPS off
+.    \}
+.    if !'\\*[$SAVED_COVER_TYPE]'' \{\
+.      ds $COVER_TYPE \\*[$SAVED_COVER_TYPE]
+.      rm $SAVED_COVER_TYPE
+.   \}
+.END
+.
+.ALIAS DO_TITLE    DO_TITLE_OR_AUTHOR
+.ALIAS DO_SUBTITLE DO_TITLE_OR_AUTHOR
+.ALIAS DO_AUTHORS  DO_TITLE_OR_AUTHOR
+\#
+.MAC DO_CHAPTER END
+.    fam \\*[$\\*[DOC_]COVER_CHAPTER_FAM]
+.    ft     \\*[$\\*[DOC_]COVER_CHAPTER_FT]
+.    ps \\n[#DOC_PT_SIZE]u\\*[$\\*[DOC_]COVER_CHAPTER_SIZE_CHANGE]
+.    if \\n[#\\*[DOC_]COVER_CHAPTER_COLOR]=1 \
+.       gcolor \\*[$\\*[DOC_]COVER_CHAPTER_COLOR]
+.    if \\n[#\\*[DOC_]COVER_CHAPTER_CAPS]=1 .CAPS
+.    if \\n[#\\*[DOC_]COVER_CHAPTER_SMALLCAPS]=1 .SMALLCAPS
+.    ie \\n[#\\*[DOC_]COVER_CHAPTER_UNDERLINE] \{\
+.       ds $TITLE_TYPE \\*[$COVER_TYPE]CHAPTER
+.       ie \\n[#\\*[DOC_]COVER_CHAPTER_UNDERLINE]=2 \
+.          UNDERSCORE2 \\*[$\\*[DOC_]COVER_CHAPTER_UNDERLINE_GAP] \
+\\*[$\\*[DOC_]COVER_CHAPTER_RULE_GAP] "\\*[$CHAPTER_STRING] \\*[$CHAPTER]"
+.       el .UNDERSCORE "\\*[$CHAPTER_STRING] \\*[$CHAPTER]"
+.    \}
+.    el .PRINT "\\*[$CHAPTER_STRING] \\*[$CHAPTER]"
+.    gcolor
+.    SMALLCAPS off
+.    CAPS off
+.END
+\#
+\# Spacing adjustments for (doc)cover and docheader elements
+\#
+.MAC _SPACE END
+.   ds $\\$0R \\$1
+.END
+.
+.ds SPACER_TYPE_1 SUBTITLE
+.ds SPACER_TYPE_2 ATTRIBUTE
+.ds SPACER_TYPE_3 AUTHOR
+.ds SPACER_TYPE_4 CHAPTER_TITLE
+.ds SPACER_TYPE_5 DOCTYPE
+.
+.nr #LOOP 0 1
+.while \n+[#LOOP]<=5 \{\
+.   ALIAS \*[SPACER_TYPE_\n[#LOOP]]_SPACE           _SPACE
+.   ALIAS COVER_\*[SPACER_TYPE_\n[#LOOP]]_SPACE     _SPACE
+.   ALIAS DOC_COVER_\*[SPACER_TYPE_\n[#LOOP]]_SPACE _SPACE
+.\}
+\#
+.MAC DEFAULT_DOCHEADER END
+.    nr #DOCHEADER 1
+.    DOC_HEADER_QUAD
+.    vs \\n[#DOCHEADER_LEAD]u
+.    if \\n[#PRINT_STYLE]=2 \
+.       if \\n[#DOCHEADER_COLOR]=1 \
+.          gcolor \\*[$DOCHEADER_COLOR]
+.    DO_TITLE
+.    rr #DOCHEADER
+.    if !'\\*[$SUBTITLE_1]'' \{\
+.       ds $PRFX SUB
+.       if !'\\*[$SUBTITLE_SPACER]'' .sp \\*[$SUBTITLE_SPACER]
+.       if \\n[#PRINT_STYLE]=2 \
+.          if \\n[#DOCHEADER_COLOR]=1 \
+.             gcolor \\*[$DOCHEADER_COLOR]
+.       DO_SUBTITLE
+.       rm $PRFX
+.    \}
+.    if !\\n[#NO_PRINT_AUTHOR] \{\
+.       if !'\\*[$AUTHOR_1]'' \{\
+.          ie \\n[#PRINT_STYLE]=1 \{\
+.             TYPEWRITER
+.             ie \\n[#SINGLE_SPACE]=1 .vs \\n[#DOC_LEAD]u
+.             el .vs \\n[#DOC_LEAD]u/2u
+.             sp
+.          \}
+.          el .vs \\n[#DOC_LEAD]u\\*[$DOCHEADER_LEAD_ADJ]
+.          if d$ATTRIBUTE_STRING \{\
+.             FAMILY \\*[$ATTRIBUTE_FAM]
+.             FT     \\*[$ATTRIBUTE_FT]
+.             ps \
+\\n[#DOC_PT_SIZE]u\\*[$ATTRIBUTE_SIZE_CHANGE]
+.             if \\n[#DOCHEADER_COLOR]=1 \
+.                gcolor \\*[$DOCHEADER_COLOR]
+.             if \\n[#ATTRIBUTE_COLOR]=1 \
+.                gcolor \\*[$ATTRIBUTE_COLOR]
+.             if \\n[#ATTRIBUTE_CAPS]=1 .CAPS
+.             if !'\\*[$ATTRIBUTE_SPACER]'' \
+.                sp \\*[$ATTRIBUTE_SPACER]
+.             ie \\n[#ATTRIBUTE_UNDERLINE] \{\
+.                ds $TITLE_TYPE ATTRIBUTE
+.                ie \\n[#ATTRIBUTE_UNDERLINE]=2 \
+.                   UNDERSCORE2 \\*[$ATTRIBUTE_UNDERLINE_GAP] \
+\\*[$ATTRIBUTE_RULE_GAP] "\\*[$ATTRIBUTE_STRING]"
+.                el .UNDERSCORE "\\*[$ATTRIBUTE_STRING]"
+.             \}
+.             el .PRINT "\\*[$ATTRIBUTE_STRING]"
+.             if \\n[#ATTRIBUTE_COLOR]=1 .gcolor
+.             CAPS off
+.          \}
+.          if !'\\*[$AUTHOR_SPACER]'' .sp \\*[$AUTHOR_SPACER]
+.          if \\n[#DOCHEADER_COLOR]=1 \
+.             gcolor \\*[$DOCHEADER_COLOR]
+.          DO_AUTHORS
+.       \}
+.    \}
+.    FAMILY \\*[$DOC_FAM]
+.    FT R
+.END
+\#
+.MAC DEFAULT_DOCHEADER_TYPEWRITE END
+.    CENTER
+.    TYPEWRITER
+.    if !\\n[#SINGLE_SPACE] \{\
+.       vs \\n[#DOC_LEAD]u/2u
+.       sp |\\n[#T_MARGIN]u-1v
+.    \}
+.    if !'\\*[$TITLE_1]'' \{\
+.       ie \\n[#SINGLE_SPACE] \
+.          vs \\n[#DOC_LEAD]u+(\\n[#DOC_LEAD]u/4u)
+.       el .vs (\\n[#DOC_LEAD]u/2u)+(\\n[#DOC_LEAD]u/4u)
+.       CAPS
+.       DO_TITLE
+.       CAPS OFF
+.       vs
+.    \}
+.    if !'\\*[$SUBTITLE]'' \{\
+.       ds $PRFX SUB
+.       sp
+.       DO_SUBTITLE
+.       rm $PRFX
+.    \}
+.    if !\\n[#NO_PRINT_AUTHOR] \{\
+.       if !'\\*[$AUTHOR_1]'' \{\
+.          sp
+.          if d$ATTRIBUTE_STRING .PRINT "\\*[$ATTRIBUTE_STRING]
+.          sp
+.          DO_AUTHORS
+.       \}
+.    \}
+.END
+\#
+.MAC CHAPTER_DOCHEADER END
+.    DOC_HEADER_QUAD
+.    FAMILY  \\*[$CHAPTER_FAM]
+.    FT      \\*[$CHAPTER_FT]
+.    ps \\n[#DOC_PT_SIZE]u\\*[$CHAPTER_SIZE_CHANGE]
+.    vs \\n[#DOCHEADER_LEAD]u
+.\" Chapter title only
+.    ie '\\*[$CHAPTER]'' \{\
+.       if \\n[#PRINT_STYLE]=2 \
+.          if \\n[#DOCHEADER_COLOR]=1 \
+.             gcolor \\*[$DOCHEADER_COLOR]
+.       ie !'\\*[$CHAPTER_TITLE_1]'' \{\
+.          ds $PRFX CHAPTER_
+.          nr #DOCHEADER 1
+.          DO_TITLE
+.          rr #DOCHEADER
+.          rm $PRFX
+.       \}
+.       el .DO_TITLE
+.    \}
+.\" Chapter string, possibly with a chapter title
+.    el \{\
+.       if \\n[#PRINT_STYLE]=2 \
+.          if \\n[#DOCHEADER_COLOR]=1 \
+.             gcolor \\*[$DOCHEADER_COLOR]
+.          if \\n[#CHAPTER_COLOR]=1 \
+.             gcolor \\*[$CHAPTER_COLOR]
+.       \}
+.       if \\n[#CHAPTER_CAPS]=1 .CAPS
+.       ie \\n[#CHAPTER_UNDERLINE] \{\
+.          ds $TITLE_TYPE CHAPTER
+.          ie \\n[#CHAPTER_UNDERLINE]=2 \
+.             UNDERSCORE2 \\*[$CHAPTER_UNDERLINE_GAP] \
+\\*[$CHAPTER_RULE_GAP] "\\*[$CHAPTER_STRING] \\*[$CHAPTER]"
+.          el .UNDERSCORE "\\*[$CHAPTER_STRING] \\*[$CHAPTER]"
+.       \}
+.       el .PRINT "\\*[$CHAPTER_STRING] \\*[$CHAPTER]"
+.       rm $TITLE_TYPE
+.       if \\n[#PRINT_STYLE]=2 \
+.          if \\n[#CHAPTER_COLOR]=1 .gcolor
+.       CAPS off
+.       if !'\\*[$CHAPTER_TITLE_1]'' \{\
+.          ds $PRFX CHAPTER_
+.          if \\n[#PRINT_STYLE]=2 \{\
+.             nr #CHAPTER+TITLE 1
+.             if \\n[#DOCHEADER_COLOR]=1 \
+.                gcolor \\*[$DOCHEADER_COLOR]
+.          \}
+.          if !'\\*[$CHAPTER_TITLE_SPACER]'' \
+.             sp \\*[$CHAPTER_TITLE_SPACER]
+.          DO_TITLE
+.          rm $PRFX
+.          rr #CHAPTER+TITLE
+.          RLD \\n[#DOC_LEAD]u \" Just looks better this way
+.       \}
+.    \}
+.    FAMILY \\*[$DOC_FAM]
+.    FT R
+.END
+\#
+.MAC CHAPTER_DOCHEADER_TYPEWRITE END
+.    CENTER
+.    TYPEWRITER
+.    if !\\n[#SINGLE_SPACE] \{\
+.       vs \\n[#DOC_LEAD]u/2u
+.       sp |\\n[#T_MARGIN]u-1v
+.    \}
+.    ie '\\*[$CHAPTER]'' \{\
+.       CAPS
+.       ie !'\\*[$CHAPTER_TITLE]'' \{\
+.          vs \\n[.v]u+(\\n[.v]u/3u)
+.          nr #ARG_NUM 0 1
+.          while \\n[#CHAPTER_TITLE_NUM]>=\\n+[#ARG_NUM] \{\
+.             UNDERSCORE 3p "\\*[$CHAPTER_TITLE_\\n[#ARG_NUM]]"
+.          \}
+.          vs
+.       \}
+.       el \{\
+.          CAPS
+.          UNDERSCORE 3p "\\*[$CHAPTER_STRING]"
+.       \}
+.       CAPS OFF
+.       RLD 1v
+.    \}
+.    el \{\
+.       CAPS
+.       UNDERSCORE 3p "\\*[$CHAPTER_STRING] \\*[$CHAPTER]
+.       CAPS OFF
+.       if !'\\*[$CHAPTER_TITLE]'' \{\
+.          sp
+.          nr #ARG_NUM 0 1
+.          while \\n[#CHAPTER_TITLE_NUM]>=\\n+[#ARG_NUM] \{\
+.             PRINT "\\*[$CHAPTER_TITLE_\\n[#ARG_NUM]]
+.          \}
+.       \}
+.       sp -1
+.    \}
+.    vs \\n[#DOC_LEAD]u
+.    if \\n[#SINGLE_SPACE] .sp 2
+.END
+\#
+.MAC NAMED_DOCHEADER END
+.    DEFAULT_DOCHEADER
+.    if !\\n[#NO_PRINT_DOCTYPE] \{\
+.       FAMILY  \\*[$DOCTYPE_FAM]
+.       FT      \\*[$DOCTYPE_FT]
+.       ps \\n[#DOC_PT_SIZE]u\\*[$DOCTYPE_SIZE_CHANGE]
+.       vs \\n[#DOCHEADER_LEAD]u
+.       ALD     \\n[#DOCHEADER_LEAD]u
+.       if \\n[#DOCHEADER_COLOR]=1 \
+.          gcolor \\*[$DOCHEADER_COLOR]
+.       if \\n[#DOCTYPE_COLOR]=1 \
+.          gcolor \\*[$DOCTYPE_COLOR]
+.       if \\n[#DOCTYPE_CAPS]=1 .CAPS
+.       if !'\\*[$DOCTYPE_SPACER]'' .sp \\*[$DOCTYPE_SPACER]
+.       ie \\n[#DOCTYPE_UNDERLINE] \{\
+.          ds $TITLE_TYPE DOCTYPE
+.          ie \\n[#DOCTYPE_UNDERLINE]=2 \
+.              UNDERSCORE2 \\*[$DOCTYPE_UNDERLINE_GAP] \
+\\*[$DOCTYPE_RULE_GAP] "\\*[$DOC_TYPE]
+.          el .UNDERSCORE "\\*[$DOC_TYPE]
+.       \}
+.       el .PRINT "\\*[$DOC_TYPE]
+.       gcolor
+.       CAPS off
+.    \}
+.    FAMILY \\*[$DOC_FAM]
+.    FT R
+.END
+\#
+\# COVER PAGE
+\# ----------
+\# *Arguments:
+\#   TITLE | DOCTITLE | CHAPTER | CHAPTER_TITLE | CHAPTER+TITLE | COVERTITLE \
+\#   [ SUBTITLE AUTHOR DOCTYPE COPYRIGHT MISC BLANKPAGE PDF_OUTLINE_LABEL ]
+\# *Function:
+\#   Toggles the number register for each cover page element
+\#   passed as an argument.
+\# *Notes:
+\#   TITLE, DOCTITLE, CHAPTER, CHAPTER_TITLE or CHAPTER+TITLE must
+\#   be supplied.  After that, users may enter as many or as few of
+\#   the arguments as they like.  BLANKPAGE inserts a blank page
+\#   after the cover.
+\#
+\#   If called as DOC_COVER, performs the same operations, but
+\#   applies everything to a doc cover.
+\#
+.MAC COVER END
+.    rm DOC_
+.    ie '\\$0'DOC_COVER' \{\
+.       nr #DOC_COVER 1
+.       ds DOC_ DOC_
+.    \}
+.    el .nr #COVER 1
+.    nr #ARG_NUM 0 1
+.    nr #COVER_ITEM \\n[#NUM_ARGS]  \"loop count
+.    if \\n[#NUM_ARGS]=1 \
+.       if '\\$1'\\*[DOC_]COVERTEXT' \
+.          nr #\\*[DOC_]COVERTEXT_ONLY 1
+.    while \\n+[#ARG_NUM]<=\\n[#COVER_ITEM] \{\
+.       if '\\$1'DOCTITLE' \{\
+.          nr #\\*[DOC_]COVER_TITLE 2
+.          shift
+.       \}
+.       if '\\$1'TITLE' \{\
+.          nr #\\*[DOC_]COVER_TITLE 1
+.          if \\n[#FROM_\\*[DOC_]COVERTITLE] .nr #\\*[DOC_]COVER_TITLE 7
+.          shift
+.       \}
+.       if '\\$1'CHAPTER' \{\
+.          nr #\\*[DOC_]COVER_TITLE 3
+.          shift
+.       \}
+.       if '\\$1'CHAPTER_TITLE' \{\
+.          nr #\\*[DOC_]COVER_TITLE 4
+.          shift
+.       \}
+.       if '\\$1'CHAPTER+TITLE' \{\
+.          nr #\\*[DOC_]COVER_TITLE 5
+.          shift
+.       \}
+.       if '\\$1'COVERTITLE' \{\
+.          nr #COVERTITLE 1
+.          nr #\\*[DOC_]COVER_TITLE 6
+.          shift
+.       \}
+.       if '\\$1'DOC_COVERTITLE' \{\
+.          nr #DOC_COVERTITLE 1
+.          nr #\\*[DOC_]COVER_TITLE 7
+.          shift
+.       \}
+.       if '\\$1'SUBTITLE' \{\
+.          nr #\\*[DOC_]COVER_SUBTITLE 1
+.          shift
+.       \}
+.       if '\\$1'AUTHOR' \{\
+.          nr #\\*[DOC_]COVER_AUTHOR 1
+.          shift
+.       \}
+.       if '\\$1'DOCTYPE' \{\
+.          nr #\\*[DOC_]COVER_DOCTYPE 1
+.          shift
+.       \}
+.       if '\\$1'COPYRIGHT' \{\
+.          nr #\\*[DOC_]COVER_COPYRIGHT 1
+.          shift
+.       \}
+.       if '\\$1'MISC' \{\
+.          nr #\\*[DOC_]COVER_MISC 1
+.          shift
+.       \}
+.       if '\\$1'\\*[DOC_]COVERTEXT' \{\
+.          nr #\\*[DOC_]COVERTEXT 1
+.          shift
+.       \}
+.       if '\\$1'\\*[DOC_]COVER_IMAGE' \{\
+.          nr #\\*[DOC_]COVER_IMAGE 1
+.          shift
+.       \}
+.       if '\\$1'PDF_OUTLINE_LABEL' \{\
+.          shift
+.          ds $PDF_\\*[DOC_]COVER_LABEL \\$1
+.          shift
+.       \}
+.       if '\\$1'BLANKPAGE' \{\
+.          nr #\\*[DOC_]COVER_BLANKPAGE 1
+.          shift
+.       \}
+.    \}
+.    if '\\$0'DOC_COVER' .rm DOC_
+.END
+\#
+\# COVER TITLE
+\# -----------
+\# *Arguments:
+\#   <covertitle>
+\# *Function:
+\#   Stores cover title in string(s) for output on cover pages.
+\#
+.MAC COVERTITLE END
+.    rm DOC_
+.    if '\\$0'DOC_COVERTITLE' .ds DOC_ DOC_
+.    ie \\n[#NUM_ARGS]=0 \{\
+.       nr argc 0 1
+.       while \\n+[argc]<=3 \{\
+.          if \\n[#\\*[DOC_]COVER_TITLE_NUM] \{\
+.             nr #ITEM 0 1
+.             while \\n[#\\*[DOC_]COVERTITLE_NUM]>\\n[#ITEM] \{\
+.                rm $\\*[DOC_]COVERTITLE_\\n+[#ITEM]
+.             \}
+.             rr #\\*[DOC_]COVERTITLE_NUM
+.             rm $\\*[DOC_]COVERTITLE
+.          \}
+.       \}
+.    \}
+.    el \{\
+.       nr #\\*[DOC_]COVERTITLE_NUM 0 1
+.       while \\n[#NUM_ARGS]>\\n[#\\*[DOC_]COVERTITLE_NUM] \{\
+.          ds \
+$\\*[DOC_]COVERTITLE_\\n+[#\\*[DOC_]COVERTITLE_NUM] \\$\\n[#\\*[DOC_]COVERTITLE_NUM]
+.          nr #\\*[DOC_]COVERTITLE_NUM \\n[#\\*[DOC_]COVERTITLE_NUM]
+.       \}
+.       ds $\\*[DOC_]COVERTITLE \\$*
+.    \}
+.END
+\#
+\# COVER TEXT
+\# ----------
+\# *Arguments:
+\#   [ START <vertical pos> ] | <anything>
+\# *Function:
+\#   With no arg, begins a diversion holding the cover text for
+\#   output on the cover page.  With START <pos>, sets a vertical
+\#   starting position relative to the top edge of the page.  With
+\#   any other arg, ends the diversion.
+\# *Notes:
+\#   Aliased as DOC_COVERTEXT.
+\#
+\#   If no other items assigned to cover pages, starts 1/3 of the
+\#   way down the cover page unless START pos is given, otherwise
+\#   starts underneath the last of title, subtitle, author(s) or
+\#   doctype, preceded by a blank line.
+\#
+\#   Does not persist.
+\#
+.MAC COVERTEXT END
+.    rm DOC_
+.    if '\\$0'DOC_COVERTEXT' .ds DOC_ DOC_
+.    if '\\$1'START' \{\
+.       shift
+.       nr #\\*[DOC_]COVERTEXT_START_POS (u;\\$1)
+.       shift
+.    \}
+.    ie '\\$1'' \{\
+.       nr #COVERTEXT_PP 1
+.       di \\*[DOC_]COVER_TEXT
+\!.     ie !\\n[#\\*[DOC_]COVERTEXT_START_POS] \{\
+\!.        sp |\\n[.p]u/3u-1v
+\!.     \}
+\!.     el \{\
+\!.        vs 0
+\!.        sp |0i
+\!.        vs \\\\n[#DOC_LEAD]u+\\\\*[$\\*[DOC_]COVER_LEAD_ADJ]
+\!.        sp |\\n[#\\*[DOC_]COVERTEXT_START_POS]u-1
+\!.     \}
+\!.     vpt
+.    \}
+.    el \{\
+.       br
+\!.     vpt 0
+.       di
+.       rm $FONT
+.       rr #COVERTEXT_PP
+.       IQ CLEAR
+.    \}
+.    rm DOC_
+.END
+.
+.ALIAS DOC_COVERTEXT COVERTEXT
+\#
+\# COVER IMAGE
+\# -----------
+\#*Arguments:
+\#  <image file> <width> <height> [ -L|-C|-R|-I <ind> Y-pos [ X-pos ] ]
+\#*Function:
+\#  Places an image on doccovers and covers.
+\#*Notes:
+\#  Aliased as DOC_COVER_IMAGE.
+\#
+\#  <width> and <height> are required.  With no further args, images
+\#  are set at 0,0 by default so that full page images fill the entire
+\#  printer sheet.
+\#  
+\#  Positioning args are the same as PDF_IMAGE.  -L, -R, -C and -I <ind>
+\#  observe the left and right margins.
+\#
+\#  Y-pos is required for all but full page images; without it, images
+\#  are flush with the top of the page.  X-pos is only needed if the
+\#  user prefers to give absolute X,Y positioning.
+\#
+\#  Note that Y-pos comes before X-pos in the args.
+\#
+.MAC COVER_IMAGE END
+. if '\\$0'DOC_COVER_IMAGE' .ds DOC_ DOC_
+. ds \\*[DOC_]COVER_IMG_FILE \\$1
+. nr \\*[DOC_]COVER_IMG_W (z;\\$2)
+. nr \\*[DOC_]COVER_IMG_H (z;\\$3)
+. if !'\\$4'' \{\
+.   ie !\B'\\$4' \{\
+.     if '\\$4'-L' .nr \\*[DOC_]COVER_IMG_IND \
+        \\n[#L_MARGIN]u
+.     if '\\$4'-C' .nr \\*[DOC_]COVER_IMG_IND \
+        \\n[#PAGE_WIDTH]u-\\n[\\*[DOC_]COVER_IMG_W]u/2
+.     if '\\$4'-R' .nr \\*[DOC_]COVER_IMG_IND \
+        \\n[#L_MARGIN]+\\n[.l]u-\\n[\\*[DOC_]COVER_IMG_W]u
+.     if '\\$4'-I' \{\
+.       nr \\*[DOC_]COVER_IMG_IND \\n[#L_MARGIN]+\\$5
+.       if !'\\$6'' .nr \\*[DOC_]COVER_IMG_Y (u;\\$6)
+.       shift \\n[#NUM_ARGS]
+.     \}
+.     if \B'\\$5' .nr \\*[DOC_]COVER_IMG_Y (u;\\$5)
+.   \}
+.   el \{\
+.     nr \\*[DOC_]COVER_IMG_Y (u;\\$4)
+.     if \B'\\$5' .nr \\*[DOC_]COVER_IMG_X (u;\\$5)
+.   \}
+. \}
+. rm DOC_
+.END
+.
+.ALIAS DOC_COVER_IMAGE COVER_IMAGE
+\#
+.MAC DO_COVER_IMAGE END
+. ll \\n[#PAGE_WIDTH]u
+. po 0
+. vs 0
+. sp |0i
+. if \\n[\\*[DOC_]COVER_IMG_Y]   .sp \\n[\\*[DOC_]COVER_IMG_Y]u
+. if \\n[\\*[DOC_]COVER_IMG_X]   .in \\n[\\*[DOC_]COVER_IMG_X]u
+. if \\n[\\*[DOC_]COVER_IMG_IND] .in \\n[\\*[DOC_]COVER_IMG_IND]u
+. if \\n[.u]=1 .nf
+. nop \X'pdf: pdfpic \\*[\\*[DOC_]COVER_IMG_FILE] -L \
+\\n[\\*[DOC_]COVER_IMG_W]z \\n[\\*[DOC_]COVER_IMG_H]z'
+. in
+. vs
+. po
+. ll
+.END
+.
+.ALIAS DO_DOC_COVER_IMAGE DO_COVER_IMAGE
+\#
+\# COVER PAGE LEADING
+\# ------------------
+\# *Arguments:
+\#   <+|- amount by which to in/decrease leading of cover/doc cover>
+\# *Function:
+\#   Stores user supplied lead in/decrease in string $COVER_LEAD_ADJ
+\#   or $DOC_COVER_LEAD_ADJ, depending on whether the macro was called
+\#   with an alias (DOC_COVER_LEAD).
+\# *Notes:
+\#   A unit of measure must be supplied.  Decimal fractions OK.
+\#   Default is +0, i.e. same as DOC_LEAD.
+\#
+.MAC COVER_LEAD END
+.    ie '\\$0'DOC_COVER_LEAD' .ds $DOC_COVER_LEAD_ADJ \\$1
+.    el .ds $COVER_LEAD_ADJ \\$1
+.END
+\#
+\# MISC_AUTOLEAD functionality has been removed.  Leading for MISCs
+\# is now entered as an absolute value.  The macro emits a warning.
+\#
+.MAC MISC_AUTOLEAD END
+.    ds replacement \\$0
+.    substring replacement 0 -9
+.    ds replacement \\*[replacement]LEAD
+.    ds cover-type \\$0
+.    substring cover-type 0 2
+.    ie '\\*[cover-type]'COV' .ds cover-type cover
+.    el .ds cover-type doc-cover
+.    tm1 "[mom]: \\$0 at line \\n[.c] of '\\n[.F]' is no longer valid.
+.    tm1 "       Leading of \\*[cover-type] MISC items is now set with \\*[replacement], which
+.    tm1 "       takes an absolute leading value.  Please update your document.
+.    ab   [mom]: Aborting.
+.END
+.
+.ALIAS DOC_COVER_MISC_AUTOLEAD MISC_AUTOLEAD
+.ALIAS COVER_MISC_AUTOLEAD     MISC_AUTOLEAD
+\#
+\# COVER PAGE START POSITION
+\# -------------------------
+\# *Arguments:
+\#   <distance from page top at which to start cover/doc cover>
+\# *Function:
+\#   Stores user supplied lead in/decrease in #COVER_START_POS
+\#   or #DOC_COVER_START_POS, depending on whether the macro was
+\#   called by an alias (DOC_COVER_ADVANCE).
+\# *Notes:
+\#   A unit of measure must be supplied.  Decimal fractions OK.
+\#   If user doesn't invoke this macro, the default starting
+\#   position for both covers and doc covers is 1/3 of the way
+\#   down the page (setup in DO_COVER).
+\#
+.MAC COVER_ADVANCE END
+.    ds COVER_TYPE \\$0
+.    substring COVER_TYPE 0 2
+.    ie 'COVER_TYPE'DOC' .nr #DOC_COVER_START_POS (\\$1)
+.    el .nr #COVER_START_POS (\\$1)
+.END
+.
+.ALIAS DOC_COVER_ADVANCE   COVER_ADVANCE
+.ALIAS DOC_COVER_START_POS COVER_ADVANCE
+.ALIAS COVER_ADVANCE       COVER_ADVANCE
+.ALIAS COVER_START_POS     COVER_ADVANCE
+\#
+\# COVERS - WHETHER TO PRINT
+\# -------------------------
+\# *Arguments:
+\#   <none> | <anything>
+\# *Function:
+\#   Creates or removes registers #COVERS and #COVERS_OFF, checked for
+\#   in DEFAULTS (in START) prior to printing
+\#
+.MAC COVERS END
+.    ie '\\$0'DOC_COVERS' \{\
+.       ie '\\$1'' \{\
+.          rr #DOC_COVERS_OFF
+.          nr #DOC_COVERS 1
+.       \}
+.       el \{\
+.          rr #DOC_COVERS
+.          nr #DOC_COVERS_OFF 1
+.       \}
+.    \}
+.    el \{\
+.       ie '\\$1'' \{\
+.          rr #COVERS_OFF
+.          nr #COVERS 1
+.       \}
+.       el \{\
+.          rr #COVERS
+.          nr #COVERS_OFF 1
+.       \}
+.    \}
+.END
+\#
+\# COVER_COUNTS_PAGES
+\# ------------------
+\# *Arguments:
+\#   <none> | <anything>
+\# *Function:
+\#   Creates or removes registers #COVERS_COUNT or #DOCCOVERS_COUNT,
+\#   used in END_COVER to determine whether to increment the page
+\#   number silently when doc covers or covers are output.
+\#
+.MAC COVER_COUNTS_PAGES END
+.    if '\\$0'DOC_COVER_COUNTS_PAGES' \{\
+.       ie '\\$1'' .nr #DOCCOVERS_COUNT 1
+.       el .rr #DOCCOVERS_COUNT
+.       return
+.    \}
+.    if '\\$0'COVER_COUNTS_PAGES' \{\
+.       ie '\\$1'' .nr #COVERS_COUNT 1
+.       el .rr #COVERS_COUNT
+.       return
+.    \}
+.END
+\#
+.MAC DO_COVER END
+.    nr #DOING_COVER 1
+.    ev COVER
+.    evc 0
+.    vpt 0
+.    if \\n[#PAGINATE]=1 \{\
+.       nr #PAGINATION_WAS_ON 1
+.       rr #PAGINATE
+.    \}
+.    if \\n[#HEADERS_ON]=1 \{\
+.       nr #HEADERS_WERE_ON 1
+.       HEADERS OFF
+.    \}
+.    if \\n[#FOOTERS_ON]=1 \{\
+.       nr #FOOTERS_WERE_ON 1
+.       FOOTERS OFF
+.    \}
+.    if \\n[#COLUMNS]=1 \{\
+.       nr #COLUMNS_WERE_ON 1
+.       rr #COLUMNS
+.    \}
+.    ds PDF_BM
+.    ie '\\$0'DO_DOC_COVER' \{\
+.       ds  DOC_  DOC_
+.       nr #DOC_COVER_DONE 1
+.       if '\\*[$PDF_DOC_COVER_LABEL]'' \
+.          ds $PDF_DOC_COVER_LABEL Cover:
+.    \}
+.    el \
+.       if '\\*[$PDF_COVER_LABEL]'' \
+.          ds $PDF_COVER_LABEL Title Page:
+.    ds $COVER_TYPE \\*[DOC_]COVER_
+.    if !r#\\*[DOC_]COVER_START_POS \
+.       nr #\\*[DOC_]COVER_START_POS \\n[#PAGE_LENGTH]/3
+.    if \\n[#PRINT_STYLE]=1 \
+.       if !\\n[#SINGLE_SPACE]=1 .vs \\n[#DOC_LEAD]u/2u
+.    if \\n[#PRINT_STYLE]=2 \{\
+.       vs \\n[#DOC_LEAD]u+\\*[$\\*[DOC_]COVER_LEAD_ADJ]
+.       nr #\\*[DOC_]COVER_LEAD \\n[.v]
+.    \}
+.    if \\n[.ns] .rs
+.    if '\\$0'DO_COVER' \{\
+.       if \\n[TOC.RELOCATE]==5 \
+.          if !rTOC_BH .TOC_BEFORE_HERE
+.    \}
+.    if '\\$0'DO_DOC_COVER' \{\
+.       if \\n[TOC.RELOCATE]==3 \
+.          if !rTOC_BH .TOC_BEFORE_HERE
+.    \}
+.    RV_HARD_SET_MARGINS
+.\" Cover image
+.    if \\n[#\\*[DOC_]COVER_IMAGE]=1 \{\
+.       DO_\\*[DOC_]COVER_IMAGE
+.       rr #\\*[DOC_]COVER_IMAGE
+.    \}
+.\" Start cover
+.    sp |\\n[#\\*[DOC_]COVER_START_POS]u-1v
+.    if !\\n[#PRINT_STYLE]=1 \
+.       if \\n[#\\*[DOC_]COVER_COLOR]=1 \
+.          gcolor \\*[$\\*[DOC_]COVER_COLOR]
+.    \\*[DOC_]COVER_H_POS
+.    if \\n[#\\*[DOC_]COVER_TITLE]=2 .ds DOC DOC
+.    fam \\*[$\\*[DOC_]COVER_\\*[DOC]TITLE_FAM]
+.    ft  \\*[$\\*[DOC_]COVER_\\*[DOC]TITLE_FT]
+.    ps  \\*[$\\*[DOC_]COVER_\\*[DOC]TITLE_PT_SIZE]
+.    ie \\n[#PRINT_STYLE]=1 .TYPEWRITER
+.    el .vs \\n[#\\*[DOC_]COVER_LEAD]u
+.    nr PDFHREF.VIEW.LEADING \\n[PDFHREF.VIEW.LEADING.C]
+.\" Title and/or doctitle
+.    if (\\n[#\\*[DOC_]COVER_TITLE]=1):(\\n[#\\*[DOC_]COVER_TITLE]=2) \{\
+.       ie \\n[#PRINT_STYLE]=1 \{\
+.          vs \\n[.v]u*2u
+.          sp -1.5
+.          CAPS
+.          nr #ARG_NUM 0 1
+.          while \\n[#TITLE_NUM]>=\\n+[#ARG_NUM] \{\
+.             UNDERSCORE "\\*[$TITLE_\\n[#ARG_NUM]]"
+.             if \\n[#ARG_NUM]>1 .as PDF_BM " \"
+.             as PDF_BM \\*[$TITLE_\\n[#ARG_NUM]]
+.          \}
+.          CAPS OFF
+.          vs
+.       \}
+.       el \{\
+.          DO_TITLE
+.          rm $PRFX
+.       \}
+.       PDF_BOOKMARK 1 \\*[$PDF_\\*[DOC_]COVER_LABEL] \\*[PDF_BM]
+.    \}
+.\" Chapter
+.    if \\n[#\\*[DOC_]COVER_TITLE]=3 \{\
+.       ie \\n[#PRINT_STYLE]=1 \{\
+.          CAPS
+.          UNDERSCORE "\\*[$CHAPTER_STRING] \\*[$CHAPTER]
+.          CAPS OFF
+.       \}
+.       el .DO_CHAPTER
+.       PDF_BOOKMARK 1 \
+\\*[$PDF_\\*[DOC_]COVER_LABEL] \\*[$CHAPTER_STRING] \\*[$CHAPTER]
+.       if \\n[#\\*[DOC_]COVER_CHAPTER_CAPS]=1 .CAPS off
+.    \}
+.\" Chapter title
+.    if \\n[#\\*[DOC_]COVER_TITLE]=4 \{\
+.       ie \\n[#PRINT_STYLE]=1 \{\
+.          CAPS
+.          nr #ARG_NUM 0 1
+.          vs \\n[.v]u*2u
+.          sp -1.5
+.             while \\n[#CHAPTER_TITLE_NUM]>=\\n[#ARG_NUM] \{\
+.                UNDERSCORE "\\*[$CHAPTER_TITLE_\\n+[#ARG_NUM]]"
+.                if \\n[#ARG_NUM]>1 .as PDF_BM " \"
+.                as PDF_BM \\*[$CHAPTER_TITLE_\\n[#ARG_NUM]]
+.             \}
+.          CAPS OFF
+.          vs
+.       \}
+.       el \{\
+.          ds $PRFX CHAPTER_
+.          DO_TITLE
+.          rm $PRFX
+.       \}
+.       PDF_BOOKMARK 1 \\*[$PDF_\\*[DOC_]COVER_LABEL] \\*[PDF_BM]
+.    \}
+.\" Chapter + chapter title
+.    if \\n[#\\*[DOC_]COVER_TITLE]=5 \{\
+.       ie \\n[#PRINT_STYLE]=1 \{\
+.          CAPS
+.          UNDERSCORE "\\*[$CHAPTER_STRING] \\*[$CHAPTER]
+.          CAPS OFF
+.       \}
+.       el .DO_CHAPTER
+.       if !'\\*[$CHAPTER_TITLE_1]'' \{\
+.          ie \\n[#PRINT_STYLE]=1 \{\
+.             ie \\n[#SINGLE_SPACE]=0 .vs \\n[#DOC_LEAD]u/2u
+.             el .vs \\n[#DOC_LEAD]u
+.             sp
+.             nr #ARG_NUM 0 1
+.             while \\n[#CHAPTER_TITLE_NUM]>=\\n+[#ARG_NUM] \{\
+.                PRINT "\\*[$CHAPTER_TITLE_\\n[#ARG_NUM]]"
+.                if \\n[#ARG_NUM]>1 .as PDF_BM " \"
+.                as PDF_BM \\*[$CHAPTER_TITLE_\\n[#ARG_NUM]]
+.             \}
+.             if \\n[#SINGLE_SPACE]=0 .vs \\n[#DOC_LEAD]u
+.          \}
+.          el \{\
+.             ds $PRFX CHAPTER_
+.             if \\n[#PRINT_STYLE]=2 .nr #CHAPTER+TITLE 1
+.             if !'\\*[$\\*[DOC_]COVER_CHAPTER_TITLE_SPACER]'' \
+.                sp \\*[$\\*[DOC_]COVER_CHAPTER_TITLE_SPACER]
+.             DO_TITLE
+.             rr #CHAPTER+TITLE
+.             rm $PRFX
+.          \}
+.       \}
+.       PDF_BOOKMARK 1 \\*[$PDF_\\*[DOC_]COVER_LABEL] \\*[PDF_BM]
+.    \}
+.\"  (Doc)covertitle
+.\"    Titles to (doc)covers that are entered with
+.\"      .TITLE DOC_COVER title
+.\"    and included in (DOC)COVER with TITLE get treated as
+.\"    (DOC_)COVERTITLEs, so we define the appropriate strings and
+.\"    registers from their (DOC_)COVER_TITLE equivalents.
+.\"
+.    if (\\n[#\\*[DOC_]COVER_TITLE]=6):(\\n[#\\*[DOC_]COVER_TITLE]=7) \{\
+.       if \\n[#FROM_\\*[DOC_]COVERTITLE] \{\
+.          ds $\\*[DOC_]COVER_\\*[DOC_]COVERTITLE_FAM \
+\\*[$\\*[DOC_]COVER_TITLE_FAM]
+.          ds $\\*[DOC_]COVER_\\*[DOC_]COVERTITLE_FT \
+\\*[$\\*[DOC_]COVER_TITLE_FT]
+.          ds $\\*[DOC_]COVER_\\*[DOC_]COVERTITLE_COLOR \
+\\*[$\\*[DOC_]COVER_TITLE_COLOR]
+.          nr #\\*[DOC_]COVER_\\*[DOC_]COVERTITLE_COLOR \
+\\n[#\\*[DOC_]COVER_TITLE_COLOR]
+.          nr #\\*[DOC_]COVER_\\*[DOC_]COVERTITLE_CAPS  \
+\\n[#\\*[DOC_]COVER_TITLE_CAPS]
+.          nr #\\*[DOC_]COVER_\\*[DOC_]COVERTITLE_SMALLCAPS  \
+\\n[#\\*[DOC_]COVER_TITLE_SMALLCAPS]
+.          ds $\\*[DOC_]COVER_\\*[DOC_]COVERTITLE_LEAD  \
+\\*[$\\*[DOC_]COVER_TITLE_LEAD]
+.          ds $\\*[DOC_]COVER_\\*[DOC_]COVERTITLE_SIZE_CHANGE \
+\\*[$\\*[DOC_]COVER_TITLE_SIZE_CHANGE]
+.          nr #\\*[DOC_]COVER_\\*[DOC_]COVERTITLE_UNDERLINE \
+\\n[#\\*[DOC_]COVER_TITLE_UNDERLINE]
+.          nr #\\*[DOC_]COVER_\\*[DOC_]COVERTITLE_UNDERLINE_WEIGHT \
+\\n[#\\*[DOC_]COVER_TITLE_UNDERLINE_WEIGHT]
+.          nr #\\*[DOC_]COVER_\\*[DOC_]COVERTITLE_UNDERLINE_WEIGHT_ADJ \
+\\n[#\\*[DOC_]COVER_TITLE_UNDERLINE_WEIGHT_ADJ]
+.          ds $\\*[DOC_]COVER_\\*[DOC_]COVERTITLE_UNDERLINE_GAP \
+\\*[$\\*[DOC_]COVER_TITLE_UNDERLINE_GAP]
+.          ds $\\*[DOC_]COVER_\\*[DOC_]COVERTITLE_RULE_GAP \
+\\*[$\\*[DOC_]COVER_TITLE_RULE_GAP]
+.          rr #FROM_\\*[DOC_]COVERTITLE
+.       \}
+.       ie \\n[#PRINT_STYLE]=1 \{\
+.          CAPS
+.          vs \\n[.v]u*2u
+.          nr #ARG_NUM 0 1
+.          while \\n[#\\*[DOC_]COVERTITLE_NUM]>=\\n+[#ARG_NUM] \{\
+.             UNDERSCORE "\\*[$\\*[DOC_]COVERTITLE_\\n[#ARG_NUM]]"
+.                if \\n[#ARG_NUM]>1 .as PDF_BM " \"
+.                as PDF_BM \\*[$\\*[DOC_]COVERTITLE_\\n[#ARG_NUM]]
+.          \}
+.          vs
+.          CAPS OFF
+.       \}
+.       el \{\
+.          ds $PRFX \\*[DOC_]COVER
+.          DO_TITLE
+.          rm $PRFX
+.       \}
+.       PDF_BOOKMARK 1 \\*[$PDF_\\*[DOC_]COVER_LABEL] \\*[PDF_BM]
+.    \}
+.    ie !'\\*[DOC_]'' \
+.       if !\\n[#DOC_COVER_TITLE] .PDF_BOOKMARK 1 Cover page
+.    el \
+.       if !\\n[#COVER_TITLE] .PDF_BOOKMARK 1 Title page
+.    rr #\\*[DOC_]COVER_TITLE
+.\" Subtitle
+.    if \\n[#\\*[DOC_]COVER_SUBTITLE]=1 \{\
+.       ie \\n[#PRINT_STYLE]=1 \{\
+.          if !'\\*[$\\*[DOC_]COVER_SUBTITLE_1]'' \
+.             ds $PRFX \\*[DOC_]COVER_
+.          sp 2
+.          nr #ARG_NUM 0 1
+.          while \\n[#\\*[$PRFX]SUBTITLE_NUM]>=\\n+[#ARG_NUM] \{\
+.             PRINT "\\*[$\\*[$PRFX]SUBTITLE_\\n[#ARG_NUM]]"
+.          \}
+.          rm $PRFX
+.       \}
+.       el \{\
+.          ie !'\\*[$\\*[DOC_]COVER_SUBTITLE_1]'' .ds $PRFX \\*[DOC_]COVER_SUB
+.          el .ds $PRFX SUB
+.          if !'\\*[$\\*[DOC_]COVER_SUBTITLE_SPACER]'' \
+.             sp \\*[$\\*[DOC_]COVER_SUBTITLE_SPACER]
+.          DO_SUBTITLE
+.          rm $PRFX
+.       \}
+.    \}
+.    if \\n[#PRINT_STYLE]=1 \
+.       if !r#\\*[DOC_]COVER_SUBTITLE .sp
+.\" Author (plus attribution)
+.    if \\n[#\\*[DOC_]COVER_AUTHOR]=1 \{\
+.       ie \\n[#PRINT_STYLE]=1 \
+.          sp
+.       el \{\
+.          ie !'\\*[$\\*[DOC_]COVER_AUTHOR_LEAD]'' \
+.             vs \\*[$\\*[DOC_]COVER_AUTHOR_LEAD]
+.          el .vs \\n[#\\*[DOC_]COVER_LEAD]u
+.       \}
+.       if '\\*[$\\*[DOC_]COVER_ATTRIBUTE_STRING]'' \
+.          ds $\\*[DOC_]COVER_ATTRIBUTE_STRING \
+              \\*[$ATTRIBUTE_STRING]
+.       ie !\\n[#PRINT_STYLE]=1 \{\
+.          fam \\*[$\\*[DOC_]COVER_ATTRIBUTE_FAM]
+.          ft  \\*[$\\*[DOC_]COVER_ATTRIBUTE_FT]
+.          ps \
+\\n[#DOC_PT_SIZE]u\\*[$\\*[DOC_]COVER_ATTRIBUTE_SIZE_CHANGE]
+.          if \\n[#\\*[DOC_]COVER_ATTRIBUTE_COLOR]=1 \
+.             gcolor \\*[$\\*[DOC_]COVER_ATTRIBUTE_COLOR]
+.          if \\n[#\\*[DOC_]COVER_ATTRIBUTE_CAPS]=1 .CAPS
+.          if \\n[#\\*[DOC_]COVER_ATTRIBUTE_SMALLCAPS]=1 .SMALLCAPS
+.          if !'\\*[$\\*[DOC_]COVER_ATTRIBUTE_SPACER]'' \
+.             sp \\*[$\\*[DOC_]COVER_ATTRIBUTE_SPACER]
+.          ie \\n[#\\*[DOC_]COVER_ATTRIBUTE_UNDERLINE] \{\
+.             ds $TITLE_TYPE \\*[DOC_]COVER_ATTRIBUTE
+.             ie \\n[#\\*[DOC_]COVER_ATTRIBUTE_UNDERLINE]=2 \
+.                UNDERSCORE2 \\*[$\\*[DOC_]COVER_ATTRIBUTE_UNDERLINE_GAP] \
+\\*[$\\*[DOC_]COVER_ATTRIBUTE_RULE_GAP] "\\*[$\\*[DOC_]COVER_ATTRIBUTE_STRING]"
+.             el .UNDERSCORE \\*[$\\*[DOC_]COVER_ATTRIBUTE_STRING] 
+.          \}
+.          el .PRINT "\\*[$\\*[DOC_]COVER_ATTRIBUTE_STRING]"
+.          SMALLCAPS off
+.          CAPS off
+.          if \\n[#\\*[DOC_]COVER_ATTRIBUTE_COLOR]=1 \
+.             gcolor
+.       \}
+.       el \
+.          PRINT "\\*[$\\*[DOC_]COVER_ATTRIBUTE_STRING]"
+.       ie \\n[#PRINT_STYLE]=1 .sp
+.       el \{\
+.          if !'\\*[$\\*[DOC_]COVER_AUTHOR_SPACER]'' \
+.             sp \\*[$\\*[DOC_]COVER_AUTHOR_SPACER]
+.       \}
+.       DO_AUTHORS
+.       rm $PRFX
+.    \}
+.\" Named doctype string
+.    if \\n[#DOC_TYPE]=3 \{\
+.       if \\n[#\\*[DOC_]COVER_DOCTYPE]=1 \{\
+.          ie \\n[#PRINT_STYLE]=1 \{\
+.             TYPEWRITER
+.             sp 1.5
+.             UNDERSCORE2 3p 2p "\\*[$DOC_TYPE]
+.          \}
+.          el \{\
+.             fam \\*[$\\*[DOC_]COVER_DOCTYPE_FAM]
+.             ft  \\*[$\\*[DOC_]COVER_DOCTYPE_FT]
+.             ps \
+\\n[#DOC_PT_SIZE]u\\*[$\\*[DOC_]COVER_DOCTYPE_SIZE_CHANGE]
+.             if \\n[#\\*[DOC_]COVER_DOCTYPE_COLOR]=1 \
+.                gcolor \\*[$\\*[DOC_]COVER_DOCTYPE_COLOR]
+.          sp
+.          if \\n[#\\*[DOC_]COVER_DOCTYPE_CAPS]=1 .CAPS
+.          if \\n[#\\*[DOC_]COVER_DOCTYPE_SMALLCAPS]=1 .SMALLCAPS
+.          if !'\\*[$\\*[DOC_]COVER_DOCTYPE_SPACER]'' \
+.             sp \\*[$\\*[DOC_]COVER_DOCTYPE_SPACER]
+.          ie \\n[#\\*[DOC_]COVER_DOCTYPE_UNDERLINE] \{\
+.             ds $TITLE_TYPE \\*[DOC_]COVER_DOCTYPE
+.             ie \\n[#\\*[DOC_]COVER_DOCTYPE_UNDERLINE]=2 \
+.                UNDERSCORE2 \\*[$\\*[DOC_]COVER_DOCTYPE_UNDERLINE_GAP] \
+\\*[$\\*[DOC_]COVER_DOCTYPE_RULE_GAP] "\\*[$DOC_TYPE]"
+.             el .UNDERSCORE "\\*[$DOC_TYPE]" 
+.          \}
+.          el .PRINT "\\*[$DOC_TYPE]"
+.          SMALLCAPS off
+.          CAPS off
+.          if \\n[#\\*[DOC_]COVER_DOCTYPE_COLOR]=1 \
+.             gcolor
+.          \}
+.       \}
+.    \}
+.\" Covertext
+.    if \\n[#\\*[DOC_]COVERTEXT]=1 \{\
+.       nr #DOING_COVERTEXT 1
+.       if !\\n[#\\*[DOC_]COVERTEXT_START_POS] .sp
+.       if \\n[#\\*[DOC_]COVERTEXT]=1 \{\
+.          ev \\*[DOC_]COVERTEXT
+.          nf
+.          \\*[DOC_]COVER_TEXT
+.          ev
+.       \}
+.       rr #\\*[DOC_]COVERTEXT
+.       rm \\*[DOC_]COVER_TEXT
+.       rr #DOING_COVERTEXT
+.       rr #\\*[DOC_]COVERTEXT_START_POS
+.    \}
+.    sp |\\n[#VISUAL_B_MARGIN]u
+.\" Copyright
+.    ie \\n[#PRINT_STYLE]=1 \
+.       if !\\n[#SINGLE_SPACE] .sp
+.    el \{\
+.       fam \\*[$\\*[DOC_]COVER_COPYRIGHT_FAM]
+.       ft  \\*[$\\*[DOC_]COVER_COPYRIGHT_FT]
+.       ps \\n[#DOC_PT_SIZE]u\\*[$\\*[DOC_]COVER_COPYRIGHT_SIZE_CHANGE]
+.       nr #COPYRIGHT_V_ADJ \\n[#DOC_LEAD]-\\n[.v]
+.       sp \\n[#COPYRIGHT_V_ADJ]u
+.       rr #COPYRIGHT_V_ADJ
+.    \}
+.    if \\n[#\\*[DOC_]COVER_COPYRIGHT]=1 \{\
+.       QUAD \\*[$\\*[DOC_]COVER_COPYRIGHT_QUAD]
+.       if \\n[#\\*[DOC_]COVER_COPYRIGHT_COLOR]=1 \
+.          gcolor \\*[$\\*[DOC_]COVER_COPYRIGHT_COLOR]
+.       PRINT \\*[$\\*[DOC_]COVER_COPYRIGHT]
+.       if \\n[#\\*[DOC_]COVER_COPYRIGHT_COLOR]=1 \
+.          gcolor
+.    \}
+.    sp |\\n[#VISUAL_B_MARGIN]u
+.\" Misc
+.    if \\n[#\\*[DOC_]COVER_MISC]=1 \{\
+.       if \\n[#PRINT_STYLE]=2 \{\
+.          fam \\*[$\\*[DOC_]COVER_MISC_FAM]
+.          ft  \\*[$\\*[DOC_]COVER_MISC_FT]
+.          ps \\n[#DOC_PT_SIZE]u\\*[$\\*[DOC_]COVER_MISC_SIZE_CHANGE]
+.          vs \\*[$\\*[DOC_]COVER_MISC_LEAD]
+.          if \\n[#\\*[DOC_]COVER_MISC_COLOR]=1 \
+.             gcolor \\*[$\\*[DOC_]COVER_MISC_COLOR]
+.       \}
+.       ie !'\\*[$\\*[DOC_]COVER_MISC_1]'' \{\
+.          QUAD \\*[$\\*[DOC_]COVER_MISC_QUAD]
+.          da MISC_DIV
+.          nr #NEXT_MISC 0 1
+.          while \\n[#\\*[DOC_]COVER_MISC_LINES]>=\\n+[#NEXT_MISC] \{\
+.             nop \\*[$\\*[DOC_]COVER_MISC_\\n[#NEXT_MISC]]
+.             br
+.          \}
+.          da
+.       \}
+.       el \{\
+.          QUAD \\*[$MISC_QUAD]
+.          da MISC_DIV
+.          nr #NEXT_MISC 0 1
+.          while \\n[#MISC_LINES]>=\\n+[#NEXT_MISC] \{\
+.             nop \\*[$MISC_\\n[#NEXT_MISC]]
+.             br
+.          \}
+.          da
+.       \}
+.       nr #MISC_V_ADJ \\n[#DOC_LEAD]-\\n[.v]
+.       sp \\n[#MISC_V_ADJ]u
+.       sp -\\n[dn]u+1
+.       nf
+.       MISC_DIV
+.       if \\n[#MISC_COLOR]=1 .gcolor
+.       if \\n[#\\*[DOC_]COVER_MISC_COLOR]=1 .gcolor
+.       rm MISC_DIV
+.       rr #MISC_DEPTH
+.    \}
+.    if \\n[TOC.RELOCATE]==1 \{\
+.       if !\\n[#COVER_BLANKPAGE] \
+.          if !rTOC_BH .TOC_AFTER_HERE
+.    \}
+.    if '\\$0'DO_COVER' \{\
+.       if \\n[TOC.RELOCATE]==6 \
+.          if !rTOC_BH .TOC_AFTER_HERE
+.    \}
+.    if '\\$0'DO_DOC_COVER' \{\
+.       if \\n[TOC.RELOCATE]==4 \
+.          if !rTOC_BH .TOC_AFTER_HERE
+.    \}
+.    if '\\$0'DO_DOC_COVER' .rm DOC_
+.    END_COVER
+.END
+\#
+\# Macro to terminate (doc)cover processing
+\#
+.MAC END_COVER END
+.    EOL
+.    TRAP
+.    NEWPAGE
+.    if '\\*[$COVER_TYPE]'DOC_COVER_' .ds DOC DOC
+.    rm $COVER_TYPE
+.    if \\n[#PAGINATION_WAS_ON]=1 .nr % +1
+.    ie \\n[#\\*[DOC]_COVER_BLANKPAGE]=1 \{\
+.       if \\n[TOC.RELOCATE] \
+.          if !\\n[#TOC_BH] .TOC_AFTER_HERE
+.       NEWPAGE
+.       rr #\\*[DOC]_COVER_BLANKPAGE
+.       if !\\n[#\\*[DOC]COVERS_COUNT]=1 .nr % -2
+.    \}
+.    el \
+.       if !\\n[#\\*[DOC]COVERS_COUNT]=1 .nr #PAGE_NUM_ADJ -1
+.    if !'\\n[.ev]'0' .ev
+.    if \\n[#PAGINATION_WAS_ON] \{\
+.       rr #PAGINATION_WAS_ON
+.       PAGINATE
+.       PAGENUMBER \\n%+\\n[#PAGE_NUM_ADJ]-1
+.    \}
+.    if \\n[#HEADERS_WERE_ON] \{\
+.       rr #HEADERS_WERE_ON
+.       HEADERS
+.    \}
+.    if \\n[#FOOTERS_WERE_ON] \{\
+.       rr #FOOTERS_WERE_ON
+.       FOOTERS
+.    \}
+.    if \\n[#COLUMNS_WERE_ON]=1 \{\
+.       rr #COLUMNS_WERE_ON 1
+.       nr #COLUMNS 1
+.    \}
+.    rr #DOING_COVER
+.    if \\n[.ns] .nop \&
+.    if \\n[#RECTO_VERSO] .nr #RV_POST_COVER 1
+.END
+\#
+\# +++START THE DOCUMENT+++
+\#
+\# THE START MACRO
+\# ---------------
+\# *Arguments:
+\#   <none>
+\# *Function:
+\#   Macro to start document processiong.  Reads in default document
+\#   style parameters and any parameters the user has changed before
+\#   issuing START.  Using the information gathered in the opening
+\#   macros, prints appropriate title (or chapter #), subtitle,
+\#   author and document type (if appropriate).
+\# *Notes:
+\#   The .PRINT \& (zero-width character) is required to get the
+\#   subsequent .sp request to work as advertised.
+\#
+\#   The overall document line length, family, and point-size
+\#   are stored in #DOC_L_LENGTH, $DOC_FAM, and #DOC_PT_SIZE for
+\#   use in the HEADER and FOOTER macros.
+\#
+.MAC START END
+.    nr #DOCS 1
+.    if \\n[TOC.RELOCATE]==2 \{\
+.       if !\\n[TOC_BH] .TOC_BEFORE_HERE
+.    \}
+.    if !n .nop \X'ps: exec 0 setlinejoin'\X'ps: exec 0 setlinecap'
+.    if !\\n[#PRINT_STYLE] \{\
+.       PRINTSTYLE TYPEWRITE
+.       PRINT \&
+.       po 6P
+.       ll 39P
+.       ta \\n[.l]u
+.       sp |1i-1v
+.       CENTER
+.       PRINT "You neglected to enter a PRINTSTYLE."
+.       ab [mom]: PRINTSTYLE missing.  Aborting '\\n[.F]'.
+.    \}
+.    if \\n[#LINENUMBERS]=1 \{\
+.       nm
+.       NUMBER_LINES OFF
+.       nr #LINENUMBERS 2
+.    \}
+.    if \\n[#COLLATE] \{\
+.       COPYSTYLE \\*[$COPY_STYLE]
+.       nr #HEADERS_ON \\n[#HEADER_STATE]
+.       if \\n[#PAGE_NUM_V_POS]=1 .nr #PAGINATE \\n[#PAGINATION_STATE]
+.       PRINT \&
+.       if !'\\*[$RESTORE_PAGENUM_STYLE]'' \{\
+.          PAGENUM_STYLE \\*[$RESTORE_PAGENUM_STYLE]
+.          rm $RESTORE_PAGENUM_STYLE
+.       \}
+.    \}
+.    DEFAULTS
+.    nr #PAGE_TOP \\n[#T_MARGIN]u-\\n[#DOC_LEAD]u
+.    rr #RESET_TRAPS
+.    if !r#EN_Q_AUTOLEAD  .nr #EN_Q_LEAD \\n[#EN_LEAD]
+.    if !r#EN_BQ_AUTOLEAD .nr #EN_BQ_LEAD \\n[#EN_LEAD]
+.\"  TOC/recto-verso stuff
+.    nr @L_MARGIN \\n[#DOC_L_MARGIN]
+.    nr @R_MARGIN \\n[#DOC_R_MARGIN]
+.\" Covers and doc covers
+.    if \\n[#DOC_COVERS]=1 \{\
+.       if \\n[#DOC_COVER]=1 .DO_DOC_COVER
+.    \}
+.    if \\n[#COVERS]=1 \{\
+.       if \\n[#COVER]=1 .DO_COVER
+.    \}
+.    nr PDFHREF.VIEW.LEADING \\n[PDFHREF.VIEW.LEADING.T]
+.    if !\\n[#TOC] .RV_HARD_SET_MARGINS
+.    if \\n[#COLUMNS] .COLUMNS \\n[#NUM_COLS] \\n[#GUTTER]u
+.\" Collect TITLE for TOC.
+.    if !\\n[#TOC]=1 \{\
+.       nr #TOC_ENTRY_PN \\n%+\\n[#PAGE_NUM_ADJ]
+.       af #TOC_ENTRY_PN \\g[#PAGENUMBER]
+.       ie \\n[#USER_SET_TITLE_ITEM] \{\
+.          ds $TOC_TITLE_ITEM \\*[$USER_SET_TITLE_ITEM]
+.          rr #USER_SET_TITLE_ITEM
+.          rm $USER_SET_TITLE_ITEM
+.       \}
+.       el \{\
+.          ie \\n[#DOC_TYPE]=2 \{\
+.             ie '\\*[$CHAPTER_TITLE]'' \
+.                ds $TOC_TITLE_ITEM \\*[$CHAPTER_STRING] \\*[$CHAPTER]
+.             el \{\
+.                ie '\\*[$CHAPTER]'' \
+.                   ds $TOC_TITLE_ITEM \\*[$CHAPTER_TITLE]
+.                el \
+.                   ds $TOC_TITLE_ITEM \
+\\*[$CHAPTER_STRING] \\*[$CHAPTER]: \\*[$CHAPTER_TITLE]
+.             \}
+.          \}
+.          el \
+.             ds $TOC_TITLE_ITEM \\*[$TITLE]
+.       \}
+.       if \\n[#TOC_AUTHORS]=1 \{\
+.          ie '\\*[$TOC_AUTHORS]'' \
+.             as $TOC_TITLE_ITEM / \\*[$AUTHOR_1]
+.          el \{\
+.             as $TOC_TITLE_ITEM / \\*[$TOC_AUTHORS]
+.             rm $TOC_AUTHORS
+.          \}
+.       \}
+.       if !'\\*[$TOC_TITLE_ITEM]'' \
+.          PDF_BOOKMARK 1 \\*[$TOC_TITLE_ITEM]
+.       as $TOC_TITLE_ITEM \|
+.       if \\n[#PREFIX_CH_NUM] \{\
+.          rn $TOC_TITLE_ITEM $TOC_TITLE_ITEM_OLD
+.          ds $TOC_CH_NUM \\n[#CH_NUM].\[toc-hd-num-spacer]
+.          ds $TOC_TITLE_ITEM \\*[$TOC_CH_NUM]\\*[$TOC_TITLE_ITEM_OLD]
+.          rm $TOC_TITLE_ITEM_OLD
+.       \}
+.       TITLE_TO_TOC
+.    \}
+.    if !\\n[#TOC] .nr #POST_TOP 1
+.\" End TITLE collection
+.    if \\n[#PRINT_PAGENUM_ON_PAGE_1] \{\
+.       br
+.       sp |\\n[#HEADER_MARGIN]u
+.       PRINT_PAGE_NUMBER
+.    \}
+.    rr #COLLATE
+.    rr #PAGINATION_STATE
+.\" End collate stuff
+.    sp |\\n[#DOCHEADER_ADVANCE]u-\\n[#DOC_LEAD]u
+.    ie \\n[#DOC_HEADER]=0 \{\
+.       if \\n[.ns] .rs
+.       if \\n[#DOC_TYPE]=4 \
+.          if !'\\n[.z]'' .di
+.       nr #STORED_PP_INDENT \\n[#PP_INDENT]
+.       PARA_INDENT 0
+.       PP
+.       PARA_INDENT \\n[#STORED_PP_INDENT]u
+.       rr #STORED_PP_INDENT
+.       ie r#ADVANCE_FROM_TOP \{\
+.          br
+.          sp |\\n[#ADVANCE_FROM_TOP]u-1v
+.          if \\n[#ADJ_DOC_LEAD]=1 .SHIM
+.       \}
+.       el \{\
+.          br
+.          sp |\\n[#T_MARGIN]u-1v
+.       \}
+.       if \\n[#COLUMNS] \{\
+.          mk dc
+.          nr #COL_NUM 0 1
+.          po \\n[#COL_\\n+[#COL_NUM]_L_MARGIN]u
+.          nr #L_MARGIN \\n[.o]
+.          ll \\n[#COL_L_LENGTH]u
+.       \}
+.       nr #PP 0
+.    \}
+.    el \{\
+.       if \\n[#AUTO_LEAD] .nr #RESTORE_AUTO_LEAD 1
+.       if \\n[#PRINT_STYLE]=2 .vs \\n[#DOC_LEAD]u\\*[$DOCHEADER_LEAD_ADJ]
+.       if \\n[#RESTORE_AUTO_LEAD] \{\
+.          nr #AUTO_LEAD 1
+.          nr #AUTOLEAD_VALUE  \\n[#SAVED_AUTOLEAD_VALUE]
+.       \}
+.       nr #DOCHEADER_LEAD \\n[#LEAD]
+.       vpt 0
+.\" Default doctype
+.       if \\n[#DOC_TYPE]=1 \{\
+.          if \\n[.ns] \{\
+.             rs
+.             nop \&
+.             sp -1
+.          \}
+.          ev DOCHEADER
+.          evc 0
+.          L_MARGIN \\n[#DOC_L_MARGIN]u
+.          LL       \\n[#DOC_L_LENGTH]u
+.          ta \\n[.l]u
+.          if \\n[#PRINT_STYLE]=1 .DEFAULT_DOCHEADER_TYPEWRITE
+.          if \\n[#PRINT_STYLE]=2 .DEFAULT_DOCHEADER
+.          ev
+.       \}
+.\" Chapter doctype
+.       if \\n[#DOC_TYPE]=2 \{\
+.          if \\n[.ns] .rs
+.          ev DOCHEADER
+.          evc 0
+.          if \\n[#DOCHEADER_COLOR]=1 \
+.             gcolor \\*[$DOCHEADER_COLOR]
+.          L_MARGIN \\n[#DOC_L_MARGIN]u
+.          LL       \\n[#DOC_L_LENGTH]u
+.          ta \\n[.l]u
+.          if \\n[#PRINT_STYLE]=1 .CHAPTER_DOCHEADER_TYPEWRITE
+.          if \\n[#PRINT_STYLE]=2 .CHAPTER_DOCHEADER
+.          ev
+.       \}
+.\" Named
+.       if \\n[#DOC_TYPE]=3 \{\
+.          if \\n[.ns] \{\
+.             rs
+.             nop \&
+.             sp -1
+.          \}
+.          ev DOCHEADER
+.          evc 0
+.          if \\n[#DOCHEADER_COLOR]=1 \
+.             gcolor \\*[$DOCHEADER_COLOR]
+.          L_MARGIN \\n[#DOC_L_MARGIN]u
+.          LL       \\n[#DOC_L_LENGTH]u
+.          ta \\n[.l]u
+.          if \\n[#PRINT_STYLE]=1 \{\
+.             DEFAULT_DOCHEADER_TYPEWRITE
+.             if !\\n[#NO_PRINT_DOCTYPE] \{\
+.                sp
+.                UNDERSCORE2 3p 2p "\\*[$DOC_TYPE]"
+.             \}
+.          \}
+.          if \\n[#PRINT_STYLE]=2 .NAMED_DOCHEADER
+.          ev
+.       \}
+.       if !\\n[#DOC_TYPE]=4 \{\
+.          if \\n[#PRINT_STYLE]=1 .sp
+.          if \\n[#PRINT_STYLE]=2 .sp \\n[#DOC_LEAD]u*2u
+.          if \\n[#COLUMNS] \{\
+.             nr #COL_NUM 0 1
+.             nr #L_LENGTH_FOR_EPI \\n[#L_LENGTH]
+.             ie \\n[#RV_POST_COVER] \{\
+.                nr #COL_\\n+[#COL_NUM]_L_MARGIN \\n[#DOC_L_MARGIN]
+.                po \\n[#COL_\\n[#COL_NUM]_L_MARGIN]u
+.                nr #L_MARGIN \\n[.o]
+.                rr #RV_POST_COVER
+.             \}
+.             el \{\
+.                po \\n[#COL_\\n+[#COL_NUM]_L_MARGIN]u
+.                nr #L_MARGIN \\n[.o]
+.             \}
+.             LL \\n[#COL_L_LENGTH]u
+.             ta \\n[.l]u
+.          \}
+.       \}
+.       nr #NO_PRINT_AUTHOR  1
+.       nr #NO_PRINT_DOCTYPE 1
+.    \}
+.    vs \\n[#DOC_LEAD]u
+.    if \\n[#PRINT_STYLE]=1 \
+.       if \\n[#SINGLE_SPACE]=1 .sp
+.    if \\n[#ADJ_DOC_LEAD]=1 \{\
+.       ie \\n[#ADVANCE_FROM_TOP]=0 \
+.          if \\n[#DOC_HEADER]=1 .SHIM
+.       el .rr #ADVANCE_FROM_TOP
+.    \}
+.    mk dc
+.    FAMILY \\*[$DOC_FAM]
+.    QUAD \\*[$DOC_QUAD]
+.    CLEANUP_DEFAULTS
+.    nr #START_FOR_FOOTERS 1
+.    if !\\n[#DOC_TYPE]=4 .em TERMINATE
+.    if \\n[#LINENUMBERS]=2 \{\
+.       ie \\n[#PER_SECTION] .NUMBER_LINES 1
+.       el .NUMBER_LINES RESUME
+.       nr #LINENUMBERS 1
+.    \}
+.    if \\n[#RUN_ON]=1 \{\
+.       if \\n[#FN_MARKER_STYLE]=1 .RUNON_WARNING
+.       if \\n[#FN_MARKER_STYLE]=2 .RUNON_WARNING
+.    \}
+.    nr PDFHREF.VIEW.LEADING \\n[PDFHREF.VIEW.LEADING.H]
+.    vpt
+.END
+\#
+.MAC CLEANUP_DEFAULTS END
+.    nr #START 1
+.    if \\n[#DOC_HEADER]=1 .nr #DOC_HEADER 2
+.    rm $TOC_TITLE_ITEM
+.    rr #MISC_NUM
+.    rr #MISCS
+.    rr #NEXT_AUTHOR
+.    rr #NEXT_MISC
+.END
+\#
+\# ====================================================================
+\#
+\# +++MACROS TO CHANGE SOME DEFAULTS+++
+\#
+\# DOCUMENT HEADER
+\# ---------------
+\# *Argument:
+\#   <none> | <anything> [distance to advance from top of page]
+\# *Function:
+\#   Turns printing of document header on or off.  If a second
+\#   numeric argument with units of measure is given, advances that
+\#   distance from the top of the page without printing the document
+\#   header.
+\# *Notes:
+\#   Default is on.  If the 1st argument is <anything> (which turns
+\#   document headers off), the optional 2nd argument may be given
+\#   (with a unit of measure).
+\#
+.MAC DOCHEADER END
+.    ie '\\$1'' .nr #DOC_HEADER 1
+.    el \{\
+.       if !'\\$2'' .nr #ADVANCE_FROM_TOP (\\$2)
+.       nr #DOC_HEADER 0
+.    \}
+.END
+\#
+\# DOCUMENT HEADER LEADING
+\# -----------------------
+\# *Arguments:
+\#   <+|- amount by which to in/decrease leading of doc header>
+\# *Function:
+\#   Stores user supplied lead in/decrease in string $DOCHEADER_LEAD_ADJ.
+\# *Notes:
+\#   A unit of measure must be supplied.  Decimal fractions OK.
+\#   Default is +0, i.e. same as DOC_LEAD.
+\#
+.MAC DOCHEADER_LEAD END
+.    ds $DOCHEADER_LEAD_ADJ \\$1
+.END
+\#
+\# DOCHEADER ADVANCE
+\# -----------------
+\# *Arguments:
+\#   <docheader start position>
+\# *Function:
+\#   Creates register #DOCHEADER_ADVANCE, used in START.
+\# *Notes:
+\#   Unit of measure required.
+\#   Default is same as T_MARGIN.
+\#
+.MAC DOCHEADER_ADVANCE END
+.    nr #DOCHEADER_ADVANCE \\$1
+.END
+\#
+\# DOCUMENT LEFT MARGIN
+\# --------------------
+\# *Argument:
+\#   <left margin of document>
+\# *Function:
+\#   Creates or modifies register #DOC_L_MARGIN.
+\# *Notes:
+\#   Affects everything on the page.
+\#
+.MAC DOC_LEFT_MARGIN END
+.    if !\\n[#DOCS] .DOC_MACRO_ERROR \\$0
+.    br
+.    nr #DOC_L_MARGIN (\\$1)
+.    L_MARGIN \\n[#DOC_L_MARGIN]u
+.END
+\#
+\# DOCUMENT RIGHT MARGIN
+\# ---------------------
+\# *Argument:
+\#   <right margin of document>
+\# *Function:
+\#   Creates or modifies register #DOC_R_MARGIN.
+\# *Notes:
+\#   Affects everything on the page.
+\#
+.MAC DOC_RIGHT_MARGIN END
+.    br
+.    nr #DOC_R_MARGIN (\\$1)
+.    R_MARGIN \\n[#DOC_R_MARGIN]
+.    nr #DOC_L_LENGTH \\n[#L_LENGTH]
+.END
+\#
+\# DOCUMENT LINE LENGTH
+\# --------------------
+\# *Argument:
+\#   <line length of document>
+\# *Function:
+\#   Creates or modifies register #DOC_L_LENGTH.
+\# *Notes:
+\#   Affects everything on the page.
+\#
+.MAC DOC_LINE_LENGTH END
+.    if !\\n[DOCS] .DOC_MACRO_ERROR \\$0
+.    br
+.    nr #DOC_L_LENGTH (\\$1)
+.    LL \\n[#DOC_L_LENGTH]u
+.    ta \\n[.l]u
+.END
+\#
+\# DOCUMENT FAMILY
+\# ---------------
+\# *Argument:
+\#   <family of running text>
+\# *Function:
+\#   Creates or modifies string $DOC_FAM.
+\# *Notes:
+\#   Affects everything except headers and footers.
+\#
+.MAC DOC_FAMILY END
+.    if !\\n[DOCS] .DOC_MACRO_ERROR \\$0
+.    br
+.    ds $DOC_FAM \\$1
+.    ds $FAMILY  \\*[$DOC_FAM]
+.    AUTHOR_FAMILY     \\*[$DOC_FAM]
+.    BLOCKQUOTE_FAMILY \\*[$DOC_FAM]
+.    DOCHEADER_FAMILY  \\*[$DOC_FAM]
+.    DOCTYPE_FAMILY    \\*[$DOC_FAM]
+.    EPIGRAPH_FAMILY   \\*[$DOC_FAM]
+.    FOOTNOTE_FAMILY   \\*[$DOC_FAM]
+.    HDRFTR_FAMILY     \\*[$DOC_FAM]
+.    LINENUMBER_FAMILY \\*[$DOC_FAM]
+.    QUOTE_FAMILY      \\*[$DOC_FAM]
+.    SUBTITLE_FAMILY   \\*[$DOC_FAM]
+.    TITLE_FAMILY      \\*[$DOC_FAM]
+.END
+\#
+\# DOCUMENT POINT SIZE
+\# -------------------
+\# *Argument:
+\#   <point size of running text>
+\# *Function:
+\#   Creates or modifies register #DOC_PT_SIZE.
+\# *Notes:
+\#   DOC_PT_SIZE is the basis for calculating all type sizes in
+\#   a document.  Ignored if PRINTSTYLE TYPEWRITE.
+\#
+.ALIAS DOC_PT_SIZE PT_SIZE
+\#
+\# DOCUMENT LEAD
+\# -------------
+\# *Argument:
+\#   <lead (".vs") of running text> [ADJUST]
+\# *Function:
+\#   Creates or modifies register #DOC_LEAD.  If the optional
+\#   ADJUST argument is given, adjusts leading so that the last
+\#   line of text falls exactly on #B_MARGIN.
+\# *Notes:
+\#   DOC_LEAD is the basis for calculating all leading changes in
+\#   a document.  Default for TYPESET is 16; 24 for TYPEWRITE.
+\#
+\#   Because the visible bottom or footer margin of a page depends
+\#   on the overall document lead supplied by the register #DOC_LEAD,
+\#   DOC_LEAD, in the body of a document, should always be associated
+\#   with the start of a new page (in other words, just before or
+\#   just after a manual NEWPAGE).  Ignored if PRINTSTYLE TYPEWRITE.
+\#
+.MAC DOC_LEAD END
+.    if \\n[#IGNORE] .return
+.    if !\\n[#DOCS] .DOC_MACRO_ERROR \\$0
+.    br
+.    if '\\$0'DOC_LEAD' \{\
+.       vs \\$1
+.       rr #DOC_AUTOLEAD
+.       rr #DOC_AUTOLEAD_FACTOR
+.       nr #DOC_LEAD \\n[.v]
+.    \}
+.    nr #RESET_TRAPS 1
+.    if !\\n[#ADJ_DOC_LEAD] .nr #REMOVE_ADJ 1
+.    if !'\\$0'DOC_LEAD' \{\
+.       if '\\$0'EN_LEAD' .nr #DOC_LEAD \\n[#EN_LEAD]
+.       if '\\$0'BIB_LEAD' .nr #DOC_LEAD \\n[#BIB_LEAD]
+.       if '\\$0'TOC_LEAD' .nr #DOC_LEAD \\n[#TOC_LEAD]
+.       if '\\$2'ADJUST' .TRAPS
+.       rr #RESET_TRAPS
+.    \}
+.END
+\#
+\# ADJUST DOCUMENT LEAD
+\# --------------------
+\# *Arguments:
+\#   <none> | <anything>
+\# *Function:
+\#   Adjusts document lead so that the last line of text falls exactly
+\#   on #B_MARGIN.
+\#
+.MAC DOC_LEAD_ADJUST END
+.    ie '\\$1'' \{\
+.       nr #ADJ_DOC_LEAD 1
+.       rr #DOC_LEAD_ADJUST_OFF
+.    \}
+.    el \{\
+.       nr #ADJ_DOC_LEAD 0
+.       nr #DOC_LEAD_ADJUST_OFF 1
+.    \}
+.END
+\#
+\# SHIM
+\# ----
+\# *Argument:
+\#   None
+\# *Function:
+\#   Advances to the next valid baseline.
+\# *Notes:
+\#   If a user plays around with spacing in a doc (say, with ALD),
+\#   it isn't easy to get mom back on track so she can achieve
+\#   perfectly flush bottom margins.  Any time SHIM is used, it
+\#   ensures that the next output line falls on a valid baseline.
+\#
+\# First, a little convenience macro
+\#
+.MAC PROCESS_SHIM END
+.    while \\n+[#VALID_BASELINE]<\\n[#CURRENT_V_POS] \{\
+.
+.    \}
+.    nr #SHIM \\n[#VALID_BASELINE]-\\n[#CURRENT_V_POS]
+.END
+\#
+\# And a macro to disable SHIM
+\#
+.MAC NO_SHIM END
+.    ie '\\$1'' .nr #NO_SHIM 1
+.    el .rr #NO_SHIM
+.END
+\#
+.nr #NO_SHIM 2 \" Restored to 1 in DEFAULTS.
+\#
+.MAC SHIM END
+.    ie \\n[#NO_SHIM] .return
+.    el \{\
+.       nr #VALID_BASELINE \\n[#T_MARGIN]-\\n[#DOC_LEAD] \\n[#DOC_LEAD]
+.       if !r#CURRENT_V_POS .nr #CURRENT_V_POS \\n[.d]
+.       ie \\n[#ADVANCE_FROM_TOP] \{\
+.          ie \\n[#CURRENT_V_POS]<(\\n[#T_MARGIN]-1v) \{\
+.             while \\n-[#VALID_BASELINE]>\\n[#CURRENT_V_POS] .
+.             nr #VALID_BASELINE +\\n[#DOC_LEAD]
+.             nr #SHIM \\n[#VALID_BASELINE]-\\n[#CURRENT_V_POS]
+.          \}
+.          el .PROCESS_SHIM
+.       \}
+.       el .PROCESS_SHIM
+.       if !\\n[#CALCULATE_ONLY] 'sp \\n[#SHIM]u
+.       rr #CURRENT_V_POS
+.    \}
+.END
+\#
+\# ====================================================================
+\#
+\# +++INTERNATIONALIZATION+++
+\#
+\# ATTRIBUTE STRING
+\# ----------------
+\# *Argument:
+\#   <what goes in the "by" slot before author in the document header>
+\# *Function:
+\#   Creates or modifies string $ATTRIBUTE_STRING.
+\# *Notes:
+\#   Default is "by".  A blank string ("") may be used if no
+\#   attribution is desired.  Blank line results.
+\#
+.MAC ATTRIBUTE_STRING END
+.    if !'\\$1'DOC_COVER' \
+.       if !'\\$1'COVER' .nr #NEITHER 1
+.    if !'\\$1'COVER' \
+.       if !'\\$1'DOC_COVER' .nr #NEITHER 1
+.    if '\\$1'DOC_COVER' \{\
+.       ds $DOC_COVER_ATTRIBUTE_STRING \\$2
+.       if '\\*[$DOC_COVER_ATTRIBUTE_STRING]'' \
+.          ds $DOC_COVER_ATTRIBUTE_STRING \&
+.    \}
+.    if '\\$1'COVER' \{\
+.       ds $COVER_ATTRIBUTE_STRING \\$2
+.       if '\\*[$COVER_ATTRIBUTE_STRING]'' \
+.          ds $COVER_ATTRIBUTE_STRING \&
+.    \}
+.    if \\n[#NEITHER]=1 \{\
+.       ds $ATTRIBUTE_STRING \\$1
+.       rr #NEITHER
+.    \}
+.END
+\#
+\# CHAPTER STRING
+\# --------------
+\# *Argument:
+\#   <what to print any time the word "chapter" is required>
+\# *Function:
+\#   Creates or modifies string $CHAPTER_STRING.
+\# *Notes:
+\#   Default is "chapter".
+\#
+.MAC CHAPTER_STRING END
+.    ds $CHAPTER_STRING \\$1
+.END
+\#
+\# DRAFT STRING
+\# ------------
+\# *Argument:
+\#   <what to print any time the word "draft" is required>
+\# *Function:
+\#   Creates or modifies string $DRAFT_STRING.
+\# *Notes:
+\#   Default is "draft".
+\#
+.MAC DRAFT_STRING END
+.    ds $DRAFT_STRING \\$1
+.END
+\#
+\# REVISION STRING
+\# ---------------
+\# *Argument:
+\#   <what to print any time the word "revision" is required>
+\# *Function:
+\#   Creates or modifies string $REVISION_STRING.
+\# *Notes:
+\#   Default is "revision".
+\#
+.MAC REVISION_STRING END
+.    ds $REVISION_STRING \\$1
+.END
+\#
+\# FINIS STRING
+\# ------------
+\# *Argument:
+\#   <what to print with the finis macro>
+\# *Function:
+\#   Creates or modifies string $FINIS_STRING.
+\# *Notes:
+\#   Default is "END".
+\#
+.MAC FINIS_STRING END
+.    ds $FINIS_STRING \\$1
+.END
+\#
+\# ====================================================================
+\#
+\# +++RECTO/VERSO+++
+\#
+\# RECTO_VERSO
+\# -----------
+\# *Arguments:
+\#   <none> | <anything>
+\# *Function:
+\#   Switches HDRFTR_LEFT and HDRFTR_RIGHT on alternate pages.  Also
+\#   switches page numbers left and right if either is chosen rather
+\#   than the default centered page numbers.  Switches left and right
+\#   margins if differing values have been entered.
+\# *Notes:
+\#   Default is OFF.
+\#
+.MAC RECTO_VERSO END
+.    ie '\\$1'' .nr #RECTO_VERSO 1
+.    el .nr #RECTO_VERSO 0
+.END
+\#
+\# FORCE RECTO
+\# -----------
+\# *Function:
+\#   Forces doccover and cover pages to recto
+\#
+.MAC RV_HARD_SET_MARGINS END
+.    DOC_LEFT_MARGIN  \\n[@L_MARGIN]u
+.    DOC_RIGHT_MARGIN \\n[@R_MARGIN]u
+.    po \\n[#DOC_L_MARGIN]u
+.    LL \\n[#DOC_L_LENGTH]u
+.END
+\#
+\# ====================================================================
+\#
+\# +++EPIGRAPHS+++
+\#
+\# EPIGRAPH INDENT
+\# ---------------
+\# *Argument:
+\#   <value by which to multiply PP_INDENT for block epigraphs>
+\# *Function:
+\#   Creates or modifies register #EPI_OFFSET_VALUE.
+\# *Notes:
+\#   Default is 2 for TYPEWRITE, 3 for TYPESET.
+\#
+.MAC EPIGRAPH_INDENT END
+.    rr #EPI_OFFSET_VALUE
+.    rm $EPI_OFFSET_VALUE
+.    ds $EVAL_EI_ARG \\$1
+.    substring $EVAL_EI_ARG -1
+.    ie \B'\\*[$EVAL_EI_ARG]' .nr #EPI_OFFSET_VALUE \\$1
+.    el .ds $EPI_OFFSET_VALUE \\$1
+.    rm $EVAL_EI_ARG
+.END
+\#
+\# EPIGRAPH AUTOLEAD
+\# -----------------
+\# *Argument:
+\#   <amount of lead to add to the epigraph ps for epigraph leading>
+\# *Function:
+\#   Creates or modifies register #EPI_AUTOLEAD.
+\# *Notes:
+\#   Default is 2 (for TYPESET; TYPEWRITE doesn't require this).
+\#
+.MAC EPIGRAPH_AUTOLEAD END
+.    nr #EPI_AUTOLEAD (p;\\$1)
+.END
+\#
+\# EPIGRAPH
+\# --------
+\# *Arguments:
+\#   BLOCK | <anything>
+\# *Function:
+\#   Places an epigraph before the document's text, after the
+\#   document header, or after a HEAD.
+\# *Notes:
+\#   #EPIGRAPH 1 = centered; 2 = block
+\#
+\#   By default, epigraphs are centered, allowing the user
+\#   to input them on a line per line basis.  To change this
+\#   behaviour, the user can supply the argument BLOCK, which
+\#   will produce indented, filled text similar to BLOCKQUOTE.
+\#
+\#   If a block epigraph contains more than one para, ALL paras of
+\#   the epigraph must be preceded by PP.  Otherwise, PP is optional.
+\#
+.MAC EPIGRAPH END
+.    nr #PP_STYLE 2
+.    nr #Q_PP     0
+.    if \\n[#LINENUMBERS]=1 \{\
+.       NUMBER_LINES OFF
+.       nr #LINENUMBERS 2
+.    \}
+.    if \\n[#START] \{\
+.       if \\n[#PRINT_STYLE]=1 \
+.          if \\n[#AUTHOR_LINES]=1 .sp \\n[#DOC_LEAD]u
+.    \}
+.    ie '\\$1'' \{\
+.       nr #EPIGRAPH 1
+.       ev EPIGRAPH
+.       nr #IN_DIVER 1
+.       ll \\n[#L_LENGTH]u
+.       ta \\n[.l]u
+.       CHECK_INDENT
+.       if \\n[#COLUMNS] \{\
+.          ie \\n[#START] \{\
+.              ll \\n[#DOC_L_LENGTH]u
+.              ta \\n[.l]u
+.          \}
+.          el \{\
+.             ll \\n[#COL_L_LENGTH]u
+.             ta \\n[.l]u
+.          \}
+.       \}
+.       CENTER
+.       if \\n[#PRINT_STYLE]=1 \{\
+.          fam \\*[$TYPEWRITER_FAM]
+.          ft  R
+.          if '\\*[$EPI_FT]'I' .FT I
+.          ps  \\*[$TYPEWRITER_PS]
+.          ie \\n[#SINGLE_SPACE] .vs \\n[#DOC_LEAD]u
+.          el .vs \\n[#DOC_LEAD]u/2u
+.          nr #EPI_LEAD      \\n[#LEAD]
+.          nr #EPI_LEAD_DIFF \\n[#DOC_LEAD]-\\n[#EPI_LEAD]
+.       \}
+.       if \\n[#PRINT_STYLE]=2 \{\
+.          FAMILY   \\*[$EPI_FAM]
+.          FT       \\*[$EPI_FT]
+.          ps  \\n[#DOC_PT_SIZE]u\\*[$EPI_SIZE_CHANGE]
+.          if \\n[#EPI_COLOR]=1 \{\
+.             nf
+\m[\\*[$EPI_COLOR]]
+.             EOL
+.          \}
+.          vs \\n[.ps]u+\\n[#EPI_AUTOLEAD]u
+.          nr #EPI_LEAD      \\n[#LEAD]
+.          nr #EPI_LEAD_DIFF \\n[#DOC_LEAD]-\\n[#EPI_LEAD]
+.       \}
+.       di EPI_TEXT
+.       nr #DIVERSIONS_HY_MARGIN (p;\\n[.ps]u*2.75)/1000
+.       HY_SET 1 \\n[#DIVERSIONS_HY_MARGIN]u (\\n[#PT_SIZE]u/1000u/8u)p
+.       hy 14
+.       nr #EPI_ACTIVE 1
+.    \}
+.    el \{\
+.       ie '\\$1'BLOCK' \{\
+.          nr #EPIGRAPH 2
+.          ev EPIGRAPH
+.          evc 0
+.          ie \\n[#START] \{\
+.             ie \\n[#COLUMNS] \{\
+.                ie r#EPI_OFFSET_VALUE \
+.                   ll \
+\\n[#L_LENGTH_FOR_EPI]u-(\\n[#PP_INDENT]u*(\\n[#EPI_OFFSET_VALUE]u*2u))
+.                el \
+.                   ll \
+\\n[#L_LENGTH_FOR_EPI]u-(\\*[$EPI_OFFSET_VALUE]u*2u)
+.                ta \\n[.l]u
+.             \}
+.             el \{\
+.                ie r#EPI_OFFSET_VALUE \
+.                   ll \
+\\n[#L_LENGTH]u-(\\n[#PP_INDENT]u*(\\n[#EPI_OFFSET_VALUE]u*2u))
+.                el \
+.                   ll \\n[#L_LENGTH]u-(\\*[$EPI_OFFSET_VALUE]*2u)
+.                ta \\n[.l]u
+.             \}
+.          \}
+.          el \{\
+.             ie r#EPI_OFFSET_VALUE \
+.                ll \
+\\n[#L_LENGTH]u-(\\n[#PP_INDENT]u*(\\n[#EPI_OFFSET_VALUE]u*2u))
+.             el \
+.                ll \\n[#L_LENGTH]u-(\\*[$EPI_OFFSET_VALUE]*2u)
+.             ta \\n[.l]u
+.             if \\n[#COLUMNS] \{\
+.                ie r#EPI_OFFSET_VALUE \
+.                   ll \
+\\n[#COL_L_LENGTH]u-(\\n[#PP_INDENT]u*(\\n[#EPI_OFFSET_VALUE]u*2u))
+.                el \
+.                   ll \\n[#COL_L_LENGTH]u-(\\*[$EPI_OFFSET_VALUE]*2u)
+.                ta \\n[.l]u
+.             \}
+.             CHECK_INDENT
+.          \}
+.          if \\n[#PRINT_STYLE]=1 \{\
+.             fam \\*[$TYPEWRITER_FAM]
+.             ft  R
+.             if '\\*[$EPI_FT]'I' .FT I
+.             ps  \\*[$TYPEWRITER_PS]
+.             ie \\n[#SINGLE_SPACE] .vs \\n[#DOC_LEAD]u
+.             el .vs \\n[#DOC_LEAD]u/2u
+.             QUAD LEFT
+.             HY OFF
+.             nr #EPI_LEAD \\n[#LEAD]
+.             nr #EPI_LEAD_DIFF \\n[#DOC_LEAD]-\\n[#EPI_LEAD]
+.             di EPI_TEXT
+.             nr #EPI_ACTIVE 1
+.          \}
+.          if \\n[#PRINT_STYLE]=2 \{\
+.             FAMILY   \\*[$EPI_FAM]
+.             FT       \\*[$EPI_FT]
+.             ps  \\n[#DOC_PT_SIZE]u\\*[$EPI_SIZE_CHANGE]
+.             if \\n[#EPI_COLOR]=1 \{\
+.                nf
+\m[\\*[$EPI_COLOR]]
+.                EOL
+.             \}
+.             vs \\n[.ps]u+\\n[#EPI_AUTOLEAD]u
+.             QUAD     \\*[$EPI_QUAD]
+.             nr #DIVERSIONS_HY_MARGIN (p;\\n[.ps]u*2.75)/1000
+.             HY_SET 1 \\n[#DIVERSIONS_HY_MARGIN]u (\\n[#PT_SIZE]u/1000u/8u)p
+.             hy 14
+.             nr #EPI_LEAD \\n[#LEAD]
+.             nr #EPI_LEAD_DIFF \\n[#DOC_LEAD]-\\n[#EPI_LEAD]
+.             di EPI_TEXT
+.             nr #EPI_ACTIVE 1
+.          \}
+.       \}
+.       el .DO_EPIGRAPH
+.    \}
+.END
+\#
+\# DO EPIGRAPH
+\# -----------
+\# *Arguments:
+\#   <none>
+\# *Function:
+\#   Ends diversion started in EPIGRAPH.  Makes spacing
+\#   adjustments to compensate for the difference between epigraph
+\#   leading and overall document leading, so that the bottom of
+\#   the pages remain flush.
+\# *Notes:
+\#   In addition to its usual place at the beginning of a
+\#   document, EPIGRAPH may also be used after HEAD.
+\#
+.MAC DO_EPIGRAPH END
+.    br
+.    di
+.    rr #IN_DIVER
+.    if \\n[#RESET_FN_COUNTERS]=2 \{\
+.       if !\\n[#FN_COUNT]=1 \{\
+.          if ((\\n[#PAGE_LENGTH]+\\n[#VARIABLE_FOOTER_POS])+\\n[#DIVER_DEPTH])>(\\n[#PAGE_LENGTH]+\\n[#VARIABLE_FOOTER_POS]) \{\
+.             DIVER_FN_2_POST
+.             rr #RESET_FN_COUNTERS
+.          \}
+.       \}
+.    \}
+.    nr #SAVED_FN_NUMBER \\n[#FN_NUMBER]
+.    nr #DONE_ONCE 0 1
+.    REMOVE_INDENT
+.    ev
+.    nr #EPI_DEPTH \\n[#DIVER_DEPTH]-\\n[#EPI_LEAD]
+.    nr #EPI_LINES \\n[#EPI_DEPTH]/\\n[#EPI_LEAD]
+.    ie \\n[#START] \{\
+.       RLD \\n[#SHIM]u
+.       nr #EPI_WHITESPACE (\\n[#DOC_LEAD]*\\n[#EPI_LINES])-\\n[#EPI_DEPTH]
+.       while \\n[#EPI_WHITESPACE]>\\n[#DOC_LEAD] \{\
+.          nr #EPI_WHITESPACE -\\n[#DOC_LEAD]
+.       \}
+.       if \\n[#PRINT_STYLE]=1 \
+.          if !\\n[#SINGLE_SPACE]=1 .ALD \\n[#DOC_LEAD]u
+.       if \\n[#PRINT_STYLE]=2 \{\
+.          ie !\\n[#DOC_TYPE]=2 .RLD \\n[#DOC_LEAD]u
+.          el \{\
+.             ie '\\*[$CHAPTER_TITLE]'' .RLD \\n[#DOC_LEAD]u
+.             el .if '\\*[$CHAPTER]''   .RLD \\n[#DOC_LEAD]u
+.          \}
+.          if \\n[#EPI_WHITESPACE]<\\n[#DOC_LEAD] \
+.             ALD \\n[#EPI_LEAD_DIFF]u+(\\n[#EPI_WHITESPACE]u/2u)
+.          if \\n[#EPI_WHITESPACE]>\\n[#DOC_LEAD] \
+.             ALD \
+\\n[#EPI_LEAD_DIFF]u+(\\n[#EPI_WHITESPACE]u/2u)-\\n[#DOC_LEAD]u
+.       \}
+.    \}
+.    el \{\
+.       ie \\n[#EPI_DEPTH]<\\n[#TRAP_DISTANCE] \{\
+.          nr #EPI_FITS 1
+.          nr #EPI_WHITESPACE (\\n[#DOC_LEAD]*\\n[#EPI_LINES])-\\n[#EPI_DEPTH]
+.          while \\n[#EPI_WHITESPACE]>\\n[#DOC_LEAD] \{\
+.             nr #EPI_WHITESPACE -\\n[#DOC_LEAD]
+.          \}
+.          ie \\n[#PRINT_STYLE]=1 \{\
+.             if \\n[#EPI_WHITESPACE]=\\n[#DOC_LEAD] \
+.                ALD \\n[#EPI_WHITESPACE]u/2u
+.          \}
+.          el \{\
+.             if \\n[#EPI_WHITESPACE]<\\n[#DOC_LEAD] \
+.                ALD \
+\\n[#EPI_LEAD_DIFF]u+(\\n[#EPI_WHITESPACE]u/2u)
+.             if \\n[#EPI_WHITESPACE]>\\n[#DOC_LEAD] \
+.                ALD \
+\\n[#EPI_LEAD_DIFF]u+(\\n[#EPI_WHITESPACE]u/2u)-\\n[#DOC_LEAD]u
+.          \}
+.          if \\n[#DIVER_FN]=2 .rr #DIVER_FN
+.       \}
+.       el \{\
+.          nr #EPI_LINES_TO_TRAP 0 1
+.          while \\n[#EPI_LEAD]*\\n+[#EPI_LINES_TO_TRAP]<\\n[#TRAP_DISTANCE] \{\
+.             nr #LOOP 1
+.          \}
+.          nr #EPI_LINES_TO_TRAP -1
+.          nr #EPI_WHITESPACE \
+(\\n[#EPI_LINES_TO_TRAP]*\\n[#DOC_LEAD])-(\\n[#EPI_LINES_TO_TRAP]*\\n[#EPI_LEAD])
+.          while \\n[#EPI_WHITESPACE]>\\n[#DOC_LEAD] \{\
+.             nr #EPI_WHITESPACE -\\n[#DOC_LEAD]
+.          \}
+.          if \\n[#EPI_WHITESPACE]<\\n[#DOC_LEAD] \
+.             ALD \\n[#EPI_WHITESPACE]u
+.          if \\n[#EPI_WHITESPACE]>\\n[#DOC_LEAD] \
+.             ALD \\n[#EPI_WHITESPACE]u-\\n[#DOC_LEAD]u
+.       \}
+.    \}
+.    if \\n[#EPIGRAPH]=1 \{\
+.       po \\n[#L_MARGIN]u
+.       if \\n[#COLUMNS] \{\
+.          po \\n[#COL_\\n[#COL_NUM]_L_MARGIN]u
+.          nr #L_MARGIN \\n[.o]
+.       \}
+.    \}
+.    if \\n[#EPIGRAPH]=2 \{\
+.       ie \\n[#EPI_OFFSET_VALUE] \
+.          nr #EPI_OFFSET \
+\\n[#L_MARGIN]+(\\n[#PP_INDENT]*\\n[#EPI_OFFSET_VALUE])
+.       el .nr #EPI_OFFSET \\n[#L_MARGIN]+\\*[$EPI_OFFSET_VALUE]
+.       if \\n[#COLUMNS] \{\
+.          ie r#EPI_OFFSET_VALUE \
+.             nr #EPI_OFFSET \
+\\n[#COL_\\n[#COL_NUM]_L_MARGIN]+(\\n[#PP_INDENT]*\\n[#EPI_OFFSET_VALUE])
+.          el .nr #EPI_OFFSET \
+\\n[#COL_\\n[#COL_NUM]_L_MARGIN]+\\*[$EPI_OFFSET_VALUE]
+.       \}
+.       po \\n[#EPI_OFFSET]u
+.    \}
+.    nf
+.    EPI_TEXT
+.    br
+.    ie \\n[#START] \{\
+.       if \\n[#PRINT_STYLE]=1 .SHIM
+.       if \\n[#PRINT_STYLE]=2 \{\
+.          if \\n[#EPI_WHITESPACE]<\\n[#DOC_LEAD] \
+.             ALD \\n[#EPI_WHITESPACE]u/2u
+.          if \\n[#EPI_WHITESPACE]>\\n[#DOC_LEAD] \
+.             ALD (\\n[#EPI_WHITESPACE]u/2u)-\\n[#DOC_LEAD]u
+.          SHIM
+.       \}
+.    \}
+.    el \{\
+.       rr #EPI_ACTIVE
+.       ie \\n[#EPI_FITS] \{\
+.          ie \\n[#FN_FOR_EPI] \{\
+.             nr #EPI_LINES_TO_END 1
+.             nr #EPI_WHITESPACE \
+(\\n[#EPI_LINES_TO_END]*\\n[#DOC_LEAD])-(\\n[#EPI_LINES_TO_END]*\\n[#EPI_LEAD])
+.             while \\n[#EPI_WHITESPACE]>\\n[#DOC_LEAD] \{\
+.                nr #EPI_WHITESPACE -\\n[#DOC_LEAD]
+.             \}
+.             ALD \\n[#EPI_WHITESPACE]u-(\\n[#DOC_LEAD]u-\\n[#EPI_LEAD]u)
+.          \}
+.          el \{\
+.             ie \\n[#PRINT_STYLE]=1 \{\
+.                if \\n[#EPI_WHITESPACE]=\\n[#DOC_LEAD] \
+.                   ALD \\n[#EPI_WHITESPACE]u
+.             \}
+.             el \{\
+.                if \\n[#EPI_WHITESPACE]<\\n[#DOC_LEAD] \
+.                   ALD \\n[#EPI_WHITESPACE]u/2u
+.                if \\n[#EPI_WHITESPACE]>\\n[#DOC_LEAD] \
+.                   ALD (\\n[#EPI_WHITESPACE]u/2u)-\\n[#DOC_LEAD]u
+.             \}
+.          \}
+.       \}
+.       el \{\
+.          nr #EPI_LINES_TO_END \\n[#EPI_LINES]-\\n[#EPI_LINES_TO_TRAP]
+.          if \\n[#LOOP] .nr #EPI_LINES_TO_END +1
+.          rr #LOOP
+.          nr #EPI_WHITESPACE \
+(\\n[#EPI_LINES_TO_END]*\\n[#DOC_LEAD])-(\\n[#EPI_LINES_TO_END]*\\n[#EPI_LEAD])
+.          while \\n[#EPI_WHITESPACE]>\\n[#DOC_LEAD] \{\
+.             nr #EPI_WHITESPACE -\\n[#DOC_LEAD]
+.          \}
+.          ALD \\n[#EPI_WHITESPACE]u-(\\n[#DOC_LEAD]u-\\n[#EPI_LEAD]u)
+.          if \\n[#PRINT_STYLE]=1 \{\
+.             if !\\n[#SINGLE_SPACE] \{\
+.                nr #EPI_LINES_EVEN \\n[#EPI_LINES_TO_END]%2
+.                ie \\n[#EPI_LINES_EVEN] .ALD .5v
+.                el .RLD .5v
+.                rr #EPI_LINES_EVEN
+.             \}
+.          \}
+.       \}
+.    \}
+.    nr #PP_STYLE 1
+.    rr #EPI_FITS
+.    ALD \\n[#DOC_LEAD]u
+.    QUAD \\*[$DOC_QUAD]
+.    po \\n[#L_MARGIN]u
+.    if \\n[#COLUMNS] \{\
+.       po \\n[#COL_\\n[#COL_NUM]_L_MARGIN]u
+.       nr #L_MARGIN \\n[.o]
+.    \}
+.    if \\n[#START] \{\
+.       if \\n[#COLUMNS] \{\
+.          po \\n[#COL_\\n[#COL_NUM]_L_MARGIN]u
+.          nr #L_MARGIN \\n[.o]
+.          mk dc
+.       \}
+.    \}
+.    if \\n[#LINENUMBERS]=2 \{\
+.       NUMBER_LINES RESUME
+.       nr #LINENUMBERS 1
+.    \}
+.END
+\#
+\# ====================================================================
+\#
+\# +++FINIS MACRO+++
+\#
+\# FINIS
+\# -----
+\# *Arguments:
+\#   <none>
+\# *Function:
+\#   Deposits --END-- at the end of a document.
+\#
+.MAC FINIS END
+.    if !\\n[@TOP] \{\
+.       if \\n[.t]<=2v \{\
+.          tm1 "[mom]: '\\n[.F]': Insufficient room to print \\$0 on last page.
+.          return
+.       \}
+.    \}
+.    br
+.    ev FINIS
+.    evc 0
+.    if \\n[#TAB_ACTIVE] .TQ
+.    if \\n[#INDENT_ACTIVE] .IQ CLEAR
+.    nr #EM_ADJUST (1m/8)
+.    if \\n[#COLUMNS] \{\
+.       po \\n[#COL_\\n[#COL_NUM]_L_MARGIN]u
+.       nr #L_MARGIN \\n[.o]
+.    \}
+.    ALD \\n[#DOC_LEAD]u
+.    CENTER
+.    if \\n[#FINIS_STRING_CAPS]=1 .CAPS
+.    if \\n[#PRINT_STYLE]=1 \{\
+.       ie !\\n[#FINIS_NO_DASHES] .PRINT "--\\*[$FINIS_STRING]--
+.       el .PRINT "\\*[$FINIS_STRING]
+.    \}
+.    if \\n[#PRINT_STYLE]=2 \{\
+.       if \\n[#FINIS_COLOR]=1 .gcolor \\*[$FINIS_COLOR]
+.       ie !\\n[#FINIS_NO_DASHES] .ds $FINIS_DASH \
+\v'-\\n[#EM_ADJUST]u'\[em]\v'+\\n[#EM_ADJUST]u'
+.       el .rm $FINIS_DASH
+.       PRINT \
+\\*[$FINIS_DASH]\\*[$FINIS_STRING]\\*[$FINIS_DASH]\c
+.    \}
+.    EL
+.    if \\n[#FINIS_COLOR]=1 .gcolor
+.    if \\n[#FINIS_STRING_CAPS]=1 .CAPS OFF
+.    ev
+.    pdfsync
+.END
+\#
+.MAC FINIS_STRING_CAPS END
+.    ie '\\$1'' .nr #FINIS_STRING_CAPS 1
+.    el .nr #FINIS_STRING_CAPS 0
+.END
+.
+.ALIAS FINIS_CAPS FINIS_STRING_CAPS
+\#
+.MAC FINIS_NO_DASHES END
+.    nr #FINIS_NO_DASHES 1
+.END
+\#
+\# ====================================================================
+\#
+\# +++HEADERS/FOOTERS+++
+\#
+\# Define a string so that the current page number can be incorporated
+\# into the strings for hdrftr left, right, and center.  NOTE: This is
+\# not the same thing as using the shortform # in hdrftr strings.
+\#
+.ds PAGE# \En[#PAGENUMBER]
+\#
+.MAC RESTORE_SPACE END
+.   vpt 0
+.   rs
+.   nop \&
+.   sp -1
+.   ch RR_@TOP
+.   rr @TOP
+.   vpt
+.END
+\#
+\# HDRFTR RULE GAP
+\# ---------------
+\# *Argument:
+\#   <amount of space between header/footer and header/footer rule>
+\# *Function:
+\#   Creates or modifies register #HDRFTR_RULE_GAP to hold amount
+\#   of space between header/footer and header/footer rule.
+\# *Notes:
+\#   Default is 4p.
+\#
+.MAC HDRFTR_RULE_GAP END
+.    nr #HDRFTR_RULE_GAP (\\$1)
+.    if '\\$0'HEADER_RULE_GAP' \{\
+.       nr #HEADER_RULE_GAP \\n[#HDRFTR_RULE_GAP]
+.       if r #FOOTER_RULE_GAP .nr #FOOTER_RULE_GAP \\n[#FOOTER_RULE_GAP]
+.    \}
+.    if '\\$0'FOOTER_RULE_GAP' \{\
+.       nr #FOOTER_RULE_GAP \\n[#HDRFTR_RULE_GAP]
+.       if r #HEADER_RULE_GAP .nr #HEADER_RULE_GAP \\n[#HEADER_RULE_GAP]
+.    \}
+.END
+\#
+\# HDRFTR LEFT
+\# -----------
+\# *Argument:
+\#   <what to put in the left position of page header/footers>
+\# *Function:
+\#   Creates or modifies string $HDRFTR_LEFT.
+\#   Creates register #USER_DEF_HDRFTR_LEFT, which, if 1,
+\#   overrides the $HDRFTR_LEFT string created by default
+\#   in DEFAULTS.
+\# *Notes:
+\#   Especially useful if doc has more than one author, and a list
+\#   of authors by last name is desired in header/footers.
+\#   Default is author.
+\#
+\#   If the argument is the # character, simply prints the current
+\#   page number.
+\#
+\#   If the user wants to incorporate the page number into the string,
+\#   \*[PAGE#] must be used.  For example, if the user wants to put
+\#   an elipsis before the page number in the string, s/he should use
+\#   ...\*[PAGE#], not ...#
+\#
+.MAC HDRFTR_LEFT END
+.    nr #USER_DEF_HDRFTR_LEFT 1
+.    ds $HDRFTR_LEFT \\$1
+.END
+\#
+\# HDRFTR <POSITION> CAPS AND SMALLCAPS
+\# ------------------------------------
+\# *Argument:
+\#   <none> | <anything>
+\# *Function:
+\#   Turns capitalisation of $HDRFTR_<POSITION> on or off.
+\# *Notes:
+\#   Default for RIGHT (ie AUTHOR) is on.
+\#
+.MAC CAPS_SMALLCAPS_WARNING END
+.    tm1 "[mom]: At line \\n[.c], both CAPS and SMALLCAPS have been enabled for HEADER_\\$1.
+.    tm1 "       CAPS takes precedence.
+.END
+.
+.MAC _HDRFTR_CAPS END
+.    ds $HDR_FTR \\$0
+.    substring $HDR_FTR 0 5 \" HEADER or FOOTER
+.    ds POSITION \\$0
+.    substring POSITION 7 7
+.    if '\\*[POSITION]'L' .ds POSITION LEFT
+.    if '\\*[POSITION]'C' .ds POSITION CENTER
+.    if '\\*[POSITION]'R' .ds POSITION RIGHT
+.    if \\n[#HDRFTR_\\*[POSITION]_SMALLCAPS]=1 \
+.       CAPS_SMALLCAPS_WARNING \\*[POSITION]
+.    ie '\\$1'' .nr #HDRFTR_\\*[POSITION]_CAPS 1
+.    el \{\
+.       nr #HDRFTR_\\*[POSITION]_CAPS 0
+.       ds $HDRFTR_\\*[POSITION]_SIZE_CHANGE +0
+.    \}
+.END
+.
+.MAC _HDRFTR_SMALLCAPS END
+.    ds $HDR_FTR \\$0
+.    substring $HDR_FTR 0 5 \" HEADER or FOOTER
+.    ds POSITION \\$0
+.    substring POSITION 7 7
+.    if '\\*[POSITION]'L' .ds POSITION LEFT
+.    if '\\*[POSITION]'C' .ds POSITION CENTER
+.    if '\\*[POSITION]'R' .ds POSITION RIGHT
+.    if \\n[#HDRFTR_\\*[POSITION]_CAPS]=1 \{\
+.       CAPS_SMALLCAPS_WARNING \\*[POSITION]
+.    \}
+.    ie '\\$1'' .nr #HDRFTR_\\*[POSITION]_SMALLCAPS 1
+.    el \
+.       nr #HDRFTR_\\*[POSITION]_SMALLCAPS 0
+.END
+\#
+\# HDRFTR CENTER
+\# -------------
+\# *Argument:
+\#   <what to put in the centre position of page header/footers>
+\# *Function:
+\#   Creates or modifies string $HDRFTR_CENTER.
+\#   Creates register #USER_DEF_HDRFTR_CENTER, which, if 1,
+\#   overrides the $HDRFTR_CENTER string created by default
+\#   in COPYSTYLE.
+\# *Notes:
+\#   Default is document type if DOCTYPE NAMED, Chapter # if DOCTYPE
+\#   CHAPTER, draft and revision number if COPYSTYLE DRAFT.
+\#
+\#   If the argument is the # character, simply prints the current
+\#   page number.
+\#
+\#   If the user wants to incorporate the page number into the string,
+\#   \*[PAGE#] must be used.  For example, if the user wants to put
+\#   an elipsis before the page number in the string, s/he should use
+\#   ...\*[PAGE#], not ...#
+\#
+.MAC HDRFTR_CENTER END
+.    nr #USER_DEF_HDRFTR_CENTER 1
+.    if '\\$0'FOOTER_CENTER' \{\
+.       ds $HDRFTR_CENTER_OLD \\*[$HDRFTR_CENTER]
+.       ds $HDRFTR_CENTER_NEW \\$1
+.    \}
+.    if '\\$0'FOOTER_CENTRE' \{\
+.       ds $HDRFTR_CENTER_OLD \\*[$HDRFTR_CENTER]
+.       ds $HDRFTR_CENTER_NEW \\$1
+.    \}
+.    ds $HDRFTR_CENTER \\$1
+.END
+\#
+\# HDRFTR CENTER CAPS AND SMALLCAPS
+\# --------------------------------
+\# *Argument:
+\#   <none> | <anything>
+\# *Function:
+\#   Turns capitalisation of $HDRFTR_CENTER (typically, doctype of
+\#   the document) on or off.
+\# *Notes:
+\#   Default is on.
+\#
+.MAC HDRFTR_CENTER_SMALLCAPS END
+.    if \\n[#HDRFTR_CENTER_SMALLCAPS]=1 \{\
+.       CAPS_SMALLCAPS_WARNING CENTER
+.    \}
+.    ie '\\$1'' .nr #HDRFTR_CENTER_SMALLCAPS 1
+.    el \
+.       nr #HDRFTR_CENTER_SMALLCAPS 0
+.END
+\#
+\# HDRFTR CENTER PADDING
+\# ---------------------
+\# *Argument:
+\#   LEFT | RIGHT <amount of padding to put left or right of hdrftr
+\#   center string>
+\# *Function:
+\#   Creates or modifies registers #HDRFTR_CTR_PAD_LEFT or
+\#   #HDRFTR_CTR_PAD_RIGHT.
+\# *Notes:
+\#   By default, the HDRFTR_CENTER string is centered on the doc
+\#   line length.  Long titles or long author names can screw up
+\#   visual centering, or create overprints.  This macro allows the
+\#   user to pad the center string by the specified amount of space
+\#   to fix these problems.
+\#
+\#   A unit of measure is required.
+\#
+.MAC HDRFTR_CENTER_PAD END
+.    if '\\$1'LEFT'  .nr #HDRFTR_CTR_PAD_LEFT  (\\$2)
+.    if '\\$1'RIGHT' .nr #HDRFTR_CTR_PAD_RIGHT (\\$2)
+.END
+\#
+\# SWITCH HDRFTR CENTER PADDING SIDE (support macro)
+\# -------------------------------------------------
+\# *Argument:
+\#   <none>
+\# *Function:
+\#   Switches the padding side of hdrftr center padding.
+\# *Notes:
+\#   Required to keep spacing around hdrftr string constant
+\#   in recto/verso documents.
+\#
+.MAC SWITCH_HDRFTR_CENTER_PAD END
+.    nr #HDRFTR_CTR_PAD_TMP  \\n[#HDRFTR_CTR_PAD_LEFT]
+.    HDRFTR_CENTER_PAD LEFT  \\n[#HDRFTR_CTR_PAD_RIGHT]u
+.    HDRFTR_CENTER_PAD RIGHT \\n[#HDRFTR_CTR_PAD_TMP]u
+.END
+\#
+\# HDRFTR RIGHT
+\# ------------
+\# *Argument:
+\#   <what to put in the right position of page header/footers>
+\# *Function:
+\#   Creates or modifies string $HDRFTR_RIGHT.
+\#   Creates register #USER_DEF_HDRFTR_RIGHT, which, if 1,
+\#   overrides the $HDRFTR_RIGHT string created by default
+\#   in DEFAULTS.
+\# *Notes:
+\#   Default is document title.
+\#
+\#   If the argument is the # character, simply prints the current
+\#   page number.
+\#
+\#   If the user wants to incorporate the page number into the string,
+\#   \*[PAGE#] must be used.  For example, if the user wants to put
+\#   an elipsis before the page number in the string, s/he should use
+\#   ...\*[PAGE#], not ...#
+\#
+.MAC HDRFTR_RIGHT END
+.    nr #USER_DEF_HDRFTR_RIGHT 1
+.    ds $HDRFTR_RIGHT \\$1
+.END
+\#
+\# HDRFTR RIGHT CAPS AND SMALLCAPS
+\# -------------------------------
+\# *Argument:
+\#   <none> | <anything>
+\# *Function:
+\#   Turns capitalisation of $HDRFTR_RIGHT (typically, the title of
+\#   the document) on or off.
+\# *Notes:
+\#   Default is on.
+\#
+.MAC HDRFTR_RIGHT_SMALLCAPS END
+.    if \\n[#HDRFTR_RIGHT_SMALLCAPS]=1 \{\
+.       CAPS_SMALLCAPS_WARNING RIGHT
+.    \}
+.    ie '\\$1'' .nr #HDRFTR_RIGHT_SMALLCAPS 1
+.    el \
+.       nr #HDRFTR_RIGHT_SMALLCAPS 0
+.END
+\#
+\# HDRFTR RULE
+\# -----------
+\# *Arguments:
+\#   <none> | <anything>
+\# *Function:
+\#   If invoked via the alias HDRFTR_RULE_INTERNAL in HDRFTR, prints a rule
+\#   under the header/over the footer.  Otherwise, turns HDRFTR_RULE
+\#   on or off.
+\#
+.MAC HDRFTR_RULE END
+.    if r #HEADERS_ON \
+.       if \\n[#HEADERS_ON]=1 .nr #HDRFTR_RULE_GAP \\n[#HEADER_RULE_GAP]
+.    if r #FOOTERS_ON \
+.       if \\n[#FOOTERS_ON]=1 .nr #HDRFTR_RULE_GAP \\n[#FOOTER_RULE_GAP]
+.    if '\\$0'HDRFTR_RULE_INTERNAL' \{\
+.       ie \\n[#USERDEF_HDRFTR] \{\
+.          nr #CAP_HEIGHT_ADJUST \\n[#HDRFTR_HEIGHT]
+.          if \\n[#HEADERS_ON] \{\
+.             rt \\n[y]u
+.             ALD \\n[#HDRFTR_RULE_GAP]u
+.             nr #HDRFTR_RULE_WEIGHT \\n[#HEADER_RULE_WEIGHT]
+.             nr #HDRFTR_RULE_WEIGHT_ADJ \\n[#HEADER_RULE_WEIGHT_ADJ]
+.          \}
+.          if \\n[#FOOTERS_ON] \{\
+.             rt \\n[y]u
+.             RLD \
+\\n[#HDRFTR_RULE_GAP]u+\\n[#CAP_HEIGHT_ADJUST]u+\\n[#FOOTER_RULE_WEIGHT]u
+.             nr #HDRFTR_RULE_WEIGHT \\n[#FOOTER_RULE_WEIGHT]
+.             nr #HDRFTR_RULE_WEIGHT_ADJ \\n[#FOOTER_RULE_WEIGHT_ADJ]
+.          \}
+.          ie \\n[#HDRFTR_RULE_COLOR]=1 \{\
+\m[\\*[$HDRFTR_RULE_COLOR]]\
+\D't \\n[#HDRFTR_RULE_WEIGHT]u'\
+\h'|0'\
+\v'+\\n[#HDRFTR_RULE_WEIGHT_ADJ]u'\
+\D'l \\n[#DOC_L_LENGTH]u 0'\
+\D't \\n[#RULE_WEIGHT]u'\
+\h'-\\n[#RULE_WEIGHT]u'\
+\m[]
+.          \}
+.          el \{\
+\D't \\n[#HDRFTR_RULE_WEIGHT]u'\
+\h'|0'\
+\v'+\\n[#HDRFTR_RULE_WEIGHT_ADJ]u'\
+\D'l \\n[#DOC_L_LENGTH]u 0'\
+\D't \\n[#RULE_WEIGHT]u'\
+\h'-\\n[#RULE_WEIGHT]u'
+.          \}
+.          br
+.       \}
+.       el \{\
+.          if \\n[#PRINT_STYLE]=1 .nr #CAP_HEIGHT_ADJUST \\n[#CAP_HEIGHT]
+.          if \\n[#PRINT_STYLE]=2 \{\
+.             ie \\n[#LEFT_CAP_HEIGHT]>\\n[#CENTER_CAP_HEIGHT] \
+.                nr #CAP_HEIGHT_ADJUST \\n[#LEFT_CAP_HEIGHT]
+.             el .nr #CAP_HEIGHT_ADJUST \\n[#CENTER_CAP_HEIGHT]
+.             ie \\n[#CAP_HEIGHT_ADJUST]>\\n[#RIGHT_CAP_HEIGHT] \
+.                nr #CAP_HEIGHT_ADJUST \\n[#CAP_HEIGHT_ADJUST]
+.             el .nr #CAP_HEIGHT_ADJUST \\n[#RIGHT_CAP_HEIGHT]
+.          \}
+.          if \\n[#HEADERS_ON] \{\
+.             rt \\n[y]u
+.             ALD \\n[#HDRFTR_RULE_GAP]u
+.             nr #HDRFTR_RULE_WEIGHT \\n[#HEADER_RULE_WEIGHT]
+.             nr #HDRFTR_RULE_WEIGHT_ADJ \\n[#HEADER_RULE_WEIGHT_ADJ]
+.          \}
+.          if \\n[#FOOTERS_ON] \{\
+.             rt \\n[y]u
+.             RLD \
+\\n[#HDRFTR_RULE_GAP]u+\\n[#CAP_HEIGHT_ADJUST]u+\\n[#FOOTER_RULE_WEIGHT]u
+.             nr #HDRFTR_RULE_WEIGHT \\n[#FOOTER_RULE_WEIGHT]
+.             nr #HDRFTR_RULE_WEIGHT_ADJ \\n[#FOOTER_RULE_WEIGHT_ADJ]
+.          \}
+.          ie \\n[#HDRFTR_RULE_COLOR]=1 \{\
+\m[\\*[$HDRFTR_RULE_COLOR]]\
+\D't \\n[#HDRFTR_RULE_WEIGHT]u'\
+\h'|0'\
+\v'+\\n[#HDRFTR_RULE_WEIGHT_ADJ]u'\
+\D'l \\n[#DOC_L_LENGTH]u 0'\
+\D't \\n[#RULE_WEIGHT]u'\
+\h'-\\n[#RULE_WEIGHT]u'\
+\m[]
+.          \}
+.          el \{\
+\D't \\n[#HDRFTR_RULE_WEIGHT]u'\
+\h'|0'\
+\v'+\\n[#HDRFTR_RULE_WEIGHT_ADJ]u'\
+\D'l \\n[#DOC_L_LENGTH]u 0'\
+\D't \\n[#RULE_WEIGHT]u'\
+\h'-\\n[#RULE_WEIGHT]u'
+.          \}
+.          br
+.       \}
+.    \}
+.    if '\\$0'HEADER_RULE' \{\
+.       ie '\\$1'' \{\
+.          nr #HEADER_RULE 1
+.          nr #HDRFTR_RULE 1
+.       \}
+.       el \{\
+.          nr #HEADER_RULE 0
+.          nr #HDRFTR_RULE 0
+.       \}
+.    \}
+.    if '\\$0'FOOTER_RULE' \{\
+.       ie '\\$1'' \{\
+.          nr #FOOTER_RULE 1
+.          nr #HDRFTR_RULE 1
+.       \}
+.       el \{\
+.          nr #FOOTER_RULE 0
+.          nr #HDRFTR_RULE 0
+.       \}
+.    \}
+.    if '\\$0'HDRFTR_RULE' \{\
+.       ie '\\$1'' .nr #HDRFTR_RULE 1
+.       el .nr #HDRFTR_RULE 0
+.    \}
+.END
+.
+.ALIAS HDRFTR_RULE_INTERNAL HDRFTR_RULE
+\#
+\# HDRFTR PLAIN
+\# ------------
+\# *Arguments:
+\#   <none>
+\# *Function:
+\#   Sets the family, font, and point size of all strings in
+\#   header/footers to the same family and point size as running
+\#   text.  Font for the header/footer becomes roman throughout.
+\#
+.MAC HDRFTR_PLAIN END
+.    nr #HDRFTR_PLAIN 1
+.    rm $HDRFTR_FAMILY
+.    rm #HDRFTR_PT_SIZE
+.    rm $HDRFTR_COLOR
+.    rm $HDRFTR_LEFT_FAMILY
+.    rm $HDRFTR_LEFT_FONT
+.    rm $HDRFTR_LEFT_SIZE_CHANGE
+.    rr #HDRFTR_LEFT_CAPS
+.    rr #HDRFTR_LEFT_SMALLCAPS
+.    rr #HDRFTR_LEFT_COLOR
+.    rm $HDRFTR_CENTER_FAMILY
+.    rm $HDRFTR_CENTER_FONT
+.    rm $HDRFTR_CENTER_SIZE_CHANGE
+.    rr #HDRFTR_CENTER_CAPS
+.    rr #HDRFTR_CENTER_SMALLCAPS
+.    rr #HDRFTR_CENTER_COLOR
+.    rm $HDRFTR_RIGHT_FAMILY
+.    rm $HDRFTR_RIGHT_FONT
+.    rm $HDRFTR_RIGHT_SIZE_CHANGE
+.    rr #HDRFTR_RIGHT_CAPS
+.    rr #HDRFTR_RIGHT_SMALLCAPS
+.    rr #HDRFTR_RIGHT_COLOR
+.END
+\#
+\# SWITCH HDRFTR
+\# -------------
+\# *Arguments:
+\#   <none> | <anything>
+\# *Function:
+\#   Creates or modifies register #SWITCH_HDRFTR, used to switch
+\#   default location of HDRFTR_LEFT and HDRFTR_RIGHT.
+\# *Notes:
+\#   Default is OFF.
+\#
+\# Typically, the author string appears at the left of header/footers,
+\# and the title string appears at the right.  This switches the
+\# location of the two.  Useful in conjunction with RECTO_VERSO to tweak
+\# switches on alternate pages to come out as the user wishes.  The
+\# assumption of RECTO_VERSO is that the first page of the document
+\# (recto) is odd, and even though it has no header/footer, if it did
+\# have one, it would print as AUTHOR...CENTER...TITLE (or whatever
+\# strings the user has supplied for HDRFTR_LEFT/RIGHT), meaning that
+\# the next page, which does have a header/footer, will come out as
+\# TITLE...CENTER...AUTHOR (or whatever strings the user has supplied
+\# for HDRFTR_LEFT/RIGHT).  SWITCH_HDRFTRS allows the user to get the
+\# desired string in the desired place on the desired recto/verso page.
+\#
+.MAC SWITCH_HDRFTR END
+.    ie '\\$1'' .nr #SWITCH_HDRFTR 1
+.    el .nr #SWITCH_HDRFTR 0
+.END
+\#
+\# USER DEFINED HDRFTR RECTO
+\# -------------------------
+\# *Arguments:
+\#   L | LEFT | C | CENTER | CENTER | R | RIGHT <hdrftr_recto_string>
+\# *Function:
+\#   Toggles #USERDEF_HDRFTR on, stores quad as #USERDEF_HDRFTR_RECTO_QUAD,
+\#   stores string in $USERDEF_HDRFTR_RECTO.
+\# *Notes:
+\#   For use when users don't want 3-part headers/footers, but rather
+\#   want to design their own headers/footers and need different
+\#   headers/footers on recto and verso pages.  Using just
+\#   HEADER_RECTO, even when recto/verso is not on, allows users to
+\#   design their own headers/footers for doc pages.
+\#
+.MAC HDRFTR_RECTO END
+.    nr #USERDEF_HDRFTR 1
+.    if '\\$1'L'      .nr #USERDEF_HDRFTR_RECTO_QUAD 1
+.    if '\\$1'LEFT'   .nr #USERDEF_HDRFTR_RECTO_QUAD 1
+.    if '\\$1'C'      .nr #USERDEF_HDRFTR_RECTO_QUAD 2
+.    if '\\$1'CENTER' .nr #USERDEF_HDRFTR_RECTO_QUAD 2
+.    if '\\$1'CENTRE' .nr #USERDEF_HDRFTR_RECTO_QUAD 2
+.    if '\\$1'R'      .nr #USERDEF_HDRFTR_RECTO_QUAD 3
+.    if '\\$1'RIGHT'  .nr #USERDEF_HDRFTR_RECTO_QUAD 3
+.    shift
+.    ie '\\$1'CAPS' \{\
+.       nr #HDRFTR_RECTO_CAPS 1
+.       ds $USERDEF_HDRFTR_RECTO \\$2
+.    \}
+.    el .ds $USERDEF_HDRFTR_RECTO \\$1
+.END
+\#
+\# USER DEFINED HDRFTR VERSO
+\# -------------------------
+\# *Arguments:
+\#   L | LEFT | C | CENTER | CENTER | R | RIGHT <hdrftr_verso_string>
+\# *Function:
+\#   Toggles #USERDEF_HDRFTR on, stores quad as #USERDEF_HDRFTR_VERSO_QUAD,
+\#   stores string in $USERDEF_HDRFTR_VERSO.
+\# *Notes:
+\#   For use when users don't want 3-part headers/footers, but rather
+\#   want to design their own headers/footers and need different
+\#   headers/footers on recto and verso pages.
+\#
+.MAC HDRFTR_VERSO END
+.    nr #USERDEF_HDRFTR 1
+.    if '\\$1'L'      .nr #USERDEF_HDRFTR_VERSO_QUAD 1
+.    if '\\$1'LEFT'   .nr #USERDEF_HDRFTR_VERSO_QUAD 1
+.    if '\\$1'C'      .nr #USERDEF_HDRFTR_VERSO_QUAD 2
+.    if '\\$1'CENTER' .nr #USERDEF_HDRFTR_VERSO_QUAD 2
+.    if '\\$1'CENTRE' .nr #USERDEF_HDRFTR_VERSO_QUAD 2
+.    if '\\$1'R'      .nr #USERDEF_HDRFTR_VERSO_QUAD 3
+.    if '\\$1'RIGHT'  .nr #USERDEF_HDRFTR_VERSO_QUAD 3
+.    shift
+.    ie '\\$1'CAPS' \{\
+.       nr #HDRFTR_VERSO_CAPS 1
+.       ds $USERDEF_HDRFTR_VERSO \\$2
+.    \}
+.    el .ds $USERDEF_HDRFTR_VERSO \\$1
+.END
+\#
+\# PRINT FOOTER ON FIRST PAGE
+\# --------------------------
+\# *Arguments:
+\#   <none> | <anything>
+\# *Function:
+\#   Toggles register #PRINT_FOOTER_ON_PAGE_1
+\# *Notes:
+\#   Lets user choose whether to print footer on first
+\#   page of doc.
+\#
+.MAC FOOTER_ON_FIRST_PAGE END
+.    ie '\\$1'' .nr #PRINT_FOOTER_ON_PAGE_1 1
+.    el .rr #PRINT_FOOTER_ON_PAGE_1
+.END
+\#
+\# PRINT PAGE NUMBER ON FIRST PAGE
+\# -------------------------------
+\# *Arguments:
+\#   <none> | <anything>
+\# *Function:
+\#   Toggles register #PRINT_PAGENUM_ON_PAGE_1
+\# *Notes:
+\#   Lets user choose whether to print page number on first
+\#   page of doc and after collate when footers are on or page numbering
+\#   has been user set at top of page.
+\#
+.MAC PAGENUM_ON_FIRST_PAGE END
+.    ie '\\$1'' .nr #PRINT_PAGENUM_ON_PAGE_1 1
+.    el .rr #PRINT_PAGENUM_ON_PAGE_1
+.END
+\#
+\# PRINT HEADER/FOOTER
+\# -------------------
+\# *Arguments:
+\#   <none>
+\# *Function:
+\#   Based on defaults or values entered by user, prints a
+\#   three-part title at either the top or the bottom of the page.
+\# *Notes:
+\#   Called from within either HEADER or FOOTER.
+\#
+.MAC PRINT_HDRFTR END
+.    if \\n[#DOC_TYPE]=4 .nr #SUITE \En[.pn]
+.    if \\n[#FOOTERS_ON] \{\
+.       if \\n[#START_FOR_FOOTERS] \{\
+.          rr #START_FOR_FOOTERS
+.          if !\\n[#PRINT_FOOTER_ON_PAGE_1] \{\
+.             ie !\\n[#HDRFTR_BOTH] .return
+.             el \{\
+.                rr #FOOTERS_ON
+.                nr #HEADERS_ON 1
+.                ie \\n[#HEADER_RULE]=1 .HEADER_RULE
+.                el .HEADER_RULE OFF
+.                ie \\n[#HDRFTR_BOTH] .HEADER_VERSO \\*[$HDR_VERSO_QUAD] "\\*[$HDR_VERSO_STRING]"
+.                el .HEADER_RECTO \\*[$HDR_RECTO_QUAD] "\\*[$HDR_RECTO_STRING]"
+.                return
+.             \}
+.          \}
+.       \}
+.    \}
+.    if \\n[#USERDEF_HDRFTR] \{\
+.       PRINT_USERDEF_HDRFTR
+.       return
+.    \}
+.    if \\n[#SWITCH_HDRFTR] \{\
+.       ds $HDRFTR_TMP_SWITCH             \\*[$HDRFTR_LEFT]
+.       ds $HDRFTR_LEFT                   \\*[$HDRFTR_RIGHT]
+.       ds $HDRFTR_RIGHT                  \\*[$HDRFTR_TMP_SWITCH]
+.       ds $HDRFTR_TMP_SIZE_CHANGE_SWITCH \\*[$HDRFTR_LEFT_SIZE_CHANGE]
+.       ds $HDRFTR_LEFT_SIZE_CHANGE       \\*[$HDRFTR_RIGHT_SIZE_CHANGE]
+.       ds $HDRFTR_RIGHT_SIZE_CHANGE      \\*[$HDRFTR_TMP_SIZE_CHANGE_SWITCH]
+.       nr #HDRFTR_TMP_CAPS_SWITCH        \\n[#HDRFTR_LEFT_CAPS]
+.       nr #HDRFTR_LEFT_CAPS              \\n[#HDRFTR_RIGHT_CAPS]
+.       nr #HDRFTR_TMP_SMALLCAPS_SWITCH   \\n[#HDRFTR_LEFT_SMALLCAPS]
+.       nr #HDRFTR_LEFT_SMALLCAPS         \\n[#HDRFTR_RIGHT_SMALLCAPS]
+.       nr #HDRFTR_RIGHT_CAPS             \\n[#HDRFTR_TMP_CAPS_SWITCH]
+.       ds $HDRFTR_TMP_COLOR_SWITCH       \\*[$HDRFTR_LEFT_COLOR]
+.       ds $HDRFTR_LEFT_COLOR             \\*[$HDRFTR_RIGHT_COLOR]
+.       ds $HDRFTR_RIGHT_COLOR            \\*[$HDRFTR_TMP_COLOR_SWITCH]
+.       rr #HDRFTR_TMP_CAPS_SWITCH
+.       rm $HDRFTR_TMP_SWITCH
+.       rm $HDRFTR_TMP_SIZE_CHANGE_SWITCH
+.       rm $HDRFTR_TMP_COLOR_SWITCH
+.       nr #SWITCH_HDRFTR 0
+.    \}
+.    nr #PAGENUMBER \\n%+\\n[#PAGE_NUM_ADJ]
+.    if \\n[#ENDNOTES] .PAGENUM_STYLE \\*[$EN_PN_STYLE]
+.    if \\n[#PRINT_STYLE]=1 \{\
+.       if \\n[#FOOTERS_ON] \{\
+.          di NULL
+.          SIZESPECS
+.          nr #LEFT_CAP_HEIGHT \\n[#CAP_HEIGHT]
+.          di
+.       \}
+.       if o .RIGHT
+.       if e .LEFT
+.       if \\n[#RECTO_VERSO]=0 .LEFT
+.       if \\n[#HDRFTR_LEFT_CAPS] .CAPS
+.       ie '\\*[$HDRFTR_LEFT]'#' .PRINT \\n[#PAGENUMBER]
+.       el \{\
+.          ie !'\\*[$HDRFTR_LEFT]'' .PRINT \\*[$HDRFTR_LEFT]
+.          el .PRINT \&
+.       \}
+.       if \\n[#HDRFTR_LEFT_CAPS] .CAPS OFF
+.       CENTER
+.       if \\n[#HDRFTR_CENTER_CAPS] .CAPS
+.       rt \\n[y]u
+.       ie '\\*[$HDRFTR_CENTER]'#' .PRINT \
+\h'\\n[#HDRFTR_CTR_PAD_LEFT]u'\\n[#PAGENUMBER]\h'\\n[#HDRFTR_CTR_PAD_RIGHT]u'
+.       el \{\
+.          ie !'\\*[$HDRFTR_CENTER]'' .PRINT \
+\h'\\n[#HDRFTR_CTR_PAD_LEFT]u'\\*[$HDRFTR_CENTER]\h'\\n[#HDRFTR_CTR_PAD_RIGHT]u'
+.          el .PRINT \&
+.       \}
+.       if \\n[#HDRFTR_CENTER_CAPS] .CAPS OFF
+.       if o .LEFT
+.       if e .RIGHT
+.       if \\n[#RECTO_VERSO]=0 .RIGHT
+.       if \\n[#HDRFTR_RIGHT_CAPS] .CAPS
+.       rt \\n[y]u
+.       ie '\\*[$HDRFTR_RIGHT]'#' .PRINT \\n[#PAGENUMBER]
+.       el \{\
+.          ie !'\\*[$HDRFTR_RIGHT]'' .PRINT \\*[$HDRFTR_RIGHT]
+.          el .PRINT \&
+.       \}
+.       if \\n[#HDRFTR_RIGHT_CAPS] .CAPS OFF
+.    \}
+.    if \\n[#PRINT_STYLE]=2 \{\
+.       if \\n[#HDRFTR_COLOR]=1 \{\
+.          nf
+\m[\\*[$HDRFTR_COLOR]]
+.       \}
+.       fam \\*[$HDRFTR_LEFT_FAM]
+.       ft  \\*[$HDRFTR_LEFT_FT]
+.       ps  \\n[#HDRFTR_PT_SIZE]u\\*[$HDRFTR_LEFT_SIZE_CHANGE]
+.       if \\n[#FOOTERS_ON] \{\
+.          di NULL
+.          SIZESPECS
+.          nr #LEFT_CAP_HEIGHT \\n[#CAP_HEIGHT]
+.          di
+.       \}
+.       if o .LEFT
+.       if e .RIGHT
+.       if \\n[#RECTO_VERSO]=0 .LEFT
+.       if \\n[#HDRFTR_LEFT_SMALLCAPS] .SMALLCAPS
+.       if \\n[#HDRFTR_LEFT_CAPS] .CAPS
+.       ie '\\*[$HDRFTR_LEFT]'#' \{\
+.          ie \\n[#HDRFTR_LEFT_COLOR]=1 \
+.             PRINT \m[\\*[$HDRFTR_LEFT_COLOR]]\\n[#PAGENUMBER]\m[]
+.          el \
+.             PRINT \\n[#PAGENUMBER]
+.       \}
+.       el \{\
+.          ie !'\\*[$HDRFTR_LEFT]'' \{\
+.             ie \\n[#HDRFTR_LEFT_COLOR]=1 \
+.                PRINT \m[\\*[$HDRFTR_LEFT_COLOR]]\\*[$HDRFTR_LEFT]\m[]
+.             el \
+.                PRINT \\*[$HDRFTR_LEFT]
+.          \}
+.          el .nop \&
+.       \}
+.       if \\n[#HDRFTR_LEFT_CAPS] .CAPS OFF
+.       if \\n[#HDRFTR_LEFT_SMALLCAPS] .SMALLCAPS OFF
+.       fam     \\*[$HDRFTR_CENTER_FAM]
+.       ft      \\*[$HDRFTR_CENTER_FT]
+.       ps      \\n[#HDRFTR_PT_SIZE]u\\*[$HDRFTR_CENTER_SIZE_CHANGE]
+.       if \\n[#FOOTERS_ON] \{\
+.          di NULL
+.          SIZESPECS
+.          nr #CENTER_CAP_HEIGHT \\n[#CAP_HEIGHT]
+.          di
+.       \}
+.       CENTER
+.       if \\n[#HDRFTR_CENTER_SMALLCAPS] .SMALLCAPS
+.       if \\n[#HDRFTR_CENTER_CAPS] .CAPS
+.       rt \\n[y]u
+.       ie '\\*[$HDRFTR_CENTER]'#' \{\
+.          ie \\n[#HDRFTR_CENTER_COLOR]=1 .PRINT \
+\h'\\n[#HDRFTR_CTR_PAD_LEFT]u'\m[\\*[$HDRFTR_CENTER_COLOR]]\
+\\n[#PAGENUMBER]\h'\\n[#HDRFTR_CTR_PAD_RIGHT]u'\m[]
+.          el .PRINT \
+\h'\\n[#HDRFTR_CTR_PAD_LEFT]u'\\n[#PAGENUMBER]\h'\\n[#HDRFTR_CTR_PAD_RIGHT]u'
+.       \}
+.       el \{\
+.          ie !'\\*[$HDRFTR_CENTER]'' \{\
+.             ie \\n[#HDRFTR_CENTER_COLOR]=1 .PRINT \
+\h'\\n[#HDRFTR_CTR_PAD_LEFT]u'\m[\\*[$HDRFTR_CENTER_COLOR]]\
+\\*[$HDRFTR_CENTER]\h'\\n[#HDRFTR_CTR_PAD_RIGHT]u'\m[]
+.             el .PRINT \
+\h'\\n[#HDRFTR_CTR_PAD_LEFT]u'\\*[$HDRFTR_CENTER]\h'\\n[#HDRFTR_CTR_PAD_RIGHT]u'
+.          \}
+.          el .PRINT \&
+.       \}
+.       if \\n[#HDRFTR_CENTER_CAPS] .CAPS OFF
+.       if \\n[#HDRFTR_CENTER_SMALLCAPS] .SMALLCAPS OFF
+.       fam \\*[$HDRFTR_RIGHT_FAM]
+.       ft  \\*[$HDRFTR_RIGHT_FT]
+.       ps  \\n[#HDRFTR_PT_SIZE]u\\*[$HDRFTR_RIGHT_SIZE_CHANGE]
+.       if \\n[#FOOTERS_ON] \{\
+.          di NULL
+.          SIZESPECS
+.          nr #RIGHT_CAP_HEIGHT \\n[#CAP_HEIGHT]
+.          di
+.       \}
+.       if o .RIGHT
+.       if e .LEFT
+.       if \\n[#RECTO_VERSO]=0 .RIGHT
+.       if \\n[#HDRFTR_RIGHT_SMALLCAPS] .SMALLCAPS
+.       if \\n[#HDRFTR_RIGHT_CAPS] .CAPS
+.       rt \\n[y]u
+.       ie '\\*[$HDRFTR_RIGHT]'#' \{\
+.          ie \\n[#HDRFTR_RIGHT_COLOR]=1 \
+.             PRINT \m[\\*[$HDRFTR_RIGHT_COLOR]]\\n[#PAGENUMBER]\m[]
+.          el \
+.             PRINT \\n[#PAGENUMBER]
+.       \}
+.       el \{\
+.          ie !'\\*[$HDRFTR_RIGHT]'' \{\
+.             ie \\n[#HDRFTR_RIGHT_COLOR]=1 \
+.                PRINT \m[\\*[$HDRFTR_RIGHT_COLOR]]\\*[$HDRFTR_RIGHT]\m[]
+.             el \
+.                PRINT \\*[$HDRFTR_RIGHT]
+.          \}
+.          el .PRINT \&
+.       \}
+.       if \\n[#HDRFTR_RIGHT_CAPS] .CAPS OFF
+.       if \\n[#HDRFTR_RIGHT_SMALLCAPS] .SMALLCAPS OFF
+.    \}
+.    if \\n[#HDRFTR_RULE] .HDRFTR_RULE_INTERNAL
+.    br
+.END
+\#
+\# PRINT USER DEFINED HEADER/FOOTER
+\# --------------------------------
+\# *Arguments:
+\#   <none>
+\# *Function:
+\#   Based on defaults or values entered by user, prints a single part
+\#   (i.e. not 3-part) title at either the top or the bottom of the page.
+\# *Notes:
+\#   Called from within PRINT_HDRFTR.
+\#
+.MAC PRINT_USERDEF_HDRFTR END
+.    nr #PAGENUMBER \\n%+\\n[#PAGE_NUM_ADJ]
+.    fc ^ #
+.    if \\n[#PRINT_STYLE]=2 \{\
+.       fam \\*[$HDRFTR_FAM]
+.       ft  R
+.       ps \\n[#HDRFTR_PT_SIZE]u
+.       if \\n[#HDRFTR_COLOR]=1 \{\
+.          nf
+.          COLOR \\*[$HDRFTR_COLOR]
+.       \}
+.    \}
+.    ie \\n[#RECTO_VERSO] \{\
+.       if o \{\
+.          if \\n[#USERDEF_HDRFTR_RECTO_QUAD]=1 .LEFT
+.          if \\n[#USERDEF_HDRFTR_RECTO_QUAD]=2 .CENTER
+.          if \\n[#USERDEF_HDRFTR_RECTO_QUAD]=3 .RIGHT
+.          if \\n[#HDRFTR_RECTO_CAPS]=1 .CAPS
+.          if '\\n[.ev]'FOOTER' .vs 0
+.          PRINT \\*[$USERDEF_HDRFTR_RECTO]
+.          if '\\n[.ev]'FOOTER' .vs
+.          if \\n[#HDRFTR_RECTO_CAPS]=1 .CAPS OFF
+.          EOL
+.          if \\n[#FOOTERS_ON] \{\
+.             di NULL
+.             SIZESPECS
+.             nr #HDRFTR_HEIGHT \\n[#CAP_HEIGHT]
+.             di
+.          \}
+.       \}
+.       if e \{\
+.          ie !'\\*[$USERDEF_HDRFTR_VERSO]'' \{\
+.             if \\n[#USERDEF_HDRFTR_VERSO_QUAD]=1 .LEFT
+.             if \\n[#USERDEF_HDRFTR_VERSO_QUAD]=2 .CENTER
+.             if \\n[#USERDEF_HDRFTR_VERSO_QUAD]=3 .RIGHT
+.             if \\n[#HDRFTR_VERSO_CAPS]=1 .CAPS
+.             if '\\n[.ev]'FOOTER' .vs 0
+.             PRINT \\*[$USERDEF_HDRFTR_VERSO]
+.             if '\\n[.ev]'FOOTER' .vs
+.             if \\n[#HDRFTR_VERSO_CAPS]=1 .CAPS OFF
+.             EOL
+.             if \\n[#FOOTERS_ON] \{\
+.                di NULL
+.                SIZESPECS
+.                nr #HDRFTR_HEIGHT \\n[#CAP_HEIGHT]
+.                di
+.             \}
+.          \}
+.          el \{\
+.             if \\n[#USERDEF_HDRFTR_RECTO_QUAD]=1 .LEFT
+.             if \\n[#USERDEF_HDRFTR_RECTO_QUAD]=2 .CENTER
+.             if \\n[#USERDEF_HDRFTR_RECTO_QUAD]=3 .RIGHT
+.             if \\n[#HDRFTR_RECTO_CAPS]=1 .CAPS
+.             if '\\n[.ev]'FOOTER' .vs 0
+.             PRINT \\*[$USERDEF_HDRFTR_RECTO]
+.             if '\\n[.ev]'FOOTER' .vs
+.             if \\n[#HDRFTR_RECTO_CAPS]=1 .CAPS OFF
+.             EOL
+.             if \\n[#FOOTERS_ON] \{\
+.                di NULL
+.                SIZESPECS
+.                nr #HDRFTR_HEIGHT \\n[#CAP_HEIGHT]
+.                di
+.             \}
+.          \}
+.       \}
+.    \}
+.    el \{\
+.       if \\n[#USERDEF_HDRFTR_RECTO_QUAD]=1 .LEFT
+.       if \\n[#USERDEF_HDRFTR_RECTO_QUAD]=2 .CENTER
+.       if \\n[#USERDEF_HDRFTR_RECTO_QUAD]=3 .RIGHT
+.       if \\n[#HDRFTR_RECTO_CAPS]=1 .CAPS
+.       if '\\n[.ev]'FOOTER' .vs 0
+.       PRINT \\*[$USERDEF_HDRFTR_RECTO]
+.       if '\\n[.ev]'FOOTER' .vs
+.       if \\n[#HDRFTR_RECTO_CAPS]=1 .CAPS OFF
+.       EOL
+.       if \\n[#FOOTERS_ON] \{\
+.          di NULL
+.          SIZESPECS
+.          nr #HDRFTR_HEIGHT \\n[#CAP_HEIGHT]
+.          di
+.       \}
+.    \}
+.    fc
+.    if \\n[#PRINT_STYLE]=2 \{\
+.       ie \\n[#HDRFTR_COLOR]=1 \m[\\*[$HDRFTR_COLOR]]
+.       el \m[black]
+.    \}
+.    if \\n[#HDRFTR_RULE] \{\
+.       HDRFTR_RULE_INTERNAL
+.    \}
+.END
+\#
+\# +++HEADERS+++
+\#
+\# HEADERS (off or on)
+\# -------------------
+\# *Arguments:
+\#   <none> | <anything>
+\# *Function:
+\#   Turns headers at the top of the page off or on.
+\# *Notes:
+\#   Default is on.
+\#
+.MAC HEADERS END
+.    ie '\\$1'' .nr #HEADERS_ON 1
+.    el .nr #HEADERS_ON 0
+.END
+\#
+\# HEADER MARGIN
+\# -------------
+\# *Argument:
+\#   <amount of space between top of page and header>
+\# *Function:
+\#   Creates or modifies register #HEADER_MARGIN to hold amount
+\#   of space between top of page and header.
+\# *Notes:
+\#   Requires unit of measure.  Default is 4P+6p, measured top-of-page
+\#   to baseline.
+\#
+.MAC HEADER_MARGIN END
+.    nr #HEADER_MARGIN (\\$1)
+.END
+\#
+\# HEADER GAP
+\# ----------
+\# *Argument:
+\#   <amount of space between header and running text>
+\# *Function:
+\#   Creates or modifies register #HEADER_GAP to hold amount
+\#   of space between header and running text.
+\# *Notes:
+\#   Default is 1P+6p.
+\#
+.MAC HEADER_GAP END
+.    nr #HEADER_GAP (\\$1)
+.END
+\#
+\# HEADER
+\# ------
+\# *Arguments:
+\#   <none>
+\# *Function:
+\#   Prints header appropriate to DOC_TYPE, PRINTSTYLE, and COPYSTYLE.
+\# *Notes:
+\#   In order to convert the title string to caps in the header
+\#   (in the event that the user enters .TITLE in caps/lc), I've
+\#   used quad left, quad centre, and quad right to arrange the
+\#   three bits of the header, rather than .tl.  This allows the
+\#   use of the CAPS macro.  The downside is that I have to add
+\#   \\v'-(\\n[#LEAD]u*<n>) in order for -Tlatin1 output to align
+\#   the header/footer strings on the baseline.  The console output
+\#   still isn't brilliant, but at least it's comprehensible.
+\#
+.MAC HEADER END
+.    vpt 0
+.    if \\n[#NEW_DOC_PT_SIZE] .nr #DOC_PT_SIZE \\n[#NEW_DOC_PT_SIZE]
+.    rr #NEW_DOC_PT_SIZE
+.    if \\n[#RESET_TRAPS] \{\
+.       TRAPS
+.       if \\n[#REMOVE_ADJ] .nr #DOC_LEAD -\\n[#DOC_LEAD_ADJ]
+.    \}
+.    rr #REMOVE_ADJ
+.    rr #RESET_TRAPS
+.    MNtop
+.    rr #FROM_FOOTER
+.    nr #FROM_HEADER 1
+.    nr #LAST_FN_COUNT_FOR_COLS \\n[#FN_COUNT_FOR_COLS]
+.    if \\n[#FN_DEPTH] .PROCESS_FN_LEFTOVER
+.    rr #RULED
+.    if \\n[#RESET_FN_NUMBER] .nr #FN_NUMBER 0 1
+.    po \\n[#DOC_L_MARGIN]u
+.    if \\n[#RECTO_VERSO] \{\
+.          nr #DOC_LR_MARGIN_TMP \\n[#DOC_L_MARGIN]
+.          DOC_LEFT_MARGIN  \\n[#DOC_R_MARGIN]u
+.          if \\n[#CROPS] .DOC_LEFT_MARGIN  \\n[#DOC_R_MARGIN]u+\\n[cropmarks]u
+.          DOC_RIGHT_MARGIN \\n[#DOC_LR_MARGIN_TMP]u
+.          if \\n[#CROPS] .DOC_RIGHT_MARGIN \\n[#DOC_LR_MARGIN_TMP]u-\\n[cropmarks]u
+.          SWITCH_HDRFTR_CENTER_PAD
+.       \}
+.    \}
+.    ev HEADER
+.    if \\n[#PAGE_NUM_V_POS]=1 .vs 0
+.    sp |\\n[#HEADER_MARGIN]u-1v
+.    mk y
+.    ll \\n[#DOC_L_LENGTH]u
+.    ta \\n[.l]u
+.    if \\n[#PRINT_STYLE]=1 \{\
+.       fam \\*[$TYPEWRITER_FAM]
+.       ft  R
+.       ps  \\*[$TYPEWRITER_PS]\\*[$HDRFTR_SIZE_CHANGE]
+.    \}
+.    if \\n[#PRINT_STYLE]=2 \{\
+.      fam \\*[$HDRFTR_FAM]
+.      ft  R
+.      ps  \\n[#DOC_PT_SIZE]u\\*[$HDRFTR_SIZE_CHANGE]
+.    \}
+.    nr #HDRFTR_PT_SIZE \\n[#PT_SIZE]
+.    if \\n[#CAPS_ON] \{\
+.       nr #CAPS_WAS_ON 1
+.       CAPS OFF
+.    \}
+.    if \\n[#PRINT_STYLE]=1 \{\
+.       if \\n[#ENDNOTES]=1 \{\
+.\" Single-spaced endotes have a different lead
+.          if \\n[#EN_SINGLESPACE] \{\
+.             nr #RESTORE_DOC_LEAD \\n[#DOC_LEAD]
+.             nr #DOC_LEAD \\n[#EN_LEAD]u
+.          \}
+.       \}
+.    \}
+.    if !n .nop \X'ps: exec 0 setlinejoin'\X'ps: exec 0 setlinecap'
+.    sp -1v
+.    ie \\n[#HEADERS_ON] .PRINT_HDRFTR
+.    el \{\
+.       if \\n[#PAGE_NUM_V_POS]=1 \{\
+.          if \\n[#PAGINATE] .PRINT_PAGE_NUMBER
+.       \}
+.    \}
+.    sp |\\n[#T_MARGIN]u-\\n[#DOC_LEAD]u
+.    if \\n[#PRINT_STYLE]=1 \{\
+.       if \\n[#ENDNOTES]=1 \{\
+.          if \\n[#EN_SINGLESPACE] \{\
+.             nr #DOC_LEAD \\n[#RESTORE_DOC_LEAD]u
+.             rr #RESTORE_DOC_LEAD
+.          \}
+.       \}
+.    \}
+.    nr #PAGE_TOP \\n[nl]
+.    ev
+.    po \\n[#L_MARGIN]u
+.    if \\n[#RECTO_VERSO] .nr #L_MARGIN +\\n[#L_MARGIN_DIFF]
+.    if \\n[#CAPS_WAS_ON] \{\
+.       CAPS
+.       rr #CAPS_WAS_ON
+.    \}
+.    if \\n[#TAB_ACTIVE] .TAB \\n[#CURRENT_TAB]
+.    if \\n[#QUOTE] \{\
+.       ie \\n[#TAB_ACTIVE] .TAB \\n[#CURRENT_TAB]
+.       el \{\
+.          ie \\n[#Q_OFFSET_VALUE] .nr #Q_OFFSET \
+\\n[#L_MARGIN]+(\\n[#PP_INDENT]*\\n[#Q_OFFSET_VALUE])
+.          el .nr #Q_OFFSET \\n[#L_MARGIN]+\\*[$Q_OFFSET_VALUE]
+.          po \\n[#Q_OFFSET]u
+.       \}
+.       if \\n[#PRINT_STYLE]=2 .sp \\n[#Q_LEAD_DIFF]u
+.    \}
+.    if \\n[#RESET_FN_COUNTERS]=1 \{\
+.       rr #RESET_FN_COUNTERS
+.       PROCESS_FN_IN_DIVER
+.       nr #FN_COUNT \\n[#SAVED_FN_COUNT] 1
+.       if \\n[#COLUMNS]=1 .nr #FN_COUNT_FOR_COLS \\n[#SAVED_FN_COUNT_FOR_COLS] 1
+.       ie \\n[#RESET_FN_NUMBER]=1 .nr #FN_NUMBER \\n[#SAVED_FN_NUMBER] 1
+.       el .nr #FN_NUMBER \\n[#FN_NUMBER] 1
+.       rm FN_IN_DIVER
+.       if dRUNON_FN_IN_DIVER .rm RUNON_FN_IN_DIVER
+.    \}
+.    if \\n[#EPIGRAPH] \{\
+.       ie \\n[#TAB_ACTIVE] .TAB \\n[#CURRENT_TAB]
+.       el \{\
+.          ie r#EPI_OFFSET_VALUE \
+.             nr #EPI_OFFSET \
+\\n[#L_MARGIN]+(\\n[#PP_INDENT]*\\n[#EPI_OFFSET_VALUE])
+.          el \
+.             nr #EPI_OFFSET \\n[#L_MARGIN]+\\*[$EPI_OFFSET_VALUE]
+.          po \\n[#EPI_OFFSET]u
+.       \}
+.    \}
+.    ie \\n[#EPIGRAPH] \{\
+.       ie !\\n[#EPI_ACTIVE] \{\
+.          ns
+.          rr #EPI_ACTIVE
+.       \}
+.       el \{\
+.          ie \\n[#EPI_FITS] .ns
+.          el .sp \\n[#DOC_LEAD]u-\\n[#EPI_LEAD]u
+.       \}
+.    \}
+.    el .ns
+.    if \\n[#COLUMNS] \{\
+.       nr #FN_COUNT_FOR_COLS 0 1
+.       nr #L_MARGIN \\n[#DOC_L_MARGIN]
+.       if \\n[#RECTO_VERSO] .COLUMNS \\n[#NUM_COLS] \\n[#GUTTER]u
+.       nr #COL_NUM 0 1
+.       mk dc
+.       po \\n[#COL_\\n+[#COL_NUM]_L_MARGIN]u
+.       nr #L_MARGIN \\n[.o]
+.       if \\n[#TAB_ACTIVE] .TAB \\n[#CURRENT_TAB]
+.       ll \\n[#COL_L_LENGTH]u
+.       ta \\n[.l]u
+.       if \\n[#QUOTE] \{\
+.          ie \\n[#\\*[BQ]_OFFSET_VALUE] \
+.             po +(\\n[#PP_INDENT]u*\\n[#\\*[BQ]_OFFSET_VALUE]u)
+.          el \
+.             po +\\*[$\\*[BQ]_OFFSET_VALUE]
+.       \}
+.       if \\n[#EPIGRAPH] \{\
+.          if \\n[#EPI_ACTIVE] \{\
+.             ie \\n[#EPI_FITS] .
+.             el .nr dc -\\n[#EPI_LEAD_DIFF]
+.          \}
+.          ie r#EPI_OFFSET_VALUE \{\
+.             po \
+\\n[#COL_\\n[#COL_NUM]_L_MARGIN]u+(\\n[#PP_INDENT]u*\\n[#EPI_OFFSET_VALUE]u)
+.          \}
+.          el .po \\n[#COL_\\n[#COL_NUM]_L_MARGIN]u+\\*[$EPI_OFFSET_VALUE]
+.       \}
+.    \}
+.    rr #FROM_HEADER
+.    rr #DEFER_SPACE_ADDED
+.    if !\\n[#FN_DEPTH] .if r #DIVERTED .rr #DIVERTED
+.    if \\n[#MN_OVERFLOW_LEFT]=1 \{\
+.       MN LEFT
+.       nf
+.       MN_OVERFLOW_LEFT
+.       MN
+.    \}
+.    if \\n[#MN_OVERFLOW_RIGHT]=1 \{\
+.       MN RIGHT
+.       nf
+.       MN_OVERFLOW_RIGHT
+.       MN
+.    \}
+.    rm MN_OVERFLOW_LEFT
+.    rr #MN_OVERFLOW_LEFT
+.    rr #no-repeat-MN-left
+.    rm MN_OVERFLOW_RIGHT
+.    rr #MN_OVERFLOW_RIGHT
+.    rr #no-repeat-MN-right
+.    if \\n[#PRE_COLLATE]=1 .rr #PRE_COLLATE
+.    if \\n[#UNDERLINE_WAS_ON]=1 \{\
+.       vs 0
+.       ie !n \
+.          nop \R'#UNDERLINE_ON 1'\X'ps: exec \\n[_w] \\n[_d] decorline'
+.       el .ul 1000
+.       br
+.       ns
+.       rr #UNDERLINE_WAS_ON
+.    \}
+.    if \\n[#RESTORE_PAGINATION] \{\
+.       PAGINATE
+.       rr #RESTORE_PAGINATION
+.    \}
+.    ch RR_@TOP
+.    ie \\n[tbl*have-header] .rr @TOP
+.    el .wh \\n[nl]u+1u RR_@TOP
+.    ie \\n[defer] .PROCESS_FLOATS
+.    el \{\
+.       if \\n[tbl*have-caption] \{\
+.          RESTORE_SPACE
+.          ie \\n[#MLA] .sp \n[tbl*label-lead-diff]u
+.          el .sp \n[tbl*caption-lead-diff]u
+.       \}
+.    \}
+.\" So tables without TH that don't fit don't overprint first row
+.\" at top of page
+.    ie \\n[tbl*no-header] \{\
+.       rs
+.       nop \&
+.       vpt
+.       rr \\n[tbl*no-header]
+.       SHIM
+.    \}
+.    el .vpt
+.    if \\n[#NEWPAGE] .rr #NEWPAGE
+.    ie \\n[tbl*interrupted] \{\
+.       tbl*print-header
+.       rr tbl*interrupted
+.      \}
+.    el .tbl@top-hook
+.    if \\n[#QUOTE]=1 \
+.       if '\\*[$Q_QUAD]'LEFT' .po \\n[#Q_OFFSET]u
+.    if \\n[#QUOTE]=2 .po \\n[#BQ_OFFSET]u
+.END
+\#
+\# ====================================================================
+\#
+\# +++FOOTERS+++
+\#
+\# FOOTERS (off or on)
+\# -------------------
+\# *Arguments:
+\#   <none> | <anything>
+\# *Function:
+\#   Turns footers at the bottom of the page off or on.
+\# *Notes:
+\#   Default is off.  If on, page numbers automatically go at
+\#   the top, centered, unless pagination has been turned off,
+\#   or the pagenumber position has been changed to left or right.
+\#
+.MAC FOOTERS END
+.    ie '\\$1'' \{\
+.       rr #HEADERS_ON
+.       nr #FOOTERS_ON 1
+.       PAGENUM_POS TOP CENTER
+.    \}
+.    el .nr #FOOTERS_ON 0
+.END
+\#
+\# FOOTER MARGIN
+\# -------------
+\# *Argument:
+\#   <footer margin>
+\# *Function:
+\#   Creates or modifies register #FOOTER_MARGIN which holds the
+\#   amount of space to leave between the page number and the bottom
+\#   of the page.
+\# *Notes:
+\#   Unit of measure required.  Default is 3P.
+\#
+.MAC FOOTER_MARGIN END
+.    ie \\n%>0 .nr #FOOTER_MARGIN (\\$1)
+.    el .
+.END
+\#
+\# FOOTER GAP
+\# ----------
+\# *Argument:
+\#   <distance from end of running text to page # or footer>
+\# *Function:
+\#   Creates or modifies register #FOOTER_GAP which holds the
+\#   amount of space to leave between running text and the page number.
+\# *Notes:
+\#   Requires unit of measure.  Default is 3P.  Measured baseline to
+\#   baseline.
+\#
+.MAC FOOTER_GAP END
+.    ie \\n%>0 .nr #FOOTER_GAP (\\$1)
+.    el .
+.END
+\#
+\# FOOTER
+\# ------
+\# *Arguments:
+\#   <none>
+\# *Function:
+\#   Places footer at bottom of page if #FOOTERS=1, otherwise
+\#   places page number at bottom of page (if #PAGINATE=1).
+\#   Page numbers are in arabic or roman according to COPYSTYLE.
+\#   DRAFT starts the document at page 1 regardless of PAGENUMBER.
+\#   FINAL respects PAGENUMBER.
+\#
+.MAC FOOTER END
+.    if \\n[#DOING_COVERTEXT] \{\
+.       tm1 "[mom]: COVERTEXT exceeds cover page depth.
+.       ab   [mom]: Aborting '\\n[.F]'.
+.    \}
+.    vpt 0
+.    rr #LB_4_HD
+.    rr #QUOTE_4_HD
+.    nr #SAVED_LEAD \\n[.v]
+.    ev PAGE_TRANSITION
+.    pdfmarksuspend
+.    ie !n .nop \X'ps: exec decornone'
+.    el .ul 0
+.    br
+.    if \\n[#UNDERLINE_ON]=1 .nr #UNDERLINE_WAS_ON 1
+.    if \\n[MN-left]>0 \{\
+.       if !\\n[#no-repeat-MN-left]=1 \{\
+.          MNbottom-left
+.          nr #no-repeat-MN-left 1
+.       \}
+.       if '\\n[.z]'MN_OVERFLOW_LEFT' \{\
+.          di
+.          nr #MN_OVERFLOW_LEFT 1
+.          rr #OVERFLOW_LEFT
+.       \}
+.    \}
+.    if \\n[MN-right]>0 \{\
+.       if (\\n[MN-right] > 0) \
+.          if !\\n[#no-repeat-MN-right]=1 .MNbottom-right
+.       if '\\n[.z]'MN_OVERFLOW_RIGHT' \{\
+.          di
+.          nr #MN_OVERFLOW_RIGHT 1
+.          rr #OVERFLOW_RIGHT
+.       \}
+.    \}
+\# Table bottom hook, draws the table borders in
+\# multipage boxed tables.
+.    tbl@bottom-hook
+.    ch MN_OVERFLOW_TRAP
+.    nr #L_MARGIN_DIFF \\n[#L_MARGIN]-\\n[#DOC_L_MARGIN]
+.    if !\\n[#FN_DEFER] \{\
+.       nr #DIVER_DEPTH 0
+.       if \\n[#FN_DEPTH] \{\
+.          if \\n[#DIVERTED]=3 .nr #FN_DEPTH +\\n[#VFP_DIFF]
+.          vpt 0
+.          sp \
+|\\n[#PAGE_LENGTH]u-(\\n[#B_MARGIN]u+\\n[#FN_DEPTH]u-\\n[#DOC_LEAD]u)
+.          vpt 1
+.          po \\n[#DOC_L_MARGIN]u
+.          if \\n[#COLUMNS] \{\
+.             po \\n[#COL_\\n[#COL_NUM]_L_MARGIN]u
+.             nr #L_MARGIN \\n[.o]
+.             nr #FROM_FOOTER 1
+.          \}
+.          nf
+.          FOOTNOTES
+.          rm FOOTNOTES
+.          if d RUNON_FOOTNOTES    .rm RUNON_FOOTNOTES
+.          if \\n[#PRINT_STYLE]=1 .vs \\n[#SAVED_LEAD]u
+.          if \\n[#PRINT_STYLE]=2 .LS \\n[#SAVED_LEAD]u
+.          if '\\n[.z]'FN_OVERFLOW' \{\
+.              di
+.              nr #FN_OVERFLOW_DEPTH \\n[#DIVER_DEPTH]
+.          \}
+.          nr #FN_COUNT_AT_FOOTER \\n[#FN_COUNT]
+.          nr #FN_COUNT 0
+.          if \\n[#COL_NEXT] \{\
+.             ie !\\n[#COL_NUM]=\\n[#NUM_COLS] .nr #COL_NUM \\n-[#COL_NUM]
+.             el .nr #COL_NUM \\n[#NUM_COLS] 1
+.          \}
+.       \}
+.       rr #DIVERTED
+.    \}
+.    nr @TOP 1
+.    ie \\n[#COLUMNS]=1 \{\
+.       ie \\n[#COL_NUM]=\\n[#NUM_COLS] .DO_FOOTER
+.       el \{\
+.          ie (\\n[#ENDNOTES]=1):(\\n[#BIBLIOGRAPHY]=1) \{\
+.             if \\n[#ENDNOTES] .sp |\\n[ec]u-\\n[#EN_LEAD]u
+.             if \\n[#BIBLIOGRAPHY] .sp |\\n[bc]u-\\n[#BIB_LEAD]u
+.          \}
+.          el \{\
+.            vs \\n[#SAVED_LEAD]u
+.            sp |\\n[dc]u
+.          \}
+.          po \\n[#COL_\\n+[#COL_NUM]_L_MARGIN]u
+.          nr #L_MARGIN \\n[.o]
+.          if \\n[#FN_DEPTH] .PROCESS_FN_LEFTOVER
+.          vs \\n[#SAVED_LEAD]u
+.          if \\n[#PREV_FN_DEFERRED] .nr #PREV_FN_DEFERRED 2
+.          rr #RULED
+.          if !\\n[#EPIGRAPH] .rr #COL_NEXT
+.          if !\\n[#QUOTE] .rr #COL_NEXT
+.          if \\n[#RESET_FN_COUNTERS]=1 \{\
+.             rr #RESET_FN_COUNTERS
+.             PROCESS_FN_IN_DIVER
+.             LS \\n[#SAVED_LEAD]u
+.             nr #FN_COUNT \\n[#FN_COUNT] 1
+.             nr #FN_COUNT_FOR_COLS \\n[#FN_COUNT_FOR_COLS] 1
+.             rm FN_IN_DIVER
+.             if dRUNON_FN_IN_DIVER .rm RUNON_FN_IN_DIVER
+.          \}
+.          rr #DEFER_SPACE_ADDED
+.          if \\n[#TAB_ACTIVE] .TAB \\n[#CURRENT_TAB]
+.          if \\n[#QUOTE] \{\
+.             ie \\n[#TAB_ACTIVE] .TAB \\n[#CURRENT_TAB]
+.             el \{\
+.                ie \\n[#Q_OFFSET_VALUE] \
+.                   nr #Q_OFFSET \
+\\n[#L_MARGIN]+(\\n[#PP_INDENT]*\\n[#Q_OFFSET_VALUE])
+.                el \
+.                   nr #Q_OFFSET \\n[#L_MARGIN]+\\*[$Q_OFFSET_VALUE]
+.                if \\n[#COLUMNS] \{\
+.                   ie \\n[#Q_OFFSET_VALUE] .nr #Q_OFFSET \
+\\n[#COL_\\n[#COL_NUM]_L_MARGIN]+(\\n[#PP_INDENT]*\\n[#Q_OFFSET_VALUE])
+.                   el .nr #Q_OFFSET \
+\\n[#COL_\\n[#COL_NUM]_L_MARGIN]+\\*[$Q_OFFSET_VALUE]
+.                \}
+.                po \\n[#Q_OFFSET]u
+.             \}
+.          \}
+.          if \\n[#EPIGRAPH] \{\
+.             ie \\n[#TAB_ACTIVE] .TAB \\n[#CURRENT_TAB]
+.             el \{\
+.                ie r#EPI_OFFSET_VALUE .nr #EPI_OFFSET \
+\\n[#L_MARGIN]+(\\n[#PP_INDENT]*\\n[#EPI_OFFSET_VALUE])
+.                el .nr #EPI_OFFSET \
+\\n[#L_MARGIN]+\\*[$EPI_OFFSET_VALUE]
+.                if \\n[#COLUMNS] \{\
+.                   ie r#EPI_OFFSET_VALUE .nr #EPI_OFFSET \
+\\n[#COL_\\n[#COL_NUM]_L_MARGIN]+(\\n[#PP_INDENT]*\\n[#EPI_OFFSET_VALUE])
+.                   el .nr #EPI_OFFSET \
+\\n[#COL_\\n[#COL_NUM]_L_MARGIN]+\\*[$EPI_OFFSET_VALUE]
+.                \}
+.                po \\n[#EPI_OFFSET]u
+.             \}
+.          \}
+.          ie \\n[#EPIGRAPH] \{\
+.             ie !\\n[#EPI_ACTIVE] \{\
+.                ns
+.                rr #EPI_ACTIVE
+.             \}
+.             el \{\
+.                sp |\\n[dc]u+(\\n[#DOC_LEAD]u-\\n[#EPI_LEAD]u)
+.                rr #EPI_ACTIVE
+.             \}
+.          \}
+.          el .ns
+.          ev
+.       \}
+.       ns
+.       rr #DIVERTED
+.       ch RR_@TOP
+.       wh \\n[nl]u+1u RR_@TOP
+.       if \\n[tbl*have-header] .tbl@bottom-hook
+.       if \\n[defer] .PROCESS_FLOATS
+.       ie \\n[tbl*no-header] \{\
+.          rs
+.          nop \&
+.          vpt
+.          rr \\n[tbl*no-header]
+.          SHIM
+.       \}
+.       el .vpt
+.       if \\n[tbl*interrupted] .tbl*print-header
+.       rr tbl*interrupted
+.    \}
+.    el .DO_FOOTER
+.    pdfmarkrestart
+.END
+\#
+\# PROCESS FOOTER
+\# --------------
+\# *Arguments:
+\#   <none>
+\# *Function:
+\#   Prints footer (page number, or 3-part footer).
+\#   Resets CAPS and UNDERLINE if they were on.
+\#
+.MAC DO_FOOTER END
+.\" Part of workaround for refer spitting out a blank page if the
+.\" last reference falls on the bottom line.
+.    if \\n[num*refs] \{\
+.       if \\n[ref*num]=\\n[num*refs] \{\
+.          rr num*refs
+.          nr ref*last 1
+.       \}
+.    \}
+.    PRINT_FOOTER
+.    if !\\n[ref*last] \{\
+.       ie \\n[defer]>0 \{\
+\c
+'       bp
+.       \}
+.       el 'bp
+.    \}
+.    if !'\\n[.ev]'0' .ev
+.    rr ref*last
+.    po \" Ensure it's reset to previous value
+.END
+\#
+.MAC PRINT_FOOTER END
+.\" Have to change position of FN_OVERFLOW_TRAP or it screws up the
+.\" placement of page numbers (or footers).  It's reset to its original
+.\" position at the end of the macro.
+.    if r #SAVED_FOOTER_POS .ch FOOTER \\n[#SAVED_FOOTER_POS]u
+.    rr #SAVED_FOOTER_POS
+.    vpt 0
+.    sp -1
+.    ev FOOTER
+.    ie n \
+.       sp |\\n[#PAGE_LENGTH]u-\\n[#FOOTER_MARGIN]u
+.    el \
+.       sp |\\n[#PAGE_LENGTH]u-\\n[#FOOTER_MARGIN]u-\\n[#FOOTER_ADJ]u
+.    mk y
+.    UNDERLINE OFF
+.    po \\n[#DOC_L_MARGIN]u
+.    ll \\n[#DOC_L_LENGTH]u
+.    ta \\n[.l]u
+.    if \\n[#PRINT_STYLE]=1 .TYPEWRITER
+.    if \\n[#PRINT_STYLE]=2 \{\
+.       fam  \\*[$HDRFTR_FAM]
+.       ft      R
+.       ps \\n[#DOC_PT_SIZE]u\\*[$HDRFTR_SIZE_CHANGE]
+.    \}
+.    nr #HDRFTR_PT_SIZE \\n[#PT_SIZE]
+.    if \\n[#CAPS_ON] \{\
+.       nr #CAPS_WAS_ON 1
+.       CAPS OFF
+.    \}
+.    ie \\n[#FOOTERS_ON] \{\
+.       if !\\n[#SKIP_FOOTER]=1 .PRINT_HDRFTR
+.    \}
+.    el \{\
+.       if \\n[#PAGINATE] \{\
+.          if \\n[#PAGE_NUM_V_POS]=2 \
+.             if !\\n[#SKIP_FOOTER]=1 .PRINT_PAGE_NUMBER
+.       \}
+.    \}
+.    rr #SKIP_FOOTER
+.    if \\n[#CAPS_WAS_ON] \{\
+.       CAPS
+.       rr #CAPS_WAS_ON
+.    \}
+.    ev
+.    vpt 1
+.END
+\#
+\# ====================================================================
+\#
+\# +++HEADERS AND FOOTERS+++
+\#
+\# HEADERS_AND_FOOTERS
+\# -------------------
+\# *Arguments:
+\#   HEADER_RECTO_QUAD \
+\#   HEADER_RECTO_STRING \
+\#   FOOTER_RECTO_QUAD \
+\#   FOOTER_RECTO_STRING \
+\#   HEADER_VERSO_QUAD \
+\#   HEADER_VERSO_STRING \
+\#   FOOTER_VERSO_QUAD \
+\#   FOOTER_VERSO_STRING
+\#   | <anything>
+\# *Function:
+\#   Allows having both headers and footers.  Sets register
+\#   #HDRFTR_BOTH to 1; collects HEADER/FOOTER_RECTO/VERSO
+\#   information; appends FOOTER_RECTO and FOOTER_VERSO to
+\#   START and turns off pagination; appends to macros
+\#   PRINT_USERDEF_HDRFTR and HEADER the necessary number
+\#   register manipulations and redefinitions of the
+\#   HEADER/FOOTER_RECTO/VERSO strings so that both
+\#   headers and footers get printed, with the appropriate
+\#   strings for each
+\# *Notes:
+\#   Works in conjunction with HDRFTR_RECTO and HDRFTR_VERSO (qqv.),
+\#   ergo all style changes must be done inline in the strings
+\#   passed as arguments.
+\#
+.MAC HEADERS_AND_FOOTERS END
+.    ie \\n[#NUM_ARGS]>1 \{\
+.    nr #HDRFTR_BOTH 1
+.    nr #FOOTERS_ON  1
+.    if !r#HEADER_RULE .nr #HEADER_RULE 1
+.    if !r#FOOTER_RULE .nr #FOOTER_RULE 1
+.    ds $HDR_RECTO_QUAD   \\$1
+.    ds $HDR_RECTO_STRING \\$2
+.    ds $FTR_RECTO_QUAD   \\$3
+.    ds $FTR_RECTO_STRING \\$4
+.    ds $HDR_VERSO_QUAD   \\$5
+.    ds $HDR_VERSO_STRING \\$6
+.    ds $FTR_VERSO_QUAD   \\$7
+.    ds $FTR_VERSO_STRING \\$8
+.am START DONE
+.   if \\\\n[#HDRFTR_BOTH]=1 \{\
+.      FOOTER_RECTO \\*[$FTR_RECTO_QUAD] "\\*[$FTR_RECTO_STRING]"
+.      FOOTER_VERSO \\*[$FTR_VERSO_QUAD] "\\*[$FTR_VERSO_STRING]"
+.      if \\\\n[#HEADER_RULE]=1 .HEADER_RULE
+.      ie \\\\n[#FOOTER_RULE]=1 .FOOTER_RULE
+.      el .FOOTER_RULE OFF
+.      if r #PAGINATE .rr #PAGINATE
+.      if r #PAGE_NUM_V_POS .rr #PAGE_NUM_V_POS
+.   \}
+.DONE
+.am PRINT_USERDEF_HDRFTR DONE
+.   if \\\\n[#HDRFTR_BOTH]=1 \{\
+.      if \\n[#FOOTERS_ON]=1 \{\
+.         if !\\\\n[#COLLATE]=1 \{\
+.            HEADER_RECTO \\*[$HDR_RECTO_QUAD] "\\*[$HDR_RECTO_STRING]"
+.            HEADER_VERSO \\*[$HDR_VERSO_QUAD] "\\*[$HDR_VERSO_STRING]"
+.            rr #FOOTERS_ON
+.            nr #HEADERS_ON 1
+.            ie \\\\n[#HEADER_RULE]=1 .HEADER_RULE
+.            el .HEADER_RULE OFF
+.         \}
+.      \}
+.      if \\n[#HEADERS_ON]=1 \{\
+.         FOOTER_RECTO \\*[$FTR_RECTO_QUAD] "\\*[$FTR_RECTO_STRING]"
+.         FOOTER_VERSO \\*[$FTR_VERSO_QUAD] "\\*[$FTR_VERSO_STRING]"
+.      \}
+.   \}
+.DONE
+.am HEADER DONE
+.   if \\\\n[#HDRFTR_BOTH]=1 \{\
+.      if r #START_FOR_FOOTERS .rr #START_FOR_FOOTERS
+.      rr #HEADERS_ON
+.      nr #FOOTERS_ON 1
+.      FOOTER_RECTO \\*[$FTR_RECTO_QUAD] "\\*[$FTR_RECTO_STRING]"
+.      FOOTER_VERSO \\*[$FTR_VERSO_QUAD] "\\*[$FTR_VERSO_STRING]"
+.      ie \\\\n[#FOOTER_RULE]=1 .FOOTER_RULE
+.      el .FOOTER_RULE OFF
+.   \}
+.DONE
+.    \}
+.    el \{\
+.       rr #HDRFTR_BOTH
+.       rr #USERDEF_HDRFTR
+.       rm $USERDEF_HDRFTR_RECTO
+.       rm $USERDEF_HDRFTR_VERSO
+.       FOOTERS OFF
+.       HEADERS
+.       if \\n[#COLLATE]=1 \{\
+.          nr #HEADER_STATE 1
+.          nr #PAGINATION_STATE 1
+.       \}
+.       PAGINATE
+.       PAGENUM_POS BOTTOM CENTER
+.       nr #HF_OFF 1
+.    \}
+.END
+\#
+\# ====================================================================
+\#
+\# +++HEADINGS+++
+\#
+.char \[hd-num-spacer]     \0
+.char \[parahead-spacer]   \~\~
+.char \[toc-hd-num-spacer] \h'\w'\[en]'u'
+.ds toc-word-space \ \" ie an unbreakable space
+\#
+\# HEADING
+\# -------
+\# *Arguments:
+\#   <heading level> [PARAHEAD] [NAMED <pdf-id>] <heading text>
+\# *Function:
+\#   Assigns a heading level to the heading text and prints heading
+\#   in the style set up for that level.  If PARAHEAD given, the
+\#   heading is attached to the body of the paragraph.  If NAMED
+\#   given, creates a target for pdf links.  Collects the heading
+\#   for the TOC and sets TOC indenting appropriate for the level.
+\# *Notes:
+\#   If PARAHEAD given, HEADING must come after PP.
+\#
+.MAC HEADING END
+.    if !\B'\\$1' \{\
+.       tm1 "[mom]: The first argument to \\$0 must be a numeric heading level.
+.       ab   [mom]: Aborting '\\n[.F]' at \\$0, line \\n[.c].
+.    \}
+.    if r #QUOTE     .rr #QUOTE
+.    if r #END_QUOTE .rr #END_QUOTE
+.    if r #EPIGRAPH  .rr #EPIGRAPH
+.    vs \\n[#DOC_LEAD]u
+.    if \\$1<\\n[#LEVEL] \
+.       nr #ACTIVE_LEVELS \\n[#LEVEL] \" loop count for resetting numbering registers
+.    nr #LAST_LEVEL \\n[#LEVEL]       \" used during TOC collection, if SPACE_TOC_ITEMS
+.    nr #LEVEL \\$1                   \" reset #LEVEL to arg
+.    shift
+.    nr #ARG_NUM 0 1
+.    while \\n+[#ARG_NUM]<=2 \{\
+.      if '\\$1'NAMED' \{\
+.         ds PDF_NM "\\$1 \\$2
+.         shift 2 \" \\$1 is now heading text
+.      \}
+.      if '\\$1'PARAHEAD' \{\
+.         nr #PARAHEAD 1
+.         shift \" \\$1 is now NAMED, if we have it; otherwise heading text
+.      \}
+.    \}
+.\" Spacing
+.    if \\n[#Q_LEAD_DIFF_CHECK] .sp -1v
+.    br
+.    ie !\\n[#PARAHEAD] \{\
+.       if !\\n[@TOP] \{\
+.          nr #HEAD 1
+.          ie \\n[#HEAD_\\n[#LEVEL]_SPACE_AFTER] .ne \\n[#NUM_ARGS]+2
+.          el .ne \\n[#NUM_ARGS]+1
+.          vpt 0
+.          ie !\\n[#START] \
+.             if !\\n[#SPACE_ADDED] .if !\\n[#LINEBREAK] .sp
+.          el \{\
+.             ie !\\n[#PP] .rr #START
+.             el .sp
+.          \}
+.          if \\n[#EPIGRAPH] \
+.             if \\n[#SINGLE_SPACE] .sp
+.       \}
+.       if \\n[#PP_SPACE] \
+.          if \\n[#QUOTE_4_HD] .sp .5v
+.       if !\\n[#SPACE_ADDED] .SHIM
+.       if \\n[#SPACE_ADDED] .rr #SPACE_ADDED
+.    \}
+.    el \{\
+.       if \\n[#NUM_ARGS]>1 \{\
+.          tm1 "[mom]: Error at line \\n[.c], \\$0.
+.          tm1 "       PARAHEAD may not be given more than 1 line of text.
+.          ab   [mom]: Aborting '\\n[.F]' at \\$0, line \\n[.c].
+.       \}
+.       vpt 0
+.       if !(\\n[#PRINT_STYLE]=1)&(\\n[#SINGLE_SPACE]=1) .sp -1v
+.       if \\n[#QUOTE_4_HD] \{\
+.          sp -1v
+.          if \\n[#PP_SPACE] \{\
+.             sp .5v
+.             SHIM
+.         \}
+.       \}
+.       if (\\n[#QUOTE_4_HD]=0)&(\\n[#LB_4_HD]=0)&(\\n[#START]=0) \
+.          if !\\n[#LB_4_PARAHEAD] .sp -1v
+.    \}
+.    ev HEADING
+.    evc 0
+.\" Style
+.    if \\n[#PRINT_STYLE]=2 \{\
+.       fam \\*[$HEAD_\\n[#LEVEL]_FAM]
+.       ft  \\*[$HEAD_\\n[#LEVEL]_FT]
+.       ps  \\n[#DOC_PT_SIZE]u\\*[$HEAD_\\n[#LEVEL]_SIZE]
+.       nf
+.    \}
+.\" Numbering
+.    ds $TOC_HD_NUM_PREV \\*[$TOC_HD_NUM]
+.    rm $TOC_HD_NUM
+.    rm $PDF_HD_NUM
+.    ie \\n[#NUMBER_HEAD_\\n[#LEVEL]] \{\
+.       if \\n[#PREFIX_CH_NUM] .ds $HD_NUM \\n[#CH_NUM].
+.       nr #HEAD_\\n[#LEVEL]_NUM +1       \" incremented manually here; still auto-increments
+.\" Reset numbering registers for headings beneath current level
+.       nr @LEVEL \\n[#LEVEL] 1           \" loop step
+.       nr #LOOP \\n[#ACTIVE_LEVELS]      \" loop count
+.       while \\n+[@LEVEL]<=\\n[#LOOP] \
+.          if \\n[#HEAD_\\n[@LEVEL]_NUM] \
+.             nr #HEAD_\\n[@LEVEL]_NUM 0 1
+.\" Build numbering strings for body and toc
+.       nr @LEVEL 0 1                     \" loop step
+.       nr #LOOP \\n[#LEVEL]              \" loop count
+.       while \\n+[@LEVEL]<=\\n[#LOOP] \
+.          if \\n[#HEAD_\\n[@LEVEL]_NUM] \
+.             as $HD_NUM \\n[#HEAD_\\n[@LEVEL]_NUM].
+.       ie \\n[#TRUNC_TOC_HD_NUM] \
+.          ds $TOC_HD_NUM \\n[#HEAD_\\n[#LEVEL]_NUM].
+.       el .ds $TOC_HD_NUM \\*[$HD_NUM]
+.       if \\n[#LEVEL]=1 \
+.          ds $TOC_HD_NUM_PREV \\*[$TOC_HD_NUM]
+.       if \\n[#TOC_NO_HD_NUM] .rm $TOC_HD_NUM
+.       if !\\n[#HEAD_\\n[#LEVEL]_NUM]] .rm $TOC_HD_NUM
+.       as $HD_NUM \[hd-num-spacer]
+.       ds $PDF_HD_NUM \\*[$TOC_HD_NUM]
+.       if !'\\*[$TOC_HD_NUM]'' .as $TOC_HD_NUM \[toc-hd-num-spacer]
+.       if !'\\*[$PDF_HD_NUM]'' .as $PDF_HD_NUM " "
+.    \}
+.    el .nr @LEVEL \\n[#LEVEL] 1
+.\" TOC collection and formatting
+.    nr #TOC_ENTRY_PN \\n%+\\n[#PAGE_NUM_ADJ]
+.    af #TOC_ENTRY_PN \\g[#PAGENUMBER]
+.    nr #ARG_NUM 0 1
+.    while \\n[#ARG_NUM]<\\n[#NUM_ARGS] \{\
+.       as $TOC_HEAD_\\n[#LEVEL]_ITEM "\\$[\\n+[#ARG_NUM]]
+.       if \\n[#NUM_ARGS]>\\n[#ARG_NUM] \
+.          as $TOC_HEAD_\\n[#LEVEL]_ITEM "\\*[toc-word-space]
+.    \}
+.    PDF_BOOKMARK \
+        \\*[PDF_NM] \\n[#LEVEL]+1 \
+        \\*[$PDF_HD_NUM] \\*[$TOC_HEAD_\\n[#LEVEL]_ITEM]
+.    rm PDF_NM
+.    rm $PDF_HD_NUM
+.    ev TOC_EV
+.    ie \\n[#PRINT_STYLE]=1 \{\
+.       fam \\*[$TYPEWRITER_FAM]
+.       ft  R
+.       ps  \\*[$TYPEWRITER_PS]
+.    \}
+.    el \{\
+.       FAMILY  \\*[$TOC_HEAD_\\n[#LEVEL]_FAM]
+.       FT      \\*[$TOC_HEAD_\\n[#LEVEL]_FT]
+.       ps \\n[#TOC_PS]u\\*[$TOC_HEAD_\\n[#LEVEL]_SIZE]
+.    \}
+.\" Indents for TOC heading levels.
+.\" First, numbered heads.  @LEVEL here is #LEVEL+1
+.    ie \\n[#NUMBER_HEAD_\\n[#LEVEL]] \{\
+.       ie !\\n[#TOC_NO_HD_NUM] \{\
+.          ie \\n[#TRUNC_TOC_HD_NUM] \{\
+.             if !\\n[#TOC_HEAD_\\n[@LEVEL]_INDENT_SET] \{\
+.                ie !\\n[#FROM_STYLE_\\n[@LEVEL]] \{\
+.                   ie !\\n[#NUMBER_HEAD_\\n[@LEVEL]] \
+.                      nr #TOC_HEAD_\\n[@LEVEL]_INDENT \
+\\n[#TOC_HEAD_\\n-[@LEVEL]_INDENT]+\w'\\*[$TOC_HD_NUM]'+1.5m
+.                   el \
+.                      nr #TOC_HEAD_\\n[@LEVEL]_INDENT \
+\\n[#TOC_HEAD_\\n-[@LEVEL]_INDENT]+\w'\\*[$TOC_HD_NUM]'
+.                \}
+.                el \
+.                   nr #TOC_HEAD_\\n[@LEVEL]_INDENT \
+                      \\n[#TOC_HEAD_\\n-[@LEVEL]_INDENT]
+.             \}
+.          \}
+.          el \{\
+.             if !\\n[#TOC_HEAD_\\n[@LEVEL]_INDENT_SET] \{\
+.                ie !\\n[#FROM_STYLE_\\n[@LEVEL]] \{\
+.                   ie \\n[#NUMBER_HEAD_\\n-[@LEVEL]] \{\
+.                      ie !\\n[#NUMBER_HEAD_\\n+[@LEVEL]] \
+.                         nr #TOC_HEAD_\\n[@LEVEL]_INDENT \
+\\n[#TOC_HEAD_\\n-[@LEVEL]_INDENT]+\w'\\*[$TOC_HD_NUM_PREV]'+1.5m
+.                      el \
+.                         nr #TOC_HEAD_\\n[@LEVEL]_INDENT \
+\\n[#TOC_HEAD_\\n-[@LEVEL]_INDENT]+\w'.\[toc-hd-num-spacer]'
+.                   \}
+.                   el \
+.                      nr #TOC_HEAD_\\n[@LEVEL]_INDENT \
+\\n[#TOC_HEAD_\\n-[@LEVEL]_INDENT]+\w'\\n[#TOC_HD_NUM].'
+.                   ie \\n[#LEVEL]=1 \
+.                      nr #TOC_HEAD_\\n+[@LEVEL]_INDENT +\w'\0'
+.                   el \{\
+.                      if !\\n[#NUMBER_HEAD_\\n[@LEVEL]] \{\
+.                         nr @LEVEL \\n+[@LEVEL] 1
+.                         nr #TOC_HEAD_\\n+[@LEVEL]_INDENT +\w'\0'
+.                      \}
+.                   \}
+.                \}
+.                el \
+.                   nr #TOC_HEAD_\\n[@LEVEL]_INDENT \
+\\n[#TOC_HEAD_\\n-[@LEVEL]_INDENT]+\\n[#TOC_HEAD_\\n+[@LEVEL]_INDENT]
+.             \}
+.             if \\n[#LEVEL]=1 \{\
+.                if \\n[#NUMBER_HEAD_\\n[@LEVEL]] \{\
+.                   if \\n[#PREFIX_CH_NUM] \
+.                      nr #TOC_HEAD_\\n[@LEVEL]_INDENT \w'\\*[$TOC_HD_NUM]'
+.                \}
+.             \}
+.          \}
+.       \}
+.       el \{\
+.          ie !\\n[#FROM_STYLE_\\n[@LEVEL]] \{\
+.             if !\\n[#TOC_HEAD_\\n[@LEVEL]_INDENT_SET] \
+.                nr #TOC_HEAD_\\n[@LEVEL]_INDENT \
+                    \\n[#TOC_HEAD_\\n-[@LEVEL]_INDENT]+1.5m
+.          \}
+.          el \{\
+.             if !\\n[#TOC_HEAD_\\n[@LEVEL]_INDENT_SET] \
+.                nr #TOC_HEAD_\\n[@LEVEL]_INDENT \
+\\n[#TOC_HEAD_\\n-[@LEVEL]_INDENT]+\\n[#TOC_HEAD_\\n+[@LEVEL]_INDENT]
+.          \}
+.       \}
+.    \}
+.\" Non-numbered heads
+.    el \{\
+.       nr @LEVEL \\n[#LEVEL] 1
+.       ie \\n[#FROM_STYLE_\\n+[@LEVEL]] \{\    \" increments @LEVEL even if false
+.          if !\\n[#TOC_HEAD_\\n[@LEVEL]_INDENT_SET] \{\
+.             nr #TOC_HEAD_\\n[@LEVEL]_INDENT \
+\\n[#TOC_HEAD_\\n[#LEVEL]_INDENT]+\\n[#TOC_HEAD_\\n[@LEVEL]_INDENT]
+.             if !\\n[#LEVEL]=\\n[#LAST_LEVEL] \{\
+.                if \\n[#NUMBER_HEAD_\\n[@LEVEL]] \
+.                   nr #TOC_HEAD_\\n[#LEVEL]_INDENT \
+\\n[#TOC_HEAD_\\n[@LEVEL]_INDENT]+\w'\\*[$TOC_HD_NUM_PREV]'
+.             \}
+.          \}
+.       \}
+.       el \{\
+.          nr #TOC_HEAD_\\n[@LEVEL]_INDENT \
+              \\n[#TOC_HEAD_\\n-[@LEVEL]_INDENT]+1.5m
+.          if \\n[#LEVEL]=1 \{\
+.             if !\\n[#FROM_STYLE_1] \
+.                nr #TOC_HEAD_1_INDENT 0
+.          \}
+.       \}
+.    \}
+.    nr #TOC_HEAD_\\n[@LEVEL]_INDENT_SET 1
+.    HD_TO_TOC
+.    rm $TOC_HEAD_\\n[#LEVEL]_ITEM
+.\" Print heading
+.    if !\\n[#PARAHEAD] .\\*[$HEAD_\\n[#LEVEL]_QUAD]
+.    if \\n[#CAPS_ON] \{\
+.       CAPS OFF
+.       nr #CAPS_RESTORE 1
+.    \}
+.    if \\n[#HEAD_\\n[#LEVEL]_CAPS] \{\
+.       CAPS 
+.       nr #CAPS_OFF 1
+.    \}
+.    if \\n[#SMALLCAPS_ON] \{\
+.       SMALLCAPS OFF
+.       nr #SMALLCAPS_RESTORE 1
+.    \}
+.    if \\n[#HEAD_\\n[#LEVEL]_SMALLCAPS] \{\
+.       SMALLCAPS 
+.       nr #SMALLCAPS_OFF 1
+.    \}
+.    if !'\\*[$HEAD_\\n[#LEVEL]_COLOR]'' \
+.       COLOR \\*[$HEAD_\\n[#LEVEL]_COLOR]
+.    nop \X'ps: exec decornone'\c
+.    nr #ARG_NUM 0 1
+.    while \\n+[#ARG_NUM]<=\\n[#NUM_ARGS] \{\
+.       if \\n[#PARAHEAD] \
+.          nr #PP_TEXT_OFFSET \
+              \w'\\*[$HD_NUM]\\$[\\n[#ARG_NUM]]'+\w'\[parahead-spacer]'
+.       if (\\n[#HEAD_\\n[#LEVEL]_UNDERSCORE]=0)&(\\n[#HEAD_\\n[#LEVEL]_UNDERSCORE2]=0) \{\
+.          ie \\n[#HD_NUM_INDENT] \{\
+.             if !'\\*[$HEAD_\\n[#LEVEL]_QUAD]'CENTER' \
+.                ti \\n[#HD_NUM_INDENT]u 
+.             PRINT \
+"\v'-\\*[$HEAD_\\n[#LEVEL]_BASELINE_ADJ]'\\$[\\n[#ARG_NUM]]
+.             br
+.          \}
+.          el \{\
+.             ie !\\n[#PARAHEAD] \{\
+.                PRINT \
+"\v'-\\*[$HEAD_\\n[#LEVEL]_BASELINE_ADJ]'\\*[$HD_NUM]\\$[\\n[#ARG_NUM]]
+.                br
+.             \}
+.             el \{\
+.                if (\\n[#PP]>0):(\\n[#INDENT_FIRST_PARAS]) \{\
+.                   if !\\n[#LB_4_PARAHEAD] \{\
+.                      if !\\n[#START] \{\
+.                         if \\n[#PP_ACTIVE] \{\
+.                            ie \\n[#PP]=1 .br
+.                            el \{\
+.                               nr #PP_TEXT_OFFSET +\\n[#PP_INDENT]
+.                               ti \\n[#PP_INDENT]u
+.                            \}
+.                         \}
+.                      \}
+.                   \}
+.                \}
+.                ie \\n[#PRINT_STYLE]=1 \
+.                   PRINT "\\*[UL]\\*[$HD_NUM]\\$[\\n[#ARG_NUM]]\\*[ULX]
+.                el .PRINT "\\*[$HD_NUM]\\$[\\n[#ARG_NUM]]
+.                rr #LB_4_PARAHEAD
+.                sp -1v
+.             \}
+.          \}
+.       \}
+.       if \\n[#HEAD_\\n[#LEVEL]_UNDERSCORE] \{\
+.          nr #SAVED_UL_WEIGHT \\n[#UNDERSCORE_WEIGHT]
+.          UNDERSCORE_WEIGHT \\*[$HEAD_\\n[#LEVEL]_UL_WEIGHT]
+.          ie \\n[#HD_NUM_INDENT] \{\
+.             if !'\\*[$HEAD_\\n[#LEVEL]_QUAD]'CENTER' \
+.                ti \\n[#HD_NUM_INDENT]u 
+.             UNDERSCORE \\*[$HEAD_\\n[#LEVEL]_UL_GAP] \
+                "\v'-\\*[$HEAD_\\n[#LEVEL]_BASELINE_ADJ]'\\$[\\n[#ARG_NUM]]
+.             br
+.          \}
+.          el \{\
+.             ie !\\n[#PARAHEAD] \{\
+.                UNDERSCORE \\*[$HEAD_\\n[#LEVEL]_UL_GAP] \
+"\v'-\\*[$HEAD_\\n[#LEVEL]_BASELINE_ADJ]'\\*[$HD_NUM]\\$[\\n[#ARG_NUM]]
+.                br
+.             \}
+.             el \{\
+.                if (\\n[#PP]>0):(\\n[#INDENT_FIRST_PARAS]) \{\
+.                   if !\\n[#LB_4_HD] \{\
+.                      if !\\n[#START] \{\
+.                         if \\n[#PP_ACTIVE] \{\
+.                   nr #PP_TEXT_OFFSET +\\n[#PP_INDENT]
+.                   if (\\n[#PRINT_STYLE]=1)&(\\n[#SINGLE_SPACE]=1) .sp -1v
+.                   ti \\n[#PP_INDENT]u
+.                         \}
+.                      \}
+.                   \}
+.                \}
+.                UNDERSCORE \\*[$HEAD_\\n[#LEVEL]_UL_GAP] \
+                   "\\*[$HD_NUM]\\$[\\n[#ARG_NUM]]
+.                sp -1v
+.             \}
+.          \}
+.          nr #UNDERSCORE_WEIGHT \\n[#SAVED_UL_WEIGHT]
+.       \}
+.       if \\n[#HEAD_\\n[#LEVEL]_UNDERSCORE2] \{\
+.          nr #SAVED_UL2_WEIGHT \\n[#UNDERSCORE_WEIGHT]
+.          UNDERSCORE_WEIGHT \\*[$HEAD_\\n[#LEVEL]_UL2_WEIGHT]
+.          ie \\n[#HD_NUM_INDENT] \{\
+.             if !'\\*[$HEAD_\\n[#LEVEL]_QUAD]'CENTER' \
+.                ti \\n[#HD_NUM_INDENT]u 
+.             UNDERSCORE2 \\*[$HEAD_\\n[#LEVEL]_UL2_GAP_1] \
+                \\*[$HEAD_\\n[#LEVEL]_UL2_GAP_2] \
+                "\v'-\\*[$HEAD_\\n[#LEVEL]_BASELINE_ADJ]'\\$[\\n[#ARG_NUM]]
+.             br
+.          \}
+.          el \{\
+.             ie !\\n[#PARAHEAD] \{\
+.                UNDERSCORE2 \\*[$HEAD_\\n[#LEVEL]_UL2_GAP_1] \
+                   \\*[$HEAD_\\n[#LEVEL]_UL2_GAP_2] \
+"\v'-\\*[$HEAD_\\n[#LEVEL]_BASELINE_ADJ]'\\*[$HD_NUM]\\$[\\n[#ARG_NUM]]
+.                br
+.             \}
+.             el \{\
+.                if (\\n[#PP]>0):(\\n[#INDENT_FIRST_PARAS]) \{\
+.                   if !\\n[#LB_4_HD] \{\
+.                      if !\\n[#START] \{\
+.                         if \\n[#PP_ACTIVE] \{\
+.                            nr #PP_TEXT_OFFSET +\\n[#PP_INDENT]
+.                            if (\\n[#PRINT_STYLE]=1)&(\\n[#SINGLE_SPACE]=1) \
+.                               sp -1v
+.                            ti \\n[#PP_INDENT]u
+.                         \}
+.                      \}
+.                   \}
+.                \}
+.                UNDERSCORE2 \\*[$HEAD_\\n[#LEVEL]_UL2_GAP_1] \
+\\*[$HEAD_\\n[#LEVEL]_UL2_GAP_2] "\\*[$HD_NUM]\\$[\\n[#ARG_NUM]]
+.                sp -1v
+.             \}
+.          \}
+.          nr #UNDERSCORE_WEIGHT \\n[#SAVED_UL2_WEIGHT]
+.       \}
+.       if !\\n[#HD_NUM_INDENT] .nr #HD_NUM_INDENT \w'\\*[$HD_NUM]'
+.    \}
+.    if !\\n[#PARAHEAD] \{\
+.       if \\n[#HEAD_\\n[#LEVEL]_SPACE_AFTER] .sp
+.    \}
+.    if \\n[#CAPS_OFF] \{\
+.       CAPS OFF
+.       rr #CAPS_OFF
+.    \}
+.    if \\n[#CAPS_RESTORE] \{\
+.       CAPS
+.       rr #CAPS_RESTORE
+.    \}
+.    if \\n[#SMALLCAPS_OFF] \{\
+.       SMALLCAPS OFF
+.       rr #SMALLCAPS_OFF
+.    \}
+.    if \\n[#SMALLCAPS_RESTORE] \{\
+.       SMALLCAPS
+.       rr #SMALLCAPS_RESTORE
+.    \}
+.    ev
+.    rm $HD_NUM
+.    rr #HD_NUM_INDENT
+.    if \\n[#PARAHEAD]   .ti \\n[#PP_TEXT_OFFSET]u
+.    if !\\n[#PARAHEAD]  .nr #PP 0
+.    rr #PARAHEAD
+.    if \\n[#LB_4_HD]    .rr #LB_4_HD
+.    if \\n[#QUOTE_4_HD] .rr #QUOTE_4_HD
+.    if \\n[@TOP] \{\
+.       ch RR_@TOP
+.       rr @TOP
+.       rs
+.       nop \&
+.       sp -1
+.    \}
+.    vpt
+.END
+\#
+\# HEADING_STYLE
+\# -------------
+\# *Arguments:
+\#   <level>
+\#   FAMILY <family>
+\#   FONT   <font>
+\#   SIZE   <+|-n>
+\#   COLOR  <color>
+\#   CAPS | NO_CAPS
+\#---when called as HEADING_STYLE, these are also available---
+\#   QUAD   <direction>
+\#   NUMBER | NO_NUMBER
+\#   SPACE_AFTER | NO_SPACE_AFTER
+\#   UNDERSCORE <weight> <gap> | UNDERSCORE2 <weight> <gap1> <gap2> 
+\#   NO_UNDERSCORE | NO_UNDERSCORE2
+\#   BASELINE_ADJUST
+\#---when called as TOC_ENTRY_STYLE this is also available---
+\#   INDENT
+\# *Function:
+\#   Sets up complete style parameters for HEADING <level>.  If
+\#   invoked as TOC_ENTRY_STYLE, sets up parameters for the
+\#   corresponding TOC entry at <level>.
+\# *Notes:
+\#   Arguments may be given in any order.  Any not given retain
+\#   their current values.  Defaults for an initial 9 levels of
+\#   heading are set up in PRINTSTYLE.
+\#
+\#   NUMBER indicates that hierarchic numbering of <level> should be
+\#   prepended to heading text.  If invoked as TOC_ENTRY_STYLE,
+\#   prepend numbering to TOC entries at <level> (only works if
+\#   NUMBER is given to the corresponding HEADING <level>).
+\#
+\#   INDENT refers to the indent for <level> in the TOC.  It is
+\#   measured from the left offset of the entry level above it
+\#   (including numbering, if present).  TOC entry levels beneath
+\#   <level> will have their indents adjusted accordingly.
+\#
+.MAC HEADING_STYLE END
+.    if !\B'\\$1' \{\
+.       tm1 "[mom]: The first argument to \\$0 must be a numeric heading level.
+.       ab   [mom]: Aborting '\\n[.F]' at \\$0, line \\n[.c].
+.    \}
+.    nr #LEVEL \\$1
+.    if \\n[#FROM_OLDSTYLE] .nr #LEVEL_\\n[#LEVEL]_SET 1
+.    shift
+.\" Prepend TOC_ to style strings if called as TOC_ENTRY_STYLE
+.    if '\\$0'TOC_ENTRY_STYLE' .ds $TOC TOC_
+.    nr #ARG_NUM 0 1
+.    nr #ATTRIB \\n[#NUM_ARGS]
+.    while \\n+[#ARG_NUM]<=\\n[#ATTRIB] \{\
+.       if '\\$1'UNDERSCORE' \{\
+.          nr #HEAD_\\n[#LEVEL]_UNDERSCORE 1
+.          shift
+.          if '\\$1'' \{\
+.             tm1 "[mom]: The UNDERSCORE argument to \\$0 requires a rule weight.
+.             ab   [mom]: Aborting '\\n[.F]' at \\$0, line \\n[.c].
+.          \}
+.          ds $HEAD_\\n[#LEVEL]_UL_WEIGHT \\$1
+.          shift
+.          if '\\$1'' \{\
+.             tm1 "[mom]: The UNDERSCORE argument to \\$0 requires a rule gap.
+.             ab   [mom]: Aborting '\\n[.F]' at \\$0, line \\n[.c].
+.          \}
+.          ds $HEAD_\\n[#LEVEL]_UL_GAP    \\$1
+.          shift
+.       \}
+.       if '\\$1'NO_UNDERSCORE' \{\
+.          rr #HEAD_\\n[#LEVEL]_UNDERSCORE
+.          shift
+.       \}
+.       if '\\$1'UNDERSCORE2' \{\
+.          nr #HEAD_\\n[#LEVEL]_UNDERSCORE2 1
+.          shift
+.          if '\\$1'' \{\
+.             tm1 "[mom]: The UNDERSCORE2 argument to \\$0 requires a rule weight.
+.             ab   [mom]: Aborting '\\n[.F]' at \\$0, line \\n[.c].
+.          \}
+.          ds $HEAD_\\n[#LEVEL]_UL2_WEIGHT \\$1
+.          shift
+.          if '\\$1'' \{\
+.             tm1 "[mom]: The UNDERSCORE2 argument to \\$0 requires a rule gap.
+.             ab   [mom]: Aborting '\\n[.F]' at \\$0, line \\n[.c].
+.          \}
+.          ds $HEAD_\\n[#LEVEL]_UL2_GAP_1  \\$1
+.          shift
+.          if '\\$1'' \{\
+.             tm1 "[mom]: The UNDERSCORE2 argument to \\$0 requires an inter-rule gap.
+.             ab   [mom]: Aborting '\\n[.F]' at \\$0, line \\n[.c].
+.          \}
+.          ds $HEAD_\\n[#LEVEL]_UL2_GAP_2  \\$1
+.          shift
+.       \}
+.       if '\\$1'NO_UNDERSCORE2' \{\
+.          rr #HEAD_\\n[#LEVEL]_UNDERSCORE2
+.          shift
+.       \}
+.       if '\\$1'SPACE_AFTER' \{\
+.          nr #HEAD_\\n[#LEVEL]_SPACE_AFTER 1
+.          shift
+.       \}
+.       if '\\$1'NO_SPACE_AFTER' \{\
+.          rr #HEAD_\\n[#LEVEL]_SPACE_AFTER
+.          shift
+.       \}
+.       if '\\$1'FAMILY' \{\
+.          shift
+.          ds $\\*[$TOC]HEAD_\\n[#LEVEL]_FAM  \\$1
+.          shift
+.       \}
+.       if '\\$1'FONT' \{\
+.          shift
+.          ds $\\*[$TOC]HEAD_\\n[#LEVEL]_FT   \\$1
+.          shift
+.       \}
+.       if '\\$1'SIZE' \{\
+.          shift
+.          ds $\\*[$TOC]HEAD_\\n[#LEVEL]_SIZE \\$1
+.          shift
+.       \}
+.       if '\\$1'QUAD' \{\
+.          shift
+.          if '\\$1'L'      .ds $HEAD_\\n[#LEVEL]_QUAD LEFT
+.          if '\\$1'LEFT'   .ds $HEAD_\\n[#LEVEL]_QUAD LEFT
+.          if '\\$1'C'      .ds $HEAD_\\n[#LEVEL]_QUAD CENTER
+.          if '\\$1'CENTRE' .ds $HEAD_\\n[#LEVEL]_QUAD CENTER
+.          if '\\$1'CENTER' .ds $HEAD_\\n[#LEVEL]_QUAD CENTER
+.          if '\\$1'R'      .ds $HEAD_\\n[#LEVEL]_QUAD RIGHT
+.          if '\\$1'RIGHT'  .ds $HEAD_\\n[#LEVEL]_QUAD RIGHT
+.          shift
+.       \}
+.       if '\\$1'COLOR' \{\
+.          shift
+.          ds $\\*[$TOC]HEAD_\\n[#LEVEL]_COLOR \\$1
+.          shift
+.       \}
+.       if '\\$1'BASELINE_ADJUST' \{\
+.          shift
+.          ds $HEAD_\\n[#LEVEL]_BASELINE_ADJ \\$1
+.          shift
+.       \}
+.       if '\\$1'CAPS' \{\
+.          nr #\\*[$TOC]HEAD_\\n[#LEVEL]_CAPS 1
+.          shift
+.       \}
+.       if '\\$1'NO_CAPS' \{\
+.          rr #HEAD_\\n[#LEVEL]_CAPS
+.          shift
+.       \}
+.       if '\\$1'SMALLCAPS' \{\
+.          nr #\\*[$TOC]HEAD_\\n[#LEVEL]_SMALLCAPS 1
+.          shift
+.       \}
+.       if '\\$1'NO_SMALLCAPS' \{\
+.          rr #HEAD_\\n[#LEVEL]_SMALLCAPS
+.          shift
+.       \}
+.       if '\\$1'NUMBER' \{\
+.          nr #NUMBER_HEAD_\\n[#LEVEL] 1
+.          nr #HEAD_\\n[#LEVEL]_NUM 0 1
+.          shift
+.       \}
+.       if '\\$1'NO_NUMBER' \{\
+.          rr #NUMBER_HEAD_\\n[#LEVEL]
+.          shift
+.       \}
+.       if '\\$1'INDENT' \{\
+.          shift
+.          nr #TOC_HEAD_\\n[#LEVEL]_INDENT \\$1
+.          nr #FROM_STYLE_\\n[#LEVEL] 1
+.          shift
+.       \}
+.    \}
+.    rr #LEVEL
+.    if d$TOC .rm $TOC
+.END
+.
+.ALIAS TOC_ENTRY_STYLE HEADING_STYLE
+\#
+\# OLDSTYLE HEADINGS
+\# -----------------
+\# *Arguments:
+\#   None.
+\# *Function:
+\#   Called from HEAD, SUBHEAD, and SUBSUBHEAD, sets style
+\#   parameters for HEADINGs 1-3 to former mom defaults for those macros.
+\#   Any styles already assigned to those levels are retained.
+\#
+\#   Called by user with no argument, allows use of old style HEAD,
+\#   SUBHEAD, and SUBSUBHEAD without generating the deprecated msg.
+\# *Notes:
+\#   For backward compatibility, and to ease the transition to
+\#   the HEADING scheme for heads.
+\#
+\#   Paraheads must be set with .HEADING <level> PARAHEAD; attempts
+\#   to call PARAHEAD abort with an instructive message.
+\#
+.MAC OLDSTYLE_HEADINGS END
+.    if '\\$1'' .nr #SKIP_MSG 1
+.    nr #FROM_OLDSTYLE 1 \" Used in HEADING
+.    if \\n[#PRINT_STYLE]=1 \{\
+.       if !\\n[#LEVEL_1_SET] \{\
+.          HEADING_STYLE 1 \
+             FONT R \
+             SIZE +0 \
+             QUAD C \
+             CAPS \
+             UNDERSCORE .5 2p \
+             BASELINE_ADJUST 0 \
+             SPACE_AFTER
+.            nr #OLDSTYLE_HD 1
+.            return
+.       \}
+.       if !\\n[#LEVEL_2_SET] \{\
+.          HEADING_STYLE 2 \
+             FONT R \
+             SIZE +0 \
+             UNDERSCORE .5 2p \
+             BASELINE_ADJUST \\n[.v]/8
+.            nr #OLDSTYLE_SH 1
+.            return
+.       \}
+.       if !\\n[#LEVEL_3_SET] \{\
+.          HEADING_STYLE 3 \
+             FONT R \
+             SIZE +0 \
+             BASELINE_ADJUST \\n[.v]/8
+.            nr #OLDSTYLE_SSH 1
+.            return
+.       \}
+.    \}
+.    if \\n[#PRINT_STYLE]=2 \{\
+.       if !\\n[#LEVEL_1_SET] \{\
+.          HEADING_STYLE 1 \
+             FAMILY \E*[$DOC_FAM] \
+             FONT B \
+             SIZE +1 \
+             QUAD C \
+             CAPS \
+             UNDERSCORE .5 2p \
+             BASELINE_ADJUST 0 \
+             SPACE_AFTER
+.            nr #OLDSTYLE_HD 1
+.            return
+.       \}
+.       if !\\n[#LEVEL_2_SET] \{\
+.          HEADING_STYLE 2 \
+             FAMILY \E*[$DOC_FAM] \
+             FONT B \
+             SIZE +.5 \
+             BASELINE_ADJUST \\n[.v]/8
+.            nr #OLDSTYLE_SH 1
+.            return
+.       \}
+.       if !\\n[#LEVEL_3_SET] \{\
+.          HEADING_STYLE 3 \
+             FAMILY \E*[$DOC_FAM] \
+             FONT I \
+             SIZE +.5 \
+             BASELINE_ADJUST \\n[.v]/8
+.            nr #OLDSTYLE_SSH 1
+.            return
+.       \}
+.    \}
+.    rr #FROM_OLDSTYLE
+.END
+\#
+\# "Deprecated" message
+\#
+.MAC DEPRECATED END
+.    if !\\n[#SKIP_MSG] \{\
+.       tm1 "[mom]: Macro '\\$1' at line \\n[.c] is deprecated.
+.       tm1 "       Invoking HEADING \\$2 instead and assigning style defaults
+.       tm1 "          from former \\$1 as described in the documentation.
+.       tm1 "       If another style is desired, use HEADING_STYLE \\$2 to
+.       tm1 "          create it (see docs).
+.       tm1 "       Further warnings will not be emitted for \\$1.
+.       tm1 "       To avoid this message when using the deprecated HEAD,
+.       tm1 "          SUBHEAD, and SUBSUBHEAD macros, add '.OLDSTYLE_HEADINGS'
+.       tm1 "          after PRINTSTYLE before START.
+.       rm $MACRO
+.    \}
+.END
+\#
+\# Wrappers around old-style headings.
+\#
+.MAC HEAD END
+.    if !\\n[#OLDSTYLE_HD] \{\
+.       DEPRECATED HEAD 1
+.       OLDSTYLE_HEADINGS HEAD
+.    \}
+.    HEADING 1 \\$@
+.END
+\#
+.MAC SUBHEAD END
+.    if !\\n[#OLDSTYLE_SH] \{\
+.       DEPRECATED SUBHEAD 2
+.       OLDSTYLE_HEADINGS SUBHEAD
+.    \}
+.     HEADING 2 \\$@
+.END
+\#
+.MAC SUBSUBHEAD END
+.    if !\\n[#OLDSTYLE_SSH] \{\
+.       DEPRECATED SUBSUBHEAD 3
+.       OLDSTYLE_HEADINGS SUBSUBHEAD
+.    \}
+.    HEADING 3 \\$@
+.END
+\#
+.MAC PARAHEAD END
+.    tm1 "[mom]: \\$0 is no longer a valid macro.
+.    tm1 "       Use 'HEADING <level> PARAHEAD <text>' instead.
+.    tm1 "       You will probably want to invoke HEADING_STYLE to set
+.    tm1 "       the type parameters for the parahead.  See docs.
+.    ab   [mom]: Aborting '\\n[.F]' at \\$0, line \\n[.c].
+.END
+\#
+\# Wrapper macro for oldstyle NUMBER_HEADS, NUMBER_SUBHEADS...
+\#
+.MAC HEADING_NUMBERS END
+.    if '\\$0'NUMBER_PARAHEADS' \{\
+.       tm1 "[mom]: \\$0 is no longer a valid macro.
+.       tm1 "       Use 'HEADING_STYLE <level> NUMBER' instead.  See docs.
+.       ab   [mom]: Aborting '\\n[.F]' at \\$0, line \\n[.c].
+.       return
+.    \}
+.    if '\\$0'NUMBER_HEADS'       .nr level 1
+.    if '\\$0'NUMBER_SUBHEADS'    .nr level 2
+.    if '\\$0'NUMBER_SUBSUBHEADS' .nr level 3
+.    ds mom "[mom]:\"
+.    ie '\\$1'' .ds $PARAM NUMBER
+.    el \{\
+.       ds $PARAM NO_NUMBER
+.       ds $SWITCH " \\$1
+.    \}
+.    HEADING_STYLE \\n[level] \\*[$PARAM]
+.    if (\\n[#OLDSTYLE_HD]=1):(\\n[#OLDSTYLE_SH]=1):(\\n[#OLDSTYLE_SSH]=1) \{\
+.       tm1 "\\*[mom] OLDSTYLE_HEADINGS detected.
+.       ds mom "      \"
+.    \}
+.    tm1 "\\*[mom] Setting HEADING_STYLE \\n[level] to '\\*[$PARAM]' at '\\$0\\*[$SWITCH]', line \\n[.c].
+.    rm $PARAM
+.    rm $SWITCH
+.END
+.
+.ALIAS NUMBER_HEADS       HEADING_NUMBERS
+.ALIAS NUMBER_SUBHEADS    HEADING_NUMBERS
+.ALIAS NUMBER_SUBSUBHEADS HEADING_NUMBERS
+.ALIAS NUMBER_PARAHEADS   HEADING_NUMBERS
+\#
+\# PREFIX CHAPTER NUMBERS TO HEADINGS/TOC ENTRIES
+\# ----------------------------------------------------------------
+\# *Arguments:
+\#   <none> | <chapter number> | <anything>
+\# *Function:
+\#   Toggles register #PREFIX_CH_NUM. Sets register #CH_NUM from
+\#   string $CHAPTER if $CHAPTER is a digit; if <chapter number> arg
+\#   given, sets #CH_NUM to arg.
+\# *Notes:
+\#   Default is OFF.
+\#
+.MAC PREFIX_CHAPTER_NUMBER END
+.    ie '\\$1'' \{\
+.       ie r#CH_NUM \{\
+.          nr #PREFIX_CH_NUM 1
+.          if \\n[#CHAPTER_CALLED] \{\
+.             ie \B'\\*[$CHAPTER]' .nr #CH_NUM \\*[$CHAPTER]
+.             el .PREFIX_CH_NUM_WARNING
+.             rr #CHAPTER_CALLED
+.          \}
+.       \}
+.       el \{\
+.          ie \B'\\*[$CHAPTER]' \{\
+.             nr #PREFIX_CH_NUM 1
+.             nr #CH_NUM \\*[$CHAPTER]
+.          \}
+.          el .PREFIX_CH_NUM_WARNING
+.       \}
+.    \}
+.    el \{\
+.       ie \B'\\$1' \{\
+.          nr #CH_NUM \\$1
+.          nr #PREFIX_CH_NUM 1
+.       \}
+.       el .rr #PREFIX_CH_NUM
+.    \}
+.END
+\#
+.MAC PREFIX_CH_NUM_WARNING END
+.    tm1 "[mom]: PREFIX_CHAPTER_NUMBER cannot determine a chapter number.
+.    tm1 "       Enter the current chapter number as a digit after
+.    tm1 "       PREFIX_CHAPTER_NUMBER.
+.    ab   [mom]: Aborting '\\n[.F]', line \\n[.c].
+.END
+\#
+\# ====================================================================
+\#
+\# +++LINE BREAKS+++
+\#
+\# LINEBREAK CHARACTER
+\# -------------------
+\# *Arguments:
+\#   [character] [iterations] [vertical adjustment]
+\# *Function:
+\#   Allows user to specify a line break character and the number
+\#   of times to repeat it horiontally.
+\# *Notes:
+\#   Without an argument, LINEBREAK_CHAR will deposit a blank line.
+\#
+\#   Vertical adjustment requires a unit of measure (most likely
+\#   "p"), and has to be preceded by +|-
+\#
+.MAC LINEBREAK_CHAR END
+.    nr #REPEAT 1
+.    ds $LINEBREAK_CHAR \\$1
+.    if !'\\$2'' .nr #LB_CHAR_ITERATIONS \\$2
+.    if !'\\$3'' .ds $LINEBREAK_CHAR_V_ADJ \\$3
+.    if '\\*[$LINEBREAK_CHAR_V_ADJ]'' .ds $LINEBREAK_CHAR_V_ADJ +0
+.    if \\n[#LB_CHAR_ITERATIONS] \{\
+.       while (\\n[#LB_CHAR_ITERATIONS]>\\n[#REPEAT]) \{\
+.          as $LINEBREAK_CHAR "\\ \\$1
+.          nr #REPEAT \\n[#REPEAT]+1
+.       \}
+.    \}
+.    rr #REPEAT
+.    rr #LB_CHAR_ITERATIONS
+.END
+\#
+\# LINE BREAK
+\# ----------
+\# *Arguments:
+\#   <none>
+\# *Function:
+\#   Deposits line break character.
+\# *Notes:
+\#   If $LINEBREAK_CHAR is blank, simply advances 2 line spaces.
+\#
+.MAC LINEBREAK END
+.    if r #Q_AT_TOP .rr #Q_AT_TOP
+.    ie  '\\*[$LINEBREAK_CHAR]'' .sp 2
+.    el \{\
+.       ie \\n[#END_QUOTE] .
+.       el .sp
+.       ev LINEBREAK
+.       evc 0
+.       CENTER
+.       PRINT \
+\m[\\*[$LINEBREAK_COLOR]]\v'\\*[$LINEBREAK_CHAR_V_ADJ]'\
+\\*[$LINEBREAK_CHAR]\m[]
+.       sp
+.       ev
+.       QUAD \\*[$DOC_QUAD]
+.    \}
+.    nr #LINEBREAK 1
+.    if r #QUOTE .rr #QUOTE
+.    if r #END_QUOTE .rr #END_QUOTE
+.    nr #PP 0
+.    nr #LB_4_HD       1
+.    nr #LB_4_PARAHEAD 1
+.END
+\#
+\# ====================================================================
+\#
+\# +++PARAGRAPHS+++
+\#
+\# PARAGRAPH FONT
+\# --------------
+\# *Argument:
+\#   <font of running text>
+\# *Function:
+\#   Creates or modifies string $PP_FT.
+\# *Notes:
+\#   Affects all paragraphs.
+\#
+.MAC PP_FONT END
+.    if \\n[#PRINT_STYLE]=1 \{\
+.       ie \\n[#ITALIC_MEANS_ITALIC] .nop
+.       el .return
+.    \}
+.    if \\n[#COLLATE]=1 \
+.       if !'\\*[$SAVED_PP_FT]'' .rm $SAVED_PP_FT
+.    ds $PP_FT \\$1
+.    FT \\*[$PP_FT]
+.END
+\#
+\# PARAGRAPH INDENT
+\# ----------------
+\# *Argument:
+\#   <amount to indent paragraphs in running text (ipPcm)>
+\# *Function:
+\#   Allows user to change the default para indent.  The change will
+\#   affect the indent of QUOTEs and BLOCKQUOTEs as well.
+\# *Notes:
+\#   Default for printstyle TYPEWRITE is 1/2-inch.  Default for
+\#   printstyle TYPESET is 2 ems.  The defaults are set in
+\#   PRINTSTYLE, not DEFAULTS.
+\#
+.MAC PARA_INDENT END
+.    ie \B'\\$1' \{\
+.       nr #PP_INDENT (\\$1)
+.       nr #SAVED_PP_INDENT \\n[#PP_INDENT]
+.    \}
+.    el \{\
+.       ie '\\$1'' \{\
+.          nr #PP_INDENT \\n[#SAVED_PP_INDENT]
+.          rr #SAVED_PP_INDENT
+.       \}
+.       el \{\
+.          nr #SAVED_PP_INDENT \\n[#PP_INDENT]
+.          rr #PP_INDENT
+.       \}
+.    \}
+.END
+\#
+\# INDENT FIRST PARAGRAPHS
+\# -----------------------
+\# *Arguments:
+\#   <none> | <anything>
+\# *Function:
+\#   By default, the first para of a document, as well as the first
+\#   paras of blockquotes and block-style epigraphs are not indented.
+\#   When invoked, this macro will indent all paras.
+\# *Notes:
+\#   Default is OFF.
+\#
+.MAC INDENT_FIRST_PARAS END
+.    ie '\\$1'' .nr #INDENT_FIRST_PARAS 1
+.    el .rr #INDENT_FIRST_PARAS
+.END
+\#
+\# INTER-PARAGRAPH SPACING
+\# -----------------------
+\# *Arguments:
+\#   <none> | <anything>
+\# *Function:
+\#   Adds a line space between paragraphs in body text.  Block quotes
+\#   are unaffected.
+\# *Notes:
+\#   Default is OFF.  PARA_SPACE is not recommended for use with
+\#   PRINTSTYLE TYPEWRITE without SINGLESPACE.
+\#
+.MAC PARA_SPACE END
+.    ie '\\$1'' \{\
+.       nr #PP_SPACE 1
+.    \}
+.    el \{\
+.       ie \B'\\$1' \{\
+.          nr #PP_SPACE 1
+.          ds $PP_SPACE_AMOUNT \\$1
+.       \}
+.       el .rr #PP_SPACE
+.    \}
+.END
+\#
+\# PARAGRAPH
+\# ---------
+\# *Arguments:
+\#   <none>
+\# *Function:
+\#   Figures out what to do with paragraphs under differing conditions.
+\# *Notes:
+\#   Note the use of transparent line break (\!.br) to get
+\#   PP to work within blockquotes and epigraphs.
+\#
+\#   PP_STYLE 1 = regular paras; 2 = blockquotes, epigraphs
+\#
+.MAC PP END
+.    br
+.    if \\n[#COVERTEXT_PP] \{\
+.       ie \\n[#INDENT_ACTIVE] .ti \\n[#INDENT]u+\\n[#PP_INDENT]u
+.       el .ti \\n[#PP_INDENT]u
+.       return
+.    \}
+.    if \\n[defer-pp-ind-reset] \{\
+.       sp -1
+.       rr defer-pp-ind-reset
+.    \}
+.    if \\n[#DOC_TYPE]=4 \{\
+.       if !'\\n[.z]'' .di
+.       nr #TOTAL_FIELDS \\n[#FIELD]
+.       nr #FIELD        0 1
+.       nr #NUM_FIELDS   0 1
+.       if \\n[#TOTAL_FIELDS]>0 \{\
+.          while \\n+[#NUM_FIELDS]<=\\n[#TOTAL_FIELDS] \{\
+.             nf
+.             LETTERHEAD\\n+[#FIELD]
+.             QUAD \\*[$DOC_QUAD]
+.             ALD \\n[#DOC_LEAD]u
+.             if \\n[#DATE_FIRST]=1 .ALD \\n[#DOC_LEAD]u
+.             rr #DATE_FIRST
+.             rm LETTERHEAD\\n[#FIELD]
+.          \}
+.          rr #FIELD
+.          rr #NUM_FIELDS
+.          rr #TOTAL_FIELDS
+.       \}
+.    \}
+.    rr #PP_ACTIVE
+.    if r #Q_AT_TOP .rr #Q_AT_TOP
+.    if \\n[#PP_STYLE]=1 \{\
+.       if \\n[#ENDNOTE] \{\
+.          nr #RESET_PARA_SPACE \\n[#PP_SPACE]
+.          ie \\n[#EN_PP_SPACE] .PARA_SPACE
+.          el .PARA_SPACE OFF
+.       \}
+.       if !\\n[#ENDNOTE] .po \\n[#L_MARGIN]u
+.       if \\n[#COLUMNS] \{\
+.          if !\\n[#ENDNOTE] \{\
+.             po \\n[#COL_\\n[#COL_NUM]_L_MARGIN]u
+.             nr #L_MARGIN \\n[.o]
+.          \}
+.       \}
+.       if \\n[#TAB_ACTIVE] .TAB \\n[#CURRENT_TAB]
+.       ie \\n[#PRINT_STYLE]=1 \{\
+.          TYPEWRITER
+.          ie \\n[#ENDNOTE] .vs \\n[#EN_LEAD]u
+.          el .vs \\n[#DOC_LEAD]u
+.          QUAD \\*[$DOC_QUAD]
+.          if \\n[#SLANT_ON] \{\
+.             if \\n[#UNDERLINE_SLANT] .UNDERLINE
+.          \}
+.          if '\\*[$PP_FT]'I' \
+.             if \\n[#ITALIC_MEANS_ITALIC] .FT I
+.       \}
+.       el \{\
+.          ie \\n[#ENDNOTE] \{\
+.             FAMILY  \\*[$EN_FAM]
+.             FT      \\*[$EN_FT]
+.             ps \\n[#EN_PS]u
+.             vs \\n[#EN_LEAD]u
+.             QUAD    \\*[$EN_QUAD]
+.          \}
+.          el \{\
+.             FAMILY  \\*[$DOC_FAM]
+.             if !'\\*[$SAVED_PP_FT]'' \{\
+.                ds $PP_FT \\*[$SAVED_PP_FT]
+.                rm $SAVED_PP_FT
+.             \}
+.             FT \\*[$PP_FT]
+.             ps \\n[#DOC_PT_SIZE]u
+.             vs      \\n[#DOC_LEAD]u
+.             QUAD    \\*[$DOC_QUAD]
+.          \}
+.       \}
+.       ie \\n[#PP]=0 \{\
+.          if \\n[#INDENT_FIRST_PARAS] \{\
+.             ie \\n[#INDENT_ACTIVE] .ti \\n[#INDENT]u+\\n[#PP_INDENT]u
+.             el .ti \\n[#PP_INDENT]u
+.             if '\\n[.z]'END_NOTES' \
+.                ti \\n[#EN_PP_INDENT]u+\\n[#EN_TEXT_INDENT]u
+.          \}
+.          if r #END_QUOTE \{\
+.             if \\n[#END_QUOTE] \{\
+.                if !\\n[#LINEBREAK] \{\
+.                   ie \\n[#INDENT_ACTIVE] .ti \\n[#INDENT]u+\\n[#PP_INDENT]u
+.                   el .ti \\n[#PP_INDENT]u
+.                   if '\\n[.z]'END_NOTES' \
+.                      ti \\n[#EN_PP_INDENT]u+\\n[#EN_TEXT_INDENT]u
+.                \}
+.             \}
+.          \}
+.       \}
+.       el \{\
+.          if \\n[#PP_SPACE] \{\
+.             ie \\n[#END_QUOTE] \{\
+.                ie !'\\*[$PP_SPACE_AMOUNT]'' .ALD \\*[$PP_SPACE_AMOUNT]
+.                el .sp
+.                rr #END_QUOTE
+.                nr #NO_SPACE 1
+.                nr #BASELINE_MARK \\n[nl]
+.             \}
+.             el \{\
+.                if \\n[#NO_SPACE]=1 .rr #NO_SPACE
+.                if !\\n[nl]=\\n[#BASELINE_MARK] \{\
+.                   ie !'\\*[$PP_SPACE_AMOUNT]'' .ALD \\*[$PP_SPACE_AMOUNT]
+.                   el .sp
+.                   rr #BASELINE_MARK
+.                \}
+.             \}
+.          \}
+.          ie \\n[#INDENT_ACTIVE] .ti \\n[#INDENT]u+\\n[#PP_INDENT]u
+.          el .ti \\n[#PP_INDENT]u
+.          if '\\n[.z]'END_NOTES' \
+.             ti \\n[#EN_PP_INDENT]u+\\n[#EN_TEXT_INDENT]u
+.       \}
+.       if r #START     .rr #START
+.       if r #QUOTE     .rr #QUOTE
+.       if r #END_QUOTE .rr #END_QUOTE
+.       if r #HEAD      .rr #HEAD
+.       if r #SUBHEAD   .rr #SUBHEAD
+.       if r #EPIGRAPH  .rr #EPIGRAPH
+.       if r #Q_FITS    .rr #Q_FITS
+.       if r #LINEBREAK .rr #LINEBREAK
+.       if \\n[#ENDNOTE] \{\
+.          ie \\n[#RESET_PARA_SPACE] .PARA_SPACE
+.          el .PARA_SPACE OFF
+.       \}
+.       if \\n[#CONDENSE] \{\
+\E*[COND]\c
+.       \}
+.       if \\n[#EXTEND]=1 \{\
+\E*[EXT]\c
+.       \}
+.       nr #PP +1
+.    \}
+.    if \\n[#PP_STYLE]=2 \{\
+\!.     br
+.       if \\n[#BROKEN_QUOTE] \{\
+.          ie \\n[nl]=\\n[#PAGE_TOP] .nr #Q_PP 1
+.          el .nr #Q_PP 0
+.          rr #BROKEN_QUOTE
+.       \}
+.       ie \\n[#Q_PP]=0 \{\
+.          if \\n[#INDENT_FIRST_PARAS] \
+.             ti \\n[#PP_INDENT]u/2u
+.          if \\n[#ENDNOTE] \{\
+.             ie \\n[#INDENT_FIRSTS] .ti \\n[#PP_INDENT]u/2u
+.             el .ti 0
+.          \}
+.       \}
+.       el \{\
+.          ti \\n[#PP_INDENT]u/2u
+.          if \\n[#PP_SPACE]=1 \{\
+.             ie !'\\*[$PP_SPACE_AMOUNT]'' .ALD \\*[$PP_SPACE_AMOUNT]
+.             el .sp
+.          \}
+.       \}
+.       if \\n[#CONDENSE] \{\
+\E*[COND]\c
+.       \}
+.       if \\n[#EXTEND]=1 \{\
+\E*[EXT]\c
+.       \}
+.    nr #Q_PP +1
+.    \}
+.\" This takes care of multi-paragraph dialogue, where each para
+.\" is introduced by an open quote whereas the previous para has
+.\" no close quote.
+.    if \\n[#OPEN_CLOSE]=1 .nr #OPEN_CLOSE 0
+.    nr #PP_ACTIVE 1
+.    UNDERLINE OFF
+.    if r #QUOTE_4_HD .rr #QUOTE_4_HD
+.    if r #LB_4_HD .rr #LB_4_HD
+.END
+\# ====================================================================
+\#
+\# +++QUOTES+++
+\#
+\# ---Line for line quotes, i.e. poetry or code snippets---
+\#
+\# UNDERLINE QUOTES
+\# ----------------
+\# *Arguments:
+\#   <none> | <anything>
+\# *Function:
+\#   Creates or modifies register #UNDERLINE_QUOTES (toggle).
+\#   If on, line for line quotes are underlined when printstyle
+\#   is TYPEWRITE.
+\# *Notes:
+\#   Default is ON for printstyle TYPEWRITE.
+\#
+.MAC UNDERLINE_QUOTES END
+.    ie '\\$1'' .nr #UNDERLINE_QUOTES 1
+.    el .rr #UNDERLINE_QUOTES
+.END
+\#
+\# QUOTE INDENT
+\# ------------
+\# *Argument:
+\#   <integer> | <integer with unit of measure appended>
+\# *Function:
+\#   Creates or modifies register #Q_OFFSET_VALUE or string
+\#   $Q_OFFSET_VALUE.
+\# *Notes:
+\#   If just an integer given, value by which to multiply PARA_INDENT
+\#   to get quote indent.  If integer with a unit of measure appended,
+\#   absolute value of quote indent.
+\#
+\#  Default is 3 for typeset; 2 for typewrite.
+\#
+.MAC QUOTE_INDENT END
+.    if '\\$0'BLOCKQUOTE_INDENT' .ds BQ BQ
+.    if '\\$0'QUOTE_INDENT'      .ds BQ Q
+.    rr #\\*[BQ]_OFFSET_VALUE
+.    rm $\\*[BQ]_OFFSET_VALUE
+.    ds $EVAL_QI_ARG \\$1
+.    substring $EVAL_QI_ARG -1
+.    ie \B'\\*[$EVAL_QI_ARG]' .nr #\\*[BQ]_OFFSET_VALUE \\$1
+.    el .ds $\\*[BQ]_OFFSET_VALUE \\$1
+.    rm BQ
+.END
+.
+.ALIAS BLOCKQUOTE_INDENT QUOTE_INDENT
+\#
+\# QUOTE_AUTOLEAD
+\# --------------
+\# *Arguments:
+\#   <autolead value>
+\# *Function:
+\#   Sets autolead for quotes and/or blockquotes.
+\#
+.MAC QUOTE_AUTOLEAD END
+.    rr #\\$0_DEFAULT
+.    if '\\$0'QUOTE_AUTOLEAD'              .nr #Q_AUTOLEAD (p;\\$1)
+.    if '\\$0'BLOCKQUOTE_AUTOLEAD'         .nr #BQ_AUTOLEAD (p;\\$1)
+.    if '\\$0'ENDNOTE_QUOTE_AUTOLEAD'      .nr #EN_Q_AUTOLEAD (p;\\$1)
+.    if '\\$0'ENDNOTE_BLOCKQUOTE_AUTOLEAD' .nr #EN_BQ_AUTOLEAD (p;\\$1)
+.END
+.
+.ALIAS BLOCKQUOTE_AUTOLEAD         QUOTE_AUTOLEAD
+.ALIAS ENDNOTE_QUOTE_AUTOLEAD      QUOTE_AUTOLEAD
+.ALIAS ENDNOTE_BLOCKQUOTE_AUTOLEAD QUOTE_AUTOLEAD
+\#
+\# ALWAYS FULLSPACE QUOTES
+\# -----------------------
+\# *Arguments:
+\#   <none> | <anything>
+\# *Function:
+\#   Toggles register #FULLSPACE_QUOTES.
+\# *Notes:
+\#   If user doesn't like the default 1/2 line space above and below
+\#   quotes, s/he can turn it off here.  Has no effect in TYPEWRITE.
+\#
+.MAC ALWAYS_FULLSPACE_QUOTES END
+.    if '\\$1'' .nr #FULLSPACE_QUOTES 1
+.    el .rr #FULLSPACE_QUOTES
+.END
+\#
+\# QUOTE
+\# -----
+\# *Arguments:
+\#   <none> | <anything>
+\# *Function:
+\#   Indents quoted text on a line for line basis, or turns QUOTE off.
+\# *Notes:
+\#   Owing to the need to bottom align TYPESET pages, quoted text gets
+\#   diverted so its depth can be measured (in DO_QUOTE) for determining
+\#   how much space to put before and after.
+\#
+\# QUOTE
+\# -----
+\# *Arguments:
+\#   <none> | <anything>
+\# *Function:
+\#   Indents quoted text on a line for line basis, or turns QUOTE off.
+\# *Notes:
+\#   Owing to the need to bottom align TYPESET pages, quoted text gets
+\#   diverted so its depth can be measured (in DO_QUOTE) for determining
+\#   how much space to put before and after.
+\#
+.MAC QUOTE END
+.    br
+.    if \\n[#PP]>0 .rr #START
+.    if \\n[#LINENUMBERS]=1 \{\
+.       nr #LINENUMBERS 2
+.       nr #NEXT_LN \\n[ln]
+.       nm
+.    \}
+.    if '\\$1'ADJUST' \{\
+.       ds $Q_SPACE_ADJUST \\$2
+.       shift 2
+.    \}
+.    ie '\\$1'' \{\
+.       ev QUOTE
+.       evc 0
+.       if \\n[#LINENUMBERS]=2 \{\
+.          if \\n[#SILENT_QUOTE_LN]=1 .nm \\n[#NEXT_LN] 1000 -4
+.       \}
+.       nr #IN_DIVER 1
+.       nr #QUOTE 1
+.       di P_QUOTE
+.       if '\\*[$Q_QUAD]'LEFT' \{\
+.          ie !'\\*[$Q_OFFSET_VALUE]'' .ll \\n[#L_LENGTH]u-\\*[$Q_OFFSET_VALUE]
+.          el .ll \\n[#L_LENGTH]u-(\\n[#PP_INDENT]u*\\n[#Q_OFFSET_VALUE]u)
+.       \}
+.       ta \\n[.l]u
+.       if \\n[#COLUMNS] \{\
+.          ie \\n[#Q_OFFSET_VALUE] \
+.             ll \\n[#COL_L_LENGTH]u-(\\n[#PP_INDENT]u*\\n[#Q_OFFSET_VALUE]u)
+.          el .ll \\n[#COL_L_LENGTH]u-\\*[$Q_OFFSET_VALUE]
+.          ta \\n[.l]u
+.       \}
+.       if \\n[#PRINT_STYLE]=1 \{\
+.          TYPEWRITER
+.          vs \\n[#DOC_LEAD]u
+.          LEFT
+.       \}
+.       if \\n[#PRINT_STYLE]=2 \{\
+.          FAMILY  \\*[$QUOTE_FAM]
+.          FT      \\*[$QUOTE_FT]
+.          ps \\n[#DOC_PT_SIZE]u\\*[$QUOTE_SIZE_CHANGE]
+.          ie !r #Q_AUTOLEAD .vs \\n[#DOC_LEAD]u
+.          el \{\
+.             vs \\n[.ps]u+\\n[#Q_AUTOLEAD]u
+.             nr #Q_LEAD \\n[.v]
+.          \}
+.          if \\n[#ENDNOTE] \{\
+.             ps \\n[#EN_PS]u\\*[$QUOTE_SIZE_CHANGE]
+.             ie !r #EN_Q_AUTOLEAD .vs \\n[#EN_Q_LEAD]u
+.             el \{\
+.                vs \\n[.ps]u+\n[#EN_Q_AUTOLEAD]u
+.                nr #EN_Q_LEAD \\n[.v]
+.             \}
+.          \}
+.          nr #Q_LEAD_REAL \\n[.v]
+.          if \\n[#QUOTE_COLOR]=1 \{\
+.             nf
+.             gcolor \\*[$QUOTE_COLOR]
+.          \}
+.          \\*[$Q_QUAD]
+.       \}
+.       if \\n[#LINENUMBERS]=2 \{\
+.          ie \\n[#QUOTE_LN]=1 \{\
+.             if '\\n[#Q_LN_GUTTER]'' .nr #Q_LN_GUTTER \\n[#LN_GUTTER]
+.             LN_PARAMS
+.             nm \\n[ln] "" \\n[#Q_LN_GUTTER] -3-\\n[#Q_LN_GUTTER]
+.             RESTORE_PARAMS
+.          \}
+.          el \{\
+.             if !\\n[#SILENT_QUOTE_LN] .NUMBER_LINES OFF
+.          \}
+.       \}
+.       nr #Q_TOP \\n[nl]
+.       if \\n[#PRINT_STYLE]=1 \
+.          if \\n[#UNDERLINE_QUOTES] .FT I
+.    \}
+.    el .DO_QUOTE
+.END
+\#
+\# CODE
+\# ----
+\# *Arguments:
+\#   <none> [ BR | BREAK | SPREAD ]
+\#    or
+\#   <anything> [ BR | BREAK | SPREAD ]
+\# *Function:
+\#   Takes care of administrivia associated with setting code snippets.
+\#
+.MAC CODE END
+\c
+.    if '\\$1'BR' \{\
+.       br
+.       nr #BREAK_OR_SPREAD 1
+.       shift
+.    \}
+.    if '\\$1'BREAK' \{\
+.       nr #BREAK_OR_SPREAD 1
+.       br
+.       shift
+.    \}
+.    if '\\$1'SPREAD' \{\
+.       nr #BREAK_OR_SPREAD 2
+.       brp
+.       shift
+.    \}
+.    ie '\\$1'' \{\
+.       ds $RESTORE_FAM \\n[.fam]
+.       ds $RESTORE_FT  \\n[.sty]
+.       ie \\n[#PRINT_STYLE]=1 \{\
+.          CODE_FAMILY C
+.          ie \\n[#CODE_FT]=1 .ft \\*[$CODE_FT]
+.          el \{\
+.             CODE_FONT R
+.             ft R
+.             char ' \[aq]
+.          \}
+.          if \\n[#UNDERLINE_QUOTES]=1 \{\
+.             nr #RESTORE_UNDERLINE 1
+.             UNDERLINE_QUOTES OFF
+.             FT \\*[$CODE_FT]
+.             char ' \[aq]
+.          \}
+.       \}
+.       el \{\
+.          ie \\n[#CODE_FAM]=1 .fam \\*[$CODE_FAM]
+.          el \{\
+.             CODE_FAMILY C
+.             fam \\*[$CODE_FAM]
+.          \}
+.          ie \\n[#CODE_FT]=1 .ft \\*[$CODE_FT]
+.          el \{\
+.             CODE_FONT R
+.             ft \\*[$CODE_FT]
+.          \}
+.          if \\n[#CODE_COLOR]=1 .gcolor \\*[$CODE_COLOR]
+.          char ' \[aq]
+.          if !\\n[#CODE_SIZE_ADJ]=0 .ps \\n[#PT_SIZE]u*\\n[#CODE_SIZE_ADJ]u/100u
+.          if \\n[#SQ_ON] \{\
+.             nr #SQ_WAS_ON 1
+.             SMARTQUOTES OFF
+.          \}
+.       \}
+.    \}
+.    el \{\
+.       fam \\*[#RESTORE_FAM]
+.       ft  \\*[#RESTORE_FT]
+.       rm $RESTORE_FAM
+.       rm $RESTORE_FT
+.       if !\\n[#CODE_SIZE_ADJ]=0 .ps
+.       char ' \[aq]
+.       if !'\\n[.z]'' \
+.          if \\n[#LINENUMBERS] .nn
+.       if \\n[#CODE_COLOR]=1 .gcolor
+.       if \\n[#RESTORE_UNDERLINE]=1 \{\
+.          rr #RESTORE_UNDERLINE
+.          UNDERLINE_QUOTES
+.       \}
+.       if \\n[#SQ_WAS_ON]=1 \{\
+.          rr #SQ_WAS_ON
+.          SMARTQUOTES
+.       \}
+.       if \\n[#QUOTE] .sp
+.    \}
+.END
+\#
+\# ---Blockquotes---
+\#
+\# BLOCKQUOTE
+\# ----------
+\# *Arguments:
+\#   <none> | <anything>
+\# *Function:
+\#   Indents quoted text in fill mode and shortens line length
+\#   equivalently, or turns BLOCKQUOTE off.
+\# *Notes:
+\#   Owing to the need to bottom align TYPESET pages, quoted text gets
+\#   diverted so its depth can be measured (in DO_QUOTE) for determining
+\#   how much space to put before and after.
+\#
+\#   .PP after blockquote is optional if there's only one para,
+\#   but required if there's more than one.
+\#
+.MAC BLOCKQUOTE END
+.    br
+.    if \\n[#PP]>0 .rr #START
+.    if \\n[#LINENUMBERS]=1 \{\
+.       nr #LINENUMBERS 2
+.       nr #NEXT_LN \\n[ln]
+.       nm
+.    \}
+.    if '\\$1'ADJUST' \{\
+.       ds $BQ_SPACE_ADJUST \\$2
+.       shift 2
+.    \}
+.    if \\n[in-cutaround] .nr #PP_INDENT \\n[restore-pp-ind]/2
+.    ie '\\$1'' \{\
+.       ev BLOCKQUOTE
+.       evc 0
+.       nr #IN_DIVER 1
+.       nr #QUOTE    2
+.       nr #PP_STYLE 2
+.       nr #Q_PP     0
+.       if \\n[in-cutaround] \{\
+.          if '\\*[cutaround-type]'RIGHT' \{\
+.             nr reset-ll 1
+.             nr #L_LENGTH \\n[#DOC_L_LENGTH]-\\n[cutaround-width]-1v\\*[width-adj]
+.          \}
+.       \}
+.       di B_QUOTE
+.       ie !'\\*[$BQ_OFFSET_VALUE]'' .ll \\n[#L_LENGTH]u-(\\*[$BQ_OFFSET_VALUE]*2u)
+.       el .ll \\n[#L_LENGTH]u-(\\n[#PP_INDENT]u*(\\n[#BQ_OFFSET_VALUE]u*2u))
+.       if \\n[in-cutaround] .nr #PP_INDENT \\n[.i]+\\n[pp-ind-tmp]
+.       if \\n[#ENDNOTE] \{\
+.          if \\n[#EN_NUMBERS_ALIGN_RIGHT] \{\
+.             ie r#BQ_OFFSET_VALUE \
+.                ll \
+\\n[#RESET_L_LENGTH]u-\\n[#EN_TEXT_INDENT]u-(\\n[#EN_PP_INDENT]u*(\\n[#BQ_OFFSET_VALUE]u*2u))
+.             el \
+.                ll \
+\\n[#RESET_L_LENGTH]u-\\n[#EN_TEXT_INDENT]u-(\\*[$BQ_OFFSET_VALUE]*2u)
+.          \}
+.          if \\n[#EN_NUMBERS_ALIGN_LEFT] \{\
+.             ie r#BQ_OFFSET_VALUE \
+.                ll \\n[#L_LENGTH]u-(\\n[#EN_PP_INDENT]u*(\\n[#BQ_OFFSET_VALUE]u*2u))
+.             el \
+.                ll \\n[#L_LENGTH]u-(\\*[$BQ_OFFSET_VALUE]u*2u)
+.          \}
+.       \}
+.       ta \\n[.l]u
+.       CHECK_INDENT
+.       if \\n[#COLUMNS] \{\
+.          ie r#BQ_OFFSET_VALUE \
+.             ll \
+\\n[#COL_L_LENGTH]u-(\\n[#PP_INDENT]u*(\\n[#BQ_OFFSET_VALUE]u*2u))
+.          el \
+.             ll \\n[#COL_L_LENGTH]u-(\\*[$BQ_OFFSET_VALUE]*2u)
+.          if \\n[#ENDNOTE] \{\
+.             if \\n[#EN_NUMBERS_ALIGN_RIGHT] \{\
+.                ie r#BQ_OFFSET_VALUE \
+.                   ll \
+\\n[#RESET_L_LENGTH]u-\\n[#EN_TEXT_INDENT]u-(\\n[#EN_PP_INDENT]u*(\\n[#BQ_OFFSET_VALUE]u*2u))
+.                el \
+.                   ll \
+\\n[#RESET_L_LENGTH]u-\\n[#EN_TEXT_INDENT]u-(\\*[$BQ_OFFSET_VALUE]*2u)
+.             \}
+.             if \\n[#EN_NUMBERS_ALIGN_LEFT] \{\
+.                ie r#BQ_OFFSET_VALUE \
+.                   ll \
+\\n[#COL_L_LENGTH]u-(\\n[#EN_PP_INDENT]u*(\\n[#BQ_OFFSET_VALUE]u*2u))
+.                el \
+.                   ll \\n[#COL_L_LENGTH]u-(\\*[$BQ_OFFSET_VALUE]*2u)
+.             \}
+.          \}
+.          ta \\n[.l]u
+.       \}
+.       if \\n[#PRINT_STYLE]=1 \{\
+.          TYPEWRITER
+.          vs \\n[#DOC_LEAD]u
+.          QUAD LEFT
+.          HY OFF
+.       \}
+.       if \\n[#PRINT_STYLE]=2 \{\
+.          FAMILY  \\*[$BQUOTE_FAM]
+.          FT      \\*[$BQUOTE_FT]
+.          ps \\n[#DOC_PT_SIZE]u\\*[$BQUOTE_SIZE_CHANGE]
+.          ie !r #BQ_AUTOLEAD .vs \\n[#DOC_LEAD]u
+.          el \{\
+.             vs \\n[.ps]u+\\n[#BQ_AUTOLEAD]u
+.             nr #BQ_LEAD \\n[.v]
+.          \}
+.          if \\n[#ENDNOTE] \{\
+.             ps \\n[#EN_PS]u\\*[$BQUOTE_SIZE_CHANGE]
+.             ie !r#EN_BQ_AUTOLEAD .vs \\n[#EN_BQ_LEAD]u
+.             el \{\
+.                vs \\n[.ps]u+\\n[#EN_BQ_AUTOLEAD]u
+.                nr #EN_BQ_LEAD \\n[.v]
+.             \}
+.          \}
+.          nr #Q_LEAD_REAL \\n[.v]
+.          if \\n[#BQUOTE_COLOR]=1 \{\
+.             nf
+.             gcolor \\*[$BQUOTE_COLOR]
+.          \}
+.          QUAD \\*[$BQUOTE_QUAD]
+.          nr #DIVERSIONS_HY_MARGIN (p;\\n[.ps]u*2.75)/1000
+.          HY_SET 1 \\n[#DIVERSIONS_HY_MARGIN]u (\\n[#PT_SIZE]u/1000u/8u)p
+.          hy 14
+.       \}
+.       if \\n[#LINENUMBERS]=2 \{\
+.          ie \\n[#BQUOTE_LN]=1 \{\
+.             if '\\n[#BQ_LN_GUTTER]'' .nr #BQ_LN_GUTTER \\n[#LN_GUTTER]
+.             LN_PARAMS
+.             nm \\n[ln] "" \\n[#BQ_LN_GUTTER] -3-\\n[#BQ_LN_GUTTER]
+.             RESTORE_PARAMS
+.          \}
+.          el \
+.             if !\\n[#SILENT_BQUOTE_LN] .NUMBER_LINES OFF
+.       \}
+.       nr #Q_TOP \\n[nl]
+.       if \\n[#INDENT_FIRST_PARAS] \{\
+.          ie !\\n[#ENDNOTE] \{\
+.             if \\n[#PRINT_STYLE]=1 .ti \\n[#PP_INDENT]u/2u
+.             if \\n[#PRINT_STYLE]=2 .ti \\n[#PP_INDENT]u/2u
+.          \}
+.          el \{\
+.             if \\n[#INDENT_FIRSTS]=1 \{\
+.                if \\n[#PRINT_STYLE]=1 .ti \\n[#EN_PP_INDENT]u/2u
+.                if \\n[#PRINT_STYLE]=2 .ti \\n[#EN_PP_INDENT]u/2u
+.             \}
+.          \}
+.       \}
+.    \}
+.    el .DO_BLOCKQUOTE
+.END
+\#
+\# DO QUOTE
+\# --------
+\# *Arguments:
+\#   <none>
+\# *Function:
+\#   Ends the diversion P_QUOTE or B_QUOTE.  Spaces them according to
+\#   PRINTSTYLE, whether there's inter-paragraph spacing, and page
+\#   position.  TYPEWRITE treats spacing the same way in all circumstance
+\#   (viz. an extra line space).  TYPESET puts in only half
+\#   line spaces if the entire quote plus 1 line of body under the quote
+\#   fits on the the page; otherwise it puts in a full extra blank
+\#   line.  (This is to ensure the page remains bottom aligned).
+\#
+.MAC DO_QUOTE END
+.    br
+.    if \\n[#DIVER_LN_OFF] \{\
+\!.     NUMBER_LINES OFF
+.       rr #DIVER_LN_OFF
+.    \}
+.    di
+.    if '\\$0'DO_BLOCKQUOTE' .ds BQ BQ
+.    if '\\$0'DO_QUOTE'      .ds BQ Q
+.    if \\n[in-cutaround] \{\
+.       if \\n[dn]>\\n[.t] \{\
+.          tm1 "[mom]: Blockquote depth exceeds cutaround depth."
+.          ab   [mom]: Aborting at line \\n[.c].
+.       \}
+.    \}
+.    rr #IN_DIVER
+.    if \\n[#RESET_FN_COUNTERS]=2 \{\
+.       if !\\n[#FN_COUNT]=1 \{\
+.          if ((\\n[#PAGE_LENGTH]+\\n[#VARIABLE_FOOTER_POS])+\\n[#DIVER_DEPTH])>(\\n[#PAGE_LENGTH]+\\n[#VARIABLE_FOOTER_POS]) \{\
+.             DIVER_FN_2_POST
+.             rr #RESET_FN_COUNTERS
+.          \}
+.       \}
+.    \}
+.    nr #SAVED_FN_NUMBER \\n[#FN_NUMBER]
+.    nr #DONE_ONCE 0 1
+.    REMOVE_INDENT
+.    ev
+.    nr #Q_DEPTH \\n[#DIVER_DEPTH]
+.    nr #Q_LEAD_DIFF \\n[#LEAD]-\\n[#Q_LEAD_REAL]
+.    if !\\n[.v]=\\n[#Q_LEAD_REAL] \{\
+.       if !\\n[#NO_SHIM] \{\
+.          br
+.          nr #CALCULATE_ONLY 1
+.          nr #CURRENT_V_POS \\n[nl]+\\n[#Q_DEPTH]
+.          SHIM
+.          rr #CALCULATE_ONLY
+.          nr #Q_SPACE_EQ (\\n[#SHIM]/2)
+.          nr #TRAP \\n[.t]-1
+.       \}
+.    \}
+.    if \\n[#ENDNOTE] \{\
+.       nr #RESET_QUOTE_SPACING \\n[#FULLSPACE_QUOTES]
+.       ALWAYS_FULLSPACE_QUOTES
+.    \}
+.    if \\n[#PRINT_STYLE]=1 \{\
+.       if \\n[#START]=1 .
+.       if \\n[#START]=0 \
+.          if !\\n[#LINEBREAK] .ALD \\n[#DOC_LEAD]u
+.       if \\n[#HEAD] \
+.          if \\n[#HEAD]=1 .RLD \\n[#DOC_LEAD]u
+.    \}
+.    if \\n[#PRINT_STYLE]=2 \{\
+.       ie \\n[#PP_SPACE] \{\
+.          ie \\n[#HEAD] .
+.          el \{\
+.             ie \\n[#START] .
+.             el \{\
+.                ie \\n[#FULLSPACE_QUOTES] .ALD \\n[#DOC_LEAD]u
+.                el .ALD \\n[#DOC_LEAD]u/2u
+.             \}
+.          \}
+.       \}
+.       el \{\
+.          ie \\n[#Q_DEPTH]<(\\n[#TRAP_DISTANCE]-1) \{\
+.             ie ((\\n[#TRAP_DISTANCE]-1)-\\n[#Q_DEPTH])<\\n[#DOC_LEAD] \{\
+.                ie !\\n[in-cutaround] .Q_NOFIT
+.                el .Q_FITS
+.             \}
+.             el \{\
+.                ie (\\n[#TRAP_DISTANCE]-\\n[#DOC_LEAD])<\\n[#DOC_LEAD] .Q_NOFIT
+.                el \{\
+.                   ie (\\n[#Q_DEPTH]+\\n[.v])=(\\n[#TRAP_DISTANCE]-1) .Q_NOFIT
+.                   el .Q_FITS
+.                \}
+.             \}
+.          \}
+.          el .Q_NOFIT
+.       \}
+.       if \\n[#LINEBREAK] \{\
+.          ie !\\n[@TOP] .RLD \\n[#DOC_LEAD]u
+.          el \{\
+.             nop
+.             sp |\\n[#T_MARGIN]u-\\n[#BQ_LEAD]u
+.          \}
+.       \}
+.    \}
+.    ie !'\\*[$\\*[BQ]_OFFSET_VALUE]'' \
+.       nr #\\*[BQ]_OFFSET \\n[#L_MARGIN]+\\*[$\\*[BQ]_OFFSET_VALUE]
+.    el \
+.       nr #\\*[BQ]_OFFSET \
+\\n[#L_MARGIN]+(\\n[#PP_INDENT]*\\n[#\\*[BQ]_OFFSET_VALUE])
+.    if \\n[#COLUMNS] \{\
+.       ie r#\\*[BQ]_OFFSET_VALUE \
+.          nr #\\*[BQ]_OFFSET \
+\\n[#COL_\\n[#COL_NUM]_L_MARGIN]+(\\n[#PP_INDENT]*\\n[#\\*[BQ]_OFFSET_VALUE])
+.       el .nr #\\*[BQ]_OFFSET \
+\\n[#COL_\\n[#COL_NUM]_L_MARGIN]+\\*[$\\*[BQ]_OFFSET_VALUE]
+.    \}
+.    if !\\n[#ENDNOTE] \{\
+.       ie '\\*[BQ]'Q' \{\
+.          if '\\*[$Q_QUAD]'LEFT' \
+.             po \\n[#Q_OFFSET]u
+.             if '\\n[.z]'FLOAT*DIV' \!.po \\n[#Q_OFFSET]u
+.       \}
+.       el .po \\n[#\\*[BQ]_OFFSET]u
+.       if '\\n[.z]'FLOAT*DIV' \!.po \\n[#\\*[BQ]_OFFSET]u
+.    \}
+.    if \\n[#ENDNOTE] \{\
+.       ie \\n[#\\*[BQ]_OFFSET_VALUE] \
+.          in +\\n[#EN_PP_INDENT]u*\\n[#\\*[BQ]_OFFSET_VALUE]u
+.       el .in +\\*[$\\*[BQ]_OFFSET_VALUE]
+.    \}
+.    ie \\n[#START]=1 \{\
+.       ie !\\n[#Q_LEAD_DIFF]<0 .ALD \\n[#Q_SPACE_EQ]u
+.       el .RLD 0-\\n[#Q_LEAD_DIFF]u
+.    \}
+.    el \{\
+.       if \\n[#PRINT_STYLE]=2 \{\
+.          if !\\n[.v]=\\n[#Q_LEAD_REAL] .ALD \\n[#Q_SPACE_EQ]u
+.       \}
+.    \}
+.    if \\n[#QUOTE]=1 \{\
+.       if !'\\*[$Q_SPACE_ADJUST]'' .sp +\\*[$Q_SPACE_ADJUST]
+.       nf
+.       P_QUOTE
+.       if !'\\*[$Q_SPACE_ADJUST]'' \{\
+.          sp -\\*[$Q_SPACE_ADJUST]
+.          rm $Q_SPACE_ADJUST
+.       \}
+.    \}
+.    if \\n[#QUOTE]=2 \{\
+.       if !'\\*[$BQ_SPACE_ADJUST]'' .sp +\\*[$BQ_SPACE_ADJUST]
+.       nf
+.       B_QUOTE
+.       if !'\\*[$BQ_SPACE_ADJUST]'' \{\
+.          sp -\\*[$BQ_SPACE_ADJUST]
+.          rm $BQ_SPACE_ADJUST
+.       \}
+.    \}
+.    if !\\n[#START] .rr #QUOTE
+.    if \\n[in-cutaround] .nr #PP_INDENT \\n[pp-ind-tmp]
+\#.    if !\\n[ev-popped] .ev \" Needed once cutarounds are implemented
+.    rr delay-ev-pop
+.    if \\n[reset-ll] \{\
+.       if '\\*[cutaround-type]'RIGHT' \{\
+.          ll \\n[#DOC_L_LENGTH]u
+.          rr reset-ll
+.       \}
+.    \}
+.    if \\n[#NO_SHIM]=1 \{\
+.       nr #RESTORE_NO_SHIM 1
+.       rr #NO_SHIM
+.    \}
+.    if \\n[#PRINT_STYLE]=1 \
+.       if !\\n[.v]=\\n[#DOC_LEAD] .SHIM
+.    if \\n[#PRINT_STYLE]=2 \{\
+.       ie \\n[#START] \{\
+.          ie \\n[#PP_SPACE] .
+.          el \{\
+.             ALD \\n[#DOC_LEAD]u
+.             SHIM
+.          \}
+.       \}
+.       el \{\
+.          ie \\n[#HEAD]=1 \{\
+.             ALD \\n[#DOC_LEAD]u
+.             SHIM
+.          \}
+.          el \{\
+.             ie \\n[#FULLSPACE_QUOTES] \{\
+.                ie \\n[#ENDNOTE] .ALD \\n[#EN_LEAD]u
+.                el .ALD \\n[#DOC_LEAD]u
+.             \}
+.             el .ALD \\n[#DOC_LEAD]u/2u
+.             ie \\n[#Q_FITS] \{\
+.                ie (\\n[#Q_TOP]=\\n[#PAGE_TOP]):(\\n[@TOP]=1) \{\
+.                   nr #Q_AT_TOP 1
+.                   nr #DELAY_SHIM 1
+.                \}
+.                el \
+.                   if !\\n[.v]=\\n[#Q_LEAD_REAL] .SHIM
+.             \}
+.             el \{\
+.                SHIM
+.\" Make sure that Q_LEAD_DIFF is not added to the first line of
+.\" normal text at the top of any page following output of a quote
+.\" whose last line falls on B_MARGIN of the previous page.
+.                if \\n[#Q_LEAD_DIFF] \{\
+.                   if \\n[nl]=(\\n[#T_MARGIN]-\\n[#DOC_LEAD]+\\n[#Q_LEAD_DIFF]) \{\
+.                      PRINT \&
+.                      br
+.                      sp -1v-\\n[#Q_LEAD_DIFF]u
+.                      nr #Q_LEAD_DIFF_CHECK 1
+.                   \}
+.                \}
+.             \}
+.          \}
+.       \}
+.    \}
+.    if \\n[#RESTORE_NO_SHIM] .nr #NO_SHIM 1
+.    rr #Q_SPACE_EQ
+.    if \\n[#LINENUMBERS]=2 \{\
+.       nr #LINENUMBERS 1
+.       if !\\n[#ENDNOTE] \{\
+.          ie \\n[#RESTORE_LN_NUM]=1 \{\
+.             LN_PARAMS
+.             nm \\n[#NEXT_LN]
+.             RESTORE_PARAMS
+.          \}
+.          el \{\
+.             LN_PARAMS
+.             nm +0
+.             RESTORE_PARAMS
+.          \}
+.       \}
+.    \}
+.    if \\n[#ENDNOTE] .nr #FULLSPACE_QUOTES \\n[#RESET_QUOTE_SPACING]
+.    if r #HEAD .rr #HEAD
+.    if r #EPIGRAPH .rr #EPIGRAPH
+.    rr #Q_PP
+.    rr #LINEBREAK
+.    nr #PP_STYLE  1
+.    nr #END_QUOTE 1
+.    if !\\n[#ENDNOTE] \{\
+.       po \\n[#L_MARGIN]u
+.       if '\\n[.z]'FLOAT*DIV' \!.po \\n[#L_MARGIN]u
+.    \}
+.    if \\n[#ENDNOTE]  .in \\n[#EN_TEXT_INDENT]u
+.    if \\n[#COLUMNS] \{\
+.       if !\\n[#ENDNOTE] \{\
+.          po \\n[#COL_\\n[#COL_NUM]_L_MARGIN]u
+.          nr #L_MARGIN \\n[.o]
+.       \}
+.       if \\n[#ENDNOTE] .in \\n[#EN_TEXT_INDENT]u
+.    \}
+.    ie !\\n[#ENDNOTE] .QUAD \\*[$DOC_QUAD]
+.    el .QUAD \\*[EN_QUAD]
+.    if r #DELAY_SHIM \{\
+.       SHIM
+.       rr #DELAY_SHIM
+.    \}
+.    if \\n[#PRINT_STYLE]=1 \
+.       if \\n[#UNDERLINE_QUOTES] .FT R
+.    nr #QUOTE_4_HD 1
+.    rm BQ
+.END
+.
+.ALIAS DO_BLOCKQUOTE DO_QUOTE
+\#
+\# Utility macros for DO_QUOTE
+\# ---------------------------
+\#
+.MAC Q_FITS END
+.    nr #Q_FITS 1
+.    ie \\n[#HEAD]=1 .ALD \\n[#Q_LEAD_DIFF]u
+.    el \{\
+.       ie \\n[#START] .
+.       el \{\
+.          ie \\n[#FULLSPACE_QUOTES] \{\
+.             ie \\n[#ENDNOTE] .ALD \\n[#EN_LEAD]u+\\n[#Q_LEAD_DIFF]u
+.             el .ALD \\n[#DOC_LEAD]u+\\n[#Q_LEAD_DIFF]u
+.          \}
+.          el \{\
+.\" This seems to be the only way to get the baseline of quotes that
+.\" start at the top of the page to fall on the first line of the
+.\" grid (ie. on the first valid baseline of the page).
+.             ie \\n[#Q_TOP]=\\n[#PAGE_TOP] \{\
+.                if \\n[#QUOTE]=1 \{\
+.                   rn P_QUOTE Q_TEMP
+.                   di P_QUOTE
+.                   nf
+.                   vs \\n[#Q_LEAD]u
+.                   PRINT \&
+.                   sp -1v+\\n[#Q_LEAD_DIFF]u
+.                   Q_TEMP
+.                   di
+.                \}
+.                if \\n[#QUOTE]=2 \{\
+.                   rn B_QUOTE Q_TEMP
+.                   di B_QUOTE
+.                   nf
+.                   vs \\n[#BQ_LEAD]u
+.                   PRINT \&
+.                   sp -1v+\\n[#Q_LEAD_DIFF]u
+.                   Q_TEMP
+.                   di
+.                \}
+.                rm Q_TEMP
+.             \}
+.             el .ALD \\n[#DOC_LEAD]u/2u
+.          \}
+.       \}
+.       if \\n[#DIVER_FN]=2 .rr #DIVER_FN
+.    \}
+.END
+\#
+.MAC Q_NOFIT END
+.    rr #Q_FITS
+.    ie r#HEAD \
+.       if \\n[#HEAD]=1 .
+.    el \{\
+.       if \\n[#Q_DEPTH]=0 \
+.          if \\n[.ns] .rs
+.       ie \\n[#FULLSPACE_QUOTES] \{\
+.          ie \\n[#ENDNOTE] .ALD \\n[#EN_LEAD]u+\\n[#Q_LEAD_DIFF]u
+.          el .ALD \\n[#DOC_LEAD]u+\\n[#Q_LEAD_DIFF]u
+.       \}
+.       el \{\
+.          ie !\\n[#Q_LEAD_DIFF] .ALD \\n[#DOC_LEAD]u
+.          el .ALD \\n[#Q_LEAD_DIFF]u
+.          if \\n[@TOP] .rs
+.       \}
+.       nr #Q_PARTIAL_DEPTH 0 \\n[#Q_LEAD_REAL]
+.       while \\n+[#Q_PARTIAL_DEPTH]<(\\n[#TRAP_DISTANCE]-1) \{\
+.
+.       \}
+.       nr #Q_PARTIAL_DEPTH -\\n[#Q_LEAD_REAL]
+.       nr #Q_SPACE_EQ \
+(\\n[#TRAP_DISTANCE]-1)-\\n[#Q_PARTIAL_DEPTH]+\\n[#Q_LEAD_DIFF]u
+.       if \\n[#FN_COUNT]>0 .nr #Q_SPACE_EQ (\\n[#Q_SPACE_EQ] / 2u)
+.\" Hack to deal with the fact that even though the above routine
+.\" makes the bottom line of the quote fall exactly on the bottom
+.\" margin when traps are disabled, it refuses to do so when traps
+.\" are on.  The difference by which it's off is #Q_LEAD_DIFF
+.\" (the +\\n[#Q_LEAD_DIFF] at the end of the line, above).  Hack
+.\" solution: temporarily lower the FOOTER trap position.
+.       if !\\n[#Q_DEPTH]=0 \{\
+.          nr #SAVED_FOOTER_POS \\n[#VARIABLE_FOOTER_POS]
+.          ch FOOTER \\n[#VARIABLE_FOOTER_POS]u+.25v
+.       \}
+.    \}
+.END
+\#
+\# ====================================================================
+\#
+\# +++PAGINATION+++
+\#
+\# PAGINATE
+\# --------
+\# *Arguments:
+\#   <none> | <anything>
+\# *Function:
+\#   Turns page numbering off or on during document processing.
+\# *Notes:
+\#   Default is on.
+\#
+.MAC PAGINATE END
+.    ie '\\$1'' .nr #PAGINATE 1
+.    el \{\
+.      nr #PAGINATE 0
+.      if !\\n[#COLLATE] .rr #PAGE_NUM_V_POS
+.    \}
+.    if \\n[#HF_OFF]=1 \{\
+.       rr #PAGINATION_STATE
+.       rr #HF_OFF
+.    \}
+.END
+\#
+\# SUSPEND PAGINATION (before ENDNOTES)
+\# ------------------
+\# *Argument:
+\#   <none>
+\# *Function:
+\#   Creates register #SUSPEND_PAGINATION
+\# *Notes:
+\#   Useful only to suspend pagination before outputting endnotes.
+\#
+.MAC SUSPEND_PAGINATION END
+.    nr #SUSPEND_PAGINATION 1
+.END
+\#
+\# RESTORE PAGINATION (after ENDNOTES)
+\# ------------------
+\# *Argument:
+\#   <none>
+\# *Function:
+\#   Removes register #SUSPEND_PAGINATION.  Creates register
+\#   #DEFER_PAGINATION
+\# *Notes:
+\#   Useful only to restore pagination after outputting endnotes.
+\#
+.MAC RESTORE_PAGINATION END
+.    rr #SUSPEND_PAGINATION
+.    if \\n[#PAGE_NUM_V_POS]=1 .PAGINATE
+.    if \\n[#PAGE_NUM_V_POS]=2 .nr #DEFER_PAGINATION 1
+.END
+\#
+\# PAGE NUMBER FORMAT
+\# ------------------
+\# *Arguments:
+\#   DIGIT | ROMAN | roman | ALPHA | alpha
+\# *Function:
+\#   Assigns user entered format to #PAGENUMBER.
+\#
+.MAC PAGENUM_STYLE END
+.    nr #PAGENUM_STYLE_SET 1
+.    if '\\$1'DIGIT' \{\
+.       ds $PAGENUM_STYLE \\$1
+.       af #PAGENUMBER 1
+.    \}
+.    if '\\$1'ROMAN' \{\
+.       ds $PAGENUM_STYLE \\$1
+.       af #PAGENUMBER I
+.    \}
+.    if '\\$1'roman' \{\
+.       ds $PAGENUM_STYLE \\$1
+.       af #PAGENUMBER i
+.    \}
+.    if '\\$1'ALPHA' \{\
+.       ds $PAGENUM_STYLE \\$1
+.       af #PAGENUMBER A
+.    \}
+.    if '\\$1'alpha' \{\
+.       ds $PAGENUM_STYLE \\$1
+.       af #PAGENUMBER a
+.    \}
+.END
+\#
+\# HYPHENS AROUND PAGE NUMBERS
+\# ---------------------------
+\# *Arguments:
+\#   <none> | <anything>
+\# *Function:
+\#   Creates or modifies register #PAGE_NUM_HYPHENS.
+\#   Used to dis/enable hyphens on either side of page numbers.
+\# *Notes:
+\#   Default is on.
+\#
+.MAC PAGENUM_HYPHENS END
+.    nr #PAGE_NUM_HYPHENS_SET 1
+.    ie '\\$1'' .nr #PAGE_NUM_HYPHENS 1
+.    el .rr #PAGE_NUM_HYPHENS
+.END
+\#
+\# PAGENUMBER POSITION
+\# -------------------
+\# *Arguments:
+\#   TOP | BOTTOM  LEFT | CENTER | RIGHT
+\# *Function:
+\#   Creates or modifies various PAGE_NUM_H | V_POS registers.
+\#   Used to position page numbers.
+\# *Notes:
+\#   Default is center/bottom.
+\#
+.MAC PAGENUM_POS END
+.    nr #PAGE_NUM_POS_SET 1
+.    if '\\$1'TOP'    .nr #PAGE_NUM_V_POS 1
+.    if '\\$1'BOTTOM' .nr #PAGE_NUM_V_POS 2
+.    if '\\$2'LEFT'   .nr #PAGE_NUM_H_POS 1
+.    if '\\$2'CENTER' .nr #PAGE_NUM_H_POS 2
+.    if '\\$2'CENTRE' .nr #PAGE_NUM_H_POS 2
+.    if '\\$2'RIGHT'  .nr #PAGE_NUM_H_POS 3
+.END
+\#
+.MAC PN_WITH_HYPHENS END
+.    nr #HYPHEN_ADJ \\n[#CAP_HEIGHT]/12
+.    ds $HYPHEN \v'-\En[#HYPHEN_ADJ]u'-\v'\En[#HYPHEN_ADJ]u'
+.    ds $PN_FOR_KN \\n[#PAGENUMBER]
+.\"  Check for initial or terminal 1's or 7's, and apply a little kerning
+.    substring $PN_FOR_KN 0 0 \" 1st digit
+.    if '\\*[$PN_FOR_KN]'1' .ds $PRE_HY_KN \*[BU3]
+.    if '\\*[$PN_FOR_KN]'7' .ds $PRE_HY_KN \*[BU3]
+.    ds $PN_FOR_KN \\n[#PAGENUMBER]
+.    substring $PN_FOR_KN -1 -1 \" last digit
+.    if '\\*[$PN_FOR_KN]'1' .ds $POST_HY_KN \*[BU3]
+.    if '\\*[$PN_FOR_KN]'7' .ds $POST_HY_KN \*[BU3]
+.    PRINT \
+\m[\\*[$PAGE_NUM_COLOR]]\
+\\*[$HYPHEN]\|\\*[$PRE_HY_KN]\\n[#PAGENUMBER]\\*[$POST_HY_KN]\|\\*[$HYPHEN]
+.    br
+.    rm $PRE_HY_KERN
+.    rm $POST_HY_KERN
+.END
+\#
+\# PRINT PAGE NUMBER
+\# -----------------
+\# *Arguments:
+\#   <none>
+\# *Function:
+\#   Prints page number if PAGINATE=1.
+\#
+.MAC PRINT_PAGE_NUMBER END
+.    ev PAGENUMBER
+.    nf
+.    po  \\n[#DOC_L_MARGIN]u
+.    ll  \\n[#DOC_L_LENGTH]u
+.    ta  \\n[.l]u
+.    fam \\*[$PAGE_NUM_FAM]
+.    ft  \\*[$PAGE_NUM_FT]
+.    ps  \\n[#DOC_PT_SIZE]u\\*[$PAGE_NUM_SIZE_CHANGE]
+.    if  \\n[#PRINT_STYLE]=1 .TYPEWRITER
+.    if  \\n[#PAGE_NUM_V_POS]=1 .vs 0
+.    if o \{\
+.       ie \\n[#PAGE_NUM_H_POS]=1 .LEFT
+.       el .RIGHT
+.    \}
+.    if e \{\
+.       ie \\n[#PAGE_NUM_H_POS]=1 .RIGHT
+.       el .LEFT
+.    \}
+.    if \\n[#PAGE_NUM_H_POS]=2 .CENTER
+.    if \\n[#RECTO_VERSO]=0 \{\
+.       if \\n[#PAGE_NUM_H_POS]=1 .LEFT
+.       if \\n[#PAGE_NUM_H_POS]=2 .CENTER
+.       if \\n[#PAGE_NUM_H_POS]=3 .RIGHT
+.    \}
+.    nr #PAGENUMBER \\n%+\\n[#PAGE_NUM_ADJ]
+.    if \\n[#EN_FIRST_PAGE] \{\
+.       if \\n[#EN_FIRST_PN] .PAGENUMBER \\n[#EN_FIRST_PN]
+.       rr #EN_FIRST_PAGE
+.    \}
+.    if \\n[#BIB_FIRST_PAGE] \{\
+.       if \\n[#BIB_FIRST_PN] .PAGENUMBER \\n[#BIB_FIRST_PN]
+.       rr #BIB_FIRST_PAGE
+.    \}
+.    ie \\n[#DRAFT_WITH_PAGENUM] \{\
+.       ie '\\*[$REVISION]'' \
+.          PRINT "\\*[$DRAFT_STRING]\\*[$DRAFT] / \\n[#PAGENUMBER]"
+.       el \{\
+.          ie '\\*[$DRAFT]'' \
+.             PRINT "\\*[$REVISION_STRING] \\*[$REVISION] / \\n[#PAGENUMBER]"
+.          el \
+.             PRINT \
+"\\*[$DRAFT_STRING]\\*[$DRAFT], \\*[$REVISION_STRING] \\*[$REVISION] / \
+\\n[#PAGENUMBER]"
+.       \}
+.    \}
+.    el \{\
+.       ie \\n[#PAGE_NUM_HYPHENS] \{\
+.          if '\\*[$PAGENUM_STYLE]'DIGIT' \{\
+.             di NULL
+1\\R'#CAP_HEIGHT \\n[.cht]'
+.             di
+.             PN_WITH_HYPHENS
+.          \}
+.          if '\\*[$PAGENUM_STYLE]'ROMAN' \{\
+.             di NULL
+I\\R'#CAP_HEIGHT \\n[.cht]'
+.             di
+.             PN_WITH_HYPHENS
+.          \}
+.          if '\\*[$PAGENUM_STYLE]'ALPHA' \{\
+.             di NULL
+E\\R'#CAP_HEIGHT \\n[.cht]'
+.             di
+.             PN_WITH_HYPHENS
+.          \}
+.          if '\\*[$PAGENUM_STYLE]'roman' \
+.             PRINT \m[\\*[$PAGE_NUM_COLOR]]-\|\\n[#PAGENUMBER]\|-
+.          if '\\*[$PAGENUM_STYLE]'alpha' \
+.             PRINT \m[\\*[$PAGE_NUM_COLOR]]-\|\\n[#PAGENUMBER]\|-
+.       \}
+.       el .PRINT \m[\\*[$PAGE_NUM_COLOR]]\\n[#PAGENUMBER]
+.    \}
+.    ev
+.    nr #DIVER_DEPTH 0
+.END
+\#
+\# ====================================================================
+\#
+\# +++FOOTNOTES+++
+\#
+\# Mom's footnote handling is baroque, to say the least.  There are
+\# redundancies in a number of the macros involved, as well as some
+\# registers that probably don't get used anymore.  The baggage is left
+\# in in case some new footnote oddity/challenge gets thrown at her.
+\#
+\# The macros are heavily commented.
+\#
+\# FOOTNOTE AUTOLEAD
+\# -----------------
+\# *Arguments:
+\#   <autolead value for footnotes>
+\# *Function:
+\#   Creates or modifies register #FN_AUTOLEAD.
+\# *Notes:
+\#   Default is #DOC_LEAD/2 for TYPEWRITE; 2 for TYPESET
+\#
+.MAC FOOTNOTE_AUTOLEAD END
+.    nr #FN_AUTOLEAD (p;\\$1)
+.END
+\#
+\# FOOTNOTE MARKERS
+\# ----------------
+\# *Arguments:
+\#   <none> | <anything>
+\# *Function:
+\#   Turns generation of footnote markers on or off.
+\# *Notes:
+\#   Default is on.
+\#
+.MAC FOOTNOTE_MARKERS END
+.    ie '\\$1'' .nr #FN_MARKERS 1
+.    el .nr #FN_MARKERS 0
+.END
+\#
+\# FOOTNOTE MARKER STYLE
+\# ---------------------
+\# *Arguments:
+\#   STAR | NUMBER | LINE
+\# *Function:
+\#   Sets register #FN_MARKER_STYLE, used in FOOTNOTE to determine
+\#   the style of footnote markers.
+\# *Notes:
+\#   1=STAR; 2=NUMBER; 3=LINE.  LINE means "use output line numbers".
+\#   Default is STAR.
+\#
+.MAC FOOTNOTE_MARKER_STYLE END
+.    if '\\$1'STAR' \{\
+.       if \\n[#FN_MARKER_STYLE]=3 \{\
+.          if !\\n[#NEWPAGE]=1 \{\
+.             tm1 "[mom]: Your current FOOTNOTE_MARKER STYLE is LINE.
+.             tm1 "       You cannot change footnote marker style without
+.             tm1 "       first breaking to a new page with NEWPAGE.
+.             tm1 "       Ignoring request FOOTNOTE_MARKER_STYLE STAR at line \\n[.c].
+.             return
+.          \}
+.       \}
+.       if \\n[#RUN_ON]=1 \{\
+.          tm1 "[mom]: FOOTNOTE_MARKER_STYLE STAR at line \\n[.c] is incompatible
+.          tm1 "       with RUN_ON footnotes.  Ignoring request.
+.          return
+.       \}
+.       nr #FN_MARKER_STYLE 1
+.       if \\n[#NEWPAGE]=1 .rr #NEWPAGE
+.       FOOTNOTE_MARKERS
+.    \}
+.    if '\\$1'NUMBER' \{\
+.       if \\n[#FN_MARKER_STYLE]=3 \{\
+.          if !\\n[#NEWPAGE]=1 \{\
+.             tm1 "[mom]: Your current FOOTNOTE_MARKER STYLE is NUMBER.
+.             tm1 "       You cannot change footnote marker style without
+.             tm1 "       first breaking to a new page with NEWPAGE.
+.             tm1 "       Ignoring request FOOTNOTE_MARKER_STYLE NUMBER at line \\n[.c].
+.             return
+.          \}
+.       \}
+.       if \\n[#RUN_ON]=1 \{\
+.          tm1 "[mom]: FOOTNOTE_MARKER_STYLE NUMBER at line \\n[.c] is incompatible
+.          tm1 "       with RUN_ON footnotes.  Ignoring request.
+.          return
+.       \}
+.       nr #FN_MARKER_STYLE 2
+.       shift
+.       if '\\$1'NO_SUPERSCRIPT' .nr #NO_SUPERSCRIPT 1
+.       if \\n[#NEWPAGE]=1 .rr #NEWPAGE
+.       FOOTNOTE_MARKERS
+.    \}
+.    if '\\$1'LINE' \{\
+.       nr #FN_MARKER_STYLE 3
+.       FOOTNOTE_MARKERS OFF
+.       if !\\n[#FN_LN_SEP] \
+.          if !\\n[#FN_LN_BRACKETS] .FOOTNOTE_LINENUMBER_BRACKETS SQUARE
+.    \}
+.END
+\#
+\# FOOTNOTE NUMBER PLACEHOLDERS
+\# ----------------------------
+\# *Argument:
+\#   <number of placeholders>
+\# *Function:
+\#   Sets register #FN_NUMBER_PLACEHOLDERS, used to establish whether to
+\#   right pad a footnote number (in the footnote itself, not body copy).
+\# *Notes:
+\#   No default is set for this; user must determine if, and where, it's
+\#   required
+\#
+.MAC FOOTNOTE_NUMBER_PLACEHOLDERS END
+.    nr #FN_NUMBER_PLACEHOLDERS \\$1
+.END
+\#
+\# FOOTNOTE LINENUMBER MARK
+\# ------------------------
+\# *Function:
+\#   This string, when called inline, stores the current output line
+\#   number in register #FN_MARK for use with FOOTNOTE.
+\#
+.ds FN_MARK \R'#FN_MARK \En[ln]'
+\#
+\# FOOTNOTE LINENUMBER SEPARATOR
+\# -----------------------------
+\# *Argument:
+\#   <user-defined separator>
+\# *Function:
+\#   Stores user-defined separator (for use then
+\#   FOOTNOTE_MARKER_STYLE is LINE) in string $FN_LN_SEP.  The
+\#   separator is intended to be used when the user wishes a
+\#   separator, rather than the choice of brackets offered by
+\#   FOOTNOTE_LINENUMBER_BRACKETS.
+\#
+.MAC FOOTNOTE_LINENUMBER_SEPARATOR END
+.    rr #FN_LN_BRACKETS
+.    nr #FN_LN_SEP 1
+.    ds $FN_LN_SEP "\\$1
+.END
+\#
+\# FOOTNOTE LINENUMBER BRACKETS
+\# ----------------------------
+\# *Argument:
+\#   PARENS | SQUARE | BRACES or ( | [ | {
+\# *Function:
+\#   Sets register #FN_LN_BRACKETS to 1, and creates strings
+\#   $FN_OPEN_BRACKET and $FN_CLOSE_BRACKET according to the given
+\#   argument.
+\#
+.MAC FOOTNOTE_LINENUMBER_BRACKETS END
+.    rr #FN_LN_SEP
+.    nr #FN_LN_BRACKETS 1
+.    if '\\$1'PARENS' \{\
+.       ds $FN_OPEN_BRACKET (
+.       ds $FN_CLOSE_BRACKET )
+.    \}
+.    if '\\$1'(' \{\
+.       ds $FN_OPEN_BRACKET (
+.       ds $FN_CLOSE_BRACKET )
+.    \}
+.    if '\\$1'SQUARE' \{\
+.       ds $FN_OPEN_BRACKET [
+.       ds $FN_CLOSE_BRACKET ]
+.    \}
+.    if '\\$1'[' \{\
+.       ds $FN_OPEN_BRACKET [
+.       ds $FN_CLOSE_BRACKET ]
+.    \}
+.    if '\\$1'BRACES' \{\
+.       ds $FN_OPEN_BRACKET {
+.       ds $FN_CLOSE_BRACKET }
+.    \}
+.    if '\\$1'{' \{\
+.       ds $FN_OPEN_BRACKET {
+.       ds $FN_CLOSE_BRACKET }
+.    \}
+.END
+\#
+\# RESET FOOTNOTE NUMBER
+\# ---------------------
+\# *Arguments:
+\#   <none> | PAGE
+\# *Function:
+\#   Resets register #FN_NUMBER to 1.  If argument is PAGE, creates
+\#   toggle #RESET_FN_NUMBER which is checked in HEADER.  If 1,
+\#   numbered footnotes on every page start at 1.
+\#
+.MAC RESET_FOOTNOTE_NUMBER END
+.    ie '\\$1'' .nr #FN_NUMBER 0 1
+.    el .nr #RESET_FN_NUMBER 1
+.END
+\#
+\# FOOTNOTE RULE LENGTH
+\# --------------------
+\# *Arguments:
+\#   <length of rule used to separate footnotes from running text>
+\# *Function:
+\#   Creates or modifies registers #FN_RULE_LENGTH.
+\# *Notes:
+\#   Requires unit of measure (iPpcm).
+\#   Default is 4P for both PRINTSTYLEs.
+\#
+.MAC FOOTNOTE_RULE_LENGTH END
+.    nr #FN_RULE_LENGTH (\\$1)
+.END
+\#
+\# FOOTNOTE_RULE_ADJ
+\# -----------------
+\# *Arguments:
+\#   <number of points to raise footnote rule from it's baseline position>
+\# *Function:
+\#   Creates or modifies register #FN_RULE_ADJ.
+\# *Notes:
+\#   Default is 3p for both TYPESTYLES.
+\#
+\#   Requires unit of measure.
+\#
+.MAC FOOTNOTE_RULE_ADJ END
+.    nr #FN_RULE_ADJ (\\$1)
+.END
+\#
+\# FOOTNOTE RULE
+\# -------------
+\# *Arguments:
+\#   <none> | <anything>
+\# *Function:
+\#   Turns printing of footnote separator rule on or off.  If invoked as
+\#   PRINT_FOOTNOTE_RULE, prints footnote separator rule.
+\# *Notes:
+\#   Default is on.
+\#
+\#   Invoked in FOOTNOTE (as PRINT_FOOTNOTE_RULE) as 1st line of a footnote
+\#   if the footnote number (#FN_COUNT) is 1.
+\#
+.MAC FOOTNOTE_RULE END
+.    ie '\\$0'PRINT_FOOTNOTE_RULE' \{\
+.       if \\n[#FN_RULE]=0 .RLD 1v
+.       RLD 1v
+.       LEFT
+\v'-\\n[#FN_RULE_ADJ]u-\\n[#FN_RULE_WEIGHT_ADJ]u'\
+\D't \\n[#FN_RULE_WEIGHT]'\
+\h'-\\n[#FN_RULE_WEIGHT]u'\
+\D'l \\n[#FN_RULE_LENGTH]u 0'\
+\v'+\\n[#FN_RULE_ADJ]u+\\n[#FN_RULE_WEIGHT_ADJ]u'
+\!.     ps \\n[#DOC_PT_SIZE]u\\*$[FN_SIZE_CHANGE]
+.       QUAD \\*[$FN_QUAD]
+.    \}
+.    el \{\
+.       ie '\\$1'' .nr #FN_RULE 1
+.       el .nr #FN_RULE 0
+.    \}
+.END
+\#
+\# FOOTNOTE SPACING
+\# ----------------
+\# *Arguments:
+\#   <per item post footnote spacing> | <anything>
+\# *Function:
+\#   Enables printing of post footnote spacing.
+\# *Notes:
+\#   Default is no space.
+\#
+.MAC FOOTNOTE_SPACING END
+.    ie \B'\\$1' .ds $FN_SPACE \\$1
+.    el .rm $FN_SPACE
+.END
+\#
+\# RUN ON FOOTNOTES
+\# ----------------
+\# *Arguments:
+\#   <none> | <anything>
+\# *Function:
+\#   Toggles run-on footnotes on or off.
+\#
+.MAC FOOTNOTES_RUN_ON END
+.    ie '\\$1'' \{\
+.       if \\n[#FN_COUNT]>0 \{\
+.          tm1 "[mom]: Switching to run-on footnotes at line \\n[.c] will cause
+.          tm1 "       you to loose footnotes already formatted for this page.
+.          tm1 "       Ignoring request FOOTNOTES_RUN_ON.
+.          rr #RUN_ON
+.          return
+.       \}
+.       nr #RUN_ON 1
+.       if \\n[#FN_MARKER_STYLE]=1 .RUNON_WARNING
+.       if \\n[#FN_MARKER_STYLE]=2 .RUNON_WARNING
+.    \}
+.    el \{\
+.       if \\n[#FN_COUNT]>0 \{\
+.          if \\n[#RUN_ON]=1 \{\
+.             tm1 "[mom]: Switching off run-on footnotes at line \\n[.c] will cause
+.             tm1 "       you to loose footnotes already formatted for this page.
+.             tm1 "       Ignoring request FOOTNOTES_RUN_ON \\$1.
+.             return
+.          \}
+.       \}
+.       rr #RUN_ON
+.    \}
+.END
+\#
+.MAC RUNON_WARNING END
+.    if \\n[#FN_MARKER_STYLE]=1 \{\
+.       tm1 "[mom]: The footnote marker style active at line \\n[.c] is STAR,
+.       tm1 "       which is incompatible with run-on footnotes.  Please change
+.       tm1 "       the footnote marker style to LINE.  Continuing to process,
+.       tm1 "       but ignoring request FOOTNOTES_RUN_ON.
+.       rr #RUN_ON
+.    \}
+.    if \\n[#FN_MARKER_STYLE]=2 \{\
+.       tm1 "[mom]: The footnote marker style active at line \\n[.c] is NUMBER,
+.       tm1 "       which is incompatible with run-on footnotes.  Please change
+.       tm1 "       the footnote marker style to LINE.  Continuing to process,
+.       tm1 "       but ignoring request FOOTNOTES_RUN_ON.
+.       rr #RUN_ON
+.    \}
+.END
+\#
+\# FOOTNOTE
+\# --------
+\# *Arguments:
+\#   <none> | INDENT  L|LEFT|R|RIGHT|B|BOTH  <indent value> | <anything>
+\# *Function:
+\#   Begins collecting and diverting footnote text if no argument
+\#   given.  Otherwise, ends diversion FOOTNOTES, measures footnote
+\#   depth, and sets footnote trap.
+\# *Notes:
+\#   The input line preceding a footnote call MUST terminate with \c
+\#   or the footnote marker will be spaced away from the word it
+\#   should be joined to.
+\#
+\#   If FOOTNOTE is invoked with INDENT, the footnote will
+\#   be indented.  An indent style and an indent value must be given.
+\#   Subsequent footnotes will NOT be indented; INDENT must be given
+\#   for each footnote the user wants indented.
+\#
+.MAC FOOTNOTE END
+.    ie '\\$1'' \{\
+.       if \\n[#UNDERLINE_ON] \{\
+.          UNDERLINE OFF
+.          nr #UNDERLINE_WAS_ON_FN 1
+.       \}
+.       if \\n[#FN_MARKER_STYLE]=3 \{\
+.          if !\\n[#LINENUMBERS] \{\
+.             tm1 "[mom]: Line numbering must be enabled with NUMBER_LINES when
+.             tm1 "       FOOTNOTE_MARKER_STYLE is LINE.
+.             ab   [mom]: Aborting '\\n[.F]' at \\$0, line \\n[.c].
+.          \}
+.          if \\n[#FN_MARK]=0 .nr #FN_MARK \\n[ln]
+.          nr #FN_MARK_2 \\n[ln]
+.          if '\\n[.z]'P_QUOTE' \{\
+.             nr #FN_MARK -1
+.             nr #FN_MARK_2 -1
+.          \}
+.          if \\n[#IN_DIVER]=1 \{\
+.             if '\\n[.z]'P_QUOTE' \{\
+.                if !\\n[#QUOTE_LN]=1 \{\
+.                   if !\\n[#SILENT_QUOTE_LN]=1 \{\
+.                      tm1 "[mom]: You have requested a line-numbered footnote inside a
+.                      tm1 "       QUOTE at line \\n[.c], but line-numbering has not been enabled
+.                      tm1 "       for QUOTES.  Printing footnote with label "0".
+.                      rr #FN_MARK
+.                      rr #FN_MARK_2
+.                   \}
+.                \}
+.             \}
+.             if '\\n[.z]'B_QUOTE' \{\
+.                if !\\n[#BQUOTE_LN]=1 \{\
+.                   if !\\n[#SILENT_BQUOTE_LN]=1 \{\
+.                      tm1 "[mom]: You have requested a line-numbered footnote inside a
+.                      tm1 "       BLOCKQUOTE at line \\n[.c], but line-numbering has not been enabled
+.                      tm1 "       for BLOCKQUOTES.  Printing footnote with label "0".
+.                      rr #FN_MARK
+.                      rr #FN_MARK_2
+.                   \}
+.                \}
+.             \}
+.          \}
+.       \}
+.\" Begin processing footnotes that occur inside QUOTE, BLOCKQUOTE
+.\" or EPIGRAPH.
+.       if \\n[#IN_DIVER]=1 \{\
+.          nr #PAGE_POS \\n[nl]+\\n[.d]+\\n[#DOC_LEAD]
+.          nr #FOOTER_POS \\n[#PAGE_LENGTH]+(\\n[#VARIABLE_FOOTER_POS]-1)
+.          nr #SPACE_TO_FOOTER \\n[#FOOTER_POS]-\\n[#PAGE_POS]
+.\" Are we on a "defer" line?  If so, defer the text of the footnote.
+.          ie \\n[#SPACE_TO_FOOTER]<=\\n[#DOC_LEAD] \
+.             nr #DIVER_FN 2 \" treat like a normal deferred footnote
+.          el \
+.             nr #DIVER_FN 2 \" treat like a normal footnote
+.          if \\n[#PAGE_POS]>\\n[#FOOTER_POS] \
+.             nr #DIVER_FN 1 \" move this footnote
+.\" Test for situation where, because a final line of QUOTE, BLOCKQUOTE
+.\" or EPIGRAPH isn't yet adjusted at this point, the last word on the
+.\" line may *seem* to belong to the final line of the page, but will,
+.\" in fact, become the first word of the subsequent page.  In such
+.\" circumstances, we want the the footnote to be treated as a "moved"
+.\" diversion footnote.
+.          if \\n[.k]>\\n[.l] .nr #DIVER_FN 1
+.          if r #DIVER_FN \{\
+.             if !\\n[#DIVER_FN]=2 .\\n+[#DONE_ONCE]
+.\" A footnote inside a diversion will become the 1st footnote on the
+.\" following page/column.
+.             if \\n[#DIVER_FN]=1 .DIVER_FN_1_PRE
+.\" A footnote inside a diversion that should be treated like a
+.\" normal footnote (including defers.)
+.             if \\n[#DIVER_FN]=2 .DIVER_FN_2_PRE
+.          \}
+.          nr #SAVED_FN_COUNT \\n[#FN_COUNT]+1
+.          nr #SAVED_FN_COUNT_FOR_COLS \\n[#FN_COUNT_FOR_COLS]+1
+.       \}
+.\" End processing footnotes that occur inside QUOTE, BLOCKQUOTE or
+.\" EPIGRAPH.
+.\"
+.\" Test for situation where, because a final line of running text
+.\" isn't yet adjusted at this point, the last word on the line may
+.\" *seem* to belong to the final line of the page, but will, in
+.\" fact, become the first word of the subsequent page.  In such
+.\" circumstances, we want the footnote marker in running text to
+.\" be the correct one for the 1st footnote on the page.
+.       if \\n[.k]>\\n[.l] \{\
+.          if (\\n[nl]+\\n[#DOC_LEAD])>(\\n[#PAGE_LENGTH]+\\n[#VARIABLE_FOOTER_POS]) \{\
+.             ie \\n[#COLUMNS]=1 \{\
+.                if \\n[#COL_NUM]=\\n[#NUM_COLS] \{\
+.                   if \\n[#FN_MARKER_STYLE]=1 .nr #FN_COUNT_FOR_COLS 0 1
+.                   if \\n[#FN_MARKER_STYLE]=2 \{\
+.                      if \\n[#RESET_FN_NUMBER] \{\
+.                         nr #FN_NUMBER 0 1
+.                         nr #NOT_YET_ADJUSTED 1
+.                      \}
+.                   \}
+.                \}
+.             \}
+.             el \{\
+.                if \\n[#FN_MARKER_STYLE]=1 .nr #FN_COUNT 0 1
+.                if \\n[#FN_MARKER_STYLE]=2 \{\
+.                   if \\n[#RESET_FN_NUMBER] \{\
+.                      nr #FN_NUMBER 0 1
+.                      nr #NOT_YET_ADJUSTED 1
+.                   \}
+.                \}
+.             \}
+.          \}
+.       \}
+.       if \\n[#FN_MARKERS] \{\
+.\" Housekeeping
+.          if \\n[#CONDENSE] \*[CONDX]\c
+.          if \\n[#EXTEND] \*[EXTX]\c
+.\" Add footnote markers to running text...
+.          if !\\n[#NO_FN_MARKER] \{\
+.\" ...but not if TERMINATE has not been called
+.             if !r#TERMINATE \{\
+.\" Marker style star/dagger/double-dagger
+.                if \\n[#FN_MARKER_STYLE]=1 \{\
+.\" Columnar docs either move col to col, or last col to next page.
+.\" They require their own special FN_COUNT because regular FN_COUNT
+.\" is used to figure out things like whether or not to put a rule
+.\" above footnotes (in addition to keeping track of the footnote
+.\" count in non-columnar docs).
+.                   ie \\n[#COLUMNS]=1 \{\
+.                      if \\n[#FN_COUNT_FOR_COLS]=0 .PRINT \*[BU2]*\c
+.                      if \\n[#FN_COUNT_FOR_COLS]=1 .PRINT \*[BU1]\[dg]\c
+.                      if \\n[#FN_COUNT_FOR_COLS]=2 .PRINT \[dd]\c
+.                      if \\n[#FN_COUNT_FOR_COLS]=3 .PRINT \*[BU2]**\c
+.                      if \\n[#FN_COUNT_FOR_COLS]=4 .PRINT \*[BU1]\[dg]\[dg]\c
+.                      if \\n[#FN_COUNT_FOR_COLS]=5 .PRINT \[dd]\[dd]\c
+.                      if \\n[#FN_COUNT_FOR_COLS]=6 .PRINT \*[BU2]***\c
+.                      if \\n[#FN_COUNT_FOR_COLS]=7 .PRINT \*[BU1]\[dg]\[dg]\[dg]\c
+.                      if \\n[#FN_COUNT_FOR_COLS]=8 .PRINT \[dd]\[dd]\[dd]\c
+.                      if \\n[#FN_COUNT_FOR_COLS]=9 .PRINT \*[BU2]****\c
+.                   \}
+.                   el \{\
+.                      if \\n[#FN_COUNT]=0 .PRINT \*[BU2]*\c
+.                      if \\n[#FN_COUNT]=1 .PRINT \*[BU1]\[dg]\c
+.                      if \\n[#FN_COUNT]=2 .PRINT \[dd]\c
+.                      if \\n[#FN_COUNT]=3 .PRINT \*[BU2]**\c
+.                      if \\n[#FN_COUNT]=4 .PRINT \*[BU1]\[dg]\[dg]\c
+.                      if \\n[#FN_COUNT]=5 .PRINT \[dd]\[dd]\c
+.                      if \\n[#FN_COUNT]=6 .PRINT \*[BU2]***\c
+.                      if \\n[#FN_COUNT]=7 .PRINT \*[BU1]\[dg]\[dg]\[dg]\c
+.                      if \\n[#FN_COUNT]=8 .PRINT \[dd]\[dd]\[dd]\c
+.                      if \\n[#FN_COUNT]=9 .PRINT \*[BU2]****\c
+.                   \}
+.                \}
+.\" Marker style superscript numbers
+.                if \\n[#FN_MARKER_STYLE]=2 \{\
+.                   if \\n[#PRINT_STYLE]=1 \
+.                      PRINT \
+"\s-2\v'-\\n[#DOC_LEAD]u/5u'\\n+[#FN_NUMBER]\v'+\\n[#DOC_LEAD]u/5u'\s+2\c"
+.                   if \\n[#PRINT_STYLE]=2 \
+.                      PRINT \
+"\*[SUP]\\n+[#FN_NUMBER]\*[SUPX]\c"
+.                \}
+.             \}
+.          \}
+.       \}
+.\" More housekeeping
+.\"
+.\" #SPACE_REMAINING is the space left between where we are
+.\" on the page and the bottom margin.  It's used to determine whether
+.\" or not the footnote will overflow, and how many lines of
+.\" footnotes will fit on the page if some have to overflow.
+.       ie \\n[#DIVER_FN]=2 \
+.          nr #SPACE_REMAINING (\\n[#PAGE_LENGTH]-\\n[#B_MARGIN])-(\\n[#PAGE_POS])
+.       el \
+.          nr #SPACE_REMAINING (\\n[#PAGE_LENGTH]-\\n[#B_MARGIN])-\\n[nl]
+.       if \\n[#FROM_DIVERT_FN]=1 \{\
+.          nr #SPACE_REMAINING \\n[#PAGE_LENGTH]-\\n[#B_MARGIN]
+.          rr #FROM_DIVERT_FN
+.       \}
+.       nr #PP_STYLE_PREV \\n[#PP_STYLE]
+.       nr #PP_STYLE 2
+.       if \\n[#INDENT_FIRST_PARAS] .nr #INDENT_FIRSTS 1
+.       INDENT_FIRST_PARAS
+.\" Prepare FOOTNOTE to receive footnote text.
+.       ev FOOTNOTES
+.       ll \\n[#DOC_L_LENGTH]u
+.       ta \\n[.l]u
+.       if \\n[#COLUMNS]=1 \{\
+.          ll \\n[#COL_L_LENGTH]u
+.          ta \\n[.l]u
+.       \}
+.       if \\n[#FN_R_INDENT] \{\
+.          ll -\\n[#FN_R_INDENT]u
+.          ta \\n[.l]u
+.       \}
+.       if \\n[#FN_BR_INDENT] \{\
+.          ll -\\n[#FN_BR_INDENT]u
+.          ta \\n[.l]u
+.       \}
+.       FAMILY   \\*[$FN_FAM]
+.       FT       \\*[$FN_FT]
+.       ps  \\n[#DOC_PT_SIZE]u\\*[$FN_SIZE_CHANGE]
+.       vs \\n[.ps]u+\\n[#FN_AUTOLEAD]u
+.       QUAD     \\*[$FN_QUAD]
+.       if \\n[#PRINT_STYLE]=1 \{\
+.          TYPEWRITER
+.          ie \\n[#SINGLE_SPACE] .vs \\n[#ORIGINAL_DOC_LEAD]u
+.          el .vs \\n[#ORIGINAL_DOC_LEAD]u/2u
+.          QUAD LEFT
+.          HY OFF
+.       \}
+.       nr #FN_LEAD \\n[#LEAD]
+.\" Begin diversion FOOTNOTES or FN_IN_DIVER
+.       ie r#COUNTERS_RESET \{\
+.          ie \\n[#DONE_ONCE]=1 \{\
+.             ie \\n[#RUN_ON] \{\
+.                di RUNON_FN_IN_DIVER
+.                nr #RUNON_FN_IN_DIVER 1
+.             \}
+.             el .di FN_IN_DIVER
+.          \}
+.          el \{\
+.             ie \\n[#RUN_ON] \{\
+.                da RUNON_FN_IN_DIVER
+.                nr #RUNON_FN_IN_DIVER 1
+.             \}
+.             el .da FN_IN_DIVER
+.          \}
+.       \\n+[#DONE_ONCE]
+.       \}
+.       el \{\
+.          ie \\n[#RUN_ON] \{\
+.             da RUNON_FOOTNOTES
+.             nr #RUNON_FOOTNOTES 1
+.          \}
+.          el .da FOOTNOTES
+.       \}
+.       if \\n[#FOOTNOTE_COLOR]=1 \{\
+.          TRAP OFF
+.          nf
+\m[\\*[$FOOTNOTE_COLOR]]
+.          EOL
+.          fi
+.          TRAP
+.       \}
+.       if \\n[#EPIGRAPH] .nr #FN_FOR_EPI 1
+.\" When a deferred footnote is also the 1st footnote on the page,
+.\" and when the page it's output on also has footnotes, some
+.\" whitespace is needed between the deferred footnote and the
+.\" first footnote belonging to the output page so that there's
+.\" no confusion when two stars (or two number 1s) appear in
+.\" footnotes...
+.       if \\n[#FN_DEFER_SPACE] \{\
+.\" ...but only add the extra space if TERMINATE has not been called
+.          if !r#TERMINATE \{\
+.\" ...and not if defer space has already been added
+.             if !\\n[#DEFER_SPACE_ADDED] \{\
+.\" ...and not if the footnote count the last time we checked for
+.\" a defer situation inside a diversion is greater than 1.
+.                if !\\n[#SAVED_DIVER_FN_COUNT]>1 \{\
+.                   if \\n[#FN_MARKER_STYLE]=1 .ALD 1v
+.                   if \\n[#RESET_FN_NUMBER] .ALD 1v
+.                   nr #DEFER_SPACE_ADDED 1
+.                \}
+.             \}
+.          \}
+.          rr #FN_DEFER_SPACE
+.          rr #SAVED_DIVER_FN_COUNT
+.       \}
+.       if \\n[#DIVERTED]=3 \{\
+.          if \\n[#FN_COUNT]>0 \{\
+\!.           RLD 1v
+.          \}
+.       \}
+.\" Add footnote rule (or, if no rule, some whitespace).
+.\" N.B.- this line increments #FN_COUNT each and every time FOOTNOTE
+.\" is run.
+.       if \\n+[#FN_COUNT]=1 \{\
+.\" If a footnote is called in a diversion, and the footnote has to
+.\" be moved, don't put in the rule now (it's taken care of when
+.\" FN_IN_DIVER is output into FOOTNOTE in PROCESS_FN_IN_DIVER).
+.          if !\\n[#DONT_RULE_ME]=1 \{\
+.             if !\\n[#FN_DEPTH] \{\
+.                if \\n[#PRINT_STYLE]=1 \{\
+.                   if !\\n[#RUN_ON] .sp \\n[#DOC_LEAD]u
+.                \}
+.                ie \\n[#FN_RULE]=1 \{\
+.                   if !\\n[#RUN_ON] \{\
+.                      if \\n[#SINGLE_SPACE] .sp \\n[#DOC_LEAD]u
+.                      PRINT_FOOTNOTE_RULE
+.                      if !'\\*[$FN_SPACE]'' .sp -\\*[$FN_SPACE]
+.                   \}
+.                \}
+.                el .sp
+.                nr #RULED 1
+.             \}
+.          \}
+.       \}
+.       rr #DONT_RULE_ME
+.       ds $RESTORE_SS_VAR \\*[$SS_VAR]
+.       SS 0
+.\" Add footnote markers to footnote text...
+.       ie \\n[#FN_MARKERS] \{\
+.          if !'\\*[$FN_SPACE]'' \{\
+.             if \\n[#FN_COUNT]>0 .ALD \\*[$FN_SPACE]
+.          \}
+.          if !\\n[#NO_FN_MARKER] \{\
+.\" ...but not if TERMINATE has been called.
+.             if !r#TERMINATE \{\
+.                if \\n[#REF]=1 \{\
+.                   nr #REF_FN_INDENT (u;\\*[$REF_FN_INDENT])
+.                   ti \\n[#REF_FN_INDENT]u
+.                \}
+.                if \\n[#FN_MARKER_STYLE]=1 \{\
+.                   ie \\n[#COLUMNS]=1 \{\
+.                      \\n+[#FN_COUNT_FOR_COLS]
+.                      if \\n[#FN_COUNT_FOR_COLS]=1 .PRINT *\c
+.                      if \\n[#FN_COUNT_FOR_COLS]=2 .PRINT \[dg]\c
+.                      if \\n[#FN_COUNT_FOR_COLS]=3 .PRINT \[dd]\c
+.                      if \\n[#FN_COUNT_FOR_COLS]=4 .PRINT **\c
+.                      if \\n[#FN_COUNT_FOR_COLS]=5 .PRINT \[dg]\[dg]\c
+.                      if \\n[#FN_COUNT_FOR_COLS]=6 .PRINT \[dd]\[dd]\c
+.                      if \\n[#FN_COUNT_FOR_COLS]=7 .PRINT ***\c
+.                      if \\n[#FN_COUNT_FOR_COLS]=8 .PRINT \[dg]\[dg]\[dg]\c
+.                      if \\n[#FN_COUNT_FOR_COLS]=9 .PRINT \[dd]\[dd]\[dd]\c
+.                      if \\n[#FN_COUNT_FOR_COLS]=10 .PRINT ****\c
+.                   \}
+.                   el \{\
+.                      if \\n[#FN_COUNT]=1 .PRINT *\c
+.                      if \\n[#FN_COUNT]=2 .PRINT \[dg]\c
+.                      if \\n[#FN_COUNT]=3 .PRINT \[dd]\c
+.                      if \\n[#FN_COUNT]=4 .PRINT **\c
+.                      if \\n[#FN_COUNT]=5 .PRINT \[dg]\[dg]\c
+.                      if \\n[#FN_COUNT]=6 .PRINT \[dd]\[dd]\c
+.                      if \\n[#FN_COUNT]=7 .PRINT ***\c
+.                      if \\n[#FN_COUNT]=8 .PRINT \[dg]\[dg]\[dg]\c
+.                      if \\n[#FN_COUNT]=9 .PRINT \[dd]\[dd]\[dd]\c
+.                      if \\n[#FN_COUNT]=10 .PRINT ****\c
+.                   \}
+.                \}
+.                if \\n[#FN_MARKER_STYLE]=2 \{\
+.                   ds $FN_NUMBER \\n[#FN_NUMBER]
+.                   length #FN_NUMBER_LENGTH \\*[$FN_NUMBER]
+.                   if \\n[#COLUMNS]=1 \{\
+.                      \\n+[#FN_COUNT_FOR_COLS]
+.                   \}
+.                   if \\n[#NOT_YET_ADJUSTED]=1 \{\
+.                      nr #FN_NUMBER 1 1
+.                      rr #NOT_YET_ADJUSTED
+.                   \}
+.                   if \\n[#PRINT_STYLE]=1 \{\
+.                      ie \\n[#NO_SUPERSCRIPT] \{\
+.                         ie \\n[#FN_NUMBER_LENGTH]<\\n[#FN_NUMBER_PLACEHOLDERS] \
+.                            PRINT "\0(\\n[#FN_NUMBER])\|\c"
+.                         el \
+.                            PRINT "(\\n[#FN_NUMBER])\|\c"
+.                      \}
+.                      el \{\
+.                         ie \\n[#FN_NUMBER_LENGTH]<\\n[#FN_NUMBER_PLACEHOLDERS] \
+.                            PRINT \
+"\s-2\v'-\\n[.v]u/5u'\0\\n[#FN_NUMBER]\|\v'+\\n[.v]u/5u'\s+2\|\c"
+.                         el \
+.                            PRINT \
+"\s-2\v'-\\n[.v]u/5u'\\n[#FN_NUMBER]\|\v'+\\n[.v]u/5u'\s+2\|\c"
+.                      \}
+.                   \}
+.                   if \\n[#PRINT_STYLE]=2 \{\
+.                      ie \\n[#FN_NUMBER_LENGTH]<\\n[#FN_NUMBER_PLACEHOLDERS] \
+.                         PRINT "\*[SUP]\0\\n[#FN_NUMBER]\*[SUPX]\*[FU 3]\c"
+.                      el \
+.                         PRINT "\*[SUP]\\n[#FN_NUMBER]\*[SUPX]\*[FU 3]\c"
+.                   \}
+.                \}
+.             \}
+.          \}
+.       \}
+.       el \{\
+.\" Line-numbered footnotes handling
+.          if \\n[#FN_MARKER_STYLE]=3 \{\
+.             if \\n[#FN_SPACE]>0 \{\
+.                if !\\n[#RUN_ON]=1 \
+.                   if \\n[#FN_COUNT]>0 .ALD \\n[#FN_SPACE]u
+.             \}
+.             if \\n[#REF]=1 \{\
+.                if !\\n[#RUN_ON]=1 \{\
+\!.                 ti +\\n[#REF_FN_INDENT]u
+.                \}
+.             \}
+.             ie \\n[#FN_LN_BRACKETS]=1 \{\
+.                ds $FN_LINENUMBER \v'-.085m'\\*[$FN_OPEN_BRACKET]\v'.085m'
+.                ie \\n[#FN_MARK_2]=\\n[#FN_MARK] \
+.                   as $FN_LINENUMBER \
+\\n[#FN_MARK]\v'-.085m'\\*[$FN_CLOSE_BRACKET]\v'.085m'\h'.25m'
+.                el \
+.                   as $FN_LINENUMBER \
+\\n[#FN_MARK]\v'-.1m'-\v'.1m'\\n[#FN_MARK_2]\v'-.085m'\
+\\*[$FN_CLOSE_BRACKET]\v'.085m'\h'.25m'
+.             \}
+.             el \{\
+.                ie \\n[#FN_MARK_2]=\\n[#FN_MARK] \
+.                   ds $FN_LINENUMBER \\n[#FN_MARK]\\*[$FN_LN_SEP]
+.                el \
+.                   ds $FN_LINENUMBER \
+\\n[#FN_MARK]\v'-.1m'-\v'.1m'\\n[#FN_MARK_2]\\*[$FN_LN_SEP]
+.                \}
+.             \}
+.             if !\\n[#NO_FN_MARKER] \
+.                PRINT \\*[$FN_LINENUMBER]\c
+.             rm $FN_LINENUMBER
+.             nr #FN_MARK 0
+.          \}
+.       \}
+.    \}
+.    el \{\
+.\" If INDENT arg is passed to FOOTNOTE, calculate the indent...
+.       ie '\\$1'INDENT' \{\
+.          ev FOOTNOTES
+.          if '\\$2'L' .in (\\$3)
+.          if '\\$2'LEFT' .in (\\$3)
+.          if '\\$2'R' .nr #FN_R_INDENT (\\$3)
+.          if '\\$2'RIGHT' .nr #FN_R_INDENT (\\$3)
+.          if '\\$2'B' \{\
+.             nr #FN_BL_INDENT (\\$3)
+.             ie '\\$4'' .nr #FN_BR_INDENT \\n[#FN_BL_INDENT]
+.             el .nr #FN_BR_INDENT (\\$4)
+.             in \\n[#FN_BL_INDENT]u
+.          \}
+.          if '\\$2'BOTH' \{\
+.             nr #FN_BL_INDENT (\\$3)
+.             ie '\\$4'' .nr #FN_BR_INDENT \\n[#FN_BL_INDENT]
+.             el .nr #FN_BR_INDENT (\\$4)
+.             in \\n[#FN_BL_INDENT]u
+.          \}
+.          ev
+.\" ...then re-run FOOTNOTE without an argument.
+.          FOOTNOTE
+.       \}
+.       el \{\
+.          br
+.\" Add "defer space" if the previously diverted footnote was the
+.\" 1st footnote proper to its page (i.e. it looks like a deferred
+.\" footnote but it's really an overflow).
+.          if \\n[#DIVERTED] \{\
+.             if \\n[#PREV_FN_DEFERRED]=1 \{\
+.                if \\n[#FN_MARKER_STYLE]=1 .ALD \\n[#FN_LEAD]u
+.                if \\n[#RESET_FN_NUMBER] .ALD \\n[#FN_LEAD]u
+.                nr #PREV_FN_DEFERRED 2
+.             \}
+.          \}
+.          if \\n[#REF]=1 \{\
+\!.           in
+.          \}
+.\" Terminate FOOTNOTES or FN_IN_DIVER diversion
+.          di
+.          HY_SET 1 \\n[#DIVERSIONS_HY_MARGIN]u (\\n[#PT_SIZE]u/1000u/8u)p
+.          hy 14
+.\" More housekeeping
+.\" Turn off indent possibly set by FOOTNOTE INDENT
+.          in 0
+.          ev
+.          if \\n[#UNDERLINE_WAS_ON_FN] \{\
+.             UNDERLINE
+.             rr #UNDERLINE_WAS_ON_FN
+.          \}
+.\" Restore sentence spacing
+.          if \\n[#PRINT_STYLE]=2 \{\
+.             if d $RESTORE_SS_VAR .SS \\*[$RESTORE_SS_VAR]
+.             rm $RESTORE_SS_VAR
+.          \}
+.          rr #FN_R_INDENT
+.          rr #FN_BR_INDENT
+.          nr #PP_STYLE \\n[#PP_STYLE_PREV]
+.          if !\\n[#INDENT_FIRSTS] .INDENT_FIRST_PARAS OFF
+.          rr #INDENT_FIRSTS
+.\" Calculate footnote depth, but not if #COUNTERS_RESET (created in
+.\" DIVER_FN_1_PRE) to instruct FOOTNOTES to skip this step for now
+.\" (it's taken care of when FN_IN_DIVER is output into FOOTNOTES in
+.\" PROCESS_FN_IN_DIVER).
+.          ie r#COUNTERS_RESET .rr #COUNTERS_RESET
+.          el \{\
+.             nr #GET_DEPTH 1
+.\" If the footnote is the 1st on the page and it falls too close
+.\" to the bottom margin, defer the footnote text to the next page...
+.             if (\\n[#SPACE_REMAINING]-1)<=(\\n[.v]) \{\
+.\" ...but not if PROCESS_FN_LEFTOVER has set #PREV_FN_DEFERRED to 1
+.                if !\\n[#PREV_FN_DEFERRED]=1 \{\
+.                   nr #FN_DEFER 1
+.                   nr #FN_DEPTH +\\n[#DIVER_DEPTH]
+.                   rr #GET_DEPTH
+.\" This is required so that the defer space clause can distinguish
+.\" a real #FN_COUNT=1 from one generated if FOOTNOTE is run inside
+.\" QUOTE, BLOCKQUOTE or EPIGRAPH
+.                   if \\n[#DIVER_FN]=2 \{\
+.                      nr #SAVED_DIVER_FN_COUNT \\n[#FN_COUNT]
+.                      rr #DIVER_FN
+.                   \}
+.                \}
+.             \}
+.\" Calculate the footnote depth.
+.             if \\n[#GET_DEPTH]=1 \{\
+.\" Save the previous footnote depth (for use when there will be
+.\" some overflowed footnote text).
+.                nr #SAVED_FN_DEPTH_1 \\n[#FN_DEPTH]
+.\" Add the depth of the current footnote to any already existent
+.\" footnotes.
+.                nr #FN_DEPTH +\\n[#DIVER_DEPTH]
+.\" Special handling for run-on footnotes
+.                if \\n[#RUN_ON]=1 \{\
+.                   if \\n[#RUNON_FOOTNOTES]   .unformat RUNON_FOOTNOTES
+.                   if \\n[#RUNON_FN_IN_DIVER] .unformat RUNON_FN_IN_DIVER
+.                   ev FOOTNOTES
+.\" Recreate FOOTNOTES with rule followed by text of unformatted
+.\" run-on footnotes.
+.                   di FOOTNOTES
+.                   ie \\n[#FN_RULE]=0 .RLD 1v
+.                   el \{\
+\v'-\\n[#FN_RULE_ADJ]u-\\n[#FN_RULE_WEIGHT_ADJ]u'\
+\D't \\n[#FN_RULE_WEIGHT]'\
+\h'-\\n[#FN_RULE_WEIGHT]u'\
+\D'l \\n[#FN_RULE_LENGTH]u 0'\
+\v'+\\n[#FN_RULE_ADJ]u+\\n[#FN_RULE_WEIGHT_ADJ]u'
+.                   \}
+.                   br
+.                   if \\n[#RUNON_FOOTNOTES] \{\
+.                      RUNON_FOOTNOTES
+.                      rr #RUNON_FOOTNOTES
+.                   \}
+.                   if \\n[#RUNON_FN_IN_DIVER] \{\
+.                      RUNON_FN_IN_DIVER
+.                      rr #RUNON_FN_IN_DIVER
+.                   \}
+.                   br
+.                   di
+.                   ev
+.                   nr #FN_DEPTH \\n[#DIVER_DEPTH]
+.                   nr #SAVED_VFP 0+\\n[#VARIABLE_FOOTER_POS]
+.                   nr #VARIABLE_FOOTER_POS 0-\\n[#B_MARGIN]u
+.                \}
+.\" Save the new depth
+.                nr #SAVED_FN_DEPTH_2 \\n[#FN_DEPTH]
+.\" Signal that defer space should be added when PROCESS_FN_LEFTOVER
+.\" processes deferred footnotes.
+.                if \\n[#FN_DEFER] \{\
+.                   if \\n[#FN_COUNT]=2 \{\
+.                      ie \\n[#COLUMNS] \{\
+.                         if !\\n[#FROM_FOOTER] \{\
+.                            if \\n[#FN_DEFER]=1 .nr #FN_DEFER_SPACE 1
+.                            if \\n[#FN_COUNT_FOR_COLS]>=1 .rr #FN_DEFER_SPACE
+.                            if \\n[#FROM_HEADER] .nr #FN_DEFER_SPACE 1
+.                         \}
+.                      \}
+.                      el .nr #FN_DEFER_SPACE 1
+.                   \}
+.                   rr #FN_DEFER
+.                \}
+.\" If the depth of the whole footnote won't fit in the space
+.\" between where we are on the page and the bottom margin, calculate
+.\" how much of it will fit.
+.                if \\n[#FN_DEPTH]>\\n[#SPACE_REMAINING] \{\
+.                   nr #FN_LINES 0 1
+.                   while (\\n+[#FN_LINES]*\\n[#FN_LEAD])<\\n[#SPACE_REMAINING] \{\
+.                      nr #FN_DEPTH (\\n[#FN_LINES]*\\n[#FN_LEAD])
+.                   \}
+.                   nr #VFP_DIFF \\n[#FN_DEPTH]-\\n[#SAVED_FN_DEPTH_1]
+.                   nr #OVERFLOW 1
+.\" Very occasionally, #VFP_DIFF, on a 1st footnote that isn't to
+.\" be deferred, comes up with a depth equal to exactly 1 line
+.\" of footnotes, i.e. enough room to print the rule and nothing
+.\" else.  The following tests for such a condition, and rather than
+.\" attempting to treat the footnote as an overflow, it tells mom to
+.\" treat it as a special kind of deferred footnote (#FN_DEFER 2).
+.                   if \\n[#SAVED_FN_DEPTH_1]=0 \{\
+.                      if \\n[#FN_DEPTH]=\\n[#FN_LEAD] \{\
+.                         nr #FN_DEFER 2
+.                         nr #FN_DEPTH \\n[#SAVED_FN_DEPTH_2]
+.                         rr #OVERFLOW
+.                      \}
+.                   \}
+.                \}
+.\" Calculate VFP based on whether the footnote overflows, or is to
+.\" be treated normally.
+.                ie \\n[#OVERFLOW]=1 \{\
+.                   if \\n[#RUN_ON] \{\
+.                      rr #VARIABLE_FOOTER_POS
+.                      nr #VARIABLE_FOOTER_POS \\n[#SAVED_VFP]
+.                   \}
+.                   ie \\n[#FN_COUNT]=1 \{\
+.                      ie \\n[#RULED]=1 \{\
+.                         ie \\n[#COLUMNS]=1 \{\
+.                            ie \\n[#COL_NUM]=\\n[#NUM_COLS] \{\
+.                               ie \\n[#FROM_FOOTER] \{\
+.                                  ie \\n[#FN_COUNT_FOR_COLS]>1 \{\
+.                                     nr #FN_DEPTH -\\n[#FN_DEPTH]
+.                                     if \\n[#DIVERTED]=1 .nr #DIVERTED 3
+.                                     if !\\n[#PREV_FN_DEFERRED]=1 \
+.                                        nr #FN_DEPTH -\\n[#VFP_DIFF]
+.                                  \}
+.                                  el \{\
+.                                     nr #VARIABLE_FOOTER_POS -\\n[#FN_DEPTH]
+.                                     if \\n[#DIVERTED]=1 .nr #DIVERTED 3
+.                                  \}
+.                               \}
+.                               el .nr #VARIABLE_FOOTER_POS -(\\n[#FN_DEPTH])
+.                            \}
+.                            el .nr #VARIABLE_FOOTER_POS -(\\n[#FN_DEPTH])
+.                         \}
+.                         el .nr #VARIABLE_FOOTER_POS -(\\n[#FN_DEPTH])
+.                      \}
+.                      el \{\
+.                         nr #VARIABLE_FOOTER_POS -\\n[#VFP_DIFF]
+.                         if \\n[#DIVERTED]=1 .nr #DIVERTED 3
+.                         if !\\n[#PREV_FN_DEFERRED]=1 \{\
+.                            ie \\n[#COLUMNS]=1 \{\
+.                               if !\\n[#FROM_FOOTER] .
+.                            \}
+.                            el .nr #FN_DEPTH -\\n[#VFP_DIFF]
+.                         \}
+.                         if \\n[#DIVERTED]=3 \{\
+.                            if !\\n[#PREV_FN_DEFERRED] \{\
+.                               if !\\n[#FROM_FOOTER] \{\
+.                                  if \\n[#FN_COUNT]=1 \{\
+.                                     if !\\n[#VFP_DIFF] \{\
+.                                        if \\n[#FN_MARKER_STYLE]=1 \{\
+.                                           da FOOTNOTES
+\!.                                            ALD \\n[#FN_LEAD]u
+.                                           di
+.                                        \}
+.                                        if \\n[#RESET_FN_NUMBER] \{\
+.                                           da FOOTNOTES
+\!.                                            ALD \\n[#FN_LEAD]u
+.                                           di
+.                                        \}
+.                                     \}
+.                                  \}
+.                               \}
+.                            \}
+.                         \}
+.                      \}
+.                      nr #FN_DEPTH \\n[#SAVED_FN_DEPTH_1]+\\n[#VFP_DIFF]
+.                   \}
+.                   el \{\
+.                      nr #VARIABLE_FOOTER_POS -\\n[#VFP_DIFF]
+.                      nr #FN_DEPTH \\n[#SAVED_FN_DEPTH_1]+\\n[#VFP_DIFF]
+.                   \}
+.                   rr #OVERFLOW
+.                   rr #RULED
+.                \}
+.                el \{\
+.                   nr #VARIABLE_FOOTER_POS -\\n[#DIVER_DEPTH]
+.                   if \\n[#PREV_FN_DEFERRED]=1 \{\
+.                      if \\n[#DIVERTED] \{\
+.                         if !\\n[#FN_DEPTH]=\\n[#SAVED_FN_DEPTH_1] \{\
+.                            nr #FN_DEPTH +\\n[#FN_LEAD]
+.                            nr #VARIABLE_FOOTER_POS -\\n[#FN_LEAD]
+.                            rr #PREV_FN_DEFERRED
+.                         \}
+.                      \}
+.                   \}
+.                   if \\n[#FN_COUNT]>1 \{\
+.                      nr #NO_BACK_UP 1
+.                      rr #DIVERTED
+.                      rr #RULED
+.                   \}
+.                \}
+.             \}
+.          \}
+.          ch FOOTER \\n[#VARIABLE_FOOTER_POS]u
+.\" If we have a footnote whose text has to be deferred to the next
+.\" page, reset the FOOTER trap to its original location.
+.          if \\n[#FN_DEFER] \{\
+.             nr #VARIABLE_FOOTER_POS 0-\\n[#B_MARGIN]u
+.             ch FOOTER \\n[#VARIABLE_FOOTER_POS]u
+.          \}
+.       \}
+.       nr #NO_FN_MARKER 0
+.    \}
+.    if \\n[#NUM_ARGS]=2 \{\
+.       if '\\$2'BREAK' .BR
+.       if '\\$2'BR' .BR
+.    \}
+.END
+\#
+\# Utility macros to manage footnotes that occur inside diversions
+\# ---------------------------------------------------------------
+\#
+\# There are some redundancies here; they're left in in case unforeseen
+\# footnote situations crop up in the future that might require
+\# manipulation of them.
+\#
+\# 1. Pre-footnote processing for footnotes in diversions
+\#
+\# a) A footnote inside a diversion will be moved entirely (marker
+\# in running text and text of footnote) to the next page/column.
+\#
+.MAC DIVER_FN_1_PRE END
+.    nr #RESET_FN_COUNTERS 1
+.    nr #COUNTERS_RESET 1
+.    if \\n[#DONE_ONCE]=1 \{\
+.       if \\n[#FN_DEFER] \{\
+.          if \\n[#SAVED_DIVER_FN_COUNT]=1 \{\
+.             ie \\n[#COLUMNS]=1 \
+.                if \\n[#COL_NUM]=\\n[#NUM_COLS] .nr #FN_DEFER_SPACE 1
+.             el .nr #FN_DEFER_SPACE 1
+.          \}
+.       \}
+.       if \\n[#FN_MARKER_STYLE]=1 \{\
+.          if \\n[#FN_COUNT]>0 .nr #FN_COUNT 0 1
+.          if \\n[#COLUMNS]=1 \
+.             if \\n[#COL_NUM]=\\n[#NUM_COLS] .nr #FN_COUNT_FOR_COLS 0 1
+.       \}
+.       if \\n[#FN_MARKER_STYLE]=2 \{\
+.          if \\n[#RESET_FN_NUMBER]=1 \{\
+.             ie \\n[#COLUMNS]=1 \
+.                if \\n[#COL_NUM]=\\n[#NUM_COLS] .nr #FN_NUMBER 0 1
+.             el .nr #FN_NUMBER 0 1
+.          \}
+.       \}
+.    \}
+.END
+\#
+\# b) Treat as a normal footnote, including defers.
+\#
+.MAC DIVER_FN_2_PRE END
+.    nr #RESET_FN_COUNTERS 2
+.END
+\#
+\# 2. Post-footnote processing for footnotes in diversions
+\#
+\# Even when a footnote inside a diversion is treated as
+\# "normal," some manipulation of registers is required.  The
+\# macro is called in DO_QUOTE (i.e. at the termination of
+\# quotes and blockquotes) and in DO_EPIGRAPH.
+\#
+.MAC DIVER_FN_2_POST END
+.    if \\n[#DONE_ONCE]=1 \{\
+.       if \\n[#FN_MARKER_STYLE]=1 \{\
+.          if \\n[#FN_COUNT]=0 .nr #DONT_RULE_ME 1
+.          if \\n[#FN_COUNT]>0 .nr #FN_COUNT 0 1
+.          if \\n[#COLUMNS]=1 \{\
+.             if \\n[#COL_NUM]=\\n[#NUM_COLS] .nr #FN_COUNT_FOR_COLS 0 1
+.             if !\\n[#COL_NUM]=\\n[#NUM_COLS] .
+.          \}
+.       \}
+.       if \\n[#FN_MARKER_STYLE]=2 \{\
+.          if \\n[#FN_COUNT]=0 .nr #DONT_RULE_ME 1
+.          if \\n[#FN_COUNT]>0 .nr #FN_COUNT 0 1
+.          if \\n[#RESET_FN_NUMBER]=1 \{\
+.             ie \\n[#COLUMNS]=1 \
+.                if \\n[#COL_NUM]=\\n[#NUM_COLS] .nr #FN_NUMBER 0 1
+.             el .nr #FN_NUMBER 0 1
+.          \}
+.       \}
+.    \}
+.END
+\#
+\# The main macros that handle footnote processing.
+\# -----------------------------------------------
+\#
+\# FN_OVERFLOW_TRAP starts off "underneath" FOOTER, but is revealed
+\# as #VARIABLE_FOOTER_POSITION changes the position of FOOTER.
+\# FN_OVERFLOW_TRAP simply starts diversion FN_OVERFLOW to "catch"
+\# the overflow.  The diversion is ended in FOOTER, immediately after
+\# FOOTER outputs the diversion, FOOTNOTES, before PROCESS_FN_LEFTOVER
+\# is run (either in HEADER, or in FOOTER if moving col to col).
+\#
+.MAC FN_OVERFLOW_TRAP END
+.    if \\n[#FN_COUNT] \{\
+.       di FN_OVERFLOW
+.       ie !\\n[#NO_BACK_UP]=1 \{\
+.          if \\n[#PREV_FN_DEFERRED] \{\
+.             ie \\n[#COLUMNS]=1 \{\
+.                if \\n[#FROM_FOOTER] \{\
+.                   if \\n[#PREV_FN_DEFERRED] \{\
+.                      if !\\n[#COL_NUM]=\\n[#NUM_COLS] \
+.                      rr #PREV_FN_DEFERRED
+.                   \}
+.                \}
+.                if !\\n[#FROM_FOOTER] \{\
+.                   if !\\n[#COL_NUM]=\\n[#NUM_COLS] \{\
+.                      if !\\n[#LAST_FN_COUNT_FOR_COLS]>1 \{\
+\!.                       RLD \\n[#FN_LEAD]u
+.                      \}
+.                   \}
+.                \}
+.             \}
+.             el \{\
+\!.              RLD \\n[#FN_LEAD]u
+.             \}
+.          \}
+.       \}
+.       el \{\
+.          rr #NO_BACK_UP
+.          rr #PREV_FN_DEFERRED
+.       \}
+.    \}
+.\" When #FROM_DIVERT_FN is 1, it signals to FOOTNOTE, when run from
+.\" within DIVERT_FN_LEFTOVER, to set #SPACE_REMAINING to the total
+.\" area allowable for running text.
+\#.    nr #FROM_DIVERT_FN 1
+.END
+\#
+\# PROCESS_FN_LEFTOVER is called at the top of HEADER, and in
+\# FOOTER if we're moving from one column to the next (i.e. after
+\# outputting FOOTNOTES).  It checks for whether we have a "deferred
+\# footnote" situation, and resets counters and number registers
+\# accordingly.  Lastly, if we have some footnote overflow, it calls
+\# DIVERT_FN_OVERFLOW.
+\#
+.MAC PROCESS_FN_LEFTOVER END
+.    if \\n[#PREV_FN_DEFERRED]=2 \
+.       if \\n[#FN_COUNT_AT_FOOTER]>1 .rr #PREV_FN_DEFERRED
+.    ie !\\n[#FN_DEFER] \{\
+.       nr #FN_COUNT 0 1
+.       nr #FN_DEPTH 0
+.       nr #VARIABLE_FOOTER_POS 0-\\n[#B_MARGIN]
+.    \}
+.    el \{\
+.       if \\n[#FN_DEFER]=1 .nr #VARIABLE_FOOTER_POS -\\n[#FN_DEPTH]
+.       if \\n[#FN_DEFER]=2 \{\
+.          nr #FN_DEPTH 0
+.          nr #VARIABLE_FOOTER_POS 0-\\n[#B_MARGIN]
+.       \}
+.    \}
+.    nr #SPACE_REMAINING 0
+.    ch FOOTER -\\n[#B_MARGIN]u
+.    if \\n[#FN_DEFER] \{\
+.       nr #NO_FN_MARKER 1
+.       FOOTNOTE
+.       nf
+.       FOOTNOTE OFF
+.       ie \\n[#COLUMNS]=1 \{\
+.          if \\n[#COL_NUM]=\\n[#NUM_COLS] \{\
+.             if !\\n[#FROM_FOOTER] \{\
+.                if \\n[#FN_COUNT_FOR_COLS]=1 .nr #PREV_FN_DEFERRED 1
+.             \}
+.          \}
+.       \}
+.       el .nr #PREV_FN_DEFERRED 1
+.    \}
+.    if !\\n[#FN_DEFER] \
+.       if \\n[#FN_OVERFLOW_DEPTH] .DIVERT_FN_LEFTOVER
+.    ie \\n[#COLUMNS]=1 \{\
+.       if \\n[#COL_NUM]>1 \
+.          if \\n[#COL_NUM]=\\n[#NUM_COLS] .nr #FN_COUNT 0 1
+.    \}
+.    el .nr #FN_COUNT 0 1
+.    if \\n[#DIVER_FN]=2 .rr #DIVER_FN
+.    rr #FROM_DIVERT_FN
+.END
+\#
+\# DIVERT_FN_LEFTOVER is called in PROCESS_FN_LEFTOVER (at
+\# the top of HEADER, and in FOOTER if we're moving from one column
+\# to the next).
+\#
+.MAC DIVERT_FN_LEFTOVER END
+.    nr #NO_FN_MARKER 1
+.    nr #DIVERTED 1
+.    FOOTNOTE
+.    nf
+.    FN_OVERFLOW
+.    FOOTNOTE OFF
+.    if \\n[#PREV_FN_DEFERRED] \{\
+.       nr #FN_DEPTH -\\n[#FN_LEAD]
+.       nr #VARIABLE_FOOTER_POS +\\n[#FN_LEAD]
+.       ch FOOTER \\n[#VARIABLE_FOOTER_POS]u
+.       if \\n[#PREV_FN_DEFERRED]=2 \{\
+.          nr #PREV_FN_DEFERRED 1
+.          rr #DIVERTED
+.       \}
+.    \}
+.    rr #FN_OVERFLOW_DEPTH
+.END
+\#
+\# This is a special macro to deal with footnotes that are set inside
+\# diversions (QUOTE, BLOCKQUOTE and EPIGRAPH).  It's called in HEADER
+\# (and in FOOTER, if we're moving from column to column), and comes
+\# after PROCESS_FOOTNOTE_LEFTOVER in those two macros.
+\#
+.MAC PROCESS_FN_IN_DIVER END
+.    nr #SPACE_REMAINING 0
+.    ch FOOTER -\\n[#B_MARGIN]u
+.    nr #NO_FN_MARKER 1
+.    if !\\n[#RESET_FN_COUNTERS]=2 .rr #RESET_FN_COUNTERS
+.    FOOTNOTE
+.    if \\n[#FN_OVERFLOW_DEPTH] .nf
+.    ie dRUNON_FN_IN_DIVER \{\
+.       RUNON_FN_IN_DIVER
+.       rm RUNON_FN_IN_DIVER
+.    \}
+.    el \{\
+.       nf
+.       FN_IN_DIVER
+.    \}
+.    FOOTNOTE OFF
+.    rr #DIVER_FN
+.END
+\#
+\# ====================================================================
+\#
+\# +++ENDNOTES+++
+\#
+\# When endnotes are output, the spacing between the notes is always
+\# 1 extra linespace.  This can have bottom margin consequences.  If
+\# this doesn't bother you, don't worry about it.  If it does bother
+\# you, and you want to adjust the spacing between any two endnotes (as
+\# they're output), make the spacing adjustments (.ALD/.RLD) at the
+\# *end* of endnotes (i.e. just before .ENDNOTE OFF), not at the top.
+\#
+\# Endnotes must be output manually with .ENDNOTES. This allows user
+\# the flexibility to output endnotes at the end of each collated
+\# document, or to output them at the end of the entire document.
+\#
+\# Control macros
+\# --------------
+\#
+\# ENDNOTE POINT SIZE
+\# ------------------
+\# *Argument:
+\#   <base point size for endnotes>
+\# *Function:
+\#   Creates or modifies register #EN_PS.
+\# *Notes:
+\#   Default is same as running text in body of document.
+\#
+\#   This size control macro differs from other size control macros
+\#   in that it sets an absolute point size, not a relative one.  This
+\#   is because a) endnotes always appear separate from the body of
+\#   a document and therefore don't need to be relative to the body
+\#   of the document, and b) there are quite a few elements of the
+\#   endnotes page(s) that need to be relative to the base point size
+\#   of that page.  If the base endnote point size were relative to
+\#   the body of the document (i.e. a _SIZE macro taking a +|- value)
+\#   getting the rest of the endnote elements sized properly could
+\#   become very confusing.
+\#
+.MAC ENDNOTE_PT_SIZE END
+.    nr #EN_PS (p;\\$1)
+.END
+\#
+\# ENDNOTE SPACING
+\# ----------------
+\# *Arguments:
+\#   <per item endnote spacing> | <anything>
+\# *Function:
+\#   Enables space between endnotes items.
+\# *Notes:
+\#   Default is no space.
+\#
+.MAC ENDNOTE_SPACING END
+.    ie \B'\\$1' .ds $EN_SPACE \\$1
+.    el .rm $EN_SPACE
+.END
+\#
+\# ENDNOTES_HDRFTR_CENTER
+\# ----------------------
+\# *Argument:
+\#   toggle
+\# *Function:
+\#   Creates or removes toggle register #EN_HDRFTR_CENTER, used to
+\#   determine whether mom should print a/the hdrftr center string
+\#   on the endnotes page.  Primarily to enable/disable printing of the
+\#   chapter name in hdrftrs when DOCTYPE CHAPTER.
+\# *Notes:
+\#   Default is OFF
+\#
+.MAC ENDNOTES_HDRFTR_CENTER END
+.    ie '\\$1'' .nr #EN_HDRFTR_CENTER 1
+.    el .rr #EN_HDRFTR_CENTER
+.END
+\#
+\# ENDNOTE STRING
+\# --------------
+\# *Argument:
+\#   <title for endnotes page>
+\# *Function:
+\#   Creates or modifies string $EN_STRING.
+\# *Notes:
+\#   Default is "Endnotes"
+\#
+.MAC ENDNOTES_HEADER_STRING END
+.    ds $EN_STRING \\$1
+.END
+.
+.ALIAS ENDNOTE_STRING ENDNOTES_HEADER_STRING
+\#
+\# ENDNOTE STRING START POSTION
+\# ----------------------------
+\# *Argument:
+\#   <distance from page top>
+\# *Function:
+\#   Creates or modifies register #EN_STRING_V_POS
+\#
+.MAC ENDNOTES_HEADER_V_POS END
+.    nr #EN_STRING_V_POS (\\$1)
+.END
+.
+.ALIAS ENDNOTE_STRING_ADVANCE  ENDNOTES_HEADER_V_POS
+.ALIAS ENDNOTE_STRING_V_POS    ENDNOTES_HEADER_V_POS
+.ALIAS ENDNOTES_HEADER_V_POS   ENDNOTES_HEADER_V_POS
+\#
+\# ENDNOTE HEADER CAPS and SMALLCAPS
+\# ---------------------------------
+\# *Arguments:
+\#   <none> | <anything>
+\# *Function:
+\#   Turns capitalization or smallcaps style of the endnotes pages
+\#   title string "Endnotes" on or off.
+\# *Notes:
+\#   Users may want the endnotes pages title string to be in
+\#   caps, but the toc entry for endnotes in lower case.  If the
+\#   argument to ENDNOTES_HEADER_STRING is in lower case and
+\#   ENDNOTES_HEADER_CAPS is turned on, this is exactly what will
+\#   happen.  Ditto for smallcaps.
+\#
+\#   Default for CAPS is on.
+\#
+.MAC ENDNOTES_HEADER_CAPS END
+.   ie '\\$1'' .nr #EN_STRING_CAPS 1
+.   el .nr #EN_STRING_CAPS 0
+.END
+.
+.ALIAS ENDNOTE_STRING_CAPS ENDNOTES_HEADER_CAPS
+.
+.MAC ENDNOTES_HEADER_SMALLCAPS END
+.   ie '\\$1'' .nr #EN_STRING_SMALLCAPS 1
+.   el .nr #EN_STRING_SMALLCAPS 0
+.END
+.
+.ALIAS ENDNOTE_STRING_SMALLCAPS ENDNOTES_HEADER_SMALLCAPS
+\#
+\# ENDNOTE TITLE
+\# -------------
+\# *Argument:
+\#   <string that appears before the first endnote pertaining to any document>
+\# *Function:
+\#   Creates string $EN_TITLE.
+\# *Notes:
+\#   Default is the document title, or, if doc is a chapter, "Chapter #"
+\#
+.MAC ENDNOTE_TITLE END
+.    ds $EN_TITLE \\$1
+.END
+\#
+\# ENDNOTE MARKER STYLE
+\# --------------------
+\# *Arguments:
+\#   NUMBER | LINE | SUPERSCRIPT
+\# *Function:
+\#   Sets register #EN_MARKER_STYLE, used in ENDNOTE to determine
+\#   the style of endnote markers (labels).
+\# *Notes:
+\#   1=NUMBER; 2=LINE.  LINE means "use output line numbers".
+\#   Default is NUMBER.
+\#
+.MAC ENDNOTE_MARKER_STYLE END
+.    if '\\$1'NUMBER' .nr #EN_MARKER_STYLE 1
+.    if '\\$1'LINE' \{\
+.       nr #EN_MARKER_STYLE 2
+.       if !\\n[#EN_LN_SEP] \
+.          if !\\n[#EN_LN_BRACKETS] .ENDNOTE_LINENUMBER_BRACKETS SQUARE
+.    \}
+.    if '\\$1'SUPERSCRIPT' .nr #EN_MARKER_STYLE 3
+.END
+\#
+\# ENDNOTE LINENUMBER MARK
+\# -----------------------
+\# *Function:
+\#   This string, when called inline, stores the current output line
+\#   number in register #EN_MARK for use with ENDNOTE.
+\#
+.ds EN_MARK \R'#EN_MARK \En[ln]'
+\#
+\# ENDNOTE LINENUMBER SEPARATOR
+\# ----------------------------
+\# *Argument:
+\#   <user-defined separator>
+\# *Function:
+\#   Stores user-defined separator (for use then
+\#   ENDNOTE_MARKER_STYLE is LINE) in string $EN_LN_SEP.  The
+\#   separator is intended to be used when the user wishes a
+\#   separator, rather than the choice of brackets offered by
+\#   ENDNOTE_LINENUMBER_BRACKETS.
+\#
+.MAC ENDNOTE_LINENUMBER_SEPARATOR END
+.    rr #EN_LN_BRACKETS
+.    nr #EN_LN_SEP 1
+.    ds $EN_LN_SEP "\\$1
+.END
+\#
+\# ENDNOTE LINENUMBER BRACKETS
+\# ---------------------------
+\# *Argument:
+\#   PARENS | SQUARE | BRACES or ( | [ | {
+\# *Function:
+\#   Sets register #EN_LN_BRACKETS to 1, and creates strings
+\#   $EN_OPEN_BRACKET and $EN_CLOSE_BRACKET according to the given argument.
+\#
+.MAC ENDNOTE_LINENUMBER_BRACKETS END
+.    rr #EN_LN_SEP
+.    nr #EN_LN_BRACKETS 1
+.    if '\\$1'PARENS' \{\
+.       ds $EN_OPEN_BRACKET (
+.       ds $EN_CLOSE_BRACKET )
+.    \}
+.    if '\\$1'(' \{\
+.       ds $EN_OPEN_BRACKET (
+.       ds $EN_CLOSE_BRACKET )
+.    \}
+.    if '\\$1'SQUARE' \{\
+.       ds $EN_OPEN_BRACKET [
+.       ds $EN_CLOSE_BRACKET ]
+.    \}
+.    if '\\$1'[' \{\
+.       ds $EN_OPEN_BRACKET [
+.       ds $EN_CLOSE_BRACKET ]
+.    \}
+.    if '\\$1'BRACES' \{\
+.       ds $EN_OPEN_BRACKET {
+.       ds $EN_CLOSE_BRACKET }
+.    \}
+.    if '\\$1'{' \{\
+.       ds $EN_OPEN_BRACKET {
+.       ds $EN_CLOSE_BRACKET }
+.    \}
+.END
+\#
+\# ENDNOTE LINENUMBER GAP
+\# ----------------------
+\# *Argument:
+\#   <space between line-number labels and endnotes text>
+\# *Function:
+\#   Defines string $EN_LN_GAP, used during printing of line-number
+\#   labels in ENDNOTE.
+\#
+.MAC ENDNOTE_LINENUMBER_GAP END
+.    nr #EN_LN_GAP (u;\\$1)
+.END
+\#
+\# ENDNOTE NUMBERS ALIGNMENT
+\# -------------------------
+\# *Argument:
+\#   LEFT | RIGHT <max. number of digit placeholders that will appear in endnotes>
+\# *Function:
+\#   Creates registers for _LEFT or _RIGHT; creates register
+\#   #EN_NUMBER_PLACEHOLDERS.
+\# *Notes:
+\#   Default is for endnote numbers to be right aligned to 2 placeholders.
+\#
+.MAC ENDNOTE_NUMBERS_ALIGN END
+.    if '\\$1'LEFT' \{\
+.       rr #EN_NUMBERS_ALIGN_RIGHT
+.       nr #EN_NUMBERS_ALIGN_LEFT 1
+.    \}
+.    if '\\$1'RIGHT' \{\
+.       rr #EN_NUMBERS_ALIGN_LEFT
+.       nr #EN_NUMBERS_ALIGN_RIGHT 1
+.    \}
+.    nr #EN_NUMBER_PLACEHOLDERS \\$2
+.END
+\#
+\# ENDNOTE PARAGRAPH INDENT
+\# ------------------------
+\# *Argument:
+\#   <first line indent of paras subsequent to 1st in endnotes>
+\# *Function:
+\#   Creates register #EN_PP_INDENT for use in .PP.
+\# *Notes:
+\#   Requires a unit of measure.
+\#
+\#   Default is 1.5m for TYPESET; same indent as PARA_INDENT for TYPEWRITE.
+\#
+.MAC ENDNOTE_PARA_INDENT END
+.    nr #EN_PP_INDENT (\\$1)
+.END
+\#
+\# TURN OFF COLUMN MODE FOR ENDNOTES
+\# ---------------------------------
+\# *Argument:
+\#   <none> | <anything>
+\# *Function:
+\#   Creates or removes register #EN_NO_COLS
+\# *Notes:
+\#   Allows user to tell mom not to set endnotes in columnar
+\#   documents in columns.  Default is to set endnotes in columns.
+\#
+.MAC ENDNOTES_NO_COLUMNS END
+.    ie '\\$1'' .nr #EN_NO_COLS 1
+.    el .rr #EN_NO_COLS
+.END
+\#
+\# NO FIRST PAGE NUMBER ON ENDNOTES FIRST PAGE
+\# -------------------------------------------
+\# *Argument:
+\#   <none> | <anything>
+\# *Function:
+\#   Creates or removes register #EN_NO_FIRST_PN
+\# *Notes:
+\#   For use if FOOTERS are on.  Tells ENDNOTES not to put a page
+\#   number on the first endnotes page.  Some users may want this.
+\#   Default is to print a page number at the top of the first
+\#   endnotes page when footers are on.
+\#
+.MAC ENDNOTES_NO_FIRST_PAGENUM END
+.    ie '\\$1'' .nr #EN_NO_FIRST_PN 1
+.    el .rr #EN_NO_FIRST_PN
+.END
+\#
+\# PAGE HEADERS ON ENDNOTES PAGES
+\# ------------------------------
+\# *Argument:
+\#   <none> | ALL
+\# *Function:
+\#   Creates or removes register #EN_ALLOWS_HEADERS or
+\#   #EN_ALLOWS_HEADERS_ALL
+\# *Notes:
+\#   Whether ENDNOTES puts a page header at the top of endnotes
+\#   pages if page headers are used throughout the document.
+\#   Default is to insert the page headers, but not on the first
+\#   page.  If the optional argument ALL is given, ENDNOTES puts a
+\#   page header on the first page as well.
+\#
+.MAC ENDNOTES_ALLOWS_HEADERS END
+.    ie '\\$1'' .nr #EN_ALLOWS_HEADERS 1
+.    el \{\
+.       ie '\\$1'ALL' \{\
+.          nr #EN_ALLOWS_HEADERS 1
+.          nr #EN_ALLOWS_HEADERS_ALL 1
+.       \}
+.       el \{\
+.          nr #EN_ALLOWS_HEADERS 0
+.          nr #EN_ALLOWS_HEADERS_ALL 0
+.       \}
+.    \}
+.END
+\#
+\# ENDNOTES PAGES PAGE NUMBERING STYLE
+\# -----------------------------------
+\# *Argument:
+\#   DIGIT | ROMAN | roman | ALPHA | alpha
+\# *Function:
+\#   Creates or modifies $EN_PN_STYLE.
+\# *Notes:
+\#   Allows user to define what style should be used for endnotes
+\#   pages page numbering.  Arguments are the same as for
+\#   PAGENUM_STYLE.
+\#
+\#   Default is DIGIT.
+\#
+.MAC ENDNOTES_PAGENUM_STYLE END
+.    ds $EN_PN_STYLE \\$1
+.END
+\#
+\# FIRST PAGE NUMBER FOR ENDNOTES
+\# ------------------------------
+\# *Argument:
+\#   <page number that appears on page 1 of endnotes pages>
+\# *Function:
+\#   Creates or modifies string $EN_FIRST_PN
+\# *Notes:
+\#   To be used with caution, only if all endnotes
+\#   are to be output at once, i.e. not at the end of the separate
+\#   docs of a collated doc
+\#
+.MAC ENDNOTES_FIRST_PAGENUMBER END
+.    nr #EN_FIRST_PN \\$1
+.END
+\#
+\# SINGLESPACE ENDNOTES
+\# --------------------
+\# *Argument:
+\#   <none> | <anything>
+\# *Function:
+\#   Sets lead of endnotes pages in TYPEWRITE to 12 points,
+\#   adjusted.
+\# *Notes:
+\#   Default is to double-space endnotes pages.
+\#
+.MAC SINGLESPACE_ENDNOTES END
+.    if \\n[#PRINT_STYLE]=1 \{\
+.       ie \\n[#SINGLE_SPACE] \{\
+.          nr #EN_SINGLESPACE 1
+.          rr #IGNORE
+.          if \\n[#OK_PROCESS_LEAD] \{\
+.             ENDNOTE_LEAD 12 ADJUST
+.             nr #IGNORE 1
+.          \}
+.       \}
+.       el \{\
+.          ie '\\$1'' \{\
+.             nr #EN_SINGLESPACE 1
+.             rr #IGNORE
+.             if \\n[#OK_PROCESS_LEAD] \{\
+.                ENDNOTE_LEAD 12 ADJUST
+.                nr #IGNORE 1
+.             \}
+.          \}
+.          el \{\
+.             rr #EN_SINGLESPACE
+.             rr #IGNORE
+.             if \\n[#OK_PROCESS_LEAD] \{\
+.                ENDNOTE_LEAD 24 ADJUST
+.                nr #IGNORE 1
+.             \}
+.          \}
+.       \}
+.    \}
+.END
+\#
+\# ENDNOTE PARAGRAPH SPACE
+\# -----------------------
+\# *Argument:
+\#   toggle
+\# *Function:
+\#   Creates toggle register #EN_PP_SPACE for use in .PP.
+\# *Notes:
+\#   Like PARA_SPACE.  Default is not to space endnote paras.
+\#
+.MAC ENDNOTE_PARA_SPACE END
+.    ie '\\$1'' .nr #EN_PP_SPACE 1
+.    el .rr #EN_PP_SPACE
+.END
+\#
+\# ENDNOTE
+\# -------
+\# *Argument:
+\#   toggle
+\# *Function:
+\#   Places superscript endnote number in text, then collects and
+\#   processes endnote in diversion END_NOTES.
+\# *Notes:
+\#   \c must be appended to the word immediately preceding .ENDNOTE
+\#   when ENDNOTE_MARKER_STYLE is NUMBER.
+\#
+.MAC ENDNOTE END
+.    ie '\\$1'' \{\
+.       nr #ENDNOTE 1
+.       ie !\\n[#EN_MARKER_STYLE]=2 \{\
+.          if \\n[#CONDENSE] .nop \*[CONDX]\c
+.          if \\n[#EXTEND] .nop \*[EXTX]\c
+.             if \\n[#UNDERLINE_ON] \{\
+.                nr #UNDERLINE_WAS_ON 1
+.                UNDERLINE OFF
+.             \}
+.          if \\n[#PRINT_STYLE]=1 \{\
+.             if \\n[#SLANT_ON] \{\
+.                 nr #SLANT_WAS_ON 1
+.                 nop \*[SLANTX]\c
+.             \}
+.\" Vertical raise amount here is more than when the same string is printed in
+.\" the endnotes so bottom of number aligns with top of bowl.
+.             PRINT \
+"\s-2\v'-\\n[#DOC_LEAD]u/5u'\\n+[#EN_NUMBER]\v'+\\n[#DOC_LEAD]u/5u'\s+2\c"
+.          \}
+.          if \\n[#PRINT_STYLE]=2 .PRINT \*[SUP]\\n+[#EN_NUMBER]\*[SUPX]\c
+.       \}
+.       el \{\
+.          ie r#EN_NUMBER .nr #EN_NUMBER \\n[#EN_NUMBER]+1
+.          el .nr #EN_NUMBER 1 1
+.          if !\\n[#LINENUMBERS] \{\
+.             tm1 "[mom]: Line numbering must be enabled with NUMBER_LINES when
+.             tm1 "       ENDNOTE_MARKER_STYLE is LINE.
+.             ab   [mom]: Aborting '\\n[.F]' at \\$0, line \\n[.c].
+.          \}
+.          if \\n[#EN_MARK]=0 .nr #EN_MARK \\n[ln]
+.          nr #EN_MARK_2 \\n[ln]
+.          if '\\n[.z]'P_QUOTE' \{\
+.             nr #EN_MARK -1
+.             nr #EN_MARK_2 -1
+.          \}
+.       \}
+.       nr #PP_STYLE_PREV \\n[#PP_STYLE]
+.       nr #PP_STYLE 1
+.       if \\n[#INDENT_FIRST_PARAS] .nr #INDENT_FIRSTS 1
+.       INDENT_FIRST_PARAS
+.       ev EN
+.       da END_NOTES
+.       LL \\n[#DOC_L_LENGTH]u
+.       ta \\n[.l]u
+.       if \\n[#COLUMNS] \{\
+.          ie \\n[#EN_NO_COLS] .LL \\n[#DOC_L_LENGTH]u
+.          el .LL \\n[#COL_L_LENGTH]u
+.          ta \\n[.l]u
+.       \}
+\!.     if \\\\n[.vpt]=0 .vpt
+\!.     ne 3
+.       vs \\n[#EN_LEAD]u
+.\" Print identifying doc title (eg Chapter n)
+.       if \\n[#EN_NUMBER]=1 \{\
+.          if \\n[#PRINT_STYLE]=1 .TYPEWRITER
+.          if \\n[#PRINT_STYLE]=2 \{\
+.             FAMILY  \\*[$EN_TITLE_FAM]
+.             FT      \\*[$EN_TITLE_FT]
+.             ps \\n[#EN_PS]u\\*[$EN_TITLE_SIZE_CHANGE]
+.             if \\n[#EN_TITLE_COLOR] .gcolor \\*[$EN_TITLE_COLOR]
+.             if \\n[#ENDNOTE_TITLE_SMALLCAPS] .SMALLCAPS
+.             if \\n[#ENDNOTE_TITLE_CAPS] .CAPS
+.          \}
+.          ie \\n[#SINGLE_SPACE]=1 .sp 2
+.          el .sp
+.          if !'\\*[$EN_TITLE]'' \{\
+.             if '\\*[$EN_TITLE_QUAD]'L'      .LEFT
+.             if '\\*[$EN_TITLE_QUAD]'LEFT'   .LEFT
+.             if '\\*[$EN_TITLE_QUAD]'C'      .CENTER
+.             if '\\*[$EN_TITLE_QUAD]'CENTER' .CENTER
+.             if '\\*[$EN_TITLE_QUAD]'CENTRE' .CENTER
+.             if '\\*[$EN_TITLE_QUAD]'R'      .RIGHT
+.             if '\\*[$EN_TITLE_QUAD]'RIGHT'  .RIGHT
+.             ie \\n[#EN_TITLE_UNDERLINE] \{\
+.                UNDERSCORE "\\*[$EN_TITLE]"
+.             \}
+.             el \{\
+.                ie \\n[#PRINT_STYLE]=1 \
+.                   UNDERSCORE "\\*[$EN_TITLE]"
+.                el .PRINT "\\*[$EN_TITLE]"
+.             \}
+.          \}
+.          if \\n[#EN_TITLE_COLOR] .gcolor
+.          if \\n[#ENDNOTE_TITLE_SMALLCAPS] .SMALLCAPS OFF
+.          if \\n[#ENDNOTE_TITLE_CAPS] .CAPS OFF
+.       \}
+.\" Get indent from endnotes point size; convert string to reg in
+.\" case indent string is, e.g., m or n
+.       ps \\n[#EN_PS]u
+.       nr #REF_EN_INDENT (u;\\*[$REF_EN_INDENT])
+.       if \\n[#PRINT_STYLE]=1 \{\
+.          TYPEWRITER
+.          if \\n[#EN_NUMBER]=1 \{\
+.             ie \\n[#SINGLE_SPACE]=1 .sp
+.             el .sp .25
+.           \}
+.          if \\n[#EN_MARKER_STYLE]=3 .ps -2
+.       \}
+.       if \\n[#PRINT_STYLE]=2 \{\
+.          if \\n[#EN_NUMBER]=1 \
+.             if !'\\*[$EN_TITLE]'' .sp .25v
+.          if \\n[#EN_MARKER_STYLE]=1 \{\
+.             FAMILY  \\*[$EN_NUMBER_FAM]
+.             FT      \\*[$EN_NUMBER_FT]
+.             ps \\n[#EN_PS]u\\*[$EN_NUMBER_SIZE_CHANGE]
+.          \}
+.          if \\n[#EN_MARKER_STYLE]=2 \{\
+.             FAMILY  \\*[$EN_LN_FAM]
+.             FT      \\*[$EN_LN_FT]
+.             ps \\n[#EN_PS]u\\*[$EN_LN_SIZE_CHANGE]
+.          \}
+.          if \\n[#EN_MARKER_STYLE]=3 \{\
+.             FAMILY  \\*[$EN_NUMBER_FAM]
+.             FT      \\*[$EN_NUMBER_FT]
+.             ps \\n[#PT_SIZE_IN_UNITS]u*6u/10u
+.          \}
+.       \}
+.\" Build string for line-numbered endnotes
+.       if \\n[#EN_MARKER_STYLE]=2 \{\
+.          ie \\n[#EN_LN_BRACKETS]=1 \{\
+.             ds $EN_LINENUMBER \v'-.085m'\\*[$EN_OPEN_BRACKET]\v'.085m'
+.             ie \\n[#EN_MARK_2]=\\n[#EN_MARK] .as $EN_LINENUMBER \
+\\n[#EN_MARK]\v'-.085m'\\*[$EN_CLOSE_BRACKET]\v'.085m'\"
+.             el .as $EN_LINENUMBER \
+\\n[#EN_MARK]\v'-.1m'-\v'.1m'\\n[#EN_MARK_2]\v'-.085m'\
+\\*[$EN_CLOSE_BRACKET]\v'.085m'\"
+.          \}
+.          el \{\
+.             ie \\n[#EN_MARK_2]=\\n[#EN_MARK] \
+.                ds $EN_LINENUMBER \
+\\n[#EN_MARK]\\*[$EN_LN_SEP]
+.             el \
+.                ds $EN_LINENUMBER \
+\\n[#EN_MARK]\v'-.1m'-\v'.1m'\\n[#EN_MARK_2]\\*[$EN_LN_SEP]
+.          \}
+.          nr #EN_MARK 0
+.       \}
+.       vpt 0
+.       ie \\n[#EN_NUMBERS_ALIGN_RIGHT] .RIGHT
+.       el .LEFT
+.       if \\n[#EN_MARKER_STYLE]=1 \
+.          nr #EN_NUMBER_L_LENGTH \w'\0'*\\n[#EN_NUMBER_PLACEHOLDERS]+\w'.'
+.       if \\n[#EN_MARKER_STYLE]=2 \{\
+.          ie \\n[#EN_LN_BRACKETS]=1 .nr #EN_NUMBER_L_LENGTH \
+(\w'\0'*(\\n[#EN_NUMBER_PLACEHOLDERS]*2))+\w'-[]'
+.          el .nr #EN_NUMBER_L_LENGTH \
+(\w'\0'*(\\n[#EN_NUMBER_PLACEHOLDERS]*2))+\w'-\\*[$EN_LN_SEP]'
+.          RIGHT
+.       \}
+.       if \\n[#EN_MARKER_STYLE]=3 \{\
+.          nr #EN_NUMBER_L_LENGTH \
+\w'\0'*\\n[#EN_NUMBER_PLACEHOLDERS]+.15m
+.          RIGHT
+.       \}
+.       ie \\n[#REF]=1 \
+.          ll \\n[#EN_NUMBER_L_LENGTH]u+\\n[#REF_EN_INDENT]u
+.       el .ll \\n[#EN_NUMBER_L_LENGTH]u
+.       if \\n[#EN_MARKER_STYLE]=1 \{\
+.          if \\n[#REF]=1 .ti \\n[#REF_EN_INDENT]u
+.          nop \En[#EN_NUMBER].
+.       \}
+.       if \\n[#EN_MARKER_STYLE]=2 \{\
+.          nop \\*[$EN_LINENUMBER]
+.          rm $EN_LINENUMBER
+.       \}
+.       if \\n[#EN_MARKER_STYLE]=3 \{\
+.          ps \" Reset ps changed to get width of s-script numbers
+.          ie \\n[#PRINT_STYLE]=1 \{\
+.\" Vertical raise amount here is less than when the same string is printed in
+.\" the body of the text because number precedes a cap.
+.             nop \
+\s-2\v'-\\n[#DOC_LEAD]u/7u'\\n[#EN_NUMBER]\|\v'+\\n[#DOC_LEAD]u/7u'\s+2
+.          \}
+.          el .nop \E*[SUP]\\n[#EN_NUMBER]\E*[SUPX]\h'.15m'
+.       \}
+.       EOL
+.       ll
+.       nr #EN_FIGURE_SPACE \w'\0'
+.       if \\n[#EN_MARKER_STYLE]=1 \{\
+.          ie \\n[#REF]=1 .ti \
+\\n[#EN_NUMBER_L_LENGTH]u+\\n[#REF_EN_INDENT]u+\\n[#EN_FIGURE_SPACE]u
+.          el .in \
+\\n[#EN_NUMBER_L_LENGTH]u+\\n[#EN_FIGURE_SPACE]u
+.       \}
+.       if \\n[#EN_MARKER_STYLE]=2 \{\
+.          ie \\n[#REF]=1 .ti \
+\\n[#EN_NUMBER_L_LENGTH]u+\\n[#REF_EN_INDENT]u+\\n[#EN_LN_GAP]u
+.          el .ti \
+\\n[#EN_NUMBER_L_LENGTH]u+\\n[#EN_LN_GAP]u
+.       \}
+.       if \\n[#EN_MARKER_STYLE]=3 \{\
+.          ie \\n[#REF]=1 .ti \
+\\n[#EN_NUMBER_L_LENGTH]u+\\n[#REF_EN_INDENT]u+\w'\|'u
+.          el .in \
+\\n[#EN_NUMBER_L_LENGTH]u
+.       \}
+.       nr #EN_TEXT_INDENT \\n[.i]
+.       QUAD \\*[$EN_QUAD]
+.       vpt 1
+.       if \\n[#PRINT_STYLE]=1 .TYPEWRITER
+.       if \\n[#PRINT_STYLE]=2 \{\
+.          FAMILY  \\*[$EN_FAM]
+.          FT      \\*[$EN_FT]
+.          ps \\n[#EN_PS]u
+.       \}
+.    \}
+.    el \{\
+\!.     ie \\n[#EN_NUMBER]=\\\\n[#LAST_EN] .vpt 0
+\!.     el .br
+.       if \\n[#PRINT_STYLE]=2 .sp \\*[$EN_SPACE]
+.       in 0
+.       if \\n[#EN_MARKER_STYLE]=2 \{\
+\!.        in 0
+.       \}
+.       da
+.\" Restore sentence spacing
+.       if \\n[#PRINT_STYLE]=2 \{\
+.          if d$RESTORE_SS_VAR .SS \\*[$RESTORE_SS_VAR]
+.          rm $RESTORE_SS_VAR
+.       \}
+.       ev
+.\" Restore lead -- need
+.       nr #PP_STYLE \\n[#PP_STYLE_PREV]
+.       if !\\n[#INDENT_FIRSTS] .INDENT_FIRST_PARAS OFF
+.       rr #INDENT_FIRSTS
+.       rr #ENDNOTE
+.       if \\n[#UNDERLINE_WAS_ON] \{\
+.          rr #UNDERLINE_WAS_ON
+.          UNDERLINE
+.       \}
+.       if \\n[#SLANT_WAS_ON] \{\
+.          rr #SLANT_WAS_ON
+\*[SLANT]\c
+.       \}
+.    \}
+.    if \\n[#NUM_ARGS]=2 \{\
+.       if '\\$2'BREAK' .BR
+.       if '\\$2'BR' .BR
+.    \}
+.END
+\#
+\# Endnotes (user space macro)
+\# ---------------------------
+\#
+\# ENDNOTES
+\# --------
+\# *Arguments:
+\#   none
+\# *Function:
+\#   Sets new document leading from #EN_LEAD, breaks to a new page,
+\#   sets up an endnotes page based on registers and strings associated
+\#   with endnotes, then outputs diversion END_NOTES.
+\#
+.MAC ENDNOTES END
+.    if \\n[defer] .NEWPAGE
+.    nr #LAST_EN \\n[#EN_NUMBER]
+.    nr #ENDNOTES 1
+.    nr #EN_FIRST_PAGE 1
+.    SETUP_ENDNOTES
+.    if !\\n[#PRINT_STYLE]=1 .chop END_NOTES
+.    nf
+.    END_NOTES
+.    rm END_NOTES
+.    ps \\n[#DOC_PT_SIZE]u
+.    if \\n[#PRINT_STYLE]=1 .vs \\n[#DOC_LEAD]u
+.    if \\n[#PRINT_STYLE]=2 \{\
+.       ie \\n[#ADJ_EN_LEAD] \
+.          nr #DOC_LEAD \\n[#RESTORE_DOC_LEAD]
+.       el .DOC_LEAD \\n[#RESTORE_DOC_LEAD]u
+.       rr #RESTORE_DOC_LEAD
+.    \}
+.    if \\n[#COLUMNS_WERE_ON] .nr #COLUMNS 1
+.    if \\n[#HEADER_STATE]=1 .HEADERS
+.    if \\n[#LINENUMBERS]=2 \{\
+.       NUMBER_LINES RESUME
+.       nr #LINENUMBERS 1
+.    \}
+.
+.    PRINT_FOOTER
+.    rr #ENDNOTES
+.END
+\#
+\# Macros common to endnotes, bibliography, and toc
+\# ------------------------------------------------
+\#
+.MAC SETUP_BIB_EN END
+.    if '\\$0'SETUP_BIBLIOGRAPHY' .ds EN-OR-BIB BIB
+.    if '\\$0'SETUP_ENDNOTES'     .ds EN-OR-BIB EN
+.    nr #HEADER_STATE \\n[#HEADERS_ON]
+.    ds $RESTORE_PAGENUM_STYLE \\*[$PAGENUM_STYLE]
+.    if \\n[#LINENUMBERS]=1 \{\
+.       NUMBER_LINES OFF
+.       nr #LINENUMBERS 2
+.    \}
+.    if \\n[#HEADERS_ON]=1 \
+.       if !\\n[#\\*[EN-OR-BIB]_ALLOWS_HEADERS_ALL] .HEADERS OFF
+.    if \\n[#HEADER_STATE]=1 \{\
+.       ie \\n[#\\*[EN-OR-BIB]_HDRFTR_CENTER]=1 .
+.       el .rm $HDRFTR_CENTER
+.    \}
+.    ie !\\n[#SUSPEND_PAGINATION] \{\
+.       if \\n[#PAGINATE]=1 \{\
+.          if \\n[#PAGE_NUM_V_POS]=1 \{\
+.             PAGENUM_STYLE \\*[$\\*[EN-OR-BIB]_PN_STYLE]
+.             if \\n[#\\*[EN-OR-BIB]_FIRST_PN] .PAGENUMBER \\n[#\\*[EN-OR-BIB]_FIRST_PN]-1
+.             if r #\\*[EN-OR-BIB]_NO_FIRST_PN .nr #PAGINATE 0
+.          \}
+.       \}
+.    \}
+.    el \{\
+.       ie \\n[#PAGE_NUM_V_POS]=2 .nr #PAGINATE 1
+.       el .nr #PAGINATE 0
+.    \}
+.    if \\n[#FOOTERS_ON]=1 \{\
+.       if !'\\*[$HDRFTR_CENTER_OLD]'' \
+.          ds $HDRFTR_CENTER \\*[$HDRFTR_CENTER_OLD]
+.    \}
+.    NEWPAGE
+.    if \\n[#FOOTERS_ON]=1 \{\
+.       ds $HDRFTR_CENTER \\*[$HDRFTR_CENTER_NEW]
+.       rm $HDRFTR_CENTER_OLD
+.       rm $HDRFTR_CENTER_NEW
+.    \}
+.    ie !\\n[#SUSPEND_PAGINATION] \{\
+.       if \\n[#PAGE_NUM_V_POS]=1 \{\
+.          if r #\\*[EN-OR-BIB]_NO_FIRST_PN \
+.             if \\n[#PAGINATION_STATE]=1 .nr #PAGINATE 1
+.       \}
+.    \}
+.    el \
+.       if \\n[#PAGE_NUM_V_POS]=2 .nr #PAGINATE 0
+.    rr #PAGINATION_STATE
+.    PAGENUM_STYLE \\*[$\\*[EN-OR-BIB]_PN_STYLE]
+.    if \\n[#\\*[EN-OR-BIB]_FIRST_PN] .PAGENUMBER \\n[#\\*[EN-OR-BIB]_FIRST_PN]
+.    if \\n[#HEADER_STATE]=1 \
+.       if \\n[#\\*[EN-OR-BIB]_ALLOWS_HEADERS] .HEADERS
+.\" Collect endnotes title string for TOC
+.    nr #TOC_ENTRY_PN \\n%+\\n[#PAGE_NUM_ADJ]
+.    af #TOC_ENTRY_PN \\g[#PAGENUMBER]
+.    ds $TOC_TITLE_ITEM \\*[$\\*[EN-OR-BIB]_STRING]\|
+.    PDF_BOOKMARK 1 \\*[$\\*[EN-OR-BIB]_STRING]
+.    TITLE_TO_TOC
+.\" End collection of endnotes title string for TOC
+.\" Process endnotes
+.    if \\n[#PRINT_STYLE]=1 .vs \\n[#\\*[EN-OR-BIB]_LEAD]u
+.    if \\n[#PRINT_STYLE]=2 \{\
+.       if \\n[#\\*[EN-OR-BIB]_NO_COLS] \{\
+.          if \\n[#COLUMNS] .nr #COLUMNS_WERE_ON 1
+.          nr #COLUMNS 0
+.       \}
+.       nr #RESTORE_DOC_LEAD \\n[#DOC_LEAD]
+.       ie \\n[#ADJ_\\*[EN-OR-BIB]_LEAD] .nr #DOC_LEAD \\n[#\\*[EN-OR-BIB]_LEAD]
+.       el .DOC_LEAD \\n[#\\*[EN-OR-BIB]_LEAD]u
+.    \}
+.    vpt 0
+.    RESTORE_SPACE
+.    ie r#\\*[EN-OR-BIB]_STRING_V_POS .sp |\\n[#\\*[EN-OR-BIB]_STRING_V_POS]u-1v
+.    el .sp |\\n[#T_MARGIN]u-\\n[#\\*[EN-OR-BIB]_LEAD]u
+.    vpt
+.    mk ec
+.    if \\n[#SLANT_ON] \{\
+\*[SLANTX]\c
+.    \}
+.    sp
+.    if !'\\*[$\\*[EN-OR-BIB]_STRING]'' \{\
+.       if \\n[#PRINT_STYLE]=1 \{\
+.          TYPEWRITER
+.          vs \\n[#\\*[EN-OR-BIB]_LEAD]u
+.       \}
+.       if \\n[#PRINT_STYLE]=2 \{\
+.          LL \\n[#DOC_L_LENGTH]u
+.          ta \\n[.l]u
+.          if \\n[#COLUMNS] \{\
+.             ie \\n[#\\*[EN-OR-BIB]_NO_COLS] .LL \\n[#DOC_L_LENGTH]u
+.             el .LL \\n[#COL_L_LENGTH]u
+.             ta \\n[.l]u
+.          \}
+.          FAMILY  \\*[$\\*[EN-OR-BIB]_STRING_FAM]
+.          FT      \\*[$\\*[EN-OR-BIB]_STRING_FT]
+.          ps \\n[#\\*[EN-OR-BIB]_PS]u\\*[$\\*[EN-OR-BIB]_STRING_SIZE_CHANGE]
+.          vs      \\n[#\\*[EN-OR-BIB]_LEAD]u
+.       \}
+.       if '\\*[$\\*[EN-OR-BIB]_STRING_QUAD]'L'      .LEFT
+.       if '\\*[$\\*[EN-OR-BIB]_STRING_QUAD]'LEFT'   .LEFT
+.       if '\\*[$\\*[EN-OR-BIB]_STRING_QUAD]'C'      .CENTER
+.       if '\\*[$\\*[EN-OR-BIB]_STRING_QUAD]'CENTER' .CENTER
+.       if '\\*[$\\*[EN-OR-BIB]_STRING_QUAD]'CENTRE' .CENTER
+.       if '\\*[$\\*[EN-OR-BIB]_STRING_QUAD]'R'      .RIGHT
+.       if '\\*[$\\*[EN-OR-BIB]_STRING_QUAD]'RIGHT'  .RIGHT
+.       EOL
+.       if \\n[#\\*[EN-OR-BIB]_STRING_COLOR]=1 .gcolor \\*[$\\*[EN-OR-BIB]_STRING_COLOR]
+.       if \\n[#\\*[EN-OR-BIB]_STRING_CAPS] .CAPS
+.       if \\n[#\\*[EN-OR-BIB]_STRING_SMALLCAPS] .SMALLCAPS
+.       ie \\n[#\\*[EN-OR-BIB]_STRING_UNDERLINE] \{\
+.          if \\n[#PRINT_STYLE]=2 .ds $TITLE_TYPE \\*[EN-OR-BIB]_STRING
+.          ie \\n[#PRINT_STYLE]=1 \{\
+.             UNDERSCORE2 3p 2p "\\*[$\\*[EN-OR-BIB]_STRING]"
+.          \}
+.          el \{\
+.             ie \\n[#\\*[EN-OR-BIB]_STRING_UNDERLINE]=2 \
+.                UNDERSCORE2 \\*[$\\*[EN-OR-BIB]_UNDERLINE_GAP] \\*[$\\*[EN-OR-BIB]_RULE_GAP] "\\*[$\\*[EN-OR-BIB]_STRING]"
+.             el .UNDERSCORE "\\*[$\\*[EN-OR-BIB]_STRING]"
+.          \}
+.       \}
+.       el .PRINT "\\*[$\\*[EN-OR-BIB]_STRING]
+.    \}
+.    SMALLCAPS OFF
+.    CAPS OFF
+.    if \\n[#\\*[EN-OR-BIB]_STRING_COLOR]=1 .gcolor
+.    if \\n[#PRINT_STYLE]=1 \{\
+.       ie \\n[#SINGLE_SPACE]=1 .sp
+.       el \{\
+.          ie \\n[#\\*[EN-OR-BIB]_SINGLESPACE]=1 .sp
+.          el .
+.       \}
+.    \}
+.    SHIM
+.    QUAD \\*[$\\*[EN-OR-BIB]_QUAD]
+.END
+.
+.ALIAS SETUP_BIBLIOGRAPHY SETUP_BIB_EN
+.ALIAS SETUP_ENDNOTES     SETUP_BIB_EN
+\#
+\# ENDNOTES, BIBLIOGRAPHY and TOC LEADING
+\# --------------------------------------
+\# *Argument:
+\#   <leading> [ ADJUST ]
+\# *Function:
+\#   Depending on the name by which it's called, creates or modifies
+\#   register #<type>_LEAD, where <type> is BIB, EN, or TOC.  Creates or removes
+\#   register #ADJ_<type>_LEAD.  Stores arguments in strings if BIB,
+\#   EN, or TOC leading are set before START.
+\# *Notes:
+\#   Default is same as doc lead for TYPESET, adjusted; 24 for TYPEWRITE.
+\#
+.MAC _LEAD END
+.    if '\\$0'BIBLIOGRAPHY_LEAD' .ds $SECTION BIB
+.    if '\\$0'ENDNOTE_LEAD' .ds $SECTION EN
+.    if '\\$0'TOC_LEAD' .ds $SECTION TOC
+.    ds $\\*[$SECTION]_LEAD \\$1
+.    ds $ADJUST_\\*[$SECTION]_LEAD \\$2
+.    if !\\n[#OK_PROCESS_LEAD] .return
+.    nr #\\*[$SECTION]_LEAD (p;\\$1)
+.    rr #ADJ_\\*[$SECTION]_LEAD
+.    als \\*[$SECTION]_LEAD DOC_LEAD
+.    if '\\$2'ADJUST' \{\
+.       nr #ORIG_DOC_LEAD \\n[#UNADJUSTED_DOC_LEAD]
+.       nr #RESTORE_ADJ_DOC_LEAD \\n[#ADJ_DOC_LEAD]
+.       nr #ADJ_DOC_LEAD 1
+.       nr #ADJ_\\*[$SECTION]_LEAD 1
+.       nr #NO_TRAP_RESET 1
+.       \\*[$SECTION]_LEAD \\n[#\\*[$SECTION]_LEAD]u ADJUST
+.       nr #\\*[$SECTION]_LEAD \\n[#DOC_LEAD]
+.       DOC_LEAD \\n[#ORIG_DOC_LEAD]u
+.       rr #NO_TRAP_RESET
+.       nr #ADJ_DOC_LEAD \\n[#RESTORE_ADJ_DOC_LEAD]
+.       rr #ORIG_DOC_LEAD
+.    \}
+.END
+.
+.ALIAS BIBLIOGRAPHY_LEAD _LEAD
+.ALIAS ENDNOTE_LEAD      _LEAD
+.ALIAS TOC_LEAD          _LEAD
+\#
+\# ====================================================================
+\#
+\# +++BIBLIOGRAPHY+++
+\#
+\# Mom treats bibliographies and endnotes very similarly.  The chief
+\# difference is that endnotes are collected and formatted inside a
+\# diversion, while bibliographies are built "by hand."  ENDNOTES sets
+\# up the endnotes page and outputs the formatted diversion.
+\# BIBLIOGRAPHY sets up the bibliography page, then awaits refer
+\# commands.
+\#
+\# All of the bibliography control macros have their exact
+\# counterparts in the endnotes control macros.  See, therefore,
+\# Arguments, Functions, and Notes in the Endnotes section.
+\#
+\# Bibliography control macros
+\#
+.MAC BIBLIOGRAPHY_PT_SIZE END
+.    nr #BIB_PS (p;\\$1)
+.END
+\#
+.MAC BIBLIOGRAPHY_HDRFTR_CENTER END
+.    ie '\\$1'' .nr #BIB_HDRFTR_CENTER 1
+.    el .rr #BIB_HDRFTR_CENTER
+.END
+\#
+.MAC BIBLIOGRAPHY_STRING END
+.    ds $BIB_STRING \\$1
+.END
+\#
+.MAC BIBLIOGRAPHY_STRING_ADVANCE END
+.    nr #BIB_STRING_V_POS (u;\\$1)
+.END
+\#
+.MAC BIBLIOGRAPHY_STRING_V_POS END
+.    nr #BIB_STRING_V_POS (u;\\$1)
+.END
+.
+.ALIAS BIBLIOGRAPHY_HEADER_V_POS BIBLIOGRAPHY_STRING_V_POS
+\#
+.MAC BIBLIOGRAPHY_NO_COLUMNS END
+.    ie '\\$1'' .nr #BIB_NO_COLS 1
+.    el .rr #BIB_NO_COLS
+.END
+\#
+.MAC BIBLIOGRAPHY_NO_FIRST_PAGENUM END
+.    ie '\\$1'' .nr #BIB_NO_FIRST_PN 1
+.    el .rr #BIB_NO_FIRST_PN
+.END
+\#
+.MAC BIBLIOGRAPHY_ALLOWS_HEADERS END
+.    ie '\\$1'' .nr #BIB_ALLOWS_HEADERS 1
+.    el \{\
+.       ie '\\$1'ALL' \{\
+.          nr #BIB_ALLOWS_HEADERS 1
+.          nr #BIB_ALLOWS_HEADERS_ALL 1
+.       \}
+.       el \{\
+.          rr #BIB_ALLOWS_HEADERS
+.          rr #BIB_ALLOWS_HEADERS_ALL
+.       \}
+.    \}
+.END
+\#
+.MAC BIBLIOGRAPHY_PAGENUM_STYLE END
+.    ds $BIB_PN_STYLE \\$1
+.END
+\#
+.MAC BIBLIOGRAPHY_FIRST_PAGENUMBER END
+.    nr #BIB_FIRST_PN \\$1
+.END
+\#
+.MAC SINGLESPACE_BIBLIOGRAPHY END
+.    if \\n[#PRINT_STYLE]=1 \{\
+.       ie \\n[#SINGLE_SPACE] \{\
+.          nr #BIB_SINGLESPACE 1
+.          rr #IGNORE
+.          if \\n[#OK_PROCESS_LEAD] \{\
+.             BIBLIOGRAPHY_LEAD 12 ADJUST
+.             nr #IGNORE 1
+.          \}
+.       \}
+.       el \{\
+.          ie '\\$1'' \{\
+.             nr #BIB_SINGLESPACE 1
+.             rr #IGNORE
+.             if \\n[#OK_PROCESS_LEAD] \{\
+.                BIBLIOGRAPHY_LEAD 12 ADJUST
+.                nr #IGNORE 1
+.             \}
+.          \}
+.          el \{\
+.             rr #BIB_SINGLESPACE
+.             rr #IGNORE
+.             if \\n[#OK_PROCESS_LEAD] \{\
+.                BIBLIOGRAPHY_LEAD 24 ADJUST
+.                nr #IGNORE 1
+.             \}
+.          \}
+.       \}
+.    \}
+.END
+\#
+\# Style for outputting collected bibliographic references
+\# -------------------------------------------------------
+\# *Argument:
+\#   LIST | PLAIN [ <list separator> ] [ <list prefix> ]
+\# *Function:
+\#   Sets #BIB_LIST to 1 for numbered list style, 0 for plain output
+\# *Notes:
+\#   Technically, user is supposed to enter PLAIN if s/he wants an
+\#   unumbered bibliography, but the el clause says "any arg but
+\#   LIST means unumbered."  Effectively, any arg but LIST produces
+\#   a "plain" bibliographic list.
+\#
+\# The 2nd and 3rd args have the same options as the 2nd and 3rd
+\# args to LIST.
+\#
+.MAC BIBLIOGRAPHY_TYPE END
+.    ie '\\$1'LIST' \{\
+.       nr #BIB_LIST 1
+.       ie '\\$2'' \{\
+.          if '\\*[$BIB_LIST_SEPARATOR]'' .ds $BIB_LIST_SEPARATOR .
+.       \}
+.       el .ds $BIB_LIST_SEPARATOR \\$2
+.       ie '\\$3'' .ds $BIB_LIST_PREFIX
+.       el .ds $BIB_LIST_PREFIX \\$3
+.    \}
+.    el .nr #BIB_LIST 0
+.END
+\#
+\# Spacing between items in bibliographies
+\# ---------------------------------------
+\# *Argument:
+\#   <amount of space>
+\# *Function:
+\#   Gets value for #BIB_SPACE in units.
+\# *Notes:
+\#   Requires a unit of measure.
+\#
+.MAC BIBLIOGRAPHY_SPACING END
+.    ds $BIB_SPACE \\$1
+.    if \\n[#BIB_LEAD]=0 \{\
+.       nr #DEFER_BIB_SPACING 1
+.       return
+.    \}
+.    ds $EVAL_BIB_SPACE \\*[$BIB_SPACE]
+.    substring $EVAL_BIB_SPACE -1
+.    ie '\\*[$EVAL_BIB_SPACE]'v' \{\
+.       substring $BIB_SPACE 0 0
+.       nr #BIB_SPACE \\n[#BIB_LEAD]*\\*[$BIB_SPACE]
+.    \}
+.    el .nr #BIB_SPACE (\\$1)
+.END
+\#
+\# Bibliography (user space macro)
+\# -------------------------------
+\# *Function:
+\#   Sets up a new page, with title, ready to accept the output
+\#   of refer's $LIST$ or .R1 bibliography .R2
+\# *Notes:
+\#   Bibliography pages are set up almost identically to endnotes pages.
+\#
+.MAC BIBLIOGRAPHY END
+.    if \\n[defer] .NEWPAGE
+.    ie '\\$1'' \{\
+.       rr #FN_REF
+.       rr #EN_REF
+.       nr #BIBLIOGRAPHY 1
+.       nr #BIB_FIRST_PAGE 1
+.       SETUP_BIBLIOGRAPHY
+.       if \\n[#PRINT_STYLE]=1 \{\
+.          ie \\n[#SINGLE_SPACE]=1 .vs \\n[#BIB_LEAD]u
+.          el \{\
+.             ie \\n[#BIB_SINGLESPACE]=1 .vs \\n[#BIB_LEAD]u
+.             el .vs \\n[#BIB_LEAD]u
+.          \}
+.       \}
+.       if \\n[#PRINT_STYLE]=2 \{\
+.          ie \\n[#ADJ_BIB_LEAD] \
+.             nr #DOC_LEAD \\n[#RESTORE_DOC_LEAD]
+.          el .DOC_LEAD \\n[#RESTORE_DOC_LEAD]u
+.          rr #RESTORE_DOC_LEAD
+.       \}
+.       if \\n[#COLUMNS_WERE_ON] .nr #COLUMNS 1
+.       if \\n[#HEADER_STATE]=1 .HEADERS
+.       if \\n[#LINENUMBERS]=2 \{\
+.          NUMBER_LINES RESUME
+.          nr #LINENUMBERS 1
+.       \}
+.       di BIB
+.    \}
+.    el \{\
+.       br
+.       di
+.\" Part of workaround for refer spitting out a blank page if the
+.\" last ref falls on the bottom line.
+.       nr num*refs \\n[ref*num*first-pass]
+.       nf
+.       chop BIB
+.       BIB
+.    \}
+.END
+\#
+\# ====================================================================
+\#
+\# +++TABLE OF CONTENTS+++
+\#
+\# Strings to allocate space for leaders and entry page numbers
+\#
+.ds $TOC_PN \\*[ST102]\F[\\*[$TOC_PN_FAM]]\f[\\*[$TOC_PN_FT]]\
+\s[\\n[#TOC_PS]u]^\\*[ST102X]\\*[ST103]\s[\\*[$TOC_PN_SIZE_CHANGE]]\
+\|\|\|\h'\w'0'u*\\n[#TOC_PN_PADDING]u'\\*[ST103X]
+\#
+.ds $TOC_PN_TYPEWRITE \\*[ST102]^\\*[ST102X]\\*[ST103]\
+\h'\w'0'u*\\n[#TOC_PN_PADDING]u'\\*[ST103X]
+\#
+\# TOC collector
+\#
+.MAC TO_TOC END
+.    if !'\\n[.ev]'TOC_EV' .ev TOC_EV
+.    nr #TOC_CH_NUM_INDENT \w'\\*[$TOC_CH_NUM]'
+.    da TOC_ENTRIES
+\!.  ie \\\\n[#SKIP_ENTRY]=1 \{\
+.     rr #SKIP_ENTRY
+\!.  \}
+\!.  el \{\
+.       br
+.       ie \\n[#PRINT_STYLE]=1 \{\
+\!.        fam \\*[$TYPEWRITER_FAM]
+\!.        ft  R
+\!.        ps \\*[$TYPEWRITER_PS]
+.          ds _TYPEWRITE _TYPEWRITE
+.       \}
+.       el \{\
+.          ie '\\$0'HD_TO_TOC' \{\
+\!.           ps \\n[#TOC_PS]u\\*[$TOC_HEAD_\\n[#LEVEL]_SIZE]
+.          \}
+.          el \{\
+\!.           FAMILY \\*[$TOC_TITLE_FAM]
+\!.           FT     \\*[$TOC_TITLE_FT]
+\!.           ps \\n[#TOC_PS]u\\*[$TOC_TITLE_SIZE]
+.          \}
+.       \}
+.       if \\n[#PRINT_STYLE]=2 \{\
+.          rm _TYPEWRITE
+.          if \\n[#SPACE_TOC_ITEMS] \{\
+.             if \\n[#POST_TOP]=1 \{\
+.                ie !\\n[#LEVEL]=\\n[#LAST_LEVEL] \{\
+.                   ie \\n[#LEVEL]>\\n[#LAST_LEVEL] \!.sp .2v
+.                   el \!.sp .4v
+.                \}
+.                el \{\
+.                   if \\n[#COLLATED_DOC] \
+.                      if '\\$0'TITLE_TO_TOC' \!.sp .4v
+.                \}
+.             \}
+.          \}
+.       \}
+\!.     PAD_MARKER ^
+.       if !'\\$0'HD_TO_TOC' \{\
+\!.        if \\n[#TOC_TITLE_CAPS]=1 .CAPS
+.       \}
+.       if '\\$0'HD_TO_TOC' \{\
+.          nr #POST_TOP 1
+\!.        if \\n[#TOC_HEAD_\\n[#LEVEL]_CAPS]=1 .CAPS
+.       \}
+\!.     vpt 0
+.       ie '\\$0'HD_TO_TOC' \{\
+.          if \\n[#PRINT_STYLE]=1 \{\
+.             ds $TOC_HEAD_\\n[#LEVEL]_FAM] \\*[$TYPEWRITER_FAM]
+.             ds $TOC_HEAD_\\n[#LEVEL]_FT]  R
+.          \}
+\!.        PAD \
+"\\f[\\*[$TOC_HEAD_\\n[#LEVEL]_FAM]\
+\\*[$TOC_HEAD_\\n[#LEVEL]_FT]]\
+\h'\\\\n[#TOC_INDENT_ADJ]u'\h'\\n[#TOC_HEAD_\\n[#LEVEL]_INDENT]u'\
+\\*[$TOC_HD_NUM]\\*[$TOC_HEAD_\\n[#LEVEL]_ITEM]\\*[$TOC_PN\\*[_TYPEWRITE]]" \
+"\\*[PDFBOOKMARK.NAME]"
+.       \}
+.       el \{\
+.          if \\n[#PRINT_STYLE]=1 \{\
+.             ds $TOC_TITLE_FAM \\*[$TYPEWRITER_FAM]
+.             ds $TOC_TITLE_FT  R
+.          \}
+\!.        PAD \
+"\\f[\\*[$TOC_TITLE_FAM]\\*[$TOC_TITLE_FT]]\
+\h'\\n[#TOC_TITLE_INDENT]u'\\*[$TOC_TITLE_ITEM]\\*[$TOC_PN\\*[_TYPEWRITE]]" \
+"\\*[PDFBOOKMARK.NAME]"
+.       \}
+.       if '\\$0'HD_TO_TOC' \{\
+\!.        if \\n[#TOC_HEAD_\\n[#LEVEL]_CAPS]=1 .CAPS OFF
+.       \}
+.       if !'\\$0'HD_TO_TOC' \{\
+\!.        if \\n[#TOC_TITLE_CAPS]=1 .CAPS OFF
+.       \}
+\!.     PAD_MARKER #
+\!.     EOL
+\!.     ST 102 L
+\!.     ST 103 R
+.       if \\n[#PRINT_STYLE]=2 \{\
+\!.        FAMILY  \\*[$TOC_PN_FAM]
+\!.        FT      \\*[$TOC_PN_FT]
+\!.        ps \\n[#TOC_PS]u
+.       \}
+\!.     TAB 102
+\!.     PRINT \\*[LEADER]
+\!.     TN
+.       if \\n[#PRINT_STYLE]=2 \{\
+\!.        ps \\*[$TOC_PN_SIZE_CHANGE]u
+.       \}
+\!.     PRINT \\n[#TOC_ENTRY_PN]
+\!.     TQ
+\!.     vpt
+\!. \}
+.   da
+.   ev
+.END
+.
+.ALIAS HD_TO_TOC    TO_TOC
+.ALIAS TITLE_TO_TOC TO_TOC
+\#
+\# Control macros for toc
+\# ----------------------
+\#
+\# TOC TITLE STYLE
+\# ---------------
+\# *Arguments:
+\#   FAMILY <family>
+\#   FONT   <font>
+\#   SIZE   <+|-n>
+\#   COLOR  <color>
+\#   CAPS
+\#   INDENT
+\# *Function:
+\#   Assigns complete style parameters to TITLEs (doc titles,
+\#   chapter titles, etc) in the TOC.
+\# *Notes:
+\#   TITLEs are not headings, therefore they require their own style
+\#   macro.  Otherwise, the same as TOC_ENTRY_STYLE.
+\#
+.MAC TOC_TITLE_STYLE END
+.    nr #ARG_NUM 0 1
+.    nr #ATTRIB \\n[#NUM_ARGS]
+.    while \\n+[#ARG_NUM]<=\\n[#ATTRIB] \{\
+.       if '\\$1'FAMILY' \{\
+.          shift
+.          ds $TOC_TITLE_FAM  \\$1
+.          shift
+.       \}
+.       if '\\$1'FONT' \{\
+.          shift
+.          ds $TOC_TITLE_FT   \\$1
+.          shift
+.       \}
+.       if '\\$1'SIZE' \{\
+.          shift
+.          ds $TOC_TITLE_SIZE \\$1
+.          shift
+.       \}
+.       if '\\$1'CAPS' \{\
+.          nr #TOC_TITLE_CAPS 1
+.          shift
+.       \}
+.       if '\\$1'NO_CAPS' \{\
+.          rr #TOC_TITLE_CAPS
+.          shift
+.       \}
+.       if '\\$1'SMALLCAPS' \{\
+.          nr #TOC_TITLE_SMALLCAPS 1
+.          shift
+.       \}
+.       if '\\$1'NO_SMALLCAPS' \{\
+.          rr #TOC_TITLE_SMALLCAPS
+.          shift
+.       \}
+.       if '\\$1'INDENT' \{\
+.          shift
+.          nr #TOC_TITLE_INDENT \\$1
+.          shift
+.       \}
+.    \}
+.END
+\#
+\# TOC HEADER STRING
+\# -----------------
+\# *Argument:
+\#   <string for "doc header" of first toc page>
+\# *Function:
+\#   Creates or modifies string $TOC_HEADER_STRING
+\# *Notes:
+\#   Default is "Contents".
+\#
+.MAC TOC_HEADER_STRING END
+.    ds $TOC_HEADER_STRING \\$1
+.END
+\#
+\# TOC HEADER CAPS and SMALLCAPS
+\# -----------------------------
+\# *Arguments:
+\#   <none> | <anything>
+\# *Function:
+\#   Turns capitalization or smallcaps style of the toc title string
+\#   on or off.
+\# *Notes:
+\#   Users may want the the toc title string to be in
+\#   caps, but the page header to be in lower case.  If the
+\#   argument to TOC_HEADER_STRING is in lower case and
+\#   TOC_HEADER_CAPS is turned on, this is exactly what will
+\#   happen.  Ditto for SMALLCAPS.
+\#
+.MAC TOC_HEADER_CAPS END
+.   ie '\\$1'' .nr #TOC_STRING_CAPS 1
+.   el .nr #TOC_STRING_CAPS 0
+.END
+.
+.MAC TOC_HEADER_SMALLCAPS END
+.   ie '\\$1'' .nr #TOC_STRING_SMALLCAPS 1
+.   el .nr #TOC_STRING_SMALLCAPS 0
+.END
+.
+\#
+\# TOC VERTICAL PLACEMENT
+\# ----------------------
+\# *Argument:
+\#   <distance from page top>
+\# *Function:
+\#   Creates register #TOC_HEADER_V_POS.
+\# *Notes:
+\#   Default is same as normal docheader position.
+\#
+.MAC TOC_HEADER_V_POS END
+.    nr #TOC_HEADER_V_POS (u;\\$1)
+.END
+\#
+\#
+\# TOC POINT SIZE
+\# --------------
+\# *Argument:
+\#   <base point size for toc pages>
+\# *Function:
+\#   Creates or modifies register #TOC_PS.
+\# *Notes:
+\#   This size control macro differs from other size control macros
+\#   in that it sets an absolute point size, not a relative one.
+\#   See notes for ENDNOTE_PT_SIZE for explanation.
+\#
+\#   No unit of measure required (points assumed).  Default is 12.5
+\#   for TYPESET.
+\#
+.MAC TOC_PT_SIZE END
+.    nr #TOC_PS (p;\\$1)
+.END
+\#
+\# TOC ENTRIES PAGE NUMBERS PADDING
+\# --------------------------------
+\# *Argument:
+\#   <number of placeholders for toc entries page numbers>
+\# *Function:
+\#   Creates or modifies register #TOC_PN_PADDING.
+\# *Notes:
+\#   "Placeholders" is the maximum number of digits in a page
+\#   number numeral.
+\#
+\#   Default is 3.
+\#
+.MAC TOC_PADDING END
+.    nr #TOC_PN_PADDING \\$1
+.END
+\#
+\# PAGINATE TOC
+\# ------------
+\# *Argument:
+\#   <none> | <anything>
+\# *Function:
+\#   Creates or removes register #PAGINATE_TOC.
+\# *Notes:
+\#   Default is to paginate toc.
+\#
+.MAC PAGINATE_TOC END
+.    ie '\\$1'' .nr #PAGINATE_TOC 1
+.    el .nr #PAGINATE_TOC 0
+.END
+\#
+.MAC TOC_FIRST_PAGENUM END
+.    nr #TOC_START_PAGENUM \\$1
+.END
+\#
+\# TOC PAGES PAGE-NUMBERING STYLE
+\# ------------------------------
+\# *Argument:
+\#   DIGIT | ROMAN | roman | ALPHA | alpha
+\# *Function:
+\#   Creates or modifies string $TOC_PN_STYLE
+\# *Notes:
+\#   Page numbering style for page numbers that appear in the
+\#   headers/footers of toc pages.  See notes for PAGENUM_STYLE.
+\#
+\#   Default is roman.
+\#
+.MAC TOC_PAGENUM_STYLE END
+.    ds $TOC_PN_STYLE \\$1
+.END
+\#
+\# TOC RECTO_VERSO SWITCH
+\# ----------------------
+\# *Argument:
+\#   <none> | <anything>
+\# *Function:
+\#   Creates or removes register #TOC_RV_SWITCH
+\# *Notes:
+\#   Allows switching of L/R margins if a doc is recto/verso and
+\#   the first toc page happens to fall the wrong way
+\#
+.MAC TOC_RV_SWITCH END
+.    ie '\\$1'' .nr #TOC_RV_SWITCH 1
+.    el .rr #TOC_RV_SWITCH
+.END
+\#
+\# TOC ENTRY SPACING
+\# -----------------
+\# *Arguments:
+\#   <none> | <anything>
+\# *Function:
+\#   Toggles whether a small amount of space is inserted between TOC
+\#   entries for greater legibility.
+\#
+.MAC SPACE_TOC_ITEMS END
+.    ie !'\\$1'' .rr #SPACE_TOC_ITEMS
+.    el .nr #SPACE_TOC_ITEMS 1
+.END
+\#
+\# NUMBERING OF TOC ENTRIES
+\# ------------------------
+\# *Arguments:
+\#   FULL | TRUNCATE | NONE
+\# *Function:
+\#   Determines how, or whether, to prepend heading numbers to TOC
+\#   entries.
+\# *Notes:
+\#   FULL means the complete numbering string (default).
+\#
+\#   TRUNCATE means prepend a single digit sufficient to identify
+\#   an entry's place in the numbering scheme with reference to the
+\#   level above it.  Thus, if a HEADING 1 is the second HEADING 1
+\#   and therefore numbered "2.", a HEADING 2 beneath it (in the TOC)
+\#   will have only "1." prepended to the entry; TOC indenting makes it
+\#   evident under which level the HEADING 2 belongs.
+\#
+\#   Note that TRUNCATE also removes chapter numbers, if
+\#   PREFIX_CHAPTER_NUMBER is on.
+\#
+.MAC TOC_ENTRY_NUMBERS END
+.    if '\\$1'TRUNCATE' .nr #TRUNC_TOC_HD_NUM 1
+.    if '\\$1'FULL'     .nr #TRUNC_TOC_HD_NUM 0
+.    if '\\$1'NONE'     .nr #TOC_NO_HD_NUM 1
+.END
+\#
+\# User defined TITLE entry string
+\#
+.MAC TOC_TITLE_ENTRY END
+.    nr #USER_SET_TITLE_ITEM 1
+.    ds $USER_SET_TITLE_ITEM \\$1
+.END
+\#
+\# APPEND AUTHOR(S) TO TOC DOC TITLE ENTRIES
+\# -----------------------------------------
+\# *Argument:
+\#   <none> | <name(s) of author(s) as they should appear in toc doc title entries>
+\# *Function:
+\#   Creates register #TOC_AUTHORS (to tell TOC to append authors
+\#   to toc doc title entries).  Optionally creates string
+\#   $TOC_AUTHORS.
+\# *Notes:
+\#   Normally, TOC does not append the author(s) to a toc doc title
+\#   entry.  This special macro instructs TOC to do so.
+\#
+\#   If user has multiple authors for each doc when collating,
+\#   TOC_APPENDS_AUTHOR "<string>" must be inserted somewhere between
+\#   COLLATE and START in each doc.  Otherwise, mom prints only the
+\#   first author given to AUTHOR.
+\#
+.MAC TOC_APPENDS_AUTHOR END
+.    nr #TOC_AUTHORS 1
+.    if !'\\$1'' .ds $TOC_AUTHORS \\$1
+.END
+\#
+\# TABLE OF CONTENTS
+\# -----------------
+\# *Arguments:
+\#   none
+\# *Function:
+\#   Takes care of the administrivia of setting up the TOC as if
+\#   it's a collated doc, then outputs the formatted TOC_ENTRIES
+\#   diversion.
+\#
+.MAC TOC END
+.    char \[leader] " .
+.    LEADER_CHARACTER \[leader]
+.    ie \\n[#COLLATED_DOC] \{\
+.       nr #TOC_INDENT_ADJ 1.5m
+.       if \\n[#PREFIX_CH_NUM] .nr #TOC_INDENT_ADJ \\n[#TOC_CH_NUM_INDENT]
+.    \}
+.    el \{\
+.       if !\\n[#DOC_TYPE]=2 \{\
+.          if r #LEVEL .nr #SKIP_ENTRY 1
+.          nr #TOC_INDENT_ADJ 0
+.       \}
+.    \}
+.    nr #TOC 1
+.    nr TOC.RELOCATE 0
+.    if \\n[#LINENUMBERS]=1 \{\
+.       NUMBER_LINES OFF
+.       nr #LINENUMBERS 2
+.    \}
+.    if !r #PAGINATE_TOC .PAGINATE_TOC
+.    nr #TOC_FIRST_PAGE 1
+.    if \\n[#FINIS] \{\
+.       if \\n[#FOOTERS_WERE_ON] \
+.          FOOTERS \" Have to turn FOOTERS on for next bit to work, so we can't skip this step
+.    \}
+.    if \\n[#FOOTERS_ON]=1 \{\
+.       if !'\\*[$HDRFTR_CENTER_OLD]'' .ds $HDRFTR_CENTER \\*[$HDRFTR_CENTER_OLD]
+.       ie \\n[#PAGINATE_TOC]=1 .PAGINATE
+.       el .PAGINATION OFF
+.    \}
+.    if \\n[#FOOTERS_WERE_ON] .FOOTERS OFF  \" But have to turn FOOTERS off again so they don't print when FINIS was called
+.    rr #COLUMNS
+.    COLLATE
+.    if \\n[#PRINT_STYLE]=1 \{\
+.       rr #IGNORE
+.       if \\n[#SINGLE_SPACE] .DOC_LEAD 24
+.       DOC_LEAD_ADJUST
+.       TRAPS
+.       nr #IGNORE 1
+.    \}
+.    if \\n[#PRINT_STYLE]=2 .vs \\n[#TOC_LEAD]u
+.    if \\n[#FINIS] \{\
+.       if \\n[#FOOTERS_WERE_ON] .FOOTERS  \" Finally, turn footers on if they were on
+.       rr #FOOTERS_WERE_ON
+.       if \\n[#PAGINATION_WAS_ON] \{\
+.          nr #PAGINATE 1
+.          rr #PAGINATION_WAS_ON
+.       \}
+.       rr #FINIS
+.    \}
+.    ie \\n[#PAGINATE_TOC]=1 .PAGINATE
+.    el .PAGINATION OFF
+.    ds $HDRFTR_CENTER \\*[$HDRFTR_CENTER_NEW]
+.    rm $HDRFTR_CENTER_OLD
+.    rm $HDRFTR_CENTER_NEW
+.    rr #COLLATED_DOC
+.    ie \\n[#TOC_HEADER_V_POS] \
+.      DOCHEADER OFF \\n[#TOC_HEADER_V_POS]u-\\n[#DOC_LEAD]u 
+.    el .DOCHEADER OFF \\n[#T_MARGIN]u-\\n[#DOC_LEAD]u
+.    if (\\n[#PRINT_STYLE]=1)&(\\n[#SINGLE_SPACE]=1) \{\
+.       DOCHEADER OFF \\n[#T_MARGIN]u-(\\n[#DOC_LEAD]u*2u)
+.    \}
+.    if !r #TOC_START_PAGENUM .nr #TOC_START_PAGENUM 1
+.       PAGENUMBER \\n[#TOC_START_PAGENUM]
+.    if \\n[#LINENUMBERS]=2 .nr #LINENUMBERS 3
+.    L_MARGIN   \\n[#DOC_L_MARGIN]u
+.    LL         \\n[#DOC_L_LENGTH]u
+.    HEADER_FAMILY \\*[$TOC_FAM]
+.    HEADER_CENTER "\\*[$TOC_HEADER_STRING]
+.    if \\n[#SLANT_ON] .nop \\*[SLANTX]
+.    PAGENUM_STYLE \\*[$TOC_PN_STYLE]
+.    PAGENUM_FAMILY \\*[$TOC_PN_FAM]
+.    START
+.    PDF_BOOKMARK 1 \\*[$TOC_HEADER_STRING]
+.    if \\n[#PRINT_STYLE]=1 .TYPEWRITER
+.    if \\n[#PRINT_STYLE]=2 \{\
+.       FAMILY  \\*[$TOC_HEADER_FAM]
+.       FT      \\*[$TOC_HEADER_FT]
+.       ps \\n[#TOC_PS]u\\*[$TOC_HEADER_SIZE_CHANGE]
+.       if \\n[#TOC_HEADER_COLOR]=1 \{\
+.          COLOR \\*[$TOC_HEADER_COLOR]
+.          EOL
+.       \}
+.    \}
+.    QUAD \\*[$TOC_HEADER_QUAD]
+.    if \\n[#TOC_HEADER_COLOR]=1 .gcolor \\*[$TOC_HEADER_COLOR]
+.    if \\n[#TOC_STRING_CAPS] .CAPS
+.    if \\n[#TOC_STRING_SMALLCAPS] .SMALLCAPS
+.    if \\n[#PRINT_STYLE]=1 \{\
+.       UNDERSCORE 3p "\\*[$TOC_HEADER_STRING]"
+.    \}
+.    if \\n[#PRINT_STYLE]=2 \{\
+.       ie \\n[#TOC_HEADER_UNDERLINE] \{\
+.          ds $TITLE_TYPE TOC_HEADER
+.          ie \\n[#TOC_HEADER_UNDERLINE]=2 \
+.             UNDERSCORE2 \\*[$TOC_UNDERLINE_GAP] \\*[$TOC_RULE_GAP] "\\*[$TOC_HEADER_STRING]"
+.          el .UNDERSCORE "\\*[$TOC_HEADER_STRING]"
+.       \}
+.       el .PRINT \\*[$TOC_HEADER_STRING]
+.    \}
+.    SMALLCAPS OFF
+.    CAPS OFF
+.    if \\n[#TOC_HEADER_COLOR]=1 .gcolor
+.    sp
+.    SHIM
+.    nf
+.    TOC_ENTRIES
+.    rr #TOC
+.    if \\n[#LINENUMBERS]=3 \{\
+.       NUMBER_LINES RESUME
+.       nr #LINENUMBERS 1
+.       nn 1
+.    \}
+.    rr #TOC
+.    pdfsync
+.END
+\#
+\# ====================================================================
+\#
+\# +++COLUMNS+++
+\#
+\# COLUMNS
+\# -------
+\# *Arguments:
+\#   <number of columns>  <width of gutters>
+\# *Function:
+\#   Creates registers associated with setting docs in columns.
+\#   Calculates column line lengths and offsets
+\# *Notes:
+\#   COLUMNS, if used, s/b the last macro invoked before START.
+\#
+.MAC COLUMNS END
+.    if \\n[#IGNORE_COLUMNS]=1 .return
+.    nr #COLUMNS 1
+.    nr #NUM_COLS \\$1
+.    nr #GUTTER (\\$2)
+.    nr #COL_L_LENGTH \\n[#L_LENGTH]-(\\n[#GUTTER]*(\\n[#NUM_COLS]-1))/\\n[#NUM_COLS]
+.    nr #COL_TOTAL 0 \\n[#COL_L_LENGTH]+\\n[#GUTTER]
+.    nr #COL_NUM 0 1
+.    while !\\n[#COL_NUM]=\\n[#NUM_COLS] \{\
+.       nr #COL_\\n+[#COL_NUM]_L_MARGIN \\n[#L_MARGIN]+\\n[#COL_TOTAL]
+.       nr #COL_TOTAL \\n+[#COL_TOTAL]
+.    \}
+.    if \\n[#NUM_COLS]=1 \
+.       if !\\n[#COLLATE]=1 .MN_INIT
+.    rr #COL_TOTAL
+.    rr #COL_NUM
+.END
+\#
+\# MARK COL V-POSITION AFTER DOCHEADER
+\# -----------------------------------
+\# *Arguments:
+\#   none
+\# *Function:
+\#   Sets 1st page dc register.
+\# *Notes:
+\#   Only required if manual spacing, positive or negative, precedes
+\#   start of columns on first page of doc.
+\#
+.MAC COL_MARK END
+.    mk dc
+.END
+\#
+\# NEXT COLUMN
+\# -----------
+\# *Arguments:
+\#   <none>
+\# *Function:
+\#   Breaks current column and moves to next column.
+\#   If current column is the last on the page, breaks
+\#   to a new page.
+\#
+.MAC COL_NEXT END
+.    if \\n[#COLUMNS] \{\
+.       nr #COL_NEXT 1
+.       ie '\\$0'COL_NEXT' .br
+.       el \{\
+.          brp
+.          RLD 1v
+.       \}
+.       ie \\n[#COL_NUM]=\\n[#NUM_COLS] .bp
+.       el .FOOTER
+.    \}
+.END
+\#
+\# ====================================================================
+\#
+\# +++LISTS+++
+\#
+\# LIST
+\# ----
+\# *Arguments:
+\#   [ BULLET | DASH | DIGIT | alpha | ALPHA | roman | ROMAN | USER ] \
+\#   [ <separator> | NONE ] [ <prefix> ] [ <anything> ]
+\# *Function:
+\#   Stores indent information in effect prior to invocation and
+\#   initializes a list with the supplied enumerator (and separator).
+\# *Notes:
+\#   Default enumerator is a bullet.
+\#
+\#   Enumerator *must* be supplied for every list that's to the
+\#   right of another list, every time, unless the default bullet is
+\#   desired.
+\#
+\#   <anything> moves back one list level intuitively, or exits lists
+\#   completely if the level in which it's invoked is the first.
+\#
+.MAC LIST END
+.    ds $1ST_LETTER \\$1
+.    if !'\\*[$1ST_LETTER]'' .substring $1ST_LETTER 0 0
+.    if '\\*[$1ST_LETTER]'r' .ds $1ST_LETTER R
+.    ie '\\*[$1ST_LETTER]'R' \{\
+.       ds $LAST_CHAR \\$1
+.       substring $LAST_CHAR -1
+.       if !\B'\\*[$LAST_CHAR]' \{\
+.          if !'\\$1'ROMAN' \{\
+.             LIST OFF
+.             return
+.          \}
+.          if !'\\$1'roman' \{\
+.             LIST OFF
+.             return
+.          \}
+.          tm1 "[mom]: You must append a number to the \\$1 argument to \\$0.
+.          tm1 "       The number should be the total number of items in this list.
+.          tm1 "       See the documentation.
+.          ab   [mom]: Aborting '\\n[.F]' at \\$0, line \\n[.c].
+.       \}
+.       ds $ROMAN_WIDTH \\$1
+.          substring $ROMAN_WIDTH 1
+.       while !\B'\\*[$ROMAN_WIDTH]' \{\
+.          substring $ROMAN_WIDTH 1
+.       \}
+.       length #ROMAN_LENGTH \\*[$ROMAN_WIDTH]
+.       ds $LIST_ARG_1 \\$1
+.       substring $LIST_ARG_1 0 -(\\n[#ROMAN_LENGTH]+1)
+.    \}
+.    el .ds $LIST_ARG_1 \\$1
+.    if !r#DEPTH \{\
+.       nr #STORED_HL_INDENT \\n[#HL_INDENT]
+.       nr #STORED_T_INDENT  \\n[#T_INDENT]
+.       nr #CURRENT_L_LENGTH \\n[.l]
+.       nr #DEPTH 0 1
+.       if \\n[#INDENT_ACTIVE]=1 \{\
+.          if \\n[#INDENT_LEFT_ACTIVE]=1 \{\
+.             nr #STORED_L_INDENT \\n[#L_INDENT]
+.             nr #RESTORE_PREV_INDENT 1
+.          \}
+.          if \\n[#INDENT_BOTH_ACTIVE]=1 \{\
+.             nr #STORED_BL_INDENT \\n[#BL_INDENT]
+.             nr #STORED_BR_INDENT \\n[#BR_INDENT]
+.             IBX
+.             nr #ORIG_L_LENGTH \\n[.l]
+.             IB
+.             nr #RESTORE_PREV_INDENT 2
+.          \}
+.          if \\n[#INDENT_RIGHT_ACTIVE]=1 \{\
+.             nr #STORED_R_INDENT \\n[#R_INDENT]
+.             IRX
+.             nr #ORIG_L_LENGTH \\n[.l]
+.             IR
+.             nr #RESTORE_PREV_INDENT 3
+.             if \\n[#INDENT_LEFT_ACTIVE]=1 .nr #RESTORE_PREV_INDENT 4
+.          \}
+.       \}
+.    \}
+.    if \\n[#NUM_ARGS]=0 \{\
+.       nr #ARGS_TO_LIST 1 \" So default behaves as if LIST BULLET
+.       ds $ENUMERATOR\\n+[#DEPTH] \[bu]
+.       ds $ENUMERATOR_TYPE\\n[#DEPTH] other
+.       ds $SEPARATOR
+.    \}
+.    if \\n[#NUM_ARGS]>0 \{\
+.       rr #ARGS_TO_LIST \" Clear this before processing arg 1.
+.       if '\\*[$LIST_ARG_1]'DASH' \{\
+.          nr #ARGS_TO_LIST 1
+.          ds $ENUMERATOR\\n+[#DEPTH] \[en]
+.          ds $ENUMERATOR_TYPE\\n[#DEPTH] other
+.          ds $SEPARATOR\\n[#DEPTH]
+.       \}
+.       if '\\*[$LIST_ARG_1]'BULLET' \{\
+.          nr #ARGS_TO_LIST 1
+.          ds $ENUMERATOR\\n+[#DEPTH] \[bu]
+.          ds $ENUMERATOR_TYPE\\n[#DEPTH] other
+.          ds $SEPARATOR\\n[#DEPTH]
+.       \}
+.       if '\\*[$LIST_ARG_1]'DIGIT' \{\
+.          nr #ARGS_TO_LIST 1
+.          nr #ENUMERATOR\\n+[#DEPTH] 0 1
+.          ds $ENUMERATOR_TYPE\\n[#DEPTH] register
+.          ds $SEPARATOR\\n[#DEPTH] .
+.          ds $PREFIX\\n[#DEPTH]
+.          if \\n[#NUM_ARGS]>=2 \{\
+.             ie '\\$2'NONE' .ds $SEPARATOR\\n[#DEPTH]
+.             el .ds $SEPARATOR\\n[#DEPTH] \\$2
+.             if \\n[#NUM_ARGS]=3 .ds $PREFIX\\n[#DEPTH] \\$3
+.          \}
+.       \}
+.       if '\\*[$LIST_ARG_1]'alpha' \{\
+.          nr #ARGS_TO_LIST 1
+.          nr #ENUMERATOR\\n+[#DEPTH] 0 1
+.          af #ENUMERATOR\\n[#DEPTH] a
+.          ds $ENUMERATOR_TYPE\\n[#DEPTH] register
+.          ds $SEPARATOR\\n[#DEPTH] )
+.          ds $PREFIX\\n[#DEPTH]
+.          if \\n[#NUM_ARGS]>=2 \{\
+.             ie '\\$2'NONE' .ds $SEPARATOR\\n[#DEPTH]
+.             el .ds $SEPARATOR\\n[#DEPTH] \\$2
+.             if \\n[#NUM_ARGS]=3 .ds $PREFIX\\n[#DEPTH] \\$3
+.          \}
+.       \}
+.       if '\\*[$LIST_ARG_1]'ALPHA' \{\
+.          nr #ARGS_TO_LIST 1
+.          nr #ENUMERATOR\\n+[#DEPTH] 0 1
+.          af #ENUMERATOR\\n[#DEPTH] A
+.          ds $ENUMERATOR_TYPE\\n[#DEPTH] register
+.          ds $SEPARATOR\\n[#DEPTH] )
+.          ds $PREFIX\\n[#DEPTH]
+.          if \\n[#NUM_ARGS]>=2 \{\
+.             ie '\\$2'NONE' .ds $SEPARATOR\\n[#DEPTH]
+.             el .ds $SEPARATOR\\n[#DEPTH] \\$2
+.             if \\n[#NUM_ARGS]=3 \{\
+.                ds $PREFIX\\n[#DEPTH] \\$3
+.             \}
+.          \}
+.       \}
+.       if '\\*[$1ST_LETTER]'R' \{\
+.          nr #ARGS_TO_LIST 1
+.          nr #ENUMERATOR\\n+[#DEPTH] 0 1
+.          if '\\*[$LIST_ARG_1]'roman' .af #ENUMERATOR\\n[#DEPTH] i
+.          if '\\*[$LIST_ARG_1]'ROMAN' .af #ENUMERATOR\\n[#DEPTH] I
+.          ds $ENUMERATOR_TYPE\\n[#DEPTH] roman
+.          ds $SEPARATOR\\n[#DEPTH] )
+.          ds $PREFIX\\n[#DEPTH]
+.          if \\n[#NUM_ARGS]>=2 \{\
+.             ie '\\$2'NONE' .ds $SEPARATOR\\n[#DEPTH]
+.             el .ds $SEPARATOR\\n[#DEPTH] \\$2
+.             if \\n[#NUM_ARGS]=3 .ds $PREFIX\\n[#DEPTH] \\$3
+.          \}
+.       \}
+.       if '\\*[$LIST_ARG_1]'USER' \{\
+.          nr #ARGS_TO_LIST 1
+.          ds $ENUMERATOR\\n+[#DEPTH] \\$2
+.          ds $ENUMERATOR_TYPE\\n[#DEPTH] other
+.          ds $SEPARATOR\\n[#DEPTH]
+.          ds $PREFIX\\n[#DEPTH]
+.       \}
+.       if \\n[#NUM_ARGS]=1 \{\
+.          if !r#ARGS_TO_LIST \{\
+.             ie \\n[#DEPTH]=1 \{\
+.                ie \\n[#NEXT_DEPTH_BACK]=0 \{\
+.                   SET_LIST_INDENT
+.                   if \\n[#QUIT]=1 \{\
+.                      QUIT_LISTS
+.                      return
+.                   \}
+.                   return
+.                \}
+.                el \{\
+.                   QUIT_LISTS
+.                   return
+.                \}
+.             \}
+.             el \{\
+.                SET_LIST_INDENT
+.                return
+.             \}
+.          \}
+.       \}
+.    \}
+.    nr #TOTAL_LISTS \\n[#DEPTH]
+.    if '\\*[$ENUMERATOR_TYPE\\n[#DEPTH]]'register' \{\
+.       nr #LIST_INDENT\\n[#DEPTH] \
+\w'\\*[$PREFIX\\n[#DEPTH]]m\\*[$SEPARATOR\\n[#DEPTH]]\ '
+.       if '\\*[$LIST_ARG_1]'ALPHA' .nr #LIST_INDENT\\n[#DEPTH] \
+\w'\\*[$PREFIX\\n[#DEPTH]]M\\*[$SEPARATOR\\n[#DEPTH]]\ '
+.    \}
+.    if '\\*[$ENUMERATOR_TYPE\\n[#DEPTH]]'roman' \
+.       GET_ROMAN_INDENT
+.    if '\\*[$ENUMERATOR_TYPE\\n[#DEPTH]]'other' \
+.       nr #LIST_INDENT\\n[#DEPTH] \w'\\*[$ENUMERATOR\\n[#DEPTH]]\0'
+.    ll \\n[#CURRENT_L_LENGTH]u
+.    ie \\n[#DEPTH]=1 \{\
+.       ie \\n[#INDENT_ACTIVE]=1 \{\
+.          if \\n[#INDENT_LEFT_ACTIVE]=1 \{\
+.             nr #L_INDENT \\n[#L_INDENT]+\\n[#LIST_INDENT\\n[#DEPTH]]
+.             nr #HL_INDENT\\n[#DEPTH] \\n[#LIST_INDENT\\n[#DEPTH]]
+.             nr #LIST_INDENT\\n[#DEPTH] \\n[#L_INDENT]
+.          \}
+.          if \\n[#INDENT_BOTH_ACTIVE]=1 \{\
+.             nr #L_INDENT \\n[#BL_INDENT]+\\n[#LIST_INDENT\\n[#DEPTH]]
+.             nr #HL_INDENT\\n[#DEPTH] \\n[#LIST_INDENT\\n[#DEPTH]]
+.             nr #LIST_INDENT\\n[#DEPTH] \\n[#L_INDENT]
+.          \}
+.          if \\n[#INDENT_RIGHT_ACTIVE]=1 \{\
+.             ie \\n[#INDENT_LEFT_ACTIVE]=1 \{\
+.             \" Don't do anything; we already have a left indent
+.             \}
+.             el \{\
+.                nr #L_INDENT +\\n[#LIST_INDENT\\n[#DEPTH]]
+.                nr #HL_INDENT\\n[#DEPTH] \\n[#LIST_INDENT\\n[#DEPTH]]
+.             \}
+.          \}
+.       \}
+.       el \{\
+.          nr #L_INDENT +\\n[#LIST_INDENT\\n[#DEPTH]]
+.          nr #HL_INDENT\\n[#DEPTH] \\n[#LIST_INDENT\\n[#DEPTH]]
+.       \}
+.    \}
+.    el \{\
+.       nr #L_INDENT +\\n[#LIST_INDENT\\n[#DEPTH]]
+.       nr #HL_INDENT\\n[#DEPTH] \\n[#LIST_INDENT\\n[#DEPTH]]
+.    \}
+.END
+\#
+\# ITEM
+\# ----
+\# *Arguments:
+\#   none
+\# *Function:
+\#   Prints enumerator for a given list depth and prepares mom to
+\#   receive the text of an item.
+\#
+.MAC ITEM END
+.    if !r#DEPTH .return
+.    if \\n[#LINENUMBERS]=1 \{\
+.       NUMBER_LINES OFF
+.       nr #LINENUMBERS 2
+.    \}
+.    if \\n[#KERN]=1 \{\
+.       nr #KERN_WAS_ON 1
+.       KERN OFF
+.    \}
+.    rr #IN_ITEM
+.    IL
+.    nr #IN_ITEM 1
+.    ll \\n[#CURRENT_L_LENGTH]u \" Set ll again because IL turns IB off.
+.    TRAP OFF
+.    HI \\n[#HL_INDENT\\n[#DEPTH]]u
+.    if '\\*[$SEPARATOR\\n[#DEPTH]]')' .nr #SEP_TYPE 1
+.    if '\\*[$SEPARATOR\\n[#DEPTH]]']' .nr #SEP_TYPE 1
+.    if '\\*[$SEPARATOR\\n[#DEPTH]]'}' .nr #SEP_TYPE 1
+.    ie \\n[#IN_BIB_LIST]=1 \{\
+.       ie \\n[#ENUMERATOR\\n[#DEPTH]]<9 \{\
+.          ie \\n[#SEP_TYPE]=1 .PRINT \
+\v'-.085m'\\*[$PREFIX\\n[#DEPTH]]\v'.085m'\
+\\n+[#ENUMERATOR\\n[#DEPTH]]\v'-.085m'\\*[$SEPARATOR\\n[#DEPTH]]\v'.085m'
+.          el .PRINT \
+\\*[$PREFIX\\n[#DEPTH]]\\n+[#ENUMERATOR\\n[#DEPTH]]\\*[$SEPARATOR\\n[#DEPTH]]
+.       \}
+.       el \{\
+.          ie \\n[#SEP_TYPE]=1 .PRINT \
+\h'-\w'\0'u'\v'-.085m'\\*[$PREFIX\\n[#DEPTH]]\v'.085m'\
+\\n+[#ENUMERATOR\\n[#DEPTH]]\v'-.085m'\\*[$SEPARATOR\\n[#DEPTH]]\v'.085m'
+.          el .PRINT \
+\h'-\w'\0'u'\
+\\*[$PREFIX\\n[#DEPTH]]\\n+[#ENUMERATOR\\n[#DEPTH]]\\*[$SEPARATOR\\n[#DEPTH]]
+.       \}
+.    \}
+.    el \{\
+.       ie '\\*[$ENUMERATOR_TYPE\\n[#DEPTH]]'register' \{\
+.\" DIGIT
+.          ie '\\g[#ENUMERATOR\\n[#DEPTH]]'0' \{\
+.             ie \\n[#PAD_LIST_DIGITS\\n[#DEPTH]]=1 \{\
+.                ie \\n[#ENUMERATOR\\n[#DEPTH]]<9 \{\
+.                   ie \\n[#SEP_TYPE]=1 .PRINT \
+\0\v'-.085m'\\*[$PREFIX\\n[#DEPTH]]\v'.085m'\\n+[#ENUMERATOR\\n[#DEPTH]]\
+\v'-.085m'\\*[$SEPARATOR\\n[#DEPTH]]\v'.085m'
+.                   el .PRINT \
+\0\\*[$PREFIX\\n[#DEPTH]]\\n+[#ENUMERATOR\\n[#DEPTH]]\\*[$SEPARATOR\\n[#DEPTH]]
+.                \}
+.                el \{\
+.                   ie \\n[#SEP_TYPE]=1 .PRINT \
+\v'-.085m'\\*[$PREFIX\\n[#DEPTH]]\v'.085m'\\n+[#ENUMERATOR\\n[#DEPTH]]\
+\v'-.085m'\\*[$SEPARATOR\\n[#DEPTH]]\v'.085m'
+.                   el .PRINT \
+\\*[$PREFIX\\n[#DEPTH]]\\n+[#ENUMERATOR\\n[#DEPTH]]\\*[$SEPARATOR\\n[#DEPTH]]
+.                \}
+.             \}
+.             el \{\
+.                ie \\n[#SEP_TYPE]=1 .PRINT \
+\v'-.085m'\\*[$PREFIX\\n[#DEPTH]]\v'.085m'\\n+[#ENUMERATOR\\n[#DEPTH]]\
+\v'-.085m'\\*[$SEPARATOR\\n[#DEPTH]]\v'.085m'
+.                el .PRINT \
+\\*[$PREFIX\\n[#DEPTH]]\\n+[#ENUMERATOR\\n[#DEPTH]]\\*[$SEPARATOR\\n[#DEPTH]]
+.             \}
+.          \}
+.          el \{\
+.\" ALPHA
+.             ie '\\g[#ENUMERATOR\\n[#DEPTH]]'A' \{\
+.                ie \\n[#SEP_TYPE]=1 .PRINT \
+\v'-.085m'\\*[$PREFIX\\n[#DEPTH]]\v'.085m'\\n+[#ENUMERATOR\\n[#DEPTH]]\
+\v'-.085m'\\*[$SEPARATOR\\n[#DEPTH]]\v'.085m'
+.                el .PRINT \
+\\*[$PREFIX\\n[#DEPTH]]\\n+[#ENUMERATOR\\n[#DEPTH]]\\*[$SEPARATOR\\n[#DEPTH]]
+.             \}
+.\" alpha
+.             el .PRINT \
+\\*[$PREFIX\\n[#DEPTH]]\\n+[#ENUMERATOR\\n[#DEPTH]]\\*[$SEPARATOR\\n[#DEPTH]]
+.          \}
+.       \}
+.       if '\\*[$ENUMERATOR_TYPE\\n[#DEPTH]]'roman' \{\
+.          ie \\n[#PAD_LIST_DIGITS\\n[#DEPTH]]=1 \{\
+.\" ROMAN I, padded
+.             ie '\\g[#ENUMERATOR\\n[#DEPTH]]'I' \{\
+.                ie \\n[#SEP_TYPE]=1 .PRINT \
+\h'\\n[#HL_INDENT\\n[#DEPTH]]u'\h'-\w'\\*[$PREFIX\\n[#DEPTH]]\
+\\n+[#ENUMERATOR\\n[#DEPTH]]\\*[$SEPARATOR\\n[#DEPTH]]\0'u'\
+\v'-.085m'\\*[$PREFIX\\n[#DEPTH]]\v'.085m'\\n[#ENUMERATOR\\n[#DEPTH]]\
+\v'-.085m'\\*[$SEPARATOR\\n[#DEPTH]]\v'.085m'
+.                el .PRINT \
+\h'\\n[#HL_INDENT\\n[#DEPTH]]u'\h'-\w'\\*[$PREFIX\\n[#DEPTH]]\
+\\n+[#ENUMERATOR\\n[#DEPTH]]\\*[$SEPARATOR\\n[#DEPTH]]\
+\0'u'\\*[$PREFIX\\n[#DEPTH]]\\n[#ENUMERATOR\\n[#DEPTH]]\
+\\*[$SEPARATOR\\n[#DEPTH]]
+.             \}
+.\" roman i, padded
+.             el .PRINT \
+\h'\\n[#HL_INDENT\\n[#DEPTH]]u'\h'-\w'\\*[$PREFIX\\n[#DEPTH]]\
+\\n+[#ENUMERATOR\\n[#DEPTH]]\\*[$SEPARATOR\\n[#DEPTH]]\0'u'\
+\\*[$PREFIX\\n[#DEPTH]]\\n[#ENUMERATOR\\n[#DEPTH]]\\*[$SEPARATOR\\n[#DEPTH]]
+.          \}
+.\" No pad
+.          el \{\
+.\" ROMAN I, no pad
+.             ie '\\g[#ENUMERATOR\\n[#DEPTH]]'I' \{\
+.                ie \\n[#SEP_TYPE]=1 .PRINT \
+\v'-.085m'\\*[$PREFIX\\n[#DEPTH]]\v'.085m'\\n+[#ENUMERATOR\\n[#DEPTH]]\
+\v'-.085m'\\*[$SEPARATOR\\n[#DEPTH]]\v'.085m'
+.                el .PRINT \
+\\*[$PREFIX\\n[#DEPTH]]\\n+[#ENUMERATOR\\n[#DEPTH]]\\*[$SEPARATOR\\n[#DEPTH]]
+.             \}
+.\" roman i, no pad
+.             el .PRINT \
+\\*[$PREFIX\\n[#DEPTH]]\\n+[#ENUMERATOR\\n[#DEPTH]]\\*[$SEPARATOR\\n[#DEPTH]]
+.          \}
+.       \}
+.       if '\\*[$ENUMERATOR_TYPE\\n[#DEPTH]]'other' \
+.          PRINT \\*[$ENUMERATOR\\n[#DEPTH]]\\*[$SEPARATOR\\n[#DEPTH]]
+.    \}
+.    rr #SEP_TYPE
+.    EOL
+.    if \\n[#REF]=1 \{\
+.       IL +\\n[#REF_BIB_INDENT]u
+.       ti \\n[#L_INDENT]u-\\n[#REF_BIB_INDENT]u
+.    \}
+.    TRAP
+.    if \\n[#KERN_WAS_ON]=1 \{\
+.       KERN
+.       rr #KERN_WAS_ON
+.    \}
+.    if \\n[#LINENUMBERS]=2 \{\
+.       NUMBER_LINES RESUME
+.       nr #LINENUMBERS 1
+.    \}
+.END
+\#
+\# A utility macro that determines the space to reserve for
+\# roman numeral enumerated lists.  Limit is 20 roman numerals
+\# per list.  If this isn't enough, the user can add to the
+\# macro.
+\#
+.MAC GET_ROMAN_INDENT END
+.    if '\\*[$LIST_ARG_1]'roman' \{\
+.       if '\\*[$ROMAN_WIDTH]'1' \{\
+.          ds $ROMAN_WIDTH\\n[#DEPTH] 1
+.          nr #LIST_INDENT\\n[#DEPTH] \
+\w'\\*[$PREFIX\\n[#DEPTH]]i\\*[$SEPARATOR\\n[#DEPTH]]\0'
+.       \}
+.       if '\\*[$ROMAN_WIDTH]'2' \{\
+.          ds $ROMAN_WIDTH\\n[#DEPTH] 2
+.          nr #LIST_INDENT\\n[#DEPTH] \
+\w'\\*[$PREFIX\\n[#DEPTH]]ii\\*[$SEPARATOR\\n[#DEPTH]]\0'
+.       \}
+.       if '\\*[$ROMAN_WIDTH]'3' \{\
+.          ds $ROMAN_WIDTH\\n[#DEPTH] 3
+.          nr #LIST_INDENT\\n[#DEPTH] \
+\w'\\*[$PREFIX\\n[#DEPTH]]iii\\*[$SEPARATOR\\n[#DEPTH]]\0'
+.       \}
+.       if '\\*[$ROMAN_WIDTH]'4' \{\
+.          ds $ROMAN_WIDTH\\n[#DEPTH] 4
+.          nr #LIST_INDENT\\n[#DEPTH] \
+\w'\\*[$PREFIX\\n[#DEPTH]]iii\\*[$SEPARATOR\\n[#DEPTH]]\0'
+.       \}
+.       if '\\*[$ROMAN_WIDTH]'5' \{\
+.          ds $ROMAN_WIDTH\\n[#DEPTH] 5
+.          nr #LIST_INDENT\\n[#DEPTH] \
+\w'\\*[$PREFIX\\n[#DEPTH]]iii\\*[$SEPARATOR\\n[#DEPTH]]\0'
+.       \}
+.       if '\\*[$ROMAN_WIDTH]'6' \{\
+.          ds $ROMAN_WIDTH\\n[#DEPTH] 6
+.          nr #LIST_INDENT\\n[#DEPTH] \
+\w'\\*[$PREFIX\\n[#DEPTH]]iii\\*[$SEPARATOR\\n[#DEPTH]]\0'
+.       \}
+.       if '\\*[$ROMAN_WIDTH]'7' \{\
+.          ds $ROMAN_WIDTH\\n[#DEPTH] 7
+.          nr #LIST_INDENT\\n[#DEPTH] \
+\w'\\*[$PREFIX\\n[#DEPTH]]vii\\*[$SEPARATOR\\n[#DEPTH]]\0'
+.       \}
+.       if '\\*[$ROMAN_WIDTH]'8' \{\
+.          ds $ROMAN_WIDTH\\n[#DEPTH] 8
+.          nr #LIST_INDENT\\n[#DEPTH] \
+\w'\\*[$PREFIX\\n[#DEPTH]]viii\\*[$SEPARATOR\\n[#DEPTH]]\0'
+.       \}
+.       if '\\*[$ROMAN_WIDTH]'9' \{\
+.          ds $ROMAN_WIDTH\\n[#DEPTH] 9
+.          nr #LIST_INDENT\\n[#DEPTH] \
+\w'\\*[$PREFIX\\n[#DEPTH]]viii\\*[$SEPARATOR\\n[#DEPTH]]\0'
+.       \}
+.       if '\\*[$ROMAN_WIDTH]'10' \{\
+.          ds $ROMAN_WIDTH\\n[#DEPTH] 10
+.          nr #LIST_INDENT\\n[#DEPTH] \
+\w'\\*[$PREFIX\\n[#DEPTH]]viii\\*[$SEPARATOR\\n[#DEPTH]]\0'
+.       \}
+.       if '\\*[$ROMAN_WIDTH]'11' \{\
+.          ds $ROMAN_WIDTH\\n[#DEPTH] 11
+.          nr #LIST_INDENT\\n[#DEPTH] \
+\w'\\*[$PREFIX\\n[#DEPTH]]viii\\*[$SEPARATOR\\n[#DEPTH]]\0'
+.       \}
+.       if '\\*[$ROMAN_WIDTH]'12' \{\
+.          ds $ROMAN_WIDTH\\n[#DEPTH] 12
+.          nr #LIST_INDENT\\n[#DEPTH] \
+\w'\\*[$PREFIX\\n[#DEPTH]]viii\\*[$SEPARATOR\\n[#DEPTH]]\0'
+.       \}
+.       if '\\*[$ROMAN_WIDTH]'13' \{\
+.          ds $ROMAN_WIDTH\\n[#DEPTH] 13
+.          nr #LIST_INDENT\\n[#DEPTH] \
+\w'\\*[$PREFIX\\n[#DEPTH]]xiii\\*[$SEPARATOR\\n[#DEPTH]]\0'
+.       \}
+.       if '\\*[$ROMAN_WIDTH]'14' \{\
+.          ds $ROMAN_WIDTH\\n[#DEPTH] 14
+.          nr #LIST_INDENT\\n[#DEPTH] \
+\w'\\*[$PREFIX\\n[#DEPTH]]xiii\\*[$SEPARATOR\\n[#DEPTH]]\0'
+.       \}
+.       if '\\*[$ROMAN_WIDTH]'15' \{\
+.          ds $ROMAN_WIDTH\\n[#DEPTH] 15
+.          nr #LIST_INDENT\\n[#DEPTH] \
+\w'\\*[$PREFIX\\n[#DEPTH]]xiii\\*[$SEPARATOR\\n[#DEPTH]]\0'
+.       \}
+.       if '\\*[$ROMAN_WIDTH]'16' \{\
+.          ds $ROMAN_WIDTH\\n[#DEPTH] 16
+.          nr #LIST_INDENT\\n[#DEPTH] \
+\w'\\*[$PREFIX\\n[#DEPTH]]xiii\\*[$SEPARATOR\\n[#DEPTH]]\0'
+.       \}
+.       if '\\*[$ROMAN_WIDTH]'17' \{\
+.          ds $ROMAN_WIDTH\\n[#DEPTH] 17
+.          nr #LIST_INDENT\\n[#DEPTH] \
+\w'\\*[$PREFIX\\n[#DEPTH]]xvii\\*[$SEPARATOR\\n[#DEPTH]]\0'
+.       \}
+.       if '\\*[$ROMAN_WIDTH]'18' \{\
+.          ds $ROMAN_WIDTH\\n[#DEPTH] 18
+.          nr #LIST_INDENT\\n[#DEPTH] \
+\w'\\*[$PREFIX\\n[#DEPTH]]xviii\\*[$SEPARATOR\\n[#DEPTH]]\0'
+.       \}
+.       if '\\*[$ROMAN_WIDTH]'19' \{\
+.          ds $ROMAN_WIDTH\\n[#DEPTH] 19
+.          nr #LIST_INDENT\\n[#DEPTH] \
+\w'\\*[$PREFIX\\n[#DEPTH]]xviii\\*[$SEPARATOR\\n[#DEPTH]]\0'
+.       \}
+.       if '\\*[$ROMAN_WIDTH]'20' \{\
+.          ds $ROMAN_WIDTH\\n[#DEPTH] 20
+.          nr #LIST_INDENT\\n[#DEPTH] \
+\w'\\*[$PREFIX\\n[#DEPTH]]xviii\\*[$SEPARATOR\\n[#DEPTH]]\0'
+.       \}
+.    \}
+.    if '\\*[$LIST_ARG_1]'ROMAN' \{\
+.       if '\\*[$ROMAN_WIDTH]'1' \{\
+.          ds $ROMAN_WIDTH\\n[#DEPTH] 1
+.          nr #LIST_INDENT\\n[#DEPTH] \
+\w'\\*[$PREFIX\\n[#DEPTH]]I\\*[$SEPARATOR\\n[#DEPTH]]\0'
+.       \}
+.       if '\\*[$ROMAN_WIDTH]'2' \{\
+.          ds $ROMAN_WIDTH\\n[#DEPTH] 2
+.          nr #LIST_INDENT\\n[#DEPTH] \
+\w'\\*[$PREFIX\\n[#DEPTH]]II\\*[$SEPARATOR\\n[#DEPTH]]\0'
+.       \}
+.       if '\\*[$ROMAN_WIDTH]'3' \{\
+.          ds $ROMAN_WIDTH\\n[#DEPTH] 3
+.          nr #LIST_INDENT\\n[#DEPTH] \
+\w'\\*[$PREFIX\\n[#DEPTH]]III\\*[$SEPARATOR\\n[#DEPTH]]\0'
+.       \}
+.       if '\\*[$ROMAN_WIDTH]'4' \{\
+.          ds $ROMAN_WIDTH\\n[#DEPTH] 4
+.          nr #LIST_INDENT\\n[#DEPTH] \
+\w'\\*[$PREFIX\\n[#DEPTH]]IV\\*[$SEPARATOR\\n[#DEPTH]]\0'
+.       \}
+.       if '\\*[$ROMAN_WIDTH]'5' \{\
+.          ds $ROMAN_WIDTH\\n[#DEPTH] 5
+.          nr #LIST_INDENT\\n[#DEPTH] \
+\w'\\*[$PREFIX\\n[#DEPTH]]IV\\*[$SEPARATOR\\n[#DEPTH]]\0'
+.       \}
+.       if '\\*[$ROMAN_WIDTH]'6' \{\
+.          ds $ROMAN_WIDTH\\n[#DEPTH] 6
+.          nr #LIST_INDENT\\n[#DEPTH] \
+\w'\\*[$PREFIX\\n[#DEPTH]]IV\\*[$SEPARATOR\\n[#DEPTH]]\0'
+.       \}
+.       if '\\*[$ROMAN_WIDTH]'7' \{\
+.          ds $ROMAN_WIDTH\\n[#DEPTH] 7
+.          nr #LIST_INDENT\\n[#DEPTH] \
+\w'\\*[$PREFIX\\n[#DEPTH]]VII\\*[$SEPARATOR\\n[#DEPTH]]\0'
+.       \}
+.       if '\\*[$ROMAN_WIDTH]'8' \{\
+.          ds $ROMAN_WIDTH\\n[#DEPTH] 8
+.          nr #LIST_INDENT\\n[#DEPTH] \
+\w'\\*[$PREFIX\\n[#DEPTH]]VIII\\*[$SEPARATOR\\n[#DEPTH]]\0'
+.       \}
+.       if '\\*[$ROMAN_WIDTH]'9' \{\
+.          ds $ROMAN_WIDTH\\n[#DEPTH] 9
+.          nr #LIST_INDENT\\n[#DEPTH] \
+\w'\\*[$PREFIX\\n[#DEPTH]]VIII\\*[$SEPARATOR\\n[#DEPTH]]\0'
+.       \}
+.       if '\\*[$ROMAN_WIDTH]'10' \{\
+.          ds $ROMAN_WIDTH\\n[#DEPTH] 10
+.          nr #LIST_INDENT\\n[#DEPTH] \
+\w'\\*[$PREFIX\\n[#DEPTH]]VIII\\*[$SEPARATOR\\n[#DEPTH]]\0'
+.       \}
+.       if '\\*[$ROMAN_WIDTH]'11' \{\
+.          ds $ROMAN_WIDTH\\n[#DEPTH] 11
+.          nr #LIST_INDENT\\n[#DEPTH] \
+\w'\\*[$PREFIX\\n[#DEPTH]]VIII\\*[$SEPARATOR\\n[#DEPTH]]\0'
+.       \}
+.       if '\\*[$ROMAN_WIDTH]'12' \{\
+.          ds $ROMAN_WIDTH\\n[#DEPTH] 12
+.          nr #LIST_INDENT\\n[#DEPTH] \
+\w'\\*[$PREFIX\\n[#DEPTH]]VIII\\*[$SEPARATOR\\n[#DEPTH]]\0'
+.       \}
+.       if '\\*[$ROMAN_WIDTH]'13' \{\
+.          ds $ROMAN_WIDTH\\n[#DEPTH] 13
+.          nr #LIST_INDENT\\n[#DEPTH] \
+\w'\\*[$PREFIX\\n[#DEPTH]]XIII\\*[$SEPARATOR\\n[#DEPTH]]\0'
+.       \}
+.       if '\\*[$ROMAN_WIDTH]'14' \{\
+.          ds $ROMAN_WIDTH\\n[#DEPTH] 14
+.          nr #LIST_INDENT\\n[#DEPTH] \
+\w'\\*[$PREFIX\\n[#DEPTH]]XIV\\*[$SEPARATOR\\n[#DEPTH]]\0'
+.       \}
+.       if '\\*[$ROMAN_WIDTH]'15' \{\
+.          ds $ROMAN_WIDTH\\n[#DEPTH] 15
+.          nr #LIST_INDENT\\n[#DEPTH] \
+\w'\\*[$PREFIX\\n[#DEPTH]]XIV\\*[$SEPARATOR\\n[#DEPTH]]\0'
+.       \}
+.       if '\\*[$ROMAN_WIDTH]'16' \{\
+.          ds $ROMAN_WIDTH\\n[#DEPTH] 16
+.          nr #LIST_INDENT\\n[#DEPTH] \
+\w'\\*[$PREFIX\\n[#DEPTH]]XIV\\*[$SEPARATOR\\n[#DEPTH]]\0'
+.       \}
+.       if '\\*[$ROMAN_WIDTH]'17' \{\
+.          ds $ROMAN_WIDTH\\n[#DEPTH] 17
+.          nr #LIST_INDENT\\n[#DEPTH] \
+\w'\\*[$PREFIX\\n[#DEPTH]]XVII\\*[$SEPARATOR\\n[#DEPTH]]\0'
+.       \}
+.       if '\\*[$ROMAN_WIDTH]'18' \{\
+.          ds $ROMAN_WIDTH\\n[#DEPTH] 18
+.          nr #LIST_INDENT\\n[#DEPTH] \
+\w'\\*[$PREFIX\\n[#DEPTH]]XVIII\\*[$SEPARATOR\\n[#DEPTH]]\0'
+.       \}
+.       if '\\*[$ROMAN_WIDTH]'19' \{\
+.          ds $ROMAN_WIDTH\\n[#DEPTH] 19
+.          nr #LIST_INDENT\\n[#DEPTH] \
+\w'\\*[$PREFIX\\n[#DEPTH]]XVIII\\*[$SEPARATOR\\n[#DEPTH]]\0'
+.       \}
+.       if '\\*[$ROMAN_WIDTH]'20' \{\
+.          ds $ROMAN_WIDTH\\n[#DEPTH] 20
+.          nr #LIST_INDENT\\n[#DEPTH] \
+\w'\\*[$PREFIX\\n[#DEPTH]]XVIII\\*[$SEPARATOR\\n[#DEPTH]]\0'
+.       \}
+.    \}
+.END
+\#
+\# SHIFT LIST
+\# ----------
+\# *Arguments:
+\#   <amount by which to indent a list to the right>
+\# *Function:
+\#   Adds the value of the arg to the current list's indent.
+\# *Notes:
+\#   Requires a unit of measure.
+\#
+.MAC SHIFT_LIST END
+.    nr #SHIFT_LIST\\n[#DEPTH] (\\$1)
+.    nr #L_INDENT +\\n[#SHIFT_LIST\\n[#DEPTH]]
+.END
+\#
+\# PAD LIST DIGITS
+\# ---------------
+\# *Arguments:
+\#   [ LEFT ]
+\# *Function:
+\#   Adds a figure space to a list's hanging and left indent.  If
+\#   LEFT is given, sets reg. #PAD_LIST_DIGITS to 1 for use in ITEM.
+\#
+.MAC PAD_LIST_DIGITS END
+.    if '\\g[#ENUMERATOR\\n[#DEPTH]]'0' \{\
+.       nr #LIST_INDENT\\n[#DEPTH] +\\w'\\0'
+.       nr #L_INDENT \\n[#LIST_INDENT\\n[#DEPTH]]+\\n[#LIST_INDENT\\n-[#DEPTH]]
+.       nr #HL_INDENT\\n+[#DEPTH] +\\w'\\n[#ENUMERATOR\\n[#DEPTH]]'
+.       if '\\$1'LEFT' .nr #PAD_LIST_DIGITS\\n[#DEPTH] 1
+.    \}
+.    if '\\g[#ENUMERATOR\\n[#DEPTH]]'i' \
+.       if '\\$1'LEFT' .nr #PAD_LIST_DIGITS\\n[#DEPTH] 1
+.    if '\\g[#ENUMERATOR\\n[#DEPTH]]'I' \
+.       if '\\$1'LEFT' .nr #PAD_LIST_DIGITS\\n[#DEPTH] 1
+.END
+\#
+\# RESET LIST
+\# ----------
+\# *Arguments:
+\#   none
+\# *Function:
+\#   Resets register enumerators to 1 or a.
+\#
+.MAC RESET_LIST END
+.    ie '\\$1'' .nr #ENUMERATOR\\n[#DEPTH] 0 1
+.    el .nr #ENUMERATOR\\n[#DEPTH] \\$1-1 1
+.END
+\#
+\# QUIT LISTS
+\# ----------
+\# *Arguments:
+\#   none
+\# *Function:
+\#   Exits lists cleanly and restores any indents that were in
+\#   effect prior to LIST.
+\#
+.MAC QUIT_LISTS END
+.   IQ CLEAR
+.   nr #HL_INDENT \\n[#STORED_HL_INDENT]
+.   nr #T_INDENT  \\n[#STORED_T_INDENT]
+.   rr #STORED_HL_INDENT
+.   if \\n[#RESTORE_PREV_INDENT]=1 \{\
+.      nr #L_INDENT  \\n[#STORED_L_INDENT]
+.      IL
+.      rr #STORED_L_INDENT
+.   \}
+.   if \\n[#RESTORE_PREV_INDENT]=2 \{\
+.      nr #BL_INDENT \\n[#STORED_BL_INDENT]
+.      nr #BR_INDENT \\n[#STORED_BR_INDENT]
+.      ll \\n[#ORIG_L_LENGTH]u
+.      IB
+.      rr #STORED_BL_INDENT
+.      rr #STORED_BR_INDENT
+.   \}
+.   if \\n[#RESTORE_PREV_INDENT]=3 \{\
+.      nr #R_INDENT \\n[#STORED_R_INDENT]
+.      ll \\n[#ORIG_L_LENGTH]u
+.      IR
+.      rr #STORED_R_INDENT
+.   \}
+.   if \\n[#RESTORE_PREV_INDENT]=4 \{\
+.      nr #R_INDENT \\n[#STORED_R_INDENT]
+.      nr #L_INDENT \\n[#STORED_L_INDENT]
+.      ll \\n[#ORIG_L_LENGTH]u
+.      IR
+.      IL
+.      rr #STORED_R_INDENT
+.      rr #STORED_L_INDENT
+.   \}
+.\" Clean up after exiting last depth of list
+.   nr #REMOVE 0 1
+.   while \\n+[#REMOVE]<=\\n[#TOTAL_LISTS] \{\
+.      rr #LIST_INDENT\\n[#REMOVE]
+.      rr #ENUMERATOR\\n[#REMOVE]
+.      rm $ENUMERATOR\\n[#REMOVE]
+.      rm $SEPARATOR\\n[#REMOVE]
+.      rm $ENUMERATOR_TYPE\\n[#REMOVE]
+.      rr #PAD_LIST_DIGITS\\n[#REMOVE]
+.   \}
+.   rr #REMOVE
+.   rr #TOTAL_LISTS
+.   rr #QUIT
+.   rr #DEPTH
+.   rr #NEXT_DEPTH_BACK
+.   rr #RESTORE_PREV_INDENT
+.   rr #ORIG_L_LENGTH
+.   rr #CURRENT_L_LENGTH
+.   rr #IN_ITEM
+.   rr #IN_ITEM_L_INDENT
+.END
+\#
+\# SET LIST INDENT
+\# ---------------
+\# *Arguments:
+\#   none
+\# *Function:
+\#   Restores indent of prev. list in nested lists.  Also sets the
+\#   #QUIT register if an invocation of LIST OFF applies to the first
+\#   level of list.
+\#
+.MAC SET_LIST_INDENT END
+.    nr #NEXT_DEPTH_BACK \\n[#DEPTH]-1
+.    if \\n[#NEXT_DEPTH_BACK]=0 \{\
+.       nr #QUIT 1
+.       return
+.    \}
+.    nr #L_INDENT -\\n[#LIST_INDENT\\n[#DEPTH]]+\\n[#SHIFT_LIST\\n[#DEPTH]]
+.    nr #HL_INDENT \\n[#HL_INDENT\\n-[#DEPTH]]
+.END
+\#
+\# ====================================================================
+\#
+\# +++DOCUMENT PROCESSING MISC AND SUPPORT MACROS+++
+\#
+\# COLLATE
+\# -------
+\# *Arguments:
+\#   <none>
+\# *Function:
+\#   Turns headers off (if on) and saves header state, sets register
+\#   #COLLATE to 1 (toggle), and breaks to a new page.
+\# *Notes:
+\#   COLLATE exists primarily to allow putting multiple chapters in
+\#   a single file, although it can be used for any document type.  After
+\#   COLLATE, any of the macros that normally precede START may be
+\#   used, and should behave as expected.
+\#
+\#   N.B.--the START macro must be used after every COLLATE
+\#
+.MAC COLLATE END
+.    nr #HEADER_STATE \\n[#HEADERS_ON]
+.    if (\\n[defer]=0)&(\\n[float*defer]=0) .HEADERS OFF
+.    if \\n[#LINENUMBERS] \{\
+.       NUMBER_LINES off
+.       nr #LINENUMBERS 2
+.    \}
+.    if \\n[nl]=\\n[#PAGE_TOP] \{\
+.       nr #NO_NEWPAGE 1
+.       RESTORE_SPACE
+.    \}
+.    if \\n[defer] \
+.       DO_FOOTER
+.    EOL
+.    nr #COLLATED_DOC 1
+.    if ( (\\n[.t]-1) <= \\n[.v] ) .nr #NO_BREAK 1
+.    ds $SAVED_DOC_FAM \\*[$DOC_FAM]
+.    ds $SAVED_PP_FT   \\*[$PP_FT]
+.    nr #COLLATE 1
+.    nr #PRE_COLLATE 1
+.    nr #POST_TOP 1
+.    nr #ARG_NUM 0 1
+.    nr #LOOP \\n[#ACTIVE_LEVELS]      \" loop count                                   
+.    nr #HEAD_1_NUM 0 1
+.    nr eqn*label-width     (\\n[eqn*label-num] >? \\n[eqn*label-width])
+.    nr pdf-img*label-width (\\n[pdf-img*label-num] >? \\n[pdf-img*label-width])
+.    nr pic*label-width     (\\n[pic*label-num] >? \\n[pic*label-width])
+.    nr tbl*label-width     (\\n[tbl*label-num] >? \\n[tbl*label-width])
+.    nr fig*label-width     (\\n[pdf-img*label-width] >? \\n[pic*label-width])
+.    if \\n[eqn*label-with-chapter]=1     .nr eqn*label-num     0 1
+.    if \\n[pdf-img*label-with-chapter]=1 .nr pdf-img*label-num 0 1
+.    if \\n[pic*label-with-chapter]=1     .nr pic*label-num     0 1
+.    if \\n[tbl*label-with-chapter]=1     .nr tbl*label-num     0 1
+.    if \\n[#DOC_HEADER]=2 .nr #DOC_HEADER 1
+.    if \\n[#PAGE_NUM_V_POS]=1 \{\
+.       nr #PAGINATION_STATE \\n[#PAGINATE]
+.       PAGINATION OFF
+.    \}
+.    IQ CLEAR
+.    TQ
+.    LL \\n[#DOC_L_LENGTH]u
+.    QUAD \\*[$DOC_QUAD]
+.    nr #SAVED_DOC_LEAD \\n[#DOC_LEAD]
+.    vs \\n[#DOC_LEAD]u
+\*[SLANTX]
+\*[CONDX]
+\*[EXTX]
+.    if \\n[#TOC] \{\
+.       if \\n[TOC_BH]=1 .pdfswitchtopage before MOM:TOC
+.       if \\n[TOC_BH]=2 .pdfswitchtopage after MOM:TOC
+.    \}
+.    if !\\n[#NO_NEWPAGE] .NEWPAGE
+.    rr #NO_NEWPAGE
+.    ch RR_@TOP
+.    rr @TOP
+.    if \\n[.ns] \{\
+.      rs
+.      nop \&
+.    \}
+.    if '\\n[.ev]'PAGE_TRANSITION' .ev
+.    if \\n[#DEFER_PAGINATION] .PAGINATE
+.    if !'\\*[$RESTORE_PAGENUM_STYLE]'' \{\
+.       PAGENUM_STYLE \\*[$RESTORE_PAGENUM_STYLE]
+.       rm $RESTORE_PAGENUM_STYLE
+.    \}
+.    if \\n[#CH_NUM] \
+.       if \\n[#TOC]=0 .nr #CH_NUM +1
+.    rm $EN_TITLE
+.    COVERTITLE
+.    DOC_COVERTITLE
+.    TITLE
+.    CHAPTER
+.    CHAPTER_TITLE
+.    SUBTITLE
+.    MISC
+.    rr #COVER_TITLE
+.    rr #DOC_COVER_TITLE
+.    rr #MISC
+.    rr #COVER_MISC
+.    rr #DOC_COVER_MISC
+.    rr #COPYRIGHT
+.    rr #COVER_COPYRIGHT
+.    rr #DOC_COVER_COPYRIGHT
+.    rr #COVER_AUTHOR
+.    rr #DOC_COVER_AUTHOR
+.    rm COVER_TEXT
+.    rm DOC_COVER_TEXT
+.    rm $COPYRIGHT
+.    rm $COVER_COPYRIGHT
+.    rm $DOC_COVER_COPYRIGHT
+.    rr #END_QUOTE
+.    rr #PAGENUM_STYLE_SET
+.    rr #DOC_COVER
+.    rr #COVER
+.    rr #LAST_LEVEL
+.    rr #LEVEL
+.    if \\n[#RESTORE_PN_V_POS] \{\
+.       nr #PAGE_NUM_V_POS \\n[#RESTORE_PN_V_POS]
+.       rr #RESTORE_PN_V_POS
+.    \}
+.END
+\#
+\# NUMBER_LINES
+\# ------------
+\# *Arguments:
+\#   <starting line number> [ <increment> [ <gutter> ] ]
+\#   or
+\#   <anything> | RESUME
+\# *Function:
+\#   Begin, suspend/turn off, or resume numbering of output lines.
+\#
+.MAC NUMBER_LINES END
+.    br
+.    if '\\n[.z]'EPI_TEXT' .return
+.    if '\\$1'' \{\
+.       tm1 "[mom]: NUMBER_LINES at line \\n[.c] has no argument.
+.       tm1 "       You have forgotten to give a starting line number or 'RESUME'.
+.       ab   [mom]: Aborting '\\n[.F]' at \\$0, line \\n[.c].
+.    \}
+.    if !\\n[#LINENUMBERS]=2 .nr #LINENUMBERS 1
+.\" Test whether the first arg is a digit.
+.    if \B'\\$1' \{\
+.       if \\n[#QUOTE] \{\
+.          if \\n[#QUOTE]=1 .ds macro QUOTE
+.          if \\n[#QUOTE]=2 .ds macro BLOCKQUOTE
+.          tm1 "[mom]: \\$0 at line \\n[.c] may not be used inside \\*[macro].
+.          tm1 "       Please set NUMBER_LINES before \\*[macro], followed by
+.          tm1 "       NUMBER_\\*[macro]_LINES.
+.          ab   [mom]: Aborting '\\n[.F]' at \\$0, line \\n[.c].
+.       \}
+.       nr #LN \\$1
+.       ds $LN_NUM \\$1
+.       if !'\\n[.z]'' .nr #RESTORE_LN_NUM 1
+.       ie '\\$2'' \
+.          if '\\*[$LN_INC]'' .ds $LN_INC 1
+.       el .ds $LN_INC \\$2
+.       ie '\\$3'' \
+.          if !\\n[#LN_GUTTER] .nr #LN_GUTTER 2
+.       el .nr #LN_GUTTER \\$3
+.    \}
+.    ie !\\n[#LN] \{\
+.\" In other words, the first arg was not a digit.
+.       rr #LN
+.       ie '\\$1'RESUME' \{\
+.          LN_PARAMS
+.          nm \\*[$LN_NUM]
+.          RESTORE_PARAMS
+.       \}
+.       el \{\
+.          nm
+.\"  Register ln is still set and may confuse preprocessors like tbl.
+.\"  Still, resuming line numbering must be possible, so save ln in
+.\"  $LN_NUM
+.          ds $LN_NUM \\n[ln]
+.          if !\\n[#QUOTE] .nr ln 0
+.          if !\\n[#LINENUMBERS]=2 .rr #LINENUMBERS
+.       \}
+.    \}
+.    el \{\
+.       LN_PARAMS
+.       nm \\*[$LN_NUM] \\*[$LN_INC] \\n[#LN_GUTTER] -3-\\n[#LN_GUTTER]
+.       RESTORE_PARAMS
+.       if !'\\n[.z]'' .nr #DIVER_LN_OFF 1
+.    \}
+.    rr #LN
+.END
+\#
+\# LINENUMBER STYLE PARAMETERS
+\# ---------------------------
+\# *Arguments:
+\#   none
+\# *Function:
+\#   LN_PARAMS sets parameters for line numbers.
+\#   RESTORE_PARAMS restores them after internal calls to .nm
+\# *Notes:
+\#   It's not documented, but groff's linenumbering is processed
+\#   in a unique environment reserved for the numbers, such that
+\#   whatever style params were in effect prior to the invocation
+\#   of .nm remain in effect for the numbers even if the running
+\#   text has different params.  Eg, If you set .gcolor to 'purple'
+\#   before .nm then set it back to what it was, the numbers will be
+\#   purple while the text remains at the default color.
+\#
+.MAC LN_PARAMS END
+.    ie d$LN_FAM .fam \\*[$LN_FAM]
+.    el .fam \\n[.fam]
+.    ie d$LN_FT .ft \\*[$LN_FT]
+.    el .ft \\n[.sty]
+.    ie d$LN_SIZE_CHANGE .ps \\*[$LN_SIZE_CHANGE]
+.    el .ps \\n[.s]
+.    ie d$LN_COLOR .gcolor \\*[$LN_COLOR]
+.    el .gcolor \\n[.m]
+.END
+\#
+.MAC RESTORE_PARAMS END
+.    fam
+.    ft
+.    ps
+.    gcolor
+.END
+\#
+\# Whether, at COLLATE, to reset line number to 1.
+\#
+\# NUMBER LINES PER SECTION
+\# ------------------------
+\# *Argument:
+\#   none
+\# *Function:
+\#   Sets register that determines whether, at COLLATE, to reset
+\#   line number to 1.
+\# *Notes:
+\#   The default is to continue the line numbering from where it
+\#   left off.
+\#
+.MAC NUMBER_LINES_PER_SECTION END
+.    nr #PER_SECTION 1
+.END
+\#
+\# NUMBER QUOTE AND BLOCKQUOTE LINES AS PART OF RUNNING TEXT
+\# ---------------------------------------------------------
+\# *Argument:
+\#   <gutter> | <anything>
+\# *Function:
+\#   Sets #(B)QUOTE_LN to 1 if no argument, or a single numeric
+\#   argument, is given; otherwise, turns (BLOCK)QUOTE linenumbering
+\#   off.
+\# *Notes:
+\#   #(B)QUOTE is checked for in QUOTE and BLOCKQUOTE.
+\#   The single numeric argument allows establishing a different gutter from
+\#   the one used for line numbers in running text.
+\#
+.MAC NUMBER_QUOTE_LINES END
+.    ie \\n[#NUM_ARGS]=0 .nr #QUOTE_LN 1
+.    el \{\
+.       ie \B'\\$1' \{\
+.          nr #QUOTE_LN 1
+.          nr #Q_LN_GUTTER \\$1
+.       \}
+.       el \{\
+.          ie '\\$1'SILENT' .nr #SILENT_QUOTE_LN 1
+.          el \{\
+.             rr #QUOTE_LN
+.             rr #SILENT_QUOTE_LN
+.          \}
+.       \}
+.    \}
+.END
+\#
+.MAC NUMBER_BLOCKQUOTE_LINES END
+.    ie \\n[#NUM_ARGS]=0 .nr #BQUOTE_LN 1
+.    el \{\
+.       ie \B'\\$1' \{\
+.          nr #BQUOTE_LN 1
+.          nr #BQ_LN_GUTTER \\$1
+.       \}
+.       el \{\
+.          ie '\\$1'SILENT' .nr #SILENT_BQUOTE_LN 1
+.          el \{\
+.             rr #BQUOTE_LN
+.             rr #SILENT_BQUOTE_LN
+.          \}
+.       \}
+.    \}
+.END
+\#
+\# OUTPUT BLANK PAGES
+\# ------------------
+\# *Argument:
+\#   <number of blank pages to output> [ DIVIDER [ NULL ] ]
+\# *Function:
+\#   Outputs blank pages.
+\# *Notes:
+\#   If recto/verso, each page is recto/verso, even if there's
+\#   nothing on it.
+\#
+\#   The 1st argument to BLANKPAGE is non-optional.  DIVIDER is for
+\#   blank pages before endnotes, bibliographies, tocs, new chapters.
+\#
+.MAC BLANKPAGE END
+.    nr #HOW_MANY \\$1
+.    nr #PAGES 0 1
+.    if \\n[#LINENUMBERS] \{\
+.       nr #LINENUMBERS_WERE_ON 1
+.       NUMBER_LINES OFF
+.    \}
+.    while \\n+[#PAGES]<=\\n[#HOW_MANY] \{\
+.       if \\n[#HEADERS_ON]=1 \{\
+.          nr #HEADERS_WERE_ON 1
+.          HEADERS OFF
+.       \}
+.       if \\n[#PAGE_NUM_V_POS]=1 \{\
+.          if \\n[#PAGINATE]=1 .nr #PAGINATE_WAS_ON 1
+.          PAGINATION OFF
+.       \}
+.       NEWPAGE
+.       PRINT \&
+.       if \\n[#FOOTERS_ON]=1 \{\
+.          nr #FOOTERS_WERE_ON 1
+.          FOOTERS OFF
+.       \}
+.       if \\n[#PAGE_NUM_V_POS]=2 \{\
+.          if \\n[#PAGINATE]=1 .nr #PAGINATE_WAS_ON 1
+.             nr #RESTORE_PN_V_POS \\n[#PAGE_NUM_V_POS]
+.          PAGINATION OFF
+.       \}
+.       if \\n[#HEADERS_WERE_ON] .HEADERS
+.       if \\n[#PAGE_NUM_V_POS]=1 \
+.          if \\n[#PAGINATE_WAS_ON] .PAGINATE
+.    \}
+.    shift
+.    ie '\\$1'DIVIDER' \{\
+.       if \\n[#FOOTERS_WERE_ON] .FOOTERS
+.       if \\n[#RESTORE_PN_V_POS]=2 \{\
+.          if \\n[#PAGINATE_WAS_ON] .nr #RESTORE_PAGINATION 1
+.       \}
+.       shift
+.       if '\\$1'NULL' .nr #PAGE_NUM_ADJ -\\n[#HOW_MANY]
+.    \}
+.    el \{\
+.       if '\\$1'' \{\
+.          NEWPAGE
+.          if \\n[#FOOTERS_WERE_ON] .FOOTERS
+.          if \\n[#PAGE_NUM_V_POS]=2 \
+.             if \\n[#PAGINATE_WAS_ON] .PAGINATE
+.       \}
+.       if '\\$1'NULL' \{\
+.          NEWPAGE
+.          if \\n[#FOOTERS_WERE_ON] .FOOTERS
+.          if \\n[#PAGE_NUM_V_POS]=2 \
+.             if \\n[#PAGINATE_WAS_ON] .PAGINATE
+.       \}
+.    \}
+.    if \\n[#PAGINATE]=1 \
+.       if '\\$1'NULL' .nr #PAGE_NUM_ADJ -\\n[#HOW_MANY]
+.    if \\n[#LINENUMBERS_WERE_ON] .NUMBER_LINES RESUME
+.    rr #HOW_MANY
+.    rr #HEADERS_WERE_ON
+.    rr #FOOTERS_WERE_ON
+.    rr #PAGINATE_WAS_ON
+.END
+\#
+\# FLOATS
+\# ------
+\#
+.am PSPIC \" Need to do this for PSPIC inside a float
+.  vpt 0
+\h'(\\n[ps-offset]u + \\n[ps-deswid]u)'
+.  sp -1
+.  vpt 1
+..
+\#
+.MAC PROCESS_FLOATS END
+.    if (\\n[float*defer]>0):(\\n[defer]=0) \{\
+.        if !\\n[tbl*no-top-hook] .tbl@top-hook
+.        rr tbl*no-top-hook
+.    \}
+.    if \\n[defer] \{\
+.       ev protect
+.       evc FLOAT
+.       nf
+.       rs
+.       nop \&
+.       sp |\\n[#T_MARGIN]u-\\n[#DOC_LEAD]u
+.       if '\\*[float*type:1]'boxed-tbl' \{\
+.          ch RR_@TOP
+.          if (\\n[.t] >= 1)&(\\n[float-depth:1] > \\n[.t]) \
+.             tbl*float-warning
+.          if \\n[#MLA] .sp \\n[tbl*label-lead-diff]u
+.          if (\\n[tbl*have-caption]=1)&(\\n[tbl*caption-after-label]=0) \
+.             sp \\n[tbl*caption-lead-diff]u
+.          if \\n[tbl*caption-after-label] .sp 1n+(\\n[tbl*caption-lead-diff]u*2u)
+.       \}
+.       if \\n[float*pic] \{\
+.          if (\\n[pic*have-caption]=1)&(\\n[pic*caption-after-label]=0) \{\
+.             ie \\n[#COLUMNS] \{\
+.                sp |\\n[dc]u-.5v
+.             \}
+.             el \
+.                sp |\\n[#T_MARGIN]u-\\n[#DOC_LEAD]u-.5v
+.          \}
+.          rr pic*caption-lead-diff
+.          rr pic*top-lead-diff
+.          rr float*pic
+.       \}
+.       if \\n[float*img] \{\
+.             ie \\n[#COLUMNS] \
+.                sp |\\n[dc]u
+.             el \
+.                sp |\\n[#T_MARGIN]u-\\n[#DOC_LEAD]u
+.       \}
+.       nr defer-count \\n[defer]
+.       nr loop-count  0 1
+.       nr new-defer   0 1
+.       while \\n+[loop-count]<=\\n[defer-count] \{\
+.          nr tbl*no-top-hook 1
+.          if \\n[defer] .rnn defer float*defer \" So '.if \n[defer]' is skipped during float output
+.          vpt
+.          ch RR_@TOP
+.          rr @TOP
+.          if \\n[pdf-img*have-caption] \{\
+.             if !\\n[pdf-img*caption-after-label] .sp -.5v
+.          \}
+.          rr pdf-img*have-caption
+.          rr pic*have-caption
+.          if '\\*[float*type:\\n[loop-count]]'table' \{\
+.             ch FOOTER \\n[#VARIABLE_FOOTER_POS]u+\\n[#DOC_LEAD]u
+.             ch FN_OVERFLOW_TRAP -\\n[#FN_OVERFLOW_TRAP_POS]u+\\n[#DOC_LEAD]u
+.          \}
+.          ie !\\n[float-span:\\n[loop-count]] \{\
+.             ie ((\\n[float-depth:\\n[loop-count]]-\\n[.v])>\\n[.t]):(\\n[D-float:\\n[loop-count]]>\\n[.t]) \{\
+.\" Insufficient space, defer to next page
+.                rn FLOAT*DIV:\\n[loop-count] NEW*FLOAT*DIV:\\n+[new-defer]
+.                rnn float-depth:\\n[loop-count] new-float-depth:\\n[new-defer]
+.                rnn D-float:\\n[loop-count] new-D-float:\\n[new-defer]
+.             \}
+.             el \{\
+.                output-float
+.             \}
+.          \}
+.          el \{\
+.             rr tbl*no-top-hook
+.             output-float
+.          \}
+.       \}
+.       rm FLOAT*DIV:\\n[loop-count]
+.       rr float-depth:\\n[loop-count]
+.       rm tbl*header-div:\\n[loop-count]
+.       rm float*type:\\n[loop-count]
+.\" FLOAT arrays are empty now
+.\" Rename new arrays (FLOATs deferred to next page) to proper names
+.       nr loop-count 0 1
+.       rnn new-defer defer
+.       while \\n+[loop-count]<=\\n[defer] \{\
+.          rn NEW*FLOAT*DIV:\\n[loop-count] FLOAT*DIV:\\n[loop-count]
+.          rnn new-float-depth:\\n[loop-count] float-depth:\\n[loop-count]
+.          rnn new-D-float:\\n[loop-count] D-float:\\n[loop-count]
+.       \}
+.       rr float*defer
+.       ch FOOTER \\n[#VARIABLE_FOOTER_POS]u
+.       ch FN_OVERFLOW_TRAP -\\n[#FN_OVERFLOW_TRAP_POS]u
+.       ev
+.       SHIM
+.       if \\n[#SHIM]>(\\n[#DOC_LEAD]-(\\n[#DOC_LEAD]/4)) 'sp -\\n[#DOC_LEAD]u
+.       nr tbl*have-header 0
+.       rr loop-count
+.       rr defer-count
+.       rr float*before-shim
+.       rr float*after-shim
+.       rm float-adj
+.       rm float-adj:top
+.       rm float-adj:bottom
+.       if \\n[#NEWPAGE] \{\
+.          vpt
+'          bp
+.          rr #NEWPAGE
+.       \}
+.    \}
+.    rr float*img
+.    rr float*eqn
+.    rr float*tbl
+.    rr float*pic
+.END
+\#
+.MAC output-float END
+.    vpt 0
+.    nop \&
+.    sp -1
+.    if \\n[no-top-space] \{\
+.       ie !\\n[#COLUMNS] \{\
+.          sp |\\n[#T_MARGIN]u-\\n[#DOC_LEAD]u
+.          ns
+.       \}
+.       el .sp |\\n[dc]u
+.       if \\n[float*tbl] \{\
+.          rs
+.          if \\n[tbl*caption-top-lead-diff] \{\
+.             sp \\n[tbl*caption-top-lead-diff]u
+.             rr tbl*caption-top-lead-diff
+.          \}
+.          rr float*tbl
+.       \}
+.    \}
+.    if \\n[float*pic] \{\
+.       nr pic*top-space-adj \\n[#DOC_LEAD]-\\n[pic@text-lead]
+.       if (\\n[pic*have-caption]=0):(\\n[pic*caption-after-label]=1) \{\
+.          sp \\n[pic*top-space-adj]u
+.       \}
+.       if \\n[#COLUMNS] \{\
+.          if !'\\*[pic*space-adj]'' .sp \\*[pic*space-adj]
+.       \}
+.       rr float*pic
+.    \}
+.    if \\n[float*eqn] \{\
+.       sp -.5v
+.       rr float*eqn
+.    \}
+.    FLOAT*DIV:\\n[loop-count]
+.    if \\n[no-top-space] \{\
+.       rs
+.       nop \&
+.       sp -1
+.       rr no-top-space
+.    \}
+.    if \\n[#COLUMNS] \
+.       if !'\\*[pic*space-adj]'' .sp -\\*[pic*space-adj]
+.    rm pic*space-adj
+.    if \\n[D-float:\\n[loop-count]] \{\
+.       sp \
+-\\n[float-depth:\\n[loop-count]]u+\\n[D-float:\\n[loop-count]]u+\\n[#DOC_LEAD]u
+.       rr D-float:\\n[loop-count]
+.    \}
+.END
+\#
+\# FLOAT
+\# -----
+\# *Arguments:
+\#   [ ADJUST +|-<amount> ] [ FORCE] [ SPAN] [ NO_SHIM] | <anything>
+\# *Function:
+\#   Captures input in a diversion, which is output immediately if
+\#   there's room on the page; otherwise outputs diversion at top of
+\#   next page.
+\# *Notes:
+\#   ADJUST allows for raising or lowering the contents of
+\#   the diversion within the space allotted.  FORCE breaks to
+\#   a new page immediately.
+\#
+.MAC FLOAT END
+.\"  Case where upcoming .br breaks to a new page, causing a defered float
+.\"  to be output by HEADER and the defer register to be cleared.
+.    nr pagenum \\n%+\\n[#PAGE_NUM_ADJ]
+.    br
+.\" Clear .ns when a single line of running text precededs float
+.\" at the top of the page.
+.    if \\n[nl]=\\n[#PAGE_TOP] \{\
+.       vpt 0
+.       sp -1v
+.       sp
+.       ch RR_@TOP
+.       rr @TOP
+.       vpt
+.    \}
+.    if \\n[#NUM_ARGS]>0 \{\
+.       nr loop-count 0 1
+.       nr loop-counter \\n[#NUM_ARGS]
+.       while \\n+[loop-count]<=\\n[loop-counter] \{\
+.          if '\\$1'FORCE' \{\
+.             nr #FORCE 1
+.             shift
+.          \}
+.          if '\\$1'SPAN' \{\
+.              nr float-span 1
+.              shift
+.          \}
+.          if '\\$1'ADJUST' \{\
+.             shift
+.             ds float-adj \\$1
+.             shift
+.          \}
+.          if '\\$1'NO_SHIM' \{\
+.             nr float*no-shim 1
+.             shift
+.          \}
+.       \}
+.    \}
+.    ie '\\$1'' \{\
+.       ev FLOAT
+.       evc 0
+.       nf
+.       di FLOAT*DIV
+.    \}
+.    el \{\
+.       br
+.       di
+.       if \\n[float*table] \
+.          if !\\n[tbl*have-header] .ev
+.       ev
+.       if \\n[tbl*boxed] \{\
+.          ie !\\n[#MLA] \{\
+.             ie (\\n[tbl@label]=1):(\\n[tbl@source]=1) .nr dn -.65v
+.             el .nr dn +.65v
+.          \}
+.          el \{\
+.             if !\\n[tbl@source] .nr dn -1.65v
+.          \}
+.       \}
+.       if (\\n[dn]>\\n[.t]):(\\n[D-float]>\\n[.t]) \{\
+.          ie \\n[@TOP] \
+.             if \\n[tbl*boxed] .rs
+.          el \{\
+.             if !\\n[defer] .nr defer 0 1
+.             rn FLOAT*DIV FLOAT*DIV:\\n+[defer]
+.             if \\n[float-span] \
+.                if !\\n[tbl*boxed] .rnn float-span float-span:\\n[defer]
+.             if \\n[float*tbl] \{\
+.                if \\n[defer]=1 .nr no-top-space 1
+.                ie \\n[tbl*boxed] \{\
+.                   ds float*type:\\n[defer] boxed-tbl
+.                   rr float-span
+.                \}
+.                el .ds float*type:\\n[defer] table
+.                if \\n[tbl*center] .nr float*tbl-center:\\n[defer] 1
+.                rn tbl*header-div tbl*header-div:\\n[defer]
+.                rr tbl*center
+.             \}
+.             if \\n[float*eqn] \{\
+.                if \\n[defer]=1 .nr no-top-space 1
+.                ds float*type:\\n[defer] eqn
+.             \}
+.             if \\n[float*pic] \{\
+.                ds float*type:\\n[defer] pic
+.             \}
+.             if \\n[float*img] \{\
+.                ds float*type:\\n[defer] img
+.             \}
+.             if \\n[D-float] .nr D-float:\\n[defer] \\n[D-float]
+.             nr float-depth:\\n[defer] \\n[dn]
+.             if \\n[#FORCE] \{\
+.                bp
+.                rr #FORCE
+.             \}
+.             return \" output div after header
+.          \}
+.       \}
+.       if !'\\*[float-adj]'' .sp \\*[float-adj]
+.       if \\n[.u] .nr fill 1
+.       if \\n[@TOP] \{\
+.          nr no-adjust 1
+.          rr @TOP
+.       \}
+.       if \\n[float*tbl] \{\
+.          if (\\n[#MLA]=1)&(\\n[tbl@source]=0) \
+.             chop FLOAT*DIV
+.          if \\n[nl]=\\n[#PAGE_TOP] \{\
+.             if \\n[tbl*have-caption] \{\
+.                ie !\\n[#MLA] .sp \\n[tbl*caption-lead-diff]u
+.                el \{\
+.                   ch RR_@TOP
+.                   sp \\n[tbl*label-lead-diff]u-.5v
+.                \}
+.             \}
+.          \}
+.       \}
+.       evc FLOAT
+.       nf
+.       FLOAT*DIV
+.       evc 0
+.       if \\n[float*tbl] \{\
+.          ie \\n[tbl*boxed] \{\
+.             if \\n[dn]=\\n[bx-tbl-depth] .sp .35v
+.             if \\n[tbl*plain-boxed] .sp .5v
+.             ch FOOTER \\n[#VARIABLE_FOOTER_POS]u
+.             ch FN_OVERFLOW_TRAP -\\n[#FN_OVERFLOW_TRAP_POS]u
+.             rr tbl*boxed
+.             rr bx-tbl-depth
+.          \}
+.          el \{\
+.             if '\\*[tbl*label]'' \
+.                if \\n[tbl*autolabel]=0 .sp
+.          \}
+.          rr float*tbl
+.          rr tbl*center
+.          rm tbl*header-div
+.          rr tbl*have-caption
+.          rr tbl*have-label
+.          rr tbl*have-source
+.          rm tbl*caption
+.          rm tbl*label
+.          rm tbl*source
+.       \}
+.       if \\n[D-float] \
+.          sp -\\n[dn]u+\\n[#DOC_LEAD]u+\\n[D-float]u
+.       if \\n[fill] \{\
+.          fi
+.          rr fill
+.       \}
+.       rm FLOAT*DIV
+.       if !'\\*[float-adj]'' \
+.          if !\\n[no-adjust] .sp -\\*[float-adj]
+.          if !\\n[float*no-shim] .SHIM
+.       rm float-adj
+.       rm no-adjust
+.       rm float-adj:top
+.       rm float-adj:bottom
+.       rr D-float
+.       rr float*no-shim
+.       rr #FORCE
+.    \}
+.END
+\#
+\# SET TRAPS FOR HEADERS/FOOTERS/FOOTNOTES
+\# ---------------------------------------
+\# *Arguments:
+\#   <none>
+\# *Function:
+\#   Sets header/footer/footnotes/etc... traps.
+\#
+\#   Calculates the number of lines that actually fit on a
+\#   page based on #B_MARGIN and resets page bottom trap to coincide
+\#   with the depth of that number of lines, or, if #ADJ_DOC_LEAD=1,
+\#   adjusts #DOC_LEAD so that the last line of text on a page falls
+\#   exactly on #B_MARGIN.
+\#
+.MAC RR_@TOP END \" Trap-invoked after first line of text on a new page
+.    rr @TOP
+.    if \\n[.ns] \{\
+.       vpt 0
+.       rs
+.       if \\n[.u] .nr fill 1
+.       nf
+.       nop \&
+.       sp -1
+.       if \\n[fill] .fi
+.    \}
+.    if \\n[.vpt]=0 .vpt
+.END
+\#
+.MAC TRAPS END
+.    if !\\n[#UNADJUSTED_DOC_LEAD]  .nr #UNADJUSTED_DOC_LEAD \\n[#DOC@LEAD]
+.\" Remove all header/footer traps
+.    if !\\n[#NO_TRAP_RESET] \{\
+.       ch DO_T_MARGIN
+.       ch DO_B_MARGIN
+.       ch HEADER
+.       ch FOOTER
+.       ch FN_OVERFLOW_TRAP
+.\" Plant header trap
+.       wh 0 HEADER
+.    \}
+.\" Adjust lead so last line of text falls on B_MARGIN
+.       nr #LINES_PER_PAGE 0 1
+.       nr #DOC_LEAD_ADJ 0 1
+.       nr #DEPTH_TO_B_MARGIN \\n[#PAGE_LENGTH]-\\n[#ORIGINAL_B_MARGIN]-\\n[#DOC_LEAD]
+.\" Get the number of unadjusted lines that fit on the page; always a
+.\" bit short of the bottom margin
+.       while \\n[#T_MARGIN]+(\\n[#DOC_LEAD]*\\n+[#LINES_PER_PAGE])<\\n[#DEPTH_TO_B_MARGIN] \{\
+.
+.       \}
+.       nr #LINES_PER_PAGE -1
+.\" Add machine units, 1 at a time, increasing the leading until the
+.\" new leading fills the page properly
+.       while \\n[#T_MARGIN]+(\\n[#DOC_LEAD]+\\n+[#DOC_LEAD_ADJ]*\\n[#LINES_PER_PAGE])<=\\n[#DEPTH_TO_B_MARGIN] \{\
+.
+.       \}
+.       DOC_LEAD \\n[#DOC_LEAD]u+\\n[#DOC_LEAD_ADJ]u
+.\" The "visual" bottom margin is what \n[nl] would report on the
+.\" last line before the FOOTER trap is sprung
+.       nr #VISUAL_B_MARGIN \\n[#T_MARGIN]+(\\n[#LINES_PER_PAGE]*\\n[#DOC_LEAD])
+.\" Get the difference between #B_MARGIN and #VISUAL_B_MARGIN
+.       nr #FOOTER_DIFF (\\n[#PAGE_LENGTH]-\\n[#B_MARGIN])-\\n[#VISUAL_B_MARGIN]
+.\" Set #B_MARGIN to 1 machine unit lower on the page than #VISUAL_B_MARGIN
+.       nr #B_MARGIN \\n[#B_MARGIN]+(\\n[#FOOTER_DIFF]-1)
+.\" Set the FN_OVERFLOW_TRAP position
+.       nr #FN_OVERFLOW_TRAP_POS \\n[#B_MARGIN]-\\n[#FN_LEAD]
+.       if \\n[#PRINT_STYLE]=1 .nr #FN_OVERFLOW_TRAP_POS \\n[#ORIGINAL_B_MARGIN]u
+.\" Set footer and footnote overflow traps
+.    if !\\n[#NO_TRAP_RESET] \{\
+.       nr #FN_COUNT 0 1
+.       nr #SPACE_REMAINING 0
+.       nr #FN_DEPTH 0
+.       nr #VARIABLE_FOOTER_POS 0-\\n[#B_MARGIN]u
+.       wh \\n[.p]u FOOTER
+.       wh -(\\n[#FN_OVERFLOW_TRAP_POS]u) FN_OVERFLOW_TRAP
+.       ch FOOTER -\\n[#B_MARGIN]u
+.    \}
+.END
+\#
+\# CHECK INDENT
+\# ------------
+\# *Arguments:
+\#   <none>
+\# *Function:
+\#   Adds left, right, or both indent values to document elements
+\#   like heads and subheads that are processed in environments.
+\#
+.MAC CHECK_INDENT END
+.    if \\n[#INDENT_LEFT_ACTIVE] \{\
+.       in \\n[#L_INDENT]u
+.       if \\n[#QUOTE] \{\
+.          in -\\n[#L_INDENT]u \"Because we added an indent in 2nd line of macro
+.          ll -\\n[#L_INDENT]u
+.          ta \\n[.l]u
+.       \}
+.       if \\n[#EPIGRAPH] \{\
+.          in -\\n[#L_INDENT]u
+.          ll -\\n[#L_INDENT]u
+.          ta \\n[.l]u
+.       \}
+.    \}
+.    if \\n[#INDENT_RIGHT_ACTIVE] \{\
+.       ll -\\n[#R_INDENT]u
+.       ta \\n[.l]u
+.    \}
+.    if \\n[#INDENT_BOTH_ACTIVE] \{\
+.       in \\n[#BL_INDENT]u
+.       ll -\\n[#BR_INDENT]u
+.       ta \\n[.l]u
+.       if \\n[#QUOTE] \{\
+.          in -\\n[#BL_INDENT]u
+.          ie \\n[#BR_INDENT]=\\n[#BL_INDENT] \{\
+.             ll -\\n[#BR_INDENT]u
+.             ta \\n[.l]u
+.          \}
+.          el \{\
+.             ll -(\\n[#BR_INDENT]u/2u)
+.             ta \\n[.l]u
+.          \}
+.       \}
+.       if \\n[#EPIGRAPH] \{\
+.          in -\\n[#BL_INDENT]u
+.          ie \\n[#BR_INDENT]=\\n[#BL_INDENT] \{\
+.             ll -\\n[#BR_INDENT]u
+.             ta \\n[.l]u
+.          \}
+.          el \{\
+.             ll -(\\n[#BR_INDENT]u/2u)
+.             ta \\n[.l]u
+.          \}
+.       \}
+.    \}
+.END
+\#
+\# REMOVE INDENT
+\# -------------
+\# *Arguments:
+\#   <none>
+\# *Function:
+\#   Removes left, right, or both indent values from document elements
+\#   like heads and subheads that are processed in environments.
+\#
+.MAC REMOVE_INDENT END
+.    in 0
+.    ll \\n[#L_LENGTH]u
+.    ta \\n[.l]u
+.END
+\#
+\# This .em (for all DOC_TYPEs, except 4 [LETTER]) ensures that
+\# deferred footnotes that happen on the 2nd to last page get
+\# output.
+\#
+.MAC TERMINATE END
+.    ie \\n[#FN_DEPTH] \{\
+.       ie \\n[#FN_DEFER] \{\
+.          br
+.          nr #TERMINATE 1
+.          FOOTNOTE
+.          nf
+.          FOOTNOTE OFF
+.       \}
+.       el \{\
+.          br
+.          ch FN_OVERFLOW_TRAP
+.          FOOTER
+.       \}
+.    \}
+.    el \{\
+.       br
+.       ch FN_OVERFLOW_TRAP
+.       FOOTER
+.    \}
+.END
+\#
+\# END MACRO FOR LETTERS
+\# ---------------------
+\# *Arguments:
+\#   none
+\# *Function:
+\#   The .em macro executed at the end of letters.  Turns footers
+\#   and pagination off, terminates and outputs diversion CLOSING
+\#   (indented with the author's name underneath).
+\#
+.MAC ALL_DONE END
+.    ch FOOTER
+.    ch HEADER
+.    br
+.    if \\n[#DOC_TYPE]=4 \{\
+.       if !'\\n[.z]'' \{\
+.          br
+.          ALD \\*[$SIG_SPACE]
+.          di
+.       \}
+.       IQ CLEAR
+.       TQ
+.       LEFT
+.       ie !'\\*[$CLOSE_INDENT]'' .IL \\*[$CLOSE_INDENT]
+.       el .IL \\n[#DOC_L_LENGTH]u/2u
+.       SP
+.       if \\n[#CLOSING] \{\
+.          CLOSING_TEXT
+.          br
+.       \}
+.       PRINT \\*[$AUTHOR_1]
+.    \}
+.END
+\#
+\# Set up a default papersize of US letter
+\#
+.PAPER LETTER
+\#
+\# ====================================================================
+\#
+\# +++DOCUMENT PROCESSING ALIASES+++
+\#
+\# Create aliases to make life easier for users: synonyms, short forms
+\# and alternate spellings.
+\#
+.ALIAS BREAK_BLOCKQUOTE    BREAK_QUOTE
+.ALIAS BREAK_CITATION      BREAK_QUOTE
+.ALIAS BREAK_CITE          BREAK_QUOTE
+.ALIAS CITATION            BLOCKQUOTE
+.ALIAS CITE                BLOCKQUOTE
+.ALIAS DOC_R_MARGIN        DOC_RIGHT_MARGIN
+.ALIAS DOC_L_MARGIN        DOC_LEFT_MARGIN
+.ALIAS DOC_L_LENGTH        DOC_LINE_LENGTH
+.ALIAS DOC_RMARGIN         DOC_RIGHT_MARGIN
+.ALIAS DOC_LMARGIN         DOC_LEFT_MARGIN
+.ALIAS DOC_LLENGTH         DOC_LINE_LENGTH
+.ALIAS DOC_FAM             DOC_FAMILY
+.ALIAS DOC_LS              DOC_LEAD
+.ALIAS DOC_PS              DOC_PT_SIZE
+.ALIAS FILL                QUAD
+.ALIAS PAGENUM             PAGENUMBER
+.ALIAS PAGINATION          PAGINATE
+.ALIAS PP_FT               PP_FONT
+.ALIAS REF_INDENT          INDENT_REFS
+.ALIAS TOC_PS              TOC_PT_SIZE
+\#
+\# HEADER and FOOTER macros
+\# ------------------------
+\# Because the type-style of headers and footers are managed
+\# identically, and the type-style macros (_<type parameter>) all
+\# require the correct name of the calling macro, it's necessary
+\# to create HEADER_ and FOOTER_ macros here that are basically
+\# aliases with an argument.
+\#
+.MAC FOOTER_CENTER_COLOR END
+.    HDRFTR_CENTER_COLOR \\$1
+.END
+\#
+.MAC FOOTER_CENTER_COLOUR END
+.    HDRFTR_CENTER_COLOR \\$1
+.END
+\#
+.MAC FOOTER_CENTER_FAM END
+.    HDRFTR_CENTER_FAMILY \\$1
+.END
+\#
+.MAC FOOTER_CENTER_FAMILY END
+.    HDRFTR_CENTER_FAMILY \\$1
+.END
+\#
+.MAC FOOTER_CENTER_FONT END
+.    HDRFTR_CENTER_FONT \\$1
+.END
+\#
+.MAC FOOTER_CENTER_FT END
+.    HDRFTR_CENTER_FONT \\$1
+.END
+\#
+.MAC FOOTER_CENTER_PS END
+.    HDRFTR_CENTER_SIZE \\$1
+.END
+\#
+.MAC FOOTER_CENTER_SIZE END
+.    HDRFTR_CENTER_SIZE \\$1
+.END
+\#
+.MAC FOOTER_CENTRE_CAPS END
+.    HDRFTR_CENTER_CAPS \\$1
+.END
+\#
+.MAC FOOTER_CENTRE_COLOR END
+.    HDRFTR_CENTER_COLOR \\$1
+.END
+\#
+.MAC FOOTER_CENTRE_COLOUR END
+.    HDRFTR_CENTER_COLOR \\$1
+.END
+\#
+.MAC FOOTER_CENTRE_FAM END
+.    HDRFTR_CENTER_FAMILY \\$1
+.END
+\#
+.MAC FOOTER_CENTRE_FAMILY END
+.    HDRFTR_CENTER_FAMILY \\$1
+.END
+\#
+.MAC FOOTER_CENTRE_FONT END
+.    HDRFTR_CENTER_FONT \\$1
+.END
+\#
+.MAC FOOTER_CENTRE_FT END
+.    HDRFTR_CENTER_FONT \\$1
+.END
+\#
+.MAC FOOTER_CENTRE_PS END
+.    HDRFTR_CENTER_SIZE \\$1
+.END
+\#
+.MAC FOOTER_CENTRE_SIZE END
+.    HDRFTR_CENTER_SIZE \\$1
+.END
+\#
+.MAC FOOTER_COLOR END
+.    HDRFTR_COLOR \\$1
+.END
+\#
+.MAC FOOTER_COLOUR END
+.    HDRFTR_COLOR \\$1
+.END
+\#
+.MAC FOOTER_FAM END
+.    HDRFTR_FAMILY \\$1
+.END
+\#
+.MAC FOOTER_FAMILY END
+.    HDRFTR_FAMILY \\$1
+.END
+\#
+.MAC FOOTER_LEFT_COLOR END
+.    HDRFTR_LEFT_COLOR \\$1
+.END
+\#
+.MAC FOOTER_LEFT_COLOUR END
+.    HDRFTR_LEFT_COLOR \\$1
+.END
+\#
+.MAC FOOTER_LEFT_FAM END
+.    HDRFTR_LEFT_FAMILY \\$1
+.END
+\#
+.MAC FOOTER_LEFT_FAMILY END
+.    HDRFTR_LEFT_FAMILY \\$1
+.END
+\#
+.MAC FOOTER_LEFT_FONT END
+.    HDRFTR_LEFT_FONT \\$1
+.END
+\#
+.MAC FOOTER_LEFT_FT END
+.    HDRFTR_LEFT_FONT \\$1
+.END
+\#
+.MAC FOOTER_LEFT_PS END
+.    HDRFTR_LEFT_SIZE \\$1
+.END
+\#
+.MAC FOOTER_LEFT_SIZE END
+.    HDRFTR_LEFT_SIZE \\$1
+.END
+\#
+.MAC FOOTER_RIGHT_COLOR END
+.    HDRFTR_RIGHT_COLOR \\$1
+.END
+\#
+.MAC FOOTER_RIGHT_COLOUR END
+.    HDRFTR_RIGHT_COLOR \\$1
+.END
+\#
+.MAC FOOTER_RIGHT_FAM END
+.    HDRFTR_RIGHT_FAMILY \\$1
+.END
+\#
+.MAC FOOTER_RIGHT_FAMILY END
+.    HDRFTR_RIGHT_FAMILY \\$1
+.END
+\#
+.MAC FOOTER_RIGHT_FONT END
+.    HDRFTR_RIGHT_FONT \\$1
+.END
+\#
+.MAC FOOTER_RIGHT_FT END
+.    HDRFTR_RIGHT_FONT \\$1
+.END
+\#
+.MAC FOOTER_RIGHT_PS END
+.    HDRFTR_RIGHT_SIZE \\$1
+.END
+\#
+.MAC FOOTER_RIGHT_SIZE END
+.    HDRFTR_RIGHT_SIZE \\$1
+.END
+\#
+.MAC FOOTER_RULE_COLOR END
+.    HDRFTR_RULE_COLOR \\$1
+.END
+\#
+.MAC FOOTER_SIZE END
+.    HDRFTR_SIZE \\$1
+.END
+\#
+.MAC HEADER_CENTER_COLOR END
+.    HDRFTR_CENTER_COLOR \\$1
+.END
+\#
+.MAC HEADER_CENTER_COLOUR END
+.    HDRFTR_CENTER_COLOR \\$1
+.END
+\#
+.MAC HEADER_CENTER_FAM END
+.    HDRFTR_CENTER_FAMILY \\$1
+.END
+\#
+.MAC HEADER_CENTER_FAMILY END
+.    HDRFTR_CENTER_FAMILY \\$1
+.END
+\#
+.MAC HEADER_CENTER_FONT END
+.    HDRFTR_CENTER_FONT \\$1
+.END
+\#
+.MAC HEADER_CENTER_FT END
+.    HDRFTR_CENTER_FONT \\$1
+.END
+\#
+.MAC HEADER_CENTER_PS END
+.    HDRFTR_CENTER_SIZE \\$1
+.END
+\#
+.MAC HEADER_CENTER_SIZE END
+.    HDRFTR_CENTER_SIZE \\$1
+.END
+\#
+.MAC HEADER_CENTRE_COLOR END
+.    HDRFTR_CENTER_COLOR \\$1
+.END
+\#
+.MAC HEADER_CENTRE_COLOUR END
+.    HDRFTR_CENTER_COLOR \\$1
+.END
+\#
+.MAC HEADER_CENTRE_FAM END
+.    HDRFTR_CENTER_FAMILY \\$1
+.END
+\#
+.MAC HEADER_CENTRE_FAMILY END
+.    HDRFTR_CENTER_FAMILY \\$1
+.END
+\#
+.MAC HEADER_CENTRE_FONT END
+.    HDRFTR_CENTER_FONT \\$1
+.END
+\#
+.MAC HEADER_CENTRE_FT END
+.    HDRFTR_CENTER_FONT \\$1
+.END
+\#
+.MAC HEADER_CENTRE_PS END
+.    HDRFTR_CENTER_SIZE \\$1
+.END
+\#
+.MAC HEADER_CENTRE_SIZE END
+.    HDRFTR_CENTER_SIZE \\$1
+.END
+\#
+.MAC HEADER_COLOR END
+.    HDRFTR_COLOR \\$1
+.END
+\#
+.MAC HEADER_COLOUR END
+.    HDRFTR_COLOR \\$1
+.END
+\#
+.MAC HEADER_FAM END
+.    HDRFTR_FAMILY \\$1
+.END
+\#
+.MAC HEADER_FAMILY END
+.    HDRFTR_FAMILY \\$1
+.END
+\#
+.MAC HEADER_LEFT_COLOR END
+.    HDRFTR_LEFT_COLOR \\$1
+.END
+\#
+.MAC HEADER_LEFT_COLOUR END
+.    HDRFTR_LEFT_COLOR \\$1
+.END
+\#
+.MAC HEADER_LEFT_FAM END
+.    HDRFTR_LEFT_FAMILY \\$1
+.END
+\#
+.MAC HEADER_LEFT_FAMILY END
+.    HDRFTR_LEFT_FAMILY \\$1
+.END
+\#
+.MAC HEADER_LEFT_FONT END
+.    HDRFTR_LEFT_FONT \\$1
+.END
+\#
+.MAC HEADER_LEFT_FT END
+.    HDRFTR_LEFT_FONT \\$1
+.END
+\#
+.MAC HEADER_LEFT_PS END
+.    HDRFTR_LEFT_SIZE \\$1
+.END
+\#
+.MAC HEADER_LEFT_SIZE END
+.    HDRFTR_LEFT_SIZE \\$1
+.END
+\#
+.MAC HEADER_RIGHT_COLOR END
+.    HDRFTR_RIGHT_COLOR \\$1
+.END
+\#
+.MAC HEADER_RIGHT_COLOUR END
+.    HDRFTR_RIGHT_COLOR \\$1
+.END
+\#
+.MAC HEADER_RIGHT_FAM END
+.    HDRFTR_RIGHT_FAMILY \\$1
+.END
+\#
+.MAC HEADER_RIGHT_FAMILY END
+.    HDRFTR_RIGHT_FAMILY \\$1
+.END
+\#
+.MAC HEADER_RIGHT_FONT END
+.    HDRFTR_RIGHT_FONT \\$1
+.END
+\#
+.MAC HEADER_RIGHT_FT END
+.    HDRFTR_RIGHT_FONT \\$1
+.END
+\#
+.MAC HEADER_RIGHT_PS END
+.    HDRFTR_RIGHT_SIZE \\$1
+.END
+\#
+.MAC HEADER_RIGHT_SIZE END
+.    HDRFTR_RIGHT_SIZE \\$1
+.END
+\#
+.MAC HEADER_RULE_COLOR END
+.    HDRFTR_RULE_COLOR \\$1
+.END
+\#
+.MAC HEADER_SIZE END
+.    HDRFTR_SIZE \\$1
+.END
+\#
+\# Aliases for other HEADER and FOOTER macros.
+\#
+.ALIAS  BIBLIOGRAPHY_FOOTER_CENTER BIBLIOGRAPHY_HDRFTR_CENTER
+.ALIAS  BIBLIOGRAPHY_FOOTER_CENTRE BIBLIOGRAPHY_HDRFTR_CENTER
+.ALIAS  BIBLIOGRAPHY_HEADER_CENTER BIBLIOGRAPHY_HDRFTR_CENTER
+.ALIAS  BIBLIOGRAPHY_HEADER_CENTRE BIBLIOGRAPHY_HDRFTR_CENTER
+.
+.ALIAS  ENDNOTES_FOOTER_CENTER ENDNOTES_HDRFTR_CENTER
+.ALIAS  ENDNOTES_FOOTER_CENTRE ENDNOTES_HDRFTR_CENTER
+.ALIAS  ENDNOTES_HEADER_CENTER ENDNOTES_HDRFTR_CENTER
+.ALIAS  ENDNOTES_HEADER_CENTRE ENDNOTES_HDRFTR_CENTER
+.
+.ALIAS  FOOTER_CENTER           HDRFTR_CENTER
+.ALIAS  FOOTER_CENTER_CAPS      _HDRFTR_CAPS
+.ALIAS  FOOTER_CENTER_PAD       HDRFTR_CENTER_PAD
+.ALIAS  FOOTER_CENTER_SMALLCAPS _HDRFTR_SMALLCAPS
+.ALIAS  FOOTER_CENTRE           HDRFTR_CENTER
+.ALIAS  FOOTER_CENTRE_CAPS      _HDRFTR_CAPS
+.ALIAS  FOOTER_CENTRE_PAD       HDRFTR_CENTER_PAD
+.ALIAS  FOOTER_CENTRE_SMALLCAPS _HDRFTR_SMALLCAPS
+.ALIAS  FOOTER_LEFT             HDRFTR_LEFT
+.ALIAS  FOOTER_LEFT_CAPS        _HDRFTR_CAPS
+.ALIAS  FOOTER_LEFT_SMALLCAPS   _HDRFTR_SMALLCAPS
+.ALIAS  FOOTER_PLAIN            HDRFTR_PLAIN
+.ALIAS  FOOTER_RECTO            HDRFTR_RECTO
+.ALIAS  FOOTER_RIGHT            HDRFTR_RIGHT
+.ALIAS  FOOTER_RIGHT_CAPS       _HDRFTR_CAPS
+.ALIAS  FOOTER_RIGHT_SMALLCAPS  _HDRFTR_SMALLCAPS
+.ALIAS  FOOTER_RULE             HDRFTR_RULE
+.ALIAS  FOOTER_RULE_GAP         HDRFTR_RULE_GAP
+.ALIAS  FOOTER_VERSO            HDRFTR_VERSO
+.
+.ALIAS  HEADER_CENTER           HDRFTR_CENTER
+.ALIAS  HEADER_CENTER_CAPS      _HDRFTR_CAPS
+.ALIAS  HEADER_CENTER_PAD       HDRFTR_CENTER_PAD
+.ALIAS  HEADER_CENTER_SMALLCAPS _HDRFTR_SMALLCAPS
+.ALIAS  HEADER_CENTRE           HDRFTR_CENTER
+.ALIAS  HEADER_CENTRE_CAPS      _HDRFTR_CAPS
+.ALIAS  HEADER_CENTRE_PAD       HDRFTR_CENTER_PAD
+.ALIAS  HEADER_CENTRE_SMALLCAPS _HDRFTR_SMALLCAPS
+.ALIAS  HEADER_LEFT             HDRFTR_LEFT
+.ALIAS  HEADER_LEFT_CAPS        _HDRFTR_CAPS
+.ALIAS  HEADER_LEFT_SMALLCAPS   _HDRFTR_SMALLCAPS
+.ALIAS  HEADER_PLAIN            HDRFTR_PLAIN
+.ALIAS  HEADER_RECTO            HDRFTR_RECTO
+.ALIAS  HEADER_RIGHT            HDRFTR_RIGHT
+.ALIAS  HEADER_RIGHT_CAPS       _HDRFTR_CAPS
+.ALIAS  HEADER_RIGHT_SMALLCAPS  _HDRFTR_SMALLCAPS
+.ALIAS  HEADER_RULE             HDRFTR_RULE
+.ALIAS  HEADER_RULE_GAP         HDRFTR_RULE_GAP
+.ALIAS  HEADER_VERSO            HDRFTR_VERSO
+.
+.ALIAS  SWITCH_FOOTERS     SWITCH_HDRFTR
+.ALIAS  SWITCH_HEADERS     SWITCH_HDRFTR
+\#
+\# Create type-style aliases for tags, titles, and page elements
+\#
+\# These are used for creating aliases with while loops
+\#
+.ds ELEMENT_TYPE_1  BIBLIOGRAPHY_STRING
+.ds ELEMENT_TYPE_2  BIBLIOGRAPHY_HEADER
+.ds ELEMENT_TYPE_3  BLOCKQUOTE
+.ds ELEMENT_TYPE_4  CITATION
+.ds ELEMENT_TYPE_5  CITE
+.ds ELEMENT_TYPE_6  ENDNOTES_HEADER
+.ds ELEMENT_TYPE_7  ENDNOTE_STRING
+.ds ELEMENT_TYPE_8  EPIGRAPH
+.ds ELEMENT_TYPE_9  HDRFTR_CENTER
+.ds ELEMENT_TYPE_10 HDRFTR_LEFT
+.ds ELEMENT_TYPE_11 HDRFTR_RIGHT
+.ds ELEMENT_TYPE_12 LINENUMBER
+.ds ELEMENT_TYPE_13 PAGENUM
+.ds ELEMENT_TYPE_14 QUOTE
+.ds ELEMENT_TYPE_15 TOC_HEADER
+.ds ELEMENT_TYPE_16 CODE
+.ds ELEMENT_TYPE_17 FINIS
+.ds ELEMENT_TYPE_18 COPYRIGHT
+\#
+\# Create aliases for _FAMILY
+.ALIAS BIBLIOGRAPHY_FAMILY       _FAMILY
+.ALIAS COVER_FAMILY              _FAMILY
+.ALIAS DOCHEADER_FAMILY          _FAMILY
+.ALIAS DOC_COVER_FAMILY          _FAMILY
+.ALIAS ENDNOTE_FAMILY            _FAMILY
+.ALIAS ENDNOTE_LINENUMBER_FAMILY _FAMILY
+.ALIAS ENDNOTE_NUMBER_FAMILY     _FAMILY
+.ALIAS ENDNOTE_STRING_FAMILY     _FAMILY
+.ALIAS ENDNOTE_TITLE_FAMILY      _FAMILY
+.ALIAS FOOTNOTE_FAMILY           _FAMILY
+.ALIAS HDRFTR_FAMILY             _FAMILY
+.ALIAS PAGENUMBER_FAMILY         _FAMILY
+.ALIAS TOC_FAMILY                _FAMILY
+.ALIAS TOC_PAGENUMBER_FAMILY     _FAMILY
+.ALIAS TOC_PN_FAMILY             _FAMILY
+.ALIAS TOC_TITLE_FAMILY          _FAMILY
+\#
+.nr #LOOP 0 1
+.while \n+[#LOOP]<=18 \{\
+. ALIAS \*[ELEMENT_TYPE_\n[#LOOP]]_FAMILY _FAMILY
+.\}
+\# Covers, docheader
+.nr #LOOP 0 1
+.while \n+[#LOOP]<=12 \{\
+. ALIAS \*[TITLE_TYPE_\n[#LOOP]]_FAMILY           _FAMILY
+. ALIAS COVER_\*[TITLE_TYPE_\n[#LOOP]]_FAMILY     _FAMILY
+. ALIAS DOC_COVER_\*[TITLE_TYPE_\n[#LOOP]]_FAMILY _FAMILY
+.\}
+\#
+\# Create aliases for _FONT
+.ALIAS BIBLIOGRAPHY_FONT       _FONT
+.ALIAS ENDNOTE_FONT            _FONT
+.ALIAS ENDNOTE_LINENUMBER_FONT _FONT
+.ALIAS ENDNOTE_NUMBER_FONT     _FONT
+.ALIAS ENDNOTE_TITLE_FONT      _FONT
+.ALIAS FOOTNOTE_FONT           _FONT
+.ALIAS TOC_PN_FONT             _FONT
+\#
+.nr #LOOP 0 1
+.while \n+[#LOOP]<=18 \{\
+. ALIAS \*[ELEMENT_TYPE_\n[#LOOP]]_FONT _FONT
+.\}
+\# Covers, docheader
+.nr #LOOP 0 1
+.while \n+[#LOOP]<=12 \{\
+. ALIAS \*[TITLE_TYPE_\n[#LOOP]]_FONT           _FONT
+. ALIAS COVER_\*[TITLE_TYPE_\n[#LOOP]]_FONT     _FONT
+. ALIAS DOC_COVER_\*[TITLE_TYPE_\n[#LOOP]]_FONT _FONT
+.\}
+\#
+\# Create aliases for _SIZE
+.ALIAS   ENDNOTE_LINENUMBER_SIZE _SIZE
+.ALIAS   ENDNOTE_NUMBER_SIZE     _SIZE
+.ALIAS   ENDNOTE_TITLE_SIZE      _SIZE
+.ALIAS   FOOTNOTE_SIZE           _SIZE
+.ALIAS   HDRFTR_SIZE             _SIZE
+.ALIAS   TOC_PN_SIZE             _SIZE
+\#
+.nr #LOOP 0 1
+.while \n+[#LOOP]<=18 \{\
+. ALIAS \*[ELEMENT_TYPE_\n[#LOOP]]_SIZE _SIZE
+.\}
+\# Covers, docheader
+.nr #LOOP 0 1
+.while \n+[#LOOP]<=12 \{\
+. ALIAS \*[TITLE_TYPE_\n[#LOOP]]_SIZE           _SIZE
+. ALIAS COVER_\*[TITLE_TYPE_\n[#LOOP]]_SIZE     _SIZE
+. ALIAS DOC_COVER_\*[TITLE_TYPE_\n[#LOOP]]_SIZE _SIZE
+.\}
+\#
+\# Create aliases for TITLE_LEAD
+.nr #LOOP 0 1
+.while \n+[#LOOP]<=12 \{\
+. ALIAS \*[TITLE_TYPE_\n[#LOOP]]_LEAD           TITLE_LEAD
+. ALIAS COVER_\*[TITLE_TYPE_\n[#LOOP]]_LEAD     TITLE_LEAD
+. ALIAS DOC_COVER_\*[TITLE_TYPE_\n[#LOOP]]_LEAD TITLE_LEAD
+.\}
+\#
+\# Create aliases for _UNDERLINE
+.ALIAS BIBLIOGRAPHY_HEADER_UNDERLINE  _UNDERLINE
+.ALIAS BIBLIOGRAPHY_HEADER_UNDERSCORE _UNDERLINE
+.ALIAS BIBLIOGRAPHY_STRING_UNDERLINE  _UNDERLINE
+.ALIAS BIBLIOGRAPHY_STRING_UNDERSCORE _UNDERLINE
+.ALIAS BIB_STRING_UNDERLINE           _UNDERLINE
+.ALIAS ENDNOTES_HEADER_UNDERLINE      _UNDERLINE
+.ALIAS ENDNOTES_HEADER_UNDERSCORE     _UNDERLINE
+.ALIAS ENDNOTES_STRING_UNDERLINE      _UNDERLINE
+.ALIAS ENDNOTES_STRING_UNDERSCORE     _UNDERLINE
+.ALIAS ENDNOTE_TITLE_UNDERLINE        _UNDERLINE
+.ALIAS ENDNOTE_TITLE_UNDERSCORE       _UNDERLINE
+.ALIAS EN_STRING_UNDERLINE            _UNDERLINE
+.ALIAS EN_STRING_UNDERSCORE           _UNDERLINE
+.ALIAS TOC_HEADER_UNDERLINE           _UNDERLINE
+.ALIAS TOC_HEADER_UNDERSCORE          _UNDERLINE
+\#
+.nr #LOOP 0 1
+.while \n+[#LOOP]<=12 \{\
+. ALIAS \*[TITLE_TYPE_\n[#LOOP]]_UNDERLINE            _UNDERLINE
+. ALIAS \*[TITLE_TYPE_\n[#LOOP]]_UNDERSCORE           _UNDERLINE
+. ALIAS COVER_\*[TITLE_TYPE_\n[#LOOP]]_UNDERLINE      _UNDERLINE
+. ALIAS COVER_\*[TITLE_TYPE_\n[#LOOP]]_UNDERSCORE     _UNDERLINE
+. ALIAS DOC_COVER_\*[TITLE_TYPE_\n[#LOOP]]_UNDERLINE  _UNDERLINE
+. ALIAS DOC_COVER_\*[TITLE_TYPE_\n[#LOOP]]_UNDERSCORE _UNDERLINE
+.\}
+\#
+\# Create aliases for _COLOR
+.ALIAS BIBLIOGRAPHY_HEADER_COLOR _COLOR
+.ALIAS COVER_COLOR               _COLOR
+.ALIAS DOCHEADER_COLOR           _COLOR
+.ALIAS ENDNOTE_TITLE_COLOR       _COLOR
+.ALIAS FINIS_COLOR               _COLOR
+.ALIAS FOOTNOTE_COLOR            _COLOR
+.ALIAS HDRFTR_COLOR              _COLOR
+.ALIAS HDRFTR_RULE_COLOR         _COLOR
+.ALIAS LINEBREAK_COLOR           _COLOR
+.ALIAS SECTION_COLOR             _COLOR
+\#
+.nr #LOOP 0 1
+.while \n+[#LOOP]<=18 \{\
+. ALIAS \*[ELEMENT_TYPE_\n[#LOOP]]_COLOR _COLOR
+.\}
+\# Covers, docheader
+.nr #LOOP 0 1
+.while \n+[#LOOP]<=12 \{\
+. ALIAS \*[TITLE_TYPE_\n[#LOOP]]_COLOR           _COLOR
+. ALIAS COVER_\*[TITLE_TYPE_\n[#LOOP]]_COLOR     _COLOR
+. ALIAS DOC_COVER_\*[TITLE_TYPE_\n[#LOOP]]_COLOR _COLOR
+.\}
+\#
+\# Create aliases for _CAPS
+.ALIAS BIBLIOGRAPHY_HEADER_CAPS _CAPS
+.ALIAS BIBLIOGRAPHY_STRING_CAPS _CAPS
+.ALIAS ENDNOTE_TITLE_CAPS       _CAPS
+\#
+.nr #LOOP 0 1
+.while \n+[#LOOP]<=12 \{\
+. ALIAS \*[TITLE_TYPE_\n[#LOOP]]_CAPS           _CAPS
+. ALIAS COVER_\*[TITLE_TYPE_\n[#LOOP]]_CAPS     _CAPS
+. ALIAS DOC_COVER_\*[TITLE_TYPE_\n[#LOOP]]_CAPS _CAPS
+.\}
+\#
+\# Create aliases for _SMALLCAPS
+.ALIAS BIBLIOGRAPHY_HEADER_SMALLCAPS _SMALLCAPS
+.ALIAS BIBLIOGRAPHY_STRING_SMALLCAPS _SMALLCAPS
+.ALIAS ENDNOTE_TITLE_SMALLCAPS       _SMALLCAPS
+.ALIAS HDRFTR_CENTER_SMALLCAPS       _SMALLCAPS
+.ALIAS HDRFTR_LEFT_SMALLCAPS         _SMALLCAPS
+.ALIAS HDRFTR_RIGHT_SMALLCAPS        _SMALLCAPS
+\#
+.nr #LOOP 0 1
+.while \n+[#LOOP]<=12 \{\
+. ALIAS \*[TITLE_TYPE_\n[#LOOP]]_SMALLCAPS           _SMALLCAPS
+. ALIAS COVER_\*[TITLE_TYPE_\n[#LOOP]]_SMALLCAPS     _SMALLCAPS
+. ALIAS DOC_COVER_\*[TITLE_TYPE_\n[#LOOP]]_SMALLCAPS _SMALLCAPS
+.\}
+\#
+\# Create aliases for _QUAD
+.ALIAS  BIBLIOGRAPHY_HEADER_QUAD  _QUAD
+.ALIAS  BIBLIOGRAPHY_QUAD         _QUAD
+.ALIAS  BIBLIOGRAPHY_STRING_QUAD  _QUAD
+.ALIAS  BLOCKQUOTE_QUAD           _QUAD
+.ALIAS  COPYRIGHT_QUAD            _QUAD
+.ALIAS  COVER_COPYRIGHT_QUAD      _QUAD
+.ALIAS  COVER_MISC_QUAD           _QUAD
+.ALIAS  COVER_QUAD                _QUAD
+.ALIAS  DOCHEADER_QUAD            _QUAD
+.ALIAS  DOC_COVER_COPYRIGHT_QUAD  _QUAD
+.ALIAS  DOC_COVER_MISC_QUAD       _QUAD
+.ALIAS  DOC_COVER_QUAD            _QUAD
+.ALIAS  DOC_QUAD                  _QUAD
+.ALIAS  ENDNOTES_HEADER_QUAD      _QUAD
+.ALIAS  ENDNOTE_QUAD              _QUAD
+.ALIAS  ENDNOTE_STRING_QUAD       _QUAD
+.ALIAS  ENDNOTE_TITLE_QUAD        _QUAD
+.ALIAS  EPIGRAPH_QUAD             _QUAD
+.ALIAS  FOOTNOTE_QUAD             _QUAD
+.ALIAS  MISC_QUAD                 _QUAD
+.ALIAS  TOC_HEADER_QUAD           _QUAD
+\#
+\# Support aliases
+\#
+.ALIAS   COL_BREAK               COL_NEXT
+.ALIAS   DOC_COVER               COVER
+.ALIAS   DOC_COVERS              COVERS
+.ALIAS   DOC_COVERTITLE          COVERTITLE
+.ALIAS   DOC_COVER_COUNTS_PAGES  COVER_COUNTS_PAGES
+.ALIAS   DOC_COVER_LEAD          COVER_LEAD
+.ALIAS   DOC_DOC_COVERTITLE      COVERTITLE
+.ALIAS   DO_DOC_COVER            DO_COVER
+.ALIAS   PRINT_FOOTNOTE_RULE     FOOTNOTE_RULE
+\#
+\# Miscellaneous aliases
+.ALIAS   SECTION        LINEBREAK
+.ALIAS   SECTION_CHAR   LINEBREAK_CHAR
+\#
+\# Miscellaneous macros to take care of backward compatibility
+\# -----------------------------------------------------------
+\#
+\# As of 1.1.9, EL and TN got changed to make TRAP...TRAP OFF
+\# unnecessary for users.  However, I used both macros extensively
+\# throughout this file (in conjunction with TRAP...TRAP OFF).
+\# EOL is the old EL; used only in om.tmac.
+\#
+.MAC EOL END
+.    if \\n[.vpt] \{\
+.       vpt 0
+.       nr #RESTORE_TRAP 1
+.    \}
+.    br
+.    sp -1v
+.    if \\n[#RESTORE_TRAP] \{\
+.       vpt
+.       rr #RESTORE_TRAP
+.    \}
+.END
+\#
+\# PREPROCESSOR SUPPORT
+\# ====================
+\#
+\# Utility macros--label and caption styles, lists collector, lists
+\# generator.
+\#
+.nr lists*target 0 1
+.
+.MAC get-label-type END
+.    if \\n[all]=1 .ds label-type eqn
+.    if \\n[all]=2 .ds label-type pdf-img
+.    if \\n[all]=3 .ds label-type pic
+.    if \\n[all]=4 .ds label-type tbl
+.END
+\#
+.MAC set-defaults END
+.    if '\\*[\\*[label-type]*\\*[spec-type]-family]'' \
+.       ds \\*[label-type]*\\*[spec-type]-family \\*[$DOC_FAM]\"
+.    if '\\*[\\*[label-type]*\\*[spec-type]-font]'' \
+.       ds \\*[label-type]*\\*[spec-type]-font R\"
+.    if '\\*[\\*[label-type]*\\*[spec-type]-size-change]'' \
+.       ds \\*[label-type]*\\*[spec-type]-size-change +0\"
+.    if !r \\*[label-type]*\\*[spec-type]-autolead \
+.       nr \\*[label-type]*\\*[spec-type]-autolead 2
+.    if '\\*[\\*[label-type]*\\*[spec-type]-color]'' \
+.       ds \\*[label-type]*\\*[spec-type]-color black\"
+.    if '\\*[\\*[label-type]*\\*[spec-type]-quad]'' \{\
+.       ie '\\*[label-type]'eqn' \{\
+.          if '\\*[spec-type]'caption' \
+.             ds \\*[label-type]*\\*[spec-type]-quad C\"
+.       \}
+.       el .ds \\*[label-type]*\\*[spec-type]-quad L\"
+.    \}
+.    if '\\n[\\*[label-type]*\\*[spec-type]-quad-on-ll]'' \
+.       nr \\*[label-type]*\\*[spec-type]-quad-on-ll 1
+.    if '\\*[spec-type]'caption' \{\
+.       nr default-left 1
+.    \}
+.END
+\#
+.MAC set-inline-specs END
+.    ds \\*[label-type]*\\*[spec-type]-specs \
+\f[\\*[\\*[label-type]*\\*[spec-type]-family]\\*[\\*[label-type]*\\*[spec-type]-font]]\
+\s[\\*[\\*[label-type]*\\*[spec-type]-size-change]]\
+\m[\\*[\\*[label-type]*\\*[spec-type]-color]]
+.END
+\#
+\# Line lengths, indents, and quads for captions and labels.
+\# Aliased for eqn, pic, pdf-image, and tbl.
+\#
+.MAC SET_QUAD END
+.    ds label-type \\$0
+.    substring label-type 0 2
+.    if '\\*[label-type]'PDF'  .ds label-type pdf-img
+.    if '\\*[label-type]'TBL'  .ds label-type tbl
+.    if '\\*[label-type]'PIC'  .ds label-type pic
+.    if '\\*[label-type]'EQN'  .ds label-type eqn
+.    ds spec-type \\$0
+.    substring spec-type -6 -10
+.    if '\\*[spec-type]'PTION' .ds spec-type caption
+.    if '\\*[spec-type]'LABEL' .ds spec-type label
+.    if '\\*[spec-type]'OURCE' .ds spec-type source
+.    QUAD \\$1
+.    ds \\*[label-type]*\\*[spec-type]-quad \\$1
+.    substring \\*[label-type]*\\*[spec-type]-quad 0 0
+.    if '\\*[label-type]'pdf-img' \{\
+.       if '\\*[\\*[label-type]*\\*[spec-type]-quad]'L' \{\
+.          if !\\n[pdf-img*\\*[spec-type]-quad-on-ll] \{\
+.             ie !'\\*[pdf-img:pos]'-R' \
+.                ll \\n[pdf-img:ind]u+\\n[pdf-img:width]u+\\n[pdf-img:frame-inset]u
+.             el .ll -\\n[ind-pre-img]u
+.             if '\\*[pdf-img:pos]'-C' \
+.                in \\n[pdf-img:ind]u-\\n[pdf-img:frame-inset]u
+.             if '\\*[pdf-img:pos]'-R' \
+.                in \\n[.l]u-(\\n[pdf-img:width]u+(\\n[pdf-img:frame-inset]u*2u))
+.             if '\\*[pdf-img:pos]'-I' \
+.                in \\n[pdf-img:ind]u
+.          \}
+.       \}
+.       if '\\*[\\*[label-type]*\\*[spec-type]-quad]'C' \{\
+.          if !\\n[pdf-img*\\*[spec-type]-quad-on-ll] \{\
+.             if '\\*[pdf-img:pos]'-L' \
+.                ll \\n[pdf-img:width]u+(\\n[pdf-img:frame-inset]u*2u)
+.             if '\\*[pdf-img:pos]'-C' \{\
+.                ll (\\n[ll-pre-img]u-\\n[pdf-img:width]u/2u+(\\n[pdf-img:frame-inset]u))+\\n[pdf-img:width]u
+.                in \\n[.l]u-(\\n[pdf-img:width]u+(\\n[pdf-img:frame-inset]u*2u))
+.             \}
+.             if '\\*[pdf-img:pos]'-R' \{\
+.                ll -\\n[ind-pre-img]u
+.                in \\n[.l]u-(\\n[pdf-img:width]u+(\\n[pdf-img:frame-inset]u*2u))
+.             \}
+.             if '\\*[pdf-img:pos]'-I' \{\
+.                ll \\n[pdf-img:ind]u+\\n[pdf-img:width]u+(\\n[pdf-img:frame-inset]u*2u)
+.                in \\n[pdf-img:ind]u
+.             \}
+.          \}
+.       \}
+.       if '\\*[\\*[label-type]*\\*[spec-type]-quad]'R' \{\
+.          if !\\n[pdf-img*\\*[spec-type]-quad-on-ll] \{\
+.             if '\\*[pdf-img:pos]'-L' \
+.                ll \\n[pdf-img:width]u+(\\n[pdf-img:frame-inset]u*2u]
+.             if '\\*[pdf-img:pos]'-C' \{\
+.                ll (\\n[.l]u-\\n[ind-pre-img]u-\\n[pdf-img:width]u/2u)+\\n[pdf-img:width]u+\\n[pdf-img:frame-inset]u
+.                in \\n[pdf-img:ind]u
+.             \}
+.             if '\\*[pdf-img:pos]'-R' \{\
+.                ll -\\n[ind-pre-img]u
+.                in \\n[.l]u-\\n[pdf-img:width]u
+.             \}
+.             if '\\*[pdf-img:pos]'-I' \{\
+.                ll \\n[pdf-img:ind]u+\\n[pdf-img:width]u+(\\n[pdf-img:frame-inset]u*2u)
+.                in \\n[pdf-img:ind]u
+.             \}   
+.          \}
+.       \}
+.    \}
+.    if '\\*[label-type]'pic' \{\
+.       if !\\n[pic*\\*[spec-type]-quad-on-ll] \{\
+.          ie \\n[pic*left] .ll \\n[pic*div-width]u
+.          el \{\
+.             ll \\n[pic*div-width]u
+\!.           in \\n[ll-pre-pic]u-\\n[pic*div-width]u/2u
+.          \}
+.       \}
+.    \}
+.    if '\\*[label-type]'tbl' \{\
+.       if !\\n[tbl*\\*[spec-type]-quad-on-ll] \{\
+.          ie \\n[tbl*center] \{\
+.             ie '\\*[spec-type]'label' \{\
+.                ll \\n[ll-pre-tbl]u-\\n[TW]u/2u+\\n[TW]u
+\!.                in \\n[ll-pre-tbl]u-\\n[TW]u/2u
+.             \}
+.             el \{\
+.                ll \\n[TW]u
+\!.              in \\n[ll-pre-tbl]u-\\n[TW]u/2u
+.             \}
+.          \}
+.          el .ll \\n[TW]u
+.       \}
+.    \}
+.END
+\#
+.ALIAS TBL*SET_CAPTION_QUAD     SET_QUAD
+.ALIAS TBL*SET_LABEL_QUAD       SET_QUAD
+.ALIAS TBL*SET_SOURCE_QUAD      SET_QUAD
+.ALIAS PDF_IMG*SET_CAPTION_QUAD SET_QUAD
+.ALIAS PDF_IMG*SET_LABEL_QUAD   SET_QUAD
+.ALIAS PIC*SET_CAPTION_QUAD     SET_QUAD
+.ALIAS PIC*SET_LABEL_QUAD       SET_QUAD
+\#
+.MAC style END
+.    ds label-type \\$0
+.    substring label-type 0 2
+.    if '\\*[label-type]'img' .ds label-type pdf-img
+.    if '\\*[label-type]'tbl' .ds label-type tbl
+.    if '\\*[label-type]'pic' .ds label-type pic
+.    ds spec-type \\$0
+.    substring spec-type 4 6
+.    if '\\*[spec-type]'cap' .ds spec-type caption
+.    if '\\*[spec-type]'lab' .ds spec-type label
+.    if '\\*[spec-type]'sou' .ds spec-type source
+.    fam \\*[\\*[label-type]*\\*[spec-type]-family]
+.    ft \\*[\\*[label-type]*\\*[spec-type]-font]
+.    ps \\n[#DOC_PT_SIZE]u\\*[\\*[label-type]*\\*[spec-type]-size-change]
+.    gcolor \\*[\\*[label-type]*\\*[spec-type]-color]
+.END
+\#
+.ALIAS tbl*caption-style style
+.ALIAS tbl*label-style   style
+.ALIAS tbl*source-style  style
+.ALIAS img*caption-style style
+.ALIAS img*label-style   style
+.ALIAS img*source-style  style
+.ALIAS pic*caption-style style
+.ALIAS pic*label-style   style
+.ALIAS pic*source-style  style
+\#
+\# User style macros
+\#
+\# TYPE SPECS FOR LABELS, CAPTIONS, AND SOURCES
+\# --------------------------------------------
+\#  Aliased as CAPTIONS and LABELS for eqn, pic, tbl, and pdf images.
+\# *Arguments:
+\#   EQN | IMG | PIC | TBL \
+\#   Remaining arguments are optional
+\#   FAMILY fam \
+\#   FONT   sty \
+\#   SIZE   +|-size \
+\#   QUAD   LEFT | CENTRE | RIGHT [ ON_LL ] \
+\#   COLOR  color \
+\#   AUTOLEAD n \
+\#   ADJUST   +|-n
+\# *Function:
+\#   Sets type specs for captions, labels, and sources according to
+\#   calling alias name
+\# *Notes:
+\#   SIZE is relative to running text.
+\#   QUAD optional arg says quad on full line length rather than
+\#    pdf-img or pre-processor output.  
+\#
+.MAC CAPTION_LABEL_SPECS END
+.    if '\\$0'CAPTIONS' .ds spec-type caption
+.    if '\\$0'LABELS'   .ds spec-type label
+.    if '\\$0'SOURCES'  .ds spec-type source
+.    if '\\$1'EQN' .ds label-type eqn
+.    if '\\$1'IMG' .ds label-type pdf-img
+.    if '\\$1'PIC' .ds label-type pic
+.    if '\\$1'TBL' .ds label-type tbl
+.    if '\\$1'ALL' .nr all 1
+.    shift
+.    nr loop-counter \\n[#NUM_ARGS]
+.    nr loop-count 0 1
+.    while \\n+[loop-count]<=\\n[loop-counter] \{\
+.       if '\\$1'FAMILY' \{\
+.          shift
+.          ie r all \{\
+.             nr all 0 1
+.             while \\n+[all]<=4 \{\
+.                 get-label-type
+.                 ds \\*[label-type]*\\*[spec-type]-family \\$1
+.             \}
+.          \}
+.          el .ds \\*[label-type]*\\*[spec-type]-family \\$1
+.          if \\n[#PRINT_STYLE]=1 \
+.             ds \\*[label-type]*\\*[spec-type]-family \\*[$TYPEWRITER_FAM]
+.          shift
+.       \}
+.       if '\\$1'FONT' \{\
+.          shift
+.          ie r all \{\
+.             nr all 0 1
+.             while \\n+[all]<=4 \{\
+.                 get-label-type
+.                 ds \\*[label-type]*\\*[spec-type]-font \\$1
+.             \}
+.          \}
+.          el .ds \\*[label-type]*\\*[spec-type]-font \\$1
+.          if \\n[#PRINT_STYLE]=1 \
+.             ds \\*[label-type]*\\*[spec-type]-font R
+.          shift
+.       \}
+.       if '\\$1'SIZE' \{\
+.          shift
+.          ie r all \{\
+.             nr all 0 1
+.             while \\n+[all]<=4 \{\
+.                 get-label-type
+.                 ds \\*[label-type]*\\*[spec-type]-size-change \\$1
+.             \}
+.          \}
+.          el .ds \\*[label-type]*\\*[spec-type]-size-change \\$1
+.          if \\n[#PRINT_STYLE]=1 \
+.             ds \\*[label-type]*\\*[spec-type]-size-change +0
+.          shift
+.       \}
+.       if '\\$1'AUTOLEAD' \{\
+.          shift
+.          ie r all \{\
+.             nr all 0 1
+.             while \\n+[all]<=4 \{\
+.                 get-label-type
+.                 nr \\*[label-type]*\\*[spec-type]-autolead (p;\\$1)
+.             \}
+.          \}
+.          el .nr \\*[label-type]*\\*[spec-type]-autolead (p;\\$1)
+.          shift
+.       \}
+.       if '\\$1'QUAD' \{\
+.          shift
+.          ie r all \{\
+.             nr all 0 1
+.             while \\n+[all]<=4 \{\
+.                 get-label-type
+.                 ds \\*[label-type]*\\*[spec-type]-quad \\$1
+.                 substring \\*[label-type]*\\*[spec-type]-quad 0 0
+.             \}
+.          \}
+.          el \{\
+.             ds \\*[label-type]*\\*[spec-type]-quad \\$1
+.             substring \\*[label-type]*\\*[spec-type]-quad 0 0
+.             if \\n[\\*[label-type]*\\*[spec-type]-quad-on-ll] \
+.                rr \\*[label-type]*\\*[spec-type]-quad-on-ll 
+.          \}
+.          shift
+.          if '\\$1'ON_LL' \{\
+.             nr \\*[label-type]*\\*[spec-type]-quad-on-ll 1
+.             shift
+.          \}
+.       \}
+.       if '\\$1'COLOR' \{\
+.          shift
+.          ie r all \{\
+.             nr all 0 1
+.             while \\n+[all]<=4 \{\
+.                 get-label-type
+.                 ds \\*[label-type]*\\*[spec-type]-color \\$1
+.             \}
+.          \}
+.          el .ds \\*[label-type]*\\*[spec-type]-color \\$1
+.          if \\n[#PRINT_STYLE]=1 \
+.             ds \\*[label-type]*\\*[spec-type]-color black
+.          shift
+.       \}
+.       if '\\$1'ADJUST' \{\
+.          shift
+.          ie r all \{\
+.             nr all 0 1
+.             while \\n+[all]<=4 \{\
+.                 get-label-type
+.                 ds \\*[label-type]*\\*[spec-type]-space \\$1
+.             \}
+.          \}
+.          el .ds \\*[label-type]*\\*[spec-type]-space \\$1
+.          if \\n[#PRINT_STYLE]=1 \
+.             ds \\*[label-type]*\\*[spec-type]-space +0
+.          shift
+.       \}
+.    \}
+.    ie r all \{\
+.       nr all 0 1
+.       while \\n+[all]<=4 \{\
+.          get-label-type
+.          set-defaults
+.          set-inline-specs
+.       \}
+.    \}
+.    el \{\
+.       set-defaults
+.       set-inline-specs
+.    \}
+.    ds revert-specs \f[]\s[0]\m[]
+.    rr all
+.END
+\#
+.ALIAS CAPTIONS CAPTION_LABEL_SPECS
+.ALIAS LABELS   CAPTION_LABEL_SPECS
+.ALIAS SOURCES  CAPTION_LABEL_SPECS
+\#
+\# CAPTION_AFTER_LABEL
+\# -------------------
+\# *Arguments:
+\#   <none> | <anything>
+\# *Function:
+\#   Sets register indicating non-MLA captions should come after labels.
+\#
+.MAC CAPTION_AFTER_LABEL END
+.    if '\\$1'IMG' .ds type pdf-img
+.    if '\\$1'PIC' .ds type pic
+.    if '\\$1'TBL' .ds type tbl
+.    if !\\n[#MLA] \{\
+.       nr \\*[type]*caption-after-label 1
+.       if '\\$1'ALL' \{\
+.          if '\\$1'IMG' .nr pdf-img*caption-after-label 1
+.          if '\\$1'TBL' .nr tbl*caption-after-label 1
+.          if '\\$1'PIC' .nr pic*caption-after-label 1
+.       \}
+.       if !'\\$2'' \{\
+.          ie !'\\$1'ALL' .rr \\*[type]*caption-after-label
+.          el \{\
+.             rr pdf-img*caption-after-label
+.             rr tbl*caption-after-label
+.             rr pic*caption-after-label
+.          \}
+.       \}
+.    \}
+.END
+\#
+\# AUTOLABELLING
+\# -------------
+\# *Argument:
+\#   [ PREFIX <prefix> SUFFIX <suffix> ] | <anything>
+\# *Function:
+\#   Turns label autonumbering on of off; optionally lets user set
+\#   prefix and suffix for labels.
+\# *Notes:
+\#   Aliased for images (pdf), tbl, pic, and eqn.
+\#
+.MAC AUTOLABEL END
+.    if '\\$0'AUTOLABEL_EQUATIONS' .ds label-type eqn
+.    if '\\$0'AUTOLABEL_IMAGES'    .ds label-type pdf-img
+.    if '\\$0'AUTOLABEL_PIC'       .ds label-type pic
+.    if '\\$0'AUTOLABEL_TABLES'    .ds label-type tbl
+.    if !'\\$1'' \{\
+.       ds \\*[label-type]-label-args \\$1
+.       substring \\*[label-type]-label-args -1 -3
+.    \}
+.    if '\\*[\\*[label-type]-label-args]'FIX' .nr \\*[label-type]-label-args 1
+.    if '\\*[\\*[label-type]-label-args]'TER' .nr \\*[label-type]-label-args 1
+.    if !\\n[\\*[label-type]*label-num] \
+.       nr \\*[label-type]*label-num 0 1
+.    if '\\*[label-type]'pdf-img' .nr fig*label-num 0 1
+.    if '\\*[label-type]'pic'     .nr fig*label-num 0 1
+.    nr \\*[label-type]*autolabel 1
+.    nr loop-counter 0 1
+.    nr loop-count \\n[#NUM_ARGS]
+.    while \\n+[loop-counter]<=\\n[loop-count] \{\
+.       if '\\$1'PREFIX' \{\
+.          ds \\*[label-type]*label-prfx \\$2
+.          nr \\*[label-type]*label-prfx-set 1
+.          shift 2
+.       \}
+.       if '\\$1'SUFFIX' \{\
+.          ds \\*[label-type]*label-sffx \\$2
+.          nr \\*[label-type]*label-sffx-set 1
+.          shift 2
+.       \}
+.       if '\\$1'PREFIX_CHAPTER' \{\
+.          nr \\*[label-type]*label-with-chapter 1
+.          ie !'\\$2'' \{\
+.             ie \B'\\$2' .nr #CH_NUM \\$2
+.             el .autolabel@error
+.          \}
+.          el \{\
+.             ie \\n[#CHAPTER_CALLED] \
+.                ie \B'\\*[$CHAPTER]' .nr #CH_NUM \\*[$CHAPTER]
+.                el .autolabel@error \\$0
+.             el .autolabel@error \\$0
+.          \}
+.          shift 2
+.       \}
+.    \}
+.    if '\\*[\\*[label-type]*label-prfx]'' \{\
+.       if '\\*[label-type]'eqn' \
+.          if !\\n[\\*[label-type]*label-prfx-set] \
+.             ds \\*[label-type]*label-prfx (\"
+.       if '\\*[label-type]'pic' \
+.          if !\\n[\\*[label-type]*label-prfx-set] \
+.             ds \\*[label-type]*label-prfx Fig. \"
+.       if '\\*[label-type]'pdf-img' \
+.          if !\\n[\\*[label-type]*label-prfx-set] \
+.             ds \\*[label-type]*label-prfx Fig. \"
+.       if '\\*[label-type]'tbl' \
+.          if !\\n[\\*[label-type]*label-prfx-set] \
+.             ds \\*[label-type]*label-prfx Table \"
+.    \}
+.    if '\\*[\\*[label-type]*label-sffx]'' \{\
+.       if '\\*[label-type]'eqn' \
+.          if !\\n[\\*[label-type]*label-sffx-set] \
+.             ds \\*[label-type]*label-sffx )\"
+.       if '\\*[label-type]'pic' \
+.          if !\\n[\\*[label-type]*label-sffx-set] \
+.             ds \\*[label-type]*label-sffx .\"
+.       if '\\*[label-type]'pdf-img' \
+.          if !\\n[\\*[label-type]*label-sffx-set] \
+.             ds \\*[label-type]*label-sffx .\"
+.       if '\\*[label-type]'tbl' \
+.          if !\\n[\\*[label-type]*label-sffx-set] \
+.             ds \\*[label-type]*label-sffx .\"
+.    \}
+.    ie \\n[args]>0 \{\
+.       if \\n[\\*[label-type]*label-prfx-set]+\\n[\\*[label-type]*label-sffx-set]=1 \{\
+.          ie (\\n[\\*[label-type]*label-prfx-set]=1)&(\\n[\\*[label-type]*label-sffx-set]=0) \
+.             ds missing-arg SUFFIX
+.          el .ds missing-arg PREFIX
+.          tm1 "[mom]: You must supply a \\*[missing-arg] argument to \\$0.
+.          tm1 "       If you wish the \\*[missing-arg] to be blank, use \\*[missing-arg] "".
+.          ab   [mom]: Aborting '\\n[.F]' at \\$0, line \\n[.c].
+.       \}
+.       if !\\n[\\*[label-type]-label-args] \{\
+.          rr \\*[label-type]*autolabel
+.          rr \\*[label-type]*label-prfx-set
+.          rr \\*[label-type]*label-suffx-set
+.          rr \\*[label-type]-label-args
+.       \}
+.    \}
+.    rr \\*[label-type]-label-args
+.END
+\#
+.ALIAS AUTOLABEL_EQUATIONS AUTOLABEL
+.ALIAS AUTOLABEL_IMAGES    AUTOLABEL
+.ALIAS AUTOLABEL_PIC       AUTOLABEL
+.ALIAS AUTOLABEL_TABLES    AUTOLABEL
+\#
+.MAC autolabel@error END
+.    tm1 "[mom]: \\$1 cannot determine a chapter number.
+.    tm1 "       Enter the current chapter number as a digit after the
+.    tm1 "       PREFIX_CHAPTER argument at line \\n[.c].
+.    ab   [mom]: Aborting '\\n[.F]', line \\n[.c]. 
+.END
+\#
+\# MLA STYLE
+\# ---------
+\# *Argument:
+\#   <none> | <anything>
+\# *Function:
+\#   Sets or removes register #MLA.
+\# *Notes:
+\#   MLA formatting differs from other styles wrt caption and
+\#   label placement.
+\#
+.MAC MLA END
+.    ie '\\$1'' \{\
+.       nr #MLA 1
+.       nr pdf-img*caption-after-label 1
+.       nr pic*caption-after-label 1
+.       rr tbl*caption-after-label
+.    \}
+.    el \{\
+.       rr #MLA
+.    \}
+.END
+\#
+.MAC mla@error END
+.    tm1 "[mom]: MLA style enabled, but \\$1 has no corresponding \\$2.
+.    ab   [mom]: Aborting '\\$3' at \\$4, line \\$5.
+.END
+\#
+\# LISTS_OF
+\# --------
+\# *Aliases:
+\#   LIST_OF_EQUATIONS
+\#   LIST_OF_FIGURES
+\#   LIST_OF_TABLES
+\# *Arguments:
+\#   TITLE_STRING <string> START_PAGENUM <pagenumber>
+\# *Function:
+\#   Generates lists-of based on calling alias.
+\# *Notes:
+\#   Called at end of file.
+\#   If after TOC, and TOC is being auto-relocated, lists are also
+\#   relocated.  If called before, lists are output at end of file.
+\#
+.MAC LISTS_OF END
+.    ds $LIST_TYPE \\$0
+.    substring $LIST_TYPE -1 -4
+.    if '\\*[$LIST_TYPE]'URES' \{\
+.       ds $LIST_TYPE FIGURES
+.       ds \\*[$LIST_TYPE]_TITLE_STRING "List of Figures
+.    \}
+.    if '\\*[$LIST_TYPE]'BLES' \{\
+.       ds $LIST_TYPE TABLES
+.       ds \\*[$LIST_TYPE]_TITLE_STRING "List of Tables
+.    \}
+.    if '\\*[$LIST_TYPE]'IONS' \{\
+.       ds $LIST_TYPE EQUATIONS
+.       ds \\*[$LIST_TYPE]_TITLE_STRING "List of Equations
+.    \}
+.    nr #LIST_OF_\\*[$LIST_TYPE] 1
+.    nr loop-count 0 1
+.    nr loop-counter \\n[#NUM_ARGS]
+.    while \\n+[loop-count]<=\\n[loop-counter] \{\
+.       if '\\$1'TITLE_STRING' \{\
+.          ds \\*[$LIST_TYPE]_TITLE_STRING \\$2
+.          shift 2
+.       \}
+.       if '\\$1'START_PAGENUM' \{\
+.          nr #\\*[$LIST_TYPE]_START_PAGENUM \\$2
+.          shift 2
+.       \}
+.    \}
+.    char \[leader] " .
+.    LEADER_CHARACTER \[leader]
+.    if \\n[#LINENUMBERS]=1 \{\
+.       NUMBER_LINES OFF
+.       nr #LINENUMBERS 2
+.    \}
+.    if \\n[#FINIS] \{\
+.       if \\n[#FOOTERS_WERE_ON] \
+.          FOOTERS
+.    \}
+.    if \\n[#FOOTERS_ON]=1 \{\
+.       if !'\\*[$HDRFTR_CENTER_OLD]'' .ds $HDRFTR_CENTER \\*[$HDRFTR_CENTER_OLD]
+.       ie \\n[#LISTS_NO_PAGENUM]=1 .PAGINATION off
+.       el .PAGINATE
+.    \}
+.    if \\n[#FOOTERS_WERE_ON] .FOOTERS OFF
+.    rr #COLUMNS
+.    COLLATE
+.    if \\n[#PRINT_STYLE]=1 \{\
+.       if \\n[#SINGLE_SPACE] .LS 24
+.       DOC_LEAD_ADJUST
+.    \}
+.    if \\n[#FINIS] \{\
+.       if \\n[#FOOTERS_WERE_ON] .FOOTERS
+.       rr #FOOTERS_WERE_ON
+.       if \\n[#PAGINATION_WAS_ON] \{\
+.          nr #PAGINATE 1
+.          rr #PAGINATION_WAS_ON
+.       \}
+.       rr #FINIS
+.    \}
+.    ds $HDRFTR_CENTER \\*[$HDRFTR_CENTER_NEW]
+.    rm $HDRFTR_CENTER_OLD
+.    rm $HDRFTR_CENTER_NEW
+.    rr #COLLATED_DOC
+.    DOCTYPE DEFAULT
+.    DOCHEADER
+.    TITLE "\\*[\\*[$LIST_TYPE]_TITLE_STRING]
+.    AUTHOR ""
+.    L_MARGIN \\n[#DOC_L_MARGIN]u
+.    LL       \\n[#DOC_L_LENGTH]u
+.    if '\\*[$LISTS_FAM]'' \
+.       ds $LISTS_FAM \\*[$TOC_FAM]
+.    if '\\*[$LISTS_FT]'' \
+.       ds $LISTS_FT \\*[$TOC_TITLE_FT]
+.    if !\\n[#LISTS_PS] \
+.       nr #LISTS_PS \\n[#TOC_PS]
+.    ps \\n[#LISTS_PS]u
+.    if !\\n[#LISTS_LEAD] \
+.       nr #LISTS_LEAD \\n[#TOC_LEAD]
+.    if \\n[#PRINT_STYLE]=2 \{\
+.       ie \\n[#LISTS_LEAD_ADJUST]=1 \{\
+.          vs \\n[#LISTS_LEAD]u
+.          DOC_LEAD_ADJUST
+.       \}
+.       el \{\
+.          vs \\n[#LISTS_LEAD]u
+.          DOC_LEAD_ADJUST OFF
+.       \}
+.    \}
+.    ie !'\\*[$LISTS_TITLE_QUAD]'' \
+.       DOCHEADER_QUAD \\*[$LISTS_TITLE_QUAD]
+.    el .DOC_HEADER_QUAD \\*[$TOC_HEADER_QUAD]
+.    if !'\\*[$LISTS_TITLE_FAM]'' \
+.       TITLE_FAMILY \\*[$LISTS_TITLE_FAM]
+.    if !'\\*[$LISTS_TITLE_FT]'' \
+.       TITLE_FONT  \\*[$LISTS_TITLE_FT]
+.    if !'\\*[$LISTS_TITLE_SIZE]'' \
+.       TITLE_SIZE \\*[$LISTS_TITLE_SIZE]
+.    if !'\\*[$LISTS_TITLE_COLOR]'' \
+.       TITLE_COLOR \\*[$LISTS_TITLE_COLOR]
+.    if \\n[#LISTS_TITLE_CAPS] \
+.       TITLE_CAPS
+.    if \\n[#LISTS_TITLE_SMALLCAPS] \
+.       TITLE_SMALLCAPS
+.    if \\n[#LISTS_TITLE_UNDERSCORE] \{\
+.       TITLE_UNDERSCORE \
+\\*[DOUBLE] \
+\\*[$LISTS_OF_UL_WT] \
+\\*[$LISTS_OF_UL_GAP] \
+\\*[$LISTS_OF_RULE_GAP]
+.    \}
+.    if '\\*[$LISTS_PN_FAM]'' \
+.       ds $LISTS_PN_FAM \\*[$TOC_PN_FAM]
+.    if '\\*[$LISTS_PN_FT]'' \
+.       ds $LISTS_PN_FT \\*[$TOC_PN_FT]
+.    if '\\*[$LISTS_PN_SIZE_CHANGE]'' \
+.       ds $LISTS_PN_SIZE_CHANGE \\*[$TOC_PN_SIZE_CHANGE]
+.    if !\\n[#EQN_PN_PADDING] \
+.       nr #EQN_PN_PADDING \\n[#TOC_PN_PADDING]
+.    if !\\n[#FIG_PN_PADDING] \
+.       nr #FIG_PN_PADDING \\n[#TOC_PN_PADDING]
+.    if !\\n[#TBL_PN_PADDING] \
+.       nr #TBL_PN_PADDING \\n[#TOC_PN_PADDING]
+.    ie '\\*[$LISTS_PAGENUM_STYLE]'' \
+.       PAGENUM_STYLE \\*[$TOC_PAGENUM_STYLE]
+.    el \
+.       PAGENUM_STYLE \\*[$LISTS_PAGENUM_STYLE]
+.    if r #\\*[$LIST_TYPE]_START_PAGENUM  \
+.       PAGENUMBER \\n[#\\*[$LIST_TYPE]_START_PAGENUM]
+.    if r #LISTS_NO_PAGENUM .PAGINATION off
+.    HEADER_LEFT "\\*[$HDRFTR_LEFT]
+.    HEADER_RIGHT "\\*[$HDRFTR_RIGHT]
+.    HEADER_CENTER "\\*[\\*[$LIST_TYPE]_TITLE_STRING]
+.    if \\n[#LINENUMBERS]=2 .nr #LINENUMBERS 3
+.\" Get num placeholders for ch. num and label num.
+.    if \\n[\\*[list-type]*autolabel] \{\
+.       if \\n[#CH_NUM]<1000 .nr chapno-width 3
+.       if \\n[#CH_NUM]<100  .nr chapno-width 2
+.       if \\n[#CH_NUM]<10   .nr chapno-width 1
+.       if \\n[\\*[list-type]*label-width]<1000 .nr label-width 3
+.       if \\n[\\*[list-type]*label-width]<100  .nr label-width 2
+.       if \\n[\\*[list-type]*label-width]<10   .nr label-width 1
+.\" Calculate width of label-num tab
+.       nr label-width \w'\0'*(\\n[chapno-width]+\\n[label-width])+\w'.'
+.    \}
+.    if \\n[#SLANT_ON] .nop \\*[SLANTX]
+.    if \\n[#COLUMNS]=1 .nr #COLUMNS 0
+.    START
+.    if \\n[#PRINT_STYLE]=2 .sp -1
+.    if '\\*[$LIST_TYPE]'FIGURES'   .LIST_OF_FIG
+.    if '\\*[$LIST_TYPE]'TABLES'    .LIST_OF_TBL
+.    if '\\*[$LIST_TYPE]'EQUATIONS' .LIST_OF_EQN
+.    if \\n[#LINENUMBERS]=3 \{\
+.       NUMBER_LINES RESUME
+.       nr #LINENUMBERS 1
+.       nn 1
+.    \}
+.    pdfsync
+.END
+.\"
+.ALIAS LIST_OF_EQUATIONS LISTS_OF
+.ALIAS LIST_OF_FIGURES   LISTS_OF
+.ALIAS LIST_OF_TABLES    LISTS_OF
+\#
+\# LISTS-OF STYLE
+\# --------------
+\# *Arguments:
+\#   FAMILY        fam \
+\#   FONT          sty \
+\#   PT_SIZE       size \
+\#   LEAD          leading [ADJUST] \
+\#   TITLE_FAMILY  fam \
+\#   TITLE_FONT    sty \
+\#   TITLE_SIZE    +|-size \
+\#   TITLE_QUAD    LEFT | CENTER | RIGHT \
+\#   TITLE_COLOR   color \
+\#   TITLE_CAPS    \
+\#   TITLE_NO_CAPS \
+\#   TITLE_SMALLCAPS \
+\#   TITLE_NO_SMALLCAPS \
+\#   TITLE_UNDERSCORE [ DOUBLE] <wt> <gap> (dbl-rule-gap) \
+\#   NO_PAGINATION \
+\#   PAGENUM_STYLE format \
+\#   PN_FAMILY     fam \
+\#   PN_FONT       sty \
+\#   PN_SIZE       +|-size \
+\#   PN_PADDING    n
+\# *Function:
+\#   Allows setting of all style parameters for lists-of.
+\# *Notes:
+\#   Assumption is that lists-of will all have the same style.
+\#   TOC style is used if LISTS_STYLE is omitted.
+\#
+.MAC LISTS_STYLE END
+.    nr loop-count 0 1
+.    nr loop-counter \\n[#NUM_ARGS]
+.    while \\n+[loop-count]<=\\n[loop-counter] \{\
+.       if '\\$1'FAMILY' \{\
+.          ds $LISTS_FAM \\$2
+.          shift 2
+.       \}
+.       if '\\$1'FONT' \{\
+.          ds $LISTS_FT \\$2
+.          shift 2
+.       \}
+.       if '\\$1'TITLE_FAMILY' \{\
+.          ds $LISTS_TITLE_FAM \\$2
+.          shift 2
+.       \}
+.       if '\\$1'TITLE_FONT' \{\
+.          ds $LISTS_TITLE_FT \\$2
+.          shift 2
+.       \}
+.       if '\\$1'TITLE_SIZE' \{\
+.          ds $LISTS_TITLE_SIZE \\$2
+.          shift 2
+.       \}
+.       if '\\$1'TITLE_QUAD' \{\
+.          ds $LISTS_TITLE_QUAD \\$2
+.          shift 2
+.       \}
+.       if '\\$1'TITLE_COLOR' \{\
+.          ds $LISTS_TITLE_COLOR \\$2
+.          shift 2
+.       \}
+.       if '\\$1'TITLE_CAPS' \{\
+.          nr #LISTS_TITLE_CAPS 1
+.          shift 1
+.       \}
+.       if '\\$1'TITLE_NO_CAPS' \{\
+.          rr #LISTS_TITLE_CAPS
+.          shift 1
+.       \}
+.       if '\\$1'TITLE_SMALLCAPS' \{\
+.          nr #LISTS_TITLE_SMALLCAPS 1
+.          shift 1
+.       \}
+.       if '\\$1'TITLE_NO_SMALLCAPS' \{\
+.          rr #LISTS_TITLE_NO_SMALLCAPS
+.          shift 1
+.       \}
+.\" UNDERSCORE and UNDERLINE are identical, but we can't evaluate
+.\" the results of two string comparisons.
+.       if '\\$1'TITLE_UNDERSCORE' \{\
+.          nr #LISTS_TITLE_UNDERSCORE 1
+.          shift
+.          ie '\\$1'DOUBLE' \{\
+.             ds DOUBLE DOUBLE
+.             shift
+.             if \B'\\$1' \{\
+.                ds $LISTS_OF_UL_WT \\$1
+.                shift
+.             \}
+.             if \B'\\$1' \{\
+.                ds $LISTS_OF_UL_GAP \\$1
+.                shift
+.             \}
+.             if \B'\\$1' \{\
+.                ds $LISTS_OF_RULE_GAP \\$1
+.                shift
+.             \}
+.          \}
+.          el \{\
+.             if \B'\\$1' \{\
+.                ds $LISTS_OF_UL_WT \\$1
+.                shift
+.             \}
+.             if \B'\\$1' \{\
+.                ds $LISTS_OF_UL_GAP \\$1
+.                shift
+.             \}
+.          \}
+.       \}
+.       if '\\$1'TITLE_UNDERLINE' \{\
+.          nr #LISTS_TITLE_UNDERSCORE 1
+.          shift
+.          ie '\\$1'DOUBLE' \{\
+.             ds DOUBLE DOUBLE
+.             shift
+.             if \B'\\$1' \{\
+.                ds $LISTS_OF_UL_WT \\$1
+.                shift
+.             \}
+.             if \B'\\$1' \{\
+.                ds $LISTS_OF_UL_GAP \\$1
+.                shift
+.             \}
+.             if \B'\\$1' \{\
+.                ds $LISTS_OF_RULE_GAP \\$1
+.                shift
+.             \}
+.          \}
+.          el \{\
+.             if \B'\\$1' \{\
+.                ds $LISTS_OF_UL_WT \\$1
+.                shift
+.             \}
+.             if \B'\\$1' \{\
+.                ds $LISTS_OF_UL_GAP \\$1
+.                shift
+.             \}
+.          \}
+.       \}
+.       if '\\$1'TITLE_NO_UNDERSCORE' \{\
+.          rr #LISTS_TITLE_UNDERSCORE 1
+.          rm DOUBLE
+.          rm $LISTS_OF_UL_WT
+.          rm $LISTS_OF_UL_GAP
+.          rm $LISTS_OF_RULE_GAP
+.          shift
+.       \}
+.       if '\\$1'TITLE_NO_UNDERLINE' \{\
+.          rr #LISTS_TITLE_UNDERSCORE 1
+.          rm DOUBLE
+.          rm $LISTS_OF_UL_WT
+.          rm $LISTS_OF_UL_GAP
+.          rm $LISTS_OF_RULE_GAP
+.          shift
+.       \}
+.       if '\\$1'PT_SIZE' \{\
+.          nr #LISTS_PS (p;\\$2)
+.          shift 2
+.       \}
+.       if '\\$1'LEAD' \{\
+.          nr #LISTS_LEAD (p;\\$2)
+.          ie !'\\$3'ADJUST' \{\
+.             nr #LISTS_LEAD_ADJUST 0
+.             shift 2
+.          \}
+.          el \{\
+.             nr #LISTS_LEAD_ADJUST 1
+.             shift 3
+.          \}
+.       \}
+.       if '\\$1'NO_PAGINATION' \{\
+.          nr #LISTS_NO_PAGENUM 1
+.          shift 1
+.       \}
+.       if '\\$1'PAGENUM_STYLE' \{\
+.          ds $LISTS_PAGENUM_STYLE \\$2
+.          shift 2
+.       \}
+.       if '\\$1'PN_FAMILY' \{\
+.          ds $LISTS_PN_FAM \\$2
+.          shift 2
+.       \}
+.       if '\\$1'PN_FONT' \{\
+.          ds $LISTS_PN_FT \\$2
+.          shift 2
+.       \}
+.       if '\\$1'PN_SIZE' \{\
+.          ds $LISTS_PN_SIZE_CHANGE \\$2
+.          shift 2
+.       \}
+.       if '\\$1'EQN_PN_PADDING' \{\
+.          nr #EQN_PN_PADDING \\$2
+.          shift 2
+.       \}
+.       if '\\$1'FIG_PN_PADDING' \{\
+.          nr #FIG_PN_PADDING \\$2
+.          shift 2
+.       \}
+.       if '\\$1'TBL_PN_PADDING' \{\
+.          nr #TBL_PN_PADDING \\$2
+.          shift 2
+.       \}
+.    \}
+.END
+\#
+\# Lists-of collector
+\# Strings to allocate space for leaders and entry page numbers
+\#
+.ds $LISTS_PN \\*[ST102]\F[\\*[$LISTS_PN_FAM]]\f[\\*[$LISTS_PN_FT]]\
+\s[\\n[#LISTS_PS]u]^\\*[ST102X]\\*[ST103]\s[\\\\*[$LISTS_PN_SIZE_CHANGE]]\
+\|\|\|\h'\w'0'u*\\\\n[#LISTS_PN_PADDING]u'\\*[ST103X]
+\#
+.ds $LISTS_PN_TYPEWRITE \\*[ST102]^\\*[ST102X]\\*[ST103]\|\
+\h'\w'0'u*\\\\n[#LISTS_PN_PADDING]u'\\*[ST103X]
+\#
+.MAC LISTS_COLLECTOR END
+.    if '\\$0'TO_EQUATIONS' \{\
+.       ds list-type eqn
+.       da LIST_OF_EQN
+\!.       nr #LISTS_PN_PADDING \\\\n[#EQN_PN_PADDING]
+.       nr label-width \w'\\$1'
+.    \}
+.    if '\\$0'TO_FIGURES' \{\
+.       ds list-type fig
+.       da LIST_OF_FIG
+\!.       nr #LISTS_PN_PADDING \\\\n[#FIG_PN_PADDING]
+.       nr label-width \w'\\$1'
+.    \}
+.    if '\\$0'TO_TABLES' \{\
+.       ds list-type tbl
+.       da LIST_OF_TBL
+\!.       nr #LISTS_PN_PADDING \\\\n[#TBL_PN_PADDING]
+.       nr label-width \w'\\$1'
+.    \}
+.    br
+.    nr #LISTS_ENTRY_PN \\n%+\\n[#PAGE_NUM_ADJ]
+.    ie \\n[#PRINT_STYLE]=1 \{\
+\!.     fam \\*[$TYPEWRITER_FAM]
+\!.     ft  R
+\!.     ps \\*[$TYPEWRITER_PS]
+.       ds _TYPEWRITE _TYPEWRITE
+.    \}
+.    el \{\
+\!.     FAMILY \\\\*[$LISTS_FAM]
+\!.     FONT \\\\*[$LISTS_FT]
+\!.     ps \\\\n[#LISTS_PS]u
+.    \}
+.    if \\n[#PRINT_STYLE]=2 .rm _TYPEWRITE
+\!.  PAD_MARKER ^
+\!.  vpt 0
+\!.  PAD \
+"\\*[ST100]\h'\\n[label-width]u'\\*[ST100X]\0\\*[ST101]\h'\w'\\$2'u'\\*[ST101X]\\\\*[$LISTS_PN\\*[_TYPEWRITE]]" \
+"\\*[PDFBOOKMARK.NAME]"
+\!.  PAD_MARKER #
+\!.  EOL
+.    ie !\\n[\\*[label-type]*autolabel] \
+\!.     ST 100 L
+.    el \
+\!.     ST 100 R
+\!.  ST 101 L
+\!.  ST 102 L
+\!.  ST 103 R
+.    if \\n[#PRINT_STYLE]=2 \{\
+\!.     FAMILY  \\\\*[$LISTS_FAM]
+\!.     FT      \\\\*[$LISTS_FT]
+\!.     ps \\\\n[#LISTS_PS]u
+.    \}
+\!.  TAB 100
+\!.  PDF_LINK \\*[list-type]:\\n[lists*target] "\\$1"
+\!.  TN
+\!.  PDF_LINK \\*[list-type]:\\n[lists*target] "\\$2"
+\!.  TN
+\!.  PRINT \\*[LEADER]
+\!.  TN
+.    if \\n[#PRINT_STYLE]=2 \{\
+\!.     FAMILY  \\\\*[$LISTS_PN_FAM]
+\!.     FT      \\\\*[$LISTS_PN_FT]
+\!.     ps \\\\*[$LISTS_PN_SIZE_CHANGE]u
+.    \}
+\!.  PRINT \\n[#LISTS_ENTRY_PN]
+\!.  TQ
+\!.  vpt
+.    da
+.END
+.
+.ALIAS TO_EQUATIONS LISTS_COLLECTOR
+.ALIAS TO_FIGURES   LISTS_COLLECTOR
+.ALIAS TO_TABLES    LISTS_COLLECTOR
+\#
+\# ***tbl***
+\#
+\# Support for multipage tables with headers borrowed from ms and
+\# mommified by Robin Haberkorn <robin.haberkorn@googlemail.com>
+\# with extensions by Peter Schaffter.
+\#
+.nr tbl*have-header 0
+.ds T&
+\#
+.MAC TS END
+.    di NULL \" Set rule weight for boxed tables
+\D't 500'
+.    di
+.    br
+.    if !\\n[@TOP] \
+.       if \\n[.t]=1 .sp \\n[.t]u
+.    rr tbl*have-header
+.    rr float*tbl
+.    if '\\n[.z]'FLOAT*DIV' .nr float*tbl 1
+.    if !'\\n[.z]'FLOAT*DIV' \{\
+.       if \\n[.t]=1 \{\
+.          if !\\n[@TOP] \{\
+.             if \\n[#COL_NUM]=\\n[#NUM_COLS] \
+.                NEWPAGE
+.          \}
+.       \}
+.    \}
+.    rr tbl*boxed
+.    rm tbl*label
+.    rm tbl*caption
+.    nr loop-count 0 1
+.    nr loop-counter \\n[#NUM_ARGS]
+.    while \\n+[loop-count]<=\\n[loop-counter] \{\
+.       if '\\$1'H' \{\
+.          nr tbl*have-header 1
+.          shift
+.          if \\n[#NUM_ARGS]=0 .nr tbl*plain 1
+.       \}
+.       if '\\$1'BOXED' \{\
+.          nr tbl*boxed 1
+.          shift
+.       \}
+.       if '\\$1'CENTER' \{\
+.          nr tbl*center 1
+.          shift
+.       \}
+.       if '\\$1'NEEDS' \{\
+.          nr tbl*needs \\$2
+.          shift 2
+.       \}
+.       if '\\$1'NO_SHIM' \{\
+.          nr tbl*no-shim 1
+.          shift
+.       \}
+.       if '\\$1'ADJUST' \{\
+.          ds tbl*space-adj \\$2
+.          shift 2
+.       \}
+.       if '\\$1'CAPTION' \{\
+.          nr tbl*have-caption 1
+.          ds tbl*caption \\$2
+.          shift 2
+.       \}
+.       if '\\$1'SHORT_CAPTION' \{\
+.          ds tbl*caption-short \\$2
+.          shift 2
+.       \}
+.       if '\\$1'LABEL' \{\
+.          nr tbl*have-label 1
+.          ds tbl*label \\$2
+.          ds label-type tbl
+.          shift 2
+.       \}
+.    \}
+.    if \\n[tbl*boxed]=1 \{\
+.       if (\\n[tbl*have-label]=0)&(\\n[tbl*have-caption]=0)&\
+(\\n[tbl*autolabel]=0)&(\\n[tbl*have-source]=0) \
+.       nr tbl*plain-boxed 1
+.    \}
+.    if !\\n[tbl*needs] .nr tbl*needs 1
+.    if !\\n[tbl*have-header] .nr tbl*no-header 1
+.    ds tbl*label-sffx-tmp \\*[tbl*label-sffx]
+.    if !'\\*[tbl*label-sffx-tmp]'' .substring tbl*label-sffx-tmp -1
+.    if '\\*[tbl*label-sffx-tmp]'.' \
+.       if (\\n[tbl*caption-after-label]=0):(\\n[#MLA]=1) .chop tbl*label-sffx
+.    if \\n[tbl*caption-after-label] \{\
+.       if !'\\*[tbl*label-sffx]'' \
+.          if '\\*[tbl*caption]'' .chop tbl*label-sffx
+.    \}
+.    ie \\n[@TOP] \{\
+.       if !'\\n[.z]'FLOAT*DIV' \{\
+.          vpt 0
+.          rr @TOP
+.          ch RR_@TOP
+.          rs
+.          nop \&
+.          if \\n[#COLUMNS] \
+.             if !'\\*[tbl*space-adj]'' \
+.                sp \\*[tbl*space-adj]-1v
+.          nr tbl*boxed 2
+.          vpt
+.       \}
+.    \}
+.    el \
+.       if !'\\*[tbl*space-adj]'' .sp \\*[tbl*space-adj]u
+.    if !\\n[#MLA] \{\
+.      if (\\n[tbl*have-caption]=0):(\\n[tbl*caption-after-label]=1) \{\
+.         ie !'\\n[.z]'FLOAT*DIV' \{\
+.            sp .5v
+.            if \\n[tbl*boxed] .sp .25v
+.         \}
+.         el .sp 1n
+.      \}
+.    \}
+.    if '\\n[.z]'FLOAT*DIV' \{\
+.       if \\n[defer]>0 .sp .5v
+.    \}
+.    ds ev-current   \\n[.ev]
+.    nr ll-pre-tbl   \\n[.l]
+.    nr lead-pre-tbl \\n[.v]
+.    nr ind-pre-tbl  \\n[.i]
+.    ll \\n[.l]u-\\n[.i]u
+.    if (\\n[nl]=\\n[#PAGE_TOP]):(\\n[nl]=\\n[dc]) \
+.       nr tbl*caption-lead-diff-adj 1
+.    if \\n[#MLA] \
+.       if \\n[tbl*have-label]+\\n[tbl*have-caption]=0 \
+.          sp .5v
+.    if \\n[tbl*boxed]=2 \{\
+.       if \\n[#MLA]=0 \
+.          if (\\n[tbl*caption-after-label]=1):(\\n[tbl*have-caption]=0) \
+.             sp 1n
+.    \}
+.    if \\n[tbl*have-header] \{\
+.       ev table-header
+.       evc \\*[ev-current]
+.       di tbl*header-div
+.       if !\\n[float-span] \!.in 0
+.    \}
+.END
+\#
+.MAC TH END
+.    ie '\\n[.z]'tbl*header-div' \{\
+.       nr T. 0
+.       T#
+.       di
+.       ev
+.       PDF_TARGET tbl:\\n+[lists*target]
+.       if !'\\n[.z]'FLOAT*DIV' \{\
+.          ie !\\n[tbl*boxed] \{\
+.             nr th*needs (u;\\n[dn]+\\n[tbl*needs]v)
+.             if \\n[th*needs]>\\n[.t] \{\
+.                ne \\n[dn]u+\\n[tbl*needs]
+.                nr tbl@needs 1
+.             \}
+.          \}
+.          el \{\
+.             nr th*needs (u;\\n[dn]+2p+\\n[tbl*needs]v)
+.             if \\n[th*needs]>\\n[.t] \{\
+.                ne \\n[dn]u+2p+\\n[tbl*needs]
+.                if \\n[#COLUMNS] \
+.                   if !\\n[#COL_NUM]=\\n[#NUM_COLS] .nr tbl*no-top-hook 1
+.                nr tbl@needs 1
+.             \}
+.          \}
+.          if \\n[defer] .nr tbl*interrupted 1
+.       \}
+.       ie (\\n[dn]-\\n[.v])>\\n[.t] \{\
+.          if !\\n[@TOP] .@error ridiculously long table header
+.          if \\n[tbl@needs] \{\
+.             if \\n[tbl*boxed] \{\
+.                rs
+.                nop \&
+.                sp -1n
+.             \}
+.             rr tbl@needs
+.          \}
+.          if \\n[tbl*have-caption] .TBL*CAPTION
+.          tbl*print-header
+.       \}
+.       el \{\
+.          nr tbl*header-ht \\n[dn]
+.          if \\n[tbl@needs] \{\
+.             if \\n[tbl*boxed] \{\
+.                rs
+.                nop \&
+.                sp -1n
+.             \}
+.             rr tbl@needs
+.          \}
+.          if \\n[tbl*have-caption] .TBL*CAPTION
+.          vs
+.          tbl*print-header
+.       \}
+.    \}
+.    el \{\
+.       if \\n[tbl*have-caption] \{\
+.          TBL*CAPTION
+.          nr skip-th-warning 1
+.       \}
+.       if !\\n[skip-th-warning] .@error .TH without .TS H
+.       rr skip-th-warning
+.    \}
+.\" When centering a boxed table inside a float, .T# won't place
+.\" vertical rules in the correct horizontal position unless .ll is
+.\" given a nominal value (can be anything) and an indent is set
+.\" manually.
+.    if '\\n[.z]'FLOAT*DIV' \{\
+.       if \\n[tbl*center] \{\
+.          nr float*ll \\n[.l]
+.          ll 0
+.          in \\n[float*ll]u-\\n[TW]u/2u
+.       \}
+.    \}
+.END
+\#
+.MAC TE END
+.    ev tbl*end \" Needed because of .ad changes
+.    evc \\*[ev-current] 
+.    nh
+.    nf
+.    rr tbl*no-header
+.    if !'\\n[.z]'FLOAT*DIV' \{\
+.       ie \\n[.t]<(\\n[.v]+(\\n[.v]/2u)) \{\
+.          if \\n[tbl*have-label] \{\
+.          rm tbl*header-div
+.          nr tbl*no-top-hook 1
+.          nr pgnum \\n%+\\n[#PAGE_NUM_ADJ]
+.          tm1 "[mom]: '\\n[.F]', macro \\$0, line \\n[.c]:
+.          tm1 "        Insufficient room for label, caption, and/or source after
+.          tm1 "        table on page \\n[pgnum].  Omitting, but continuing to process.
+.          NEWPAGE
+.          nr tbl*skip-source 1
+.          nr tbl*skip-label 1
+.          ch FN_OVERFLOW_TRAP -\\n[#FN_OVERFLOW_TRAP_POS]u
+.       \}
+.       \}
+.       el \{\
+.          if \\n[pre-tbl-vfp] \{\
+.            ch FOOTER 0+\\n[pre-tbl-vfp]u
+.            ch FN_OVERFLOW_TRAP -\\n[#FN_OVERFLOW_TRAP_POS]u
+.            rr pre-tbl-vfp
+.          \}
+.       \}
+.    \}
+.    if !'\\$1'' \{\
+.       if '\\$1'SOURCE' \{\
+.          nr tbl*have-source 1
+.          shift
+.       \}
+.    \}
+.    if !\\n[#MLA] \{\
+.       if (\\n[tbl*have-label]=1):(\\n[tbl*autolabel]=1):(\\n[tbl*caption-after-label]=1) \{\
+.          ev label
+.          evc tbl*end
+.          ie \\n[#PRINT_STYLE]=1 .TYPEWRITER
+.          el \{\
+.             tbl*label-style
+.             vs \\n[.ps]u+\\n[tbl*label-autolead]u
+.          \}
+.          SIZESPECS
+.          if \\n[tbl*label-with-chapter] \
+.             ds chapno \\n[#CH_NUM].
+.          TBL*SET_LABEL_QUAD \\*[tbl*label-quad]
+.          di tbl*label-div
+\!.        in -\\n[ind-pre-tbl]u
+.          ie \\n[tbl*boxed] .sp \\n[#CAP_HEIGHT]u
+.          el .sp \\n[#DOC_LEAD]u/4u
+.          if (\\n[tbl*have-label]=1):(\\n[tbl*autolabel]=1) \{\
+.             if !'\\*[tbl*label-space]'' .sp \\*[tbl*label-space]
+.             ie \\n[tbl*autolabel] \{\
+.                ie !\\n[tbl*caption-after-label] .nop \
+\\*[tbl*label-prfx]\\*[chapno]\\n+[tbl*label-num]\\*[tbl*label-sffx]
+.                el \{\
+.                   nop \\*[tbl*label-prfx]\\*[chapno]\\n+[tbl*label-num]\\*[tbl*label-sffx]\|
+.                   tbl*caption-style
+.                   vs \\n[.ps]u+\\n[tbl*caption-autolead]u
+.                   ds tbl*caption " \\*[tbl*caption]
+.                   nop \\*[tbl*caption]
+.                \}
+.             \}
+.             el \{\
+.                if !'\\*[tbl*label]'' \{\
+.                   ie !\\n[tbl*caption-after-label] .nop \\*[tbl*label]
+.                   el \{\
+.                      nop \\*[tbl*label]\ \|\c
+.                      tbl*caption-style
+.                      vs \\n[.ps]u+\\n[tbl*caption-autolead]u
+.                      ds tbl*caption " \\*[tbl*caption]
+.                      nop \\*[tbl*caption]
+.                   \}
+.                \}
+.             \}
+.             if \\n[tbl*autolabel] \
+.                ds tbl*label \\*[chapno]\\n[tbl*label-num]
+.             br
+.          \}
+.          di
+.          ev
+.          nr pgnum \\n%+\\n[#PAGE_NUM_ADJ]
+.          ie !'\\n[.z]'FLOAT*DIV' \{\
+.             ie \\n[dn]>\\n[.t] \{\
+.                tm1 "[mom]: '\\n[.F]', macro \\$0, line \\n[.c]:
+.                tm1 "        Insufficient room for label, caption, and/or source after
+.                tm1 "        table on page \\n[pgnum].  Omitting, but continuing to process.
+.                if d tbl*header-div .rm tbl*header-div
+.                rr tbl*caption-top-lead-diff
+.                rr tbl*have-header
+.                nr tbl*skip-source 1
+.                nr tbl*skip-label 1
+.                NEWPAGE
+.             \}
+.             el .print-label
+.          \}
+.          el .print-label
+.       \}
+.    \}
+.    if !'\\*[tbl*caption-short]'' .ds short -short
+.    ie !'\\*[tbl*label]'' \
+.       TO_TABLES "\\*[tbl*label]" "\\*[tbl*caption\\*[short]]"
+.    el .TO_TABLES "\\*[tbl*caption]\\*[short]]"
+.    if !\\n[tbl*skip-source] \{\
+.       if \\n[tbl*have-source] \{\
+.          ds tbl*source \\$1
+.          SIZESPECS
+.          ev source
+.          nh
+.          ie \\n[#PRINT_STYLE]=1 \{\
+.             TYPEWRITER
+.             sp
+.          \}
+.          el \{\
+.             tbl*source-style
+.             vs \\n[.ps]u+\\n[tbl*source-autolead]u
+.          \}
+.          di tbl*source-div
+.          TBL*SET_SOURCE_QUAD \\*[tbl*source-quad]
+.          if \\n[#MLA] \{\
+.             if '\\*[tbl*source-quad]'L' \{\
+.                in \\n[ind-pre-tbl]u+\\n[tmp-ind]u
+.                ti -\\n[tmp-ind]u
+.             \}
+.          \}
+.          if (\\n[tbl*have-label]=0)&(\\n[#MLA]=0) \
+.             if !\\n[tbl*autolabel] .sp \\n[#CAP_HEIGHT]u
+.          if \\n[#MLA] \
+.             sp \\n[#CAP_HEIGHT]u
+.          if !'\\*[tbl*source-space]'' .sp \\*[tbl*source-space]
+.          nop \\*[tbl*source]
+.          br
+.          if \\n[#MLA] .in
+.          di
+.          nf
+.          tbl*source-div
+.          ev
+.       \}
+.    \}
+.    if '\\n[.z]'FLOAT*DIV' .nr bx-tbl-depth \\n[.d]-1v
+.    if '\\n[.z]'tbl*header-div' \{\
+.       @error .TS with 'H' flag but no corresponding .TH
+.       ab Aborting.
+.    \}
+.    ev
+.    if !\\n[tbl*plain] \{\
+.       ie \\n[tbl*plain-boxed] .sp 1
+.       el .sp .5v
+.    \}
+.    ll \\n[ll-pre-tbl]u
+.    if !'\\*[tbl*space-adj]'' .sp -\\*[tbl*space-adj]u
+.    if !\\n[tbl*no-shim] .SHIM
+.    TBL*CLEANUP
+.END
+\#
+\# Utility macros for tbl
+\#
+.MAC TBL*CAPTION END
+.    if \\n[tbl*have-caption] \{\
+.       vs \\n[.ps]u+\\n[tbl*caption-autolead]u
+.       nr tbl*caption-lead-diff \\n[lead-pre-tbl]-\\n[.v]
+.       nr tbl*caption-top-lead-diff \\n[tbl*caption-lead-diff]
+.       ie !\\n[#MLA] \{\
+.          if !\\n[tbl*caption-after-label] \{\
+.             ie !'\\n[.z]'FLOAT*DIV' \{\
+.                ie (\\n[nl]=\\n[#PAGE_TOP]):(\\n[nl]=\\n[dc]) \{\
+.                   ie \\n[#COLUMNS] .sp |\\n[dc]u
+.                   el .sp |\\n[#T_MARGIN]u-\\n[#DOC_LEAD]u
+.                   sp \\n[tbl*caption-lead-diff]u
+.                \}
+.                el .sp .5v
+.             \}
+.             el .sp .5v
+.          \}
+.          ev caption
+.          evc \\*[ev-current]
+.          nh
+.       \}
+.       el \{\
+.          if !\\n[tbl*autolabel] \{\
+.             ie !\\n[tbl*have-label] \
+.                mla@error caption label \\n[.F] \\$0 \\n[.c]
+.             el .ev label
+.          \}
+.       \}
+.       ie \\n[#PRINT_STYLE]=1 .nr tmp-ind 2m
+.       el .nr tmp-ind 1.25m
+.       ie \\n[#PRINT_STYLE]=1 .TYPEWRITER
+.       el \{\
+.          if !\\n[#MLA] \{\
+.             tbl*caption-style
+.             nr lead-current \\n[.v]
+.          \}
+.       \}
+.       ie !\\n[#MLA] \{\
+.          ie !\\n[tbl*caption-after-label] \{\
+.             di tbl*caption-div
+\!.           in -\\n[ind-pre-tbl]u
+.             TBL*SET_CAPTION_QUAD \\*[tbl*caption-quad]
+.             nop \\*[tbl*caption]
+.             br
+.             di
+.             if !'\\n[.z]'FLOAT*DIV' \{\
+.                nr caption-needs 2
+.                if (\\n[dn]+(\\n[#DOC_LEAD]*(\\n[tbl*needs]*2)))>\\n[.t] \{\
+.                   nr pgnum \\n%+\\n[#PAGE_NUM_ADJ] 1
+.                   ie \\n[#COL_NUM]=\\n[#NUM_COLS] \{\
+.                      tm1 "[mom]: Table with caption at line \\n[.c] does not fit on page \\n[pgnum].
+.                      tm1 "       Shifting table to page \\n+[pgnum].
+.                      rr tbl*no-header
+.                      NEWPAGE
+.                   \}
+.                   el \{\
+.                      sp \\n[.t]u
+.                      sp |\\n[#PAGE_TOP]u+\\n[tbl*caption-lead-diff]u
+.                   \}
+.                \}
+.             \}
+.             if \\n[.u] .nr fill 1
+.             nf
+.             if \\n[.ns] .RESTORE_SPACE
+.             tbl*caption-div
+.             if \\n[#PRINT_STYLE]=1 .sp .5v
+.             if !'\\*[tbl*caption-space]'' \
+.                sp \\*[tbl*caption-space]
+.             if \\n[tbl*caption-lead-diff-adj] \{\
+.                sp -\\n[tbl*caption-lead-diff]u
+.                rr tbl*label-lead-diff-adj
+.             \}
+.             if \\n[fill] .fi
+.             rr fill
+.          \}
+.          el \{\
+.             if (\\n[tbl*have-label]=0) \{\
+.                if !\\n[tbl*autolabel] \{\
+.                   tm1 "[mom]: CAPTION_AFTER_LABEL enabled, but no label given
+.                   tm1 "       for table at line \\n[.c].
+.                   tm1 "       Skipping caption but continuing to process.
+.                \}
+.             \}
+.          \}
+.       \}
+.       el \{\
+.          if (\\n[tbl*have-label]=1):(\\n[tbl*autolabel]=1) \{\
+.             ie !\\n[tbl*have-caption] \
+.                mla@error label caption \\n[.F] \\$0 \\n[.c]
+.             el \{\
+.                ie !'\\n[.z]'FLOAT*DIV' \{\
+.                   ie (\\n[nl]=\\n[#PAGE_TOP]):(\\n[nl]=\\n[dc]) \{\
+.                      ie !\\n[#COLUMNS] .sp |\\n[#PAGE_TOP]u+\\n[tbl*caption-lead-diff]u
+.                      el .sp |\\n[dc]u+\\n[tbl*caption-lead-diff]u
+.                   \}
+.                   el .sp .5v
+.                \}
+.                el .sp .5v
+.             \}
+.             ev label
+.             evc \\*[ev-current]
+.             nh
+.             ie \\n[#PRINT_STYLE]=1 .TYPEWRITER
+.             el \{\
+.                tbl*label-style
+.                vs \\n[.ps]u+\\n[tbl*label-autolead]u
+.                nr tbl*label-lead-diff \\n[lead-pre-tbl]-\\n[.v]
+.             \}
+.             if \\n[tbl*label-with-chapter] \
+.                ds chapno \\n[#CH_NUM].
+.             TBL*SET_LABEL_QUAD \\*[tbl*label-quad]
+.             di tbl*mla-label-caption
+.             ie '\\*[tbl*label-quad]'L' \{\
+\!.              in -\\n[ind-pre-tbl]u
+\!.              in \\n[tmp-ind]u
+\!.              ti -\\n[tmp-ind]u
+.             \}
+.             el \{\
+.                if \\n[tbl*label-quad-on-ll] \{\
+.                   if '\\n[tbl*label-quad]'L' \
+\!.                 in
+.                \}
+.             \}
+.             ie \\n[tbl*autolabel] \
+.                nop \
+\\*[tbl*label-prfx]\\*[chapno]\\n+[tbl*label-num]\\*[tbl*label-sffx]
+.             el .if !'\\*[tbl*label]'' .nop \\*[tbl*label]
+.             if \\n[tbl*autolabel] \
+.                ds tbl*label \\*[chapno]\\n[tbl*label-num]
+.             br
+.             di
+.          \}
+.          da tbl*mla-label-caption
+.          ie \\n[#PRINT_STYLE]=1 .TYPEWRITER
+.          el .tbl*caption-style
+.          if '\\*[tbl*caption-quad]'L' \{\
+\!.           ti -\\n[tmp-ind]u
+\!.           fi
+.          \}
+.          nop \\*[tbl*caption]
+.          br
+\!.        in
+.          da
+.       \}
+.       if !'\\n[.z]'FLOAT*DIV' \{\
+.          ie \\n[#MLA] .nr caption-needs 3
+.          el .nr caption-needs 2
+.          if (\\n[dn]+(\\n[#DOC_LEAD]*(\\n[tbl*needs]+\\n[caption-needs])))>\\n[.t] \{\
+.             nr pgnum \\n%+\\n[#PAGE_NUM_ADJ] 1
+.             ie \\n[#COL_NUM]=\\n[#NUM_COLS] \{\
+.                tm1 "[mom]: Table with caption at line \\n[.c] does not fit on page \\n[pgnum].
+.                tm1 "       Shifting table to page \\n+[pgnum].
+.                rr tbl*no-header
+.                if \\n[defer] .nr skip-th-warning 1
+.                NEWPAGE
+.             \}
+.             el \{\
+.                nr tbl*no-top-hook 1
+.                sp \\n[.t]u
+.                if (\\n[tbl*caption-after-label]=1):(\\n[tbl*plain]) \
+.                   sp 1n-2p
+.             \}
+.          \}
+.       \}
+.       nf
+.       if (\\n[nl]=\\n[#PAGE_TOP]):(\\n[nl]=\\n[dc]) \
+.          nr tbl*label-lead-diff-adj 1
+.       ie (\\n[.t]>1)&(\\n[@TOP]=0) \{\
+.          sp \\n[tbl*label-lead-diff]u
+.       \}
+.       el \{\
+.          if \\n[.t]=1 .sp \\n[.t]u
+.          ie \\n[#COL_NUM]>1 \
+.             ie (\\n[nl]=\\n[#PAGE_TOP]):(\\n[nl]=\\n[dc]) \
+.                sp |\\n[dc]u+\\n[tbl*label-lead-diff]u
+.             el .sp .5v
+.       \}
+.       tbl*mla-label-caption
+.       ie \\n[#PRINT_STYLE]=1 .sp .5v
+.       el .sp .5n
+.       if \\n[tbl*label-lead-diff-adj] \{\
+.          sp -\\n[tbl*label-lead-diff]u
+.          rr tbl*label-lead-diff-adj
+.       \}
+.       br
+.       if !'\\*[tbl*caption-space]'' .sp \\*[tbl*caption-space]
+.    \}
+.    if !'\\n[.ev]'0' .ev
+.END
+\#
+.MAC TBL*CLEANUP END
+.    if !'\\n[.z]'FLOAT*DIV' \{\
+.       rr tbl*center
+.       rm tbl*header-div
+.       rr tbl*caption-top-lead-diff
+.    \}
+.    rr tbl*have-header
+.    if !'\\n[.z]'FLOAT*DIV' \{\
+.       rr tbl*have-caption
+.       rr tbl*have-label
+.    \}
+.    rr tbl*label-warning
+.    rr tbl*no-shim
+.    rr tbl*skip-source
+.    if !'\\n[.z]'FLOAT*DIV' \{\
+.       rm short
+.       rm tbl*caption
+.       rm tbl*caption-short
+.       rm tbl*label
+.    \}
+.    rm tbl*space-adj
+.    rnn tbl*have-label tbl@label
+.    rnn tbl*have-source tbl@source
+.    rr tbl*have-label
+.    rr tbl*plain
+.    if '\\*[tbl*label-sffx-tmp]'.' .ds tbl*label-sffx .
+.END
+\#
+.MAC print-label END
+.    if \\n[.u] .nr fill 1
+.    nf
+.    if !\\n[tbl*skip-label] \{\
+.       tbl*label-div
+.    \}
+.    if \\n[fill] .fi
+.    rr fill
+.END
+\#
+.MAC tbl@top-hook END
+.    if \\n[tbl*have-header] \{\
+.       nf
+.       rr @TOP
+.       ch RR_@TOP
+.       ev top-hook
+.       evc 0
+.       rs
+.       nop \&
+.       ie !\\n[tbl*boxed] .sp -1
+.       el .sp -1n
+.       tbl*print-header
+.       ev
+.    \}
+.END
+\#
+.MAC tbl*print-header END
+.    if \\n[.u]=1 \{\
+.       nf
+.       nr fill 1
+.    \}
+.    if \\n[#COL_NUM]>1 \
+.       sp 2p
+.    ie d tbl*header-div:\\n[loop-count] \
+.       tbl*header-div:\\n[loop-count]
+.    el .tbl*header-div
+.    if '\\n[.z]'FLOAT*DIV' \
+.       if \\n[tbl*center] .ce 1000
+.    mk #T
+.    if !'\\n[.z]'FLOAT*DIV' \{\
+.       nr pre-tbl-vfp 0+\\n[#VARIABLE_FOOTER_POS]
+.       ch FOOTER \\n[#VARIABLE_FOOTER_POS]u+\\n[#DOC_LEAD]u
+.       ch FN_OVERFLOW_TRAP -\\n[#FN_OVERFLOW_TRAP_POS]u+\\n[#DOC_LEAD]u
+.    \}
+.END
+\#
+.MAC tbl@bottom-hook END
+.       if \\n[.ns] .rs
+.       rr #DIVERTED
+.       rr @TOP
+.       ch RR_@TOP
+.END
+\#
+.MAC tbl*float-warning END
+.    tm1 "[mom]: Table in FLOAT, output page \\n[#PAGENUMBER], exceeds page vertical limits.
+.    tm1 "       Multipage boxed tables cannot be contained within floats.
+.    ab   [mom]: Aborting '\\n[.F]'.
+.END
+\#
+.MAC ds@need END \" Move vertically until there is enough space for \$1
+.    if '\\n(.z'' \{\
+.       while \\n[.t]<=(\\$1)&(\\n[nl]>\\n[#PAGE_TOP]) \{\
+.          rs
+'          sp \\n[.t]u
+.       \}
+.    \}
+.END
+\#
+\# ***eqn***
+\#
+\# EQ/EN macros borrowed from ms, mommified by Robin Haberkorn
+\# <robin.haberkorn@googlemail.com>, expanded by Peter Schaffter.
+\#
+\# EQ [ -L | -C | -I <indent> ] [label]
+\# EN [ CONT | CONTINUED | ... ]
+\#
+\# Equations are centered by default, but can be left-justified
+\# (EQ -L), explicitly centered, or indented (EQ -I).
+\#
+\# Each eqn block for multi-line equations aligned with 'mark' and
+\# 'lineup' should be terminated by passing 'CONT' or 'CONTINUED'
+\# or '...' to EN.
+\#
+\# Note that geqn mark and lineup work correctly in centered equations.
+\#
+.MAC EQ END
+.    if \\n[eqn*copy-in]=1 \{\
+.       if !\\n[eqn-linenum] .nr eqn-linenum \\n[.c]
+.       if !\\n[pgnum] .nr pgnum \\n%+\\n[#PAGE_NUM_ADJ]
+.       br
+.       if \\n[.u] .nr fill 1
+.       rr float*eqn
+.       if '\\n[.z]'FLOAT*DIV' .nr float*eqn 1
+.       nr eqn*restore-adj \\n[.j]
+.       if !\\n[continued] \{\
+.          PDF_TARGET eqn:\\n+[lists*target]
+.          rr eqn*type
+.          nr loop-counter \\n[#NUM_ARGS]
+.          nr loop-count 0 1
+.          while \\n+[loop-count]<=\\n[loop-counter] \{\
+.             if '\\$1'-L' \{\
+.                nr eqn*left 1
+.                nr eqn*type 1
+.                shift
+.             \}
+.             if '\\$1'-I' \{\
+.                nr eqn*ind  1
+.                nr eqn*type 2
+.                shift
+.                ds DI \\$1
+.                ds DI@cont \\*[DI]
+.                shift
+.             \}
+.             if '\\$1'-C' \{\
+.                nr eqn*center 1
+.                nr eqn*type   3
+.                shift
+.             \}
+.             if '\\$1'ADJUST' \{\
+.                ds eqn*space-adj \\$2
+.                shift 2
+.             \}
+.             if '\\$1'NO_SHIM' \{\
+.                nr eqn*no-shim 1
+.                shift 1
+.             \}
+.             if '\\$1'LABEL' \{\
+.                ds eqn*label \\$2
+.                ds label-type eqn
+.                shift 2
+.             \}
+.             if '\\$1'SHIFT_LABEL' \{\
+.                ds eqn*shift-label \\$2
+.                shift 2
+.             \}
+.             if '\\$1'CAPTION' \{\
+.                ds eqn*caption \\$2
+.                shift 2
+.             \}
+.             if '\\$1'SHORT_CAPTION' \{\
+.                ds eqn*caption-short \\$2
+.                shift 2
+.             \}
+.          \}
+.       \}
+.       if '\\*[eqn*shift-label]'' .ds eqn*shift-label 0
+.       if !\\n[eqn*type] \{\
+.          nr eqn*center 1
+.          nr eqn*type   3
+.          shift
+.       \}
+.       if !'\\*[eqn*caption]'' \{\
+.          if '\\*[caption-quad]'L' \{\
+.             if \\n[default-left] .ds caption-quad R
+.             rr default-left
+.          \}
+.       \}
+.       if \\n[continued] \{\
+.          rm continued
+.          rr continued
+.       \}
+.       if \\n[eqn@left*cont] .nr eqn*type 1
+.       if \\n[eqn@ind*cont]  \{\
+.           nr eqn*type 2
+.           ds DI \\*[DI@cont]
+.       \}
+.    \}
+.    if \\n[eqn@center*cont] .nr eqn*type 3
+.    ev EQN
+.    evc 0
+.    di eqn*div
+.    in 0
+.    nf
+.END
+\#
+.MAC EN END
+.    if !'\\n(.z'eqn*div' \{\
+.       @error mismatched EN
+.       return
+.    \}
+.    br
+.    di
+.    ev
+.    if !'\\*[eqn*label]''   .nr eqn*have-label   1
+.    if !'\\*[eqn*caption]'' .nr eqn*have-caption 1
+.    if !'\\$1'' \{\
+.       ie '\\$1'...' .ds continued CONT
+.       el .ds continued \\$1
+.       substring continued 0 3
+.       ie '\\*[continued]'CONT' \{\
+.          nr continued 1
+.          rm continued
+.          if \\n[eqn*ind]    .nr eqn@ind*cont    1
+.          if \\n[eqn*left]   .nr eqn@left*cont   1
+.          if \\n[eqn*center] .nr eqn@center*cont 1
+.       \}
+.       el \{\
+.          tm1 "[mom]: Invalid argument \\$1 to \\$0.
+.          tm1 "       Must be 'CONTINUED', 'CONT', or '...'
+.          ab   [mom]: Aborting '\\n[.F]' at line \\n[.c].
+.       \}
+.    \}
+.    if \\n[dl]:\\n[eqn*have-label] \{\
+.       ds eqn*tabs \\n[.tabs]
+.       if \\n[eqn*label-with-chapter] \
+.          ds chapno \\n[#CH_NUM].
+.       nf
+.       ie \\n[dl] \{\
+.          if !'\\n[.z]'FLOAT*DIV' \{\
+.             ie \\n[eqn*have-caption] .ne \\n[dn]u-\\n[.V]
+.             el .ne \\n[dn]u-1v-\\n[.V]
+.          \}
+.          chop eqn*div
+.          if '\\*[DD]'' \{\
+.             ds DD .5v
+.             if !\\n[@TOP] \{\
+.                sp \\*[DD]
+.                if !'\\*[eqn*space-adj]'' .sp \\*[eqn*space-adj]u
+.             \}
+.          \}
+.          if \\n[cutaround] .ll \\n[eqn*cutaround-width]u
+.          ie \\n[eqn*type]=1 \{\
+.             ta (u;\\n[.l]-\\n[.i])R
+.             ie \\n[continued] .nop \\*[eqn*div]
+.             el \{\
+.                ie \\n[eqn*autolabel] \
+.nop \
+\\*[eqn*div]\
+\\*[eqn*label-specs]\
+\t\v'+\\*[eqn*shift-label]'\
+\\*[eqn*label-prfx]\\*[chapno]\\n+[eqn*label-num]\\*[eqn*label-sffx]\
+\v'-\\*[eqn*shift-label]'\
+\\*[revert-specs]
+.                el \
+.nop \
+\\*[eqn*div]\
+\\*[eqn*label-specs]\
+\t\v'+\\*[eqn*shift-label]'\
+\\*[eqn*label]\
+\v'-\\*[eqn*shift-label]'\
+\\*[revert-specs]
+.             \}
+.             if \\n[eqn-cutaround] .ll
+.             if !\\n[continued] \{\
+.                if \\n[eqn*have-caption] \
+.                   ADD_CAPTION
+.             \}
+.          \}
+.          el \{\
+.             ie \\n[eqn*type]=2 \{\
+.                ie '\\*[eqn*label-quad]'L' \{\
+.                   ta \\*[DI]
+.                   ie \\n[continued] .nop \t\\*[eqn*div]
+.                   el \{\
+.                      ie \\n[eqn*autolabel] \
+.nop \
+\\*[eqn*label-specs]\
+\v'+\\*[eqn*shift-label]'\
+\\*[eqn*label-prfx]\\*[chapno]\\n+[eqn*label-num]\\*[eqn*label-sffx]\
+\v'-\\*[eqn*shift-label]'\
+\t\\*[eqn*div]\
+\\*[revert-specs]
+.                      el \
+.nop \
+\\*[eqn*label-specs]\
+\v'+\\*[eqn*shift-label]'\
+\\*[eqn*label]\
+\v'-\\*[eqn*shift-label]'\
+\\*[revert-specs]\
+\t\\*[eqn*div]
+.                   \}
+.                \}
+.                el \{\
+.                   ta \\*[DI] (u;\\n[.l]-\\n[.i])R
+.                   ie \\n[continued] .nop \t\\*[eqn*div]
+.                   el \{\
+.                      ie \\n[eqn*autolabel] \
+.nop \
+\t\\*[eqn*div]\
+\\*[eqn*label-specs]\
+\t\v'+\\*[eqn*shift-label]'\
+\\*[eqn*label-prfx]\\*[chapno]\\n+[eqn*label-num]\\*[eqn*label-sffx]\
+\v'-\\*[eqn*shift-label]'\
+\\*[revert-specs]
+.                      el \
+.nop \
+\t\\*[eqn*div]\
+\\*[eqn*label-specs]\
+\t\v'+\\*[eqn*shift-label]'\
+\\*[eqn*label]\
+\v'-\\*[eqn*shift-label]'\
+\\*[revert-specs]
+.                   \}
+.                \}
+.                if !\\n[continued] \{\
+.                   if \\n[eqn*have-caption] \
+.                      ADD_CAPTION
+.                \}
+.             \}
+.             el \{\
+.                ie '\\*[eqn*label-quad]'L' \{\
+.                   ta (u;\\n[.l]-\\n[.i]/2)C
+.                   ie \\n[continued] .nop \t\\*[eqn*div]
+.                   el \{\
+.                      ie \\n[eqn*autolabel] \
+.nop \
+\\*[eqn*label-specs]\
+\v'+\\*[eqn*shift-label]'\
+\\*[eqn*label-prfx]\\*[chapno]\\n+[eqn*label-num]\\*[eqn*label-sffx]\
+\v'-\\*[eqn*shift-label]'\
+\t\\*[eqn*div]\
+\\*[revert-specs]
+.                      el \
+.nop \
+\\*[eqn*label-specs]\
+\v'+\\*[eqn*shift-label]'\
+\\*[eqn*label]\
+\v'-\\*[eqn*shift-label]'\
+\\*[revert-specs]\
+\t\\*[eqn*div]
+.                   \}
+.                \}
+.                el \{\
+.                   ta (u;\\n[.l]-\\n[.i]/2)C (u;\\n[.l]-\\n[.i])R
+.                   ie \\n[continued] .nop \t\\*[eqn*div]
+.                   el \{\
+.                      ie \\n[eqn*autolabel] \
+.nop \
+\t\\*[eqn*div]\
+\\*[eqn*label-specs]\
+\t\v'+\\*[eqn*shift-label]'\
+\\*[eqn*label-prfx]\\*[chapno]\\n+[eqn*label-num]\\*[eqn*label-sffx]\
+\v'-\\*[eqn*shift-label]'\
+\\*[revert-specs]
+.                      el \
+.nop \
+\t\\*[eqn*div]\
+\\*[eqn*label-specs]\
+\t\v'+\\*[eqn*shift-label]'\
+\\*[eqn*label]\
+\v'-\\*[eqn*shift-label]'\
+\\*[revert-specs]
+.                   \}
+.                \}
+.                if !\\n[continued] \{\
+.                   if \\n[eqn*have-caption] \
+.                      ADD_CAPTION
+.                \}
+.             \}
+.          \}
+.       \}
+.       el \{\
+.          ta (u;\\n[.l]-\\n[.i])R
+.nop \
+\\*[eqn*label-specs]\
+\t\v'+\\*[eqn*shift-label]'\
+\t\\*[eqn*label]\
+\v'-\\*[eqn*shift-label]'\
+\\*[revert-specs]
+.       \}
+.       ta \\*[eqn*tabs]
+.\" if continuing (ie is a multi-line equation), don't space and SHIM
+.       if !\\n[continued] \{\
+.          sp \\*[DD]
+.          if !'\\*[eqn*space-adj]'' .sp -\\*[eqn*space-adj]u
+.          if !'\\n[.z]'FLOAT*DIV' \{\
+.             if !\\n[eqn*no-shim] .SHIM
+.          \}
+.          if !'\\*[eqn*caption-short]'' .ds short -short
+.          if \\n[eqn*autolabel] \
+.             ds eqn*label \\*[chapno]\\n[eqn*label-num]
+.          ie !'\\*[eqn*label]'' \
+.             TO_EQUATIONS "\\*[eqn*label]" "\\*[eqn*caption\\*[short]]"
+.          el .TO_EQUATIONS "\\*[eqn*caption\\*[short]]"
+.          rm DD
+.          rm eqn*caption
+.          rm eqn*caption-short
+.          rm eqn*label
+.          rm short
+.          rr eqn*copy-in
+.       \}
+.       rm DI@cont
+.       rr eqn*center
+.       rr eqn@center*cont
+.       rr eqn*have-label
+.       rr eqn*ind
+.       rr eqn@ind*cont
+.       rr eqn*left
+.       rr eqn@left*cont
+.       if !\\n[eqn-cutaround] .rm eqn*space-adj
+.    \}
+.    nr eqn*copy-in 1
+.    if \\n[fill] .fi
+.    ad \\n[eqn*restore-adj]
+.    rr fill
+.END
+\#
+.MAC ADD_CAPTION END
+.    ie \\n[.t]<\\n[.v] \{\
+.       if !'\\n[.z]'FLOAT*DIV' \{\
+.          if \\n[#COL_NUM]=\\n[#NUM_COLS] \{\
+.             tm1 "[mom]: '\\n[.F]', macro EQ, line \\n[eqn-linenum]: Insufficient room for
+.             tm1 "        equation caption on page \\n[pgnum].
+.             tm1 "        Skipping caption, but continuing to process.
+.             if !\\n[@TOP] \{\
+.                if \\n[#COL_NUM]=\\n[#NUM_COLS] \
+.                   NEWPAGE
+.             \}
+.             rr eqn-linenum
+.             rr pgnum
+.          \}
+.       \}
+.    \}
+.    el \{\
+.       if \\n[#PRINT_STYLE]=2 \{\
+.          ps \\*[eqn*caption-size-change]
+.          nr lead-curr \\n[.v]
+.          sp .5v
+.          vs \\n[.ps]u+\\n[eqn*caption-autolead]u
+.          nr eqn*caption-lead-diff \\n[lead-curr]-\\n[.v]
+.          sp \\n[eqn*caption-lead-diff]u
+.          ps
+.          if !'\\*[eqn*caption-space]'' \
+.             sp \\*[eqn*caption-space]
+.       \}
+.       if '\\*[eqn*caption-quad]'L' \{\
+.          fi
+.          ad l
+.          nop \
+\\*[eqn*caption-specs]\
+\\*[eqn*caption]\
+\\*[revert-specs]
+.          nf
+.       \}
+.       if '\\*[eqn*caption-quad]'C' \{\
+.          fi
+.          ad c
+.          nop \
+\\*[eqn*caption-specs]\
+\\*[eqn*caption]\
+\\*[revert-specs]
+.          nf
+.       \}
+.       if '\\*[eqn*caption-quad]'R' \{\
+.          fi
+.          ad r
+.          nop \
+\\*[eqn*caption-specs]\
+\\*[eqn*caption]\
+\\*[revert-specs]
+.          nf
+.       \}
+.       if !'\\*[eqn*caption-space]'' \
+.          sp -\\*[eqn*caption-space]
+.       vs
+.    \}
+.END
+\#
+\# ***pic***
+\#
+.MAC have-adjust END
+.    nr #ARGS  0 1
+.    nr #COUNT \\n[#NUM_ARGS]
+.    while \\n+[#ARGS]<=\\n[#COUNT] \{\
+.       if '\\$1'ADJUST' \{\
+.          ds pic*space-adj \\$2
+.          break
+.       \}
+.       shift
+.    \}
+.END
+\#
+\# User settable text style for pic
+\#
+\# PIC_TEXT_STYLE
+\# --------------
+\# *Argument:
+\#   <offset from page left>
+\# *Function:
+\#   Stores user supplied page offset in register #L_MARGIN.
+\#   Sets .po to user supplied offset.
+\# *Notes:
+\#   Requires unit of measure.
+\#
+.MAC PIC_TEXT_STYLE END
+.    nr #ARGS  0 1
+.    nr #COUNT \\n[#NUM_ARGS]
+.    while \\n+[#ARGS]<=\\n[#COUNT] \{\
+.       if '\\$1'FAMILY' \{\
+.          shift
+.          ds pic*text-family \\$1
+.          shift
+.       \}
+.       if '\\$1'FONT' \{\
+.          shift
+.          ds pic*text-font \\$1
+.          shift
+.       \}
+.       if '\\$1'SIZE' \{\
+.          shift
+.          ds pic*text-size-change \\$1
+.          shift
+.       \}
+.       if '\\$1'AUTOLEAD' \{\
+.          shift
+.          nr pic*text-autolead \\$1
+.          shift
+.       \}
+.    \}
+.END
+\#
+\# Main macros
+\#
+.MAC PS END
+.    br
+.    have-adjust \\$@ \" Adjusting is handled by FLOAT
+.    ds ev-current \\n[.ev]
+.    rr float*pic
+.    if !'\\n[.z]'FLOAT*DIV' .FLOAT ADJUST \\*[pic*space-adj]
+.    PDF_TARGET fig:\\n+[lists*target]
+.    nr float*pic 1
+.    nr ind-pre-pic  \\n[.i]
+.    nr ll-pre-pic   \\n[.l]
+.    nr lead-pre-pic \\n[.v]
+.    if \\n[#MLA] .sp .5v
+.    in 0
+.    ev PIC
+.    evc \\n[ev-current]
+.    nf
+.    ie \\n[#NUM_ARGS]<2 .@error bad arguments to PS (not preprocessed with pic?)
+.    el \{\
+.       if \B'\\$1' \{\
+.          ie !\B'\\$2' .ds pic*scale-width \\$1
+.          el .ds pic*scale-width \\$2
+.       \}
+.    \}
+. \" This is a bit confusing. pic is decorated with 2 args (width
+. \" and height), which are read during pre-processing but have to be
+. \" ignored when parsing args during main processing.  We shift pic's
+. \" args out of the way, then pop them off the arg stack because
+. \" they're not needed during macro processing.
+.    while \B'\\$1' .shift
+.    nr loop-counter \\n[#NUM_ARGS]
+.    nr loop-count 0 1
+.    while \\n+[loop-count]<=\\n[loop-counter] \{\
+.       if '\\$1'NO_SHIM' \{\
+.          nr float*no-shim 1
+.          shift 1
+.       \}
+.       if '\\$1'LEFT' \{\
+.          nr pic*left 1
+.          shift 1
+.       \}
+.       if '\\$1'CAPTION' \{\
+.          nr pic*have-caption 1
+.          ds pic*caption \\$2
+.          shift 2
+.       \}
+.       if '\\$1'SHORT_CAPTION' \{\
+.          ds pic*caption-short \\$2
+.          shift 2
+.       \}
+.       if '\\$1'LABEL' \{\
+.          nr pic*have-label 1
+.          ds pic*label \\$2
+.          ds label-type pic
+.          shift 2
+.       \}
+.    \}
+.    ds pic*label-sffx-tmp \\*[pic*label-sffx]
+.    substring pic*label-sffx-tmp -1
+.    if '\\*[pic*label-sffx-tmp]'.' \
+.       if \\n[pic*caption-after-label]=0 .chop pic*label-sffx
+.    if \\n[#MLA] \{\
+.       if (\\n[pic*have-label]=1):(\\n[pic*autolabel]=1) \{\
+.          if !\\n[pic*have-caption] \
+.             mla@error label caption \\n[.F] \\$0 \\n[.c]
+.       \}
+.       if \\n[pic*have-caption] \{\
+.          if !\\n[pic*have-label] \{\
+.             if !\\n[pic*autolabel] \
+.                mla@error caption label \\n[.F] \\$0 \\n[.c]
+.          \}
+.       \}
+.    \}
+.    if !'\\*[pic*text-family]'' \
+.       fam \\*[pic*text-family]
+.    if !'\\*[pic*text-font]'' \
+.       ft \\*[pic*text-font]
+.    if !'\\*[pic*text-size-change]'' \
+.       ps \\n[#DOC_PT_SIZE]u\\*[pic*text-size-change]
+.    nr lead-current \\n[.v]
+.    ie \\n[pic*text-autolead] \
+.       vs \\n[.ps]u+(\\n[pic*text-autolead]u*1000u)
+.    el .vs \\n[.ps]u
+.    nr pic@text-lead \\n[.v]
+.    nr pic@text-size \\n[.ps]
+.    if !'\\*[pic*text-color]'' .gcolor \\*[pic*text-color]
+.    if \\n[@TOP] \{\
+.       RESTORE_SPACE
+.       nr pic*top-lead-adj 1
+.    \}
+.    nr pic*top-lead-diff \\n[lead-pre-pic]u-\\n[.v]u
+.    if (\\n[pic*have-caption]=0):(\\n[pic*caption-after-label]=1) \{\
+.       ie \\n[pic*top-lead-adj] \{\
+.          sp \\n[pic*top-lead-diff]u
+.          rr pic*top-lead-adj
+.       \}
+.       el .if (\\n[pic*caption-after-label]=0):(\\n[#MLA]=0) .sp \\n[lead-pre-pic]u/2u
+.    \}
+.    di pic*div
+.END
+\#
+.MAC PE END
+.    di
+.    nr pic*div-width \\n[dl]
+.    if \\n[@TOP] \{\
+.       RESTORE_SPACE
+.    \}
+.    sp \\n[lead-pre-pic]u/2u
+.    if (\\n[pic*have-caption]=1)&(\\n[pic*caption-after-label]=0) \{\
+.       sp .5v
+.       ev caption
+.       evc \\*[ev-current]
+.       nh
+.       ie \\n[#PRINT_STYLE]=1 .TYPEWRITER
+.       el \{\
+.          pic*caption-style
+.          nr lead-current \\n[.v]
+.          vs \\n[.ps]u+\\n[pic*caption-autolead]u
+.          nr pic*caption-lead-diff \\n[lead-current]-\\n[.v]
+.          in \\n[ind-pre-pic]u
+.       \}
+.       PIC*SET_CAPTION_QUAD \\*[pic*caption-quad]
+.       if \\n[@TOP] .RESTORE_SPACE
+\!.     in -\\n[ind-pre-pic]u
+.       sp \\n[pic*caption-lead-diff]u
+\!.     if \\\\n[.ns] .rs
+.       nop \\*[pic*caption]
+.       if \\n[#PRINT_STYLE]=1 .sp .5v
+.       if !'\\*[pic*caption-space]'' \
+.          sp \\*[pic*caption-space]
+.       br
+.       ev
+.    \}
+.    if !\\n[pic*left] .in \\n[ll-pre-pic]u-\\n[pic*div-width]u/2u
+.    pic*div
+.    sp
+.    if (\\n[pic*have-label]=1):(\\n[pic*autolabel]=1):(\\n[pic*caption-after-label]=1) \{\
+.       nr lead-pre-label \\n[.v]
+.       ev label
+.       evc \\*[ev-current]
+.       ie \\n[#PRINT_STYLE]=1 .TYPEWRITER
+.       el \{\
+.          pic*label-style
+.          nr lead-current \\n[.v]
+.          vs \\n[.ps]u+\\n[pic*label-autolead]u
+.          in \\n[ind-pre-pic]u
+.          sp \\n[lead-current]u-\\n[.v]u
+.       \}
+.       if \\n[pic*label-with-chapter] \
+.          ds chapno \\n[#CH_NUM].
+.       PIC*SET_LABEL_QUAD \\*[pic*label-quad]
+\!.     in -\\n[ind-pre-pic]u
+.       sp \\n[lead-pre-label]u-\\n[.v]u
+.       if !'\\*[pic*label-space]'' .sp \\*[pic*label-space]
+.       if \\n[#PRINT_STYLE]=1 .sp .5v
+.       ie \\n[pic*autolabel] \
+.         nop \
+\\*[pic*label-prfx]\\*[chapno]\\n+[fig*label-num]\\*[pic*label-sffx]\|
+.       el .if !'\\*[pic*label]'' .nop \\*[pic*label]
+.       if \\n[pic*autolabel] \
+.          ds pic*label \\*[chapno]\\n[fig*label-num]
+.       fam
+.       ft
+.       ps
+.       gcolor
+.       ie !\\n[pic*caption-after-label] .br
+.       el \{\
+.          if !'\\*[pic*caption]'' .nop \
+\\*[pic*caption-specs]\\*[pic*caption]\\*[revert-specs]
+.          br
+.       \}
+.       ev
+.       in 0
+.    \}
+.    ev
+.    sp .5v
+.    FLOAT off
+.    in \\n[ind-pre-pic]u
+.    if !'\\*[pic*caption-short]'' .ds short -short
+.    ie !'\\*[pic*label]'' \
+.       TO_FIGURES "\\*[pic*label]" "\\*[pic*caption\\*[short]]"
+.    el .TO_FIGURES "\\*[pic*caption\\*[short]]"
+.    rm pic*caption
+.    rm pic*label
+.    rm pic*left
+.    rm short
+.    if !\\n[cutaround] .rm pic*space-adj
+.    if !\\n[defer] .rr pic*have-caption
+.    rr pic*have-label
+.    rr float*pic
+.    if '\\*[pic*label-sffx-tmp]'.' .ds pic*label-sffx .
+.END
+\#
+\# ***refer***
+\#
+\# Footnote references
+\# -------------------
+\# *Function:
+\#   Instruct REF to put references in footnotes.
+\#
+.MAC FOOTNOTE_REFS END
+.    ie !'\\$1'' .rr #FN_REF
+.    el \{\
+.       if r #EN_REF .rr #EN_REF
+.       nr #FN_REF 1
+.    \}
+.    REF_STYLE NOTE
+.END
+\#
+\# Endnote references
+\# ------------------
+\# *Function:
+\#   Instruct REF to collect references for endnotes output.
+\#
+.MAC ENDNOTE_REFS END
+.    ie !'\\$1'' .rr #EN_REF
+.    el \{\
+.       if r #FN_REF .rr #FN_REF
+.       nr #EN_REF 1
+.       if !r#EN_MARKER_STYLE .ENDNOTE_MARKER_STYLE SUPERSCRIPT
+.    \}
+.    REF_STYLE NOTE
+.END
+\#
+\# Prepare mom for a reference
+\# ---------------------------
+\# *Argument:
+\#   <none> | INDENT  L|LEFT|R|RIGHT|B|BOTH  <indent value>
+\# *Function:
+\#   Calls FOOTNOTE or ENDNOTE, depending on whether #REF_FN or
+\#   #REF_EN is set to 1.
+\# *Notes:
+\#   For convenience, REF is a toggle.
+\#
+\#   REF optionally takes the same arguments as FOOTNOTE, allowing
+\#   users to indent references that go in footnotes when footnote
+\#   indenting is required.  FOOTNOTE_REFS must be on for this.
+\#
+.MAC REF END
+.    ie \\n[#FN_REF]+\\n[#EN_REF]=0 \{\
+.       if !\\n[#REF_WARNING]=1 \{\
+.          tm1 "[mom]: Before REF at line \\n[.c], neither FOOTNOTE_REFS nor ENDNOTE_REFS
+.          tm1 "       has been selected.  If "sort" and "accumulate" are in your refer
+.          tm1 "       commands, references will be collected for later output with $LIST$.
+.          tm1 "       Otherwise, they will disappear.
+.          nr #REF_WARNING 1
+.       \}
+.    \}
+.    el \{\
+.       ie \\n[#REF]=1 \{\
+.          if \\n[#FN_REF]=1 .FOOTNOTE OFF
+.          if \\n[#EN_REF]=1 .ENDNOTE OFF
+.          rr #REF
+.       \}
+.       el \{\
+.          rr #REF_WARNING
+.          nr #REF 1
+.          if \\n[#FN_REF]=1 .FOOTNOTE \\$1 \\$2 \\$3
+.          if \\n[#EN_REF]=1 .ENDNOTE
+.       \}
+.    \}
+.END
+\#
+\# Embedded references in text (with brackets)
+\# -------------------------------------------
+\#
+.MAC REF_BRACKETS_NOTICE END
+.    tm1 "[mom]: \\$1 has been removed from mom.  See the mom documentation 'refer.html'
+.    tm1 "       for instructions on parenthetical insertions of references into text.
+.    ie '\\$1'REF_STYLE' .tm1 "       Continuing to process '\\n[.F]' from line \\n[.c].
+.    el .ab   [mom]: Aborting '\\n[.F]' at \\$1, line \\n[.c].
+.END
+\#
+.MAC REF_BRACKETS_START END
+.    REF_BRACKETS_NOTICE \\$0
+.END
+\#
+.MAC REF_BRACKETS_END END
+.    REF_BRACKETS_NOTICE \\$0
+.END
+\#
+\# These four pairs of aliases allow users to embed references in
+\# text and have them surrounded by (), [], {} or <>.
+\#
+.ALIAS REF( REF_BRACKETS_START
+.ALIAS REF) REF_BRACKETS_END
+\#
+.ALIAS REF[ REF_BRACKETS_START
+.ALIAS REF] REF_BRACKETS_END
+\#
+.ALIAS REF{ REF_BRACKETS_START
+.ALIAS REF} REF_BRACKETS_END
+\#
+.ALIAS REF< REF_BRACKETS_START
+.ALIAS REF> REF_BRACKETS_END
+\#
+.MAC REF_STYLE END
+.    REF_BRACKETS_NOTICE \\$0
+.END
+\#
+\# Refer indenting
+\# ---------------
+\# *Argument:
+\#   FOOTNOTE | ENDNOTE | BIBLIO <indent for 2nd and subsequent lines of discrete reference entries>
+\# *Function:
+\#   Sets registers #REF_FN_INDENT, #REF_EN_INDENT or #REF_BIB_INDENT.
+\# *Notes:
+\#   Indent value requires a unit of measure.  If refs are going
+\#   into footnotes or endnotes, first lines get indented; if going
+\#   into a bibliography, second lines get indented
+\#
+.MAC INDENT_REFS END
+.    if '\\$1'FOOTNOTE' .ds $REF_FN_INDENT  \\$2
+.    if '\\$1'ENDNOTE'  .ds $REF_EN_INDENT  \\$2
+.    if '\\$1'BIBLIO'   .ds $REF_BIB_INDENT \\$2
+.END
+\#
+\# Hyphenation of references
+\# -------------------------
+\# *Argument:
+\#   <none> | <anything>
+\# *Function:
+\#   Sets register #REF_HY
+\#
+.MAC HYPHENATE_REFS END
+.    ie '\\$1'' .nr #REF_HY 1
+.    el \{\
+.       if r #REF_HY .rr #REF_HY
+.    \}
+.END
+\#
+\# The remainder of the definitions in this section are modified
+\# versions of the definitions found in the refer module of s.tmac.
+\#
+.de @error
+.tm [mom]: '\\n[.F]', line \\n[.c]: \\$*
+..
+\#
+\# Underlining unavoidably turns off sentence spacing.
+\#
+.de ref*restore-ss
+\c
+.SS \\*[$SAVED_SS_VAR]
+.if '\\n[.z]'END_NOTES' \{\
+\c
+\E*[PREV]\c
+.\}
+..
+\# The following strings define the order of entries for different
+\# types of references.  Each letter in the string refers to a database
+\# field (A for author, T1/T2 for article and book titles, etc).
+\#
+.de ref*specs
+.if \\n[#PRINT_STYLE]=1 \{\
+.   char '     \[aq]
+.   char \[oq] \[aq]
+.\}
+.\" Internet site - type 0
+.ds ref*spec!0 i Q A m p T2 s o D c a u n
+.\" Journal article - type 1
+.ds ref*spec!1 i Q A m p T2 q O J V S N D P n
+.\" Book - type 2
+.ds ref*spec!2 i Q A m p T1 q b d l r E S e V O C I D P t n
+.\" Article within book - type 3
+.ds ref*spec!3 i Q A m p T2 B b d l r E S e V O C I D P t n
+.\" Tech report - type 4
+.ds ref*spec!4 i Q A m p T1 R G O C I D P n
+.\" Magazine or newspaper article - type 5
+.ds ref*spec!5 i Q A m p T2 O M V S N D P n
+..
+\#
+\# Refer's "1st" macro.  Since it is possible to define database
+\# fields using any single letter, we remove all possible string
+\# definitions of the form [X and [x.  Also, reset ref*spec!<n>
+\# strings to their defaults.
+\#
+.de ]-
+.ref*specs
+.rm [A [B [C [D [E [F [G [H [I [J [K [L [M \
+    [N [O [P [Q [R [S [T [U [V [W [X [Y [Z \
+    [a [b [c [d [e [f [g [h [i [j [k [l [m \
+    [n [o [p [q [r [s [t [u [v [w [x [y [z
+.if r [e .rr [e \" [e persists if %e field is last
+.rr ref*type
+.rm ref*string
+..
+\#
+\# Refer's "2nd" macro; builds up a reference with ref*build, and
+\# prints it with ref*print.
+\#
+.de ][
+.nr ref*type \\$1
+.if \\n[ref*type]=0 \{\
+.   ie d [C \{\
+.      if !d [I \{\
+.         nr pre-1900 1 \" If pre-1900, MLA allows excluding publisher
+.         nr ref*type 2
+.      \}
+.   \}
+.   el .nr ref*type 2
+.   if d [q .nr ref*type 2
+.\}
+.if \\n[ref*type]=3 \{\
+.   if !'\\*([R'' \{\
+.      nr ref*type 4
+.      ds ref*spec!4 i Q A m p T2 B R O C I D P n
+.   \}
+.   if !'\\*([G'' \{\
+.      nr ref*type 4
+.      ds ref*spec!4 i A m p T2 B G O C I D P O n
+.   \}
+.\}
+.if r [T \{\
+.   als [T1 [T
+.   als [T2 [T
+.\}
+.ie d ref*spec!\\n[ref*type] .ref*build \\*[ref*spec!\\n[ref*type]]
+.el \{\
+.   @error unknown reference type `\\n[ref*type]'
+.   ref*build \\*[ref*spec!0]
+.\}
+.if !\\n[.hy]=0 \{\
+.nr #RESTORE_HY \\n[.hy]
+.if !r#REF_HY .nh
+.\}
+.ref*print
+.if !\\n[#RESTORE_HY]=0 .hy \\n[#RESTORE_HY]
+.rr #RESTORE_HY
+.rm ref*string
+.rm [F [T1 [T2
+..
+\#
+\# Refer's "3rd" macros, which set up and terminate the output
+\# of collected references
+\#
+.de ]<
+.als ref*print ref*end-print
+.nr #REF 1
+.if \\n[#BIB_LIST]=1 \{\
+.   nr #IN_BIB_LIST 1
+.   LIST DIGIT \\*[$BIB_LIST_SEPARATOR] \\*[$BIB_LIST_PREFIX]
+.\}
+..
+\#
+.de ]>
+.LIST OFF
+.rr #REF
+.rr #IN_BIB_LIST
+.als ref*print ref*normal-print
+..
+\#
+\# Output
+\# ------
+\#
+\# Output normal, non-collected refs
+\#
+.de ref*normal-print
+.nr #CURRENT_HY \\n[.hy]
+\\*[ref*string]
+..
+\#
+\# Output collected refs
+\#
+.de ref*end-print
+.\" 10 is arbitrary
+.nn 10
+.nr #REF_BIB_INDENT (u;\\*[$REF_BIB_INDENT])
+.ie \\n[#BIB_LIST]=0 \{\
+.   in +\\n[#REF_BIB_INDENT]u
+.   ti -\\n[#REF_BIB_INDENT]u
+.\}
+.el .ITEM
+.\" Part of workaround for refer spitting out a blank page if the
+.\" last ref falls on the bottom line.
+\\*[ref*string]\R'ref*num*first-pass +1'\?\R'ref*num +1'\?
+.sp \\n[#BIB_SPACE]u
+.ie \\n[#BIB_LIST]=0 .in
+.el .IL -\\n[#REF_BIB_INDENT]u
+.nn 0
+..
+\#
+.als ref*print ref*normal-print
+\#
+\# Build up the ref*string
+\#
+\# Correct MLA "typewritten" style (printstyle TYPEWRITE) demands
+\# two spaces after each period.  The spaces are hardwired into the
+\# string definitions (ref*add-<x>), so we have to make sure that there
+\# aren't two spaces when the printstyle is TYPESET.  Since I find that
+\# references look a bit crowded with 0 sentence space, I've bumped it
+\# up to +4.  User's sentence spacing is reset in FOOTNOTES and ENDNOTES.
+\#
+.de ref*build
+.if \\n[#PRINT_STYLE]=2 \{\
+.   ds $RESTORE_SS_VAR \\*[$SS_VAR]
+.   SS +8
+.\}
+.rm ref*string
+.while \\n[.$] \{\
+.   if d [\\$1 \{\
+.      ie d ref*add-\\$1 .ref*add-\\$1
+.      el .ref*add-dflt \\$1
+.   \}
+.   shift
+.\}
+.\" now add a final period
+.ie d ref*string \{\
+.   if !\\n[ref*suppress-period] .as ref*string .
+.   if d ref*post-punct \{\
+.      as ref*string "\\*[ref*post-punct]
+.      rm ref*post-punct
+.   \}
+.\}
+.el .ds ref*string
+..
+\#
+\# The following macros determine how entries are formatted WRT
+\# punctuation, type style, additional strings, etc.
+\#
+\# o First argument is the database field letter.
+\# o Second argument is the punctuation character to use to separate this
+\#   field from the previous field.
+\# o Third argument is a string with which to prefix this field.
+\# o Fourth argument is a string with which to postfix this field.
+\# o Fifth argument is a string to add after the punctuation character
+\#   supplied by the next field.
+\#
+\# %A Author(s)
+.de ref*add-A
+.ds eval*[A \\*([A
+.substring eval*[A -1
+.if '\\*[eval*[A]'.' \{\
+.   if !'\\*[$REF_STYLE]'NOTE' .chop [A
+.\}
+.\" Per MLA, NOTE should not use idem, therefore if %i contains other than
+.\" idem (eg. ed., trans.), transpose it to after author's name
+.ie '\\*[$REF_STYLE]'NOTE' \{\
+.   ie !'\\*[idem]'' .ref*field A "" "" ", \\*[idem]"
+.   el .ref*field A
+.   rm idem
+.el .ref*field A
+.\}
+.if \\n([A .nr ref*suppress-period 1
+..
+\# %i Idem.  BIBLIO: In all instances, removes %A field and replaces
+\# it with a dash; if %i field contains other than the word, idem,
+\# appends it to the dash
+.de ref*add-i
+.ie '\\*[$REF_STYLE]'NOTE' \{\
+.   ie '\\*([i'idem' .rm [i
+.   el .ds idem \\*([i
+.\}
+.el \{\
+.   ie '\\*([i'idem' \{\
+.      rm [A
+.      rm [i
+.      ref*field i "" \[idem] "" " "
+.   \}
+.   el \{\
+.      ds eval*[i \\*([i
+.      substring eval*[i -1
+.      if '\\*[eval*[i]'.' \{\
+.         chop [i
+.         ds idem \\*([i
+.      \}
+.      rm [i
+.      rm [A
+.      ref*field i "" \[idem] ", \\*[idem]" " "
+.   \}
+.\}
+..
+\# %m Multiple authors (et al.)
+.de ref*add-m
+.if !'\\*[$REF_STYLE]'NOTE' \{\
+.   ds eval*[m \\*([m
+.   substring eval*[m -1
+.   if '\\*[eval*[m]'.' .chop [m
+.\}
+.ref*field m ,
+..
+\# %p Post-author string (eg. Preface, Foreword, etc)
+.de ref*add-p
+.\" Convert first letter to uppercase, per MLA, if BIBLIO
+.if '\\*[$REF_STYLE]'BIBLIO' \{\
+.   ds initial*cap \\*([p
+.   substring initial*cap 0 0
+.   ds [p*string \\*([p
+.   substring [p*string 1
+.   ds [p \E*[UC]\\*[initial*cap]\E*[LC]\\*[[p*string]
+.\}
+.ie '\\*[$REF_STYLE]'NOTE' .ref*field p ,
+.el .ref*field p . " "
+..
+\# %Q Author(s) when author is not a person
+.de ref*add-Q
+.ie '\\*[$REF_STYLE]'NOTE' .ref*field Q
+.el .ref*field Q
+..
+\# %T Title (generic)
+.de ref*add-T1
+.ie '\\*[$REF_STYLE]'NOTE' .ref*field T , \E*[IT] \E*[ref*restore-ss]
+.el \{\
+.   ie !'\\*([A'' .ref*field T . " \E*[IT]" \E*[ref*restore-ss]
+.   el \{\
+.      ie !'\\*([Q'' .ref*field T . " \E*[IT]" \E*[ref*restore-ss]
+.      el .ref*field T . \E*[IT] \E*[ref*restore-ss]
+.   \}
+.\}
+.if \\n([T .nr ref*suppress-period \\n([T
+.
+..
+\# %T Title of a chapter or article
+.de ref*add-T2
+.ie '\\*[$REF_STYLE]'NOTE' \{\
+.   ref*field T , \[lq] "" \[rq]
+.\}
+.el \{\
+.   ie '\\*([A'' \{\
+.      ref*field T . \[lq] "" \[rq]
+.      if !'\\*([Q''.ref*field T . " \[lq]" "" \[rq]
+.   \}
+.   el .ref*field T . " \[lq]" "" \[rq]
+.\}
+.if \\n([T .nr ref*suppress-period \\n([T
+..
+\# %B Book title (when citing an article from a book)
+.de ref*add-B
+.ie '\\*[$REF_STYLE]'NOTE' \{\
+.   ie \\n([T .ref*field B "" \E*[IT] \E*[ref*restore-ss]
+.   el .ref*field B , \E*[IT] \E*[ref*restore-ss]
+.\}
+.el \{\
+.   ie \\n([T .ref*field B "" ".\E*[IT]" \E*[ref*restore-ss]
+.   el .ref*field B . " \E*[IT]" \E*[ref*restore-ss]
+.\}
+\# refer doesn't set reg [T to 1 for these book titles, so we do it here
+.ds eval*[B \\*([B
+.substring eval*[B -1
+.rr [T
+.if '\\*[eval*[B]'!' .nr [T 1
+.if '\\*[eval*[B]'?' .nr [T 1
+.rm eval*[B
+..
+\# %q Titles that must go in quotes (e.g. an unpublished dissertation)
+.de ref*add-q
+.ie '\\*[$REF_STYLE]'NOTE' .ref*field q , \[lq] "" \[rq]
+.el \{\
+.   ie !'\\*([A'' .ref*field q . " \[lq]" "" \[rq]
+.   el \{\
+.      ie !'\\*([Q'' .ref*field q . " \[lq]" "" \[rq]
+.      el .ref*field q . \[lq] "" \[rq]
+.   \}
+.\}
+..
+\# %R Report number for technical reports
+.de ref*add-R
+.ref*field R . " "
+..
+\# %J Journal name
+.de ref*add-J
+.ie '\\*[$REF_STYLE]'NOTE' \{\
+.   ie \\n([T .ref*field J "" "\E*[IT]" \E*[ref*restore-ss]
+.   el .ref*field J , "\E*[IT]" \E*[ref*restore-ss]
+.\}
+.el \{\
+.   ie \\n([T .ref*field J "" " \E*[IT]" \E*[ref*restore-ss]
+.   el .ref*field J . " \E*[IT]" \E*[ref*restore-ss]
+.\}
+..
+\# %M Magazine or newspaper name
+.de ref*add-M
+.ie '\\*[$REF_STYLE]'NOTE' \{\
+.   ie \\n([T .ref*field M "" "\E*[IT]" \E*[ref*restore-ss]
+.   el .ref*field M , "\E*[IT]" \E*[ref*restore-ss]
+.\}
+.el \{\
+.   ie \\n([T .ref*field M "" " \E*[IT]" \E*[ref*restore-ss]
+.   el .ref*field M . " \E*[IT]" \E*[ref*restore-ss]
+.\}
+..
+\# %E Editor(s)
+.de ref*add-E
+.ds eval*[E \\*([E
+.substring eval*[E -1
+.if '\\*[eval*[E]'.' \{\
+.   if !\\n[#FN_REF]+\\n[#EN_REF] .chop [E
+.   rm eval*[E
+.\}
+.\" Workaround for join-authors also joining editors.  MLA style
+.\" requires a comma after first editor only if there are more than
+.\" two, whereas join-authors always puts a comma after the first if
+.\" there's more than one.
+.rm eval*[E
+.nr position 1 1
+.nr counter 1 1
+.while !'\\*[eval*[E]',' \{\
+.   ds eval*[E \\*([E
+.   substring eval*[E \\n+[position] \\n[position]
+.   if \\n+[counter]>30 .break \" 30 is abitrary
+.\}
+.\" Check for " and"
+.if '\\*[eval*[E]',' \{\
+.   ds eval*[E \\*([E
+.   nr and-check \\n[position]+4
+.   substring eval*[E \\n+[position] \\n[and-check]
+.\}
+.if '\\*[eval*[E]' and' \{\
+.   nr counter 1 1
+.   nr start-range -1 1
+.   nr end-range 3 1
+.   while !'\\*[eval*[E]', and' \{\
+.      ds eval*[E \\*([E
+.      substring eval*[E \\n+[start-range] \\n+[end-range]
+.      if \\n+[counter]>50 .break \" just in case; 50 is arbitrary
+.   \}
+.   if '\\*[eval*[E]', and' \{\
+.      length len*[E \\*([E
+.      nr rhs \\n[len*[E]-\\n[start-range]
+.      ds lhs \\*([E
+.      ds rhs \\*([E
+.      substring lhs 0 \\n[start-range]-1
+.      substring rhs -(\\n[rhs]-1)
+.      ds [E \\*[lhs]\\*[rhs]
+.   \}
+.   rm lhs
+.   rm rhs
+.   rr and-check
+.   rr counter
+.   rr start-range
+.   rr end-range
+.   rr len*[E
+.\}
+.\" End workaround
+.ie !\\n[ref*type]=0 \{\
+.   ie \\n([E>0 \{\
+.      ie '\\*[$REF_STYLE]'NOTE' \{\
+.         ie \\n([T .ref*field E "" "ed. "
+.         el .ref*field E , "ed. "
+.      \}
+.      el \{\
+.         ie \\n([T .ref*field E "" " Eds. "
+.         el .ref*field E . " Eds. "
+.      \}
+.   \}
+.   el \{\
+.      ie '\\*[$REF_STYLE]'NOTE' \{\
+.         ie \\n([T .ref*field E "" "ed. "
+.         el .ref*field E , "ed. "
+.      \}
+.      el \{\
+.         ie \\n([T .ref*field E "" " Ed. "
+.         el .ref*field E . " Ed. "
+.      \}
+.   \}
+.\}
+.el \{\
+.   ie \\n([T .ref*field E "" " "
+.   el .ref*field E . " "
+.\}
+.rr [T
+.rr [E
+..
+\# %e Edition
+.de ref*add-e
+.ie \\n([T .ref*field e "" "" " ed."
+.el \{\
+.   ie '\\*[$REF_STYLE]'NOTE' .ref*field e , "" " ed."
+.   el .ref*field e . " " " ed."
+.\}
+.nr ref*suppress-period 1
+.nr [e 1
+.rr [T
+..
+\# %V Volume (of a journal, or series of books); for journals, %N may be preferable
+.de ref*add-V
+.if \\n[ref*type]=1 \{\
+.   ref*field V
+.\}
+.if \\n[ref*type]=2 \{\
+.   ie '\\*[$REF_STYLE]'NOTE' .ref*field V , "vol. "
+.   el \{\
+.      ie \\n([T .ref*field V "" " Vol. "
+.      el .ref*field V . " Vol. "
+.   \}
+.\}
+.if \\n[ref*type]=3 \{\
+.   ie \\n([T .ref*field V "" " "
+.   el .ref*field V . " "
+.\}
+.rr [T
+..
+\# %N Journal number
+.de ref*add-N
+.ref*field N
+..
+\# %S Series (books or journals)
+.de ref*add-S
+.if \\n[ref*type]=1 \{\
+.   ref*field S
+.\}
+.if \\n[ref*type]=2 \{\
+.   ie '\\*[$REF_STYLE]'NOTE' \{\
+.      ie \\n([T .ref*field S
+.      el .ref*field S ,
+.   \}
+.   el \{\
+.      ie \\n([T .ref*field S "" " "
+.      el .ref*field S . " "
+.   \}
+.\}
+.if \\n[ref*type]=3 \{\
+.   ie \\n([T .ref*field S "" " "
+.   el .ref*field S . " "
+.\}
+.rr [T
+\# refer doesn't set reg [T to 1 for series titles, so we do it here
+.ds eval*[S \\*([S
+.substring eval*[S -1
+.if '\\*[eval*[S]'!' .nr [T 1
+.if '\\*[eval*[S]'?' .nr [T 1
+.rm eval*[S
+..
+\# %C City
+.de ref*add-C
+.ie '\\*[$REF_STYLE]'NOTE' \{\
+.   ie r [d \{\
+.      ref*field C
+.      rr [d
+.   \}
+.   el \{\
+.      ref*field C "" \*[FU 2](
+.   \}
+.   if \\n([T .nr ref*suppress-period \\n([T
+.\}
+.el \{\
+.   ie \\n([T .ref*field C "" " "
+.   el \{\
+.      ie r [e .ref*field C "" " "
+.      el .ref*field C . " "
+.   \}
+.\}
+.rr [T
+.rr [e
+..
+\# %I Publisher (I stands for Issuer)
+.de ref*add-I
+.ie '\\*[$REF_STYLE]'NOTE' \{\
+.   ie !'\\*([C'' .ref*field I :
+.   el .ref*field I "" (
+.\}
+.el \{\
+.   ie !'\\*([C'' .ref*field I :
+.   el \{\
+.      ie \\n([T .ref*field I "" " "
+.      el .ref*field I . " "
+.   \}
+.\}
+.rr [T
+..
+\# %D Date of publication
+.de ref*add-D
+.if \\n[ref*type]=0 \{\
+.   ie '\\*[$REF_STYLE]'NOTE' .ref*field D ,
+.   el .ref*field D . " "
+.\}
+.if \\n[ref*type]=1 \{\
+.   ref*field D "" "(" ")"
+.\}
+.if \\n[ref*type]=2 \{\
+.   ie '\\*[$REF_STYLE]'NOTE' .ref*field D , "" )
+.   el .ref*field D ,
+.\}
+.if \\n[ref*type]=3 \{\
+.   ie !'\\*([C'' \{\
+.      ie '\\*[$REF_STYLE]'NOTE' .ref*field D , "" )
+.      el .ref*field D ,
+.   \}
+.   el \{\
+.      if '\\*([I'' \{\
+.         ds eval*[D \\*([D
+.         substring eval*[D 0 -4
+.         ie '\\*[eval*[D]'1' .ds kern \*[BU3]
+.         el .ds kern \*[BU2]
+.         ie \\n[#PRINT_STYLE]=2 \{\
+.           if '\\*[$REF_STYLE]'NOTE' .ref*field D "" (\\*[kern] )
+.         \}
+.         el .ref*field D
+.      \}
+.      rm eval*[D
+.      rm kern
+.   \}
+.\}
+.if \\n[ref*type]=4 .ref*field D ,
+.if \\n[ref*type]=5 .ref*field D
+.ds eval*[D \\*([D
+.substring eval*[D -1
+.if '\\*[eval*[D]'.' .nr ref*suppress-period 1
+..
+\# %P Page number(s)
+.de ref*add-P
+.if \\n[ref*type]=5 .nr ref*type 1
+.ie '\\*[$REF_STYLE]'NOTE' \{\
+.   ie \\n[ref*type]=1 .ref*field P : "" .
+.   el .ref*field P "" "\|"
+.   if \\n[ref*type]=1 .nr ref*suppress-period 1
+.\}
+.el \{\
+.   ie \\n[ref*type]=1 .ref*field P \|:
+.   el \{\
+.      ie d [n .ref*field P . \| .
+.      el .ref*field P . " "
+.   \}
+.\}
+..
+\# %G Gov't. ordering number
+.de ref*add-G
+.ie '\\*[$REF_STYLE]'NOTE' ref*field G ,
+.el .ref*field G . " "
+..
+\# %O Other (info that goes after %T [or %B] but is hard to categorize; eg a dissertation)
+.de ref*add-O
+.ds eval*[O \\*([O
+.substring eval*[O -1
+.if '\\*[eval*[O]'.' .nr [O 1
+.ds initial*cap \\*([O
+.substring initial*cap 0 0
+.ds [O*string \\*([O
+.substring [O*string 1
+.if '\\*[$REF_STYLE]'BIBLIO' \{\
+.   ds [O \E*[UC]\\*[initial*cap]\E*[LC]\\*[[O*string]
+.\}
+.ie '\\*[$REF_STYLE]'NOTE' .ref*field O ,
+.el \{\
+.   if \\n([O=1 .chop [O
+.   ie r [e .ref*field O "" " "
+.   el \{\
+.      ie !d [A .ref*field O
+.      el .ref*field O . " "
+.   \}
+.\}
+.rr [O
+.rr [e
+..
+\# %n Annotations (after ref)
+.de ref*add-n
+.ds eval*[n \\*([n
+.substring eval*[n -1
+.if '\\*[eval*[n]'.' .chop [n
+.if '\\*[eval*[n]'?' .nr [n 1
+.if '\\*[eval*[n]'!' .nr [n 1
+.ie '\\*[$REF_STYLE]'NOTE' .ref*field n ,
+.el \{\
+.   ie !'\\*([P'' .ref*field n "" " "
+.   el .ref*field n . " "
+.\}
+.if r [n .nr ref*suppress-period 1
+.rr [n
+..
+\#
+.de ref*add-dflt
+.ref*field \\$1 ,
+..
+\#
+\# Book reprints
+\# -------------
+\# %d date of publication (the orignal date of publication)
+.de ref*add-d
+.ie '\\*[$REF_STYLE]'NOTE' \{\
+.   ref*field d "" ( ;
+.   nr [d 1
+.\}
+.el \{\
+.   ie \\n([T .ref*field d "" " "
+.   el .ref*field d . " "
+.\}
+.rr [T
+..
+\# %b main author when citing from a preface, introduction, foreword
+\# or afterword
+.de ref*add-b
+.ie '\\*[$REF_STYLE]'NOTE' \{\
+.   ie \\n([T .ref*field b "" "by"
+.   el .ref*field b , "by "
+.\}
+.el \{\
+.   ie \\n([T .ref*field b "" " By "
+.   el .ref*field b . " By "
+.\}
+.rr [T
+..
+\# %t title, if different from original title (the T field, which s/b
+\# the original title)
+.de ref*add-t
+.ie '\\*[$REF_STYLE]'NOTE' .ref*field t , "rpt. of \E*[IT] " \E*[ref*restore-ss]
+.el \{\
+.   ie \\n([T .ref*field t "" " Rpt. of \E*[IT] " \E*[ref*restore-ss]
+.   el .ref*field t . " Rpt. of \E*[IT] " \E*[ref*restore-ss]
+.\}
+.rr [T
+..
+\#
+\# Translated works
+\# ----------------
+\# %l Trans(l)ator
+.de ref*add-l
+.ie '\\*[$REF_STYLE]'NOTE' \{\
+.   ie \\n([T .ref*field l "" "trans. "
+.   el .ref*field l , "trans. "
+.\}
+.el \{\
+.   ie \\n([T .ref*field l "" " Trans. "
+.   el .ref*field l . " Trans. "
+.\}
+.rr [T
+..
+\# %r Translato(r) and edito(r)
+.de ref*add-r
+.ie '\\*[$REF_STYLE]'NOTE' .ref*field r , "trans. and ed. "
+.el \{\
+.   ie \\n([T .ref*field r "" " Trans. and ed. "
+.   el .ref*field r . " Trans. and ed. "
+.\}
+.rr [T
+..
+\#
+\# Internet
+\# --------
+\# %s Site name
+.de ref*add-s
+.ie '\\*[$REF_STYLE]'NOTE' .ref*field s , \E*[IT] \E*[ref*restore-ss]
+.el \{\
+.ie \\n([s .ref*field s "" ".\E*[IT]" \E*[ref*restore-ss]
+.el .ref*field s . " \E*[IT]" \E*[ref*restore-ss]
+.\}
+.\" refer doesn't set reg [T to 1 for these titles, so we do it here
+.if !'\\*[$REF_STYLE]'NOTE' \{\
+.   ds eval*[s \\*([s
+.   substring eval*[s -1
+.   rr [T
+.   if '\\*[eval*[s]'.' .nr [T 1
+.   if '\\*[eval*[s]'!' .nr [T 1
+.   if '\\*[eval*[s]'?' .nr [T 1
+.   rm eval*[s
+.\}
+..
+\# %c content of site (ie. Web, Online posting, etc)
+.de ref*add-c
+.ie '\\*[$REF_STYLE]'NOTE' .ref*field c ,
+.el \{\
+.   ie \\n([T .ref*field c "" " "
+.   el .ref*field c . " "
+.\}
+.rr [T
+..
+\# %o organization, group or sponsor of site
+.de ref*add-o
+.ie '\\*[$REF_STYLE]'NOTE' .ref*field o ,
+.el \{\
+.   ie \\n([T .ref*field o "" " "
+.   el .ref*field o . " "
+.\}
+.rr [T
+..
+\# %a access date, i.e. the date you read it
+.de ref*add-a
+.ie '\\*[$REF_STYLE]'NOTE' .ref*field a ,
+.el \{\
+.   ie \\n([T .ref*field a "" " "
+.   el .ref*field a . " "
+.\}
+.rr [T
+..
+\# %u URL
+.de ref*add-u
+.ref*field u "" < >
+.rr [T
+..
+.de ref*add-z
+.ref*field z
+..
+\#
+\# Build up reference string from ref*add-<x> macros.
+\#
+\# First, a string to ensure next field's font is reset to roman
+\# (TYPESET) or non-underlined (TYPEWRITE)
+\#
+.ie !n .ds ref*roman \f[R]\X'ps: exec decornone'\?\R'#UNDERLINE_ON 0'\?
+.el .ds ref*roman \f[R]\?\R'#UNDERLINE_ON 0'\?
+\#
+.de ref*field
+.if d ref*string \{\
+.   ie d ref*post-punct \{\
+.      as ref*string "\\$2\\*[ref*post-punct] \"
+.      rm ref*post-punct
+.   \}
+.   el .as ref*string "\\$2 \"
+.\}
+.as ref*string "\\$3\\*([\\$1\\$4\E*[ref*roman]
+.if \\n[.$]>4 .ds ref*post-punct "\\$5\E*[ref*roman]
+.nr ref*suppress-period 0
+..
+\#
+\# MARGIN NOTES
+\# ------------
+\#
+\# Wrapper for MNinit.
+\#
+.MAC MN_INIT END
+.    if \B'\\$2' \{\
+.       tm1 "[mom]: 1.x-style \\$0 detected, but you are using v2.x.
+.       tm1 "       v2.x requires flags before arguments to \\$0.
+.       tm1 "       Please read docelement.html#mn-init and update your file.
+.       ab   [mom]: Aborting '\\n[.F]' at \\$0, line \\n[.c].
+.    \}
+.    nr #ARGS  0 1
+.    nr #COUNT 9
+.    while \\n+[#ARGS]<=\\n[#COUNT] \{\
+.      ds $MN-arg\\n[#ARGS] @
+.    \}
+.    nr #FLAG 0 1
+.    nr #COUNT \\n[#NUM_ARGS]
+.    while \\n+[#FLAG]<=\\n[#COUNT] \{\
+.       if '\\$1'RAGGED' \{\
+.          ds $MN-arg1 \\$1
+.       shift
+.       \}
+.       if '\\$1'SYMMETRIC' \{\
+.          ds $MN-arg1 \\$1
+.          shift
+.       \}
+.       if '\\$1'L_WIDTH' \{\
+.          shift
+.          ds $MN-arg2 \\$1
+.          shift
+.       \}
+.       if '\\$1'R_WIDTH' \{\
+.          shift
+.          ds $MN-arg3 \\$1
+.          shift
+.       \}
+.       if '\\$1'GUTTER' \{\
+.          shift
+.          ds $MN-arg4 \\$1
+.          shift
+.       \}
+.       if '\\$1'FONTSTYLE' \{\
+.          shift
+.          ds $MN-arg5 \\$1
+.          shift
+.       \}
+.       if '\\$1'SIZE' \{\
+.          shift
+.          ds $MN-arg6 \\$1
+.          shift
+.       \}
+.       if '\\$1'LEAD' \{\
+.          shift
+.          ds $MN-arg7 \\$1
+.          shift
+.       \}
+.       if '\\$1'COLOR' \{\
+.          shift
+.          ds $MN-arg8 \\$1
+.          shift
+.       \}
+.       if '\\$1'HY' \{\
+.          shift
+.          ds $MN-arg9 \\$1
+.          shift
+.       \}
+.    \}
+.    if '\\*[$MN-arg5]'@' .ds $MN-arg5 \E*[$DOC_FAM]R
+.    MNinit \
+\\*[$MN-arg1] \\*[$MN-arg2] \
+\\*[$MN-arg3] \\*[$MN-arg4] \
+\\*[$MN-arg5] \\*[$MN-arg6] \
+\\*[$MN-arg7] \\*[$MN-arg8] \
+\\*[$MN-arg9]
+.END
+\#
+.MAC MN_OVERFLOW_TRAP END
+.    if \\n[#OVERFLOW_LEFT]=1 \{\
+.       nr #no-repeat-MN-left 1
+.       di MN_OVERFLOW_LEFT
+.    \}
+.    if \\n[#OVERFLOW_RIGHT]=1 \{\
+.       nr #no-repeat-MN-right 1
+.       di MN_OVERFLOW_RIGHT
+.    \}
+.    rr #OVERFLOW_LEFT
+.    rr #OVERFLOW_RIGHT
+.END
+\#
+\# The remainder of the margin notes macros and routines are adapted
+\# from Werner Lemberg's MN.tmac.
+\#
+\# MNinit
+\# ------
+\# Usage:
+\# MNinit [ragged|symmetric] \
+\#        left-width right-width separation \
+\#        font fontsize vertical-spacing \
+\#        color hyphenation-flags
+\#
+\# Initialize margin notes.  Empty arguments (denoted with "") set
+\# default values.  If the first argument is the string `ragged',
+\# left and right margin notes are printed ragged-right.  If it is
+\# `symmetric', left margin notes are printed ragged-left and right
+\# margin notes ragged-right.  If omitted, margin notes are left
+\# and right adjusted.
+\#
+.de MNinit
+.  nr #MNinit 1
+.  ds MN-left-ad b\"
+.  ds MN-right-ad b\"
+.  if '\\$1'@' .shift
+.  if '\\$1'RAGGED' \{\
+.    ds MN-left-ad l\"
+.    ds MN-right-ad l\"
+.    shift
+.  \}
+.  if '\\$1'SYMMETRIC' \{\
+.    ds MN-left-ad r\"
+.    ds MN-right-ad l\"
+.    shift
+.  \}
+.  ie \B'\\$3' .nr MN-sep (n;\\$3)
+.  el .nr MN-sep 1m
+.  if ((\\n[.o] - \\n[MN-sep]) < 1n) \
+.    ab MN: Left margin too small (<1n) for requested margin notes separation.
+.  ie \B'\\$1' \{\
+.    nr MN-left-width (n;\\$1)
+.    nr MN-left-start (\\n[.o] - \\n[MN-sep] - \\n[MN-left-width])
+.  \}
+.  el \{\
+.    nr MN-left-width (\\n[.o] - \\n[MN-sep])
+.    nr MN-left-start 0
+.  \}
+.  if (\\n[MN-left-start] < 0) \
+.    ab MN: Left margin too small for requested margin notes settings.
+.  if (\\n[MN-left-width] < 1n) \
+.    ab MN: Left margin notes width too small (<1n).
+.  ie \B'\\$2' \{\
+.    nr MN-right-width (n;\\$2)
+.    nr MN-right-start (\\n[.o] + \\n[.l] + \\n[MN-sep])
+.    if \\n[#COLUMNS]=1 \{\
+.      if !\\n[#NUM_COLS]=1 \{\
+.        nr MN-right-start (\\n[#COL_2_L_MARGIN] + \\n[#COL_L_LENGTH] + \\n[MN-sep])
+.      \}
+.    \}
+.  \}
+.  el \{\
+.    nr MN-right-width \\n[MN-left-width]
+.    nr MN-right-start (\\n[.o] + \\n[.l] + \\n[MN-sep])
+.    if \\n[#COLUMNS]=1 \{\
+.      if !\\n[#NUM_COLS]=1 \{\
+.        nr MN-right-start (\\n[#COL_2_L_MARGIN] + \\n[#COL_L_LENGTH] + \\n[MN-sep])
+.      \}
+.    \}
+.  \}
+.  ie \A'\\$4' \{\
+.    ds MN-font \\$4\"
+.    if \\n[#PRINT_STYLE]=1 .ds MN-font CR
+.  \}
+.  el \{\
+.    ds MN-font \\*[$PP_FT]
+.    if \\n[#PRINT_STYLE]=1 .ds MN-font CR
+.  \}
+.  ie \B'\\$5' \{\
+.    ps \\$5
+.    nr MN-size \\n[.ps]
+.    ps
+.    if \\n[#PRINT_STYLE]=1 \{\
+.       ps \\*[$TYPEWRITER_PS]
+.       nr MN-size \\n[.ps]
+.       ps
+.    \}
+.  \}
+.  el \
+.    nr MN-size \\n[#DOC_PT_SIZE]
+.  ie \B'\\$6' \{\
+'    vs \\$6
+.    nr MN-spacing \\n[.v]
+'    vs
+.    if \\n[#PRINT_STYLE]=1 \
+.       nr MN-spacing \\n[#DOC_LEAD]
+.  \}
+.  el .nr MN-spacing \\n[#DOC_LEAD]
+.  ie \A'\\$7' \
+.    if !\\n[#PRINT_STYLE]=1 .ds MN-color \\$7\"
+.  el \
+.    if !\\n[#PRINT_STYLE]=1 .ds MN-color
+.  ie \B'\\$8' .nr MN-hy \\$8
+.  el .nr MN-hy \\n[.hy]
+.  ev MNbottom-left-env
+.  if \A'\\*[MN-font]' .ft \\*[MN-font]
+.  if \\n[MN-size] .ps \\n[MN-size]u
+.  if \\n[MN-spacing] .vs \\n[MN-spacing]u
+.  ll \\n[MN-left-width]u
+.  ad \\*[MN-left-ad]
+.  hy \\n[MN-hy]
+'  in 0
+.  nop \m[\\*[MN-color]]\c
+.  ev
+.  ev MNbottom-right-env
+.  if \A'\\*[MN-font]' .ft \\*[MN-font]
+.  if \\n[MN-size] .ps \\n[MN-size]u
+.  if \\n[MN-spacing] .vs \\n[MN-spacing]u
+.  ll \\n[MN-right-width]u
+.  ad \\*[MN-right-ad]
+.  hy \\n[MN-hy]
+'  in 0
+.  nop \m[\\*[MN-color]]\c
+.  ev
+.  nr MN-active 0
+..
+\# MN
+\# --
+\# Usage:
+\#
+\#   MN LEFT|RIGHT
+\#   margin note text
+\#   MN
+\#
+\# With a parameter, start a margin note, otherwise end a margin note.
+\# If the parameter is the string `left', define a left margin note,
+\# otherwise define a right margin note.
+\#
+.de MN
+. ds MN-dir \\$1
+. if !'\\$1'LEFT' \{\
+.   if !'\\$1'RIGHT' \{\
+.     MN_QUIT
+.     return
+.   \}
+. \}
+. if \\n[#COLUMNS]=1 \{\
+.  if \\n[#NUM_COLS]>2 \{\
+.    tm [mom]: Macro MN: More than two columns.  Ignoring margin notes.
+.    return
+.  \}
+.  if !\\n[#NUM_COLS]=1 \{\
+.    ie \\n[#COL_NUM]=1 .ds MN-dir LEFT
+.    el .ds MN-dir RIGHT
+.  \}
+. \}
+.  if !\\n[#MNinit]=1 \{\
+.    tm1 "[mom]: Macro MN: You must set parameters with MN_INIT before using MN.
+.    ab   [mom]: Aborting '\\n[.F]' at MN, line \\n[.c].
+.  \}
+.  ie !'\\$1'' \{\
+.    if \\n[MN-active] \{\
+.      tm [mom]: Macro MN: Can't handle nested margin notes, line \\n[.c].
+.      return
+.    \}
+.    nr MN-active 1
+.    ev MN-env
+.    ie '\\*[MN-dir]'LEFT' \{\
+.      nr MN-left +1
+.      ds MN-curr l-\\n[MN-left]\"
+.      evc MNbottom-left-env
+.    \}
+.    el \{\
+.      nr MN-right +1
+.      ds MN-curr r-\\n[MN-right]\"
+.      evc MNbottom-right-env
+.    \}
+.    mk MN-mk-\\*[MN-curr]
+.    di MN-div-\\*[MN-curr]
+.  \}
+.  el .MN_QUIT
+..
+\#
+\# MN_QUIT
+\# -------
+\# Utility macro to handle .MN OFF | QUIT | X etc
+\#
+.de MN_QUIT
+.   if \\n[MN-active] \{\
+.      br
+.      di
+.      nr MN-div-\\*[MN-curr]-depth \\n[dn]
+.      ev
+.   \}
+.   nr MN-active 0
+..
+\#
+\# MNtop
+\# -----
+\# Resets these registers (called in HEADER)
+.de MNtop
+.  nr MN-left 0
+.  nr MN-right 0
+.  nr MN-active 0
+.  rr MN-shifted
+.  ch FOOTER \\n[#VARIABLE_FOOTER_POS]u
+..
+\#
+\# MNbottom
+\# --------
+\# Executed in FOOTER.
+\#
+.de MNbottom
+.   if '\\$0'MNbottom-left' \{\
+.      ds MN-pos left
+.      ds l-r l
+.      ds Left-Right Left
+.   \}
+.   if '\\$0'MNbottom-right' \{\
+.      ds MN-pos right
+.      ds l-r r
+.      ds Left-Right Right
+.   \}
+.   nr MN-curr 0
+.   nr MN-last-pos 0
+.   nr MN-lead-adj \\n[#DOC_LEAD]-\\n[MN-spacing]
+.   vpt 0
+.   if \\n[MN-active] \{\
+.     di
+.     tm [mom]: Macro MN: Margin note finished by new page.  Ignored.
+.   \}
+.   if \\n[#RECTO_VERSO] \{\
+.      if e \{\
+.         if '\\*[MN-pos]'right' \
+.            nr MN-\\*[MN-pos]-start (\\n[.o]+\\n[.l]+\\n[MN-sep])
+.         if '\\*[MN-pos]'left' \
+.            nr MN-\\*[MN-pos]-start (\\n[.o]-\\n[MN-sep]-\\n[MN-left-width])
+.      \}
+.   \}
+.   po \\n[MN-\\*[MN-pos]-start]u
+.   ev MNbottom-\\*[MN-pos]-env
+.   nr #P \\n%+\\n[#PAGE_NUM_ADJ]
+.   while (\\n[MN-curr] < \\n[MN-\\*[MN-pos]]) \{\
+.      nr MN-curr +1
+.      ie (\\n[MN-last-pos] < \\n[MN-mk-\\*[l-r]-\\n[MN-curr]]) \
+.         sp |\\n[MN-mk-\\*[l-r]-\\n[MN-curr]]u+\\n[MN-lead-adj]u
+.      el \{\
+.         nr MN-shifted 1
+.         sp 1v
+.         SHIM
+.         if \\n[#SHIM]>\\n[MN-spacing] .sp -(1v+\\n[MN-lead-adj]u)
+.         tm [mom]: Macro MN: Warning: \\*[Left-Right] margin note #\\n[MN-curr] on page \\n[#P] shifted down.
+.      \}
+.\" If last margin note doesn't fit
+.      if ( (\\n[nl]+\\n[MN-div-\\*[l-r]-\\n[MN-curr]-depth]) > (\\n[.p]+\\n[#VARIABLE_FOOTER_POS]-1) ) \{\
+.         if \\n[MN-shifted]=1 \{\
+.            sp -(1v+\\n[#SHIM]u)
+.            rm MN-div-\\*[l-r]-\\n[MN-curr]
+.            tm1 "[mom]: \
+No room to start \\*[MN-pos] margin note #\\n[MN-curr] on page \\n[#P] on page \\n[#P].
+.            tm1 "      Ignoring margin note.
+.            rr MN-shifted
+.         \}
+.         nr #no-repeat-MN-\\*[MN-pos] 1
+.         if '\\*[MN-pos]'left'  .nr #OVERFLOW_LEFT 1
+.         if '\\*[MN-pos]'right' .nr #OVERFLOW_RIGHT 1
+.         ie \\n[#FN_COUNT]=0 \{\
+.            ch FOOTER \\n[.p]u
+.            wh \\n[#VARIABLE_FOOTER_POS]u+\\n[MN-lead-adj]u+1u MN_OVERFLOW_TRAP
+.         \}
+.         el \
+.            wh \\n[.p]u+\\n[#VARIABLE_FOOTER_POS]u-1u MN_OVERFLOW_TRAP
+.         vpt 1
+.      \}
+.      nf
+.      MN-div-\\*[l-r]-\\n[MN-curr]
+.      fi
+.      br
+.      nr MN-last-pos \\n[nl]
+.   \}
+.   ev
+.   po
+.   if !\\n[#no-repeat-MN-\\*[MN-pos]]=1 .vpt 1
+..
+.
+.ALIAS MNbottom-right MNbottom
+.ALIAS MNbottom-left  MNbottom
+\#
+\# PDF SUPPORT
+\# ===========
+\#
+\# Initial setup
+\#
+.nr CURRENT_LEVEL 0
+.nr VIRTUAL_LEVEL 0
+.nr #PDF_BOOKMARKS 1
+.nr #PDF_BOOKMARKS_OPEN 1
+.pdfview /PageMode /UseOutlines
+\#
+\# TOC_BEFORE_HERE
+\# ---------------
+\#
+\# Call this and the TOC will be placed preceding this page
+\#
+.MAC TOC_BEFORE_HERE END
+.    nr TOC_BH 1
+.    pdfpagename MOM:TOC
+.END
+\#
+\# TOC_AFTER_HERE
+\# ---------------
+\#
+\# Call this and the TOC will be placed after this page
+\#
+.MAC TOC_AFTER_HERE END
+.    nr TOC_BH 2
+.    pdfpagename MOM:TOC
+.END
+\#
+\# PDF_LINK_COLOR
+\# -----------------
+\#
+\# Arguments:-
+\#   <name defined by previous call to XCOLOR or NEWCOLOR> or
+\#   <red> <green> <blue> all 0.0 -> 1.0
+\# Notes
+\#   Should be called before START but can also be called at any time to change colour
+\#   The colour assigned at the end of the document is used for all links in the TOC
+\#
+.MAC PDF_LINK_COLOR END
+.    ie \\n[.$]==3 \{\
+.       ds PDFHREF.COLOUR \\$*
+.       if !(\B'\\$1' & \B'\\$2' & \B'\\$3') \{\
+.          tm1 "[mom]: All three arguments to \\$0 at line \\n[.c] must be decimal.
+.          tm1 "       Continuing to process using default link color.
+.          ds PDFHREF.COLOUR 0.0 0.3 0.9
+.       \}
+.       defcolor pdf:href.colour rgb \\*[PDFHREF.COLOUR]
+.       ds PDFHREF.TEXT.COLOUR pdf:href.colour
+.    \}
+.    el \{\
+.       ie \\n[.$]==0 \{\
+.          if dPDFHREF.TEXTCOL.DEFAULT \
+.             PDF_LINK_COLOR \\*[PDFHREF.TEXTCOL.DEFAULT]
+.       \}
+.       el \{\
+.          ds ARG_1 \\$1
+.          substring ARG_1 0 0
+.          ie '\\*[ARG_1]'#' \{\
+.             defcolor pdf:href.colour rgb \\$1
+.             ds PDFHREF.TEXT.COLOUR pdf:href.colour
+.          \}
+.          el \{\
+.             ie dCOLAL_\\$1 .ds PDFHREF.TEXT.COLOUR \\*[COLAL_\\$1]
+.             el .ds PDFHREF.TEXT.COLOUR \\$1
+.          \}
+.       \}
+.    \}
+.    if !\\n[PDFHREF_COLOR_SET]=1 \{\
+.       nr PDFHREF_COLOR_SET 1
+.    \}
+.END
+\#
+\# AUTO_RELOCATE_TOC
+\# -----------------
+\#
+\# Call before START to have TOC automatically relocated to after the
+\# DOC COVER (if there is one) or the COVER if there isn't
+\#
+.MAC AUTO_RELOCATE_TOC END
+.    if '\\$1''                .nr TOC.RELOCATE 1
+.    if '\\$1'TOP'             .nr TOC.RELOCATE 2
+.    if '\\$1'BEFORE_DOCCOVER' .nr TOC.RELOCATE 3 \" Same as TOP unless no DOCCOVER
+.    if '\\$1'AFTER_DOCCOVER'  .nr TOC.RELOCATE 4
+.    if '\\$1'BEFORE_COVER'    .nr TOC.RELOCATE 5
+.    if '\\$1'AFTER_COVER'     .nr TOC.RELOCATE 6
+.END
+\#
+\# PDF_BOOKMARK
+\# ------------
+\# *Argument:
+\#   Hierarchy Level
+\#   Bookmark Text
+\# *Function:
+\#   Creates a bookmark using the given text
+\#   The level controls the hierarchy of the bookmarks
+\# *Notes
+\#   Bookmarks can be turned off (will not be added to document outline) by calling
+\#   "PDF_BOOKMARKS NO" and turned on with "PDF_BOOKMARKS".
+\#
+\#   Bookmarks can be open or closed by calling PDF_BOOKMARKS_OPEN
+\#
+.MAC PDF_BOOKMARK END
+.    if \\n[#PDF_BOOKMARKS] \{\
+.       ie '\\$1'NAMED' \{\
+.          ds PDF_NM -T \\$2
+.          ds PDF_NM2 \\$2
+.          shift 2
+.       \}
+.       el .ds PDF_NM
+.       nr LEVEL_REQ \\$1
+.       shift
+.       ie \\n[LEVEL_REQ]>\\n[VIRTUAL_LEVEL] \{\
+.          nr VIRTUAL_LEVEL \\n[LEVEL_REQ]
+.          nr LEVEL_REQ \\n[CURRENT_LEVEL]+1
+.       \}
+.       el \{\
+.          ie \\n[LEVEL_REQ]<\\n[VIRTUAL_LEVEL] \{\
+.             nr VIRTUAL_DIFF \\n[VIRTUAL_LEVEL]-\\n[LEVEL_REQ]
+.             nr VIRTUAL_LEVEL \\n[LEVEL_REQ]
+.             nr LEVEL_REQ (\\n[CURRENT_LEVEL]-\\n[VIRTUAL_DIFF])>?1
+.          \}
+.          el .nr LEVEL_REQ \\n[CURRENT_LEVEL]
+.       \}
+.       ds PDF_TX \\$*
+.       pdfmomclean PDF_TX
+.\" .   ev protect
+.       nr PDF_LEV (\\n[LEVEL_REQ]*\\n[#PDF_BOOKMARKS_OPEN])
+.       ie '\\*[.T]'ps' \{\
+.           if !'\\*[PDF_NM]'' \{\
+.              pdfhref M -N\\*[PDF_NM2] -- \\*[PDF_TX]
+.              if !dpdf:href.map .tm gropdf-info:href \\*[PDF_NM2] \\*[PDF_TX]
+.           \}
+.           pdfbookmark \\n[PDF_LEV] \\*[PDF_TX]
+.       \}
+.       el .pdfbookmark \\*[PDF_NM] \\n[PDF_LEV] \\$*
+.\" .   ev
+.       nr CURRENT_LEVEL \\n[LEVEL_REQ]
+.       rr LEVEL_REQ
+.       rr PDF_LEV
+.       rr VIRTUAL_DIFF
+.       rm PDF_NM
+.    \}
+.END
+\#
+\# PDF_TITLE
+\# ---------
+\# *Argument:
+\#   Title Text
+\# *Function
+\#   Set the PDF title (this is often used by PDF readers to title the main window)
+\#
+.MAC PDF_TITLE END
+.    ds pdftitle \\$*
+.    pdfmomclean pdftitle
+.    nop \!x X ps:exec [/Title (\\*[pdftitle]) /DOCINFO pdfmark
+.END
+\#
+\# PDF_BOOKMARKS
+\# -------------
+\# *Argument:
+\#   <nothing> | <anything>
+\# *Function:
+\#   With no parameter turns on outline bookmarks
+\#   With any parameter turns off outline bookmarks
+\#
+.MAC PDF_BOOKMARKS END
+.    ie '\\$1'' .nr #PDF_BOOKMARKS 1
+.    el .nr #PDF_BOOKMARKS 0
+.END
+\#
+\# PDF_BOOKMARKS_OPEN
+\# ------------------
+\# *Argument:
+\#   <number> | <nothing> | <text>
+\# *Function:
+\#   If arg is numeric all Bookmark levels > arg are closed
+\#   If arg is empty all bookmarks are open
+\#   If arg is any text then any following bookmarks are closed
+\#
+.MAC PDF_BOOKMARKS_OPEN END
+.    ie \B'\\$1' \{\
+.       nr PDFOUTLINE.FOLDLEVEL \\$1
+.       nr #PDF_BOOKMARKS_OPEN 1
+.    \}
+.    el .if '\\*[.T]'pdf' \{\
+.       nr PDFOUTLINE.FOLDLEVEL 10000
+.       ie '\\$1'' .nr #PDF_BOOKMARKS_OPEN 1
+.       el .nr #PDF_BOOKMARKS_OPEN 0-1
+.    \}
+.END
+\#
+\# PDF_LINK
+\# --------
+\# *Arguments:
+\#    $1 = named link
+\#    [PREFIX text] : text to prefix link
+\#    [SUFFIX text] : text after link
+\#    text
+\#
+\# *Notes
+\#    Text is output as a hotspot link to named destination.
+\#    If text has final '*' it is replaced with the text associated with the link
+\#
+.MAC PDF_LINK END
+.    ds PDF_NM \\$1
+.    shift
+.    ie '\\$1'PREFIX' \{\
+.       ds PDF_PRE -P "\&\\$2"
+.       shift 2
+.    \}
+.    el .ds PDF_PRE
+.    ie '\\$1'SUFFIX' \{\
+.       ds PDF_POST -A "\\$2"
+.       shift 2
+.    \}
+.    el .ds PDF_POST
+.    ds PDF_AST_Q
+.    ds PDF_TXT \&\\$1
+.    ds PDF_AST \\*[PDF_TXT]
+.    substring PDF_AST -1 -1
+.    if '\\*[PDF_AST]'+' \{\
+.       ds PDF_AST *
+.       ds PDF_AST_Q ""
+.    \}
+.    if '\\*[PDF_AST]'*' \{\
+.        chop PDF_TXT
+.        ie '\\*[.T]'pdf' \{\
+.           ie d pdf:look(\\*[PDF_NM]) \
+.               as PDF_TXT \&\\*[PDF_AST_Q]\\*[pdf:look(\\*[PDF_NM])]\\*[PDF_AST_Q]
+.           el \{\
+.               as PDF_TXT Unknown
+.               if !rPDF_UNKNOWN .tm \
+\\n[.F]:\\n[.c]: forward reference detected (please run using 'pdfmom')
+.               nr PDF_UNKNOWN 1
+.           \}
+.        \}
+.        el \{\
+.            ie d pdf:href(\\*[PDF_NM]).info \
+.               as PDF_TXT \&\\*[PDF_AST_Q]\\*[pdf:href(\\*[PDF_NM]).info]\\*[PDF_AST_Q]
+.            el .as PDF_TXT Unknown
+.       \}
+.    \}
+.    pdfhref L \\*[PDF_PRE] \\*[PDF_POST] -D \\*[PDF_NM] -- \\*[PDF_TXT]
+.    rm PDF_NM
+.    rm PDF_PRE
+.    rm PDF_POST
+.    rm PDF_TXT
+.    rm PDF_AST
+.    rm PDF_AST_Q
+.END
+\#
+.MAC PDF_WWW_LINK END
+.    ds PDF_NM \\$1
+.    shift
+.    ie '\\$1'PREFIX' \{\
+.       ds PDF_PRE -P "\\$2"
+.       shift 2
+.    \}
+.    el .ds PDF_PRE
+.    ie '\\$1'SUFFIX' \{\
+.       ds PDF_POST -A "\\$2"
+.       shift 2
+.    \}
+.    el .ds PDF_POST
+.    ds PDF_AST_Q
+.    ds PDF_TXT \\$1
+.    ie !'\\*[PDF_TXT]'' \{\
+.       ds PDF_AST \\*[PDF_TXT]
+.       substring PDF_AST -1 -1
+.       if '\\*[PDF_AST]'+' \{\
+.          ds PDF_AST *
+.          ds PDF_AST_Q ""
+.       \}
+.       if '\\*[PDF_AST]'*' \{\
+.          chop PDF_TXT
+.          as PDF_TXT \&\\*[PDF_AST_Q]\\*[PDF_NM]\\*[PDF_AST_Q]
+.       \}
+.    \}
+.    el .ds PDF_TXT \\*[PDF_NM]
+.    pdfhref W -D "\\*[PDF_NM]" \\*[PDF_PRE] \\*[PDF_POST] -- \\*[PDF_TXT]
+.    rm PDF_NM
+.    rm PDF_PRE
+.    rm PDF_POST
+.    rm PDF_TXT
+.    rm PDF_AST PDF_AST_Q
+.END
+\#
+.MAC PDF_TARGET END
+.    ds ARG_1 \\$1
+.    shift
+.    ie '\\$*'' .pdfhref M -N \\*[ARG_1] -- \\$*
+.    el .pdfhref M -N \\*[ARG_1] -E -- \\$*
+.    if '\\*[.T]'ps' .if !dpdf:href.map .tm gropdf-info:href \\*[ARG_1] \\$*
+.END
+\#
+\# PDF_IMAGE
+\# ---------
+\# *Arguments:
+\#   [ -L -| -R | -C | -I <indent> ] \
+\#     <image file> <width> <height> \
+\#     [ SCALE <factor> ] [ ADJUST +|-<vertical shift> ]
+\# *Function:
+\#   Allows embedding of PDF images with the same arguments as PSPIC
+\#   plus SCALE and ADJUST options.
+\# *Notes:
+\#   <image file> <width> <height> are required.
+\#
+.MAC PDF_IMAGE END
+.    rr float*img
+.    if !'\\n[.z]'FLOAT*DIV' \{\
+.       nr pdf-img:float 1
+.       FLOAT
+.    \}
+.    nr float*img 1
+.    ds ev-current \\n[.ev]
+.    ev IMG
+.    evc \\*[ev-current]
+.    if \\n[#HYPHENATE] .nh
+.    nr ind-pre-img \\n[.i]
+.    nr ll-pre-img  \\n[.l]
+.    in 0
+.    ds pos:tmp \\$1
+.    substring pos:tmp 0 0
+.    ie !'\\*[pos:tmp]'-' .ds pdf-img:pos -C
+.    el \{\
+.       ds pdf-img:pos \\$1
+.       shift
+.    \}
+.    if '\\*[pdf-img:pos]'-I' \{\
+.       nr pdf-img:ind \\$1
+.       shift
+.    \}
+.    ds pdf-img:file \\$1
+.    ds pdf-img@file \\$1
+.    substring pdf-img@file -1 -3
+.    if !'\\*[pdf-img@file]'pdf' \{\
+.       tm1 "[mom]: Image file '\\*[pdf-img:file]' at line \\n[.c] not found, or not a PDF image.
+.       ab   [mom]: Aborting '\\n[.F]' at \\$0, line \\n[.c].
+.    \}
+.    nr pdf-img:width \\$2
+.    nr pdf-img:depth \\$3
+.    shift 3
+.    nr loop-counter \\n[#NUM_ARGS]
+.    nr loop-count 0 1
+.    while \\n+[loop-count]<=\\n[loop-counter] \{\
+.       if '\\$1'SCALE' \{\
+.          shift
+.          nr pdf-img:scale \\$1
+.          shift
+.          nr pdf-img:width \\n[pdf-img:width]*\\n[pdf-img:scale]/100
+.          nr pdf-img:depth \\n[pdf-img:depth]*\\n[pdf-img:scale]/100
+.       \}
+.       if '\\$1'ADJUST' \{\
+.         shift
+.         ds pdf-img:adj \\$1
+.         shift
+.       \}
+.       if '\\$1'FRAME' \{\
+.          nr pdf-img:frame 1
+.          if !r pdf-img:frame-inset .nr pdf-img:frame-inset 6p
+.          shift
+.       \}
+.       if '\\$1'CAPTION' \{\
+.          nr pdf-img*have-caption 1
+.          ds pdf-img*caption \\$2
+.          shift 2
+.       \}
+.       if '\\$1'SHORT_CAPTION' \{\
+.          ds pdf-img*caption-short \\$2
+.          shift 2
+.       \}
+.       if '\\$1'LABEL' \{\
+.          nr pdf-img*have-label 1
+.          ds pdf-img*label \\$2
+.          ds label-type pdf-img
+.          shift 2
+.       \}
+.       if '\\$1'NO_SHIM' \{\
+.          nr float*no-shim 1
+.       \}
+.    \}
+.    if !'\\*[pdf-img*label-sffx]'' \{\
+.       ds pdf-img*label-sffx-tmp \\*[pdf-img*label-sffx]
+.       substring pdf-img*label-sffx-tmp -1
+.       if '\\*[pdf-img*label-sffx-tmp]'.' \
+.          if \\n[pdf-img*caption-after-label]=0 .chop pdf-img*label-sffx
+.    \}
+.    PDF_TARGET fig:\\n+[lists*target]
+.    if '\\*[pdf-img:pos]'-C' \
+.       nr pdf-img:ind (\\n[.ll]-\\n[ind-pre-img]-\\n[pdf-img:width])/2
+.    if '\\*[pdf-img:pos]'-R' \{\
+.       nr pdf-img:ind \\n[.ll]-\\n[pdf-img:width]-\\n[ind-pre-img]
+.    \}
+.    di PDF*IMAGE
+.    if \\n[@TOP] \{\
+.       ch RR_@TOP
+.       rs
+.       nop \&
+.       sp -1v
+.    \}
+.    if \\n[pdf-img*have-caption] \{\
+.       if !\\n[pdf-img*autolabel] \{\
+.          if !\\n[pdf-img*have-label] \{\
+.             if \\n[#MLA] \
+.                mla@error caption label \\n[.F] \\$0 \\n[.c]
+.          \}
+.       \}
+.       if !\\n[pdf-img*caption-after-label] \{\
+.          if !\\n[@TOP] .sp .5v
+.          nr lead-pre-caption \\n[.v]
+.          ev caption
+.          evc IMG
+.          ie \\n[#PRINT_STYLE]=1 .TYPEWRITER
+.          el \{\
+.             img*caption-style
+.             vs \\n[.ps]u+\\n[pdf-img*caption-autolead]u
+.          \}
+.          PDF_IMG*SET_CAPTION_QUAD \\*[pdf-img*caption-quad]
+.          sp \\n[lead-pre-caption]u-\\n[.v]u
+.          nop \\*[pdf-img*caption]
+.          br
+.          if !'\\*[pdf-img*caption-space]'' .sp \\*[pdf-img*caption-space]
+.          ev
+.          in 0
+.          sp -.5v
+.       \}
+.    \}
+.    nf
+.    if \\n[pdf-img:frame] \{\
+.       nr frame-width \\n[pdf-img:width]+(\\n[pdf-img:frame-inset]*2)
+.       nr frame-depth \\n[pdf-img:depth]+(\\n[pdf-img:frame-inset]*2)
+.       if '\\*[pdf-img:pos]'-L' \{\
+.          nr pdf-img:ind \\n[pdf-img:frame-inset]
+.          nr pdf-img:dbx-ind 0
+.       \}
+.       if '\\*[pdf-img:pos]'-C' \{\
+.          nr pdf-img:dbx-ind \
+\\n[.ll]-\\n[ind-pre-img]-\\n[pdf-img:width]/2-\\n[pdf-img:frame-inset]
+.       \}
+.       if '\\*[pdf-img:pos]'-R' \{\
+.          nr pdf-img:ind -\\n[pdf-img:frame-inset]
+.          nr pdf-img:dbx-ind \
+\\n[.l]u-(\\n[pdf-img:width]u+(\\n[pdf-img:frame-inset]u*2u)+\\n[ind-pre-img]u)
+.       \}
+.       if '\\*[pdf-img:pos]'-I' \{\
+.          nr pdf-img:ind +\\n[pdf-img:frame-inset]
+.          nr pdf-img:dbx-ind \\n[pdf-img:ind]-\\n[pdf-img:frame-inset]
+.       \}
+.       DBX \\*[pdf-img:frame-weight] \
+            \\n[pdf-img:dbx-ind]u \
+            \\n[frame-width]u \
+            \\n[frame-depth]u \
+            \\*[pdf-img:frame-color]
+.       sp \\n[pdf-img:frame-inset]u
+.       nr pdf-img:ind -\\n[pdf-img:frame-inset]
+.    \}
+.    ti \\n[pdf-img:ind]u+\\n[pdf-img:frame-inset]u
+.    nop \X'pdf: pdfpic \\*[pdf-img:file] -L \\n[pdf-img:width]z \\n[pdf-img:depth]z'
+.    if '\\*[pdf-img:pos]'-C' .nr pdf-img:ind +\\n[pdf-img:frame-inset]
+.    sp \\n[pdf-img:depth]u
+.    if \\n[pdf-img:frame] .sp \\n[pdf-img:frame-inset]u
+.    if (\\n[pdf-img*have-label]=1):(\\n[pdf-img*autolabel]=1):(\\n[pdf-img*caption-after-label]=1) \{\
+.       if \\n[#MLA] \{\
+.          if (\\n[pdf-img*have-label]=1):(\\n[pdf-img*autolabel]=1) \{\
+.             if !\\n[pdf-img*have-caption] \
+.                mla@error label caption \\n[.F] \\$0 \\n[.c]
+.          \}
+.       \}
+.       nr lead-pre-label \\n[.v]
+.       ev label
+.       evc IMG
+.       ie \\n[#PRINT_STYLE]=1 .TYPEWRITER
+.       el \{\
+.          img*label-style
+.          vs \\n[.ps]u+\\n[pdf-img*label-autolead]u
+.       \}
+.       if \\n[pdf-img*label-with-chapter] \
+.          ds chapno \\n[#CH_NUM].
+.       PDF_IMG*SET_LABEL_QUAD \\*[pdf-img*label-quad]
+.       sp \\n[lead-pre-label]u-\\n[.v]u
+.       if !'\\*[pdf-img*label-space]'' .sp \\*[pdf-img*label-space]
+.       ie \\n[pdf-img*autolabel] \
+.          nop \
+\\*[pdf-img*label-prfx]\\*[chapno]\\n+[fig*label-num]\\*[pdf-img*label-sffx]\|
+.       el .if !'\\*[pdf-img*label]'' .nop \\*[pdf-img*label]
+.       if \\n[pdf-img*autolabel] \
+.          ds pdf-img*label \\*[chapno]\\n[fig*label-num]
+.       fam
+.       ft
+.       ps
+.       gcolor
+.       if !'\\*[pdf-img*caption]'' \{\
+.          if \\n[pdf-img*caption-after-label] \{\
+.             ds pdf-img*caption " \\*[pdf-img*caption]
+.             nop \\*[pdf-img*caption-specs]\\*[pdf-img*caption]\\*[revert-specs]
+.          \}
+.       \}
+.       sp .5v
+.       ev
+.       in 0
+.    \}
+\!.  in
+.    di
+.    nf
+.    vpt 0
+.    if !'\\*[pdf-img:adj]'' \{\
+.       if \\n[@TOP] \
+.          if \\n[#COLUMNS]>1 \
+\!.           rs
+\!.     sp \\*[pdf-img:adj]
+.    \}
+.    PDF*IMAGE
+.    if !'\\*[pdf-img:adj]'' \
+.       if !\\n[@TOP] \!.sp -\\*[pdf-img:adj]
+.    vpt
+.    ev
+.    if \\n[pdf-img:float] \{\
+.       FLOAT off
+.       nr dl \\n[pdf-img:width]
+.    \}
+.    if !'\\*[pdf-img*caption-short]'' .ds short -short
+.    ie !'\\*[pdf-img*label]'' \
+.       TO_FIGURES "\\*[pdf-img*label]" "\\*[pdf-img*caption\\*[short]]"
+.    el .TO_FIGURES "\\*[pdf-img*caption\\*[short]]"
+.    PDF_IMAGE_CLEAN 
+.END
+\#
+\# PDF_IMAGE_FRAME
+\# ---------------
+\# *Arguments:
+\#   [ <inset> ] [ <rule weight> ] [ <color> ]
+\# *Function:
+\#   Sets parameters for pdf image frames.
+\# *Notes:
+\#   Defaults are '6p' '.5' 'black'.  Arguments to be left at default
+\#   must be entered as "".
+\#
+.MAC PDF_IMAGE_FRAME END
+.    if !'\\$1''\{\
+.       ds frame-arg \\$1
+.       substring frame-arg -1
+.       ie \B'\\*[frame-arg]' \{\
+.          tm1 "[mom]: \\$0 inset argument at line \\n[.c]
+.          tm1 "       of '\\n[.F]' requires a unit of measure.
+.          tm1 "       Default 6 point inset will be used instead.
+.       \}
+.       el .nr pdf-img:frame-inset \\$1
+.    \}
+.    shift
+.    if !'\\$1'' \{\
+.       ds frame-arg \\$1
+.       substring frame-arg -1
+.       ie \B'\\*[frame-arg]' \{\
+.          ds pdf-img:frame-weight \\$1
+.          shift
+.       \}
+.       el \{\
+.          ds frame-arg \\$1
+.          substring frame-arg -1 
+.          length arg-len \\*[frame-arg]
+.          if \\n[arg-len]=1 \{\
+.             tm1 "[mom]: \\$0 rule weight argument at line \\n[.c]
+.             tm1 "       of '\\n[.F]' must not have a unit of measure appended.
+.             tm1 "       Default .5 rule weight will be used instead.
+.             shift
+.          \}
+.       \}
+.    \}
+.    if !'\\$1'' \{\
+.       ie m \\$1 .ds pdf-img:frame-color \\$1
+.       el \{\
+.          tm1 "[mom]: \\$0 color argument '\\$1' at line \\n[.c]
+.          tm1 "       of '\\n[.F]' is not a valid color.
+.          tm1 "       Default black will be used instead.
+.       \}
+.    \}
+.END
+\#
+.MAC PDF_IMAGE_CLEAN END
+.    rm PDF*IMAGE
+.    rm pdf-img:adj
+.    rm pdf-img*caption
+.    rm pdf-img*caption-short
+.    rm pdf-img:file
+.    rm pdf-img*label
+.    rm pdf-img:pos
+.    rm short
+.    rr ind-pre-img
+.    rr pdf-img:depth
+.    rr pdf-img:float
+.    rr pdf-img:float
+.    rr pdf-img:frame
+.    rr pdf-img:ind
+.    rr pdf-img:no-shim
+.    rr pdf-img:scale
+.\" Cutarounds not yet implemented
+.    if !\\n[defer] \
+.       if !\\n[cutaround] \
+.          rr pdf-img*have-caption
+.    if !\\n[cutaround] \{\
+.       rr pdf-img:frame-inset
+.       rr pdf-img:width
+.    \}
+.    if '\\*[pdf-img*label-sffx-tmp]'.' .ds pdf-img*label-sffx .
+.END
+\#
+.de pdfmomclean
+.   ie '\\n[.z]'' \{\
+.      ds pdfcleaned \\$*
+.      ev pdfcln
+.      tr \[em]-
+.      nf
+.      box pdf:clean
+.      nop \\*[\\*[pdfcleaned]]
+.      fl
+.      box
+.      chop pdf:clean
+.      asciify pdf:clean
+.      ev
+.      ds \\*[pdfcleaned] "\\*[pdf:clean]
+.      rm pdf:clean
+.      tr \[em]\[em]
+.    \}
+.    el .nop \!.pdfmomclean \\$@
+..
+\# vim: ft=groff: encoding=latin1: fileencoding=latin1: nomodified:
diff -Nuar groff-1.22.3.old/contrib/mom/TODO groff-1.22.3/contrib/mom/TODO
--- groff-1.22.3.old/contrib/mom/TODO	2014-11-04 10:38:35.504520509 +0200
+++ groff-1.22.3/contrib/mom/TODO	2015-04-23 20:57:03.000000000 +0300
@@ -1,10 +1,10 @@
     -*- txt -*-
-    Copyright 2004-2014  Free Software Foundation, Inc.
+    Copyright 2004-2015  Free Software Foundation, Inc.
 
     Copying and distribution of this file, with or without modification,
     are permitted in any medium without royalty provided the copyright
     notice and this notice are preserved.
 
-Version 2.0
-
-(nothing yet)
+- cutarounds
+- clickable footnote and endnote markers
+- indexing
diff -Nuar groff-1.22.3.old/contrib/pdfmark/ChangeLog groff-1.22.3/contrib/pdfmark/ChangeLog
--- groff-1.22.3.old/contrib/pdfmark/ChangeLog	2014-11-04 10:38:35.493520646 +0200
+++ groff-1.22.3/contrib/pdfmark/ChangeLog	2015-04-23 20:57:03.000000000 +0300
@@ -1,3 +1,7 @@
+2015-04-03  Werner LEMBERG  <wl@gnu.org>
+
+	* pdfroff.man: Make it work in compatibility mode.
+
 2014-10-14  Keith Marshall  <keith.d.marshall@ntlworld.com>
 
 	Deduce "--no-toc-relocation" from input stream (revisited).
diff -Nuar groff-1.22.3.old/contrib/pdfmark/.gitignore groff-1.22.3/contrib/pdfmark/.gitignore
--- groff-1.22.3.old/contrib/pdfmark/.gitignore	1970-01-01 02:00:00.000000000 +0200
+++ groff-1.22.3/contrib/pdfmark/.gitignore	2015-04-23 20:57:03.000000000 +0300
@@ -0,0 +1,11 @@
+pdfroff
+pdfroff-*
+pdfroff.n
+pdfmark.pdf
+gnu.eps
+pdf?????.tmp
+pdf?????.tc
+pdf?????.ref
+pdf?????.ps
+pdf?????.cs
+pdf?????.cmp
diff -Nuar groff-1.22.3.old/contrib/pdfmark/Makefile.sub groff-1.22.3/contrib/pdfmark/Makefile.sub
--- groff-1.22.3.old/contrib/pdfmark/Makefile.sub	2014-11-04 10:38:35.493520646 +0200
+++ groff-1.22.3/contrib/pdfmark/Makefile.sub	1970-01-01 02:00:00.000000000 +0200
@@ -1,126 +0,0 @@
-# Copyright (C) 2005-2014  Free Software Foundation, Inc.
-#      Written by Keith Marshall (keith.d.marshall@ntlworld.com)
-#
-# This file is part of groff.
-#
-# groff is free software; you can redistribute it and/or modify it under
-# the terms of the GNU General Public License as published by the Free
-# Software Foundation, either version 3 of the License, or
-# (at your option) any later version.
-#
-# groff is distributed in the hope that it will be useful, but WITHOUT ANY
-# WARRANTY; without even the implied warranty of MERCHANTABILITY or
-# FITNESS FOR A PARTICULAR PURPOSE.  See the GNU General Public License
-# for more details.
-#
-# You should have received a copy of the GNU General Public License
-# along with this program. If not, see <http://www.gnu.org/licenses/>.
-
-MAN1=\
-  pdfroff.n
-
-CMDFILES=\
-  pdfroff
-
-TMACFILES=\
-  pdfmark.tmac \
-  spdf.tmac
-
-PDFDOCFILES=\
-  pdfmark.pdf
-
-MOSTLYCLEANDIRADD=\
-  pdfroff-*
-
-MOSTLYCLEANADD=\
-  gnu.eps \
-  $(PDFDOCFILES) \
-  $(CMDFILES) \
-  pdf[0-9]*
-
-GROFF_BIN_DIR=$(top_builddir)/src/roff/groff
-GROFF_OTHER_BIN_DIRS=\
-  $(top_builddir)/src/roff/troff \
-  $(top_builddir)/src/devices/grops
-GROFF_BIN_DIRS=$(GROFF_BIN_DIR) $(GROFF_OTHER_BIN_DIRS)
-GROFF_BIN_PATH=`echo $(GROFF_BIN_DIRS) | sed -e 's|  *|$(SH_SEP)|g'`
-
-FFLAG=-F$(top_builddir)/font -F$(top_srcdir)/font
-MFLAG=-M$(srcdir) -M$(top_builddir)/tmac -M$(top_srcdir)/tmac
-PFLAG=-dpaper=$(PAGE) -P-p$(PAGE)
-
-PDFROFF=\
-  GROFF_TMPDIR=. \
-  GROFF_COMMAND_PREFIX= \
-  GROFF_BIN_DIR="$(GROFF_BIN_DIR)" \
-  GROFF_BIN_PATH="$(GROFF_BIN_PATH)" \
-  ./pdfroff --keep-temporary-files $(FFLAG) $(MFLAG) $(PFLAG)
-
-RM=rm -f
-
-.SUFFIXES: .ms .pdf
-.ms.pdf:
-	$(PDFROFF) -mspdf --stylesheet=$(srcdir)/cover.ms $< >$@
-
-all: pdfroff $(make_pdfdoc)
-
-# The pdf files use the local script to generate.
-$(PDFDOCFILES): pdfroff
-
-pdfdoc: gnu.eps $(PDFDOCFILES)
-
-gnu.eps:
-	if test -f $(top_srcdir)/doc/gnu.eps; then \
-	  cp $(top_srcdir)/doc/gnu.eps . ; \
-	elif test -f $(top_builddir)/doc/gnu.eps; then \
-	  cp $(top_builddir)/doc/gnu.eps . ; \
-	else \
-	  xpmtoppm $(top_srcdir)/doc/gnu.xpm | pnmdepth 15 \
-	    | $(pnmtops_nosetpage) -noturn -rle >$@ ; \
-	fi
-
-pdfroff: pdfroff.sh $(SH_DEPS_SED_SCRIPT)
-	sed -f $(SH_DEPS_SED_SCRIPT) \
-	    -e "s|@VERSION@|$(version)$(revision)|" \
-	    -e "s|@GROFF_AWK_INTERPRETERS@|$(ALT_AWK_PROGS)|" \
-	    -e "s|@GROFF_GHOSTSCRIPT_INTERPRETERS@|$(ALT_GHOSTSCRIPT_PROGS)|" \
-	    -e "s|@GROFF_BIN_DIR@|$(bindir)|" $(srcdir)/pdfroff.sh >$@
-	chmod +x $@
-
-install_data: install_always $(make_install_pdfdoc)
-
-install_always:
-	-test -d $(DESTDIR)$(bindir) || $(mkinstalldirs) $(DESTDIR)$(bindir)
-	for f in $(CMDFILES); do \
-	  $(RM) $(DESTDIR)$(bindir)/$$f; \
-	  $(INSTALL_SCRIPT) $$f $(DESTDIR)$(bindir)/$$f; \
-	done
-	-test -d $(DESTDIR)$(tmacdir) || $(mkinstalldirs) $(DESTDIR)$(tmacdir)
-	for f in $(TMACFILES); do \
-	  $(RM) $(DESTDIR)$(tmacdir)/$$f; \
-	  $(INSTALL_DATA) $(srcdir)/$$f $(DESTDIR)$(tmacdir)/$$f; \
-	done
-
-install_pdfdoc: install_always
-	-test -d $(DESTDIR)$(pdfdocdir) \
-	  || $(mkinstalldirs) $(DESTDIR)$(pdfdocdir)
-	for f in $(PDFDOCFILES); do \
-	  $(RM) $(DESTDIR)$(pdfdocdir)/$$f; \
-	  $(INSTALL_DATA) $$f $(DESTDIR)$(pdfdocdir)/$$f; \
-	done
-
-uninstall_sub: uninstall_always $(make_uninstall_pdfdoc)
-
-uninstall_always:
-	-for f in $(CMDFILES); do $(RM) $(DESTDIR)$(bindir)/$$f; done
-	-for f in $(TMACFILES); do $(RM) $(DESTDIR)$(tmacdir)/$$f; done
-
-uninstall_pdfdoc: uninstall_always
-	-for f in $(PDFDOCFILES); do $(RM) $(DESTDIR)$(pdfdocdir)/$$f; done
-
-# Emacs settings
-########################################################################
-#
-# Local Variables:
-# mode: makefile
-# End:
diff -Nuar groff-1.22.3.old/contrib/pdfmark/pdfmark.am groff-1.22.3/contrib/pdfmark/pdfmark.am
--- groff-1.22.3.old/contrib/pdfmark/pdfmark.am	1970-01-01 02:00:00.000000000 +0200
+++ groff-1.22.3/contrib/pdfmark/pdfmark.am	2015-04-23 20:57:03.000000000 +0300
@@ -0,0 +1,93 @@
+# Copyright (C) 2005-2014
+# Free Software Foundation, Inc.
+#      Written by Keith Marshall (keith.d.marshall@ntlworld.com)
+#      Automake migration by Bertrand Garrigues
+#
+# This file is part of groff.
+#
+# groff is free software; you can redistribute it and/or modify it under
+# the terms of the GNU General Public License as published by the Free
+# Software Foundation, either version 3 of the License, or
+# (at your option) any later version.
+#
+# groff is distributed in the hope that it will be useful, but WITHOUT ANY
+# WARRANTY; without even the implied warranty of MERCHANTABILITY or
+# FITNESS FOR A PARTICULAR PURPOSE.  See the GNU General Public License
+# for more details.
+#
+# You should have received a copy of the GNU General Public License
+# along with this program. If not, see <http://www.gnu.org/licenses/>.
+
+pdfmark_srcdir = $(top_srcdir)/contrib/pdfmark
+pdfmark_builddir = $(top_builddir)/contrib/pdfmark
+
+man1_MANS += contrib/pdfmark/pdfroff.n
+
+bin_SCRIPTS += pdfroff
+
+# Files installed in $(tmacdir)
+TMACFILES = \
+  contrib/pdfmark/pdfmark.tmac \
+  contrib/pdfmark/spdf.tmac
+pdfmarktmacdir = $(tmacdir)
+dist_pdfmarktmac_DATA = $(TMACFILES)
+
+# Files installed in $(pdfdocdir)
+PDFDOCFILES = \
+  contrib/pdfmark/pdfmark.pdf
+if BUILD_PDFDOC
+pdfmarkpdfdocdir = $(pdfdocdir)
+nodist_pdfmarkpdfdoc_DATA = $(PDFDOCFILES)
+MOSTLYCLEANFILES += $(PDFDOCFILES)
+else
+EXTRA_DIST += $(PDFDOCFILES)
+endif
+
+EXTRA_DIST += \
+  contrib/pdfmark/cover.ms \
+  contrib/pdfmark/pdfmark.ms \
+  contrib/pdfmark/ChangeLog \
+  contrib/pdfmark/README \
+  contrib/pdfmark/PROBLEMS \
+  contrib/pdfmark/TODO \
+  contrib/pdfmark/pdfroff.man \
+  contrib/pdfmark/pdfroff.sh
+
+PDFMARK_PFLAG =-dpaper=$(PAGE) -P-p$(PAGE)
+PDFMARK_TFLAG = -M$(pdfmark_srcdir)
+PDFROFF=\
+  GROFF_TMPDIR=. \
+  GROFF_COMMAND_PREFIX= \
+  GROFF_BIN_DIR="$(GROFF_BIN_DIR)" \
+  GROFF_BIN_PATH="$(GROFF_BIN_PATH)" \
+  ./pdfroff --keep-temporary-files \
+  $(FFLAG) $(TFLAG) $(PDFMARK_TFLAG) $(PDFMARK_PFLAG)
+
+contrib/pdfmark/pdfmark.pdf: contrib/pdfmark/pdfmark.ms
+	@$(MKDIR_P) `dirname $@`
+	$(PDFROFF) -mspdf --stylesheet=$(pdfmark_srcdir)/cover.ms \
+	  $(top_srcdir)/contrib/pdfmark/pdfmark.ms >$@
+
+# The pdf files use the local script to generate.
+$(PDFDOCFILES): pdfroff groff troff gropdf 
+$(PDFDOCFILES): $(dist_devpsfont_DATA) $(nodist_devpsfont_DATA) gnu.eps
+
+pdfroff: contrib/pdfmark/pdfroff.sh $(SH_DEPS_SED_SCRIPT)
+	sed -f $(SH_DEPS_SED_SCRIPT) \
+	    -e "s|[@]VERSION[@]|$(VERSION)|" \
+	    -e "s|[@]GROFF_AWK_INTERPRETERS[@]|$(ALT_AWK_PROGS)|" \
+	    -e "s|[@]GROFF_GHOSTSCRIPT_INTERPRETERS[@]|$(ALT_GHOSTSCRIPT_PROGS)|" \
+	    -e "s|[@]GROFF_BIN_DIR[@]|$(bindir)|" $(pdfmark_srcdir)/pdfroff.sh >$@
+	chmod +x $@
+
+mostlyclean-local: mostlyclean_pdfmark
+mostlyclean_pdfmark:
+	rm -rf $(top_builddir)/pdfroff-*
+
+uninstall_groffdirs: uninstall-pdfmark-hook
+uninstall-pdfmark-hook:
+if BUILD_PDFDOC
+	if test -d $(DESTDIR)$(pdfmarkpdfdocdir); then \
+	  rmdir $(DESTDIR)$(pdfmarkpdfdocdir); \
+	fi
+endif
diff -Nuar groff-1.22.3.old/contrib/pdfmark/pdfroff.man groff-1.22.3/contrib/pdfmark/pdfroff.man
--- groff-1.22.3.old/contrib/pdfmark/pdfroff.man	2014-11-04 10:38:35.493520646 +0200
+++ groff-1.22.3/contrib/pdfmark/pdfroff.man	2015-04-23 20:57:03.000000000 +0300
@@ -3,6 +3,10 @@
 pdfroff \- create PDF documents using groff
 .
 .
+.do nr groff_C \n[.C]
+.cp 0
+.
+.
 .\" pdfroff.1
 .\" File position: <groff-source>/contrib/pdfmark/pdfroff.man
 .
@@ -614,7 +618,7 @@
 searches the process
 .BR PATH ,
 looking for any of the preferred programs, \[oq]gawk\[cq],
-\[oq]mawk\[cq], \[oq]nawk\[cq], and \[ok]awk\[cq], in this order; if
+\[oq]mawk\[cq], \[oq]nawk\[cq], and \[oq]awk\[cq], in this order; if
 none of these are found,
 .B pdfroff
 issues a warning message, and continue processing;
@@ -848,5 +852,8 @@
 .au
 .
 .
+.cp \n[groff_C]
+.
+.
 .\" --------------------------------------------------------------------
 .\" EOF / vim: ft=groff / -*- nroff -*-
diff -Nuar groff-1.22.3.old/contrib/pic2graph/.gitignore groff-1.22.3/contrib/pic2graph/.gitignore
--- groff-1.22.3.old/contrib/pic2graph/.gitignore	1970-01-01 02:00:00.000000000 +0200
+++ groff-1.22.3/contrib/pic2graph/.gitignore	2015-04-23 20:57:03.000000000 +0300
@@ -0,0 +1,2 @@
+pic2graph
+pic2graph.n
diff -Nuar groff-1.22.3.old/contrib/pic2graph/Makefile.sub groff-1.22.3/contrib/pic2graph/Makefile.sub
--- groff-1.22.3.old/contrib/pic2graph/Makefile.sub	2014-11-04 10:38:35.498520584 +0200
+++ groff-1.22.3/contrib/pic2graph/Makefile.sub	1970-01-01 02:00:00.000000000 +0200
@@ -1,46 +0,0 @@
-# Copyright (C) 2001-2014  Free Software Foundation, Inc.
-#
-# This file is part of groff.
-#
-# groff is free software; you can redistribute it and/or modify it under
-# the terms of the GNU General Public License as published by the Free
-# Software Foundation, either version 3 of the License, or
-# (at your option) any later version.
-#
-# groff is distributed in the hope that it will be useful, but WITHOUT ANY
-# WARRANTY; without even the implied warranty of MERCHANTABILITY or
-# FITNESS FOR A PARTICULAR PURPOSE.  See the GNU General Public License
-# for more details.
-#
-# You should have received a copy of the GNU General Public License
-# along with this program. If not, see <http://www.gnu.org/licenses/>.
-#
-# Makefile.sub
-#
-MAN1=pic2graph.n
-MOSTLYCLEANADD=pic2graph
-RM=rm -f
-
-all: pic2graph
-
-pic2graph: pic2graph.sh
-	sed -e "s|@g@|$(g)|g" \
-	    -e "s|@VERSION@|$(version)$(revision)|" \
-	    -e $(SH_SCRIPT_SED_CMD) $(srcdir)/pic2graph.sh >$@
-	chmod +x $@
-
-install_data: pic2graph
-	-test -d $(DESTDIR)$(bindir) || $(mkinstalldirs) $(DESTDIR)$(bindir)
-	$(RM) $(DESTDIR)$(bindir)/pic2graph
-	$(INSTALL_SCRIPT) pic2graph $(DESTDIR)$(bindir)/pic2graph
-
-uninstall_sub:
-	$(RM) $(DESTDIR)$(bindir)/pic2graph
-
-
-########################################################################
-# Emacs settings
-#
-# Local Variables:
-# mode: makefile
-# End:
diff -Nuar groff-1.22.3.old/contrib/pic2graph/pic2graph.am groff-1.22.3/contrib/pic2graph/pic2graph.am
--- groff-1.22.3.old/contrib/pic2graph/pic2graph.am	1970-01-01 02:00:00.000000000 +0200
+++ groff-1.22.3/contrib/pic2graph/pic2graph.am	2015-04-23 20:57:03.000000000 +0300
@@ -0,0 +1,31 @@
+# Copyright (C) 2001-2014  Free Software Foundation, Inc.
+#
+# This file is part of groff.
+#
+# groff is free software; you can redistribute it and/or modify it under
+# the terms of the GNU General Public License as published by the Free
+# Software Foundation, either version 3 of the License, or
+# (at your option) any later version.
+#
+# groff is distributed in the hope that it will be useful, but WITHOUT ANY
+# WARRANTY; without even the implied warranty of MERCHANTABILITY or
+# FITNESS FOR A PARTICULAR PURPOSE.  See the GNU General Public License
+# for more details.
+#
+# You should have received a copy of the GNU General Public License
+# along with this program. If not, see <http://www.gnu.org/licenses/>.
+#
+# pic2graph.am
+#
+
+pic2graph_srcdir = $(top_srcdir)/contrib/pic2graph
+man1_MANS += contrib/pic2graph/pic2graph.n
+bin_SCRIPTS += pic2graph
+EXTRA_DIST += \
+  contrib/pic2graph/pic2graph.sh \
+  contrib/pic2graph/pic2graph.man
+pic2graph: $(pic2graph_srcdir)/pic2graph.sh
+	sed -e "s|[@]g[@]|$(g)|g" \
+	    -e "s|[@]VERSION[@]|$(VERSION)|" \
+	    -e $(SH_SCRIPT_SED_CMD) $(pic2graph_srcdir)/pic2graph.sh >$@
+	chmod +x $@
diff -Nuar groff-1.22.3.old/contrib/pic2graph/pic2graph.man groff-1.22.3/contrib/pic2graph/pic2graph.man
--- groff-1.22.3.old/contrib/pic2graph/pic2graph.man	2014-11-04 10:38:35.498520584 +0200
+++ groff-1.22.3/contrib/pic2graph/pic2graph.man	2015-04-23 20:57:03.000000000 +0300
@@ -89,7 +89,7 @@
 By specifying command-line options to be passed to
 .BR \%convert (1)
 you can give it a border, force the background transparent, set the
-image\[aq]s pixel density, or perform other useful transformations.
+image\(aqs pixel density, or perform other useful transformations.
 .
 .
 .P
@@ -117,7 +117,7 @@
 .BR @g@pic (@MAN1EXT@)
 and
 .BR groff (@MAN1EXT@)
-in the \[oq]unsafe\[cq] mode enabling the PIC macro
+in the \(oqunsafe\(cq mode enabling the PIC macro
 .B sh
 to execute arbitrary commands.
 .
diff -Nuar groff-1.22.3.old/doc/automake.mom groff-1.22.3/doc/automake.mom
--- groff-1.22.3.old/doc/automake.mom	1970-01-01 02:00:00.000000000 +0200
+++ groff-1.22.3/doc/automake.mom	2015-04-23 20:57:03.000000000 +0300
@@ -0,0 +1,675 @@
+.\" Copyright ©2014 Free Software Foundation
+.\" 51 Franklin St, Fifth Floor, Boston, MA 02110, USA
+.\"
+.\" Permission is hereby granted, free of charge, to any person
+.\" obtaining a copy of this software and associated documentation
+.\" files (the "Software"), to deal in the Software without restriction,
+.\" including, without limitation, the rights to use, copy, modify,
+.\" merge, publish, distribute, sublicense, and sell copies of
+.\" the Software, and to permit persons to whom the Software is
+.\" furnished to do so, subject to the following conditions:
+.\" 
+.\" The above copyright notice and this permission notice shall be
+.\" included in all copies, or substantial portions, of the Software;
+.\"
+.\" THE SOFTWARE IS PROVIDED "AS IS," WITHOUT WARRANTY OF ANY KIND,
+.\" EXPRESS OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES
+.\" OF MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE, AND
+.\" NONINFRINGEMENT.  IN NO EVENT SHALL THE AUTHORS OR COPYRIGHT
+.\" HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES, OR OTHER LIABILITY,
+.\" WHETHER IN AN ACTION OF CONTRACT, TORT, OR OTHERWISE, ARISING
+.\" FROM, OUT OF, OR IN CONNECTION WITH, THE SOFTWARE, OR THE USE OF,
+.\" OR OTHER DEALINGS IN, THE SOFTWARE.
+.\"
+.\"  Formatted with the mom macros
+.\" .RW (reduce) and .EW (expand) control track kerning
+.\" .WS controls word spacing
+.\"  Hanging punctuation and hyphens are inserted manually
+.\"
+.TITLE "Using Automake in the Groff project"
+.AUTHOR "Bertrand Garrigues"
+.DOCTYPE    DEFAULT
+.PRINTSTYLE TYPESET
+.PAPER      LETTER
+.COPYRIGHT "Free Software Foundation 2014"
+.DOC_COVERTITLE "Using Automake in the Groff project"
+.DOC_COVER DOC_COVERTITLE
+.COVER TITLE AUTHOR DOCTYPE COPYRIGHT
+
+.HEADING_STYLE 1 NUMBER
+.HEADING_STYLE 2 NUMBER
+.HEADING_STYLE 3 NUMBER
+.HEADING_STYLE 4 NUMBER
+
+\# Table of contents
+.TOC_PADDING 2
+.SPACE_TOC_ITEMS
+.AUTO_RELOCATE_TOC
+.TOC_ENTRY_STYLE 2 FONT I
+.TOC_LEAD 14
+
+.QUOTE_INDENT 1m
+.START
+
+.PP
+This is a quick overview of how to use `automake' in the groff project,
+and is intended to help the developers and contributors to find their way
+when they have to make some changes to the sources files or to the data that are installed.
+If you need more details on `automake',
+here are some reading suggestions:
+.LIST
+.ITEM
+the Automake Manual:
+.BR
+.PDF_WWW_LINK http://www.gnu.org/software/automake/manual/automake.html.
+.ITEM
+A book by John Calcote, with good practical examples:
+.BR
+.PDF_WWW_LINK http://fsmsh.com/2753
+.ITEM
+This site, by Diego Petteno, with good practical examples too:
+.BR
+.PDF_WWW_LINK https://autotools.io/index.html
+.LIST OFF
+
+
+.HEADING 1 "Overview, the initial build"
+
+.HEADING 2 "First build"
+
+.PP
+Groff integrates the `gnulib' and uses its `bootstrap' script.
+When compiling from the git repository, you should first invoke this script:
+.QUOTE
+.CODE
+$ ./bootstrap
+.CODE OFF
+.QUOTE OFF
+This will:
+.LIST
+.ITEM
+Clone the gnulib repository as a git submodule in 'gnulib',
+add the needed gnulib sources files in `lib', 
+add the needed gnulib m4 macros in `gnulib_m4'.
+.ITEM
+Invoke autoreconf that will call all the `GNU autotools' (`aclocal', `autoheader', `autoconf', `automake')
+in the right order for creating the following files:
+.LIST DASH
+.ITEM
+INSTALL (a symlink to gnulib's INSTALL file)
+.ITEM
+Makefile.in
+.ITEM
+aclocal.m4
+.ITEM
+autom4te.cache/
+.ITEM
+build-aux/ (that contains all the helper scripts) 
+.ITEM
+configure
+.ITEM
+src/include/config.hin
+.LIST OFF
+.LIST OFF
+
+Note that aclocal.m4 is generated and the groff m4 macros are included via the acinclude.m4 file.
+
+.PP  
+At this point you can invoke the `configure' script and call `make' to build the groff project.
+You can do it in the source tree:
+.QUOTE
+.CODE
+$ ./configure
+$ make
+.CODE OFF
+.QUOTE OFF
+You can also build groff in an out of source build tree,
+which is cleaner:
+.QUOTE
+.CODE
+$ mkdir build
+$ cd build
+$ ../configure
+$ make
+.CODE OFF
+.QUOTE OFF
+Note that parallel build is also supported and make can be invoked with the -j option,
+which will greatly speed up the build.
+
+.HEADING 2 "Automake in the autotools process"
+
+.PP
+Automake's main job is to generate a Makefile.in file
+(this file is maintained manually on projects using only autoconf).
+The main file processed by `automake' is the Makefile.am file,
+which eventually generates a Makefile.
+The (simplified) process is:
+.LIST
+.ITEM
+`aclocal' generates the `aclocal.m4' file from `configure.ac' and the user-defined macros in `acinclude.m4'.
+.ITEM
+`autoheader' generates config.h.in.
+.ITEM
+`autoconf' generates the `configure' script from `aclocal.m4' and `configure.ac'
+.ITEM
+`automake' generates Makefile.in from Makefile.am and the `configure.ac' file.
+It also generates some helper scripts, on the groff project they are located in build-aux.
+.ITEM
+`configure' generates `config.status'
+.ITEM
+`config.status' generates the Makefile and config.h.
+.LIST OFF
+Finally, `autoreconf' is the program that can be used to call these various tools in the correct order.
+
+.PP
+.PP
+Automake defines a set of special variables that are used to generate various build rules in the final Makefile.
+Note however that if Automake's pre-defined rules are not enough,
+you still have the possibility to add handwritten standard `make' rules in a Makefile.am:
+these rules will be copied verbatim in the Makefile.in and then in the final Makefile.
+
+.HEADING 2 "Modification of autotools files"
+
+.PP
+Previously, when groff used `autoconf' only and not `automake',
+you had to invoke manually the autotools,
+depending on what you modified.
+For example, to change the file `aclocal.m4', you had to run the shell command 'aclocal -I m4';
+to recreate the files `configure' and `Makefile',
+you had to use the command 'autoreconf -I m4'.
+
+.PP
+Now, as groff uses `automake', you don't need to run `autoreconf'.
+If you make some changes in Makefile.am or configure.ac,
+all the files that need to be updated will be regenerated when you execute `make'.
+
+.HEADING 1 "Building a program"
+
+.HEADING 2 "A program and its source files"
+
+.PP
+Generally speaking, when using `automake' 
+you will have to write a Makefile.am file and use the variable \*[CODE]bin_PROGRAMS\*[CODE OFF]
+to declare a program that should be built, 
+and then list the sources of this program in a variable
+that starts with the name of your program and ends with \*[CODE]_SOURCES\*[CODE OFF] .
+In the groff project we have only 1 top-level Makefile.am that includes several .am files.
+
+.PP
+Take for example the build of grolbp, in src/devices/grolbp/grolbp.am. 
+The file starts with:
+.QUOTE
+.CODE
+bin_PROGRAMS += grolbp
+.CODE OFF
+.QUOTE OFF
+This says that a program named `grolbp' is added to the list of the programs that should be built. 
+Note that \*[CODE]bin_PROGRAMS\*[CODE OFF]
+is initialized to an empty string in the top-level Makefile.am, 
+which includes grolbp.am. 
+We will see later why we don't write directly
+.BR
+\*[CODE]bin_PROGRAMS = grolbp\*[CODE OFF] in a Makefile.am in the grolbp directory.
+
+Then, we list the sources of grolbp like this:
+.QUOTE
+.CODE
+.ESC_CHAR %
+grolbp_SOURCES = \
+  src/devices/grolbp/lbp.cpp \
+  src/devices/grolbp/lbp.h \
+  src/devices/grolbp/charset.h
+.ESC_CHAR \
+.CODE OFF
+.QUOTE OFF
+As you added `grolbp' to \*[CODE]bin_PROGRAMS \*[CODE OFF]
+you need to define the sources of grolbp in the variable \*[CODE]grolbp_SOURCES\*[CODE OFF] .
+If you write in another file \*[CODE]bin_PROGRAMS += foo\*[CODE OFF],
+you will list the sources of `foo'
+in \*[CODE]foo_SOURCES\*[CODE OFF] .
+
+.PP
+With these two statements, 
+the resulting generated Makefile will contain everything that is needed to 
+build, clean, install and uninstall the `grolbp' binary
+when invoking the adequate make command.
+Also, the source files listed in \*[CODE]grolbp_SOURCES\*[CODE OFF]
+will automatically be included in the distribution tarball. 
+That is why the headers are also listed in \*[CODE]grolbp_SOURCES\*[CODE OFF]: 
+it is not necessary to add them in order to correctly build `grolbp',
+but this way the headers will be distributed.
+
+.PP
+Note that:
+.LIST
+.ITEM
+The path to the files are relative to the top-level directory.
+.ITEM
+The binaries are generated in the top-level build directory.
+.ITEM
+The .o files are generated in the directory where the source files are located,
+or, in the case of an out-of-source build tree,
+in a directory that is the replication of the source tree directory.
+For example if you built groff in a `build' directory,
+lbp.o (object file from src/devices/grolbp/lbp.cpp) will be located in
+build/src/devices/grolbp/lbp.o.
+.LIST OFF
+We will also see later the reasons, this is due to the non-recursive make design.
+
+.HEADING 2 "Linking against a library"
+
+.PP
+To list which libraries grolbp needs to link against, we just write:
+.QUOTE
+.CODE
+.ESC_CHAR %
+grolbp_LDADD = $(LIBM) \
+  libdriver.a \
+  libgroff.a \
+  lib/libgnu.a
+.ESC_CHAR \
+.CODE OFF
+.QUOTE OFF
+Again, we use the variable \*[CODE]grolbp_LDADD\*[CODE OFF] because we added a program named `grolbp'.
+This will also automatically set build dependencies between `grolbp' and the libraries it needs:
+`libdriver.a' and `libgroff.a',
+that are convenience libraries built within the groff project,
+will be compiled before grolbp.
+
+.HEADING 2 "Preprocessor flags"
+
+.PP
+Preprocessor flags that are common to all the binaries are listed in
+the variable \*[CODE]AM_CPPFLAGS\*[CODE OFF] in the top-level Makefile.am.
+If a `foo' binary needs specific preprocessor flags,
+use \*[CODE]foo_CPPFLAGS\*[CODE OFF],
+for example, in src/devices/xditview/xditview.am,
+extra flags are needed to build gxditview and are added like this:
+.QUOTE
+.CODE
+.ESC_CHAR %
+gxditview_CPPFLAGS = $(AM_CPPFLAGS) $(X_CFLAGS) -Dlint \
+  -I$(top_builddir)/src/devices/xditview
+.ESC_CHAR \
+.CODE OFF
+.QUOTE OFF
+.PP
+The use of specific CPPFLAGS changes the name of the generated objects:
+the .o object files are prefixed with the name of the program.
+For example, the .o file corresponding to src/devices/xditview/device.c
+will be src/devices/xditview/gxditview-device.o.
+
+.HEADING 2 "Cleaning"
+
+.PP
+You don't need to write rules to clean the programs listed in \*[CODE]bin_PROGRAMS\*[CODE OFF],
+`automake' will write them for you.
+However, some programs might have generated sources that should be cleaned.
+In this case, you have mainly two special variables to list extra files that should be cleaned:
+.LIST
+.ITEM
+\*[CODE]MOSTLYCLEANFILES\*[CODE OFF] for files that should be cleaned by `make mostlyclean'
+.ITEM
+\*[CODE]CLEANFILES\*[CODE OFF ] for files that should be cleaned by `make clean'
+.LIST OFF
+
+.PP
+There is also the possibility to write custom rules,
+we will see that later.
+
+.HEADING 2 "Dependencies"
+
+.PP
+We have already seen that when linking against a convenience library,
+the dependencies are already created by `automake'.
+However, some dependencies still need to be manually added,
+for example when a source file includes a generated header.
+In this case, the easiest way is to add a plain-make dependency.
+For example, src/roff/groff/groff.cpp includes defs.h,
+which is a generated header.
+We just add in src/roff/groff/groff.am:
+.QUOTE
+.CODE
+src/roff/groff/groff.$(OBJEXT): defs.h
+.CODE OFF
+.QUOTE OFF
+
+.HEADING 2 "Scripts"
+
+.PP
+A part from \*[CODE]bin_PROGRAMS\*[CODE OFF],
+there is another similar special variable for scripts:
+\*[CODE]bin_SCRIPTS\*[CODE OFF] .
+The scripts listed in this variable will automatically be built
+(of course you have to provide your custom rule to build the script),
+installed and uninstalled when invoking 'make', 'make install' and 'make uninstall'.
+The main difference is that unlike the programs listed in \*[CODE]bin_PROGRAMS\*[CODE OFF],
+the scripts will not be cleaned by default.
+They are not distributed by default either.
+In the groff project, \*[CODE]bin_SCRIPTS\*[CODE OFF] are cleaned because they are added to
+\*[CODE]MOSTLYCLEANFILES\*[CODE OFF] in the top-level Makefile.am.
+
+.PP
+A simple example are the gropdf and pdfmom scripts in src/devices/gropdf/gropdf.am:
+.QUOTE
+.CODE
+.ESC_CHAR %
+bin_SCRIPTS += gropdf pdfmom
+  [...]
+gropdf: $(gropdf_dir)/gropdf.pl $(SH_DEPS_SED_SCRIPT)
+        rm -f $@
+        sed -f $(SH_DEPS_SED_SCRIPT) \
+            -e "s|[@]VERSION[@]|$(VERSION)|" \
+            -e "s|[@]PERL[@]|$(PERL)|" \
+            -e "s|[@]GROFF_FONT_DIR[@]|$(fontpath)|" \
+            -e "s|[@]RT_SEP[@]|$(RT_SEP)|" $(gropdf_dir)/gropdf.pl >$@
+        chmod +x $@
+
+pdfmom: $(gropdf_dir)/pdfmom.pl $(SH_DEPS_SED_SCRIPT)
+        rm -f $@
+        sed -f $(SH_DEPS_SED_SCRIPT) \
+            -e "s|[@]VERSION[@]|$(VERSION)|" \
+            -e "s|[@]PERL[@]|$(PERL)|" $(gropdf_dir)/pdfmom.pl >$@
+        chmod +x $@
+.ESC_CHAR \
+.CODE OFF
+.QUOTE OFF
+
+Note that in this example the '@' symbol is protected by square brackets to prevent
+the substitution of the variable by `automake'. 
+
+.HEADING 1 "Non-recursive make schema"
+
+.PP
+There are two possibilities to organize the Makefile.am of a large project,
+using a recusive or a non-recursive `make'.
+
+.HEADING 2 "1st possibility: make recursion"
+
+.PP
+A top level Makefile.am includes other Makefile.am,
+using the \*[CODE]SUBDIRS\*[CODE OFF] directive,
+and the Makefile.am of each sub-directory lists the programs that should be built.
+If we had
+chosen this type of organization, we would have a Makefile.am in
+src/devices/grolbp and in each directory that contain sources to build
+a program (tbl, eqn, troff etc ...). We would write in the top-level
+Makefile.am:
+.QUOTE
+.CODE
+.ESC_CHAR %
+SUBDIRS = src/devices/grolbp \
+  ... (and all the dir that build a program or a script)
+.ESC_CHAR \
+.CODE OFF
+.QUOTE OFF
+and in src/devices/grolbp, we would have a file Makefile.am that contains:
+.QUOTE
+.CODE
+bin_PROGRAMS = grolbp
+grolbp_SOURCES = lbp.cpp lbp.h charset.h
+.CODE OFF
+.QUOTE OFF
+.PP
+Only `grolbp' is affected to the variable \*[CODE]bin_PROGRAMS\*[CODE OFF] .
+It would be the same in, say, src/roff/troff: 
+you would have a Makefile.am with \*[CODE]bin_PROGRAMS = troff\*[CODE OFF] .
+We would have 1 generated Makefile per Makefile.am file: 
+in the build tree you will have the top-level Makefile, 
+grolbp's Makefile in src/devices/grolbp,
+troff's Makefile in src/roff/troff, and so on. 
+When calling `make' to build everything,
+make will be recursively called in all the directories that have a Makefile. 
+Thus, the paths are logically relative to the directory that contains the Makefile.am.
+
+.PP
+This approach has the disadvantage of making dependencies harder to solve: 
+each Makefile does not know the targets of the other Makfiles.
+It also makes the build slower.
+
+.HEADING 2 "Non-recursive make used by the Groff project"
+
+.PP
+The second possibility, that was chosen on groff project, 
+is to use a non-recursive make schema. 
+It is described in paragraph 7.3 of the Automake manual ("An Alternative Approach to Subdirectories"),
+based on the following parper from Peter Miller: Recursive Make Considered
+Harmful
+.PDF_WWW_LINK http://miller.emu.id.au/pmiller/books/rmch/
+
+.PP
+The idea is to have a single Makefile that contains all the rules. 
+That is why we have only a single Makefile.am in the top-level directory
+which includes all the .am files that define rules to build the various programs.
+The inclusion is done with the \*[CODE]include\*[CODE OFF] directive, not \*[CODE]SUBDIRS\*[CODE OFF] .
+Using 'include' is like copying the content of the included file into the top-level Makefile.am,
+and will not generate other Makefile.
+We first say in this top-level Makefile.am:
+.QUOTE
+.CODE 
+  bin_PROGAMS = 
+.CODE OFF
+.QUOTE OFF
+and then all the .am files that define a program to be built
+(e.g. src/devices/grolbp/grolbp.am, src/roff/troff/troff.am, and so on)
+overload this variable, 
+so that at the end, all the programs that should be built are listed in this \*[CODE]bin_PROGRAMS\*[CODE OFF] variable.
+This is the reason why all the paths in the various .am files are relative to the top-level directory:
+at the end we will have only one Makefile in the top-level directory of the build tree.
+
+.PP
+As the resulting single Makefile knows all the targets,
+the dependencies are easier to manage.
+The build is also faster, particularly when compiling a single file:
+make is called once only and the file will be instantly rebuilt,
+while on a recursive make system, make will have to be invoked in all the sub-directories.
+
+.PP
+Note also that in order to make `gnulib' work with this non-recursive schema,
+the `non-recursive-gnulib-prefix-hack' configuration should be selected in bootstrap.conf.
+
+.HEADING 1 "Installing data"
+
+.PP
+Variables that end with \*[CODE]_DATA\*[CODE OFF] are special variables used to list files that should be installed in a particular location.
+The prefix of the variables should refer to another previously defined variable that ends with a `dir' suffix.
+This varibale that ends with `dir' defines where the files should be installed.
+
+.HEADING 2 "A simple case"
+
+.PP
+For example, in font/devX100/devX100.am, we can see this:
+
+.QUOTE
+.CODE
+if !WITHOUT_X11
+devX100fontdir = $(fontdir)/devX100
+devX100font_DATA = $(DEVX100FONTS)
+endif
+
+EXTRA_DIST += $(DEVX100FONTS)
+.CODE OFF
+.QUOTE OFF
+\*[CODE]DEVX100FONTS\*[CODE OFF] is just a list font files,
+defined at the begining of devX100.am.
+\*[CODE]fontdir\*[CODE OFF] is where all the font directories are installed,
+it is defined in the top-level Makefile.am.
+The conditional \*[CODE]if !WITHOUT_X11\*[CODE OFF]
+is used to prevent the installation of these files if X11 is not available.
+
+We first define where we wants to install the devX100 fonts with:
+
+.QUOTE
+.CODE
+devX100fontdir = $(fontdir)/devX100
+.CODE OFF
+.QUOTE OFF
+Because we declared a variable ending with `dir',
+we are allowed to define \*[CODE]devX100font_DATA\*[CODE OFF]
+(you remove the `dir' suffix and add \*[CODE]_DATA\*[CODE OFF]).
+Note that wildcards are not supported in the special variable that end with \*[CODE]_DATA\*[CODE OFF].
+
+.PP
+With these two lines, `make install' will install the files listed in  \*[CODE]DEVX100FONTS \*[CODE OFF]
+and `make uninstall' will uninstall them.
+\*[CODE]devX100fontdir\*[CODE OFF] will be automatically created if missing during the installation process,
+but not removed during the uninstall.
+The complete  \*[CODE]fontdir \*[CODE OFF] is removed by a custom uninstall rule
+(uninstall_groffdirs in Makefile.am).
+
+.PP
+Because the files listed in  \*[CODE]devX100font_DATA \*[CODE OFF] are not distributed by default,
+we explicitely added them to the \*[CODE]EXTRA_DIST\*[CODE OFF] variable,
+which lists all the files that should be distributed and that are not taken into account by the default automake rules.
+.QUOTE
+.CODE
+  EXTRA_DIST += $(DEVX100FONTS)
+.CODE OFF
+.QUOTE OFF
+Another possibility would have being to add a `dist' prefix to the \*[CODE]devX100font_DATA\*[CODE OFF] variable,
+in this case the use of \*[CODE]EXTRA_DIST\*[CODE OFF] is useless
+(except of course if
+.BR
+\*[CODE]WITHOUT_X11\*[CODE OFF] is true,
+in this case we don't install the files but we still have to distribute them):
+.QUOTE
+.CODE
+if !WITHOUT_X11
+devX100fontdir = $(fontdir)/devX100
+dist_devX100font_DATA = $(DEVX100FONTS)
+else
+EXTRA_DIST += $(DEVX100FONTS)
+endif
+.CODE OFF
+.QUOTE OFF
+
+.HEADING 2 "Dealing with generated files"
+
+.PP
+In the previous example, all the font files that must be installed were already present in the source tree.
+But in some cases, you need to generate the files you intend to install.
+In this case, the files should be installed but not distributed.
+A simple way to deal with this is to add a `nodist' prefix to your \*[CODE]xxx_DATA\*[CODE OFF] variable.
+
+.PP
+For example in font/devps/devps.am, we have a list of font files already present in the source tree, 
+defined by \*[CODE]DEVPSFONTFILES\*[CODE OFF],
+and another list of font files that are generated,
+listed in the variable \*[CODE]DEVPSFONTFILES_GENERATED\*[CODE OFF] .
+They should all by installed in a `devps' directory under the fontdir.
+Thus the following three lines, where we use the `dist' and `nodist' prefixes:
+.QUOTE
+.CODE
+devpsfontdir = $(fontdir)/devps
+dist_devpsfont_DATA = $(DEVPSFONTFILES) 
+nodist_devpsfont_DATA = $(DEVPSFONTFILES_GENERATED)
+.CODE OFF
+.QUOTE OFF
+
+The generated files are not cleaned by default, thus we add:
+.QUOTE
+.CODE
+MOSTLYCLEANFILES += $(DEVPSFONTFILES_GENERATED)
+.CODE OFF
+.QUOTE OFF
+
+.HEADING 1 "Extending Automake's rules"
+
+.HEADING 2 "Local clean rules"
+
+.PP
+In most of the cases, the files that need to be cleaned are automatically determined by `automake',
+or were added to the \*[CODE]MOSTCLEANFILES\*[CODE OFF] or \*[CODE]CLEANFILES\*[CODE OFF] variables.
+However, you might need to define a specific rule to clean some files that were not added to any list.
+Automake defines a set of targets to extend the clean targets with your own rules:
+clean-local, mostlyclean-local, distclean-local or maintainerclean-local.
+An example of such extension exists in font/devpdf/devpdf.am:
+because some fonts are not explicitely listed in a \*[CODE]xxx_DATA\*[CODE OFF] variable but generated by a custom rule,
+we define an extra rule to extend the `mostlyclean' target:
+.QUOTE
+.CODE
+.ESC_CHAR %
+mostlyclean-local: mostlyclean_devpdf_extra
+mostlyclean_devpdf_extra:
+        @echo Cleaning font/devpdf
+        rm -rf $(top_builddir)/font/devpdf/enc \
+          $(top_builddir)/font/devpdf/map;
+        if test -d $(top_builddir)/font/devpdf; then \
+          for f in $(GROFF_FONT_FILES); do \
+            rm -f $(top_builddir)/font/devpdf/$$f; \
+          done; \
+        fi
+.ESC_CHAR \
+.CODE OFF
+.QUOTE OFF
+
+.HEADING 2 "Local install/uninstall rules and hooks"
+
+.PP
+Similarly to the clean rules, there are extensions to install and uninstall rules.
+They come with two flavous, local rules and hooks.
+.LIST
+.ITEM
+There are 2 rules to extend install commands:
+`install-exec-local' for binaries and  `install-data-local' for data.
+.ITEM
+There is 1 uninstall local rule: `uninstall-local'.
+.LIST OFF
+There are no garantee on the order of execution of these local rules.
+An example of local rule is the installation of GXditview.ad and GXditview-color.ad files in 
+src/devices/xditview/xditview.am:
+if theses files are already installed, the old files are first saved.
+Also, the final file that is installed is stripped from its .ad suffix.
+Thus the usage of a custom rules rather than the definition of a \*[CODE]xxx_DATA\*[CODE OFF] variable:
+.QUOTE
+.CODE
+.ESC_CHAR %
+# Custom installation of GXditview.ad and GXditview-color.ad
+install-data-local: install_xditview
+uninstall-local: uninstall_xditview
+
+[...]
+install_xditview: $(xditview_srcdir)/GXditview.ad
+        -test -d $(DESTDIR)$(appresdir) \
+          || $(mkinstalldirs) $(DESTDIR)$(appresdir)
+        if test -f $(DESTDIR)$(appresdir)/GXditview; then \
+          mv $(DESTDIR)$(appresdir)/GXditview \
+            $(DESTDIR)$(appresdir)/GXditview.old; \
+        fi
+        [...]
+        $(INSTALL_DATA) $(xditview_srcdir)/GXditview.ad \
+          $(DESTDIR)$(appresdir)/GXditview
+.ESC_CHAR \
+.CODE OFF
+.QUOTE OFF
+
+.PP
+Hooks, on the other hand, are garanteed to be executed after all the standard targets have been executed.
+.LIST
+.ITEM
+There are 2 install hooks: `install-exec-hook' and `install-data-hook'.
+.ITEM
+There is 1 uninstall hook: `unintall-hook'
+.LIST OFF
+
+.PP
+An example of hook is the `uninstall_groffdirs' rule in the top-level Makefile.am.
+This hook is used to remove all the directories specific to groff introduced by the installation process.
+Obviously it could not be a local extension of `uninstall' because the order of execution is not guaranteed.
+.QUOTE
+.CODE
+.ESC_CHAR %
+# directories specific to groff
+uninstall-hook: uninstall_groffdirs
+uninstall_groffdirs:
+        if test -d $(DESTDIR)$(datasubdir); then \
+          rm -rf $(DESTDIR)$(fontdir); \
+          rm -rf $(DESTDIR)$(oldfontdir); \
+          rmdir $(DESTDIR)$(datasubdir); \
+        fi
+        [...]
+.ESC_CHAR \
+.CODE OFF
+.QUOTE OFF
+.TOC_RV_SWITCH
+.TOC
diff -Nuar groff-1.22.3.old/doc/doc.am groff-1.22.3/doc/doc.am
--- groff-1.22.3.old/doc/doc.am	1970-01-01 02:00:00.000000000 +0200
+++ groff-1.22.3/doc/doc.am	2015-04-23 20:57:03.000000000 +0300
@@ -0,0 +1,440 @@
+# Copyright (C) 2002-2014  Free Software Foundation, Inc.
+#      Original Makefile.sub written by Werner Lemberg <wl@gnu.org>
+#      Automake migration by 
+#      Bertrand Garrigues <bertrand.garrigues@laposte.net>
+#
+# This file is part of groff.
+#
+# groff is free software; you can redistribute it and/or modify it under
+# the terms of the GNU General Public License as published by the Free
+# Software Foundation, either version 3 of the License, or
+# (at your option) any later version.
+#
+# groff is distributed in the hope that it will be useful, but WITHOUT ANY
+# WARRANTY; without even the implied warranty of MERCHANTABILITY or
+# FITNESS FOR A PARTICULAR PURPOSE.  See the GNU General Public License
+# for more details.
+#
+# You should have received a copy of the GNU General Public License
+# along with this program. If not, see <http://www.gnu.org/licenses/>.
+
+doc_srcdir = $(abs_top_srcdir)/doc
+doc_builddir = $(abs_top_builddir)/doc
+
+DOC_SED = sed -e "s;[@]VERSION[@];$(VERSION);"
+
+DOC_GROFF_ONLY=\
+  GROFF_COMMAND_PREFIX= \
+  GROFF_BIN_PATH="$(GROFF_BIN_PATH)" \
+  $(GROFFBIN) -I$(abs_top_builddir) -M $(doc_srcdir) \
+	$(TFLAG) $(FFLAG) -Upet -ww 
+
+DOC_GROFF = $(DOC_SED) $< | $(DOC_GROFF_ONLY)
+
+# Other doc, installed in $(docdir)
+if BUILD_OTHERDOC
+# Files located in the source tree
+DOCFILES= \
+  doc/meref.me \
+  doc/meintro.me \
+  doc/meintro_fr.me \
+  doc/pic.ms
+# Files generated in the build tree
+PROCESSEDDOCFILES = \
+  doc/meref.ps \
+  doc/meintro.ps \
+  doc/meintro_fr.ps \
+  doc/pic.ps
+
+otherdocdir = $(docdir)
+dist_otherdoc_DATA = $(DOCFILES)
+nodist_otherdoc_DATA = $(PROCESSEDDOCFILES)
+MOSTLYCLEANFILES += $(PROCESSEDDOCFILES)
+else
+EXTRA_DIST += $(DOCFILES)
+endif
+
+# pdf doc, written in mom and therefore using contrib/mom/mom.am
+# definitions
+EXTRA_DIST += doc/automake.mom
+if BUILD_PDFDOC
+docpdfdocdir = $(pdfdocdir)
+nodist_docpdfdoc_DATA = doc/automake.pdf
+MOSTLYCLEANFILES += doc/automake.pdf
+endif
+doc/automake.pdf: doc/automake.mom \
+  groff troff gropdf pdfmom font/devpdf/build_font_files \
+  contrib/mom/om.tmac
+
+# GNU PIC html documentation, installed in $(htmldocdir)
+# Other pic*.html files are installed by the local rule
+if BUILD_HTML
+HTMLDOCFILES = \
+  doc/pic.html
+htmlpicdir = $(htmldocdir)
+htmlpic_DATA = $(HTMLDOCFILES)
+HTMLDOCFILESALL = pic*.html
+HTMLDOCIMAGEFILES = pic*
+endif
+
+# Examples files, installed in $(exampledir)
+
+# source tree files
+EXAMPLEFILES = \
+  doc/webpage.ms \
+  doc/groff.css \
+  doc/grnexmpl.g \
+  doc/grnexmpl.me
+
+if BUILD_EXAMPLES
+# Generated in the build tree
+PROCESSEDEXAMPLEFILES = \
+  doc/webpage.ps \
+  doc/grnexmpl.ps
+docexamplesdir = $(exampledir)
+dist_docexamples_DATA = $(EXAMPLEFILES)
+nodist_docexamples_DATA = $(PROCESSEDEXAMPLEFILES)
+MOSTLYCLEANFILES += $(PROCESSEDEXAMPLEFILES)
+else
+EXTRA_DIST += $(EXAMPLEFILES)
+endif
+
+if BUILD_HTMLEXAMPLES
+# webpage.html is generated, webpage*.html files are installed by the local rule.
+HTMLEXAMPLEFILES = doc/webpage.html
+HTMLEXAMPLEFILESALL = webpage*.html
+HTMLEXAMPLEIMAGEFILES = webpage*
+htmlexamplesdir = $(exampledir)
+nodist_htmlexamples_DATA = $(HTMLEXAMPLEFILES)
+endif
+
+imagedir = img
+htmldocimagedir = $(htmldocdir)/img
+exampleimagedir = $(exampledir)/img
+
+MOSTLYCLEANFILES += doc/examples.stamp
+
+EXTRA_DIST += \
+  doc/gnu.xpm \
+  doc/fixinfo.sh \
+  doc/txi-en.tex
+
+SUFFIXES += .me .ms .ps .html .txt .texi .dvi .pdf .xhtml
+
+# For simplicity, we always call preconv, grn, and eqn.
+.me.txt:
+	@$(MKDIR_P) `dirname $@`
+	$(DOC_GROFF) -k -Tutf8 -ge -me >$@
+.me.ps:
+	@$(MKDIR_P) `dirname $@`
+	$(DOC_GROFF) -k -Tps -ge -me >$@
+
+.ms.html:
+	@$(MKDIR_P) `dirname $@`
+	$(DOC_GROFF) -P-p -P-b -P-I`basename $< | sed -e 's|.ms$$||'` \
+	         -P-D$(imagedir) -P-V -Thtml -ms >$@
+.ms.txt:
+	@$(MKDIR_P) `dirname $@`
+	$(DOC_GROFF) -Tascii -ms -mwww >$@
+.ms.ps:
+	@$(MKDIR_P) `dirname $@`
+	$(DOC_GROFF) -Tps -ms -mwww >$@
+
+$(PROCESSEDEXAMPLEFILES): $(bin_PROGRAMS) $(prefixexecbin_PROGRAMS) gnu.eps
+$(PROCESSEDEXAMPLEFILES): $(dist_devpsfont_DATA) $(nodist_devpsfont_DATA) $(hdtbltmac_DATA)
+$(PROCESSEDEXAMPLEFILES): $(dist_tmac_DATA) $(nodist_tmac_DATA)
+$(PROCESSEDDOCFILES): $(bin_PROGRAMS) $(prefixexecbin_PROGRAMS) gnu.eps
+
+doc/pic.html: $(bin_PROGRAMS) $(prefixexecbin_PROGRAMS)
+doc/pic.html: doc/examples.stamp
+doc/pic.html: $(dist_devpsfont_DATA) $(nodist_devpsfont_DATA)
+doc/pic.html: $(doc_srcdir)/pic.ms $(devhtmlfont_DATA)
+	@$(MKDIR_P) $(doc_builddir)
+	cd $(doc_builddir) && \
+	$(DOC_SED) $(doc_srcdir)/pic.ms | \
+		$(DOC_GROFF_ONLY) -P-p -P-Ipic -P-D$(imagedir) -P-jpic \
+	         -Thtml -P-V -ms > pic.html
+
+doc/examples.stamp: doc/groff.css
+	@$(MKDIR_P) $(doc_builddir)
+	test -f $(doc_builddir)/groff.css || cp $(doc_srcdir)/groff.css $(doc_builddir)
+	echo timestamp > $@
+
+doc/webpage.html: $(bin_PROGRAMS) $(prefixexecbin_PROGRAMS)
+doc/webpage.html: doc/examples.stamp $(devhtmlfont_DATA)
+doc/webpage.html: $(dist_devpsfont_DATA) $(nodist_devpsfont_DATA) 
+doc/webpage.html: $(doc_srcdir)/webpage.ms gnu.eps $(doc_srcdir)/groff.css
+	@$(MKDIR_P) doc
+	cd $(doc_builddir) && \
+	$(DOC_SED) $(doc_srcdir)/webpage.ms | \
+		$(DOC_GROFF_ONLY) -P-jwebpage -P-nrpb -P-Iwebpage \
+	         -P-D$(imagedir) -Thtml -ms > webpage.html
+
+doc/grnexmpl.ps: doc/grnexmpl.me doc/grnexmpl.g
+
+# Note that we remove groff.css only if out-of-source build tree
+mostlyclean-local: mostlyclean_doc
+mostlyclean_doc:
+if BUILD_HTML
+	if test -d $(doc_builddir); then \
+	  cd $(doc_builddir) && \
+	  for f in $(HTMLDOCFILESALL); do \
+	    $(RM) $$f; \
+	  done; \
+	fi
+	if test -d $(doc_builddir)/$(imagedir); then \
+	  cd $(doc_builddir)/$(imagedir) && \
+	  for f in $(HTMLDOCIMAGEFILES); do \
+	    $(RM) $$f; \
+	  done; \
+	fi
+endif
+	if test $(top_builddir) != $(top_srcdir); then \
+	  $(RM) $(top_builddir)/doc/groff.css; \
+	fi
+
+if BUILD_HTMLEXAMPLES
+	if test -d $(doc_builddir); then \
+	  cd $(doc_builddir) && \
+	  for f in $(HTMLEXAMPLEFILESALL); do \
+	    $(RM) $$f; \
+	  done; \
+	fi
+	if test -d $(doc_builddir)/$(imagedir); then \
+	  cd $(doc_builddir)/$(imagedir) && \
+	  for f in $(HTMLEXAMPLEIMAGEFILES); do \
+	    $(RM) $$f; \
+	  done; \
+	fi
+endif
+
+install-data-hook: install_doc_htmldoc
+install_doc_htmldoc:
+if BUILD_HTML
+	cd $(doc_builddir) && \
+	for f in `ls $(HTMLDOCFILESALL)`; do \
+	  $(RM) $(DESTDIR)$(htmldocdir)/$$f; \
+	  $(INSTALL_DATA) $$f $(DESTDIR)$(htmldocdir)/$$f; \
+	done
+	-test -d $(DESTDIR)$(htmldocimagedir) \
+	  || $(mkinstalldirs) $(DESTDIR)$(htmldocimagedir)
+	$(RM) $(DESTDIR)$(htmldocimagedir)/$(HTMLDOCIMAGEFILES)
+	$(INSTALL_DATA) $(doc_builddir)/$(imagedir)/$(HTMLDOCIMAGEFILES) \
+	  $(DESTDIR)$(htmldocimagedir)
+endif
+
+install-data-hook: install_doc_examples
+install_doc_examples: gnu.eps
+if BUILD_EXAMPLES
+# Prefer gnu.eps in builddir over srcdir.
+	d=.; test -f "gnu.eps" || d=$(doc_srcdir); \
+	  $(RM) $(DESTDIR)$(exampledir)/gnu.eps; \
+	  $(INSTALL_DATA) $$d/gnu.eps $(DESTDIR)$(exampledir)/gnu.eps
+endif
+if BUILD_HTMLEXAMPLES
+	cd $(doc_builddir) && \
+	for f in `ls $(HTMLEXAMPLEFILESALL)`; do \
+	  $(RM) $(DESTDIR)$(exampledir)/$$f; \
+	  $(INSTALL_DATA) $$f $(DESTDIR)$(exampledir)/$$f; \
+	done
+	-test -d $(DESTDIR)$(exampleimagedir) \
+	  || $(mkinstalldirs) $(DESTDIR)$(exampleimagedir)
+	$(RM) $(DESTDIR)$(exampleimagedir)/$(HTMLEXAMPLEIMAGEFILES)
+	$(INSTALL_DATA) $(doc_builddir)/$(imagedir)/$(HTMLEXAMPLEIMAGEFILES) \
+	  $(DESTDIR)$(exampleimagedir)
+endif
+
+uninstall-hook: uninstall_doc_examples uninstall_doc_htmldoc uninstall_mom
+uninstall_doc_examples:
+if BUILD_EXAMPLES
+	rm -f $(DESTDIR)$(exampledir)/gnu.eps
+endif
+if BUILD_HTMLEXAMPLES
+	-test -d $(DESTDIR)$(docexamplesdir) && \
+	cd $(DESTDIR)$(docexamplesdir) && \
+	for f in $(HTMLEXAMPLEFILESALL); do \
+	  $(RM) $$f; \
+	done
+	-test -d $(DESTDIR)$(docexamplesdir)/$(imagedir) && \
+	cd $(DESTDIR)$(docexamplesdir)/$(imagedir) && \
+	for f in $(HTMLEXAMPLEIMAGEFILES); do \
+	  $(RM) $$f; \
+	done
+	-rmdir $(DESTDIR)$(docexamplesdir)/$(imagedir)
+	-rmdir $(DESTDIR)$(docexamplesdir)
+endif
+
+uninstall_doc_htmldoc:
+if BUILD_HTML
+	-test -d $(DESTDIR)$(htmldocdir) && \
+	cd $(DESTDIR)$(htmldocdir) && \
+	for f in $(HTMLDOCFILESALL); do \
+	  $(RM) $$f; \
+	done
+	-test -d $(DESTDIR)$(htmldocdir)/$(imagedir) && \
+	cd $(DESTDIR)$(htmldocdir)/$(imagedir) && \
+	for f in $(HTMLDOCIMAGEFILES); do \
+	  $(RM) $$f; \
+	done
+	-rmdir $(DESTDIR)$(htmldocdir)/$(imagedir)
+	-rmdir $(DESTDIR)$(htmldocdir)
+endif
+
+# Texinfo doc
+#
+# Users who want to print out the groff manual are expected to have a
+# working TeX installation.  Note that texi2dvi properly honours the
+# `MAKEINFO' environment variable.
+#
+# We can't use automake's facilities because the make dist target attempts to 
+# generate a pdf version of groff.texi by invoking texi2dvi without the -e 
+# option, which is needed to build this file.
+# info_TEXINFOS = doc/groff.texi
+# doc_groff_TEXINFOS = doc/fdl.texi
+#
+# Note that GNU standards require to install only info doc. Info doc
+# can still be disabled by passing 
+# --with-doc=<something else than info or yes> 
+# to configure
+
+all: build_infodoc
+if BUILD_INFODOC
+build_infodoc: doc/groff.info
+groffinfodir = $(infodir)
+groffpdfdir = $(infodir)
+MOSTLYCLEANFILES += doc/groff.info doc/groff.info-2 doc/groff.info-2
+doc/groff.info: $(doc_srcdir)/groff.texi
+	@$(MKDIR_P) $(doc_builddir)
+	LANG=C \
+	LC_ALL=C \
+	$(MAKEINFO) -o doc/groff.info --enable-encoding -I$(doc_srcdir) $(doc_srcdir)/groff.texi
+else
+build_infodoc:
+endif
+EXTRA_DIST += doc/groff.texi doc/fdl.texi
+
+# Rules to generate various doc files from .texi files.
+.texi.txt:
+	@$(MKDIR_P) $(doc_builddir)
+	LANG=C \
+	LC_ALL=C \
+	$(MAKEINFO) --enable-encoding -I$(doc_srcdir) --plaintext -o $@ $<
+
+.texi.dvi:
+	@$(MKDIR_P) $(doc_builddir)
+	LANG=C \
+	LC_ALL=C \
+	TEXINPUTS="$(top_srcdir)/build-aux:$(TEXINPUTS)" \
+	MAKEINFO='$(MAKEINFO) -I $(doc_srcdir)' \
+	$(TEXI2DVI) -e --batch --build-dir=doc/`basename $@`.t2d -o $@ $<
+
+.texi.pdf:
+	@$(MKDIR_P) $(doc_builddir)
+	LANG=C \
+	LC_ALL=C \
+	TEXINPUTS="$(top_srcdir)/build-aux:$(TEXINPUTS)" \
+	MAKEINFO='$(MAKEINFO) -I $(doc_srcdir)' \
+	$(TEXI2DVI) -e --batch --pdf --build-dir=doc/`basename $@`.t2p -o $@ $<
+
+# This will generate both html split into several files and html doc
+# in a single file. If texinfo version < 5.0, we process the resulting
+# (mono) .html file with fixinfo.sh du to a problem with blockquote
+# closing (for example 5.6.1 Setting Registers, the 'Request'
+# blockquote is not properly closed, see fixinfo.sh for more details
+.texi.html:
+	@$(MKDIR_P) $(doc_builddir)/
+	@$(MKDIR_P) $(doc_builddir)/`basename $@`.mono/
+	LANG=C \
+	LC_ALL=C \
+	$(MAKEINFO) --html -I $(doc_srcdir) \
+	  -o doc/`basename $@`.node $<
+	LANG=C \
+	LC_ALL=C \
+	$(MAKEINFO) --html -I $(doc_srcdir) --no-split \
+	  -o doc/`basename $@`.mono/`basename $@` $<
+	if test "$(makeinfo_version_numeric)" -lt 5000; then \
+	  echo "patching $@ with fixinfo.sh"; \
+	  $(SHELL) $(doc_srcdir)/fixinfo.sh \
+	    doc/`basename $@`.mono/`basename $@`; \
+	fi
+
+# Targets to make all the doc in all formats. These doc are not built
+# by default. pdf, dvi, ps, html and their install equivalent
+# install-pdf, install-dvi, install-ps, install-html are standard
+# Automake targets.
+
+doc: doc_all
+doc_all: doc_txt dvi pdf html
+doc_txt: doc/groff.txt
+dvi: doc_dvi
+doc_dvi: doc/groff.dvi
+pdf: doc_pdf
+doc_pdf: doc/groff.pdf
+html: doc_html
+doc_html: doc/groff.html
+
+distclean-local: clean_infodoc clean_otherdoc
+maintainer-clean-local: clean_infodoc clean_otherdoc
+clean_infodoc:
+	-$(RM) $(doc_builddir)/groff.info*
+clean_otherdoc:
+	-cd $(doc_builddir) && \
+	  rm -rf *.pdf *.html *.txt *.dvi *.html.mono *.t2p *.t2d
+
+install-data-local: install_infodoc
+if BUILD_INFODOC
+install_infodoc: doc/groff.info
+	-test -d $(DESTDIR)$(infodir) || $(mkinstalldirs) $(DESTDIR)$(infodir)
+	  for p in doc/groff.info `ls doc/groff.info*`; do \
+	    f=`basename $$p`; \
+	    rm -f $(DESTDIR)$(infodir)/$$f; \
+	    $(INSTALL_DATA) $$p $(DESTDIR)$(infodir)/$$f; \
+	  done
+	$(INSTALL_INFO) --info-dir=$(DESTDIR)$(infodir) \
+	  $(DESTDIR)$(infodir)/groff.info
+else
+install_infodoc:
+endif
+
+uninstall-local: uninstall_infodoc
+uninstall_infodoc:
+if BUILD_INFODOC
+	-$(INSTALL_INFO) --remove --info-dir=$(DESTDIR)$(infodir) \
+	  $(DESTDIR)$(infodir)/groff.info
+	-for f in `ls $(DESTDIR)$(infodir)/groff.info*`; do \
+	  rm -f $$f; \
+	done
+endif
+
+# File used by contrib/hdtbl and contrib/pdfmark. It is distributed in
+# doc.eps. We try in priority to use the file in 'doc'.
+EXTRA_DIST += doc/gnu.xpm
+MOSTLYCLEANFILES += gnu.eps
+gnu.eps:
+	echo $(XPMTOPPM)
+	if test -f $(top_srcdir)/doc/gnu.eps; then \
+	  cp $(top_srcdir)/doc/gnu.eps . ; \
+	elif test -f $(top_builddir)/doc/gnu.eps; then \
+	  cp $(top_builddir)/doc/gnu.eps . ; \
+	else \
+	  if test ""$(XPMTOPPM) != "found"; then \
+	    echo "Program xpmtoppm is missing, can't generate gnu.eps" ; \
+	    exit 1; \
+	  fi; \
+	  if test ""$(pnmtops) != "found"; then \
+	    echo "Program pnmtops is missing, can't generate gnu.eps" ; \
+	    exit 1; \
+	  fi; \
+	  if test "$(pnmtops_nosetpage)" != "pnmtops -nosetpage"; then \
+	    echo "Program pnmtops can't handle -nosetpage, can't generate gnu.eps" ; \
+	    exit 1; \
+	  fi; \
+	  xpmtoppm $(top_srcdir)/doc/gnu.xpm | pnmdepth 15 \
+	    | $(pnmtops_nosetpage) -noturn -rle >$@ ; \
+	fi
+
+# Copy gnu.eps in 'doc' directory
+dist-hook: dist-gnueps
+dist-gnueps:
+	chmod u+w $(distdir)/doc
+	cp -f gnu.eps $(distdir)/doc
diff -Nuar groff-1.22.3.old/doc/fixinfo.sh groff-1.22.3/doc/fixinfo.sh
--- groff-1.22.3.old/doc/fixinfo.sh	2014-11-04 10:38:35.558519834 +0200
+++ groff-1.22.3/doc/fixinfo.sh	2015-04-23 20:57:03.000000000 +0300
@@ -3,7 +3,7 @@
 # Fix a problem with HTML output produced by makeinfo
 #   (tested with versions 4.8 and 4.13).
 #
-# groff.texinfo uses (after macro expansion) something like
+# groff.texi uses (after macro expansion) something like
 #
 #   @deffn ...
 #   @XXindex ...
@@ -19,9 +19,11 @@
 # @deffn and @deffnx.
 #
 # Note that this script is a quick hack and tightly bound to the current
-# groff.texinfo macro code.  Hopefully, a new texinfo version makes it
+# groff.texi macro code.  Hopefully, a new texinfo version makes it
 # unnecessary.
-
+#
+# 09-2014: no more problem with texinfo 5.0 or higher
+#
 t=${TMPDIR-.}/gro$$.tmp
 
 cat $1 | sed '
diff -Nuar groff-1.22.3.old/doc/.gitignore groff-1.22.3/doc/.gitignore
--- groff-1.22.3.old/doc/.gitignore	1970-01-01 02:00:00.000000000 +0200
+++ groff-1.22.3/doc/.gitignore	2015-04-23 20:57:03.000000000 +0300
@@ -0,0 +1,20 @@
+Makefile
+examples.stamp
+gendocs_template
+gnu.eps
+grnexmpl.g
+grnexmpl.ps
+groff.info
+groff.info-*
+groff.???
+groff.??
+img
+meintro.ps
+meintro_fr.ps
+meref.ps
+pic.html
+pic-*.html
+pic.ps
+webpage.html
+webpage-*.html
+webpage.ps
diff -Nuar groff-1.22.3.old/doc/gnu.eps groff-1.22.3/doc/gnu.eps
--- groff-1.22.3.old/doc/gnu.eps	2014-11-04 10:39:07.845116196 +0200
+++ groff-1.22.3/doc/gnu.eps	1970-01-01 02:00:00.000000000 +0200
@@ -1,777 +0,0 @@
-%!PS-Adobe-3.0 EPSF-3.0
-%%LanguageLevel: 2
-%%Creator: pnmtops
-%%Title: noname.ps
-%%Pages: 1
-%%BoundingBox: 203 311 408 481
-%%EndComments
-%%BeginSetup
-/rlestr1 1 string def
-/readrlestring {
-  /rlestr exch def
-  currentfile rlestr1 readhexstring pop
-  0 get
-  dup 127 le {
-    currentfile rlestr 0
-    4 3 roll
-    1 add  getinterval
-    readhexstring pop
-    length
-  } {
-    257 exch sub dup
-    currentfile rlestr1 readhexstring pop
-    0 get
-    exch 0 exch 1 exch 1 sub {
-      rlestr exch 2 index put
-    } for
-    pop
-  } ifelse
-} bind def
-/readstring {
-  dup length 0 {
-    3 copy exch
-    1 index sub
-    getinterval
-    readrlestring
-    add
-    2 copy le { exit } if
-  } loop
-  pop pop
-} bind def
-/rpicstr 107 string def
-/gpicstr 107 string def
-/bpicstr 107 string def
-%%EndSetup
-%%Page: 1 1
-gsave
-203.76 311.04 translate
-204.48 169.92 scale
-213 177 4
-[ 213 0 0 -177 0 177 ]
-{ rpicstr readstring }
-{ gpicstr readstring }
-{ bpicstr readstring }
-true 3
-colorimage
-97ff00f097ff00f097ff00f097ff00f097ff00f097ff00f0ecff04eddcaabddeb1ff00f0ecff04ed
-dcaabddeb1ff00f0ecff04eddcaabddeb1ff00f0eeff0ad988777478864555678adfb5ff00f0eeff
-0ad988777478864555678adfb5ff00f0eeff0ad988777478864555678adfb5ff00f0f0ff0dfdbba9
-4afcb867b544777675447cb6ff00f0f0ff0dfdbba94afcb867b544777675447cb6ff00f0f0ff0dfd
-bba94afcb867b544777675447cb6ff00f0f1ff10faab6985449d5d649543484465675558bdd3ff01
-ecdfe8ff00f0f1ff10faab6985449d5d649543484465675558bdd3ff01ecdfe8ff00f0f1ff10faab
-6985449d5d649543484465675558bdd3ff01ecdfe8ff00f0f2ff12fb9de89476454897d54a443974
-43575554339fd7ff06d978778998889ceaff00f0f2ff12fb9de89476454897d54a44397443575554
-339fd7ff06d978778998889ceaff00f0f2ff12fb9de89476454897d54a44397443575554339fd7ff
-06d978778998889ceaff00f0f3ff14fc9cfff834455554669b487434a5444755555346cfdaff0afc
-869cfdcfa9fedaa988dfecff00f0f3ff14fc9cfff834455554669b487434a5444755555346cfdaff
-0afc869cfdcfa9fedaa988dfecff00f0f3ff14fc9cfff834455554669b487434a5444755555346cf
-daff0afc869cfdcfa9fedaa988dfecff00f0f3ff159bffd5ae84534554454c74b444474444944566
-5549effdff00fee2ff0ce8977adb8874764564444aee99ecff00f0f3ff159bffd5ae84534554454c
-74b4444744449445665549effdff00fee2ff0ce8977adb8874764564444aee99ecff00f0f3ff159b
-ffd5ae84534554454c74b4444744449445665549effdff00fee2ff0ce8977adb8874764564444aee
-99ecff00f0f5ff1dfee8defd9975ca4535454445c47844455444554456444558bfffffff76afe4ff
-0ee8448baa56654444444535797efc8bedff00f0f5ff1dfee8defd9975ca4535454445c478444554
-44554456444558bfffffff76afe4ff0ee8448baa56654444444535797efc8bedff00f0f5ff1dfee8
-defd9975ca4535454445c47844455444554456444558bfffffff76afe4ff0ee8448baa5665444444
-4535797efc8bedff00f0f5ff1de7cef97cd76758a454545456754b4454545446455463855caaacdd
-a7bdafedff01fdbefbff10fd77a86754454445444444896446effc9eeeff00f0f5ff1de7cef97cd7
-6758a454545456754b4454545446455463855caaacdda7bdafedff01fdbefbff10fd77a867544544
-45444444896446effc9eeeff00f0f5ff1de7cef97cd76758a454545456754b445454544645546385
-5caaacdda7bdafedff01fdbefbff10fd77a86754454445444444896446effc9eeeff00f0f6ff1efe
-8e758a849ec65488444467c8646794564644444454555757efca78bffaefedff19d675affffffffe
-ed976666844443444343444455677898affbaeefff00f0f6ff1efe8e758a849ec65488444467c864
-6794564644444454555757efca78bffaefedff19d675affffffffeed976666844443444343444455
-677898affbaeefff00f0f6ff1efe8e758a849ec65488444467c8646794564644444454555757efca
-78bffaefedff19d675affffffffeed976666844443444343444455677898affbaeefff00f0f6ff1d
-c79889555655afc64664457efd75b594485445455445494674eefddeefdaecff039efb6466fd4412
-466558444334563454434555434459cfffe9eff0ff00f0f6ff1dc79889555655afc64664457efd75
-b594485445455445494674eefddeefdaecff039efb6466fd44124665584443345634544345554344
-59cfffe9eff0ff00f0f6ff1dc79889555655afc64664457efd75b594485445455445494674eefdde
-efdaecff039efb6466fd4412466558444334563454434555434459cfffe9eff0ff00f0f7ff1ef9ac
-796686455447eea64589dffffffddc669557656856684494cecba66c8eecff1aa8fefecb985677b6
-5554844434345346433456457899998effffadf0ff00f0f7ff1ef9ac796686455447eea64589dfff
-fffddc669557656856684494cecba66c8eecff1aa8fefecb985677b6555484443434534643345645
-7899998effffadf0ff00f0f7ff1ef9ac796686455447eea64589dffffffddc669557656856684494
-cecba66c8eecff1aa8fefecb985677b65554844434345346433456457899998effffadf0ff00f0f7
-ff1dc7ffeffb557555465bfe77ccfffecccbba568c9dfe8aefbed8dbfeeffd99ebff1bf57deef855
-4454555556534333453453345434644454444579fffbdff1ff00f0f7ff1dc7ffeffb557555465bfe
-77ccfffecccbba568c9dfe8aefbed8dbfeeffd99ebff1bf57deef855445455555653433345345334
-5434644454444579fffbdff1ff00f0f7ff1dc7ffeffb557555465bfe77ccfffecccbba568c9dfe8a
-efbed8dbfeeffd99ebff1bf57deef8554454555556534333453453345434644454444579fffbdff1
-ff00f0f8ff1efe9ffdedffe7445465959ffbefe967abbbcdcb97778999aaacceefffeb89dfeaff10
-94679d9964454555569a65664345334443fb44034568ffbef1ff00f0f8ff1efe9ffdedffe7445465
-959ffbefe967abbbcdcb97778999aaacceefffeb89dfeaff1094679d9964454555569a6566434533
-4443fb44034568ffbef1ff00f0f8ff1efe9ffdedffe7445465959ffbefe967abbbcdcb97778999aa
-acceefffeb89dfeaff1094679d9964454555569a65664345334443fb44034568ffbef1ff00f0f8ff
-0ef9ffc5457bff944545bd78ffe97aeffbff07edddccbccccccedee8ff1bfe96434689d556686887
-75874765675444443333344455789cfffaeff2ff00f0f8ff0ef9ffc5457bff944545bd78ffe97aef
-fbff07edddccbccccccedee8ff1bfe96434689d55668688775874765675444443333344455789cff
-faeff2ff00f0f8ff0ef9ffc5457bff944545bd78ffe97aeffbff07edddccbccccccedee8ff1bfe96
-434689d55668688775874765675444443333344455789cfffaeff2ff00f0f8ff0c9ddea6544469e8
-56567efceb9dd6ff05fda754445bdefdff04c65dfe5444fb33043446effebff2ff00f0f8ff0c9dde
-a6544469e856567efceb9dd6ff05fda754445bdefdff04c65dfe5444fb33043446effebff2ff00f0
-f8ff0c9ddea6544469e856567efceb9dd6ff05fda754445bdefdff04c65dfe5444fb33043446effe
-bff2ff00f0f9ff0cf8bc7559bb853459679aa9fe9dcbff03fea68ed6fd3307344456765467dfaff2
-ff00f0f9ff0cf8bc7559bb853459679aa9fe9dcbff03fea68ed6fd3307344456765467dfaff2ff00
-f0f9ff0cf8bc7559bb853459679aa9fe9dcbff03fea68ed6fd3307344456765467dfaff2ff00f0fa
-ff0dfd74469cb646bdb63459eeffd8efc9ff0dc7cd33334444588754334457dfccf2ff00f0faff0d
-fd74469cb646bdb63459eeffd8efc9ff0dc7cd33334444588754334457dfccf2ff00f0faff0dfd74
-469cb646bdb63459eeffd8efc9ff0dc7cd33334444588754334457dfccf2ff00f0faff0cf8964444
-5885457dc436cefb8ec7ff028ab445fd3305345676654debf2ff00f0faff0cf89644445885457dc4
-36cefb8ec7ff028ab445fd3305345676654debf2ff00f0faff0cf89644445885457dc436cefb8ec7
-ff028ab445fd3305345676654debf2ff00f0faff0bc8ffeb7444455444895befb9c6ff0cfb8c9543
-3334444444577769faf2ff00f0faff0bc8ffeb7444455444895befb9c6ff0cfb8c95433334444444
-577769faf2ff00f0faff0bc8ffeb7444455444895befb9c6ff0cfb8c95433334444444577769faf2
-ff00f0fbff0cfe7cbbcacdb6444455666ffb9fc5ff02b8fc43fd330444455568caf2ff00f0fbff0c
-fe7cbbcacdb6444455666ffb9fc5ff02b8fc43fd330444455568caf2ff00f0fbff0cfe7cbbcacdb6
-444455666ffb9fc5ff02b8fc43fd330444455568caf2ff00f0fbff0be7e555444569a7444558dfd8
-c4ff0cfa7fb53334433333457abbebeff3ff00f0fbff0be7e555444569a7444558dfd8c4ff0cfa7f
-b53334433333457abbebeff3ff00f0fbff0be7e555444569a7444558dfd8c4ff0cfa7fb533344333
-33457abbebeff3ff00f0fbff0b9bfc9cea7544568855da8b8eedff05edbbaaaabcefddff0b97e633
-333334578865569dcff3ff00f0fbff0b9bfc9cea7544568855da8b8eedff05edbbaaaabcefddff0b
-97e633333334578865569dcff3ff00f0fbff0b9bfc9cea7544568855da8b8eedff05edbbaaaabcef
-ddff0b97e633333334578865569dcff3ff00f0fcff0cfe7ffffeefffd9445776eff7dfefff09eb86
-7789998778778adff7ff02cbcdefecff0bfaa5333433433469dfffffbff3ff00f0fcff0cfe7ffffe
-efffd9445776eff7dfefff09eb867789998778778adff7ff02cbcdefecff0bfaa5333433433469df
-ffffbff3ff00f0fcff0cfe7ffffeefffd9445776eff7dfefff09eb867789998778778adff7ff02cb
-cdefecff0bfaa5333433433469dfffffbff3ff00f0fcff0bf9dfffcbaaabceeb556cffabefff0be7
-69cedbb9988aa9abba88cffaff05fea8998889adecff0a77344555455444467cffaff3ff00f0fcff
-0bf9dfffcbaaabceeb556cffabefff0be769cedbb9988aa9abba88cffaff05fea8998889adecff0a
-77344555455444467cffaff3ff00f0fcff0bf9dfffcbaaabceeb556cffabefff0be769cedbb9988a
-a9abba88cffaff05fea8998889adecff0a77344555455444467cffaff3ff00f0fcff0be8ff944433
-44446afb9efc8ff0ff0dfc69a899abdefeecba8668aa78cffcff07fb9aba988abdfcbdedff0ac874
-55544433344458ffbff3ff00f0fcff0be8ff94443344446afb9efc8ff0ff0dfc69a899abdefeecba
-8668aa78cffcff07fb9aba988abdfcbdedff0ac87455544433344458ffbff3ff00f0fcff0be8ff94
-443344446afb9efc8ff0ff0dfc69a899abdefeecba8668aa78cffcff07fb9aba988abdfcbdedff0a
-c87455544433344458ffbff3ff00f0fcff0a9dc856789a987544dfffe7f0ff03fd747adffaff11ec
-877667dfffffffe978879bcedba98aecbfeeff0af7da53333333344456efbff3ff00f0fcff0a9dc8
-56789a987544dfffe7f0ff03fd747adffaff11ec877667dfffffffe978879bcedba98aecbfeeff0a
-f7da53333333344456efbff3ff00f0fcff0a9dc856789a987544dfffe7f0ff03fd747adffaff11ec
-877667dfffffffe978879bcedba98aecbfeeff0af7da53333333344456efbff3ff00f0fcff0a8f99
-8887765567977bffadf0ff1ca58efffffffdcfefffceffffffeb8549ffffd9968ceffb5becfffc89
-efeeff0af9c85333333443344679cef3ff00f0fcff0a8f998887765567977bffadf0ff1ca58effff
-fffdcfefffceffffffeb8549ffffd9968ceffb5becfffc89efeeff0af9c85333333443344679cef3
-ff00f0fcff0a8f998887765567977bffadf0ff1ca58efffffffdcfefffceffffffeb8549ffffd996
-8ceffb5becfffc89efeeff0af9c85333333443344679cef3ff00f0fdff0bfaad444444568aa86576
-df9ff1ff1dfa8efffffeffff9c885de67cffec9bfd848ddab98effffe754547ffffe89eeff0afd9f
-645aa6434696445ecef3ff00f0fdff0bfaad444444568aa86576df9ff1ff1dfa8efffffeffff9c88
-5de67cffec9bfd848ddab98effffe754547ffffe89eeff0afd9f645aa6434696445ecef3ff00f0fd
-ff0bfaad444444568aa86576df9ff1ff1dfa8efffffeffff9c885de67cffec9bfd848ddab98effff
-e754547ffffe89eeff0afd9f645aa6434696445ecef3ff00f0fdff0bf666544565654458dec9bf9f
-f1ff1e9bfffffff9c8d99aa9485967ee6766cf9c65be88befdca8d4447349aeffd8ceeff097d4433
-47984348684eddf3ff00f0fdff0bf666544565654458dec9bf9ff1ff1e9bfffffff9c8d99aa94859
-67ee6766cf9c65be88befdca8d4447349aeffd8ceeff097d443347984348684eddf3ff00f0fdff0b
-f666544565654458dec9bf9ff1ff1e9bfffffff9c8d99aa9485967ee6766cf9c65be88befdca8d44
-47349aeffd8ceeff097d443347984348684eddf3ff00f0fdff0bb888aaa8877655554ceffdbff2ff
-20e8cfffffc9b9aaab69b74b69586865565ba6d786b7559c5d644945a3465da9ea8eefff09786443
-3434685345bfbcf3ff00f0fdff0bb888aaa8877655554ceffdbff2ff20e8cfffffc9b9aaab69b74b
-69586865565ba6d786b7559c5d644945a3465da9ea8eefff097864433434685345bfbcf3ff00f0fd
-ff0bb888aaa8877655554ceffdbff2ff20e8cfffffc9b9aaab69b74b69586865565ba6d786b7559c
-5d644945a3465da9ea8eefff097864433434685345bfbcf3ff00f0fdff0b6efddb9865554445569f
-faeff2ff218effffff887b8a8c57c668874758754764655a869e644566d548a3943333335bd7dff0
-ff099a44333344447944bfbaf3ff00f0fdff0b6efddb9865554445569ffaeff2ff218effffff887b
-8a8c57c668874758754764655a869e644566d548a3943333335bd7dff0ff099a44333344447944bf
-baf3ff00f0fdff0b6efddb9865554445569ffaeff2ff218effffff887b8a8c57c668874758754764
-655a869e644566d548a3943333335bd7dff0ff099a44333344447944bfbaf3ff00f0feff0bfe7ffc
-544444555556666df8f2ff22f8cfbea86ea55d697e56d575a546458546554355a64ba454439b34c4
-54334333345a7bf0ff099d544555433445b65dbaf3ff00f0feff0bfe7ffc544444555556666df8f2
-ff22f8cfbea86ea55d697e56d575a546458546554355a64ba454439b34c454334333345a7bf0ff09
-9d544555433445b65dbaf3ff00f0feff0bfe7ffc544444555556666df8f2ff22f8cfbea86ea55d69
-7e56d575a546458546554355a64ba454439b34c454334333345a7bf0ff099d544555433445b65dba
-f3ff00f0feff02fbae95fc44034547eee9f2ff239cdd9bc65bd55d677f56e574c454459645544345
-6855d555654d7386453344533334b99ff1ff09ab4444345543454885a9f3ff00f0feff02fbae95fc
-44034547eee9f2ff239cdd9bc65bd55d677f56e574c4544596455443456855d555654d7386453344
-533334b99ff1ff09ab4444345543454885a9f3ff00f0feff02fbae95fc44034547eee9f2ff239cdd
-9bc65bd55d677f56e574c4544596455443456855d555654d7386453344533334b99ff1ff09ab4444
-345543454885a9f3ff00f0feff0bf8d9444578b9bcba75356e9cf3ff24f9aff768f549e55a857f55
-d463b4444595476454455655ab584844a3784643637443335bb8f1ff09baa443444345544448e9f3
-ff00f0feff0bf8d9444578b9bcba75356e9cf3ff24f9aff768f549e55a857f55d463b44445954764
-54455655ab584844a3784643637443335bb8f1ff09baa443444345544448e9f3ff00f0feff0bf8d9
-444578b9bcba75356e9cf3ff24f9aff768f549e55a857f55d463b4444595476454455655ab584844
-a3784643637443335bb8f1ff09baa443444345544448e9f3ff00f0feff0bf7fb59bba8754444458d
-ef8ff3ff25bce9fa56f648f659956f55d474944444a65784563455945b6594b4546c354363854333
-349b9ff2ff09aba433345533344346e9f3ff00f0feff0bf7fb59bba8754444458def8ff3ff25bce9
-fa56f648f659956f55d474944444a65784563455945b6594b4546c354363854333349b9ff2ff09ab
-a433345533344346e9f3ff00f0feff0bf7fb59bba8754444458def8ff3ff25bce9fa56f648f65995
-6f55d474944444a65784563455945b6594b4546c354363854333349b9ff2ff09aba4333455333443
-46e9f3ff00f0feff0bf7ffb854346788787569ce9ff4ff26fe8ff77655f645f756a46e55a4747445
-44b566a4754554a446846479864a45435375434343499cf2ff098d7643333568634446daf3ff00f0
-feff0bf7ffb854346788787569ce9ff4ff26fe8ff77655f645f756a46e55a474744544b566a47545
-54a446846479864a45435375434343499cf2ff098d7643333568634446daf3ff00f0feff0bf7ffb8
-54346788787569ce9ff4ff26fe8ff77655f645f756a46e55a474744544b566a4754554a446846479
-864a45435375434343499cf2ff098d7643333568634446daf3ff00f0feff0bf8ff84589876555676
-6acd9ff4ff27e7ee99b445e754e945945f54c584654544b577c46454548566458a5d5c3864446545
-4343434486eff3ff0a7f8ac7333334774446faeff4ff00f0feff0bf8ff845898765556766acd9ff4
-ff27e7ee99b445e754e945945f54c584654544b577c46454548566458a5d5c386444654543434344
-86eff3ff0a7f8ac7333334774446faeff4ff00f0feff0bf8ff845898765556766acd9ff4ff27e7ee
-99b445e754e945945f54c584654544b577c46454548566458a5d5c38644465454343434486eff3ff
-0a7f8ac7333334774446faeff4ff00f0feff0bf8fe576544455666567ace9ff4ff278dbb6a9544d8
-54da45a46f64d584554644c576c4858554655788fe8b84478445464444534344467df4ff0bfe8e55
-44333334557554cbdff4ff00f0feff0bf8fe576544455666567ace9ff4ff278dbb6a9544d854da45
-a46f64d584554644c576c4858554655788fe8b84478445464444534344467df4ff0bfe8e55443333
-34557554cbdff4ff00f0feff0bf8fe576544455666567ace9ff4ff278dbb6a9544d854da45a46f64
-d584554644c576c4858554655788fe8b84478445464444534344467df4ff0bfe8e55443333345575
-54cbdff4ff00f0feff0bfafc57555666655654448d8ff5ff29f8cff6489735c854bc55c56e54d584
-454844c578d485a6755433a47cf96445b4454735446444344456dff5ff02faae57fd3304355854eb
-dff4ff00f0feff0bfafc57555666655654448d8ff5ff29f8cff6489735c854bc55c56e54d5844548
-44c578d485a6755433a47cf96445b4454735446444344456dff5ff02faae57fd3304355854ebdff4
-ff00f0feff0bfafc57555666655654448d8ff5ff29f8cff6489735c854bc55c56e54d584454844c5
-78d485a6755433a47cf96445b4454735446444344456dff5ff02faae57fd3304355854ebdff4ff00
-f0feff0bfdf9a44578adb985445bff8ff5ff299afff6488a34c954ad54d66e44d494444655b679d4
-a5c59666c9c445bfb343b54555364465443444456ef5ff03f8efd543fd330355a4cbeff4ff00f0fe
-ff0bfdf9a44578adb985445bff8ff5ff299afff6488a34c954ad54d66e44d494444655b679d4a5c5
-9666c9c445bfb343b54555364465443444456ef5ff03f8efd543fd330355a4cbeff4ff00f0feff0b
-fdf9a44578adb985445bff8ff5ff299afff6488a34c954ad54d66e44d494444655b679d4a5c59666
-c9c445bfb343b54555364465443444456ef5ff03f8efd543fd330355a4cbeff4ff00f0fdff0af67b
-dfea6546988655cf8ff6ff2afaadff55487c34c9549d44c76c44b4a5445546975bc4a5d4a55dfdc3
-334543437735553444564434443446f5ff0bf7ffa43453333333347cebeff4ff00f0fdff0af67bdf
-ea6546988655cf8ff6ff2afaadff55487c34c9549d44c76c44b4a5445546975bc4a5d4a55dfdc333
-4543437735553444564434443446f5ff0bf7ffa43453333333347cebeff4ff00f0fdff0af67bdfea
-6546988655cf8ff6ff2afaadff55487c34c9549d44c76c44b4a5445546975bc4a5d4a55dfdc33345
-43437735553444564434443446f5ff0bf7ffa43453333333347cebeff4ff00f0feff0bfcf9fb8545
-6875543345cf8ff6ff2ba8fb9d44486e34a7549c45d66a4594a4444446685ca47694844ae5e53465
-554368345434445545454433446ef6ff0bf7fd533346334333345dfbeff4ff00f0feff0bfcf9fb85
-456875543345cf8ff6ff2ba8fb9d44486e34a7549c45d66a4594a4444446685ca47694844ae5e534
-65554368345434445545454433446ef6ff0bf7fd533346334333345dfbeff4ff00f0feff0bfcf9fb
-85456875543345cf8ff6ff2ba8fb9d44486e34a7549c45d66a4594a4444446685ca47694844ae5e5
-3465554368345434445545454433446ef6ff0bf7fd533346334333345dfbeff4ff00f0feff0bfbfe
-a558754444697657ff8ff7ff2dfa9ffe5e44466f45a7558b45e5763694b44544574d6c9576556347
-e4db747ca544683444344554454454353446eff7ff0ad6543433346434433489fbf3ff00f0feff0b
-fbfea558754444697657ff8ff7ff2dfa9ffe5e44466f45a7558b45e5763694b44544574d6c957655
-6347e4db747ca544683444344554454454353446eff7ff0ad6543433346434433489fbf3ff00f0fe
-ff0bfbfea558754444697657ff8ff7ff2dfa9ffe5e44466f45a7558b45e5763694b44544574d6c95
-76556347e4db747ca544683444344554454454353446eff7ff0ad6543433346434433489fbf3ff00
-f0feff0bfaee887544459b85448cfd9cf7ff2d9affff5b54565e5486547847d4644866844535457a
-4959fe9a6544d5affb4486866834443444644544643744468ef7ff0a958b433333364334347ffaf3
-ff00f0feff0bfaee887544459b85448cfd9cf7ff2d9affff5b54565e5486547847d4644866844535
-457a4959fe9a6544d5affb4486866834443444644544643744468ef7ff0a958b433333364334347f
-faf3ff00f0feff0bfaee887544459b85448cfd9cf7ff2d9affff5b54565e5486547847d464486684
-4535457a4959fe9a6544d5affb4486866834443444644544643744468ef7ff0a958b433333364334
-347ffaf3ff00f0feff0bfadc985459da534784578ad8f8ff2ff8bffbbf7844566f54855455488444
-464853543646696fedcdc84a46555effa543545b444443447446445547645ad7acf8ff0a74d54333
-3333543343affbf3ff00f0feff0bfadc985459da534784578ad8f8ff2ff8bffbbf7844566f548554
-55488444464853543646696fedcdc84a46555effa543545b444443447446445547645ad7acf8ff0a
-74d543333333543343affbf3ff00f0feff0bfadc985459da534784578ad8f8ff2ff8bffbbf784456
-6f54855455488444464853543646696fedcdc84a46555effa543545b444443447446445547645ad7
-acf8ff0a74d543333333543343affbf3ff00f0feff0bfb9ba56ce9534775444598f7f9ff30fe7cff
-fc5f9654556f655455445846a7577a556577bf777855547a7b683836acee63455c54454444645743
-65448457ed9af9ff02fb8663fd33043433436ffaf3ff00f0feff0bfb9ba56ce9534775444598f7f9
-ff30fe7cfffc5f9654556f655455445846a7577a556577bf777855547a7b683836acee63455c5445
-444464574365448457ed9af9ff02fb8663fd33043433436ffaf3ff00f0feff0bfb9ba56ce9534775
-444598f7f9ff30fe7cfffc5f9654556f655455445846a7577a556577bf777855547a7b683836acee
-63455c5445444464574365448457ed9af9ff02fb8663fd33043433436ffaf3ff00f0feff0cfe8eda
-e9444454465445bdeabffaff31e7dffece5eb555466f555474afd99d84aaa954578887445aedc4bf
-8a7a76633455335b7b8487446447a944644454448ff99ffaff0be7e834334334333343343afbf3ff
-00f0feff0cfe8edae9444454465445bdeabffaff31e7dffece5eb555466f555474afd99d84aaa954
-578887445aedc4bf8a7a76633455335b7b8487446447a944644454448ff99ffaff0be7e834334334
-333343343afbf3ff00f0feff0cfe8edae9444454465445bdeabffaff31e7dffece5eb555466f5554
-74afd99d84aaa954578887445aedc4bf8a7a76633455335b7b8487446447a944644454448ff99ffa
-ff0be7e834334334333343343afbf3ff00f0fdff0b7eec56b6434654445566ce9ffbff32fe7dffff
-7c7ba5565566487884963466556778887666789beffff65d9358c585455954ad8c73445534556644
-444334544cfe69faff0b7bd44334333343333334dfbef3ff00f0fdff0b7eec56b6434654445566ce
-9ffbff32fe7dffff7c7ba5565566487884963466556778887666789beffff65d9358c585455954ad
-8c73445534556644444334544cfe69faff0b7bd44334333343333334dfbef3ff00f0fdff0b7eec56
-b6434654445566ce9ffbff32fe7dffff7c7ba5565566487884963466556778887666789beffff65d
-9358c585455954ad8c73445534556644444334544cfe69faff0b7bd44334333343333334dfbef3ff
-00f0fdff0b7c94774445544454445bef8cfbff0ee8dfffffa887b46644886ec7458aeffaff1deeff
-fffffe48ec535948437958f9566ab87dbefecaa967675574578de69ffcff02f87b63fa330234ef9f
-f3ff00f0fdff0b7c94774445544454445bef8cfbff0ee8dfffffa887b46644886ec7458aeffaff1d
-eefffffffe48ec535948437958f9566ab87dbefecaa967675574578de69ffcff02f87b63fa330234
-ef9ff3ff00f0fdff0b7c94774445544454445bef8cfbff0ee8dfffffa887b46644886ec7458aeffa
-ff1deefffffffe48ec535948437958f9566ab87dbefecaa967675574578de69ffcff02f87b63fa33
-0234ef9ff3ff00f0fdff0ca97bb6444444585446449ff8bffdff0dfe7effffaec7b6c46545bd7579
-cff3ff2ac57dc6335364543a58efffffb79ffffffffdcb86557455cf97cffddeffea556494333433
-333334334afdaff3ff00f0fdff0ca97bb6444444585446449ff8bffdff0dfe7effffaec7b6c46545
-bd7579cff3ff2ac57dc6335364543a58efffffb79ffffffffdcb86557455cf97cffddeffea556494
-333433333334334afdaff3ff00f0fdff0ca97bb6444444585446449ff8bffdff0dfe7effffaec7b6
-c46545bd7579cff3ff2ac57dc6335364543a58efffffb79ffffffffdcb86557455cf97cffddeffea
-556494333433333334334afdaff3ff00f0fdff0cc9ec64444448754475345fff89fdff0bc8efffea
-6bc6b484959866aef1ff08fe745885443334549ffdff01b6effdff17fdb685554bfc654456b847e7
-e633433343333333436ff9eff3ff00f0fdff0cc9ec64444448754475345fff89fdff0bc8efffea6b
-c6b484959866aef1ff08fe745885443334549ffdff01b6effdff17fdb685554bfc654456b847e7e6
-33433343333333436ff9eff3ff00f0fdff0cc9ec64444448754475345fff89fdff0bc8efffea6bc6
-b484959866aef1ff08fe745885443334549ffdff01b6effdff17fdb685554bfc654456b847e7e633
-433343333333436ff9eff3ff00f0fdff1be7a644654595644853464cfff88dffffd99fffffc969e5
-9595746aeff8ff00eff9ff0dea454589333684dffffdeffffc6ffbff0ea555635cfec8668aeff764
-54233334fd33014bf9f2ff00f0fdff1be7a644654595644853464cfff88dffffd99fffffc969e595
-95746aeff8ff00eff9ff0dea454589333684dffffdeffffc6ffbff0ea555635cfec8668aeff76454
-233334fd33014bf9f2ff00f0fdff1be7a644654595644853464cfff88dffffd99fffffc969e59595
-746aeff8ff00eff9ff0dea454589333684dffffdeffffc6ffbff0ea555635cfec8668aeff7645423
-3334fd33014bf9f2ff00f0fdff19f7d6585468574476447445efffb988889dffffff8957e564459e
-f9ff03fea9568ff9ff0dfeedb845339d75bfffc57fffffb7fbff0cfee644338ebdfb99eac5333553
-fc33023467ccf2ff00f0fdff19f7d6585468574476447445efffb988889dffffff8957e564459ef9
-ff03fea9568ff9ff0dfeedb845339d75bfffc57fffffb7fbff0cfee644338ebdfb99eac5333553fc
-33023467ccf2ff00f0fdff19f7d6585468574476447445efffb988889dffffff8957e564459ef9ff
-03fea9568ff9ff0dfeedb845339d75bfffc57fffffb7fbff0cfee644338ebdfb99eac5333553fc33
-023467ccf2ff00f0fdff0cfab7a54674655764477544b9cffdff07fdecda5d56e437dffaff05feca
-aada35effbff10eeefffeedeb436e7487ff9a87efffff9affbff13cd554334448543443333334333
-43333334447a9ff2ff00f0fdff0cfab7a54674655764477544b9cffdff07fdecda5d56e437dffaff
-05fecaaada35effbff10eeefffeedeb436e7487ff9a87efffff9affbff13cd554334448543443333
-33433343333334447a9ff2ff00f0fdff0cfab7a54674655764477544b9cffdff07fdecda5d56e437
-dffaff05fecaaada35effbff10eeefffeedeb436e7487ff9a87efffff9affbff13cd554334448543
-44333333433343333334447a9ff2ff00f0fdff0cfc9e94664655764458473455cefdff06f99b875d
-75838ff9ff04c446655339fbff11fe7445effffef955b3346ec8646effffef6dfbff02db9443fd33
-0034f8330248fe9ff2ff00f0fdff0cfc9e94664655764458473455cefdff06f99b875d75838ff9ff
-04c446655339fbff11fe7445effffef955b3346ec8646effffef6dfbff02db9443fd330034f83302
-48fe9ff2ff00f0fdff0cfc9e94664655764458473455cefdff06f99b875d75838ff9ff04c4466553
-39fbff11fe7445effffef955b3346ec8646effffef6dfbff02db9443fd330034f8330248fe9ff2ff
-00f0fcff157f9764556664457464345577fddfffffea4a475d8434f9ff05fa444343336ffaff10d8
-44aeffefffd553338f9433afffffcfb7fbff03fbd54334fd330b4334433333343333443dfadff2ff
-00f0fcff157f9764556664457464345577fddfffffea4a475d8434f9ff05fa444343336ffaff10d8
-44aeffefffd553338f9433afffffcfb7fbff03fbd54334fd330b4334433333343333443dfadff2ff
-00f0fcff157f9764556664457464345577fddfffffea4a475d8434f9ff05fa444343336ffaff10d8
-44aeffefffd553338f9433afffffcfb7fbff03fbd54334fd330b4334433333343333443dfadff2ff
-00f0fcff158deb457866437655733543459b67ffffa947584b8357f9ff05e433344336effaff10fe
-a46cffeffc644358de6434dffffebff6fbff02fe9944f633044233343ceaf1ff00f0fcff158deb45
-7866437655733543459b67ffffa947584b8357f9ff05e433344336effaff10fea46cffeffc644358
-de6434dffffebff6fbff02fe9944f633044233343ceaf1ff00f0fcff158deb457866437655733543
-459b67ffffa947584b8357f9ff05e433344336effaff10fea46cffeffc644358de6434dffffebff6
-fbff02fe9944f633044233343ceaf1ff00f0fcff15bbfb669694455548434634554865faedb64559
-4a639ef9ff04934334338ffcff14d7558dfffaaacffffb4368adfe6338dfffffcff7effbff01c844
-fd33013434fd3305433333335e9ef1ff00f0fcff15bbfb669694455548434634554865faedb64559
-4a639ef9ff04934334338ffcff14d7558dfffaaacffffb4368adfe6338dfffffcff7effbff01c844
-fd33013434fd3305433333335e9ef1ff00f0fcff15bbfb669694455548434634554865faedb64559
-4a639ef9ff04934334338ffcff14d7558dfffaaacffffb4368adfe6338dfffffcff7effbff01c844
-fd33013434fd3305433333335e9ef1ff00f0fcff14e9fb5d6b54465455444534544685f77e764567
-4545f9ff04fd4335337cfcff15b5335646fffffc8bbffea8aeffed733aabaadedff8effbff01f854
-fb330043fc330334447bbff1ff00f0fcff14e9fb5d6b54465455444534544685f77e7645674545f9
-ff04fd4335337cfcff15b5335646fffffc8bbffea8aeffed733aabaadedff8effbff01f854fb3300
-43fc330334447bbff1ff00f0fcff14e9fb5d6b54465455444534544685f77e7645674545f9ff04fd
-4335337cfcff15b5335646fffffc8bbffea8aeffed733aabaadedff8effbff01f854fb330043fc33
-0334447bbff1ff00f0fcff14f8c5d896547544644444344555a5f75c6654664489f9ff04f6335438
-bffdff15f946aeff74efffffd58ffffefffffa94368dfc8ccff7faff01fb44f533024475a9f0ff00
-f0fcff14f8c5d896547544644444344555a5f75c6654664489f9ff04f6335438bffdff15f946aeff
-74efffffd58ffffefffffa94368dfc8ccff7faff01fb44f533024475a9f0ff00f0fcff14f8c5d896
-547544644444344555a5f75c6654664489f9ff04f6335438bffdff15f946aeff74efffffd58ffffe
-fffffa94368dfc8ccff7faff01fb44f533024475a9f0ff00f0fcff14fa6de8756574564454544436
-54b6f56a6754543bdff9ff12b4367469bffffffffc65cfffff849fffffb69ffdff07f883357cfeeb
-ffe6faff09fd654333333334443334fd330253adccf0ff00f0fcff14fa6de8756574564454544436
-54b6f56a6754543bdff9ff12b4367469bffffffffc65cfffff849fffffb69ffdff07f883357cfeeb
-ffe6faff09fd654333333334443334fd330253adccf0ff00f0fcff14fa6de8756574564454544436
-54b6f56a6754543bdff9ff12b4367469bffffffffc65cfffff849fffffb69ffdff07f883357cfeeb
-ffe6faff09fd654333333334443334fd330253adccf0ff00f0fcff13fe8ffa756856554464634445
-55a5e56a7845535ff9ff04fc537fdaf5fdff0aa38fffffffd44efffffaaefdff07f98334bfffffff
-b7faff10fb64334333333344333433333343566e9ff0ff00f0fcff13fe8ffa756856554464634445
-55a5e56a7845535ff9ff04fc537fdaf5fdff0aa38fffffffd44efffffaaefdff07f98334bfffffff
-b7faff10fb64334333333344333433333343566e9ff0ff00f0fcff13fe8ffa756856554464634445
-55a5e56a7845535ff9ff04fc537fdaf5fdff0aa38fffffffd44efffffaaefdff07f98334bfffffff
-b7faff10fb64334333333344333433333343566e9ff0ff00f0fbff129ef759685457455443544555
-75b45a765443bff9ff04c57affffc6fdff0057fdff11f93dfffffc58effffffffa53339efeffff8b
-f9ff0f84334333333344333334333433bf78cff0ff00f0fbff129ef75968545745544354455575b4
-5a765443bff9ff04c57affffc6fdff0057fdff11f93dfffffc58effffffffa53339efeffff8bf9ff
-0f84334333333344333334333433bf78cff0ff00f0fbff129ef75968545745544354455575b45a76
-5443bff9ff04c57affffc6fdff0057fdff11f93dfffffc58effffffffa53339efeffff8bf9ff0f84
-334333333344333334333433bf78cff0ff00f0fbff11cbfb57954568484444444555548559675434
-f9ff20fd9bafffff6afffffffc5dfffcb9876639fffffe54bffffffffc533356779bff8df9ff0efc
-443533333344443333443646fe8aefff00f0fbff11cbfb57954568484444444555548559675434f9
-ff20fd9bafffff6afffffffc5dfffcb9876639fffffe54bffffffffc533356779bff8df9ff0efc44
-3533333344443333443646fe8aefff00f0fbff11cbfb57954568484444444555548559675434f9ff
-20fd9bafffff6afffffffc5dfffcb9876639fffffe54bffffffffc533356779bff8df9ff0efc4435
-33333344443333443646fe8aefff00f0fbff11f8fea9945895584534444956457459664437f8ff19
-e8effffe4dfffffffa38fb5333433335cfffffc4bffffffffe93fd3301597bf8ff0d743534333334
-443343535559fe8fefff00f0fbff11f8fea9945895584534444956457459664437f8ff19e8effffe
-4dfffffffa38fb5333433335cfffffc4bffffffffe93fd3301597bf8ff0d74353433333444334353
-5559fe8fefff00f0fbff11f8fea9945895584534444956457459664437f8ff19e8effffe4dffffff
-fa38fb5333433335cfffffc4bffffffffe93fd3301597bf8ff0d743534333334443343535559fe8f
-efff00f0fbff11fbafff8678c4644434445c5645544b66644bf8ff14eefffffa6ffffffffd345333
-34333894bffffff6bffdff06d4354456875449f8ff0dc43433333334444543537cbfd8efefff00f0
-fbff11fbafff8678c4644434445c5645544b66644bf8ff14eefffffa6ffffffffd34533334333894
-bffffff6bffdff06d4354456875449f8ff0dc43433333334444543537cbfd8efefff00f0fbff11fb
-afff8678c4644434445c5645544b66644bf8ff14eefffffa6ffffffffd34533334333894bffffff6
-bffdff06d4354456875449f8ff0dc43433333334444543537cbfd8efefff00f0faff108efff6c894
-744444446b5645555b67544ef5ff11f7affffffffe533334333338b97ffffffeadfdff07f6464545
-557744eff9ff0cf5333433334333453356fffb6eeeff00f0faff108efff6c894744444446b564555
-5b67544ef5ff11f7affffffffe533334333338b97ffffffeadfdff07f6464545557744eff9ff0cf5
-333433334333453356fffb6eeeff00f0faff108efff6c894744444446b5645555b67544ef5ff11f7
-affffffffe533334333338b97ffffffeadfdff07f6464545557744eff9ff0cf53334333343334533
-56fffb6eeeff00f0faff10e8eff8ea7544734454886544555b56648ff5ff01f4effdff0b53358433
-45338a7dffffff79fdff07fe469333435777cff9ff0cf644453333334466659efa77dfeeff00f0fa
-ff10e8eff8ea7544734454886544555b56648ff5ff01f4effdff0b5335843345338a7dffffff79fd
-ff07fe469333435777cff9ff0cf644453333334466659efa77dfeeff00f0faff10e8eff8ea754473
-4454886544555b56648ff5ff01f4effdff0b5335843345338a7dffffff79fdff07fe469333435777
-cff9ff0cf644453333334466659efa77dfeeff00f0faff10fd9dfceb6559533844a59554565a5554
-eff5ff00e6fdff0cfe45bdc43344436edeffffff67fdff07fe747334334789eff9ff0bfb44463333
-44458e66b758efedff00f0faff10fd9dfceb6559533844a59554565a5554eff5ff00e6fdff0cfe45
-bdc43344436edeffffff67fdff07fe747334334789eff9ff0bfb4446333344458e66b758efedff00
-f0faff10fd9dfceb6559533844a59554565a5554eff5ff00e6fdff0cfe45bdc43344436edeffffff
-67fdff07fe747334334789eff9ff0bfb4446333344458e66b758efedff00f0f9ff0ef8efee669a43
-484585b4657649453cf4ff009afcff0b4cffd33333435daefffffe5dfdff06eec533333336bff8ff
-09fd69b643345874bd636bebff00f0f9ff0ef8efee669a43484585b4657649453cf4ff009afcff0b
-4cffd33333435daefffffe5dfdff06eec533333336bff8ff09fd69b643345874bd636bebff00f0f9
-ff0ef8efee669a43484585b4657649453cf4ff009afcff0b4cffd33333435daefffffe5dfdff06ee
-c533333336bff8ff09fd69b643345874bd636bebff00f0f9ff0efe9fffa9b634a54768a5b5555954
-9ff4ff007efcff0b88fef5333334775ffffff8affdff07feeb43333356768ff8ff07c9fb87dcfed8
-76adeaff00f0f9ff0efe9fffa9b634a54768a5b55559549ff4ff007efcff0b88fef5333334775fff
-fff8affdff07feeb43333356768ff8ff07c9fb87dcfed876adeaff00f0f9ff0efe9fffa9b634a547
-68a5b55559549ff4ff007efcff0b88fef5333334775ffffff8affdff07feeb43333356768ff8ff07
-c9fb87dcfed876adeaff00f0f8ff0ccbffbae86594775d6684547655f3ff006ffcff07e77cdc4333
-46a56ff7ff0583333377845ff8ff06f5668877778bdffcff07feffdfdffffffffef6ff00f0f8ff0c
-cbffbae86594775d6684547655f3ff006ffcff07e77cdc433346a56ff7ff0583333377845ff8ff06
-f5668877778bdffcff07feffdfdffffffffef6ff00f0f8ff0ccbffbae86594775d6684547655f3ff
-006ffcff07e77cdc433346a56ff7ff0583333377845ff8ff06f5668877778bdffcff07feffdfdfff
-fffffef6ff00f0f8ff0cfdaeefffda55b4ab586554954bf4ff01fc4efdff08feeda49fd88989b59f
-f7ff05d445569c94cff8ff03fbdedeeffcff0ddeffe58bff6e6ffffebde597bdbef9ff00f0f8ff0c
-fdaeefffda55b4ab586554954bf4ff01fc4efdff08feeda49fd88989b59ff7ff05d445569c94cff8
-ff03fbdedeeffcff0ddeffe58bff6e6ffffebde597bdbef9ff00f0f8ff0cfdaeefffda55b4ab5865
-54954bf4ff01fc4efdff08feeda49fd88989b59ff7ff05d445569c94cff8ff03fbdedeeffcff0dde
-ffe58bff6e6ffffebde597bdbef9ff00f0f7ff0bfabdfffcbb49e6bf7654854ff4ff01f95efbff05
-fd67aab75558f6ff05f945669859dff7ff008ffaff0fa4cff738fe579fcbfe76db549b6577affbff
-00f0f7ff0bfabdfffcbb49e6bf7654854ff4ff01f95efbff05fd67aab75558f6ff05f945669859df
-f7ff008ffaff0fa4cff738fe579fcbfe76db549b6577affbff00f0f7ff0bfabdfffcbb49e6bf7654
-854ff4ff01f95efbff05fd67aab75558f6ff05f945669859dff7ff008ffaff0fa4cff738fe579fcb
-fe76db549b6577affbff00f0f6ff0afcacfc94aa79fd6855578ff4ff01f59efbff05eefd989abdef
-f5ff03947757daf6ff009dfaff0ffb5dff56fd45eb48dfa55d849b46b6effbff00f0f6ff0afcacfc
-94aa79fd6855578ff4ff01f59efbff05eefd989abdeff5ff03947757daf6ff009dfaff0ffb5dff56
-fd45eb48dfa55d849b46b6effbff00f0f6ff0afcacfc94aa79fd6855578ff4ff01f59efbff05eefd
-989abdeff5ff03947757daf6ff009dfaff0ffb5dff56fd45eb48dfa55d849b46b6effbff00f0f5ff
-09febabefecffcde8cd5dff4ff01e6aefaff03feefffeef4ff03f64dfffcf6ff00e8f9ff0dd6efd8
-ee5dd436bff846d48c4c6efaff00f0f5ff09febabefecffcde8cd5dff4ff01e6aefaff03feefffee
-f4ff03f64dfffcf6ff00e8f9ff0dd6efd8ee5dd436bff846d48c4c6efaff00f0f5ff09febabefecf
-fcde8cd5dff4ff01e6aefaff03feefffeef4ff03f64dfffcf6ff00e8f9ff0dd6efd8ee5dd436bff8
-46d48c4c6efaff00f0f3ff06bbbbceffffffe5f3ff0198ccf8ff01efdff4ff04fd58fff97ff7ff00
-f8f9ff0efa6fffffec59358876446467558aeffbff00f0f3ff06bbbbceffffffe5f3ff0198ccf8ff
-01efdff4ff04fd58fff97ff7ff00f8f9ff0efa6fffffec59358876446467558aeffbff00f0f3ff06
-bbbbceffffffe5f3ff0198ccf8ff01efdff4ff04fd58fff97ff7ff00f8f9ff0efa6fffffec593588
-76446467558aeffbff00f0f1ff04ecbcceff69f3ff025cfacee9ff03a4cffb58f7ff01fbcffbff0f
-caa957766664678889bdeff9fffffebffbff00f0f1ff04ecbcceff69f3ff025cfacee9ff03a4cffb
-58f7ff01fbcffbff0fcaa957766664678889bdeff9fffffebffbff00f0f1ff04ecbcceff69f3ff02
-5cfacee9ff03a4cffb58f7ff01fbcffbff0fcaa957766664678889bdeff9fffffebffbff00f0efff
-02fdc94ef4ff03fd3efbcde9ff04f77ffe46dff7ff009ffbff047bcc89bceffbff04faffffffbffb
-ff00f0efff02fdc94ef4ff03fd3efbcde9ff04f77ffe46dff7ff009ffbff047bcc89bceffbff04fa
-ffffffbffbff00f0efff02fdc94ef4ff03fd3efbcde9ff04f77ffe46dff7ff009ffbff047bcc89bc
-effbff04faffffffbffbff00f0eeff01f96ff4ff03f73cfedde9ff04fb4dffa78ef7ff00dafbff02
-8fffcff9ff04fafffffebffbff00f0eeff01f96ff4ff03f73cfedde9ff04fb4dffa78ef7ff00dafb
-ff028fffcff9ff04fafffffebffbff00f0eeff01f96ff4ff03f73cfedde9ff04fb4dffa78ef7ff00
-dafbff028fffcff9ff04fafffffebffbff00f0eeff01f4cff4ff03d54efffee8ff0498fff5d7eef8
-ff01f9effcff029ffeaffdff08eddbba9997ab79adbffbff00f0eeff01f4cff4ff03d54efffee8ff
-0498fff5d7eef8ff01f9effcff029ffeaffdff08eddbba9997ab79adbffbff00f0eeff01f4cff4ff
-03d54efffee8ff0498fff5d7eef8ff01f9effcff029ffeaffdff08eddbba9997ab79adbffbff00f0
-eeff00c6f3ff027956dfe7ff04e5eff78e7df8ff01fe9ffdff10fd787658a987765445785796a8dd
-55a9cffbff00f0eeff00c6f3ff027956dfe7ff04e5eff78e7df8ff01fe9ffdff10fd787658a98776
-5445785796a8dd55a9cffbff00f0eeff00c6f3ff027956dfe7ff04e5eff78e7df8ff01fe9ffdff10
-fd787658a987765445785796a8dd55a9cffbff00f0eeff007af4ff02fc5fb7e6ff05f56ff95fe9cf
-f8ff00dbfdff0ffe9a7684bbb968d74bff78f9fedf97dffaff00f0eeff007af4ff02fc5fb7e6ff05
-f56ff95fe9cff8ff00dbfdff0ffe9a7684bbb968d74bff78f9fedf97dffaff00f0eeff007af4ff02
-fc5fb7e6ff05f56ff95fe9cff8ff00dbfdff0ffe9a7684bbb968d74bff78f9fedf97dffaff00f0ef
-ff01fe4ef4ff02f78f95f1ff00edf7ff06fd5dfa4effaaeff9ff01fbdffcff0d9bd5fffe6af94aff
-77f9ffefe7dffaff00f0efff01fe4ef4ff02f78f95f1ff00edf7ff06fd5dfa4effaaeff9ff01fbdf
-fcff0d9bd5fffe6af94aff77f9ffefe7dffaff00f0efff01fe4ef4ff02f78f95f1ff00edf7ff06fd
-5dfa4effaaeff9ff01fbdffcff0d9bd5fffe6af94aff77f9ffefe7dffaff00f0efff01fb6ff4ff03
-c4efb68ef4ff05feeeb4aeffecf9ff0688fc4afffe89eff9ff00aefcff0d8bb5ffff6afa49ff77f9
-fffff7dffaff00f0efff01fb6ff4ff03c4efb68ef4ff05feeeb4aeffecf9ff0688fc4afffe89eff9
-ff00aefcff0d8bb5ffff6afa49ff77f9fffff7dffaff00f0efff01fb6ff4ff03c4efb68ef4ff05fe
-eeb4aeffecf9ff0688fc4afffe89eff9ff00aefcff0d8bb5ffff6afa49ff77f9fffff7dffaff00f0
-efff01f7aff5ff05fe59ffd85eeff5ff0596678959ddddf9ff07e6bd59fffffd99aefaff01f98efd
-ff0d6bc5ffff5afa48ff86f8ffeff7dffaff00f0efff01f7aff5ff05fe59ffd85eeff5ff05966789
-59ddddf9ff07e6bd59fffffd99aefaff01f98efdff0d6bc5ffff5afa48ff86f8ffeff7dffaff00f0
-efff01f7aff5ff05fe59ffd85eeff5ff0596678959ddddf9ff07e6bd59fffffd99aefaff01f98efd
-ff0d6bc5ffff5afa48ff86f8ffeff7dffaff00f0efff01f4eff5ff05f77ffffc668ff2ff05c86678
-78888bfcff02fb6c59fdff02d98beffbff12e8efffffff7ad6fffe5afb49ff75f8fffff7dffaff00
-f0efff01f4eff5ff05f77ffffc668ff2ff05c8667878888bfcff02fb6c59fdff02d98beffbff12e8
-efffffff7ad6fffe5afb49ff75f8fffff7dffaff00f0efff01f4eff5ff05f77ffffc668ff2ff05c8
-667878888bfcff02fb6c59fdff02d98beffbff12e8efffffff7ad6fffe5afb49ff75f8fffff7dffa
-ff00f0efff00c5f4ff05a6efffff754df3ff05ecbcccddeeeffaff01685afcff1afb78adefffffff
-ebaaefffffff7bd6ffff4bfb4aff75f8fffff7dffaff00f0efff00c5f4ff05a6efffff754df3ff05
-ecbcccddeeeffaff01685afcff1afb78adefffffffebaaefffffff7bd6ffff4bfb4aff75f8fffff7
-dffaff00f0efff00c5f4ff05a6efffff754df3ff05ecbcccddeeeffaff01685afcff1afb78adefff
-ffffebaaefffffff7bd6ffff4bfb4aff75f8fffff7dffaff00f0efff0089f5ff06e76ffffffffb6b
-f5ff06fd66787765458df9ff01a46cfaff05c988999989befcff0d7bc7ffff5afc59ff76f8fffff6
-dffaff00f0efff0089f5ff06e76ffffffffb6bf5ff06fd66787765458df9ff01a46cfaff05c98899
-9989befcff0d7bc7ffff5afc59ff76f8fffff6dffaff00f0efff0089f5ff06e76ffffffffb6bf5ff
-06fd66787765458df9ff01a46cfaff05c988999989befcff0d7bc7ffff5afc59ff76f8fffff6dffa
-ff00f0efff005ef6ff02fe55dffdff00abf5ff08f5affffffffeb858effbff01d54eefff0d8bc7ff
-fe4afc5aff77f8fffff6effaff00f0efff005ef6ff02fe55dffdff00abf5ff08f5affffffffeb858
-effbff01d54eefff0d8bc7fffe4afc5aff77f8fffff6effaff00f0efff005ef6ff02fe55dffdff00
-abf5ff08f5affffffffeb858effbff01d54eefff0d8bc7fffe4afc5aff77f8fffff6effaff00f0f0
-ff01fb5ff6ff01c44dfcff00eff5ff0098fbff01d74bfbff02fc4beff0ff0d7bb7fffe4afd4aff87
-f8fffff6effaff00f0f0ff01fb5ff6ff01c44dfcff00eff5ff0098fbff01d74bfbff02fc4beff0ff
-0d7bb7fffe4afd4aff87f8fffff6effaff00f0f0ff01fb5ff6ff01c44dfcff00eff5ff0098fbff01
-d74bfbff02fc4beff0ff0d7bb7fffe4afd4aff87f8fffff6effaff00f0f0ff01f6bff7ff02fd44cf
-f0ff01fc4dfaff01b58efbff0474dfedc88af3ff0d7bb7fffe49fe4bff78f7fffff6effaff00f0f0
-ff01f6bff7ff02fd44cff0ff01fc4dfaff01b58efbff0474dfedc88af3ff0d7bb7fffe49fe4bff78
-f7fffff6effaff00f0f0ff01f6bff7ff02fd44cff0ff01fc4dfaff01b58efbff0474dfedc88af3ff
-0d7bb7fffe49fe4bff78f7fffff6effaff00f0f0ff00b5f6ff01b55cefff04f6cfb6448efcff01a5
-affcff0596544557776df4ff0d7bb7fffe49fe4cff78f8fffff6effaff00f0f0ff00b5f6ff01b55c
-efff04f6cfb6448efcff01a5affcff0596544557776df4ff0d7bb7fffe49fe4cff78f8fffff6effa
-ff00f0f0ff00b5f6ff01b55cefff04f6cfb6448efcff01a5affcff0596544557776df4ff0d7bb7ff
-fe49fe4cff78f8fffff6effaff00f0f1ff01fe5cf8ff03fea658efefff05e6f8357755dffdff02fd
-66bffcff05feffffffd5eff5ff0d7ba8fffe49fe4cff88f7fffff6effaff00f0f1ff01fe5cf8ff03
-fea658efefff05e6f8357755dffdff02fd66bffcff05feffffffd5eff5ff0d7ba8fffe49fe4cff88
-f7fffff6effaff00f0f1ff01fe5cf8ff03fea658efefff05e6f8357755dffdff02fd66bffcff05fe
-ffffffd5eff5ff0d7ba8fffe49fe4cff88f7fffff6effaff00f0f1ff01f59ff9ff03eb7457afeeff
-05a8a37ffffceffcff02fa57dff9ff01fa8ff5ff0d7bb8fffd4afe4dff89f7fffff6effaff00f0f1
-ff01f59ff9ff03eb7457afeeff05a8a37ffffceffcff02fa57dff9ff01fa8ff5ff0d7bb8fffd4afe
-4dff89f7fffff6effaff00f0f1ff01f59ff9ff03eb7457afeeff05a8a37ffffceffcff02fa57dff9
-ff01fa8ff5ff0d7bb8fffd4afe4dff89f7fffff6effaff00f0f1ff0086fbff05eca876678ccdedff
-027d53bff8ff01e75bf8ff005ff5ff0c7cb8fffd4afe4cffacf8fffff6f9ff00f0f1ff0086fbff05
-eca876678ccdedff027d53bff8ff01e75bf8ff005ff5ff0c7cb8fffd4afe4cffacf8fffff6f9ff00
-f0f1ff0086fbff05eca876678ccdedff027d53bff8ff01e75bf8ff005ff5ff0c7cb8fffd4afe4cff
-acf8fffff6f9ff00f0f2ff01fa4efdff08fb75468beffe9db9efeeff026d84eff7ff0185aff9ff00
-6df5ff0c6cb8fffc4bfb4dff8cf7fffff5f9ff00f0f2ff01fa4efdff08fb75468beffe9db9efeeff
-026d84eff7ff0185aff9ff006df5ff0c6cb8fffc4bfb4dff8cf7fffff5f9ff00f0f2ff01fa4efdff
-08fb75468beffe9db9efeeff026d84eff7ff0185aff9ff006df5ff0c6cb8fffc4bfb4dff8cf7ffff
-f5f9ff00f0f2ff0ea4dffffffff95799bffffffffa8abfeeff076dc5ffffc74579effcff00faf8ff
-008bf5ff0c6ca9fffc4bfb4cff8cf7fffff5f9ff00f0f2ff0ea4dffffffff95799bffffffffa8abf
-eeff076dc5ffffc74579effcff00faf8ff008bf5ff0c6ca9fffc4bfb4cff8cf7fffff5f9ff00f0f2
-ff0ea4dffffffff95799bffffffffa8abfeeff076dc5ffffc74579effcff00faf8ff008bf5ff0c6c
-a9fffc4bfb4cff8cf7fffff5f9ff00f0f3ff01fa4cfdff0284efe9fdff02fe87bfeeff07befdffff
-75dca65ef2ff00a9f5ff0c6da9fffc4bfb4cff8bf7fffff5f9ff00f0f3ff01fa4cfdff0284efe9fd
-ff02fe87bfeeff07befdffff75dca65ef2ff00a9f5ff0c6da9fffc4bfb4cff8bf7fffff5f9ff00f0
-f3ff01fa4cfdff0284efe9fdff02fe87bfeeff07befdffff75dca65ef2ff00a9f5ff0c6da9fffc4b
-fb4cff8bf7fffff5f9ff00f0f3ff0873bffffffffd4bff9dfcff01c4efeeff07dcfffffe43643567
-f2ff00a9f5ff0c6c99fffb4bfb4cff8cf7fffff5f9ff00f0f3ff0873bffffffffd4bff9dfcff01c4
-efeeff07dcfffffe43643567f2ff00a9f5ff0c6c99fffb4bfb4cff8cf7fffff5f9ff00f0f3ff0873
-bffffffffd4bff9dfcff01c4efeeff07dcfffffe43643567f2ff00a9f5ff0c6c99fffb4bfb4cff8c
-f7fffff5f9ff00f0f4ff01f939fdff03f66fff7ffcff00f6f2ff00cefaff06fe433333569adff5ff
-01db7cf5ff0c5d99fffb4aa539ff7cf7fffff5f9ff00f0f4ff01f939fdff03f66fff7ffcff00f6f2
-ff00cefaff06fe433333569adff5ff01db7cf5ff0c5d99fffb4aa539ff7cf7fffff5f9ff00f0f4ff
-01f939fdff03f66fff7ffcff00f6f2ff00cefaff06fe433333569adff5ff01db7cf5ff0c5d99fffb
-4aa539ff7cf7fffff5f9ff00f0f4ff01f57ffdff03b4bfff7ffcff01f7bff4ff01edeffaff06fe63
-33333b546ef6ff02fe875ff5ff0c6da9fffb479dc6bf6cf7fffff5f9ff00f0f4ff01f57ffdff03b4
-bfff7ffcff01f7bff4ff01edeffaff06fe6333333b546ef6ff02fe875ff5ff0c6da9fffb479dc6bf
-6cf7fffff5f9ff00f0f4ff01f57ffdff03b4bfff7ffcff01f7bff4ff01edeffaff06fe6333333b54
-6ef6ff02fe875ff5ff0c6da9fffb479dc6bf6cf7fffff5f9ff00f0f4ff09f4effea69ec849fffe8f
-fcff01f85ff6ff02fe866df8ff05e633334d553af6ff02f7577ff5ff0c5db8fffb46ffec5e6cf7ff
-fff5f9ff00f0f4ff09f4effea69ec849fffe8ffcff01f85ff6ff02fe866df8ff05e633334d553af6
-ff02f7577ff5ff0c5db8fffb46ffec5e6cf7fffff5f9ff00f0f4ff09f4effea69ec849fffe8ffcff
-01f85ff6ff02fe866df8ff05e633334d553af6ff02f7577ff5ff0c5db8fffb46ffec5e6cf7fffff5
-f9ff00f0f4ff09f77863577347dffffb9ffcff01f95bf6ff01d6aef6ff04b8aeff5b46f6ff028344
-7ff5ff0c6ec8fffb4afff9344497ffffe5f9ff00f0f4ff09f77863577347dffffb9ffcff01f95bf6
-ff01d6aef6ff04b8aeff5b46f6ff0283447ff5ff0c6ec8fffb4afff9344497ffffe5f9ff00f0f4ff
-09f77863577347dffffb9ffcff01f95bf6ff01d6aef6ff04b8aeff5b46f6ff0283447ff5ff0c6ec8
-fffb4afff9344497ffffe5f9ff00f0f4ff09fe99abfffedffffffabffcff01f8c9f6ff005df2ff02
-6cb3eff8ff03f84334cff5ff0c5eb9fffb38ffe46745a7fffeb6f9ff00f0f4ff09fe99abfffedfff
-fffabffcff01f8c9f6ff005df2ff026cb3eff8ff03f84334cff5ff0c5eb9fffb38ffe46745a7fffe
-b6f9ff00f0f4ff09fe99abfffedffffffabffcff01f8c9f6ff005df2ff026cb3eff8ff03f84334cf
-f5ff0c5eb9fffb38ffe46745a7fffeb6f9ff00f0ecff01f9dffcff01f8f8f2ff01baeff7ff025ce4
-aff9ff03fe743337f4ff0c5eb8fffa45ffe5ff6cf7eadda6f9ff00f0ecff01f9dffcff01f8f8f2ff
-01baeff7ff025ce4aff9ff03fe743337f4ff0c5eb8fffa45ffe5ff6cf7eadda6f9ff00f0ecff01f9
-dffcff01f8f8f2ff01baeff7ff025ce4aff9ff03fe743337f4ff0c5eb8fffa45ffe5ff6cf7eadda6
-f9ff00f0ecff01f8dffcff01f8f8f3ff05c5464afffffefbff03fe6ff57ffaff04feb643345ef4ff
-0c4eb8fff944cf88ff5bf7a37ba6f9ff00f0ecff01f8dffcff01f8f8f3ff05c5464afffffefbff03
-fe6ff57ffaff04feb643345ef4ff0c4eb8fff944cf88ff5bf7a37ba6f9ff00f0ecff01f8dffcff01
-f8f8f3ff05c5464afffffefbff03fe6ff57ffaff04feb643345ef4ff0c4eb8fff944cf88ff5bf7a3
-7ba6f9ff00f0ecff01f9cffcff01f9e7f3ff05aedfe5bffdeff9ff01f99ffbff05eed7433346bff4
-ff0c4db9fff846df59ff6bf7a35ca7f9ff00f0ecff01f9cffcff01f9e7f3ff05aedfe5bffdeff9ff
-01f99ffbff05eed7433346bff4ff0c4db9fff846df59ff6bf7a35ca7f9ff00f0ecff01f9cffcff01
-f9e7f3ff05aedfe5bffdeff9ff01f99ffbff05eed7433346bff4ff0c4db9fff846df59ff6bf7a35c
-a7f9ff00f0ecff01f9cffcff02fac8dff2ff02fc4df8f0ff04fc64333378f3ff0c4ca9fff639ee84
-af5bf7834b97f9ff00f0ecff01f9cffcff02fac8dff2ff02fc4df8f0ff04fc64333378f3ff0c4ca9
-fff639ee84af5bf7834b97f9ff00f0ecff01f9cffcff02fac8dff2ff02fc4df8f0ff04fc64333378
-f3ff0c4ca9fff639ee84af5bf7834b97f9ff00f0ecff01fabffbff01a85ef1ff0179e8f1ff05fe85
-3333356ef3ff0c4da5585445759a5a5bf7c69b97f9ff00f0ecff01fabffbff01a85ef1ff0179e8f1
-ff05fe853333356ef3ff0c4da5585445759a5a5bf7c69b97f9ff00f0ecff01fabffbff01a85ef1ff
-0179e8f1ff05fe853333356ef3ff0c4da5585445759a5a5bf7c69b97f9ff00f0ecff01fb9ffaff00
-97f1ff01d6aaf1ff05e743433346dff3ff0c4da85eedba8654444bf7edfb97f9ff00f0ecff01fb9f
-faff0097f1ff01d6aaf1ff05e743433346dff3ff0c4da85eedba8654444bf7edfb97f9ff00f0ecff
-01fb9ffaff0097f1ff01d6aaf1ff05e743433346dff3ff0c4da85eedba8654444bf7edfb97f9ff00
-f0ecff01fd8ffaff01e6cff2ff01f96af2ff05fe743433346ef2ff0c5d8668aceffffffe5bf7effc
-97f9ff00f0ecff01fd8ffaff01e6cff2ff01f96af2ff05fe743433346ef2ff0c5d8668aceffffffe
-5bf7effc97f9ff00f0ecff01fd8ffaff01e6cff2ff01f96af2ff05fe743433346ef2ff0c5d8668ac
-effffffe5bf7effc97f9ff00f0ecff01fe7ffaff01f89ff2ff01fe58f4ff07feede744443346dff2
-ff0c7d746456555666685bf7fffd98f9ff00f0ecff01fe7ffaff01f89ff2ff01fe58f4ff07feede7
-44443346dff2ff0c7d746456555666685bf7fffd98f9ff00f0ecff01fe7ffaff01f89ff2ff01fe58
-f4ff07feede744443346dff2ff0c7d746456555666685bf7fffd98f9ff00f0ebff007ffaff01eb8f
-f1ff00b5f2ff05c889755459eff2ff0c6c8555bfffffec585bf7fffda8f9ff00f0ebff007ffaff01
-eb8ff1ff00b5f2ff05c889755459eff2ff0c6c8555bfffffec585bf7fffda8f9ff00f0ebff007ffa
-ff01eb8ff1ff00b5f2ff05c889755459eff2ff0c6c8555bfffffec585bf7fffda8f9ff00f0ebff00
-7ffaff01bd8ff1ff01f6cff3ff09eeffedbafd8efffeeedff7ff0dfe696597feffffffd55bf6fffe
-a9f9ff00f0ebff007ffaff01bd8ff1ff01f6cff3ff09eeffedbafd8efffeeedff7ff0dfe696597fe
-ffffffd55bf6fffea9f9ff00f0ebff007ffaff01bd8ff1ff01f6cff3ff09eeffedbafd8efffeeedf
-f7ff0dfe696597feffffffd55bf6fffea9f9ff00f0ebff007efaff01db9cf1ff01fb8feeff06fb67
-656764666dfaff0efd84434658abceeeecb64af6fffea8f9ff00f0ebff007efaff01db9cf1ff01fb
-8feeff06fb67656764666dfaff0efd84434658abceeeecb64af6fffea8f9ff00f0ebff007efaff01
-db9cf1ff01fb8feeff06fb67656764666dfaff0efd84434658abceeeecb64af6fffea8f9ff00f0eb
-ff009bfaff01f9c8f0ff007eedff05ccfffebefe7afaff0ef86aa98999a8764444364af6fffea9f9
-ff00f0ebff009bfaff01f9c8f0ff007eedff05ccfffebefe7afaff0ef86aa98999a8764444364af6
-fffea9f9ff00f0ebff009bfaff01f9c8f0ff007eedff05ccfffebefe7afaff0ef86aa98999a87644
-44364af6fffea9f9ff00f0ebff00bafaff02fe95acf1ff00d8edff06fbdf97cceee6effbff0eb865
-44665567594666444ae6fffd9af9ff00f0ebff00bafaff02fe95acf1ff00d8edff06fbdf97cceee6
-effbff0eb86544665567594666444ae6fffd9af9ff00f0ebff00bafaff02fe95acf1ff00d8edff06
-fbdf97cceee6effbff0eb86544665567594666444ae6fffd9af9ff00f0ebff00d8f9ff03fbcb88ef
-f3ff01fd8feeff06fe9eb4386efc7ffbff0efeb764957acb5756544649d5fffd8af9ff00f0ebff00
-d8f9ff03fbcb88eff3ff01fd8feeff06fe9eb4386efc7ffbff0efeb764957acb5756544649d5fffd
-8af9ff00f0ebff00d8f9ff03fbcb88eff3ff01fd8feeff06fe9eb4386efc7ffbff0efeb764957acb
-5756544649d5fffd8af9ff00f0ebff00f7f9ff04fcbffd88eff3ff00c9eeff06fd7ed5439eff8af9
-ff0ce5f7aefe6ecdbddc58d6fffc8af9ff00f0ebff00f7f9ff04fcbffd88eff3ff00c9eeff06fd7e
-d5439eff8af9ff0ce5f7aefe6ecdbddc58d6fffc8af9ff00f0ebff00f7f9ff04fcbffd88eff3ff00
-c9eeff06fd7ed5439eff8af9ff0ce5f7aefe6ecdbddc58d6fffc8af9ff00f0ebff00f7f8ff03baac
-fd7cf3ff01fc9ff2ff0aeffebaa638e8547fffd5dffaff0ce5f6adec58deebba57e6fffb8af9ff00
-f0ebff00f7f8ff03baacfd7cf3ff01fc9ff2ff0aeffebaa638e8547fffd5dffaff0ce5f6adec58de
-ebba57e6fffb8af9ff00f0ebff00f7f8ff03baacfd7cf3ff01fc9ff2ff0aeffebaa638e8547fffd5
-dffaff0ce5f6adec58deebba57e6fffb8af9ff00f0ebff01facff8ff03eb9cf7dff3ff0186cff7ff
-0ec96655556798674a54ba555cfffc6dfbff10feb5b76554445569a738f6fffa88ccccdffcff00f0
-ebff01facff8ff03eb9cf7dff3ff0186cff7ff0ec96655556798674a54ba555cfffc6dfbff10feb5
-b76554445569a738f6fffa88ccccdffcff00f0ebff01facff8ff03eb9cf7dff3ff0186cff7ff0ec9
-6655556798674a54ba555cfffc6dfbff10feb5b76554445569a738f6fffa88ccccdffcff00f0ebff
-01fd9ff7ff02fab86af3ff1be749effecbceefffeed996543344444333334bdeb36a454779bec68e
-fcff00b6fc440b5444564ae6fffd855554456dfdff00f0ebff01fd9ff7ff02fab86af3ff1be749ef
-fecbceefffeed996543344444333334bdeb36a454779bec68efcff00b6fc440b5444564ae6fffd85
-5554456dfdff00f0ebff01fd9ff7ff02fab86af3ff1be749effecbceefffeed99654334444433333
-4bdeb36a454779bec68efcff00b6fc440b5444564ae6fffd855554456dfdff00f0eaff006ff7ff02
-fe99e7f2ff08a455533469cdcdb643fa3326349ffff7343546976677468889889999644445555545
-5555454af6ffff86454444489afffffff0eaff006ff7ff02fe99e7f2ff08a455533469cdcdb643fa
-3326349ffff73435469766774688898899996444455555455555454af6ffff86454444489affffff
-f0eaff006ff7ff02fe99e7f2ff08a455533469cdcdb643fa3326349ffff734354697667746888988
-99996444455555455555454af6ffff86454444489afffffff0eaff008df7ff02f9e8f8f2ff06fc44
-5bdcdb9754fc33143444334438fffffd455844678bdfdacebaabababa8fb990f98775cf5efff78bb
-cbaaaab77ffffff0eaff008df7ff02f9e8f8f2ff06fc445bdcdb9754fc33143444334438fffffd45
-5844678bdfdacebaabababa8fb990f98775cf5efff78bbcbaaaab77ffffff0eaff008df7ff02f9e8
-f8f2ff06fc445bdcdb9754fc33143444334438fffffd455844678bdfdacebaabababa8fb990f9877
-5cf5efff78bbcbaaaab77ffffff0eaff00d8f7ff02f8d9acf1ff04e534444343fd332c4433456655
-437ffffffe466857eca37be8788767888888778799998aaabbba5bc5efff7899866658869ffffff0
-eaff00d8f7ff02f8d9acf1ff04e534444343fd332c4433456655437ffffffe466857eca37be87887
-67888888778799998aaabbba5bc5efff7899866658869ffffff0eaff00d8f7ff02f8d9acf1ff04e5
-34444343fd332c4433456655437ffffffe466857eca37be8788767888888778799998aaabbba5bc5
-efff7899866658869ffffff0eaff00f7f7ff02f98e8ef1ff35fc74333334688887abcbaaefefded9
-afffffff488666fed347c49ddcbbaabbba75a469c85cccdccb7db5cffe7cfff8bd6ff9cffffff0ea
-ff00f7f7ff02f98e8ef1ff35fc74333334688887abcbaaefefded9afffffff488666fed347c49ddc
-bbaabbba75a469c85cccdccb7db5cffe7cfff8bd6ff9cffffff0eaff00f7f7ff02f98e8ef1ff35fc
-74333334688887abcbaaefefded9afffffff488666fed347c49ddcbbaabbba75a469c85cccdccb7d
-b5cffe7cfff8bd6ff9cffffff0eaff00f7f7ff02f78f8fefff03edcdddeff9ff0cfd8fffffff57b5
-85dfe447c4bffcff1586e49efa7fffffff8ee5cffd7dfff8ce6ff9dffffff0eaff00f7f7ff02f78f
-8fefff03edcdddeff9ff0cfd8fffffff57b585dfe447c4bffcff1586e49efa7fffffff8ee5cffd7d
-fff8ce6ff9dffffff0eaff00f7f7ff02f78f8fefff03edcdddeff9ff0cfd8fffffff57b585dfe447
-c4bffcff1586e49efa7fffffff8ee5cffd7dfff8ce6ff9dffffff0eaff01f8dff8ff02f78cafedff
-00fcf8ff0cfe7ffffffe58c6949fe559b4dffcff15a7f48fe99fffffff8ff5dffe6dfff9ce6ff9df
-fffff0eaff01f8dff8ff02f78cafedff00fcf8ff0cfe7ffffffe58c6949fe559b4dffcff15a7f48f
-e99fffffff8ff5dffe6dfff9ce6ff9dffffff0eaff01f8dff8ff02f78cafedff00fcf8ff0cfe7fff
-fffe58c6949fe559b4dffcff15a7f48fe99fffffff8ff5dffe6dfff9ce6ff9dffffff0eaff01fbaf
-f8ff02f96cafe3ff0bfb8ffffffe58d8955ff65cb6fbff1596e58ff88ffffffd7ee5dfff6dfff8cd
-7ff9effffff0eaff01fbaff8ff02f96cafe3ff0bfb8ffffffe58d8955ff65cb6fbff1596e58ff88f
-fffffd7ee5dfff6dfff8cd7ff9effffff0eaff01fbaff8ff02f96cafe3ff0bfb8ffffffe58d8955f
-f65cb6fbff1596e58ff88ffffffd7ee5dfff6dfff8cd7ff9effffff0e9ff007ff7ff01798fe3ff0b
-f6dffffffd58e7765ef66e97fbff1596f57ff98ffffffd7ff5efff6dfff8dd8ff8effffff0e9ff00
-7ff7ff01798fe3ff0bf6dffffffd58e7765ef66e97fbff1596f57ff98ffffffd7ff5efff6dfff8dd
-8ff8effffff0e9ff007ff7ff01798fe3ff0bf6dffffffd58e7765ef66e97fbff1596f57ff98fffff
-fd7ff5efff6dfff8dd8ff8effffff0e9ff00baf7ff01f66ce3ff0bc6fffffffd69e6685be66f88fb
-ff1596f59ff99ffffffe8fe6ffff5efff8ec9ff7fffffff0e9ff00baf7ff01f66ce3ff0bc6ffffff
-fd69e6685be66f88fbff1596f59ff99ffffffe8fe6ffff5efff8ec9ff7fffffff0e9ff00baf7ff01
-f66ce3ff0bc6fffffffd69e6685be66f88fbff1596f59ff99ffffffe8fe6ffff5efff8ec9ff7ffff
-fff0e9ff00f7f7ff03fe87fffde6ff0cfe7dfffffffc5af67938d67f6afbff15a5d59ff89fffffff
-9fe7ffff5efff8fbaff7fffffff0e9ff00f7f7ff03fe87fffde6ff0cfe7dfffffffc5af67938d67f
-6afbff15a5d59ff89fffffff9fe7ffff5efff8fbaff7fffffff0e9ff00f7f7ff03fe87fffde6ff0c
-fe7dfffffffc5af67938d67f6afbff15a5d59ff89fffffff9fe7ffff5efff8fbaff7fffffff0e9ff
-01f9cff7ff02fbbff7e7ff0dfd88effffffffb5ce67935d78e5efbff1595c49ff89fffffff9fe7ff
-ff5efff8fabff6fffffff0e9ff01f9cff7ff02fbbff7e7ff0dfd88effffffffb5ce67935d78e5efb
-ff1595c49ff89fffffff9fe7ffff5efff8fabff6fffffff0e9ff01f9cff7ff02fbbff7e7ff0dfd88
-effffffffb5ce67935d78e5efbff1595c49ff89fffffff9fe7ffff5efff8fabff6fffffff0e9ff01
-fd8ff6ff01aee8eaff04fefeb88aeffdff07fb4ec8a944b7ad5ffbff1596c49ff7afffffff9fe7ff
-ff5ffff8f9dff7fffffff0e9ff01fd8ff6ff01aee8eaff04fefeb88aeffdff07fb4ec8a944b7ad5f
-fbff1596c49ff7afffffff9fe7ffff5ffff8f9dff7fffffff0e9ff01fd8ff6ff01aee8eaff04fefe
-b88aeffdff07fb4ec8a944b7ad5ffbff1596c49ff7afffffff9fe7ffff5ffff8f9dff7fffffff0e8
-ff007ef6ff03fac9ffdff1ff07db967665555788cffbff07fb4eb8d67587c97ffbff1586d49fe7af
-ffffff9fe7ffff6ffff8f8efe6fffffff0e8ff007ef6ff03fac9ffdff1ff07db967665555788cffb
-ff07fb4eb8d67587c97ffbff1586d49fe7afffffff9fe7ffff6ffff8f8efe6fffffff0e8ff007ef6
-ff03fac9ffdff1ff07db967665555788cffbff07fb4eb8d67587c97ffbff1586d49fe7afffffff9f
-e7ffff6ffff8f8efe6fffffff0e8ff00b8f6ff03fac9ffdff2ff06b643333343334ef9ff07f95faa
-e6a566d79ffbff1586d49fe6affffffe8fe8ffff6ffff8f8ffd5fffffff0e8ff00b8f6ff03fac9ff
-dff2ff06b643333343334ef9ff07f95faae6a566d79ffbff1586d49fe6affffffe8fe8ffff6ffff8
-f8ffd5fffffff0e8ff00b8f6ff03fac9ffdff2ff06b643333343334ef9ff07f95faae6a566d79ffb
-ff1586d49fe6affffffe8fe8ffff6ffff8f8ffd5fffffff0e8ff01f9bff7ff03cbb9fe8ff4ff01fe
-94fb33007ff9ff07f86f8af7d655d5dffbff1586d4aff5affffffe7fe8ffff7ffff7f7ffb5ffffff
-f0e8ff01f9bff7ff03cbb9fe8ff4ff01fe94fb33007ff9ff07f86f8af7d655d5dffbff1586d4aff5
-affffffe7fe8ffff7ffff7f7ffb5fffffff0e8ff01f9bff7ff03cbb9fe8ff4ff01fe94fb33007ff9
-ff07f86f8af7d655d5dffbff1586d4aff5affffffe7fe8ffff7ffff7f7ffb5fffffff0e7ff007ef7
-ff03adc9fadff4ff08b544333334333434dff9ff06f76f7bf97656e5faff1596e3bff4cfffffff9f
-e8ffff7fffe8f7ffc8fffffff0e7ff007ef7ff03adc9fadff4ff08b544333334333434dff9ff06f7
-6f7bf97656e5faff1596e3bff4cfffffff9fe8ffff7fffe8f7ffc8fffffff0e7ff007ef7ff03adc9
-fadff4ff08b544333334333434dff9ff06f76f7bf97656e5faff1596e3bff4cfffffff9fe8ffff7f
-ffe8f7ffc8fffffff0e7ff00d9f7ff03cae7f8fef4ff0083fc33014339f8ff06f68f6dfc5947c5fa
-ff15a5e3cff4aaa978998fd8fffc49ffe8f7ffcbfffffff0e7ff00d9f7ff03cae7f8fef4ff0083fc
-33014339f8ff06f68f6dfc5947c5faff15a5e3cff4aaa978998fd8fffc49ffe8f7ffcbfffffff0e7
-ff00d9f7ff03cae7f8fef4ff0083fc33014339f8ff06f68f6dfc5947c5faff15a5e3cff4aaa97899
-8fd8fffc49ffe8f7ffcbfffffff0e7ff01facff8ff02f7e8c7f3ff079c665655469de63af8ff23f5
-9f6ffe4b48c46667776678776656d4cff49bbba9978fc7fffe546db8f7ffcafffffff0e7ff01facf
-f8ff02f7e8c7f3ff079c665655469de63af8ff23f59f6ffe4b48c46667776678776656d4cff49bbb
-a9978fc7fffe546db8f7ffcafffffff0e7ff01facff8ff02f7e8c7f3ff079c665655469de63af8ff
-23f59f6ffe4b48c46667776678776656d4cff49bbba9978fc7fffe546db8f7ffcafffffff0e6ff00
-8ef8ff04fe8977fffcf4ff07c58e7ad9cfe864cff9ff23e59f6ffe7769c6eeeedddeddeeffc5e4cf
-d4dffffffb9fd7ffffac6478e8ffcafffffff0e6ff008ef8ff04fe8977fffcf4ff07c58e7ad9cfe8
-64cff9ff23e59f6ffe7769c6eeeedddeddeeffc5e4cfd4dffffffb9fd7ffffac6478e8ffcaffffff
-f0e6ff008ef8ff04fe8977fffcf4ff07c58e7ad9cfe864cff9ff23e59f6ffe7769c6eeeedddeddee
-ffc5e4cfd4dffffffb9fd7ffffac6478e8ffcafffffff0e6ff01e7eff8ff0afa45dffcfffdbefdff
-faeffbff07f7cd6ffcbffbf86ff9ff07b69e6fffd46bd49efbff15c6f3cfe4effffffccfe9fffe9f
-fc67d9ffbbfffffff0e6ff01e7eff8ff0afa45dffcfffdbefdfffaeffbff07f7cd6ffcbffbf86ff9
-ff07b69e6fffd46bd49efbff15c6f3cfe4effffffccfe9fffe9ffc67d9ffbbfffffff0e6ff01e7ef
-f8ff0afa45dffcfffdbefdfffaeffbff07f7cd6ffcbffbf86ff9ff07b69e6fffd46bd49efbff15c6
-f3cfe4effffffccfe9fffe9ffc67d9ffbbfffffff0e6ff01fe7cf8ff09fe74affcfcfe8cefffb6fa
-ff07fa9a8efe9ffffd4df9ff08b6cd7ffff55da877dffcff15b6d4dfd4effffffddff9fffe9fffa9
-caffadfffffff0e6ff01fe7cf8ff09fe74affcfcfe8cefffb6faff07fa9a8efe9ffffd4df9ff08b6
-cd7ffff55da877dffcff15b6d4dfd4effffffddff9fffe9fffa9caffadfffffff0e6ff01fe7cf8ff
-09fe74affcfcfe8cefffb6faff07fa9a8efe9ffffd4df9ff08b6cd7ffff55da877dffcff15b6d4df
-d4effffffddff9fffe9fffa9caffadfffffff0e5ff01f9bff9ff09fe946ffbfbfbcebfff5cfaff07
-fe8e8afe9fcdff76f9ff0985e99ffff85e5adc69effdff15d6435554fffffffebff8fffe8fff8aab
-efaffffffff0e5ff01f9bff9ff09fe946ffbfbfbcebfff5cfaff07fe8e8afe9fcdff76f9ff0985e9
-9ffff85e5adc69effdff15d6435554fffffffebff8fffe8fff8aabefaffffffff0e5ff01f9bff9ff
-09fe946ffbfbfbcebfff5cfaff07fe8e8afe9fcdff76f9ff0985e99ffff85e5adc69effdff15d643
-5554fffffffebff8fffe8fff8aabefaffffffff0e4ff00a9f8ff08f94dfbfce8df9ffbaaf9ff06df
-8a9bbfd8ffb7f9ff09d565cffff86d658ee749fcff14ecbacefffffffe8fe5fffe9fff6656896cff
-fffff0e4ff00a9f8ff08f94dfbfce8df9ffbaaf9ff06df8a9bbfd8ffb7f9ff09d565cffff86d658e
-e749fcff14ecbacefffffffe8fe5fffe9fff6656896cfffffff0e4ff00a9f8ff08f94dfbfce8df9f
-fbaaf9ff06df8a9bbfd8ffb7f9ff09d565cffff86d658ee749fcff14ecbacefffffffe8fe5fffe9f
-ff6656896cfffffff0e4ff01fc7df9ff08fd46ebfdd9cb8ef8ccf9ff06fedf97fff7ff98f8ff09fa
-efffe89e6e859fd75bf6ff0d56a8fffebfffcdfedd648dfffff0e4ff01fc7df9ff08fd46ebfdd9cb
-8ef8ccf9ff06fedf97fff7ff98f8ff09faefffe89e6e859fd75bf6ff0d56a8fffebfffcdfedd648d
-fffff0e4ff01fc7df9ff08fd46ebfdd9cb8ef8ccf9ff06fedf97fff7ff98f8ff09faefffe89e6e85
-9fd75bf6ff0d56a8fffebfffcdfedd648dfffff0e3ff01e8cff9ff0797c8febc69caf8fbf7ff04a6
-ffe7ff6cf5ff1fc5ae7ffc54bfe767777665555567988899aa86455557aaaaababbbb969fffff0e3
-ff01e8cff9ff0797c8febc69caf8fbf7ff04a6ffe7ff6cf5ff1fc5ae7ffc54bfe767777665555567
-988899aa86455557aaaaababbbb969fffff0e3ff01e8cff9ff0797c8febc69caf8fbf7ff04a6ffe7
-ff6cf5ff1fc5ae7ffc54bfe767777665555567988899aa86455557aaaaababbbb969fffff0e2ff00
-8ef9ff07f999aeae56e8f8fbf8ff05fd89bfbafb8ff5ff1fa5ac9fffd536ce4cedeeeecb99aa9cdd
-ccbbbbaa99a98aaaaaaaa98989fffff0e2ff008ef9ff07f999aeae56e8f8fbf8ff05fd89bfbafb8f
-f5ff1fa5ac9fffd536ce4cedeeeecb99aa9cddccbbbbaa99a98aaaaaaaa98989fffff0e2ff008ef9
-ff07f999aeae56e8f8fbf8ff05fd89bfbafb8ff5ff1fa5ac9fffd536ce4cedeeeecb99aa9cddccbb
-bbaa99a98aaaaaaaa98989fffff0e2ff00edf8ff0796eaaf859ba7fcdff9ff05ebfcbf7ef6eff5ff
-079478affffe95344eedff03d8fffff0e2ff00edf8ff0796eaaf859ba7fcdff9ff05ebfcbf7ef6ef
-f5ff079478affffe95344eedff03d8fffff0e2ff00edf8ff0796eaaf859ba7fcdff9ff05ebfcbf7e
-f6eff5ff079478affffe95344eedff03d8fffff0d8ff07fdbb9fd85da6bfaff8ff03e9ec8f7cf4ff
-1ffc75bfffffffd53899abccccccbbabbabaaabcdeedcb98888999a9987afffff0d8ff07fdbb9fd8
-5da6bfaff8ff03e9ec8f7cf4ff1ffc75bfffffffd53899abccccccbbabbabaaabcdeedcb98888999
-a9987afffff0d8ff07fdbb9fd85da6bfaff8ff03e9ec8f7cf4ff1ffc75bfffffffd53899abcccccc
-bbabbabaaabcdeedcb98888999a9987afffff0d7ff06aad9ff96e86edcf8ff039dd7e8cff3ff00fe
-fdff19fed787666556677788888999987667789bcccccccdeefffffff0d7ff06aad9ff96e86edcf8
-ff039dd7e8cff3ff00fefdff19fed787666556677788888999987667789bcccccccdeefffffff0d7
-ff06aad9ff96e86edcf8ff039dd7e8cff3ff00fefdff19fed787666556677788888999987667789b
-cccccccdeefffffff0d8ff07fddbfd98e67e77faf9ff03f9cd7ebdd4ff00f0d8ff07fddbfd98e67e
-77faf9ff03f9cd7ebdd4ff00f0d8ff07fddbfd98e67e77faf9ff03f9cd7ebdd4ff00f0d8ff08fbaf
-fffecd8ba9adbffbff04fe9bc7ebbfd4ff00f0d8ff08fbaffffecd8ba9adbffbff04fe9bc7ebbfd4
-ff00f0d8ff08fbaffffecd8ba9adbffbff04fe9bc7ebbfd4ff00f0d8ff08bcdfffffefb7e88fbefc
-ff04edcbee7eacd3ff00f0d8ff08bcdfffffefb7e88fbefcff04edcbee7eacd3ff00f0d8ff08bcdf
-ffffefb7e88fbefcff04edcbee7eacd3ff00f0d9ff09feb9fffffeecd7e98ffafdff09f857dfe7e9
-efffeca99ed7ff00f0d9ff09feb9fffffeecd7e98ffafdff09f857dfe7e9efffeca99ed7ff00f0d9
-ff09feb9fffffeecd7e98ffafdff09f857dfe7e9efffeca99ed7ff00f0d9ff18faf8ffffffc9e8e8
-9efe9fffffffe76cff8d8cfd98adfbb8ced8ff00f0d9ff18faf8ffffffc9e8e89efe9fffffffe76c
-ff8d8cfd98adfbb8ced8ff00f0d9ff18faf8ffffffc9e8e89efe9fffffffe76cff8d8cfd98adfbb8
-ced8ff00f0d9ff19f9f8ffffdbe7ca9caeff8fffffff8a6ff9c8ce875effeeff8bdfd9ff00f0d9ff
-19f9f8ffffdbe7ca9caeff8fffffff8a6ff9c8ce875effeeff8bdfd9ff00f0d9ff19f9f8ffffdbe7
-ca9caeff8fffffff8a6ff9c8ce875effeeff8bdfd9ff00f0d9ff19f9f9ffeacf9e9e7eadfbbfffff
-ff6a7fc99cf7c746ca47bfe8bfd9ff00f0d9ff19f9f9ffeacf9e9e7eadfbbfffffff6a7fc99cf7c7
-46ca47bfe8bfd9ff00f0d9ff19f9f9ffeacf9e9e7eadfbbfffffff6a7fc99cf7c746ca47bfe8bfd9
-ff00f0d9ff09faebfdbfeadf8e8f9ef9fdff0b6a8f89afe77444b8498ff7bfd9ff00f0d9ff09faeb
-fdbfeadf8e8f9ef9fdff0b6a8f89afe77444b8498ff7bfd9ff00f0d9ff09faebfdbfeadf8e8f9ef9
-fdff0b6a8f89afe77444b8498ff7bfd9ff00f0d9ff09fdddfbfb9eff8b9f8fdbfdff0b5c8e68ff95
-433386447865afd9ff00f0d9ff09fdddfbfb9eff8b9f8fdbfdff0b5c8e68ff95433386447865afd9
-ff00f0d9ff09fdddfbfb9eff8b9f8fdbfdff0b5c8e68ff95433386447865afd9ff00f0d7ff17ce9e
-ffff9c8f9fbdfffffeff6f7b5eff643343453543688fd9ff00f0d7ff17ce9effff9c8f9fbdfffffe
-ff6f7b5eff643343453543688fd9ff00f0d7ff17ce9effff9c8f9fbdfffffeff6f7b5eff64334345
-3543688fd9ff00f0d7ff17e9efffffab6cdb9efffffdff6f8b4fff64434437443345bfd9ff00f0d7
-ff17e9efffffab6cdb9efffffdff6f8b4fff64434437443345bfd9ff00f0d7ff17e9efffffab6cdb
-9efffffdff6f8b4fff64434437443345bfd9ff00f0d7ff16dbffffffe89afabdfffffddf8bca7bff
-83436434433466d8ff00f0d7ff16dbffffffe89afabdfffffddf8bca7bff83436434433466d8ff00
-f0d7ff16dbffffffe89afabdfffffddf8bca7bff83436434433466d8ff00f0d7ff16befffffff9b6
-cbeafeffffafb5fef9bfc359d834433598d8ff00f0d7ff16befffffff9b6cbeafeffffafb5fef9bf
-c359d834433598d8ff00f0d7ff16befffffff9b6cbeafeffffafb5fef9bfc359d834433598d8ff00
-f0d2ff119c8ffbffefff8ee58fff99e548784433455ed8ff00f0d2ff119c8ffbffefff8ee58fff99
-e548784433455ed8ff00f0d2ff119c8ffbffefff8ee58fff99e548784433455ed8ff00f0d2ff01fc
-cffdff0bb9fa8afffb7743333333548ed8ff00f0d2ff01fccffdff0bb9fa8afffb7743333333548e
-d8ff00f0d2ff01fccffdff0bb9fa8afffb7743333333548ed8ff00f0d2ff00fafcff0cfa68858eff
-fc87433333356549d9ff00f0d2ff00fafcff0cfa68858efffc87433333356549d9ff00f0d2ff00fa
-fcff0cfa68858efffc87433333356549d9ff00f0d2ff00ebfbff0cb99a769effffdca7568effe69a
-daff00f0d2ff00ebfbff0cb99a769effffdca7568effe69adaff00f0d2ff00ebfbff0cb99a769eff
-ffdca7568effe69adaff00f0d2ff00cffaff03feffc7effdff03efffb68adaff00f0d2ff00cffaff
-03feffc7effdff03efffb68adaff00f0d2ff00cffaff03feffc7effdff03efffb68adaff00f0c8ff
-01fedffcff02fe645adaff00f0c8ff01fedffcff02fe645adaff00f0c8ff01fedffcff02fe645ada
-ff00f097ff00f097ff00f097ff00f097ff00f097ff00f097ff00f097ff00f097ff00f097ff00f0
-
diff -Nuar groff-1.22.3.old/doc/groff.info groff-1.22.3/doc/groff.info
--- groff-1.22.3.old/doc/groff.info	2014-11-04 10:39:07.777117046 +0200
+++ groff-1.22.3/doc/groff.info	1970-01-01 02:00:00.000000000 +0200
@@ -1,315 +0,0 @@
-This is groff.info, produced by makeinfo version 5.2dev from
-groff.texinfo.
-
-This manual documents GNU 'troff' version 1.22.3.
-
-   Copyright � 1994-2014 Free Software Foundation, Inc.
-
-     Permission is granted to copy, distribute and/or modify this
-     document under the terms of the GNU Free Documentation License,
-     Version 1.3 or any later version published by the Free Software
-     Foundation; with no Invariant Sections, with the Front-Cover texts
-     being "A GNU Manual," and with the Back-Cover Texts as in (a)
-     below.  A copy of the license is included in the section entitled
-     "GNU Free Documentation License."
-
-     (a) The FSF's Back-Cover Text is: "You have the freedom to copy and
-     modify this GNU manual.  Buying copies from the FSF supports it in
-     developing GNU and promoting software freedom."
-INFO-DIR-SECTION Typesetting
-START-INFO-DIR-ENTRY
-* Groff: (groff).               The GNU troff document formatting system.
-END-INFO-DIR-ENTRY
-
-
-Indirect:
-groff.info-1: 981
-groff.info-2: 305458
-
-Tag Table:
-(Indirect)
-Node: Top981
-Node: Introduction2252
-Node: What Is groff?2705
-Node: What Is groff?-Footnotes4161
-Ref: What Is groff?-Footnote-14235
-Node: History4272
-Node: History-Footnotes9245
-Ref: History-Footnote-19305
-Node: groff Capabilities9513
-Node: Macro Package Intro10709
-Node: Preprocessor Intro11341
-Node: Output device intro12968
-Node: Credits13454
-Node: Invoking groff13968
-Node: Groff Options15266
-Node: Environment26087
-Node: Macro Directories28435
-Node: Font Directories29770
-Node: Paper Size31418
-Node: Invocation Examples32774
-Node: Invocation Examples-Footnotes33972
-Ref: Invocation Examples-Footnote-134056
-Node: grog34289
-Node: Tutorial for Macro Users35570
-Node: Basics35996
-Node: Basics-Footnotes40816
-Ref: Basics-Footnote-140874
-Ref: Basics-Footnote-240968
-Node: Common Features41082
-Node: Paragraphs41874
-Node: Sections and Chapters43383
-Node: Headers and Footers43889
-Node: Page Layout Adjustment44776
-Node: Displays45057
-Node: Footnotes and Annotations46326
-Node: Table of Contents46998
-Node: Indices47527
-Node: Paper Formats47943
-Node: Multiple Columns48330
-Node: Font and Size Changes48594
-Node: Predefined Strings48912
-Node: Preprocessor Support49264
-Node: Configuration and Customization49834
-Node: Macro Packages50217
-Node: man50785
-Node: Man options51227
-Node: Man options-Footnotes53925
-Ref: Man options-Footnote-153993
-Node: Man usage54713
-Node: Man font macros60777
-Node: Miscellaneous man macros62613
-Node: Predefined man strings64358
-Node: Preprocessors in man pages64930
-Node: Optional man extensions65557
-Node: mdoc69553
-Node: ms69732
-Node: ms Intro70241
-Node: General ms Structure70924
-Node: General ms Structure-Footnotes73379
-Ref: General ms Structure-Footnote-173465
-Node: ms Document Control Registers73511
-Node: ms Cover Page Macros80162
-Node: ms Body Text83182
-Node: Paragraphs in ms83675
-Node: Headings in ms85448
-Node: Highlighting in ms88227
-Node: Lists in ms90821
-Node: Indentation values in ms94221
-Node: Tabstops in ms94855
-Node: ms Displays and Keeps95282
-Node: ms Insertions99239
-Node: Example multi-page table100811
-Node: ms Footnotes101271
-Node: ms Page Layout102541
-Node: ms Headers and Footers103072
-Node: ms Margins104527
-Node: ms Multiple Columns104786
-Node: ms TOC105606
-Node: ms Strings and Special Characters108340
-Node: ms Strings and Special Characters-Footnotes111152
-Ref: ms Strings and Special Characters-Footnote-1111264
-Node: Differences from AT&T ms111351
-Node: Missing ms Macros114432
-Node: Additional ms Macros115207
-Node: Naming Conventions116480
-Node: me117516
-Node: mm117684
-Node: mom117853
-Node: gtroff Reference118102
-Node: Text119026
-Node: Filling and Adjusting119595
-Node: Hyphenation120323
-Node: Sentences121120
-Node: Tab Stops122285
-Node: Implicit Line Breaks123193
-Node: Input Conventions124335
-Node: Input Encodings125141
-Node: Measurements127273
-Node: Measurements-Footnotes129477
-Ref: Measurements-Footnote-1129547
-Node: Default Units129619
-Node: Expressions130679
-Node: Expressions-Footnotes134090
-Ref: Expressions-Footnote-1134158
-Node: Identifiers134285
-Node: Embedded Commands138146
-Node: Requests138901
-Node: Request and Macro Arguments141146
-Node: Request and Macro Arguments-Footnotes143638
-Ref: Request and Macro Arguments-Footnote-1143738
-Ref: Request and Macro Arguments-Footnote-2143866
-Node: Macros144221
-Node: Escapes144611
-Node: Comments147479
-Node: Comments-Footnotes150055
-Ref: Comments-Footnote-1150117
-Node: Registers150216
-Node: Setting Registers150729
-Node: Interpolating Registers154641
-Node: Auto-increment155460
-Node: Assigning Formats157013
-Node: Built-in Registers159874
-Node: Manipulating Filling and Adjusting163697
-Node: Manipulating Hyphenation172782
-Node: Manipulating Hyphenation-Footnotes184331
-Ref: Manipulating Hyphenation-Footnote-1184425
-Node: Manipulating Spacing184500
-Node: Tabs and Fields189041
-Node: Tabs and Fields-Footnotes195024
-Ref: Tabs and Fields-Footnote-1195100
-Node: Leaders195178
-Node: Leaders-Footnotes196782
-Ref: Leaders-Footnote-1196842
-Node: Fields196923
-Node: Character Translations198352
-Node: Troff and Nroff Mode207579
-Node: Line Layout209580
-Node: Line Control215436
-Node: Page Layout218089
-Node: Page Control221950
-Node: Fonts and Symbols225687
-Node: Changing Fonts226293
-Node: Font Families229824
-Node: Font Positions234384
-Node: Using Symbols237532
-Node: Using Symbols-Footnotes254537
-Ref: Using Symbols-Footnote-1254609
-Ref: Using Symbols-Footnote-2255062
-Ref: Using Symbols-Footnote-3255133
-Ref: Using Symbols-Footnote-4255372
-Node: Character Classes255435
-Node: Special Fonts258152
-Node: Artificial Fonts259345
-Node: Ligatures and Kerning264878
-Node: Sizes270903
-Node: Sizes-Footnotes271744
-Ref: Sizes-Footnote-1271800
-Node: Changing Type Sizes272212
-Node: Fractional Type Sizes277734
-Node: Strings280813
-Ref: als288636
-Node: Conditionals and Loops290518
-Node: Operators in Conditionals290750
-Node: Operators in Conditionals-Footnotes294494
-Ref: Operators in Conditionals-Footnote-1294590
-Ref: Operators in Conditionals-Footnote-2294669
-Node: if-else294768
-Node: while296287
-Node: Writing Macros298672
-Node: Writing Macros-Footnotes304106
-Ref: Writing Macros-Footnote-1304180
-Node: Copy-in Mode305458
-Node: Parameters306357
-Node: Page Motions309556
-Node: Drawing Requests317240
-Node: Traps327649
-Node: Page Location Traps328290
-Node: Diversion Traps334488
-Node: Input Line Traps335108
-Node: Blank Line Traps336139
-Node: Leading Spaces Traps336433
-Node: End-of-input Traps338012
-Node: Diversions341555
-Node: Environments349170
-Node: Suppressing output353043
-Node: Colors355085
-Node: I/O358655
-Node: Postprocessor Access367180
-Node: Miscellaneous368884
-Node: Miscellaneous-Footnotes374360
-Ref: Miscellaneous-Footnote-1374432
-Node: Gtroff Internals374502
-Node: Gtroff Internals-Footnotes378849
-Ref: Gtroff Internals-Footnote-1378927
-Node: Debugging379062
-Node: Warnings385038
-Node: Warnings-Footnotes388135
-Ref: Warnings-Footnote-1388197
-Node: Implementation Differences388318
-Node: Implementation Differences-Footnotes393145
-Ref: Implementation Differences-Footnote-1393243
-Node: Preprocessors393379
-Node: geqn393708
-Node: Invoking geqn393847
-Node: gtbl393958
-Node: Invoking gtbl394088
-Node: gpic394199
-Node: Invoking gpic394329
-Node: ggrn394440
-Node: Invoking ggrn394570
-Node: grap394681
-Node: gchem394961
-Node: Invoking gchem395097
-Node: grefer395213
-Node: Invoking grefer395355
-Node: gsoelim395476
-Node: Invoking gsoelim395623
-Node: preconv395749
-Node: Invoking preconv395881
-Node: Output Devices396007
-Node: Special Characters396262
-Node: grotty396436
-Node: Invoking grotty396764
-Node: grops398556
-Node: Invoking grops398893
-Node: Embedding PostScript400394
-Node: gropdf401075
-Node: Invoking gropdf401403
-Node: Embedding PDF402843
-Node: grodvi403458
-Node: Invoking grodvi403809
-Node: grolj4404598
-Node: Invoking grolj4404947
-Node: grolbp405803
-Node: Invoking grolbp406148
-Node: grohtml406941
-Node: Invoking grohtml408372
-Node: grohtml specific registers and strings410189
-Node: gxditview411198
-Node: Invoking gxditview411339
-Node: File formats411475
-Node: gtroff Output411751
-Node: gtroff Output-Footnotes413597
-Ref: gtroff Output-Footnote-1413669
-Node: Language Concepts413804
-Node: Separation414555
-Node: Argument Units416808
-Node: Document Parts417961
-Node: Command Reference419367
-Node: Comment Command419783
-Node: Simple Commands420281
-Node: Simple Commands-Footnotes426211
-Ref: Simple Commands-Footnote-1426287
-Node: Graphics Commands426348
-Node: Device Control Commands433679
-Node: Obsolete Command437734
-Node: Intermediate Output Examples439020
-Node: Output Language Compatibility441819
-Node: Font Files443879
-Node: Font Files-Footnotes444500
-Ref: Font Files-Footnote-1444566
-Node: DESC File Format444627
-Node: Font File Format450498
-Node: Font File Format-Footnotes456735
-Ref: Font File Format-Footnote-1456813
-Ref: Font File Format-Footnote-2456904
-Node: Installation457123
-Node: Copying This Manual457254
-Node: Request Index482372
-Node: Escape Index498963
-Node: Operator Index505531
-Node: Register Index507163
-Node: Macro Index521532
-Node: String Index535787
-Node: Glyph Name Index544476
-Node: Font File Keyword Index544786
-Node: Program and File Index548199
-Node: Concept Index554571
-
-End Tag Table
-
-
-Local Variables:
-coding: iso-8859-1
-End:
diff -Nuar groff-1.22.3.old/doc/groff.info-1 groff-1.22.3/doc/groff.info-1
--- groff-1.22.3.old/doc/groff.info-1	2014-11-04 10:39:01.148199919 +0200
+++ groff-1.22.3/doc/groff.info-1	1970-01-01 02:00:00.000000000 +0200
@@ -1,8596 +0,0 @@
-This is groff.info, produced by makeinfo version 5.2dev from
-groff.texinfo.
-
-This manual documents GNU 'troff' version 1.22.3.
-
-   Copyright � 1994-2014 Free Software Foundation, Inc.
-
-     Permission is granted to copy, distribute and/or modify this
-     document under the terms of the GNU Free Documentation License,
-     Version 1.3 or any later version published by the Free Software
-     Foundation; with no Invariant Sections, with the Front-Cover texts
-     being "A GNU Manual," and with the Back-Cover Texts as in (a)
-     below.  A copy of the license is included in the section entitled
-     "GNU Free Documentation License."
-
-     (a) The FSF's Back-Cover Text is: "You have the freedom to copy and
-     modify this GNU manual.  Buying copies from the FSF supports it in
-     developing GNU and promoting software freedom."
-INFO-DIR-SECTION Typesetting
-START-INFO-DIR-ENTRY
-* Groff: (groff).               The GNU troff document formatting system.
-END-INFO-DIR-ENTRY
-
-
-File: groff.info,  Node: Top,  Next: Introduction,  Prev: (dir),  Up: (dir)
-
-GNU troff
-*********
-
-* Menu:
-
-* Introduction::
-* Invoking groff::
-* Tutorial for Macro Users::
-* Macro Packages::
-* gtroff Reference::
-* Preprocessors::
-* Output Devices::
-* File formats::
-* Installation::
-* Copying This Manual::
-* Request Index::
-* Escape Index::
-* Operator Index::
-* Register Index::
-* Macro Index::
-* String Index::
-* Glyph Name Index::
-* Font File Keyword Index::
-* Program and File Index::
-* Concept Index::
-
-This manual documents GNU 'troff' version 1.22.3.
-
-   Copyright � 1994-2014 Free Software Foundation, Inc.
-
-     Permission is granted to copy, distribute and/or modify this
-     document under the terms of the GNU Free Documentation License,
-     Version 1.3 or any later version published by the Free Software
-     Foundation; with no Invariant Sections, with the Front-Cover texts
-     being "A GNU Manual," and with the Back-Cover Texts as in (a)
-     below.  A copy of the license is included in the section entitled
-     "GNU Free Documentation License."
-
-     (a) The FSF's Back-Cover Text is: "You have the freedom to copy and
-     modify this GNU manual.  Buying copies from the FSF supports it in
-     developing GNU and promoting software freedom."
-
-
-File: groff.info,  Node: Introduction,  Next: Invoking groff,  Prev: Top,  Up: Top
-
-1 Introduction
-**************
-
-GNU 'troff' (or 'groff') is a system for typesetting documents.  'troff'
-is very flexible and has been used extensively for some thirty years.
-It is well entrenched in the UNIX community.
-
-* Menu:
-
-* What Is groff?::
-* History::
-* groff Capabilities::
-* Macro Package Intro::
-* Preprocessor Intro::
-* Output device intro::
-* Credits::
-
-
-File: groff.info,  Node: What Is groff?,  Next: History,  Prev: Introduction,  Up: Introduction
-
-1.1 What Is 'groff'?
-====================
-
-'groff' belongs to an older generation of document preparation systems,
-which operate more like compilers than the more recent interactive
-WYSIWYG(1) (*note What Is groff?-Footnote-1::) systems.  'groff' and its
-contemporary counterpart, TeX, both work using a "batch" paradigm: The
-input (or "source") files are normal text files with embedded formatting
-commands.  These files can then be processed by 'groff' to produce a
-typeset document on a variety of devices.
-
-   'groff' should not be confused with a "word processor", an integrated
-system of editor and text formatter.  Also, many word processors follow
-the WYSIWYG paradigm discussed earlier.
-
-   Although WYSIWYG systems may be easier to use, they have a number of
-disadvantages compared to 'troff':
-
-   * They must be used on a graphics display to work on a document.
-
-   * Most of the WYSIWYG systems are either non-free or are not very
-     portable.
-
-   * 'troff' is firmly entrenched in all UNIX systems.
-
-   * It is difficult to have a wide range of capabilities within the
-     confines of a GUI/window system.
-
-   * It is more difficult to make global changes to a document.
-
-     "GUIs normally make it simple to accomplish simple actions and
-     impossible to accomplish complex actions."  -Doug Gwyn (22/Jun/91
-     in 'comp.unix.wizards')
-
-
-File: groff.info,  Node: What Is groff?-Footnotes,  Up: What Is groff?
-
-   (1) What You See Is What You Get
-
-
-File: groff.info,  Node: History,  Next: groff Capabilities,  Prev: What Is groff?,  Up: Introduction
-
-1.2 History
-===========
-
-'troff' can trace its origins back to a formatting program called
-'RUNOFF', written by Jerry Saltzer, which ran on the CTSS (_Compatible
-Time Sharing System_, a project of MIT, the Massachusetts Institute of
-Technology) in the mid-sixties.(1)  (*note History-Footnote-1::) The
-name came from the use of the phrase "run off a document", meaning to
-print it out.  Bob Morris ported it to the 635 architecture and called
-the program 'roff' (an abbreviation of 'runoff').  It was rewritten as
-'rf' for the PDP-7 (before having UNIX), and at the same time (1969),
-Doug McIllroy rewrote an extended and simplified version of 'roff' in
-the BCPL programming language.
-
-   In 1971, the UNIX developers wanted to get a PDP-11, and to justify
-the cost, proposed the development of a document formatting system for
-the AT&T patents division.  This first formatting program was a
-reimplementation of McIllroy's 'roff', written by J. F. Ossanna.
-
-   When they needed a more flexible language, a new version of 'roff'
-called 'nroff' ("Newer 'roff'") was written.  It had a much more
-complicated syntax, but provided the basis for all future versions.
-When they got a Graphic Systems CAT Phototypesetter, Ossanna wrote a
-version of 'nroff' that would drive it.  It was dubbed 'troff', for
-"typesetter 'roff'", although many people have speculated that it
-actually means "Times 'roff'" because of the use of the Times font
-family in 'troff' by default.  As such, the name 'troff' is pronounced
-'t-roff' rather than 'trough'.
-
-   With 'troff' came 'nroff' (they were actually the same program except
-for some '#ifdef's), which was for producing output for line printers
-and character terminals.  It understood everything 'troff' did, and
-ignored the commands that were not applicable (e.g. font changes).
-
-   Since there are several things that cannot be done easily in 'troff',
-work on several preprocessors began.  These programs would transform
-certain parts of a document into 'troff', which made a very natural use
-of pipes in UNIX.
-
-   The 'eqn' preprocessor allowed mathematical formul� to be specified
-in a much simpler and more intuitive manner.  'tbl' is a preprocessor
-for formatting tables.  The 'refer' preprocessor (and the similar
-program, 'bib') processes citations in a document according to a
-bibliographic database.
-
-   Unfortunately, Ossanna's 'troff' was written in PDP-11 assembly
-language and produced output specifically for the CAT phototypesetter.
-He rewrote it in C, although it was now 7000 lines of uncommented code
-and still dependent on the CAT.  As the CAT became less common, and was
-no longer supported by the manufacturer, the need to make it support
-other devices became a priority.  However, before this could be done,
-Ossanna died by a severe heart attack in a hospital while recovering
-from a previous one.
-
-   So, Brian Kernighan took on the task of rewriting 'troff'.  The newly
-rewritten version produced device independent code that was very easy
-for postprocessors to read and translate to the appropriate printer
-codes.  Also, this new version of 'troff' (called 'ditroff' for "device
-independent 'troff'") had several extensions, which included drawing
-functions.
-
-   Due to the additional abilities of the new version of 'troff',
-several new preprocessors appeared.  The 'pic' preprocessor provides a
-wide range of drawing functions.  Likewise the 'ideal' preprocessor did
-the same, although via a much different paradigm.  The 'grap'
-preprocessor took specifications for graphs, but, unlike other
-preprocessors, produced 'pic' code.
-
-   James Clark began work on a GNU implementation of 'ditroff' in
-early 1989.  The first version, 'groff' 0.3.1, was released June 1990.
-'groff' included:
-
-   * A replacement for 'ditroff' with many extensions.
-
-   * The 'soelim', 'pic', 'tbl', and 'eqn' preprocessors.
-
-   * Postprocessors for character devices, POSTSCRIPT, TeX DVI, and
-     X Windows.  GNU 'troff' also eliminated the need for a separate
-     'nroff' program with a postprocessor that would produce ASCII
-     output.
-
-   * A version of the 'me' macros and an implementation of the 'man'
-     macros.
-
-   Also, a front-end was included that could construct the, sometimes
-painfully long, pipelines required for all the post- and preprocessors.
-
-   Development of GNU 'troff' progressed rapidly, and saw the additions
-of a replacement for 'refer', an implementation of the 'ms' and 'mm'
-macros, and a program to deduce how to format a document ('grog').
-
-   It was declared a stable (i.e. non-beta) package with the release of
-version 1.04 around November 1991.
-
-   Beginning in 1999, 'groff' has new maintainers (the package was an
-orphan for a few years).  As a result, new features and programs like
-'grn', a preprocessor for gremlin images, and an output device to
-produce HTML and XHTML have been added.
-
-
-File: groff.info,  Node: History-Footnotes,  Up: History
-
-   (1) Jerome H. Saltzer, a grad student then, later a Professor of
-Electrical Engineering, now retired.  Saltzer's PhD thesis was the first
-application for 'RUNOFF' and is available from the MIT Libraries.
-
-
-File: groff.info,  Node: groff Capabilities,  Next: Macro Package Intro,  Prev: History,  Up: Introduction
-
-1.3 'groff' Capabilities
-========================
-
-So what exactly is 'groff' capable of doing?  'groff' provides a wide
-range of low-level text formatting operations.  Using these, it is
-possible to perform a wide range of formatting tasks, such as footnotes,
-table of contents, multiple columns, etc.  Here's a list of the most
-important operations supported by 'groff':
-
-   * text filling, adjusting, and centering
-
-   * hyphenation
-
-   * page control
-
-   * font and glyph size control
-
-   * vertical spacing (e.g. double-spacing)
-
-   * line length and indenting
-
-   * macros, strings, diversions, and traps
-
-   * number registers
-
-   * tabs, leaders, and fields
-
-   * input and output conventions and character translation
-
-   * overstrike, bracket, line drawing, and zero-width functions
-
-   * local horizontal and vertical motions and the width function
-
-   * three-part titles
-
-   * output line numbering
-
-   * conditional acceptance of input
-
-   * environment switching
-
-   * insertions from the standard input
-
-   * input/output file switching
-
-   * output and error messages
-
-
-File: groff.info,  Node: Macro Package Intro,  Next: Preprocessor Intro,  Prev: groff Capabilities,  Up: Introduction
-
-1.4 Macro Packages
-==================
-
-Since 'groff' provides such low-level facilities, it can be quite
-difficult to use by itself.  However, 'groff' provides a "macro"
-facility to specify how certain routine operations (e.g. starting
-paragraphs, printing headers and footers, etc.) should be done.  These
-macros can be collected together into a "macro package".  There are a
-number of macro packages available; the most common (and the ones
-described in this manual) are 'man', 'mdoc', 'me', 'ms', and 'mm'.
-
-
-File: groff.info,  Node: Preprocessor Intro,  Next: Output device intro,  Prev: Macro Package Intro,  Up: Introduction
-
-1.5 Preprocessors
-=================
-
-Although 'groff' provides most functions needed to format a document,
-some operations would be unwieldy (e.g. to draw pictures).  Therefore,
-programs called "preprocessors" were written that understand their own
-language and produce the necessary 'groff' operations.  These
-preprocessors are able to differentiate their own input from the rest of
-the document via markers.
-
-   To use a preprocessor, UNIX pipes are used to feed the output from
-the preprocessor into 'groff'.  Any number of preprocessors may be used
-on a given document; in this case, the preprocessors are linked together
-into one pipeline.  However, with 'groff', the user does not need to
-construct the pipe, but only tell 'groff' what preprocessors to use.
-
-   'groff' currently has preprocessors for producing tables ('tbl'),
-typesetting equations ('eqn'), drawing pictures ('pic' and 'grn'),
-processing bibliographies ('refer'), and drawing chemical structures
-('chem').  An associated program that is useful when dealing with
-preprocessors is 'soelim'.
-
-   A free implementation of 'grap', a preprocessor for drawing graphs,
-can be obtained as an extra package; 'groff' can use 'grap' also.
-
-   Unique to 'groff' is the 'preconv' preprocessor that enables 'groff'
-to handle documents in various input encodings.
-
-   There are other preprocessors in existence, but, unfortunately, no
-free implementations are available.  Among them is a preprocessor for
-drawing mathematical pictures ('ideal').
-
-
-File: groff.info,  Node: Output device intro,  Next: Credits,  Prev: Preprocessor Intro,  Up: Introduction
-
-1.6 Output Devices
-==================
-
-'groff' actually produces device independent code that may be fed into a
-postprocessor to produce output for a particular device.  Currently,
-'groff' has postprocessors for POSTSCRIPT devices, character terminals,
-X Windows (for previewing), TeX DVI format, HP LaserJet 4 and Canon LBP
-printers (which use CAPSL), HTML, XHTML, and PDF.
-
-
-File: groff.info,  Node: Credits,  Prev: Output device intro,  Up: Introduction
-
-1.7 Credits
-===========
-
-Large portions of this manual were taken from existing documents, most
-notably, the manual pages for the 'groff' package by James Clark, and
-Eric Allman's papers on the 'me' macro package.
-
-   The section on the 'man' macro package is partly based on Susan G.
-Kleinmann's 'groff_man' manual page written for the Debian GNU/Linux
-system.
-
-   Larry Kollar contributed the section in the 'ms' macro package.
-
-
-File: groff.info,  Node: Invoking groff,  Next: Tutorial for Macro Users,  Prev: Introduction,  Up: Top
-
-2 Invoking 'groff'
-******************
-
-This section focuses on how to invoke the 'groff' front end.  This front
-end takes care of the details of constructing the pipeline among the
-preprocessors, 'gtroff' and the postprocessor.
-
-   It has become a tradition that GNU programs get the prefix 'g' to
-distinguish it from its original counterparts provided by the host (see
-*note Environment::, for more details).  Thus, for example, 'geqn' is
-GNU 'eqn'.  On operating systems like GNU/Linux or the Hurd, which don't
-contain proprietary versions of 'troff', and on MS-DOS/MS-Windows, where
-'troff' and associated programs are not available at all, this prefix is
-omitted since GNU 'troff' is the only used incarnation of 'troff'.
-Exception: 'groff' is never replaced by 'roff'.
-
-   In this document, we consequently say 'gtroff' when talking about the
-GNU 'troff' program.  All other implementations of 'troff' are called
-AT&T 'troff', which is the common origin of all 'troff' derivates (with
-more or less compatible changes).  Similarly, we say 'gpic', 'geqn',
-etc.
-
-* Menu:
-
-* Groff Options::
-* Environment::
-* Macro Directories::
-* Font Directories::
-* Paper Size::
-* Invocation Examples::
-
-
-File: groff.info,  Node: Groff Options,  Next: Environment,  Prev: Invoking groff,  Up: Invoking groff
-
-2.1 Options
-===========
-
-'groff' normally runs the 'gtroff' program and a postprocessor
-appropriate for the selected device.  The default device is 'ps' (but it
-can be changed when 'groff' is configured and built).  It can optionally
-preprocess with any of 'gpic', 'geqn', 'gtbl', 'ggrn', 'grap', 'gchem',
-'grefer', 'gsoelim', or 'preconv'.
-
-   This section only documents options to the 'groff' front end.  Many
-of the arguments to 'groff' are passed on to 'gtroff', therefore those
-are also included.  Arguments to pre- or postprocessors can be found in
-*note Invoking gpic::, *note Invoking geqn::, *note Invoking gtbl::,
-*note Invoking ggrn::, *note Invoking grefer::, *note Invoking gchem::,
-*note Invoking gsoelim::, *note Invoking preconv::, *note Invoking
-grotty::, *note Invoking grops::, *note Invoking gropdf::, *note
-Invoking grohtml::, *note Invoking grodvi::, *note Invoking grolj4::,
-*note Invoking grolbp::, and *note Invoking gxditview::.
-
-   The command line format for 'groff' is:
-
-     groff [ -abceghijklpstvzCEGNRSUVXZ ] [ -dCS ] [ -DARG ]
-           [ -fFAM ] [ -FDIR ] [ -IDIR ] [ -KARG ]
-           [ -LARG ] [ -mNAME ] [ -MDIR ] [ -nNUM ]
-           [ -oLIST ] [ -PARG ] [ -rCN ] [ -TDEV ]
-           [ -wNAME ] [ -WNAME ] [ FILES... ]
-
-   The command line format for 'gtroff' is as follows.
-
-     gtroff [ -abcivzCERU ] [ -dCS ] [ -fFAM ] [ -FDIR ]
-            [ -mNAME ] [ -MDIR ] [ -nNUM ] [ -oLIST ]
-            [ -rCN ] [ -TNAME ] [ -wNAME ] [ -WNAME ]
-            [ FILES... ]
-
-Obviously, many of the options to 'groff' are actually passed on to
-'gtroff'.
-
-   Options without an argument can be grouped behind a single '-'.  A
-filename of '-' denotes the standard input.  It is possible to have
-whitespace between an option and its parameter.
-
-   The 'grog' command can be used to guess the correct 'groff' command
-to format a file.
-
-   Here's the description of the command-line options:
-
-'-a'
-     Generate an ASCII approximation of the typeset output.  The
-     read-only register '.A' is then set to 1.  *Note Built-in
-     Registers::.  A typical example is
-
-          groff -a -man -Tdvi troff.man | less
-
-     which shows how lines are broken for the DVI device.  Note that
-     this option is rather useless today since graphic output devices
-     are available virtually everywhere.
-
-'-b'
-     Print a backtrace with each warning or error message.  This
-     backtrace should help track down the cause of the error.  The line
-     numbers given in the backtrace may not always be correct: 'gtroff'
-     can get confused by 'as' or 'am' requests while counting line
-     numbers.
-
-'-c'
-     Suppress color output.
-
-'-C'
-     Enable compatibility mode.  *Note Implementation Differences::, for
-     the list of incompatibilities between 'groff' and AT&T 'troff'.
-
-'-dCS'
-'-dNAME=S'
-     Define C or NAME to be a string S.  C must be a one-letter name;
-     NAME can be of arbitrary length.  All string assignments happen
-     before loading any macro file (including the start-up file).
-
-'-DARG'
-     Set default input encoding used by 'preconv' to ARG.  Implies '-k'.
-
-'-e'
-     Preprocess with 'geqn'.
-
-'-E'
-     Inhibit all error messages.
-
-'-fFAM'
-     Use FAM as the default font family.  *Note Font Families::.
-
-'-FDIR'
-     Search 'DIR' for subdirectories 'devNAME' (NAME is the name of the
-     device), for the 'DESC' file, and for font files before looking in
-     the standard directories (*note Font Directories::).  This option
-     is passed to all pre- and postprocessors using the
-     'GROFF_FONT_PATH' environment variable.
-
-'-g'
-     Preprocess with 'ggrn'.
-
-'-G'
-     Preprocess with 'grap'.  Implies '-p'.
-
-'-h'
-     Print a help message.
-
-'-i'
-     Read the standard input after all the named input files have been
-     processed.
-
-'-IDIR'
-     This option may be used to specify a directory to search for files.
-     It is passed to the following programs:
-
-        * 'gsoelim' (see *note gsoelim:: for more details); it also
-          implies 'groff''s '-s' option.
-
-        * 'gtroff'; it is used to search files named in the 'psbb' and
-          'so' requests.
-
-        * 'grops'; it is used to search files named in the
-          '\X'ps: import' and '\X'ps: file' escapes.
-
-     The current directory is always searched first.  This option may be
-     specified more than once; the directories are searched in the order
-     specified.  No directory search is performed for files specified
-     using an absolute path.
-
-'-j'
-     Preprocess with 'gchem'.  Implies '-p'.
-
-'-k'
-     Preprocess with 'preconv'.  This is run before any other
-     preprocessor.  Please refer to 'preconv''s manual page for its
-     behaviour if no '-K' (or '-D') option is specified.
-
-'-KARG'
-     Set input encoding used by preconv to ARG.  Implies '-k'.
-
-'-l'
-     Send the output to a spooler for printing.  The command used for
-     this is specified by the 'print' command in the device description
-     file (see *note Font Files::, for more info).  If not present, '-l'
-     is ignored.
-
-'-LARG'
-     Pass ARG to the spooler.  Each argument should be passed with a
-     separate '-L' option.  Note that 'groff' does not prepend a '-' to
-     ARG before passing it to the postprocessor.  If the 'print' keyword
-     in the device description file is missing, '-L' is ignored.
-
-'-mNAME'
-     Read in the file 'NAME.tmac'.  Normally 'groff' searches for this
-     in its macro directories.  If it isn't found, it tries 'tmac.NAME'
-     (searching in the same directories).
-
-'-MDIR'
-     Search directory 'DIR' for macro files before the standard
-     directories (*note Macro Directories::).
-
-'-nNUM'
-     Number the first page NUM.
-
-'-N'
-     Don't allow newlines with 'eqn' delimiters.  This is the same as
-     the '-N' option in 'geqn'.
-
-'-oLIST'
-     Output only pages in LIST, which is a comma-separated list of page
-     ranges; 'N' means print page N, 'M-N' means print every page
-     between M and N, '-N' means print every page up to N, 'N-' means
-     print every page beginning with N.  'gtroff' exits after printing
-     the last page in the list.  All the ranges are inclusive on both
-     ends.
-
-     Within 'gtroff', this information can be extracted with the '.P'
-     register.  *Note Built-in Registers::.
-
-     If your document restarts page numbering at the beginning of each
-     chapter, then 'gtroff' prints the specified page range for each
-     chapter.
-
-'-p'
-     Preprocess with 'gpic'.
-
-'-PARG'
-     Pass ARG to the postprocessor.  Each argument should be passed with
-     a separate '-P' option.  Note that 'groff' does not prepend '-' to
-     ARG before passing it to the postprocessor.
-
-'-rCN'
-'-rNAME=N'
-     Set number register C or NAME to the value N.  C must be a
-     one-letter name; NAME can be of arbitrary length.  N can be any
-     'gtroff' numeric expression.  All register assignments happen
-     before loading any macro file (including the start-up file).
-
-'-R'
-     Preprocess with 'grefer'.  No mechanism is provided for passing
-     arguments to 'grefer' because most 'grefer' options have equivalent
-     commands that can be included in the file.  *Note grefer::, for
-     more details.
-
-     Note that 'gtroff' also accepts a '-R' option, which is not
-     accessible via 'groff'.  This option prevents the loading of the
-     'troffrc' and 'troffrc-end' files.
-
-'-s'
-     Preprocess with 'gsoelim'.
-
-'-S'
-     Safer mode.  Pass the '-S' option to 'gpic' and disable the 'open',
-     'opena', 'pso', 'sy', and 'pi' requests.  For security reasons,
-     this is enabled by default.
-
-'-t'
-     Preprocess with 'gtbl'.
-
-'-TDEV'
-     Prepare output for device DEV.  The default device is 'ps', unless
-     changed when 'groff' was configured and built.  The following are
-     the output devices currently available:
-
-     'ps'
-          For POSTSCRIPT printers and previewers.
-
-     'pdf'
-          For PDF viewers or printers.
-
-     'dvi'
-          For TeX DVI format.
-
-     'X75'
-          For a 75dpi X11 previewer.
-
-     'X75-12'
-          For a 75dpi X11 previewer with a 12pt base font in the
-          document.
-
-     'X100'
-          For a 100dpi X11 previewer.
-
-     'X100-12'
-          For a 100dpi X11 previewer with a 12pt base font in the
-          document.
-
-     'ascii'
-          For typewriter-like devices using the (7-bit) ASCII character
-          set.
-
-     'latin1'
-          For typewriter-like devices that support the Latin-1
-          (ISO 8859-1) character set.
-
-     'utf8'
-          For typewriter-like devices that use the Unicode (ISO 10646)
-          character set with UTF-8 encoding.
-
-     'cp1047'
-          For typewriter-like devices that use the EBCDIC encoding IBM
-          cp1047.
-
-     'lj4'
-          For HP LaserJet4-compatible (or other PCL5-compatible)
-          printers.
-
-     'lbp'
-          For Canon CAPSL printers (LBP-4 and LBP-8 series laser
-          printers).
-
-     'html'
-     'xhtml'
-          To produce HTML and XHTML output, respectively.  Note that
-          this driver consists of two parts, a preprocessor
-          ('pre-grohtml') and a postprocessor ('post-grohtml').
-
-     The predefined 'gtroff' string register '.T' contains the current
-     output device; the read-only number register '.T' is set to 1 if
-     this option is used (which is always true if 'groff' is used to
-     call 'gtroff').  *Note Built-in Registers::.
-
-     The postprocessor to be used for a device is specified by the
-     'postpro' command in the device description file.  (*Note Font
-     Files::, for more info.)  This can be overridden with the '-X'
-     option.
-
-'-U'
-     Unsafe mode.  This enables the 'open', 'opena', 'pso', 'sy', and
-     'pi' requests.
-
-'-wNAME'
-     Enable warning NAME.  Available warnings are described in *note
-     Debugging::.  Multiple '-w' options are allowed.
-
-'-WNAME'
-     Inhibit warning NAME.  Multiple '-W' options are allowed.
-
-'-v'
-     Make programs run by 'groff' print out their version number.
-
-'-V'
-     Print the pipeline on 'stdout' instead of executing it.  If
-     specified more than once, print the pipeline on 'stderr' and
-     execute it.
-
-'-X'
-     Preview with 'gxditview' instead of using the usual postprocessor.
-     This is unlikely to produce good results except with '-Tps'.
-
-     Note that this is not the same as using '-TX75' or '-TX100' to view
-     a document with 'gxditview': The former uses the metrics of the
-     specified device, whereas the latter uses X-specific fonts and
-     metrics.
-
-'-z'
-     Suppress output from 'gtroff'.  Only error messages are printed.
-
-'-Z'
-     Do not postprocess the output of 'gtroff'.  Normally 'groff'
-     automatically runs the appropriate postprocessor.
-
-
-File: groff.info,  Node: Environment,  Next: Macro Directories,  Prev: Groff Options,  Up: Invoking groff
-
-2.2 Environment
-===============
-
-There are also several environment variables (of the operating system,
-not within 'gtroff') that can modify the behavior of 'groff'.
-
-'GROFF_BIN_PATH'
-     This search path, followed by 'PATH', is used for commands executed
-     by 'groff'.
-
-'GROFF_COMMAND_PREFIX'
-     If this is set to X, then 'groff' runs 'Xtroff' instead of
-     'gtroff'.  This also applies to 'tbl', 'pic', 'eqn', 'grn', 'chem',
-     'refer', and 'soelim'.  It does not apply to 'grops', 'grodvi',
-     'grotty', 'pre-grohtml', 'post-grohtml', 'preconv', 'grolj4',
-     'gropdf', and 'gxditview'.
-
-     The default command prefix is determined during the installation
-     process.  If a non-GNU troff system is found, prefix 'g' is used,
-     none otherwise.
-
-'GROFF_ENCODING'
-     The value of this environment value is passed to the 'preconv'
-     preprocessor to select the encoding of input files.  Setting this
-     option implies 'groff''s command line option '-k' (this is, 'groff'
-     actually always calls 'preconv').  If set without a value, 'groff'
-     calls 'preconv' without arguments.  An explicit '-K' command line
-     option overrides the value of 'GROFF_ENCODING'.  See the manual
-     page of 'preconv' for details.
-
-'GROFF_FONT_PATH'
-     A colon-separated list of directories in which to search for the
-     'dev'NAME directory (before the default directories are tried).
-     *Note Font Directories::.
-
-'GROFF_TMAC_PATH'
-     A colon-separated list of directories in which to search for macro
-     files (before the default directories are tried).  *Note Macro
-     Directories::.
-
-'GROFF_TMPDIR'
-     The directory in which 'groff' creates temporary files.  If this is
-     not set and 'TMPDIR' is set, temporary files are created in that
-     directory.  Otherwise temporary files are created in a
-     system-dependent default directory (on Unix and GNU/Linux systems,
-     this is usually '/tmp').  'grops', 'grefer', 'pre-grohtml', and
-     'post-grohtml' can create temporary files in this directory.
-
-'GROFF_TYPESETTER'
-     The default output device.
-
-   Note that MS-DOS and MS-Windows ports of 'groff' use semi-colons,
-rather than colons, to separate the directories in the lists described
-above.
-
-
-File: groff.info,  Node: Macro Directories,  Next: Font Directories,  Prev: Environment,  Up: Invoking groff
-
-2.3 Macro Directories
-=====================
-
-All macro file names must be named 'NAME.tmac' or 'tmac.NAME' to make
-the '-mNAME' command line option work.  The 'mso' request doesn't have
-this restriction; any file name can be used, and 'gtroff' won't try to
-append or prepend the 'tmac' string.
-
-   Macro files are kept in the "tmac directories", all of which
-constitute the "tmac path".  The elements of the search path for macro
-files are (in that order):
-
-   * The directories specified with 'gtroff''s or 'groff''s '-M' command
-     line option.
-
-   * The directories given in the 'GROFF_TMAC_PATH' environment
-     variable.
-
-   * The current directory (only if in unsafe mode using the '-U'
-     command line switch).
-
-   * The home directory.
-
-   * A platform-dependent directory, a site-specific
-     (platform-independent) directory, and the main tmac directory; the
-     default locations are
-
-          /usr/local/lib/groff/site-tmac
-          /usr/local/share/groff/site-tmac
-          /usr/local/share/groff/1.22.3/tmac
-
-     assuming that the version of 'groff' is 1.22.3, and the
-     installation prefix was '/usr/local'.  It is possible to fine-tune
-     those directories during the installation process.
-
-
-File: groff.info,  Node: Font Directories,  Next: Paper Size,  Prev: Macro Directories,  Up: Invoking groff
-
-2.4 Font Directories
-====================
-
-Basically, there is no restriction how font files for 'groff' are named
-and how long font names are; however, to make the font family mechanism
-work (*note Font Families::), fonts within a family should start with
-the family name, followed by the shape.  For example, the Times family
-uses 'T' for the family name and 'R', 'B', 'I', and 'BI' to indicate the
-shapes 'roman', 'bold', 'italic', and 'bold italic', respectively.  Thus
-the final font names are 'TR', 'TB', 'TI', and 'TBI'.
-
-   All font files are kept in the "font directories", which constitute
-the "font path".  The file search functions always append the directory
-'dev'NAME, where NAME is the name of the output device.  Assuming, say,
-DVI output, and '/foo/bar' as a font directory, the font files for
-'grodvi' must be in '/foo/bar/devdvi'.
-
-   The elements of the search path for font files are (in that order):
-
-   * The directories specified with 'gtroff''s or 'groff''s '-F' command
-     line option.  All device drivers and some preprocessors also have
-     this option.
-
-   * The directories given in the 'GROFF_FONT_PATH' environment
-     variable.
-
-   * A site-specific directory and the main font directory; the default
-     locations are
-
-          /usr/local/share/groff/site-font
-          /usr/local/share/groff/1.22.3/font
-
-     assuming that the version of 'groff' is 1.22.3, and the
-     installation prefix was '/usr/local'.  It is possible to fine-tune
-     those directories during the installation process.
-
-
-File: groff.info,  Node: Paper Size,  Next: Invocation Examples,  Prev: Font Directories,  Up: Invoking groff
-
-2.5 Paper Size
-==============
-
-In groff, the page size for 'gtroff' and for output devices are handled
-separately.  *Note Page Layout::, for vertical manipulation of the page
-size.  *Note Line Layout::, for horizontal changes.
-
-   A default paper size can be set in the device's 'DESC' file.  Most
-output devices also have a command line option '-p' to override the
-default paper size and option '-l' to use landscape orientation.  *Note
-DESC File Format::, for a description of the 'papersize' keyword, which
-takes the same argument as '-p'.
-
-   A convenient shorthand to set a particular paper size for 'gtroff' is
-command line option '-dpaper=SIZE'.  This defines string 'paper', which
-is processed in file 'papersize.tmac' (loaded in the start-up file
-'troffrc' by default).  Possible values for SIZE are the same as the
-predefined values for the 'papersize' keyword (but only in lowercase)
-except 'a7'-'d7'.  An appended 'l' (ell) character denotes landscape
-orientation.
-
-   For example, use the following for PS output on A4 paper in landscape
-orientation:
-
-     groff -Tps -dpaper=a4l -P-pa4 -P-l -ms foo.ms > foo.ps
-
-   Note that it is up to the particular macro package to respect default
-page dimensions set in this way (most do).
-
-
-File: groff.info,  Node: Invocation Examples,  Prev: Paper Size,  Up: Invoking groff
-
-2.6 Invocation Examples
-=======================
-
-This section lists several common uses of 'groff' and the corresponding
-command lines.
-
-     groff file
-
-This command processes 'file' without a macro package or a preprocessor.
-The output device is the default, 'ps', and the output is sent to
-'stdout'.
-
-     groff -t -mandoc -Tascii file | less
-
-This is basically what a call to the 'man' program does.  'gtroff'
-processes the manual page 'file' with the 'mandoc' macro file (which in
-turn either calls the 'man' or the 'mdoc' macro package), using the
-'tbl' preprocessor and the ASCII output device.  Finally, the 'less'
-pager displays the result.
-
-     groff -X -m me file
-
-Preview 'file' with 'gxditview', using the 'me' macro package.  Since no
-'-T' option is specified, use the default device ('ps').  Note that you
-can either say '-m me' or '-me'; the latter is an anachronism from the
-early days of UNIX.(1)  (*note Invocation Examples-Footnote-1::)
-
-     groff -man -rD1 -z file
-
-Check 'file' with the 'man' macro package, forcing double-sided printing
-- don't produce any output.
-
-* Menu:
-
-* grog::
-
-
-File: groff.info,  Node: Invocation Examples-Footnotes,  Up: Invocation Examples
-
-   (1) The same is true for the other main macro packages that come with
-'groff': 'man', 'mdoc', 'ms', 'mm', and 'mandoc'.  This won't work in
-general; for example, to load 'trace.tmac', either '-mtrace' or
-'-m trace' must be used.
-
-
-File: groff.info,  Node: grog,  Prev: Invocation Examples,  Up: Invocation Examples
-
-2.6.1 'grog'
-------------
-
-'grog' reads files, guesses which of the 'groff' preprocessors and/or
-macro packages are required for formatting them, and prints the 'groff'
-command including those options on the standard output.  It generates
-one or more of the options '-e', '-man', '-me', '-mm', '-mom', '-ms',
-'-mdoc', '-mdoc-old', '-p', '-R', '-g', '-G', '-s', and '-t'.
-
-   A special file name '-' refers to the standard input.  Specifying no
-files also means to read the standard input.  Any specified options are
-included in the printed command.  No space is allowed between options
-and their arguments.  The only options recognized are '-C' (which is
-also passed on) to enable compatibility mode, and '-v' to print the
-version number and exit.
-
-   For example,
-
-     grog -Tdvi paper.ms
-
-guesses the appropriate command to print 'paper.ms' and then prints it
-to the command line after adding the '-Tdvi' option.  For direct
-execution, enclose the call to 'grog' in backquotes at the UNIX shell
-prompt:
-
-     `grog -Tdvi paper.ms` > paper.dvi
-
-As seen in the example, it is still necessary to redirect the output to
-something meaningful (i.e. either a file or a pager program like
-'less').
-
-
-File: groff.info,  Node: Tutorial for Macro Users,  Next: Macro Packages,  Prev: Invoking groff,  Up: Top
-
-3 Tutorial for Macro Users
-**************************
-
-Most users tend to use a macro package to format their papers.  This
-means that the whole breadth of 'groff' is not necessary for most
-people.  This chapter covers the material needed to efficiently use a
-macro package.
-
-* Menu:
-
-* Basics::
-* Common Features::
-
-
-File: groff.info,  Node: Basics,  Next: Common Features,  Prev: Tutorial for Macro Users,  Up: Tutorial for Macro Users
-
-3.1 Basics
-==========
-
-This section covers some of the basic concepts necessary to understand
-how to use a macro package.(1)  (*note Basics-Footnote-1::) References
-are made throughout to more detailed information, if desired.
-
-   'gtroff' reads an input file prepared by the user and outputs a
-formatted document suitable for publication or framing.  The input
-consists of text, or words to be printed, and embedded commands
-("requests" and "escapes"), which tell 'gtroff' how to format the
-output.  For more detail on this, see *note Embedded Commands::.
-
-   The word "argument" is used in this chapter to mean a word or number
-that appears on the same line as a request, and which modifies the
-meaning of that request.  For example, the request
-
-     .sp
-
-spaces one line, but
-
-     .sp 4
-
-spaces four lines.  The number 4 is an argument to the 'sp' request,
-which says to space four lines instead of one.  Arguments are separated
-from the request and from each other by spaces (_no_ tabs).  More
-details on this can be found in *note Request and Macro Arguments::.
-
-   The primary function of 'gtroff' is to collect words from input
-lines, fill output lines with those words, justify the right-hand margin
-by inserting extra spaces in the line, and output the result.  For
-example, the input:
-
-     Now is the time
-     for all good men
-     to come to the aid
-     of their party.
-     Four score and seven
-     years ago, etc.
-
-is read, packed onto output lines, and justified to produce:
-
-     Now is the time for all good men to come to the aid of their party.
-     Four score and seven years ago, etc.
-
-   Sometimes a new output line should be started even though the current
-line is not yet full; for example, at the end of a paragraph.  To do
-this it is possible to cause a "break", which starts a new output line.
-Some requests cause a break automatically, as normally do blank input
-lines and input lines beginning with a space.
-
-   Not all input lines are text to be formatted.  Some input lines are
-requests that describe how to format the text.  Requests always have a
-period ('.') or an apostrophe (''') as the first character of the input
-line.
-
-   The text formatter also does more complex things, such as
-automatically numbering pages, skipping over page boundaries, putting
-footnotes in the correct place, and so forth.
-
-   Here are a few hints for preparing text for input to 'gtroff'.
-
-   * First, keep the input lines short.  Short input lines are easier to
-     edit, and 'gtroff' packs words onto longer lines anyhow.
-
-   * In keeping with this, it is helpful to begin a new line after every
-     comma or phrase, since common corrections are to add or delete
-     sentences or phrases.
-
-   * End each sentence with two spaces - or better, start each sentence
-     on a new line.  'gtroff' recognizes characters that usually end a
-     sentence, and inserts sentence space accordingly.
-
-   * Do not hyphenate words at the end of lines - 'gtroff' is smart
-     enough to hyphenate words as needed, but is not smart enough to
-     take hyphens out and join a word back together.  Also, words such
-     as "mother-in-law" should not be broken over a line, since then a
-     space can occur where not wanted, such as "mother- in-law".
-
-   'gtroff' double-spaces output text automatically if you use the
-request '.ls 2'.  Reactivate single-spaced mode by typing '.ls 1'.(2)
-(*note Basics-Footnote-2::)
-
-   A number of requests allow to change the way the output looks,
-sometimes called the "layout" of the output page.  Most of these
-requests adjust the placing of "whitespace" (blank lines or spaces).
-
-   The 'bp' request starts a new page, causing a line break.
-
-   The request '.sp N' leaves N lines of blank space.  N can be omitted
-(meaning skip a single line) or can be of the form Ni (for N inches) or
-Nc (for N centimeters).  For example, the input:
-
-     .sp 1.5i
-     My thoughts on the subject
-     .sp
-
-leaves one and a half inches of space, followed by the line "My thoughts
-on the subject", followed by a single blank line (more measurement units
-are available, see *note Measurements::).
-
-   Text lines can be centered by using the 'ce' request.  The line after
-'ce' is centered (horizontally) on the page.  To center more than one
-line, use '.ce N' (where N is the number of lines to center), followed
-by the N lines.  To center many lines without counting them, type:
-
-     .ce 1000
-     lines to center
-     .ce 0
-
-The '.ce 0' request tells 'groff' to center zero more lines, in other
-words, stop centering.
-
-   All of these requests cause a break; that is, they always start a new
-line.  To start a new line without performing any other action, use
-'br'.
-
-
-File: groff.info,  Node: Basics-Footnotes,  Up: Basics
-
-   (1) This section is derived from 'Writing Papers with nroff using
--me' by Eric P. Allman.
-
-   (2) If you need finer granularity of the vertical space, use the
-'pvs' request (*note Changing Type Sizes::).
-
-
-File: groff.info,  Node: Common Features,  Prev: Basics,  Up: Tutorial for Macro Users
-
-3.2 Common Features
-===================
-
-'gtroff' provides very low-level operations for formatting a document.
-There are many common routine operations that are done in all documents.
-These common operations are written into "macros" and collected into a
-"macro package".
-
-   All macro packages provide certain common capabilities that fall into
-the following categories.
-
-* Menu:
-
-* Paragraphs::
-* Sections and Chapters::
-* Headers and Footers::
-* Page Layout Adjustment::
-* Displays::
-* Footnotes and Annotations::
-* Table of Contents::
-* Indices::
-* Paper Formats::
-* Multiple Columns::
-* Font and Size Changes::
-* Predefined Strings::
-* Preprocessor Support::
-* Configuration and Customization::
-
-
-File: groff.info,  Node: Paragraphs,  Next: Sections and Chapters,  Prev: Common Features,  Up: Common Features
-
-3.2.1 Paragraphs
-----------------
-
-One of the most common and most used capability is starting a paragraph.
-There are a number of different types of paragraphs, any of which can be
-initiated with macros supplied by the macro package.  Normally,
-paragraphs start with a blank line and the first line indented, like the
-text in this manual.  There are also block style paragraphs, which omit
-the indentation:
-
-     Some   men  look   at  constitutions   with  sanctimonious
-     reverence, and deem them like the ark of the covenant, too
-     sacred to be touched.
-
-And there are also indented paragraphs, which begin with a tag or label
-at the margin and the remaining text indented.
-
-     one   This is  the first paragraph.  Notice  how the first
-           line of  the resulting  paragraph lines up  with the
-           other lines in the paragraph.
-
-     longlabel
-           This  paragraph   had  a  long   label.   The  first
-           character of text on the first line does not line up
-           with  the  text  on  second  and  subsequent  lines,
-           although they line up with each other.
-
-   A variation of this is a bulleted list.
-
-     .     Bulleted lists start with a bullet.   It is possible
-           to use other glyphs instead of the bullet.  In nroff
-           mode using the ASCII character set for output, a dot
-           is used instead of a real bullet.
-
-
-File: groff.info,  Node: Sections and Chapters,  Next: Headers and Footers,  Prev: Paragraphs,  Up: Common Features
-
-3.2.2 Sections and Chapters
----------------------------
-
-Most macro packages supply some form of section headers.  The simplest
-kind is simply the heading on a line by itself in bold type.  Others
-supply automatically numbered section heading or different heading
-styles at different levels.  Some, more sophisticated, macro packages
-supply macros for starting chapters and appendices.
-
-
-File: groff.info,  Node: Headers and Footers,  Next: Page Layout Adjustment,  Prev: Sections and Chapters,  Up: Common Features
-
-3.2.3 Headers and Footers
--------------------------
-
-Every macro package gives some way to manipulate the "headers" and
-"footers" (also called "titles") on each page.  This is text put at the
-top and bottom of each page, respectively, which contain data like the
-current page number, the current chapter title, and so on.  Its
-appearance is not affected by the running text.  Some packages allow for
-different ones on the even and odd pages (for material printed in a book
-form).
-
-   The titles are called "three-part titles", that is, there is a
-left-justified part, a centered part, and a right-justified part.  An
-automatically generated page number may be put in any of these fields
-with the '%' character (see *note Page Layout::, for more details).
-
-
-File: groff.info,  Node: Page Layout Adjustment,  Next: Displays,  Prev: Headers and Footers,  Up: Common Features
-
-3.2.4 Page Layout
------------------
-
-Most macro packages let the user specify top and bottom margins and
-other details about the appearance of the printed pages.
-
-
-File: groff.info,  Node: Displays,  Next: Footnotes and Annotations,  Prev: Page Layout Adjustment,  Up: Common Features
-
-3.2.5 Displays
---------------
-
-"Displays" are sections of text to be set off from the body of the
-paper.  Major quotes, tables, and figures are types of displays, as are
-all the examples used in this document.
-
-   "Major quotes" are quotes that are several lines long, and hence are
-set in from the rest of the text without quote marks around them.
-
-   A "list" is an indented, single-spaced, unfilled display.  Lists
-should be used when the material to be printed should not be filled and
-justified like normal text, such as columns of figures or the examples
-used in this paper.
-
-   A "keep" is a display of lines that are kept on a single page if
-possible.  An example for a keep might be a diagram.  Keeps differ from
-lists in that lists may be broken over a page boundary whereas keeps are
-not.
-
-   "Floating keeps" move relative to the text.  Hence, they are good for
-things that are referred to by name, such as "See figure 3".  A floating
-keep appears at the bottom of the current page if it fits; otherwise, it
-appears at the top of the next page.  Meanwhile, the surrounding text
-'flows' around the keep, thus leaving no blank areas.
-
-
-File: groff.info,  Node: Footnotes and Annotations,  Next: Table of Contents,  Prev: Displays,  Up: Common Features
-
-3.2.6 Footnotes and Annotations
--------------------------------
-
-There are a number of requests to save text for later printing.
-
-   "Footnotes" are printed at the bottom of the current page.
-
-   "Delayed text" is very similar to a footnote except that it is
-printed when called for explicitly.  This allows a list of references to
-appear (for example) at the end of each chapter, as is the convention in
-some disciplines.
-
-   Most macro packages that supply this functionality also supply a
-means of automatically numbering either type of annotation.
-
-
-File: groff.info,  Node: Table of Contents,  Next: Indices,  Prev: Footnotes and Annotations,  Up: Common Features
-
-3.2.7 Table of Contents
------------------------
-
-"Tables of contents" are a type of delayed text having a tag (usually
-the page number) attached to each entry after a row of dots.  The table
-accumulates throughout the paper until printed, usually after the paper
-has ended.  Many macro packages provide the ability to have several
-tables of contents (e.g. a standard table of contents, a list of tables,
-etc).
-
-
-File: groff.info,  Node: Indices,  Next: Paper Formats,  Prev: Table of Contents,  Up: Common Features
-
-3.2.8 Indices
--------------
-
-While some macro packages use the term "index", none actually provide
-that functionality.  The facilities they call indices are actually more
-appropriate for tables of contents.
-
-   To produce a real index in a document, external tools like the
-'makeindex' program are necessary.
-
-
-File: groff.info,  Node: Paper Formats,  Next: Multiple Columns,  Prev: Indices,  Up: Common Features
-
-3.2.9 Paper Formats
--------------------
-
-Some macro packages provide stock formats for various kinds of
-documents.  Many of them provide a common format for the title and
-opening pages of a technical paper.  The 'mm' macros in particular
-provide formats for letters and memoranda.
-
-
-File: groff.info,  Node: Multiple Columns,  Next: Font and Size Changes,  Prev: Paper Formats,  Up: Common Features
-
-3.2.10 Multiple Columns
------------------------
-
-Some macro packages (but not 'man') provide the ability to have two or
-more columns on a page.
-
-
-File: groff.info,  Node: Font and Size Changes,  Next: Predefined Strings,  Prev: Multiple Columns,  Up: Common Features
-
-3.2.11 Font and Size Changes
-----------------------------
-
-The built-in font and size functions are not always intuitive, so all
-macro packages provide macros to make these operations simpler.
-
-
-File: groff.info,  Node: Predefined Strings,  Next: Preprocessor Support,  Prev: Font and Size Changes,  Up: Common Features
-
-3.2.12 Predefined Strings
--------------------------
-
-Most macro packages provide various predefined strings for a variety of
-uses; examples are sub- and superscripts, printable dates, quotes and
-various special characters.
-
-
-File: groff.info,  Node: Preprocessor Support,  Next: Configuration and Customization,  Prev: Predefined Strings,  Up: Common Features
-
-3.2.13 Preprocessor Support
----------------------------
-
-All macro packages provide support for various preprocessors and may
-extend their functionality.
-
-   For example, all macro packages mark tables (which are processed with
-'gtbl') by placing them between 'TS' and 'TE' macros.  The 'ms' macro
-package has an option, '.TS H', that prints a caption at the top of a
-new page (when the table is too long to fit on a single page).
-
-
-File: groff.info,  Node: Configuration and Customization,  Prev: Preprocessor Support,  Up: Common Features
-
-3.2.14 Configuration and Customization
---------------------------------------
-
-Some macro packages provide means of customizing many of the details of
-how the package behaves.  This ranges from setting the default type size
-to changing the appearance of section headers.
-
-
-File: groff.info,  Node: Macro Packages,  Next: gtroff Reference,  Prev: Tutorial for Macro Users,  Up: Top
-
-4 Macro Packages
-****************
-
-This chapter documents the main macro packages that come with 'groff'.
-
-   Different main macro packages can't be used at the same time; for
-example
-
-     groff -m man foo.man -m ms bar.doc
-
-doesn't work.  Note that option arguments are processed before
-non-option arguments; the above (failing) sample is thus reordered to
-
-     groff -m man -m ms foo.man bar.doc
-
-* Menu:
-
-* man::
-* mdoc::
-* ms::
-* me::
-* mm::
-* mom::
-
-
-File: groff.info,  Node: man,  Next: mdoc,  Prev: Macro Packages,  Up: Macro Packages
-
-4.1 'man'
-=========
-
-This is the most popular and probably the most important macro package
-of 'groff'.  It is easy to use, and a vast majority of manual pages are
-based on it.
-
-* Menu:
-
-* Man options::
-* Man usage::
-* Man font macros::
-* Miscellaneous man macros::
-* Predefined man strings::
-* Preprocessors in man pages::
-* Optional man extensions::
-
-
-File: groff.info,  Node: Man options,  Next: Man usage,  Prev: man,  Up: man
-
-4.1.1 Options
--------------
-
-The command line format for using the 'man' macros with 'groff' is:
-
-     groff -m man [ -rLL=LENGTH ] [ -rLT=LENGTH ] [ -rFT=DIST ]
-           [ -rcR=1 ] [ -rC1 ] [ -rD1 ] [-rHY=FLAGS ]
-           [ -rPNNN ] [ -rSXX ] [ -rXNNN ]
-           [ -rIN=LENGTH ] [ -rSN=LENGTH ] [ FILES... ]
-
-It is possible to use '-man' instead of '-m man'.
-
-'-rcR=1'
-     This option (the default if a TTY output device is used) creates a
-     single, very long page instead of multiple pages.  Use '-rcR=0' to
-     disable it.
-
-'-rC1'
-     If more than one manual page is given on the command line, number
-     the pages continuously, rather than starting each at 1.
-
-'-rD1'
-     Double-sided printing.  Footers for even and odd pages are
-     formatted differently.
-
-'-rFT=DIST'
-     Set the position of the footer text to DIST.  If positive, the
-     distance is measured relative to the top of the page, otherwise it
-     is relative to the bottom.  The default is -0.5i.
-
-'-rHY=FLAGS'
-     Set hyphenation flags.  Possible values are 1 to hyphenate without
-     restrictions, 2 to not hyphenate the last word on a page, 4 to not
-     hyphenate the last two characters of a word, and 8 to not hyphenate
-     the first two characters of a word.  These values are additive; the
-     default is 14.
-
-'-rIN=LENGTH'
-     Set the body text indentation to LENGTH.  If not specified, the
-     indentation defaults to 7n (7 characters) in nroff mode and 7.2n
-     otherwise.  For nroff, this value should always be an integer
-     multiple of unit 'n' to get consistent indentation.
-
-'-rLL=LENGTH'
-     Set line length to LENGTH.  If not specified, the line length is
-     set to respect any value set by a prior 'll' request (which _must_
-     be in effect when the 'TH' macro is invoked), if this differs from
-     the built-in default for the formatter; otherwise it defaults to
-     78n in nroff mode (this is 78 characters per line) and 6.5i in
-     troff mode.(1)  (*note Man options-Footnote-1::)
-
-'-rLT=LENGTH'
-     Set title length to LENGTH.  If not specified, the title length
-     defaults to the line length.
-
-'-rPNNN'
-     Page numbering starts with NNN rather than with 1.
-
-'-rSXX'
-     Use XX (which can be 10, 11, or 12pt) as the base document font
-     size instead of the default value of 10pt.
-
-'-rSN=LENGTH'
-     Set the indentation for sub-subheadings to LENGTH.  If not
-     specified, the indentation defaults to 3n.
-
-'-rXNNN'
-     After page NNN, number pages as NNNa, NNNb, NNNc, etc.  For
-     example, the option '-rX2' produces the following page numbers: 1,
-     2, 2a, 2b, 2c, etc.
-
-
-File: groff.info,  Node: Man options-Footnotes,  Up: Man options
-
-   (1) Note that the use of a '.ll LENGTH' request to initialize the
-line length, prior to use of the 'TH' macro, is supported for backward
-compatibility with some versions of the 'man' program.  _Always_ use the
-'-rLL=LENGTH' option, or an equivalent '.nr LL LENGTH' request, in
-preference to such a '.ll LENGTH' request.  In particular, note that in
-nroff mode, the request '.ll 65n', (with any LENGTH expression that
-evaluates equal to 65n, i.e., the formatter's default line length in
-nroff mode), does _not_ set the line length to 65n (it is adjusted to
-the 'man' macro package's default setting of 78n), whereas the use of
-the '-rLL=65n' option, or the '.nr LL 65n' request _does_ establish a
-line length of 65n.
-
-
-File: groff.info,  Node: Man usage,  Next: Man font macros,  Prev: Man options,  Up: man
-
-4.1.2 Usage
------------
-
-This section describes the available macros for manual pages.  For
-further customization, put additional macros and requests into the file
-'man.local', which is loaded immediately after the 'man' package.
-
- -- Macro: .TH title section [extra1 [extra2 [extra3]]]
-     Set the title of the man page to TITLE and the section to SECTION,
-     which must have a value between 1 and 8.  The value of SECTION may
-     also have a string appended, e.g. '.pm', to indicate a specific
-     subsection of the man pages.
-
-     Both TITLE and SECTION are positioned at the left and right in the
-     header line (with SECTION in parentheses immediately appended to
-     TITLE.  EXTRA1 is positioned in the middle of the footer line.
-     EXTRA2 is positioned at the left in the footer line (or at the left
-     on even pages and at the right on odd pages if double-sided
-     printing is active).  EXTRA3 is centered in the header line.
-
-     For HTML and XHTML output, headers and footers are completely
-     suppressed.
-
-     Additionally, this macro starts a new page; the new line number
-     is 1 again (except if the '-rC1' option is given on the command
-     line) - this feature is intended only for formatting multiple man
-     pages; a single man page should contain exactly one 'TH' macro at
-     the beginning of the file.
-
- -- Macro: .SH [heading]
-     Set up an unnumbered section heading sticking out to the left.
-     Prints out all the text following 'SH' up to the end of the line
-     (or the text in the next line if there is no argument to 'SH') in
-     bold face (or the font specified by the string 'HF'), one size
-     larger than the base document size.  Additionally, the left margin
-     and the indentation for the following text is reset to its default
-     value.
-
- -- Macro: .SS [heading]
-     Set up an unnumbered (sub)section heading.  Prints out all the text
-     following 'SS' up to the end of the line (or the text in the next
-     line if there is no argument to 'SS') in bold face (or the font
-     specified by the string 'HF'), at the same size as the base
-     document size.  Additionally, the left margin and the indentation
-     for the following text is reset to its default value.
-
- -- Macro: .TP [nnn]
-     Set up an indented paragraph with label.  The indentation is set to
-     NNN if that argument is supplied (the default unit is 'n' if
-     omitted), otherwise it is set to the previous indentation value
-     specified with 'TP', 'IP', or 'HP' (or to the default value if none
-     of them have been used yet).
-
-     The first line of text following this macro is interpreted as a
-     string to be printed flush-left, as it is appropriate for a label.
-     It is not interpreted as part of a paragraph, so there is no
-     attempt to fill the first line with text from the following input
-     lines.  Nevertheless, if the label is not as wide as the
-     indentation the paragraph starts at the same line (but indented),
-     continuing on the following lines.  If the label is wider than the
-     indentation the descriptive part of the paragraph begins on the
-     line following the label, entirely indented.  Note that neither
-     font shape nor font size of the label is set to a default value; on
-     the other hand, the rest of the text has default font settings.
-
- -- Macro: .LP
- -- Macro: .PP
- -- Macro: .P
-     These macros are mutual aliases.  Any of them causes a line break
-     at the current position, followed by a vertical space downwards by
-     the amount specified by the 'PD' macro.  The font size and shape
-     are reset to the default value (10pt roman if no '-rS' option is
-     given on the command line).  Finally, the current left margin and
-     the indentation is restored.
-
- -- Macro: .IP [designator [nnn]]
-     Set up an indented paragraph, using DESIGNATOR as a tag to mark its
-     beginning.  The indentation is set to NNN if that argument is
-     supplied (default unit is 'n'), otherwise it is set to the previous
-     indentation value specified with 'TP', 'IP', or 'HP' (or the
-     default value if none of them have been used yet).  Font size and
-     face of the paragraph (but not the designator) are reset to their
-     default values.
-
-     To start an indented paragraph with a particular indentation but
-     without a designator, use '""' (two double quotes) as the first
-     argument of 'IP'.
-
-     For example, to start a paragraph with bullets as the designator
-     and 4 en indentation, write
-
-          .IP \(bu 4
-
- -- Macro: .HP [nnn]
-     Set up a paragraph with hanging left indentation.  The indentation
-     is set to NNN if that argument is supplied (default unit is 'n'),
-     otherwise it is set to the previous indentation value specified
-     with 'TP', 'IP', or 'HP' (or the default value if non of them have
-     been used yet).  Font size and face are reset to their default
-     values.
-
- -- Macro: .RS [nnn]
-     Move the left margin to the right by the value NNN if specified
-     (default unit is 'n'); otherwise it is set to the previous
-     indentation value specified with 'TP', 'IP', or 'HP' (or to the
-     default value if none of them have been used yet).  The indentation
-     value is then set to the default.
-
-     Calls to the 'RS' macro can be nested.
-
- -- Macro: .RE [nnn]
-     Move the left margin back to level NNN, restoring the previous left
-     margin.  If no argument is given, it moves one level back.  The
-     first level (i.e., no call to 'RS' yet) has number 1, and each call
-     to 'RS' increases the level by 1.
-
-   To summarize, the following macros cause a line break with the
-insertion of vertical space (which amount can be changed with the 'PD'
-macro): 'SH', 'SS', 'TP', 'LP' ('PP', 'P'), 'IP', and 'HP'.
-
-   The macros 'RS' and 'RE' also cause a break but do not insert
-vertical space.
-
-   Finally, the macros 'SH', 'SS', 'LP' ('PP', 'P'), and 'RS' reset the
-indentation to its default value.
-
-
-File: groff.info,  Node: Man font macros,  Next: Miscellaneous man macros,  Prev: Man usage,  Up: man
-
-4.1.3 Macros to set fonts
--------------------------
-
-The standard font is roman; the default text size is 10 point.  If
-command line option '-rS=N' is given, use Npt as the default text size.
-
- -- Macro: .SM [text]
-     Set the text on the same line or the text on the next line in a
-     font that is one point size smaller than the default font.
-
- -- Macro: .SB [text]
-     Set the text on the same line or the text on the next line in bold
-     face font, one point size smaller than the default font.
-
- -- Macro: .BI text
-     Set its arguments alternately in bold face and italic, without a
-     space between the arguments.  Thus,
-
-          .BI this "word and" that
-
-     produces "thisword andthat" with "this" and "that" in bold face,
-     and "word and" in italics.
-
- -- Macro: .IB text
-     Set its arguments alternately in italic and bold face, without a
-     space between the arguments.
-
- -- Macro: .RI text
-     Set its arguments alternately in roman and italic, without a space
-     between the arguments.
-
- -- Macro: .IR text
-     Set its arguments alternately in italic and roman, without a space
-     between the arguments.
-
- -- Macro: .BR text
-     Set its arguments alternately in bold face and roman, without a
-     space between the arguments.
-
- -- Macro: .RB text
-     Set its arguments alternately in roman and bold face, without a
-     space between the arguments.
-
- -- Macro: .B [text]
-     Set TEXT in bold face.  If no text is present on the line where the
-     macro is called, then the text of the next line appears in bold
-     face.
-
- -- Macro: .I [text]
-     Set TEXT in italic.  If no text is present on the line where the
-     macro is called, then the text of the next line appears in italic.
-
-
-File: groff.info,  Node: Miscellaneous man macros,  Next: Predefined man strings,  Prev: Man font macros,  Up: man
-
-4.1.4 Miscellaneous macros
---------------------------
-
-The default indentation is 7.2n in troff mode and 7n in nroff mode
-except for 'grohtml', which ignores indentation.
-
- -- Macro: .DT
-     Set tabs every 0.5 inches.  Since this macro is always executed
-     during a call to the 'TH' macro, it makes sense to call it only if
-     the tab positions have been changed.
-
- -- Macro: .PD [nnn]
-     Adjust the empty space before a new paragraph (or section).  The
-     optional argument gives the amount of space (default unit is 'v');
-     without parameter, the value is reset to its default value (1 line
-     in nroff mode, 0.4v otherwise).
-
-     This affects the macros 'SH', 'SS', 'TP', 'LP' (as well as 'PP' and
-     'P'), 'IP', and 'HP'.
-
-   The following two macros are included for BSD compatibility.
-
- -- Macro: .AT [system [release]]
-     Alter the footer for use with AT&T manpages.  This command exists
-     only for compatibility; don't use it.  The first argument SYSTEM
-     can be:
-
-     '3'
-          7th Edition (the default)
-
-     '4'
-          System III
-
-     '5'
-          System V
-
-     An optional second argument RELEASE to 'AT' specifies the release
-     number (such as "System V Release 3").
-
- -- Macro: .UC [version]
-     Alters the footer for use with BSD manpages.  This command exists
-     only for compatibility; don't use it.  The argument can be:
-
-     '3'
-          3rd Berkeley Distribution (the default)
-
-     '4'
-          4th Berkeley Distribution
-
-     '5'
-          4.2 Berkeley Distribution
-
-     '6'
-          4.3 Berkeley Distribution
-
-     '7'
-          4.4 Berkeley Distribution
-
-
-File: groff.info,  Node: Predefined man strings,  Next: Preprocessors in man pages,  Prev: Miscellaneous man macros,  Up: man
-
-4.1.5 Predefined strings
-------------------------
-
-The following strings are defined:
-
- -- String: \*[S]
-     Switch back to the default font size.
-
- -- String: \*[HF]
-     The typeface used for headings.  The default is 'B'.
-
- -- String: \*[R]
-     The 'registered' sign.
-
- -- String: \*[Tm]
-     The 'trademark' sign.
-
- -- String: \*[lq]
- -- String: \*[rq]
-     Left and right quote.  This is equal to '\(lq' and '\(rq',
-     respectively.
-
-
-File: groff.info,  Node: Preprocessors in man pages,  Next: Optional man extensions,  Prev: Predefined man strings,  Up: man
-
-4.1.6 Preprocessors in 'man' pages
-----------------------------------
-
-If a preprocessor like 'gtbl' or 'geqn' is needed, it has become common
-usage to make the first line of the man page look like this:
-
-     '\" WORD
-
-Note the single space character after the double quote.  WORD consists
-of letters for the needed preprocessors: 'e' for 'geqn', 'r' for
-'grefer', 't' for 'gtbl'.  Modern implementations of the 'man' program
-read this first line and automatically call the right preprocessor(s).
-
-
-File: groff.info,  Node: Optional man extensions,  Prev: Preprocessors in man pages,  Up: man
-
-4.1.7 Optional 'man' extensions
--------------------------------
-
-Use the file 'man.local' for local extensions to the 'man' macros or for
-style changes.
-
-Custom headers and footers
-..........................
-
-In groff versions 1.18.2 and later, you can specify custom headers and
-footers by redefining the following macros in 'man.local'.
-
- -- Macro: .PT
-     Control the content of the headers.  Normally, the header prints
-     the command name and section number on either side, and the
-     optional fifth argument to 'TH' in the center.
-
- -- Macro: .BT
-     Control the content of the footers.  Normally, the footer prints
-     the page number and the third and fourth arguments to 'TH'.
-
-     Use the 'FT' number register to specify the footer position.  The
-     default is -0.5i.
-
-Ultrix-specific man macros
-..........................
-
-The 'groff' source distribution includes a file named 'man.ultrix',
-containing macros compatible with the Ultrix variant of 'man'.  Copy
-this file into 'man.local' (or use the 'mso' request to load it) to
-enable the following macros.
-
- -- Macro: .CT key
-     Print '<CTRL/KEY>'.
-
- -- Macro: .CW
-     Print subsequent text using the constant width (Courier) typeface.
-
- -- Macro: .Ds
-     Begin a non-filled display.
-
- -- Macro: .De
-     End a non-filled display started with 'Ds'.
-
- -- Macro: .EX [indent]
-     Begin a non-filled display using the constant width (Courier)
-     typeface.  Use the optional INDENT argument to indent the display.
-
- -- Macro: .EE
-     End a non-filled display started with 'EX'.
-
- -- Macro: .G [text]
-     Set TEXT in Helvetica.  If no text is present on the line where the
-     macro is called, then the text of the next line appears in
-     Helvetica.
-
- -- Macro: .GL [text]
-     Set TEXT in Helvetica Oblique.  If no text is present on the line
-     where the macro is called, then the text of the next line appears
-     in Helvetica Oblique.
-
- -- Macro: .HB [text]
-     Set TEXT in Helvetica Bold.  If no text is present on the line
-     where the macro is called, then all text up to the next 'HB'
-     appears in Helvetica Bold.
-
- -- Macro: .TB [text]
-     Identical to 'HB'.
-
- -- Macro: .MS title sect [punct]
-     Set a manpage reference in Ultrix format.  The TITLE is in Courier
-     instead of italic.  Optional punctuation follows the section number
-     without an intervening space.
-
- -- Macro: .NT ['C'] [title]
-     Begin a note.  Print the optional title, or the word "Note",
-     centered on the page.  Text following the macro makes up the body
-     of the note, and is indented on both sides.  If the first argument
-     is 'C', the body of the note is printed centered (the second
-     argument replaces the word "Note" if specified).
-
- -- Macro: .NE
-     End a note begun with 'NT'.
-
- -- Macro: .PN path [punct]
-     Set the path name in constant width (Courier), followed by optional
-     punctuation.
-
- -- Macro: .Pn [punct] path [punct]
-     If called with two arguments, identical to 'PN'.  If called with
-     three arguments, set the second argument in constant width
-     (Courier), bracketed by the first and third arguments in the
-     current font.
-
- -- Macro: .R
-     Switch to roman font and turn off any underlining in effect.
-
- -- Macro: .RN
-     Print the string '<RETURN>'.
-
- -- Macro: .VS ['4']
-     Start printing a change bar in the margin if the number '4' is
-     specified.  Otherwise, this macro does nothing.
-
- -- Macro: .VE
-     End printing the change bar begun by 'VS'.
-
-Simple example
-..............
-
-The following example 'man.local' file alters the 'SH' macro to add some
-extra vertical space before printing the heading.  Headings are printed
-in Helvetica Bold.
-
-     .\" Make the heading fonts Helvetica
-     .ds HF HB
-     .
-     .\" Put more whitespace in front of headings.
-     .rn SH SH-orig
-     .de SH
-     .  if t .sp (u;\\n[PD]*2)
-     .  SH-orig \\$*
-     ..
-
-
-File: groff.info,  Node: mdoc,  Next: ms,  Prev: man,  Up: Macro Packages
-
-4.2 'mdoc'
-==========
-
-See the 'groff_mdoc(7)' man page (type 'man groff_mdoc' at the command
-line).
-
-
-File: groff.info,  Node: ms,  Next: me,  Prev: mdoc,  Up: Macro Packages
-
-4.3 'ms'
-========
-
-The '-ms' macros are suitable for reports, letters, books, user manuals,
-and so forth.  The package provides macros for cover pages, section
-headings, paragraphs, lists, footnotes, pagination, and a table of
-contents.
-
-* Menu:
-
-* ms Intro::
-* General ms Structure::
-* ms Document Control Registers::
-* ms Cover Page Macros::
-* ms Body Text::
-* ms Page Layout::
-* Differences from AT&T ms::
-* Naming Conventions::
-
-
-File: groff.info,  Node: ms Intro,  Next: General ms Structure,  Prev: ms,  Up: ms
-
-4.3.1 Introduction to 'ms'
---------------------------
-
-The original '-ms' macros were included with AT&T 'troff' as well as the
-'man' macros.  While the 'man' package is intended for brief documents
-that can be read on-line as well as printed, the 'ms' macros are
-suitable for longer documents that are meant to be printed rather than
-read on-line.
-
-   The 'ms' macro package included with 'groff' is a complete, bottom-up
-re-implementation.  Several macros (specific to AT&T or Berkeley) are
-not included, while several new commands are.  *Note Differences from
-AT&T ms::, for more information.
-
-
-File: groff.info,  Node: General ms Structure,  Next: ms Document Control Registers,  Prev: ms Intro,  Up: ms
-
-4.3.2 General structure of an 'ms' document
--------------------------------------------
-
-The 'ms' macro package expects a certain amount of structure, but not as
-much as packages such as 'man' or 'mdoc'.
-
-   The simplest documents can begin with a paragraph macro (such as 'LP'
-or 'PP'), and consist of text separated by paragraph macros or even
-blank lines.  Longer documents have a structure as follows:
-
-*Document type*
-     If you invoke the 'RP' (report) macro on the first line of the
-     document, 'groff' prints the cover page information on its own
-     page; otherwise it prints the information on the first page with
-     your document text immediately following.  Other document formats
-     found in AT&T 'troff' are specific to AT&T or Berkeley, and are not
-     supported in 'groff'.
-
-*Format and layout*
-     By setting number registers, you can change your document's type
-     (font and size), margins, spacing, headers and footers, and
-     footnotes.  *Note ms Document Control Registers::, for more
-     details.
-
-*Cover page*
-     A cover page consists of a title, the author's name and
-     institution, an abstract, and the date.(1)  (*note General ms
-     Structure-Footnote-1::) *Note ms Cover Page Macros::, for more
-     details.
-
-*Body*
-     Following the cover page is your document.  You can use the 'ms'
-     macros to write reports, letters, books, and so forth.  The package
-     is designed for structured documents, consisting of paragraphs
-     interspersed with headings and augmented by lists, footnotes,
-     tables, and other common constructs.  *Note ms Body Text::, for
-     more details.
-
-*Table of contents*
-     Longer documents usually include a table of contents, which you can
-     invoke by placing the 'TC' macro at the end of your document.  The
-     'ms' macros have minimal indexing facilities, consisting of the
-     'IX' macro, which prints an entry on standard error.  Printing the
-     table of contents at the end is necessary since 'groff' is a
-     single-pass text formatter, thus it cannot determine the page
-     number of each section until that section has actually been set and
-     printed.  Since 'ms' output is intended for hardcopy, you can
-     manually relocate the pages containing the table of contents
-     between the cover page and the body text after printing.
-
-
-File: groff.info,  Node: General ms Structure-Footnotes,  Up: General ms Structure
-
-   (1) Actually, only the title is required.
-
-
-File: groff.info,  Node: ms Document Control Registers,  Next: ms Cover Page Macros,  Prev: General ms Structure,  Up: ms
-
-4.3.3 Document control registers
---------------------------------
-
-The following is a list of document control number registers.  For the
-sake of consistency, set registers related to margins at the beginning
-of your document, or just after the 'RP' macro.  You can set other
-registers later in your document, but you should keep them together at
-the beginning to make them easy to find and edit as necessary.
-
-Margin Settings
-...............
-
- -- Register: \n[PO]
-     Defines the page offset (i.e., the left margin).  There is no
-     explicit right margin setting; the combination of the 'PO' and 'LL'
-     registers implicitly define the right margin width.
-
-     Effective: next page.
-
-     Default value: 1i.
-
- -- Register: \n[LL]
-     Defines the line length (i.e., the width of the body text).
-
-     Effective: next paragraph.
-
-     Default: 6i.
-
- -- Register: \n[LT]
-     Defines the title length (i.e., the header and footer width).  This
-     is usually the same as 'LL', but not necessarily.
-
-     Effective: next paragraph.
-
-     Default: 6i.
-
- -- Register: \n[HM]
-     Defines the header margin height at the top of the page.
-
-     Effective: next page.
-
-     Default: 1i.
-
- -- Register: \n[FM]
-     Defines the footer margin height at the bottom of the page.
-
-     Effective: next page.
-
-     Default: 1i.
-
-Text Settings
-.............
-
- -- Register: \n[PS]
-     Defines the point size of the body text.  If the value is larger
-     than or equal to 1000, divide it by 1000 to get a fractional point
-     size.  For example, '.nr PS 10250' sets the document's point size
-     to 10.25p.
-
-     Effective: next paragraph.
-
-     Default: 10p.
-
- -- Register: \n[VS]
-     Defines the space between lines (line height plus leading).  If the
-     value is larger than or equal to 1000, divide it by 1000 to get a
-     fractional point size.  Due to backwards compatibility, 'VS' must
-     be smaller than 40000 (this is 40.0p).
-
-     Effective: next paragraph.
-
-     Default: 12p.
-
- -- Register: \n[PSINCR]
-     Defines an increment in point size, which is applied to section
-     headings at nesting levels below the value specified in 'GROWPS'.
-     The value of 'PSINCR' should be specified in points, with the p
-     scaling factor, and may include a fractional component; for
-     example, '.nr PSINCR 1.5p' sets a point size increment of 1.5p.
-
-     Effective: next section heading.
-
-     Default: 1p.
-
- -- Register: \n[GROWPS]
-     Defines the heading level below which the point size increment set
-     by 'PSINCR' becomes effective.  Section headings at and above the
-     level specified by 'GROWPS' are printed at the point size set by
-     'PS'; for each level below the value of 'GROWPS', the point size is
-     increased in steps equal to the value of 'PSINCR'.  Setting
-     'GROWPS' to any value less than 2 disables the incremental heading
-     size feature.
-
-     Effective: next section heading.
-
-     Default: 0.
-
- -- Register: \n[HY]
-     Defines the hyphenation level.  'HY' sets safely the value of the
-     low-level 'hy' register.  Setting the value of 'HY' to 0 is
-     equivalent to using the 'nh' request.
-
-     Effective: next paragraph.
-
-     Default: 14.
-
- -- Register: \n[FAM]
-     Defines the font family used to typeset the document.
-
-     Effective: next paragraph.
-
-     Default: as defined in the output device.
-
-Paragraph Settings
-..................
-
- -- Register: \n[PI]
-     Defines the initial indentation of a ('PP' macro) paragraph.
-
-     Effective: next paragraph.
-
-     Default: 5n.
-
- -- Register: \n[PD]
-     Defines the space between paragraphs.
-
-     Effective: next paragraph.
-
-     Default: 0.3v.
-
- -- Register: \n[QI]
-     Defines the indentation on both sides of a quoted ('QP' macro)
-     paragraph.
-
-     Effective: next paragraph.
-
-     Default: 5n.
-
- -- Register: \n[PORPHANS]
-     Defines the minimum number of initial lines of any paragraph that
-     should be kept together, to avoid orphan lines at the bottom of a
-     page.  If a new paragraph is started close to the bottom of a page,
-     and there is insufficient space to accommodate 'PORPHANS' lines
-     before an automatic page break, then the page break is forced,
-     before the start of the paragraph.
-
-     Effective: next paragraph.
-
-     Default: 1.
-
- -- Register: \n[HORPHANS]
-     Defines the minimum number of lines of the following paragraph that
-     should be kept together with any section heading introduced by the
-     'NH' or 'SH' macros.  If a section heading is placed close to the
-     bottom of a page, and there is insufficient space to accommodate
-     both the heading and at least 'HORPHANS' lines of the following
-     paragraph, before an automatic page break, then the page break is
-     forced before the heading.
-
-     Effective: next paragraph.
-
-     Default: 1.
-
-Footnote Settings
-.................
-
- -- Register: \n[FL]
-     Defines the length of a footnote.
-
-     Effective: next footnote.
-
-     Default: '\n[LL]' * 5 / 6.
-
- -- Register: \n[FI]
-     Defines the footnote indentation.
-
-     Effective: next footnote.
-
-     Default: 2n.
-
- -- Register: \n[FF]
-     The footnote format:
-     '0'
-          Print the footnote number as a superscript; indent the
-          footnote (default).
-
-     '1'
-          Print the number followed by a period (like 1.) and indent the
-          footnote.
-
-     '2'
-          Like 1, without an indentation.
-
-     '3'
-          Like 1, but print the footnote number as a hanging paragraph.
-
-     Effective: next footnote.
-
-     Default: 0.
-
- -- Register: \n[FPS]
-     Defines the footnote point size.  If the value is larger than or
-     equal to 1000, divide it by 1000 to get a fractional point size.
-
-     Effective: next footnote.
-
-     Default: '\n[PS]' - 2.
-
- -- Register: \n[FVS]
-     Defines the footnote vertical spacing.  If the value is larger than
-     or equal to 1000, divide it by 1000 to get a fractional point size.
-
-     Effective: next footnote.
-
-     Default: '\n[FPS]' + 2.
-
- -- Register: \n[FPD]
-     Defines the footnote paragraph spacing.
-
-     Effective: next footnote.
-
-     Default: '\n[PD]' / 2.
-
-Miscellaneous Number Registers
-..............................
-
- -- Register: \n[MINGW]
-     Defines the minimum width between columns in a multi-column
-     document.
-
-     Effective: next page.
-
-     Default: 2n.
-
- -- Register: \n[DD]
-     Sets the vertical spacing before and after a display, a 'tbl'
-     table, an 'eqn' equation, or a 'pic' image.
-
-     Effective: next paragraph.
-
-     Default: 0.5v.
-
-
-File: groff.info,  Node: ms Cover Page Macros,  Next: ms Body Text,  Prev: ms Document Control Registers,  Up: ms
-
-4.3.4 Cover page macros
------------------------
-
-Use the following macros to create a cover page for your document in the
-order shown.
-
- -- Macro: .RP ['no']
-     Specifies the report format for your document.  The report format
-     creates a separate cover page.  The default action (no 'RP' macro)
-     is to print a subset of the cover page on page 1 of your document.
-
-     If you use the word 'no' as an optional argument, 'groff' prints a
-     title page but does not repeat any of the title page information
-     (title, author, abstract, etc.) on page 1 of the document.
-
- -- Macro: .P1
-     (P-one) Prints the header on page 1.  The default is to suppress
-     the header.
-
- -- Macro: .DA [...]
-     (optional) Prints the current date, or the arguments to the macro
-     if any, on the title page (if specified) and in the footers.  This
-     is the default for 'nroff'.
-
- -- Macro: .ND [...]
-     (optional) Prints the current date, or the arguments to the macro
-     if any, on the title page (if specified) but not in the footers.
-     This is the default for 'troff'.
-
- -- Macro: .TL
-     Specifies the document title.  'groff' collects text following the
-     'TL' macro into the title, until reaching the author name or
-     abstract.
-
- -- Macro: .AU
-     Specifies the author's name, which appears on the line (or lines)
-     immediately following.  You can specify multiple authors as
-     follows:
-
-          .AU
-          John Doe
-          .AI
-          University of West Bumblefuzz
-          .AU
-          Martha Buck
-          .AI
-          Monolithic Corporation
-
-          ...
-
- -- Macro: .AI
-     Specifies the author's institution.  You can specify multiple
-     institutions in the same way that you specify multiple authors.
-
- -- Macro: .AB ['no']
-     Begins the abstract.  The default is to print the word ABSTRACT,
-     centered and in italics, above the text of the abstract.  The word
-     'no' as an optional argument suppresses this heading.
-
- -- Macro: .AE
-     Ends the abstract.
-
-   The following is example mark-up for a title page.
-
-     .RP
-     .TL
-     The Inevitability of Code Bloat
-     in Commercial and Free Software
-     .AU
-     J. Random Luser
-     .AI
-     University of West Bumblefuzz
-     .AB
-     This report examines the long-term growth
-     of the code bases in two large, popular software
-     packages; the free Emacs and the commercial
-     Microsoft Word.
-     While differences appear in the type or order
-     of features added, due to the different
-     methodologies used, the results are the same
-     in the end.
-     .PP
-     The free software approach is shown to be
-     superior in that while free software can
-     become as bloated as commercial offerings,
-     free software tends to have fewer serious
-     bugs and the added features are in line with
-     user demand.
-     .AE
-
-     ... the rest of the paper follows ...
-
-
-File: groff.info,  Node: ms Body Text,  Next: ms Page Layout,  Prev: ms Cover Page Macros,  Up: ms
-
-4.3.5 Body text
----------------
-
-This section describes macros used to mark up the body of your document.
-Examples include paragraphs, sections, and other groups.
-
-* Menu:
-
-* Paragraphs in ms::
-* Headings in ms::
-* Highlighting in ms::
-* Lists in ms::
-* Indentation values in ms::
-* Tabstops in ms::
-* ms Displays and Keeps::
-* ms Insertions::
-* Example multi-page table::
-* ms Footnotes::
-
-
-File: groff.info,  Node: Paragraphs in ms,  Next: Headings in ms,  Prev: ms Body Text,  Up: ms Body Text
-
-4.3.5.1 Paragraphs
-..................
-
-The following paragraph types are available.
-
- -- Macro: .PP
-     Sets a paragraph with an initial indentation.
-
- -- Macro: .LP
-     Sets a paragraph without an initial indentation.
-
- -- Macro: .QP
-     Sets a paragraph that is indented at both left and right margins.
-     The effect is identical to the HTML '<BLOCKQUOTE>' element.  The
-     next paragraph or heading returns margins to normal.
-
- -- Macro: .XP
-     Sets a paragraph whose lines are indented, except for the first
-     line.  This is a Berkeley extension.
-
-   The following markup uses all four paragraph macros.
-
-     .NH 2
-     Cases used in the study
-     .LP
-     The following software and versions were
-     considered for this report.
-     .PP
-     For commercial software, we chose
-     .B "Microsoft Word for Windows" ,
-     starting with version 1.0 through the
-     current version (Word 2000).
-     .PP
-     For free software, we chose
-     .B Emacs ,
-     from its first appearance as a standalone
-     editor through the current version (v20).
-     See [Bloggs 2002] for details.
-     .QP
-     Franklin's Law applied to software:
-     software expands to outgrow both
-     RAM and disk space over time.
-     .LP
-     Bibliography:
-     .XP
-     Bloggs, Joseph R.,
-     .I "Everyone's a Critic" ,
-     Underground Press, March 2002.
-     A definitive work that answers all questions
-     and criticisms about the quality and usability of
-     free software.
-
-   The 'PORPHANS' register (*note ms Document Control Registers::)
-operates in conjunction with each of these macros, to inhibit the
-printing of orphan lines at the bottom of any page.
-
-
-File: groff.info,  Node: Headings in ms,  Next: Highlighting in ms,  Prev: Paragraphs in ms,  Up: ms Body Text
-
-4.3.5.2 Headings
-................
-
-Use headings to create a hierarchical structure for your document.  The
-'ms' macros print headings in *bold*, using the same font family and
-point size as the body text.
-
-   The following describes the heading macros:
-
- -- Macro: .NH curr-level
- -- Macro: .NH S level0 ...
-     Numbered heading.  The argument is either a numeric argument to
-     indicate the level of the heading, or the letter 'S' followed by
-     numeric arguments to set the heading level explicitly.
-
-     If you specify heading levels out of sequence, such as invoking
-     '.NH 3' after '.NH 1', 'groff' prints a warning on standard error.
-
- -- String: \*[SN]
- -- String: \*[SN-DOT]
- -- String: \*[SN-NO-DOT]
-     After invocation of 'NH', the assigned section number is made
-     available in the strings 'SN-DOT' (as it appears in a printed
-     section heading with default formatting, followed by a terminating
-     period), and 'SN-NO-DOT' (with the terminating period omitted).
-     The string 'SN' is also defined, as an alias for 'SN-DOT'; if
-     preferred, you may redefine it as an alias for 'SN-NO-DOT', by
-     including the initialization
-          .als SN SN-NO-DOT
-
-     at any time *before* you would like the change to take effect.
-
- -- String: \*[SN-STYLE]
-     You may control the style used to print section numbers, within
-     numbered section headings, by defining an appropriate alias for the
-     string 'SN-STYLE'.  The default style, in which the printed section
-     number is followed by a terminating period, is obtained by defining
-     the alias
-
-          .als SN-STYLE SN-DOT
-
-     If you prefer to omit the terminating period, from section numbers
-     appearing in numbered section headings, you may define the alias
-
-          .als SN-STYLE SN-NO-DOT
-
-     Any such change in section numbering style becomes effective from
-     the next use of '.NH', following redefinition of the alias for
-     'SN-STYLE'.
-
- -- Macro: .SH [match-level]
-     Unnumbered subheading.
-
-     The optional MATCH-LEVEL argument is a GNU extension.  It is a
-     number indicating the level of the heading, in a manner analogous
-     to the CURR-LEVEL argument to '.NH'.  Its purpose is to match the
-     point size, at which the heading is printed, to the size of a
-     numbered heading at the same level, when the 'GROWPS' and 'PSINCR'
-     heading size adjustment mechanism is in effect.  *Note ms Document
-     Control Registers::.
-
-   The 'HORPHANS' register (*note ms Document Control Registers::)
-operates in conjunction with the 'NH' and 'SH' macros, to inhibit the
-printing of orphaned section headings at the bottom of any page.
-
-
-File: groff.info,  Node: Highlighting in ms,  Next: Lists in ms,  Prev: Headings in ms,  Up: ms Body Text
-
-4.3.5.3 Highlighting
-....................
-
-The 'ms' macros provide a variety of methods to highlight or emphasize
-text:
-
- -- Macro: .B [txt [post [pre]]]
-     Sets its first argument in *bold type*.  If you specify a second
-     argument, 'groff' prints it in the previous font after the bold
-     text, with no intervening space (this allows you to set punctuation
-     after the highlighted text without highlighting the punctuation).
-     Similarly, it prints the third argument (if any) in the previous
-     font *before* the first argument.  For example,
-
-          .B foo ) (
-
-     prints (*foo*).
-
-     If you give this macro no arguments, 'groff' prints all text
-     following in bold until the next highlighting, paragraph, or
-     heading macro.
-
- -- Macro: .R [txt [post [pre]]]
-     Sets its first argument in roman (or regular) type.  It operates
-     similarly to the 'B' macro otherwise.
-
- -- Macro: .I [txt [post [pre]]]
-     Sets its first argument in _italic type_.  It operates similarly to
-     the 'B' macro otherwise.
-
- -- Macro: .CW [txt [post [pre]]]
-     Sets its first argument in a 'constant width face'.  It operates
-     similarly to the 'B' macro otherwise.
-
- -- Macro: .BI [txt [post [pre]]]
-     Sets its first argument in bold italic type.  It operates similarly
-     to the 'B' macro otherwise.
-
- -- Macro: .BX [txt]
-     Prints its argument and draws a box around it.  If you want to box
-     a string that contains spaces, use a digit-width space ('\0').
-
- -- Macro: .UL [txt [post]]
-     Prints its first argument with an underline.  If you specify a
-     second argument, 'groff' prints it in the previous font after the
-     underlined text, with no intervening space.
-
- -- Macro: .LG
-     Prints all text following in larger type (two points larger than
-     the current point size) until the next font size, highlighting,
-     paragraph, or heading macro.  You can specify this macro multiple
-     times to enlarge the point size as needed.
-
- -- Macro: .SM
-     Prints all text following in smaller type (two points smaller than
-     the current point size) until the next type size, highlighting,
-     paragraph, or heading macro.  You can specify this macro multiple
-     times to reduce the point size as needed.
-
- -- Macro: .NL
-     Prints all text following in the normal point size (that is, the
-     value of the 'PS' register).
-
- -- String: \*[{]
- -- String: \*[}]
-     Text enclosed with '\*{' and '\*}' is printed as a superscript.
-
-
-File: groff.info,  Node: Lists in ms,  Next: Indentation values in ms,  Prev: Highlighting in ms,  Up: ms Body Text
-
-4.3.5.4 Lists
-.............
-
-The 'IP' macro handles duties for all lists.
-
- -- Macro: .IP [marker [width]]
-     The MARKER is usually a bullet glyph ('\[bu]') for unordered lists,
-     a number (or auto-incrementing number register) for numbered lists,
-     or a word or phrase for indented (glossary-style) lists.
-
-     The WIDTH specifies the indentation for the body of each list item;
-     its default unit is 'n'.  Once specified, the indentation remains
-     the same for all list items in the document until specified again.
-
-     The 'PORPHANS' register (*note ms Document Control Registers::)
-     operates in conjunction with the 'IP' macro, to inhibit the
-     printing of orphaned list markers at the bottom of any page.
-
-   The following is an example of a bulleted list.
-
-     A bulleted list:
-     .IP \[bu] 2
-     lawyers
-     .IP \[bu]
-     guns
-     .IP \[bu]
-     money
-
-   Produces:
-
-     A bulleted list:
-
-     o lawyers
-
-     o guns
-
-     o money
-
-   The following is an example of a numbered list.
-
-     .nr step 1 1
-     A numbered list:
-     .IP \n[step] 3
-     lawyers
-     .IP \n+[step]
-     guns
-     .IP \n+[step]
-     money
-
-   Produces:
-
-     A numbered list:
-
-     1. lawyers
-
-     2. guns
-
-     3. money
-
-   Note the use of the auto-incrementing number register in this
-example.
-
-   The following is an example of a glossary-style list.
-
-     A glossary-style list:
-     .IP lawyers 0.4i
-     Two or more attorneys.
-     .IP guns
-     Firearms, preferably
-     large-caliber.
-     .IP money
-     Gotta pay for those
-     lawyers and guns!
-
-   Produces:
-
-     A glossary-style list:
-
-     lawyers
-           Two or more attorneys.
-
-     guns  Firearms, preferably large-caliber.
-
-     money
-           Gotta pay for those lawyers and guns!
-
-   In the last example, the 'IP' macro places the definition on the same
-line as the term if it has enough space; otherwise, it breaks to the
-next line and starts the definition below the term.  This may or may not
-be the effect you want, especially if some of the definitions break and
-some do not.  The following examples show two possible ways to force a
-break.
-
-   The first workaround uses the 'br' request to force a break after
-printing the term or label.
-
-     A glossary-style list:
-     .IP lawyers 0.4i
-     Two or more attorneys.
-     .IP guns
-     .br
-     Firearms, preferably large-caliber.
-     .IP money
-     Gotta pay for those lawyers and guns!
-
-   The second workaround uses the '\p' escape to force the break.  Note
-the space following the escape; this is important.  If you omit the
-space, 'groff' prints the first word on the same line as the term or
-label (if it fits) *then* breaks the line.
-
-     A glossary-style list:
-     .IP lawyers 0.4i
-     Two or more attorneys.
-     .IP guns
-     \p Firearms, preferably large-caliber.
-     .IP money
-     Gotta pay for those lawyers and guns!
-
-   To set nested lists, use the 'RS' and 'RE' macros.  *Note Indentation
-values in ms::, for more information.
-
-   For example:
-
-     .IP \[bu] 2
-     Lawyers:
-     .RS
-     .IP \[bu]
-     Dewey,
-     .IP \[bu]
-     Cheatham,
-     .IP \[bu]
-     and Howe.
-     .RE
-     .IP \[bu]
-     Guns
-
-   Produces:
-
-     o Lawyers:
-
-       o  Dewey,
-
-       o  Cheatham,
-
-       o  and Howe.
-
-     o Guns
-
-
-File: groff.info,  Node: Indentation values in ms,  Next: Tabstops in ms,  Prev: Lists in ms,  Up: ms Body Text
-
-4.3.5.5 Indentation values
-..........................
-
-In many situations, you may need to indentation a section of text while
-still wrapping and filling.  *Note Lists in ms::, for an example of
-nested lists.
-
- -- Macro: .RS
- -- Macro: .RE
-     These macros begin and end an indented section.  The 'PI' register
-     controls the amount of indentation, allowing the indented text to
-     line up under hanging and indented paragraphs.
-
-   *Note ms Displays and Keeps::, for macros to indentation and turn off
-filling.
-
-
-File: groff.info,  Node: Tabstops in ms,  Next: ms Displays and Keeps,  Prev: Indentation values in ms,  Up: ms Body Text
-
-4.3.5.6 Tab Stops
-.................
-
-Use the 'ta' request to define tab stops as needed.  *Note Tabs and
-Fields::.
-
- -- Macro: .TA
-     Use this macro to reset the tab stops to the default for 'ms'
-     (every 5n).  You can redefine the 'TA' macro to create a different
-     set of default tab stops.
-
-
-File: groff.info,  Node: ms Displays and Keeps,  Next: ms Insertions,  Prev: Tabstops in ms,  Up: ms Body Text
-
-4.3.5.7 Displays and keeps
-..........................
-
-Use displays to show text-based examples or figures (such as code
-listings).
-
-   Displays turn off filling, so lines of code are displayed as-is
-without inserting 'br' requests in between each line.  Displays can be
-"kept" on a single page, or allowed to break across pages.
-
- -- Macro: .DS L
- -- Macro: .LD
- -- Macro: .DE
-     Left-justified display.  The '.DS L' call generates a page break,
-     if necessary, to keep the entire display on one page.  The 'LD'
-     macro allows the display to break across pages.  The 'DE' macro
-     ends the display.
-
- -- Macro: .DS I
- -- Macro: .ID
- -- Macro: .DE
-     Indents the display as defined by the 'DI' register.  The '.DS I'
-     call generates a page break, if necessary, to keep the entire
-     display on one page.  The 'ID' macro allows the display to break
-     across pages.  The 'DE' macro ends the display.
-
- -- Macro: .DS B
- -- Macro: .BD
- -- Macro: .DE
-     Sets a block-centered display: the entire display is
-     left-justified, but indented so that the longest line in the
-     display is centered on the page.  The '.DS B' call generates a page
-     break, if necessary, to keep the entire display on one page.  The
-     'BD' macro allows the display to break across pages.  The 'DE'
-     macro ends the display.
-
- -- Macro: .DS C
- -- Macro: .CD
- -- Macro: .DE
-     Sets a centered display: each line in the display is centered.  The
-     '.DS C' call generates a page break, if necessary, to keep the
-     entire display on one page.  The 'CD' macro allows the display to
-     break across pages.  The 'DE' macro ends the display.
-
- -- Macro: .DS R
- -- Macro: .RD
- -- Macro: .DE
-     Right-justifies each line in the display.  The '.DS R' call
-     generates a page break, if necessary, to keep the entire display on
-     one page.  The 'RD' macro allows the display to break across pages.
-     The 'DE' macro ends the display.
-
- -- Macro: .Ds
- -- Macro: .De
-     These two macros were formerly provided as aliases for 'DS' and
-     'DE', respectively.  They have been removed, and should no longer
-     be used.  The original implementations of 'DS' and 'DE' are
-     retained, and should be used instead.  X11 documents that actually
-     use 'Ds' and 'De' always load a specific macro file from the X11
-     distribution ('macros.t') that provides proper definitions for the
-     two macros.
-
-   On occasion, you may want to "keep" other text together on a page.
-For example, you may want to keep two paragraphs together, or a
-paragraph that refers to a table (or list, or other item) immediately
-following.  The 'ms' macros provide the 'KS' and 'KE' macros for this
-purpose.
-
- -- Macro: .KS
- -- Macro: .KE
-     The 'KS' macro begins a block of text to be kept on a single page,
-     and the 'KE' macro ends the block.
-
- -- Macro: .KF
- -- Macro: .KE
-     Specifies a "floating keep"; if the keep cannot fit on the current
-     page, 'groff' holds the contents of the keep and allows text
-     following the keep (in the source file) to fill in the remainder of
-     the current page.  When the page breaks, whether by an explicit
-     'bp' request or by reaching the end of the page, 'groff' prints the
-     floating keep at the top of the new page.  This is useful for
-     printing large graphics or tables that do not need to appear
-     exactly where specified.
-
-   You can also use the 'ne' request to force a page break if there is
-not enough vertical space remaining on the page.
-
-   Use the following macros to draw a box around a section of text (such
-as a display).
-
- -- Macro: .B1
- -- Macro: .B2
-     Marks the beginning and ending of text that is to have a box drawn
-     around it.  The 'B1' macro begins the box; the 'B2' macro ends it.
-     Text in the box is automatically placed in a diversion (keep).
-
-
-File: groff.info,  Node: ms Insertions,  Next: Example multi-page table,  Prev: ms Displays and Keeps,  Up: ms Body Text
-
-4.3.5.8 Tables, figures, equations, and references
-..................................................
-
-The 'ms' macros support the standard 'groff' preprocessors: 'tbl',
-'pic', 'eqn', and 'refer'.  You mark text meant for preprocessors by
-enclosing it in pairs of tags as follows.
-
- -- Macro: .TS ['H']
- -- Macro: .TE
-     Denotes a table, to be processed by the 'tbl' preprocessor.  The
-     optional argument 'H' to 'TS' instructs 'groff' to create a running
-     header with the information up to the 'TH' macro.  'groff' prints
-     the header at the beginning of the table; if the table runs onto
-     another page, 'groff' prints the header on the next page as well.
-
- -- Macro: .PS
- -- Macro: .PE
-     Denotes a graphic, to be processed by the 'pic' preprocessor.  You
-     can create a 'pic' file by hand, using the AT&T 'pic' manual
-     available on the Web as a reference, or by using a graphics program
-     such as 'xfig'.
-
- -- Macro: .EQ [align]
- -- Macro: .EN
-     Denotes an equation, to be processed by the 'eqn' preprocessor.
-     The optional ALIGN argument can be 'C', 'L', or 'I' to center (the
-     default), left-justify, or indent the equation.
-
- -- Macro: .[
- -- Macro: .]
-     Denotes a reference, to be processed by the 'refer' preprocessor.
-     The GNU 'refer(1)' man page provides a comprehensive reference to
-     the preprocessor and the format of the bibliographic database.
-
-* Menu:
-
-* Example multi-page table::
-
-
-File: groff.info,  Node: Example multi-page table,  Next: ms Footnotes,  Prev: ms Insertions,  Up: ms Body Text
-
-4.3.5.9 An example multi-page table
-...................................
-
-The following is an example of how to set up a table that may print
-across two or more pages.
-
-     .TS H
-     allbox expand;
-     cb | cb .
-     Text      ...of heading...
-     _
-     .TH
-     .T&
-     l | l .
-     ... the rest of the table follows...
-     .CW
-     .TE
-
-
-File: groff.info,  Node: ms Footnotes,  Prev: Example multi-page table,  Up: ms Body Text
-
-4.3.5.10 Footnotes
-..................
-
-The 'ms' macro package has a flexible footnote system.  You can specify
-either numbered footnotes or symbolic footnotes (that is, using a marker
-such as a dagger symbol).
-
- -- String: \*[*]
-     Specifies the location of a numbered footnote marker in the text.
-
- -- Macro: .FS
- -- Macro: .FE
-     Specifies the text of the footnote.  The default action is to
-     create a numbered footnote; you can create a symbolic footnote by
-     specifying a "mark" glyph (such as '\[dg]' for the dagger glyph) in
-     the body text and as an argument to the 'FS' macro, followed by the
-     text of the footnote and the 'FE' macro.
-
-   You can control how 'groff' prints footnote numbers by changing the
-value of the 'FF' register.  *Note ms Document Control Registers::.
-
-   Footnotes can be safely used within keeps and displays, but you
-should avoid using numbered footnotes within floating keeps.  You can
-set a second '\**' marker between a '\**' and its corresponding '.FS'
-entry; as long as each 'FS' macro occurs _after_ the corresponding '\**'
-and the occurrences of '.FS' are in the same order as the corresponding
-occurrences of '\**'.
-
-
-File: groff.info,  Node: ms Page Layout,  Next: Differences from AT&T ms,  Prev: ms Body Text,  Up: ms
-
-4.3.6 Page layout
------------------
-
-The default output from the 'ms' macros provides a minimalist page
-layout: it prints a single column, with the page number centered at the
-top of each page.  It prints no footers.
-
-   You can change the layout by setting the proper number registers and
-strings.
-
-* Menu:
-
-* ms Headers and Footers::
-* ms Margins::
-* ms Multiple Columns::
-* ms TOC::
-* ms Strings and Special Characters::
-
-
-File: groff.info,  Node: ms Headers and Footers,  Next: ms Margins,  Prev: ms Page Layout,  Up: ms Page Layout
-
-4.3.6.1 Headers and footers
-...........................
-
-For documents that do not distinguish between odd and even pages, set
-the following strings:
-
- -- String: \*[LH]
- -- String: \*[CH]
- -- String: \*[RH]
-     Sets the left, center, and right headers.
-
- -- String: \*[LF]
- -- String: \*[CF]
- -- String: \*[RF]
-     Sets the left, center, and right footers.
-
-   For documents that need different information printed in the even and
-odd pages, use the following macros:
-
- -- Macro: .OH 'left'center'right'
- -- Macro: .EH 'left'center'right'
- -- Macro: .OF 'left'center'right'
- -- Macro: .EF 'left'center'right'
-     The 'OH' and 'EH' macros define headers for the odd and even pages;
-     the 'OF' and 'EF' macros define footers for the odd and even pages.
-     This is more flexible than defining the individual strings.
-
-     You can replace the quote (''') marks with any character not
-     appearing in the header or footer text.
-
-   To specify custom header and footer processing, redefine the
-following macros:
-
- -- Macro: .PT
- -- Macro: .HD
- -- Macro: .BT
-     The 'PT' macro defines a custom header; the 'BT' macro defines a
-     custom footer.  These macros must handle odd/even/first page
-     differences if necessary.
-
-     The 'HD' macro defines additional header processing to take place
-     after executing the 'PT' macro.
-
-
-File: groff.info,  Node: ms Margins,  Next: ms Multiple Columns,  Prev: ms Headers and Footers,  Up: ms Page Layout
-
-4.3.6.2 Margins
-...............
-
-You control margins using a set of number registers.  *Note ms Document
-Control Registers::, for details.
-
-
-File: groff.info,  Node: ms Multiple Columns,  Next: ms TOC,  Prev: ms Margins,  Up: ms Page Layout
-
-4.3.6.3 Multiple columns
-........................
-
-The 'ms' macros can set text in as many columns as do reasonably fit on
-the page.  The following macros are available; all of them force a page
-break if a multi-column mode is already set.  However, if the current
-mode is single-column, starting a multi-column mode does _not_ force a
-page break.
-
- -- Macro: .1C
-     Single-column mode.
-
- -- Macro: .2C
-     Two-column mode.
-
- -- Macro: .MC [width [gutter]]
-     Multi-column mode.  If you specify no arguments, it is equivalent
-     to the '2C' macro.  Otherwise, WIDTH is the width of each column
-     and GUTTER is the space between columns.  The 'MINGW' number
-     register controls the default gutter width.
-
-
-File: groff.info,  Node: ms TOC,  Next: ms Strings and Special Characters,  Prev: ms Multiple Columns,  Up: ms Page Layout
-
-4.3.6.4 Creating a table of contents
-....................................
-
-The facilities in the 'ms' macro package for creating a table of
-contents are semi-automated at best.  Assuming that you want the table
-of contents to consist of the document's headings, you need to repeat
-those headings wrapped in 'XS' and 'XE' macros.
-
- -- Macro: .XS [page]
- -- Macro: .XA [page]
- -- Macro: .XE
-     These macros define a table of contents or an individual entry in
-     the table of contents, depending on their use.  The macros are very
-     simple; they cannot indent a heading based on its level.  The
-     easiest way to work around this is to add tabs to the table of
-     contents string.  The following is an example:
-
-          .NH 1
-          Introduction
-          .XS
-          Introduction
-          .XE
-          .LP
-          ...
-          .CW
-          .NH 2
-          Methodology
-          .XS
-          Methodology
-          .XE
-          .LP
-          ...
-
-     You can manually create a table of contents by beginning with the
-     'XS' macro for the first entry, specifying the page number for that
-     entry as the argument to 'XS'.  Add subsequent entries using the
-     'XA' macro, specifying the page number for that entry as the
-     argument to 'XA'.  The following is an example:
-
-          .XS 1
-          Introduction
-          .XA 2
-          A Brief History of the Universe
-          .XA 729
-          Details of Galactic Formation
-          ...
-          .XE
-
- -- Macro: .TC ['no']
-     Prints the table of contents on a new page, setting the page number
-     to *i* (Roman lowercase numeral one).  You should usually place
-     this macro at the end of the file, since 'groff' is a single-pass
-     formatter and can only print what has been collected up to the
-     point that the 'TC' macro appears.
-
-     The optional argument 'no' suppresses printing the title specified
-     by the string register 'TOC'.
-
- -- Macro: .PX ['no']
-     Prints the table of contents on a new page, using the current page
-     numbering sequence.  Use this macro to print a manually-generated
-     table of contents at the beginning of your document.
-
-     The optional argument 'no' suppresses printing the title specified
-     by the string register 'TOC'.
-
-   The 'Groff and Friends HOWTO' includes a 'sed' script that
-automatically inserts 'XS' and 'XE' macro entries after each heading in
-a document.
-
-   Altering the 'NH' macro to automatically build the table of contents
-is perhaps initially more difficult, but would save a great deal of time
-in the long run if you use 'ms' regularly.
-
-
-File: groff.info,  Node: ms Strings and Special Characters,  Prev: ms TOC,  Up: ms Page Layout
-
-4.3.6.5 Strings and Special Characters
-......................................
-
-The 'ms' macros provide the following predefined strings.  You can
-change the string definitions to help in creating documents in languages
-other than English.
-
- -- String: \*[REFERENCES]
-     Contains the string printed at the beginning of the references
-     (bibliography) page.  The default is 'References'.
-
- -- String: \*[ABSTRACT]
-     Contains the string printed at the beginning of the abstract.  The
-     default is 'ABSTRACT'.
-
- -- String: \*[TOC]
-     Contains the string printed at the beginning of the table of
-     contents.
-
- -- String: \*[MONTH1]
- -- String: \*[MONTH2]
- -- String: \*[MONTH3]
- -- String: \*[MONTH4]
- -- String: \*[MONTH5]
- -- String: \*[MONTH6]
- -- String: \*[MONTH7]
- -- String: \*[MONTH8]
- -- String: \*[MONTH9]
- -- String: \*[MONTH10]
- -- String: \*[MONTH11]
- -- String: \*[MONTH12]
-     Prints the full name of the month in dates.  The default is
-     'January', 'February', etc.
-
-   The following special characters are available(1) (*note ms Strings
-and Special Characters-Footnote-1::):
-
- -- String: \*[-]
-     Prints an em dash.
-
- -- String: \*[Q]
- -- String: \*[U]
-     Prints typographer's quotes in troff, and plain quotes in nroff.
-     '\*Q' is the left quote and '\*U' is the right quote.
-
-   Improved accent marks are available in the 'ms' macros.
-
- -- Macro: .AM
-     Specify this macro at the beginning of your document to enable
-     extended accent marks and special characters.  This is a Berkeley
-     extension.
-
-     To use the accent marks, place them *after* the character being
-     accented.
-
-     Note that groff's native support for accents is superior to the
-     following definitions.
-
-   The following accent marks are available after invoking the 'AM'
-macro:
-
- -- String: \*[']
-     Acute accent.
-
- -- String: \*[`]
-     Grave accent.
-
- -- String: \*[^]
-     Circumflex.
-
- -- String: \*[,]
-     Cedilla.
-
- -- String: \*[~]
-     Tilde.
-
- -- String: \*[:]
-     Umlaut.
-
- -- String: \*[v]
-     Hacek.
-
- -- String: \*[_]
-     Macron (overbar).
-
- -- String: \*[.]
-     Underdot.
-
- -- String: \*[o]
-     Ring above.
-
-   The following are standalone characters available after invoking the
-'AM' macro:
-
- -- String: \*[?]
-     Upside-down question mark.
-
- -- String: \*[!]
-     Upside-down exclamation point.
-
- -- String: \*[8]
-     German � ligature.
-
- -- String: \*[3]
-     Yogh.
-
- -- String: \*[Th]
-     Uppercase thorn.
-
- -- String: \*[th]
-     Lowercase thorn.
-
- -- String: \*[D-]
-     Uppercase eth.
-
- -- String: \*[d-]
-     Lowercase eth.
-
- -- String: \*[q]
-     Hooked o.
-
- -- String: \*[ae]
-     Lowercase � ligature.
-
- -- String: \*[Ae]
-     Uppercase � ligature.
-
-
-File: groff.info,  Node: ms Strings and Special Characters-Footnotes,  Up: ms Strings and Special Characters
-
-   (1) For an explanation what special characters are see *note Special
-Characters::.
-
-
-File: groff.info,  Node: Differences from AT&T ms,  Next: Naming Conventions,  Prev: ms Page Layout,  Up: ms
-
-4.3.7 Differences from AT&T 'ms'
---------------------------------
-
-This section lists the (minor) differences between the 'groff -ms'
-macros and AT&T 'troff -ms' macros.
-
-   * The internals of 'groff -ms' differ from the internals of AT&T
-     'troff -ms'.  Documents that depend upon implementation details of
-     AT&T 'troff -ms' may not format properly with 'groff -ms'.
-
-   * The general error-handling policy of 'groff -ms' is to detect and
-     report errors, rather than silently to ignore them.
-
-   * 'groff -ms' does not work in compatibility mode (this is, with the
-     '-C' option).
-
-   * There is no special support for typewriter-like devices.
-
-   * 'groff -ms' does not provide cut marks.
-
-   * Multiple line spacing is not supported.  Use a larger vertical
-     spacing instead.
-
-   * Some UNIX 'ms' documentation says that the 'CW' and 'GW' number
-     registers can be used to control the column width and gutter width,
-     respectively.  These number registers are not used in 'groff -ms'.
-
-   * Macros that cause a reset (paragraphs, headings, etc.) may change
-     the indentation.  Macros that change the indentation do not
-     increment or decrement the indentation, but rather set it
-     absolutely.  This can cause problems for documents that define
-     additional macros of their own.  The solution is to use not the
-     'in' request but instead the 'RS' and 'RE' macros.
-
-   * To make 'groff -ms' use the default page offset (which also
-     specifies the left margin), the 'PO' register must stay undefined
-     until the first '-ms' macro is evaluated.  This implies that 'PO'
-     should not be used early in the document, unless it is changed
-     also: Remember that accessing an undefined register automatically
-     defines it.
-
- -- Register: \n[GS]
-     This number register is set to 1 by the 'groff -ms' macros, but it
-     is not used by the 'AT&T' 'troff -ms' macros.  Documents that need
-     to determine whether they are being formatted with 'AT&T' 'troff
-     -ms' or 'groff -ms' should use this number register.
-
-   Emulations of a few ancient Bell Labs macros can be re-enabled by
-calling the otherwise undocumented 'SC' section-header macro.  Calling
-'SC' enables 'UC' for marking up a product or application name, and the
-pair 'P1'/'P2' for surrounding code example displays.
-
-   These are not enabled by default because (a) they were not
-documented, in the original 'ms' manual, and (b) the 'P1' and 'UC'
-macros collide with different macros with the same names in the Berkeley
-version of 'ms'.
-
-   These 'groff' emulations are sufficient to give back the 1976
-Kernighan & Cherry paper 'Typsetting Mathematics - User's Guide' its
-section headings, and restore some text that had gone missing as
-arguments of undefined macros.  No warranty express or implied is given
-as to how well the typographic details these produce match the original
-Bell Labs macros.
-
-* Menu:
-
-* Missing ms Macros::
-* Additional ms Macros::
-
-
-File: groff.info,  Node: Missing ms Macros,  Next: Additional ms Macros,  Prev: Differences from AT&T ms,  Up: Differences from AT&T ms
-
-4.3.7.1 'troff' macros not appearing in 'groff'
-...............................................
-
-Macros missing from 'groff -ms' are cover page macros specific to Bell
-Labs and Berkeley.  The macros known to be missing are:
-
-'.TM'
-     Technical memorandum; a cover sheet style
-
-'.IM'
-     Internal memorandum; a cover sheet style
-
-'.MR'
-     Memo for record; a cover sheet style
-
-'.MF'
-     Memo for file; a cover sheet style
-
-'.EG'
-     Engineer's notes; a cover sheet style
-
-'.TR'
-     Computing Science Tech Report; a cover sheet style
-
-'.OK'
-     Other keywords
-
-'.CS'
-     Cover sheet information
-
-'.MH'
-     A cover sheet macro
-
-
-File: groff.info,  Node: Additional ms Macros,  Prev: Missing ms Macros,  Up: Differences from AT&T ms
-
-4.3.7.2 'groff' macros not appearing in AT&T 'troff'
-....................................................
-
-The 'groff -ms' macros have a few minor extensions compared to the AT&T
-'troff -ms' macros.
-
- -- Macro: .AM
-     Improved accent marks.  *Note ms Strings and Special Characters::,
-     for details.
-
- -- Macro: .DS I
-     Indented display.  The default behavior of AT&T 'troff -ms' was to
-     indent; the 'groff' default prints displays flush left with the
-     body text.
-
- -- Macro: .CW
-     Print text in 'constant width' (Courier) font.
-
- -- Macro: .IX
-     Indexing term (printed on standard error).  You can write a script
-     to capture and process an index generated in this manner.
-
-   The following additional number registers appear in 'groff -ms':
-
- -- Register: \n[MINGW]
-     Specifies a minimum space between columns (for multi-column
-     output); this takes the place of the 'GW' register that was
-     documented but apparently not implemented in AT&T 'troff'.
-
-   Several new string registers are available as well.  You can change
-these to handle (for example) the local language.  *Note ms Strings and
-Special Characters::, for details.
-
-
-File: groff.info,  Node: Naming Conventions,  Prev: Differences from AT&T ms,  Up: ms
-
-4.3.8 Naming Conventions
-------------------------
-
-The following conventions are used for names of macros, strings and
-number registers.  External names available to documents that use the
-'groff -ms' macros contain only uppercase letters and digits.
-
-   Internally the macros are divided into modules; naming conventions
-are as follows:
-
-   * Names used only within one module are of the form MODULE'*'NAME.
-
-   * Names used outside the module in which they are defined are of the
-     form MODULE'@'NAME.
-
-   * Names associated with a particular environment are of the form
-     ENVIRONMENT':'NAME; these are used only within the 'par' module.
-
-   * NAME does not have a module prefix.
-
-   * Constructed names used to implement arrays are of the form
-     ARRAY'!'INDEX.
-
-   Thus the groff ms macros reserve the following names:
-
-   * Names containing the characters '*', '@', and ':'.
-
-   * Names containing only uppercase letters and digits.
-
-
-File: groff.info,  Node: me,  Next: mm,  Prev: ms,  Up: Macro Packages
-
-4.4 'me'
-========
-
-See the 'meintro.me' and 'meref.me' documents in groff's 'doc'
-directory.
-
-
-File: groff.info,  Node: mm,  Next: mom,  Prev: me,  Up: Macro Packages
-
-4.5 'mm'
-========
-
-See the 'groff_mm(7)' man page (type 'man groff_mm' at the command
-line).
-
-
-File: groff.info,  Node: mom,  Prev: mm,  Up: Macro Packages
-
-4.6 'mom'
-=========
-
-See the 'groff_mom(7)' man page (type 'man groff_mom' at the command
-line), which gives a short overview and a link to its extensive
-documentation in HTML format.
-
-
-File: groff.info,  Node: gtroff Reference,  Next: Preprocessors,  Prev: Macro Packages,  Up: Top
-
-5 'gtroff' Reference
-********************
-
-This chapter covers *all* of the facilities of 'gtroff'.  Users of macro
-packages may skip it if not interested in details.
-
-* Menu:
-
-* Text::
-* Measurements::
-* Expressions::
-* Identifiers::
-* Embedded Commands::
-* Registers::
-* Manipulating Filling and Adjusting::
-* Manipulating Hyphenation::
-* Manipulating Spacing::
-* Tabs and Fields::
-* Character Translations::
-* Troff and Nroff Mode::
-* Line Layout::
-* Line Control::
-* Page Layout::
-* Page Control::
-* Fonts and Symbols::
-* Sizes::
-* Strings::
-* Conditionals and Loops::
-* Writing Macros::
-* Page Motions::
-* Drawing Requests::
-* Traps::
-* Diversions::
-* Environments::
-* Suppressing output::
-* Colors::
-* I/O::
-* Postprocessor Access::
-* Miscellaneous::
-* Gtroff Internals::
-* Debugging::
-* Implementation Differences::
-
-
-File: groff.info,  Node: Text,  Next: Measurements,  Prev: gtroff Reference,  Up: gtroff Reference
-
-5.1 Text
-========
-
-'gtroff' input files contain text with control commands interspersed
-throughout.  But, even without control codes, 'gtroff' still does
-several things with the input text:
-
-   * filling and adjusting
-
-   * adding additional space after sentences
-
-   * hyphenating
-
-   * inserting implicit line breaks
-
-* Menu:
-
-* Filling and Adjusting::
-* Hyphenation::
-* Sentences::
-* Tab Stops::
-* Implicit Line Breaks::
-* Input Conventions::
-* Input Encodings::
-
-
-File: groff.info,  Node: Filling and Adjusting,  Next: Hyphenation,  Prev: Text,  Up: Text
-
-5.1.1 Filling and Adjusting
----------------------------
-
-When 'gtroff' reads text, it collects words from the input and fits as
-many of them together on one output line as it can.  This is known as
-"filling".
-
-   Once 'gtroff' has a "filled" line, it tries to "adjust" it.  This
-means it widens the spacing between words until the text reaches the
-right margin (in the default adjustment mode).  Extra spaces between
-words are preserved, but spaces at the end of lines are ignored.  Spaces
-at the front of a line cause a "break" (breaks are explained in *note
-Implicit Line Breaks::).
-
-   *Note Manipulating Filling and Adjusting::.
-
-
-File: groff.info,  Node: Hyphenation,  Next: Sentences,  Prev: Filling and Adjusting,  Up: Text
-
-5.1.2 Hyphenation
------------------
-
-Since the odds are not great for finding a set of words, for every
-output line, which fit nicely on a line without inserting excessive
-amounts of space between words, 'gtroff' hyphenates words so that it can
-justify lines without inserting too much space between words.  It uses
-an internal hyphenation algorithm (a simplified version of the algorithm
-used within TeX) to indicate which words can be hyphenated and how to do
-so.  When a word is hyphenated, the first part of the word is added to
-the current filled line being output (with an attached hyphen), and the
-other portion is added to the next line to be filled.
-
-   *Note Manipulating Hyphenation::.
-
-
-File: groff.info,  Node: Sentences,  Next: Tab Stops,  Prev: Hyphenation,  Up: Text
-
-5.1.3 Sentences
----------------
-
-Although it is often debated, some typesetting rules say there should be
-different amounts of space after various punctuation marks.  For
-example, the 'Chicago typsetting manual' says that a period at the end
-of a sentence should have twice as much space following it as would a
-comma or a period as part of an abbreviation.
-
-   'gtroff' does this by flagging certain characters (normally '!', '?',
-and '.') as "end-of-sentence" characters.  When 'gtroff' encounters one
-of these characters at the end of a line, it appends a normal space
-followed by a "sentence space" in the formatted output.  (This justifies
-one of the conventions mentioned in *note Input Conventions::.)
-
-   In addition, the following characters and symbols are treated
-transparently while handling end-of-sentence characters: '"', ''', ')',
-']', '*', '\[dg]', '\[rq]', and '\[cq]'.
-
-   See the 'cflags' request in *note Using Symbols::, for more details.
-
-   To prevent the insertion of extra space after an end-of-sentence
-character (at the end of a line), append '\&'.
-
-
-File: groff.info,  Node: Tab Stops,  Next: Implicit Line Breaks,  Prev: Sentences,  Up: Text
-
-5.1.4 Tab Stops
----------------
-
-'gtroff' translates "tabulator characters", also called "tabs" (normally
-code point ASCII '0x09' or EBCDIC '0x05'), in the input into movements
-to the next tabulator stop.  These tab stops are initially located every
-half inch across the page.  Using this, simple tables can be made
-easily.  However, it can often be deceptive as the appearance (and
-width) of the text on a terminal and the results from 'gtroff' can vary
-greatly.
-
-   Also, a possible sticking point is that lines beginning with tab
-characters are still filled, again producing unexpected results.  For
-example, the following input
-
-           1          2          3
-                      4          5
-
-produces
-
-           1          2          3                     4          5
-
-   *Note Tabs and Fields::.
-
-
-File: groff.info,  Node: Implicit Line Breaks,  Next: Input Conventions,  Prev: Tab Stops,  Up: Text
-
-5.1.5 Implicit Line Breaks
---------------------------
-
-An important concept in 'gtroff' is the "break".  When a break occurs,
-'gtroff' outputs the partially filled line (unjustified), and resumes
-collecting and filling text on the next output line.
-
-   There are several ways to cause a break in 'gtroff'.  A blank line
-not only causes a break, but it also outputs a one-line vertical space
-(effectively a blank line).  Note that this behaviour can be modified
-with the blank line macro request 'blm'.  *Note Blank Line Traps::.
-
-   A line that begins with a space causes a break and the space is
-output at the beginning of the next line.  Note that this space isn't
-adjusted, even in fill mode; however, the behaviour can be modified with
-the leading spaces macro request 'lsm'.  *Note Leading Spaces Traps::.
-
-   The end of file also causes a break - otherwise the last line of the
-document may vanish!
-
-   Certain requests also cause breaks, implicitly or explicitly.  This
-is discussed in *note Manipulating Filling and Adjusting::.
-
-
-File: groff.info,  Node: Input Conventions,  Next: Input Encodings,  Prev: Implicit Line Breaks,  Up: Text
-
-5.1.6 Input Conventions
------------------------
-
-Since 'gtroff' does filling automatically, it is traditional in 'groff'
-not to try and type things in as nicely formatted paragraphs.  These are
-some conventions commonly used when typing 'gtroff' text:
-
-   * Break lines after punctuation, particularly at the end of a
-     sentence and in other logical places.  Keep separate phrases on
-     lines by themselves, as entire phrases are often added or deleted
-     when editing.
-
-   * Try to keep lines less than 40-60 characters, to allow space for
-     inserting more text.
-
-   * Do not try to do any formatting in a WYSIWYG manner (i.e., don't
-     try using spaces to get proper indentation).
-
-
-File: groff.info,  Node: Input Encodings,  Prev: Input Conventions,  Up: Text
-
-5.1.7 Input Encodings
----------------------
-
-Currently, the following input encodings are available.
-
-cp1047
-     This input encoding works only on EBCDIC platforms (and vice versa,
-     the other input encodings don't work with EBCDIC); the file
-     'cp1047.tmac' is by default loaded at start-up.
-
-latin-1
-     This is the default input encoding on non-EBCDIC platforms; the
-     file 'latin1.tmac' is loaded at start-up.
-
-latin-2
-     To use this encoding, either say '.mso latin2.tmac' at the very
-     beginning of your document or use '-mlatin2' as a command line
-     argument for 'groff'.
-
-latin-5
-     For Turkish.  Either say '.mso latin9.tmac' at the very beginning
-     of your document or use '-mlatin9' as a command line argument for
-     'groff'.
-
-latin-9 (latin-0)
-     This encoding is intended (at least in Europe) to replace latin-1
-     encoding.  The main difference to latin-1 is that latin-9 contains
-     the Euro character.  To use this encoding, either say
-     '.mso latin9.tmac' at the very beginning of your document or use
-     '-mlatin9' as a command line argument for 'groff'.
-
-   Note that it can happen that some input encoding characters are not
-available for a particular output device.  For example, saying
-
-     groff -Tlatin1 -mlatin9 ...
-
-fails if you use the Euro character in the input.  Usually, this
-limitation is present only for devices that have a limited set of output
-glyphs (e.g. '-Tascii' and '-Tlatin1'); for other devices it is usually
-sufficient to install proper fonts that contain the necessary glyphs.
-
-   Due to the importance of the Euro glyph in Europe, the groff package
-now comes with a POSTSCRIPT font called 'freeeuro.pfa', which provides
-various glyph shapes for the Euro.  In other words, latin-9 encoding is
-supported for the '-Tps' device out of the box (latin-2 isn't).
-
-   By its very nature, '-Tutf8' supports all input encodings; '-Tdvi'
-has support for both latin-2 and latin-9 if the command line '-mec' is
-used also to load the file 'ec.tmac' (which flips to the EC fonts).
-
-
-File: groff.info,  Node: Measurements,  Next: Expressions,  Prev: Text,  Up: gtroff Reference
-
-5.2 Measurements
-================
-
-'gtroff' (like many other programs) requires numeric parameters to
-specify various measurements.  Most numeric parameters(1) (*note
-Measurements-Footnote-1::) may have a "measurement unit" attached.
-These units are specified as a single character that immediately follows
-the number or expression.  Each of these units are understood, by
-'gtroff', to be a multiple of its "basic unit".  So, whenever a
-different measurement unit is specified 'gtroff' converts this into its
-"basic units".  This basic unit, represented by a 'u', is a device
-dependent measurement, which is quite small, ranging from 1/75th to
-1/72000th of an inch.  The values may be given as fractional numbers;
-however, fractional basic units are always rounded to integers.
-
-   Some of the measurement units are completely independent of any of
-the current settings (e.g. type size) of 'gtroff'.
-
-'i'
-     Inches.  An antiquated measurement unit still in use in certain
-     backwards countries with incredibly low-cost computer equipment.
-     One inch is equal to 2.54cm.
-
-'c'
-     Centimeters.  One centimeter is equal to 0.3937in.
-
-'p'
-     Points.  This is a typesetter's measurement used for measure type
-     size.  It is 72 points to an inch.
-
-'P'
-     Pica.  Another typesetting measurement.  6 Picas to an inch (and
-     12 points to a pica).
-
-'s'
-'z'
-     *Note Fractional Type Sizes::, for a discussion of these units.
-
-'f'
-     Fractions.  Value is 65536.  *Note Colors::, for usage.
-
-   The other measurements understood by 'gtroff' depend on settings
-currently in effect in 'gtroff'.  These are very useful for specifying
-measurements that should look proper with any size of text.
-
-'m'
-     Ems.  This unit is equal to the current font size in points.  So
-     called because it is _approximately_ the width of the letter 'm' in
-     the current font.
-
-'n'
-     Ens.  In 'groff', this is half of an em.
-
-'v'
-     Vertical space.  This is equivalent to the current line spacing.
-     *Note Sizes::, for more information about this.
-
-'M'
-     100ths of an em.
-
-* Menu:
-
-* Default Units::
-
-
-File: groff.info,  Node: Measurements-Footnotes,  Up: Measurements
-
-   (1) those that specify vertical or horizontal motion or a type size
-
-
-File: groff.info,  Node: Default Units,  Prev: Measurements,  Up: Measurements
-
-5.2.1 Default Units
--------------------
-
-Many requests take a default unit.  While this can be helpful at times,
-it can cause strange errors in some expressions.  For example, the line
-length request expects em units.  Here are several attempts to get a
-line length of 3.5 inches and their results:
-
-     3.5i      =>   3.5i
-     7/2       =>   0i
-     7/2i      =>   0i
-     (7 / 2)u  =>   0i
-     7i/2      =>   0.1i
-     7i/2u     =>   3.5i
-
-Everything is converted to basic units first.  In the above example it
-is assumed that 1i equals 240u, and 1m equals 10p (thus 1m equals 33u).
-The value 7i/2 is first handled as 7i/2m, then converted to 1680u/66u,
-which is 25u, and this is approximately 0.1i.  As can be seen, a scaling
-indicator after a closing parenthesis is simply ignored.
-
-   Thus, the safest way to specify measurements is to always attach a
-scaling indicator.  If you want to multiply or divide by a certain
-scalar value, use 'u' as the unit for that value.
-
-
-File: groff.info,  Node: Expressions,  Next: Identifiers,  Prev: Measurements,  Up: gtroff Reference
-
-5.3 Expressions
-===============
-
-'gtroff' has most arithmetic operators common to other languages:
-
-   * Arithmetic: '+' (addition), '-' (subtraction), '/' (division), '*'
-     (multiplication), '%' (modulo).
-
-     'gtroff' only provides integer arithmetic.  The internal type used
-     for computing results is 'int', which is usually a 32bit signed
-     integer.
-
-   * Comparison: '<' (less than), '>' (greater than), '<=' (less than or
-     equal), '>=' (greater than or equal), '=' (equal), '==' (the same
-     as '=').
-
-   * Logical: '&' (logical and), ':' (logical or).
-
-   * Unary operators: '-' (negating, i.e. changing the sign), '+' (just
-     for completeness; does nothing in expressions), '!' (logical not;
-     this works only within 'if' and 'while' requests).(1)  (*note
-     Expressions-Footnote-1::) See below for the use of unary operators
-     in motion requests.
-
-     The logical not operator, as described above, works only within
-     'if' and 'while' requests.  Furthermore, it may appear only at the
-     beginning of an expression, and negates the entire expression.
-     Attempting to insert the '!' operator within the expression results
-     in a 'numeric expression expected' warning.  This maintains
-     compatibility with old versions of 'troff'.
-
-     Example:
-
-          .nr X 1
-          .nr Y 0
-          .\" This does not work as expected
-          .if (\n[X])&(!\n[Y]) .nop X only
-          .
-          .\" Use this construct instead
-          .if (\n[X]=1)&(\n[Y]=0) .nop X only
-
-   * Extrema: '>?' (maximum), '<?' (minimum).
-
-     Example:
-
-          .nr x 5
-          .nr y 3
-          .nr z (\n[x] >? \n[y])
-
-     The register 'z' now contains 5.
-
-   * Scaling: '(C;E)'.  Evaluate E using C as the default scaling
-     indicator.  If C is missing, ignore scaling indicators in the
-     evaluation of E.
-
-   Parentheses may be used as in any other language.  However, in
-'gtroff' they are necessary to ensure order of evaluation.  'gtroff' has
-no operator precedence; expressions are evaluated left to right.  This
-means that 'gtroff' evaluates '3+5*4' as if it were parenthesized like
-'(3+5)*4', not as '3+(5*4)', as might be expected.
-
-   For many requests that cause a motion on the page, the unary
-operators '+' and '-' work differently if leading an expression.  They
-then indicate a motion relative to the current position (down or up,
-respectively).
-
-   Similarly, a leading '|' operator indicates an absolute position.
-For vertical movements, it specifies the distance from the top of the
-page; for horizontal movements, it gives the distance from the beginning
-of the _input_ line.
-
-   '+' and '-' are also treated differently by the following requests
-and escapes: 'bp', 'in', 'll', 'lt', 'nm', 'nr', 'pl', 'pn', 'po', 'ps',
-'pvs', 'rt', 'ti', '\H', '\R', and '\s'.  Here, leading plus and minus
-signs indicate increments and decrements.
-
-   *Note Setting Registers::, for some examples.
-
- -- Escape: \B'anything'
-     Return 1 if ANYTHING is a valid numeric expression; or 0 if
-     ANYTHING is empty or not a valid numeric expression.
-
-   Due to the way arguments are parsed, spaces are not allowed in
-expressions, unless the entire expression is surrounded by parentheses.
-
-   *Note Request and Macro Arguments::, and *note Conditionals and
-Loops::.
-
-
-File: groff.info,  Node: Expressions-Footnotes,  Up: Expressions
-
-   (1) Note that, for example, '!(-1)' evaluates to 'true' because
-'gtroff' treats both negative numbers and zero as 'false'.
-
-
-File: groff.info,  Node: Identifiers,  Next: Embedded Commands,  Prev: Expressions,  Up: gtroff Reference
-
-5.4 Identifiers
-===============
-
-Like any other language, 'gtroff' has rules for properly formed
-"identifiers".  In 'gtroff', an identifier can be made up of almost any
-printable character, with the exception of the following characters:
-
-   * Whitespace characters (spaces, tabs, and newlines).
-
-   * Backspace (ASCII '0x08' or EBCDIC '0x16') and character code
-     '0x01'.
-
-   * The following input characters are invalid and are ignored if
-     'groff' runs on a machine based on ASCII, causing a warning message
-     of type 'input' (see *note Debugging::, for more details): '0x00',
-     '0x0B', '0x0D'-'0x1F', '0x80'-'0x9F'.
-
-     And here are the invalid input characters if 'groff' runs on an
-     EBCDIC host: '0x00', '0x08', '0x09', '0x0B', '0x0D'-'0x14',
-     '0x17'-'0x1F', '0x30'-'0x3F'.
-
-     Currently, some of these reserved codepoints are used internally,
-     thus making it non-trivial to extend 'gtroff' to cover Unicode or
-     other character sets and encodings that use characters of these
-     ranges.
-
-     Note that invalid characters are removed before parsing; an
-     identifier 'foo', followed by an invalid character, followed by
-     'bar' is treated as 'foobar'.
-
-   For example, any of the following is valid.
-
-     br
-     PP
-     (l
-     end-list
-     @_
-
-Note that identifiers longer than two characters with a closing bracket
-(']') in its name can't be accessed with escape sequences that expect an
-identifier as a parameter.  For example, '\[foo]]' accesses the glyph
-'foo', followed by ']', whereas '\C'foo]'' really asks for glyph 'foo]'.
-
-   To avoid problems with the 'refer' preprocessor, macro names should
-not start with '[' or ']'.  Due to backwards compatibility, everything
-after '.[' and '.]' is handled as a special argument to 'refer'.  For
-example, '.[foo' makes 'refer' to start a reference, using 'foo' as a
-parameter.
-
- -- Escape: \A'ident'
-     Test whether an identifier IDENT is valid in 'gtroff'.  It expands
-     to the character 1 or 0 according to whether its argument (usually
-     delimited by quotes) is or is not acceptable as the name of a
-     string, macro, diversion, number register, environment, or font.
-     It returns 0 if no argument is given.  This is useful for looking
-     up user input in some sort of associative table.
-
-          \A'end-list'
-              => 1
-
-   *Note Escapes::, for details on parameter delimiting characters.
-
-   Identifiers in 'gtroff' can be any length, but, in some contexts,
-'gtroff' needs to be told where identifiers end and text begins (and in
-different ways depending on their length):
-
-   * Single character.
-
-   * Two characters.  Must be prefixed with '(' in some situations.
-
-   * Arbitrary length ('gtroff' only).  Must be bracketed with '['
-     and ']' in some situations.  Any length identifier can be put in
-     brackets.
-
-   Unlike many other programming languages, undefined identifiers are
-silently ignored or expanded to nothing.  When 'gtroff' finds an
-undefined identifier, it emits a warning, doing the following:
-
-   * If the identifier is a string, macro, or diversion, 'gtroff'
-     defines it as empty.
-
-   * If the identifier is a number register, 'gtroff' defines it with a
-     value of 0.
-
-   *Note Warnings::., *note Interpolating Registers::, and *note
-Strings::.
-
-   Note that macros, strings, and diversions share the same name space.
-
-     .de xxx
-     .  nop foo
-     ..
-     .
-     .di xxx
-     bar
-     .br
-     .di
-     .
-     .xxx
-         => bar
-
-As can be seen in the previous example, 'gtroff' reuses the identifier
-'xxx', changing it from a macro to a diversion.  No warning is emitted!
-The contents of the first macro definition is lost.
-
-   *Note Interpolating Registers::, and *note Strings::.
-
-
-File: groff.info,  Node: Embedded Commands,  Next: Registers,  Prev: Identifiers,  Up: gtroff Reference
-
-5.5 Embedded Commands
-=====================
-
-Most documents need more functionality beyond filling, adjusting and
-implicit line breaking.  In order to gain further functionality,
-'gtroff' allows commands to be embedded into the text, in two ways.
-
-   The first is a "request" that takes up an entire line, and does some
-large-scale operation (e.g. break lines, start new pages).
-
-   The other is an "escape" that can be usually embedded anywhere in the
-text; most requests can accept it even as an argument.  Escapes
-generally do more minor operations like sub- and superscripts, print a
-symbol, etc.
-
-* Menu:
-
-* Requests::
-* Macros::
-* Escapes::
-
-
-File: groff.info,  Node: Requests,  Next: Macros,  Prev: Embedded Commands,  Up: Embedded Commands
-
-5.5.1 Requests
---------------
-
-A request line begins with a control character, which is either a single
-quote (''', the "no-break control character") or a period ('.', the
-normal "control character").  These can be changed; see *note Character
-Translations::, for details.  After this there may be optional tabs or
-spaces followed by an identifier, which is the name of the request.
-This may be followed by any number of space-separated arguments (_no_
-tabs here).
-
-   Since a control character followed by whitespace only is ignored, it
-is common practice to use this feature for structuring the source code
-of documents or macro packages.
-
-     .de foo
-     .  tm This is foo.
-     ..
-     .
-     .
-     .de bar
-     .  tm This is bar.
-     ..
-
-   Another possibility is to use the blank line macro request 'blm' by
-assigning an empty macro to it.
-
-     .de do-nothing
-     ..
-     .blm do-nothing  \" activate blank line macro
-
-     .de foo
-     .  tm This is foo.
-     ..
-
-
-     .de bar
-     .  tm This is bar.
-     ..
-
-     .blm             \" deactivate blank line macro
-
-   *Note Blank Line Traps::.
-
-   To begin a line with a control character without it being
-interpreted, precede it with '\&'.  This represents a zero width space,
-which means it does not affect the output.
-
-   In most cases the period is used as a control character.  Several
-requests cause a break implicitly; using the single quote control
-character prevents this.
-
- -- Register: \n[.br]
-     A read-only number register, which is set to 1 if a macro is called
-     with the normal control character (as defined with the 'cc'
-     request), and set to 0 otherwise.
-
-     This allows to reliably modify requests.
-
-          .als bp*orig bp
-          .de bp
-          .  tm before bp
-          .  ie \\n[.br] .bp*orig
-          .  el 'bp*orig
-          .  tm after bp
-          ..
-
-     Using this register outside of a macro makes no sense (it always
-     returns zero in such cases).
-
-     If a macro is called as a string (this is, using '\*'), the value
-     of the '.br' register is inherited from the calling macro.
-
-* Menu:
-
-* Request and Macro Arguments::
-
-
-File: groff.info,  Node: Request and Macro Arguments,  Prev: Requests,  Up: Requests
-
-5.5.1.1 Request and Macro Arguments
-...................................
-
-Arguments to requests and macros are processed much like the shell: The
-line is split into arguments according to spaces.(1)  (*note Request and
-Macro Arguments-Footnote-1::)
-
-   An argument to a macro that is intended to contain spaces can either
-be enclosed in double quotes, or have the spaces "escaped" with
-backslashes.  This is _not_ true for requests.
-
-   Here are a few examples for a hypothetical macro 'uh':
-
-     .uh The Mouse Problem
-     .uh "The Mouse Problem"
-     .uh The\ Mouse\ Problem
-
-The first line is the 'uh' macro being called with 3 arguments, 'The',
-'Mouse', and 'Problem'.  The latter two have the same effect of calling
-the 'uh' macro with one argument, 'The Mouse Problem'.(2)  (*note
-Request and Macro Arguments-Footnote-2::)
-
-   A double quote that isn't preceded by a space doesn't start a macro
-argument.  If not closing a string, it is printed literally.
-
-   For example,
-
-     .xxx a" "b c" "de"fg"
-
-has the arguments 'a"', 'b c', 'de', and 'fg"'.  Don't rely on this
-obscure behaviour!
-
-   There are two possibilities to get a double quote reliably.
-
-   * Enclose the whole argument with double quotes and use two
-     consecutive double quotes to represent a single one.  This
-     traditional solution has the disadvantage that double quotes don't
-     survive argument expansion again if called in compatibility mode
-     (using the '-C' option of 'groff'):
-
-          .de xx
-          .  tm xx: `\\$1' `\\$2' `\\$3'
-          .
-          .  yy "\\$1" "\\$2" "\\$3"
-          ..
-          .de yy
-          .  tm yy: `\\$1' `\\$2' `\\$3'
-          ..
-          .xx A "test with ""quotes""" .
-              => xx: `A' `test with "quotes"' `.'
-              => yy: `A' `test with ' `quotes""'
-
-     If not in compatibility mode, you get the expected result
-
-          xx: `A' `test with "quotes"' `.'
-          yy: `A' `test with "quotes"' `.'
-
-     since 'gtroff' preserves the input level.
-
-   * Use the double quote glyph '\(dq'.  This works with and without
-     compatibility mode enabled since 'gtroff' doesn't convert '\(dq'
-     back to a double quote input character.
-
-     Note that this method won't work with UNIX 'troff' in general since
-     the glyph 'dq' isn't defined normally.
-
-   Double quotes in the 'ds' request are handled differently.  *Note
-Strings::, for more details.
-
-
-File: groff.info,  Node: Request and Macro Arguments-Footnotes,  Up: Request and Macro Arguments
-
-   (1) Plan 9's 'troff' implementation also allows tabs for argument
-separation - 'gtroff' intentionally doesn't support this.
-
-   (2) The last solution, i.e., using escaped spaces, is "classical" in
-the sense that it can be found in most 'troff' documents.  Nevertheless,
-it is not optimal in all situations, since '\ ' inserts a fixed-width,
-non-breaking space character that can't stretch.  'gtroff' provides a
-different command '\~' to insert a stretchable, non-breaking space.
-
-
-File: groff.info,  Node: Macros,  Next: Escapes,  Prev: Requests,  Up: Embedded Commands
-
-5.5.2 Macros
-------------
-
-'gtroff' has a "macro" facility for defining a series of lines that can
-be invoked by name.  They are called in the same manner as requests -
-arguments also may be passed basically in the same manner.
-
-   *Note Writing Macros::, and *note Request and Macro Arguments::.
-
-
-File: groff.info,  Node: Escapes,  Prev: Macros,  Up: Embedded Commands
-
-5.5.3 Escapes
--------------
-
-Escapes may occur anywhere in the input to 'gtroff'.  They usually begin
-with a backslash and are followed by a single character, which indicates
-the function to be performed.  The escape character can be changed; see
-*note Character Translations::.
-
-   Escape sequences that require an identifier as a parameter accept
-three possible syntax forms.
-
-   * The next single character is the identifier.
-
-   * If this single character is an opening parenthesis, take the
-     following two characters as the identifier.  Note that there is no
-     closing parenthesis after the identifier.
-
-   * If this single character is an opening bracket, take all characters
-     until a closing bracket as the identifier.
-
-Examples:
-
-     \fB
-     \n(XX
-     \*[TeX]
-
-   Other escapes may require several arguments and/or some special
-format.  In such cases the argument is traditionally enclosed in single
-quotes (and quotes are always used in this manual for the definitions of
-escape sequences).  The enclosed text is then processed according to
-what that escape expects.  Example:
-
-     \l'1.5i\(bu'
-
-   Note that the quote character can be replaced with any other
-character that does not occur in the argument (even a newline or a space
-character) in the following escapes: '\o', '\b', and '\X'.  This makes
-e.g.
-
-     A caf
-     \o
-     e\'
-
-
-     in Paris
-       => A caf� in Paris
-
-possible, but it is better not to use this feature to avoid confusion.
-
-   The following escapes sequences (which are handled similarly to
-characters since they don't take a parameter) are also allowed as
-delimiters: '\%', '\ ', '\|', '\^', '\{', '\}', '\'', '\`', '\-', '\_',
-'\!', '\?', '\)', '\/', '\,', '\&', '\:', '\~', '\0', '\a', '\c', '\d',
-'\e', '\E', '\p', '\r', '\t', and '\u'.  Again, don't use these if
-possible.
-
-   No newline characters as delimiters are allowed in the following
-escapes: '\A', '\B', '\Z', '\C', and '\w'.
-
-   Finally, the escapes '\D', '\h', '\H', '\l', '\L', '\N', '\R', '\s',
-'\S', '\v', and '\x' can't use the following characters as delimiters:
-
-   * The digits '0'-'9'.
-
-   * The (single-character) operators '+-/*%<>=&:().'.
-
-   * The space, tab, and newline characters.
-
-   * All escape sequences except '\%', '\:', '\{', '\}', '\'', '\`',
-     '\-', '\_', '\!', '\/', '\c', '\e', and '\p'.
-
-   To have a backslash (actually, the current escape character) appear
-in the output several escapes are defined: '\\', '\e' or '\E'.  These
-are very similar, and only differ with respect to being used in macros
-or diversions.  *Note Character Translations::, for an exact description
-of those escapes.
-
-   *Note Implementation Differences::, *note Copy-in Mode::, and *note
-Diversions::, *note Identifiers::, for more information.
-
-* Menu:
-
-* Comments::
-
-
-File: groff.info,  Node: Comments,  Prev: Escapes,  Up: Escapes
-
-5.5.3.1 Comments
-................
-
-Probably one of the most(1) (*note Comments-Footnote-1::) common forms
-of escapes is the comment.
-
- -- Escape: \"
-     Start a comment.  Everything to the end of the input line is
-     ignored.
-
-     This may sound simple, but it can be tricky to keep the comments
-     from interfering with the appearance of the final output.
-
-     If the escape is to the right of some text or a request, that
-     portion of the line is ignored, but the space leading up to it is
-     noticed by 'gtroff'.  This only affects the 'ds' and 'as' request
-     and its variants.
-
-     One possibly irritating idiosyncracy is that tabs must not be used
-     to line up comments.  Tabs are not treated as whitespace between
-     the request and macro arguments.
-
-     A comment on a line by itself is treated as a blank line, because
-     after eliminating the comment, that is all that remains:
-
-          Test
-          \" comment
-          Test
-
-     produces
-
-          Test
-
-          Test
-
-     To avoid this, it is common to start the line with '.\"', which
-     causes the line to be treated as an undefined request and thus
-     ignored completely.
-
-     Another commenting scheme seen sometimes is three consecutive
-     single quotes (''''') at the beginning of a line.  This works, but
-     'gtroff' gives a warning about an undefined macro (namely ''''),
-     which is harmless, but irritating.
-
- -- Escape: \#
-     To avoid all this, 'gtroff' has a new comment mechanism using the
-     '\#' escape.  This escape works the same as '\"' except that the
-     newline is also ignored:
-
-          Test
-          \# comment
-          Test
-
-     produces
-
-          Test Test
-
-     as expected.
-
- -- Request: .ig [end]
-     Ignore all input until 'gtroff' encounters the macro named '.'END
-     on a line by itself (or '..' if END is not specified).  This is
-     useful for commenting out large blocks of text:
-
-          text text text...
-          .ig
-          This is part of a large block
-          of text that has been
-          temporarily(?) commented out.
-
-          We can restore it simply by removing
-          the .ig request and the ".." at the
-          end of the block.
-          ..
-          More text text text...
-
-     produces
-
-          text text text...  More text text text...
-
-     Note that the commented-out block of text does not cause a break.
-
-     The input is read in copy-mode; auto-incremented registers _are_
-     affected (*note Auto-increment::).
-
-
-File: groff.info,  Node: Comments-Footnotes,  Up: Comments
-
-   (1) Unfortunately, this is a lie.  But hopefully future 'gtroff'
-hackers will believe it ':-)'
-
-
-File: groff.info,  Node: Registers,  Next: Manipulating Filling and Adjusting,  Prev: Embedded Commands,  Up: gtroff Reference
-
-5.6 Registers
-=============
-
-Numeric variables in 'gtroff' are called "registers".  There are a
-number of built-in registers, supplying anything from the date to
-details of formatting parameters.
-
-   *Note Identifiers::, for details on register identifiers.
-
-* Menu:
-
-* Setting Registers::
-* Interpolating Registers::
-* Auto-increment::
-* Assigning Formats::
-* Built-in Registers::
-
-
-File: groff.info,  Node: Setting Registers,  Next: Interpolating Registers,  Prev: Registers,  Up: Registers
-
-5.6.1 Setting Registers
------------------------
-
-Define or set registers using the 'nr' request or the '\R' escape.
-
-   Although the following requests and escapes can be used to create
-registers, simply using an undefined register will cause it to be set to
-zero.
-
- -- Request: .nr ident value
- -- Escape: \R'ident value'
-     Set number register IDENT to VALUE.  If IDENT doesn't exist,
-     'gtroff' creates it.
-
-     The argument to '\R' usually has to be enclosed in quotes.  *Note
-     Escapes::, for details on parameter delimiting characters.
-
-     The '\R' escape doesn't produce an input token in 'gtroff'; in
-     other words, it vanishes completely after 'gtroff' has processed
-     it.
-
-     For example, the following two lines are equivalent:
-
-          .nr a (((17 + (3 * 4))) % 4)
-          \R'a (((17 + (3 * 4))) % 4)'
-              => 1
-
-     Note that the complete transparency of '\R' can cause surprising
-     effects if you use number registers like '.k', which get evaluated
-     at the time they are accessed.
-
-          .ll 1.6i
-          .
-          aaa bbb ccc ddd eee fff ggg hhh\R':k \n[.k]'
-          .tm :k == \n[:k]
-              => :k == 126950
-          .
-          .br
-          .
-          aaa bbb ccc ddd eee fff ggg hhh\h'0'\R':k \n[.k]'
-          .tm :k == \n[:k]
-              => :k == 15000
-
-     If you process this with the POSTSCRIPT device ('-Tps'), there will
-     be a line break eventually after 'ggg' in both input lines.
-     However, after processing the space after 'ggg', the partially
-     collected line is not overfull yet, so 'troff' continues to collect
-     input until it sees the space (or in this case, the newline) after
-     'hhh'.  At this point, the line is longer than the line length, and
-     the line gets broken.
-
-     In the first input line, since the '\R' escape leaves no traces,
-     the check for the overfull line hasn't been done yet at the point
-     where '\R' gets handled, and you get a value for the '.k' number
-     register that is even greater than the current line length.
-
-     In the second input line, the insertion of '\h'0'' to emit an
-     invisible zero-width space forces 'troff' to check the line length,
-     which in turn causes the start of a new output line.  Now '.k'
-     returns the expected value.
-
-   Both 'nr' and '\R' have two additional special forms to increment or
-decrement a register.
-
- -- Request: .nr ident +value
- -- Request: .nr ident -value
- -- Escape: \R'ident +value'
- -- Escape: \R'ident -value'
-     Increment (decrement) register IDENT by VALUE.
-
-          .nr a 1
-          .nr a +1
-          \na
-              => 2
-
-     To assign the negated value of a register to another register, some
-     care must be taken to get the desired result:
-
-          .nr a 7
-          .nr b 3
-          .nr a -\nb
-          \na
-              => 4
-          .nr a (-\nb)
-          \na
-              => -3
-
-     The surrounding parentheses prevent the interpretation of the minus
-     sign as a decrementing operator.  An alternative is to start the
-     assignment with a '0':
-
-          .nr a 7
-          .nr b -3
-          .nr a \nb
-          \na
-              => 4
-          .nr a 0\nb
-          \na
-              => -3
-
- -- Request: .rr ident
-     Remove number register IDENT.  If IDENT doesn't exist, the request
-     is ignored.
-
- -- Request: .rnn ident1 ident2
-     Rename number register IDENT1 to IDENT2.  If either IDENT1 or
-     IDENT2 doesn't exist, the request is ignored.
-
- -- Request: .aln ident1 ident2
-     Create an alias IDENT1 for a number register IDENT2.  The new name
-     and the old name are exactly equivalent.  If IDENT1 is undefined, a
-     warning of type 'reg' is generated, and the request is ignored.
-     *Note Debugging::, for information about warnings.
-
-
-File: groff.info,  Node: Interpolating Registers,  Next: Auto-increment,  Prev: Setting Registers,  Up: Registers
-
-5.6.2 Interpolating Registers
------------------------------
-
-Numeric registers can be accessed via the '\n' escape.
-
- -- Escape: \ni
- -- Escape: \n(id
- -- Escape: \n[ident]
-     Interpolate number register with name IDENT (one-character name I,
-     two-character name ID).  This means that the value of the register
-     is expanded in-place while 'gtroff' is parsing the input line.
-     Nested assignments (also called indirect assignments) are possible.
-
-          .nr a 5
-          .nr as \na+\na
-          \n(as
-              => 10
-
-          .nr a1 5
-          .nr ab 6
-          .ds str b
-          .ds num 1
-          \n[a\n[num]]
-              => 5
-          \n[a\*[str]]
-              => 6
-
-
-File: groff.info,  Node: Auto-increment,  Next: Assigning Formats,  Prev: Interpolating Registers,  Up: Registers
-
-5.6.3 Auto-increment
---------------------
-
-Number registers can also be auto-incremented and auto-decremented.  The
-increment or decrement value can be specified with a third argument to
-the 'nr' request or '\R' escape.
-
- -- Request: .nr ident value incr
-     Set number register IDENT to VALUE; the increment for
-     auto-incrementing is set to INCR.  Note that the '\R' escape
-     doesn't support this notation.
-
-   To activate auto-incrementing, the escape '\n' has a special syntax
-form.
-
- -- Escape: \n+i
- -- Escape: \n-i
- -- Escape: \n(+id
- -- Escape: \n(-id
- -- Escape: \n+(id
- -- Escape: \n-(id
- -- Escape: \n[+ident]
- -- Escape: \n[-ident]
- -- Escape: \n+[ident]
- -- Escape: \n-[ident]
-     Before interpolating, increment or decrement IDENT (one-character
-     name I, two-character name ID) by the auto-increment value as
-     specified with the 'nr' request (or the '\R' escape).  If no
-     auto-increment value has been specified, these syntax forms are
-     identical to '\n'.
-
-   For example,
-
-     .nr a 0 1
-     .nr xx 0 5
-     .nr foo 0 -2
-     \n+a, \n+a, \n+a, \n+a, \n+a
-     .br
-     \n-(xx, \n-(xx, \n-(xx, \n-(xx, \n-(xx
-     .br
-     \n+[foo], \n+[foo], \n+[foo], \n+[foo], \n+[foo]
-
-produces
-
-     1, 2, 3, 4, 5
-     -5, -10, -15, -20, -25
-     -2, -4, -6, -8, -10
-
-   To change the increment value without changing the value of a
-register (A in the example), the following can be used:
-
-     .nr a \na 10
-
-
-File: groff.info,  Node: Assigning Formats,  Next: Built-in Registers,  Prev: Auto-increment,  Up: Registers
-
-5.6.4 Assigning Formats
------------------------
-
-When a register is used, it is always textually replaced (or
-interpolated) with a representation of that number.  This output format
-can be changed to a variety of formats (numbers, Roman numerals, etc.).
-This is done using the 'af' request.
-
- -- Request: .af ident format
-     Change the output format of a number register.  The first argument
-     IDENT is the name of the number register to be changed, and the
-     second argument FORMAT is the output format.  The following output
-     formats are available:
-
-     '1'
-          Decimal arabic numbers.  This is the default format: 0, 1, 2,
-          3, ...
-
-     '0...0'
-          Decimal numbers with as many digits as specified.  So, '00'
-          would result in printing numbers as 01, 02, 03, ...
-
-          In fact, any digit instead of zero does work; 'gtroff' only
-          counts how many digits are specified.  As a consequence,
-          'af''s default format '1' could be specified as '0' also (and
-          exactly this is returned by the '\g' escape, see below).
-
-     'I'
-          Upper-case Roman numerals: 0, I, II, III, IV, ...
-
-     'i'
-          Lower-case Roman numerals: 0, i, ii, iii, iv, ...
-
-     'A'
-          Upper-case letters: 0, A, B, C, ..., Z, AA, AB, ...
-
-     'a'
-          Lower-case letters: 0, a, b, c, ..., z, aa, ab, ...
-
-     Omitting the number register format causes a warning of type
-     'missing'.  *Note Debugging::, for more details.  Specifying a
-     nonexistent format causes an error.
-
-     The following example produces '10, X, j, 010':
-
-          .nr a 10
-          .af a 1           \" the default format
-          \na,
-          .af a I
-          \na,
-          .af a a
-          \na,
-          .af a 001
-          \na
-
-     The largest number representable for the 'i' and 'I' formats is
-     39999 (or -39999); UNIX 'troff' uses 'z' and 'w' to represent 10000
-     and 5000 in Roman numerals, and so does 'gtroff'.  Currently, the
-     correct glyphs of Roman numeral five thousand and Roman numeral ten
-     thousand (Unicode code points 'U+2182' and 'U+2181', respectively)
-     are not available.
-
-     If IDENT doesn't exist, it is created.
-
-     Changing the output format of a read-only register causes an error.
-     It is necessary to first copy the register's value to a writeable
-     register, then apply the 'af' request to this other register.
-
- -- Escape: \gi
- -- Escape: \g(id
- -- Escape: \g[ident]
-     Return the current format of the specified register IDENT
-     (one-character name I, two-character name ID).  For example, '\ga'
-     after the previous example would produce the string '000'.  If the
-     register hasn't been defined yet, nothing is returned.
-
-
-File: groff.info,  Node: Built-in Registers,  Prev: Assigning Formats,  Up: Registers
-
-5.6.5 Built-in Registers
-------------------------
-
-The following lists some built-in registers that are not described
-elsewhere in this manual.  Any register that begins with a '.' is
-read-only.  A complete listing of all built-in registers can be found in
-*note Register Index::.
-
-'\n[.F]'
-     This string-valued register returns the current input file name.
-
-'\n[.H]'
-     Horizontal resolution in basic units.
-
-'\n[.R]'
-     The number of number registers available.  This is always 10000 in
-     GNU 'troff'; it exists for backward compatibility.
-
-'\n[.U]'
-     If 'gtroff' is called with the '-U' command line option to activate
-     unsafe mode, the number register '.U' is set to 1, and to zero
-     otherwise.  *Note Groff Options::.
-
-'\n[.V]'
-     Vertical resolution in basic units.
-
-'\n[seconds]'
-     The number of seconds after the minute, normally in the range 0
-     to 59, but can be up to 61 to allow for leap seconds.  Initialized
-     at start-up of 'gtroff'.
-
-'\n[minutes]'
-     The number of minutes after the hour, in the range 0 to 59.
-     Initialized at start-up of 'gtroff'.
-
-'\n[hours]'
-     The number of hours past midnight, in the range 0 to 23.
-     Initialized at start-up of 'gtroff'.
-
-'\n[dw]'
-     Day of the week (1-7).
-
-'\n[dy]'
-     Day of the month (1-31).
-
-'\n[mo]'
-     Current month (1-12).
-
-'\n[year]'
-     The current year.
-
-'\n[yr]'
-     The current year minus 1900.  Unfortunately, the documentation of
-     UNIX Version 7's 'troff' had a year 2000 bug: It incorrectly
-     claimed that 'yr' contains the last two digits of the year.  That
-     claim has never been true of either AT&T 'troff' or GNU 'troff'.
-     Old 'troff' input that looks like this:
-
-          '\" The following line stopped working after 1999
-          This document was formatted in 19\n(yr.
-
-     can be corrected as follows:
-
-          This document was formatted in \n[year].
-
-     or, to be portable to older 'troff' versions, as follows:
-
-          .nr y4 1900+\n(yr
-          This document was formatted in \n(y4.
-
-'\n[.c]'
-'\n[c.]'
-     The current _input_ line number.  Register '.c' is read-only,
-     whereas 'c.' (a 'gtroff' extension) is writable also, affecting
-     both '.c' and 'c.'.
-
-'\n[ln]'
-     The current _output_ line number after a call to the 'nm' request
-     to activate line numbering.
-
-     *Note Miscellaneous::, for more information about line numbering.
-
-'\n[.x]'
-     The major version number.  For example, if the version number is
-     1.03 then '.x' contains '1'.
-
-'\n[.y]'
-     The minor version number.  For example, if the version number is
-     1.03 then '.y' contains '03'.
-
-'\n[.Y]'
-     The revision number of 'groff'.
-
-'\n[$$]'
-     The process ID of 'gtroff'.
-
-'\n[.g]'
-     Always 1.  Macros should use this to determine whether they are
-     running under GNU 'troff'.
-
-'\n[.A]'
-     If the command line option '-a' is used to produce an ASCII
-     approximation of the output, this is set to 1, zero otherwise.
-     *Note Groff Options::.
-
-'\n[.O]'
-     This read-only register is set to the suppression nesting level
-     (see escapes '\O').  *Note Suppressing output::.
-
-'\n[.P]'
-     This register is set to 1 (and to 0 otherwise) if the current page
-     is actually being printed, i.e., if the '-o' option is being used
-     to only print selected pages.  *Note Groff Options::, for more
-     information.
-
-'\n[.T]'
-     If 'gtroff' is called with the '-T' command line option, the number
-     register '.T' is set to 1, and zero otherwise.  *Note Groff
-     Options::.
-
-'\*[.T]'
-     A single read-write string register that contains the current
-     output device (for example, 'latin1' or 'ps').  This is the only
-     string register defined by 'gtroff'.
-
-
-File: groff.info,  Node: Manipulating Filling and Adjusting,  Next: Manipulating Hyphenation,  Prev: Registers,  Up: gtroff Reference
-
-5.7 Manipulating Filling and Adjusting
-======================================
-
-Various ways of causing "breaks" were given in *note Implicit Line
-Breaks::.  The 'br' request likewise causes a break.  Several other
-requests also cause breaks, but implicitly.  These are 'bp', 'ce', 'cf',
-'fi', 'fl', 'in', 'nf', 'rj', 'sp', 'ti', and 'trf'.
-
- -- Request: .br
-     Break the current line, i.e., the input collected so far is emitted
-     without adjustment.
-
-     If the no-break control character is used, 'gtroff' suppresses the
-     break:
-
-          a
-          'br
-          b
-              => a b
-
-   Initially, 'gtroff' fills and adjusts text to both margins.  Filling
-can be disabled via the 'nf' request and re-enabled with the 'fi'
-request.
-
- -- Request: .fi
- -- Register: \n[.u]
-     Activate fill mode (which is the default).  This request implicitly
-     enables adjusting; it also inserts a break in the text currently
-     being filled.  The read-only number register '.u' is set to 1.
-
-     The fill mode status is associated with the current environment
-     (*note Environments::).
-
-     See *note Line Control::, for interaction with the '\c' escape.
-
- -- Request: .nf
-     Activate no-fill mode.  Input lines are output as-is, retaining
-     line breaks and ignoring the current line length.  This command
-     implicitly disables adjusting; it also causes a break.  The number
-     register '.u' is set to 0.
-
-     The fill mode status is associated with the current environment
-     (*note Environments::).
-
-     See *note Line Control::, for interaction with the '\c' escape.
-
- -- Request: .ad [mode]
- -- Register: \n[.j]
-     Set adjusting mode.
-
-     Activation and deactivation of adjusting is done implicitly with
-     calls to the 'fi' or 'nf' requests.
-
-     MODE can have one of the following values:
-
-     'l'
-          Adjust text to the left margin.  This produces what is
-          traditionally called ragged-right text.
-
-     'r'
-          Adjust text to the right margin, producing ragged-left text.
-
-     'c'
-          Center filled text.  This is different to the 'ce' request,
-          which only centers text without filling.
-
-     'b'
-     'n'
-          Justify to both margins.  This is the default used by
-          'gtroff'.
-
-     Finally, MODE can be the numeric argument returned by the '.j'
-     register.
-
-     Using 'ad' without argument is the same as saying '.ad \[.j]'.  In
-     particular, 'gtroff' adjusts lines in the same way it did before
-     adjusting was deactivated (with a call to 'na', say).  For example,
-     this input code
-
-          .de AD
-          .  br
-          .  ad \\$1
-          ..
-          .
-          .de NA
-          .  br
-          .  na
-          ..
-          .
-          textA
-          .AD r
-          .nr ad \n[.j]
-          textB
-          .AD c
-          textC
-          .NA
-          textD
-          .AD         \" back to centering
-          textE
-          .AD \n[ad]  \" back to right justifying
-          textF
-
-     produces the following output:
-
-          textA
-                                                              textB
-                                    textC
-          textD
-                                    textE
-                                                              textF
-
-     As just demonstrated, the current adjustment mode is available in
-     the read-only number register '.j'; it can be stored and
-     subsequently used to set adjustment.
-
-     The adjustment mode status is associated with the current
-     environment (*note Environments::).
-
- -- Request: .na
-     Disable adjusting.  This request won't change the current
-     adjustment mode: A subsequent call to 'ad' uses the previous
-     adjustment setting.
-
-     The adjustment mode status is associated with the current
-     environment (*note Environments::).
-
- -- Request: .brp
- -- Escape: \p
-     Adjust the current line and cause a break.
-
-     In most cases this produces very ugly results since 'gtroff'
-     doesn't have a sophisticated paragraph building algorithm (as TeX
-     have, for example); instead, 'gtroff' fills and adjusts a paragraph
-     line by line:
-
-          This is an uninteresting sentence.
-          This is an uninteresting sentence.\p
-          This is an uninteresting sentence.
-
-     is formatted as
-
-          This is  an uninteresting  sentence.   This  is an
-          uninteresting                            sentence.
-          This is an uninteresting sentence.
-
- -- Request: .ss word_space_size [sentence_space_size]
- -- Register: \n[.ss]
- -- Register: \n[.sss]
-     Change the size of a space between words.  It takes its units as
-     one twelfth of the space width parameter for the current font.
-     Initially both the WORD_SPACE_SIZE and SENTENCE_SPACE_SIZE are 12.
-     In fill mode, the values specify the minimum distance.
-
-     If two arguments are given to the 'ss' request, the second argument
-     sets the sentence space size.  If the second argument is not given,
-     sentence space size is set to WORD_SPACE_SIZE.  The sentence space
-     size is used in two circumstances: If the end of a sentence occurs
-     at the end of a line in fill mode, then both an inter-word space
-     and a sentence space are added; if two spaces follow the end of a
-     sentence in the middle of a line, then the second space is a
-     sentence space.  If a second argument is never given to the 'ss'
-     request, the behaviour of UNIX 'troff' is the same as that
-     exhibited by GNU 'troff'.  In GNU 'troff', as in UNIX 'troff', a
-     sentence should always be followed by either a newline or two
-     spaces.
-
-     The read-only number registers '.ss' and '.sss' hold the values of
-     the parameters set by the first and second arguments of the 'ss'
-     request.
-
-     The word space and sentence space values are associated with the
-     current environment (*note Environments::).
-
-     Contrary to AT&T 'troff', this request is _not_ ignored if a TTY
-     output device is used; the given values are then rounded down to a
-     multiple of 12 (*note Implementation Differences::).
-
-     The request is ignored if there is no parameter.
-
-     Another useful application of the 'ss' request is to insert
-     discardable horizontal space, i.e., space that is discarded at a
-     line break.  For example, paragraph-style footnotes could be
-     separated this way:
-
-          .ll 4.5i
-          1.\ This is the first footnote.\c
-          .ss 48
-          .nop
-          .ss 12
-          2.\ This is the second footnote.
-
-     The result:
-
-          1. This is the first footnote.        2. This
-          is the second footnote.
-
-     Note that the '\h' escape produces unbreakable space.
-
- -- Request: .ce [nnn]
- -- Register: \n[.ce]
-     Center text.  While the '.ad c' request also centers text, it fills
-     the text as well.  'ce' does not fill the text it affects.  This
-     request causes a break.  The number of lines still to be centered
-     is associated with the current environment (*note Environments::).
-
-     The following example demonstrates the differences.  Here the
-     input:
-
-          .ll 4i
-          .ce 1000
-          This is a small text fragment that shows the differences
-          between the `.ce' and the `.ad c' request.
-          .ce 0
-
-          .ad c
-          This is a small text fragment that shows the differences
-          between the `.ce' and the `.ad c' request.
-
-     And here the result:
-
-            This is a small text fragment that
-                   shows the differences
-          between the `.ce' and the `.ad c' request.
-
-            This is a small text fragment that
-          shows the differences between the `.ce'
-                  and the `.ad c' request.
-
-     With no arguments, 'ce' centers the next line of text.  NNN
-     specifies the number of lines to be centered.  If the argument is
-     zero or negative, centering is disabled.
-
-     The basic length for centering text is the line length (as set with
-     the 'll' request) minus the indentation (as set with the 'in'
-     request).  Temporary indentation is ignored.
-
-     As can be seen in the previous example, it is a common idiom to
-     turn on centering for a large number of lines, and to turn off
-     centering after text to be centered.  This is useful for any
-     request that takes a number of lines as an argument.
-
-     The '.ce' read-only number register contains the number of lines
-     remaining to be centered, as set by the 'ce' request.
-
- -- Request: .rj [nnn]
- -- Register: \n[.rj]
-     Justify unfilled text to the right margin.  Arguments are identical
-     to the 'ce' request.  The '.rj' read-only number register is the
-     number of lines to be right-justified as set by the 'rj' request.
-     This request causes a break.  The number of lines still to be
-     right-justified is associated with the current environment (*note
-     Environments::).
-
-
-File: groff.info,  Node: Manipulating Hyphenation,  Next: Manipulating Spacing,  Prev: Manipulating Filling and Adjusting,  Up: gtroff Reference
-
-5.8 Manipulating Hyphenation
-============================
-
-Here a description of requests that influence hyphenation.
-
- -- Request: .hy [mode]
- -- Register: \n[.hy]
-     Enable hyphenation.  The request has an optional numeric argument,
-     MODE, to restrict hyphenation if necessary:
-
-     '1'
-          The default argument if MODE is omitted.  Hyphenate without
-          restrictions.  This is also the start-up value of 'gtroff'.
-
-     '2'
-          Do not hyphenate the last word on a page or column.
-
-     '4'
-          Do not hyphenate the last two characters of a word.
-
-     '8'
-          Do not hyphenate the first two characters of a word.
-
-     Values in the previous table are additive.  For example, the
-     value 12 causes 'gtroff' to neither hyphenate the last two nor the
-     first two characters of a word.
-
-     The current hyphenation restrictions can be found in the read-only
-     number register '.hy'.
-
-     The hyphenation mode is associated with the current environment
-     (*note Environments::).
-
- -- Request: .nh
-     Disable hyphenation (i.e., set the hyphenation mode to zero).  Note
-     that the hyphenation mode of the last call to 'hy' is not
-     remembered.
-
-     The hyphenation mode is associated with the current environment
-     (*note Environments::).
-
- -- Request: .hlm [nnn]
- -- Register: \n[.hlm]
- -- Register: \n[.hlc]
-     Set the maximum number of consecutive hyphenated lines to NNN.  If
-     this number is negative, there is no maximum.  The default value
-     is -1 if NNN is omitted.  This value is associated with the current
-     environment (*note Environments::).  Only lines output from a given
-     environment count towards the maximum associated with that
-     environment.  Hyphens resulting from '\%' are counted; explicit
-     hyphens are not.
-
-     The current setting of 'hlm' is available in the '.hlm' read-only
-     number register.  Also the number of immediately preceding
-     consecutive hyphenated lines are available in the read-only number
-     register '.hlc'.
-
- -- Request: .hw word1 word2 ...
-     Define how WORD1, WORD2, etc. are to be hyphenated.  The words must
-     be given with hyphens at the hyphenation points.  For example:
-
-          .hw in-sa-lub-rious
-
-     Besides the space character, any character whose hyphenation code
-     value is zero can be used to separate the arguments of 'hw' (see
-     the documentation for the 'hcode' request below for more
-     information).  In addition, this request can be used more than
-     once.
-
-     Hyphenation exceptions specified with the 'hw' request are
-     associated with the current hyphenation language; it causes an
-     error if there is no current hyphenation language.
-
-     This request is ignored if there is no parameter.
-
-     In old versions of 'troff' there was a limited amount of space to
-     store such information; fortunately, with 'gtroff', this is no
-     longer a restriction.
-
- -- Escape: \%
- -- Escape: \:
-     To tell 'gtroff' how to hyphenate words on the fly, use the '\%'
-     escape, also known as the "hyphenation character".  Preceding a
-     word with this character prevents it from being hyphenated; putting
-     it inside a word indicates to 'gtroff' that the word may be
-     hyphenated at that point.  Note that this mechanism only affects
-     that one occurrence of the word; to change the hyphenation of a
-     word for the entire document, use the 'hw' request.
-
-     The '\:' escape inserts a zero-width break point (that is, the word
-     breaks but without adding a hyphen).
-
-          ... check the /var/log/\:httpd/\:access_log file ...
-
-     Note that '\X' and '\Y' start a word, that is, the '\%' escape in
-     (say) '\X'...'\%foobar' and '\Y'...'\%foobar' no longer prevents
-     hyphenation but inserts a hyphenation point at the beginning of
-     'foobar'; most likely this isn't what you want to do.
-
- -- Request: .hc [char]
-     Change the hyphenation character to CHAR.  This character then
-     works the same as the '\%' escape, and thus, no longer appears in
-     the output.  Without an argument, 'hc' resets the hyphenation
-     character to be '\%' (the default) only.
-
-     The hyphenation character is associated with the current
-     environment (*note Environments::).
-
- -- Request: .hpf pattern_file
- -- Request: .hpfa pattern_file
- -- Request: .hpfcode a b [c d ...]
-     Read in a file of hyphenation patterns.  This file is searched for
-     in the same way as 'NAME.tmac' (or 'tmac.NAME') is searched for if
-     the '-mNAME' option is specified.
-
-     It should have the same format as (simple) TeX patterns files.
-     More specifically, the following scanning rules are implemented.
-
-        * A percent sign starts a comment (up to the end of the line)
-          even if preceded by a backslash.
-
-        * No support for 'digraphs' like '\$'.
-
-        * '^^XX' (X is 0-9 or a-f) and '^^X' (character code of X in the
-          range 0-127) are recognized; other use of '^' causes an error.
-
-        * No macro expansion.
-
-        * 'hpf' checks for the expression '\patterns{...}' (possibly
-          with whitespace before and after the braces).  Everything
-          between the braces is taken as hyphenation patterns.
-          Consequently, '{' and '}' are not allowed in patterns.
-
-        * Similarly, '\hyphenation{...}' gives a list of hyphenation
-          exceptions.
-
-        * '\endinput' is recognized also.
-
-        * For backwards compatibility, if '\patterns' is missing, the
-          whole file is treated as a list of hyphenation patterns (only
-          recognizing the '%' character as the start of a comment).
-
-     If no 'hpf' request is specified (either in the document or in a
-     macro package), 'gtroff' won't hyphenate at all.
-
-     The 'hpfa' request appends a file of patterns to the current list.
-
-     The 'hpfcode' request defines mapping values for character codes in
-     hyphenation patterns.  'hpf' or 'hpfa' then apply the mapping
-     (after reading the patterns) before replacing or appending them to
-     the current list of patterns.  Its arguments are pairs of character
-     codes - integers from 0 to 255.  The request maps character code A
-     to code B, code C to code D, and so on.  You can use character
-     codes that would be invalid otherwise.  By default, everything maps
-     to itself except letters 'A' to 'Z', which map to 'a' to 'z'.
-
-     The set of hyphenation patterns is associated with the current
-     language set by the 'hla' request.  The 'hpf' request is usually
-     invoked by the 'troffrc' or 'troffrc-end' file; by default,
-     'troffrc' loads hyphenation patterns and exceptions for American
-     English (in files 'hyphen.us' and 'hyphenex.us').
-
-     A second call to 'hpf' (for the same language) replaces the
-     hyphenation patterns with the new ones.
-
-     Invoking 'hpf' causes an error if there is no current hyphenation
-     language.
-
- -- Request: .hcode c1 code1 [c2 code2 ...]
-     Set the hyphenation code of character C1 to CODE1, that of C2 to
-     CODE2, etc.  A hyphenation code must be a single input character
-     (not a special character) other than a digit or a space.
-
-     To make hyphenation work, hyphenation codes must be set up.  At
-     start-up, groff only assigns hyphenation codes to the letters
-     'a'-'z' (mapped to themselves) and to the letters 'A'-'Z' (mapped
-     to 'a'-'z'); all other hyphenation codes are set to zero.
-     Normally, hyphenation patterns contain only lowercase letters,
-     which should be applied regardless of case.  In other words, the
-     words 'FOO' and 'Foo' should be hyphenated exactly the same way as
-     the word 'foo' is hyphenated, and this is what 'hcode' is good for.
-     Words that contain other letters won't be hyphenated properly if
-     the corresponding hyphenation patterns actually do contain them.
-     For example, the following 'hcode' requests are necessary to assign
-     hyphenation codes to the letters '�������' (this is needed for
-     German):
-
-          .hcode � �  � �
-          .hcode � �  � �
-          .hcode � �  � �
-          .hcode � �
-
-     Without those assignments, groff treats German words like
-     'Kinderg�rten' (the plural form of 'kindergarten') as two
-     substrings 'kinderg' and 'rten' because the hyphenation code of the
-     umlaut a is zero by default.  There is a German hyphenation pattern
-     that covers 'kinder', so groff finds the hyphenation 'kin-der'.
-     The other two hyphenation points ('kin-der-g�r-ten') are missed.
-
-     This request is ignored if it has no parameter.
-
- -- Request: .hym [length]
- -- Register: \n[.hym]
-     Set the (right) hyphenation margin to LENGTH.  If the current
-     adjustment mode is not 'b' or 'n', the line is not hyphenated if it
-     is shorter than LENGTH.  Without an argument, the hyphenation
-     margin is reset to its default value, which is 0.  The default
-     scaling indicator for this request is 'm'.  The hyphenation margin
-     is associated with the current environment (*note Environments::).
-
-     A negative argument resets the hyphenation margin to zero, emitting
-     a warning of type 'range'.
-
-     The current hyphenation margin is available in the '.hym' read-only
-     number register.
-
- -- Request: .hys [hyphenation_space]
- -- Register: \n[.hys]
-     Set the hyphenation space to HYPHENATION_SPACE.  If the current
-     adjustment mode is 'b' or 'n', don't hyphenate the line if it can
-     be justified by adding no more than HYPHENATION_SPACE extra space
-     to each word space.  Without argument, the hyphenation space is set
-     to its default value, which is 0.  The default scaling indicator
-     for this request is 'm'.  The hyphenation space is associated with
-     the current environment (*note Environments::).
-
-     A negative argument resets the hyphenation space to zero, emitting
-     a warning of type 'range'.
-
-     The current hyphenation space is available in the '.hys' read-only
-     number register.
-
- -- Request: .shc [glyph]
-     Set the "soft hyphen character" to GLYPH.(1)  (*note Manipulating
-     Hyphenation-Footnote-1::) If the argument is omitted, the soft
-     hyphen character is set to the default glyph '\(hy' (this is the
-     start-up value of 'gtroff' also).  The soft hyphen character is the
-     glyph that is inserted when a word is hyphenated at a line break.
-     If the soft hyphen character does not exist in the font of the
-     character immediately preceding a potential break point, then the
-     line is not broken at that point.  Neither definitions (specified
-     with the 'char' request) nor translations (specified with the 'tr'
-     request) are considered when finding the soft hyphen character.
-
- -- Request: .hla language
- -- Register: \n[.hla]
-     Set the current hyphenation language to the string LANGUAGE.
-     Hyphenation exceptions specified with the 'hw' request and
-     hyphenation patterns specified with the 'hpf' and 'hpfa' requests
-     are both associated with the current hyphenation language.  The
-     'hla' request is usually invoked by the 'troffrc' or the
-     'troffrc-end' files; 'troffrc' sets the default language to 'us'.
-
-     The current hyphenation language is available as a string in the
-     read-only number register '.hla'.
-
-          .ds curr_language \n[.hla]
-          \*[curr_language]
-              => us
-
-
-File: groff.info,  Node: Manipulating Hyphenation-Footnotes,  Up: Manipulating Hyphenation
-
-   (1) "Soft hyphen character" is a misnomer since it is an output
-glyph.
-
-
-File: groff.info,  Node: Manipulating Spacing,  Next: Tabs and Fields,  Prev: Manipulating Hyphenation,  Up: gtroff Reference
-
-5.9 Manipulating Spacing
-========================
-
- -- Request: .sp [distance]
-     Space downwards DISTANCE.  With no argument it advances 1 line.  A
-     negative argument causes 'gtroff' to move up the page the specified
-     distance.  If the argument is preceded by a '|' then 'gtroff' moves
-     that distance from the top of the page.  This request causes a line
-     break, and that adds the current line spacing to the space you have
-     just specified.  The default scaling indicator is 'v'.
-
-     For convenience you may wish to use the following macros to set the
-     height of the next line at a given distance from the top or the
-     bottom of the page:
-
-          .de y-from-top-down
-          .  sp |\\$1-\\n[.v]u
-          ..
-          .
-          .de y-from-bot-up
-          .  sp |\\n[.p]u-\\$1-\\n[.v]u
-          ..
-
-     A call to '.y-from-bot-up 10c' means that the bottom of the next
-     line will be at 10cm from the paper edge at the bottom.
-
-     If a vertical trap is sprung during execution of 'sp', the amount
-     of vertical space after the trap is discarded.  For example, this
-
-          .de xxx
-          ..
-          .
-          .wh 0 xxx
-          .
-          .pl 5v
-          foo
-          .sp 2
-          bar
-          .sp 50
-          baz
-
-     results in
-
-          foo
-
-
-          bar
-
-          baz
-
-     The amount of discarded space is available in the number register
-     '.trunc'.
-
-     To protect 'sp' against vertical traps, use the 'vpt' request:
-
-          .vpt 0
-          .sp -3
-          .vpt 1
-
- -- Request: .ls [nnn]
- -- Register: \n[.L]
-     Output NNN-1 blank lines after each line of text.  With no
-     argument, 'gtroff' uses the previous value before the last 'ls'
-     call.
-
-          .ls 2    \" This causes double-spaced output
-          .ls 3    \" This causes triple-spaced output
-          .ls      \" Again double-spaced
-
-     The line spacing is associated with the current environment (*note
-     Environments::).
-
-     The read-only number register '.L' contains the current line
-     spacing setting.
-
-   *Note Changing Type Sizes::, for the requests 'vs' and 'pvs' as
-alternatives to 'ls'.
-
- -- Escape: \x'spacing'
- -- Register: \n[.a]
-     Sometimes, extra vertical spacing is only needed occasionally, e.g.
-     to allow space for a tall construct (like an equation).  The '\x'
-     escape does this.  The escape is given a numerical argument,
-     usually enclosed in quotes (like '\x'3p''); the default scaling
-     indicator is 'v'.  If this number is positive extra vertical space
-     is inserted below the current line.  A negative number adds space
-     above.  If this escape is used multiple times on the same line, the
-     maximum of the values is used.
-
-     *Note Escapes::, for details on parameter delimiting characters.
-
-     The '.a' read-only number register contains the most recent
-     (nonnegative) extra vertical line space.
-
-     Using '\x' can be necessary in combination with the '\b' escape, as
-     the following example shows.
-
-          This is a test with the \[rs]b escape.
-          .br
-          This is a test with the \[rs]b escape.
-          .br
-          This is a test with \b'xyz'\x'-1m'\x'1m'.
-          .br
-          This is a test with the \[rs]b escape.
-          .br
-          This is a test with the \[rs]b escape.
-
-     produces
-
-          This is a test with the \b escape.
-          This is a test with the \b escape.
-                              x
-          This is a test with y.
-                              z
-          This is a test with the \b escape.
-          This is a test with the \b escape.
-
- -- Request: .ns
- -- Request: .rs
- -- Register: \n[.ns]
-     Enable "no-space mode".  In this mode, spacing (either via 'sp' or
-     via blank lines) is disabled.  The 'bp' request to advance to the
-     next page is also disabled, except if it is accompanied by a page
-     number (see *note Page Control::, for more information).  This mode
-     ends when actual text is output or the 'rs' request is encountered,
-     which ends no-space mode.  The read-only number register '.ns' is
-     set to 1 as long as no-space mode is active.
-
-     This request is useful for macros that conditionally insert
-     vertical space before the text starts (for example, a paragraph
-     macro could insert some space except when it is the first paragraph
-     after a section header).
-
-
-File: groff.info,  Node: Tabs and Fields,  Next: Character Translations,  Prev: Manipulating Spacing,  Up: gtroff Reference
-
-5.10 Tabs and Fields
-====================
-
-A tab character (ASCII char 9, EBCDIC char 5) causes a horizontal
-movement to the next tab stop (much like it did on a typewriter).
-
- -- Escape: \t
-     This escape is a non-interpreted tab character.  In copy mode
-     (*note Copy-in Mode::), '\t' is the same as a real tab character.
-
- -- Request: .ta [n1 n2 ... nn T r1 r2 ... rn]
- -- Register: \n[.tabs]
-     Change tab stop positions.  This request takes a series of tab
-     specifiers as arguments (optionally divided into two groups with
-     the letter 'T') that indicate where each tab stop is to be
-     (overriding any previous settings).
-
-     Tab stops can be specified absolutely, i.e., as the distance from
-     the left margin.  For example, the following sets 6 tab stops every
-     one inch.
-
-          .ta 1i 2i 3i 4i 5i 6i
-
-     Tab stops can also be specified using a leading '+', which means
-     that the specified tab stop is set relative to the previous tab
-     stop.  For example, the following is equivalent to the previous
-     example.
-
-          .ta 1i +1i +1i +1i +1i +1i
-
-     'gtroff' supports an extended syntax to specify repeat values after
-     the 'T' mark (these values are always taken as relative) - this is
-     the usual way to specify tabs set at equal intervals.  The
-     following is, yet again, the same as the previous examples.  It
-     does even more since it defines an infinite number of tab stops
-     separated by one inch.
-
-          .ta T 1i
-
-     Now we are ready to interpret the full syntax given at the
-     beginning: Set tabs at positions N1, N2, ..., NN and then set tabs
-     at NN+R1, NN+R2, ..., NN+RN and then at NN+RN+R1, NN+RN+R2, ...,
-     NN+RN+RN, and so on.
-
-     Example: '4c +6c T 3c 5c 2c' is equivalent to '4c 10c 13c 18c 20c
-     23c 28c 30c ...'.
-
-     The material in each tab column (i.e., the column between two tab
-     stops) may be justified to the right or left or centered in the
-     column.  This is specified by appending 'R', 'L', or 'C' to the tab
-     specifier.  The default justification is 'L'.  Example:
-
-          .ta 1i 2iC 3iR
-
-     Some notes:
-
-        * The default unit of the 'ta' request is 'm'.
-
-        * A tab stop is converted into a non-breakable horizontal
-          movement that can be neither stretched nor squeezed.  For
-          example,
-
-               .ds foo a\tb\tc
-               .ta T 5i
-               \*[foo]
-
-          creates a single line, which is a bit longer than 10 inches (a
-          string is used to show exactly where the tab characters are).
-          Now consider the following:
-
-               .ds bar a\tb b\tc
-               .ta T 5i
-               \*[bar]
-
-          'gtroff' first converts the tab stops of the line into
-          unbreakable horizontal movements, then splits the line after
-          the second 'b' (assuming a sufficiently short line length).
-          Usually, this isn't what the user wants.
-
-        * Superfluous tabs (i.e., tab characters that do not correspond
-          to a tab stop) are ignored except the first one, which
-          delimits the characters belonging to the last tab stop for
-          right-justifying or centering.  Consider the following example
-
-               .ds Z   foo\tbar\tfoo
-               .ds ZZ  foo\tbar\tfoobar
-               .ds ZZZ foo\tbar\tfoo\tbar
-               .ta 2i 4iR
-               \*[Z]
-               .br
-               \*[ZZ]
-               .br
-               \*[ZZZ]
-               .br
-
-          which produces the following output:
-
-               foo                 bar              foo
-               foo                 bar           foobar
-               foo                 bar              foobar
-
-          The first line right-justifies the second 'foo' relative to
-          the tab stop.  The second line right-justifies 'foobar'.  The
-          third line finally right-justifies only 'foo' because of the
-          additional tab character, which marks the end of the string
-          belonging to the last defined tab stop.
-
-        * Tab stops are associated with the current environment (*note
-          Environments::).
-
-        * Calling 'ta' without an argument removes all tab stops.
-
-        * The start-up value of 'gtroff' is 'T 0.8i'.
-
-     The read-only number register '.tabs' contains a string
-     representation of the current tab settings suitable for use as an
-     argument to the 'ta' request.
-
-          .ds tab-string \n[.tabs]
-          \*[tab-string]
-              => T120u
-
-     The 'troff' version of the Plan 9 operating system uses register
-     '.S' for the same purpose.
-
- -- Request: .tc [fill-glyph]
-     Normally 'gtroff' fills the space to the next tab stop with
-     whitespace.  This can be changed with the 'tc' request.  With no
-     argument 'gtroff' reverts to using whitespace, which is the
-     default.  The value of this "tab repetition character" is
-     associated with the current environment (*note Environments::).(1)
-     (*note Tabs and Fields-Footnote-1::)
-
- -- Request: .linetabs n
- -- Register: \n[.linetabs]
-     If N is missing or not zero, enable "line-tabs" mode, or disable it
-     otherwise (the default).  In line-tabs mode, 'gtroff' computes tab
-     distances relative to the (current) output line instead of the
-     input line.
-
-     For example, the following code:
-
-          .ds x a\t\c
-          .ds y b\t\c
-          .ds z c
-          .ta 1i 3i
-          \*x
-          \*y
-          \*z
-
-     in normal mode, results in the output
-
-          a         b         c
-
-     in line-tabs mode, the same code outputs
-
-          a         b                   c
-
-     Line-tabs mode is associated with the current environment.  The
-     read-only register '.linetabs' is set to 1 if in line-tabs mode,
-     and 0 in normal mode.
-
-* Menu:
-
-* Leaders::
-* Fields::
-
-
-File: groff.info,  Node: Tabs and Fields-Footnotes,  Up: Tabs and Fields
-
-   (1) "Tab repetition character" is a misnomer since it is an output
-glyph.
-
-
-File: groff.info,  Node: Leaders,  Next: Fields,  Prev: Tabs and Fields,  Up: Tabs and Fields
-
-5.10.1 Leaders
---------------
-
-Sometimes it may may be desirable to use the 'tc' request to fill a
-particular tab stop with a given glyph (for example dots in a table of
-contents), but also normal tab stops on the rest of the line.  For this
-'gtroff' provides an alternate tab mechanism, called "leaders", which
-does just that.
-
-   A leader character (character code 1) behaves similarly to a tab
-character: It moves to the next tab stop.  The only difference is that
-for this movement, the fill glyph defaults to a period character and not
-to space.
-
- -- Escape: \a
-     This escape is a non-interpreted leader character.  In copy mode
-     (*note Copy-in Mode::), '\a' is the same as a real leader
-     character.
-
- -- Request: .lc [fill-glyph]
-     Declare the "leader repetition character".(1)  (*note
-     Leaders-Footnote-1::) Without an argument, leaders act the same as
-     tabs (i.e., using whitespace for filling).  'gtroff''s start-up
-     value is a dot ('.').  The value of the leader repetition character
-     is associated with the current environment (*note Environments::).
-
-   For a table of contents, to name an example, tab stops may be defined
-so that the section number is one tab stop, the title is the second with
-the remaining space being filled with a line of dots, and then the page
-number slightly separated from the dots.
-
-     .ds entry 1.1\tFoo\a\t12
-     .lc .
-     .ta 1i 5i +.25i
-     \*[entry]
-
-This produces
-
-     1.1  Foo..........................................  12
-
-
-File: groff.info,  Node: Leaders-Footnotes,  Up: Leaders
-
-   (1) "Leader repetition character" is a misnomer since it is an output
-glyph.
-
-
-File: groff.info,  Node: Fields,  Prev: Leaders,  Up: Tabs and Fields
-
-5.10.2 Fields
--------------
-
-"Fields" are a more general way of laying out tabular data.  A field is
-defined as the data between a pair of "delimiting characters".  It
-contains substrings that are separated by "padding characters".  The
-width of a field is the distance on the _input_ line from the position
-where the field starts to the next tab stop.  A padding character
-inserts stretchable space similar to TeX's '\hss' command (thus it can
-even be negative) to make the sum of all substring lengths plus the
-stretchable space equal to the field width.  If more than one padding
-character is inserted, the available space is evenly distributed among
-them.
-
- -- Request: .fc [delim-char [padding-char]]
-     Define a delimiting and a padding character for fields.  If the
-     latter is missing, the padding character defaults to a space
-     character.  If there is no argument at all, the field mechanism is
-     disabled (which is the default).  Note that contrary to e.g. the
-     tab repetition character, delimiting and padding characters are
-     _not_ associated to the current environment (*note Environments::).
-
-     Example:
-
-          .fc # ^
-          .ta T 3i
-          #foo^bar^smurf#
-          .br
-          #foo^^bar^smurf#
-
-     and here the result:
-
-          foo         bar          smurf
-          foo            bar       smurf
-
-
-File: groff.info,  Node: Character Translations,  Next: Troff and Nroff Mode,  Prev: Tabs and Fields,  Up: gtroff Reference
-
-5.11 Character Translations
-===========================
-
-The control character ('.') and the no-break control character (''') can
-be changed with the 'cc' and 'c2' requests, respectively.
-
- -- Request: .cc [c]
-     Set the control character to C.  With no argument the default
-     control character '.' is restored.  The value of the control
-     character is associated with the current environment (*note
-     Environments::).
-
- -- Request: .c2 [c]
-     Set the no-break control character to C.  With no argument the
-     default control character ''' is restored.  The value of the
-     no-break control character is associated with the current
-     environment (*note Environments::).
-
-   *Note Requests::.
-
- -- Request: .eo
-     Disable the escape mechanism completely.  After executing this
-     request, the backslash character '\' no longer starts an escape
-     sequence.
-
-     This request can be very helpful in writing macros since it is not
-     necessary then to double the escape character.  Here an example:
-
-          .\" This is a simplified version of the
-          .\" .BR request from the man macro package
-          .eo
-          .de BR
-          .  ds result \&
-          .  while (\n[.$] >= 2) \{\
-          .    as result \fB\$1\fR\$2
-          .    shift 2
-          .  \}
-          .  if \n[.$] .as result \fB\$1
-          \*[result]
-          .  ft R
-          ..
-          .ec
-
- -- Request: .ec [c]
-     Set the escape character to C.  With no argument the default escape
-     character '\' is restored.  It can be also used to re-enable the
-     escape mechanism after an 'eo' request.
-
-     Note that changing the escape character globally likely breaks
-     macro packages since 'gtroff' has no mechanism to 'intern' macros,
-     i.e., to convert a macro definition into an internal form that is
-     independent of its representation (TeX has this mechanism).  If a
-     macro is called, it is executed literally.
-
- -- Request: .ecs
- -- Request: .ecr
-     The 'ecs' request saves the current escape character in an internal
-     register.  Use this request in combination with the 'ec' request to
-     temporarily change the escape character.
-
-     The 'ecr' request restores the escape character saved with 'ecs'.
-     Without a previous call to 'ecs', this request sets the escape
-     character to '\'.
-
- -- Escape: \\
- -- Escape: \e
- -- Escape: \E
-     Print the current escape character (which is the backslash
-     character '\' by default).
-
-     '\\' is a 'delayed' backslash; more precisely, it is the default
-     escape character followed by a backslash, which no longer has
-     special meaning due to the leading escape character.  It is _not_
-     an escape sequence in the usual sense!  In any unknown escape
-     sequence '\X' the escape character is ignored and X is printed.
-     But if X is equal to the current escape character, no warning is
-     emitted.
-
-     As a consequence, only at top-level or in a diversion a backslash
-     glyph is printed; in copy-in mode, it expands to a single
-     backslash, which then combines with the following character to an
-     escape sequence.
-
-     The '\E' escape differs from '\e' by printing an escape character
-     that is not interpreted in copy mode.  Use this to define strings
-     with escapes that work when used in copy mode (for example, as a
-     macro argument).  The following example defines strings to begin
-     and end a superscript:
-
-          .ds { \v'-.3m'\s'\En[.s]*60/100'
-          .ds } \s0\v'.3m'
-
-     Another example to demonstrate the differences between the various
-     escape sequences, using a strange escape character, '-'.
-
-          .ec -
-          .de xxx
-          --A'123'
-          ..
-          .xxx
-              => -A'foo'
-
-     The result is surprising for most users, expecting '1' since 'foo'
-     is a valid identifier.  What has happened?  As mentioned above, the
-     leading escape character makes the following character ordinary.
-     Written with the default escape character the sequence '--' becomes
-     '\-' - this is the minus sign.
-
-     If the escape character followed by itself is a valid escape
-     sequence, only '\E' yields the expected result:
-
-          .ec -
-          .de xxx
-          -EA'123'
-          ..
-          .xxx
-              => 1
-
- -- Escape: \.
-     Similar to '\\', the sequence '\.' isn't a real escape sequence.
-     As before, a warning message is suppressed if the escape character
-     is followed by a dot, and the dot itself is printed.
-
-          .de foo
-          .  nop foo
-          .
-          .  de bar
-          .    nop bar
-          \\..
-          .
-          ..
-          .foo
-          .bar
-              => foo bar
-
-     The first backslash is consumed while the macro is read, and the
-     second is swallowed while executing macro 'foo'.
-
-   A "translation" is a mapping of an input character to an output
-glyph.  The mapping occurs at output time, i.e., the input character
-gets assigned the metric information of the mapped output character
-right before input tokens are converted to nodes (*note Gtroff
-Internals::, for more on this process).
-
- -- Request: .tr abcd...
- -- Request: .trin abcd...
-     Translate character A to glyph B, character C to glyph D, etc.  If
-     there is an odd number of arguments, the last one is translated to
-     an unstretchable space ('\ ').
-
-     The 'trin' request is identical to 'tr', but when you unformat a
-     diversion with 'asciify' it ignores the translation.  *Note
-     Diversions::, for details about the 'asciify' request.
-
-     Some notes:
-
-        * Special characters ('\(XX', '\[XXX]', '\C'XXX'', '\'', '\`',
-          '\-', '\_'), glyphs defined with the 'char' request, and
-          numbered glyphs ('\N'XXX'') can be translated also.
-
-        * The '\e' escape can be translated also.
-
-        * Characters can be mapped onto the '\%' and '\~' escapes (but
-          '\%' and '\~' can't be mapped onto another glyph).
-
-        * The following characters can't be translated: space (with one
-          exception, see below), backspace, newline, leader (and '\a'),
-          tab (and '\t').
-
-        * Translations are not considered for finding the soft hyphen
-          character set with the 'shc' request.
-
-        * The pair 'C\&' (this is an arbitrary character C followed by
-          the zero width space character) maps this character to
-          nothing.
-
-               .tr a\&
-               foo bar
-                   => foo br
-
-          It is even possible to map the space character to nothing:
-
-               .tr aa \&
-               foo bar
-                   => foobar
-
-          As shown in the example, the space character can't be the
-          first character/glyph pair as an argument of 'tr'.
-          Additionally, it is not possible to map the space character to
-          any other glyph; requests like '.tr aa x' undo '.tr aa \&'
-          instead.
-
-          If justification is active, lines are justified in spite of
-          the 'empty' space character (but there is no minimal distance,
-          i.e. the space character, between words).
-
-        * After an output glyph has been constructed (this happens at
-          the moment immediately before the glyph is appended to an
-          output glyph list, either by direct output, in a macro,
-          diversion, or string), it is no longer affected by 'tr'.
-
-        * Translating character to glyphs where one of them or both are
-          undefined is possible also; 'tr' does not check whether the
-          entities in its argument do exist.
-
-          *Note Gtroff Internals::.
-
-        * 'troff' no longer has a hard-coded dependency on Latin-1; all
-          'charXXX' entities have been removed from the font description
-          files.  This has a notable consequence that shows up in
-          warnings like 'can't find character with input code XXX' if
-          the 'tr' request isn't handled properly.
-
-          Consider the following translation:
-
-               .tr ��
-
-          This maps input character '�' onto glyph '�', which is
-          identical to glyph 'char201'.  But this glyph intentionally
-          doesn't exist!  Instead, '\[char201]' is treated as an input
-          character entity and is by default mapped onto '\['E]', and
-          'gtroff' doesn't handle translations of translations.
-
-          The right way to write the above translation is
-
-               .tr �\['E]
-
-          In other words, the first argument of 'tr' should be an input
-          character or entity, and the second one a glyph entity.
-
-        * Without an argument, the 'tr' request is ignored.
-
- -- Request: .trnt abcd...
-     'trnt' is the same as the 'tr' request except that the translations
-     do not apply to text that is transparently throughput into a
-     diversion with '\!'.  *Note Diversions::, for more information.
-
-     For example,
-
-          .tr ab
-          .di x
-          \!.tm a
-          .di
-          .x
-
-     prints 'b' to the standard error stream; if 'trnt' is used instead
-     of 'tr' it prints 'a'.
-
-
-File: groff.info,  Node: Troff and Nroff Mode,  Next: Line Layout,  Prev: Character Translations,  Up: gtroff Reference
-
-5.12 Troff and Nroff Mode
-=========================
-
-Originally, 'nroff' and 'troff' were two separate programs, the former
-for TTY output, the latter for everything else.  With GNU 'troff', both
-programs are merged into one executable, sending its output to a device
-driver ('grotty' for TTY devices, 'grops' for POSTSCRIPT, etc.) which
-interprets the intermediate output of 'gtroff'.  For UNIX 'troff' it
-makes sense to talk about "Nroff mode" and "Troff mode" since the
-differences are hardcoded.  For GNU 'troff', this distinction is not
-appropriate because 'gtroff' simply takes the information given in the
-font files for a particular device without handling requests specially
-if a TTY output device is used.
-
-   Usually, a macro package can be used with all output devices.
-Nevertheless, it is sometimes necessary to make a distinction between
-TTY and non-TTY devices: 'gtroff' provides two built-in conditions 'n'
-and 't' for the 'if', 'ie', and 'while' requests to decide whether
-'gtroff' shall behave like 'nroff' or like 'troff'.
-
- -- Request: .troff
-     Make the 't' built-in condition true (and the 'n' built-in
-     condition false) for 'if', 'ie', and 'while' conditional requests.
-     This is the default if 'gtroff' (_not_ 'groff') is started with the
-     '-R' switch to avoid loading of the start-up files 'troffrc' and
-     'troffrc-end'.  Without '-R', 'gtroff' stays in troff mode if the
-     output device is not a TTY (e.g. 'ps').
-
- -- Request: .nroff
-     Make the 'n' built-in condition true (and the 't' built-in
-     condition false) for 'if', 'ie', and 'while' conditional requests.
-     This is the default if 'gtroff' uses a TTY output device; the code
-     for switching to nroff mode is in the file 'tty.tmac', which is
-     loaded by the start-up file 'troffrc'.
-
-   *Note Conditionals and Loops::, for more details on built-in
-conditions.
-
-
-File: groff.info,  Node: Line Layout,  Next: Line Control,  Prev: Troff and Nroff Mode,  Up: gtroff Reference
-
-5.13 Line Layout
-================
-
-The following drawing shows the dimensions that 'gtroff' uses for
-placing a line of output onto the page.  They are labeled with the
-request that manipulates each dimension.
-
-          -->| in |<--
-             |<-----------ll------------>|
-        +----+----+----------------------+----+
-        |    :    :                      :    |
-        +----+----+----------------------+----+
-     -->| po |<--
-        |<--------paper width---------------->|
-
-These dimensions are:
-
-'po'
-     "Page offset" - this is the leftmost position of text on the final
-     output, defining the "left margin".
-
-'in'
-     "Indentation" - this is the distance from the left margin where
-     text is printed.
-
-'ll'
-     "Line length" - this is the distance from the left margin to right
-     margin.
-
-   A simple demonstration:
-
-     .ll 3i
-     This is text without indentation.
-     The line length has been set to 3\~inch.
-     .in +.5i
-     .ll -.5i
-     Now the left and right margins are both increased.
-     .in
-     .ll
-     Calling .in and .ll without parameters restore
-     the previous values.
-
-   Result:
-
-     This  is text without indenta-
-     tion.   The  line  length  has
-     been set to 3 inch.
-          Now   the  left  and
-          right  margins   are
-          both increased.
-     Calling  .in  and  .ll without
-     parameters restore the  previ-
-     ous values.
-
- -- Request: .po [offset]
- -- Request: .po +offset
- -- Request: .po -offset
- -- Register: \n[.o]
-     Set horizontal page offset to OFFSET (or increment or decrement the
-     current value by OFFSET).  Note that this request does not cause a
-     break, so changing the page offset in the middle of text being
-     filled may not yield the expected result.  The initial value is 1i.
-     For TTY output devices, it is set to 0 in the startup file
-     'troffrc'; the default scaling indicator is 'm' (and not 'v' as
-     incorrectly documented in the original UNIX troff manual).
-
-     The current page offset can be found in the read-only number
-     register '.o'.
-
-     If 'po' is called without an argument, the page offset is reset to
-     the previous value before the last call to 'po'.
-
-          .po 3i
-          \n[.o]
-              => 720
-          .po -1i
-          \n[.o]
-              => 480
-          .po
-          \n[.o]
-              => 720
-
- -- Request: .in [indent]
- -- Request: .in +indent
- -- Request: .in -indent
- -- Register: \n[.i]
-     Set indentation to INDENT (or increment or decrement the current
-     value by INDENT).  This request causes a break.  Initially, there
-     is no indentation.
-
-     If 'in' is called without an argument, the indentation is reset to
-     the previous value before the last call to 'in'.  The default
-     scaling indicator is 'm'.
-
-     The indentation is associated with the current environment (*note
-     Environments::).
-
-     If a negative indentation value is specified (which is not
-     allowed), 'gtroff' emits a warning of type 'range' and sets the
-     indentation to zero.
-
-     The effect of 'in' is delayed until a partially collected line (if
-     it exists) is output.  A temporary indentation value is reset to
-     zero also.
-
-     The current indentation (as set by 'in') can be found in the
-     read-only number register '.i'.
-
- -- Request: .ti offset
- -- Request: .ti +offset
- -- Request: .ti -offset
- -- Register: \n[.in]
-     Temporarily indent the next output line by OFFSET.  If an increment
-     or decrement value is specified, adjust the temporary indentation
-     relative to the value set by the 'in' request.
-
-     This request causes a break; its value is associated with the
-     current environment (*note Environments::).  The default scaling
-     indicator is 'm'.  A call of 'ti' without an argument is ignored.
-
-     If the total indentation value is negative (which is not allowed),
-     'gtroff' emits a warning of type 'range' and sets the temporary
-     indentation to zero.  'Total indentation' is either OFFSET if
-     specified as an absolute value, or the temporary plus normal
-     indentation, if OFFSET is given as a relative value.
-
-     The effect of 'ti' is delayed until a partially collected line (if
-     it exists) is output.
-
-     The read-only number register '.in' is the indentation that applies
-     to the current output line.
-
-     The difference between '.i' and '.in' is that the latter takes into
-     account whether a partially collected line still uses the old
-     indentation value or a temporary indentation value is active.
-
- -- Request: .ll [length]
- -- Request: .ll +length
- -- Request: .ll -length
- -- Register: \n[.l]
- -- Register: \n[.ll]
-     Set the line length to LENGTH (or increment or decrement the
-     current value by LENGTH).  Initially, the line length is set to
-     6.5i.  The effect of 'll' is delayed until a partially collected
-     line (if it exists) is output.  The default scaling indicator is
-     'm'.
-
-     If 'll' is called without an argument, the line length is reset to
-     the previous value before the last call to 'll'.  If a negative
-     line length is specified (which is not allowed), 'gtroff' emits a
-     warning of type 'range' and sets the line length to zero.
-
-     The line length is associated with the current environment (*note
-     Environments::).
-
-     The current line length (as set by 'll') can be found in the
-     read-only number register '.l'.  The read-only number register
-     '.ll' is the line length that applies to the current output line.
-
-     Similar to '.i' and '.in', the difference between '.l' and '.ll' is
-     that the latter takes into account whether a partially collected
-     line still uses the old line length value.
-
-
-File: groff.info,  Node: Line Control,  Next: Page Layout,  Prev: Line Layout,  Up: gtroff Reference
-
-5.14 Line Control
-=================
-
-It is important to understand how 'gtroff' handles input and output
-lines.
-
-   Many escapes use positioning relative to the input line.  For
-example, this
-
-     This is a \h'|1.2i'test.
-
-     This is a
-     \h'|1.2i'test.
-
-produces
-
-     This is a   test.
-
-     This is a             test.
-
-   The main usage of this feature is to define macros that act exactly
-at the place where called.
-
-     .\" A simple macro to underline a word
-     .de underline
-     .  nop \\$1\l'|0\[ul]'
-     ..
-
-In the above example, '|0' specifies a negative distance from the
-current position (at the end of the just emitted argument '\$1') back to
-the beginning of the input line.  Thus, the '\l' escape draws a line
-from right to left.
-
-   'gtroff' makes a difference between input and output line
-continuation; the latter is also called "interrupting" a line.
-
- -- Escape: \<RET>
- -- Escape: \c
- -- Register: \n[.int]
-     Continue a line.  '\<RET>' (this is a backslash at the end of a
-     line immediately followed by a newline) works on the input level,
-     suppressing the effects of the following newline in the input.
-
-          This is a \
-          .test
-              => This is a .test
-
-     The '|' operator is also affected.
-
-     '\c' works on the output level.  Anything after this escape on the
-     same line is ignored except '\R', which works as usual.  Anything
-     before '\c' on the same line is appended to the current partial
-     output line.  The next non-command line after an interrupted line
-     counts as a new input line.
-
-     The visual results depend on whether no-fill mode is active.
-
-        * If no-fill mode is active (using the 'nf' request), the next
-          input text line after '\c' is handled as a continuation of the
-          same input text line.
-
-               .nf
-               This is a \c
-               test.
-                   => This is a test.
-
-        * If fill mode is active (using the 'fi' request), a word
-          interrupted with '\c' is continued with the text on the next
-          input text line, without an intervening space.
-
-               This is a te\c
-               st.
-                   => This is a test.
-
-     Note that an intervening control line that causes a break is
-     stronger than '\c', flushing out the current partial line in the
-     usual way.
-
-     The '.int' register contains a positive value if the last output
-     line was interrupted with '\c'; this is associated with the current
-     environment (*note Environments::).
-
-
-File: groff.info,  Node: Page Layout,  Next: Page Control,  Prev: Line Control,  Up: gtroff Reference
-
-5.15 Page Layout
-================
-
-'gtroff' provides some very primitive operations for controlling page
-layout.
-
- -- Request: .pl [length]
- -- Request: .pl +length
- -- Request: .pl -length
- -- Register: \n[.p]
-     Set the "page length" to LENGTH (or increment or decrement the
-     current value by LENGTH).  This is the length of the physical
-     output page.  The default scaling indicator is 'v'.
-
-     The current setting can be found in the read-only number register
-     '.p'.
-
-     Note that this only specifies the size of the page, not the top and
-     bottom margins.  Those are not set by 'gtroff' directly.  *Note
-     Traps::, for further information on how to do this.
-
-     Negative 'pl' values are possible also, but not very useful: No
-     trap is sprung, and each line is output on a single page (thus
-     suppressing all vertical spacing).
-
-     If no argument or an invalid argument is given, 'pl' sets the page
-     length to 11i.
-
-   'gtroff' provides several operations that help in setting up top and
-bottom titles (or headers and footers).
-
- -- Request: .tl 'left'center'right'
-     Print a "title line".  It consists of three parts: a left justified
-     portion, a centered portion, and a right justified portion.  The
-     argument separator ''' can be replaced with any character not
-     occurring in the title line.  The '%' character is replaced with
-     the current page number.  This character can be changed with the
-     'pc' request (see below).
-
-     Without argument, 'tl' is ignored.
-
-     Some notes:
-
-        * The line length set by the 'll' request is not honoured by
-          'tl'; use the 'lt' request (described below) instead, to
-          control line length for text set by 'tl'.
-
-        * A title line is not restricted to the top or bottom of a page.
-
-        * 'tl' prints the title line immediately, ignoring a partially
-          filled line (which stays untouched).
-
-        * It is not an error to omit closing delimiters.  For example,
-          '.tl /foo' is equivalent to '.tl /foo///': It prints a title
-          line with the left justified word 'foo'; the centered and
-          right justfied parts are empty.
-
-        * 'tl' accepts the same parameter delimiting characters as the
-          '\A' escape; see *note Escapes::.
-
- -- Request: .lt [length]
- -- Request: .lt +length
- -- Request: .lt -length
- -- Register: \n[.lt]
-     The title line is printed using its own line length, which is
-     specified (or incremented or decremented) with the 'lt' request.
-     Initially, the title line length is set to 6.5i.  If a negative
-     line length is specified (which is not allowed), 'gtroff' emits a
-     warning of type 'range' and sets the title line length to zero.
-     The default scaling indicator is 'm'.  If 'lt' is called without an
-     argument, the title length is reset to the previous value before
-     the last call to 'lt'.
-
-     The current setting of this is available in the '.lt' read-only
-     number register; it is associated with the current environment
-     (*note Environments::).
-
- -- Request: .pn page
- -- Request: .pn +page
- -- Request: .pn -page
- -- Register: \n[.pn]
-     Change (increase or decrease) the page number of the _next_ page.
-     The only argument is the page number; the request is ignored
-     without a parameter.
-
-     The read-only number register '.pn' contains the number of the next
-     page: either the value set by a 'pn' request, or the number of the
-     current page plus 1.
-
- -- Request: .pc [char]
-     Change the page number character (used by the 'tl' request) to a
-     different character.  With no argument, this mechanism is disabled.
-     Note that this doesn't affect the number register '%'.
-
-   *Note Traps::.
-
-
-File: groff.info,  Node: Page Control,  Next: Fonts and Symbols,  Prev: Page Layout,  Up: gtroff Reference
-
-5.16 Page Control
-=================
-
- -- Request: .bp [page]
- -- Request: .bp +page
- -- Request: .bp -page
- -- Register: \n[%]
-     Stop processing the current page and move to the next page.  This
-     request causes a break.  It can also take an argument to set
-     (increase, decrease) the page number of the next page (which
-     actually becomes the current page after 'bp' has finished).  The
-     difference between 'bp' and 'pn' is that 'pn' does not cause a
-     break or actually eject a page.  *Note Page Layout::.
-
-          .de newpage                         \" define macro
-          'bp                                 \" begin page
-          'sp .5i                             \" vertical space
-          .tl 'left top'center top'right top' \" title
-          'sp .3i                             \" vertical space
-          ..                                  \" end macro
-
-     'bp' has no effect if not called within the top-level diversion
-     (*note Diversions::).
-
-     The read-write register '%' holds the current page number.
-
-     The number register '.pe' is set to 1 while 'bp' is active.  *Note
-     Page Location Traps::.
-
- -- Request: .ne [space]
-     It is often necessary to force a certain amount of space before a
-     new page occurs.  This is most useful to make sure that there is
-     not a single "orphan" line left at the bottom of a page.  The 'ne'
-     request ensures that there is a certain distance, specified by the
-     first argument, before the next page is triggered (see *note
-     Traps::, for further information).  The default scaling indicator
-     for 'ne' is 'v'; the default value of SPACE is 1v if no argument is
-     given.
-
-     For example, to make sure that no fewer than 2 lines get orphaned,
-     do the following before each paragraph:
-
-          .ne 2
-          text text text
-
-     'ne' then automatically causes a page break if there is space for
-     one line only.
-
- -- Request: .sv [space]
- -- Request: .os
-     'sv' is similar to the 'ne' request; it reserves the specified
-     amount of vertical space.  If the desired amount of space exists
-     before the next trap (or the bottom page boundary if no trap is
-     set), the space is output immediately (ignoring a partially filled
-     line, which stays untouched).  If there is not enough space, it is
-     stored for later output via the 'os' request.  The default value
-     is 1v if no argument is given; the default scaling indicator is
-     'v'.
-
-     Both 'sv' and 'os' ignore no-space mode.  While the 'sv' request
-     allows negative values for SPACE, 'os' ignores them.
-
- -- Register: \n[nl]
-     This register contains the current vertical position.  If the
-     vertical position is zero and the top of page transition hasn't
-     happened yet, 'nl' is set to negative value.  'gtroff' itself does
-     this at the very beginning of a document before anything has been
-     printed, but the main usage is to plant a header trap on a page if
-     this page has already started.
-
-     Consider the following:
-
-          .de xxx
-          .  sp
-          .  tl ''Header''
-          .  sp
-          ..
-          .
-          First page.
-          .bp
-          .wh 0 xxx
-          .nr nl (-1)
-          Second page.
-
-     Result:
-
-          First page.
-
-          ...
-
-                                       Header
-
-          Second page.
-
-          ...
-
-     Without resetting 'nl' to a negative value, the just planted trap
-     would be active beginning with the _next_ page, not the current
-     one.
-
-     *Note Diversions::, for a comparison with the '.h' and '.d'
-     registers.
-
-
-File: groff.info,  Node: Fonts and Symbols,  Next: Sizes,  Prev: Page Control,  Up: gtroff Reference
-
-5.17 Fonts and Symbols
-======================
-
-'gtroff' can switch fonts at any point in the text.
-
-   The basic set of fonts is 'R', 'I', 'B', and 'BI'.  These are Times
-Roman, Italic, Bold, and Bold Italic.  For non-TTY devices, there is
-also at least one symbol font that contains various special symbols
-(Greek, mathematics).
-
-* Menu:
-
-* Changing Fonts::
-* Font Families::
-* Font Positions::
-* Using Symbols::
-* Character Classes::
-* Special Fonts::
-* Artificial Fonts::
-* Ligatures and Kerning::
-
-
-File: groff.info,  Node: Changing Fonts,  Next: Font Families,  Prev: Fonts and Symbols,  Up: Fonts and Symbols
-
-5.17.1 Changing Fonts
----------------------
-
- -- Request: .ft [font]
- -- Escape: \ff
- -- Escape: \f(fn
- -- Escape: \f[font]
- -- Register: \n[.sty]
-     The 'ft' request and the '\f' escape change the current font to
-     FONT (one-character name F, two-character name FN).
-
-     If FONT is a style name (as set with the 'sty' request or with the
-     'styles' command in the 'DESC' file), use it within the current
-     font family (as set with the 'fam' request, '\F' escape, or with
-     the 'family' command in the 'DESC' file).
-
-     It is not possible to switch to a font with the name 'DESC'
-     (whereas this name could be used as a style name; however, this is
-     not recommended).
-
-     With no argument or using 'P' as an argument, '.ft' switches to the
-     previous font.  Use '\f[]' to do this with the escape.  The old
-     syntax forms '\fP' or '\f[P]' are also supported.
-
-     Fonts are generally specified as upper-case strings, which are
-     usually 1 to 4 characters representing an abbreviation or acronym
-     of the font name.  This is no limitation, just a convention.
-
-     The example below produces two identical lines.
-
-          eggs, bacon,
-          .ft B
-          spam
-          .ft
-          and sausage.
-
-          eggs, bacon, \fBspam\fP and sausage.
-
-     Note that '\f' doesn't produce an input token in 'gtroff'.  As a
-     consequence, it can be used in requests like 'mc' (which expects a
-     single character as an argument) to change the font on the fly:
-
-          .mc \f[I]x\f[]
-
-     The current style name is available in the read-only number
-     register '.sty' (this is a string-valued register); if the current
-     font isn't a style, the empty string is returned.  It is associated
-     with the current environment.
-
-     *Note Font Positions::, for an alternative syntax.
-
- -- Request: .ftr f [g]
-     Translate font F to font G.  Whenever a font named F is referred to
-     in a '\f' escape sequence, in the 'F' and 'S' conditional
-     operators, or in the 'ft', 'ul', 'bd', 'cs', 'tkf', 'special',
-     'fspecial', 'fp', or 'sty' requests, font G is used.  If G is
-     missing or equal to F the translation is undone.
-
-     Note that it is not possible to chain font translations.  Example:
-
-          .ftr XXX TR
-          .ftr XXX YYY
-          .ft XXX
-              => warning: can't find font `XXX'
-
- -- Request: .fzoom f [zoom]
- -- Register: \n[.zoom]
-     Set magnification of font F to factor ZOOM, which must be a
-     non-negative integer multiple of 1/1000th.  This request is useful
-     to adjust the optical size of a font in relation to the others.  In
-     the example below, font 'CR' is magnified by 10% (the zoom factor
-     is thus 1.1).
-
-          .fam P
-          .fzoom CR 1100
-          .ps 12
-          Palatino and \f[CR]Courier\f[]
-
-     A missing or zero value of ZOOM is the same as a value of 1000,
-     which means no magnification.  F must be a real font name, not a
-     style.
-
-     Note that the magnification of a font is completely transparent to
-     troff; a change of the zoom factor doesn't cause any effect except
-     that the dimensions of glyphs, (word) spaces, kerns, etc., of the
-     affected font are adjusted accordingly.
-
-     The zoom factor of the current font is available in the read-only
-     number register '.zoom', in multiples of 1/1000th.  It returns zero
-     if there is no magnification.
-
-
-File: groff.info,  Node: Font Families,  Next: Font Positions,  Prev: Changing Fonts,  Up: Fonts and Symbols
-
-5.17.2 Font Families
---------------------
-
-Due to the variety of fonts available, 'gtroff' has added the concept of
-"font families" and "font styles".  The fonts are specified as the
-concatenation of the font family and style.  Specifying a font without
-the family part causes 'gtroff' to use that style of the current family.
-
-   Currently, fonts for the devices '-Tps', '-Tpdf', '-Tdvi', '-Tlj4',
-'-Tlbp', and the X11 fonts are set up to this mechanism.  By default,
-'gtroff' uses the Times family with the four styles 'R', 'I', 'B', and
-'BI'.
-
-   This way, it is possible to use the basic four fonts and to select a
-different font family on the command line (*note Groff Options::).
-
- -- Request: .fam [family]
- -- Register: \n[.fam]
- -- Escape: \Ff
- -- Escape: \F(fm
- -- Escape: \F[family]
- -- Register: \n[.fn]
-     Switch font family to FAMILY (one-character name F, two-character
-     name FM).  If no argument is given, switch back to the previous
-     font family.  Use '\F[]' to do this with the escape.  Note that
-     '\FP' doesn't work; it selects font family 'P' instead.
-
-     The value at start-up is 'T'.  The current font family is available
-     in the read-only number register '.fam' (this is a string-valued
-     register); it is associated with the current environment.
-
-          spam,
-          .fam H    \" helvetica family
-          spam,     \" used font is family H + style R = HR
-          .ft B     \" family H + style B = font HB
-          spam,
-          .fam T    \" times family
-          spam,     \" used font is family T + style B = TB
-          .ft AR    \" font AR (not a style)
-          baked beans,
-          .ft R     \" family T + style R = font TR
-          and spam.
-
-     Note that '\F' doesn't produce an input token in 'gtroff'.  As a
-     consequence, it can be used in requests like 'mc' (which expects a
-     single character as an argument) to change the font family on the
-     fly:
-
-          .mc \F[P]x\F[]
-
-     The '.fn' register contains the current "real font name" of the
-     current font.  This is a string-valued register.  If the current
-     font is a style, the value of '\n[.fn]' is the proper concatenation
-     of family and style name.
-
- -- Request: .sty n style
-     Associate STYLE with font position N.  A font position can be
-     associated either with a font or with a style.  The current font is
-     the index of a font position and so is also either a font or a
-     style.  If it is a style, the font that is actually used is the
-     font which name is the concatenation of the name of the current
-     family and the name of the current style.  For example, if the
-     current font is 1 and font position 1 is associated with style 'R'
-     and the current font family is 'T', then font 'TR' is used.  If the
-     current font is not a style, then the current family is ignored.
-     If the requests 'cs', 'bd', 'tkf', 'uf', or 'fspecial' are applied
-     to a style, they are instead applied to the member of the current
-     family corresponding to that style.
-
-     N must be a non-negative integer value.
-
-     The default family can be set with the '-f' option (*note Groff
-     Options::).  The 'styles' command in the 'DESC' file controls which
-     font positions (if any) are initially associated with styles rather
-     than fonts.  For example, the default setting for POSTSCRIPT fonts
-
-          styles R I B BI
-
-     is equivalent to
-
-          .sty 1 R
-          .sty 2 I
-          .sty 3 B
-          .sty 4 BI
-
-     'fam' and '\F' always check whether the current font position is
-     valid; this can give surprising results if the current font
-     position is associated with a style.
-
-     In the following example, we want to access the POSTSCRIPT font
-     'FooBar' from the font family 'Foo':
-
-          .sty \n[.fp] Bar
-          .fam Foo
-              => warning: can't find font `FooR'
-
-     The default font position at start-up is 1; for the POSTSCRIPT
-     device, this is associated with style 'R', so 'gtroff' tries to
-     open 'FooR'.
-
-     A solution to this problem is to use a dummy font like the
-     following:
-
-          .fp 0 dummy TR    \" set up dummy font at position 0
-          .sty \n[.fp] Bar  \" register style `Bar'
-          .ft 0             \" switch to font at position 0
-          .fam Foo          \" activate family `Foo'
-          .ft Bar           \" switch to font `FooBar'
-
-     *Note Font Positions::.
-
-
-File: groff.info,  Node: Font Positions,  Next: Using Symbols,  Prev: Font Families,  Up: Fonts and Symbols
-
-5.17.3 Font Positions
----------------------
-
-For the sake of old phototypesetters and compatibility with old versions
-of 'troff', 'gtroff' has the concept of font "positions", on which
-various fonts are mounted.
-
- -- Request: .fp pos font [external-name]
- -- Register: \n[.f]
- -- Register: \n[.fp]
-     Mount font FONT at position POS (which must be a non-negative
-     integer).  This numeric position can then be referred to with font
-     changing commands.  When 'gtroff' starts it is using font
-     position 1 (which must exist; position 0 is unused usually at
-     start-up).
-
-     The current font in use, as a font position, is available in the
-     read-only number register '.f'.  This can be useful to remember the
-     current font for later recall.  It is associated with the current
-     environment (*note Environments::).
-
-          .nr save-font \n[.f]
-          .ft B
-          ... text text text ...
-          .ft \n[save-font]
-
-     The number of the next free font position is available in the
-     read-only number register '.fp'.  This is useful when mounting a
-     new font, like so:
-
-          .fp \n[.fp] NEATOFONT
-
-     Fonts not listed in the 'DESC' file are automatically mounted on
-     the next available font position when they are referenced.  If a
-     font is to be mounted explicitly with the 'fp' request on an unused
-     font position, it should be mounted on the first unused font
-     position, which can be found in the '.fp' register.  Although
-     'gtroff' does not enforce this strictly, it is not allowed to mount
-     a font at a position whose number is much greater (approx. 1000
-     positions) than that of any currently used position.
-
-     The 'fp' request has an optional third argument.  This argument
-     gives the external name of the font, which is used for finding the
-     font description file.  The second argument gives the internal name
-     of the font, which is used to refer to the font in 'gtroff' after
-     it has been mounted.  If there is no third argument then the
-     internal name is used as the external name.  This feature makes it
-     possible to use fonts with long names in compatibility mode.
-
-   Both the 'ft' request and the '\f' escape have alternative syntax
-forms to access font positions.
-
- -- Request: .ft nnn
- -- Escape: \fn
- -- Escape: \f(nn
- -- Escape: \f[nnn]
-     Change the current font position to NNN (one-digit position N,
-     two-digit position NN), which must be a non-negative integer.
-
-     If NNN is associated with a style (as set with the 'sty' request or
-     with the 'styles' command in the 'DESC' file), use it within the
-     current font family (as set with the 'fam' request, the '\F'
-     escape, or with the 'family' command in the 'DESC' file).
-
-          this is font 1
-          .ft 2
-          this is font 2
-          .ft                   \" switch back to font 1
-          .ft 3
-          this is font 3
-          .ft
-          this is font 1 again
-
-     *Note Changing Fonts::, for the standard syntax form.
-
-
-File: groff.info,  Node: Using Symbols,  Next: Character Classes,  Prev: Font Positions,  Up: Fonts and Symbols
-
-5.17.4 Using Symbols
---------------------
-
-A "glyph" is a graphical representation of a "character".  While a
-character is an abstract entity containing semantic information, a glyph
-is something that can be actually seen on screen or paper.  It is
-possible that a character has multiple glyph representation forms (for
-example, the character 'A' can be either written in a roman or an italic
-font, yielding two different glyphs); sometimes more than one character
-maps to a single glyph (this is a "ligature" - the most common is 'fi').
-
-   A "symbol" is simply a named glyph.  Within 'gtroff', all glyph names
-of a particular font are defined in its font file.  If the user requests
-a glyph not available in this font, 'gtroff' looks up an ordered list of
-"special fonts".  By default, the POSTSCRIPT output device supports the
-two special fonts 'SS' (slanted symbols) and 'S' (symbols) (the former
-is looked up before the latter).  Other output devices use different
-names for special fonts.  Fonts mounted with the 'fonts' keyword in the
-'DESC' file are globally available.  To install additional special fonts
-locally (i.e. for a particular font), use the 'fspecial' request.
-
-   Here the exact rules how 'gtroff' searches a given symbol:
-
-   * If the symbol has been defined with the 'char' request, use it.
-     This hides a symbol with the same name in the current font.
-
-   * Check the current font.
-
-   * If the symbol has been defined with the 'fchar' request, use it.
-
-   * Check whether the current font has a font-specific list of special
-     fonts; test all fonts in the order of appearance in the last
-     'fspecial' call if appropriate.
-
-   * If the symbol has been defined with the 'fschar' request for the
-     current font, use it.
-
-   * Check all fonts in the order of appearance in the last 'special'
-     call.
-
-   * If the symbol has been defined with the 'schar' request, use it.
-
-   * As a last resort, consult all fonts loaded up to now for special
-     fonts and check them, starting with the lowest font number.  Note
-     that this can sometimes lead to surprising results since the
-     'fonts' line in the 'DESC' file often contains empty positions,
-     which are filled later on.  For example, consider the following:
-
-          fonts 3 0 0 FOO
-
-     This mounts font 'foo' at font position 3.  We assume that 'FOO' is
-     a special font, containing glyph 'foo', and that no font has been
-     loaded yet.  The line
-
-          .fspecial BAR BAZ
-
-     makes font 'BAZ' special only if font 'BAR' is active.  We further
-     assume that 'BAZ' is really a special font, i.e., the font
-     description file contains the 'special' keyword, and that it also
-     contains glyph 'foo' with a special shape fitting to font 'BAR'.
-     After executing 'fspecial', font 'BAR' is loaded at font
-     position 1, and 'BAZ' at position 2.
-
-     We now switch to a new font 'XXX', trying to access glyph 'foo'
-     that is assumed to be missing.  There are neither font-specific
-     special fonts for 'XXX' nor any other fonts made special with the
-     'special' request, so 'gtroff' starts the search for special fonts
-     in the list of already mounted fonts, with increasing font
-     positions.  Consequently, it finds 'BAZ' before 'FOO' even for
-     'XXX', which is not the intended behaviour.
-
-   *Note Font Files::, and *note Special Fonts::, for more details.
-
-   The list of available symbols is device dependent; see the
-'groff_char(7)' man page for a complete list of all glyphs.  For
-example, say
-
-     man -Tdvi groff_char > groff_char.dvi
-
-for a list using the default DVI fonts (not all versions of the 'man'
-program support the '-T' option).  If you want to use an additional
-macro package to change the used fonts, 'groff' must be called directly:
-
-     groff -Tdvi -mec -man groff_char.7 > groff_char.dvi
-
-   Glyph names not listed in groff_char(7) are derived algorithmically,
-using a simplified version of the Adobe Glyph List (AGL) algorithm,
-which is described in
-<http://partners.adobe.com/public/developer/opentype/index_glyph.html>.
-The (frozen) set of glyph names that can't be derived algorithmically is
-called "groff glyph list (GGL)".
-
-   * A glyph for Unicode character U+XXXX[X[X]], which is not a
-     composite character is named 'uXXXX[X[X]]'.  X must be an uppercase
-     hexadecimal digit.  Examples: 'u1234', 'u008E', 'u12DB8'.  The
-     largest Unicode value is 0x10FFFF. There must be at least four 'X'
-     digits; if necessary, add leading zeroes (after the 'u').  No zero
-     padding is allowed for character codes greater than 0xFFFF.
-     Surrogates (i.e., Unicode values greater than 0xFFFF represented
-     with character codes from the surrogate area U+D800-U+DFFF) are not
-     allowed too.
-
-   * A glyph representing more than a single input character is named
-
-          'u' COMPONENT1 '_' COMPONENT2 '_' COMPONENT3 ...
-
-     Example: 'u0045_0302_0301'.
-
-     For simplicity, all Unicode characters that are composites must be
-     decomposed maximally (this is normalization form D in the Unicode
-     standard); for example, 'u00CA_0301' is not a valid glyph name
-     since U+00CA (LATIN CAPITAL LETTER E WITH CIRCUMFLEX) can be
-     further decomposed into U+0045 (LATIN CAPITAL LETTER E) and U+0302
-     (COMBINING CIRCUMFLEX ACCENT).  'u0045_0302_0301' is thus the glyph
-     name for U+1EBE, LATIN CAPITAL LETTER E WITH CIRCUMFLEX AND ACUTE.
-
-   * groff maintains a table to decompose all algorithmically derived
-     glyph names that are composites itself.  For example, 'u0100'
-     (LATIN LETTER A WITH MACRON) is automatically decomposed into
-     'u0041_0304'.  Additionally, a glyph name of the GGL is preferred
-     to an algorithmically derived glyph name; groff also automatically
-     does the mapping.  Example: The glyph 'u0045_0302' is mapped to
-     '^E'.
-
-   * glyph names of the GGL can't be used in composite glyph names; for
-     example, '^E_u0301' is invalid.
-
- -- Escape: \(nm
- -- Escape: \[name]
- -- Escape: \[component1 component2 ...]
-     Insert a symbol NAME (two-character name NM) or a composite glyph
-     with component glyphs COMPONENT1, COMPONENT2, ...  There is no
-     special syntax for one-character names - the natural form '\N'
-     would collide with escapes.(1)  (*note Using Symbols-Footnote-1::)
-
-     If NAME is undefined, a warning of type 'char' is generated, and
-     the escape is ignored.  *Note Debugging::, for information about
-     warnings.
-
-     groff resolves '\[...]' with more than a single component as
-     follows:
-
-        * Any component that is found in the GGL is converted to the
-          'uXXXX' form.
-
-        * Any component 'uXXXX' that is found in the list of
-          decomposable glyphs is decomposed.
-
-        * The resulting elements are then concatenated with '_' in
-          between, dropping the leading 'u' in all elements but the
-          first.
-
-     No check for the existence of any component (similar to 'tr'
-     request) is done.
-
-     Examples:
-
-     '\[A ho]'
-          'A' maps to 'u0041', 'ho' maps to 'u02DB', thus the final
-          glyph name would be 'u0041_02DB'.  Note this is not the
-          expected result: The ogonek glyph 'ho' is a spacing ogonek,
-          but for a proper composite a non-spacing ogonek (U+0328) is
-          necessary.  Looking into the file 'composite.tmac' one can
-          find '.composite ho u0328', which changes the mapping of 'ho'
-          while a composite glyph name is constructed, causing the final
-          glyph name to be 'u0041_0328'.
-
-     '\[^E u0301]'
-     '\[^E aa]'
-     '\[E a^ aa]'
-     '\[E ^ ']'
-          '^E' maps to 'u0045_0302', thus the final glyph name is
-          'u0045_0302_0301' in all forms (assuming proper calls of the
-          'composite' request).
-
-     It is not possible to define glyphs with names like 'A ho' within a
-     groff font file.  This is not really a limitation; instead, you
-     have to define 'u0041_0328'.
-
- -- Escape: \C'xxx'
-     Typeset the glyph named XXX.(2)  (*note Using Symbols-Footnote-2::)
-     Normally it is more convenient to use '\[XXX]', but '\C' has the
-     advantage that it is compatible with newer versions of AT&T 'troff'
-     and is available in compatibility mode.
-
- -- Request: .composite from to
-     Map glyph name FROM to glyph name TO if it is used in '\[...]' with
-     more than one component.  See above for examples.
-
-     This mapping is based on glyph names only; no check for the
-     existence of either glyph is done.
-
-     A set of default mappings for many accents can be found in the file
-     'composite.tmac', which is loaded at start-up.
-
- -- Escape: \N'n'
-     Typeset the glyph with code N in the current font ('n' is *not* the
-     input character code).  The number N can be any non-negative
-     decimal integer.  Most devices only have glyphs with codes between
-     0 and 255; the Unicode output device uses codes in the range
-     0-65535.  If the current font does not contain a glyph with that
-     code, special fonts are _not_ searched.  The '\N' escape sequence
-     can be conveniently used in conjunction with the 'char' request:
-
-          .char \[phone] \f[ZD]\N'37'
-
-     The code of each glyph is given in the fourth column in the font
-     description file after the 'charset' command.  It is possible to
-     include unnamed glyphs in the font description file by using a name
-     of '---'; the '\N' escape sequence is the only way to use these.
-
-     No kerning is applied to glyphs accessed with '\N'.
-
-   Some escape sequences directly map onto special glyphs.
-
- -- Escape: \'
-     This is a backslash followed by the apostrophe character, ASCII
-     character '0x27' (EBCDIC character '0x7D').  The same as '\[aa]',
-     the acute accent.
-
- -- Escape: \`
-     This is a backslash followed by ASCII character '0x60' (EBCDIC
-     character '0x79' usually).  The same as '\[ga]', the grave accent.
-
- -- Escape: \-
-     This is the same as '\[-]', the minus sign in the current font.
-
- -- Escape: \_
-     This is the same as '\[ul]', the underline character.
-
- -- Request: .cflags n c1 c2 ...
-     Input characters and symbols have certain properties associated
-     with it.(3)  (*note Using Symbols-Footnote-3::) These properties
-     can be modified with the 'cflags' request.  The first argument is
-     the sum of the desired flags and the remaining arguments are the
-     characters or symbols to have those properties.  It is possible to
-     omit the spaces between the characters or symbols.  Instead of
-     single characters or symbols you can also use character classes
-     (see *note Character Classes:: for more details).
-
-     '1'
-          The character ends sentences (initially characters '.?!' have
-          this property).
-
-     '2'
-          Lines can be broken before the character (initially no
-          characters have this property).  This only works if both the
-          characters before and after have non-zero hyphenation codes
-          (as set with the 'hcode' request).  Use value 64 to override
-          this behaviour.
-
-     '4'
-          Lines can be broken after the character (initially the
-          character '-' and the symbols '\[hy]' and '\[em]' have this
-          property).  This only works if both the characters before and
-          after have non-zero hyphenation codes (as set with the 'hcode'
-          request).  Use value 64 to override this behaviour.
-
-     '8'
-          The character overlaps horizontally if used as a horizontal
-          line building element.  Initially the symbols '\[ul]',
-          '\[rn]', '\[ru]', '\[radicalex]', and '\[sqrtex]' have this
-          property.
-
-     '16'
-          The character overlaps vertically if used as vertical line
-          building element.  Initially symbol '\[br]' has this property.
-
-     '32'
-          An end-of-sentence character followed by any number of
-          characters with this property is treated as the end of a
-          sentence if followed by a newline or two spaces; in other
-          words the character is "transparent" for the purposes of
-          end-of-sentence recognition - this is the same as having a
-          zero space factor in TeX (initially characters '"')]*' and the
-          symbols '\[dg]', '\[rq]', and '\[cq]' have this property).
-
-     '64'
-          Ignore hyphenation code values of the surrounding characters.
-          Use this in combination with values 2 and 4 (initially no
-          characters have this property).  For example, if you need an
-          automatic break point after the hyphen in number ranges like
-          '3000-5000', insert
-
-               .cflags 68 -
-
-          into your document.  Note, however, that this can lead to bad
-          layout if done without thinking; in most situations, a better
-          solution instead of changing the 'cflags' value is to insert
-          '\:' right after the hyphen at the places that really need a
-          break point.
-
-     '128'
-          Prohibit a line break before the character, but allow a line
-          break after the character.  This works only in combination
-          with flags 256 and 512 (see below) and has no effect
-          otherwise.
-
-     '256'
-          Prohibit a line break after the character, but allow a line
-          break before the character.  This works only in combination
-          with flags 128 and 512 (see below) and has no effect
-          otherwise.
-
-     '512'
-          Allow line break before or after the character.  This works
-          only in combination with flags 128 and 256 and has no effect
-          otherwise.
-
-          Contrary to flag values 2 and 4, the flags 128, 256, and 512
-          work pairwise.  If, for example, the left character has value
-          512, and the right character 128, no line break gets inserted.
-          If we use value 6 instead for the left character, a line break
-          after the character can't be suppressed since the right
-          neighbour character doesn't get examined.
-
- -- Request: .char g [string]
- -- Request: .fchar g [string]
- -- Request: .fschar f g [string]
- -- Request: .schar g [string]
-     Define a new glyph G to be STRING (which can be empty).(4)  (*note
-     Using Symbols-Footnote-4::) Every time glyph G needs to be printed,
-     STRING is processed in a temporary environment and the result is
-     wrapped up into a single object.  Compatibility mode is turned off
-     and the escape character is set to '\' while STRING is being
-     processed.  Any emboldening, constant spacing or track kerning is
-     applied to this object rather than to individual characters in
-     STRING.
-
-     A glyph defined by these requests can be used just like a normal
-     glyph provided by the output device.  In particular, other
-     characters can be translated to it with the 'tr' or 'trin'
-     requests; it can be made the leader character by the 'lc' request;
-     repeated patterns can be drawn with the glyph using the '\l' and
-     '\L' escape sequences; words containing the glyph can be hyphenated
-     correctly if the 'hcode' request is used to give the glyph's symbol
-     a hyphenation code.
-
-     There is a special anti-recursion feature: Use of 'g' within the
-     glyph's definition is handled like normal characters and symbols
-     not defined with 'char'.
-
-     Note that the 'tr' and 'trin' requests take precedence if 'char'
-     accesses the same symbol.
-
-          .tr XY
-          X
-              => Y
-          .char X Z
-          X
-              => Y
-          .tr XX
-          X
-              => Z
-
-     The 'fchar' request defines a fallback glyph: 'gtroff' only checks
-     for glyphs defined with 'fchar' if it cannot find the glyph in the
-     current font.  'gtroff' carries out this test before checking
-     special fonts.
-
-     'fschar' defines a fallback glyph for font F: 'gtroff' checks for
-     glyphs defined with 'fschar' after the list of fonts declared as
-     font-specific special fonts with the 'fspecial' request, but before
-     the list of fonts declared as global special fonts with the
-     'special' request.
-
-     Finally, the 'schar' request defines a global fallback glyph:
-     'gtroff' checks for glyphs defined with 'schar' after the list of
-     fonts declared as global special fonts with the 'special' request,
-     but before the already mounted special fonts.
-
-     *Note Using Symbols::, for a detailed description of the glyph
-     searching mechanism in 'gtroff'.
-
- -- Request: .rchar c1 c2 ...
- -- Request: .rfschar f c1 c2 ...
-     Remove the definitions of glyphs C1, C2, ...  This undoes the
-     effect of a 'char', 'fchar', or 'schar' request.
-
-     It is possible to omit the whitespace between arguments.
-
-     The request 'rfschar' removes glyph definitions defined with
-     'fschar' for glyph f.
-
-   *Note Special Characters::.
-
-
-File: groff.info,  Node: Using Symbols-Footnotes,  Up: Using Symbols
-
-   (1) Note that a one-character symbol is not the same as an input
-character, i.e., the character 'a' is not the same as '\[a]'.  By
-default, 'groff' defines only a single one-character symbol, '\[-]'; it
-is usually accessed as '\-'.  On the other hand, 'gtroff' has the
-special feature that '\[charXXX]' is the same as the input character
-with character code XXX.  For example, '\[char97]' is identical to the
-letter 'a' if ASCII encoding is active.
-
-   (2) '\C' is actually a misnomer since it accesses an output glyph.
-
-   (3) Note that the output glyphs themselves don't have such
-properties.  For 'gtroff', a glyph is a numbered box with a given width,
-depth, and height, nothing else.  All manipulations with the 'cflags'
-request work on the input level.
-
-   (4) 'char' is a misnomer since an output glyph is defined.
-
-
-File: groff.info,  Node: Character Classes,  Next: Special Fonts,  Prev: Using Symbols,  Up: Fonts and Symbols
-
-5.17.5 Character Classes
-------------------------
-
-Classes are particularly useful for East Asian languages such as
-Chinese, Japanese, and Korean, where the number of needed characters is
-much larger than in European languages, and where large sets of
-characters share the same properties.
-
- -- Request: .class n c1 c2 ...
-     In 'groff', a "character class" (or simply "class") is a set of
-     characters, grouped by some user aspect.  The 'class' request
-     defines such classes so that other requests can refer to all
-     characters belonging to this set with a single class name.
-     Currently, only the 'cflags' request can handle character classes.
-
-     A 'class' request takes a class name followed by a list of
-     entities.  In its simplest form, the entities are characters or
-     symbols:
-
-          .class [prepunct] , : ; > }
-
-     Since class and glyph names share the same namespace, it is
-     recommended to start and end the class name with '[' and ']',
-     respectively, to avoid collisions with normal 'groff' symbols (and
-     symbols defined by the user).  In particular, the presence of ']'
-     in the symbol name intentionally prevents the usage of '\[...]',
-     thus you must use the '\C' escape to access a class with such a
-     name.
-
-     You can also use a special character range notation, consisting of
-     a start character or symbol, followed by '-', and an end character
-     or symbol.  Internally, 'gtroff' converts these two symbol names to
-     Unicode values (according to the groff glyph gist), which then give
-     the start and end value of the range.  If that fails, the class
-     definition is skipped.
-
-     Finally, classes can be nested, too.
-
-     Here is a more complex example:
-
-          .class [prepunctx] \C'[prepunct]' \[u2013]-\[u2016]
-
-     The class 'prepunctx' now contains the contents of the class
-     'prepunct' as defined above (the set ', : ; > }'), and characters
-     in the range between 'U+2013' and 'U+2016'.
-
-     If you want to add '-' to a class, it must be the first character
-     value in the argument list, otherwise it gets misinterpreted as a
-     range.
-
-     Note that it is not possible to use class names within range
-     definitions.
-
-     Typical use of the 'class' request is to control line-breaking and
-     hyphenation rules as defined by the 'cflags' request.  For example,
-     to inhibit line breaks before the characters belonging to the
-     'prepunctx' class, you can write:
-
-          .cflags 2 \C'[prepunctx]'
-
-     See the 'cflags' request in *note Using Symbols::, for more
-     details.
-
-
-File: groff.info,  Node: Special Fonts,  Next: Artificial Fonts,  Prev: Character Classes,  Up: Fonts and Symbols
-
-5.17.6 Special Fonts
---------------------
-
-Special fonts are those that 'gtroff' searches when it cannot find the
-requested glyph in the current font.  The Symbol font is usually a
-special font.
-
-   'gtroff' provides the following two requests to add more special
-fonts.  *Note Using Symbols::, for a detailed description of the glyph
-searching mechanism in 'gtroff'.
-
-   Usually, only non-TTY devices have special fonts.
-
- -- Request: .special [s1 s2 ...]
- -- Request: .fspecial f [s1 s2 ...]
-     Use the 'special' request to define special fonts.  Initially, this
-     list is empty.
-
-     Use the 'fspecial' request to designate special fonts only when
-     font F is active.  Initially, this list is empty.
-
-     Previous calls to 'special' or 'fspecial' are overwritten; without
-     arguments, the particular list of special fonts is set to empty.
-     Special fonts are searched in the order they appear as arguments.
-
-     All fonts that appear in a call to 'special' or 'fspecial' are
-     loaded.
-
-     *Note Using Symbols::, for the exact search order of glyphs.
-
-
-File: groff.info,  Node: Artificial Fonts,  Next: Ligatures and Kerning,  Prev: Special Fonts,  Up: Fonts and Symbols
-
-5.17.7 Artificial Fonts
------------------------
-
-There are a number of requests and escapes for artificially creating
-fonts.  These are largely vestiges of the days when output devices did
-not have a wide variety of fonts, and when 'nroff' and 'troff' were
-separate programs.  Most of them are no longer necessary in GNU 'troff'.
-Nevertheless, they are supported.
-
- -- Escape: \H'height'
- -- Escape: \H'+height'
- -- Escape: \H'-height'
- -- Register: \n[.height]
-     Change (increment, decrement) the height of the current font, but
-     not the width.  If HEIGHT is zero, restore the original height.
-     Default scaling indicator is 'z'.
-
-     The read-only number register '.height' contains the font height as
-     set by '\H'.
-
-     Currently, only the '-Tps' and '-Tpdf' devices support this
-     feature.
-
-     Note that '\H' doesn't produce an input token in 'gtroff'.  As a
-     consequence, it can be used in requests like 'mc' (which expects a
-     single character as an argument) to change the font on the fly:
-
-          .mc \H'+5z'x\H'0'
-
-     In compatibility mode, 'gtroff' behaves differently: If an
-     increment or decrement is used, it is always taken relative to the
-     current point size and not relative to the previously selected font
-     height.  Thus,
-
-          .cp 1
-          \H'+5'test \H'+5'test
-
-     prints the word 'test' twice with the same font height (five points
-     larger than the current font size).
-
- -- Escape: \S'slant'
- -- Register: \n[.slant]
-     Slant the current font by SLANT degrees.  Positive values slant to
-     the right.  Only integer values are possible.
-
-     The read-only number register '.slant' contains the font slant as
-     set by '\S'.
-
-     Currently, only the '-Tps' and '-Tpdf' devices support this
-     feature.
-
-     Note that '\S' doesn't produce an input token in 'gtroff'.  As a
-     consequence, it can be used in requests like 'mc' (which expects a
-     single character as an argument) to change the font on the fly:
-
-          .mc \S'20'x\S'0'
-
-     This request is incorrectly documented in the original UNIX troff
-     manual; the slant is always set to an absolute value.
-
- -- Request: .ul [lines]
-     The 'ul' request normally underlines subsequent lines if a TTY
-     output device is used.  Otherwise, the lines are printed in italics
-     (only the term 'underlined' is used in the following).  The single
-     argument is the number of input lines to be underlined; with no
-     argument, the next line is underlined.  If LINES is zero or
-     negative, stop the effects of 'ul' (if it was active).  Requests
-     and empty lines do not count for computing the number of underlined
-     input lines, even if they produce some output like 'tl'.  Lines
-     inserted by macros (e.g. invoked by a trap) do count.
-
-     At the beginning of 'ul', the current font is stored and the
-     underline font is activated.  Within the span of a 'ul' request, it
-     is possible to change fonts, but after the last line affected by
-     'ul' the saved font is restored.
-
-     This number of lines still to be underlined is associated with the
-     current environment (*note Environments::).  The underline font can
-     be changed with the 'uf' request.
-
-     The 'ul' request does not underline spaces.
-
- -- Request: .cu [lines]
-     The 'cu' request is similar to 'ul' but underlines spaces as well
-     (if a TTY output device is used).
-
- -- Request: .uf font
-     Set the underline font (globally) used by 'ul' and 'cu'.  By
-     default, this is the font at position 2.  FONT can be either a
-     non-negative font position or the name of a font.
-
- -- Request: .bd font [offset]
- -- Request: .bd font1 font2 [offset]
- -- Register: \n[.b]
-     Artificially create a bold font by printing each glyph twice,
-     slightly offset.
-
-     Two syntax forms are available.
-
-        * Imitate a bold font unconditionally.  The first argument
-          specifies the font to embolden, and the second is the number
-          of basic units, minus one, by which the two glyphs are offset.
-          If the second argument is missing, emboldening is turned off.
-
-          FONT can be either a non-negative font position or the name of
-          a font.
-
-          OFFSET is available in the '.b' read-only register if a
-          special font is active; in the 'bd' request, its default unit
-          is 'u'.
-
-        * Imitate a bold form conditionally.  Embolden FONT1 by OFFSET
-          only if font FONT2 is the current font.  This command can be
-          issued repeatedly to set up different emboldening values for
-          different current fonts.  If the second argument is missing,
-          emboldening is turned off for this particular current font.
-
-          This affects special fonts only (either set up with the
-          'special' command in font files or with the 'fspecial'
-          request).
-
- -- Request: .cs font [width [em-size]]
-     Switch to and from "constant glyph space mode".  If activated, the
-     width of every glyph is WIDTH/36 ems.  The em size is given
-     absolutely by EM-SIZE; if this argument is missing, the em value is
-     taken from the current font size (as set with the 'ps' request)
-     when the font is effectively in use.  Without second and third
-     argument, constant glyph space mode is deactivated.
-
-     Default scaling indicator for EM-SIZE is 'z'; WIDTH is an integer.
-
-
-File: groff.info,  Node: Ligatures and Kerning,  Prev: Artificial Fonts,  Up: Fonts and Symbols
-
-5.17.8 Ligatures and Kerning
-----------------------------
-
-Ligatures are groups of characters that are run together, i.e, producing
-a single glyph.  For example, the letters 'f' and 'i' can form a
-ligature 'fi' as in the word 'file'.  This produces a cleaner look
-(albeit subtle) to the printed output.  Usually, ligatures are not
-available in fonts for TTY output devices.
-
-   Most POSTSCRIPT fonts support the fi and fl ligatures.  The C/A/T
-typesetter that was the target of AT&T 'troff' also supported 'ff',
-'ffi', and 'ffl' ligatures.  Advanced typesetters or 'expert' fonts may
-include ligatures for 'ft' and 'ct', although GNU 'troff' does not
-support these (yet).
-
-   Only the current font is checked for ligatures and kerns; neither
-special fonts nor entities defined with the 'char' request (and its
-siblings) are taken into account.
-
- -- Request: .lg [flag]
- -- Register: \n[.lg]
-     Switch the ligature mechanism on or off; if the parameter is
-     non-zero or missing, ligatures are enabled, otherwise disabled.
-     Default is on.  The current ligature mode can be found in the
-     read-only number register '.lg' (set to 1 or 2 if ligatures are
-     enabled, 0 otherwise).
-
-     Setting the ligature mode to 2 enables the two-character ligatures
-     (fi, fl, and ff) and disables the three-character ligatures (ffi
-     and ffl).
-
-   "Pairwise kerning" is another subtle typesetting mechanism that
-modifies the distance between a glyph pair to improve readability.  In
-most cases (but not always) the distance is decreased.  Typewriter-like
-fonts and fonts for terminals where all glyphs have the same width don't
-use kerning.
-
- -- Request: .kern [flag]
- -- Register: \n[.kern]
-     Switch kerning on or off.  If the parameter is non-zero or missing,
-     enable pairwise kerning, otherwise disable it.  The read-only
-     number register '.kern' is set to 1 if pairwise kerning is enabled,
-     0 otherwise.
-
-     If the font description file contains pairwise kerning information,
-     glyphs from that font are kerned.  Kerning between two glyphs can
-     be inhibited by placing '\&' between them: 'V\&A'.
-
-     *Note Font File Format::.
-
-   "Track kerning" expands or reduces the space between glyphs.  This
-can be handy, for example, if you need to squeeze a long word onto a
-single line or spread some text to fill a narrow column.  It must be
-used with great care since it is usually considered bad typography if
-the reader notices the effect.
-
- -- Request: .tkf f s1 n1 s2 n2
-     Enable track kerning for font F.  If the current font is F the
-     width of every glyph is increased by an amount between N1 and N2
-     (N1, N2 can be negative); if the current point size is less than or
-     equal to S1 the width is increased by N1; if it is greater than or
-     equal to S2 the width is increased by N2; if the point size is
-     greater than or equal to S1 and less than or equal to S2 the
-     increase in width is a linear function of the point size.
-
-     The default scaling indicator is 'z' for S1 and S2, 'p' for N1 and
-     N2.
-
-     Note that the track kerning amount is added even to the rightmost
-     glyph in a line; for large values it is thus recommended to
-     increase the line length by the same amount to compensate it.
-
-   Sometimes, when typesetting letters of different fonts, more or less
-space at such boundaries are needed.  There are two escapes to help with
-this.
-
- -- Escape: \/
-     Increase the width of the preceding glyph so that the spacing
-     between that glyph and the following glyph is correct if the
-     following glyph is a roman glyph.  For example, if an italic 'f' is
-     immediately followed by a roman right parenthesis, then in many
-     fonts the top right portion of the 'f' overlaps the top left of the
-     right parenthesis.  Use this escape sequence whenever an italic
-     glyph is immediately followed by a roman glyph without any
-     intervening space.  This small amount of space is also called
-     "italic correction".
-
- -- Escape: \,
-     Modify the spacing of the following glyph so that the spacing
-     between that glyph and the preceding glyph is correct if the
-     preceding glyph is a roman glyph.  Use this escape sequence
-     whenever a roman glyph is immediately followed by an italic glyph
-     without any intervening space.  In analogy to above, this space
-     could be called "left italic correction", but this term isn't used
-     widely.
-
- -- Escape: \&
-     Insert a zero-width character, which is invisible.  Its intended
-     use is to stop interaction of a character with its surrounding.
-
-        * It prevents the insertion of extra space after an
-          end-of-sentence character.
-
-               Test.
-               Test.
-                   => Test.  Test.
-               Test.\&
-               Test.
-                   => Test. Test.
-
-        * It prevents interpretation of a control character at the
-          beginning of an input line.
-
-               .Test
-                   => warning: `Test' not defined
-               \&.Test
-                   => .Test
-
-        * It prevents kerning between two glyphs.
-
-        * It is needed to map an arbitrary character to nothing in the
-          'tr' request (*note Character Translations::).
-
- -- Escape: \)
-     This escape is similar to '\&' except that it behaves like a
-     character declared with the 'cflags' request to be transparent for
-     the purposes of an end-of-sentence character.
-
-     Its main usage is in macro definitions to protect against arguments
-     starting with a control character.
-
-          .de xxx
-          \)\\$1
-          ..
-          .de yyy
-          \&\\$1
-          ..
-          This is a test.\c
-          .xxx '
-          This is a test.
-              =>This is a test.'  This is a test.
-          This is a test.\c
-          .yyy '
-          This is a test.
-              =>This is a test.' This is a test.
-
-
-File: groff.info,  Node: Sizes,  Next: Strings,  Prev: Fonts and Symbols,  Up: gtroff Reference
-
-5.18 Sizes
-==========
-
-'gtroff' uses two dimensions with each line of text, type size and
-vertical spacing.  The "type size" is approximately the height of the
-tallest glyph.(1)  (*note Sizes-Footnote-1::) "Vertical spacing" is the
-amount of space 'gtroff' allows for a line of text; normally, this is
-about 20% larger than the current type size.  Ratios smaller than this
-can result in hard-to-read text; larger than this, it spreads the text
-out more vertically (useful for term papers).  By default, 'gtroff' uses
-10 point type on 12 point spacing.
-
-   The difference between type size and vertical spacing is known, by
-typesetters, as "leading" (this is pronounced 'ledding').
-
-* Menu:
-
-* Changing Type Sizes::
-* Fractional Type Sizes::
-
-
-File: groff.info,  Node: Sizes-Footnotes,  Up: Sizes
-
-   (1) This is usually the parenthesis.  Note that in most cases the
-real dimensions of the glyphs in a font are _not_ related to its type
-size!  For example, the standard POSTSCRIPT font families 'Times Roman',
-'Helvetica', and 'Courier' can't be used together at 10pt; to get
-acceptable output, the size of 'Helvetica' has to be reduced by one
-point, and the size of 'Courier' must be increased by one point.
-
-
-File: groff.info,  Node: Changing Type Sizes,  Next: Fractional Type Sizes,  Prev: Sizes,  Up: Sizes
-
-5.18.1 Changing Type Sizes
---------------------------
-
- -- Request: .ps [size]
- -- Request: .ps +size
- -- Request: .ps -size
- -- Escape: \ssize
- -- Register: \n[.s]
-     Use the 'ps' request or the '\s' escape to change (increase,
-     decrease) the type size (in points).  Specify SIZE as either an
-     absolute point size, or as a relative change from the current size.
-     The size 0 (for both '.ps' and '\s'), or no argument (for '.ps'
-     only), goes back to the previous size.
-
-     Default scaling indicator of 'size' is 'z'.  If 'size' is negative,
-     it is set to 1u.
-
-     The read-only number register '.s' returns the point size in points
-     as a decimal fraction.  This is a string.  To get the point size in
-     scaled points, use the '.ps' register instead.
-
-     '.s' is associated with the current environment (*note
-     Environments::).
-
-          snap, snap,
-          .ps +2
-          grin, grin,
-          .ps +2
-          wink, wink, \s+2nudge, nudge,\s+8 say no more!
-          .ps 10
-
-     The '\s' escape may be called in a variety of ways.  Much like
-     other escapes there must be a way to determine where the argument
-     ends and the text begins.  Any of the following forms are valid:
-
-     '\sN'
-          Set the point size to N points.  N must be either 0 or in the
-          range 4 to 39.
-
-     '\s+N'
-     '\s-N'
-          Increase or decrease the point size by N points.  N must be
-          exactly one digit.
-
-     '\s(NN'
-          Set the point size to NN points.  NN must be exactly two
-          digits.
-
-     '\s+(NN'
-     '\s-(NN'
-     '\s(+NN'
-     '\s(-NN'
-          Increase or decrease the point size by NN points.  NN must be
-          exactly two digits.
-
-     Note that '\s' doesn't produce an input token in 'gtroff'.  As a
-     consequence, it can be used in requests like 'mc' (which expects a
-     single character as an argument) to change the font on the fly:
-
-          .mc \s[20]x\s[0]
-
-     *Note Fractional Type Sizes::, for yet another syntactical form of
-     using the '\s' escape.
-
- -- Request: .sizes s1 s2 ... sn [0]
-     Some devices may only have certain permissible sizes, in which case
-     'gtroff' rounds to the nearest permissible size.  The 'DESC' file
-     specifies which sizes are permissible for the device.
-
-     Use the 'sizes' request to change the permissible sizes for the
-     current output device.  Arguments are in scaled points; the
-     'sizescale' line in the 'DESC' file for the output device provides
-     the scaling factor.  For example, if the scaling factor is 1000,
-     then the value 12000 is 12 points.
-
-     Each argument can be a single point size (such as '12000'), or a
-     range of sizes (such as '4000-72000').  You can optionally end the
-     list with a zero.
-
- -- Request: .vs [space]
- -- Request: .vs +space
- -- Request: .vs -space
- -- Register: \n[.v]
-     Change (increase, decrease) the vertical spacing by SPACE.  The
-     default scaling indicator is 'p'.
-
-     If 'vs' is called without an argument, the vertical spacing is
-     reset to the previous value before the last call to 'vs'.
-
-     'gtroff' creates a warning of type 'range' if SPACE is negative;
-     the vertical spacing is then set to smallest positive value, the
-     vertical resolution (as given in the '.V' register).
-
-     Note that '.vs 0' isn't saved in a diversion since it doesn't
-     result in a vertical motion.  You explicitly have to repeat this
-     command before inserting the diversion.
-
-     The read-only number register '.v' contains the current vertical
-     spacing; it is associated with the current environment (*note
-     Environments::).
-
-   The effective vertical line spacing consists of four components.
-Breaking a line causes the following actions (in the given order).
-
-   * Move the current point vertically by the "extra pre-vertical line
-     space".  This is the minimum value of all '\x' escapes with a
-     negative argument in the current output line.
-
-   * Move the current point vertically by the vertical line spacing as
-     set with the 'vs' request.
-
-   * Output the current line.
-
-   * Move the current point vertically by the "extra post-vertical line
-     space".  This is the maximum value of all '\x' escapes with a
-     positive argument in the line that has just been output.
-
-   * Move the current point vertically by the "post-vertical line
-     spacing" as set with the 'pvs' request.
-
-   It is usually better to use 'vs' or 'pvs' instead of 'ls' to produce
-double-spaced documents: 'vs' and 'pvs' have a finer granularity for the
-inserted vertical space compared to 'ls'; furthermore, certain
-preprocessors assume single-spacing.
-
-   *Note Manipulating Spacing::, for more details on the '\x' escape and
-the 'ls' request.
-
- -- Request: .pvs [space]
- -- Request: .pvs +space
- -- Request: .pvs -space
- -- Register: \n[.pvs]
-     Change (increase, decrease) the post-vertical spacing by SPACE.
-     The default scaling indicator is 'p'.
-
-     If 'pvs' is called without an argument, the post-vertical spacing
-     is reset to the previous value before the last call to 'pvs'.
-
-     'gtroff' creates a warning of type 'range' if SPACE is zero or
-     negative; the vertical spacing is then set to zero.
-
-     The read-only number register '.pvs' contains the current
-     post-vertical spacing; it is associated with the current
-     environment (*note Environments::).
-
-
-File: groff.info,  Node: Fractional Type Sizes,  Prev: Changing Type Sizes,  Up: Sizes
-
-5.18.2 Fractional Type Sizes
-----------------------------
-
-A "scaled point" is equal to 1/SIZESCALE points, where SIZESCALE is
-specified in the 'DESC' file (1 by default).  There is a new scale
-indicator 'z', which has the effect of multiplying by SIZESCALE.
-Requests and escape sequences in 'gtroff' interpret arguments that
-represent a point size as being in units of scaled points, but they
-evaluate each such argument using a default scale indicator of 'z'.
-Arguments treated in this way are the argument to the 'ps' request, the
-third argument to the 'cs' request, the second and fourth arguments to
-the 'tkf' request, the argument to the '\H' escape sequence, and those
-variants of the '\s' escape sequence that take a numeric expression as
-their argument (see below).
-
-   For example, suppose SIZESCALE is 1000; then a scaled point is
-equivalent to a millipoint; the request '.ps 10.25' is equivalent to
-'.ps 10.25z' and thus sets the point size to 10250 scaled points, which
-is equal to 10.25 points.
-
-   'gtroff' disallows the use of the 'z' scale indicator in instances
-where it would make no sense, such as a numeric expression whose default
-scale indicator was neither 'u' nor 'z'.  Similarly it would make no
-sense to use a scaling indicator other than 'z' or 'u' in a numeric
-expression whose default scale indicator was 'z', and so 'gtroff'
-disallows this as well.
-
-   There is also new scale indicator 's', which multiplies by the number
-of units in a scaled point.  So, for example, '\n[.ps]s' is equal to
-'1m'.  Be sure not to confuse the 's' and 'z' scale indicators.
-
- -- Register: \n[.ps]
-     A read-only number register returning the point size in scaled
-     points.
-
-     '.ps' is associated with the current environment (*note
-     Environments::).
-
- -- Register: \n[.psr]
- -- Register: \n[.sr]
-     The last-requested point size in scaled points is contained in the
-     '.psr' read-only number register.  The last requested point size in
-     points as a decimal fraction can be found in '.sr'.  This is a
-     string-valued read-only number register.
-
-     Note that the requested point sizes are device-independent, whereas
-     the values returned by the '.ps' and '.s' registers are not.  For
-     example, if a point size of 11pt is requested, and a 'sizes'
-     request (or a 'sizescale' line in a 'DESC' file) specifies 10.95pt
-     instead, this value is actually used.
-
-     Both registers are associated with the current environment (*note
-     Environments::).
-
-   The '\s' escape has the following syntax for working with fractional
-type sizes:
-
-'\s[N]'
-'\s'N''
-     Set the point size to N scaled points; N is a numeric expression
-     with a default scale indicator of 'z'.
-
-'\s[+N]'
-'\s[-N]'
-'\s+[N]'
-'\s-[N]'
-'\s'+N''
-'\s'-N''
-'\s+'N''
-'\s-'N''
-     Increase or or decrease the point size by N scaled points; N is a
-     numeric expression (which may start with a minus sign) with a
-     default scale indicator of 'z'.
-
-   *Note Font Files::.
-
-
-File: groff.info,  Node: Strings,  Next: Conditionals and Loops,  Prev: Sizes,  Up: gtroff Reference
-
-5.19 Strings
-============
-
-'gtroff' has string variables, which are entirely for user convenience
-(i.e. there are no built-in strings exept '.T', but even this is a
-read-write string variable).
-
-   Although the following requests can be used to create strings, simply
-using an undefined string will cause it to be defined as empty.  *Note
-Identifiers::.
-
- -- Request: .ds name [string]
- -- Request: .ds1 name [string]
- -- Escape: \*n
- -- Escape: \*(nm
- -- Escape: \*[name arg1 arg2 ...]
-     Define and access a string variable NAME (one-character name N,
-     two-character name NM).  If NAME already exists, 'ds' overwrites
-     the previous definition.  Only the syntax form using brackets can
-     take arguments that are handled identically to macro arguments; the
-     single exception is that a closing bracket as an argument must be
-     enclosed in double quotes.  *Note Request and Macro Arguments::,
-     and *note Parameters::.
-
-     Example:
-
-          .ds foo a \\$1 test
-          .
-          This is \*[foo nice].
-              => This is a nice test.
-
-     The '\*' escape "interpolates" (expands in-place) a
-     previously-defined string variable.  To be more precise, the stored
-     string is pushed onto the input stack, which is then parsed by
-     'gtroff'.  Similar to number registers, it is possible to nest
-     strings, i.e., string variables can be called within string
-     variables.
-
-     If the string named by the '\*' escape does not exist, it is
-     defined as empty, and a warning of type 'mac' is emitted (see *note
-     Debugging::, for more details).
-
-     *Caution:* Unlike other requests, the second argument to the 'ds'
-     request takes up the entire line including trailing spaces.  This
-     means that comments on a line with such a request can introduce
-     unwanted space into a string.
-
-          .ds UX \s-1UNIX\s0\u\s-3tm\s0\d \" UNIX trademark
-
-     Instead the comment should be put on another line or have the
-     comment escape adjacent with the end of the string.
-
-          .ds UX \s-1UNIX\s0\u\s-3tm\s0\d\"  UNIX trademark
-
-     To produce leading space the string can be started with a double
-     quote.  No trailing quote is needed; in fact, any trailing quote is
-     included in your string.
-
-          .ds sign "           Yours in a white wine sauce,
-
-     Strings are not limited to a single line of text.  A string can
-     span several lines by escaping the newlines with a backslash.  The
-     resulting string is stored _without_ the newlines.
-
-          .ds foo lots and lots \
-          of text are on these \
-          next several lines
-
-     It is not possible to have real newlines in a string.  To put a
-     single double quote character into a string, use two consecutive
-     double quote characters.
-
-     The 'ds1' request turns off compatibility mode while interpreting a
-     string.  To be more precise, a "compatibility save" input token is
-     inserted at the beginning of the string, and a "compatibility
-     restore" input token at the end.
-
-          .nr xxx 12345
-          .ds aa The value of xxx is \\n[xxx].
-          .ds1 bb The value of xxx ix \\n[xxx].
-          .
-          .cp 1
-          .
-          \*(aa
-              => warning: number register `[' not defined
-              => The value of xxx is 0xxx].
-          \*(bb
-              => The value of xxx ix 12345.
-
-     Strings, macros, and diversions (and boxes) share the same name
-     space.  Internally, even the same mechanism is used to store them.
-     This has some interesting consequences.  For example, it is
-     possible to call a macro with string syntax and vice versa.
-
-          .de xxx
-          a funny test.
-          ..
-          This is \*[xxx]
-              => This is a funny test.
-
-          .ds yyy a funny test
-          This is
-          .yyy
-              => This is a funny test.
-
-     In particular, interpolating a string does not hide existing macro
-     arguments.  Thus in a macro, a more efficient way of doing
-
-          .xx \\$@
-
-     is
-
-          \\*[xx]\\
-
-     Note that the latter calling syntax doesn't change the value of
-     '\$0', which is then inherited from the calling macro.
-
-     Diversions and boxes can be also called with string syntax.
-
-     Another consequence is that you can copy one-line diversions or
-     boxes to a string.
-
-          .di xxx
-          a \fItest\fR
-          .br
-          .di
-          .ds yyy This is \*[xxx]\c
-          \*[yyy].
-              => This is a test.
-
-     As the previous example shows, it is possible to store formatted
-     output in strings.  The '\c' escape prevents the insertion of an
-     additional blank line in the output.
-
-     Copying diversions longer than a single output line produces
-     unexpected results.
-
-          .di xxx
-          a funny
-          .br
-          test
-          .br
-          .di
-          .ds yyy This is \*[xxx]\c
-          \*[yyy].
-              => test This is a funny.
-
-     Usually, it is not predictable whether a diversion contains one or
-     more output lines, so this mechanism should be avoided.  With UNIX
-     'troff', this was the only solution to strip off a final newline
-     from a diversion.  Another disadvantage is that the spaces in the
-     copied string are already formatted, making them unstretchable.
-     This can cause ugly results.
-
-     A clean solution to this problem is available in GNU 'troff', using
-     the requests 'chop' to remove the final newline of a diversion, and
-     'unformat' to make the horizontal spaces stretchable again.
-
-          .box xxx
-          a funny
-          .br
-          test
-          .br
-          .box
-          .chop xxx
-          .unformat xxx
-          This is \*[xxx].
-              => This is a funny test.
-
-     *Note Gtroff Internals::, for more information.
-
- -- Request: .as name [string]
- -- Request: .as1 name [string]
-     The 'as' request is similar to 'ds' but appends STRING to the
-     string stored as NAME instead of redefining it.  If NAME doesn't
-     exist yet, it is created.
-
-          .as sign " with shallots, onions and garlic,
-
-     The 'as1' request is similar to 'as', but compatibility mode is
-     switched off while the appended string is interpreted.  To be more
-     precise, a "compatibility save" input token is inserted at the
-     beginning of the appended string, and a "compatibility restore"
-     input token at the end.
-
-   Rudimentary string manipulation routines are given with the next two
-requests.
-
- -- Request: .substring str n1 [n2]
-     Replace the string named STR with the substring defined by the
-     indices N1 and N2.  The first character in the string has index 0.
-     If N2 is omitted, it is implicitly set to the largest valid value
-     (the string length minus one).  If the index value N1 or N2 is
-     negative, it is counted from the end of the string, going
-     backwards: The last character has index -1, the character before
-     the last character has index -2, etc.
-
-          .ds xxx abcdefgh
-          .substring xxx 1 -4
-          \*[xxx]
-              => bcde
-          .substring xxx 2
-          \*[xxx]
-              => de
-
- -- Request: .length reg str
-     Compute the number of characters of STR and return it in the number
-     register REG.  If REG doesn't exist, it is created.  'str' is read
-     in copy mode.
-
-          .ds xxx abcd\h'3i'efgh
-          .length yyy \*[xxx]
-          \n[yyy]
-              => 14
-
- -- Request: .rn xx yy
-     Rename the request, macro, diversion, or string XX to YY.
-
- -- Request: .rm xx
-     Remove the request, macro, diversion, or string XX.  'gtroff'
-     treats subsequent invocations as if the object had never been
-     defined.
-
- -- Request: .als new old
-     Create an alias named NEW for the request, string, macro, or
-     diversion object named OLD.  The new name and the old name are
-     exactly equivalent (it is similar to a hard rather than a soft
-     link).  If OLD is undefined, 'gtroff' generates a warning of type
-     'mac' and ignores the request.
-
-     To understand how the 'als' request works it is probably best to
-     think of two different pools: one pool for objects (macros,
-     strings, etc.), and another one for names.  As soon as an object is
-     defined, 'gtroff' adds it to the object pool, adds its name to the
-     name pool, and creates a link between them.  When 'als' creates an
-     alias, it adds a new name to the name pool that gets linked to the
-     same object as the old name.
-
-     Now consider this example.
-
-          .de foo
-          ..
-          .
-          .als bar foo
-          .
-          .de bar
-          .  foo
-          ..
-          .
-          .bar
-              => input stack limit exceeded
-
-     The definition of macro 'bar' replaces the old object this name is
-     linked to.  However, the alias to 'foo' is still active!  In other
-     words, 'foo' is still linked to the same object as 'bar', and the
-     result of calling 'bar' is an infinite, recursive loop that finally
-     leads to an error.
-
-     To undo an alias, simply call 'rm' on the aliased name.  The object
-     itself is not destroyed until there are no more aliases.
-
- -- Request: .chop xx
-     Remove (chop) the last character from the macro, string, or
-     diversion named XX.  This is useful for removing the newline from
-     the end of diversions that are to be interpolated as strings.  This
-     command can be used repeatedly; see *note Gtroff Internals::, for
-     details on nodes inserted additionally by 'gtroff'.
-
-   *Note Identifiers::, and *note Comments::.
-
-
-File: groff.info,  Node: Conditionals and Loops,  Next: Writing Macros,  Prev: Strings,  Up: gtroff Reference
-
-5.20 Conditionals and Loops
-===========================
-
-* Menu:
-
-* Operators in Conditionals::
-* if-else::
-* while::
-
-
-File: groff.info,  Node: Operators in Conditionals,  Next: if-else,  Prev: Conditionals and Loops,  Up: Conditionals and Loops
-
-5.20.1 Operators in Conditionals
---------------------------------
-
-In 'if', 'ie', and 'while' requests, in addition to ordinary *note
-Expressions::, there are several more operators available:
-
-'e'
-'o'
-     True if the current page is even or odd numbered (respectively).
-
-'n'
-     True if the document is being processed in nroff mode (i.e., the
-     '.nroff' command has been issued).  *Note Troff and Nroff Mode::.
-
-'t'
-     True if the document is being processed in troff mode (i.e., the
-     '.troff' command has been issued).  *Note Troff and Nroff Mode::.
-
-'v'
-     Always false.  This condition is for compatibility with other
-     'troff' versions only (identifying a '-Tversatec' device).
-
-''XXX'YYY''
-     True if the output produced by XXX is equal to the output produced
-     by YYY.  Other characters can be used in place of the single
-     quotes; the same set of delimiters as for the '\D' escape is used
-     (*note Escapes::).  'gtroff' formats XXX and YYY in separate
-     environments; after the comparison the resulting data is discarded.
-
-          .ie "|"\fR|\fP" \
-          true
-          .el \
-          false
-              => true
-
-     The resulting motions, glyph sizes, and fonts have to match,(1)
-     (*note Operators in Conditionals-Footnote-1::) and not the
-     individual motion, size, and font requests.  In the previous
-     example, '|' and '\fR|\fP' both result in a roman '|' glyph with
-     the same point size and at the same location on the page, so the
-     strings are equal.  If '.ft I' had been added before the '.ie', the
-     result would be "false" because (the first) '|' produces an italic
-     '|' rather than a roman one.
-
-     To compare strings without processing, surround the data with '\?'.
-
-          .ie "\?|\?"\?\fR|\fP\?" \
-          true
-          .el \
-          false
-              => false
-
-     Since data protected with '\?' is read in copy-in mode it is even
-     possible to use incomplete input without causing an error.
-
-          .ds a \[
-          .ds b \[
-          .ie '\?\*a\?'\?\*b\?' \
-          true
-          .el \
-          false
-              => true
-
-'r XXX'
-     True if there is a number register named XXX.
-
-'d XXX'
-     True if there is a string, macro, diversion, or request named XXX.
-
-'m XXX'
-     True if there is a color named XXX.
-
-'c G'
-     True if there is a glyph G available(2) (*note Operators in
-     Conditionals-Footnote-2::); G is either an ASCII character or a
-     special character ('\N'XXX'', '\(GG' or '\[GGG]'); the condition is
-     also true if G has been defined by the 'char' request.
-
-'F FONT'
-     True if a font named FONT exists.  FONT is handled as if it was
-     opened with the 'ft' request (this is, font translation and styles
-     are applied), without actually mounting it.
-
-     This test doesn't load the complete font but only its header to
-     verify its validity.
-
-'S STYLE'
-     True if style STYLE has been registered.  Font translation is
-     applied.
-
-   Note that these operators can't be combined with other operators like
-':' or '&'; only a leading '!' (without whitespace between the
-exclamation mark and the operator) can be used to negate the result.
-
-     .nr xxx 1
-     .ie !r xxx \
-     true
-     .el \
-     false
-         => false
-
-   A whitespace after '!' always evaluates to zero (this bizarre
-behaviour is due to compatibility with UNIX 'troff').
-
-     .nr xxx 1
-     .ie ! r xxx \
-     true
-     .el \
-     false
-         => r xxx true
-
-   It is possible to omit the whitespace before the argument to the 'r',
-'d', and 'c' operators.
-
-   *Note Expressions::.
-
-
-File: groff.info,  Node: Operators in Conditionals-Footnotes,  Up: Operators in Conditionals
-
-   (1) The created output nodes must be identical.  *Note Gtroff
-Internals::.
-
-   (2) The name of this conditional operator is a misnomer since it
-tests names of output glyphs.
-
-
-File: groff.info,  Node: if-else,  Next: while,  Prev: Operators in Conditionals,  Up: Conditionals and Loops
-
-5.20.2 if-else
---------------
-
-'gtroff' has if-then-else constructs like other languages, although the
-formatting can be painful.
-
- -- Request: .if expr anything
-
-     Evaluate the expression EXPR, and executes ANYTHING (the remainder
-     of the line) if EXPR evaluates to a value greater than zero (true).
-     ANYTHING is interpreted as though it was on a line by itself
-     (except that leading spaces are swallowed).  *Note Operators in
-     Conditionals::, for more info.
-
-          .nr xxx 1
-          .nr yyy 2
-          .if ((\n[xxx] == 1) & (\n[yyy] == 2)) true
-              => true
-
- -- Request: .nop anything
-     Executes ANYTHING.  This is similar to '.if 1'.
-
- -- Request: .ie expr anything
- -- Request: .el anything
-     Use the 'ie' and 'el' requests to write an if-then-else.  The first
-     request is the 'if' part and the latter is the 'else' part.
-
-          .ie n .ls 2 \" double-spacing in nroff
-          .el   .ls 1 \" single-spacing in troff
-
- -- Escape: \{
- -- Escape: \}
-     In many cases, an if (or if-else) construct needs to execute more
-     than one request.  This can be done using the escapes '\{' (which
-     must start the first line) and '\}' (which must end the last line).
-
-          .ie t \{\
-          .    ds lq ``
-          .    ds rq ''
-          .\}
-          .el \{\
-          .    ds lq ""
-          .    ds rq ""
-          .\}
-
-   *Note Expressions::.
-
-
-File: groff.info,  Node: while,  Prev: if-else,  Up: Conditionals and Loops
-
-5.20.3 while
-------------
-
-'gtroff' provides a looping construct using the 'while' request, which
-is used much like the 'if' (and related) requests.
-
- -- Request: .while expr anything
-     Evaluate the expression EXPR, and repeatedly execute ANYTHING (the
-     remainder of the line) until EXPR evaluates to 0.
-
-          .nr a 0 1
-          .while (\na < 9) \{\
-          \n+a,
-          .\}
-          \n+a
-              => 1, 2, 3, 4, 5, 6, 7, 8, 9, 10
-
-     Some remarks.
-
-        * The body of a 'while' request is treated like the body of a
-          'de' request: 'gtroff' temporarily stores it in a macro that
-          is deleted after the loop has been exited.  It can
-          considerably slow down a macro if the body of the 'while'
-          request (within the macro) is large.  Each time the macro is
-          executed, the 'while' body is parsed and stored again as a
-          temporary macro.
-
-               .de xxx
-               .  nr num 10
-               .  while (\\n[num] > 0) \{\
-               .    \" many lines of code
-               .    nr num -1
-               .  \}
-               ..
-
-          The traditional and ofter better solution (UNIX 'troff'
-          doesn't have the 'while' request) is to use a recursive macro
-          instead that is parsed only once during its definition.
-
-               .de yyy
-               .  if (\\n[num] > 0) \{\
-               .    \" many lines of code
-               .    nr num -1
-               .    yyy
-               .  \}
-               ..
-               .
-               .de xxx
-               .  nr num 10
-               .  yyy
-               ..
-
-          Note that the number of available recursion levels is set
-          to 1000 (this is a compile-time constant value of 'gtroff').
-
-        * The closing brace of a 'while' body must end a line.
-
-               .if 1 \{\
-               .  nr a 0 1
-               .  while (\n[a] < 10) \{\
-               .    nop \n+[a]
-               .\}\}
-                   => unbalanced \{ \}
-
- -- Request: .break
-     Break out of a 'while' loop.  Be sure not to confuse this with the
-     'br' request (causing a line break).
-
- -- Request: .continue
-     Finish the current iteration of a 'while' loop, immediately
-     restarting the next iteration.
-
-   *Note Expressions::.
-
-
-File: groff.info,  Node: Writing Macros,  Next: Page Motions,  Prev: Conditionals and Loops,  Up: gtroff Reference
-
-5.21 Writing Macros
-===================
-
-A "macro" is a collection of text and embedded commands that can be
-invoked multiple times.  Use macros to define common operations.  *Note
-Strings::, for a (limited) alternative syntax to call macros.
-
-   Although the following requests can be used to create macros, simply
-using an undefined macro will cause it to be defined as empty.  *Note
-Identifiers::.
-
- -- Request: .de name [end]
- -- Request: .de1 name [end]
- -- Request: .dei name [end]
- -- Request: .dei1 name [end]
-     Define a new macro named NAME.  'gtroff' copies subsequent lines
-     (starting with the next one) into an internal buffer until it
-     encounters the line '..' (two dots).  If the optional second
-     argument to 'de' is present it is used as the macro closure request
-     instead of '..'.
-
-     There can be whitespace after the first dot in the line containing
-     the ending token (either '.' or macro 'END').  Don't insert a tab
-     character immediately after the '..', otherwise it isn't recognized
-     as the end-of-macro symbol.(1)  (*note Writing Macros-Footnote-1::)
-
-     Here a small example macro called 'P' that causes a break and
-     inserts some vertical space.  It could be used to separate
-     paragraphs.
-
-          .de P
-          .  br
-          .  sp .8v
-          ..
-
-     The following example defines a macro within another.  Remember
-     that expansion must be protected twice; once for reading the macro
-     and once for executing.
-
-          \# a dummy macro to avoid a warning
-          .de end
-          ..
-          .
-          .de foo
-          .  de bar end
-          .    nop \f[B]Hallo \\\\$1!\f[]
-          .  end
-          ..
-          .
-          .foo
-          .bar Joe
-              => Hallo Joe!
-
-     Since '\f' has no expansion, it isn't necessary to protect its
-     backslash.  Had we defined another macro within 'bar' that takes a
-     parameter, eight backslashes would be necessary before '$1'.
-
-     The 'de1' request turns off compatibility mode while executing the
-     macro.  On entry, the current compatibility mode is saved and
-     restored at exit.
-
-          .nr xxx 12345
-          .
-          .de aa
-          The value of xxx is \\n[xxx].
-          ..
-          .de1 bb
-          The value of xxx ix \\n[xxx].
-          ..
-          .
-          .cp 1
-          .
-          .aa
-              => warning: number register `[' not defined
-              => The value of xxx is 0xxx].
-          .bb
-              => The value of xxx ix 12345.
-
-     The 'dei' request defines a macro indirectly.  That is, it expands
-     strings whose names are NAME or END before performing the append.
-
-     This:
-
-          .ds xx aa
-          .ds yy bb
-          .dei xx yy
-
-     is equivalent to:
-
-          .de aa bb
-
-     The 'dei1' request is similar to 'dei' but with compatibility mode
-     switched off during execution of the defined macro.
-
-     If compatibility mode is on, 'de' (and 'dei') behave similar to
-     'de1' (and 'dei1'): A 'compatibility save' token is inserted at the
-     beginning, and a 'compatibility restore' token at the end, with
-     compatibility mode switched on during execution.  *Note Gtroff
-     Internals::, for more information on switching compatibility mode
-     on and off in a single document.
-
-     Using 'trace.tmac', you can trace calls to 'de' and 'de1'.
-
-     Note that macro identifiers are shared with identifiers for strings
-     and diversions.
-
-     *Note the description of the 'als' request: als, for possible
-     pitfalls if redefining a macro that has been aliased.
-
- -- Request: .am name [end]
- -- Request: .am1 name [end]
- -- Request: .ami name [end]
- -- Request: .ami1 name [end]
-     Works similarly to 'de' except it appends onto the macro named
-     NAME.  So, to make the previously defined 'P' macro actually do
-     indented instead of block paragraphs, add the necessary code to the
-     existing macro like this:
-
-          .am P
-          .ti +5n
-          ..
-
-     The 'am1' request turns off compatibility mode while executing the
-     appended macro piece.  To be more precise, a "compatibility save"
-     input token is inserted at the beginning of the appended code, and
-     a "compatibility restore" input token at the end.
-
-     The 'ami' request appends indirectly, meaning that 'gtroff' expands
-     strings whose names are NAME or END before performing the append.
-
-     The 'ami1' request is similar to 'ami' but compatibility mode is
-     switched off during execution of the defined macro.
-
-     Using 'trace.tmac', you can trace calls to 'am' and 'am1'.
-
-   *Note Strings::, for the 'als' and 'rn' request to create an alias
-and rename a macro, respectively.
-
-   The 'de', 'am', 'di', 'da', 'ds', and 'as' requests (together with
-its variants) only create a new object if the name of the macro,
-diversion or string diversion is currently undefined or if it is defined
-to be a request; normally they modify the value of an existing object.
-
- -- Request: .return [anything]
-     Exit a macro, immediately returning to the caller.
-
-     If called with an argument, exit twice, namely the current macro
-     and the macro one level higher.  This is used to define a wrapper
-     macro for 'return' in 'trace.tmac'.
-
-* Menu:
-
-* Copy-in Mode::
-* Parameters::
-
-
-File: groff.info,  Node: Writing Macros-Footnotes,  Up: Writing Macros
-
-   (1) While it is possible to define and call a macro '.' with
-
-     .de .
-     .  tm foo
-     ..
-     .
-     ..    \" This calls macro `.'!
-
-you can't use this as the end-of-macro macro: during a macro definition,
-'..' is never handled as a call to '.', even if you say '.de foo .'
-explicitly.
-
diff -Nuar groff-1.22.3.old/doc/groff.info-2 groff-1.22.3/doc/groff.info-2
--- groff-1.22.3.old/doc/groff.info-2	2014-11-04 10:39:07.761117246 +0200
+++ groff-1.22.3/doc/groff.info-2	1970-01-01 02:00:00.000000000 +0200
@@ -1,8155 +0,0 @@
-This is groff.info, produced by makeinfo version 5.2dev from
-groff.texinfo.
-
-This manual documents GNU 'troff' version 1.22.3.
-
-   Copyright � 1994-2014 Free Software Foundation, Inc.
-
-     Permission is granted to copy, distribute and/or modify this
-     document under the terms of the GNU Free Documentation License,
-     Version 1.3 or any later version published by the Free Software
-     Foundation; with no Invariant Sections, with the Front-Cover texts
-     being "A GNU Manual," and with the Back-Cover Texts as in (a)
-     below.  A copy of the license is included in the section entitled
-     "GNU Free Documentation License."
-
-     (a) The FSF's Back-Cover Text is: "You have the freedom to copy and
-     modify this GNU manual.  Buying copies from the FSF supports it in
-     developing GNU and promoting software freedom."
-INFO-DIR-SECTION Typesetting
-START-INFO-DIR-ENTRY
-* Groff: (groff).               The GNU troff document formatting system.
-END-INFO-DIR-ENTRY
-
-
-File: groff.info,  Node: Copy-in Mode,  Next: Parameters,  Prev: Writing Macros,  Up: Writing Macros
-
-5.21.1 Copy-in Mode
--------------------
-
-When 'gtroff' reads in the text for a macro, string, or diversion, it
-copies the text (including request lines, but excluding escapes) into an
-internal buffer.  Escapes are converted into an internal form, except
-for '\n', '\$', '\*', '\\' and '\<RET>', which are evaluated and
-inserted into the text where the escape was located.  This is known as
-"copy-in" mode or "copy" mode.
-
-   What this means is that you can specify when these escapes are to be
-evaluated (either at copy-in time or at the time of use) by insulating
-the escapes with an extra backslash.  Compare this to the '\def' and
-'\edef' commands in TeX.
-
-   The following example prints the numbers 20 and 10:
-
-     .nr x 20
-     .de y
-     .nr x 10
-     \&\nx
-     \&\\nx
-     ..
-     .y
-
-
-File: groff.info,  Node: Parameters,  Prev: Copy-in Mode,  Up: Writing Macros
-
-5.21.2 Parameters
------------------
-
-The arguments to a macro or string can be examined using a variety of
-escapes.
-
- -- Register: \n[.$]
-     The number of arguments passed to a macro or string.  This is a
-     read-only number register.
-
-     Note that the 'shift' request can change its value.
-
-   Any individual argument can be retrieved with one of the following
-escapes:
-
- -- Escape: \$n
- -- Escape: \$(nn
- -- Escape: \$[nnn]
-     Retrieve the Nth, NNth or NNNth argument.  As usual, the first form
-     only accepts a single number (larger than zero), the second a
-     two-digit number (larger or equal to 10), and the third any
-     positive integer value (larger than zero).  Macros and strings can
-     have an unlimited number of arguments.  Note that due to copy-in
-     mode, use two backslashes on these in actual use to prevent
-     interpolation until the macro is actually invoked.
-
- -- Request: .shift [n]
-     Shift the arguments 1 position, or as many positions as specified
-     by its argument.  After executing this request, argument I becomes
-     argument I-N; arguments 1 to N are no longer available.  Shifting
-     by negative amounts is currently undefined.
-
-     The register '.$' is adjusted accordingly.
-
- -- Escape: \$*
- -- Escape: \$@
-     In some cases it is convenient to use all of the arguments at once
-     (for example, to pass the arguments along to another macro).  The
-     '\$*' escape concatenates all the arguments separated by spaces.  A
-     similar escape is '\$@', which concatenates all the arguments with
-     each surrounded by double quotes, and separated by spaces.  If not
-     in compatibility mode, the input level of double quotes is
-     preserved (see *note Request and Macro Arguments::).
-
- -- Escape: \$^
-     Handle the parameters of a macro as if they were an argument to the
-     'ds' or similar requests.
-
-          .de foo
-          .  tm $1=`\\$1'
-          .  tm $2=`\\$2'
-          .  tm $*=`\\$*'
-          .  tm $@=`\\$@'
-          .  tm $^=`\\$^'
-          ..
-          .foo " This is a "test"
-              => $1=` This is a '
-              => $2=`test"'
-              => $*=` This is a  test"'
-              => $@=`" This is a " "test""'
-              => $^=`" This is a "test"'
-
-     This escape is useful mainly for macro packages like 'trace.tmac',
-     which redefines some requests and macros for debugging purposes.
-
- -- Escape: \$0
-     The name used to invoke the current macro.  The 'als' request can
-     make a macro have more than one name.
-
-     If a macro is called as a string (within another macro), the value
-     of '\$0' isn't changed.
-
-          .de foo
-          .  tm \\$0
-          ..
-          .als foo bar
-          .
-          .de aaa
-          .  foo
-          ..
-          .de bbb
-          .  bar
-          ..
-          .de ccc
-          \\*[foo]\\
-          ..
-          .de ddd
-          \\*[bar]\\
-          ..
-          .
-          .aaa
-              => foo
-          .bbb
-              => bar
-          .ccc
-              => ccc
-          .ddd
-              => ddd
-
-   *Note Request and Macro Arguments::.
-
-
-File: groff.info,  Node: Page Motions,  Next: Drawing Requests,  Prev: Writing Macros,  Up: gtroff Reference
-
-5.22 Page Motions
-=================
-
-*Note Manipulating Spacing::, for a discussion of the main request for
-vertical motion, 'sp'.
-
- -- Request: .mk [reg]
- -- Request: .rt [dist]
-     The request 'mk' can be used to mark a location on a page, for
-     movement to later.  This request takes a register name as an
-     argument in which to store the current page location.  With no
-     argument it stores the location in an internal register.  The
-     results of this can be used later by the 'rt' or the 'sp' request
-     (or the '\v' escape).
-
-     The 'rt' request returns _upwards_ to the location marked with the
-     last 'mk' request.  If used with an argument, return to a position
-     which distance from the top of the page is DIST (no previous call
-     to 'mk' is necessary in this case).  Default scaling indicator is
-     'v'.
-
-     Here a primitive solution for a two-column macro.
-
-          .nr column-length 1.5i
-          .nr column-gap 4m
-          .nr bottom-margin 1m
-          .
-          .de 2c
-          .  br
-          .  mk
-          .  ll \\n[column-length]u
-          .  wh -\\n[bottom-margin]u 2c-trap
-          .  nr right-side 0
-          ..
-          .
-          .de 2c-trap
-          .  ie \\n[right-side] \{\
-          .    nr right-side 0
-          .    po -(\\n[column-length]u + \\n[column-gap]u)
-          .    \" remove trap
-          .    wh -\\n[bottom-margin]u
-          .  \}
-          .  el \{\
-          .    \" switch to right side
-          .    nr right-side 1
-          .    po +(\\n[column-length]u + \\n[column-gap]u)
-          .    rt
-          .  \}
-          ..
-          .
-          .pl 1.5i
-          .ll 4i
-          This is a small test that shows how the
-          rt request works in combination with mk.
-
-          .2c
-          Starting here, text is typeset in two columns.
-          Note that this implementation isn't robust
-          and thus not suited for a real two-column
-          macro.
-
-     Result:
-
-          This is a small test that shows how the
-          rt request works in combination with mk.
-
-          Starting  here,    isn't    robust
-          text is typeset    and   thus  not
-          in two columns.    suited  for   a
-          Note that  this    real two-column
-          implementation     macro.
-
-   The following escapes give fine control of movements about the page.
-
- -- Escape: \v'e'
-     Move vertically, usually from the current location on the page (if
-     no absolute position operator '|' is used).  The argument E
-     specifies the distance to move; positive is downwards and negative
-     upwards.  The default scaling indicator for this escape is 'v'.
-     Beware, however, that 'gtroff' continues text processing at the
-     point where the motion ends, so you should always balance motions
-     to avoid interference with text processing.
-
-     '\v' doesn't trigger a trap.  This can be quite useful; for
-     example, consider a page bottom trap macro that prints a marker in
-     the margin to indicate continuation of a footnote or something
-     similar.
-
-   There are some special-case escapes for vertical motion.
-
- -- Escape: \r
-     Move upwards 1v.
-
- -- Escape: \u
-     Move upwards .5v.
-
- -- Escape: \d
-     Move down .5v.
-
- -- Escape: \h'e'
-     Move horizontally, usually from the current location (if no
-     absolute position operator '|' is used).  The expression E
-     indicates how far to move: positive is rightwards and negative
-     leftwards.  The default scaling indicator for this escape is 'm'.
-
-     This horizontal space is not discarded at the end of a line.  To
-     insert discardable space of a certain length use the 'ss' request.
-
-   There are a number of special-case escapes for horizontal motion.
-
- -- Escape: \<SP>
-     An unbreakable and unpaddable (i.e. not expanded during filling)
-     space.  (Note: This is a backslash followed by a space.)
-
- -- Escape: \~
-     An unbreakable space that stretches like a normal inter-word space
-     when a line is adjusted.
-
- -- Escape: \|
-     A 1/6th em space.  Ignored for TTY output devices (rounded to
-     zero).
-
-     However, if there is a glyph defined in the current font file with
-     name '\|' (note the leading backslash), the width of this glyph is
-     used instead (even for TTYs).
-
- -- Escape: \^
-     A 1/12th em space.  Ignored for TTY output devices (rounded to
-     zero).
-
-     However, if there is a glyph defined in the current font file with
-     name '\^' (note the leading backslash), the width of this glyph is
-     used instead (even for TTYs).
-
- -- Escape: \0
-     A space the size of a digit.
-
-   The following string sets the TeX logo:
-
-     .ds TeX T\h'-.1667m'\v'.224m'E\v'-.224m'\h'-.125m'X
-
- -- Escape: \w'text'
- -- Register: \n[st]
- -- Register: \n[sb]
- -- Register: \n[rst]
- -- Register: \n[rsb]
- -- Register: \n[ct]
- -- Register: \n[ssc]
- -- Register: \n[skw]
-     Return the width of the specified TEXT in basic units.  This allows
-     horizontal movement based on the width of some arbitrary text (e.g.
-     given as an argument to a macro).
-
-          The length of the string `abc' is \w'abc'u.
-              => The length of the string `abc' is 72u.
-
-     Font changes may occur in TEXT, which don't affect current
-     settings.
-
-     After use, '\w' sets several registers:
-
-     'st'
-     'sb'
-          The highest and lowest point of the baseline, respectively, in
-          TEXT.
-
-     'rst'
-     'rsb'
-          Like the 'st' and 'sb' registers, but takes account of the
-          heights and depths of glyphs.  In other words, this gives the
-          highest and lowest point of TEXT.  Values below the baseline
-          are negative.
-
-     'ct'
-          Defines the kinds of glyphs occurring in TEXT:
-
-          0
-               only short glyphs, no descenders or tall glyphs.
-
-          1
-               at least one descender.
-
-          2
-               at least one tall glyph.
-
-          3
-               at least one each of a descender and a tall glyph.
-
-     'ssc'
-          The amount of horizontal space (possibly negative) that should
-          be added to the last glyph before a subscript.
-
-     'skw'
-          How far to right of the center of the last glyph in the '\w'
-          argument, the center of an accent from a roman font should be
-          placed over that glyph.
-
- -- Escape: \kp
- -- Escape: \k(ps
- -- Escape: \k[position]
-     Store the current horizontal position in the _input_ line in number
-     register with name POSITION (one-character name P, two-character
-     name PS).  Use this, for example, to return to the beginning of a
-     string for highlighting or other decoration.
-
- -- Register: \n[hp]
-     The current horizontal position at the input line.
-
- -- Register: \n[.k]
-     A read-only number register containing the current horizontal
-     output position (relative to the current indentation).
-
- -- Escape: \o'abc'
-     Overstrike glyphs A, B, C, ...; the glyphs are centered, and the
-     resulting spacing is the largest width of the affected glyphs.
-
- -- Escape: \zg
-     Print glyph G with zero width, i.e., without spacing.  Use this to
-     overstrike glyphs left-aligned.
-
- -- Escape: \Z'anything'
-     Print ANYTHING, then restore the horizontal and vertical position.
-     The argument may not contain tabs or leaders.
-
-     The following is an example of a strike-through macro:
-
-          .de ST
-          .nr ww \w'\\$1'
-          \Z@\v'-.25m'\l'\\n[ww]u'@\\$1
-          ..
-          .
-          This is
-          .ST "a test"
-          an actual emergency!
-
-
-File: groff.info,  Node: Drawing Requests,  Next: Traps,  Prev: Page Motions,  Up: gtroff Reference
-
-5.23 Drawing Requests
-=====================
-
-'gtroff' provides a number of ways to draw lines and other figures on
-the page.  Used in combination with the page motion commands (see *note
-Page Motions::, for more info), a wide variety of figures can be drawn.
-However, for complex drawings these operations can be quite cumbersome,
-and it may be wise to use graphic preprocessors like 'gpic' or 'ggrn'.
-*Note gpic::, and *note ggrn::, for more information.
-
-   All drawing is done via escapes.
-
- -- Escape: \l'l'
- -- Escape: \l'lg'
-     Draw a line horizontally.  L is the length of the line to be drawn.
-     If it is positive, start the line at the current location and draw
-     to the right; its end point is the new current location.  Negative
-     values are handled differently: The line starts at the current
-     location and draws to the left, but the current location doesn't
-     move.
-
-     L can also be specified absolutely (i.e. with a leading '|'), which
-     draws back to the beginning of the input line.  Default scaling
-     indicator is 'm'.
-
-     The optional second parameter G is a glyph to draw the line with.
-     If this second argument is not specified, 'gtroff' uses the
-     underscore glyph, '\[ru]'.
-
-     To separate the two arguments (to prevent 'gtroff' from
-     interpreting a drawing glyph as a scaling indicator if the glyph is
-     represented by a single character) use '\&'.
-
-     Here a small useful example:
-
-          .de box
-          \[br]\\$*\[br]\l'|0\[rn]'\l'|0\[ul]'
-          ..
-
-     Note that this works by outputting a box rule (a vertical line),
-     then the text given as an argument and then another box rule.
-     Finally, the line drawing escapes both draw from the current
-     location to the beginning of the _input_ line - this works because
-     the line length is negative, not moving the current point.
-
- -- Escape: \L'l'
- -- Escape: \L'lg'
-     Draw vertical lines.  Its parameters are similar to the '\l'
-     escape, except that the default scaling indicator is 'v'.  The
-     movement is downwards for positive values, and upwards for negative
-     values.  The default glyph is the box rule glyph, '\[br]'.  As with
-     the vertical motion escapes, text processing blindly continues
-     where the line ends.
-
-          This is a \L'3v'test.
-
-     Here the result, produced with 'grotty'.
-
-          This is a
-                    |
-                    |
-                    |test.
-
- -- Escape: \D'command arg ...'
-     The '\D' escape provides a variety of drawing functions.  Note that
-     on character devices, only vertical and horizontal lines are
-     supported within 'grotty'; other devices may only support a subset
-     of the available drawing functions.
-
-     The default scaling indicator for all subcommands of '\D' is 'm'
-     for horizontal distances and 'v' for vertical ones.  Exceptions are
-     '\D'f ...'' and '\D't ...'', which use 'u' as the default, and
-     '\D'FX ...'', which arguments are treated similar to the 'defcolor'
-     request.
-
-     '\D'l DX DY''
-          Draw a line from the current location to the relative point
-          specified by (DX,DY), where positive values mean down and
-          right, respectively.  The end point of the line is the new
-          current location.
-
-          The following example is a macro for creating a box around a
-          text string; for simplicity, the box margin is taken as a
-          fixed value, 0.2m.
-
-               .de BOX
-               .  nr @wd \w'\\$1'
-               \h'.2m'\
-               \h'-.2m'\v'(.2m - \\n[rsb]u)'\
-               \D'l 0 -(\\n[rst]u - \\n[rsb]u + .4m)'\
-               \D'l (\\n[@wd]u + .4m) 0'\
-               \D'l 0 (\\n[rst]u - \\n[rsb]u + .4m)'\
-               \D'l -(\\n[@wd]u + .4m) 0'\
-               \h'.2m'\v'-(.2m - \\n[rsb]u)'\
-               \\$1\
-               \h'.2m'
-               ..
-
-          First, the width of the string is stored in register '@wd'.
-          Then, four lines are drawn to form a box, properly offset by
-          the box margin.  The registers 'rst' and 'rsb' are set by the
-          '\w' escape, containing the largest height and depth of the
-          whole string.
-
-     '\D'c D''
-          Draw a circle with a diameter of D with the leftmost point at
-          the current position.  After drawing, the current location is
-          positioned at the rightmost point of the circle.
-
-     '\D'C D''
-          Draw a solid circle with the same parameters and behaviour as
-          an outlined circle.  No outline is drawn.
-
-     '\D'e X Y''
-          Draw an ellipse with a horizontal diameter of X and a vertical
-          diameter of Y with the leftmost point at the current position.
-          After drawing, the current location is positioned at the
-          rightmost point of the ellipse.
-
-     '\D'E X Y''
-          Draw a solid ellipse with the same parameters and behaviour as
-          an outlined ellipse.  No outline is drawn.
-
-     '\D'a DX1 DY1 DX2 DY2''
-          Draw an arc clockwise from the current location through the
-          two specified relative locations (DX1,DY1) and (DX2,DY2).  The
-          coordinates of the first point are relative to the current
-          position, and the coordinates of the second point are relative
-          to the first point.  After drawing, the current position is
-          moved to the final point of the arc.
-
-     '\D'~ DX1 DY1 DX2 DY2 ...''
-          Draw a spline from the current location to the relative point
-          (DX1,DY1) and then to (DX2,DY2), and so on.  The current
-          position is moved to the terminal point of the drawn curve.
-
-     '\D'f N''
-          Set the shade of gray to be used for filling solid objects
-          to N; N must be an integer between 0 and 1000, where 0
-          corresponds solid white and 1000 to solid black, and values in
-          between correspond to intermediate shades of gray.  This
-          applies only to solid circles, solid ellipses, and solid
-          polygons.  By default, a level of 1000 is used.
-
-          Despite of being silly, the current point is moved
-          horizontally to the right by N.
-
-          Don't use this command!  It has the serious drawback that it
-          is always rounded to the next integer multiple of the
-          horizontal resolution (the value of the 'hor' keyword in the
-          'DESC' file).  Use '\M' (*note Colors::) or '\D'Fg ...''
-          instead.
-
-     '\D'p DX1 DY1 DX2 DY2 ...''
-          Draw a polygon from the current location to the relative
-          position (DX1,DY1) and then to (DX2,DY2) and so on.  When the
-          specified data points are exhausted, a line is drawn back to
-          the starting point.  The current position is changed by adding
-          the sum of all arguments with odd index to the actual
-          horizontal position and the even ones to the vertical
-          position.
-
-     '\D'P DX1 DY1 DX2 DY2 ...''
-          Draw a solid polygon with the same parameters and behaviour as
-          an outlined polygon.  No outline is drawn.
-
-          Here a better variant of the box macro to fill the box with
-          some color.  Note that the box must be drawn before the text
-          since colors in 'gtroff' are not transparent; the filled
-          polygon would hide the text completely.
-
-               .de BOX
-               .  nr @wd \w'\\$1'
-               \h'.2m'\
-               \h'-.2m'\v'(.2m - \\n[rsb]u)'\
-               \M[lightcyan]\
-               \D'P 0 -(\\n[rst]u - \\n[rsb]u + .4m) \
-                    (\\n[@wd]u + .4m) 0 \
-                    0 (\\n[rst]u - \\n[rsb]u + .4m) \
-                    -(\\n[@wd]u + .4m) 0'\
-               \h'.2m'\v'-(.2m - \\n[rsb]u)'\
-               \M[]\
-               \\$1\
-               \h'.2m'
-               ..
-
-          If you want a filled polygon that has exactly the same size as
-          an unfilled one, you must draw both an unfilled and a filled
-          polygon.  A filled polygon is always smaller than an unfilled
-          one because the latter uses straight lines with a given line
-          thickness to connect the polygon's corners, while the former
-          simply fills the area defined by the coordinates.
-
-               \h'1i'\v'1i'\
-               \# increase line thickness
-               \Z'\D't 5p''\
-               \# draw unfilled polygon
-               \Z'\D'p 3 3 -6 0''\
-               \# draw filled polygon
-               \Z'\D'P 3 3 -6 0''
-
-     '\D't N''
-          Set the current line thickness to N machine units.  A value of
-          zero selects the smallest available line thickness.  A
-          negative value makes the line thickness proportional to the
-          current point size (this is the default behaviour of AT&T
-          'troff').
-
-          Despite of being silly, the current point is moved
-          horizontally to the right by N.
-
-     '\D'FSCHEME COLOR_COMPONENTS''
-          Change current fill color.  SCHEME is a single letter denoting
-          the color scheme: 'r' (rgb), 'c' (cmy), 'k' (cmyk), 'g'
-          (gray), or 'd' (default color).  The color components use
-          exactly the same syntax as in the 'defcolor' request (*note
-          Colors::); the command '\D'Fd'' doesn't take an argument.
-
-          _No_ position changing!
-
-          Examples:
-
-               \D'Fg .3'      \" same gray as \D'f 700'
-               \D'Fr #0000ff' \" blue
-
-   *Note Graphics Commands::.
-
- -- Escape: \b'string'
-     "Pile" a sequence of glyphs vertically, and center it vertically on
-     the current line.  Use it to build large brackets and braces.
-
-     Here an example how to create a large opening brace:
-
-          \b'\[lt]\[bv]\[lk]\[bv]\[lb]'
-
-     The first glyph is on the top, the last glyph in STRING is at the
-     bottom.  Note that 'gtroff' separates the glyphs vertically by 1m,
-     and the whole object is centered 0.5m above the current baseline;
-     the largest glyph width is used as the width for the whole object.
-     This rather unflexible positioning algorithm doesn't work with
-     '-Tdvi' since the bracket pieces vary in height for this device.
-     Instead, use the 'eqn' preprocessor.
-
-     *Note Manipulating Spacing::, how to adjust the vertical spacing
-     with the '\x' escape.
-
-
-File: groff.info,  Node: Traps,  Next: Diversions,  Prev: Drawing Requests,  Up: gtroff Reference
-
-5.24 Traps
-==========
-
-"Traps" are locations that, when reached, call a specified macro.  These
-traps can occur at a given location on the page, at a given location in
-the current diversion, at a blank line, after a certain number of input
-lines, or at the end of input.
-
-   Setting a trap is also called "planting".  It is also said that a
-trap is "sprung" if the associated macro is executed.
-
-* Menu:
-
-* Page Location Traps::
-* Diversion Traps::
-* Input Line Traps::
-* Blank Line Traps::
-* Leading Spaces Traps::
-* End-of-input Traps::
-
-
-File: groff.info,  Node: Page Location Traps,  Next: Diversion Traps,  Prev: Traps,  Up: Traps
-
-5.24.1 Page Location Traps
---------------------------
-
-"Page location traps" perform an action when 'gtroff' reaches or passes
-a certain vertical location on the page.  Page location traps have a
-variety of purposes, including:
-
-   * setting headers and footers
-
-   * setting body text in multiple columns
-
-   * setting footnotes
-
- -- Request: .vpt flag
- -- Register: \n[.vpt]
-     Enable vertical position traps if FLAG is non-zero, or disables
-     them otherwise.  Vertical position traps are traps set by the 'wh'
-     or 'dt' requests.  Traps set by the 'it' request are not vertical
-     position traps.  The parameter that controls whether vertical
-     position traps are enabled is global.  Initially vertical position
-     traps are enabled.  The current setting of this is available in the
-     '.vpt' read-only number register.
-
-     Note that a page can't be ejected if 'vpt' is set to zero.
-
- -- Request: .wh dist [macro]
-     Set a page location trap.  Non-negative values for DIST set the
-     trap relative to the top of the page; negative values set the trap
-     relative to the bottom of the page.  Default scaling indicator is
-     'v'; values of DIST are always rounded to be multiples of the
-     vertical resolution (as given in register '.V').
-
-     MACRO is the name of the macro to execute when the trap is sprung.
-     If MACRO is missing, remove the first trap (if any) at DIST.
-
-     The following is a simple example of how many macro packages set
-     headers and footers.
-
-          .de hd                \" Page header
-          '  sp .5i
-          .  tl 'Title''date'
-          '  sp .3i
-          ..
-          .
-          .de fo                \" Page footer
-          '  sp 1v
-          .  tl ''%''
-          '  bp
-          ..
-          .
-          .wh 0   hd            \" trap at top of the page
-          .wh -1i fo            \" trap one inch from bottom
-
-     A trap at or below the bottom of the page is ignored; it can be
-     made active by either moving it up or increasing the page length so
-     that the trap is on the page.
-
-     Negative trap values always use the _current_ page length; they are
-     not converted to an absolute vertical position:
-
-          .pl 5i
-          .wh -1i xx
-          .ptr
-              => xx      -240
-          .pl 100i
-          .ptr
-              => xx      -240
-
-     It is possible to have more than one trap at the same location; to
-     do so, the traps must be defined at different locations, then moved
-     together with the 'ch' request; otherwise the second trap would
-     replace the first one.  Earlier defined traps hide later defined
-     traps if moved to the same position (the many empty lines caused by
-     the 'bp' request are omitted in the following example):
-
-          .de a
-          .  nop a
-          ..
-          .de b
-          .  nop b
-          ..
-          .de c
-          .  nop c
-          ..
-          .
-          .wh 1i a
-          .wh 2i b
-          .wh 3i c
-          .bp
-              => a b c
-          .ch b 1i
-          .ch c 1i
-          .bp
-              => a
-          .ch a 0.5i
-          .bp
-              => a b
-
- -- Register: \n[.t]
-     A read-only number register holding the distance to the next trap.
-
-     If there are no traps between the current position and the bottom
-     of the page, it contains the distance to the page bottom.  In a
-     diversion, the distance to the page bottom is infinite (the
-     returned value is the biggest integer that can be represented in
-     'groff') if there are no diversion traps.
-
- -- Request: .ch macro [dist]
-     Change the location of a trap.  The first argument is the name of
-     the macro to be invoked at the trap, and the second argument is the
-     new location for the trap (note that the parameters are specified
-     in opposite order as in the 'wh' request).  This is useful for
-     building up footnotes in a diversion to allow more space at the
-     bottom of the page for them.
-
-     Default scaling indicator for DIST is 'v'.  If DIST is missing, the
-     trap is removed.
-
- -- Register: \n[.ne]
-     The read-only number register '.ne' contains the amount of space
-     that was needed in the last 'ne' request that caused a trap to be
-     sprung.  Useful in conjunction with the '.trunc' register.  *Note
-     Page Control::, for more information.
-
-     Since the '.ne' register is only set by traps it doesn't make much
-     sense to use it outside of trap macros.
-
- -- Register: \n[.trunc]
-     A read-only register containing the amount of vertical space
-     truncated by the most recently sprung vertical position trap, or,
-     if the trap was sprung by an 'ne' request, minus the amount of
-     vertical motion produced by the 'ne' request.  In other words, at
-     the point a trap is sprung, it represents the difference of what
-     the vertical position would have been but for the trap, and what
-     the vertical position actually is.
-
-     Since the '.trunc' register is only set by traps it doesn't make
-     much sense to use it outside of trap macros.
-
- -- Register: \n[.pe]
-     A read-only register that is set to 1 while a page is ejected with
-     the 'bp' request (or by the end of input).
-
-     Outside of traps this register is always zero.  In the following
-     example, only the second call to 'x' is caused by 'bp'.
-
-          .de x
-          \&.pe=\\n[.pe]
-          .br
-          ..
-          .wh 1v x
-          .wh 4v x
-          A line.
-          .br
-          Another line.
-          .br
-              => A line.
-                 .pe=0
-                 Another line.
-
-                 .pe=1
-
-   An important fact to consider while designing macros is that
-diversions and traps do not interact normally.  For example, if a trap
-invokes a header macro (while outputting a diversion) that tries to
-change the font on the current page, the effect is not visible before
-the diversion has completely been printed (except for input protected
-with '\!' or '\?') since the data in the diversion is already formatted.
-In most cases, this is not the expected behaviour.
-
-
-File: groff.info,  Node: Diversion Traps,  Next: Input Line Traps,  Prev: Page Location Traps,  Up: Traps
-
-5.24.2 Diversion Traps
-----------------------
-
- -- Request: .dt [dist macro]
-     Set a trap _within_ a diversion.  DIST is the location of the trap
-     (identical to the 'wh' request; default scaling indicator is 'v')
-     and MACRO is the name of the macro to be invoked.  If called
-     without arguments, the diversion trap is removed.
-
-     Note that there exists only a single diversion trap.
-
-     The number register '.t' still works within diversions.  *Note
-     Diversions::, for more information.
-
-
-File: groff.info,  Node: Input Line Traps,  Next: Blank Line Traps,  Prev: Diversion Traps,  Up: Traps
-
-5.24.3 Input Line Traps
------------------------
-
- -- Request: .it n macro
- -- Request: .itc n macro
-     Set an input line trap.  N is the number of lines of input that may
-     be read before springing the trap, MACRO is the macro to be
-     invoked.  Request lines are not counted as input lines.
-
-     For example, one possible use is to have a macro that prints the
-     next N lines in a bold font.
-
-          .de B
-          .  it \\$1 B-end
-          .  ft B
-          ..
-          .
-          .de B-end
-          .  ft R
-          ..
-
-     The 'itc' request is identical except that an interrupted text line
-     (ending with '\c') is not counted as a separate line.
-
-     Both requests are associated with the current environment (*note
-     Environments::); switching to another environment disables the
-     current input trap, and going back reactivates it, restoring the
-     number of already processed lines.
-
-
-File: groff.info,  Node: Blank Line Traps,  Next: Leading Spaces Traps,  Prev: Input Line Traps,  Up: Traps
-
-5.24.4 Blank Line Traps
------------------------
-
- -- Request: .blm macro
-     Set a blank line trap.  'gtroff' executes MACRO when it encounters
-     a blank line in the input file.
-
-
-File: groff.info,  Node: Leading Spaces Traps,  Next: End-of-input Traps,  Prev: Blank Line Traps,  Up: Traps
-
-5.24.5 Leading Spaces Traps
----------------------------
-
- -- Request: .lsm macro
- -- Register: \n[lsn]
- -- Register: \n[lss]
-     Set a leading spaces trap.  'gtroff' executes MACRO when it
-     encounters leading spaces in an input line; the implicit line break
-     that normally happens in this case is suppressed.  A line
-     consisting of spaces only, however, is treated as an empty line,
-     possibly subject to an empty line macro set with the 'blm' request.
-
-     Leading spaces are removed from the input line before calling the
-     leading spaces macro.  The number of removed spaces is stored in
-     register 'lsn'; the horizontal space that would be emitted if there
-     was no leading space macro is stored in register 'lss'.  Note that
-     'lsn' and 'lss' are available even if no leading space macro has
-     been set.
-
-     The first thing a leading space macro sees is a token.  However,
-     some escapes like '\f' or '\m' are handled on the fly (see *note
-     Gtroff Internals::, for a complete list) without creating a token
-     at all.  Consider that a line starts with two spaces followed by
-     '\fIfoo'.  While skipping the spaces '\fI' is handled too so that
-     groff's current font is properly set to 'I', but the leading space
-     macro only sees 'foo', without the preceding '\fI'.  If the macro
-     should see the font escape you have to 'protect' it with something
-     that creates a token, for example with '\&\fIfoo'.
-
-
-File: groff.info,  Node: End-of-input Traps,  Prev: Leading Spaces Traps,  Up: Traps
-
-5.24.6 End-of-input Traps
--------------------------
-
- -- Request: .em macro
-     Set a trap at the end of input.  MACRO is executed after the last
-     line of the input file has been processed.
-
-     For example, if the document had to have a section at the bottom of
-     the last page for someone to approve it, the 'em' request could be
-     used.
-
-          .de approval
-          \c
-          .  ne 3v
-          .  sp (\\n[.t]u - 3v)
-          .  in +4i
-          .  lc _
-          .  br
-          Approved:\t\a
-          .  sp
-          Date:\t\t\a
-          ..
-          .
-          .em approval
-
-     The '\c' in the above example needs explanation.  For historical
-     reasons (and for compatibility with AT&T 'troff'), the end macro
-     exits as soon as it causes a page break and no remaining data is in
-     the partially collected line.
-
-     Let us assume that there is no '\c' in the above 'approval' macro,
-     and that the page is full and has been ended with, say, a 'br'
-     request.  The 'ne' request now causes the start of a new page,
-     which in turn makes 'troff' exit immediately for the reasons just
-     described.  In most situations this is not intended.
-
-     To always force processing the whole end macro independently of
-     this behaviour it is thus advisable to insert something that starts
-     an empty partially filled line ('\c') whenever there is a chance
-     that a page break can happen.  In the above example, the call of
-     the 'ne' request assures that the remaining code stays on the same
-     page, so we have to insert '\c' only once.
-
-     The next example shows how to append three lines, then starting a
-     new page unconditionally.  Since '.ne 1' doesn't give the desired
-     effect - there is always one line available or we are already at
-     the beginning of the next page - we temporarily increase the page
-     length by one line so that we can use '.ne 2'.
-
-          .de EM
-          .pl +1v
-          \c
-          .ne 2
-          line one
-          .br
-          \c
-          .ne 2
-          line two
-          .br
-          \c
-          .ne 2
-          line three
-          .br
-          .pl -1v
-          \c
-          'bp
-          ..
-          .em EM
-
-     Note that this specific feature affects only the first potential
-     page break caused by the end macro; further page breaks emitted by
-     the end macro are handled normally.
-
-     Another possible use of the 'em' request is to make 'gtroff' emit a
-     single large page instead of multiple pages.  For example, one may
-     want to produce a long plain-text file for reading on-screen.  The
-     idea is to set the page length at the beginning of the document to
-     a very large value to hold all the text, and automatically adjust
-     it to the exact height of the document after the text has been
-     output.
-
-          .de adjust-page-length
-          .  br
-          .  pl \\n[nl]u   \" \n[nl] holds the current page length
-          ..
-          .
-          .de single-page-mode
-          .  pl 99999
-          .  em adjust-page-length
-          ..
-          .
-          .\" activate the above code
-          .single-page-mode
-
-     Since only one end-of-input trap does exist and other macro
-     packages may already use it, care must be taken not to break the
-     mechanism.  A simple solution would be to append the above macro to
-     the macro package's end-of-input macro using the '.am' request.
-
-
-File: groff.info,  Node: Diversions,  Next: Environments,  Prev: Traps,  Up: gtroff Reference
-
-5.25 Diversions
-===============
-
-In 'gtroff' it is possible to "divert" text into a named storage area.
-Due to the similarity to defining macros it is sometimes said to be
-stored in a macro.  This is used for saving text for output at a later
-time, which is useful for keeping blocks of text on the same page,
-footnotes, tables of contents, and indices.
-
-   For orthogonality it is said that 'gtroff' is in the "top-level
-diversion" if no diversion is active (i.e., the data is diverted to the
-output device).
-
-   Although the following requests can be used to create diversions,
-simply using an undefined diversion will cause it to be defined as
-empty.  *Note Identifiers::.
-
- -- Request: .di macro
- -- Request: .da macro
-     Begin a diversion.  Like the 'de' request, it takes an argument of
-     a macro name to divert subsequent text into.  The 'da' macro
-     appends to an existing diversion.
-
-     'di' or 'da' without an argument ends the diversion.
-
-     The current partially-filled line is included into the diversion.
-     See the 'box' request below for an example.  Note that switching to
-     another (empty) environment (with the 'ev' request) avoids the
-     inclusion of the current partially-filled line.
-
- -- Request: .box macro
- -- Request: .boxa macro
-     Begin (or append to) a diversion like the 'di' and 'da' requests.
-     The difference is that 'box' and 'boxa' do not include a
-     partially-filled line in the diversion.
-
-     Compare this:
-
-          Before the box.
-          .box xxx
-          In the box.
-          .br
-          .box
-          After the box.
-          .br
-              => Before the box.  After the box.
-          .xxx
-              => In the box.
-
-     with this:
-
-          Before the diversion.
-          .di yyy
-          In the diversion.
-          .br
-          .di
-          After the diversion.
-          .br
-              => After the diversion.
-          .yyy
-              => Before the diversion.  In the diversion.
-
-     'box' or 'boxa' without an argument ends the diversion.
-
- -- Register: \n[.z]
- -- Register: \n[.d]
-     Diversions may be nested.  The read-only number register '.z'
-     contains the name of the current diversion (this is a string-valued
-     register).  The read-only number register '.d' contains the current
-     vertical place in the diversion.  If not in a diversion it is the
-     same as register 'nl'.
-
- -- Register: \n[.h]
-     The "high-water mark" on the current page.  It corresponds to the
-     text baseline of the lowest line on the page.  This is a read-only
-     register.
-
-          .tm .h==\n[.h], nl==\n[nl]
-              => .h==0, nl==-1
-          This is a test.
-          .br
-          .sp 2
-          .tm .h==\n[.h], nl==\n[nl]
-              => .h==40, nl==120
-
-     As can be seen in the previous example, empty lines are not
-     considered in the return value of the '.h' register.
-
- -- Register: \n[dn]
- -- Register: \n[dl]
-     After completing a diversion, the read-write number registers 'dn'
-     and 'dl' contain the vertical and horizontal size of the diversion.
-     Note that only the just processed lines are counted: For the
-     computation of 'dn' and 'dl', the requests 'da' and 'boxa' are
-     handled as if 'di' and 'box' had been used - lines that have been
-     already stored in a macro are not taken into account.
-
-          .\" Center text both horizontally & vertically
-          .
-          .\" Enclose macro definitions in .eo and .ec
-          .\" to avoid the doubling of the backslash
-          .eo
-          .\" macro .(c starts centering mode
-          .de (c
-          .  br
-          .  ev (c
-          .  evc 0
-          .  in 0
-          .  nf
-          .  di @c
-          ..
-          .\" macro .)c terminates centering mode
-          .de )c
-          .  br
-          .  ev
-          .  di
-          .  nr @s (((\n[.t]u - \n[dn]u) / 2u) - 1v)
-          .  sp \n[@s]u
-          .  ce 1000
-          .  @c
-          .  ce 0
-          .  sp \n[@s]u
-          .  br
-          .  fi
-          .  rr @s
-          .  rm @s
-          .  rm @c
-          ..
-          .\" End of macro definitions, restore escape mechanism
-          .ec
-
- -- Escape: \!
- -- Escape: \?anything\?
-     Prevent requests, macros, and escapes from being interpreted when
-     read into a diversion.  Both escapes take the given text and
-     "transparently" embed it into the diversion.  This is useful for
-     macros that shouldn't be invoked until the diverted text is
-     actually output.
-
-     The '\!' escape transparently embeds text up to and including the
-     end of the line.  The '\?' escape transparently embeds text until
-     the next occurrence of the '\?' escape.  Example:
-
-          \?ANYTHING\?
-
-     ANYTHING may not contain newlines; use '\!' to embed newlines in a
-     diversion.  The escape sequence '\?' is also recognized in copy
-     mode and turned into a single internal code; it is this code that
-     terminates ANYTHING.  Thus the following example prints 4.
-
-          .nr x 1
-          .nf
-          .di d
-          \?\\?\\\\?\\\\\\\\nx\\\\?\\?\?
-          .di
-          .nr x 2
-          .di e
-          .d
-          .di
-          .nr x 3
-          .di f
-          .e
-          .di
-          .nr x 4
-          .f
-
-     Both escapes read the data in copy mode.
-
-     If '\!' is used in the top-level diversion, its argument is
-     directly embedded into the 'gtroff' intermediate output.  This can
-     be used for example to control a postprocessor that processes the
-     data before it is sent to the device driver.
-
-     The '\?' escape used in the top-level diversion produces no output
-     at all; its argument is simply ignored.
-
- -- Request: .output string
-     Emit STRING directly to the 'gtroff' intermediate output (subject
-     to copy mode interpretation); this is similar to '\!' used at the
-     top level.  An initial double quote in STRING is stripped off to
-     allow initial blanks.
-
-     This request can't be used before the first page has started - if
-     you get an error, simply insert '.br' before the 'output' request.
-
-     Without argument, 'output' is ignored.
-
-     Use with caution!  It is normally only needed for mark-up used by a
-     postprocessor that does something with the output before sending it
-     to the output device, filtering out STRING again.
-
- -- Request: .asciify div
-     "Unformat" the diversion specified by DIV in such a way that ASCII
-     characters, characters translated with the 'trin' request, space
-     characters, and some escape sequences that were formatted and
-     diverted are treated like ordinary input characters when the
-     diversion is reread.  It can be also used for gross hacks; for
-     example, the following sets register 'n' to 1.
-
-          .tr @.
-          .di x
-          @nr n 1
-          .br
-          .di
-          .tr @@
-          .asciify x
-          .x
-
-     Note that 'asciify' cannot return all items in a diversion back to
-     their source equivalent, nodes such as '\N[...]' will still remain
-     as nodes, so the result cannot be guaranteed to be a pure string.
-
-     *Note Copy-in Mode::.
-
- -- Request: .unformat div
-     Like 'asciify', unformat the specified diversion.  However,
-     'unformat' only unformats spaces and tabs between words.
-     Unformatted tabs are treated as input tokens, and spaces are
-     stretchable again.
-
-     The vertical size of lines is not preserved; glyph information
-     (font, font size, space width, etc.) is retained.
-
-
-File: groff.info,  Node: Environments,  Next: Suppressing output,  Prev: Diversions,  Up: gtroff Reference
-
-5.26 Environments
-=================
-
-It happens frequently that some text should be printed in a certain
-format regardless of what may be in effect at the time, for example, in
-a trap invoked macro to print headers and footers.  To solve this
-'gtroff' processes text in "environments".  An environment contains most
-of the parameters that control text processing.  It is possible to
-switch amongst these environments; by default 'gtroff' processes text in
-environment 0.  The following is the information kept in an environment.
-
-   * font parameters (size, family, style, glyph height and slant, space
-     and sentence space size)
-
-   * page parameters (line length, title length, vertical spacing, line
-     spacing, indentation, line numbering, centering, right-justifying,
-     underlining, hyphenation data)
-
-   * fill and adjust mode
-
-   * tab stops, tab and leader characters, escape character, no-break
-     and hyphen indicators, margin character data
-
-   * partially collected lines
-
-   * input traps
-
-   * drawing and fill colours
-
-   These environments may be given arbitrary names (see *note
-Identifiers::, for more info).  Old versions of 'troff' only had
-environments named '0', '1', and '2'.
-
- -- Request: .ev [env]
- -- Register: \n[.ev]
-     Switch to another environment.  The argument ENV is the name of the
-     environment to switch to.  With no argument, 'gtroff' switches back
-     to the previous environment.  There is no limit on the number of
-     named environments; they are created the first time that they are
-     referenced.  The '.ev' read-only register contains the name or
-     number of the current environment.  This is a string-valued
-     register.
-
-     Note that a call to 'ev' (with argument) pushes the previously
-     active environment onto a stack.  If, say, environments 'foo',
-     'bar', and 'zap' are called (in that order), the first 'ev' request
-     without parameter switches back to environment 'bar' (which is
-     popped off the stack), and a second call switches back to
-     environment 'foo'.
-
-     Here is an example:
-
-          .ev footnote-env
-          .fam N
-          .ps 6
-          .vs 8
-          .ll -.5i
-          .ev
-
-          ...
-
-          .ev footnote-env
-          \(dg Note the large, friendly letters.
-          .ev
-
- -- Request: .evc env
-     Copy the environment ENV into the current environment.
-
-     The following environment data is not copied:
-
-        * Partially filled lines.
-
-        * The status whether the previous line was interrupted.
-
-        * The number of lines still to center, or to right-justify, or
-          to underline (with or without underlined spaces); they are set
-          to zero.
-
-        * The status whether a temporary indentation is active.
-
-        * Input traps and its associated data.
-
-        * Line numbering mode is disabled; it can be reactivated with
-          '.nm +0'.
-
-        * The number of consecutive hyphenated lines (set to zero).
-
- -- Register: \n[.w]
- -- Register: \n[.cht]
- -- Register: \n[.cdp]
- -- Register: \n[.csk]
-     The '\n[.w]' register contains the width of the last glyph added to
-     the current environment.
-
-     The '\n[.cht]' register contains the height of the last glyph added
-     to the current environment.
-
-     The '\n[.cdp]' register contains the depth of the last glyph added
-     to the current environment.  It is positive for glyphs extending
-     below the baseline.
-
-     The '\n[.csk]' register contains the "skew" (how far to the right
-     of the glyph's center that 'gtroff' should place an accent) of the
-     last glyph added to the current environment.
-
- -- Register: \n[.n]
-     The '\n[.n]' register contains the length of the previous output
-     line in the current environment.
-
-
-File: groff.info,  Node: Suppressing output,  Next: Colors,  Prev: Environments,  Up: gtroff Reference
-
-5.27 Suppressing output
-=======================
-
- -- Escape: \Onum
-     Disable or enable output depending on the value of NUM:
-
-     '\O0'
-          Disable any glyphs from being emitted to the device driver,
-          provided that the escape occurs at the outer level (see
-          '\O[3]' and '\O[4]').  Motion is not suppressed so effectively
-          '\O[0]' means _pen up_.
-
-     '\O1'
-          Enable output of glyphs, provided that the escape occurs at
-          the outer level.
-
-     '\O0' and '\O1' also reset the four registers 'opminx', 'opminy',
-     'opmaxx', and 'opmaxy' to -1.  *Note Register Index::.  These four
-     registers mark the top left and bottom right hand corners of a box
-     that encompasses all written glyphs.
-
-     For example the input text:
-
-          Hello \O[0]world \O[1]this is a test.
-
-     produces the following output:
-
-          Hello       this is a test.
-
-     '\O2'
-          Provided that the escape occurs at the outer level, enable
-          output of glyphs and also write out to 'stderr' the page
-          number and four registers encompassing the glyphs previously
-          written since the last call to '\O'.
-
-     '\O3'
-          Begin a nesting level.  At start-up, 'gtroff' is at outer
-          level.  The current level is contained within the read-only
-          register '.O'.  *Note Built-in Registers::.
-
-     '\O4'
-          End a nesting level.  The current level is contained within
-          the read-only register '.O'.  *Note Built-in Registers::.
-
-     '\O[5PFILENAME]'
-          This escape is 'grohtml' specific.  Provided that this escape
-          occurs at the outer nesting level write the 'filename' to
-          'stderr'.  The position of the image, P, must be specified and
-          must be one of 'l', 'r', 'c', or 'i' (left, right, centered,
-          inline).  FILENAME is associated with the production of the
-          next inline image.
-
-
-File: groff.info,  Node: Colors,  Next: I/O,  Prev: Suppressing output,  Up: gtroff Reference
-
-5.28 Colors
-===========
-
- -- Request: .color [n]
- -- Register: \n[.color]
-     If N is missing or non-zero, activate colors (this is the default);
-     otherwise, turn it off.
-
-     The read-only number register '.color' is 1 if colors are active,
-     0 otherwise.
-
-     Internally, 'color' sets a global flag; it does not produce a
-     token.  Similar to the 'cp' request, you should use it at the
-     beginning of your document to control color output.
-
-     Colors can be also turned off with the '-c' command line option.
-
- -- Request: .defcolor ident scheme color_components
-     Define color with name IDENT.  SCHEME can be one of the following
-     values: 'rgb' (three components), 'cmy' (three components), 'cmyk'
-     (four components), and 'gray' or 'grey' (one component).
-
-     Color components can be given either as a hexadecimal string or as
-     positive decimal integers in the range 0-65535.  A hexadecimal
-     string contains all color components concatenated.  It must start
-     with either '#' or '##'; the former specifies hex values in the
-     range 0-255 (which are internally multiplied by 257), the latter in
-     the range 0-65535.  Examples: '#FFC0CB' (pink), '##ffff0000ffff'
-     (magenta).  The default color name value is device-specific
-     (usually black).  It is possible that the default color for '\m'
-     and '\M' is not identical.
-
-     A new scaling indicator 'f' has been introduced, which multiplies
-     its value by 65536; this makes it convenient to specify color
-     components as fractions in the range 0 to 1 (1f equals 65536u).
-     Example:
-
-          .defcolor darkgreen rgb 0.1f 0.5f 0.2f
-
-     Note that 'f' is the default scaling indicator for the 'defcolor'
-     request, thus the above statement is equivalent to
-
-          .defcolor darkgreen rgb 0.1 0.5 0.2
-
- -- Request: .gcolor [color]
- -- Escape: \mc
- -- Escape: \m(co
- -- Escape: \m[color]
- -- Register: \n[.m]
-     Set (glyph) drawing color.  The following examples show how to turn
-     the next four words red.
-
-          .gcolor red
-          these are in red
-          .gcolor
-          and these words are in black.
-
-          \m[red]these are in red\m[] and these words are in black.
-
-     The escape '\m[]' returns to the previous color, as does a call to
-     'gcolor' without an argument.
-
-     The name of the current drawing color is available in the
-     read-only, string-valued number register '.m'.
-
-     The drawing color is associated with the current environment (*note
-     Environments::).
-
-     Note that '\m' doesn't produce an input token in 'gtroff'.  As a
-     consequence, it can be used in requests like 'mc' (which expects a
-     single character as an argument) to change the color on the fly:
-
-          .mc \m[red]x\m[]
-
- -- Request: .fcolor [color]
- -- Escape: \Mc
- -- Escape: \M(co
- -- Escape: \M[color]
- -- Register: \n[.M]
-     Set fill (background) color for filled objects drawn with the
-     '\D'...'' commands.
-
-     A red ellipse can be created with the following code:
-
-          \M[red]\h'0.5i'\D'E 2i 1i'\M[]
-
-     The escape '\M[]' returns to the previous fill color, as does a
-     call to 'fcolor' without an argument.
-
-     The name of the current fill (background) color is available in the
-     read-only, string-valued number register '.M'.
-
-     The fill color is associated with the current environment (*note
-     Environments::).
-
-     Note that '\M' doesn't produce an input token in 'gtroff'.
-
-
-File: groff.info,  Node: I/O,  Next: Postprocessor Access,  Prev: Colors,  Up: gtroff Reference
-
-5.29 I/O
-========
-
-'gtroff' has several requests for including files:
-
- -- Request: .so file
-     Read in the specified FILE and includes it in place of the 'so'
-     request.  This is quite useful for large documents, e.g. keeping
-     each chapter in a separate file.  *Note gsoelim::, for more
-     information.
-
-     Since 'gtroff' replaces the 'so' request with the contents of
-     'file', it makes a difference whether the data is terminated with a
-     newline or not: Assuming that file 'xxx' contains the word 'foo'
-     without a final newline, this
-
-          This is
-          .so xxx
-          bar
-
-     yields 'This is foobar'.
-
-     The search path for FILE can be controlled with the '-I' command
-     line option.
-
- -- Request: .pso command
-     Read the standard output from the specified COMMAND and includes it
-     in place of the 'pso' request.
-
-     This request causes an error if used in safer mode (which is the
-     default).  Use 'groff''s or 'troff''s '-U' option to activate
-     unsafe mode.
-
-     The comment regarding a final newline for the 'so' request is valid
-     for 'pso' also.
-
- -- Request: .mso file
-     Identical to the 'so' request except that 'gtroff' searches for the
-     specified FILE in the same directories as macro files for the the
-     '-m' command line option.  If the file name to be included has the
-     form 'NAME.tmac' and it isn't found, 'mso' tries to include
-     'tmac.NAME' and vice versa.  If the file does not exist, a warning
-     of type 'file' is emitted.  *Note Debugging::, for information
-     about warnings.
-
- -- Request: .trf file
- -- Request: .cf file
-     Transparently output the contents of FILE.  Each line is output as
-     if it were preceded by '\!'; however, the lines are _not_ subject
-     to copy mode interpretation.  If the file does not end with a
-     newline, then a newline is added ('trf' only).  For example, to
-     define a macro 'x' containing the contents of file 'f', use
-
-          .ev 1
-          .di x
-          .trf f
-          .di
-          .ev
-
-     The calls to 'ev' prevent that the current partial input line
-     becomes part of the diversion.
-
-     Both 'trf' and 'cf', when used in a diversion, embeds an object in
-     the diversion which, when reread, causes the contents of FILE to be
-     transparently copied through to the output.  In UNIX 'troff', the
-     contents of FILE is immediately copied through to the output
-     regardless of whether there is a current diversion; this behaviour
-     is so anomalous that it must be considered a bug.
-
-     While 'cf' copies the contents of FILE completely unprocessed,
-     'trf' disallows characters such as NUL that are not valid 'gtroff'
-     input characters (*note Identifiers::).
-
-     For 'cf', within a diversion, 'completely unprocessed' means that
-     each line of a file to be inserted is handled as if it were
-     preceded by '\!\\!'.
-
-     Both requests cause a line break.
-
- -- Request: .nx [file]
-     Force 'gtroff' to continue processing of the file specified as an
-     argument.  If no argument is given, immediately jump to the end of
-     file.
-
- -- Request: .rd [prompt [arg1 arg2 ...]]
-     Read from standard input, and include what is read as though it
-     were part of the input file.  Text is read until a blank line is
-     encountered.
-
-     If standard input is a TTY input device (keyboard), write PROMPT to
-     standard error, followed by a colon (or send BEL for a beep if no
-     argument is given).
-
-     Arguments after PROMPT are available for the input.  For example,
-     the line
-
-          .rd data foo bar
-
-     with the input 'This is \$2.' prints
-
-          This is bar.
-
-   Using the 'nx' and 'rd' requests, it is easy to set up form letters.
-The form letter template is constructed like this, putting the following
-lines into a file called 'repeat.let':
-
-     .ce
-     \*(td
-     .sp 2
-     .nf
-     .rd
-     .sp
-     .rd
-     .fi
-     Body of letter.
-     .bp
-     .nx repeat.let
-
-When this is run, a file containing the following lines should be
-redirected in.  Note that requests included in this file are executed as
-though they were part of the form letter.  The last block of input is
-the 'ex' request, which tells 'groff' to stop processing.  If this was
-not there, 'groff' would not know when to stop.
-
-     Trent A. Fisher
-     708 NW 19th Av., #202
-     Portland, OR  97209
-
-     Dear Trent,
-
-     Len Adollar
-     4315 Sierra Vista
-     San Diego, CA  92103
-
-     Dear Mr. Adollar,
-
-     .ex
-
- -- Request: .pi pipe
-     Pipe the output of 'gtroff' to the shell command(s) specified by
-     PIPE.  This request must occur before 'gtroff' has a chance to
-     print anything.
-
-     'pi' causes an error if used in safer mode (which is the default).
-     Use 'groff''s or 'troff''s '-U' option to activate unsafe mode.
-
-     Multiple calls to 'pi' are allowed, acting as a chain.  For
-     example,
-
-          .pi foo
-          .pi bar
-          ...
-
-     is the same as '.pi foo | bar'.
-
-     Note that the intermediate output format of 'gtroff' is piped to
-     the specified commands.  Consequently, calling 'groff' without the
-     '-Z' option normally causes a fatal error.
-
- -- Request: .sy cmds
- -- Register: \n[systat]
-     Execute the shell command(s) specified by CMDS.  The output is not
-     saved anyplace, so it is up to the user to do so.
-
-     This request causes an error if used in safer mode (which is the
-     default).  Use 'groff''s or 'troff''s '-U' option to activate
-     unsafe mode.
-
-     For example, the following code fragment introduces the current
-     time into a document:
-
-          .sy perl -e 'printf ".nr H %d\\n.nr M %d\\n.nr S %d\\n",\
-                       (localtime(time))[2,1,0]' > /tmp/x\n[$$]
-          .so /tmp/x\n[$$]
-          .sy rm /tmp/x\n[$$]
-          \nH:\nM:\nS
-
-     Note that this works by having the 'perl' script (run by 'sy')
-     print out the 'nr' requests that set the number registers 'H', 'M',
-     and 'S', and then reads those commands in with the 'so' request.
-
-     For most practical purposes, the number registers 'seconds',
-     'minutes', and 'hours', which are initialized at start-up of
-     'gtroff', should be sufficient.  Use the 'af' request to get a
-     formatted output:
-
-          .af hours 00
-          .af minutes 00
-          .af seconds 00
-          \n[hours]:\n[minutes]:\n[seconds]
-
-     The 'systat' read-write number register contains the return value
-     of the 'system()' function executed by the last 'sy' request.
-
- -- Request: .open stream file
- -- Request: .opena stream file
-     Open the specified FILE for writing and associates the specified
-     STREAM with it.
-
-     The 'opena' request is like 'open', but if the file exists, append
-     to it instead of truncating it.
-
-     Both 'open' and 'opena' cause an error if used in safer mode (which
-     is the default).  Use 'groff''s or 'troff''s '-U' option to
-     activate unsafe mode.
-
- -- Request: .write stream data
- -- Request: .writec stream data
-     Write to the file associated with the specified STREAM.  The stream
-     must previously have been the subject of an open request.  The
-     remainder of the line is interpreted as the 'ds' request reads its
-     second argument: A leading '"' is stripped, and it is read in
-     copy-in mode.
-
-     The 'writec' request is like 'write', but only 'write' appends a
-     newline to the data.
-
- -- Request: .writem stream xx
-     Write the contents of the macro or string XX to the file associated
-     with the specified STREAM.
-
-     XX is read in copy mode, i.e., already formatted elements are
-     ignored.  Consequently, diversions must be unformatted with the
-     'asciify' request before calling 'writem'.  Usually, this means a
-     loss of information.
-
- -- Request: .close stream
-     Close the specified STREAM; the stream is no longer an acceptable
-     argument to the 'write' request.
-
-     Here a simple macro to write an index entry.
-
-          .open idx test.idx
-          .
-          .de IX
-          .  write idx \\n[%] \\$*
-          ..
-          .
-          .IX test entry
-          .
-          .close idx
-
- -- Escape: \Ve
- -- Escape: \V(ev
- -- Escape: \V[env]
-     Interpolate the contents of the specified environment variable ENV
-     (one-character name E, two-character name EV) as returned by the
-     function 'getenv'.  '\V' is interpreted in copy-in mode.
-
-
-File: groff.info,  Node: Postprocessor Access,  Next: Miscellaneous,  Prev: I/O,  Up: gtroff Reference
-
-5.30 Postprocessor Access
-=========================
-
-There are two escapes that give information directly to the
-postprocessor.  This is particularly useful for embedding POSTSCRIPT
-into the final document.
-
- -- Request: .device xxx
- -- Escape: \X'xxx'
-     Embeds its argument into the 'gtroff' output preceded with 'x X'.
-
-     The escapes '\&', '\)', '\%', and '\:' are ignored within '\X',
-     '\ ' and '\~' are converted to single space characters.  All other
-     escapes (except '\\', which produces a backslash) cause an error.
-
-     Contrary to '\X', the 'device' request simply processes its
-     argument in copy mode (*note Copy-in Mode::).
-
-     If the 'use_charnames_in_special' keyword is set in the 'DESC'
-     file, special characters no longer cause an error; they are simply
-     output verbatim.  Additionally, the backslash is represented as
-     '\\'.
-
-     'use_charnames_in_special' is currently used by 'grohtml' only.
-
- -- Request: .devicem xx
- -- Escape: \Yn
- -- Escape: \Y(nm
- -- Escape: \Y[name]
-     This is approximately equivalent to '\X'\*[NAME]'' (one-character
-     name N, two-character name NM).  However, the contents of the
-     string or macro NAME are not interpreted; also it is permitted for
-     NAME to have been defined as a macro and thus contain newlines (it
-     is not permitted for the argument to '\X' to contain newlines).
-     The inclusion of newlines requires an extension to the UNIX 'troff'
-     output format, and confuses drivers that do not know about this
-     extension (*note Device Control Commands::).
-
-   *Note Output Devices::.
-
-
-File: groff.info,  Node: Miscellaneous,  Next: Gtroff Internals,  Prev: Postprocessor Access,  Up: gtroff Reference
-
-5.31 Miscellaneous
-==================
-
-This section documents parts of 'gtroff' that cannot (yet) be
-categorized elsewhere in this manual.
-
- -- Request: .nm [start [inc [space [indent]]]]
-     Print line numbers.  START is the line number of the _next_ output
-     line.  INC indicates which line numbers are printed.  For example,
-     the value 5 means to emit only line numbers that are multiples
-     of 5; this defaults to 1.  SPACE is the space to be left between
-     the number and the text; this defaults to one digit space.  The
-     fourth argument is the indentation of the line numbers, defaulting
-     to zero.  Both SPACE and INDENT are given as multiples of digit
-     spaces; they can be negative also.  Without any arguments, line
-     numbers are turned off.
-
-     'gtroff' reserves three digit spaces for the line number (which is
-     printed right-justified) plus the amount given by INDENT; the
-     output lines are concatenated to the line numbers, separated by
-     SPACE, and _without_ reducing the line length.  Depending on the
-     value of the horizontal page offset (as set with the 'po' request),
-     line numbers that are longer than the reserved space stick out to
-     the left, or the whole line is moved to the right.
-
-     Parameters corresponding to missing arguments are not changed; any
-     non-digit argument (to be more precise, any argument starting with
-     a character valid as a delimiter for identifiers) is also treated
-     as missing.
-
-     If line numbering has been disabled with a call to 'nm' without an
-     argument, it can be reactivated with '.nm +0', using the previously
-     active line numbering parameters.
-
-     The parameters of 'nm' are associated with the current environment
-     (*note Environments::).  The current output line number is
-     available in the number register 'ln'.
-
-          .po 1m
-          .ll 2i
-          This test shows how line numbering works with groff.
-          .nm 999
-          This test shows how line numbering works with groff.
-          .br
-          .nm xxx 3 2
-          .ll -\w'0'u
-          This test shows how line numbering works with groff.
-          .nn 2
-          This test shows how line numbering works with groff.
-
-     And here the result:
-
-           This  test shows how
-           line numbering works
-           999 with   groff.   This
-          1000 test shows how  line
-          1001 numbering works with
-          1002 groff.
-                This test shows how
-                line      numbering
-           works  with  groff.
-           This test shows how
-          1005  line      numbering
-                works with groff.
-
- -- Request: .nn [skip]
-     Temporarily turn off line numbering.  The argument is the number of
-     lines not to be numbered; this defaults to 1.
-
- -- Request: .mc glyph [dist]
-     Print a "margin character" to the right of the text.(1)  (*note
-     Miscellaneous-Footnote-1::) The first argument is the glyph to be
-     printed.  The second argument is the distance away from the right
-     margin.  If missing, the previously set value is used; default is
-     10pt).  For text lines that are too long (that is, longer than the
-     text length plus DIST), the margin character is directly appended
-     to the lines.
-
-     With no arguments the margin character is turned off.  If this
-     occurs before a break, no margin character is printed.
-
-     For compatibility with AT&T 'troff', a call to 'mc' to set the
-     margin character can't be undone immediately; at least one line
-     gets a margin character.  Thus
-
-          .ll 1i
-          .mc \[br]
-          .mc
-          xxx
-          .br
-          xxx
-
-     produces
-
-          xxx        |
-          xxx
-
-     For empty lines and lines produced by the 'tl' request no margin
-     character is emitted.
-
-     The margin character is associated with the current environment
-     (*note Environments::).
-
-     This is quite useful for indicating text that has changed, and, in
-     fact, there are programs available for doing this (they are called
-     'nrchbar' and 'changebar' and can be found in any
-     'comp.sources.unix' archive).
-
-          .ll 3i
-          .mc |
-          This paragraph is highlighted with a margin
-          character.
-          .sp
-          Note that vertical space isn't marked.
-          .br
-          \&
-          .br
-          But we can fake it with `\&'.
-
-     Result:
-
-          This  paragraph is highlighted |
-          with a margin character.       |
-
-          Note that vertical space isn't |
-          marked.                        |
-                                         |
-          But we can fake it with `\&'.  |
-
- -- Request: .psbb filename
- -- Register: \n[llx]
- -- Register: \n[lly]
- -- Register: \n[urx]
- -- Register: \n[ury]
-     Retrieve the bounding box of the POSTSCRIPT image found in
-     FILENAME.  The file must conform to Adobe's "Document Structuring
-     Conventions" (DSC); the command searches for a '%%BoundingBox'
-     comment and extracts the bounding box values into the number
-     registers 'llx', 'lly', 'urx', and 'ury'.  If an error occurs (for
-     example, 'psbb' cannot find the '%%BoundingBox' comment), it sets
-     the four number registers to zero.
-
-     The search path for FILENAME can be controlled with the '-I'
-     command line option.
-
-
-File: groff.info,  Node: Miscellaneous-Footnotes,  Up: Miscellaneous
-
-   (1) "Margin character" is a misnomer since it is an output glyph.
-
-
-File: groff.info,  Node: Gtroff Internals,  Next: Debugging,  Prev: Miscellaneous,  Up: gtroff Reference
-
-5.32 'gtroff' Internals
-=======================
-
-'gtroff' processes input in three steps.  One or more input characters
-are converted to an "input token".(1)  (*note Gtroff
-Internals-Footnote-1::) Then, one or more input tokens are converted to
-an "output node".  Finally, output nodes are converted to the
-intermediate output language understood by all output devices.
-
-   Actually, before step one happens, 'gtroff' converts certain escape
-sequences into reserved input characters (not accessible by the user);
-such reserved characters are used for other internal processing also -
-this is the very reason why not all characters are valid input.  *Note
-Identifiers::, for more on this topic.
-
-   For example, the input string 'fi\[:u]' is converted into a character
-token 'f', a character token 'i', and a special token ':u' (representing
-u umlaut).  Later on, the character tokens 'f' and 'i' are merged to a
-single output node representing the ligature glyph 'fi' (provided the
-current font has a glyph for this ligature); the same happens with ':u'.
-All output glyph nodes are 'processed', which means that they are
-invariably associated with a given font, font size, advance width, etc.
-During the formatting process, 'gtroff' itself adds various nodes to
-control the data flow.
-
-   Macros, diversions, and strings collect elements in two chained
-lists: a list of input tokens that have been passed unprocessed, and a
-list of output nodes.  Consider the following the diversion.
-
-     .di xxx
-     a
-     \!b
-     c
-     .br
-     .di
-
-It contains these elements.
-
-node list            token list   element number
-                                  
-line start node      --           1
-glyph node 'a'       --           2
-word space node      --           3
---                   'b'          4
---                   '\n'         5
-glyph node 'c'       --           6
-vertical size node   --           7
-vertical size node   --           8
---                   '\n'         9
-
-Elements 1, 7, and 8 are inserted by 'gtroff'; the latter two (which are
-always present) specify the vertical extent of the last line, possibly
-modified by '\x'.  The 'br' request finishes the current partial line,
-inserting a newline input token, which is subsequently converted to a
-space when the diversion is reread.  Note that the word space node has a
-fixed width that isn't stretchable anymore.  To convert horizontal space
-nodes back to input tokens, use the 'unformat' request.
-
-   Macros only contain elements in the token list (and the node list is
-empty); diversions and strings can contain elements in both lists.
-
-   Note that the 'chop' request simply reduces the number of elements in
-a macro, string, or diversion by one.  Exceptions are "compatibility
-save" and "compatibility ignore" input tokens, which are ignored.  The
-'substring' request also ignores those input tokens.
-
-   Some requests like 'tr' or 'cflags' work on glyph identifiers only;
-this means that the associated glyph can be changed without destroying
-this association.  This can be very helpful for substituting glyphs.  In
-the following example, we assume that glyph 'foo' isn't available by
-default, so we provide a substitution using the 'fchar' request and map
-it to input character 'x'.
-
-     .fchar \[foo] foo
-     .tr x \[foo]
-
-Now let us assume that we install an additional special font 'bar' that
-has glyph 'foo'.
-
-     .special bar
-     .rchar \[foo]
-
-Since glyphs defined with 'fchar' are searched before glyphs in special
-fonts, we must call 'rchar' to remove the definition of the fallback
-glyph.  Anyway, the translation is still active; 'x' now maps to the
-real glyph 'foo'.
-
-   Macro and request arguments preserve the compatibility mode:
-
-     .cp 1     \" switch to compatibility mode
-     .de xx
-     \\$1
-     ..
-     .cp 0     \" switch compatibility mode off
-     .xx caf\['e]
-         => caf�
-
-Since compatibility mode is on while 'de' is called, the macro 'xx'
-activates compatibility mode while executing.  Argument '$1' can still
-be handled properly because it inherits the compatibility mode status
-which was active at the point where 'xx' is called.
-
-   After expansion of the parameters, the compatibility save and restore
-tokens are removed.
-
-
-File: groff.info,  Node: Gtroff Internals-Footnotes,  Up: Gtroff Internals
-
-   (1) Except the escapes '\f', '\F', '\H', '\m', '\M', '\R', '\s', and
-'\S', which are processed immediately if not in copy-in mode.
-
-
-File: groff.info,  Node: Debugging,  Next: Implementation Differences,  Prev: Gtroff Internals,  Up: gtroff Reference
-
-5.33 Debugging
-==============
-
-'gtroff' is not easy to debug, but there are some useful features and
-strategies for debugging.
-
- -- Request: .lf line [filename]
-     Change the line number and optionally the file name 'gtroff' shall
-     use for error and warning messages.  LINE is the input line number
-     of the _next_ line.
-
-     Without argument, the request is ignored.
-
-     This is a debugging aid for documents that are split into many
-     files, then put together with 'soelim' and other preprocessors.
-     Usually, it isn't invoked manually.
-
-     Note that other 'troff' implementations (including the original
-     AT&T version) handle 'lf' differently.  For them, LINE changes the
-     line number of the _current_ line.
-
- -- Request: .tm string
- -- Request: .tm1 string
- -- Request: .tmc string
-     Send STRING to the standard error output; this is very useful for
-     printing debugging messages among other things.
-
-     STRING is read in copy mode.
-
-     The 'tm' request ignores leading spaces of STRING; 'tm1' handles
-     its argument similar to the 'ds' request: a leading double quote in
-     STRING is stripped to allow initial blanks.
-
-     The 'tmc' request is similar to 'tm1' but does not append a newline
-     (as is done in 'tm' and 'tm1').
-
- -- Request: .ab [string]
-     Similar to the 'tm' request, except that it causes 'gtroff' to stop
-     processing.  With no argument it prints 'User Abort.' to standard
-     error.
-
- -- Request: .ex
-     The 'ex' request also causes 'gtroff' to stop processing; see also
-     *note I/O::.
-
-   When doing something involved it is useful to leave the debugging
-statements in the code and have them turned on by a command line flag.
-
-     .if \n(DB .tm debugging output
-
-To activate these statements say
-
-     groff -rDB=1 file
-
-   If it is known in advance that there are many errors and no useful
-output, 'gtroff' can be forced to suppress formatted output with the
-'-z' flag.
-
- -- Request: .pev
-     Print the contents of the current environment and all the currently
-     defined environments (both named and numbered) on 'stderr'.
-
- -- Request: .pm
-     Print the entire symbol table on 'stderr'.  Names of all defined
-     macros, strings, and diversions are print together with their size
-     in bytes.  Since 'gtroff' sometimes adds nodes by itself, the
-     returned size can be larger than expected.
-
-     This request differs from UNIX 'troff': 'gtroff' reports the sizes
-     of diversions, ignores an additional argument to print only the
-     total of the sizes, and the size isn't returned in blocks of 128
-     characters.
-
- -- Request: .pnr
-     Print the names and contents of all currently defined number
-     registers on 'stderr'.
-
- -- Request: .ptr
-     Print the names and positions of all traps (not including input
-     line traps and diversion traps) on 'stderr'.  Empty slots in the
-     page trap list are printed as well, because they can affect the
-     priority of subsequently planted traps.
-
- -- Request: .fl
-     Instruct 'gtroff' to flush its output immediately.  The intent is
-     for interactive use, but this behaviour is currently not
-     implemented in 'gtroff'.  Contrary to UNIX 'troff', TTY output is
-     sent to a device driver also ('grotty'), making it non-trivial to
-     communicate interactively.
-
-     This request causes a line break.
-
- -- Request: .backtrace
-     Print a backtrace of the input stack to the standard error stream.
-
-     Consider the following in file 'test':
-
-          .de xxx
-          .  backtrace
-          ..
-          .de yyy
-          .  xxx
-          ..
-          .
-          .yyy
-
-     On execution, 'gtroff' prints the following:
-
-          test:2: backtrace: macro `xxx'
-          test:5: backtrace: macro `yyy'
-          test:8: backtrace: file `test'
-
-     The option '-b' of 'gtroff' internally calls a variant of this
-     request on each error and warning.
-
- -- Register: \n[slimit]
-     Use the 'slimit' number register to set the maximum number of
-     objects on the input stack.  If 'slimit' is less than or equal
-     to 0, there is no limit set.  With no limit, a buggy recursive
-     macro can exhaust virtual memory.
-
-     The default value is 1000; this is a compile-time constant.
-
- -- Request: .warnscale si
-     Set the scaling indicator used in warnings to SI.  Valid values for
-     SI are 'u', 'i', 'c', 'p', and 'P'.  At startup, it is set to 'i'.
-
- -- Request: .spreadwarn [limit]
-     Make 'gtroff' emit a warning if the additional space inserted for
-     each space between words in an output line is larger or equal to
-     LIMIT.  A negative value is changed to zero; no argument toggles
-     the warning on and off without changing LIMIT.  The default scaling
-     indicator is 'm'.  At startup, 'spreadwarn' is deactivated, and
-     LIMIT is set to 3m.
-
-     For example,
-
-          .spreadwarn 0.2m
-
-     causes a warning if 'gtroff' must add 0.2m or more for each
-     interword space in a line.
-
-     This request is active only if text is justified to both margins
-     (using '.ad b').
-
-   'gtroff' has command line options for printing out more warnings
-('-w') and for printing backtraces ('-b') when a warning or an error
-occurs.  The most verbose level of warnings is '-ww'.
-
- -- Request: .warn [flags]
- -- Register: \n[.warn]
-     Control the level of warnings checked for.  The FLAGS are the sum
-     of the numbers associated with each warning that is to be enabled;
-     all other warnings are disabled.  The number associated with each
-     warning is listed below.  For example, '.warn 0' disables all
-     warnings, and '.warn 1' disables all warnings except that about
-     missing glyphs.  If no argument is given, all warnings are enabled.
-
-     The read-only number register '.warn' contains the current warning
-     level.
-
-* Menu:
-
-* Warnings::
-
-
-File: groff.info,  Node: Warnings,  Prev: Debugging,  Up: Debugging
-
-5.33.1 Warnings
----------------
-
-The warnings that can be given to 'gtroff' are divided into the
-following categories.  The name associated with each warning is used by
-the '-w' and '-W' options; the number is used by the 'warn' request and
-by the '.warn' register.
-
-'char'
-'1'
-     Non-existent glyphs.(1)  (*note Warnings-Footnote-1::) This is
-     enabled by default.
-
-'number'
-'2'
-     Invalid numeric expressions.  This is enabled by default.  *Note
-     Expressions::.
-
-'break'
-'4'
-     In fill mode, lines that could not be broken so that their length
-     was less than the line length.  This is enabled by default.
-
-'delim'
-'8'
-     Missing or mismatched closing delimiters.
-
-'el'
-'16'
-     Use of the 'el' request with no matching 'ie' request.  *Note
-     if-else::.
-
-'scale'
-'32'
-     Meaningless scaling indicators.
-
-'range'
-'64'
-     Out of range arguments.
-
-'syntax'
-'128'
-     Dubious syntax in numeric expressions.
-
-'di'
-'256'
-     Use of 'di' or 'da' without an argument when there is no current
-     diversion.
-
-'mac'
-'512'
-     Use of undefined strings, macros and diversions.  When an undefined
-     string, macro, or diversion is used, that string is automatically
-     defined as empty.  So, in most cases, at most one warning is given
-     for each name.
-
-'reg'
-'1024'
-     Use of undefined number registers.  When an undefined number
-     register is used, that register is automatically defined to have a
-     value of 0.  So, in most cases, at most one warning is given for
-     use of a particular name.
-
-'tab'
-'2048'
-     Use of a tab character where a number was expected.
-
-'right-brace'
-'4096'
-     Use of '\}' where a number was expected.
-
-'missing'
-'8192'
-     Requests that are missing non-optional arguments.
-
-'input'
-'16384'
-     Invalid input characters.
-
-'escape'
-'32768'
-     Unrecognized escape sequences.  When an unrecognized escape
-     sequence '\X' is encountered, the escape character is ignored, and
-     X is printed.
-
-'space'
-'65536'
-     Missing space between a request or macro and its argument.  This
-     warning is given when an undefined name longer than two characters
-     is encountered, and the first two characters of the name make a
-     defined name.  The request or macro is not invoked.  When this
-     warning is given, no macro is automatically defined.  This is
-     enabled by default.  This warning never occurs in compatibility
-     mode.
-
-'font'
-'131072'
-     Non-existent fonts.  This is enabled by default.
-
-'ig'
-'262144'
-     Invalid escapes in text ignored with the 'ig' request.  These are
-     conditions that are errors when they do not occur in ignored text.
-
-'color'
-'524288'
-     Color related warnings.
-
-'file'
-'1048576'
-     Missing files.  The 'mso' request gives this warning when the
-     requested macro file does not exist.  This is enabled by default.
-
-'all'
-     All warnings except 'di', 'mac' and 'reg'.  It is intended that
-     this covers all warnings that are useful with traditional macro
-     packages.
-
-'w'
-     All warnings.
-
-
-File: groff.info,  Node: Warnings-Footnotes,  Up: Warnings
-
-   (1) 'char' is a misnomer since it reports missing glyphs - there
-aren't missing input characters, only invalid ones.
-
-
-File: groff.info,  Node: Implementation Differences,  Prev: Debugging,  Up: gtroff Reference
-
-5.34 Implementation Differences
-===============================
-
-GNU 'troff' has a number of features that cause incompatibilities with
-documents written with old versions of 'troff'.
-
-   Long names cause some incompatibilities.  UNIX 'troff' interprets
-
-     .dsabcd
-
-as defining a string 'ab' with contents 'cd'.  Normally, GNU 'troff'
-interprets this as a call of a macro named 'dsabcd'.  Also UNIX 'troff'
-interprets '\*[' or '\n[' as references to a string or number register
-called '['.  In GNU 'troff', however, this is normally interpreted as
-the start of a long name.  In compatibility mode GNU 'troff' interprets
-long names in the traditional way (which means that they are not
-recognized as names).
-
- -- Request: .cp [n]
- -- Request: .do cmd
- -- Register: \n[.C]
-     If N is missing or non-zero, turn on compatibility mode; otherwise,
-     turn it off.
-
-     The read-only number register '.C' is 1 if compatibility mode is
-     on, 0 otherwise.
-
-     Compatibility mode can be also turned on with the '-C' command line
-     option.
-
-     The 'do' request turns off compatibility mode while executing its
-     arguments as a 'gtroff' command.  However, it does not turn off
-     compatibility mode while processing the macro itself.  To do that,
-     use the 'de1' request (or manipulate the '.C' register manually).
-     *Note Writing Macros::.
-
-          .do fam T
-
-     executes the 'fam' request when compatibility mode is enabled.
-
-     'gtroff' restores the previous compatibility setting before
-     interpreting any files sourced by the CMD.
-
-   Two other features are controlled by '-C'.  If not in compatibility
-mode, GNU 'troff' preserves the input level in delimited arguments:
-
-     .ds xx '
-     \w'abc\*(xxdef'
-
-In compatibility mode, the string '72def'' is returned; without '-C' the
-resulting string is '168' (assuming a TTY output device).
-
-   Finally, the escapes '\f', '\H', '\m', '\M', '\R', '\s', and '\S' are
-transparent for recognizing the beginning of a line only in
-compatibility mode (this is a rather obscure feature).  For example, the
-code
-
-     .de xx
-     Hallo!
-     ..
-     \fB.xx\fP
-
-prints 'Hallo!' in bold face if in compatibility mode, and '.xx' in bold
-face otherwise.
-
-   GNU 'troff' does not allow the use of the escape sequences '\|',
-'\^', '\&', '\{', '\}', '\<SP>', '\'', '\`', '\-', '\_', '\!', '\%', and
-'\c' in names of strings, macros, diversions, number registers, fonts or
-environments; UNIX 'troff' does.  The '\A' escape sequence (*note
-Identifiers::) may be helpful in avoiding use of these escape sequences
-in names.
-
-   Fractional point sizes cause one noteworthy incompatibility.  In UNIX
-'troff' the 'ps' request ignores scale indicators and thus
-
-     .ps 10u
-
-sets the point size to 10 points, whereas in GNU 'troff' it sets the
-point size to 10 scaled points.  *Note Fractional Type Sizes::, for more
-information.
-
-   In GNU 'troff' there is a fundamental difference between
-(unformatted) input characters and (formatted) output glyphs.
-Everything that affects how a glyph is output is stored with the glyph
-node; once a glyph node has been constructed it is unaffected by any
-subsequent requests that are executed, including 'bd', 'cs', 'tkf',
-'tr', or 'fp' requests.  Normally glyphs are constructed from input
-characters at the moment immediately before the glyph is added to the
-current output line.  Macros, diversions and strings are all, in fact,
-the same type of object; they contain lists of input characters and
-glyph nodes in any combination.  A glyph node does not behave like an
-input character for the purposes of macro processing; it does not
-inherit any of the special properties that the input character from
-which it was constructed might have had.  For example,
-
-     .di x
-     \\\\
-     .br
-     .di
-     .x
-
-prints '\\' in GNU 'troff'; each pair of input backslashes is turned
-into one output backslash and the resulting output backslashes are not
-interpreted as escape characters when they are reread.  UNIX 'troff'
-would interpret them as escape characters when they were reread and
-would end up printing one '\'.  The correct way to obtain a printable
-backslash is to use the '\e' escape sequence: This always prints a
-single instance of the current escape character, regardless of whether
-or not it is used in a diversion; it also works in both GNU 'troff' and
-UNIX 'troff'.(1)  (*note Implementation Differences-Footnote-1::) To
-store, for some reason, an escape sequence in a diversion that is
-interpreted when the diversion is reread, either use the traditional
-'\!' transparent output facility, or, if this is unsuitable, the new
-'\?' escape sequence.
-
-   *Note Diversions::, and *note Gtroff Internals::, for more
-information.
-
-
-File: groff.info,  Node: Implementation Differences-Footnotes,  Up: Implementation Differences
-
-   (1) To be completely independent of the current escape character, use
-'\(rs', which represents a reverse solidus (backslash) glyph.
-
-
-File: groff.info,  Node: Preprocessors,  Next: Output Devices,  Prev: gtroff Reference,  Up: Top
-
-6 Preprocessors
-***************
-
-This chapter describes all preprocessors that come with 'groff' or which
-are freely available.
-
-* Menu:
-
-* geqn::
-* gtbl::
-* gpic::
-* ggrn::
-* grap::
-* gchem::
-* grefer::
-* gsoelim::
-* preconv::
-
-
-File: groff.info,  Node: geqn,  Next: gtbl,  Prev: Preprocessors,  Up: Preprocessors
-
-6.1 'geqn'
-==========
-
-* Menu:
-
-* Invoking geqn::
-
-
-File: groff.info,  Node: Invoking geqn,  Prev: geqn,  Up: geqn
-
-6.1.1 Invoking 'geqn'
----------------------
-
-
-File: groff.info,  Node: gtbl,  Next: gpic,  Prev: geqn,  Up: Preprocessors
-
-6.2 'gtbl'
-==========
-
-* Menu:
-
-* Invoking gtbl::
-
-
-File: groff.info,  Node: Invoking gtbl,  Prev: gtbl,  Up: gtbl
-
-6.2.1 Invoking 'gtbl'
----------------------
-
-
-File: groff.info,  Node: gpic,  Next: ggrn,  Prev: gtbl,  Up: Preprocessors
-
-6.3 'gpic'
-==========
-
-* Menu:
-
-* Invoking gpic::
-
-
-File: groff.info,  Node: Invoking gpic,  Prev: gpic,  Up: gpic
-
-6.3.1 Invoking 'gpic'
----------------------
-
-
-File: groff.info,  Node: ggrn,  Next: grap,  Prev: gpic,  Up: Preprocessors
-
-6.4 'ggrn'
-==========
-
-* Menu:
-
-* Invoking ggrn::
-
-
-File: groff.info,  Node: Invoking ggrn,  Prev: ggrn,  Up: ggrn
-
-6.4.1 Invoking 'ggrn'
----------------------
-
-
-File: groff.info,  Node: grap,  Next: gchem,  Prev: ggrn,  Up: Preprocessors
-
-6.5 'grap'
-==========
-
-A free implementation of 'grap', written by Ted Faber, is available as
-an extra package from the following address:
-
-     <http://www.lunabase.org/~faber/Vault/software/grap/>
-
-
-File: groff.info,  Node: gchem,  Next: grefer,  Prev: grap,  Up: Preprocessors
-
-6.6 'gchem'
-===========
-
-* Menu:
-
-* Invoking gchem::
-
-
-File: groff.info,  Node: Invoking gchem,  Prev: gchem,  Up: gchem
-
-6.6.1 Invoking 'gchem'
-----------------------
-
-
-File: groff.info,  Node: grefer,  Next: gsoelim,  Prev: gchem,  Up: Preprocessors
-
-6.7 'grefer'
-============
-
-* Menu:
-
-* Invoking grefer::
-
-
-File: groff.info,  Node: Invoking grefer,  Prev: grefer,  Up: grefer
-
-6.7.1 Invoking 'grefer'
------------------------
-
-
-File: groff.info,  Node: gsoelim,  Next: preconv,  Prev: grefer,  Up: Preprocessors
-
-6.8 'gsoelim'
-=============
-
-* Menu:
-
-* Invoking gsoelim::
-
-
-File: groff.info,  Node: Invoking gsoelim,  Prev: gsoelim,  Up: gsoelim
-
-6.8.1 Invoking 'gsoelim'
-------------------------
-
-
-File: groff.info,  Node: preconv,  Prev: gsoelim,  Up: Preprocessors
-
-6.9 'preconv'
-=============
-
-* Menu:
-
-* Invoking preconv::
-
-
-File: groff.info,  Node: Invoking preconv,  Prev: preconv,  Up: preconv
-
-6.9.1 Invoking 'preconv'
-------------------------
-
-
-File: groff.info,  Node: Output Devices,  Next: File formats,  Prev: Preprocessors,  Up: Top
-
-7 Output Devices
-****************
-
-* Menu:
-
-* Special Characters::
-* grotty::
-* grops::
-* gropdf::
-* grodvi::
-* grolj4::
-* grolbp::
-* grohtml::
-* gxditview::
-
-
-File: groff.info,  Node: Special Characters,  Next: grotty,  Prev: Output Devices,  Up: Output Devices
-
-7.1 Special Characters
-======================
-
-*Note Font Files::.
-
-
-File: groff.info,  Node: grotty,  Next: grops,  Prev: Special Characters,  Up: Output Devices
-
-7.2 'grotty'
-============
-
-The postprocessor 'grotty' translates the output from GNU 'troff' into a
-form suitable for typewriter-like devices.  It is fully documented on
-its manual page, 'grotty(1)'.
-
-* Menu:
-
-* Invoking grotty::
-
-
-File: groff.info,  Node: Invoking grotty,  Prev: grotty,  Up: grotty
-
-7.2.1 Invoking 'grotty'
------------------------
-
-The postprocessor 'grotty' accepts the following command-line options:
-
-'-b'
-     Do not overstrike bold glyphs.  Ignored if '-c' isn't used.
-
-'-B'
-     Do not underline bold-italic glyphs.  Ignored if '-c' isn't used.
-
-'-c'
-     Use overprint and disable colours for printing on legacy Teletype
-     printers (see below).
-
-'-d'
-     Do not render lines (this is, ignore all '\D' escapes).
-
-'-f'
-     Use form feed control characters in the output.
-
-'-FDIR'
-     Put the directory 'DIR/devNAME' in front of the search path for the
-     font and device description files, given the target device NAME.
-
-'-h'
-     Use horizontal tabs for sequences of 8 space characters.
-
-'-i'
-     Request italic glyphs from the terminal.  Ignored if '-c' is
-     active.
-
-'-o'
-     Do not overstrike.
-
-'-r'
-     Highlight italic glyphs.  Ignored if '-c' is active.
-
-'-u'
-     Do not underline italic glyphs.  Ignored if '-c' isn't used.
-
-'-U'
-     Do not overstrike bold-italic glyphs.  Ignored if '-c' isn't used.
-
-'-v'
-     Print the version number.
-
-   The '-c' mode for TTY output devices means that underlining is done
-by emitting sequences of '_' and '^H' (the backspace character) before
-the actual character.  Literally, this is printing an underline
-character, then moving the caret back one character position, and
-printing the actual character at the same position as the underline
-character (similar to a typewriter).  Usually, a modern terminal can't
-interpret this (and the original Teletype machines for which this
-sequence was appropriate are no longer in use).  You need a pager
-program like 'less' that translates this into ISO 6429 SGR sequences to
-control terminals.
-
-
-File: groff.info,  Node: grops,  Next: gropdf,  Prev: grotty,  Up: Output Devices
-
-7.3 'grops'
-===========
-
-The postprocessor 'grops' translates the output from GNU 'troff' into a
-form suitable for Adobe POSTSCRIPT devices.  It is fully documented on
-its manual page, 'grops(1)'.
-
-* Menu:
-
-* Invoking grops::
-* Embedding PostScript::
-
-
-File: groff.info,  Node: Invoking grops,  Next: Embedding PostScript,  Prev: grops,  Up: grops
-
-7.3.1 Invoking 'grops'
-----------------------
-
-The postprocessor 'grops' accepts the following command-line options:
-
-'-bFLAGS'
-     Use backward compatibility settings given by FLAGS as documented in
-     the 'grops(1)' manual page.  Overrides the command 'broken' in the
-     'DESC' file.
-
-'-cN'
-     Print N copies of each page.
-
-'-FDIR'
-     Put the directory 'DIR/devNAME' in front of the search path for the
-     font, prologue and device description files, given the target
-     device NAME, usually *ps*.
-
-'-g'
-     Tell the printer to guess the page length.  Useful for printing
-     vertically centered pages when the paper dimensions are determined
-     at print time.
-
-'-IPATH ...'
-     Consider the directory 'PATH' for searching included files
-     specified with relative paths.  The current directory is searched
-     as fallback.
-
-'-l'
-     Use landscape orientation.
-
-'-m'
-     Use manual feed.
-
-'-pPAPERSIZE'
-     Set the page dimensions.  Overrides the commands 'papersize',
-     'paperlength', and 'paperwidth' in the 'DESC' file.  See the
-     'groff_font(5)' manual page for details.
-
-'-PPROLOGUE'
-     Use the PROLOGUE in the font path as the prologue instead of the
-     default 'prologue'.  Overrides the environment variable
-     'GROPS_PROLOGUE'.
-
-'-wN'
-     Set the line thickness to N/1000em.  Overrides the default value N
-     = 40.
-
-'-v'
-     Print the version number.
-
-
-File: groff.info,  Node: Embedding PostScript,  Prev: Invoking grops,  Up: grops
-
-7.3.2 Embedding POSTSCRIPT
---------------------------
-
-The escape sequence
-
-   '\X'ps: import FILE LLX LLY URX URY WIDTH [HEIGHT]''
-
-places a rectangle of the specified WIDTH containing the POSTSCRIPT
-drawing from file FILE bound by the box from LLX LLY to URX URY (in
-POSTSCRIPT coordinates) at the insertion point.  If HEIGHT is not
-specified, the embedded drawing is scaled proportionally.
-
-   *Note Miscellaneous::, for the 'psbb' request, which automatically
-generates the bounding box.
-
-   This escape sequence is used internally by the macro 'PSPIC' (see the
-'groff_tmac(5)' manual page).
-
-
-File: groff.info,  Node: gropdf,  Next: grodvi,  Prev: grops,  Up: Output Devices
-
-7.4 'gropdf'
-============
-
-The postprocessor 'gropdf' translates the output from GNU 'troff' into a
-form suitable for Adobe PDF devices.  It is fully documented on its
-manual page, 'gropdf(1)'.
-
-* Menu:
-
-* Invoking gropdf::
-* Embedding PDF::
-
-
-File: groff.info,  Node: Invoking gropdf,  Next: Embedding PDF,  Prev: gropdf,  Up: gropdf
-
-7.4.1 Invoking 'gropdf'
------------------------
-
-The postprocessor 'gropdf' accepts the following command-line options:
-
-'-d'
-     Produce uncompressed PDFs that include debugging comments.
-
-'-e'
-     This forces 'gropdf' to embed all used fonts in the PDF, even if
-     they are one of the 14 base Adobe fonts.
-
-'-FDIR'
-     Put the directory 'DIR/devNAME' in front of the search path for the
-     font, prologue and device description files, given the target
-     device NAME, usually *pdf*.
-
-'-yFOUNDRY'
-     This forces the use of a different font foundry.
-
-'-l'
-     Use landscape orientation.
-
-'-pPAPERSIZE'
-     Set the page dimensions.  Overrides the commands 'papersize',
-     'paperlength', and 'paperwidth' in the 'DESC' file.  See the
-     'groff_font(5)' manual page for details.
-
-'-v'
-     Print the version number.
-
-'-s'
-     Append a comment line to end of PDF showing statistics, i.e.
-     number of pages in document.  Ghostscript's 'ps2pdf(1)' complains
-     about this line if it is included, but works anyway.
-
-'-uFILENAME'
-     'gropdf' normally includes a ToUnicode CMap with any font created
-     using 'text.enc' as the encoding file, this makes it easier to
-     search for words that contain ligatures.  You can include your own
-     CMap by specifying a FILENAME or have no CMap at all by omitting
-     the FILENAME.
-
-
-File: groff.info,  Node: Embedding PDF,  Prev: Invoking gropdf,  Up: gropdf
-
-7.4.2 Embedding PDF
--------------------
-
-The escape sequence
-
-   '\X'pdf: pdfpic FILE ALIGNMENT WIDTH [HEIGHT] [LINELENGTH]''
-
-places a rectangle of the specified WIDTH containing the PDF drawing
-from file FILE of desired WIDTH and HEIGHT (if HEIGHT is missing or zero
-then it is scaled proportionally).  If ALIGNMENT is '-L' the drawing is
-left aligned.  If it is '-C' or '-R' a LINELENGTH greater than the width
-of the drawing is required as well.  If WIDTH is specified as zero then
-the width is scaled in proportion to the height.
-
-
-File: groff.info,  Node: grodvi,  Next: grolj4,  Prev: gropdf,  Up: Output Devices
-
-7.5 'grodvi'
-============
-
-The postprocessor 'grodvi' translates the output from GNU 'troff' into
-the *DVI* output format compatible with the *TeX* document preparation
-system.  It is fully documented on its manual page, 'grodvi(1)'.
-
-* Menu:
-
-* Invoking grodvi::
-
-
-File: groff.info,  Node: Invoking grodvi,  Prev: grodvi,  Up: grodvi
-
-7.5.1 Invoking 'grodvi'
------------------------
-
-The postprocessor 'grodvi' accepts the following command-line options:
-
-'-d'
-     Do not use *tpic* specials to implement drawing commands.
-
-'-FDIR'
-     Put the directory 'DIR/devNAME' in front of the search path for the
-     font and device description files, given the target device NAME,
-     usually *dvi*.
-
-'-l'
-     Use landscape orientation.
-
-'-pPAPERSIZE'
-     Set the page dimensions.  Overrides the commands 'papersize',
-     'paperlength', and 'paperwidth' in the 'DESC' file.  See
-     'groff_font(5)' manual page for details.
-
-'-v'
-     Print the version number.
-
-'-wN'
-     Set the line thickness to N/1000em.  Overrides the default value N
-     = 40.
-
-
-File: groff.info,  Node: grolj4,  Next: grolbp,  Prev: grodvi,  Up: Output Devices
-
-7.6 'grolj4'
-============
-
-The postprocessor 'grolj4' translates the output from GNU 'troff' into
-the *PCL5* output format suitable for printing on a *HP LaserJet 4*
-printer.  It is fully documented on its manual page, 'grolj4(1)'.
-
-* Menu:
-
-* Invoking grolj4::
-
-
-File: groff.info,  Node: Invoking grolj4,  Prev: grolj4,  Up: grolj4
-
-7.6.1 Invoking 'grolj4'
------------------------
-
-The postprocessor 'grolj4' accepts the following command-line options:
-
-'-cN'
-     Print N copies of each page.
-
-'-FDIR'
-     Put the directory 'DIR/devNAME' in front of the search path for the
-     font and device description files, given the target device NAME,
-     usually *lj4*.
-
-'-l'
-     Use landscape orientation.
-
-'-pSIZE'
-     Set the page dimensions.  Valid values for SIZE are: 'letter',
-     'legal', 'executive', 'a4', 'com10', 'monarch', 'c5', 'b5', 'd1'.
-
-'-v'
-     Print the version number.
-
-'-wN'
-     Set the line thickness to N/1000em.  Overrides the default value N
-     = 40.
-
-   The special drawing command '\D'R DH DV'' draws a horizontal
-rectangle from the current position to the position at offset (DH,DV).
-
-
-File: groff.info,  Node: grolbp,  Next: grohtml,  Prev: grolj4,  Up: Output Devices
-
-7.7 'grolbp'
-============
-
-The postprocessor 'grolbp' translates the output from GNU 'troff' into
-the *LBP* output format suitable for printing on *Canon CAPSL* printers.
-It is fully documented on its manual page, 'grolbp(1)'.
-
-* Menu:
-
-* Invoking grolbp::
-
-
-File: groff.info,  Node: Invoking grolbp,  Prev: grolbp,  Up: grolbp
-
-7.7.1 Invoking 'grolbp'
------------------------
-
-The postprocessor 'grolbp' accepts the following command-line options:
-
-'-cN'
-     Print N copies of each page.
-
-'-FDIR'
-     Put the directory 'DIR/devNAME' in front of the search path for the
-     font, prologue and device description files, given the target
-     device NAME, usually *lbp*.
-
-'-l'
-     Use landscape orientation.
-
-'-oORIENTATION'
-     Use the ORIENTATION specified: 'portrait' or 'landscape'.
-
-'-pPAPERSIZE'
-     Set the page dimensions.  See 'groff_font(5)' manual page for
-     details.
-
-'-wN'
-     Set the line thickness to N/1000em.  Overrides the default value N
-     = 40.
-
-'-v'
-     Print the version number.
-
-'-h'
-     Print command-line help.
-
-
-File: groff.info,  Node: grohtml,  Next: gxditview,  Prev: grolbp,  Up: Output Devices
-
-7.8 'grohtml'
-=============
-
-The 'grohtml' front end (which consists of a preprocessor,
-'pre-grohtml', and a device driver, 'post-grohtml') translates the
-output of GNU 'troff' to HTML.  Users should always invoke 'grohtml' via
-the 'groff' command with a '\-Thtml' option.  If no files are given,
-'grohtml' will read the standard input.  A filename of '-' will also
-cause 'grohtml' to read the standard input.  HTML output is written to
-the standard output.  When 'grohtml' is run by 'groff', options can be
-passed to 'grohtml' using 'groff''s '-P' option.
-
-   'grohtml' invokes 'groff' twice.  In the first pass, pictures,
-equations, and tables are rendered using the 'ps' device, and in the
-second pass HTML output is generated by the 'html' device.
-
-   'grohtml' always writes output in 'UTF-8' encoding and has built-in
-entities for all non-composite unicode characters.  In spite of this,
-'groff' may issue warnings about unknown special characters if they
-can't be found during the first pass.  Such warnings can be safely
-ignored unless the special characters appear inside a table or equation,
-in which case glyphs for these characters must be defined for the 'ps'
-device as well.
-
-   This output device is fully documented on its manual page,
-'grohtml(1)'.
-
-* Menu:
-
-* Invoking grohtml::
-* grohtml specific registers and strings::
-
-
-File: groff.info,  Node: Invoking grohtml,  Next: grohtml specific registers and strings,  Prev: grohtml,  Up: grohtml
-
-7.8.1 Invoking 'grohtml'
-------------------------
-
-The postprocessor 'grohtml' accepts the following command-line options:
-
-'-aBITS'
-     Use this number of BITS (= 1, 2 or 4) for text antialiasing.
-     Default: BITS = 4.
-
-'-a0'
-     Do not use text antialiasing.
-
-'-b'
-     Use white background.
-
-'-DDIR'
-     Store rendered images in the directory 'DIR'.
-
-'-FDIR'
-     Put the directory 'DIR/devNAME' in front of the search path for the
-     font, prologue and device description files, given the target
-     device NAME, usually *html*.
-
-'-gBITS'
-     Use this number of BITS (= 1, 2 or 4) for antialiasing of drawings.
-     Default: BITS = 4.
-
-'-g0'
-     Do not use antialiasing for drawings.
-
-'-h'
-     Use the 'B' element for section headings.
-
-'-iRESOLUTION'
-     Use the RESOLUTION for rendered images.  Default: RESOLUTION =
-     100dpi.
-
-'-ISTEM'
-     Set the images' STEM NAME.  Default: STEM = 'grohtml-XXX' (XXX is
-     the process ID).
-
-'-jSTEM'
-     Place each section in a separate file called 'STEM-N.html' (where N
-     is a generated section number).
-
-'-l'
-     Do not generate the table of contents.
-
-'-n'
-     Generate simple fragment identifiers.
-
-'-oOFFSET'
-     Use vertical paddding OFFSET for images.
-
-'-p'
-     Display the page rendering progress to 'stderr'.
-
-'-r'
-     Do not use horizontal rules to separate headers and footers.
-
-'-sSIZE'
-     Set the base font size, to be modified using the elements 'BIG' and
-     'SMALL'.
-
-'-SLEVEL'
-     Generate separate files for sections at level LEVEL.
-
-'-v'
-     Print the version number.
-
-'-V'
-     Generate a validator button at the bottom.
-
-'-y'
-     Generate a signature of groff after the validator button, if any.
-
-
-File: groff.info,  Node: grohtml specific registers and strings,  Prev: Invoking grohtml,  Up: grohtml
-
-7.8.2 'grohtml' specific registers and strings
-----------------------------------------------
-
- -- Register: \n[ps4html]
- -- String: \*[www-image-template]
-     The registers 'ps4html' and 'www-image-template' are defined by the
-     'pre-grohtml' preprocessor.  'pre-grohtml' reads in the 'troff'
-     input, marks up the inline equations and passes the result firstly
-     to
-
-          troff -Tps -rps4html=1 -dwww-image-template=TEMPLATE
-
-     and secondly to
-
-          troff -Thtml
-
-     or
-
-          troff -Txhtml
-
-     The POSTSCRIPT device is used to create all the image files (for
-     '-Thtml'; if '-Txhtml' is used, all equations are passed to 'geqn'
-     to produce MathML, and the register 'ps4html' enables the macro
-     sets to ignore floating keeps, footers, and headings.
-
-     The register 'www-image-template' is set to the user specified
-     template name or the default name.
-
-
-File: groff.info,  Node: gxditview,  Prev: grohtml,  Up: Output Devices
-
-7.9 'gxditview'
-===============
-
-* Menu:
-
-* Invoking gxditview::
-
-
-File: groff.info,  Node: Invoking gxditview,  Prev: gxditview,  Up: gxditview
-
-7.9.1 Invoking 'gxditview'
---------------------------
-
-
-File: groff.info,  Node: File formats,  Next: Installation,  Prev: Output Devices,  Up: Top
-
-8 File formats
-**************
-
-All files read and written by 'gtroff' are text files.  The following
-two sections describe their format.
-
-* Menu:
-
-* gtroff Output::
-* Font Files::
-
-
-File: groff.info,  Node: gtroff Output,  Next: Font Files,  Prev: File formats,  Up: File formats
-
-8.1 'gtroff' Output
-===================
-
-This section describes the intermediate output format of GNU 'troff'.
-This output is produced by a run of 'gtroff' before it is fed into a
-device postprocessor program.
-
-   As 'groff' is a wrapper program around 'gtroff' that automatically
-calls a postprocessor, this output does not show up normally.  This is
-why it is called "intermediate".  'groff' provides the option '-Z' to
-inhibit postprocessing, such that the produced intermediate output is
-sent to standard output just like calling 'gtroff' manually.
-
-   Here, the term "troff output" describes what is output by 'gtroff',
-while "intermediate output" refers to the language that is accepted by
-the parser that prepares this output for the postprocessors.  This
-parser is smarter on whitespace and implements obsolete elements for
-compatibility, otherwise both formats are the same.(1)  (*note gtroff
-Output-Footnote-1::)
-
-   The main purpose of the intermediate output concept is to facilitate
-the development of postprocessors by providing a common programming
-interface for all devices.  It has a language of its own that is
-completely different from the 'gtroff' language.  While the 'gtroff'
-language is a high-level programming language for text processing, the
-intermediate output language is a kind of low-level assembler language
-by specifying all positions on the page for writing and drawing.
-
-   The intermediate output produced by 'gtroff' is fairly readable,
-while output from AT&T 'troff' is rather hard to understand because of
-strange habits that are still supported, but not used any longer by
-'gtroff'.
-
-* Menu:
-
-* Language Concepts::
-* Command Reference::
-* Intermediate Output Examples::
-* Output Language Compatibility::
-
-
-File: groff.info,  Node: gtroff Output-Footnotes,  Up: gtroff Output
-
-   (1) The parser and postprocessor for intermediate output can be found
-in the file
-'GROFF-SOURCE-DIR/src/libs/libdriver/input.cpp'.
-
-
-File: groff.info,  Node: Language Concepts,  Next: Command Reference,  Prev: gtroff Output,  Up: gtroff Output
-
-8.1.1 Language Concepts
------------------------
-
-During the run of 'gtroff', the input data is cracked down to the
-information on what has to be printed at what position on the intended
-device.  So the language of the intermediate output format can be quite
-small.  Its only elements are commands with and without arguments.  In
-this section, the term "command" always refers to the intermediate
-output language, and never to the 'gtroff' language used for document
-formatting.  There are commands for positioning and text writing, for
-drawing, and for device controlling.
-
-* Menu:
-
-* Separation::
-* Argument Units::
-* Document Parts::
-
-
-File: groff.info,  Node: Separation,  Next: Argument Units,  Prev: Language Concepts,  Up: Language Concepts
-
-8.1.1.1 Separation
-..................
-
-AT&T 'troff' output has strange requirements on whitespace.  The
-'gtroff' output parser, however, is smart about whitespace by making it
-maximally optional.  The whitespace characters, i.e., the tab, space,
-and newline characters, always have a syntactical meaning.  They are
-never printable because spacing within the output is always done by
-positioning commands.
-
-   Any sequence of space or tab characters is treated as a single
-"syntactical space".  It separates commands and arguments, but is only
-required when there would occur a clashing between the command code and
-the arguments without the space.  Most often, this happens when
-variable-length command names, arguments, argument lists, or command
-clusters meet.  Commands and arguments with a known, fixed length need
-not be separated by syntactical space.
-
-   A line break is a syntactical element, too.  Every command argument
-can be followed by whitespace, a comment, or a newline character.  Thus
-a "syntactical line break" is defined to consist of optional syntactical
-space that is optionally followed by a comment, and a newline character.
-
-   The normal commands, those for positioning and text, consist of a
-single letter taking a fixed number of arguments.  For historical
-reasons, the parser allows to stack such commands on the same line, but
-fortunately, in 'gtroff''s intermediate output, every command with at
-least one argument is followed by a line break, thus providing excellent
-readability.
-
-   The other commands - those for drawing and device controlling - have
-a more complicated structure; some recognize long command names, and
-some take a variable number of arguments.  So all 'D' and 'x' commands
-were designed to request a syntactical line break after their last
-argument.  Only one command, 'x X', has an argument that can stretch
-over several lines; all other commands must have all of their arguments
-on the same line as the command, i.e., the arguments may not be split by
-a line break.
-
-   Empty lines (these are lines containing only space and/or a comment),
-can occur everywhere.  They are just ignored.
-
-
-File: groff.info,  Node: Argument Units,  Next: Document Parts,  Prev: Separation,  Up: Language Concepts
-
-8.1.1.2 Argument Units
-......................
-
-Some commands take integer arguments that are assumed to represent
-values in a measurement unit, but the letter for the corresponding scale
-indicator is not written with the output command arguments.  Most
-commands assume the scale indicator 'u', the basic unit of the device,
-some use 'z', the scaled point unit of the device, while others, such as
-the color commands, expect plain integers.
-
-   Note that single characters can have the eighth bit set, as can the
-names of fonts and special characters.  The names of characters and
-fonts can be of arbitrary length.  A character that is to be printed is
-always in the current font.
-
-   A string argument is always terminated by the next whitespace
-character (space, tab, or newline); an embedded '#' character is
-regarded as part of the argument, not as the beginning of a comment
-command.  An integer argument is already terminated by the next
-non-digit character, which then is regarded as the first character of
-the next argument or command.
-
-
-File: groff.info,  Node: Document Parts,  Prev: Argument Units,  Up: Language Concepts
-
-8.1.1.3 Document Parts
-......................
-
-A correct intermediate output document consists of two parts, the
-"prologue" and the "body".
-
-   The task of the prologue is to set the general device parameters
-using three exactly specified commands.  'gtroff''s prologue is
-guaranteed to consist of the following three lines (in that order):
-
-     x T DEVICE
-     x res N H V
-     x init
-
-with the arguments set as outlined in *note Device Control Commands::.
-Note that the parser for the intermediate output format is able to
-swallow additional whitespace and comments as well even in the prologue.
-
-   The body is the main section for processing the document data.
-Syntactically, it is a sequence of any commands different from the ones
-used in the prologue.  Processing is terminated as soon as the first
-'x stop' command is encountered; the last line of any 'gtroff'
-intermediate output always contains such a command.
-
-   Semantically, the body is page oriented.  A new page is started by a
-'p' command.  Positioning, writing, and drawing commands are always done
-within the current page, so they cannot occur before the first 'p'
-command.  Absolute positioning (by the 'H' and 'V' commands) is done
-relative to the current page; all other positioning is done relative to
-the current location within this page.
-
-
-File: groff.info,  Node: Command Reference,  Next: Intermediate Output Examples,  Prev: Language Concepts,  Up: gtroff Output
-
-8.1.2 Command Reference
------------------------
-
-This section describes all intermediate output commands, both from AT&T
-'troff' as well as the 'gtroff' extensions.
-
-* Menu:
-
-* Comment Command::
-* Simple Commands::
-* Graphics Commands::
-* Device Control Commands::
-* Obsolete Command::
-
-
-File: groff.info,  Node: Comment Command,  Next: Simple Commands,  Prev: Command Reference,  Up: Command Reference
-
-8.1.2.1 Comment Command
-.......................
-
-'#ANYTHING<end of line>'
-     A comment.  Ignore any characters from the '#' character up to the
-     next newline character.
-
-     This command is the only possibility for commenting in the
-     intermediate output.  Each comment can be preceded by arbitrary
-     syntactical space; every command can be terminated by a comment.
-
-
-File: groff.info,  Node: Simple Commands,  Next: Graphics Commands,  Prev: Comment Command,  Up: Command Reference
-
-8.1.2.2 Simple Commands
-.......................
-
-The commands in this subsection have a command code consisting of a
-single character, taking a fixed number of arguments.  Most of them are
-commands for positioning and text writing.  These commands are smart
-about whitespace.  Optionally, syntactical space can be inserted before,
-after, and between the command letter and its arguments.  All of these
-commands are stackable, i.e., they can be preceded by other simple
-commands or followed by arbitrary other commands on the same line.  A
-separating syntactical space is only necessary when two integer
-arguments would clash or if the preceding argument ends with a string
-argument.
-
-'C XXX<whitespace>'
-     Print a special character named XXX.  The trailing syntactical
-     space or line break is necessary to allow glyph names of arbitrary
-     length.  The glyph is printed at the current print position; the
-     glyph's size is read from the font file.  The print position is not
-     changed.
-
-'c G'
-     Print glyph G at the current print position;(1) (*note Simple
-     Commands-Footnote-1::) the glyph's size is read from the font file.
-     The print position is not changed.
-
-'f N'
-     Set font to font number N (a non-negative integer).
-
-'H N'
-     Move right to the absolute vertical position N (a non-negative
-     integer in basic units 'u' relative to left edge of current page.
-
-'h N'
-     Move N (a non-negative integer) basic units 'u' horizontally to the
-     right.  The original UNIX troff manual allows negative values for N
-     also, but 'gtroff' doesn't use this.
-
-'m COLOR-SCHEME [COMPONENT ...]'
-     Set the color for text (glyphs), line drawing, and the outline of
-     graphic objects using different color schemes; the analoguous
-     command for the filling color of graphic objects is 'DF'.  The
-     color components are specified as integer arguments between 0 and
-     65536.  The number of color components and their meaning vary for
-     the different color schemes.  These commands are generated by
-     'gtroff''s escape sequence '\m'.  No position changing.  These
-     commands are a 'gtroff' extension.
-
-     'mc CYAN MAGENTA YELLOW'
-          Set color using the CMY color scheme, having the 3 color
-          components CYAN, MAGENTA, and YELLOW.
-
-     'md'
-          Set color to the default color value (black in most cases).
-          No component arguments.
-
-     'mg GRAY'
-          Set color to the shade of gray given by the argument, an
-          integer between 0 (black) and 65536 (white).
-
-     'mk CYAN MAGENTA YELLOW BLACK'
-          Set color using the CMYK color scheme, having the 4 color
-          components CYAN, MAGENTA, YELLOW, and BLACK.
-
-     'mr RED GREEN BLUE'
-          Set color using the RGB color scheme, having the 3 color
-          components RED, GREEN, and BLUE.
-
-'N N'
-     Print glyph with index N (a non-negative integer) of the current
-     font.  This command is a 'gtroff' extension.
-
-'n B A'
-     Inform the device about a line break, but no positioning is done by
-     this command.  In AT&T 'troff', the integer arguments B and A
-     informed about the space before and after the current line to make
-     the intermediate output more human readable without performing any
-     action.  In 'groff', they are just ignored, but they must be
-     provided for compatibility reasons.
-
-'p N'
-     Begin a new page in the outprint.  The page number is set to N.
-     This page is completely independent of pages formerly processed
-     even if those have the same page number.  The vertical position on
-     the outprint is automatically set to 0.  All positioning, writing,
-     and drawing is always done relative to a page, so a 'p' command
-     must be issued before any of these commands.
-
-'s N'
-     Set point size to N scaled points (this is unit 'z').  AT&T 'troff'
-     used the unit points ('p') instead.  *Note Output Language
-     Compatibility::.
-
-'t XXX<whitespace>'
-'t XXX DUMMY-ARG<whitespace>'
-     Print a word, i.e., a sequence of characters XXX representing
-     output glyphs which names are single characters, terminated by a
-     space character or a line break; an optional second integer
-     argument is ignored (this allows the formatter to generate an even
-     number of arguments).  The first glyph should be printed at the
-     current position, the current horizontal position should then be
-     increased by the width of the first glyph, and so on for each
-     glyph.  The widths of the glyphs are read from the font file,
-     scaled for the current point size, and rounded to a multiple of the
-     horizontal resolution.  Special characters cannot be printed using
-     this command (use the 'C' command for special characters).  This
-     command is a 'gtroff' extension; it is only used for devices whose
-     'DESC' file contains the 'tcommand' keyword (*note DESC File
-     Format::).
-
-'u N XXX<whitespace>'
-     Print word with track kerning.  This is the same as the 't' command
-     except that after printing each glyph, the current horizontal
-     position is increased by the sum of the width of that glyph and N
-     (an integer in basic units 'u').  This command is a 'gtroff'
-     extension; it is only used for devices whose 'DESC' file contains
-     the 'tcommand' keyword (*note DESC File Format::).
-
-'V N'
-     Move down to the absolute vertical position N (a non-negative
-     integer in basic units 'u') relative to upper edge of current page.
-
-'v N'
-     Move N basic units 'u' down (N is a non-negative integer).  The
-     original UNIX troff manual allows negative values for N also, but
-     'gtroff' doesn't use this.
-
-'w'
-     Informs about a paddable white space to increase readability.  The
-     spacing itself must be performed explicitly by a move command.
-
-
-File: groff.info,  Node: Simple Commands-Footnotes,  Up: Simple Commands
-
-   (1) 'c' is actually a misnomer since it outputs a glyph.
-
-
-File: groff.info,  Node: Graphics Commands,  Next: Device Control Commands,  Prev: Simple Commands,  Up: Command Reference
-
-8.1.2.3 Graphics Commands
-.........................
-
-Each graphics or drawing command in the intermediate output starts with
-the letter 'D', followed by one or two characters that specify a
-subcommand; this is followed by a fixed or variable number of integer
-arguments that are separated by a single space character.  A 'D' command
-may not be followed by another command on the same line (apart from a
-comment), so each 'D' command is terminated by a syntactical line break.
-
-   'gtroff' output follows the classical spacing rules (no space between
-command and subcommand, all arguments are preceded by a single space
-character), but the parser allows optional space between the command
-letters and makes the space before the first argument optional.  As
-usual, each space can be any sequence of tab and space characters.
-
-   Some graphics commands can take a variable number of arguments.  In
-this case, they are integers representing a size measured in basic units
-'u'.  The arguments called H1, H2, ..., HN stand for horizontal
-distances where positive means right, negative left.  The arguments
-called V1, V2, ..., VN stand for vertical distances where positive means
-down, negative up.  All these distances are offsets relative to the
-current location.
-
-   Each graphics command directly corresponds to a similar 'gtroff' '\D'
-escape sequence.  *Note Drawing Requests::.
-
-   Unknown 'D' commands are assumed to be device-specific.  Its
-arguments are parsed as strings; the whole information is then sent to
-the postprocessor.
-
-   In the following command reference, the syntax element <line break>
-means a syntactical line break as defined above.
-
-'D~ H1 V1 H2 V2 ... HN VN<line break>'
-     Draw B-spline from current position to offset (H1,V1), then to
-     offset (H2,V2), if given, etc. up to (HN,VN).  This command takes a
-     variable number of argument pairs; the current position is moved to
-     the terminal point of the drawn curve.
-
-'Da H1 V1 H2 V2<line break>'
-     Draw arc from current position to (H1,V1)+(H2,V2) with center at
-     (H1,V1); then move the current position to the final point of the
-     arc.
-
-'DC D<line break>'
-'DC D DUMMY-ARG<line break>'
-     Draw a solid circle using the current fill color with diameter D
-     (integer in basic units 'u') with leftmost point at the current
-     position; then move the current position to the rightmost point of
-     the circle.  An optional second integer argument is ignored (this
-     allows the formatter to generate an even number of arguments).
-     This command is a 'gtroff' extension.
-
-'Dc D<line break>'
-     Draw circle line with diameter D (integer in basic units 'u') with
-     leftmost point at the current position; then move the current
-     position to the rightmost point of the circle.
-
-'DE H V<line break>'
-     Draw a solid ellipse in the current fill color with a horizontal
-     diameter of H and a vertical diameter of V (both integers in basic
-     units 'u') with the leftmost point at the current position; then
-     move to the rightmost point of the ellipse.  This command is a
-     'gtroff' extension.
-
-'De H V<line break>'
-     Draw an outlined ellipse with a horizontal diameter of H and a
-     vertical diameter of V (both integers in basic units 'u') with the
-     leftmost point at current position; then move to the rightmost
-     point of the ellipse.
-
-'DF COLOR-SCHEME [COMPONENT ...]<line break>'
-     Set fill color for solid drawing objects using different color
-     schemes; the analoguous command for setting the color of text, line
-     graphics, and the outline of graphic objects is 'm'.  The color
-     components are specified as integer arguments between 0 and 65536.
-     The number of color components and their meaning vary for the
-     different color schemes.  These commands are generated by
-     'gtroff''s escape sequences '\D'F ...'' and '\M' (with no other
-     corresponding graphics commands).  No position changing.  This
-     command is a 'gtroff' extension.
-
-     'DFc CYAN MAGENTA YELLOW<line break>'
-          Set fill color for solid drawing objects using the CMY color
-          scheme, having the 3 color components CYAN, MAGENTA, and
-          YELLOW.
-
-     'DFd<line break>'
-          Set fill color for solid drawing objects to the default fill
-          color value (black in most cases).  No component arguments.
-
-     'DFg GRAY<line break>'
-          Set fill color for solid drawing objects to the shade of gray
-          given by the argument, an integer between 0 (black) and 65536
-          (white).
-
-     'DFk CYAN MAGENTA YELLOW BLACK<line break>'
-          Set fill color for solid drawing objects using the CMYK color
-          scheme, having the 4 color components CYAN, MAGENTA, YELLOW,
-          and BLACK.
-
-     'DFr RED GREEN BLUE<line break>'
-          Set fill color for solid drawing objects using the RGB color
-          scheme, having the 3 color components RED, GREEN, and BLUE.
-
-'Df N<line break>'
-     The argument N must be an integer in the range -32767 to 32767.
-
-     0 <= N <= 1000
-          Set the color for filling solid drawing objects to a shade of
-          gray, where 0 corresponds to solid white, 1000 (the default)
-          to solid black, and values in between to intermediate shades
-          of gray; this is obsoleted by command 'DFg'.
-
-     N < 0 or N > 1000
-          Set the filling color to the color that is currently being
-          used for the text and the outline, see command 'm'.  For
-          example, the command sequence
-
-               mg 0 0 65536
-               Df -1
-
-          sets all colors to blue.
-
-     No position changing.  This command is a 'gtroff' extension.
-
-'Dl H V<line break>'
-     Draw line from current position to offset (H,V) (integers in basic
-     units 'u'); then set current position to the end of the drawn line.
-
-'Dp H1 V1 H2 V2 ... HN VN<line break>'
-     Draw a polygon line from current position to offset (H1,V1), from
-     there to offset (H2,V2), etc. up to offset (HN,VN), and from there
-     back to the starting position.  For historical reasons, the
-     position is changed by adding the sum of all arguments with odd
-     index to the actual horizontal position and the even ones to the
-     vertical position.  Although this doesn't make sense it is kept for
-     compatibility.  This command is a 'gtroff' extension.
-
-'Dp H1 V1 H2 V2 ... HN VN<line break>'
-     Draw a solid polygon in the current fill color rather than an
-     outlined polygon, using the same arguments and positioning as the
-     corresponding 'Dp' command.  This command is a 'gtroff' extension.
-
-'Dt N<line break>'
-     Set the current line thickness to N (an integer in basic units 'u')
-     if N>0; if N=0 select the smallest available line thickness; if N<0
-     set the line thickness proportional to the point size (this is the
-     default before the first 'Dt' command was specified).  For
-     historical reasons, the horizontal position is changed by adding
-     the argument to the actual horizontal position, while the vertical
-     position is not changed.  Although this doesn't make sense it is
-     kept for compatibility.  This command is a 'gtroff' extension.
-
-
-File: groff.info,  Node: Device Control Commands,  Next: Obsolete Command,  Prev: Graphics Commands,  Up: Command Reference
-
-8.1.2.4 Device Control Commands
-...............................
-
-Each device control command starts with the letter 'x', followed by a
-space character (optional or arbitrary space or tab in 'gtroff') and a
-subcommand letter or word; each argument (if any) must be preceded by a
-syntactical space.  All 'x' commands are terminated by a syntactical
-line break; no device control command can be followed by another command
-on the same line (except a comment).
-
-   The subcommand is basically a single letter, but to increase
-readability, it can be written as a word, i.e., an arbitrary sequence of
-characters terminated by the next tab, space, or newline character.  All
-characters of the subcommand word but the first are simply ignored.  For
-example, 'gtroff' outputs the initialization command 'x i' as 'x init'
-and the resolution command 'x r' as 'x res'.
-
-   In the following, the syntax element <line break> means a syntactical
-line break (*note Separation::).
-
-'xF NAME<line break>'
-     The 'F' stands for FILENAME.
-
-     Use NAME as the intended name for the current file in error
-     reports.  This is useful for remembering the original file name
-     when 'gtroff' uses an internal piping mechanism.  The input file is
-     not changed by this command.  This command is a 'gtroff' extension.
-
-'xf N S<line break>'
-     The 'f' stands for FONT.
-
-     Mount font position N (a non-negative integer) with font named S (a
-     text word).  *Note Font Positions::.
-
-'xH N<line break>'
-     The 'H' stands for HEIGHT.
-
-     Set glyph height to N (a positive integer in scaled points 'z').
-     AT&T 'troff' uses the unit points ('p') instead.  *Note Output
-     Language Compatibility::.
-
-'xi<line break>'
-     The 'i' stands for INIT.
-
-     Initialize device.  This is the third command of the prologue.
-
-'xp<line break>'
-     The 'p' stands for PAUSE.
-
-     Parsed but ignored.  The original UNIX troff manual writes
-
-          pause device, can be restarted
-
-'xr N H V<line break>'
-     The 'r' stands for RESOLUTION.
-
-     Resolution is N, while H is the minimal horizontal motion, and V
-     the minimal vertical motion possible with this device; all
-     arguments are positive integers in basic units 'u' per inch.  This
-     is the second command of the prologue.
-
-'xS N<line break>'
-     The 'S' stands for SLANT.
-
-     Set slant to N (an integer in basic units 'u').
-
-'xs<line break>'
-     The 's' stands for STOP.
-
-     Terminates the processing of the current file; issued as the last
-     command of any intermediate troff output.
-
-'xt<line break>'
-     The 't' stands for TRAILER.
-
-     Generate trailer information, if any.  In GTROFF, this is actually
-     just ignored.
-
-'xT XXX<line break>'
-     The 'T' stands for TYPESETTER.
-
-     Set name of device to word XXX, a sequence of characters ended by
-     the next white space character.  The possible device names coincide
-     with those from the 'groff' '-T' option.  This is the first command
-     of the prologue.
-
-'xu N<line break>'
-     The 'u' stands for UNDERLINE.
-
-     Configure underlining of spaces.  If N is 1, start underlining of
-     spaces; if N is 0, stop underlining of spaces.  This is needed for
-     the 'cu' request in nroff mode and is ignored otherwise.  This
-     command is a 'gtroff' extension.
-
-'xX ANYTHING<line break>'
-     The 'x' stands for X-ESCAPE.
-
-     Send string ANYTHING uninterpreted to the device.  If the line
-     following this command starts with a '+' character this line is
-     interpreted as a continuation line in the following sense.  The '+'
-     is ignored, but a newline character is sent instead to the device,
-     the rest of the line is sent uninterpreted.  The same applies to
-     all following lines until the first character of a line is not a
-     '+' character.  This command is generated by the 'gtroff' escape
-     sequence '\X'.  The line-continuing feature is a 'gtroff'
-     extension.
-
-
-File: groff.info,  Node: Obsolete Command,  Prev: Device Control Commands,  Up: Command Reference
-
-8.1.2.5 Obsolete Command
-........................
-
-In AT&T 'troff' output, the writing of a single glyph is mostly done by
-a very strange command that combines a horizontal move and a single
-character giving the glyph name.  It doesn't have a command code, but is
-represented by a 3-character argument consisting of exactly 2 digits and
-a character.
-
-DDG
-     Move right DD (exactly two decimal digits) basic units 'u', then
-     print glyph G (represented as a single character).
-
-     In 'gtroff', arbitrary syntactical space around and within this
-     command is allowed to be added.  Only when a preceding command on
-     the same line ends with an argument of variable length a separating
-     space is obligatory.  In AT&T 'troff', large clusters of these and
-     other commands are used, mostly without spaces; this made such
-     output almost unreadable.
-
-   For modern high-resolution devices, this command does not make sense
-because the width of the glyphs can become much larger than two decimal
-digits.  In 'gtroff', this is only used for the devices 'X75', 'X75-12',
-'X100', and 'X100-12'.  For other devices, the commands 't' and 'u'
-provide a better functionality.
-
-
-File: groff.info,  Node: Intermediate Output Examples,  Next: Output Language Compatibility,  Prev: Command Reference,  Up: gtroff Output
-
-8.1.3 Intermediate Output Examples
-----------------------------------
-
-This section presents the intermediate output generated from the same
-input for three different devices.  The input is the sentence 'hell
-world' fed into 'gtroff' on the command line.
-
-High-resolution device 'ps'
-
-     This is the standard output of 'gtroff' if no '-T' option is given.
-
-          shell> echo "hell world" | groff -Z -T ps
-
-          x T ps
-          x res 72000 1 1
-          x init
-          p1
-          x font 5 TR
-          f5
-          s10000
-          V12000
-          H72000
-          thell
-          wh2500
-          tw
-          H96620
-          torld
-          n12000 0
-          x trailer
-          V792000
-          x stop
-
-     This output can be fed into 'grops' to get its representation as a
-     POSTSCRIPT file.
-
-Low-resolution device 'latin1'
-
-     This is similar to the high-resolution device except that the
-     positioning is done at a minor scale.  Some comments (lines
-     starting with '#') were added for clarification; they were not
-     generated by the formatter.
-
-          shell> echo "hell world" | groff -Z -T latin1
-
-          # prologue
-          x T latin1
-          x res 240 24 40
-          x init
-          # begin a new page
-          p1
-          # font setup
-          x font 1 R
-          f1
-          s10
-          # initial positioning on the page
-          V40
-          H0
-          # write text `hell'
-          thell
-          # inform about space, and issue a horizontal jump
-          wh24
-          # write text `world'
-          tworld
-          # announce line break, but do nothing because ...
-          n40 0
-          # ... the end of the document has been reached
-          x trailer
-          V2640
-          x stop
-
-     This output can be fed into 'grotty' to get a formatted text
-     document.
-
-AT&T 'troff' output
-     Since a computer monitor has a very low resolution compared to
-     modern printers the intermediate output for the X Window devices
-     can use the jump-and-write command with its 2-digit displacements.
-
-          shell> echo "hell world" | groff -Z -T X100
-
-          x T X100
-          x res 100 1 1
-          x init
-          p1
-          x font 5 TR
-          f5
-          s10
-          V16
-          H100
-          # write text with jump-and-write commands
-          ch07e07l03lw06w11o07r05l03dh7
-          n16 0
-          x trailer
-          V1100
-          x stop
-
-     This output can be fed into 'xditview' or 'gxditview' for
-     displaying in X.
-
-     Due to the obsolete jump-and-write command, the text clusters in
-     the AT&T 'troff' output are almost unreadable.
-
-
-File: groff.info,  Node: Output Language Compatibility,  Prev: Intermediate Output Examples,  Up: gtroff Output
-
-8.1.4 Output Language Compatibility
------------------------------------
-
-The intermediate output language of AT&T 'troff' was first documented in
-the UNIX troff manual, with later additions documented in 'A
-Typesetter-indenpendent TROFF', written by Brian Kernighan.
-
-   The 'gtroff' intermediate output format is compatible with this
-specification except for the following features.
-
-   * The classical quasi device independence is not yet implemented.
-
-   * The old hardware was very different from what we use today.  So the
-     'groff' devices are also fundamentally different from the ones in
-     AT&T 'troff'.  For example, the AT&T POSTSCRIPT device is called
-     'post' and has a resolution of only 720 units per inch, suitable
-     for printers 20 years ago, while 'groff''s 'ps' device has a
-     resolution of 72000 units per inch.  Maybe, by implementing some
-     rescaling mechanism similar to the classical quasi device
-     independence, 'groff' could emulate AT&T's 'post' device.
-
-   * The B-spline command 'D~' is correctly handled by the intermediate
-     output parser, but the drawing routines aren't implemented in some
-     of the postprocessor programs.
-
-   * The argument of the commands 's' and 'x H' has the implicit unit
-     scaled point 'z' in 'gtroff', while AT&T 'troff' has point ('p').
-     This isn't an incompatibility but a compatible extension, for both
-     units coincide for all devices without a 'sizescale' parameter in
-     the 'DESC' file, including all postprocessors from AT&T and
-     'groff''s text devices.  The few 'groff' devices with a 'sizescale'
-     parameter either do not exist for AT&T 'troff', have a different
-     name, or seem to have a different resolution.  So conflicts are
-     very unlikely.
-
-   * The position changing after the commands 'Dp', 'DP', and 'Dt' is
-     illogical, but as old versions of 'gtroff' used this feature it is
-     kept for compatibility reasons.
-
-
-File: groff.info,  Node: Font Files,  Prev: gtroff Output,  Up: File formats
-
-8.2 Font Files
-==============
-
-The 'gtroff' font format is roughly a superset of the 'ditroff' font
-format (as used in later versions of AT&T 'troff' and its descendants).
-Unlike the 'ditroff' font format, there is no associated binary format;
-all files are text files.(1)  (*note Font Files-Footnote-1::) The font
-files for device NAME are stored in a directory 'devNAME'.  There are
-two types of file: a device description file called 'DESC' and for each
-font F a font file called 'F'.
-
-* Menu:
-
-* DESC File Format::
-* Font File Format::
-
-
-File: groff.info,  Node: Font Files-Footnotes,  Up: Font Files
-
-   (1) Plan 9 'troff' has also abandoned the binary format.
-
-
-File: groff.info,  Node: DESC File Format,  Next: Font File Format,  Prev: Font Files,  Up: Font Files
-
-8.2.1 'DESC' File Format
-------------------------
-
-The 'DESC' file can contain the following types of line.  Except for the
-'charset' keyword, which must comes last (if at all), the order of the
-lines is not important.  Later entries in the file, however, override
-previous values.
-
-'charset'
-     This line and everything following in the file are ignored.  It is
-     allowed for the sake of backwards compatibility.
-
-'family FAM'
-     The default font family is FAM.
-
-'fonts N F1 F2 F3 ... FN'
-     Fonts F1 ... FN are mounted in the font positions M+1, ..., M+N
-     where M is the number of styles.  This command may extend over more
-     than one line.  A font name of 0 means no font is mounted on the
-     corresponding font position.
-
-'hor N'
-     The horizontal resolution is N machine units.  All horizontal
-     quantities are rounded to be multiples of this value.
-
-'image_generator STRING'
-     Needed for 'grohtml' only.  It specifies the program to generate
-     PNG images from POSTSCRIPT input.  Under GNU/Linux this is usually
-     'gs' but under other systems (notably cygwin) it might be set to
-     another name.
-
-'paperlength N'
-     The physical vertical dimension of the output medium in machine
-     units.  This isn't used by 'troff' itself but by output devices.
-     Deprecated.  Use 'papersize' instead.
-
-'papersize STRING ...'
-     Select a paper size.  Valid values for STRING are the ISO paper
-     types 'A0'-'A7', 'B0'-'B7', 'C0'-'C7', 'D0'-'D7', 'DL', and the US
-     paper types 'letter', 'legal', 'tabloid', 'ledger', 'statement',
-     'executive', 'com10', and 'monarch'.  Case is not significant for
-     STRING if it holds predefined paper types.  Alternatively, STRING
-     can be a file name (e.g. '/etc/papersize'); if the file can be
-     opened, 'groff' reads the first line and tests for the above paper
-     sizes.  Finally, STRING can be a custom paper size in the format
-     'LENGTH,WIDTH' (no spaces before and after the comma).  Both LENGTH
-     and WIDTH must have a unit appended; valid values are 'i' for
-     inches, 'C' for centimeters, 'p' for points, and 'P' for picas.
-     Example: '12c,235p'.  An argument that starts with a digit is
-     always treated as a custom paper format.  'papersize' sets both the
-     vertical and horizontal dimension of the output medium.
-
-     More than one argument can be specified; 'groff' scans from left to
-     right and uses the first valid paper specification.
-
-'paperwidth N'
-     The physical horizontal dimension of the output medium in machine
-     units.  This isn't used by 'troff' itself but by output devices.
-     Deprecated.  Use 'papersize' instead.
-
-'pass_filenames'
-     Tell 'gtroff' to emit the name of the source file currently being
-     processed.  This is achieved by the intermediate output command
-     'F'.  Currently, this is only used by the 'grohtml' output device.
-
-'postpro PROGRAM'
-     Call PROGRAM as a postprocessor.  For example, the line
-
-          postpro grodvi
-
-     in the file 'devdvi/DESC' makes 'groff' call 'grodvi' if option
-     '-Tdvi' is given (and '-Z' isn't used).
-
-'prepro PROGRAM'
-     Call PROGRAM as a preprocessor.  Currently, this keyword is used by
-     'groff' with option '-Thtml' or '-Txhtml' only.
-
-'print PROGRAM'
-     Use PROGRAM as a spooler program for printing.  If omitted, the
-     '-l' and '-L' options of 'groff' are ignored.
-
-'res N'
-     There are N machine units per inch.
-
-'sizes S1 S2 ... SN 0'
-     This means that the device has fonts at S1, S2, ... SN scaled
-     points.  The list of sizes must be terminated by 0 (this is digit
-     zero).  Each SI can also be a range of sizes M-N.  The list can
-     extend over more than one line.
-
-'sizescale N'
-     The scale factor for point sizes.  By default this has a value
-     of 1.  One scaled point is equal to one point/N.  The arguments to
-     the 'unitwidth' and 'sizes' commands are given in scaled points.
-     *Note Fractional Type Sizes::, for more information.
-
-'styles S1 S2 ... SM'
-     The first M font positions are associated with styles S1 ... SM.
-
-'tcommand'
-     This means that the postprocessor can handle the 't' and 'u'
-     intermediate output commands.
-
-'unicode'
-     Indicate that the output device supports the complete Unicode
-     repertoire.  Useful only for devices that produce _character
-     entities_ instead of glyphs.
-
-     If 'unicode' is present, no 'charset' section is required in the
-     font description files since the Unicode handling built into
-     'groff' is used.  However, if there are entries in a 'charset'
-     section, they either override the default mappings for those
-     particular characters or add new mappings (normally for composite
-     characters).
-
-     This is used for '-Tutf8', '-Thtml', and '-Txhtml'.
-
-'unitwidth N'
-     Quantities in the font files are given in machine units for fonts
-     whose point size is N scaled points.
-
-'unscaled_charwidths'
-     Make the font handling module always return unscaled character
-     widths.  Needed for the 'grohtml' device.
-
-'use_charnames_in_special'
-     This command indicates that 'gtroff' should encode special
-     characters inside special commands.  Currently, this is only used
-     by the 'grohtml' output device.  *Note Postprocessor Access::.
-
-'vert N'
-     The vertical resolution is N machine units.  All vertical
-     quantities are rounded to be multiples of this value.
-
-   The 'res', 'unitwidth', 'fonts', and 'sizes' lines are mandatory.
-Other commands are ignored by 'gtroff' but may be used by postprocessors
-to store arbitrary information about the device in the 'DESC' file.
-
-   Here a list of obsolete keywords that are recognized by 'groff' but
-completely ignored: 'spare1', 'spare2', 'biggestfont'.
-
-
-File: groff.info,  Node: Font File Format,  Prev: DESC File Format,  Up: Font Files
-
-8.2.2 Font File Format
-----------------------
-
-A "font file", also (and probably better) called a "font description
-file", has two sections.  The first section is a sequence of lines each
-containing a sequence of blank delimited words; the first word in the
-line is a key, and subsequent words give a value for that key.
-
-'name F'
-     The name of the font is F.
-
-'spacewidth N'
-     The normal width of a space is N.
-
-'slant N'
-     The glyphs of the font have a slant of N degrees.  (Positive means
-     forward.)
-
-'ligatures LIG1 LIG2 ... LIGN [0]'
-     Glyphs LIG1, LIG2, ..., LIGN are ligatures; possible ligatures are
-     'ff', 'fi', 'fl', 'ffi' and 'ffl'.  For backwards compatibility,
-     the list of ligatures may be terminated with a 0.  The list of
-     ligatures may not extend over more than one line.
-
-'special'
-     The font is "special"; this means that when a glyph is requested
-     that is not present in the current font, it is searched for in any
-     special fonts that are mounted.
-
-   Other commands are ignored by 'gtroff' but may be used by
-postprocessors to store arbitrary information about the font in the font
-file.
-
-   The first section can contain comments, which start with the '#'
-character and extend to the end of a line.
-
-   The second section contains one or two subsections.  It must contain
-a 'charset' subsection and it may also contain a 'kernpairs' subsection.
-These subsections can appear in any order.  Each subsection starts with
-a word on a line by itself.
-
-   The word 'charset' starts the character set subsection.(1)  (*note
-Font File Format-Footnote-1::) The 'charset' line is followed by a
-sequence of lines.  Each line gives information for one glyph.  A line
-comprises a number of fields separated by blanks or tabs.  The format is
-
-     NAME METRICS TYPE CODE [ENTITY-NAME] ['--' COMMENT]
-
-NAME identifies the glyph name(2) (*note Font File Format-Footnote-2::):
-If NAME is a single character C then it corresponds to the 'gtroff'
-input character C; if it is of the form '\C' where C is a single
-character, then it corresponds to the special character '\[C]';
-otherwise it corresponds to the special character '\[NAME]'.  If it is
-exactly two characters XX it can be entered as '\(XX'.  Note that
-single-letter special characters can't be accessed as '\C'; the only
-exception is '\-', which is identical to '\[-]'.
-
-   'gtroff' supports 8-bit input characters; however some utilities have
-difficulties with eight-bit characters.  For this reason, there is a
-convention that the entity name 'charN' is equivalent to the single
-input character whose code is N.  For example, 'char163' would be
-equivalent to the character with code 163, which is the pounds sterling
-sign in the ISO Latin-1 character set.  You shouldn't use 'charN'
-entities in font description files since they are related to input, not
-output.  Otherwise, you get hard-coded connections between input and
-output encoding, which prevents use of different (input) character sets.
-
-   The name '---' is special and indicates that the glyph is unnamed;
-such glyphs can only be used by means of the '\N' escape sequence in
-'gtroff'.
-
-   The TYPE field gives the glyph type:
-
-'1'
-     the glyph has a descender, for example, 'p';
-
-'2'
-     the glyph has an ascender, for example, 'b';
-
-'3'
-     the glyph has both an ascender and a descender, for example, '('.
-
-   The CODE field gives the code that the postprocessor uses to print
-the glyph.  The glyph can also be input to 'gtroff' using this code by
-means of the '\N' escape sequence.  CODE can be any integer.  If it
-starts with '0' it is interpreted as octal; if it starts with '0x' or
-'0X' it is interpreted as hexadecimal.  Note, however, that the '\N'
-escape sequence only accepts a decimal integer.
-
-   The ENTITY-NAME field gives an ASCII string identifying the glyph
-that the postprocessor uses to print the 'gtroff' glyph NAME.  This
-field is optional and has been introduced so that the 'grohtml' device
-driver can encode its character set.  For example, the glyph '\[Po]' is
-represented as '&pound;' in HTML 4.0.
-
-   Anything on the line after the ENTITY-NAME field resp. after '--' is
-ignored.
-
-   The METRICS field has the form:
-
-     WIDTH[','HEIGHT[','DEPTH[','ITALIC-CORRECTION
-       [','LEFT-ITALIC-CORRECTION[','SUBSCRIPT-CORRECTION]]]]]
-
-There must not be any spaces between these subfields (it has been split
-here into two lines for better legibility only).  Missing subfields are
-assumed to be 0.  The subfields are all decimal integers.  Since there
-is no associated binary format, these values are not required to fit
-into a variable of type 'char' as they are in 'ditroff'.  The WIDTH
-subfield gives the width of the glyph.  The HEIGHT subfield gives the
-height of the glyph (upwards is positive); if a glyph does not extend
-above the baseline, it should be given a zero height, rather than a
-negative height.  The DEPTH subfield gives the depth of the glyph, that
-is, the distance from the baseline to the lowest point below the
-baseline to which the glyph extends (downwards is positive); if a glyph
-does not extend below the baseline, it should be given a zero depth,
-rather than a negative depth.  The ITALIC-CORRECTION subfield gives the
-amount of space that should be added after the glyph when it is
-immediately to be followed by a glyph from a roman font.  The
-LEFT-ITALIC-CORRECTION subfield gives the amount of space that should be
-added before the glyph when it is immediately to be preceded by a glyph
-from a roman font.  The SUBSCRIPT-CORRECTION gives the amount of space
-that should be added after a glyph before adding a subscript.  This
-should be less than the italic correction.
-
-   A line in the 'charset' section can also have the format
-
-     NAME "
-
-This indicates that NAME is just another name for the glyph mentioned in
-the preceding line.
-
-   The word 'kernpairs' starts the kernpairs section.  This contains a
-sequence of lines of the form:
-
-     C1 C2 N
-
-This means that when glyph C1 appears next to glyph C2 the space between
-them should be increased by N.  Most entries in the kernpairs section
-have a negative value for N.
-
-
-File: groff.info,  Node: Font File Format-Footnotes,  Up: Font File Format
-
-   (1) This keyword is misnamed since it starts a list of ordered
-glyphs, not characters.
-
-   (2) The distinction between input, characters, and output, glyphs, is
-not clearly separated in the terminology of 'groff'; for example, the
-'char' request should be called 'glyph' since it defines an output
-entity.
-
-
-File: groff.info,  Node: Installation,  Next: Copying This Manual,  Prev: File formats,  Up: Top
-
-9 Installation
-**************
-
-
-File: groff.info,  Node: Copying This Manual,  Next: Request Index,  Prev: Installation,  Up: Top
-
-Appendix A Copying This Manual
-******************************
-
-                     Version 1.3, 3 November 2008
-
-     Copyright � 2000, 2001, 2002, 2007, 2008 Free Software Foundation, Inc.
-     <http://fsf.org/>
-
-     Everyone is permitted to copy and distribute verbatim copies
-     of this license document, but changing it is not allowed.
-
-  0. PREAMBLE
-
-     The purpose of this License is to make a manual, textbook, or other
-     functional and useful document "free" in the sense of freedom: to
-     assure everyone the effective freedom to copy and redistribute it,
-     with or without modifying it, either commercially or
-     noncommercially.  Secondarily, this License preserves for the
-     author and publisher a way to get credit for their work, while not
-     being considered responsible for modifications made by others.
-
-     This License is a kind of "copyleft", which means that derivative
-     works of the document must themselves be free in the same sense.
-     It complements the GNU General Public License, which is a copyleft
-     license designed for free software.
-
-     We have designed this License in order to use it for manuals for
-     free software, because free software needs free documentation: a
-     free program should come with manuals providing the same freedoms
-     that the software does.  But this License is not limited to
-     software manuals; it can be used for any textual work, regardless
-     of subject matter or whether it is published as a printed book.  We
-     recommend this License principally for works whose purpose is
-     instruction or reference.
-
-  1. APPLICABILITY AND DEFINITIONS
-
-     This License applies to any manual or other work, in any medium,
-     that contains a notice placed by the copyright holder saying it can
-     be distributed under the terms of this License.  Such a notice
-     grants a world-wide, royalty-free license, unlimited in duration,
-     to use that work under the conditions stated herein.  The
-     "Document", below, refers to any such manual or work.  Any member
-     of the public is a licensee, and is addressed as "you".  You accept
-     the license if you copy, modify or distribute the work in a way
-     requiring permission under copyright law.
-
-     A "Modified Version" of the Document means any work containing the
-     Document or a portion of it, either copied verbatim, or with
-     modifications and/or translated into another language.
-
-     A "Secondary Section" is a named appendix or a front-matter section
-     of the Document that deals exclusively with the relationship of the
-     publishers or authors of the Document to the Document's overall
-     subject (or to related matters) and contains nothing that could
-     fall directly within that overall subject.  (Thus, if the Document
-     is in part a textbook of mathematics, a Secondary Section may not
-     explain any mathematics.)  The relationship could be a matter of
-     historical connection with the subject or with related matters, or
-     of legal, commercial, philosophical, ethical or political position
-     regarding them.
-
-     The "Invariant Sections" are certain Secondary Sections whose
-     titles are designated, as being those of Invariant Sections, in the
-     notice that says that the Document is released under this License.
-     If a section does not fit the above definition of Secondary then it
-     is not allowed to be designated as Invariant.  The Document may
-     contain zero Invariant Sections.  If the Document does not identify
-     any Invariant Sections then there are none.
-
-     The "Cover Texts" are certain short passages of text that are
-     listed, as Front-Cover Texts or Back-Cover Texts, in the notice
-     that says that the Document is released under this License.  A
-     Front-Cover Text may be at most 5 words, and a Back-Cover Text may
-     be at most 25 words.
-
-     A "Transparent" copy of the Document means a machine-readable copy,
-     represented in a format whose specification is available to the
-     general public, that is suitable for revising the document
-     straightforwardly with generic text editors or (for images composed
-     of pixels) generic paint programs or (for drawings) some widely
-     available drawing editor, and that is suitable for input to text
-     formatters or for automatic translation to a variety of formats
-     suitable for input to text formatters.  A copy made in an otherwise
-     Transparent file format whose markup, or absence of markup, has
-     been arranged to thwart or discourage subsequent modification by
-     readers is not Transparent.  An image format is not Transparent if
-     used for any substantial amount of text.  A copy that is not
-     "Transparent" is called "Opaque".
-
-     Examples of suitable formats for Transparent copies include plain
-     ASCII without markup, Texinfo input format, LaTeX input format,
-     SGML or XML using a publicly available DTD, and standard-conforming
-     simple HTML, PostScript or PDF designed for human modification.
-     Examples of transparent image formats include PNG, XCF and JPG.
-     Opaque formats include proprietary formats that can be read and
-     edited only by proprietary word processors, SGML or XML for which
-     the DTD and/or processing tools are not generally available, and
-     the machine-generated HTML, PostScript or PDF produced by some word
-     processors for output purposes only.
-
-     The "Title Page" means, for a printed book, the title page itself,
-     plus such following pages as are needed to hold, legibly, the
-     material this License requires to appear in the title page.  For
-     works in formats which do not have any title page as such, "Title
-     Page" means the text near the most prominent appearance of the
-     work's title, preceding the beginning of the body of the text.
-
-     The "publisher" means any person or entity that distributes copies
-     of the Document to the public.
-
-     A section "Entitled XYZ" means a named subunit of the Document
-     whose title either is precisely XYZ or contains XYZ in parentheses
-     following text that translates XYZ in another language.  (Here XYZ
-     stands for a specific section name mentioned below, such as
-     "Acknowledgements", "Dedications", "Endorsements", or "History".)
-     To "Preserve the Title" of such a section when you modify the
-     Document means that it remains a section "Entitled XYZ" according
-     to this definition.
-
-     The Document may include Warranty Disclaimers next to the notice
-     which states that this License applies to the Document.  These
-     Warranty Disclaimers are considered to be included by reference in
-     this License, but only as regards disclaiming warranties: any other
-     implication that these Warranty Disclaimers may have is void and
-     has no effect on the meaning of this License.
-
-  2. VERBATIM COPYING
-
-     You may copy and distribute the Document in any medium, either
-     commercially or noncommercially, provided that this License, the
-     copyright notices, and the license notice saying this License
-     applies to the Document are reproduced in all copies, and that you
-     add no other conditions whatsoever to those of this License.  You
-     may not use technical measures to obstruct or control the reading
-     or further copying of the copies you make or distribute.  However,
-     you may accept compensation in exchange for copies.  If you
-     distribute a large enough number of copies you must also follow the
-     conditions in section 3.
-
-     You may also lend copies, under the same conditions stated above,
-     and you may publicly display copies.
-
-  3. COPYING IN QUANTITY
-
-     If you publish printed copies (or copies in media that commonly
-     have printed covers) of the Document, numbering more than 100, and
-     the Document's license notice requires Cover Texts, you must
-     enclose the copies in covers that carry, clearly and legibly, all
-     these Cover Texts: Front-Cover Texts on the front cover, and
-     Back-Cover Texts on the back cover.  Both covers must also clearly
-     and legibly identify you as the publisher of these copies.  The
-     front cover must present the full title with all words of the title
-     equally prominent and visible.  You may add other material on the
-     covers in addition.  Copying with changes limited to the covers, as
-     long as they preserve the title of the Document and satisfy these
-     conditions, can be treated as verbatim copying in other respects.
-
-     If the required texts for either cover are too voluminous to fit
-     legibly, you should put the first ones listed (as many as fit
-     reasonably) on the actual cover, and continue the rest onto
-     adjacent pages.
-
-     If you publish or distribute Opaque copies of the Document
-     numbering more than 100, you must either include a machine-readable
-     Transparent copy along with each Opaque copy, or state in or with
-     each Opaque copy a computer-network location from which the general
-     network-using public has access to download using public-standard
-     network protocols a complete Transparent copy of the Document, free
-     of added material.  If you use the latter option, you must take
-     reasonably prudent steps, when you begin distribution of Opaque
-     copies in quantity, to ensure that this Transparent copy will
-     remain thus accessible at the stated location until at least one
-     year after the last time you distribute an Opaque copy (directly or
-     through your agents or retailers) of that edition to the public.
-
-     It is requested, but not required, that you contact the authors of
-     the Document well before redistributing any large number of copies,
-     to give them a chance to provide you with an updated version of the
-     Document.
-
-  4. MODIFICATIONS
-
-     You may copy and distribute a Modified Version of the Document
-     under the conditions of sections 2 and 3 above, provided that you
-     release the Modified Version under precisely this License, with the
-     Modified Version filling the role of the Document, thus licensing
-     distribution and modification of the Modified Version to whoever
-     possesses a copy of it.  In addition, you must do these things in
-     the Modified Version:
-
-       A. Use in the Title Page (and on the covers, if any) a title
-          distinct from that of the Document, and from those of previous
-          versions (which should, if there were any, be listed in the
-          History section of the Document).  You may use the same title
-          as a previous version if the original publisher of that
-          version gives permission.
-
-       B. List on the Title Page, as authors, one or more persons or
-          entities responsible for authorship of the modifications in
-          the Modified Version, together with at least five of the
-          principal authors of the Document (all of its principal
-          authors, if it has fewer than five), unless they release you
-          from this requirement.
-
-       C. State on the Title page the name of the publisher of the
-          Modified Version, as the publisher.
-
-       D. Preserve all the copyright notices of the Document.
-
-       E. Add an appropriate copyright notice for your modifications
-          adjacent to the other copyright notices.
-
-       F. Include, immediately after the copyright notices, a license
-          notice giving the public permission to use the Modified
-          Version under the terms of this License, in the form shown in
-          the Addendum below.
-
-       G. Preserve in that license notice the full lists of Invariant
-          Sections and required Cover Texts given in the Document's
-          license notice.
-
-       H. Include an unaltered copy of this License.
-
-       I. Preserve the section Entitled "History", Preserve its Title,
-          and add to it an item stating at least the title, year, new
-          authors, and publisher of the Modified Version as given on the
-          Title Page.  If there is no section Entitled "History" in the
-          Document, create one stating the title, year, authors, and
-          publisher of the Document as given on its Title Page, then add
-          an item describing the Modified Version as stated in the
-          previous sentence.
-
-       J. Preserve the network location, if any, given in the Document
-          for public access to a Transparent copy of the Document, and
-          likewise the network locations given in the Document for
-          previous versions it was based on.  These may be placed in the
-          "History" section.  You may omit a network location for a work
-          that was published at least four years before the Document
-          itself, or if the original publisher of the version it refers
-          to gives permission.
-
-       K. For any section Entitled "Acknowledgements" or "Dedications",
-          Preserve the Title of the section, and preserve in the section
-          all the substance and tone of each of the contributor
-          acknowledgements and/or dedications given therein.
-
-       L. Preserve all the Invariant Sections of the Document, unaltered
-          in their text and in their titles.  Section numbers or the
-          equivalent are not considered part of the section titles.
-
-       M. Delete any section Entitled "Endorsements".  Such a section
-          may not be included in the Modified Version.
-
-       N. Do not retitle any existing section to be Entitled
-          "Endorsements" or to conflict in title with any Invariant
-          Section.
-
-       O. Preserve any Warranty Disclaimers.
-
-     If the Modified Version includes new front-matter sections or
-     appendices that qualify as Secondary Sections and contain no
-     material copied from the Document, you may at your option designate
-     some or all of these sections as invariant.  To do this, add their
-     titles to the list of Invariant Sections in the Modified Version's
-     license notice.  These titles must be distinct from any other
-     section titles.
-
-     You may add a section Entitled "Endorsements", provided it contains
-     nothing but endorsements of your Modified Version by various
-     parties--for example, statements of peer review or that the text
-     has been approved by an organization as the authoritative
-     definition of a standard.
-
-     You may add a passage of up to five words as a Front-Cover Text,
-     and a passage of up to 25 words as a Back-Cover Text, to the end of
-     the list of Cover Texts in the Modified Version.  Only one passage
-     of Front-Cover Text and one of Back-Cover Text may be added by (or
-     through arrangements made by) any one entity.  If the Document
-     already includes a cover text for the same cover, previously added
-     by you or by arrangement made by the same entity you are acting on
-     behalf of, you may not add another; but you may replace the old
-     one, on explicit permission from the previous publisher that added
-     the old one.
-
-     The author(s) and publisher(s) of the Document do not by this
-     License give permission to use their names for publicity for or to
-     assert or imply endorsement of any Modified Version.
-
-  5. COMBINING DOCUMENTS
-
-     You may combine the Document with other documents released under
-     this License, under the terms defined in section 4 above for
-     modified versions, provided that you include in the combination all
-     of the Invariant Sections of all of the original documents,
-     unmodified, and list them all as Invariant Sections of your
-     combined work in its license notice, and that you preserve all
-     their Warranty Disclaimers.
-
-     The combined work need only contain one copy of this License, and
-     multiple identical Invariant Sections may be replaced with a single
-     copy.  If there are multiple Invariant Sections with the same name
-     but different contents, make the title of each such section unique
-     by adding at the end of it, in parentheses, the name of the
-     original author or publisher of that section if known, or else a
-     unique number.  Make the same adjustment to the section titles in
-     the list of Invariant Sections in the license notice of the
-     combined work.
-
-     In the combination, you must combine any sections Entitled
-     "History" in the various original documents, forming one section
-     Entitled "History"; likewise combine any sections Entitled
-     "Acknowledgements", and any sections Entitled "Dedications".  You
-     must delete all sections Entitled "Endorsements."
-
-  6. COLLECTIONS OF DOCUMENTS
-
-     You may make a collection consisting of the Document and other
-     documents released under this License, and replace the individual
-     copies of this License in the various documents with a single copy
-     that is included in the collection, provided that you follow the
-     rules of this License for verbatim copying of each of the documents
-     in all other respects.
-
-     You may extract a single document from such a collection, and
-     distribute it individually under this License, provided you insert
-     a copy of this License into the extracted document, and follow this
-     License in all other respects regarding verbatim copying of that
-     document.
-
-  7. AGGREGATION WITH INDEPENDENT WORKS
-
-     A compilation of the Document or its derivatives with other
-     separate and independent documents or works, in or on a volume of a
-     storage or distribution medium, is called an "aggregate" if the
-     copyright resulting from the compilation is not used to limit the
-     legal rights of the compilation's users beyond what the individual
-     works permit.  When the Document is included in an aggregate, this
-     License does not apply to the other works in the aggregate which
-     are not themselves derivative works of the Document.
-
-     If the Cover Text requirement of section 3 is applicable to these
-     copies of the Document, then if the Document is less than one half
-     of the entire aggregate, the Document's Cover Texts may be placed
-     on covers that bracket the Document within the aggregate, or the
-     electronic equivalent of covers if the Document is in electronic
-     form.  Otherwise they must appear on printed covers that bracket
-     the whole aggregate.
-
-  8. TRANSLATION
-
-     Translation is considered a kind of modification, so you may
-     distribute translations of the Document under the terms of section
-     4.  Replacing Invariant Sections with translations requires special
-     permission from their copyright holders, but you may include
-     translations of some or all Invariant Sections in addition to the
-     original versions of these Invariant Sections.  You may include a
-     translation of this License, and all the license notices in the
-     Document, and any Warranty Disclaimers, provided that you also
-     include the original English version of this License and the
-     original versions of those notices and disclaimers.  In case of a
-     disagreement between the translation and the original version of
-     this License or a notice or disclaimer, the original version will
-     prevail.
-
-     If a section in the Document is Entitled "Acknowledgements",
-     "Dedications", or "History", the requirement (section 4) to
-     Preserve its Title (section 1) will typically require changing the
-     actual title.
-
-  9. TERMINATION
-
-     You may not copy, modify, sublicense, or distribute the Document
-     except as expressly provided under this License.  Any attempt
-     otherwise to copy, modify, sublicense, or distribute it is void,
-     and will automatically terminate your rights under this License.
-
-     However, if you cease all violation of this License, then your
-     license from a particular copyright holder is reinstated (a)
-     provisionally, unless and until the copyright holder explicitly and
-     finally terminates your license, and (b) permanently, if the
-     copyright holder fails to notify you of the violation by some
-     reasonable means prior to 60 days after the cessation.
-
-     Moreover, your license from a particular copyright holder is
-     reinstated permanently if the copyright holder notifies you of the
-     violation by some reasonable means, this is the first time you have
-     received notice of violation of this License (for any work) from
-     that copyright holder, and you cure the violation prior to 30 days
-     after your receipt of the notice.
-
-     Termination of your rights under this section does not terminate
-     the licenses of parties who have received copies or rights from you
-     under this License.  If your rights have been terminated and not
-     permanently reinstated, receipt of a copy of some or all of the
-     same material does not give you any rights to use it.
-
-  10. FUTURE REVISIONS OF THIS LICENSE
-
-     The Free Software Foundation may publish new, revised versions of
-     the GNU Free Documentation License from time to time.  Such new
-     versions will be similar in spirit to the present version, but may
-     differ in detail to address new problems or concerns.  See
-     <http://www.gnu.org/copyleft/>.
-
-     Each version of the License is given a distinguishing version
-     number.  If the Document specifies that a particular numbered
-     version of this License "or any later version" applies to it, you
-     have the option of following the terms and conditions either of
-     that specified version or of any later version that has been
-     published (not as a draft) by the Free Software Foundation.  If the
-     Document does not specify a version number of this License, you may
-     choose any version ever published (not as a draft) by the Free
-     Software Foundation.  If the Document specifies that a proxy can
-     decide which future versions of this License can be used, that
-     proxy's public statement of acceptance of a version permanently
-     authorizes you to choose that version for the Document.
-
-  11. RELICENSING
-
-     "Massive Multiauthor Collaboration Site" (or "MMC Site") means any
-     World Wide Web server that publishes copyrightable works and also
-     provides prominent facilities for anybody to edit those works.  A
-     public wiki that anybody can edit is an example of such a server.
-     A "Massive Multiauthor Collaboration" (or "MMC") contained in the
-     site means any set of copyrightable works thus published on the MMC
-     site.
-
-     "CC-BY-SA" means the Creative Commons Attribution-Share Alike 3.0
-     license published by Creative Commons Corporation, a not-for-profit
-     corporation with a principal place of business in San Francisco,
-     California, as well as future copyleft versions of that license
-     published by that same organization.
-
-     "Incorporate" means to publish or republish a Document, in whole or
-     in part, as part of another Document.
-
-     An MMC is "eligible for relicensing" if it is licensed under this
-     License, and if all works that were first published under this
-     License somewhere other than this MMC, and subsequently
-     incorporated in whole or in part into the MMC, (1) had no cover
-     texts or invariant sections, and (2) were thus incorporated prior
-     to November 1, 2008.
-
-     The operator of an MMC Site may republish an MMC contained in the
-     site under CC-BY-SA on the same site at any time before August 1,
-     2009, provided the MMC is eligible for relicensing.
-
-ADDENDUM: How to use this License for your documents
-====================================================
-
-To use this License in a document you have written, include a copy of
-the License in the document and put the following copyright and license
-notices just after the title page:
-
-       Copyright (C)  YEAR  YOUR NAME.
-       Permission is granted to copy, distribute and/or modify this document
-       under the terms of the GNU Free Documentation License, Version 1.3
-       or any later version published by the Free Software Foundation;
-       with no Invariant Sections, no Front-Cover Texts, and no Back-Cover
-       Texts.  A copy of the license is included in the section entitled ``GNU
-       Free Documentation License''.
-
-   If you have Invariant Sections, Front-Cover Texts and Back-Cover
-Texts, replace the "with...Texts." line with this:
-
-         with the Invariant Sections being LIST THEIR TITLES, with
-         the Front-Cover Texts being LIST, and with the Back-Cover Texts
-         being LIST.
-
-   If you have Invariant Sections without Cover Texts, or some other
-combination of the three, merge those two alternatives to suit the
-situation.
-
-   If your document contains nontrivial examples of program code, we
-recommend releasing these examples in parallel under your choice of free
-software license, such as the GNU General Public License, to permit
-their use in free software.
-
-
-File: groff.info,  Node: Request Index,  Next: Escape Index,  Prev: Copying This Manual,  Up: Top
-
-Appendix B Request Index
-************************
-
-Requests appear without the leading control character (normally either
-'.' or ''').
-
- [index ]
-* Menu:
-
-* ab:                                    Debugging.           (line  40)
-* ad:                                    Manipulating Filling and Adjusting.
-                                                              (line  50)
-* af:                                    Assigning Formats.   (line  12)
-* aln:                                   Setting Registers.   (line 112)
-* als:                                   Strings.             (line 229)
-* am:                                    Writing Macros.      (line 113)
-* am1:                                   Writing Macros.      (line 114)
-* ami:                                   Writing Macros.      (line 115)
-* ami1:                                  Writing Macros.      (line 116)
-* as:                                    Strings.             (line 175)
-* as1:                                   Strings.             (line 176)
-* asciify:                               Diversions.          (line 195)
-* backtrace:                             Debugging.           (line  96)
-* bd:                                    Artificial Fonts.    (line  96)
-* blm:                                   Blank Line Traps.    (line   7)
-* box:                                   Diversions.          (line  34)
-* boxa:                                  Diversions.          (line  35)
-* bp:                                    Page Control.        (line   7)
-* br:                                    Manipulating Filling and Adjusting.
-                                                              (line  12)
-* break:                                 while.               (line  68)
-* brp:                                   Manipulating Filling and Adjusting.
-                                                              (line 130)
-* c2:                                    Character Translations.
-                                                              (line  16)
-* cc:                                    Character Translations.
-                                                              (line  10)
-* ce:                                    Manipulating Filling and Adjusting.
-                                                              (line 203)
-* cf:                                    I/O.                 (line  50)
-* cflags:                                Using Symbols.       (line 237)
-* ch:                                    Page Location Traps. (line 111)
-* char:                                  Using Symbols.       (line 323)
-* chop:                                  Strings.             (line 267)
-* class:                                 Character Classes.   (line  12)
-* close:                                 I/O.                 (line 231)
-* color:                                 Colors.              (line   7)
-* composite:                             Using Symbols.       (line 191)
-* continue:                              while.               (line  72)
-* cp:                                    Implementation Differences.
-                                                              (line  22)
-* cs:                                    Artificial Fonts.    (line 126)
-* cu:                                    Artificial Fonts.    (line  86)
-* da:                                    Diversions.          (line  22)
-* de:                                    Writing Macros.      (line  15)
-* de1:                                   Writing Macros.      (line  16)
-* defcolor:                              Colors.              (line  22)
-* dei:                                   Writing Macros.      (line  17)
-* dei1:                                  Writing Macros.      (line  18)
-* device:                                Postprocessor Access.
-                                                              (line  11)
-* devicem:                               Postprocessor Access.
-                                                              (line  30)
-* di:                                    Diversions.          (line  21)
-* do:                                    Implementation Differences.
-                                                              (line  23)
-* ds:                                    Strings.             (line  15)
-* ds1:                                   Strings.             (line  16)
-* dt:                                    Diversion Traps.     (line   7)
-* ec:                                    Character Translations.
-                                                              (line  47)
-* ecr:                                   Character Translations.
-                                                              (line  59)
-* ecs:                                   Character Translations.
-                                                              (line  58)
-* el:                                    if-else.             (line  27)
-* em:                                    End-of-input Traps.  (line   7)
-* eo:                                    Character Translations.
-                                                              (line  24)
-* ev:                                    Environments.        (line  38)
-* evc:                                   Environments.        (line  70)
-* ex:                                    Debugging.           (line  45)
-* fam:                                   Font Families.       (line  20)
-* fc:                                    Fields.              (line  18)
-* fchar:                                 Using Symbols.       (line 324)
-* fcolor:                                Colors.              (line  80)
-* fi:                                    Manipulating Filling and Adjusting.
-                                                              (line  28)
-* fl:                                    Debugging.           (line  87)
-* fp:                                    Font Positions.      (line  11)
-* fschar:                                Using Symbols.       (line 325)
-* fspecial:                              Special Fonts.       (line  18)
-* ft:                                    Changing Fonts.      (line   7)
-* ft <1>:                                Font Positions.      (line  57)
-* ftr:                                   Changing Fonts.      (line  55)
-* fzoom:                                 Changing Fonts.      (line  70)
-* gcolor:                                Colors.              (line  50)
-* hc:                                    Manipulating Hyphenation.
-                                                              (line 105)
-* hcode:                                 Manipulating Hyphenation.
-                                                              (line 175)
-* hla:                                   Manipulating Hyphenation.
-                                                              (line 255)
-* hlm:                                   Manipulating Hyphenation.
-                                                              (line  45)
-* hpf:                                   Manipulating Hyphenation.
-                                                              (line 114)
-* hpfa:                                  Manipulating Hyphenation.
-                                                              (line 115)
-* hpfcode:                               Manipulating Hyphenation.
-                                                              (line 116)
-* hw:                                    Manipulating Hyphenation.
-                                                              (line  62)
-* hy:                                    Manipulating Hyphenation.
-                                                              (line   9)
-* hym:                                   Manipulating Hyphenation.
-                                                              (line 210)
-* hys:                                   Manipulating Hyphenation.
-                                                              (line 226)
-* ie:                                    if-else.             (line  26)
-* if:                                    if-else.             (line  10)
-* ig:                                    Comments.            (line  63)
-* in:                                    Line Layout.         (line  86)
-* it:                                    Input Line Traps.    (line   7)
-* itc:                                   Input Line Traps.    (line   8)
-* kern:                                  Ligatures and Kerning.
-                                                              (line  41)
-* lc:                                    Leaders.             (line  23)
-* length:                                Strings.             (line 211)
-* lf:                                    Debugging.           (line  10)
-* lg:                                    Ligatures and Kerning.
-                                                              (line  23)
-* linetabs:                              Tabs and Fields.     (line 137)
-* ll:                                    Line Layout.         (line 140)
-* ls:                                    Manipulating Spacing.
-                                                              (line  63)
-* lsm:                                   Leading Spaces Traps.
-                                                              (line   7)
-* lt:                                    Page Layout.         (line  64)
-* mc:                                    Miscellaneous.       (line  75)
-* mk:                                    Page Motions.        (line  10)
-* mso:                                   I/O.                 (line  40)
-* na:                                    Manipulating Filling and Adjusting.
-                                                              (line 122)
-* ne:                                    Page Control.        (line  33)
-* nf:                                    Manipulating Filling and Adjusting.
-                                                              (line  39)
-* nh:                                    Manipulating Hyphenation.
-                                                              (line  37)
-* nm:                                    Miscellaneous.       (line  10)
-* nn:                                    Miscellaneous.       (line  71)
-* nop:                                   if-else.             (line  23)
-* nr:                                    Setting Registers.   (line  13)
-* nr <1>:                                Setting Registers.   (line  68)
-* nr <2>:                                Auto-increment.      (line  11)
-* nroff:                                 Troff and Nroff Mode.
-                                                              (line  32)
-* ns:                                    Manipulating Spacing.
-                                                              (line 121)
-* nx:                                    I/O.                 (line  84)
-* open:                                  I/O.                 (line 199)
-* opena:                                 I/O.                 (line 200)
-* os:                                    Page Control.        (line  53)
-* output:                                Diversions.          (line 180)
-* pc:                                    Page Layout.         (line  94)
-* pev:                                   Debugging.           (line  62)
-* pi:                                    I/O.                 (line 143)
-* pl:                                    Page Layout.         (line  10)
-* pm:                                    Debugging.           (line  66)
-* pn:                                    Page Layout.         (line  81)
-* pnr:                                   Debugging.           (line  77)
-* po:                                    Line Layout.         (line  58)
-* ps:                                    Changing Type Sizes. (line   7)
-* psbb:                                  Miscellaneous.       (line 135)
-* pso:                                   I/O.                 (line  29)
-* ptr:                                   Debugging.           (line  81)
-* pvs:                                   Changing Type Sizes. (line 134)
-* rchar:                                 Using Symbols.       (line 381)
-* rd:                                    I/O.                 (line  89)
-* return:                                Writing Macros.      (line 147)
-* rfschar:                               Using Symbols.       (line 382)
-* rj:                                    Manipulating Filling and Adjusting.
-                                                              (line 249)
-* rm:                                    Strings.             (line 224)
-* rn:                                    Strings.             (line 221)
-* rnn:                                   Setting Registers.   (line 108)
-* rr:                                    Setting Registers.   (line 104)
-* rs:                                    Manipulating Spacing.
-                                                              (line 122)
-* rt:                                    Page Motions.        (line  11)
-* schar:                                 Using Symbols.       (line 326)
-* shc:                                   Manipulating Hyphenation.
-                                                              (line 243)
-* shift:                                 Parameters.          (line  31)
-* sizes:                                 Changing Type Sizes. (line  69)
-* so:                                    I/O.                 (line   9)
-* sp:                                    Manipulating Spacing.
-                                                              (line   7)
-* special:                               Special Fonts.       (line  17)
-* spreadwarn:                            Debugging.           (line 131)
-* ss:                                    Manipulating Filling and Adjusting.
-                                                              (line 149)
-* sty:                                   Font Families.       (line  59)
-* substring:                             Strings.             (line 192)
-* sv:                                    Page Control.        (line  52)
-* sy:                                    I/O.                 (line 164)
-* ta:                                    Tabs and Fields.     (line  14)
-* tc:                                    Tabs and Fields.     (line 129)
-* ti:                                    Line Layout.         (line 112)
-* tkf:                                   Ligatures and Kerning.
-                                                              (line  60)
-* tl:                                    Page Layout.         (line  35)
-* tm:                                    Debugging.           (line  25)
-* tm1:                                   Debugging.           (line  26)
-* tmc:                                   Debugging.           (line  27)
-* tr:                                    Character Translations.
-                                                              (line 148)
-* trf:                                   I/O.                 (line  49)
-* trin:                                  Character Translations.
-                                                              (line 149)
-* trnt:                                  Character Translations.
-                                                              (line 237)
-* troff:                                 Troff and Nroff Mode.
-                                                              (line  24)
-* uf:                                    Artificial Fonts.    (line  90)
-* ul:                                    Artificial Fonts.    (line  64)
-* unformat:                              Diversions.          (line 218)
-* vpt:                                   Page Location Traps. (line  17)
-* vs:                                    Changing Type Sizes. (line  85)
-* warn:                                  Debugging.           (line 154)
-* warnscale:                             Debugging.           (line 127)
-* wh:                                    Page Location Traps. (line  29)
-* while:                                 while.               (line  10)
-* write:                                 I/O.                 (line 211)
-* writec:                                I/O.                 (line 212)
-* writem:                                I/O.                 (line 222)
-
-
-File: groff.info,  Node: Escape Index,  Next: Operator Index,  Prev: Request Index,  Up: Top
-
-Appendix C Escape Index
-***********************
-
-Any escape sequence '\X' with X not in the list below emits a warning,
-printing glyph X.
-
- [index ]
-* Menu:
-
-* \:                                     Using Symbols.       (line 132)
-* \!:                                    Diversions.          (line 135)
-* \":                                    Comments.            (line  10)
-* \#:                                    Comments.            (line  48)
-* \$:                                    Parameters.          (line  19)
-* \$*:                                   Parameters.          (line  40)
-* \$0:                                   Parameters.          (line  71)
-* \$@:                                   Parameters.          (line  41)
-* \$^:                                   Parameters.          (line  50)
-* \%:                                    Manipulating Hyphenation.
-                                                              (line  84)
-* \&:                                    Ligatures and Kerning.
-                                                              (line 100)
-* \':                                    Using Symbols.       (line 222)
-* \):                                    Ligatures and Kerning.
-                                                              (line 127)
-* \*:                                    Strings.             (line  17)
-* \,:                                    Ligatures and Kerning.
-                                                              (line  91)
-* \-:                                    Using Symbols.       (line 231)
-* \.:                                    Character Translations.
-                                                              (line 122)
-* \/:                                    Ligatures and Kerning.
-                                                              (line  80)
-* \0:                                    Page Motions.        (line 138)
-* \<colon>:                              Manipulating Hyphenation.
-                                                              (line  85)
-* \?:                                    Diversions.          (line 136)
-* \A:                                    Identifiers.         (line  53)
-* \a:                                    Leaders.             (line  18)
-* \B:                                    Expressions.         (line  83)
-* \b:                                    Drawing Requests.    (line 232)
-* \c:                                    Line Control.        (line  41)
-* \C:                                    Using Symbols.       (line 185)
-* \d:                                    Page Motions.        (line 100)
-* \D:                                    Drawing Requests.    (line  67)
-* \e:                                    Character Translations.
-                                                              (line  69)
-* \E:                                    Character Translations.
-                                                              (line  70)
-* \f:                                    Changing Fonts.      (line   8)
-* \F:                                    Font Families.       (line  22)
-* \f <1>:                                Font Positions.      (line  58)
-* \g:                                    Assigning Formats.   (line  73)
-* \H:                                    Artificial Fonts.    (line  13)
-* \h:                                    Page Motions.        (line 103)
-* \k:                                    Page Motions.        (line 201)
-* \l:                                    Drawing Requests.    (line  16)
-* \L:                                    Drawing Requests.    (line  49)
-* \m:                                    Colors.              (line  51)
-* \M:                                    Colors.              (line  81)
-* \n:                                    Interpolating Registers.
-                                                              (line   9)
-* \n <1>:                                Auto-increment.      (line  19)
-* \N:                                    Using Symbols.       (line 201)
-* \o:                                    Page Motions.        (line 216)
-* \O:                                    Suppressing output.  (line   7)
-* \p:                                    Manipulating Filling and Adjusting.
-                                                              (line 131)
-* \R:                                    Setting Registers.   (line  14)
-* \R <1>:                                Setting Registers.   (line  70)
-* \r:                                    Page Motions.        (line  94)
-* \<RET>:                                Line Control.        (line  40)
-* \S:                                    Artificial Fonts.    (line  44)
-* \s:                                    Changing Type Sizes. (line  10)
-* \<SP>:                                 Page Motions.        (line 114)
-* \t:                                    Tabs and Fields.     (line  10)
-* \u:                                    Page Motions.        (line  97)
-* \v:                                    Page Motions.        (line  78)
-* \V:                                    I/O.                 (line 247)
-* \w:                                    Page Motions.        (line 145)
-* \x:                                    Manipulating Spacing.
-                                                              (line  82)
-* \X:                                    Postprocessor Access.
-                                                              (line  12)
-* \Y:                                    Postprocessor Access.
-                                                              (line  31)
-* \z:                                    Page Motions.        (line 220)
-* \Z:                                    Page Motions.        (line 224)
-* \\:                                    Character Translations.
-                                                              (line  68)
-* \^:                                    Page Motions.        (line 130)
-* \_:                                    Using Symbols.       (line 234)
-* \`:                                    Using Symbols.       (line 227)
-* \{:                                    if-else.             (line  35)
-* \|:                                    Page Motions.        (line 122)
-* \}:                                    if-else.             (line  35)
-* \~:                                    Page Motions.        (line 118)
-
-
-File: groff.info,  Node: Operator Index,  Next: Register Index,  Prev: Escape Index,  Up: Top
-
-Appendix D Operator Index
-*************************
-
- [index ]
-* Menu:
-
-* !:                                     Expressions.          (line 21)
-* %:                                     Expressions.          (line  8)
-* &:                                     Expressions.          (line 19)
-* (:                                     Expressions.          (line 59)
-* ):                                     Expressions.          (line 59)
-* *:                                     Expressions.          (line  8)
-* +:                                     Expressions.          (line  8)
-* + <1>:                                 Expressions.          (line 21)
-* -:                                     Expressions.          (line  8)
-* - <1>:                                 Expressions.          (line 21)
-* /:                                     Expressions.          (line  8)
-* <:                                     Expressions.          (line 15)
-* <=:                                    Expressions.          (line 15)
-* <?:                                    Expressions.          (line 44)
-* <colon>:                               Expressions.          (line 19)
-* =:                                     Expressions.          (line 15)
-* ==:                                    Expressions.          (line 15)
-* >:                                     Expressions.          (line 15)
-* >=:                                    Expressions.          (line 15)
-* >?:                                    Expressions.          (line 44)
-
-
-File: groff.info,  Node: Register Index,  Next: Macro Index,  Prev: Operator Index,  Up: Top
-
-Appendix E Register Index
-*************************
-
-The macro package or program a specific register belongs to is appended
-in brackets.
-
-   A register name 'x' consisting of exactly one character can be
-accessed as '\nx'.  A register name 'xx' consisting of exactly two
-characters can be accessed as '\n(xx'.  Register names 'xxx' of any
-length can be accessed as '\n[xxx]'.
-
- [index ]
-* Menu:
-
-* $$:                                    Built-in Registers.  (line  99)
-* %:                                     Page Layout.         (line  94)
-* % <1>:                                 Page Control.        (line  10)
-* .$:                                    Parameters.          (line  10)
-* .A:                                    Built-in Registers.  (line 106)
-* .a:                                    Manipulating Spacing.
-                                                              (line  83)
-* .b:                                    Artificial Fonts.    (line  98)
-* .br:                                   Requests.            (line  56)
-* .c:                                    Built-in Registers.  (line  76)
-* .C:                                    Implementation Differences.
-                                                              (line  24)
-* .cdp:                                  Environments.        (line  94)
-* .ce:                                   Manipulating Filling and Adjusting.
-                                                              (line 204)
-* .cht:                                  Environments.        (line  93)
-* .color:                                Colors.              (line   8)
-* .csk:                                  Environments.        (line  95)
-* .d:                                    Diversions.          (line  69)
-* .ev:                                   Environments.        (line  39)
-* .F:                                    Built-in Registers.  (line  12)
-* .f:                                    Font Positions.      (line  12)
-* .fam:                                  Font Families.       (line  21)
-* .fn:                                   Font Families.       (line  25)
-* .fp:                                   Font Positions.      (line  13)
-* .g:                                    Built-in Registers.  (line 102)
-* .H:                                    Built-in Registers.  (line  15)
-* .h:                                    Diversions.          (line  76)
-* .height:                               Artificial Fonts.    (line  16)
-* .hla:                                  Manipulating Hyphenation.
-                                                              (line 256)
-* .hlc:                                  Manipulating Hyphenation.
-                                                              (line  47)
-* .hlm:                                  Manipulating Hyphenation.
-                                                              (line  46)
-* .hy:                                   Manipulating Hyphenation.
-                                                              (line  10)
-* .hym:                                  Manipulating Hyphenation.
-                                                              (line 211)
-* .hys:                                  Manipulating Hyphenation.
-                                                              (line 227)
-* .i:                                    Line Layout.         (line  89)
-* .in:                                   Line Layout.         (line 115)
-* .int:                                  Line Control.        (line  42)
-* .j:                                    Manipulating Filling and Adjusting.
-                                                              (line  51)
-* .k:                                    Page Motions.        (line 212)
-* .kern:                                 Ligatures and Kerning.
-                                                              (line  42)
-* .L:                                    Manipulating Spacing.
-                                                              (line  64)
-* .l:                                    Line Layout.         (line 143)
-* .lg:                                   Ligatures and Kerning.
-                                                              (line  24)
-* .linetabs:                             Tabs and Fields.     (line 138)
-* .ll:                                   Line Layout.         (line 144)
-* .lt:                                   Page Layout.         (line  67)
-* .m:                                    Colors.              (line  54)
-* .M:                                    Colors.              (line  84)
-* .n:                                    Environments.        (line 110)
-* .ne:                                   Page Location Traps. (line 122)
-* .ns:                                   Manipulating Spacing.
-                                                              (line 123)
-* .O:                                    Built-in Registers.  (line 112)
-* .o:                                    Line Layout.         (line  61)
-* .P:                                    Built-in Registers.  (line 116)
-* .p:                                    Page Layout.         (line  13)
-* .pe:                                   Page Location Traps. (line 143)
-* .pn:                                   Page Layout.         (line  84)
-* .ps:                                   Fractional Type Sizes.
-                                                              (line  37)
-* .psr:                                  Fractional Type Sizes.
-                                                              (line  44)
-* .pvs:                                  Changing Type Sizes. (line 137)
-* .R:                                    Built-in Registers.  (line  18)
-* .rj:                                   Manipulating Filling and Adjusting.
-                                                              (line 250)
-* .s:                                    Changing Type Sizes. (line  11)
-* .slant:                                Artificial Fonts.    (line  45)
-* .sr:                                   Fractional Type Sizes.
-                                                              (line  45)
-* .ss:                                   Manipulating Filling and Adjusting.
-                                                              (line 150)
-* .sss:                                  Manipulating Filling and Adjusting.
-                                                              (line 151)
-* .sty:                                  Changing Fonts.      (line  11)
-* .T:                                    Built-in Registers.  (line 122)
-* .t:                                    Page Location Traps. (line 102)
-* .tabs:                                 Tabs and Fields.     (line  15)
-* .trunc:                                Page Location Traps. (line 131)
-* .U:                                    Built-in Registers.  (line  23)
-* .u:                                    Manipulating Filling and Adjusting.
-                                                              (line  29)
-* .V:                                    Built-in Registers.  (line  28)
-* .v:                                    Changing Type Sizes. (line  88)
-* .vpt:                                  Page Location Traps. (line  18)
-* .w:                                    Environments.        (line  92)
-* .warn:                                 Debugging.           (line 155)
-* .x:                                    Built-in Registers.  (line  88)
-* .y:                                    Built-in Registers.  (line  92)
-* .Y:                                    Built-in Registers.  (line  96)
-* .z:                                    Diversions.          (line  68)
-* .zoom:                                 Changing Fonts.      (line  71)
-* c.:                                    Built-in Registers.  (line  77)
-* ct:                                    Page Motions.        (line 150)
-* DD [ms]:                               ms Document Control Registers.
-                                                              (line 239)
-* dl:                                    Diversions.          (line  93)
-* dn:                                    Diversions.          (line  92)
-* dw:                                    Built-in Registers.  (line  45)
-* dy:                                    Built-in Registers.  (line  48)
-* FAM [ms]:                              ms Document Control Registers.
-                                                              (line 111)
-* FF [ms]:                               ms Document Control Registers.
-                                                              (line 185)
-* FI [ms]:                               ms Document Control Registers.
-                                                              (line 178)
-* FL [ms]:                               ms Document Control Registers.
-                                                              (line 171)
-* FM [ms]:                               ms Document Control Registers.
-                                                              (line  47)
-* FPD [ms]:                              ms Document Control Registers.
-                                                              (line 221)
-* FPS [ms]:                              ms Document Control Registers.
-                                                              (line 205)
-* FVS [ms]:                              ms Document Control Registers.
-                                                              (line 213)
-* GROWPS [ms]:                           ms Document Control Registers.
-                                                              (line  89)
-* GS [ms]:                               Differences from AT&T ms.
-                                                              (line  45)
-* HM [ms]:                               ms Document Control Registers.
-                                                              (line  40)
-* HORPHANS [ms]:                         ms Document Control Registers.
-                                                              (line 155)
-* hours:                                 Built-in Registers.  (line  41)
-* hp:                                    Page Motions.        (line 209)
-* HY [ms]:                               ms Document Control Registers.
-                                                              (line 102)
-* LL [ms]:                               ms Document Control Registers.
-                                                              (line  25)
-* llx:                                   Miscellaneous.       (line 136)
-* lly:                                   Miscellaneous.       (line 137)
-* ln:                                    Built-in Registers.  (line  82)
-* lsn:                                   Leading Spaces Traps.
-                                                              (line   8)
-* lss:                                   Leading Spaces Traps.
-                                                              (line   9)
-* LT [ms]:                               ms Document Control Registers.
-                                                              (line  32)
-* MINGW [ms]:                            ms Document Control Registers.
-                                                              (line 231)
-* MINGW [ms] <1>:                        Additional ms Macros.
-                                                              (line  28)
-* minutes:                               Built-in Registers.  (line  37)
-* mo:                                    Built-in Registers.  (line  51)
-* nl:                                    Page Control.        (line  67)
-* opmaxx:                                Suppressing output.  (line  19)
-* opmaxy:                                Suppressing output.  (line  19)
-* opminx:                                Suppressing output.  (line  19)
-* opminy:                                Suppressing output.  (line  19)
-* PD [ms]:                               ms Document Control Registers.
-                                                              (line 128)
-* PI [ms]:                               ms Document Control Registers.
-                                                              (line 121)
-* PO [ms]:                               ms Document Control Registers.
-                                                              (line  16)
-* PORPHANS [ms]:                         ms Document Control Registers.
-                                                              (line 143)
-* PS [ms]:                               ms Document Control Registers.
-                                                              (line  57)
-* ps4html [grohtml]:                     grohtml specific registers and strings.
-                                                              (line   7)
-* PSINCR [ms]:                           ms Document Control Registers.
-                                                              (line  77)
-* QI [ms]:                               ms Document Control Registers.
-                                                              (line 135)
-* rsb:                                   Page Motions.        (line 149)
-* rst:                                   Page Motions.        (line 148)
-* sb:                                    Page Motions.        (line 147)
-* seconds:                               Built-in Registers.  (line  31)
-* skw:                                   Page Motions.        (line 152)
-* slimit:                                Debugging.           (line 119)
-* ssc:                                   Page Motions.        (line 151)
-* st:                                    Page Motions.        (line 146)
-* systat:                                I/O.                 (line 165)
-* urx:                                   Miscellaneous.       (line 138)
-* ury:                                   Miscellaneous.       (line 139)
-* VS [ms]:                               ms Document Control Registers.
-                                                              (line  67)
-* year:                                  Built-in Registers.  (line  54)
-* yr:                                    Built-in Registers.  (line  57)
-
-
-File: groff.info,  Node: Macro Index,  Next: String Index,  Prev: Register Index,  Up: Top
-
-Appendix F Macro Index
-**********************
-
-The macro package a specific macro belongs to is appended in brackets.
-They appear without the leading control character (normally '.').
-
- [index ]
-* Menu:
-
-* 1C [ms]:                               ms Multiple Columns. (line  13)
-* 2C [ms]:                               ms Multiple Columns. (line  16)
-* [ [ms]:                                ms Insertions.       (line  33)
-* ] [ms]:                                ms Insertions.       (line  34)
-* AB [ms]:                               ms Cover Page Macros.
-                                                              (line  59)
-* AE [ms]:                               ms Cover Page Macros.
-                                                              (line  64)
-* AI [ms]:                               ms Cover Page Macros.
-                                                              (line  55)
-* AM [ms]:                               ms Strings and Special Characters.
-                                                              (line  51)
-* AM [ms] <1>:                           Additional ms Macros.
-                                                              (line  10)
-* AT [man]:                              Miscellaneous man macros.
-                                                              (line  27)
-* AU [ms]:                               ms Cover Page Macros.
-                                                              (line  39)
-* B [man]:                               Man font macros.     (line  47)
-* B [ms]:                                Highlighting in ms.  (line  10)
-* B1 [ms]:                               ms Displays and Keeps.
-                                                              (line  94)
-* B2 [ms]:                               ms Displays and Keeps.
-                                                              (line  95)
-* BD [ms]:                               ms Displays and Keeps.
-                                                              (line  31)
-* BI [man]:                              Man font macros.     (line  18)
-* BI [ms]:                               Highlighting in ms.  (line  38)
-* BR [man]:                              Man font macros.     (line  39)
-* BT [man]:                              Optional man extensions.
-                                                              (line  21)
-* BT [ms]:                               ms Headers and Footers.
-                                                              (line  39)
-* BX [ms]:                               Highlighting in ms.  (line  42)
-* CD [ms]:                               ms Displays and Keeps.
-                                                              (line  41)
-* CT [man]:                              Optional man extensions.
-                                                              (line  36)
-* CW [man]:                              Optional man extensions.
-                                                              (line  39)
-* CW [ms]:                               Highlighting in ms.  (line  34)
-* CW [ms] <1>:                           Additional ms Macros.
-                                                              (line  19)
-* DA [ms]:                               ms Cover Page Macros.
-                                                              (line  24)
-* De [man]:                              Optional man extensions.
-                                                              (line  45)
-* DE [ms]:                               ms Displays and Keeps.
-                                                              (line  16)
-* DE [ms] <1>:                           ms Displays and Keeps.
-                                                              (line  24)
-* DE [ms] <2>:                           ms Displays and Keeps.
-                                                              (line  32)
-* DE [ms] <3>:                           ms Displays and Keeps.
-                                                              (line  42)
-* DE [ms] <4>:                           ms Displays and Keeps.
-                                                              (line  50)
-* De [ms]:                               ms Displays and Keeps.
-                                                              (line  57)
-* Ds [man]:                              Optional man extensions.
-                                                              (line  42)
-* DS [ms]:                               ms Displays and Keeps.
-                                                              (line  14)
-* DS [ms] <1>:                           ms Displays and Keeps.
-                                                              (line  22)
-* DS [ms] <2>:                           ms Displays and Keeps.
-                                                              (line  30)
-* DS [ms] <3>:                           ms Displays and Keeps.
-                                                              (line  40)
-* DS [ms] <4>:                           ms Displays and Keeps.
-                                                              (line  48)
-* Ds [ms]:                               ms Displays and Keeps.
-                                                              (line  56)
-* DS [ms] <5>:                           Additional ms Macros.
-                                                              (line  14)
-* DT [man]:                              Miscellaneous man macros.
-                                                              (line  10)
-* EE [man]:                              Optional man extensions.
-                                                              (line  52)
-* EF [ms]:                               ms Headers and Footers.
-                                                              (line  26)
-* EH [ms]:                               ms Headers and Footers.
-                                                              (line  24)
-* EN [ms]:                               ms Insertions.       (line  28)
-* EQ [ms]:                               ms Insertions.       (line  27)
-* EX [man]:                              Optional man extensions.
-                                                              (line  48)
-* FE [ms]:                               ms Footnotes.        (line  15)
-* FS [ms]:                               ms Footnotes.        (line  14)
-* G [man]:                               Optional man extensions.
-                                                              (line  55)
-* GL [man]:                              Optional man extensions.
-                                                              (line  60)
-* HB [man]:                              Optional man extensions.
-                                                              (line  65)
-* HD [ms]:                               ms Headers and Footers.
-                                                              (line  38)
-* HP [man]:                              Man usage.           (line  98)
-* I [man]:                               Man font macros.     (line  52)
-* I [ms]:                                Highlighting in ms.  (line  30)
-* IB [man]:                              Man font macros.     (line  27)
-* ID [ms]:                               ms Displays and Keeps.
-                                                              (line  23)
-* IP [man]:                              Man usage.           (line  80)
-* IP [ms]:                               Lists in ms.         (line   9)
-* IR [man]:                              Man font macros.     (line  35)
-* IX [ms]:                               Additional ms Macros.
-                                                              (line  22)
-* KE [ms]:                               ms Displays and Keeps.
-                                                              (line  73)
-* KE [ms] <1>:                           ms Displays and Keeps.
-                                                              (line  78)
-* KF [ms]:                               ms Displays and Keeps.
-                                                              (line  77)
-* KS [ms]:                               ms Displays and Keeps.
-                                                              (line  72)
-* LD [ms]:                               ms Displays and Keeps.
-                                                              (line  15)
-* LG [ms]:                               Highlighting in ms.  (line  51)
-* LP [man]:                              Man usage.           (line  70)
-* LP [ms]:                               Paragraphs in ms.    (line  12)
-* MC [ms]:                               ms Multiple Columns. (line  19)
-* MS [man]:                              Optional man extensions.
-                                                              (line  73)
-* ND [ms]:                               ms Cover Page Macros.
-                                                              (line  29)
-* NE [man]:                              Optional man extensions.
-                                                              (line  85)
-* NH [ms]:                               Headings in ms.      (line  13)
-* NL [ms]:                               Highlighting in ms.  (line  63)
-* NT [man]:                              Optional man extensions.
-                                                              (line  78)
-* OF [ms]:                               ms Headers and Footers.
-                                                              (line  25)
-* OH [ms]:                               ms Headers and Footers.
-                                                              (line  23)
-* P [man]:                               Man usage.           (line  72)
-* P1 [ms]:                               ms Cover Page Macros.
-                                                              (line  20)
-* PD [man]:                              Miscellaneous man macros.
-                                                              (line  15)
-* PE [ms]:                               ms Insertions.       (line  21)
-* PN [man]:                              Optional man extensions.
-                                                              (line  88)
-* Pn [man]:                              Optional man extensions.
-                                                              (line  92)
-* PP [man]:                              Man usage.           (line  71)
-* PP [ms]:                               Paragraphs in ms.    (line   9)
-* PS [ms]:                               ms Insertions.       (line  20)
-* PT [man]:                              Optional man extensions.
-                                                              (line  16)
-* PT [ms]:                               ms Headers and Footers.
-                                                              (line  37)
-* PX [ms]:                               ms TOC.              (line  62)
-* QP [ms]:                               Paragraphs in ms.    (line  15)
-* R [man]:                               Optional man extensions.
-                                                              (line  98)
-* R [ms]:                                Highlighting in ms.  (line  26)
-* RB [man]:                              Man font macros.     (line  43)
-* RD [ms]:                               ms Displays and Keeps.
-                                                              (line  49)
-* RE [man]:                              Man usage.           (line 115)
-* RE [ms]:                               Indentation values in ms.
-                                                              (line  12)
-* RI [man]:                              Man font macros.     (line  31)
-* RN [man]:                              Optional man extensions.
-                                                              (line 101)
-* RP [ms]:                               ms Cover Page Macros.
-                                                              (line  10)
-* RS [man]:                              Man usage.           (line 106)
-* RS [ms]:                               Indentation values in ms.
-                                                              (line  11)
-* SB [man]:                              Man font macros.     (line  14)
-* SH [man]:                              Man usage.           (line  34)
-* SH [ms]:                               Headings in ms.      (line  54)
-* SM [man]:                              Man font macros.     (line  10)
-* SM [ms]:                               Highlighting in ms.  (line  57)
-* SS [man]:                              Man usage.           (line  43)
-* TA [ms]:                               Tabstops in ms.      (line  10)
-* TB [man]:                              Optional man extensions.
-                                                              (line  70)
-* TC [ms]:                               ms TOC.              (line  52)
-* TE [ms]:                               ms Insertions.       (line  12)
-* TH [man]:                              Man usage.           (line  11)
-* TL [ms]:                               ms Cover Page Macros.
-                                                              (line  34)
-* TP [man]:                              Man usage.           (line  51)
-* TS [ms]:                               ms Insertions.       (line  11)
-* UC [man]:                              Miscellaneous man macros.
-                                                              (line  44)
-* UL [ms]:                               Highlighting in ms.  (line  46)
-* VE [man]:                              Optional man extensions.
-                                                              (line 108)
-* VS [man]:                              Optional man extensions.
-                                                              (line 104)
-* XA [ms]:                               ms TOC.              (line  13)
-* XE [ms]:                               ms TOC.              (line  14)
-* XP [ms]:                               Paragraphs in ms.    (line  20)
-* XS [ms]:                               ms TOC.              (line  12)
-
-
-File: groff.info,  Node: String Index,  Next: Glyph Name Index,  Prev: Macro Index,  Up: Top
-
-Appendix G String Index
-***********************
-
-The macro package or program a specific string belongs to is appended in
-brackets.
-
-   A string name 'x' consisting of exactly one character can be accessed
-as '\*x'.  A string name 'xx' consisting of exactly two characters can
-be accessed as '\*(xx'.  String names 'xxx' of any length can be
-accessed as '\*[xxx]'.
-
- [index ]
-* Menu:
-
-* ! [ms]:                                ms Strings and Special Characters.
-                                                              (line 101)
-* ' [ms]:                                ms Strings and Special Characters.
-                                                              (line  65)
-* * [ms]:                                ms Footnotes.        (line  11)
-* , [ms]:                                ms Strings and Special Characters.
-                                                              (line  74)
-* - [ms]:                                ms Strings and Special Characters.
-                                                              (line  41)
-* . [ms]:                                ms Strings and Special Characters.
-                                                              (line  89)
-* .T:                                    Built-in Registers.  (line 127)
-* 3 [ms]:                                ms Strings and Special Characters.
-                                                              (line 107)
-* 8 [ms]:                                ms Strings and Special Characters.
-                                                              (line 104)
-* ? [ms]:                                ms Strings and Special Characters.
-                                                              (line  98)
-* \*[<colon>] [ms]:                      ms Strings and Special Characters.
-                                                              (line  80)
-* ^ [ms]:                                ms Strings and Special Characters.
-                                                              (line  71)
-* _ [ms]:                                ms Strings and Special Characters.
-                                                              (line  86)
-* ` [ms]:                                ms Strings and Special Characters.
-                                                              (line  68)
-* { [ms]:                                Highlighting in ms.  (line  67)
-* } [ms]:                                Highlighting in ms.  (line  68)
-* ~ [ms]:                                ms Strings and Special Characters.
-                                                              (line  77)
-* ABSTRACT [ms]:                         ms Strings and Special Characters.
-                                                              (line  15)
-* ae [ms]:                               ms Strings and Special Characters.
-                                                              (line 125)
-* Ae [ms]:                               ms Strings and Special Characters.
-                                                              (line 128)
-* CF [ms]:                               ms Headers and Footers.
-                                                              (line  16)
-* CH [ms]:                               ms Headers and Footers.
-                                                              (line  11)
-* D- [ms]:                               ms Strings and Special Characters.
-                                                              (line 116)
-* d- [ms]:                               ms Strings and Special Characters.
-                                                              (line 119)
-* HF [man]:                              Predefined man strings.
-                                                              (line  12)
-* LF [ms]:                               ms Headers and Footers.
-                                                              (line  15)
-* LH [ms]:                               ms Headers and Footers.
-                                                              (line  10)
-* lq [man]:                              Predefined man strings.
-                                                              (line  21)
-* MONTH1 [ms]:                           ms Strings and Special Characters.
-                                                              (line  23)
-* MONTH10 [ms]:                          ms Strings and Special Characters.
-                                                              (line  32)
-* MONTH11 [ms]:                          ms Strings and Special Characters.
-                                                              (line  33)
-* MONTH12 [ms]:                          ms Strings and Special Characters.
-                                                              (line  34)
-* MONTH2 [ms]:                           ms Strings and Special Characters.
-                                                              (line  24)
-* MONTH3 [ms]:                           ms Strings and Special Characters.
-                                                              (line  25)
-* MONTH4 [ms]:                           ms Strings and Special Characters.
-                                                              (line  26)
-* MONTH5 [ms]:                           ms Strings and Special Characters.
-                                                              (line  27)
-* MONTH6 [ms]:                           ms Strings and Special Characters.
-                                                              (line  28)
-* MONTH7 [ms]:                           ms Strings and Special Characters.
-                                                              (line  29)
-* MONTH8 [ms]:                           ms Strings and Special Characters.
-                                                              (line  30)
-* MONTH9 [ms]:                           ms Strings and Special Characters.
-                                                              (line  31)
-* o [ms]:                                ms Strings and Special Characters.
-                                                              (line  92)
-* Q [ms]:                                ms Strings and Special Characters.
-                                                              (line  44)
-* q [ms]:                                ms Strings and Special Characters.
-                                                              (line 122)
-* R [man]:                               Predefined man strings.
-                                                              (line  15)
-* REFERENCES [ms]:                       ms Strings and Special Characters.
-                                                              (line  11)
-* RF [ms]:                               ms Headers and Footers.
-                                                              (line  17)
-* RH [ms]:                               ms Headers and Footers.
-                                                              (line  12)
-* rq [man]:                              Predefined man strings.
-                                                              (line  22)
-* S [man]:                               Predefined man strings.
-                                                              (line   9)
-* SN [ms]:                               Headings in ms.      (line  22)
-* SN-DOT [ms]:                           Headings in ms.      (line  23)
-* SN-NO-DOT [ms]:                        Headings in ms.      (line  24)
-* SN-STYLE [ms]:                         Headings in ms.      (line  36)
-* Th [ms]:                               ms Strings and Special Characters.
-                                                              (line 110)
-* th [ms]:                               ms Strings and Special Characters.
-                                                              (line 113)
-* Tm [man]:                              Predefined man strings.
-                                                              (line  18)
-* TOC [ms]:                              ms Strings and Special Characters.
-                                                              (line  19)
-* U [ms]:                                ms Strings and Special Characters.
-                                                              (line  45)
-* v [ms]:                                ms Strings and Special Characters.
-                                                              (line  83)
-* www-image-template [grohtml]:          grohtml specific registers and strings.
-                                                              (line   8)
-
-
-File: groff.info,  Node: Glyph Name Index,  Next: Font File Keyword Index,  Prev: String Index,  Up: Top
-
-Appendix H Glyph Name Index
-***************************
-
-A glyph name 'xx' consisting of exactly two characters can be accessed
-as '\(xx'.  Glyph names 'xxx' of any length can be accessed as '\[xxx]'.
-
-
-File: groff.info,  Node: Font File Keyword Index,  Next: Program and File Index,  Prev: Glyph Name Index,  Up: Top
-
-Appendix I Font File Keyword Index
-**********************************
-
- [index ]
-* Menu:
-
-* #:                                     Font File Format.    (line  36)
-* ---:                                   Font File Format.    (line  51)
-* biggestfont:                           DESC File Format.    (line 142)
-* charset:                               DESC File Format.    (line  12)
-* charset <1>:                           Font File Format.    (line  44)
-* family:                                Changing Fonts.      (line  11)
-* family <1>:                            Font Positions.      (line  60)
-* family <2>:                            DESC File Format.    (line  16)
-* fonts:                                 Using Symbols.       (line  14)
-* fonts <1>:                             Special Fonts.       (line  18)
-* fonts <2>:                             DESC File Format.    (line  19)
-* hor:                                   DESC File Format.    (line  25)
-* image_generator:                       DESC File Format.    (line  29)
-* kernpairs:                             Font File Format.    (line 139)
-* ligatures:                             Font File Format.    (line  22)
-* name:                                  Font File Format.    (line  12)
-* paperlength:                           DESC File Format.    (line  35)
-* papersize:                             DESC File Format.    (line  40)
-* paperwidth:                            DESC File Format.    (line  59)
-* pass_filenames:                        DESC File Format.    (line  64)
-* postpro:                               DESC File Format.    (line  69)
-* prepro:                                DESC File Format.    (line  77)
-* print:                                 DESC File Format.    (line  81)
-* res:                                   DESC File Format.    (line  85)
-* sizes:                                 DESC File Format.    (line  88)
-* sizescale:                             DESC File Format.    (line  95)
-* slant:                                 Font File Format.    (line  18)
-* spacewidth:                            Font File Format.    (line  15)
-* spare1:                                DESC File Format.    (line 142)
-* spare2:                                DESC File Format.    (line 142)
-* special:                               Artificial Fonts.    (line 115)
-* special <1>:                           Font File Format.    (line  28)
-* styles:                                Changing Fonts.      (line  11)
-* styles <1>:                            Font Families.       (line  75)
-* styles <2>:                            Font Positions.      (line  60)
-* styles <3>:                            DESC File Format.    (line 101)
-* tcommand:                              DESC File Format.    (line 104)
-* unicode:                               DESC File Format.    (line 108)
-* unitwidth:                             DESC File Format.    (line 122)
-* unscaled_charwidths:                   DESC File Format.    (line 126)
-* use_charnames_in_special:              Postprocessor Access.
-                                                              (line  22)
-* use_charnames_in_special <1>:          DESC File Format.    (line 130)
-* vert:                                  DESC File Format.    (line 135)
-
-
-File: groff.info,  Node: Program and File Index,  Next: Concept Index,  Prev: Font File Keyword Index,  Up: Top
-
-Appendix J Program and File Index
-*********************************
-
- [index ]
-* Menu:
-
-* an.tmac:                               man.                 (line   6)
-* changebar:                             Miscellaneous.       (line 108)
-* composite.tmac:                        Using Symbols.       (line 191)
-* cp1047.tmac:                           Input Encodings.     (line   9)
-* DESC:                                  Changing Fonts.      (line  11)
-* DESC <1>:                              Font Families.       (line  75)
-* DESC <2>:                              Font Positions.      (line  60)
-* DESC <3>:                              Using Symbols.       (line  14)
-* DESC <4>:                              Using Symbols.       (line 212)
-* DESC <5>:                              Special Fonts.       (line  18)
-* DESC file format:                      DESC File Format.    (line   6)
-* DESC, and font mounting:               Font Positions.      (line  36)
-* DESC, and 'use_charnames_in_special':  Postprocessor Access.
-                                                              (line  22)
-* ditroff:                               History.             (line  59)
-* ec.tmac:                               Input Encodings.     (line  46)
-* eqn:                                   ms Insertions.       (line   7)
-* freeeuro.pfa:                          Input Encodings.     (line  46)
-* gchem:                                 Groff Options.       (line   6)
-* geqn:                                  Groff Options.       (line   6)
-* geqn, invocation in manual pages:      Preprocessors in man pages.
-                                                              (line  11)
-* ggrn:                                  Groff Options.       (line   6)
-* gpic:                                  Groff Options.       (line   6)
-* grap:                                  Groff Options.       (line   6)
-* grefer:                                Groff Options.       (line   6)
-* grefer, invocation in manual pages:    Preprocessors in man pages.
-                                                              (line  11)
-* groff:                                 Groff Options.       (line   6)
-* grog:                                  grog.                (line   6)
-* grohtml:                               Miscellaneous man macros.
-                                                              (line   6)
-* gsoelim:                               Groff Options.       (line   6)
-* gtbl:                                  Groff Options.       (line   6)
-* gtbl, invocation in manual pages:      Preprocessors in man pages.
-                                                              (line  11)
-* gtroff:                                Groff Options.       (line   6)
-* hyphen.us:                             Manipulating Hyphenation.
-                                                              (line 162)
-* hyphenex.us:                           Manipulating Hyphenation.
-                                                              (line 162)
-* latin1.tmac:                           Input Encodings.     (line  14)
-* latin2.tmac:                           Input Encodings.     (line  18)
-* latin2.tmac <1>:                       Input Encodings.     (line  23)
-* latin9.tmac:                           Input Encodings.     (line  28)
-* less:                                  Invoking grotty.     (line  50)
-* makeindex:                             Indices.             (line  10)
-* man, invocation of preprocessors:      Preprocessors in man pages.
-                                                              (line  11)
-* man-old.tmac:                          man.                 (line   6)
-* man.local:                             Man usage.           (line   6)
-* man.local <1>:                         Optional man extensions.
-                                                              (line   6)
-* man.tmac:                              man.                 (line   6)
-* man.ultrix:                            Optional man extensions.
-                                                              (line  30)
-* nrchbar:                               Miscellaneous.       (line 108)
-* papersize.tmac:                        Paper Size.          (line  16)
-* perl:                                  I/O.                 (line 175)
-* pic:                                   ms Insertions.       (line   7)
-* post-grohtml:                          Groff Options.       (line 275)
-* pre-grohtml:                           Groff Options.       (line 275)
-* preconv:                               Groff Options.       (line   6)
-* refer:                                 ms Insertions.       (line   7)
-* soelim:                                Debugging.           (line  10)
-* tbl:                                   ms Insertions.       (line   7)
-* trace.tmac:                            Writing Macros.      (line 104)
-* trace.tmac <1>:                        Writing Macros.      (line 136)
-* troffrc:                               Groff Options.       (line 206)
-* troffrc <1>:                           Paper Size.          (line  16)
-* troffrc <2>:                           Manipulating Hyphenation.
-                                                              (line 162)
-* troffrc <3>:                           Manipulating Hyphenation.
-                                                              (line 256)
-* troffrc <4>:                           Troff and Nroff Mode.
-                                                              (line  24)
-* troffrc <5>:                           Line Layout.         (line  61)
-* troffrc-end:                           Groff Options.       (line 206)
-* troffrc-end <1>:                       Manipulating Hyphenation.
-                                                              (line 162)
-* troffrc-end <2>:                       Manipulating Hyphenation.
-                                                              (line 256)
-* troffrc-end <3>:                       Troff and Nroff Mode.
-                                                              (line  24)
-* tty.tmac:                              Troff and Nroff Mode.
-                                                              (line  32)
-
-
-File: groff.info,  Node: Concept Index,  Prev: Program and File Index,  Up: Top
-
-Appendix K Concept Index
-************************
-
- [index ]
-* Menu:
-
-* '"', at end of sentence:               Sentences.           (line  18)
-* '"', at end of sentence <1>:           Using Symbols.       (line 275)
-* '"', in a macro argument:              Request and Macro Arguments.
-                                                              (line  25)
-* '%', as delimiter:                     Escapes.             (line  67)
-* '&', as delimiter:                     Escapes.             (line  67)
-* ''', as a comment:                     Comments.            (line  42)
-* ''', at end of sentence:               Sentences.           (line  18)
-* ''', at end of sentence <1>:           Using Symbols.       (line 275)
-* ''', delimiting arguments:             Escapes.             (line  29)
-* '(', as delimiter:                     Escapes.             (line  67)
-* '(', starting a two-character identifier: Identifiers.      (line  73)
-* '(', starting a two-character identifier <1>: Escapes.      (line  16)
-* ')', as delimiter:                     Escapes.             (line  67)
-* ')', at end of sentence:               Sentences.           (line  18)
-* ')', at end of sentence <1>:           Using Symbols.       (line 275)
-* '*', as delimiter:                     Escapes.             (line  67)
-* '*', at end of sentence:               Sentences.           (line  18)
-* '*', at end of sentence <1>:           Using Symbols.       (line 275)
-* '+', and page motion:                  Expressions.         (line  65)
-* '+', as delimiter:                     Escapes.             (line  67)
-* '-', and page motion:                  Expressions.         (line  65)
-* '-', as delimiter:                     Escapes.             (line  67)
-* '.', as delimiter:                     Escapes.             (line  67)
-* '.h' register, difference to 'nl':     Diversions.          (line  88)
-* '.ps' register, in comparison with '.psr': Fractional Type Sizes.
-                                                              (line  45)
-* '.s' register, in comparison with '.sr': Fractional Type Sizes.
-                                                              (line  45)
-* '.S' register, Plan 9 alias for '.tabs': Tabs and Fields.   (line 125)
-* '.t' register, and diversions:         Diversion Traps.     (line   7)
-* '.tabs' register, Plan 9 alias ('.S'): Tabs and Fields.     (line 125)
-* '.V' register, and 'vs':               Changing Type Sizes. (line  94)
-* '/', as delimiter:                     Escapes.             (line  67)
-* 8-bit input:                           Font File Format.    (line  51)
-* '<', as delimiter:                     Escapes.             (line  67)
-* <colon>, as delimiter:                 Escapes.             (line  67)
-* '=', as delimiter:                     Escapes.             (line  67)
-* '>', as delimiter:                     Escapes.             (line  67)
-* '[', macro names starting with, and 'refer': Identifiers.   (line  46)
-* '[', starting an identifier:           Identifiers.         (line  75)
-* '[', starting an identifier <1>:       Escapes.             (line  20)
-* '\!', and copy-in mode:                Diversions.          (line 148)
-* '\!', and 'output' request:            Diversions.          (line 179)
-* '\!', and 'trnt':                      Character Translations.
-                                                              (line 237)
-* '\!', in top-level diversion:          Diversions.          (line 171)
-* '\!', incompatibilities with AT&T 'troff': Implementation Differences.
-                                                              (line  69)
-* '\!', incompatibilities with AT&T 'troff' <1>: Implementation Differences.
-                                                              (line 106)
-* '\!', used as delimiter:               Escapes.             (line  52)
-* '\!', used as delimiter <1>:           Escapes.             (line  71)
-* '\$', when reading text for a macro:   Copy-in Mode.        (line   6)
-* '\%', and translations:                Character Translations.
-                                                              (line 166)
-* '\%', following '\X' or '\Y':          Manipulating Hyphenation.
-                                                              (line  98)
-* '\%', in '\X':                         Postprocessor Access.
-                                                              (line  14)
-* '\%', incompatibilities with AT&T 'troff': Implementation Differences.
-                                                              (line  69)
-* '\%', used as delimiter:               Escapes.             (line  52)
-* '\%', used as delimiter <1>:           Escapes.             (line  71)
-* '\&', and glyph definitions:           Using Symbols.       (line 326)
-* '\&', and translations:                Character Translations.
-                                                              (line 176)
-* '\&', at end of sentence:              Sentences.           (line  24)
-* '\&', escaping control characters:     Requests.            (line  47)
-* '\&', in '\X':                         Postprocessor Access.
-                                                              (line  14)
-* '\&', incompatibilities with AT&T 'troff': Implementation Differences.
-                                                              (line  69)
-* '\&', used as delimiter:               Escapes.             (line  52)
-* '\'', and translations:                Character Translations.
-                                                              (line 160)
-* '\'', incompatibilities with AT&T 'troff': Implementation Differences.
-                                                              (line  69)
-* '\'', used as delimiter:               Escapes.             (line  52)
-* '\'', used as delimiter <1>:           Escapes.             (line  71)
-* '\(', and translations:                Character Translations.
-                                                              (line 160)
-* '\)', in '\X':                         Postprocessor Access.
-                                                              (line  14)
-* '\)', used as delimiter:               Escapes.             (line  52)
-* '\*', and warnings:                    Warnings.            (line  54)
-* '\*', incompatibilities with AT&T 'troff': Implementation Differences.
-                                                              (line  13)
-* '\*', when reading text for a macro:   Copy-in Mode.        (line   6)
-* '\', disabling ('eo'):                 Character Translations.
-                                                              (line  24)
-* '\,', used as delimiter:               Escapes.             (line  52)
-* '\-', and translations:                Character Translations.
-                                                              (line 160)
-* '\-', incompatibilities with AT&T 'troff': Implementation Differences.
-                                                              (line  69)
-* '\-', used as delimiter:               Escapes.             (line  52)
-* '\-', used as delimiter <1>:           Escapes.             (line  71)
-* '\/', used as delimiter:               Escapes.             (line  52)
-* '\/', used as delimiter <1>:           Escapes.             (line  71)
-* '\0', used as delimiter:               Escapes.             (line  52)
-* '\<colon>', in '\X':                   Postprocessor Access.
-                                                              (line  14)
-* '\<colon>', used as delimiter:         Escapes.             (line  52)
-* '\<colon>', used as delimiter <1>:     Escapes.             (line  71)
-* '\?', and copy-in mode:                Operators in Conditionals.
-                                                              (line  55)
-* '\?', and copy-in mode <1>:            Diversions.          (line 148)
-* '\?', in top-level diversion:          Diversions.          (line 176)
-* '\?', incompatibilities with AT&T 'troff': Implementation Differences.
-                                                              (line 106)
-* '\?', used as delimiter:               Escapes.             (line  52)
-* '\A', allowed delimiters:              Escapes.             (line  59)
-* '\a', and copy-in mode:                Leaders.             (line  18)
-* '\a', and translations:                Character Translations.
-                                                              (line 169)
-* '\A', incompatibilities with AT&T 'troff': Implementation Differences.
-                                                              (line  69)
-* '\a', used as delimiter:               Escapes.             (line  52)
-* '\B', allowed delimiters:              Escapes.             (line  59)
-* '\b', limitations:                     Drawing Requests.    (line 239)
-* '\b', possible quote characters:       Escapes.             (line  37)
-* '\C', allowed delimiters:              Escapes.             (line  59)
-* '\c', and fill mode:                   Line Control.        (line  69)
-* '\c', and no-fill mode:                Line Control.        (line  60)
-* '\C', and translations:                Character Translations.
-                                                              (line 160)
-* '\c', incompatibilities with AT&T 'troff': Implementation Differences.
-                                                              (line  69)
-* '\c', used as delimiter:               Escapes.             (line  52)
-* '\c', used as delimiter <1>:           Escapes.             (line  71)
-* '\D'f ...'' and horizontal resolution: Drawing Requests.    (line 151)
-* '\D', allowed delimiters:              Escapes.             (line  62)
-* '\d', used as delimiter:               Escapes.             (line  52)
-* '\E', and copy-in mode:                Character Translations.
-                                                              (line  81)
-* '\e', and glyph definitions:           Using Symbols.       (line 326)
-* '\e', and translations:                Character Translations.
-                                                              (line 164)
-* '\e', incompatibilities with AT&T 'troff': Implementation Differences.
-                                                              (line 106)
-* '\e', used as delimiter:               Escapes.             (line  52)
-* '\E', used as delimiter:               Escapes.             (line  52)
-* '\e', used as delimiter <1>:           Escapes.             (line  71)
-* '\F', and changing fonts:              Changing Fonts.      (line  11)
-* '\F', and font positions:              Font Positions.      (line  60)
-* '\f', and font translations:           Changing Fonts.      (line  55)
-* '\f', incompatibilities with AT&T 'troff': Implementation Differences.
-                                                              (line  56)
-* '\h', allowed delimiters:              Escapes.             (line  62)
-* '\H', allowed delimiters:              Escapes.             (line  62)
-* '\H', incompatibilities with AT&T 'troff': Implementation Differences.
-                                                              (line  56)
-* '\H', using '+' and '-':               Expressions.         (line  75)
-* '\H', with fractional type sizes:      Fractional Type Sizes.
-                                                              (line   6)
-* '\l', allowed delimiters:              Escapes.             (line  62)
-* '\L', allowed delimiters:              Escapes.             (line  62)
-* '\l', and glyph definitions:           Using Symbols.       (line 326)
-* '\L', and glyph definitions:           Using Symbols.       (line 326)
-* '\N', allowed delimiters:              Escapes.             (line  62)
-* '\N', and translations:                Character Translations.
-                                                              (line 160)
-* '\n', and warnings:                    Warnings.            (line  61)
-* '\n', incompatibilities with AT&T 'troff': Implementation Differences.
-                                                              (line  13)
-* '\n', when reading text for a macro:   Copy-in Mode.        (line   6)
-* '\o', possible quote characters:       Escapes.             (line  37)
-* '\p', used as delimiter:               Escapes.             (line  52)
-* '\p', used as delimiter <1>:           Escapes.             (line  71)
-* '\R', after '\c':                      Line Control.        (line  52)
-* '\R', allowed delimiters:              Escapes.             (line  62)
-* '\R', and warnings:                    Warnings.            (line  61)
-* '\R', difference to 'nr':              Auto-increment.      (line  11)
-* '\r', used as delimiter:               Escapes.             (line  52)
-* '\R', using '+' and '-':               Expressions.         (line  75)
-* \<RET>, when reading text for a macro: Copy-in Mode.        (line   6)
-* '\s', allowed delimiters:              Escapes.             (line  62)
-* '\S', allowed delimiters:              Escapes.             (line  62)
-* '\s', incompatibilities with AT&T 'troff': Implementation Differences.
-                                                              (line  56)
-* '\S', incompatibilities with AT&T 'troff': Implementation Differences.
-                                                              (line  56)
-* '\s', using '+' and '-':               Expressions.         (line  75)
-* '\s', with fractional type sizes:      Fractional Type Sizes.
-                                                              (line   6)
-* '\<SP>', difference to '\~':           Request and Macro Arguments.
-                                                              (line  20)
-* '\<SP>', incompatibilities with AT&T 'troff': Implementation Differences.
-                                                              (line  69)
-* '\<SP>', used as delimiter:            Escapes.             (line  52)
-* '\t', and copy-in mode:                Tabs and Fields.     (line  10)
-* '\t', and translations:                Character Translations.
-                                                              (line 169)
-* '\t', and warnings:                    Warnings.            (line  69)
-* '\t', used as delimiter:               Escapes.             (line  52)
-* '\u', used as delimiter:               Escapes.             (line  52)
-* '\v', allowed delimiters:              Escapes.             (line  62)
-* '\V', and copy-in mode:                I/O.                 (line 249)
-* '\v', internal representation:         Gtroff Internals.    (line  54)
-* '\w', allowed delimiters:              Escapes.             (line  59)
-* '\x', allowed delimiters:              Escapes.             (line  62)
-* '\X', and special characters:          Postprocessor Access.
-                                                              (line  22)
-* '\X', followed by '\%':                Manipulating Hyphenation.
-                                                              (line  98)
-* '\X', possible quote characters:       Escapes.             (line  37)
-* '\Y', followed by '\%':                Manipulating Hyphenation.
-                                                              (line  98)
-* '\Z', allowed delimiters:              Escapes.             (line  59)
-* '\[', and translations:                Character Translations.
-                                                              (line 160)
-* '\\', when reading text for a macro:   Copy-in Mode.        (line   6)
-* '\^', incompatibilities with AT&T 'troff': Implementation Differences.
-                                                              (line  69)
-* '\^', used as delimiter:               Escapes.             (line  52)
-* '\_', and translations:                Character Translations.
-                                                              (line 160)
-* '\_', incompatibilities with AT&T 'troff': Implementation Differences.
-                                                              (line  69)
-* '\_', used as delimiter:               Escapes.             (line  52)
-* '\_', used as delimiter <1>:           Escapes.             (line  71)
-* '\`', and translations:                Character Translations.
-                                                              (line 160)
-* '\`', incompatibilities with AT&T 'troff': Implementation Differences.
-                                                              (line  69)
-* '\`', used as delimiter:               Escapes.             (line  52)
-* '\`', used as delimiter <1>:           Escapes.             (line  71)
-* '\{', incompatibilities with AT&T 'troff': Implementation Differences.
-                                                              (line  69)
-* '\{', used as delimiter:               Escapes.             (line  52)
-* '\{', used as delimiter <1>:           Escapes.             (line  71)
-* '\|', incompatibilities with AT&T 'troff': Implementation Differences.
-                                                              (line  69)
-* '\|', used as delimiter:               Escapes.             (line  52)
-* '\}', and warnings:                    Warnings.            (line  73)
-* '\}', incompatibilities with AT&T 'troff': Implementation Differences.
-                                                              (line  69)
-* '\}', used as delimiter:               Escapes.             (line  52)
-* '\}', used as delimiter <1>:           Escapes.             (line  71)
-* '\~', and translations:                Character Translations.
-                                                              (line 166)
-* '\~', difference to '\<SP>':           Request and Macro Arguments.
-                                                              (line  20)
-* '\~', used as delimiter:               Escapes.             (line  52)
-* ']', as part of an identifier:         Identifiers.         (line  41)
-* ']', at end of sentence:               Sentences.           (line  18)
-* ']', at end of sentence <1>:           Using Symbols.       (line 275)
-* ']', ending an identifier:             Identifiers.         (line  75)
-* ']', ending an identifier <1>:         Escapes.             (line  20)
-* ']', macro names starting with, and 'refer': Identifiers.   (line  46)
-* '|', and page motion:                  Expressions.         (line  70)
-* aborting ('ab'):                       Debugging.           (line  40)
-* absolute position operator ('|'):      Expressions.         (line  70)
-* accent marks ['ms']:                   ms Strings and Special Characters.
-                                                              (line   6)
-* access of postprocessor:               Postprocessor Access.
-                                                              (line   6)
-* accessing unnamed glyphs with '\N':    Font File Format.    (line  51)
-* activating kerning ('kern'):           Ligatures and Kerning.
-                                                              (line  42)
-* activating ligatures ('lg'):           Ligatures and Kerning.
-                                                              (line  24)
-* activating track kerning ('tkf'):      Ligatures and Kerning.
-                                                              (line  60)
-* 'ad' request, and hyphenation margin:  Manipulating Hyphenation.
-                                                              (line 211)
-* 'ad' request, and hyphenation space:   Manipulating Hyphenation.
-                                                              (line 227)
-* adjusting:                             Filling and Adjusting.
-                                                              (line   6)
-* adjusting and filling, manipulating:   Manipulating Filling and Adjusting.
-                                                              (line   6)
-* adjustment mode register ('.j'):       Manipulating Filling and Adjusting.
-                                                              (line 114)
-* adobe glyph list (AGL):                Using Symbols.       (line  88)
-* AGL (adobe glyph list):                Using Symbols.       (line  88)
-* alias, diversion, creating ('als'):    Strings.             (line 229)
-* alias, diversion, removing ('rm'):     Strings.             (line 263)
-* alias, macro, creating ('als'):        Strings.             (line 229)
-* alias, macro, removing ('rm'):         Strings.             (line 263)
-* alias, number register, creating ('aln'): Setting Registers.
-                                                              (line 112)
-* alias, string, creating ('als'):       Strings.             (line 229)
-* alias, string, removing ('rm'):        Strings.             (line 263)
-* 'als' request, and '\$0':              Parameters.          (line  71)
-* 'am', 'am1', 'ami' requests, and warnings: Warnings.        (line  54)
-* annotations:                           Footnotes and Annotations.
-                                                              (line   6)
-* appending to a diversion ('da'):       Diversions.          (line  22)
-* appending to a file ('opena'):         I/O.                 (line 200)
-* appending to a macro ('am'):           Writing Macros.      (line 116)
-* appending to a string ('as'):          Strings.             (line 176)
-* arc, drawing ('\D'a ...''):            Drawing Requests.    (line 128)
-* argument delimiting characters:        Escapes.             (line  29)
-* arguments to macros, and tabs:         Request and Macro Arguments.
-                                                              (line   6)
-* arguments to requests and macros:      Request and Macro Arguments.
-                                                              (line   6)
-* arguments, and compatibility mode:     Gtroff Internals.    (line  91)
-* arguments, macro ('\$'):               Parameters.          (line  21)
-* arguments, of strings:                 Strings.             (line  19)
-* arithmetic operators:                  Expressions.         (line   8)
-* artificial fonts:                      Artificial Fonts.    (line   6)
-* 'as', 'as1' requests, and comments:    Comments.            (line  16)
-* 'as', 'as1' requests, and warnings:    Warnings.            (line  54)
-* ASCII approximation output register ('.A'): Groff Options.  (line  51)
-* ASCII approximation output register ('.A') <1>: Built-in Registers.
-                                                              (line 106)
-* ASCII, output encoding:                Groff Options.       (line 250)
-* 'asciify' request, and 'writem':       I/O.                 (line 222)
-* assigning formats ('af'):              Assigning Formats.   (line   6)
-* assignments, indirect:                 Interpolating Registers.
-                                                              (line  11)
-* assignments, nested:                   Interpolating Registers.
-                                                              (line  11)
-* AT&T 'troff', 'ms' macro package differences: Differences from AT&T ms.
-                                                              (line   6)
-* auto-increment:                        Auto-increment.      (line   6)
-* auto-increment, and 'ig' request:      Comments.            (line  85)
-* available glyphs, list ('groff_char(7)' man page): Using Symbols.
-                                                              (line  76)
-* background color name register ('.M'): Colors.              (line  94)
-* backslash, printing ('\\', '\e', '\E', '\[rs]'): Escapes.   (line  74)
-* backslash, printing ('\\', '\e', '\E', '\[rs]') <1>: Implementation Differences.
-                                                              (line 106)
-* backspace character:                   Identifiers.         (line  12)
-* backspace character, and translations: Character Translations.
-                                                              (line 169)
-* backtrace of input stack ('backtrace'): Debugging.          (line  96)
-* baseline:                              Sizes.               (line   6)
-* basic unit ('u'):                      Measurements.        (line   6)
-* basics of macros:                      Basics.              (line   6)
-* 'bd' request, and font styles:         Font Families.       (line  59)
-* 'bd' request, and font translations:   Changing Fonts.      (line  55)
-* 'bd' request, incompatibilities with AT&T 'troff': Implementation Differences.
-                                                              (line  86)
-* begin of conditional block ('\{'):     if-else.             (line  35)
-* beginning diversion ('di'):            Diversions.          (line  22)
-* blank line:                            Implicit Line Breaks.
-                                                              (line  10)
-* blank line <1>:                        Requests.            (line  27)
-* blank line ('sp'):                     Basics.              (line  93)
-* blank line macro ('blm'):              Implicit Line Breaks.
-                                                              (line  10)
-* blank line macro ('blm') <1>:          Requests.            (line  27)
-* blank line macro ('blm') <2>:          Blank Line Traps.    (line   7)
-* blank line traps:                      Blank Line Traps.    (line   6)
-* blank lines, disabling:                Manipulating Spacing.
-                                                              (line 123)
-* block, conditional, begin ('\{'):      if-else.             (line  35)
-* block, condititional, end ('\}'):      if-else.             (line  35)
-* bold face ['man']:                     Man font macros.     (line  14)
-* bold face, imitating ('bd'):           Artificial Fonts.    (line  98)
-* bottom margin:                         Page Layout.         (line  20)
-* bounding box:                          Miscellaneous.       (line 139)
-* box rule glyph ('\[br]'):              Drawing Requests.    (line  50)
-* 'box', 'boxa' requests, and warnings:  Warnings.            (line  54)
-* 'boxa' request, and 'dn' ('dl'):       Diversions.          (line  93)
-* 'bp' request, and top-level diversion: Page Control.        (line  24)
-* 'bp' request, and traps ('.pe'):       Page Location Traps. (line 143)
-* 'bp' request, causing implicit linebreak: Manipulating Filling and Adjusting.
-                                                              (line   6)
-* 'bp' request, using '+' and '-':       Expressions.         (line  75)
-* 'br' glyph, and 'cflags':              Using Symbols.       (line 271)
-* break:                                 Basics.              (line  48)
-* break <1>:                             Manipulating Filling and Adjusting.
-                                                              (line   6)
-* break ('br'):                          Basics.              (line 118)
-* 'break' request, in a 'while' loop:    while.               (line  68)
-* break, implicit:                       Implicit Line Breaks.
-                                                              (line   6)
-* built-in registers:                    Built-in Registers.  (line   6)
-* bulleted list, example markup ['ms']:  Lists in ms.         (line  21)
-* 'c' unit:                              Measurements.        (line  27)
-* calling convention of preprocessors:   Preprocessors in man pages.
-                                                              (line   6)
-* capabilities of 'groff':               groff Capabilities.  (line   6)
-* 'ce' request, causing implicit linebreak: Manipulating Filling and Adjusting.
-                                                              (line   6)
-* 'ce' request, difference to '.ad c':   Manipulating Filling and Adjusting.
-                                                              (line  66)
-* centered text:                         Manipulating Filling and Adjusting.
-                                                              (line  66)
-* centering lines ('ce'):                Basics.              (line 105)
-* centering lines ('ce') <1>:            Manipulating Filling and Adjusting.
-                                                              (line 204)
-* centimeter unit ('c'):                 Measurements.        (line  27)
-* 'cf' request, and copy-in mode:        I/O.                 (line  50)
-* 'cf' request, causing implicit linebreak: Manipulating Filling and Adjusting.
-                                                              (line   6)
-* changing font family ('fam', '\F'):    Font Families.       (line  25)
-* changing font position ('\f'):         Font Positions.      (line  60)
-* changing font style ('sty'):           Font Families.       (line  59)
-* changing fonts ('ft', '\f'):           Changing Fonts.      (line  11)
-* changing format, and read-only registers: Assigning Formats.
-                                                              (line  68)
-* changing the font height ('\H'):       Artificial Fonts.    (line  16)
-* changing the font slant ('\S'):        Artificial Fonts.    (line  45)
-* changing the page number character ('pc'): Page Layout.     (line  94)
-* changing trap location ('ch'):         Page Location Traps. (line 111)
-* changing type sizes ('ps', '\s'):      Changing Type Sizes. (line  11)
-* changing vertical line spacing ('vs'): Changing Type Sizes. (line  88)
-* 'char' request, and soft hyphen character: Manipulating Hyphenation.
-                                                              (line 243)
-* 'char' request, and translations:      Character Translations.
-                                                              (line 160)
-* 'char' request, used with '\N':        Using Symbols.       (line 201)
-* character:                             Using Symbols.       (line   6)
-* character class ('class'):             Character Classes.   (line  12)
-* character classes:                     Character Classes.   (line   6)
-* character properties ('cflags'):       Using Symbols.       (line 237)
-* character translations:                Character Translations.
-                                                              (line   6)
-* character, backspace:                  Identifiers.         (line  12)
-* character, backspace, and translations: Character Translations.
-                                                              (line 169)
-* character, control ('.'):              Requests.            (line   6)
-* character, control, changing ('cc'):   Character Translations.
-                                                              (line   6)
-* character, defining ('char'):          Using Symbols.       (line 326)
-* character, defining fallback ('fchar', 'fschar', 'schar'): Using Symbols.
-                                                              (line 326)
-* character, escape, changing ('ec'):    Character Translations.
-                                                              (line  47)
-* character, escape, while defining glyph: Using Symbols.     (line 326)
-* character, field delimiting ('fc'):    Fields.              (line   6)
-* character, field padding ('fc'):       Fields.              (line   6)
-* character, hyphenation ('\%'):         Manipulating Hyphenation.
-                                                              (line  85)
-* character, leader repetition ('lc'):   Leaders.             (line  23)
-* character, leader, and translations:   Character Translations.
-                                                              (line 169)
-* character, leader, non-interpreted ('\a'): Leaders.         (line  18)
-* character, named ('\C'):               Using Symbols.       (line 185)
-* character, newline:                    Escapes.             (line  69)
-* character, newline, and translations:  Character Translations.
-                                                              (line 169)
-* character, no-break control ('''):     Requests.            (line   6)
-* character, no-break control, changing ('c2'): Character Translations.
-                                                              (line   6)
-* character, soft hyphen, setting ('shc'): Manipulating Hyphenation.
-                                                              (line 243)
-* character, space:                      Escapes.             (line  69)
-* character, special:                    Character Translations.
-                                                              (line 160)
-* character, tab:                        Escapes.             (line  69)
-* character, tab repetition ('tc'):      Tabs and Fields.     (line 129)
-* character, tab, and translations:      Character Translations.
-                                                              (line 169)
-* character, tab, non-interpreted ('\t'): Tabs and Fields.    (line  10)
-* character, tabulator:                  Tab Stops.           (line   6)
-* character, transparent:                Sentences.           (line  18)
-* character, transparent <1>:            Using Symbols.       (line 275)
-* character, whitespace:                 Identifiers.         (line  10)
-* character, zero width space ('\&'):    Requests.            (line  47)
-* character, zero width space ('\&') <1>: Ligatures and Kerning.
-                                                              (line  47)
-* character, zero width space ('\&') <2>: Drawing Requests.   (line  32)
-* characters, argument delimiting:       Escapes.             (line  29)
-* characters, end-of-sentence:           Using Symbols.       (line 247)
-* characters, hyphenation:               Using Symbols.       (line 251)
-* characters, input, and output glyphs, compatibility with AT&T 'troff': Implementation Differences.
-                                                              (line  86)
-* characters, invalid for 'trf' request: I/O.                 (line  73)
-* characters, invalid input:             Identifiers.         (line  15)
-* characters, overlapping:               Using Symbols.       (line 265)
-* characters, special:                   Special Characters.  (line   6)
-* characters, unnamed, accessing with '\N': Font File Format. (line  51)
-* 'chem', the program:                   gchem.               (line   6)
-* circle, drawing ('\D'c ...''):         Drawing Requests.    (line 109)
-* circle, solid, drawing ('\D'C ...''):  Drawing Requests.    (line 114)
-* class of characters ('class'):         Character Classes.   (line  12)
-* classes, character:                    Character Classes.   (line   6)
-* closing file ('close'):                I/O.                 (line 231)
-* code, hyphenation ('hcode'):           Manipulating Hyphenation.
-                                                              (line 175)
-* color name, background, register ('.M'): Colors.            (line  94)
-* color name, drawing, register ('.m'):  Colors.              (line  67)
-* color name, fill, register ('.M'):     Colors.              (line  94)
-* color, default:                        Colors.              (line  26)
-* colors:                                Colors.              (line   6)
-* colors, fill, unnamed ('\D'F...''):    Drawing Requests.    (line 216)
-* command prefix:                        Environment.         (line  14)
-* command-line options:                  Groff Options.       (line  50)
-* commands, embedded:                    Embedded Commands.   (line   6)
-* comments:                              Comments.            (line   6)
-* comments in font files:                Font File Format.    (line  36)
-* comments, lining up with tabs:         Comments.            (line  21)
-* comments, with 'ds':                   Strings.             (line  45)
-* common features:                       Common Features.     (line   6)
-* common name space of macros, diversions, and strings: Strings.
-                                                              (line  92)
-* comparison of strings:                 Operators in Conditionals.
-                                                              (line  47)
-* comparison operators:                  Expressions.         (line  15)
-* compatibility mode:                    Warnings.            (line  91)
-* compatibility mode <1>:                Implementation Differences.
-                                                              (line   6)
-* compatibility mode, and parameters:    Gtroff Internals.    (line  91)
-* composite glyph names:                 Using Symbols.       (line  88)
-* conditional block, begin ('\{'):       if-else.             (line  35)
-* conditional block, end ('\}'):         if-else.             (line  35)
-* conditional output for terminal (TTY): Operators in Conditionals.
-                                                              (line  14)
-* conditional page break ('ne'):         Page Control.        (line  33)
-* conditionals and loops:                Conditionals and Loops.
-                                                              (line   6)
-* consecutive hyphenated lines ('hlm'):  Manipulating Hyphenation.
-                                                              (line  47)
-* constant glyph space mode ('cs'):      Artificial Fonts.    (line 126)
-* contents, table of:                    Table of Contents.   (line   6)
-* contents, table of <1>:                Leaders.             (line  29)
-* continuation, input line ('\'):        Line Control.        (line  36)
-* continuation, output line ('\c'):      Line Control.        (line  36)
-* 'continue' request, in a 'while' loop: while.               (line  68)
-* continuous underlining ('cu'):         Artificial Fonts.    (line  86)
-* control character ('.'):               Requests.            (line   6)
-* control character, changing ('cc'):    Character Translations.
-                                                              (line   6)
-* control character, no-break ('''):     Requests.            (line   6)
-* control character, no-break, changing ('c2'): Character Translations.
-                                                              (line   6)
-* control sequences, for terminals:      Invoking grotty.     (line  50)
-* control, line:                         Line Control.        (line   6)
-* control, page:                         Page Control.        (line   6)
-* conventions for input:                 Input Conventions.   (line   6)
-* copy mode:                             Copy-in Mode.        (line   6)
-* copy-in mode:                          Copy-in Mode.        (line   6)
-* copy-in mode, and 'cf' request:        I/O.                 (line  50)
-* copy-in mode, and 'device' request:    Postprocessor Access.
-                                                              (line  19)
-* copy-in mode, and 'ig' request:        Comments.            (line  85)
-* copy-in mode, and 'length' request:    Strings.             (line 211)
-* copy-in mode, and macro arguments:     Parameters.          (line  21)
-* copy-in mode, and 'output' request:    Diversions.          (line 179)
-* copy-in mode, and 'tm' request:        Debugging.           (line  30)
-* copy-in mode, and 'tm1' request:       Debugging.           (line  30)
-* copy-in mode, and 'tmc' request:       Debugging.           (line  30)
-* copy-in mode, and 'trf' request:       I/O.                 (line  50)
-* copy-in mode, and 'write' request:     I/O.                 (line 212)
-* copy-in mode, and 'writec' request:    I/O.                 (line 212)
-* copy-in mode, and 'writem' request:    I/O.                 (line 225)
-* copy-in mode, and '\!':                Diversions.          (line 148)
-* copy-in mode, and '\?':                Operators in Conditionals.
-                                                              (line  55)
-* copy-in mode, and '\?' <1>:            Diversions.          (line 148)
-* copy-in mode, and '\a':                Leaders.             (line  18)
-* copy-in mode, and '\E':                Character Translations.
-                                                              (line  81)
-* copy-in mode, and '\t':                Tabs and Fields.     (line  10)
-* copy-in mode, and '\V':                I/O.                 (line 249)
-* copying environment ('evc'):           Environments.        (line  70)
-* correction between italic and roman glyph ('\/', '\,'): Ligatures and Kerning.
-                                                              (line  80)
-* correction, italic ('\/'):             Ligatures and Kerning.
-                                                              (line  80)
-* correction, left italic ('\,'):        Ligatures and Kerning.
-                                                              (line  91)
-* cover page macros, ['ms']:             ms Cover Page Macros.
-                                                              (line   6)
-* 'cp' request, and glyph definitions:   Using Symbols.       (line 326)
-* cp1047, input encoding:                Input Encodings.     (line   9)
-* cp1047, output encoding:               Groff Options.       (line 264)
-* 'cq' glyph, at end of sentence:        Sentences.           (line  18)
-* 'cq' glyph, at end of sentence <1>:    Using Symbols.       (line 275)
-* creating alias, for diversion ('als'): Strings.             (line 229)
-* creating alias, for macro ('als'):     Strings.             (line 229)
-* creating alias, for number register ('aln'): Setting Registers.
-                                                              (line 112)
-* creating alias, for string ('als'):    Strings.             (line 229)
-* creating new characters ('char'):      Using Symbols.       (line 326)
-* credits:                               Credits.             (line   6)
-* 'cs' request, and font styles:         Font Families.       (line  59)
-* 'cs' request, and font translations:   Changing Fonts.      (line  55)
-* 'cs' request, incompatibilities with AT&T 'troff': Implementation Differences.
-                                                              (line  86)
-* 'cs' request, with fractional type sizes: Fractional Type Sizes.
-                                                              (line   6)
-* current directory:                     Macro Directories.   (line  21)
-* current input file name register ('.F'): Built-in Registers.
-                                                              (line  12)
-* current page number ('%'):             Page Control.        (line  27)
-* current time:                          I/O.                 (line 175)
-* current time, hours ('hours'):         Built-in Registers.  (line  41)
-* current time, minutes ('minutes'):     Built-in Registers.  (line  37)
-* current time, seconds ('seconds'):     Built-in Registers.  (line  31)
-* current vertical position ('nl'):      Page Control.        (line  67)
-* 'da' request, and 'dn' ('dl'):         Diversions.          (line  93)
-* 'da' request, and warnings:            Warnings.            (line  49)
-* 'da' request, and warnings <1>:        Warnings.            (line  54)
-* date, day of the month register ('dy'): Built-in Registers. (line  48)
-* date, day of the week register ('dw'): Built-in Registers.  (line  45)
-* date, month of the year register ('mo'): Built-in Registers.
-                                                              (line  51)
-* date, year register ('year', 'yr'):    Built-in Registers.  (line  54)
-* day of the month register ('dy'):      Built-in Registers.  (line  48)
-* day of the week register ('dw'):       Built-in Registers.  (line  45)
-* 'de' request, and 'while':             while.               (line  22)
-* 'de', 'de1', 'dei' requests, and warnings: Warnings.        (line  54)
-* debugging:                             Debugging.           (line   6)
-* default color:                         Colors.              (line  26)
-* default indentation ['man']:           Miscellaneous man macros.
-                                                              (line   6)
-* default indentation, resetting ['man']: Man usage.          (line 127)
-* default units:                         Default Units.       (line   6)
-* defining character ('char'):           Using Symbols.       (line 326)
-* defining character class ('class'):    Character Classes.   (line  12)
-* defining fallback character ('fchar', 'fschar', 'schar'): Using Symbols.
-                                                              (line 326)
-* defining glyph ('char'):               Using Symbols.       (line 326)
-* defining symbol ('char'):              Using Symbols.       (line 326)
-* delayed text:                          Footnotes and Annotations.
-                                                              (line  10)
-* delimited arguments, incompatibilities with AT&T 'troff': Implementation Differences.
-                                                              (line  47)
-* delimiting character, for fields ('fc'): Fields.            (line   6)
-* delimiting characters for arguments:   Escapes.             (line  29)
-* depth, of last glyph ('.cdp'):         Environments.        (line  95)
-* 'DESC' file, format:                   DESC File Format.    (line   6)
-* 'device' request, and copy-in mode:    Postprocessor Access.
-                                                              (line  19)
-* device resolution:                     DESC File Format.    (line  85)
-* devices for output:                    Output device intro. (line   6)
-* devices for output <1>:                Output Devices.      (line   6)
-* 'dg' glyph, at end of sentence:        Sentences.           (line  18)
-* 'dg' glyph, at end of sentence <1>:    Using Symbols.       (line 275)
-* 'di' request, and warnings:            Warnings.            (line  49)
-* 'di' request, and warnings <1>:        Warnings.            (line  54)
-* differences in implementation:         Implementation Differences.
-                                                              (line   6)
-* digit width space ('\0'):              Page Motions.        (line 138)
-* digits, and delimiters:                Escapes.             (line  65)
-* dimensions, line:                      Line Layout.         (line   6)
-* directories for fonts:                 Font Directories.    (line   6)
-* directories for macros:                Macro Directories.   (line   6)
-* directory, current:                    Macro Directories.   (line  21)
-* directory, for tmac files:             Macro Directories.   (line  11)
-* directory, home:                       Macro Directories.   (line  24)
-* directory, platform-specific:          Macro Directories.   (line  26)
-* directory, site-specific:              Macro Directories.   (line  26)
-* directory, site-specific <1>:          Font Directories.    (line  29)
-* disabling hyphenation ('\%'):          Manipulating Hyphenation.
-                                                              (line  85)
-* disabling '\' ('eo'):                  Character Translations.
-                                                              (line  24)
-* discardable horizontal space:          Manipulating Filling and Adjusting.
-                                                              (line 183)
-* discarded space in traps:              Manipulating Spacing.
-                                                              (line  53)
-* displays:                              Displays.            (line   6)
-* displays ['ms']:                       ms Displays and Keeps.
-                                                              (line   6)
-* displays, and footnotes ['ms']:        ms Footnotes.        (line  24)
-* distance to next trap register ('.t'): Page Location Traps. (line 102)
-* 'ditroff', the program:                History.             (line  59)
-* diversion name register ('.z'):        Diversions.          (line  69)
-* diversion trap, setting ('dt'):        Diversion Traps.     (line   7)
-* diversion traps:                       Diversion Traps.     (line   6)
-* diversion, appending ('da'):           Diversions.          (line  22)
-* diversion, beginning ('di'):           Diversions.          (line  22)
-* diversion, creating alias ('als'):     Strings.             (line 229)
-* diversion, ending ('di'):              Diversions.          (line  22)
-* diversion, nested:                     Diversions.          (line  69)
-* diversion, removing ('rm'):            Strings.             (line 224)
-* diversion, removing alias ('rm'):      Strings.             (line 263)
-* diversion, renaming ('rn'):            Strings.             (line 221)
-* diversion, stripping final newline:    Strings.             (line 157)
-* diversion, top-level:                  Diversions.          (line  12)
-* diversion, top-level, and 'bp':        Page Control.        (line  24)
-* diversion, top-level, and '\!':        Diversions.          (line 171)
-* diversion, top-level, and '\?':        Diversions.          (line 176)
-* diversion, unformatting ('asciify'):   Diversions.          (line 195)
-* diversion, vertical position in, register ('.d'): Diversions.
-                                                              (line  69)
-* diversions:                            Diversions.          (line   6)
-* diversions, and traps:                 Page Location Traps. (line 166)
-* diversions, shared name space with macros and strings: Strings.
-                                                              (line  92)
-* 'dl' register, and 'da' ('boxa'):      Diversions.          (line  93)
-* 'dn' register, and 'da' ('boxa'):      Diversions.          (line  93)
-* documents, multi-file:                 Debugging.           (line  10)
-* documents, structuring the source code: Requests.           (line  14)
-* double quote, in a macro argument:     Request and Macro Arguments.
-                                                              (line  25)
-* double-spacing ('ls'):                 Basics.              (line  82)
-* double-spacing ('ls') <1>:             Manipulating Spacing.
-                                                              (line  64)
-* double-spacing ('vs', 'pvs'):          Changing Type Sizes. (line 125)
-* drawing a circle ('\D'c ...''):        Drawing Requests.    (line 109)
-* drawing a line ('\D'l ...''):          Drawing Requests.    (line  80)
-* drawing a polygon ('\D'p ...''):       Drawing Requests.    (line 158)
-* drawing a solid circle ('\D'C ...''):  Drawing Requests.    (line 114)
-* drawing a solid ellipse ('\D'E ...''): Drawing Requests.    (line 124)
-* drawing a solid polygon ('\D'P ...''): Drawing Requests.    (line 167)
-* drawing a spline ('\D'~ ...''):        Drawing Requests.    (line 136)
-* drawing an arc ('\D'a ...''):          Drawing Requests.    (line 128)
-* drawing an ellipse ('\D'e ...''):      Drawing Requests.    (line 118)
-* drawing color name register ('.m'):    Colors.              (line  67)
-* drawing horizontal lines ('\l'):       Drawing Requests.    (line  17)
-* drawing requests:                      Drawing Requests.    (line   6)
-* drawing vertical lines ('\L'):         Drawing Requests.    (line  50)
-* 'ds' request, and comments:            Strings.             (line  45)
-* 'ds' request, and double quotes:       Request and Macro Arguments.
-                                                              (line  69)
-* 'ds' request, and leading spaces:      Strings.             (line  57)
-* 'ds', 'ds1' requests, and comments:    Comments.            (line  16)
-* 'ds', 'ds1' requests, and warnings:    Warnings.            (line  54)
-* dumping environments ('pev'):          Debugging.           (line  62)
-* dumping number registers ('pnr'):      Debugging.           (line  77)
-* dumping symbol table ('pm'):           Debugging.           (line  66)
-* dumping traps ('ptr'):                 Debugging.           (line  81)
-* EBCDIC encoding:                       Tab Stops.           (line   6)
-* EBCDIC encoding of a tab:              Tabs and Fields.     (line   6)
-* EBCDIC encoding of backspace:          Identifiers.         (line  12)
-* EBCDIC, input encoding:                Input Encodings.     (line   9)
-* EBCDIC, output encoding:               Groff Options.       (line 264)
-* 'el' request, and warnings:            Warnings.            (line  32)
-* ellipse, drawing ('\D'e ...''):        Drawing Requests.    (line 118)
-* ellipse, solid, drawing ('\D'E ...''): Drawing Requests.    (line 124)
-* 'em' glyph, and 'cflags':              Using Symbols.       (line 258)
-* em unit ('m'):                         Measurements.        (line  50)
-* embedded commands:                     Embedded Commands.   (line   6)
-* embedding PDF:                         Embedding PDF.       (line   6)
-* embedding PostScript:                  Embedding PostScript.
-                                                              (line   6)
-* embolding of special fonts:            Artificial Fonts.    (line 115)
-* empty line:                            Implicit Line Breaks.
-                                                              (line  10)
-* empty line ('sp'):                     Basics.              (line  93)
-* empty space before a paragraph ['man']: Miscellaneous man macros.
-                                                              (line  15)
-* en unit ('n'):                         Measurements.        (line  55)
-* enabling vertical position traps ('vpt'): Page Location Traps.
-                                                              (line  18)
-* encoding, EBCDIC:                      Tab Stops.           (line   6)
-* encoding, input, cp1047:               Input Encodings.     (line   9)
-* encoding, input, EBCDIC:               Input Encodings.     (line   9)
-* encoding, input, latin-1 (ISO 8859-1): Input Encodings.     (line  14)
-* encoding, input, latin-2 (ISO 8859-2): Input Encodings.     (line  18)
-* encoding, input, latin-5 (ISO 8859-9): Input Encodings.     (line  23)
-* encoding, input, latin-9 (latin-0, ISO 8859-15): Input Encodings.
-                                                              (line  28)
-* encoding, output, ASCII:               Groff Options.       (line 250)
-* encoding, output, cp1047:              Groff Options.       (line 264)
-* encoding, output, EBCDIC:              Groff Options.       (line 264)
-* encoding, output, latin-1 (ISO 8859-1): Groff Options.      (line 254)
-* encoding, output, utf-8:               Groff Options.       (line 259)
-* end of conditional block ('\}'):       if-else.             (line  35)
-* end-of-input macro ('em'):             End-of-input Traps.  (line   7)
-* end-of-input trap, setting ('em'):     End-of-input Traps.  (line   7)
-* end-of-input traps:                    End-of-input Traps.  (line   6)
-* end-of-sentence characters:            Using Symbols.       (line 247)
-* ending diversion ('di'):               Diversions.          (line  22)
-* environment number/name register ('.ev'): Environments.     (line  39)
-* environment variables:                 Environment.         (line   6)
-* environment, copying ('evc'):          Environments.        (line  70)
-* environment, dimensions of last glyph ('.w', '.cht', '.cdp', '.csk'): Environments.
-                                                              (line  95)
-* environment, previous line length ('.n'): Environments.     (line 110)
-* environment, switching ('ev'):         Environments.        (line  39)
-* environments:                          Environments.        (line   6)
-* environments, dumping ('pev'):         Debugging.           (line  62)
-* 'eqn', the program:                    geqn.                (line   6)
-* equations ['ms']:                      ms Insertions.       (line   6)
-* escape character, changing ('ec'):     Character Translations.
-                                                              (line  47)
-* escape character, while defining glyph: Using Symbols.      (line 326)
-* escapes:                               Escapes.             (line   6)
-* escaping newline characters, in strings: Strings.           (line  63)
-* 'ex' request, use in debugging:        Debugging.           (line  45)
-* 'ex' request, used with 'nx' and 'rd': I/O.                 (line 122)
-* example markup, bulleted list ['ms']:  Lists in ms.         (line  21)
-* example markup, glossary-style list ['ms']: Lists in ms.    (line  65)
-* example markup, multi-page table ['ms']: Example multi-page table.
-                                                              (line   6)
-* example markup, numbered list ['ms']:  Lists in ms.         (line  41)
-* example markup, title page:            ms Cover Page Macros.
-                                                              (line  66)
-* examples of invocation:                Invocation Examples. (line   6)
-* exiting ('ex'):                        Debugging.           (line  45)
-* expansion of strings ('\*'):           Strings.             (line  19)
-* explicit hyphen ('\%'):                Manipulating Hyphenation.
-                                                              (line  47)
-* expression, limitation of logical not in: Expressions.      (line  27)
-* expression, order of evaluation:       Expressions.         (line  59)
-* expressions:                           Expressions.         (line   6)
-* expressions, and space characters:     Expressions.         (line  86)
-* extra post-vertical line space ('\x'): Changing Type Sizes. (line 118)
-* extra post-vertical line space register ('.a'): Manipulating Spacing.
-                                                              (line  94)
-* extra pre-vertical line space ('\x'):  Changing Type Sizes. (line 109)
-* extra spaces:                          Filling and Adjusting.
-                                                              (line  10)
-* extremum operators ('>?', '<?'):       Expressions.         (line  44)
-* 'f' unit:                              Measurements.        (line  43)
-* 'f' unit, and colors:                  Colors.              (line  36)
-* factor, zoom, of a font ('fzoom'):     Changing Fonts.      (line  71)
-* fallback character, defining ('fchar', 'fschar', 'schar'): Using Symbols.
-                                                              (line 326)
-* fallback glyph, removing definition ('rchar', 'rfschar'): Using Symbols.
-                                                              (line 382)
-* 'fam' request, and changing fonts:     Changing Fonts.      (line  11)
-* 'fam' request, and font positions:     Font Positions.      (line  60)
-* families, font:                        Font Families.       (line   6)
-* features, common:                      Common Features.     (line   6)
-* 'fi' request, causing implicit linebreak: Manipulating Filling and Adjusting.
-                                                              (line   6)
-* field delimiting character ('fc'):     Fields.              (line   6)
-* field padding character ('fc'):        Fields.              (line   6)
-* fields:                                Fields.              (line   6)
-* fields, and tabs:                      Tabs and Fields.     (line   6)
-* figures ['ms']:                        ms Insertions.       (line   6)
-* file formats:                          File formats.        (line   6)
-* file, appending to ('opena'):          I/O.                 (line 200)
-* file, closing ('close'):               I/O.                 (line 231)
-* file, inclusion ('so'):                I/O.                 (line   9)
-* file, opening ('open'):                I/O.                 (line 200)
-* file, processing next ('nx'):          I/O.                 (line  84)
-* file, writing to ('write', 'writec'):  I/O.                 (line 212)
-* files, font:                           Font Files.          (line   6)
-* files, macro, searching:               Macro Directories.   (line  11)
-* fill color name register ('.M'):       Colors.              (line  94)
-* fill colors, unnamed ('\D'F...''):     Drawing Requests.    (line 216)
-* fill mode:                             Implicit Line Breaks.
-                                                              (line  15)
-* fill mode <1>:                         Manipulating Filling and Adjusting.
-                                                              (line 156)
-* fill mode <2>:                         Warnings.            (line  23)
-* fill mode ('fi'):                      Manipulating Filling and Adjusting.
-                                                              (line  29)
-* fill mode, and '\c':                   Line Control.        (line  69)
-* filling:                               Filling and Adjusting.
-                                                              (line   6)
-* filling and adjusting, manipulating:   Manipulating Filling and Adjusting.
-                                                              (line   6)
-* final newline, stripping in diversions: Strings.            (line 157)
-* 'fl' request, causing implicit linebreak: Manipulating Filling and Adjusting.
-                                                              (line   6)
-* floating keep:                         Displays.            (line  23)
-* flush output ('fl'):                   Debugging.           (line  87)
-* font description file, format:         DESC File Format.    (line   6)
-* font description file, format <1>:     Font File Format.    (line   6)
-* font directories:                      Font Directories.    (line   6)
-* font families:                         Font Families.       (line   6)
-* font family, changing ('fam', '\F'):   Font Families.       (line  25)
-* font file, format:                     Font File Format.    (line   6)
-* font files:                            Font Files.          (line   6)
-* font files, comments:                  Font File Format.    (line  36)
-* font for underlining ('uf'):           Artificial Fonts.    (line  90)
-* font height, changing ('\H'):          Artificial Fonts.    (line  16)
-* font path:                             Font Directories.    (line  14)
-* font position register ('.f'):         Font Positions.      (line  20)
-* font position, changing ('\f'):        Font Positions.      (line  60)
-* font positions:                        Font Positions.      (line   6)
-* font selection ['man']:                Man font macros.     (line   6)
-* font slant, changing ('\S'):           Artificial Fonts.    (line  45)
-* font style, changing ('sty'):          Font Families.       (line  59)
-* font styles:                           Font Families.       (line   6)
-* font translation ('ftr'):              Changing Fonts.      (line  55)
-* font, magnification ('fzoom'):         Changing Fonts.      (line  71)
-* font, mounting ('fp'):                 Font Positions.      (line  13)
-* font, optical size:                    Changing Fonts.      (line  71)
-* font, previous ('ft', '\f[]', '\fP'):  Changing Fonts.      (line  23)
-* font, zoom factor ('fzoom'):           Changing Fonts.      (line  71)
-* fonts:                                 Fonts and Symbols.   (line   6)
-* fonts <1>:                             Changing Fonts.      (line   6)
-* fonts, artificial:                     Artificial Fonts.    (line   6)
-* fonts, changing ('ft', '\f'):          Changing Fonts.      (line  11)
-* fonts, PostScript:                     Font Families.       (line  11)
-* fonts, searching:                      Font Directories.    (line   6)
-* fonts, special:                        Special Fonts.       (line   6)
-* footers:                               Page Layout.         (line  31)
-* footers <1>:                           Page Location Traps. (line  38)
-* footers ['ms']:                        ms Headers and Footers.
-                                                              (line   6)
-* footnotes:                             Footnotes and Annotations.
-                                                              (line   6)
-* footnotes ['ms']:                      ms Footnotes.        (line   6)
-* footnotes, and displays ['ms']:        ms Footnotes.        (line  24)
-* footnotes, and keeps ['ms']:           ms Footnotes.        (line  24)
-* form letters:                          I/O.                 (line 106)
-* format of font description file:       DESC File Format.    (line   6)
-* format of font description files:      Font File Format.    (line   6)
-* format of font files:                  Font File Format.    (line   6)
-* format of register ('\g'):             Assigning Formats.   (line  75)
-* formats, assigning ('af'):             Assigning Formats.   (line   6)
-* formats, file:                         File formats.        (line   6)
-* 'fp' request, and font translations:   Changing Fonts.      (line  55)
-* 'fp' request, incompatibilities with AT&T 'troff': Implementation Differences.
-                                                              (line  86)
-* fractional point sizes:                Fractional Type Sizes.
-                                                              (line   6)
-* fractional point sizes <1>:            Implementation Differences.
-                                                              (line  76)
-* fractional type sizes:                 Fractional Type Sizes.
-                                                              (line   6)
-* fractional type sizes <1>:             Implementation Differences.
-                                                              (line  76)
-* french-spacing:                        Sentences.           (line  12)
-* 'fspecial' request, and font styles:   Font Families.       (line  59)
-* 'fspecial' request, and font translations: Changing Fonts.  (line  55)
-* 'fspecial' request, and glyph search order: Using Symbols.  (line  14)
-* 'fspecial' request, and imitating bold: Artificial Fonts.   (line 115)
-* 'ft' request, and font translations:   Changing Fonts.      (line  55)
-* 'gchem', invoking:                     Invoking gchem.      (line   5)
-* 'gchem', the program:                  gchem.               (line   6)
-* 'geqn', invoking:                      Invoking geqn.       (line   5)
-* 'geqn', the program:                   geqn.                (line   6)
-* GGL (groff glyph list):                Using Symbols.       (line  88)
-* GGL (groff glyph list) <1>:            Character Classes.   (line  32)
-* 'ggrn', invoking:                      Invoking ggrn.       (line   5)
-* 'ggrn', the program:                   ggrn.                (line   6)
-* glossary-style list, example markup ['ms']: Lists in ms.    (line  65)
-* glyph:                                 Using Symbols.       (line   6)
-* glyph for line drawing:                Drawing Requests.    (line  50)
-* glyph names, composite:                Using Symbols.       (line  88)
-* glyph pile ('\b'):                     Drawing Requests.    (line 232)
-* glyph properties ('cflags'):           Using Symbols.       (line 237)
-* glyph, box rule ('\[br]'):             Drawing Requests.    (line  50)
-* glyph, constant space:                 Artificial Fonts.    (line 126)
-* glyph, defining ('char'):              Using Symbols.       (line 326)
-* glyph, for line drawing:               Drawing Requests.    (line  28)
-* glyph, for margins ('mc'):             Miscellaneous.       (line  75)
-* glyph, italic correction ('\/'):       Ligatures and Kerning.
-                                                              (line  80)
-* glyph, last, dimensions ('.w', '.cht', '.cdp', '.csk'): Environments.
-                                                              (line  95)
-* glyph, leader repetition ('lc'):       Leaders.             (line  23)
-* glyph, left italic correction ('\,'):  Ligatures and Kerning.
-                                                              (line  91)
-* glyph, numbered ('\N'):                Character Translations.
-                                                              (line 160)
-* glyph, numbered ('\N') <1>:            Using Symbols.       (line 201)
-* glyph, removing definition ('rchar', 'rfschar'): Using Symbols.
-                                                              (line 382)
-* glyph, soft hyphen ('hy'):             Manipulating Hyphenation.
-                                                              (line 243)
-* glyph, tab repetition ('tc'):          Tabs and Fields.     (line 129)
-* glyph, underscore ('\[ru]'):           Drawing Requests.    (line  28)
-* glyphs, available, list ('groff_char(7)' man page): Using Symbols.
-                                                              (line  76)
-* glyphs, output, and input characters, compatibility with AT&T 'troff': Implementation Differences.
-                                                              (line  86)
-* glyphs, overstriking ('\o'):           Page Motions.        (line 216)
-* glyphs, unnamed:                       Using Symbols.       (line 212)
-* glyphs, unnamed, accessing with '\N':  Font File Format.    (line  51)
-* GNU-specific register ('.g'):          Built-in Registers.  (line 102)
-* 'gpic', invoking:                      Invoking gpic.       (line   5)
-* 'gpic', the program:                   gpic.                (line   6)
-* 'grap', the program:                   grap.                (line   6)
-* gray shading ('\D'f ...''):            Drawing Requests.    (line 141)
-* 'grefer', invoking:                    Invoking grefer.     (line   5)
-* 'grefer', the program:                 grefer.              (line   6)
-* 'grn', the program:                    ggrn.                (line   6)
-* 'grodvi', invoking:                    Invoking grodvi.     (line   6)
-* 'grodvi', the program:                 grodvi.              (line   6)
-* 'groff' - what is it?:                 What Is groff?.      (line   6)
-* 'groff' capabilities:                  groff Capabilities.  (line   6)
-* groff glyph list (GGL):                Using Symbols.       (line  88)
-* groff glyph list (GGL) <1>:            Character Classes.   (line  32)
-* 'groff' invocation:                    Invoking groff.      (line   6)
-* 'groff', and 'pi' request:             I/O.                 (line 159)
-* GROFF_BIN_PATH, environment variable:  Environment.         (line  10)
-* GROFF_COMMAND_PREFIX, environment variable: Environment.    (line  14)
-* GROFF_ENCODING, environment variable:  Environment.         (line  25)
-* GROFF_FONT_PATH, environment variable: Environment.         (line  34)
-* GROFF_FONT_PATH, environment variable <1>: Font Directories.
-                                                              (line  26)
-* GROFF_TMAC_PATH, environment variable: Environment.         (line  39)
-* GROFF_TMAC_PATH, environment variable <1>: Macro Directories.
-                                                              (line  18)
-* GROFF_TMPDIR, environment variable:    Environment.         (line  44)
-* GROFF_TYPESETTER, environment variable: Environment.        (line  52)
-* 'grohtml', invoking:                   Invoking grohtml.    (line   6)
-* 'grohtml', registers and strings:      grohtml specific registers and strings.
-                                                              (line   6)
-* 'grohtml', the program:                Groff Options.       (line 275)
-* 'grohtml', the program <1>:            grohtml.             (line   6)
-* 'grolbp', invoking:                    Invoking grolbp.     (line   6)
-* 'grolbp', the program:                 grolbp.              (line   6)
-* 'grolj4', invoking:                    Invoking grolj4.     (line   6)
-* 'grolj4', the program:                 grolj4.              (line   6)
-* 'gropdf', invoking:                    Invoking gropdf.     (line   6)
-* 'gropdf', the program:                 gropdf.              (line   6)
-* 'grops', invoking:                     Invoking grops.      (line   6)
-* 'grops', the program:                  grops.               (line   6)
-* 'grotty', invoking:                    Invoking grotty.     (line   6)
-* 'grotty', the program:                 grotty.              (line   6)
-* 'gsoelim', invoking:                   Invoking gsoelim.    (line   5)
-* 'gsoelim', the program:                gsoelim.             (line   6)
-* 'gtbl', invoking:                      Invoking gtbl.       (line   5)
-* 'gtbl', the program:                   gtbl.                (line   6)
-* 'gtroff', identification register ('.g'): Built-in Registers.
-                                                              (line 102)
-* 'gtroff', interactive use:             Debugging.           (line  87)
-* 'gtroff', output:                      gtroff Output.       (line   6)
-* 'gtroff', process ID register ('$$'):  Built-in Registers.  (line  99)
-* 'gtroff', reference:                   gtroff Reference.    (line   6)
-* 'gxditview', invoking:                 Invoking gxditview.  (line   5)
-* 'gxditview', the program:              gxditview.           (line   6)
-* hanging indentation ['man']:           Man usage.           (line  98)
-* 'hcode' request, and glyph definitions: Using Symbols.      (line 326)
-* headers:                               Page Layout.         (line  31)
-* headers <1>:                           Page Location Traps. (line  38)
-* headers ['ms']:                        ms Headers and Footers.
-                                                              (line   6)
-* height, font, changing ('\H'):         Artificial Fonts.    (line  16)
-* height, of last glyph ('.cht'):        Environments.        (line  95)
-* high-water mark register ('.h'):       Diversions.          (line  76)
-* history:                               History.             (line   6)
-* home directory:                        Macro Directories.   (line  24)
-* horizontal discardable space:          Manipulating Filling and Adjusting.
-                                                              (line 183)
-* horizontal input line position register ('hp'): Page Motions.
-                                                              (line 209)
-* horizontal input line position, saving ('\k'): Page Motions.
-                                                              (line 203)
-* horizontal line, drawing ('\l'):       Drawing Requests.    (line  17)
-* horizontal motion ('\h'):              Page Motions.        (line 103)
-* horizontal output line position register ('.k'): Page Motions.
-                                                              (line 212)
-* horizontal resolution:                 DESC File Format.    (line  25)
-* horizontal resolution register ('.H'): Built-in Registers.  (line  15)
-* horizontal space ('\h'):               Page Motions.        (line 103)
-* horizontal space, unformatting:        Strings.             (line 157)
-* hours, current time ('hours'):         Built-in Registers.  (line  41)
-* 'hpf' request, and hyphenation language: Manipulating Hyphenation.
-                                                              (line 256)
-* 'hw' request, and hyphenation language: Manipulating Hyphenation.
-                                                              (line 256)
-* 'hy' glyph, and 'cflags':              Using Symbols.       (line 258)
-* hyphen, explicit ('\%'):               Manipulating Hyphenation.
-                                                              (line  47)
-* hyphenated lines, consecutive ('hlm'): Manipulating Hyphenation.
-                                                              (line  47)
-* hyphenating characters:                Using Symbols.       (line 251)
-* hyphenation:                           Hyphenation.         (line   6)
-* hyphenation character ('\%'):          Manipulating Hyphenation.
-                                                              (line  85)
-* hyphenation code ('hcode'):            Manipulating Hyphenation.
-                                                              (line 175)
-* hyphenation language register ('.hla'): Manipulating Hyphenation.
-                                                              (line 263)
-* hyphenation margin ('hym'):            Manipulating Hyphenation.
-                                                              (line 211)
-* hyphenation margin register ('.hym'):  Manipulating Hyphenation.
-                                                              (line 222)
-* hyphenation patterns ('hpf'):          Manipulating Hyphenation.
-                                                              (line 116)
-* hyphenation restrictions register ('.hy'): Manipulating Hyphenation.
-                                                              (line  30)
-* hyphenation space ('hys'):             Manipulating Hyphenation.
-                                                              (line 227)
-* hyphenation space register ('.hys'):   Manipulating Hyphenation.
-                                                              (line 239)
-* hyphenation, disabling ('\%'):         Manipulating Hyphenation.
-                                                              (line  85)
-* hyphenation, manipulating:             Manipulating Hyphenation.
-                                                              (line   6)
-* 'i' unit:                              Measurements.        (line  22)
-* i/o:                                   I/O.                 (line   6)
-* IBM cp1047 input encoding:             Input Encodings.     (line   9)
-* IBM cp1047 output encoding:            Groff Options.       (line 264)
-* identifiers:                           Identifiers.         (line   6)
-* identifiers, undefined:                Identifiers.         (line  79)
-* 'ie' request, and font translations:   Changing Fonts.      (line  55)
-* 'ie' request, and warnings:            Warnings.            (line  32)
-* 'ie' request, operators to use with:   Operators in Conditionals.
-                                                              (line   6)
-* 'if' request, and font translations:   Changing Fonts.      (line  55)
-* 'if' request, and the '!' operator:    Expressions.         (line  21)
-* 'if' request, operators to use with:   Operators in Conditionals.
-                                                              (line   6)
-* if-else:                               if-else.             (line   6)
-* 'ig' request, and auto-increment:      Comments.            (line  85)
-* 'ig' request, and copy-in mode:        Comments.            (line  85)
-* imitating bold face ('bd'):            Artificial Fonts.    (line  98)
-* implementation differences:            Implementation Differences.
-                                                              (line   6)
-* implicit breaks of lines:              Implicit Line Breaks.
-                                                              (line   6)
-* implicit line breaks:                  Implicit Line Breaks.
-                                                              (line   6)
-* 'in' request, causing implicit linebreak: Manipulating Filling and Adjusting.
-                                                              (line   6)
-* 'in' request, using '+' and '-':       Expressions.         (line  75)
-* inch unit ('i'):                       Measurements.        (line  22)
-* including a file ('so'):               I/O.                 (line   9)
-* incompatibilities with AT&T 'troff':   Implementation Differences.
-                                                              (line   6)
-* increment value without changing the register: Auto-increment.
-                                                              (line  52)
-* increment, automatic:                  Auto-increment.      (line   6)
-* indentaion, resetting to default ['man']: Man usage.        (line 127)
-* indentation ('in'):                    Line Layout.         (line  25)
-* index, in macro package:               Indices.             (line   6)
-* indicator, scaling:                    Measurements.        (line   6)
-* indirect assignments:                  Interpolating Registers.
-                                                              (line  11)
-* input and output requests:             I/O.                 (line   6)
-* input characters and output glyphs, compatibility with AT&T 'troff': Implementation Differences.
-                                                              (line  86)
-* input characters, invalid:             Identifiers.         (line  15)
-* input conventions:                     Input Conventions.   (line   6)
-* input encoding, cp1047:                Input Encodings.     (line   9)
-* input encoding, EBCDIC:                Input Encodings.     (line   9)
-* input encoding, latin-1 (ISO 8859-1):  Input Encodings.     (line  14)
-* input encoding, latin-2 (ISO 8859-2):  Input Encodings.     (line  18)
-* input encoding, latin-2 (ISO 8859-9):  Input Encodings.     (line  23)
-* input encoding, latin-9 (latin-9, ISO 8859-15): Input Encodings.
-                                                              (line  28)
-* input file name, current, register ('.F'): Built-in Registers.
-                                                              (line  12)
-* input level in delimited arguments:    Implementation Differences.
-                                                              (line  47)
-* input line continuation ('\'):         Line Control.        (line  36)
-* input line number register ('.c', 'c.'): Built-in Registers.
-                                                              (line  77)
-* input line number, setting ('lf'):     Debugging.           (line  10)
-* input line position, horizontal, saving ('\k'): Page Motions.
-                                                              (line 203)
-* input line trap, setting ('it'):       Input Line Traps.    (line   8)
-* input line traps:                      Input Line Traps.    (line   6)
-* input line traps and interrupted lines ('itc'): Input Line Traps.
-                                                              (line  24)
-* input line, horizontal position, register ('hp'): Page Motions.
-                                                              (line 209)
-* input stack, backtrace ('backtrace'):  Debugging.           (line  96)
-* input stack, setting limit:            Debugging.           (line 119)
-* input token:                           Gtroff Internals.    (line   6)
-* input, 8-bit:                          Font File Format.    (line  51)
-* input, standard, reading from ('rd'):  I/O.                 (line  89)
-* inserting horizontal space ('\h'):     Page Motions.        (line 103)
-* installation:                          Installation.        (line   5)
-* interactive use of 'gtroff':           Debugging.           (line  87)
-* intermediate output:                   gtroff Output.       (line  16)
-* interpolating registers ('\n'):        Interpolating Registers.
-                                                              (line   6)
-* interpolation of strings ('\*'):       Strings.             (line  19)
-* interrupted line:                      Line Control.        (line  36)
-* interrupted line register ('.int'):    Line Control.        (line  81)
-* interrupted lines and input line traps ('itc'): Input Line Traps.
-                                                              (line  24)
-* introduction:                          Introduction.        (line   6)
-* invalid characters for 'trf' request:  I/O.                 (line  73)
-* invalid input characters:              Identifiers.         (line  15)
-* invocation examples:                   Invocation Examples. (line   6)
-* invoking 'gchem':                      Invoking gchem.      (line   6)
-* invoking 'geqn':                       Invoking geqn.       (line   6)
-* invoking 'ggrn':                       Invoking ggrn.       (line   6)
-* invoking 'gpic':                       Invoking gpic.       (line   6)
-* invoking 'grefer':                     Invoking grefer.     (line   6)
-* invoking 'grodvi':                     Invoking grodvi.     (line   6)
-* invoking 'groff':                      Invoking groff.      (line   6)
-* invoking 'grohtml':                    Invoking grohtml.    (line   6)
-* invoking 'grolbp':                     Invoking grolbp.     (line   6)
-* invoking 'grolj4':                     Invoking grolj4.     (line   6)
-* invoking 'gropdf':                     Invoking gropdf.     (line   6)
-* invoking 'grops':                      Invoking grops.      (line   6)
-* invoking 'grotty':                     Invoking grotty.     (line   6)
-* invoking 'gsoelim':                    Invoking gsoelim.    (line   6)
-* invoking 'gtbl':                       Invoking gtbl.       (line   6)
-* invoking 'gxditview':                  Invoking gxditview.  (line   6)
-* invoking 'preconv':                    Invoking preconv.    (line   6)
-* ISO 6249 SGR:                          Invoking grotty.     (line  50)
-* ISO 8859-1 (latin-1), input encoding:  Input Encodings.     (line  14)
-* ISO 8859-1 (latin-1), output encoding: Groff Options.       (line 254)
-* ISO 8859-15 (latin-9, latin-0), input encoding: Input Encodings.
-                                                              (line  28)
-* ISO 8859-2 (latin-2), input encoding:  Input Encodings.     (line  18)
-* ISO 8859-9 (latin-2), input encoding:  Input Encodings.     (line  23)
-* italic correction ('\/'):              Ligatures and Kerning.
-                                                              (line  80)
-* italic fonts ['man']:                  Man font macros.     (line  52)
-* italic glyph, correction after roman glyph ('\,'): Ligatures and Kerning.
-                                                              (line  91)
-* italic glyph, correction before roman glyph ('\/'): Ligatures and Kerning.
-                                                              (line  80)
-* justifying text:                       Manipulating Filling and Adjusting.
-                                                              (line   6)
-* justifying text ('rj'):                Manipulating Filling and Adjusting.
-                                                              (line 250)
-* keep:                                  Displays.            (line  18)
-* keep, floating:                        Displays.            (line  23)
-* keeps ['ms']:                          ms Displays and Keeps.
-                                                              (line   6)
-* keeps, and footnotes ['ms']:           ms Footnotes.        (line  24)
-* kerning and ligatures:                 Ligatures and Kerning.
-                                                              (line   6)
-* kerning enabled register ('.kern'):    Ligatures and Kerning.
-                                                              (line  42)
-* kerning, activating ('kern'):          Ligatures and Kerning.
-                                                              (line  42)
-* kerning, track:                        Ligatures and Kerning.
-                                                              (line  53)
-* landscape page orientation:            Paper Size.          (line   6)
-* last glyph, dimensions ('.w', '.cht', '.cdp', '.csk'): Environments.
-                                                              (line  95)
-* last-requested point size registers ('.psr', '.sr'): Fractional Type Sizes.
-                                                              (line  45)
-* latin-1 (ISO 8859-1), input encoding:  Input Encodings.     (line  14)
-* latin-1 (ISO 8859-1), output encoding: Groff Options.       (line 254)
-* latin-2 (ISO 8859-2), input encoding:  Input Encodings.     (line  18)
-* latin-2 (ISO 8859-9), input encoding:  Input Encodings.     (line  23)
-* latin-9 (latin-0, ISO 8859-15), input encoding: Input Encodings.
-                                                              (line  28)
-* layout, line:                          Line Layout.         (line   6)
-* layout, page:                          Page Layout.         (line   6)
-* 'lc' request, and glyph definitions:   Using Symbols.       (line 326)
-* leader character:                      Leaders.             (line  12)
-* leader character, and translations:    Character Translations.
-                                                              (line 169)
-* leader character, non-interpreted ('\a'): Leaders.          (line  18)
-* leader repetition character ('lc'):    Leaders.             (line  23)
-* leaders:                               Leaders.             (line   6)
-* leading:                               Sizes.               (line  17)
-* leading spaces:                        Filling and Adjusting.
-                                                              (line  10)
-* leading spaces macro ('lsm'):          Implicit Line Breaks.
-                                                              (line  15)
-* leading spaces macro ('lsm') <1>:      Leading Spaces Traps.
-                                                              (line   9)
-* leading spaces traps:                  Leading Spaces Traps.
-                                                              (line   6)
-* leading spaces with 'ds':              Strings.             (line  57)
-* left italic correction ('\,'):         Ligatures and Kerning.
-                                                              (line  91)
-* left margin ('po'):                    Line Layout.         (line  21)
-* left margin, how to move ['man']:      Man usage.           (line 106)
-* length of a string ('length'):         Strings.             (line 211)
-* length of line ('ll'):                 Line Layout.         (line  29)
-* length of page ('pl'):                 Page Layout.         (line  13)
-* length of previous line ('.n'):        Environments.        (line 110)
-* length of title line ('lt'):           Page Layout.         (line  67)
-* 'length' request, and copy-in mode:    Strings.             (line 211)
-* letters, form:                         I/O.                 (line 106)
-* level of warnings ('warn'):            Debugging.           (line 155)
-* ligature:                              Using Symbols.       (line   6)
-* ligatures and kerning:                 Ligatures and Kerning.
-                                                              (line   6)
-* ligatures enabled register ('.lg'):    Ligatures and Kerning.
-                                                              (line  24)
-* ligatures, activating ('lg'):          Ligatures and Kerning.
-                                                              (line  24)
-* limitations of '\b' escape:            Drawing Requests.    (line 239)
-* line break:                            Basics.              (line  48)
-* line break <1>:                        Implicit Line Breaks.
-                                                              (line   6)
-* line break <2>:                        Manipulating Filling and Adjusting.
-                                                              (line   6)
-* line break ('br'):                     Basics.              (line 118)
-* line breaks, with vertical space ['man']: Man usage.        (line 120)
-* line breaks, without vertical space ['man']: Man usage.     (line 124)
-* line control:                          Line Control.        (line   6)
-* line dimensions:                       Line Layout.         (line   6)
-* line drawing glyph:                    Drawing Requests.    (line  28)
-* line drawing glyph <1>:                Drawing Requests.    (line  50)
-* line indentation ('in'):               Line Layout.         (line  25)
-* line layout:                           Line Layout.         (line   6)
-* line length ('ll'):                    Line Layout.         (line  29)
-* line length register ('.l'):           Line Layout.         (line 158)
-* line length, previous ('.n'):          Environments.        (line 110)
-* line number, input, register ('.c', 'c.'): Built-in Registers.
-                                                              (line  77)
-* line number, output, register ('ln'):  Built-in Registers.  (line  82)
-* line numbers, printing ('nm'):         Miscellaneous.       (line  10)
-* line space, extra post-vertical ('\x'): Changing Type Sizes.
-                                                              (line 118)
-* line space, extra pre-vertical ('\x'): Changing Type Sizes. (line 109)
-* line spacing register ('.L'):          Manipulating Spacing.
-                                                              (line  75)
-* line spacing, post-vertical ('pvs'):   Changing Type Sizes. (line 122)
-* line thickness ('\D't ...''):          Drawing Requests.    (line 206)
-* line, blank:                           Implicit Line Breaks.
-                                                              (line  10)
-* line, drawing ('\D'l ...''):           Drawing Requests.    (line  80)
-* line, empty ('sp'):                    Basics.              (line  93)
-* line, horizontal, drawing ('\l'):      Drawing Requests.    (line  17)
-* line, implicit breaks:                 Implicit Line Breaks.
-                                                              (line   6)
-* line, input, continuation ('\'):       Line Control.        (line  36)
-* line, input, horizontal position, register ('hp'): Page Motions.
-                                                              (line 209)
-* line, input, horizontal position, saving ('\k'): Page Motions.
-                                                              (line 203)
-* line, interrupted:                     Line Control.        (line  36)
-* line, output, continuation ('\c'):     Line Control.        (line  36)
-* line, output, horizontal position, register ('.k'): Page Motions.
-                                                              (line 212)
-* line, vertical, drawing ('\L'):        Drawing Requests.    (line  50)
-* line-tabs mode:                        Tabs and Fields.     (line 138)
-* lines, blank, disabling:               Manipulating Spacing.
-                                                              (line 123)
-* lines, centering ('ce'):               Basics.              (line 105)
-* lines, centering ('ce') <1>:           Manipulating Filling and Adjusting.
-                                                              (line 204)
-* lines, consecutive hyphenated ('hlm'): Manipulating Hyphenation.
-                                                              (line  47)
-* lines, interrupted, and input line traps ('itc'): Input Line Traps.
-                                                              (line  24)
-* list:                                  Displays.            (line  13)
-* list of available glyphs ('groff_char(7)' man page): Using Symbols.
-                                                              (line  76)
-* 'll' request, using '+' and '-':       Expressions.         (line  75)
-* location, vertical, page, marking ('mk'): Page Motions.     (line  11)
-* location, vertical, page, returning to marked ('rt'): Page Motions.
-                                                              (line  11)
-* logical not, limitation in expression: Expressions.         (line  27)
-* logical operators:                     Expressions.         (line  19)
-* long names:                            Implementation Differences.
-                                                              (line   9)
-* loops and conditionals:                Conditionals and Loops.
-                                                              (line   6)
-* 'lq' glyph, and 'lq' string ['man']:   Predefined man strings.
-                                                              (line  22)
-* 'ls' request, alternative to ('pvs'):  Changing Type Sizes. (line 137)
-* 'lt' request, using '+' and '-':       Expressions.         (line  75)
-* 'm' unit:                              Measurements.        (line  50)
-* 'M' unit:                              Measurements.        (line  62)
-* machine unit ('u'):                    Measurements.        (line   6)
-* macro arguments:                       Request and Macro Arguments.
-                                                              (line   6)
-* macro arguments, and compatibility mode: Gtroff Internals.  (line  91)
-* macro arguments, and tabs:             Request and Macro Arguments.
-                                                              (line   6)
-* macro basics:                          Basics.              (line   6)
-* macro directories:                     Macro Directories.   (line   6)
-* macro files, searching:                Macro Directories.   (line  11)
-* macro name register ('\$0'):           Parameters.          (line  71)
-* macro names, starting with '[' or ']', and 'refer': Identifiers.
-                                                              (line  46)
-* macro packages:                        Macro Package Intro. (line   6)
-* macro packages <1>:                    Macro Packages.      (line   6)
-* macro packages, structuring the source code: Requests.      (line  14)
-* macro, appending ('am'):               Writing Macros.      (line 116)
-* macro, arguments ('\$'):               Parameters.          (line  21)
-* macro, creating alias ('als'):         Strings.             (line 229)
-* macro, end-of-input ('em'):            End-of-input Traps.  (line   7)
-* macro, removing ('rm'):                Strings.             (line 224)
-* macro, removing alias ('rm'):          Strings.             (line 263)
-* macro, renaming ('rn'):                Strings.             (line 221)
-* macros:                                Macros.              (line   6)
-* macros for manual pages ['man']:       Man usage.           (line   6)
-* macros, recursive:                     while.               (line  38)
-* macros, searching:                     Macro Directories.   (line   6)
-* macros, shared name space with strings and diversions: Strings.
-                                                              (line  92)
-* macros, tutorial for users:            Tutorial for Macro Users.
-                                                              (line   6)
-* macros, writing:                       Writing Macros.      (line   6)
-* magnification of a font ('fzoom'):     Changing Fonts.      (line  71)
-* major quotes:                          Displays.            (line  10)
-* major version number register ('.x'):  Built-in Registers.  (line  88)
-* 'man' macros:                          Man usage.           (line   6)
-* 'man' macros, bold face:               Man font macros.     (line  14)
-* 'man' macros, custom headers and footers: Optional man extensions.
-                                                              (line  12)
-* 'man' macros, default indentation:     Miscellaneous man macros.
-                                                              (line   6)
-* 'man' macros, empty space before a paragraph: Miscellaneous man macros.
-                                                              (line  15)
-* 'man' macros, hanging indentation:     Man usage.           (line  98)
-* 'man' macros, how to set fonts:        Man font macros.     (line   6)
-* 'man' macros, italic fonts:            Man font macros.     (line  52)
-* 'man' macros, line breaks with vertical space: Man usage.   (line 120)
-* 'man' macros, line breaks without vertical space: Man usage.
-                                                              (line 124)
-* 'man' macros, moving left margin:      Man usage.           (line 106)
-* 'man' macros, resetting default indentation: Man usage.     (line 127)
-* 'man' macros, tab stops:               Miscellaneous man macros.
-                                                              (line  10)
-* 'man' macros, Ultrix-specific:         Optional man extensions.
-                                                              (line  30)
-* man pages:                             man.                 (line   6)
-* manipulating filling and adjusting:    Manipulating Filling and Adjusting.
-                                                              (line   6)
-* manipulating hyphenation:              Manipulating Hyphenation.
-                                                              (line   6)
-* manipulating spacing:                  Manipulating Spacing.
-                                                              (line   6)
-* 'man'macros, BSD compatibility:        Miscellaneous man macros.
-                                                              (line  27)
-* 'man'macros, BSD compatibility <1>:    Miscellaneous man macros.
-                                                              (line  44)
-* manual pages:                          man.                 (line   6)
-* margin for hyphenation ('hym'):        Manipulating Hyphenation.
-                                                              (line 211)
-* margin glyph ('mc'):                   Miscellaneous.       (line  75)
-* margin, bottom:                        Page Layout.         (line  20)
-* margin, left ('po'):                   Line Layout.         (line  21)
-* margin, top:                           Page Layout.         (line  20)
-* mark, high-water, register ('.h'):     Diversions.          (line  76)
-* marking vertical page location ('mk'): Page Motions.        (line  11)
-* MathML:                                grohtml specific registers and strings.
-                                                              (line  23)
-* maximum values of Roman numerals:      Assigning Formats.   (line  59)
-* 'mdoc' macros:                         mdoc.                (line   6)
-* 'me' macro package:                    me.                  (line   6)
-* measurement unit:                      Measurements.        (line   6)
-* measurements:                          Measurements.        (line   6)
-* measurements, specifying safely:       Default Units.       (line  25)
-* minimum values of Roman numerals:      Assigning Formats.   (line  59)
-* minor version number register ('.y'):  Built-in Registers.  (line  92)
-* minutes, current time ('minutes'):     Built-in Registers.  (line  37)
-* 'mm' macro package:                    mm.                  (line   6)
-* mode for constant glyph space ('cs'):  Artificial Fonts.    (line 126)
-* mode, compatibility:                   Implementation Differences.
-                                                              (line   6)
-* mode, compatibility, and parameters:   Gtroff Internals.    (line  91)
-* mode, copy:                            Copy-in Mode.        (line   6)
-* mode, copy-in:                         Copy-in Mode.        (line   6)
-* mode, copy-in, and 'cf' request:       I/O.                 (line  50)
-* mode, copy-in, and 'device' request:   Postprocessor Access.
-                                                              (line  19)
-* mode, copy-in, and 'ig' request:       Comments.            (line  85)
-* mode, copy-in, and 'length' request:   Strings.             (line 211)
-* mode, copy-in, and macro arguments:    Parameters.          (line  21)
-* mode, copy-in, and 'output' request:   Diversions.          (line 179)
-* mode, copy-in, and 'tm' request:       Debugging.           (line  30)
-* mode, copy-in, and 'tm1' request:      Debugging.           (line  30)
-* mode, copy-in, and 'tmc' request:      Debugging.           (line  30)
-* mode, copy-in, and 'trf' request:      I/O.                 (line  50)
-* mode, copy-in, and 'write' request:    I/O.                 (line 212)
-* mode, copy-in, and 'writec' request:   I/O.                 (line 212)
-* mode, copy-in, and 'writem' request:   I/O.                 (line 225)
-* mode, copy-in, and '\!':               Diversions.          (line 148)
-* mode, copy-in, and '\?':               Operators in Conditionals.
-                                                              (line  55)
-* mode, copy-in, and '\?' <1>:           Diversions.          (line 148)
-* mode, copy-in, and '\a':               Leaders.             (line  18)
-* mode, copy-in, and '\E':               Character Translations.
-                                                              (line  81)
-* mode, copy-in, and '\t':               Tabs and Fields.     (line  10)
-* mode, copy-in, and '\V':               I/O.                 (line 249)
-* mode, fill:                            Implicit Line Breaks.
-                                                              (line  15)
-* mode, fill <1>:                        Manipulating Filling and Adjusting.
-                                                              (line 156)
-* mode, fill <2>:                        Warnings.            (line  23)
-* mode, fill ('fi'):                     Manipulating Filling and Adjusting.
-                                                              (line  29)
-* mode, fill, and '\c':                  Line Control.        (line  69)
-* mode, line-tabs:                       Tabs and Fields.     (line 138)
-* mode, no-fill ('nf'):                  Manipulating Filling and Adjusting.
-                                                              (line  39)
-* mode, no-fill, and '\c':               Line Control.        (line  60)
-* mode, no-space ('ns'):                 Manipulating Spacing.
-                                                              (line 123)
-* mode, nroff:                           Troff and Nroff Mode.
-                                                              (line   6)
-* mode, safer:                           Groff Options.       (line 214)
-* mode, safer <1>:                       Macro Directories.   (line  21)
-* mode, safer <2>:                       Built-in Registers.  (line  23)
-* mode, safer <3>:                       I/O.                 (line  32)
-* mode, safer <4>:                       I/O.                 (line 147)
-* mode, safer <5>:                       I/O.                 (line 168)
-* mode, safer <6>:                       I/O.                 (line 206)
-* mode, troff:                           Troff and Nroff Mode.
-                                                              (line   6)
-* mode, unsafe:                          Groff Options.       (line 292)
-* mode, unsafe <1>:                      Macro Directories.   (line  21)
-* mode, unsafe <2>:                      Built-in Registers.  (line  23)
-* mode, unsafe <3>:                      I/O.                 (line  32)
-* mode, unsafe <4>:                      I/O.                 (line 147)
-* mode, unsafe <5>:                      I/O.                 (line 168)
-* mode, unsafe <6>:                      I/O.                 (line 206)
-* modifying requests:                    Requests.            (line  61)
-* 'mom' macro package:                   mom.                 (line   6)
-* month of the year register ('mo'):     Built-in Registers.  (line  51)
-* motion operators:                      Expressions.         (line  65)
-* motion, horizontal ('\h'):             Page Motions.        (line 103)
-* motion, vertical ('\v'):               Page Motions.        (line  78)
-* motions, page:                         Page Motions.        (line   6)
-* mounting font ('fp'):                  Font Positions.      (line  13)
-* 'ms' macros:                           ms.                  (line   6)
-* 'ms' macros, accent marks:             ms Strings and Special Characters.
-                                                              (line   6)
-* 'ms' macros, body text:                ms Body Text.        (line   6)
-* 'ms' macros, cover page:               ms Cover Page Macros.
-                                                              (line   6)
-* 'ms' macros, creating table of contents: ms TOC.            (line   6)
-* 'ms' macros, differences from AT&T:    Differences from AT&T ms.
-                                                              (line   6)
-* 'ms' macros, displays:                 ms Displays and Keeps.
-                                                              (line   6)
-* 'ms' macros, document control registers: ms Document Control Registers.
-                                                              (line   6)
-* 'ms' macros, equations:                ms Insertions.       (line   6)
-* 'ms' macros, figures:                  ms Insertions.       (line   6)
-* 'ms' macros, footers:                  ms Headers and Footers.
-                                                              (line   6)
-* 'ms' macros, footnotes:                ms Footnotes.        (line   6)
-* 'ms' macros, general structure:        General ms Structure.
-                                                              (line   6)
-* 'ms' macros, headers:                  ms Headers and Footers.
-                                                              (line   6)
-* 'ms' macros, headings:                 Headings in ms.      (line   6)
-* 'ms' macros, highlighting:             Highlighting in ms.  (line   6)
-* 'ms' macros, keeps:                    ms Displays and Keeps.
-                                                              (line   6)
-* 'ms' macros, lists:                    Lists in ms.         (line   6)
-* 'ms' macros, margins:                  ms Margins.          (line   6)
-* 'ms' macros, multiple columns:         ms Multiple Columns. (line   6)
-* 'ms' macros, naming conventions:       Naming Conventions.  (line   6)
-* 'ms' macros, nested lists:             Lists in ms.         (line 122)
-* 'ms' macros, page layout:              ms Page Layout.      (line   6)
-* 'ms' macros, paragraph handling:       Paragraphs in ms.    (line   6)
-* 'ms' macros, references:               ms Insertions.       (line   6)
-* 'ms' macros, special characters:       ms Strings and Special Characters.
-                                                              (line   6)
-* 'ms' macros, strings:                  ms Strings and Special Characters.
-                                                              (line   6)
-* 'ms' macros, tables:                   ms Insertions.       (line   6)
-* multi-file documents:                  Debugging.           (line  10)
-* multi-line strings:                    Strings.             (line  63)
-* multi-page table, example markup ['ms']: Example multi-page table.
-                                                              (line   6)
-* multiple columns ['ms']:               ms Multiple Columns. (line   6)
-* 'n' unit:                              Measurements.        (line  55)
-* name space, common, of macros, diversions, and strings: Strings.
-                                                              (line  92)
-* name, background color, register ('.M'): Colors.            (line  94)
-* name, drawing color, register ('.m'):  Colors.              (line  67)
-* name, fill color, register ('.M'):     Colors.              (line  94)
-* named character ('\C'):                Using Symbols.       (line 185)
-* names, long:                           Implementation Differences.
-                                                              (line   9)
-* naming conventions, 'ms' macros:       Naming Conventions.  (line   6)
-* 'ne' request, and the '.trunc' register: Page Location Traps.
-                                                              (line 131)
-* 'ne' request, comparison with 'sv':    Page Control.        (line  53)
-* negating register values:              Setting Registers.   (line  78)
-* nested assignments:                    Interpolating Registers.
-                                                              (line  11)
-* nested diversions:                     Diversions.          (line  69)
-* nested lists ['ms']:                   Lists in ms.         (line 122)
-* new page ('bp'):                       Basics.              (line  91)
-* new page ('bp') <1>:                   Page Control.        (line  10)
-* newline character:                     Identifiers.         (line  10)
-* newline character <1>:                 Escapes.             (line  69)
-* newline character, and translations:   Character Translations.
-                                                              (line 169)
-* newline character, in strings, escaping: Strings.           (line  63)
-* newline, final, stripping in diversions: Strings.           (line 157)
-* next file, processing ('nx'):          I/O.                 (line  84)
-* next free font position register ('.fp'): Font Positions.   (line  30)
-* 'nf' request, causing implicit linebreak: Manipulating Filling and Adjusting.
-                                                              (line   6)
-* 'nl' register, and '.d':               Diversions.          (line  69)
-* 'nl' register, difference to '.h':     Diversions.          (line  88)
-* 'nm' request, using '+' and '-':       Expressions.         (line  75)
-* no-break control character ('''):      Requests.            (line   6)
-* no-break control character, changing ('c2'): Character Translations.
-                                                              (line   6)
-* no-fill mode ('nf'):                   Manipulating Filling and Adjusting.
-                                                              (line  39)
-* no-fill mode, and '\c':                Line Control.        (line  60)
-* no-space mode ('ns'):                  Manipulating Spacing.
-                                                              (line 123)
-* node, output:                          Gtroff Internals.    (line   6)
-* 'nr' request, and warnings:            Warnings.            (line  61)
-* 'nr' request, using '+' and '-':       Expressions.         (line  75)
-* nroff mode:                            Troff and Nroff Mode.
-                                                              (line   6)
-* 'nroff', the program:                  History.             (line  22)
-* number of arguments register ('.$'):   Parameters.          (line  10)
-* number of registers register ('.R'):   Built-in Registers.  (line  18)
-* number register, creating alias ('aln'): Setting Registers. (line 112)
-* number register, removing ('rr'):      Setting Registers.   (line 104)
-* number register, renaming ('rnn'):     Setting Registers.   (line 108)
-* number registers, dumping ('pnr'):     Debugging.           (line  77)
-* number, input line, setting ('lf'):    Debugging.           (line  10)
-* number, page ('pn'):                   Page Layout.         (line  84)
-* numbered glyph ('\N'):                 Character Translations.
-                                                              (line 160)
-* numbered glyph ('\N') <1>:             Using Symbols.       (line 201)
-* numbered list, example markup ['ms']:  Lists in ms.         (line  41)
-* numbers, and delimiters:               Escapes.             (line  65)
-* numbers, line, printing ('nm'):        Miscellaneous.       (line  10)
-* numerals, Roman:                       Assigning Formats.   (line  32)
-* numeric expression, valid:             Expressions.         (line  83)
-* offset, page ('po'):                   Line Layout.         (line  21)
-* 'open' request, and safer mode:        Groff Options.       (line 214)
-* 'opena' request, and safer mode:       Groff Options.       (line 214)
-* opening file ('open'):                 I/O.                 (line 200)
-* operator, scaling:                     Expressions.         (line  54)
-* operators, arithmetic:                 Expressions.         (line   8)
-* operators, as delimiters:              Escapes.             (line  67)
-* operators, comparison:                 Expressions.         (line  15)
-* operators, extremum ('>?', '<?'):      Expressions.         (line  44)
-* operators, logical:                    Expressions.         (line  19)
-* operators, motion:                     Expressions.         (line  65)
-* operators, unary:                      Expressions.         (line  21)
-* optical size of a font:                Changing Fonts.      (line  71)
-* options:                               Groff Options.       (line   6)
-* order of evaluation in expressions:    Expressions.         (line  59)
-* orientation, landscape:                Paper Size.          (line   6)
-* orphan lines, preventing with 'ne':    Page Control.        (line  33)
-* 'os' request, and no-space mode:       Page Control.        (line  63)
-* output and input requests:             I/O.                 (line   6)
-* output device name string register ('.T'): Groff Options.   (line 281)
-* output device name string register ('.T') <1>: Built-in Registers.
-                                                              (line 127)
-* output device usage number register ('.T'): Groff Options.  (line 281)
-* output devices:                        Output device intro. (line   6)
-* output devices <1>:                    Output Devices.      (line   6)
-* output encoding, ASCII:                Groff Options.       (line 250)
-* output encoding, cp1047:               Groff Options.       (line 264)
-* output encoding, EBCDIC:               Groff Options.       (line 264)
-* output encoding, latin-1 (ISO 8859-1): Groff Options.       (line 254)
-* output encoding, utf-8:                Groff Options.       (line 259)
-* output glyphs, and input characters,compatibility with AT&T 'troff': Implementation Differences.
-                                                              (line  86)
-* output line number register ('ln'):    Built-in Registers.  (line  82)
-* output line, continuation ('\c'):      Line Control.        (line  36)
-* output line, horizontal position, register ('.k'): Page Motions.
-                                                              (line 212)
-* output node:                           Gtroff Internals.    (line   6)
-* 'output' request, and copy-in mode:    Diversions.          (line 179)
-* 'output' request, and '\!':            Diversions.          (line 179)
-* output, flush ('fl'):                  Debugging.           (line  87)
-* output, 'gtroff':                      gtroff Output.       (line   6)
-* output, intermediate:                  gtroff Output.       (line  16)
-* output, suppressing ('\O'):            Suppressing output.  (line   7)
-* output, transparent ('cf', 'trf'):     I/O.                 (line  50)
-* output, transparent ('\!', '\?'):      Diversions.          (line 136)
-* output, transparent, incompatibilities with AT&T 'troff': Implementation Differences.
-                                                              (line 106)
-* output, troff:                         gtroff Output.       (line  16)
-* overlapping characters:                Using Symbols.       (line 265)
-* overstriking glyphs ('\o'):            Page Motions.        (line 216)
-* 'p' unit:                              Measurements.        (line  30)
-* 'P' unit:                              Measurements.        (line  34)
-* packages, macros:                      Macro Packages.      (line   6)
-* padding character, for fields ('fc'):  Fields.              (line   6)
-* page break, conditional ('ne'):        Page Control.        (line  33)
-* page control:                          Page Control.        (line   6)
-* page ejecting register ('.pe'):        Page Location Traps. (line 143)
-* page footers:                          Page Location Traps. (line  38)
-* page headers:                          Page Location Traps. (line  38)
-* page layout:                           Page Layout.         (line   6)
-* page layout ['ms']:                    ms Page Layout.      (line   6)
-* page length ('pl'):                    Page Layout.         (line  13)
-* page length register ('.p'):           Page Layout.         (line  17)
-* page location traps:                   Page Location Traps. (line   6)
-* page location, vertical, marking ('mk'): Page Motions.      (line  11)
-* page location, vertical, returning to marked ('rt'): Page Motions.
-                                                              (line  11)
-* page motions:                          Page Motions.        (line   6)
-* page number ('pn'):                    Page Layout.         (line  84)
-* page number character ('%'):           Page Layout.         (line  35)
-* page number character, changing ('pc'): Page Layout.        (line  94)
-* page number register ('%'):            Page Control.        (line  27)
-* page offset ('po'):                    Line Layout.         (line  21)
-* page orientation, landscape:           Paper Size.          (line   6)
-* page, new ('bp'):                      Page Control.        (line  10)
-* paper formats:                         Paper Formats.       (line   6)
-* paper size:                            Paper Size.          (line   6)
-* paragraphs:                            Paragraphs.          (line   6)
-* parameters:                            Parameters.          (line   6)
-* parameters, and compatibility mode:    Gtroff Internals.    (line  91)
-* parentheses:                           Expressions.         (line  59)
-* path, for font files:                  Font Directories.    (line  14)
-* path, for tmac files:                  Macro Directories.   (line  11)
-* patterns for hyphenation ('hpf'):      Manipulating Hyphenation.
-                                                              (line 116)
-* PDF, embedding:                        Embedding PDF.       (line   6)
-* 'pi' request, and 'groff':             I/O.                 (line 159)
-* 'pi' request, and safer mode:          Groff Options.       (line 214)
-* 'pic', the program:                    gpic.                (line   6)
-* pica unit ('P'):                       Measurements.        (line  34)
-* pile, glyph ('\b'):                    Drawing Requests.    (line 232)
-* 'pl' request, using '+' and '-':       Expressions.         (line  75)
-* planting a trap:                       Traps.               (line  11)
-* platform-specific directory:           Macro Directories.   (line  26)
-* 'pn' request, using '+' and '-':       Expressions.         (line  75)
-* PNG image generation from PostScript:  DESC File Format.    (line  29)
-* 'po' request, using '+' and '-':       Expressions.         (line  75)
-* point size registers ('.s', '.ps'):    Changing Type Sizes. (line  20)
-* point size registers, last-requested ('.psr', '.sr'): Fractional Type Sizes.
-                                                              (line  45)
-* point sizes, changing ('ps', '\s'):    Changing Type Sizes. (line  11)
-* point sizes, fractional:               Fractional Type Sizes.
-                                                              (line   6)
-* point sizes, fractional <1>:           Implementation Differences.
-                                                              (line  76)
-* point unit ('p'):                      Measurements.        (line  30)
-* polygon, drawing ('\D'p ...''):        Drawing Requests.    (line 158)
-* polygon, solid, drawing ('\D'P ...''): Drawing Requests.    (line 167)
-* position of lowest text line ('.h'):   Diversions.          (line  76)
-* position, absolute, operator ('|'):    Expressions.         (line  70)
-* position, horizontal input line, saving ('\k'): Page Motions.
-                                                              (line 203)
-* position, horizontal, in input line, register ('hp'): Page Motions.
-                                                              (line 209)
-* position, horizontal, in output line, register ('.k'): Page Motions.
-                                                              (line 212)
-* position, vertical, current ('nl'):    Page Control.        (line  67)
-* position, vertical, in diversion, register ('.d'): Diversions.
-                                                              (line  69)
-* positions, font:                       Font Positions.      (line   6)
-* post-vertical line spacing:            Changing Type Sizes. (line 122)
-* post-vertical line spacing register ('.pvs'): Changing Type Sizes.
-                                                              (line 137)
-* post-vertical line spacing, changing ('pvs'): Changing Type Sizes.
-                                                              (line 137)
-* postprocessor access:                  Postprocessor Access.
-                                                              (line   6)
-* postprocessors:                        Output device intro. (line   6)
-* PostScript fonts:                      Font Families.       (line  11)
-* PostScript, bounding box:              Miscellaneous.       (line 139)
-* PostScript, embedding:                 Embedding PostScript.
-                                                              (line   6)
-* PostScript, PNG image generation:      DESC File Format.    (line  29)
-* 'preconv', invoking:                   Invoking preconv.    (line   5)
-* 'preconv', the program:                preconv.             (line   6)
-* prefix, for commands:                  Environment.         (line  14)
-* preprocessor, calling convention:      Preprocessors in man pages.
-                                                              (line   6)
-* preprocessors:                         Preprocessor Intro.  (line   6)
-* preprocessors <1>:                     Preprocessors.       (line   6)
-* previous font ('ft', '\f[]', '\fP'):   Changing Fonts.      (line  23)
-* previous line length ('.n'):           Environments.        (line 110)
-* print current page register ('.P'):    Groff Options.       (line 171)
-* printing backslash ('\\', '\e', '\E', '\[rs]'): Escapes.    (line  74)
-* printing backslash ('\\', '\e', '\E', '\[rs]') <1>: Implementation Differences.
-                                                              (line 106)
-* printing line numbers ('nm'):          Miscellaneous.       (line  10)
-* printing to stderr ('tm', 'tm1', 'tmc'): Debugging.         (line  27)
-* printing, zero-width ('\z', '\Z'):     Page Motions.        (line 220)
-* printing, zero-width ('\z', '\Z') <1>: Page Motions.        (line 224)
-* process ID of 'gtroff' register ('$$'): Built-in Registers. (line  99)
-* processing next file ('nx'):           I/O.                 (line  84)
-* properties of characters ('cflags'):   Using Symbols.       (line 237)
-* properties of glyphs ('cflags'):       Using Symbols.       (line 237)
-* 'ps' request, and constant glyph space mode: Artificial Fonts.
-                                                              (line 126)
-* 'ps' request, incompatibilities with AT&T 'troff': Implementation Differences.
-                                                              (line  76)
-* 'ps' request, using '+' and '-':       Expressions.         (line  75)
-* 'ps' request, with fractional type sizes: Fractional Type Sizes.
-                                                              (line   6)
-* 'pso' request, and safer mode:         Groff Options.       (line 214)
-* 'pvs' request, using '+' and '-':      Expressions.         (line  75)
-* quotes, major:                         Displays.            (line  10)
-* quotes, trailing:                      Strings.             (line  57)
-* 'radicalex' glyph, and 'cflags':       Using Symbols.       (line 265)
-* ragged-left:                           Manipulating Filling and Adjusting.
-                                                              (line  63)
-* ragged-right:                          Manipulating Filling and Adjusting.
-                                                              (line  59)
-* 'rc' request, and glyph definitions:   Using Symbols.       (line 326)
-* read-only register, changing format:   Assigning Formats.   (line  68)
-* reading from standard input ('rd'):    I/O.                 (line  89)
-* recursive macros:                      while.               (line  38)
-* 'refer', and macro names starting with '[' or ']': Identifiers.
-                                                              (line  46)
-* 'refer', the program:                  grefer.              (line   6)
-* reference, 'gtroff':                   gtroff Reference.    (line   6)
-* references ['ms']:                     ms Insertions.       (line   6)
-* register, creating alias ('aln'):      Setting Registers.   (line 112)
-* register, format ('\g'):               Assigning Formats.   (line  75)
-* register, removing ('rr'):             Setting Registers.   (line 104)
-* register, renaming ('rnn'):            Setting Registers.   (line 108)
-* registers:                             Registers.           (line   6)
-* registers specific to 'grohtml':       grohtml specific registers and strings.
-                                                              (line   6)
-* registers, built-in:                   Built-in Registers.  (line   6)
-* registers, interpolating ('\n'):       Interpolating Registers.
-                                                              (line   6)
-* registers, number of, register ('.R'): Built-in Registers.  (line  18)
-* registers, setting ('nr', '\R'):       Setting Registers.   (line   6)
-* removing alias, for diversion ('rm'):  Strings.             (line 263)
-* removing alias, for macro ('rm'):      Strings.             (line 263)
-* removing alias, for string ('rm'):     Strings.             (line 263)
-* removing diversion ('rm'):             Strings.             (line 224)
-* removing glyph definition ('rchar', 'rfschar'): Using Symbols.
-                                                              (line 382)
-* removing macro ('rm'):                 Strings.             (line 224)
-* removing number register ('rr'):       Setting Registers.   (line 104)
-* removing request ('rm'):               Strings.             (line 224)
-* removing string ('rm'):                Strings.             (line 224)
-* renaming diversion ('rn'):             Strings.             (line 221)
-* renaming macro ('rn'):                 Strings.             (line 221)
-* renaming number register ('rnn'):      Setting Registers.   (line 108)
-* renaming request ('rn'):               Strings.             (line 221)
-* renaming string ('rn'):                Strings.             (line 221)
-* request arguments:                     Request and Macro Arguments.
-                                                              (line   6)
-* request arguments, and compatibility mode: Gtroff Internals.
-                                                              (line  91)
-* request, removing ('rm'):              Strings.             (line 224)
-* request, renaming ('rn'):              Strings.             (line 221)
-* request, undefined:                    Comments.            (line  25)
-* requests:                              Requests.            (line   6)
-* requests for drawing:                  Drawing Requests.    (line   6)
-* requests for input and output:         I/O.                 (line   6)
-* requests, modifying:                   Requests.            (line  61)
-* resolution, device:                    DESC File Format.    (line  85)
-* resolution, horizontal:                DESC File Format.    (line  25)
-* resolution, horizontal, register ('.H'): Built-in Registers.
-                                                              (line  15)
-* resolution, vertical:                  DESC File Format.    (line 135)
-* resolution, vertical, register ('.V'): Built-in Registers.  (line  28)
-* returning to marked vertical page location ('rt'): Page Motions.
-                                                              (line  11)
-* revision number register ('.Y'):       Built-in Registers.  (line  96)
-* 'rf', the program:                     History.             (line   6)
-* right-justifying ('rj'):               Manipulating Filling and Adjusting.
-                                                              (line 250)
-* 'rj' request, causing implicit linebreak: Manipulating Filling and Adjusting.
-                                                              (line   6)
-* 'rn' glyph, and 'cflags':              Using Symbols.       (line 265)
-* 'roff', the program:                   History.             (line  17)
-* roman glyph, correction after italic glyph ('\/'): Ligatures and Kerning.
-                                                              (line  80)
-* roman glyph, correction before italic glyph ('\,'): Ligatures and Kerning.
-                                                              (line  91)
-* Roman numerals:                        Assigning Formats.   (line  32)
-* Roman numerals, maximum and minimum:   Assigning Formats.   (line  59)
-* 'rq' glyph, and 'rq' string ['man']:   Predefined man strings.
-                                                              (line  22)
-* 'rq' glyph, at end of sentence:        Sentences.           (line  18)
-* 'rq' glyph, at end of sentence <1>:    Using Symbols.       (line 275)
-* 'rt' request, using '+' and '-':       Expressions.         (line  75)
-* 'ru' glyph, and 'cflags':              Using Symbols.       (line 265)
-* 'RUNOFF', the program:                 History.             (line   6)
-* 's' unit:                              Measurements.        (line  40)
-* 's' unit <1>:                          Fractional Type Sizes.
-                                                              (line   6)
-* safer mode:                            Groff Options.       (line 214)
-* safer mode <1>:                        Macro Directories.   (line  21)
-* safer mode <2>:                        Built-in Registers.  (line  23)
-* safer mode <3>:                        I/O.                 (line  32)
-* safer mode <4>:                        I/O.                 (line 147)
-* safer mode <5>:                        I/O.                 (line 168)
-* safer mode <6>:                        I/O.                 (line 206)
-* saving horizontal input line position ('\k'): Page Motions. (line 203)
-* scaling indicator:                     Measurements.        (line   6)
-* scaling operator:                      Expressions.         (line  54)
-* searching fonts:                       Font Directories.    (line   6)
-* searching macro files:                 Macro Directories.   (line  11)
-* searching macros:                      Macro Directories.   (line   6)
-* seconds, current time ('seconds'):     Built-in Registers.  (line  31)
-* sentence space:                        Sentences.           (line  12)
-* sentence space size register ('.sss'): Manipulating Filling and Adjusting.
-                                                              (line 151)
-* sentences:                             Sentences.           (line   6)
-* setting diversion trap ('dt'):         Diversion Traps.     (line   7)
-* setting end-of-input trap ('em'):      End-of-input Traps.  (line   7)
-* setting input line number ('lf'):      Debugging.           (line  10)
-* setting input line trap ('it'):        Input Line Traps.    (line   8)
-* setting registers ('nr', '\R'):        Setting Registers.   (line   6)
-* shading filled objects ('\D'f ...''):  Drawing Requests.    (line 141)
-* 'shc' request, and translations:       Character Translations.
-                                                              (line 173)
-* site-specific directory:               Macro Directories.   (line  26)
-* site-specific directory <1>:           Font Directories.    (line  29)
-* size of sentence space register ('.sss'): Manipulating Filling and Adjusting.
-                                                              (line 151)
-* size of type:                          Sizes.               (line   6)
-* size of word space register ('.ss'):   Manipulating Filling and Adjusting.
-                                                              (line 151)
-* size, optical, of a font:              Changing Fonts.      (line  71)
-* size, paper:                           Paper Size.          (line   6)
-* sizes:                                 Sizes.               (line   6)
-* sizes, fractional:                     Fractional Type Sizes.
-                                                              (line   6)
-* sizes, fractional <1>:                 Implementation Differences.
-                                                              (line  76)
-* skew, of last glyph ('.csk'):          Environments.        (line  95)
-* slant, font, changing ('\S'):          Artificial Fonts.    (line  45)
-* 'soelim', the program:                 gsoelim.             (line   6)
-* soft hyphen character, setting ('shc'): Manipulating Hyphenation.
-                                                              (line 243)
-* soft hyphen glyph ('hy'):              Manipulating Hyphenation.
-                                                              (line 243)
-* solid circle, drawing ('\D'C ...''):   Drawing Requests.    (line 114)
-* solid ellipse, drawing ('\D'E ...''):  Drawing Requests.    (line 124)
-* solid polygon, drawing ('\D'P ...''):  Drawing Requests.    (line 167)
-* 'sp' request, and no-space mode:       Manipulating Spacing.
-                                                              (line 123)
-* 'sp' request, and traps:               Manipulating Spacing.
-                                                              (line  53)
-* 'sp' request, causing implicit linebreak: Manipulating Filling and Adjusting.
-                                                              (line   6)
-* space between sentences:               Sentences.           (line  12)
-* space between sentences register ('.sss'): Manipulating Filling and Adjusting.
-                                                              (line 151)
-* space between words register ('.ss'):  Manipulating Filling and Adjusting.
-                                                              (line 151)
-* space character:                       Escapes.             (line  69)
-* space character, zero width ('\&'):    Requests.            (line  47)
-* space character, zero width ('\&') <1>: Ligatures and Kerning.
-                                                              (line  47)
-* space character, zero width ('\&') <2>: Drawing Requests.   (line  32)
-* space characters, in expressions:      Expressions.         (line  86)
-* space, discardable, horizontal:        Manipulating Filling and Adjusting.
-                                                              (line 183)
-* space, discarded, in traps:            Manipulating Spacing.
-                                                              (line  53)
-* space, horizontal ('\h'):              Page Motions.        (line 103)
-* space, horizontal, unformatting:       Strings.             (line 157)
-* space, unbreakable:                    Page Motions.        (line 114)
-* space, vertical, unit ('v'):           Measurements.        (line  58)
-* space, width of a digit ('\0'):        Page Motions.        (line 138)
-* spaces with 'ds':                      Strings.             (line  57)
-* spaces, in a macro argument:           Request and Macro Arguments.
-                                                              (line  10)
-* spaces, leading and trailing:          Filling and Adjusting.
-                                                              (line  10)
-* spacing:                               Basics.              (line  82)
-* spacing, manipulating:                 Manipulating Spacing.
-                                                              (line   6)
-* spacing, vertical:                     Sizes.               (line   6)
-* special characters:                    Character Translations.
-                                                              (line 160)
-* special characters <1>:                Special Characters.  (line   6)
-* special characters ['ms']:             ms Strings and Special Characters.
-                                                              (line   6)
-* special fonts:                         Using Symbols.       (line  14)
-* special fonts <1>:                     Special Fonts.       (line   6)
-* special fonts <2>:                     Font File Format.    (line  28)
-* special fonts, emboldening:            Artificial Fonts.    (line 115)
-* 'special' request, and font translations: Changing Fonts.   (line  55)
-* 'special' request, and glyph search order: Using Symbols.   (line  14)
-* spline, drawing ('\D'~ ...''):         Drawing Requests.    (line 136)
-* springing a trap:                      Traps.               (line  11)
-* 'sqrtex' glyph, and 'cflags':          Using Symbols.       (line 265)
-* stacking glyphs ('\b'):                Drawing Requests.    (line 232)
-* standard input, reading from ('rd'):   I/O.                 (line  89)
-* stderr, printing to ('tm', 'tm1', 'tmc'): Debugging.        (line  27)
-* stops, tabulator:                      Tab Stops.           (line   6)
-* string arguments:                      Strings.             (line  19)
-* string comparison:                     Operators in Conditionals.
-                                                              (line  47)
-* string expansion ('\*'):               Strings.             (line  19)
-* string interpolation ('\*'):           Strings.             (line  19)
-* string, appending ('as'):              Strings.             (line 176)
-* string, creating alias ('als'):        Strings.             (line 229)
-* string, length of ('length'):          Strings.             (line 211)
-* string, removing ('rm'):               Strings.             (line 224)
-* string, removing alias ('rm'):         Strings.             (line 263)
-* string, renaming ('rn'):               Strings.             (line 221)
-* strings:                               Strings.             (line   6)
-* strings specific to 'grohtml':         grohtml specific registers and strings.
-                                                              (line   6)
-* strings ['ms']:                        ms Strings and Special Characters.
-                                                              (line   6)
-* strings, multi-line:                   Strings.             (line  63)
-* strings, shared name space with macros and diversions: Strings.
-                                                              (line  92)
-* stripping final newline in diversions: Strings.             (line 157)
-* structuring source code of documents or macro packages: Requests.
-                                                              (line  14)
-* 'sty' request, and changing fonts:     Changing Fonts.      (line  11)
-* 'sty' request, and font positions:     Font Positions.      (line  60)
-* 'sty' request, and font translations:  Changing Fonts.      (line  55)
-* styles, font:                          Font Families.       (line   6)
-* substring ('substring'):               Strings.             (line 192)
-* suppressing output ('\O'):             Suppressing output.  (line   7)
-* 'sv' request, and no-space mode:       Page Control.        (line  63)
-* switching environments ('ev'):         Environments.        (line  39)
-* 'sy' request, and safer mode:          Groff Options.       (line 214)
-* symbol:                                Using Symbols.       (line  14)
-* symbol table, dumping ('pm'):          Debugging.           (line  66)
-* symbol, defining ('char'):             Using Symbols.       (line 326)
-* symbols, using:                        Using Symbols.       (line   6)
-* 'system()' return value register ('systat'): I/O.           (line 195)
-* tab character:                         Tab Stops.           (line   6)
-* tab character <1>:                     Escapes.             (line  69)
-* tab character, and translations:       Character Translations.
-                                                              (line 169)
-* tab character, non-interpreted ('\t'): Tabs and Fields.     (line  10)
-* tab repetition character ('tc'):       Tabs and Fields.     (line 129)
-* tab settings register ('.tabs'):       Tabs and Fields.     (line 117)
-* tab stops:                             Tab Stops.           (line   6)
-* tab stops ['man']:                     Miscellaneous man macros.
-                                                              (line  10)
-* tab stops, for TTY output devices:     Tabs and Fields.     (line 115)
-* tab, line-tabs mode:                   Tabs and Fields.     (line 138)
-* table of contents:                     Table of Contents.   (line   6)
-* table of contents <1>:                 Leaders.             (line  29)
-* table of contents, creating ['ms']:    ms TOC.              (line   6)
-* tables ['ms']:                         ms Insertions.       (line   6)
-* tabs, and fields:                      Tabs and Fields.     (line   6)
-* tabs, and macro arguments:             Request and Macro Arguments.
-                                                              (line   6)
-* tabs, before comments:                 Comments.            (line  21)
-* 'tbl', the program:                    gtbl.                (line   6)
-* Teletype:                              Invoking grotty.     (line  50)
-* terminal control sequences:            Invoking grotty.     (line  50)
-* terminal, conditional output for:      Operators in Conditionals.
-                                                              (line  14)
-* text line, position of lowest ('.h'):  Diversions.          (line  76)
-* text, 'gtroff' processing:             Text.                (line   6)
-* text, justifying:                      Manipulating Filling and Adjusting.
-                                                              (line   6)
-* text, justifying ('rj'):               Manipulating Filling and Adjusting.
-                                                              (line 250)
-* thickness of lines ('\D't ...''):      Drawing Requests.    (line 206)
-* three-part title ('tl'):               Page Layout.         (line  35)
-* 'ti' request, causing implicit linebreak: Manipulating Filling and Adjusting.
-                                                              (line   6)
-* 'ti' request, using '+' and '-':       Expressions.         (line  75)
-* time, current:                         I/O.                 (line 175)
-* time, current, hours ('hours'):        Built-in Registers.  (line  41)
-* time, current, minutes ('minutes'):    Built-in Registers.  (line  37)
-* time, current, seconds ('seconds'):    Built-in Registers.  (line  31)
-* title line ('tl'):                     Page Layout.         (line  35)
-* title line length register ('.lt'):    Page Layout.         (line  67)
-* title line, length ('lt'):             Page Layout.         (line  67)
-* title page, example markup:            ms Cover Page Macros.
-                                                              (line  66)
-* titles:                                Page Layout.         (line  31)
-* 'tkf' request, and font styles:        Font Families.       (line  59)
-* 'tkf' request, and font translations:  Changing Fonts.      (line  55)
-* 'tkf' request, with fractional type sizes: Fractional Type Sizes.
-                                                              (line   6)
-* 'tl' request, and 'mc':                Miscellaneous.       (line 102)
-* 'tm' request, and copy-in mode:        Debugging.           (line  30)
-* 'tm1' request, and copy-in mode:       Debugging.           (line  30)
-* tmac, directory:                       Macro Directories.   (line  11)
-* tmac, path:                            Macro Directories.   (line  11)
-* 'tmc' request, and copy-in mode:       Debugging.           (line  30)
-* TMPDIR, environment variable:          Environment.         (line  44)
-* token, input:                          Gtroff Internals.    (line   6)
-* top margin:                            Page Layout.         (line  20)
-* top-level diversion:                   Diversions.          (line  12)
-* top-level diversion, and 'bp':         Page Control.        (line  24)
-* top-level diversion, and '\!':         Diversions.          (line 171)
-* top-level diversion, and '\?':         Diversions.          (line 176)
-* 'tr' request, and glyph definitions:   Using Symbols.       (line 326)
-* 'tr' request, and soft hyphen character: Manipulating Hyphenation.
-                                                              (line 243)
-* 'tr' request, incompatibilities with AT&T 'troff': Implementation Differences.
-                                                              (line  86)
-* track kerning:                         Ligatures and Kerning.
-                                                              (line  53)
-* track kerning, activating ('tkf'):     Ligatures and Kerning.
-                                                              (line  60)
-* trailing quotes:                       Strings.             (line  57)
-* trailing spaces:                       Filling and Adjusting.
-                                                              (line  10)
-* translations of characters:            Character Translations.
-                                                              (line   6)
-* transparent characters:                Sentences.           (line  18)
-* transparent characters <1>:            Using Symbols.       (line 275)
-* transparent output ('cf', 'trf'):      I/O.                 (line  50)
-* transparent output ('\!', '\?'):       Diversions.          (line 136)
-* transparent output, incompatibilities with AT&T 'troff': Implementation Differences.
-                                                              (line 106)
-* trap, changing location ('ch'):        Page Location Traps. (line 111)
-* trap, distance, register ('.t'):       Page Location Traps. (line 102)
-* trap, diversion, setting ('dt'):       Diversion Traps.     (line   7)
-* trap, end-of-input, setting ('em'):    End-of-input Traps.  (line   7)
-* trap, input line, setting ('it'):      Input Line Traps.    (line   8)
-* trap, planting:                        Traps.               (line  11)
-* trap, springing:                       Traps.               (line  11)
-* traps:                                 Traps.               (line   6)
-* traps, and discarded space:            Manipulating Spacing.
-                                                              (line  53)
-* traps, and diversions:                 Page Location Traps. (line 166)
-* traps, blank line:                     Blank Line Traps.    (line   6)
-* traps, diversion:                      Diversion Traps.     (line   6)
-* traps, dumping ('ptr'):                Debugging.           (line  81)
-* traps, end-of-input:                   End-of-input Traps.  (line   6)
-* traps, input line:                     Input Line Traps.    (line   6)
-* traps, input line, and interrupted lines ('itc'): Input Line Traps.
-                                                              (line  24)
-* traps, leading spaces:                 Leading Spaces Traps.
-                                                              (line   6)
-* traps, page location:                  Page Location Traps. (line   6)
-* traps, sprung by 'bp' request ('.pe'): Page Location Traps. (line 143)
-* 'trf' request, and copy-in mode:       I/O.                 (line  50)
-* 'trf' request, and invalid characters: I/O.                 (line  73)
-* 'trf' request, causing implicit linebreak: Manipulating Filling and Adjusting.
-                                                              (line   6)
-* 'trin' request, and 'asciify':         Diversions.          (line 195)
-* troff mode:                            Troff and Nroff Mode.
-                                                              (line   6)
-* troff output:                          gtroff Output.       (line  16)
-* truncated vertical space register ('.trunc'): Page Location Traps.
-                                                              (line 131)
-* TTY, conditional output for:           Operators in Conditionals.
-                                                              (line  14)
-* tutorial for macro users:              Tutorial for Macro Users.
-                                                              (line   6)
-* type size:                             Sizes.               (line   6)
-* type size registers ('.s', '.ps'):     Changing Type Sizes. (line  20)
-* type sizes, changing ('ps', '\s'):     Changing Type Sizes. (line  11)
-* type sizes, fractional:                Fractional Type Sizes.
-                                                              (line   6)
-* type sizes, fractional <1>:            Implementation Differences.
-                                                              (line  76)
-* 'u' unit:                              Measurements.        (line   6)
-* 'uf' request, and font styles:         Font Families.       (line  59)
-* 'ul' glyph, and 'cflags':              Using Symbols.       (line 265)
-* 'ul' request, and font translations:   Changing Fonts.      (line  55)
-* Ultrix-specific 'man' macros:          Optional man extensions.
-                                                              (line  30)
-* unary operators:                       Expressions.         (line  21)
-* unbreakable space:                     Page Motions.        (line 114)
-* undefined identifiers:                 Identifiers.         (line  79)
-* undefined request:                     Comments.            (line  25)
-* underline font ('uf'):                 Artificial Fonts.    (line  90)
-* underlining ('ul'):                    Artificial Fonts.    (line  64)
-* underlining, continuous ('cu'):        Artificial Fonts.    (line  86)
-* underscore glyph ('\[ru]'):            Drawing Requests.    (line  28)
-* unformatting diversions ('asciify'):   Diversions.          (line 195)
-* unformatting horizontal space:         Strings.             (line 157)
-* Unicode:                               Identifiers.         (line  15)
-* Unicode <1>:                           Using Symbols.       (line 201)
-* unit, 'c':                             Measurements.        (line  27)
-* unit, 'f':                             Measurements.        (line  43)
-* unit, 'f', and colors:                 Colors.              (line  36)
-* unit, 'i':                             Measurements.        (line  22)
-* unit, 'm':                             Measurements.        (line  50)
-* unit, 'M':                             Measurements.        (line  62)
-* unit, 'n':                             Measurements.        (line  55)
-* unit, 'p':                             Measurements.        (line  30)
-* unit, 'P':                             Measurements.        (line  34)
-* unit, 's':                             Measurements.        (line  40)
-* unit, 's' <1>:                         Fractional Type Sizes.
-                                                              (line   6)
-* unit, 'u':                             Measurements.        (line   6)
-* unit, 'v':                             Measurements.        (line  58)
-* unit, 'z':                             Measurements.        (line  40)
-* unit, 'z' <1>:                         Fractional Type Sizes.
-                                                              (line   6)
-* units of measurement:                  Measurements.        (line   6)
-* units, default:                        Default Units.       (line   6)
-* unnamed fill colors ('\D'F...''):      Drawing Requests.    (line 216)
-* unnamed glyphs:                        Using Symbols.       (line 212)
-* unnamed glyphs, accessing with '\N':   Font File Format.    (line  51)
-* unsafe mode:                           Groff Options.       (line 292)
-* unsafe mode <1>:                       Macro Directories.   (line  21)
-* unsafe mode <2>:                       Built-in Registers.  (line  23)
-* unsafe mode <3>:                       I/O.                 (line  32)
-* unsafe mode <4>:                       I/O.                 (line 147)
-* unsafe mode <5>:                       I/O.                 (line 168)
-* unsafe mode <6>:                       I/O.                 (line 206)
-* user's macro tutorial:                 Tutorial for Macro Users.
-                                                              (line   6)
-* user's tutorial for macros:            Tutorial for Macro Users.
-                                                              (line   6)
-* using symbols:                         Using Symbols.       (line   6)
-* utf-8, output encoding:                Groff Options.       (line 259)
-* 'v' unit:                              Measurements.        (line  58)
-* valid numeric expression:              Expressions.         (line  83)
-* value, incrementing without changing the register: Auto-increment.
-                                                              (line  52)
-* variables in environment:              Environment.         (line   6)
-* version number, major, register ('.x'): Built-in Registers. (line  88)
-* version number, minor, register ('.y'): Built-in Registers. (line  92)
-* vertical line drawing ('\L'):          Drawing Requests.    (line  50)
-* vertical line spacing register ('.v'): Changing Type Sizes. (line  88)
-* vertical line spacing, changing ('vs'): Changing Type Sizes.
-                                                              (line  88)
-* vertical line spacing, effective value: Changing Type Sizes.
-                                                              (line 106)
-* vertical motion ('\v'):                Page Motions.        (line  78)
-* vertical page location, marking ('mk'): Page Motions.       (line  11)
-* vertical page location, returning to marked ('rt'): Page Motions.
-                                                              (line  11)
-* vertical position in diversion register ('.d'): Diversions. (line  69)
-* vertical position trap enable register ('.vpt'): Page Location Traps.
-                                                              (line  18)
-* vertical position traps, enabling ('vpt'): Page Location Traps.
-                                                              (line  18)
-* vertical position, current ('nl'):     Page Control.        (line  67)
-* vertical resolution:                   DESC File Format.    (line 135)
-* vertical resolution register ('.V'):   Built-in Registers.  (line  28)
-* vertical space unit ('v'):             Measurements.        (line  58)
-* vertical spacing:                      Sizes.               (line   6)
-* warnings:                              Debugging.           (line 149)
-* warnings <1>:                          Warnings.            (line   6)
-* warnings, level ('warn'):              Debugging.           (line 155)
-* what is 'groff'?:                      What Is groff?.      (line   6)
-* while:                                 while.               (line   6)
-* 'while' request, and font translations: Changing Fonts.     (line  55)
-* 'while' request, and the '!' operator: Expressions.         (line  21)
-* 'while' request, confusing with 'br':  while.               (line  68)
-* 'while' request, operators to use with: Operators in Conditionals.
-                                                              (line   6)
-* whitespace characters:                 Identifiers.         (line  10)
-* width escape ('\w'):                   Page Motions.        (line 152)
-* width, of last glyph ('.w'):           Environments.        (line  95)
-* word space size register ('.ss'):      Manipulating Filling and Adjusting.
-                                                              (line 151)
-* 'write' request, and copy-in mode:     I/O.                 (line 212)
-* 'writec' request, and copy-in mode:    I/O.                 (line 212)
-* 'writem' request, and copy-in mode:    I/O.                 (line 225)
-* writing macros:                        Writing Macros.      (line   6)
-* writing to file ('write', 'writec'):   I/O.                 (line 212)
-* year, current, register ('year', 'yr'): Built-in Registers. (line  54)
-* 'z' unit:                              Measurements.        (line  40)
-* 'z' unit <1>:                          Fractional Type Sizes.
-                                                              (line   6)
-* zero width space character ('\&'):     Requests.            (line  47)
-* zero width space character ('\&') <1>: Ligatures and Kerning.
-                                                              (line  47)
-* zero width space character ('\&') <2>: Drawing Requests.    (line  32)
-* zero-width printing ('\z', '\Z'):      Page Motions.        (line 220)
-* zero-width printing ('\z', '\Z') <1>:  Page Motions.        (line 224)
-* zoom factor of a font ('fzoom'):       Changing Fonts.      (line  71)
-
diff -Nuar groff-1.22.3.old/doc/groff.texi groff-1.22.3/doc/groff.texi
--- groff-1.22.3.old/doc/groff.texi	1970-01-01 02:00:00.000000000 +0200
+++ groff-1.22.3/doc/groff.texi	2015-04-23 20:57:03.000000000 +0300
@@ -0,0 +1,17157 @@
+\input texinfo
+
+@c
+@c Please convert this manual with `texi2dvi -e groff.texi' due to
+@c problems in texinfo regarding expansion of user-defined macros.
+@c
+@c You need texinfo 4.8 or newer to format this document!
+@c
+
+@c %**start of header (This is for running Texinfo on a region.)
+@setfilename groff.info
+@settitle The GNU Troff Manual
+@setchapternewpage odd
+@footnotestyle separate
+@c %**end of header (This is for running Texinfo on a region.)
+
+@documentlanguage en
+@documentencoding ISO-8859-1
+
+
+@smallbook
+
+@finalout
+
+
+@copying
+This manual documents GNU @code{troff} version 1.22.3.
+
+Copyright @copyright{} 1994-2014 Free Software Foundation, Inc.
+
+@quotation
+Permission is granted to copy, distribute and/or modify this document
+under the terms of the GNU Free Documentation License, Version 1.3 or
+any later version published by the Free Software Foundation; with no
+Invariant Sections, with the Front-Cover texts being ``A GNU Manual,''
+and with the Back-Cover Texts as in (a) below.  A copy of the license is
+included in the section entitled ``GNU Free Documentation License.''
+
+(a) The FSF's Back-Cover Text is: ``You have the freedom to copy and
+modify this GNU manual.  Buying copies from the FSF supports it in
+developing GNU and promoting software freedom.''
+@end quotation
+@end copying
+
+
+@c We use the following indices:
+@c
+@c   cindex: concepts
+@c   rqindex: requests
+@c   esindex: escapes
+@c   vindex: registers
+@c   kindex: commands in font files
+@c   pindex: programs and files
+@c   tindex: environment variables
+@c   maindex: macros
+@c   stindex: strings
+@c   opindex: operators
+@c
+@c tindex and cindex are merged.
+
+@defcodeindex rq
+@defcodeindex es
+@defcodeindex ma
+@defcodeindex st
+@defcodeindex op
+@syncodeindex tp cp
+
+
+@c To avoid uppercasing in @deffn while converting to info, we define
+@c our special @Var{}.
+
+@macro Var{arg}
+@r{@slanted{\arg\}}
+@end macro
+
+
+@c To assure correct HTML translation, some ugly hacks are necessary.
+@c While processing a @def... request, the HTML translator looks at the
+@c next line to decide whether to start indentation, and if the line
+@c starts with @def... (e.g. @deffnx), indentation is started.  We must
+@c therefore ensure that a @def... is seen, during macro expansion.
+@c
+@c The following macros have to be used:
+@c
+@c One item:
+@c
+@c   @Def...
+@c
+@c Two items:
+@c
+@c   @Def...List
+@c   @Def...ListEnd
+@c
+@c More than two:
+@c
+@c   @Def...List
+@c   @Def...Item
+@c   @Def...Item
+@c   ...
+@c   @Def...ListEnd
+@c
+@c The definition block must end with
+@c
+@c   @endDef...
+@c
+@c The above is valid for texinfo 4.0f and above.
+@c
+@c By default, only the first item generates an index entry.  To
+@c override this, use a variant with a trailing `x' (like
+@c `@DefmacItemx').
+
+
+@c a dummy macro to assure the `@def...'
+
+@macro defdummy
+@c
+@end macro
+
+
+@c definition of requests
+
+@macro Defreq{name, arg}
+@deffn Request @t{.\name\} \arg\
+@rqindex \name\
+@c
+@end macro
+
+@macro DefreqList{name, arg}
+@deffn Request @t{.\name\} \arg\
+@defdummy
+@rqindex \name\
+@c
+@end macro
+
+@macro DefreqItem{name, arg}
+@deffnx Request @t{.\name\} \arg\
+@defdummy
+@c
+@end macro
+
+@macro DefreqItemx{name, arg}
+@deffnx Request @t{.\name\} \arg\
+@defdummy
+@rqindex \name\
+@c
+@end macro
+
+@macro DefreqListEnd{name, arg}
+@deffnx Request @t{.\name\} \arg\
+@c
+@end macro
+
+@macro DefreqListEndx{name, arg}
+@deffnx Request @t{.\name\} \arg\
+@rqindex \name\
+@c
+@end macro
+
+@macro endDefreq
+@end deffn
+@end macro
+
+
+@c definition of escapes
+
+@macro Defesc{name, delimI, arg, delimII}
+@deffn Escape @t{\name\\delimI\}@Var{\arg\}@t{\delimII\}
+@esindex \name\
+@c
+@end macro
+
+@macro DefescList{name, delimI, arg, delimII}
+@deffn Escape @t{\name\\delimI\}@Var{\arg\}@t{\delimII\}
+@defdummy
+@esindex \name\
+@c
+@end macro
+
+@macro DefescItem{name, delimI, arg, delimII}
+@deffnx Escape @t{\name\\delimI\}@Var{\arg\}@t{\delimII\}
+@defdummy
+@c
+@end macro
+
+@macro DefescItemx{name, delimI, arg, delimII}
+@deffnx Escape @t{\name\\delimI\}@Var{\arg\}@t{\delimII\}
+@defdummy
+@esindex \name\
+@c
+@end macro
+
+@macro DefescListEnd{name, delimI, arg, delimII}
+@deffnx Escape @t{\name\\delimI\}@Var{\arg\}@t{\delimII\}
+@c
+@end macro
+
+@macro DefescListEndx{name, delimI, arg, delimII}
+@deffnx Escape @t{\name\\delimI\}@Var{\arg\}@t{\delimII\}
+@esindex \name\
+@c
+@end macro
+
+@macro endDefesc
+@end deffn
+@end macro
+
+
+@c definition of registers
+
+@macro Defreg{name}
+@deffn Register @t{\\n[\name\]}
+@vindex \name\
+@c
+@end macro
+
+@macro DefregList{name}
+@deffn Register @t{\\n[\name\]}
+@defdummy
+@vindex \name\
+@c
+@end macro
+
+@macro DefregItem{name}
+@deffnx Register @t{\\n[\name\]}
+@defdummy
+@c
+@end macro
+
+@macro DefregItemx{name}
+@deffnx Register @t{\\n[\name\]}
+@defdummy
+@vindex \name\
+@c
+@end macro
+
+@macro DefregListEnd{name}
+@deffnx Register @t{\\n[\name\]}
+@c
+@end macro
+
+@macro DefregListEndx{name}
+@deffnx Register @t{\\n[\name\]}
+@vindex \name\
+@c
+@end macro
+
+@macro endDefreg
+@end deffn
+@end macro
+
+
+@c definition of registers specific to macro packages, preprocessors, etc.
+
+@macro Defmpreg{name, package}
+@deffn Register @t{\\n[\name\]}
+@vindex \name\ @r{[}\package\@r{]}
+@c
+@end macro
+
+@macro DefmpregList{name, package}
+@deffn Register @t{\\n[\name\]}
+@defdummy
+@vindex \name\ @r{[}\package\@r{]}
+@c
+@end macro
+
+@macro DefmpregItem{name, package}
+@deffnx Register @t{\\n[\name\]}
+@defdummy
+@c
+@end macro
+
+@macro DefmpregItemx{name, package}
+@deffnx Register @t{\\n[\name\]}
+@defdummy
+@vindex \name\ @r{[}\package\@r{]}
+@c
+@end macro
+
+@macro DefmpregListEnd{name, package}
+@deffnx Register @t{\\n[\name\]}
+@c
+@end macro
+
+@macro DefmpregListEndx{name, package}
+@deffnx Register @t{\\n[\name\]}
+@vindex \name\ @r{[}\package\@r{]}
+@c
+@end macro
+
+@macro endDefmpreg
+@end deffn
+@end macro
+
+
+@c definition of macros
+
+@macro Defmac{name, arg, package}
+@defmac @t{.\name\} \arg\
+@maindex \name\ @r{[}\package\@r{]}
+@c
+@end macro
+
+@macro DefmacList{name, arg, package}
+@defmac @t{.\name\} \arg\
+@defdummy
+@maindex \name\ @r{[}\package\@r{]}
+@c
+@end macro
+
+@macro DefmacItem{name, arg, package}
+@defmacx @t{.\name\} \arg\
+@defdummy
+@c
+@end macro
+
+@macro DefmacItemx{name, arg, package}
+@defmacx @t{.\name\} \arg\
+@defdummy
+@maindex \name\ @r{[}\package\@r{]}
+@c
+@end macro
+
+@macro DefmacListEnd{name, arg, package}
+@defmacx @t{.\name\} \arg\
+@c
+@end macro
+
+@macro DefmacListEndx{name, arg, package}
+@defmacx @t{.\name\} \arg\
+@maindex \name\ @r{[}\package\@r{]}
+@c
+@end macro
+
+@macro endDefmac
+@end defmac
+@end macro
+
+
+@c definition of strings
+
+@macro Defstr{name, package}
+@deffn String @t{\\*[\name\]}
+@stindex \name\ @r{[}\package\@r{]}
+@c
+@end macro
+
+@macro DefstrList{name, package}
+@deffn String @t{\\*[\name\]}
+@defdummy
+@stindex \name\ @r{[}\package\@r{]}
+@c
+@end macro
+
+@macro DefstrItem{name, package}
+@deffnx String @t{\\*[\name\]}
+@defdummy
+@c
+@end macro
+
+@macro DefstrItemx{name, package}
+@deffnx String @t{\\*[\name\]}
+@defdummy
+@stindex \name\ @r{[}\package\@r{]}
+@c
+@end macro
+
+@macro DefstrListEnd{name, package}
+@deffnx String @t{\\*[\name\]}
+@c
+@end macro
+
+@macro DefstrListEndx{name, package}
+@deffnx String @t{\\*[\name\]}
+@stindex \name\ @r{[}\package\@r{]}
+@c
+@end macro
+
+@macro endDefstr
+@end deffn
+@end macro
+
+
+@c our example macros
+
+@macro Example
+@example
+@group
+@end macro
+
+@macro endExample
+@end group
+@end example
+@end macro
+
+@macro CartoucheExample
+@cartouche
+@example
+@end macro
+
+@macro endCartoucheExample
+@end example
+@end cartouche
+@end macro
+
+
+@c <text>
+
+@tex
+\gdef\Langlemacro{\angleleft}
+\gdef\Ranglemacro{\angleright}
+@end tex
+
+@iftex
+@set Langlemacro @Langlemacro
+@set Ranglemacro @Ranglemacro
+@end iftex
+
+@ifnottex
+@set Langlemacro <
+@set Ranglemacro >
+@end ifnottex
+
+@macro angles{text}
+@value{Langlemacro}@r{\text\}@value{Ranglemacro}
+@end macro
+
+
+@c a <= sign
+@c
+@c Since expansion of macros has changed between texinfo 4.x and 5.x,
+@c we can't define a macro but have to use @value directly.
+
+@tex
+\gdef\LE{\le}
+@end tex
+
+@iftex
+@set LE @LE
+@end iftex
+
+@ifnottex
+@set LE <=
+@end ifnottex
+
+
+@c Special care is required with parentheses, brackets, and braces:
+@c
+@c . Real parentheses in @deffn produce an error while compiling with
+@c   TeX.
+@c . Real brackets use the wrong font in @deffn, overriding @t{}.
+@c
+@c . @{ and @} fail with info if used in a macro.
+@c
+@c Since macros aren't expanded in @deffn during -E, the following
+@c definitions are for non-TeX only.
+@c
+@c This is true for texinfo 4.0 and above.
+
+@iftex
+@set Lparenmacro @lparen
+@set Rparenmacro @rparen
+@set Lbrackmacro @lbrack
+@set Rbrackmacro @rbrack
+@set Lbracemacro @{
+@set Rbracemacro @}
+@end iftex
+
+@ifnottex
+@set Lparenmacro (
+@set Rparenmacro )
+@set Lbrackmacro [
+@set Rbrackmacro ]
+@set Lbracemacro @{
+@set Rbracemacro @}
+@end ifnottex
+
+@macro Lparen{}
+@value{Lparenmacro}
+@end macro
+@macro Rparen{}
+@value{Rparenmacro}
+@end macro
+@macro Lbrack{}
+@value{Lbrackmacro}
+@end macro
+@macro Rbrack{}
+@value{Rbrackmacro}
+@end macro
+@macro Lbrace{}
+@value{Lbracemacro}
+@end macro
+@macro Rbrace{}
+@value{Rbracemacro}
+@end macro
+
+
+@c This suppresses the word `Appendix' in the appendix headers.
+
+@tex
+\gdef\gobblefirst#1#2{#2}
+\gdef\putwordAppendix{\gobblefirst}
+@end tex
+
+
+@c We map some latin-1 characters to corresponding texinfo macros.
+@c Newer versions of texinfo.tex have similar code included already.
+
+@tex
+\global\catcode`^^e4\active % �
+\gdef^^e4{\"a}
+\global\catcode`^^c4\active % �
+\gdef^^c4{\"A}
+\global\catcode`^^e9\active % �
+\gdef^^e9{\'e}
+\global\catcode`^^c9\active % �
+\gdef^^c9{\'E}
+\global\catcode`^^f6\active % �
+\gdef^^f6{\"o}
+\global\catcode`^^d6\active % �
+\gdef^^d6{\"O}
+\global\catcode`^^fc\active % �
+\gdef^^fc{\"u}
+\global\catcode`^^dc\active % �
+\gdef^^dc{\"U}
+\global\catcode`^^e6\active % �
+\gdef^^e6{\ae}
+\global\catcode`^^c6\active % �
+\gdef^^c6{\AE}
+\global\catcode`^^df\active % �
+\gdef^^df{\ss}
+@end tex
+
+
+@c Note: We say `Roman numerals' but `roman font'.
+
+
+@dircategory Typesetting
+@direntry
+* Groff: (groff).               The GNU troff document formatting system.
+@end direntry
+
+
+@titlepage
+@title groff
+@subtitle The GNU implementation of @code{troff}
+@subtitle Edition 1.22.3
+@subtitle Autumn 2014
+@author by Trent A.@tie{}Fisher
+@author and Werner Lemberg (@email{bug-groff@@gnu.org})
+
+@page
+@vskip 0pt plus 1filll
+@insertcopying
+@end titlepage
+
+@contents
+
+@ifnottex
+@node Top, Introduction, (dir), (dir)
+@top GNU troff
+@end ifnottex
+
+@menu
+* Introduction::
+* Invoking groff::
+* Tutorial for Macro Users::
+* Macro Packages::
+* gtroff Reference::
+* Preprocessors::
+* Output Devices::
+* File formats::
+* Installation::
+* Copying This Manual::
+* Request Index::
+* Escape Index::
+* Operator Index::
+* Register Index::
+* Macro Index::
+* String Index::
+* Glyph Name Index::
+* Font File Keyword Index::
+* Program and File Index::
+* Concept Index::
+@end menu
+
+@ifnottex
+@insertcopying
+@end ifnottex
+
+
+
+@c =====================================================================
+@c =====================================================================
+
+@node Introduction, Invoking groff, Top, Top
+@chapter Introduction
+@cindex introduction
+
+GNU @code{troff} (or @code{groff}) is a system for typesetting
+documents.  @code{troff} is very flexible and has been used extensively
+for some thirty years.  It is well entrenched in the @acronym{UNIX}
+community.
+
+@menu
+* What Is groff?::
+* History::
+* groff Capabilities::
+* Macro Package Intro::
+* Preprocessor Intro::
+* Output device intro::
+* Credits::
+@end menu
+
+
+@c =====================================================================
+
+@node What Is groff?, History, Introduction, Introduction
+@section What Is @code{groff}?
+@cindex what is @code{groff}?
+@cindex @code{groff} -- what is it?
+
+@code{groff} belongs to an older generation of document preparation
+systems, which operate more like compilers than the more recent
+interactive @acronym{WYSIWYG}@footnote{What You See Is What You Get}
+systems.  @code{groff} and its contemporary counterpart, @TeX{}, both
+work using a @dfn{batch} paradigm: The input (or @dfn{source}) files are
+normal text files with embedded formatting commands.  These files can
+then be processed by @code{groff} to produce a typeset document on a
+variety of devices.
+
+@code{groff} should not be confused with a @dfn{word processor}, an
+integrated system of editor and text formatter.  Also, many word
+processors follow the @acronym{WYSIWYG} paradigm discussed earlier.
+
+Although @acronym{WYSIWYG} systems may be easier to use, they have a
+number of disadvantages compared to @code{troff}:
+
+@itemize @bullet
+@item
+They must be used on a graphics display to work on a document.
+
+@item
+Most of the @acronym{WYSIWYG} systems are either non-free or are not
+very portable.
+
+@item
+@code{troff} is firmly entrenched in all @acronym{UNIX} systems.
+
+@item
+It is difficult to have a wide range of capabilities within the confines
+of a GUI/window system.
+
+@item
+It is more difficult to make global changes to a document.
+@end itemize
+
+@quotation
+``GUIs normally make it simple to accomplish simple actions and
+impossible to accomplish complex actions.''  --Doug Gwyn (22/Jun/91 in
+@code{comp.unix.wizards})
+@end quotation
+
+
+@c =====================================================================
+
+@node History, groff Capabilities, What Is groff?, Introduction
+@section History
+@cindex history
+
+@cindex @code{RUNOFF}, the program
+@cindex @code{rf}, the program
+@code{troff} can trace its origins back to a formatting program called
+@code{RUNOFF}, written by Jerry Saltzer, which ran on the @acronym{CTSS}
+(@emph{Compatible Time Sharing System}, a project of MIT, the
+Massachusetts Institute of Technology) in the
+mid-sixties.@footnote{Jerome H.@: Saltzer, a grad student then, later a
+Professor of Electrical Engineering, now retired.  Saltzer's PhD thesis
+was the first application for @code{RUNOFF} and is available from the
+MIT Libraries.}  The name came from the use of the phrase ``run off a
+document'', meaning to print it out.
+@c
+@c Tom Van Vleck <thvv@multicians.org> writes about the following:
+@c
+@c I am not sure about this.. I think the BCPL runoff was the port to
+@c the 635 architecture, and that the order of events is
+@c 1. CTSS runoff
+@c 2. BCPL runoff on Multics
+@c 3. BCPL runoff on 635
+@c 4. rf on PDP-7
+@c
+Bob Morris ported it to the 635 architecture and called the program
+@code{roff} (an abbreviation of @code{runoff}).  It was rewritten as
+@code{rf} for the @w{PDP-7} (before having @acronym{UNIX}), and at the
+same time (1969), Doug McIllroy rewrote an extended and simplified
+version of @code{roff} in the @acronym{BCPL} programming language.
+
+@cindex @code{roff}, the program
+In 1971, the UNIX developers wanted to get a @w{PDP-11}, and to justify
+the cost, proposed the development of a document formatting system for
+the @acronym{AT&T} patents division.  This first formatting program was
+a reimplementation of McIllroy's @code{roff}, written by J.@tie{}F.@:
+Ossanna.
+
+@cindex @code{nroff}, the program
+When they needed a more flexible language, a new version of @code{roff}
+called @code{nroff} (``Newer @code{roff}'') was written.  It had a much
+more complicated syntax, but provided the basis for all future versions.
+When they got a Graphic Systems CAT Phototypesetter, Ossanna wrote a
+version of @code{nroff} that would drive it.  It was dubbed
+@code{troff}, for ``typesetter @code{roff}'', although many people have
+speculated that it actually means ``Times @code{roff}'' because of the
+use of the Times font family in @code{troff} by default.  As such, the
+name @code{troff} is pronounced `@w{t-roff}' rather than `trough'.
+
+With @code{troff} came @code{nroff} (they were actually the same program
+except for some @samp{#ifdef}s), which was for producing output for line
+printers and character terminals.  It understood everything @code{troff}
+did, and ignored the commands that were not applicable (e.g.@: font
+changes).
+
+Since there are several things that cannot be done easily in
+@code{troff}, work on several preprocessors began.  These programs would
+transform certain parts of a document into @code{troff}, which made a
+very natural use of pipes in @acronym{UNIX}.
+
+The @code{eqn} preprocessor allowed mathematical formul� to be specified
+in a much simpler and more intuitive manner.  @code{tbl} is a
+preprocessor for formatting tables.  The @code{refer} preprocessor (and
+the similar program, @code{bib}) processes citations in a document
+according to a bibliographic database.
+
+Unfortunately, Ossanna's @code{troff} was written in @w{PDP-11} assembly
+language and produced output specifically for the CAT phototypesetter.
+He rewrote it in C, although it was now 7000@tie{}lines of uncommented
+code and still dependent on the CAT@.  As the CAT became less common, and
+was no longer supported by the manufacturer, the need to make it support
+other devices became a priority.  However, before this could be done,
+Ossanna died by a severe heart attack in a hospital while recovering
+from a previous one.
+
+@pindex ditroff
+@cindex @code{ditroff}, the program
+So, Brian Kernighan took on the task of rewriting @code{troff}.  The
+newly rewritten version produced device independent code that was very
+easy for postprocessors to read and translate to the appropriate printer
+codes.  Also, this new version of @code{troff} (called @code{ditroff}
+for ``device independent @code{troff}'') had several extensions, which
+included drawing functions.
+
+Due to the additional abilities of the new version of @code{troff},
+several new preprocessors appeared.  The @code{pic} preprocessor
+provides a wide range of drawing functions.  Likewise the @code{ideal}
+preprocessor did the same, although via a much different paradigm.  The
+@code{grap} preprocessor took specifications for graphs, but, unlike
+other preprocessors, produced @code{pic} code.
+
+James Clark began work on a GNU implementation of @code{ditroff} in
+early@tie{}1989.  The first version, @code{groff}@tie{}0.3.1, was
+released June@tie{}1990.  @code{groff} included:
+
+@itemize @bullet
+@item
+A replacement for @code{ditroff} with many extensions.
+
+@item
+The @code{soelim}, @code{pic}, @code{tbl}, and @code{eqn} preprocessors.
+
+@item
+Postprocessors for character devices, @sc{PostScript}, @TeX{} DVI, and
+X@tie{}Windows.  GNU @code{troff} also eliminated the need for a
+separate @code{nroff} program with a postprocessor that would produce
+@acronym{ASCII} output.
+
+@item
+A version of the @file{me} macros and an implementation of the
+@file{man} macros.
+@end itemize
+
+Also, a front-end was included that could construct the, sometimes
+painfully long, pipelines required for all the post- and preprocessors.
+
+Development of GNU @code{troff} progressed rapidly, and saw the
+additions of a replacement for @code{refer}, an implementation of the
+@file{ms} and @file{mm} macros, and a program to deduce how to format a
+document (@code{grog}).
+
+It was declared a stable (i.e.@: non-beta) package with the release of
+version@tie{}1.04 around November@tie{}1991.
+
+Beginning in@tie{}1999, @code{groff} has new maintainers (the package
+was an orphan for a few years).  As a result, new features and programs
+like @code{grn}, a preprocessor for gremlin images, and an output device
+to produce @acronym{HTML} and @acronym{XHTML} have been added.
+
+
+@c =====================================================================
+
+@node groff Capabilities, Macro Package Intro, History, Introduction
+@section @code{groff} Capabilities
+@cindex @code{groff} capabilities
+@cindex capabilities of @code{groff}
+
+So what exactly is @code{groff} capable of doing?  @code{groff} provides
+a wide range of low-level text formatting operations.  Using these, it
+is possible to perform a wide range of formatting tasks, such as
+footnotes, table of contents, multiple columns, etc.  Here's a list of
+the most important operations supported by @code{groff}:
+
+@itemize @bullet
+@item
+text filling, adjusting, and centering
+
+@item
+hyphenation
+
+@item
+page control
+
+@item
+font and glyph size control
+
+@item
+vertical spacing (e.g.@: double-spacing)
+
+@item
+line length and indenting
+
+@item
+macros, strings, diversions, and traps
+
+@item
+number registers
+
+@item
+tabs, leaders, and fields
+
+@item
+input and output conventions and character translation
+
+@item
+overstrike, bracket, line drawing, and zero-width functions
+
+@item
+local horizontal and vertical motions and the width function
+
+@item
+three-part titles
+
+@item
+output line numbering
+
+@item
+conditional acceptance of input
+
+@item
+environment switching
+
+@item
+insertions from the standard input
+
+@item
+input/output file switching
+
+@item
+output and error messages
+@end itemize
+
+
+@c =====================================================================
+
+@node Macro Package Intro, Preprocessor Intro, groff Capabilities, Introduction
+@section Macro Packages
+@cindex macro packages
+
+Since @code{groff} provides such low-level facilities, it can be quite
+difficult to use by itself.  However, @code{groff} provides a
+@dfn{macro} facility to specify how certain routine operations
+(e.g.@tie{}starting paragraphs, printing headers and footers, etc.)@:
+should be done.  These macros can be collected together into a
+@dfn{macro package}.  There are a number of macro packages available;
+the most common (and the ones described in this manual) are @file{man},
+@file{mdoc}, @file{me}, @file{ms}, and @file{mm}.
+
+
+@c =====================================================================
+
+@node Preprocessor Intro, Output device intro, Macro Package Intro, Introduction
+@section Preprocessors
+@cindex preprocessors
+
+Although @code{groff} provides most functions needed to format a
+document, some operations would be unwieldy (e.g.@: to draw pictures).
+Therefore, programs called @dfn{preprocessors} were written that
+understand their own language and produce the necessary @code{groff}
+operations.  These preprocessors are able to differentiate their own
+input from the rest of the document via markers.
+
+To use a preprocessor, @acronym{UNIX} pipes are used to feed the output
+from the preprocessor into @code{groff}.  Any number of preprocessors
+may be used on a given document; in this case, the preprocessors are
+linked together into one pipeline.  However, with @code{groff}, the user
+does not need to construct the pipe, but only tell @code{groff} what
+preprocessors to use.
+
+@code{groff} currently has preprocessors for producing tables
+(@code{tbl}), typesetting equations (@code{eqn}), drawing pictures
+(@code{pic} and @code{grn}), processing bibliographies
+(@code{refer}), and drawing chemical structures (@code{chem}).  An
+associated program that is useful when dealing with preprocessors is
+@code{soelim}.
+
+A free implementation of @code{grap}, a preprocessor for drawing graphs,
+can be obtained as an extra package; @code{groff} can use @code{grap}
+also.
+
+Unique to @code{groff} is the @code{preconv} preprocessor that enables
+@code{groff} to handle documents in various input encodings.
+
+There are other preprocessors in existence, but, unfortunately, no free
+implementations are available.  Among them is a preprocessor for drawing
+mathematical pictures (@code{ideal}).
+
+
+@c =====================================================================
+
+@node Output device intro, Credits, Preprocessor Intro, Introduction
+@section Output Devices
+@cindex postprocessors
+@cindex output devices
+@cindex devices for output
+
+@code{groff} actually produces device independent code that may be fed
+into a postprocessor to produce output for a particular device.
+Currently, @code{groff} has postprocessors for @sc{PostScript} devices,
+character terminals, X@tie{}Windows (for previewing), @TeX{} DVI format,
+HP LaserJet@tie{}4 and Canon LBP printers (which use @acronym{CAPSL}),
+@acronym{HTML}, @acronym{XHTML}, and PDF.
+
+
+@c =====================================================================
+
+@node Credits,  , Output device intro, Introduction
+@section Credits
+@cindex credits
+
+Large portions of this manual were taken from existing documents, most
+notably, the manual pages for the @code{groff} package by James Clark,
+and Eric Allman's papers on the @file{me} macro package.
+
+The section on the @file{man} macro package is partly based on
+Susan@tie{}G.@: Kleinmann's @file{groff_man} manual page written for the
+Debian GNU/Linux system.
+
+Larry Kollar contributed the section in the @file{ms} macro package.
+
+
+
+@c =====================================================================
+@c =====================================================================
+
+@node Invoking groff, Tutorial for Macro Users, Introduction, Top
+@chapter Invoking @code{groff}
+@cindex invoking @code{groff}
+@cindex @code{groff} invocation
+
+This section focuses on how to invoke the @code{groff} front end.  This
+front end takes care of the details of constructing the pipeline among
+the preprocessors, @code{gtroff} and the postprocessor.
+
+It has become a tradition that GNU programs get the prefix @samp{g} to
+distinguish it from its original counterparts provided by the host (see
+@ref{Environment}, for more details).  Thus, for example, @code{geqn} is
+GNU @code{eqn}.  On operating systems like GNU/Linux or the Hurd, which
+don't contain proprietary versions of @code{troff}, and on
+MS-DOS/MS-Windows, where @code{troff} and associated programs are not
+available at all, this prefix is omitted since GNU @code{troff} is the
+only used incarnation of @code{troff}.  Exception: @samp{groff} is never
+replaced by @samp{roff}.
+
+In this document, we consequently say @samp{gtroff} when talking about
+the GNU @code{troff} program.  All other implementations of @code{troff}
+are called @acronym{AT&T} @code{troff}, which is the common origin of all
+@code{troff} derivates (with more or less compatible changes).
+Similarly, we say @samp{gpic}, @samp{geqn}, etc.
+
+@menu
+* Groff Options::
+* Environment::
+* Macro Directories::
+* Font Directories::
+* Paper Size::
+* Invocation Examples::
+@end menu
+
+
+@c =====================================================================
+
+@node Groff Options, Environment, Invoking groff, Invoking groff
+@section Options
+@cindex options
+
+@pindex groff
+@pindex gtroff
+@pindex gpic
+@pindex geqn
+@pindex ggrn
+@pindex grap
+@pindex gtbl
+@pindex gchem
+@pindex grefer
+@pindex gsoelim
+@pindex preconv
+@code{groff} normally runs the @code{gtroff} program and a
+postprocessor appropriate for the selected device.  The default device
+is @samp{ps} (but it can be changed when @code{groff} is configured and
+built).  It can optionally preprocess with any of @code{gpic},
+@code{geqn}, @code{gtbl}, @code{ggrn}, @code{grap}, @code{gchem},
+@code{grefer}, @code{gsoelim}, or @code{preconv}.
+
+This section only documents options to the @code{groff} front end.  Many
+of the arguments to @code{groff} are passed on to @code{gtroff},
+therefore those are also included.  Arguments to pre- or postprocessors
+can be found in @ref{Invoking gpic}, @ref{Invoking geqn}, @ref{Invoking
+gtbl}, @ref{Invoking ggrn}, @ref{Invoking grefer}, @ref{Invoking gchem},
+@ref{Invoking gsoelim}, @ref{Invoking preconv}, @ref{Invoking grotty},
+@ref{Invoking grops}, @ref{Invoking gropdf}, @ref{Invoking grohtml},
+@ref{Invoking grodvi}, @ref{Invoking grolj4}, @ref{Invoking grolbp}, and
+@ref{Invoking gxditview}.
+
+The command line format for @code{groff} is:
+
+@Example
+groff [ -abceghijklpstvzCEGNRSUVXZ ] [ -d@var{cs} ] [ -D@var{arg} ]
+      [ -f@var{fam} ] [ -F@var{dir} ] [ -I@var{dir} ] [ -K@var{arg} ]
+      [ -L@var{arg} ] [ -m@var{name} ] [ -M@var{dir} ] [ -n@var{num} ]
+      [ -o@var{list} ] [ -P@var{arg} ] [ -r@var{cn} ] [ -T@var{dev} ]
+      [ -w@var{name} ] [ -W@var{name} ] [ @var{files}@dots{} ]
+@endExample
+
+The command line format for @code{gtroff} is as follows.
+
+@Example
+gtroff [ -abcivzCERU ] [ -d@var{cs} ] [ -f@var{fam} ] [ -F@var{dir} ]
+       [ -m@var{name} ] [ -M@var{dir} ] [ -n@var{num} ] [ -o@var{list} ]
+       [ -r@var{cn} ] [ -T@var{name} ] [ -w@var{name} ] [ -W@var{name} ]
+       [ @var{files}@dots{} ]
+@endExample
+
+@noindent
+Obviously, many of the options to @code{groff} are actually passed on to
+@code{gtroff}.
+
+Options without an argument can be grouped behind a
+single@tie{}@option{-}.  A filename of@tie{}@file{-} denotes the
+standard input.  It is possible to have whitespace between an option and
+its parameter.
+
+The @code{grog} command can be used to guess the correct @code{groff}
+command to format a file.
+
+Here's the description of the command-line options:
+
+@cindex command-line options
+@table @samp
+@item -a
+@cindex @acronym{ASCII} approximation output register (@code{.A})
+Generate an @acronym{ASCII} approximation of the typeset output.  The
+read-only register @code{.A} is then set to@tie{}1.  @xref{Built-in
+Registers}.  A typical example is
+
+@Example
+groff -a -man -Tdvi troff.man | less
+@endExample
+
+@noindent
+which shows how lines are broken for the DVI device.  Note that this
+option is rather useless today since graphic output devices are
+available virtually everywhere.
+
+@item -b
+Print a backtrace with each warning or error message.  This backtrace
+should help track down the cause of the error.  The line numbers given
+in the backtrace may not always be correct: @code{gtroff} can get
+confused by @code{as} or @code{am} requests while counting line numbers.
+
+@item -c
+Suppress color output.
+
+@item -C
+Enable compatibility mode.  @xref{Implementation Differences}, for the
+list of incompatibilities between @code{groff} and @acronym{AT&T}
+@code{troff}.
+
+@item -d@var{c}@var{s}
+@itemx -d@var{name}=@var{s}
+Define @var{c} or @var{name} to be a string@tie{}@var{s}.
+@var{c}@tie{}must be a one-letter name; @var{name} can be of arbitrary
+length.  All string assignments happen before loading any macro file
+(including the start-up file).
+
+@item -D@var{arg}
+Set default input encoding used by @code{preconv} to @var{arg}.  Implies
+@option{-k}.
+
+@item -e
+Preprocess with @code{geqn}.
+
+@item -E
+Inhibit all error messages.
+
+@item -f@var{fam}
+Use @var{fam} as the default font family.  @xref{Font Families}.
+
+@item -F@var{dir}
+Search @file{@var{dir}} for subdirectories @file{dev@var{name}}
+(@var{name} is the name of the device), for the @file{DESC} file, and
+for font files before looking in the standard directories (@pxref{Font
+Directories}).  This option is passed to all pre- and postprocessors
+using the @env{GROFF_FONT_PATH} environment variable.
+
+@item -g
+Preprocess with @code{ggrn}.
+
+@item -G
+Preprocess with @code{grap}.  Implies @option{-p}.
+
+@item -h
+Print a help message.
+
+@item -i
+Read the standard input after all the named input files have been
+processed.
+
+@item -I@var{dir}
+This option may be used to specify a directory to search for files.
+It is passed to the following programs:
+
+@itemize
+@item
+@code{gsoelim} (see @ref{gsoelim} for more details);
+it also implies @code{groff}'s @option{-s} option.
+
+@item
+@code{gtroff}; it is used to search files named in the @code{psbb} and
+@code{so} requests.
+
+@item
+@code{grops}; it is used to search files named in the
+@w{@code{\X'ps: import}} and @w{@code{\X'ps: file}} escapes.
+@end itemize
+
+The current directory is always searched first.  This option may be
+specified more than once; the directories are searched in the order
+specified.  No directory search is performed for files specified using
+an absolute path.
+
+@item -j
+Preprocess with @code{gchem}.  Implies @option{-p}.
+
+@item -k
+Preprocess with @code{preconv}.  This is run before any other
+preprocessor.  Please refer to @code{preconv}'s manual page for its
+behaviour if no @option{-K} (or @option{-D}) option is specified.
+
+@item -K@var{arg}
+Set input encoding used by preconv to @var{arg}.  Implies @option{-k}.
+
+@item -l
+Send the output to a spooler for printing.  The command used for this is
+specified by the @code{print} command in the device description file
+(see @ref{Font Files}, for more info).  If not present, @option{-l} is
+ignored.
+
+@item -L@var{arg}
+Pass @var{arg} to the spooler.  Each argument should be passed with a
+separate @option{-L} option.  Note that @code{groff} does not prepend a
+@samp{-} to @var{arg} before passing it to the postprocessor.  If the
+@code{print} keyword in the device description file is missing,
+@option{-L} is ignored.
+
+@item -m@var{name}
+Read in the file @file{@var{name}.tmac}.  Normally @code{groff} searches
+for this in its macro directories.  If it isn't found, it tries
+@file{tmac.@var{name}} (searching in the same directories).
+
+@item -M@var{dir}
+Search directory @file{@var{dir}} for macro files before the standard
+directories (@pxref{Macro Directories}).
+
+@item -n@var{num}
+Number the first page @var{num}.
+
+@item -N
+Don't allow newlines with @code{eqn} delimiters.  This is the same as
+the @option{-N} option in @code{geqn}.
+
+@item -o@var{list}
+@cindex print current page register (@code{.P})
+Output only pages in @var{list}, which is a comma-separated list of page
+ranges; @samp{@var{n}} means print page@tie{}@var{n},
+@samp{@var{m}-@var{n}} means print every page between @var{m}
+and@tie{}@var{n}, @samp{-@var{n}} means print every page up
+to@tie{}@var{n}, @samp{@var{n}-} means print every page beginning
+with@tie{}@var{n}.  @code{gtroff} exits after printing the last page in
+the list.  All the ranges are inclusive on both ends.
+
+Within @code{gtroff}, this information can be extracted with the
+@samp{.P} register.  @xref{Built-in Registers}.
+
+If your document restarts page numbering at the beginning of each
+chapter, then @code{gtroff} prints the specified page range for each
+chapter.
+
+@item -p
+Preprocess with @code{gpic}.
+
+@item -P@var{arg}
+Pass @var{arg} to the postprocessor.  Each argument should be passed
+with a separate @option{-P} option.  Note that @code{groff} does not
+prepend @samp{-} to @var{arg} before passing it to the postprocessor.
+
+@item -r@var{c}@var{n}
+@itemx -r@var{name}=@var{n}
+Set number register@tie{}@var{c} or @var{name} to the
+value@tie{}@var{n}.  @var{c}@tie{}must be a one-letter name; @var{name}
+can be of arbitrary length.  @var{n}@tie{}can be any @code{gtroff}
+numeric expression.  All register assignments happen before loading any
+macro file (including the start-up file).
+
+@item -R
+Preprocess with @code{grefer}.  No mechanism is provided for passing
+arguments to @code{grefer} because most @code{grefer} options have
+equivalent commands that can be included in the file.  @xref{grefer},
+for more details.
+
+@pindex troffrc
+@pindex troffrc-end
+Note that @code{gtroff} also accepts a @option{-R} option, which is not
+accessible via @code{groff}.  This option prevents the loading of the
+@file{troffrc} and @file{troffrc-end} files.
+
+@item -s
+Preprocess with @code{gsoelim}.
+
+@item -S
+@cindex @code{open} request, and safer mode
+@cindex @code{opena} request, and safer mode
+@cindex @code{pso} request, and safer mode
+@cindex @code{sy} request, and safer mode
+@cindex @code{pi} request, and safer mode
+@cindex safer mode
+@cindex mode, safer
+Safer mode.  Pass the @option{-S} option to @code{gpic} and disable the
+@code{open}, @code{opena}, @code{pso}, @code{sy}, and @code{pi}
+requests.  For security reasons, this is enabled by default.
+
+@item -t
+Preprocess with @code{gtbl}.
+
+@item -T@var{dev}
+Prepare output for device @var{dev}.  The default device is @samp{ps},
+unless changed when @code{groff} was configured and built.  The
+following are the output devices currently available:
+
+@table @code
+@item ps
+For @sc{PostScript} printers and previewers.
+
+@item pdf
+For PDF viewers or printers.
+
+@item dvi
+For @TeX{} DVI format.
+
+@item X75
+For a 75@dmn{dpi} X11 previewer.
+
+@item X75-12
+For a 75@dmn{dpi} X11 previewer with a 12@dmn{pt} base font in the
+document.
+
+@item X100
+For a 100@dmn{dpi} X11 previewer.
+
+@item X100-12
+For a 100@dmn{dpi} X11 previewer with a 12@dmn{pt} base font in the
+document.
+
+@item ascii
+@cindex encoding, output, @acronym{ASCII}
+@cindex @acronym{ASCII}, output encoding
+@cindex output encoding, @acronym{ASCII}
+For typewriter-like devices using the (7-bit) @acronym{ASCII}
+character set.
+
+@item latin1
+@cindex encoding, output, @w{latin-1} (ISO @w{8859-1})
+@cindex @w{latin-1} (ISO @w{8859-1}), output encoding
+@cindex ISO @w{8859-1} (@w{latin-1}), output encoding
+@cindex output encoding, @w{latin-1} (ISO @w{8859-1})
+For typewriter-like devices that support the @w{Latin-1}
+(ISO@tie{}@w{8859-1}) character set.
+
+@item utf8
+@cindex encoding, output, @w{utf-8}
+@cindex @w{utf-8}, output encoding
+@cindex output encoding, @w{utf-8}
+For typewriter-like devices that use the Unicode (ISO@tie{}10646)
+character set with @w{UTF-8} encoding.
+
+@item cp1047
+@cindex encoding, output, @acronym{EBCDIC}
+@cindex @acronym{EBCDIC}, output encoding
+@cindex output encoding, @acronym{EBCDIC}
+@cindex encoding, output, cp1047
+@cindex cp1047, output encoding
+@cindex output encoding, cp1047
+@cindex IBM cp1047 output encoding
+For typewriter-like devices that use the @acronym{EBCDIC} encoding IBM
+cp1047.
+
+@item lj4
+For HP LaserJet4-compatible (or other PCL5-compatible) printers.
+
+@item lbp
+For Canon @acronym{CAPSL} printers (@w{LBP-4} and @w{LBP-8} series laser
+printers).
+
+@pindex pre-grohtml
+@pindex post-grohtml
+@cindex @code{grohtml}, the program
+@item html
+@itemx xhtml
+To produce @acronym{HTML} and @acronym{XHTML} output, respectively.
+Note that this driver consists of two parts, a preprocessor
+(@code{pre-grohtml}) and a postprocessor (@code{post-grohtml}).
+@end table
+
+@cindex output device name string register (@code{.T})
+@cindex output device usage number register (@code{.T})
+The predefined @code{gtroff} string register @code{.T} contains the
+current output device; the read-only number register @code{.T} is set
+to@tie{}1 if this option is used (which is always true if @code{groff}
+is used to call @code{gtroff}).  @xref{Built-in Registers}.
+
+The postprocessor to be used for a device is specified by the
+@code{postpro} command in the device description file.  (@xref{Font
+Files}, for more info.)  This can be overridden with the @option{-X}
+option.
+
+@item -U
+@cindex mode, unsafe
+@cindex unsafe mode
+Unsafe mode.  This enables the @code{open}, @code{opena}, @code{pso},
+@code{sy}, and @code{pi} requests.
+
+@item -w@var{name}
+Enable warning @var{name}.  Available warnings are described in
+@ref{Debugging}.  Multiple @option{-w} options are allowed.
+
+@item -W@var{name}
+Inhibit warning @var{name}.  Multiple @option{-W} options are allowed.
+
+@item -v
+Make programs run by @code{groff} print out their version number.
+
+@item -V
+Print the pipeline on @code{stdout} instead of executing it.  If
+specified more than once, print the pipeline on @code{stderr} and
+execute it.
+
+@item -X
+Preview with @code{gxditview} instead of using the usual postprocessor.
+This is unlikely to produce good results except with @option{-Tps}.
+
+Note that this is not the same as using @option{-TX75} or
+@option{-TX100} to view a document with @code{gxditview}: The former
+uses the metrics of the specified device, whereas the latter uses
+X-specific fonts and metrics.
+
+@item -z
+Suppress output from @code{gtroff}.  Only error messages are printed.
+
+@item -Z
+Do not postprocess the output of @code{gtroff}.  Normally @code{groff}
+automatically runs the appropriate postprocessor.
+@end table
+
+
+@c =====================================================================
+
+@node Environment, Macro Directories, Groff Options, Invoking groff
+@section Environment
+@cindex environment variables
+@cindex variables in environment
+
+There are also several environment variables (of the operating system,
+not within @code{gtroff}) that can modify the behavior of @code{groff}.
+
+@table @code
+@item GROFF_BIN_PATH
+@tindex GROFF_BIN_PATH@r{, environment variable}
+This search path, followed by @code{PATH}, is used for commands executed
+by @code{groff}.
+
+@item GROFF_COMMAND_PREFIX
+@tindex GROFF_COMMAND_PREFIX@r{, environment variable}
+@cindex command prefix
+@cindex prefix, for commands
+If this is set to@tie{}@var{X}, then @code{groff} runs
+@code{@var{X}troff} instead of @code{gtroff}.  This also applies to
+@code{tbl}, @code{pic}, @code{eqn}, @code{grn}, @code{chem},
+@code{refer}, and @code{soelim}.  It does not apply to @code{grops},
+@code{grodvi}, @code{grotty}, @code{pre-grohtml}, @code{post-grohtml},
+@code{preconv}, @code{grolj4}, @code{gropdf}, and @code{gxditview}.
+
+The default command prefix is determined during the installation
+process.  If a non-GNU troff system is found, prefix @samp{g} is used,
+none otherwise.
+
+@item GROFF_ENCODING
+@tindex GROFF_ENCODING@r{, environment variable}
+The value of this environment value is passed to the @code{preconv}
+preprocessor to select the encoding of input files.  Setting this option
+implies @code{groff}'s command line option @option{-k} (this is,
+@code{groff} actually always calls @code{preconv}).  If set without a
+value, @code{groff} calls @code{preconv} without arguments.  An explicit
+@option{-K} command line option overrides the value of
+@env{GROFF_ENCODING}.  See the manual page of @code{preconv} for details.
+
+@item GROFF_FONT_PATH
+@tindex GROFF_FONT_PATH@r{, environment variable}
+A colon-separated list of directories in which to search for the
+@code{dev}@var{name} directory (before the default directories are
+tried).  @xref{Font Directories}.
+
+@item GROFF_TMAC_PATH
+@tindex GROFF_TMAC_PATH@r{, environment variable}
+A colon-separated list of directories in which to search for macro files
+(before the default directories are tried).  @xref{Macro Directories}.
+
+@item GROFF_TMPDIR
+@tindex GROFF_TMPDIR@r{, environment variable}
+@tindex TMPDIR@r{, environment variable}
+The directory in which @code{groff} creates temporary files.  If this is
+not set and @env{TMPDIR} is set, temporary files are created in that
+directory.  Otherwise temporary files are created in a system-dependent
+default directory (on Unix and GNU/Linux systems, this is usually
+@file{/tmp}).  @code{grops}, @code{grefer}, @code{pre-grohtml}, and
+@code{post-grohtml} can create temporary files in this directory.
+
+@item GROFF_TYPESETTER
+@tindex GROFF_TYPESETTER@r{, environment variable}
+The default output device.
+@end table
+
+Note that MS-DOS and MS-Windows ports of @code{groff} use semi-colons,
+rather than colons, to separate the directories in the lists described
+above.
+
+
+@c =====================================================================
+
+@node Macro Directories, Font Directories, Environment, Invoking groff
+@section Macro Directories
+@cindex macro directories
+@cindex directories for macros
+@cindex searching macros
+@cindex macros, searching
+
+All macro file names must be named @code{@var{name}.tmac} or
+@code{tmac.@var{name}} to make the @option{-m@var{name}} command line
+option work.  The @code{mso} request doesn't have this restriction; any
+file name can be used, and @code{gtroff} won't try to append or prepend
+the @samp{tmac} string.
+
+@cindex tmac, directory
+@cindex directory, for tmac files
+@cindex tmac, path
+@cindex path, for tmac files
+@cindex searching macro files
+@cindex macro files, searching
+@cindex files, macro, searching
+Macro files are kept in the @dfn{tmac directories}, all of which
+constitute the @dfn{tmac path}.  The elements of the search path for
+macro files are (in that order):
+
+@itemize @bullet
+@item
+The directories specified with @code{gtroff}'s or @code{groff}'s
+@option{-M} command line option.
+
+@item
+@tindex GROFF_TMAC_PATH@r{, environment variable}
+The directories given in the @env{GROFF_TMAC_PATH} environment variable.
+
+@item
+@cindex safer mode
+@cindex mode, safer
+@cindex unsafe mode
+@cindex mode, unsafe
+@cindex current directory
+@cindex directory, current
+The current directory (only if in unsafe mode using the @option{-U}
+command line switch).
+
+@item
+@cindex home directory
+@cindex directory, home
+The home directory.
+
+@item
+@cindex site-specific directory
+@cindex directory, site-specific
+@cindex platform-specific directory
+@cindex directory, platform-specific
+A platform-dependent directory, a site-specific (platform-independent)
+directory, and the main tmac directory; the default locations are
+
+@Example
+/usr/local/lib/groff/site-tmac
+/usr/local/share/groff/site-tmac
+/usr/local/share/groff/1.22.3/tmac
+@endExample
+
+@noindent
+assuming that the version of @code{groff} is 1.22.3, and the
+installation prefix was @file{/usr/local}.  It is possible to fine-tune
+those directories during the installation process.
+@end itemize
+
+
+@c =====================================================================
+
+@node Font Directories, Paper Size, Macro Directories, Invoking groff
+@section Font Directories
+@cindex font directories
+@cindex directories for fonts
+@cindex searching fonts
+@cindex fonts, searching
+
+Basically, there is no restriction how font files for @code{groff} are
+named and how long font names are; however, to make the font family
+mechanism work (@pxref{Font Families}), fonts within a family should
+start with the family name, followed by the shape.  For example, the
+Times family uses @samp{T} for the family name and @samp{R}, @samp{B},
+@samp{I}, and @samp{BI} to indicate the shapes `roman', `bold',
+`italic', and `bold italic', respectively.  Thus the final font names
+are @samp{TR}, @samp{TB}, @samp{TI}, and @samp{TBI}.
+
+@cindex font path
+@cindex path, for font files
+All font files are kept in the @dfn{font directories}, which constitute
+the @dfn{font path}.  The file search functions always append the
+directory @code{dev}@var{name}, where @var{name} is the name of the
+output device.  Assuming, say, DVI output, and @file{/foo/bar} as a font
+directory, the font files for @code{grodvi} must be in
+@file{/foo/bar/devdvi}.
+
+The elements of the search path for font files are (in that order):
+
+@itemize @bullet
+@item
+The directories specified with @code{gtroff}'s or @code{groff}'s
+@option{-F} command line option.  All device drivers and some
+preprocessors also have this option.
+
+@item
+@tindex GROFF_FONT_PATH@r{, environment variable}
+The directories given in the @env{GROFF_FONT_PATH} environment variable.
+
+@item
+@cindex site-specific directory
+@cindex directory, site-specific
+A site-specific directory and the main font directory; the default
+locations are
+
+@Example
+/usr/local/share/groff/site-font
+/usr/local/share/groff/1.22.3/font
+@endExample
+
+@noindent
+assuming that the version of @code{groff} is 1.22.3, and the
+installation prefix was @file{/usr/local}.  It is possible to fine-tune
+those directories during the installation process.
+@end itemize
+
+
+@c =====================================================================
+
+@node Paper Size, Invocation Examples, Font Directories, Invoking groff
+@section Paper Size
+@cindex paper size
+@cindex size, paper
+@cindex landscape page orientation
+@cindex orientation, landscape
+@cindex page orientation, landscape
+
+In groff, the page size for @code{gtroff} and for output devices are
+handled separately.  @xref{Page Layout}, for vertical manipulation of
+the page size.  @xref{Line Layout}, for horizontal changes.
+
+A default paper size can be set in the device's @file{DESC} file.  Most
+output devices also have a command line option @option{-p} to override
+the default paper size and option @option{-l} to use landscape
+orientation.  @xref{DESC File Format}, for a description of the
+@code{papersize} keyword, which takes the same argument as @option{-p}.
+
+@pindex papersize.tmac
+@pindex troffrc
+A convenient shorthand to set a particular paper size for @code{gtroff}
+is command line option @option{-dpaper=@var{size}}.  This defines string
+@code{paper}, which is processed in file @file{papersize.tmac} (loaded in
+the start-up file @file{troffrc} by default).  Possible values for
+@var{size} are the same as the predefined values for the
+@code{papersize} keyword (but only in lowercase) except
+@code{a7}-@code{d7}.  An appended @samp{l} (ell) character denotes
+landscape orientation.
+
+For example, use the following for PS output on A4 paper in landscape
+orientation:
+
+@Example
+groff -Tps -dpaper=a4l -P-pa4 -P-l -ms foo.ms > foo.ps
+@endExample
+
+Note that it is up to the particular macro package to respect default
+page dimensions set in this way (most do).
+
+
+@c =====================================================================
+
+@node Invocation Examples,  , Paper Size, Invoking groff
+@section Invocation Examples
+@cindex invocation examples
+@cindex examples of invocation
+
+This section lists several common uses of @code{groff} and the
+corresponding command lines.
+
+@Example
+groff file
+@endExample
+
+@noindent
+This command processes @file{file} without a macro package or a
+preprocessor.  The output device is the default, @samp{ps}, and the
+output is sent to @code{stdout}.
+
+@Example
+groff -t -mandoc -Tascii file | less
+@endExample
+
+@noindent
+This is basically what a call to the @code{man} program does.
+@code{gtroff} processes the manual page @file{file} with the
+@file{mandoc} macro file (which in turn either calls the @file{man} or
+the @file{mdoc} macro package), using the @code{tbl} preprocessor and
+the @acronym{ASCII} output device.  Finally, the @code{less} pager
+displays the result.
+
+@Example
+groff -X -m me file
+@endExample
+
+@noindent
+Preview @file{file} with @code{gxditview}, using the @file{me} macro
+package.  Since no @option{-T} option is specified, use the default
+device (@samp{ps}).  Note that you can either say @w{@samp{-m me}} or
+@w{@samp{-me}}; the latter is an anachronism from the early days of
+@acronym{UNIX}.@footnote{The same is true for the other main macro
+packages that come with @code{groff}: @file{man}, @file{mdoc},
+@file{ms}, @file{mm}, and @file{mandoc}.  This won't work in general;
+for example, to load @file{trace.tmac}, either @samp{-mtrace} or
+@w{@samp{-m trace}} must be used.}
+
+@Example
+groff -man -rD1 -z file
+@endExample
+
+@noindent
+Check @file{file} with the @file{man} macro package, forcing
+double-sided printing -- don't produce any output.
+
+@menu
+* grog::
+@end menu
+
+@c ---------------------------------------------------------------------
+
+@node grog,  , Invocation Examples, Invocation Examples
+@subsection @code{grog}
+
+@pindex grog
+@code{grog} reads files, guesses which of the @code{groff} preprocessors
+and/or macro packages are required for formatting them, and prints the
+@code{groff} command including those options on the standard output.  It
+generates one or more of the options @option{-e}, @option{-man},
+@option{-me}, @option{-mm}, @option{-mom}, @option{-ms}, @option{-mdoc},
+@option{-mdoc-old}, @option{-p}, @option{-R}, @option{-g}, @option{-G},
+@option{-s}, and @option{-t}.
+
+A special file name@tie{}@file{-} refers to the standard input.
+Specifying no files also means to read the standard input.  Any
+specified options are included in the printed command.  No space is
+allowed between options and their arguments.  The only options
+recognized are @option{-C} (which is also passed on) to enable
+compatibility mode, and @option{-v} to print the version number and
+exit.
+
+For example,
+
+@Example
+grog -Tdvi paper.ms
+@endExample
+
+@noindent
+guesses the appropriate command to print @file{paper.ms} and then prints
+it to the command line after adding the @option{-Tdvi} option.  For
+direct execution, enclose the call to @code{grog} in backquotes at the
+@acronym{UNIX} shell prompt:
+
+@Example
+`grog -Tdvi paper.ms` > paper.dvi
+@endExample
+
+@noindent
+As seen in the example, it is still necessary to redirect the output to
+something meaningful (i.e.@: either a file or a pager program like
+@code{less}).
+
+
+
+@c =====================================================================
+@c =====================================================================
+
+@node Tutorial for Macro Users, Macro Packages, Invoking groff, Top
+@chapter Tutorial for Macro Users
+@cindex tutorial for macro users
+@cindex macros, tutorial for users
+@cindex user's tutorial for macros
+@cindex user's macro tutorial
+
+Most users tend to use a macro package to format their papers.  This
+means that the whole breadth of @code{groff} is not necessary for most
+people.  This chapter covers the material needed to efficiently use a
+macro package.
+
+@menu
+* Basics::
+* Common Features::
+@end menu
+
+
+@c =====================================================================
+
+@node Basics, Common Features, Tutorial for Macro Users, Tutorial for Macro Users
+@section Basics
+@cindex basics of macros
+@cindex macro basics
+
+This section covers some of the basic concepts necessary to understand
+how to use a macro package.@footnote{This section is derived from
+@cite{Writing Papers with nroff using -me} by Eric P.@tie{}Allman.}
+References are made throughout to more detailed information, if desired.
+
+@code{gtroff} reads an input file prepared by the user and outputs a
+formatted document suitable for publication or framing.  The input
+consists of text, or words to be printed, and embedded commands
+(@dfn{requests} and @dfn{escapes}), which tell @code{gtroff} how to
+format the output.  For more detail on this, see @ref{Embedded
+Commands}.
+
+The word @dfn{argument} is used in this chapter to mean a word or number
+that appears on the same line as a request, and which modifies the
+meaning of that request.  For example, the request
+
+@Example
+.sp
+@endExample
+
+@noindent
+spaces one line, but
+
+@Example
+.sp 4
+@endExample
+
+@noindent
+spaces four lines.  The number@tie{}4 is an argument to the @code{sp}
+request, which says to space four lines instead of one.  Arguments are
+separated from the request and from each other by spaces (@emph{no}
+tabs).  More details on this can be found in @ref{Request and Macro
+Arguments}.
+
+The primary function of @code{gtroff} is to collect words from input
+lines, fill output lines with those words, justify the right-hand margin
+by inserting extra spaces in the line, and output the result.  For
+example, the input:
+
+@Example
+Now is the time
+for all good men
+to come to the aid
+of their party.
+Four score and seven
+years ago, etc.
+@endExample
+
+@noindent
+is read, packed onto output lines, and justified to produce:
+
+@quotation
+Now is the time for all good men to come to the aid of their party.
+Four score and seven years ago, etc.
+@end quotation
+
+@cindex break
+@cindex line break
+Sometimes a new output line should be started even though the current
+line is not yet full; for example, at the end of a paragraph.  To do
+this it is possible to cause a @dfn{break}, which starts a new output
+line.  Some requests cause a break automatically, as normally do blank
+input lines and input lines beginning with a space.
+
+Not all input lines are text to be formatted.  Some input lines are
+requests that describe how to format the text.  Requests always have a
+period (@samp{.}) or an apostrophe (@samp{'}) as the first character of
+the input line.
+
+The text formatter also does more complex things, such as automatically
+numbering pages, skipping over page boundaries, putting footnotes in the
+correct place, and so forth.
+
+Here are a few hints for preparing text for input to @code{gtroff}.
+
+@itemize @bullet
+@item
+First, keep the input lines short.  Short input lines are easier to
+edit, and @code{gtroff} packs words onto longer lines anyhow.
+
+@item
+In keeping with this, it is helpful to begin a new line after every
+comma or phrase, since common corrections are to add or delete sentences
+or phrases.
+
+@item
+End each sentence with two spaces -- or better, start each sentence on a
+new line.  @code{gtroff} recognizes characters that usually end a
+sentence, and inserts sentence space accordingly.
+
+@item
+Do not hyphenate words at the end of lines -- @code{gtroff} is smart
+enough to hyphenate words as needed, but is not smart enough to take
+hyphens out and join a word back together.  Also, words such as
+``mother-in-law'' should not be broken over a line, since then a space
+can occur where not wanted, such as ``@w{mother- in}-law''.
+@end itemize
+
+@cindex double-spacing (@code{ls})
+@cindex spacing
+@code{gtroff} double-spaces output text automatically if you use the
+request @w{@samp{.ls 2}}.  Reactivate single-spaced mode by typing
+@w{@samp{.ls 1}}.@footnote{If you need finer granularity of the vertical
+space, use the @code{pvs} request (@pxref{Changing Type Sizes}).}
+
+A number of requests allow to change the way the output looks, sometimes
+called the @dfn{layout} of the output page.  Most of these requests
+adjust the placing of @dfn{whitespace} (blank lines or spaces).
+
+@cindex new page (@code{bp})
+The @code{bp} request starts a new page, causing a line break.
+
+@cindex blank line (@code{sp})
+@cindex empty line (@code{sp})
+@cindex line, empty (@code{sp})
+The request @w{@samp{.sp @var{N}}} leaves @var{N}@tie{}lines of blank
+space.  @var{N}@tie{}can be omitted (meaning skip a single line) or can
+be of the form @var{N}i (for @var{N}@tie{}inches) or @var{N}c (for
+@var{N}@tie{}centimeters).  For example, the input:
+
+@Example
+.sp 1.5i
+My thoughts on the subject
+.sp
+@endExample
+
+@noindent
+leaves one and a half inches of space, followed by the line ``My
+thoughts on the subject'', followed by a single blank line (more
+measurement units are available, see @ref{Measurements}).
+
+@cindex centering lines (@code{ce})
+@cindex lines, centering (@code{ce})
+Text lines can be centered by using the @code{ce} request.  The line
+after @code{ce} is centered (horizontally) on the page.  To center more
+than one line, use @w{@samp{.ce @var{N}}} (where @var{N} is the number
+of lines to center), followed by the @var{N}@tie{}lines.  To center many
+lines without counting them, type:
+
+@Example
+.ce 1000
+lines to center
+.ce 0
+@endExample
+
+@noindent
+The @w{@samp{.ce 0}} request tells @code{groff} to center zero more
+lines, in other words, stop centering.
+
+@cindex line break (@code{br})
+@cindex break (@code{br})
+All of these requests cause a break; that is, they always start a new
+line.  To start a new line without performing any other action, use
+@code{br}.
+
+
+@c =====================================================================
+
+@node Common Features,  , Basics, Tutorial for Macro Users
+@section Common Features
+@cindex common features
+@cindex features, common
+
+@code{gtroff} provides very low-level operations for formatting a
+document.  There are many common routine operations that are done in
+all documents.  These common operations are written into @dfn{macros}
+and collected into a @dfn{macro package}.
+
+All macro packages provide certain common capabilities that fall into
+the following categories.
+
+@menu
+* Paragraphs::
+* Sections and Chapters::
+* Headers and Footers::
+* Page Layout Adjustment::
+* Displays::
+* Footnotes and Annotations::
+* Table of Contents::
+* Indices::
+* Paper Formats::
+* Multiple Columns::
+* Font and Size Changes::
+* Predefined Strings::
+* Preprocessor Support::
+* Configuration and Customization::
+@end menu
+
+@c ---------------------------------------------------------------------
+
+@node Paragraphs, Sections and Chapters, Common Features, Common Features
+@subsection Paragraphs
+@cindex paragraphs
+
+One of the most common and most used capability is starting a paragraph.
+There are a number of different types of paragraphs, any of which can be
+initiated with macros supplied by the macro package.  Normally,
+paragraphs start with a blank line and the first line indented, like the
+text in this manual.  There are also block style paragraphs, which omit
+the indentation:
+
+@Example
+Some   men  look   at  constitutions   with  sanctimonious
+reverence, and deem them like the ark of the covenant, too
+sacred to be touched.
+@endExample
+
+@noindent
+And there are also indented paragraphs, which begin with a tag or label
+at the margin and the remaining text indented.
+
+@Example
+one   This is  the first paragraph.  Notice  how the first
+      line of  the resulting  paragraph lines up  with the
+      other lines in the paragraph.
+@endExample
+
+@Example
+longlabel
+      This  paragraph   had  a  long   label.   The  first
+      character of text on the first line does not line up
+      with  the  text  on  second  and  subsequent  lines,
+      although they line up with each other.
+@endExample
+
+A variation of this is a bulleted list.
+
+@Example
+.     Bulleted lists start with a bullet.   It is possible
+      to use other glyphs instead of the bullet.  In nroff
+      mode using the ASCII character set for output, a dot
+      is used instead of a real bullet.
+@endExample
+
+@c ---------------------------------------------------------------------
+
+@node Sections and Chapters, Headers and Footers, Paragraphs, Common Features
+@subsection Sections and Chapters
+
+Most macro packages supply some form of section headers.  The simplest
+kind is simply the heading on a line by itself in bold type.  Others
+supply automatically numbered section heading or different heading
+styles at different levels.  Some, more sophisticated, macro packages
+supply macros for starting chapters and appendices.
+
+@c ---------------------------------------------------------------------
+
+@node Headers and Footers, Page Layout Adjustment, Sections and Chapters, Common Features
+@subsection Headers and Footers
+
+Every macro package gives some way to manipulate the @dfn{headers} and
+@dfn{footers} (also called @dfn{titles}) on each page.  This is text put
+at the top and bottom of each page, respectively, which contain data
+like the current page number, the current chapter title, and so on.  Its
+appearance is not affected by the running text.  Some packages allow for
+different ones on the even and odd pages (for material printed in a book
+form).
+
+The titles are called @dfn{three-part titles}, that is, there is a
+left-justified part, a centered part, and a right-justified part.  An
+automatically generated page number may be put in any of these fields
+with the @samp{%} character (see @ref{Page Layout}, for more details).
+
+@c ---------------------------------------------------------------------
+
+@node Page Layout Adjustment, Displays, Headers and Footers, Common Features
+@subsection Page Layout
+
+Most macro packages let the user specify top and bottom margins and
+other details about the appearance of the printed pages.
+
+@c ---------------------------------------------------------------------
+
+@node Displays, Footnotes and Annotations, Page Layout Adjustment, Common Features
+@subsection Displays
+@cindex displays
+
+@dfn{Displays} are sections of text to be set off from the body of the
+paper.  Major quotes, tables, and figures are types of displays, as are
+all the examples used in this document.
+
+@cindex quotes, major
+@cindex major quotes
+@dfn{Major quotes} are quotes that are several lines long, and hence
+are set in from the rest of the text without quote marks around them.
+
+@cindex list
+A @dfn{list} is an indented, single-spaced, unfilled display.  Lists
+should be used when the material to be printed should not be filled and
+justified like normal text, such as columns of figures or the examples
+used in this paper.
+
+@cindex keep
+A @dfn{keep} is a display of lines that are kept on a single page if
+possible.  An example for a keep might be a diagram.  Keeps differ from
+lists in that lists may be broken over a page boundary whereas keeps are
+not.
+
+@cindex keep, floating
+@cindex floating keep
+@dfn{Floating keeps} move relative to the text.  Hence, they are good
+for things that are referred to by name, such as ``See figure@tie{}3''.
+A floating keep appears at the bottom of the current page if it fits;
+otherwise, it appears at the top of the next page.  Meanwhile, the
+surrounding text `flows' around the keep, thus leaving no blank areas.
+
+@c ---------------------------------------------------------------------
+
+@node Footnotes and Annotations, Table of Contents, Displays, Common Features
+@subsection Footnotes and Annotations
+@cindex footnotes
+@cindex annotations
+
+There are a number of requests to save text for later printing.
+
+@dfn{Footnotes} are printed at the bottom of the current page.
+
+@cindex delayed text
+@dfn{Delayed text} is very similar to a footnote except that it is
+printed when called for explicitly.  This allows a list of references to
+appear (for example) at the end of each chapter, as is the convention in
+some disciplines.
+
+Most macro packages that supply this functionality also supply a means
+of automatically numbering either type of annotation.
+
+@c ---------------------------------------------------------------------
+
+@node Table of Contents, Indices, Footnotes and Annotations, Common Features
+@subsection Table of Contents
+@cindex table of contents
+@cindex contents, table of
+
+@dfn{Tables of contents} are a type of delayed text having a tag
+(usually the page number) attached to each entry after a row of dots.
+The table accumulates throughout the paper until printed, usually after
+the paper has ended.  Many macro packages provide the ability to have
+several tables of contents (e.g.@: a standard table of contents, a list
+of tables, etc).
+
+@c ---------------------------------------------------------------------
+
+@node Indices, Paper Formats, Table of Contents, Common Features
+@subsection Indices
+@cindex index, in macro package
+
+While some macro packages use the term @dfn{index}, none actually
+provide that functionality.  The facilities they call indices are
+actually more appropriate for tables of contents.
+
+@pindex makeindex
+To produce a real index in a document, external tools like the
+@code{makeindex} program are necessary.
+
+@c ---------------------------------------------------------------------
+
+@node Paper Formats, Multiple Columns, Indices, Common Features
+@subsection Paper Formats
+@cindex paper formats
+
+Some macro packages provide stock formats for various kinds of
+documents.  Many of them provide a common format for the title and
+opening pages of a technical paper.  The @file{mm} macros in particular
+provide formats for letters and memoranda.
+
+@c ---------------------------------------------------------------------
+
+@node Multiple Columns, Font and Size Changes, Paper Formats, Common Features
+@subsection Multiple Columns
+
+Some macro packages (but not @file{man}) provide the ability to have two
+or more columns on a page.
+
+@c ---------------------------------------------------------------------
+
+@node Font and Size Changes, Predefined Strings, Multiple Columns, Common Features
+@subsection Font and Size Changes
+
+The built-in font and size functions are not always intuitive, so all
+macro packages provide macros to make these operations simpler.
+
+@c ---------------------------------------------------------------------
+
+@node Predefined Strings, Preprocessor Support, Font and Size Changes, Common Features
+@subsection Predefined Strings
+
+Most macro packages provide various predefined strings for a variety of
+uses; examples are sub- and superscripts, printable dates, quotes and
+various special characters.
+
+@c ---------------------------------------------------------------------
+
+@node Preprocessor Support, Configuration and Customization, Predefined Strings, Common Features
+@subsection Preprocessor Support
+
+All macro packages provide support for various preprocessors and may
+extend their functionality.
+
+For example, all macro packages mark tables (which are processed with
+@code{gtbl}) by placing them between @code{TS} and @code{TE} macros.
+The @file{ms} macro package has an option, @samp{.TS@tie{}H}, that
+prints a caption at the top of a new page (when the table is too long to
+fit on a single page).
+
+@c ---------------------------------------------------------------------
+
+@node Configuration and Customization,  , Preprocessor Support, Common Features
+@subsection Configuration and Customization
+
+Some macro packages provide means of customizing many of the details of
+how the package behaves.  This ranges from setting the default type size
+to changing the appearance of section headers.
+
+
+
+@c =====================================================================
+@c =====================================================================
+
+@node Macro Packages, gtroff Reference, Tutorial for Macro Users, Top
+@chapter Macro Packages
+@cindex macro packages
+@cindex packages, macros
+
+This chapter documents the main macro packages that come with
+@code{groff}.
+
+Different main macro packages can't be used at the same time; for
+example
+
+@Example
+groff -m man foo.man -m ms bar.doc
+@endExample
+
+@noindent
+doesn't work.  Note that option arguments are processed before
+non-option arguments; the above (failing) sample is thus reordered to
+
+@Example
+groff -m man -m ms foo.man bar.doc
+@endExample
+
+@menu
+* man::
+* mdoc::
+* ms::
+* me::
+* mm::
+* mom::
+@end menu
+
+
+@c =====================================================================
+
+@node man, mdoc, Macro Packages, Macro Packages
+@section @file{man}
+@cindex manual pages
+@cindex man pages
+@pindex an.tmac
+@pindex man.tmac
+@pindex man-old.tmac
+
+This is the most popular and probably the most important macro package
+of @code{groff}.  It is easy to use, and a vast majority of manual pages
+are based on it.
+
+@menu
+* Man options::
+* Man usage::
+* Man font macros::
+* Miscellaneous man macros::
+* Predefined man strings::
+* Preprocessors in man pages::
+* Optional man extensions::
+@end menu
+
+@c ---------------------------------------------------------------------
+
+@node Man options, Man usage, man, man
+@subsection Options
+
+The command line format for using the @file{man} macros with
+@code{groff} is:
+
+@Example
+groff -m man [ -rLL=@var{length} ] [ -rLT=@var{length} ] [ -rFT=@var{dist} ]
+      [ -rcR=1 ] [ -rC1 ] [ -rD1 ] [-rHY=@var{flags} ]
+      [ -rP@var{nnn} ] [ -rS@var{xx} ] [ -rX@var{nnn} ]
+      [ -rIN=@var{length} ] [ -rSN=@var{length} ] [ @var{files}@dots{} ]
+@endExample
+
+@noindent
+It is possible to use @samp{-man} instead of @w{@samp{-m man}}.
+
+@table @code
+@item -rcR=1
+This option (the default if a TTY output device is used) creates a
+single, very long page instead of multiple pages.  Use @code{-rcR=0} to
+disable it.
+
+@item -rC1
+If more than one manual page is given on the command line, number the
+pages continuously, rather than starting each at@tie{}1.
+
+@item -rD1
+Double-sided printing.  Footers for even and odd pages are formatted
+differently.
+
+@item -rFT=@var{dist}
+Set the position of the footer text to @var{dist}.  If positive, the
+distance is measured relative to the top of the page, otherwise it is
+relative to the bottom.  The default is @minus{}0.5@dmn{i}.
+
+@item -rHY=@var{flags}
+Set hyphenation flags.  Possible values are 1@tie{}to hyphenate without
+restrictions, 2@tie{}to not hyphenate the last word on a page, 4@tie{}to
+not hyphenate the last two characters of a word, and 8@tie{}to not
+hyphenate the first two characters of a word.  These values are
+additive; the default is@tie{}14.
+
+@item -rIN=@var{length}
+Set the body text indentation to @var{length}.  If not specified, the
+indentation defaults to 7@dmn{n} (7@tie{}characters) in nroff mode and
+7.2@dmn{n} otherwise.  For nroff, this value should always be an integer
+multiple of unit @samp{n} to get consistent indentation.
+
+@item -rLL=@var{length}
+Set line length to @var{length}.  If not specified, the line length is
+set to respect any value set by a prior @samp{ll} request (which
+@emph{must} be in effect when the @samp{TH} macro is invoked), if this
+differs from the built-in default for the formatter; otherwise it
+defaults to 78@dmn{n} in nroff mode (this is 78 characters per line) and
+6.5@dmn{i} in troff mode.@footnote{Note that the use of a @samp{.ll
+@var{length}} request to initialize the line length, prior to use of the
+@samp{TH} macro, is supported for backward compatibility with some
+versions of the @code{man} program.  @emph{Always} use the
+@option{-rLL=@var{length}} option, or an equivalent @samp{.nr LL
+@var{length}} request, in preference to such a @samp{.ll @var{length}}
+request.  In particular, note that in nroff mode, the request @samp{.ll
+65n}, (with any @var{length} expression that evaluates equal to
+65@dmn{n}, i.e., the formatter's default line length in nroff mode),
+does @emph{not} set the line length to 65@dmn{n} (it is adjusted to the
+@code{man} macro package's default setting of 78@dmn{n}), whereas the
+use of the @option{-rLL=65n} option, or the @samp{.nr LL 65n} request
+@emph{does} establish a line length of 65@dmn{n}.}
+
+@item -rLT=@var{length}
+Set title length to @var{length}.  If not specified, the title length
+defaults to the line length.
+
+@item -rP@var{nnn}
+Page numbering starts with @var{nnn} rather than with@tie{}1.
+
+@item -rS@var{xx}
+Use @var{xx} (which can be 10, 11, or@tie{}12@dmn{pt}) as the base
+document font size instead of the default value of@tie{}10@dmn{pt}.
+
+@item -rSN=@var{length}
+Set the indentation for sub-subheadings to @var{length}.  If not
+specified, the indentation defaults to 3@dmn{n}.
+
+@item -rX@var{nnn}
+After page @var{nnn}, number pages as @var{nnn}a, @var{nnn}b,
+@var{nnn}c, etc.  For example, the option @option{-rX2} produces the
+following page numbers: 1, 2, 2a, 2b, 2c, etc.
+@end table
+
+@c ---------------------------------------------------------------------
+
+@node Man usage, Man font macros, Man options, man
+@subsection Usage
+@cindex @code{man} macros
+@cindex macros for manual pages [@code{man}]
+
+@pindex man.local
+This section describes the available macros for manual pages.  For
+further customization, put additional macros and requests into the file
+@file{man.local}, which is loaded immediately after the @file{man}
+package.
+
+@Defmac {TH, title section [@Var{extra1} [@Var{extra2} [@Var{extra3}]]], man}
+Set the title of the man page to @var{title} and the section to
+@var{section}, which must have a value between 1 and@tie{}8.  The value
+of @var{section} may also have a string appended, e.g.@: @samp{.pm}, to
+indicate a specific subsection of the man pages.
+
+Both @var{title} and @var{section} are positioned at the left and right
+in the header line (with @var{section} in parentheses immediately
+appended to @var{title}.  @var{extra1} is positioned in the middle of
+the footer line.  @var{extra2} is positioned at the left in the footer
+line (or at the left on even pages and at the right on odd pages if
+double-sided printing is active).  @var{extra3} is centered in the
+header line.
+
+For @acronym{HTML} and @acronym{XHTML} output, headers and footers are
+completely suppressed.
+
+Additionally, this macro starts a new page; the new line number
+is@tie{}1 again (except if the @option{-rC1} option is given on the
+command line) -- this feature is intended only for formatting multiple
+man pages; a single man page should contain exactly one @code{TH} macro
+at the beginning of the file.
+@endDefmac
+
+@Defmac {SH, [@Var{heading}], man}
+Set up an unnumbered section heading sticking out to the left.  Prints
+out all the text following @code{SH} up to the end of the line (or the
+text in the next line if there is no argument to @code{SH}) in bold face
+(or the font specified by the string @code{HF}), one size larger than
+the base document size.  Additionally, the left margin and the
+indentation for the following text is reset to its default value.
+@endDefmac
+
+@Defmac {SS, [@Var{heading}], man}
+Set up an unnumbered (sub)section heading.  Prints out all the text
+following @code{SS} up to the end of the line (or the text in the next
+line if there is no argument to @code{SS}) in bold face (or the font
+specified by the string @code{HF}), at the same size as the base
+document size.  Additionally, the left margin and the indentation for
+the following text is reset to its default value.
+@endDefmac
+
+@Defmac {TP, [@Var{nnn}], man}
+Set up an indented paragraph with label.  The indentation is set to
+@var{nnn} if that argument is supplied (the default unit is @samp{n} if
+omitted), otherwise it is set to the previous indentation value
+specified with @code{TP}, @code{IP}, or @code{HP} (or to the default
+value if none of them have been used yet).
+
+The first line of text following this macro is interpreted as a string
+to be printed flush-left, as it is appropriate for a label.  It is not
+interpreted as part of a paragraph, so there is no attempt to fill the
+first line with text from the following input lines.  Nevertheless, if
+the label is not as wide as the indentation the paragraph starts at the
+same line (but indented), continuing on the following lines.  If the
+label is wider than the indentation the descriptive part of the
+paragraph begins on the line following the label, entirely indented.
+Note that neither font shape nor font size of the label is set to a
+default value; on the other hand, the rest of the text has default font
+settings.
+@endDefmac
+
+@DefmacList {LP, , man}
+@DefmacItemx {PP, , man}
+@DefmacListEndx {P, , man}
+These macros are mutual aliases.  Any of them causes a line break at the
+current position, followed by a vertical space downwards by the amount
+specified by the @code{PD} macro.  The font size and shape are reset to
+the default value (10@dmn{pt} roman if no @option{-rS} option is given
+on the command line).  Finally, the current left margin and the
+indentation is restored.
+@endDefmac
+
+@Defmac {IP, [@Var{designator} [@Var{nnn}]], man}
+Set up an indented paragraph, using @var{designator} as a tag to mark
+its beginning.  The indentation is set to @var{nnn} if that argument is
+supplied (default unit is @samp{n}), otherwise it is set to the previous
+indentation value specified with @code{TP}, @code{IP}, or @code{HP} (or
+the default value if none of them have been used yet).  Font size and
+face of the paragraph (but not the designator) are reset to their
+default values.
+
+To start an indented paragraph with a particular indentation but without
+a designator, use @samp{""} (two double quotes) as the first argument of
+@code{IP}.
+
+For example, to start a paragraph with bullets as the designator and
+4@tie{}en indentation, write
+
+@Example
+.IP \(bu 4
+@endExample
+@endDefmac
+
+@Defmac {HP, [@Var{nnn}], man}
+@cindex hanging indentation [@code{man}]
+@cindex @code{man} macros, hanging indentation
+Set up a paragraph with hanging left indentation.  The indentation is
+set to @var{nnn} if that argument is supplied (default unit is
+@samp{n}), otherwise it is set to the previous indentation value
+specified with @code{TP}, @code{IP}, or @code{HP} (or the default value
+if non of them have been used yet).  Font size and face are reset to
+their default values.
+@endDefmac
+
+@Defmac {RS, [@Var{nnn}], man}
+@cindex left margin, how to move [@code{man}]
+@cindex @code{man} macros, moving left margin
+Move the left margin to the right by the value @var{nnn} if specified
+(default unit is @samp{n}); otherwise it is set to the previous
+indentation value specified with @code{TP}, @code{IP}, or @code{HP} (or
+to the default value if none of them have been used yet).  The
+indentation value is then set to the default.
+
+Calls to the @code{RS} macro can be nested.
+@endDefmac
+
+@Defmac {RE, [@Var{nnn}], man}
+Move the left margin back to level @var{nnn}, restoring the previous
+left margin.  If no argument is given, it moves one level back.  The
+first level (i.e., no call to @code{RS} yet) has number@tie{}1, and each
+call to @code{RS} increases the level by@tie{}1.
+@endDefmac
+
+@cindex line breaks, with vertical space [@code{man}]
+@cindex @code{man} macros, line breaks with vertical space
+To summarize, the following macros cause a line break with the insertion
+of vertical space (which amount can be changed with the @code{PD}
+macro): @code{SH}, @code{SS}, @code{TP}, @code{LP} (@code{PP},
+@code{P}), @code{IP}, and @code{HP}.
+
+@cindex line breaks, without vertical space [@code{man}]
+@cindex @code{man} macros, line breaks without vertical space
+The macros @code{RS} and @code{RE} also cause a break but do not insert
+vertical space.
+
+@cindex default indentation, resetting [@code{man}]
+@cindex indentaion, resetting to default [@code{man}]
+@cindex @code{man} macros, resetting default indentation
+Finally, the macros @code{SH}, @code{SS}, @code{LP} (@code{PP},
+@code{P}), and @code{RS} reset the indentation to its default value.
+
+@c ---------------------------------------------------------------------
+
+@node Man font macros, Miscellaneous man macros, Man usage, man
+@subsection Macros to set fonts
+@cindex font selection [@code{man}]
+@cindex @code{man} macros, how to set fonts
+
+The standard font is roman; the default text size is 10@tie{}point.  If
+command line option @option{-rS=@var{n}} is given, use @var{n}@dmn{pt}
+as the default text size.
+
+@Defmac {SM, [@Var{text}], man}
+Set the text on the same line or the text on the next line in a font
+that is one point size smaller than the default font.
+@endDefmac
+
+@Defmac {SB, [@Var{text}], man}
+@cindex bold face [@code{man}]
+@cindex @code{man} macros, bold face
+Set the text on the same line or the text on the next line in bold face
+font, one point size smaller than the default font.
+@endDefmac
+
+@Defmac {BI, text, man}
+Set its arguments alternately in bold face and italic, without a space
+between the arguments.  Thus,
+
+@Example
+.BI this "word and" that
+@endExample
+
+@noindent
+produces ``thisword andthat'' with ``this'' and ``that'' in bold face,
+and ``word and'' in italics.
+@endDefmac
+
+@Defmac {IB, text, man}
+Set its arguments alternately in italic and bold face, without a space
+between the arguments.
+@endDefmac
+
+@Defmac {RI, text, man}
+Set its arguments alternately in roman and italic, without a space
+between the arguments.
+@endDefmac
+
+@Defmac {IR, text, man}
+Set its arguments alternately in italic and roman, without a space
+between the arguments.
+@endDefmac
+
+@Defmac {BR, text, man}
+Set its arguments alternately in bold face and roman, without a space
+between the arguments.
+@endDefmac
+
+@Defmac {RB, text, man}
+Set its arguments alternately in roman and bold face, without a space
+between the arguments.
+@endDefmac
+
+@Defmac {B, [@Var{text}], man}
+Set @var{text} in bold face.  If no text is present on the line where
+the macro is called, then the text of the next line appears in bold
+face.
+@endDefmac
+
+@Defmac {I, [@Var{text}], man}
+@cindex italic fonts [@code{man}]
+@cindex @code{man} macros, italic fonts
+Set @var{text} in italic.  If no text is present on the line where the
+macro is called, then the text of the next line appears in italic.
+@endDefmac
+
+@c ---------------------------------------------------------------------
+
+@node Miscellaneous man macros, Predefined man strings, Man font macros, man
+@subsection Miscellaneous macros
+
+@pindex grohtml
+@cindex @code{man} macros, default indentation
+@cindex default indentation [@code{man}]
+The default indentation is 7.2@dmn{n} in troff mode and 7@dmn{n} in
+nroff mode except for @code{grohtml}, which ignores indentation.
+
+@Defmac {DT, , man}
+@cindex tab stops [@code{man}]
+@cindex @code{man} macros, tab stops
+Set tabs every 0.5@tie{}inches.  Since this macro is always executed
+during a call to the @code{TH} macro, it makes sense to call it only if
+the tab positions have been changed.
+@endDefmac
+
+@Defmac {PD, [@Var{nnn}], man}
+@cindex empty space before a paragraph [@code{man}]
+@cindex @code{man} macros, empty space before a paragraph
+Adjust the empty space before a new paragraph (or section).  The
+optional argument gives the amount of space (default unit is @samp{v});
+without parameter, the value is reset to its default value (1@tie{}line
+in nroff mode, 0.4@dmn{v}@tie{}otherwise).
+
+This affects the macros @code{SH}, @code{SS}, @code{TP}, @code{LP} (as
+well as @code{PP} and @code{P}), @code{IP}, and @code{HP}.
+@endDefmac
+
+The following two macros are included for BSD compatibility.
+
+@Defmac {AT, [@Var{system} [@Var{release}]], man}
+@cindex @code{man}macros, BSD compatibility
+Alter the footer for use with @acronym{AT&T} manpages.  This command
+exists only for compatibility; don't use it.  The first argument
+@var{system} can be:
+
+@table @code
+@item 3
+7th Edition (the default)
+
+@item 4
+System III
+
+@item 5
+System V
+@end table
+
+An optional second argument @var{release} to @code{AT} specifies the
+release number (such as ``System V Release 3'').
+@endDefmac
+
+@Defmac {UC, [@Var{version}], man}
+@cindex @code{man}macros, BSD compatibility
+Alters the footer for use with BSD manpages.  This command exists only
+for compatibility; don't use it.  The argument can be:
+
+@table @code
+@item 3
+3rd Berkeley Distribution (the default)
+
+@item 4
+4th Berkeley Distribution
+
+@item 5
+4.2 Berkeley Distribution
+
+@item 6
+4.3 Berkeley Distribution
+
+@item 7
+4.4 Berkeley Distribution
+@end table
+@endDefmac
+
+@c ---------------------------------------------------------------------
+
+@node Predefined man strings, Preprocessors in man pages, Miscellaneous man macros, man
+@subsection Predefined strings
+
+The following strings are defined:
+
+@Defstr {S, man}
+Switch back to the default font size.
+@endDefstr
+
+@Defstr {HF, man}
+The typeface used for headings.
+The default is @samp{B}.
+@endDefstr
+
+@Defstr {R, man}
+The `registered' sign.
+@endDefstr
+
+@Defstr {Tm, man}
+The `trademark' sign.
+@endDefstr
+
+@DefstrList {lq, man}
+@DefstrListEndx {rq, man}
+@cindex @code{lq} glyph, and @code{lq} string [@code{man}]
+@cindex @code{rq} glyph, and @code{rq} string [@code{man}]
+Left and right quote.  This is equal to @code{\(lq} and @code{\(rq},
+respectively.
+@endDefstr
+
+@c ---------------------------------------------------------------------
+
+@node Preprocessors in man pages, Optional man extensions, Predefined man strings, man
+@subsection Preprocessors in @file{man} pages
+
+@cindex preprocessor, calling convention
+@cindex calling convention of preprocessors
+If a preprocessor like @code{gtbl} or @code{geqn} is needed, it has
+become common usage to make the first line of the man page look like
+this:
+
+@Example
+'\" @var{word}
+@endExample
+
+@pindex geqn@r{, invocation in manual pages}
+@pindex grefer@r{, invocation in manual pages}
+@pindex gtbl@r{, invocation in manual pages}
+@pindex man@r{, invocation of preprocessors}
+@noindent
+Note the single space character after the double quote.  @var{word}
+consists of letters for the needed preprocessors: @samp{e} for
+@code{geqn}, @samp{r} for @code{grefer}, @samp{t} for @code{gtbl}.
+Modern implementations of the @code{man} program read this first line
+and automatically call the right preprocessor(s).
+
+@c ---------------------------------------------------------------------
+
+@node Optional man extensions,  , Preprocessors in man pages, man
+@subsection Optional @file{man} extensions
+
+@pindex man.local
+Use the file @file{man.local} for local extensions to the @code{man}
+macros or for style changes.
+
+@unnumberedsubsubsec Custom headers and footers
+@cindex @code{man} macros, custom headers and footers
+
+In groff versions 1.18.2 and later, you can specify custom headers and
+footers by redefining the following macros in @file{man.local}.
+
+@Defmac {PT, , man}
+Control the content of the headers.  Normally, the header prints the
+command name and section number on either side, and the optional fifth
+argument to @code{TH} in the center.
+@endDefmac
+
+@Defmac {BT, , man}
+Control the content of the footers.  Normally, the footer prints the
+page number and the third and fourth arguments to @code{TH}.
+
+Use the @code{FT} number register to specify the footer position.  The
+default is @minus{}0.5@dmn{i}.
+@endDefmac
+
+@unnumberedsubsubsec Ultrix-specific man macros
+@cindex Ultrix-specific @code{man} macros
+@cindex @code{man} macros, Ultrix-specific
+
+@pindex man.ultrix
+The @code{groff} source distribution includes a file named
+@file{man.ultrix}, containing macros compatible with the Ultrix variant
+of @code{man}.  Copy this file into @file{man.local} (or use the
+@code{mso} request to load it) to enable the following macros.
+
+@Defmac {CT, @Var{key}, man}
+Print @samp{<CTRL/@var{key}>}.
+@endDefmac
+
+@Defmac {CW, , man}
+Print subsequent text using the constant width (Courier) typeface.
+@endDefmac
+
+@Defmac {Ds, , man}
+Begin a non-filled display.
+@endDefmac
+
+@Defmac {De, , man}
+End a non-filled display started with @code{Ds}.
+@endDefmac
+
+@Defmac {EX, [@Var{indent}], man}
+Begin a non-filled display using the constant width (Courier) typeface.
+Use the optional @var{indent} argument to indent the display.
+@endDefmac
+
+@Defmac {EE, , man}
+End a non-filled display started with @code{EX}.
+@endDefmac
+
+@Defmac {G, [@Var{text}], man}
+Set @var{text} in Helvetica.  If no text is present on the line where
+the macro is called, then the text of the next line appears in
+Helvetica.
+@endDefmac
+
+@Defmac {GL, [@Var{text}], man}
+Set @var{text} in Helvetica Oblique.  If no text is present on the line
+where the macro is called, then the text of the next line appears in
+Helvetica Oblique.
+@endDefmac
+
+@Defmac {HB, [@Var{text}], man}
+Set @var{text} in Helvetica Bold.  If no text is present on the line
+where the macro is called, then all text up to the next @code{HB}
+appears in Helvetica Bold.
+@endDefmac
+
+@Defmac {TB, [@Var{text}], man}
+Identical to @code{HB}.
+@endDefmac
+
+@Defmac {MS, @Var{title} @Var{sect} [@Var{punct}], man}
+Set a manpage reference in Ultrix format.  The @var{title} is in Courier
+instead of italic.  Optional punctuation follows the section number
+without an intervening space.
+@endDefmac
+
+@Defmac {NT, [@code{C}] [@Var{title}], man}
+Begin a note.  Print the optional @Var{title}, or the word ``Note'',
+centered on the page.  Text following the macro makes up the body of the
+note, and is indented on both sides.  If the first argument is @code{C},
+the body of the note is printed centered (the second argument replaces
+the word ``Note'' if specified).
+@endDefmac
+
+@Defmac {NE, , man}
+End a note begun with @code{NT}.
+@endDefmac
+
+@Defmac {PN, @Var{path} [@Var{punct}], man}
+Set the path name in constant width (Courier), followed by optional
+punctuation.
+@endDefmac
+
+@Defmac {Pn, [@Var{punct}] @Var{path} [@Var{punct}], man}
+If called with two arguments, identical to @code{PN}.  If called with
+three arguments, set the second argument in constant width (Courier),
+bracketed by the first and third arguments in the current font.
+@endDefmac
+
+@Defmac {R, , man}
+Switch to roman font and turn off any underlining in effect.
+@endDefmac
+
+@Defmac {RN, , man}
+Print the string @samp{<RETURN>}.
+@endDefmac
+
+@Defmac {VS, [@code{4}], man}
+Start printing a change bar in the margin if the number@tie{}@code{4} is
+specified.  Otherwise, this macro does nothing.
+@endDefmac
+
+@Defmac {VE, , man}
+End printing the change bar begun by @code{VS}.
+@endDefmac
+
+@unnumberedsubsubsec Simple example
+
+The following example @file{man.local} file alters the @code{SH} macro
+to add some extra vertical space before printing the heading.  Headings
+are printed in Helvetica Bold.
+
+@Example
+.\" Make the heading fonts Helvetica
+.ds HF HB
+.
+.\" Put more whitespace in front of headings.
+.rn SH SH-orig
+.de SH
+.  if t .sp (u;\\n[PD]*2)
+.  SH-orig \\$*
+..
+@endExample
+
+
+@c =====================================================================
+
+@node mdoc, ms, man, Macro Packages
+@section @file{mdoc}
+@cindex @code{mdoc} macros
+
+@c XXX documentation
+@c XXX this is a placeholder until we get stuff knocked into shape
+See the @cite{groff_mdoc(7)} man page (type @command{man groff_mdoc}
+at the command line).
+
+
+@c =====================================================================
+
+@node ms, me, mdoc, Macro Packages
+@section @file{ms}
+@cindex @code{ms} macros
+
+The @file{-ms} macros are suitable for reports, letters, books, user
+manuals, and so forth.  The package provides macros for cover pages,
+section headings, paragraphs, lists, footnotes, pagination, and a table
+of contents.
+
+@menu
+* ms Intro::
+* General ms Structure::
+* ms Document Control Registers::
+* ms Cover Page Macros::
+* ms Body Text::
+* ms Page Layout::
+* Differences from AT&T ms::
+* Naming Conventions::
+@end menu
+
+@c ---------------------------------------------------------------------
+
+@node ms Intro, General ms Structure, ms, ms
+@subsection Introduction to @file{ms}
+
+The original @file{-ms} macros were included with @acronym{AT&T}
+@code{troff} as well as the @file{man} macros.  While the @file{man}
+package is intended for brief documents that can be read on-line as well
+as printed, the @file{ms} macros are suitable for longer documents that
+are meant to be printed rather than read on-line.
+
+The @file{ms} macro package included with @code{groff} is a complete,
+bottom-up re-implementation.  Several macros (specific to @acronym{AT&T}
+or Berkeley) are not included, while several new commands are.
+@xref{Differences from AT&T ms}, for more information.
+
+@c ---------------------------------------------------------------------
+
+@node General ms Structure, ms Document Control Registers, ms Intro, ms
+@subsection General structure of an @file{ms} document
+@cindex @code{ms} macros, general structure
+
+The @file{ms} macro package expects a certain amount of structure, but
+not as much as packages such as @file{man} or @file{mdoc}.
+
+The simplest documents can begin with a paragraph macro (such as
+@code{LP} or @code{PP}), and consist of text separated by paragraph
+macros or even blank lines.  Longer documents have a structure as
+follows:
+
+@table @strong
+@item Document type
+If you invoke the @code{RP} (report) macro on the first line of the
+document, @code{groff} prints the cover page information on its own
+page; otherwise it prints the information on the first page with your
+document text immediately following.  Other document formats found in
+@acronym{AT&T} @code{troff} are specific to @acronym{AT&T} or Berkeley,
+and are not supported in @code{groff}.
+
+@item Format and layout
+By setting number registers, you can change your document's type (font
+and size), margins, spacing, headers and footers, and footnotes.
+@xref{ms Document Control Registers}, for more details.
+
+@item Cover page
+A cover page consists of a title, the author's name and institution, an
+abstract, and the date.@footnote{Actually, only the title is required.}
+@xref{ms Cover Page Macros}, for more details.
+
+@item Body
+Following the cover page is your document.  You can use the @file{ms}
+macros to write reports, letters, books, and so forth.  The package is
+designed for structured documents, consisting of paragraphs interspersed
+with headings and augmented by lists, footnotes, tables, and other
+common constructs.  @xref{ms Body Text}, for more details.
+
+@item Table of contents
+Longer documents usually include a table of contents, which you can
+invoke by placing the @code{TC} macro at the end of your document.  The
+@file{ms} macros have minimal indexing facilities, consisting of the
+@code{IX} macro, which prints an entry on standard error.  Printing the
+table of contents at the end is necessary since @code{groff} is a
+single-pass text formatter, thus it cannot determine the page number of
+each section until that section has actually been set and printed.
+Since @file{ms} output is intended for hardcopy, you can manually
+relocate the pages containing the table of contents between the cover
+page and the body text after printing.
+@end table
+
+@c ---------------------------------------------------------------------
+
+@node ms Document Control Registers, ms Cover Page Macros, General ms Structure, ms
+@subsection Document control registers
+@cindex @code{ms} macros, document control registers
+
+The following is a list of document control number registers.  For the
+sake of consistency, set registers related to margins at the beginning
+of your document, or just after the @code{RP} macro.  You can set other
+registers later in your document, but you should keep them together at
+the beginning to make them easy to find and edit as necessary.
+
+@unnumberedsubsubsec Margin Settings
+
+@Defmpreg {PO, ms}
+Defines the page offset (i.e., the left margin).  There is no explicit
+right margin setting; the combination of the @code{PO} and @code{LL}
+registers implicitly define the right margin width.
+
+Effective: next page.
+
+Default value: 1@dmn{i}.
+@endDefmpreg
+
+@Defmpreg {LL, ms}
+Defines the line length (i.e., the width of the body text).
+
+Effective: next paragraph.
+
+Default: 6@dmn{i}.
+@endDefmpreg
+
+@Defmpreg {LT, ms}
+Defines the title length (i.e., the header and footer width).  This
+is usually the same as @code{LL}, but not necessarily.
+
+Effective: next paragraph.
+
+Default: 6@dmn{i}.
+@endDefmpreg
+
+@Defmpreg {HM, ms}
+Defines the header margin height at the top of the page.
+
+Effective: next page.
+
+Default: 1@dmn{i}.
+@endDefmpreg
+
+@Defmpreg {FM, ms}
+Defines the footer margin height at the bottom of the page.
+
+Effective: next page.
+
+Default: 1@dmn{i}.
+@endDefmpreg
+
+@unnumberedsubsubsec Text Settings
+
+@Defmpreg {PS, ms}
+Defines the point size of the body text.  If the value is larger than or
+equal to 1000, divide it by 1000 to get a fractional point size.  For
+example, @samp{.nr PS 10250} sets the document's point size to
+10.25@dmn{p}.
+
+Effective: next paragraph.
+
+Default: 10@dmn{p}.
+@endDefmpreg
+
+@Defmpreg {VS, ms}
+Defines the space between lines (line height plus leading).  If the
+value is larger than or equal to 1000, divide it by 1000 to get a
+fractional point size.  Due to backwards compatibility, @code{VS} must
+be smaller than 40000 (this is 40.0@dmn{p}).
+
+Effective: next paragraph.
+
+Default: 12@dmn{p}.
+@endDefmpreg
+
+@Defmpreg {PSINCR, ms}
+Defines an increment in point size, which is applied to section headings
+at nesting levels below the value specified in @code{GROWPS}.  The value
+of @code{PSINCR} should be specified in points, with the @dmn{p} scaling
+factor, and may include a fractional component; for example,
+@w{@samp{.nr PSINCR 1.5p}} sets a point size increment of 1.5@dmn{p}.
+
+Effective: next section heading.
+
+Default: 1@dmn{p}.
+@endDefmpreg
+
+@Defmpreg {GROWPS, ms}
+Defines the heading level below which the point size increment set by
+@code{PSINCR} becomes effective.  Section headings at and above the
+level specified by @code{GROWPS} are printed at the point size set by
+@code{PS}; for each level below the value of @code{GROWPS}, the point
+size is increased in steps equal to the value of @code{PSINCR}.  Setting
+@code{GROWPS} to any value less than@tie{}2 disables the incremental
+heading size feature.
+
+Effective: next section heading.
+
+Default: 0.
+@endDefmpreg
+
+@Defmpreg {HY, ms}
+Defines the hyphenation level.  @code{HY} sets safely the value of the
+low-level @code{hy} register.  Setting the value of @code{HY} to@tie{}0
+is equivalent to using the @code{nh} request.
+
+Effective: next paragraph.
+
+Default: 14.
+@endDefmpreg
+
+@Defmpreg {FAM, ms}
+Defines the font family used to typeset the document.
+
+Effective: next paragraph.
+
+Default: as defined in the output device.
+@endDefmpreg
+
+@unnumberedsubsubsec Paragraph Settings
+
+@Defmpreg {PI, ms}
+Defines the initial indentation of a (@code{PP} macro) paragraph.
+
+Effective: next paragraph.
+
+Default: 5@dmn{n}.
+@endDefmpreg
+
+@Defmpreg {PD, ms}
+Defines the space between paragraphs.
+
+Effective: next paragraph.
+
+Default: 0.3@dmn{v}.
+@endDefmpreg
+
+@Defmpreg {QI, ms}
+Defines the indentation on both sides of a quoted (@code{QP} macro)
+paragraph.
+
+Effective: next paragraph.
+
+Default: 5@dmn{n}.
+@endDefmpreg
+
+@Defmpreg {PORPHANS, ms}
+Defines the minimum number of initial lines of any paragraph that
+should be kept together, to avoid orphan lines at the bottom of a page.
+If a new paragraph is started close to the bottom of a page, and there
+is insufficient space to accommodate @code{PORPHANS} lines before an
+automatic page break, then the page break is forced, before the start of
+the paragraph.
+
+Effective: next paragraph.
+
+Default: 1.
+@endDefmpreg
+
+@Defmpreg {HORPHANS, ms}
+Defines the minimum number of lines of the following paragraph that
+should be kept together with any section heading introduced by the
+@code{NH} or @code{SH} macros.  If a section heading is placed close to
+the bottom of a page, and there is insufficient space to accommodate
+both the heading and at least @code{HORPHANS} lines of the following
+paragraph, before an automatic page break, then the page break is forced
+before the heading.
+
+Effective: next paragraph.
+
+Default: 1.
+@endDefmpreg
+
+@unnumberedsubsubsec Footnote Settings
+
+@Defmpreg {FL, ms}
+Defines the length of a footnote.
+
+Effective: next footnote.
+
+Default: @math{@code{@\n[LL]} * 5 / 6}.
+@endDefmpreg
+
+@Defmpreg {FI, ms}
+Defines the footnote indentation.
+
+Effective: next footnote.
+
+Default: 2@dmn{n}.
+@endDefmpreg
+
+@Defmpreg {FF, ms}
+The footnote format:
+@table @code
+@item 0
+Print the footnote number as a superscript; indent the footnote
+(default).
+
+@item 1
+Print the number followed by a period (like 1.@:) and indent the
+footnote.
+
+@item 2
+Like 1, without an indentation.
+
+@item 3
+Like 1, but print the footnote number as a hanging paragraph.
+@end table
+
+Effective: next footnote.
+
+Default: 0.
+@endDefmpreg
+
+@Defmpreg {FPS, ms}
+Defines the footnote point size.  If the value is larger than or equal
+to 1000, divide it by 1000 to get a fractional point size.
+
+Effective: next footnote.
+
+Default: @math{@code{@\n[PS]} - 2}.
+@endDefmpreg
+
+@Defmpreg {FVS, ms}
+Defines the footnote vertical spacing.  If the value is larger than or
+equal to 1000, divide it by 1000 to get a fractional point size.
+
+Effective: next footnote.
+
+Default: @math{@code{@\n[FPS]} + 2}.
+@endDefmpreg
+
+@Defmpreg {FPD, ms}
+Defines the footnote paragraph spacing.
+
+Effective: next footnote.
+
+Default: @math{@code{@\n[PD]} / 2}.
+@endDefmpreg
+
+@unnumberedsubsubsec Miscellaneous Number Registers
+
+@Defmpreg {MINGW, ms}
+Defines the minimum width between columns in a multi-column document.
+
+Effective: next page.
+
+Default: 2@dmn{n}.
+@endDefmpreg
+
+@Defmpreg {DD, ms}
+Sets the vertical spacing before and after a display, a @code{tbl} table, an
+@code{eqn} equation, or a @code{pic} image.
+
+Effective: next paragraph.
+
+Default: 0.5@dmn{v}.
+@endDefmpreg
+
+@c ---------------------------------------------------------------------
+
+@node ms Cover Page Macros, ms Body Text, ms Document Control Registers, ms
+@subsection Cover page macros
+@cindex @code{ms} macros, cover page
+@cindex cover page macros, [@code{ms}]
+
+Use the following macros to create a cover page for your document in the
+order shown.
+
+@Defmac {RP, [@code{no}], ms}
+Specifies the report format for your document.  The report format
+creates a separate cover page.  The default action (no @code{RP} macro)
+is to print a subset of the cover page on page@tie{}1 of your document.
+
+If you use the word @code{no} as an optional argument, @code{groff}
+prints a title page but does not repeat any of the title page
+information (title, author, abstract, etc.@:) on page@tie{}1 of the
+document.
+@endDefmac
+
+@Defmac {P1, , ms}
+(P-one) Prints the header on page@tie{}1.  The default is to suppress
+the header.
+@endDefmac
+
+@Defmac {DA, [@dots{}], ms}
+(optional) Prints the current date, or the arguments to the macro if
+any, on the title page (if specified) and in the footers.  This is the
+default for @code{nroff}.
+@endDefmac
+
+@Defmac {ND, [@dots{}], ms}
+(optional) Prints the current date, or the arguments to the macro if
+any, on the title page (if specified) but not in the footers.  This is
+the default for @code{troff}.
+@endDefmac
+
+@Defmac {TL, , ms}
+Specifies the document title.  @code{groff} collects text following the
+@code{TL} macro into the title, until reaching the author name or
+abstract.
+@endDefmac
+
+@Defmac {AU, , ms}
+Specifies the author's name, which appears on the line (or lines)
+immediately following.  You can specify multiple authors as follows:
+
+@Example
+.AU
+John Doe
+.AI
+University of West Bumblefuzz
+.AU
+Martha Buck
+.AI
+Monolithic Corporation
+
+...
+@endExample
+@endDefmac
+
+@Defmac {AI, , ms}
+Specifies the author's institution.  You can specify multiple
+institutions in the same way that you specify multiple authors.
+@endDefmac
+
+@Defmac {AB, [@code{no}], ms}
+Begins the abstract.  The default is to print the word
+@acronym{ABSTRACT}, centered and in italics, above the text of the
+abstract.  The word @code{no} as an optional argument suppresses this
+heading.
+@endDefmac
+
+@Defmac {AE, , ms}
+Ends the abstract.
+@endDefmac
+
+The following is example mark-up for a title page.
+@cindex title page, example markup
+@cindex example markup, title page
+
+@CartoucheExample
+.RP
+.TL
+The Inevitability of Code Bloat
+in Commercial and Free Software
+.AU
+J. Random Luser
+.AI
+University of West Bumblefuzz
+.AB
+This report examines the long-term growth
+of the code bases in two large, popular software
+packages; the free Emacs and the commercial
+Microsoft Word.
+While differences appear in the type or order
+of features added, due to the different
+methodologies used, the results are the same
+in the end.
+.PP
+The free software approach is shown to be
+superior in that while free software can
+become as bloated as commercial offerings,
+free software tends to have fewer serious
+bugs and the added features are in line with
+user demand.
+.AE
+
+... the rest of the paper follows ...
+@endCartoucheExample
+
+@c ---------------------------------------------------------------------
+
+@node ms Body Text, ms Page Layout, ms Cover Page Macros, ms
+@subsection Body text
+@cindex @code{ms} macros, body text
+
+This section describes macros used to mark up the body of your document.
+Examples include paragraphs, sections, and other groups.
+
+@menu
+* Paragraphs in ms::
+* Headings in ms::
+* Highlighting in ms::
+* Lists in ms::
+* Indentation values in ms::
+* Tabstops in ms::
+* ms Displays and Keeps::
+* ms Insertions::
+* Example multi-page table::
+* ms Footnotes::
+@end menu
+
+@c ---------------------------------------------------------------------
+
+@node Paragraphs in ms, Headings in ms, ms Body Text, ms Body Text
+@subsubsection Paragraphs
+@cindex @code{ms} macros, paragraph handling
+
+The following paragraph types are available.
+
+@Defmac {PP, , ms}
+Sets a paragraph with an initial indentation.
+@endDefmac
+
+@Defmac {LP, , ms}
+Sets a paragraph without an initial indentation.
+@endDefmac
+
+@Defmac {QP, , ms}
+Sets a paragraph that is indented at both left and right margins.  The
+effect is identical to the @acronym{HTML} @code{<BLOCKQUOTE>} element.
+The next paragraph or heading returns margins to normal.
+@endDefmac
+
+@Defmac {XP, , ms}
+Sets a paragraph whose lines are indented, except for the first line.
+This is a Berkeley extension.
+@endDefmac
+
+The following markup uses all four paragraph macros.
+
+@CartoucheExample
+.NH 2
+Cases used in the study
+.LP
+The following software and versions were
+considered for this report.
+.PP
+For commercial software, we chose
+.B "Microsoft Word for Windows" ,
+starting with version 1.0 through the
+current version (Word 2000).
+.PP
+For free software, we chose
+.B Emacs ,
+from its first appearance as a standalone
+editor through the current version (v20).
+See [Bloggs 2002] for details.
+.QP
+Franklin's Law applied to software:
+software expands to outgrow both
+RAM and disk space over time.
+.LP
+Bibliography:
+.XP
+Bloggs, Joseph R.,
+.I "Everyone's a Critic" ,
+Underground Press, March 2002.
+A definitive work that answers all questions
+and criticisms about the quality and usability of
+free software.
+@endCartoucheExample
+
+The @code{PORPHANS} register (@pxref{ms Document Control Registers})
+operates in conjunction with each of these macros, to inhibit the
+printing of orphan lines at the bottom of any page.
+
+@c ---------------------------------------------------------------------
+
+@node Headings in ms, Highlighting in ms, Paragraphs in ms, ms Body Text
+@subsubsection Headings
+@cindex @code{ms} macros, headings
+
+Use headings to create a hierarchical structure for your document.  The
+@file{ms} macros print headings in @strong{bold}, using the same font
+family and point size as the body text.
+
+The following describes the heading macros:
+
+@DefmacList {NH, @Var{curr-level}, ms}
+@DefmacListEnd {NH, @t{S} @Var{level0} @dots{}, ms}
+Numbered heading.  The argument is either a numeric argument to indicate
+the level of the heading, or the letter@tie{}@code{S} followed by
+numeric arguments to set the heading level explicitly.
+
+If you specify heading levels out of sequence, such as invoking
+@samp{.NH 3} after @samp{.NH 1}, @code{groff} prints a warning on
+standard error.
+@endDefmac
+
+@DefstrList {SN, ms}
+@DefstrItemx {SN-DOT, ms}
+@DefstrListEndx {SN-NO-DOT, ms}
+After invocation of @code{NH}, the assigned section number is made
+available in the strings @code{SN-DOT} (as it appears in a printed
+section heading with default formatting, followed by a terminating
+period), and @code{SN-NO-DOT} (with the terminating period omitted).
+The string @code{SN} is also defined, as an alias for @code{SN-DOT}; if
+preferred, you may redefine it as an alias for @code{SN-NO-DOT}, by
+including the initialization
+@Example
+.als SN SN-NO-DOT
+@endExample
+
+@noindent
+at any time @strong{before} you would like the change to take effect.
+@endDefstr
+
+@Defstr {SN-STYLE, ms}
+You may control the style used to print section numbers, within numbered
+section headings, by defining an appropriate alias for the string
+@code{SN-STYLE}.  The default style, in which the printed section number
+is followed by a terminating period, is obtained by defining the alias
+
+@Example
+.als SN-STYLE SN-DOT
+@endExample
+
+@noindent
+If you prefer to omit the terminating period, from section numbers
+appearing in numbered section headings, you may define the alias
+
+@Example
+.als SN-STYLE SN-NO-DOT
+@endExample
+
+@noindent
+Any such change in section numbering style becomes effective from the
+next use of @code{.NH}, following redefinition of the alias for
+@code{SN-STYLE}.
+@endDefstr
+
+@Defmac {SH, [@Var{match-level}], ms}
+Unnumbered subheading.
+
+The optional @var{match-level} argument is a GNU extension.  It is a
+number indicating the level of the heading, in a manner analogous to the
+@var{curr-level} argument to @code{.NH}.  Its purpose is to match the
+point size, at which the heading is printed, to the size of a numbered
+heading at the same level, when the @code{GROWPS} and @code{PSINCR}
+heading size adjustment mechanism is in effect.  @xref{ms Document
+Control Registers}.
+@endDefmac
+
+The @code{HORPHANS} register (@pxref{ms Document Control Registers})
+operates in conjunction with the @code{NH} and @code{SH} macros, to
+inhibit the printing of orphaned section headings at the bottom of any
+page.
+
+@c ---------------------------------------------------------------------
+
+@node Highlighting in ms, Lists in ms, Headings in ms, ms Body Text
+@subsubsection Highlighting
+@cindex @code{ms} macros, highlighting
+
+The @file{ms} macros provide a variety of methods to highlight or
+emphasize text:
+
+@Defmac {B, [@Var{txt} [@Var{post} [@Var{pre}]]], ms}
+Sets its first argument in @strong{bold type}.  If you specify a second
+argument, @code{groff} prints it in the previous font after the bold
+text, with no intervening space (this allows you to set punctuation
+after the highlighted text without highlighting the punctuation).
+Similarly, it prints the third argument (if any) in the previous font
+@strong{before} the first argument.  For example,
+
+@Example
+.B foo ) (
+@endExample
+
+prints (@strong{foo}).
+
+If you give this macro no arguments, @code{groff} prints all text
+following in bold until the next highlighting, paragraph, or heading
+macro.
+@endDefmac
+
+@Defmac {R, [@Var{txt} [@Var{post} [@Var{pre}]]], ms}
+Sets its first argument in roman (or regular) type.  It operates
+similarly to the @code{B}@tie{}macro otherwise.
+@endDefmac
+
+@Defmac {I, [@Var{txt} [@Var{post} [@Var{pre}]]], ms}
+Sets its first argument in @emph{italic type}.  It operates similarly
+to the @code{B}@tie{}macro otherwise.
+@endDefmac
+
+@Defmac {CW, [@Var{txt} [@Var{post} [@Var{pre}]]], ms}
+Sets its first argument in a @code{constant width face}.  It operates
+similarly to the @code{B}@tie{}macro otherwise.
+@endDefmac
+
+@Defmac {BI, [@Var{txt} [@Var{post} [@Var{pre}]]], ms}
+Sets its first argument in bold italic type.  It operates similarly to
+the @code{B}@tie{}macro otherwise.
+@endDefmac
+
+@Defmac {BX, [@Var{txt}], ms}
+Prints its argument and draws a box around it.  If you want to box a
+string that contains spaces, use a digit-width space (@code{\0}).
+@endDefmac
+
+@Defmac {UL, [@Var{txt} [@Var{post}]], ms}
+Prints its first argument with an underline.  If you specify a second
+argument, @code{groff} prints it in the previous font after the
+underlined text, with no intervening space.
+@endDefmac
+
+@Defmac {LG, , ms}
+Prints all text following in larger type (two points larger than the
+current point size) until the next font size, highlighting, paragraph,
+or heading macro.  You can specify this macro multiple times to
+enlarge the point size as needed.
+@endDefmac
+
+@Defmac {SM, , ms}
+Prints all text following in smaller type (two points smaller than the
+current point size) until the next type size, highlighting, paragraph,
+or heading macro.  You can specify this macro multiple times to reduce
+the point size as needed.
+@endDefmac
+
+@Defmac {NL, , ms}
+Prints all text following in the normal point size (that is, the value
+of the @code{PS} register).
+@endDefmac
+
+@DefstrList {@Lbrace{}, ms}
+@DefstrListEndx {@Rbrace{}, ms}
+Text enclosed with @code{\*@{} and @code{\*@}} is printed as a
+superscript.
+@endDefstr
+
+@c ---------------------------------------------------------------------
+
+@node Lists in ms, Indentation values in ms, Highlighting in ms, ms Body Text
+@subsubsection Lists
+@cindex @code{ms} macros, lists
+
+The @code{IP} macro handles duties for all lists.
+
+@Defmac {IP, [@Var{marker} [@Var{width}]], ms}
+The @var{marker} is usually a bullet glyph (@code{\[bu]}) for unordered
+lists, a number (or auto-incrementing number register) for numbered
+lists, or a word or phrase for indented (glossary-style) lists.
+
+The @var{width} specifies the indentation for the body of each list
+item; its default unit is @samp{n}.  Once specified, the indentation
+remains the same for all list items in the document until specified
+again.
+
+The @code{PORPHANS} register (@pxref{ms Document Control Registers})
+operates in conjunction with the @code{IP} macro, to inhibit the
+printing of orphaned list markers at the bottom of any page.
+@endDefmac
+
+The following is an example of a bulleted list.
+@cindex example markup, bulleted list [@code{ms}]
+@cindex bulleted list, example markup [@code{ms}]
+
+@Example
+A bulleted list:
+.IP \[bu] 2
+lawyers
+.IP \[bu]
+guns
+.IP \[bu]
+money
+@endExample
+
+Produces:
+
+@Example
+A bulleted list:
+
+o lawyers
+
+o guns
+
+o money
+@endExample
+
+The following is an example of a numbered list.
+@cindex example markup, numbered list [@code{ms}]
+@cindex numbered list, example markup [@code{ms}]
+
+@Example
+.nr step 1 1
+A numbered list:
+.IP \n[step] 3
+lawyers
+.IP \n+[step]
+guns
+.IP \n+[step]
+money
+@endExample
+
+Produces:
+
+@Example
+A numbered list:
+
+1. lawyers
+
+2. guns
+
+3. money
+@endExample
+
+Note the use of the auto-incrementing number register in this example.
+
+The following is an example of a glossary-style list.
+@cindex example markup, glossary-style list [@code{ms}]
+@cindex glossary-style list, example markup [@code{ms}]
+
+@Example
+A glossary-style list:
+.IP lawyers 0.4i
+Two or more attorneys.
+.IP guns
+Firearms, preferably
+large-caliber.
+.IP money
+Gotta pay for those
+lawyers and guns!
+@endExample
+
+Produces:
+
+@Example
+A glossary-style list:
+
+lawyers
+      Two or more attorneys.
+
+guns  Firearms, preferably large-caliber.
+
+money
+      Gotta pay for those lawyers and guns!
+@endExample
+
+In the last example, the @code{IP} macro places the definition on the
+same line as the term if it has enough space; otherwise, it breaks to
+the next line and starts the definition below the term.  This may or may
+not be the effect you want, especially if some of the definitions break
+and some do not.  The following examples show two possible ways to force
+a break.
+
+The first workaround uses the @code{br} request to force a break after
+printing the term or label.
+
+@CartoucheExample
+A glossary-style list:
+.IP lawyers 0.4i
+Two or more attorneys.
+.IP guns
+.br
+Firearms, preferably large-caliber.
+.IP money
+Gotta pay for those lawyers and guns!
+@endCartoucheExample
+
+The second workaround uses the @code{\p} escape to force the break.
+Note the space following the escape; this is important.  If you omit the
+space, @code{groff} prints the first word on the same line as the term
+or label (if it fits) @strong{then} breaks the line.
+
+@CartoucheExample
+A glossary-style list:
+.IP lawyers 0.4i
+Two or more attorneys.
+.IP guns
+\p Firearms, preferably large-caliber.
+.IP money
+Gotta pay for those lawyers and guns!
+@endCartoucheExample
+
+To set nested lists, use the @code{RS} and @code{RE} macros.
+@xref{Indentation values in ms}, for more information.
+@cindex @code{ms} macros, nested lists
+@cindex nested lists [@code{ms}]
+
+For example:
+
+@CartoucheExample
+.IP \[bu] 2
+Lawyers:
+.RS
+.IP \[bu]
+Dewey,
+.IP \[bu]
+Cheatham,
+.IP \[bu]
+and Howe.
+.RE
+.IP \[bu]
+Guns
+@endCartoucheExample
+
+Produces:
+
+@Example
+o Lawyers:
+
+  o  Dewey,
+
+  o  Cheatham,
+
+  o  and Howe.
+
+o Guns
+@endExample
+
+@c ---------------------------------------------------------------------
+
+@node Indentation values in ms, Tabstops in ms, Lists in ms, ms Body Text
+@subsubsection Indentation values
+
+In many situations, you may need to indentation a section of text while
+still wrapping and filling.  @xref{Lists in ms}, for an example of
+nested lists.
+
+@DefmacList {RS, , ms}
+@DefmacListEndx {RE, , ms}
+These macros begin and end an indented section.  The @code{PI} register
+controls the amount of indentation, allowing the indented text to line
+up under hanging and indented paragraphs.
+@endDefmac
+
+@xref{ms Displays and Keeps}, for macros to indentation and turn off
+filling.
+
+@c ---------------------------------------------------------------------
+
+@node Tabstops in ms, ms Displays and Keeps, Indentation values in ms, ms Body Text
+@subsubsection Tab Stops
+
+Use the @code{ta} request to define tab stops as needed.  @xref{Tabs and
+Fields}.
+
+@Defmac {TA, , ms}
+Use this macro to reset the tab stops to the default for @file{ms}
+(every 5n).  You can redefine the @code{TA} macro to create a different
+set of default tab stops.
+@endDefmac
+
+@c ---------------------------------------------------------------------
+
+@node ms Displays and Keeps, ms Insertions, Tabstops in ms, ms Body Text
+@subsubsection Displays and keeps
+@cindex @code{ms} macros, displays
+@cindex @code{ms} macros, keeps
+@cindex keeps [@code{ms}]
+@cindex displays [@code{ms}]
+
+Use displays to show text-based examples or figures (such as code
+listings).
+
+Displays turn off filling, so lines of code are displayed as-is without
+inserting @code{br} requests in between each line.  Displays can be
+@dfn{kept} on a single page, or allowed to break across pages.
+
+@DefmacList {DS, @t{L}, ms}
+@DefmacItemx {LD, , ms}
+@DefmacListEndx {DE, , ms}
+Left-justified display.  The @samp{.DS L} call generates a page break,
+if necessary, to keep the entire display on one page.  The @code{LD}
+macro allows the display to break across pages.  The @code{DE} macro
+ends the display.
+@endDefmac
+
+@DefmacList {DS, @t{I}, ms}
+@DefmacItemx {ID, , ms}
+@DefmacListEndx {DE, , ms}
+Indents the display as defined by the @code{DI} register.  The @samp{.DS
+I} call generates a page break, if necessary, to keep the entire display
+on one page.  The @code{ID} macro allows the display to break across
+pages.  The @code{DE} macro ends the display.
+@endDefmac
+
+@DefmacList {DS, @t{B}, ms}
+@DefmacItemx {BD, , ms}
+@DefmacListEndx {DE, , ms}
+Sets a block-centered display: the entire display is left-justified, but
+indented so that the longest line in the display is centered on the
+page.  The @samp{.DS B} call generates a page break, if necessary, to
+keep the entire display on one page.  The @code{BD} macro allows the
+display to break across pages.  The @code{DE} macro ends the display.
+@endDefmac
+
+@DefmacList {DS, @t{C}, ms}
+@DefmacItemx {CD, , ms}
+@DefmacListEndx {DE, , ms}
+Sets a centered display: each line in the display is centered.  The
+@samp{.DS C} call generates a page break, if necessary, to keep the
+entire display on one page.  The @code{CD} macro allows the display to
+break across pages.  The @code{DE} macro ends the display.
+@endDefmac
+
+@DefmacList {DS, @t{R}, ms}
+@DefmacItemx {RD, , ms}
+@DefmacListEndx {DE, , ms}
+Right-justifies each line in the display.  The @samp{.DS R} call
+generates a page break, if necessary, to keep the entire display on one
+page.  The @code{RD} macro allows the display to break across pages.
+The @code{DE} macro ends the display.
+@endDefmac
+
+@DefmacList {Ds, , ms}
+@DefmacListEndx {De, , ms}
+These two macros were formerly provided as aliases for @code{DS} and
+@code{DE}, respectively.  They have been removed, and should no longer
+be used.  The original implementations of @code{DS} and @code{DE} are
+retained, and should be used instead.  X11 documents that actually use
+@code{Ds} and @code{De} always load a specific macro file from the X11
+distribution (@file{macros.t}) that provides proper definitions for the
+two macros.
+@endDefmac
+
+On occasion, you may want to @dfn{keep} other text together on a page.
+For example, you may want to keep two paragraphs together, or a
+paragraph that refers to a table (or list, or other item) immediately
+following.  The @file{ms} macros provide the @code{KS} and @code{KE}
+macros for this purpose.
+
+@DefmacList {KS, , ms}
+@DefmacListEndx {KE, , ms}
+The @code{KS} macro begins a block of text to be kept on a single page,
+and the @code{KE} macro ends the block.
+@endDefmac
+
+@DefmacList {KF, , ms}
+@DefmacListEndx {KE, , ms}
+Specifies a @dfn{floating keep}; if the keep cannot fit on the current
+page, @code{groff} holds the contents of the keep and allows text
+following the keep (in the source file) to fill in the remainder of the
+current page.  When the page breaks, whether by an explicit @code{bp}
+request or by reaching the end of the page, @code{groff} prints the
+floating keep at the top of the new page.  This is useful for printing
+large graphics or tables that do not need to appear exactly where
+specified.
+@endDefmac
+
+You can also use the @code{ne} request to force a page break if there is
+not enough vertical space remaining on the page.
+
+Use the following macros to draw a box around a section of text (such as
+a display).
+
+@DefmacList {B1, , ms}
+@DefmacListEndx {B2, , ms}
+Marks the beginning and ending of text that is to have a box drawn
+around it.  The @code{B1} macro begins the box; the @code{B2} macro ends
+it.  Text in the box is automatically placed in a diversion (keep).
+@endDefmac
+
+@c ---------------------------------------------------------------------
+
+@node ms Insertions, Example multi-page table, ms Displays and Keeps, ms Body Text
+@subsubsection Tables, figures, equations, and references
+@cindex @code{ms} macros, tables
+@cindex @code{ms} macros, figures
+@cindex @code{ms} macros, equations
+@cindex @code{ms} macros, references
+@cindex tables [@code{ms}]
+@cindex figures [@code{ms}]
+@cindex equations [@code{ms}]
+@cindex references [@code{ms}]
+
+The @file{ms} macros support the standard @code{groff} preprocessors:
+@code{tbl}, @code{pic}, @code{eqn}, and @code{refer}.
+@pindex tbl
+@pindex pic
+@pindex eqn
+@pindex refer
+You mark text meant for preprocessors by enclosing it in pairs of tags
+as follows.
+
+@DefmacList {TS, [@code{H}], ms}
+@DefmacListEndx {TE, , ms}
+Denotes a table, to be processed by the @code{tbl} preprocessor.  The
+optional argument@tie{}@code{H} to @code{TS} instructs @code{groff} to
+create a running header with the information up to the @code{TH} macro.
+@code{groff} prints the header at the beginning of the table; if the
+table runs onto another page, @code{groff} prints the header on the next
+page as well.
+@endDefmac
+
+@DefmacList {PS, , ms}
+@DefmacListEndx {PE, , ms}
+Denotes a graphic, to be processed by the @code{pic} preprocessor.  You
+can create a @code{pic} file by hand, using the @acronym{AT&T}
+@code{pic} manual available on the Web as a reference, or by using a
+graphics program such as @code{xfig}.
+@endDefmac
+
+@DefmacList {EQ, [@Var{align}], ms}
+@DefmacListEndx {EN, , ms}
+Denotes an equation, to be processed by the @code{eqn} preprocessor.
+The optional @var{align} argument can be @code{C}, @code{L},
+or@tie{}@code{I} to center (the default), left-justify, or indent the
+equation.
+@endDefmac
+
+@DefmacList {[, , ms}
+@DefmacListEndx {], , ms}
+Denotes a reference, to be processed by the @code{refer} preprocessor.
+The GNU @cite{refer(1)} man page provides a comprehensive reference to
+the preprocessor and the format of the bibliographic database.
+@endDefmac
+
+@menu
+* Example multi-page table::
+@end menu
+
+@c ---------------------------------------------------------------------
+
+@node Example multi-page table, ms Footnotes, ms Insertions, ms Body Text
+@subsubsection An example multi-page table
+@cindex example markup, multi-page table [@code{ms}]
+@cindex multi-page table, example markup [@code{ms}]
+
+The following is an example of how to set up a table that may print
+across two or more pages.
+
+@CartoucheExample
+.TS H
+allbox expand;
+cb | cb .
+Text      ...of heading...
+_
+.TH
+.T&
+l | l .
+... the rest of the table follows...
+.CW
+.TE
+@endCartoucheExample
+
+@c ---------------------------------------------------------------------
+
+@node ms Footnotes,  , Example multi-page table, ms Body Text
+@subsubsection Footnotes
+@cindex @code{ms} macros, footnotes
+@cindex footnotes [@code{ms}]
+
+The @file{ms} macro package has a flexible footnote system.  You can
+specify either numbered footnotes or symbolic footnotes (that is, using
+a marker such as a dagger symbol).
+
+@Defstr {*, ms}
+Specifies the location of a numbered footnote marker in the text.
+@endDefesc
+
+@DefmacList {FS, , ms}
+@DefmacListEndx {FE, , ms}
+Specifies the text of the footnote.  The default action is to create a
+numbered footnote; you can create a symbolic footnote by specifying a
+@dfn{mark} glyph (such as @code{\[dg]} for the dagger glyph) in the body
+text and as an argument to the @code{FS} macro, followed by the text of
+the footnote and the @code{FE} macro.
+@endDefmac
+
+You can control how @code{groff} prints footnote numbers by changing the
+value of the @code{FF} register.  @xref{ms Document Control Registers}.
+
+@cindex footnotes, and keeps [@code{ms}]
+@cindex keeps, and footnotes [@code{ms}]
+@cindex footnotes, and displays [@code{ms}]
+@cindex displays, and footnotes [@code{ms}]
+Footnotes can be safely used within keeps and displays, but you should
+avoid using numbered footnotes within floating keeps.  You can set a
+second @code{\**} marker between a @code{\**} and its corresponding
+@code{.FS} entry; as long as each @code{FS} macro occurs @emph{after}
+the corresponding @code{\**} and the occurrences of @code{.FS} are in
+the same order as the corresponding occurrences of @code{\**}.
+
+@c ---------------------------------------------------------------------
+
+@node ms Page Layout, Differences from AT&T ms, ms Body Text, ms
+@subsection Page layout
+@cindex @code{ms} macros, page layout
+@cindex page layout [@code{ms}]
+
+The default output from the @file{ms} macros provides a minimalist page
+layout: it prints a single column, with the page number centered at the
+top of each page.  It prints no footers.
+
+You can change the layout by setting the proper number registers and
+strings.
+
+@menu
+* ms Headers and Footers::
+* ms Margins::
+* ms Multiple Columns::
+* ms TOC::
+* ms Strings and Special Characters::
+@end menu
+
+@c ---------------------------------------------------------------------
+
+@node ms Headers and Footers, ms Margins, ms Page Layout, ms Page Layout
+@subsubsection Headers and footers
+@cindex @code{ms} macros, headers
+@cindex @code{ms} macros, footers
+@cindex headers [@code{ms}]
+@cindex footers [@code{ms}]
+
+For documents that do not distinguish between odd and even pages, set
+the following strings:
+
+@DefstrList {LH, ms}
+@DefstrItemx {CH, ms}
+@DefstrListEndx {RH, ms}
+Sets the left, center, and right headers.
+@endDefstr
+
+@DefstrList {LF, ms}
+@DefstrItemx {CF, ms}
+@DefstrListEndx {RF, ms}
+Sets the left, center, and right footers.
+@endDefstr
+
+For documents that need different information printed in the even and
+odd pages, use the following macros:
+
+@DefmacList {OH, @t{'}@Var{left}@t{'}@Var{center}@t{'}@Var{right}@t{'}, ms}
+@DefmacItemx {EH, @t{'}@Var{left}@t{'}@Var{center}@t{'}@Var{right}@t{'}, ms}
+@DefmacItemx {OF, @t{'}@Var{left}@t{'}@Var{center}@t{'}@Var{right}@t{'}, ms}
+@DefmacListEndx {EF, @t{'}@Var{left}@t{'}@Var{center}@t{'}@Var{right}@t{'}, ms}
+The @code{OH} and @code{EH} macros define headers for the odd and even
+pages; the @code{OF} and @code{EF} macros define footers for the odd and
+even pages.  This is more flexible than defining the individual strings.
+
+You can replace the quote (@code{'}) marks with any character not
+appearing in the header or footer text.
+@endDefmac
+
+To specify custom header and footer processing, redefine the following
+macros:
+
+@DefmacList {PT,, ms}
+@DefmacItemx {HD,, ms}
+@DefmacListEndx {BT,, ms}
+The @code{PT} macro defines a custom header; the @code{BT} macro defines
+a custom footer.  These macros must handle odd/even/first page
+differences if necessary.
+
+The @code{HD} macro defines additional header processing to take place
+after executing the @code{PT} macro.
+@endDefmac
+
+@c ---------------------------------------------------------------------
+
+@node ms Margins, ms Multiple Columns, ms Headers and Footers, ms Page Layout
+@subsubsection Margins
+@cindex @code{ms} macros, margins
+
+You control margins using a set of number registers.  @xref{ms Document
+Control Registers}, for details.
+
+@c ---------------------------------------------------------------------
+
+@node ms Multiple Columns, ms TOC, ms Margins, ms Page Layout
+@subsubsection Multiple columns
+@cindex @code{ms} macros, multiple columns
+@cindex multiple columns [@code{ms}]
+
+The @file{ms} macros can set text in as many columns as do reasonably
+fit on the page.  The following macros are available; all of them force
+a page break if a multi-column mode is already set.  However, if the
+current mode is single-column, starting a multi-column mode does
+@emph{not} force a page break.
+
+@Defmac {1C, , ms}
+Single-column mode.
+@endDefmac
+
+@Defmac {2C, , ms}
+Two-column mode.
+@endDefmac
+
+@Defmac {MC, [@Var{width} [@Var{gutter}]], ms}
+Multi-column mode.  If you specify no arguments, it is equivalent to the
+@code{2C} macro.  Otherwise, @var{width} is the width of each column and
+@var{gutter} is the space between columns.  The @code{MINGW} number
+register controls the default gutter width.
+@endDefmac
+
+@c ---------------------------------------------------------------------
+
+@node ms TOC, ms Strings and Special Characters, ms Multiple Columns, ms Page Layout
+@subsubsection Creating a table of contents
+@cindex @code{ms} macros, creating table of contents
+@cindex table of contents, creating [@code{ms}]
+
+The facilities in the @file{ms} macro package for creating a table of
+contents are semi-automated at best.  Assuming that you want the table
+of contents to consist of the document's headings, you need to repeat
+those headings wrapped in @code{XS} and @code{XE} macros.
+
+@DefmacList {XS, [@Var{page}], ms}
+@DefmacItemx {XA, [@Var{page}], ms}
+@DefmacListEndx {XE, , ms}
+These macros define a table of contents or an individual entry in the
+table of contents, depending on their use.  The macros are very simple;
+they cannot indent a heading based on its level.  The easiest way to
+work around this is to add tabs to the table of contents string.  The
+following is an example:
+
+@CartoucheExample
+.NH 1
+Introduction
+.XS
+Introduction
+.XE
+.LP
+...
+.CW
+.NH 2
+Methodology
+.XS
+Methodology
+.XE
+.LP
+...
+@endCartoucheExample
+
+You can manually create a table of contents by beginning with the
+@code{XS} macro for the first entry, specifying the page number for that
+entry as the argument to @code{XS}.  Add subsequent entries using the
+@code{XA} macro, specifying the page number for that entry as the
+argument to @code{XA}.  The following is an example:
+
+@CartoucheExample
+.XS 1
+Introduction
+.XA 2
+A Brief History of the Universe
+.XA 729
+Details of Galactic Formation
+...
+.XE
+@endCartoucheExample
+@endDefmac
+
+@Defmac {TC, [@code{no}], ms}
+Prints the table of contents on a new page, setting the page number
+to@tie{}@strong{i} (Roman lowercase numeral one).  You should usually
+place this macro at the end of the file, since @code{groff} is a
+single-pass formatter and can only print what has been collected up to
+the point that the @code{TC} macro appears.
+
+The optional argument @code{no} suppresses printing the title specified
+by the string register @code{TOC}.
+@endDefmac
+
+@Defmac {PX, [@code{no}], ms}
+Prints the table of contents on a new page, using the current page
+numbering sequence.  Use this macro to print a manually-generated table
+of contents at the beginning of your document.
+
+The optional argument @code{no} suppresses printing the title specified
+by the string register @code{TOC}.
+@endDefmac
+
+The @cite{Groff and Friends HOWTO} includes a @code{sed} script that
+automatically inserts @code{XS} and @code{XE} macro entries after each
+heading in a document.
+
+Altering the @code{NH} macro to automatically build the table of
+contents is perhaps initially more difficult, but would save a great
+deal of time in the long run if you use @file{ms} regularly.
+
+@c ---------------------------------------------------------------------
+
+@node ms Strings and Special Characters,  , ms TOC, ms Page Layout
+@subsubsection Strings and Special Characters
+@cindex @code{ms} macros, strings
+@cindex @code{ms} macros, special characters
+@cindex @code{ms} macros, accent marks
+@cindex accent marks [@code{ms}]
+@cindex special characters [@code{ms}]
+@cindex strings [@code{ms}]
+
+The @file{ms} macros provide the following predefined strings.  You can
+change the string definitions to help in creating documents in languages
+other than English.
+
+@Defstr {REFERENCES, ms}
+Contains the string printed at the beginning of the references
+(bibliography) page.  The default is @samp{References}.
+@endDefstr
+
+@Defstr {ABSTRACT, ms}
+Contains the string printed at the beginning of the abstract.  The
+default is @samp{ABSTRACT}.
+@endDefstr
+
+@Defstr {TOC, ms}
+Contains the string printed at the beginning of the table of contents.
+@endDefstr
+
+@DefstrList {MONTH1, ms}
+@DefstrItemx {MONTH2, ms}
+@DefstrItemx {MONTH3, ms}
+@DefstrItemx {MONTH4, ms}
+@DefstrItemx {MONTH5, ms}
+@DefstrItemx {MONTH6, ms}
+@DefstrItemx {MONTH7, ms}
+@DefstrItemx {MONTH8, ms}
+@DefstrItemx {MONTH9, ms}
+@DefstrItemx {MONTH10, ms}
+@DefstrItemx {MONTH11, ms}
+@DefstrListEndx {MONTH12, ms}
+Prints the full name of the month in dates.  The default is
+@samp{January}, @samp{February}, etc.
+@endDefstr
+
+The following special characters are available@footnote{For an
+explanation what special characters are see @ref{Special Characters}.}:
+
+@Defstr {-, ms}
+Prints an em dash.
+@endDefstr
+
+@DefstrList {Q, ms}
+@DefstrListEndx {U, ms}
+Prints typographer's quotes in troff, and plain quotes in nroff.
+@code{\*Q} is the left quote and @code{\*U} is the right quote.
+@endDefstr
+
+Improved accent marks are available in the @file{ms} macros.
+
+@Defmac {AM, , ms}
+Specify this macro at the beginning of your document to enable extended
+accent marks and special characters.  This is a Berkeley extension.
+
+To use the accent marks, place them @strong{after} the character being
+accented.
+
+Note that groff's native support for accents is superior to the
+following definitions.
+@endDefmac
+
+The following accent marks are available after invoking the @code{AM}
+macro:
+
+@Defstr {', ms}
+Acute accent.
+@endDefstr
+
+@Defstr {`, ms}
+Grave accent.
+@endDefstr
+
+@Defstr {^, ms}
+Circumflex.
+@endDefstr
+
+@Defstr {\,, ms}
+Cedilla.
+@endDefstr
+
+@Defstr {~, ms}
+Tilde.
+@endDefstr
+
+@deffn String @t{\*[:]}
+@ifnotinfo
+@stindex : @r{[}ms@r{]}
+@end ifnotinfo
+@ifinfo
+@stindex \*[@r{<colon>}] @r{[}ms@r{]}
+@end ifinfo
+Umlaut.
+@end deffn
+
+@Defstr {v, ms}
+Hacek.
+@endDefstr
+
+@Defstr {_, ms}
+Macron (overbar).
+@endDefstr
+
+@Defstr {., ms}
+Underdot.
+@endDefstr
+
+@Defstr {o, ms}
+Ring above.
+@endDefstr
+
+The following are standalone characters available after invoking the
+@code{AM} macro:
+
+@Defstr {?, ms}
+Upside-down question mark.
+@endDefstr
+
+@Defstr {!, ms}
+Upside-down exclamation point.
+@endDefstr
+
+@Defstr {8, ms}
+German � ligature.
+@endDefstr
+
+@Defstr {3, ms}
+Yogh.
+@endDefstr
+
+@Defstr {Th, ms}
+Uppercase thorn.
+@endDefstr
+
+@Defstr {th, ms}
+Lowercase thorn.
+@endDefstr
+
+@Defstr {D-, ms}
+Uppercase eth.
+@endDefstr
+
+@Defstr {d-, ms}
+Lowercase eth.
+@endDefstr
+
+@Defstr {q, ms}
+Hooked o.
+@endDefstr
+
+@Defstr {ae, ms}
+Lowercase � ligature.
+@endDefstr
+
+@Defstr {Ae, ms}
+Uppercase � ligature.
+@endDefstr
+
+@c ---------------------------------------------------------------------
+
+@node Differences from AT&T ms, Naming Conventions, ms Page Layout, ms
+@subsection Differences from @acronym{AT&T} @file{ms}
+@cindex @code{ms} macros, differences from @acronym{AT&T}
+@cindex @acronym{AT&T} @code{troff}, @code{ms} macro package differences
+
+This section lists the (minor) differences between the @code{groff -ms}
+macros and @acronym{AT&T} @code{troff -ms} macros.
+
+@itemize @bullet
+@item
+The internals of @code{groff -ms} differ from the internals of
+@acronym{AT&T} @code{troff -ms}.  Documents that depend upon
+implementation details of @acronym{AT&T} @code{troff -ms} may not format
+properly with @code{groff -ms}.
+
+@item
+The general error-handling policy of @code{groff -ms} is to detect and
+report errors, rather than silently to ignore them.
+
+@item
+@code{groff -ms} does not work in compatibility mode (this is, with the
+@option{-C} option).
+
+@item
+There is no special support for typewriter-like devices.
+
+@item
+@code{groff -ms} does not provide cut marks.
+
+@item
+Multiple line spacing is not supported.  Use a larger vertical spacing
+instead.
+
+@item
+Some @acronym{UNIX} @code{ms} documentation says that the @code{CW} and
+@code{GW} number registers can be used to control the column width and
+gutter width, respectively.  These number registers are not used in
+@code{groff -ms}.
+
+@item
+Macros that cause a reset (paragraphs, headings, etc.@:) may change the
+indentation.  Macros that change the indentation do not increment or
+decrement the indentation, but rather set it absolutely.  This can cause
+problems for documents that define additional macros of their own.  The
+solution is to use not the @code{in} request but instead the @code{RS}
+and @code{RE} macros.
+
+@item
+To make @code{groff -ms} use the default page offset (which also
+specifies the left margin), the @code{PO} register must stay undefined
+until the first @file{-ms} macro is evaluated.  This implies that
+@code{PO} should not be used early in the document, unless it is changed
+also: Remember that accessing an undefined register automatically
+defines it.
+@end itemize
+
+@Defmpreg {GS, ms}
+This number register is set to@tie{}1 by the @code{groff -ms} macros,
+but it is not used by the @code{AT&T} @code{troff -ms} macros.
+Documents that need to determine whether they are being formatted with
+@code{AT&T} @code{troff -ms} or @code{groff -ms} should use this number
+register.
+@endDefmpreg
+
+Emulations of a few ancient Bell Labs macros can be re-enabled by
+calling the otherwise undocumented @code{SC} section-header macro.
+Calling @code{SC} enables @code{UC} for marking up a product or
+application name, and the pair @code{P1}/@code{P2} for surrounding code
+example displays.
+
+These are not enabled by default because (a)@tie{}they were not
+documented, in the original @code{ms} manual, and (b)@tie{}the @code{P1}
+and @code{UC} macros collide with different macros with the same names
+in the Berkeley version of @code{ms}.
+
+These @code{groff} emulations are sufficient to give back the 1976
+Kernighan@tie{}& Cherry paper @cite{Typsetting Mathematics -- User's
+Guide} its section headings, and restore some text that had gone missing
+as arguments of undefined macros.  No warranty express or implied is
+given as to how well the typographic details these produce match the
+original Bell Labs macros.
+
+@menu
+* Missing ms Macros::
+* Additional ms Macros::
+@end menu
+
+@c ---------------------------------------------------------------------
+
+@node Missing ms Macros, Additional ms Macros, Differences from AT&T ms, Differences from AT&T ms
+@subsubsection @code{troff} macros not appearing in @code{groff}
+
+Macros missing from @code{groff -ms} are cover page macros specific to
+Bell Labs and Berkeley.  The macros known to be missing are:
+
+@table @code
+@item .TM
+Technical memorandum; a cover sheet style
+
+@item .IM
+Internal memorandum; a cover sheet style
+
+@item .MR
+Memo for record; a cover sheet style
+
+@item .MF
+Memo for file; a cover sheet style
+
+@item .EG
+Engineer's notes; a cover sheet style
+
+@item .TR
+Computing Science Tech Report; a cover sheet style
+
+@item .OK
+Other keywords
+
+@item .CS
+Cover sheet information
+
+@item .MH
+A cover sheet macro
+@end table
+
+@c ---------------------------------------------------------------------
+
+@node Additional ms Macros,  , Missing ms Macros, Differences from AT&T ms
+@subsubsection @code{groff} macros not appearing in @acronym{AT&T} @code{troff}
+
+The @code{groff -ms} macros have a few minor extensions compared to the
+@acronym{AT&T} @code{troff -ms} macros.
+
+@Defmac {AM, , ms}
+Improved accent marks.  @xref{ms Strings and Special Characters}, for
+details.
+@endDefmac
+
+@Defmac {DS, @t{I}, ms}
+Indented display.  The default behavior of @acronym{AT&T} @code{troff
+-ms} was to indent; the @code{groff} default prints displays flush left
+with the body text.
+@endDefmac
+
+@Defmac {CW, , ms}
+Print text in @code{constant width} (Courier) font.
+@endDefmac
+
+@Defmac {IX, , ms}
+Indexing term (printed on standard error).  You can write a script to
+capture and process an index generated in this manner.
+@endDefmac
+
+The following additional number registers
+appear in @code{groff -ms}:
+
+@Defmpreg {MINGW, ms}
+Specifies a minimum space between columns (for multi-column output);
+this takes the place of the @code{GW} register that was documented but
+apparently not implemented in @acronym{AT&T} @code{troff}.
+@endDefmpreg
+
+Several new string registers are available as well.  You can change
+these to handle (for example) the local language.  @xref{ms Strings and
+Special Characters}, for details.
+
+@c ---------------------------------------------------------------------
+
+@node Naming Conventions,  , Differences from AT&T ms, ms
+@subsection Naming Conventions
+@cindex @code{ms} macros, naming conventions
+@cindex naming conventions, @code{ms} macros
+
+The following conventions are used for names of macros, strings and
+number registers.  External names available to documents that use the
+@code{groff -ms} macros contain only uppercase letters and digits.
+
+Internally the macros are divided into modules; naming conventions are
+as follows:
+
+@itemize @bullet
+@item
+Names used only within one module are of the form
+@var{module}@code{*}@var{name}.
+
+@item
+Names used outside the module in which they are defined are of the form
+@var{module}@code{@@}@var{name}.
+
+@item
+Names associated with a particular environment are of the form
+@var{environment}@code{:}@var{name}; these are used only within the
+@code{par} module.
+
+@item
+@var{name} does not have a module prefix.
+
+@item
+Constructed names used to implement arrays are of the form
+@var{array}@code{!}@var{index}.
+@end itemize
+
+Thus the groff ms macros reserve the following names:
+
+@itemize @bullet
+@item
+Names containing the characters @code{*}, @code{@@}, and@tie{}@code{:}.
+
+@item
+Names containing only uppercase letters and digits.
+@end itemize
+
+
+@c =====================================================================
+
+@node me, mm, ms, Macro Packages
+@section @file{me}
+@cindex @code{me} macro package
+
+@c XXX documentation
+@c XXX this is a placeholder until we get stuff knocked into shape
+See the @file{meintro.me} and @file{meref.me} documents in groff's
+@file{doc} directory.
+
+
+@c =====================================================================
+
+@node mm, mom, me, Macro Packages
+@section @file{mm}
+@cindex @code{mm} macro package
+
+@c XXX documentation
+@c XXX this is a placeholder until we get stuff knocked into shape
+See the @cite{groff_mm(7)} man page (type @command{man groff_mm} at the
+command line).
+
+
+@c =====================================================================
+
+@node mom,  , mm, Macro Packages
+@section @file{mom}
+@cindex @code{mom} macro package
+
+@c XXX documentation
+@c XXX this is a placeholder until we get stuff knocked into shape
+See the @cite{groff_mom(7)} man page (type @command{man groff_mom} at
+the command line), which gives a short overview and a link to its
+extensive documentation in HTML format.
+
+
+
+@c =====================================================================
+@c =====================================================================
+
+@node gtroff Reference, Preprocessors, Macro Packages, Top
+@chapter @code{gtroff} Reference
+@cindex reference, @code{gtroff}
+@cindex @code{gtroff}, reference
+
+This chapter covers @strong{all} of the facilities of @code{gtroff}.
+Users of macro packages may skip it if not interested in details.
+
+
+@menu
+* Text::
+* Measurements::
+* Expressions::
+* Identifiers::
+* Embedded Commands::
+* Registers::
+* Manipulating Filling and Adjusting::
+* Manipulating Hyphenation::
+* Manipulating Spacing::
+* Tabs and Fields::
+* Character Translations::
+* Troff and Nroff Mode::
+* Line Layout::
+* Line Control::
+* Page Layout::
+* Page Control::
+* Fonts and Symbols::
+* Sizes::
+* Strings::
+* Conditionals and Loops::
+* Writing Macros::
+* Page Motions::
+* Drawing Requests::
+* Traps::
+* Diversions::
+* Environments::
+* Suppressing output::
+* Colors::
+* I/O::
+* Postprocessor Access::
+* Miscellaneous::
+* Gtroff Internals::
+* Debugging::
+* Implementation Differences::
+@end menu
+
+
+@c =====================================================================
+
+@node Text, Measurements, gtroff Reference, gtroff Reference
+@section Text
+@cindex text, @code{gtroff} processing
+
+@code{gtroff} input files contain text with control commands
+interspersed throughout.  But, even without control codes, @code{gtroff}
+still does several things with the input text:
+
+@itemize @bullet
+@item
+filling and adjusting
+
+@item
+adding additional space after sentences
+
+@item
+hyphenating
+
+@item
+inserting implicit line breaks
+@end itemize
+
+@menu
+* Filling and Adjusting::
+* Hyphenation::
+* Sentences::
+* Tab Stops::
+* Implicit Line Breaks::
+* Input Conventions::
+* Input Encodings::
+@end menu
+
+@c ---------------------------------------------------------------------
+
+@node Filling and Adjusting, Hyphenation, Text, Text
+@subsection Filling and Adjusting
+@cindex filling
+@cindex adjusting
+
+When @code{gtroff} reads text, it collects words from the input and fits
+as many of them together on one output line as it can.  This is known as
+@dfn{filling}.
+
+@cindex leading spaces
+@cindex spaces, leading and trailing
+@cindex extra spaces
+@cindex trailing spaces
+Once @code{gtroff} has a @dfn{filled} line, it tries to @dfn{adjust} it.
+This means it widens the spacing between words until the text reaches
+the right margin (in the default adjustment mode).  Extra spaces between
+words are preserved, but spaces at the end of lines are ignored.  Spaces
+at the front of a line cause a @dfn{break} (breaks are explained in
+@ref{Implicit Line Breaks}).
+
+@xref{Manipulating Filling and Adjusting}.
+
+@c ---------------------------------------------------------------------
+
+@node Hyphenation, Sentences, Filling and Adjusting, Text
+@subsection Hyphenation
+@cindex hyphenation
+
+Since the odds are not great for finding a set of words, for every
+output line, which fit nicely on a line without inserting excessive
+amounts of space between words, @code{gtroff} hyphenates words so that
+it can justify lines without inserting too much space between words.  It
+uses an internal hyphenation algorithm (a simplified version of the
+algorithm used within @TeX{}) to indicate which words can be hyphenated
+and how to do so.  When a word is hyphenated, the first part of the word
+is added to the current filled line being output (with an attached
+hyphen), and the other portion is added to the next line to be filled.
+
+@xref{Manipulating Hyphenation}.
+
+@c ---------------------------------------------------------------------
+
+@node Sentences, Tab Stops, Hyphenation, Text
+@subsection Sentences
+@cindex sentences
+
+Although it is often debated, some typesetting rules say there should be
+different amounts of space after various punctuation marks.  For
+example, the @cite{Chicago typsetting manual} says that a period at the
+end of a sentence should have twice as much space following it as would
+a comma or a period as part of an abbreviation.
+
+@c XXX exact citation of Chicago manual
+
+@cindex sentence space
+@cindex space between sentences
+@cindex french-spacing
+@code{gtroff} does this by flagging certain characters (normally
+@samp{!}, @samp{?}, and @samp{.}) as @dfn{end-of-sentence} characters.
+When @code{gtroff} encounters one of these characters at the end of a
+line, it appends a normal space followed by a @dfn{sentence space} in
+the formatted output.  (This justifies one of the conventions mentioned
+in @ref{Input Conventions}.)
+
+@cindex transparent characters
+@cindex character, transparent
+@cindex @code{dg} glyph, at end of sentence
+@cindex @code{rq} glyph, at end of sentence
+@cindex @code{cq} glyph, at end of sentence
+@cindex @code{"}, at end of sentence
+@cindex @code{'}, at end of sentence
+@cindex @code{)}, at end of sentence
+@cindex @code{]}, at end of sentence
+@cindex @code{*}, at end of sentence
+In addition, the following characters and symbols are treated
+transparently while handling end-of-sentence characters: @samp{"},
+@samp{'}, @samp{)}, @samp{]}, @samp{*}, @code{\[dg]}, @code{\[rq]}, and
+@code{\[cq]}.
+
+See the @code{cflags} request in @ref{Using Symbols}, for more details.
+
+@cindex @code{\&}, at end of sentence
+To prevent the insertion of extra space after an end-of-sentence
+character (at the end of a line), append @code{\&}.
+
+@c ---------------------------------------------------------------------
+
+@node Tab Stops, Implicit Line Breaks, Sentences, Text
+@subsection Tab Stops
+@cindex tab stops
+@cindex stops, tabulator
+@cindex tab character
+@cindex character, tabulator
+
+@cindex @acronym{EBCDIC} encoding
+@cindex encoding, @acronym{EBCDIC}
+@code{gtroff} translates @dfn{tabulator characters}, also called
+@dfn{tabs} (normally code point @acronym{ASCII} @code{0x09} or
+@acronym{EBCDIC} @code{0x05}), in the input into movements to the next
+tabulator stop.  These tab stops are initially located every half inch
+across the page.  Using this, simple tables can be made easily.
+However, it can often be deceptive as the appearance (and width) of the
+text on a terminal and the results from @code{gtroff} can vary greatly.
+
+Also, a possible sticking point is that lines beginning with tab
+characters are still filled, again producing unexpected results.  For
+example, the following input
+
+@multitable {12345678} {12345678} {12345678} {12345678}
+@item
+@tab 1 @tab 2 @tab 3
+@item
+@tab   @tab 4 @tab 5
+@end multitable
+
+@noindent
+produces
+
+@multitable {12345678} {12345678} {12345678} {12345678} {12345678} {12345678} {12345678}
+@item
+@tab 1 @tab 2 @tab 3 @tab   @tab 4 @tab 5
+@end multitable
+
+@xref{Tabs and Fields}.
+
+@c ---------------------------------------------------------------------
+
+@node Implicit Line Breaks, Input Conventions, Tab Stops, Text
+@subsection Implicit Line Breaks
+@cindex implicit line breaks
+@cindex implicit breaks of lines
+@cindex line, implicit breaks
+@cindex break, implicit
+@cindex line break
+
+An important concept in @code{gtroff} is the @dfn{break}.  When a break
+occurs, @code{gtroff} outputs the partially filled line (unjustified),
+and resumes collecting and filling text on the next output line.
+
+@cindex blank line
+@cindex empty line
+@cindex line, blank
+@cindex blank line macro (@code{blm})
+There are several ways to cause a break in @code{gtroff}.  A blank line
+not only causes a break, but it also outputs a one-line vertical space
+(effectively a blank line).  Note that this behaviour can be modified
+with the blank line macro request @code{blm}.  @xref{Blank Line Traps}.
+
+@cindex fill mode
+@cindex mode, fill
+@cindex leading spaces macro (@code{lsm})
+A line that begins with a space causes a break and the space is output
+at the beginning of the next line.  Note that this space isn't adjusted,
+even in fill mode; however, the behaviour can be modified with the
+leading spaces macro request @code{lsm}.  @xref{Leading Spaces Traps}.
+
+The end of file also causes a break -- otherwise the last line of the
+document may vanish!
+
+Certain requests also cause breaks, implicitly or explicitly.  This is
+discussed in @ref{Manipulating Filling and Adjusting}.
+
+@c ---------------------------------------------------------------------
+
+@node Input Conventions, Input Encodings, Implicit Line Breaks, Text
+@subsection Input Conventions
+@cindex input conventions
+@cindex conventions for input
+
+Since @code{gtroff} does filling automatically, it is traditional in
+@code{groff} not to try and type things in as nicely formatted
+paragraphs.  These are some conventions commonly used when typing
+@code{gtroff} text:
+
+@itemize @bullet
+@item
+Break lines after punctuation, particularly at the end of a sentence and
+in other logical places.  Keep separate phrases on lines by themselves,
+as entire phrases are often added or deleted when editing.
+
+@item
+Try to keep lines less than 40-60@tie{}characters, to allow space for
+inserting more text.
+
+@item
+Do not try to do any formatting in a @acronym{WYSIWYG} manner (i.e.,
+don't try using spaces to get proper indentation).
+@end itemize
+
+@c ---------------------------------------------------------------------
+
+@node Input Encodings,  , Input Conventions, Text
+@subsection Input Encodings
+
+Currently, the following input encodings are available.
+
+@table @asis
+@item cp1047
+@cindex encoding, input, @acronym{EBCDIC}
+@cindex @acronym{EBCDIC}, input encoding
+@cindex input encoding, @acronym{EBCDIC}
+@cindex encoding, input, cp1047
+@cindex cp1047, input encoding
+@cindex input encoding, cp1047
+@cindex IBM cp1047 input encoding
+@pindex cp1047.tmac
+This input encoding works only on @acronym{EBCDIC} platforms (and vice
+versa, the other input encodings don't work with @acronym{EBCDIC}); the
+file @file{cp1047.tmac} is by default loaded at start-up.
+
+@item latin-1
+@cindex encoding, input, @w{latin-1} (ISO @w{8859-1})
+@cindex @w{latin-1} (ISO @w{8859-1}), input encoding
+@cindex ISO @w{8859-1} (@w{latin-1}), input encoding
+@cindex input encoding, @w{latin-1} (ISO @w{8859-1})
+@pindex latin1.tmac
+This is the default input encoding on non-@acronym{EBCDIC} platforms;
+the file @file{latin1.tmac} is loaded at start-up.
+
+@item latin-2
+@cindex encoding, input, @w{latin-2} (ISO @w{8859-2})
+@cindex @w{latin-2} (ISO @w{8859-2}), input encoding
+@cindex ISO @w{8859-2} (@w{latin-2}), input encoding
+@cindex input encoding, @w{latin-2} (ISO @w{8859-2})
+@pindex latin2.tmac
+To use this encoding, either say @w{@samp{.mso latin2.tmac}} at the very
+beginning of your document or use @samp{-mlatin2} as a command line
+argument for @code{groff}.
+
+@item latin-5
+@cindex encoding, input, @w{latin-5} (ISO @w{8859-9})
+@cindex @w{latin-2} (ISO @w{8859-9}), input encoding
+@cindex ISO @w{8859-9} (@w{latin-2}), input encoding
+@cindex input encoding, @w{latin-2} (ISO @w{8859-9})
+@pindex latin2.tmac
+For Turkish.  Either say @w{@samp{.mso latin9.tmac}} at the very
+beginning of your document or use @samp{-mlatin9} as a command line
+argument for @code{groff}.
+
+@item latin-9 (latin-0)
+@cindex encoding, input, @w{latin-9} (@w{latin-0}, ISO @w{8859-15})
+@cindex @w{latin-9} (@w{latin-0}, ISO @w{8859-15}), input encoding
+@cindex ISO @w{8859-15} (@w{latin-9}, @w{latin-0}), input encoding
+@cindex input encoding, @w{latin-9} (@w{latin-9}, ISO @w{8859-15})
+@pindex latin9.tmac
+This encoding is intended (at least in Europe) to replace @w{latin-1}
+encoding.  The main difference to @w{latin-1} is that @w{latin-9}
+contains the Euro character.  To use this encoding, either say
+@w{@samp{.mso latin9.tmac}} at the very beginning of your document or
+use @samp{-mlatin9} as a command line argument for @code{groff}.
+@end table
+
+Note that it can happen that some input encoding characters are not
+available for a particular output device.  For example, saying
+
+@Example
+groff -Tlatin1 -mlatin9 ...
+@endExample
+
+@noindent
+fails if you use the Euro character in the input.  Usually, this
+limitation is present only for devices that have a limited set of
+output glyphs (e.g.@: @option{-Tascii} and @option{-Tlatin1}); for other
+devices it is usually sufficient to install proper fonts that contain
+the necessary glyphs.
+
+@pindex freeeuro.pfa
+@pindex ec.tmac
+Due to the importance of the Euro glyph in Europe, the groff package now
+comes with a @sc{PostScript} font called @file{freeeuro.pfa}, which
+provides various glyph shapes for the Euro.  In other words,
+@w{latin-9} encoding is supported for the @option{-Tps} device out of
+the box (@w{latin-2} isn't).
+
+By its very nature, @option{-Tutf8} supports all input encodings;
+@option{-Tdvi} has support for both @w{latin-2} and @w{latin-9} if the
+command line @option{-mec} is used also to load the file @file{ec.tmac}
+(which flips to the EC fonts).
+
+
+@c =====================================================================
+
+@node Measurements, Expressions, Text, gtroff Reference
+@section Measurements
+@cindex measurements
+@cindex scaling indicator
+@cindex indicator, scaling
+
+@cindex units of measurement
+@cindex basic unit (@code{u})
+@cindex machine unit (@code{u})
+@cindex measurement unit
+@cindex @code{u} unit
+@cindex unit, @code{u}
+@code{gtroff} (like many other programs) requires numeric parameters to
+specify various measurements.  Most numeric parameters@footnote{those
+that specify vertical or horizontal motion or a type size} may have a
+@dfn{measurement unit} attached.  These units are specified as a single
+character that immediately follows the number or expression.  Each of
+these units are understood, by @code{gtroff}, to be a multiple of its
+@dfn{basic unit}.  So, whenever a different measurement unit is
+specified @code{gtroff} converts this into its @dfn{basic units}.  This
+basic unit, represented by a @samp{u}, is a device dependent measurement,
+which is quite small, ranging from 1/75@dmn{th} to 1/72000@dmn{th} of an
+inch.  The values may be given as fractional numbers; however,
+fractional basic units are always rounded to integers.
+
+Some of the measurement units are completely independent of any of the
+current settings (e.g.@: type size) of @code{gtroff}.
+
+@table @code
+@item i
+@cindex inch unit (@code{i})
+@cindex @code{i} unit
+@cindex unit, @code{i}
+Inches.  An antiquated measurement unit still in use in certain
+backwards countries with incredibly low-cost computer equipment.  One
+inch is equal to@tie{}2.54@dmn{cm}.
+
+@item c
+@cindex centimeter unit (@code{c})
+@cindex @code{c} unit
+@cindex unit, @code{c}
+Centimeters.  One centimeter is equal to@tie{}0.3937@dmn{in}.
+
+@item p
+@cindex point unit (@code{p})
+@cindex @code{p} unit
+@cindex unit, @code{p}
+Points.  This is a typesetter's measurement used for measure type size.
+It is 72@tie{}points to an inch.
+
+@item P
+@cindex pica unit (@code{P})
+@cindex @code{P} unit
+@cindex unit, @code{P}
+Pica.  Another typesetting measurement.  6@tie{}Picas to an inch (and
+12@tie{}points to a pica).
+
+@item s
+@itemx z
+@cindex @code{s} unit
+@cindex unit, @code{s}
+@cindex @code{z} unit
+@cindex unit, @code{z}
+@xref{Fractional Type Sizes}, for a discussion of these units.
+
+@item f
+@cindex @code{f} unit
+@cindex unit, @code{f}
+Fractions.  Value is 65536.
+@xref{Colors}, for usage.
+@end table
+
+The other measurements understood by @code{gtroff} depend on settings
+currently in effect in @code{gtroff}.  These are very useful for
+specifying measurements that should look proper with any size of text.
+
+@table @code
+@item m
+@cindex em unit (@code{m})
+@cindex @code{m} unit
+@cindex unit, @code{m}
+Ems.  This unit is equal to the current font size in points.  So called
+because it is @emph{approximately} the width of the letter@tie{}@samp{m}
+in the current font.
+
+@item n
+@cindex en unit (@code{n})
+@cindex @code{n} unit
+@cindex unit, @code{n}
+Ens.  In @code{groff}, this is half of an em.
+
+@item v
+@cindex vertical space unit (@code{v})
+@cindex space, vertical, unit (@code{v})
+@cindex @code{v} unit
+@cindex unit, @code{v}
+Vertical space.  This is equivalent to the current line spacing.
+@xref{Sizes}, for more information about this.
+
+@item M
+@cindex @code{M} unit
+@cindex unit, @code{M}
+100ths of an em.
+@end table
+
+@menu
+* Default Units::
+@end menu
+
+@c ---------------------------------------------------------------------
+
+@node Default Units,  , Measurements, Measurements
+@subsection Default Units
+@cindex default units
+@cindex units, default
+
+Many requests take a default unit.  While this can be helpful at times,
+it can cause strange errors in some expressions.  For example, the line
+length request expects em units.  Here are several attempts to get a
+line length of 3.5@tie{}inches and their results:
+
+@Example
+3.5i      @result{}   3.5i
+7/2       @result{}   0i
+7/2i      @result{}   0i
+(7 / 2)u  @result{}   0i
+7i/2      @result{}   0.1i
+7i/2u     @result{}   3.5i
+@endExample
+
+@noindent
+Everything is converted to basic units first.  In the above example it
+is assumed that 1@dmn{i} equals@tie{}240@dmn{u}, and 1@dmn{m}
+equals@tie{}10@dmn{p} (thus 1@dmn{m} equals@tie{}33@dmn{u}).  The value
+7@dmn{i}/2 is first handled as 7@dmn{i}/2@dmn{m}, then converted to
+1680@dmn{u}/66@dmn{u}, which is 25@dmn{u}, and this is approximately
+0.1@dmn{i}.  As can be seen, a scaling indicator after a closing
+parenthesis is simply ignored.
+
+@cindex measurements, specifying safely
+Thus, the safest way to specify measurements is to always attach a
+scaling indicator.  If you want to multiply or divide by a certain
+scalar value, use @samp{u} as the unit for that value.
+
+
+@c =====================================================================
+
+@node Expressions, Identifiers, Measurements, gtroff Reference
+@section Expressions
+@cindex expressions
+
+@code{gtroff} has most arithmetic operators common to other languages:
+
+@itemize @bullet
+@item
+@cindex arithmetic operators
+@cindex operators, arithmetic
+@opindex +
+@opindex -
+@opindex /
+@opindex *
+@opindex %
+Arithmetic: @samp{+} (addition), @samp{-} (subtraction), @samp{/}
+(division), @samp{*} (multiplication), @samp{%} (modulo).
+
+@code{gtroff} only provides integer arithmetic.  The internal type used
+for computing results is @samp{int}, which is usually a 32@dmn{bit}
+signed integer.
+
+@item
+@cindex comparison operators
+@cindex operators, comparison
+@opindex <
+@opindex >
+@opindex >=
+@opindex <=
+@opindex =
+@opindex ==
+Comparison: @samp{<} (less than), @samp{>} (greater than), @samp{<=}
+(less than or equal), @samp{>=} (greater than or equal), @samp{=}
+(equal), @samp{==} (the same as @samp{=}).
+
+@item
+@cindex logical operators
+@cindex operators, logical
+@opindex &
+@ifnotinfo
+@opindex :
+@end ifnotinfo
+@ifinfo
+@opindex @r{<colon>}
+@end ifinfo
+Logical: @samp{&} (logical and), @samp{:} (logical or).
+
+@item
+@cindex unary operators
+@cindex operators, unary
+@opindex -
+@opindex +
+@opindex !
+@cindex @code{if} request, and the @samp{!} operator
+@cindex @code{while} request, and the @samp{!} operator
+Unary operators: @samp{-} (negating, i.e.@: changing the sign), @samp{+}
+(just for completeness; does nothing in expressions), @samp{!} (logical
+not; this works only within @code{if} and @code{while}
+requests).@footnote{Note that, for example, @samp{!(-1)} evaluates to
+`true' because @code{gtroff} treats both negative numbers and zero as
+`false'.}  See below for the use of unary operators in motion requests.
+
+@cindex logical not, limitation in expression
+@cindex expression, limitation of logical not in
+The logical not operator,
+as described above,
+works only within @code{if} and @code{while} requests.
+Furthermore, it may appear
+only at the beginning of an expression,
+and negates the entire expression.
+Attempting to insert the @samp{!} operator
+within the expression results in a
+@samp{numeric expression expected} warning.  This
+maintains compatibility
+with old versions of @code{troff}.
+
+Example:
+
+@Example
+.nr X 1
+.nr Y 0
+.\" This does not work as expected
+.if (\n[X])&(!\n[Y]) .nop X only
+.
+.\" Use this construct instead
+.if (\n[X]=1)&(\n[Y]=0) .nop X only
+@endExample
+
+@item
+@cindex extremum operators (@code{>?}, @code{<?})
+@cindex operators, extremum (@code{>?}, @code{<?})
+@opindex >?
+@opindex <?
+Extrema: @samp{>?} (maximum), @samp{<?} (minimum).
+
+Example:
+
+@Example
+.nr x 5
+.nr y 3
+.nr z (\n[x] >? \n[y])
+@endExample
+
+@noindent
+The register@tie{}@code{z} now contains@tie{}5.
+
+@item
+@cindex scaling operator
+@cindex operator, scaling
+Scaling: @code{(@var{c};@var{e})}.  Evaluate@tie{}@var{e}
+using@tie{}@var{c} as the default scaling indicator.  If @var{c} is
+missing, ignore scaling indicators in the evaluation of@tie{}@var{e}.
+@end itemize
+
+@cindex parentheses
+@cindex order of evaluation in expressions
+@cindex expression, order of evaluation
+@opindex (
+@opindex )
+Parentheses may be used as in any other language.  However, in
+@code{gtroff} they are necessary to ensure order of evaluation.
+@code{gtroff} has no operator precedence; expressions are evaluated left
+to right.  This means that @code{gtroff} evaluates @samp{3+5*4} as if it
+were parenthesized like @samp{(3+5)*4}, not as @samp{3+(5*4)}, as might
+be expected.
+
+@cindex @code{+}, and page motion
+@cindex @code{-}, and page motion
+@cindex motion operators
+@cindex operators, motion
+For many requests that cause a motion on the page, the unary operators
+@samp{+} and @samp{-} work differently if leading an expression.  They
+then indicate a motion relative to the current position (down or up,
+respectively).
+
+@cindex @code{|}, and page motion
+@cindex absolute position operator (@code{|})
+@cindex position, absolute, operator (@code{|})
+Similarly, a leading @samp{|} operator indicates an absolute position.
+For vertical movements, it specifies the distance from the top of the
+page; for horizontal movements, it gives the distance from the beginning
+of the @emph{input} line.
+
+@cindex @code{bp} request, using @code{+} and@tie{}@code{-}
+@cindex @code{in} request, using @code{+} and@tie{}@code{-}
+@cindex @code{ll} request, using @code{+} and@tie{}@code{-}
+@cindex @code{lt} request, using @code{+} and@tie{}@code{-}
+@cindex @code{nm} request, using @code{+} and@tie{}@code{-}
+@cindex @code{nr} request, using @code{+} and@tie{}@code{-}
+@cindex @code{pl} request, using @code{+} and@tie{}@code{-}
+@cindex @code{pn} request, using @code{+} and@tie{}@code{-}
+@cindex @code{po} request, using @code{+} and@tie{}@code{-}
+@cindex @code{ps} request, using @code{+} and@tie{}@code{-}
+@cindex @code{pvs} request, using @code{+} and@tie{}@code{-}
+@cindex @code{rt} request, using @code{+} and@tie{}@code{-}
+@cindex @code{ti} request, using @code{+} and@tie{}@code{-}
+@cindex @code{\H}, using @code{+} and@tie{}@code{-}
+@cindex @code{\R}, using @code{+} and@tie{}@code{-}
+@cindex @code{\s}, using @code{+} and@tie{}@code{-}
+@samp{+} and @samp{-} are also treated differently by the following
+requests and escapes: @code{bp}, @code{in}, @code{ll}, @code{lt},
+@code{nm}, @code{nr}, @code{pl}, @code{pn}, @code{po}, @code{ps},
+@code{pvs}, @code{rt}, @code{ti}, @code{\H}, @code{\R}, and @code{\s}.
+Here, leading plus and minus signs indicate increments and decrements.
+
+@xref{Setting Registers}, for some examples.
+
+@Defesc {\\B, ', anything, '}
+@cindex numeric expression, valid
+@cindex valid numeric expression
+Return@tie{}1 if @var{anything} is a valid numeric expression; or@tie{}0
+if @var{anything} is empty or not a valid numeric expression.
+@endDefesc
+
+@cindex space characters, in expressions
+@cindex expressions, and space characters
+Due to the way arguments are parsed, spaces are not allowed in
+expressions, unless the entire expression is surrounded by parentheses.
+
+@xref{Request and Macro Arguments}, and @ref{Conditionals and Loops}.
+
+
+@c =====================================================================
+
+@node Identifiers, Embedded Commands, Expressions, gtroff Reference
+@section Identifiers
+@cindex identifiers
+
+Like any other language, @code{gtroff} has rules for properly formed
+@dfn{identifiers}.  In @code{gtroff}, an identifier can be made up of
+almost any printable character, with the exception of the following
+characters:
+
+@itemize @bullet
+@item
+@cindex whitespace characters
+@cindex newline character
+@cindex character, whitespace
+Whitespace characters (spaces, tabs, and newlines).
+
+@item
+@cindex character, backspace
+@cindex backspace character
+@cindex @acronym{EBCDIC} encoding of backspace
+Backspace (@acronym{ASCII}@tie{}@code{0x08} or
+@acronym{EBCDIC}@tie{}@code{0x16}) and character code @code{0x01}.
+
+@item
+@cindex invalid input characters
+@cindex input characters, invalid
+@cindex characters, invalid input
+@cindex Unicode
+The following input characters are invalid and are ignored if
+@code{groff} runs on a machine based on @acronym{ASCII}, causing a
+warning message of type @samp{input} (see @ref{Debugging}, for more
+details): @code{0x00}, @code{0x0B}, @code{0x0D}-@code{0x1F},
+@code{0x80}-@code{0x9F}.
+
+And here are the invalid input characters if @code{groff} runs on an
+@acronym{EBCDIC} host: @code{0x00}, @code{0x08}, @code{0x09},
+@code{0x0B}, @code{0x0D}-@code{0x14}, @code{0x17}-@code{0x1F},
+@code{0x30}-@code{0x3F}.
+
+Currently, some of these reserved codepoints are used internally, thus
+making it non-trivial to extend @code{gtroff} to cover Unicode or other
+character sets and encodings that use characters of these ranges.
+
+Note that invalid characters are removed before parsing; an identifier
+@code{foo}, followed by an invalid character, followed by @code{bar} is
+treated as @code{foobar}.
+@end itemize
+
+For example, any of the following is valid.
+
+@Example
+br
+PP
+(l
+end-list
+@@_
+@endExample
+
+@cindex @code{]}, as part of an identifier
+@noindent
+Note that identifiers longer than two characters with a closing bracket
+(@samp{]}) in its name can't be accessed with escape sequences that
+expect an identifier as a parameter.  For example, @samp{\[foo]]}
+accesses the glyph @samp{foo}, followed by @samp{]}, whereas
+@samp{\C'foo]'} really asks for glyph @samp{foo]}.
+
+@cindex @code{refer}, and macro names starting with @code{[} or @code{]}
+@cindex @code{[}, macro names starting with, and @code{refer}
+@cindex @code{]}, macro names starting with, and @code{refer}
+@cindex macro names, starting with @code{[} or @code{]}, and @code{refer}
+To avoid problems with the @code{refer} preprocessor, macro names should
+not start with @samp{[} or @samp{]}.  Due to backwards compatibility,
+everything after @samp{.[} and @samp{.]} is handled as a special
+argument to @code{refer}.  For example, @samp{.[foo} makes @code{refer}
+to start a reference, using @samp{foo} as a parameter.
+
+@Defesc {\\A, ', ident, '}
+Test whether an identifier @var{ident} is valid in @code{gtroff}.  It
+expands to the character@tie{}1 or@tie{}0 according to whether its
+argument (usually delimited by quotes) is or is not acceptable as the
+name of a string, macro, diversion, number register, environment, or
+font.  It returns@tie{}0 if no argument is given.  This is useful for
+looking up user input in some sort of associative table.
+
+@Example
+\A'end-list'
+    @result{} 1
+@endExample
+@endDefesc
+
+@xref{Escapes}, for details on parameter delimiting characters.
+
+Identifiers in @code{gtroff} can be any length, but, in some contexts,
+@code{gtroff} needs to be told where identifiers end and text begins
+(and in different ways depending on their length):
+
+@itemize @bullet
+@item
+Single character.
+
+@cindex @code{(}, starting a two-character identifier
+@item
+Two characters.  Must be prefixed with @samp{(} in some situations.
+
+@cindex @code{[}, starting an identifier
+@cindex @code{]}, ending an identifier
+@item
+Arbitrary length (@code{gtroff} only).  Must be bracketed with @samp{[}
+and@tie{}@samp{]} in some situations.  Any length identifier can be put
+in brackets.
+@end itemize
+
+@cindex undefined identifiers
+@cindex identifiers, undefined
+Unlike many other programming languages, undefined identifiers are
+silently ignored or expanded to nothing.  When @code{gtroff} finds an
+undefined identifier, it emits a warning, doing the following:
+
+@itemize @bullet
+@item
+If the identifier is a string, macro, or diversion, @code{gtroff}
+defines it as empty.
+
+@item
+If the identifier is a number register, @code{gtroff} defines it with a
+value of@tie{}0.
+@end itemize
+
+@xref{Warnings}., @ref{Interpolating Registers}, and @ref{Strings}.
+
+Note that macros, strings, and diversions share the same name space.
+
+@Example
+.de xxx
+.  nop foo
+..
+.
+.di xxx
+bar
+.br
+.di
+.
+.xxx
+    @result{} bar
+@endExample
+
+@noindent
+As can be seen in the previous example, @code{gtroff} reuses the
+identifier @samp{xxx}, changing it from a macro to a diversion.  No
+warning is emitted!  The contents of the first macro definition is lost.
+
+@xref{Interpolating Registers}, and @ref{Strings}.
+
+
+@c =====================================================================
+
+@node Embedded Commands, Registers, Identifiers, gtroff Reference
+@section Embedded Commands
+@cindex embedded commands
+@cindex commands, embedded
+
+Most documents need more functionality beyond filling, adjusting and
+implicit line breaking.  In order to gain further functionality,
+@code{gtroff} allows commands to be embedded into the text, in two ways.
+
+The first is a @dfn{request} that takes up an entire line, and does
+some large-scale operation (e.g.@: break lines, start new pages).
+
+The other is an @dfn{escape} that can be usually embedded anywhere in
+the text; most requests can accept it even as an argument.  Escapes
+generally do more minor operations like sub- and superscripts, print a
+symbol, etc.
+
+@menu
+* Requests::
+* Macros::
+* Escapes::
+@end menu
+
+@c ---------------------------------------------------------------------
+
+@node Requests, Macros, Embedded Commands, Embedded Commands
+@subsection Requests
+@cindex requests
+
+@cindex control character (@code{.})
+@cindex character, control (@code{.})
+@cindex no-break control character (@code{'})
+@cindex character, no-break control (@code{'})
+@cindex control character, no-break (@code{'})
+A request line begins with a control character, which is either a single
+quote (@samp{'}, the @dfn{no-break control character}) or a period
+(@samp{.}, the normal @dfn{control character}).  These can be changed;
+see @ref{Character Translations}, for details.  After this there may be
+optional tabs or spaces followed by an identifier, which is the name of
+the request.  This may be followed by any number of space-separated
+arguments (@emph{no} tabs here).
+
+@cindex structuring source code of documents or macro packages
+@cindex documents, structuring the source code
+@cindex macro packages, structuring the source code
+Since a control character followed by whitespace only is ignored, it is
+common practice to use this feature for structuring the source code of
+documents or macro packages.
+
+@Example
+.de foo
+.  tm This is foo.
+..
+.
+.
+.de bar
+.  tm This is bar.
+..
+@endExample
+
+@cindex blank line
+@cindex blank line macro (@code{blm})
+Another possibility is to use the blank line macro request @code{blm} by
+assigning an empty macro to it.
+
+@Example
+.de do-nothing
+..
+.blm do-nothing  \" activate blank line macro
+
+.de foo
+.  tm This is foo.
+..
+
+
+.de bar
+.  tm This is bar.
+..
+
+.blm             \" deactivate blank line macro
+@endExample
+
+@xref{Blank Line Traps}.
+
+@cindex zero width space character (@code{\&})
+@cindex character, zero width space (@code{\&})
+@cindex space character, zero width (@code{\&})
+@cindex @code{\&}, escaping control characters
+To begin a line with a control character without it being interpreted,
+precede it with @code{\&}.  This represents a zero width space, which
+means it does not affect the output.
+
+In most cases the period is used as a control character.  Several
+requests cause a break implicitly; using the single quote control
+character prevents this.
+
+@Defreg {.br}
+A read-only number register, which is set to@tie{}1 if a macro is called
+with the normal control character (as defined with the @code{cc}
+request), and set to@tie{}0 otherwise.
+
+@cindex modifying requests
+@cindex requests, modifying
+This allows to reliably modify requests.
+
+@Example
+.als bp*orig bp
+.de bp
+.  tm before bp
+.  ie \\n[.br] .bp*orig
+.  el 'bp*orig
+.  tm after bp
+..
+@endExample
+
+Using this register outside of a macro makes no sense (it always returns
+zero in such cases).
+
+If a macro is called as a string (this is, using @code{\*}), the value
+of the @code{.br} register is inherited from the calling macro.
+@endDefreg
+
+@menu
+* Request and Macro Arguments::
+@end menu
+
+@node Request and Macro Arguments,  , Requests, Requests
+@subsubsection Request and Macro Arguments
+@cindex request arguments
+@cindex macro arguments
+@cindex arguments to requests and macros
+
+@cindex tabs, and macro arguments
+@cindex macro arguments, and tabs
+@cindex arguments to macros, and tabs
+Arguments to requests and macros are processed much like the shell:
+The line is split into arguments according to
+spaces.@footnote{Plan@tie{}9's @code{troff} implementation also allows
+tabs for argument separation -- @code{gtroff} intentionally doesn't
+support this.}
+
+@cindex spaces, in a macro argument
+An argument to a macro that is intended to contain spaces can either be
+enclosed in double quotes, or have the spaces @dfn{escaped} with
+backslashes.  This is @emph{not} true for requests.
+
+Here are a few examples for a hypothetical macro @code{uh}:
+
+@Example
+.uh The Mouse Problem
+.uh "The Mouse Problem"
+.uh The\ Mouse\ Problem
+@endExample
+
+@cindex @code{\~}, difference to @code{\@key{SP}}
+@cindex @code{\@key{SP}}, difference to @code{\~}
+@noindent
+The first line is the @code{uh} macro being called with 3 arguments,
+@samp{The}, @samp{Mouse}, and @samp{Problem}.  The latter two have the
+same effect of calling the @code{uh} macro with one argument, @samp{The
+Mouse Problem}.@footnote{The last solution, i.e., using escaped spaces,
+is ``classical'' in the sense that it can be found in most @code{troff}
+documents.  Nevertheless, it is not optimal in all situations, since
+@w{@samp{\ }} inserts a fixed-width, non-breaking space character that
+can't stretch.  @code{gtroff} provides a different command @code{\~} to
+insert a stretchable, non-breaking space.}
+
+@cindex @code{"}, in a macro argument
+@cindex double quote, in a macro argument
+A double quote that isn't preceded by a space doesn't start a macro
+argument.  If not closing a string, it is printed literally.
+
+For example,
+
+@Example
+.xxx a" "b c" "de"fg"
+@endExample
+
+@noindent
+has the arguments @samp{a"}, @w{@samp{b c}}, @samp{de}, and @samp{fg"}.
+Don't rely on this obscure behaviour!
+
+There are two possibilities to get a double quote reliably.
+
+@itemize @bullet
+@item
+Enclose the whole argument with double quotes and use two consecutive
+double quotes to represent a single one.  This traditional solution has
+the disadvantage that double quotes don't survive argument expansion
+again if called in compatibility mode (using the @option{-C} option of
+@code{groff}):
+
+@Example
+.de xx
+.  tm xx: `\\$1' `\\$2' `\\$3'
+.
+.  yy "\\$1" "\\$2" "\\$3"
+..
+.de yy
+.  tm yy: `\\$1' `\\$2' `\\$3'
+..
+.xx A "test with ""quotes""" .
+    @result{} xx: `A' `test with "quotes"' `.'
+    @result{} yy: `A' `test with ' `quotes""'
+@endExample
+
+@noindent
+If not in compatibility mode, you get the expected result
+
+@Example
+xx: `A' `test with "quotes"' `.'
+yy: `A' `test with "quotes"' `.'
+@endExample
+
+@noindent
+since @code{gtroff} preserves the input level.
+
+@item
+Use the double quote glyph @code{\(dq}.  This works with and without
+compatibility mode enabled since @code{gtroff} doesn't convert
+@code{\(dq} back to a double quote input character.
+
+Note that this method won't work with @acronym{UNIX} @code{troff} in
+general since the glyph `dq' isn't defined normally.
+@end itemize
+
+@cindex @code{ds} request, and double quotes
+Double quotes in the @code{ds} request are handled differently.
+@xref{Strings}, for more details.
+
+@c ---------------------------------------------------------------------
+
+@node Macros, Escapes, Requests, Embedded Commands
+@subsection Macros
+@cindex macros
+
+@code{gtroff} has a @dfn{macro} facility for defining a series of lines
+that can be invoked by name.  They are called in the same manner as
+requests -- arguments also may be passed basically in the same manner.
+
+@xref{Writing Macros}, and @ref{Request and Macro Arguments}.
+
+@c ---------------------------------------------------------------------
+
+@node Escapes,  , Macros, Embedded Commands
+@subsection Escapes
+@cindex escapes
+
+Escapes may occur anywhere in the input to @code{gtroff}.  They usually
+begin with a backslash and are followed by a single character, which
+indicates the function to be performed.  The escape character can be
+changed; see @ref{Character Translations}.
+
+Escape sequences that require an identifier as a parameter accept three
+possible syntax forms.
+
+@itemize @bullet
+@item
+The next single character is the identifier.
+
+@cindex @code{(}, starting a two-character identifier
+@item
+If this single character is an opening parenthesis, take the following
+two characters as the identifier.  Note that there is no closing
+parenthesis after the identifier.
+
+@cindex @code{[}, starting an identifier
+@cindex @code{]}, ending an identifier
+@item
+If this single character is an opening bracket, take all characters
+until a closing bracket as the identifier.
+@end itemize
+
+@noindent
+Examples:
+
+@Example
+\fB
+\n(XX
+\*[TeX]
+@endExample
+
+@cindex @code{'}, delimiting arguments
+@cindex argument delimiting characters
+@cindex characters, argument delimiting
+@cindex delimiting characters for arguments
+Other escapes may require several arguments and/or some special format.
+In such cases the argument is traditionally enclosed in single quotes
+(and quotes are always used in this manual for the definitions of escape
+sequences).  The enclosed text is then processed according to what that
+escape expects.  Example:
+
+@Example
+\l'1.5i\(bu'
+@endExample
+
+@cindex @code{\o}, possible quote characters
+@cindex @code{\b}, possible quote characters
+@cindex @code{\X}, possible quote characters
+Note that the quote character can be replaced with any other character
+that does not occur in the argument (even a newline or a space
+character) in the following escapes: @code{\o}, @code{\b}, and
+@code{\X}.  This makes e.g.
+
+@Example
+A caf
+\o
+e\'
+
+
+in Paris
+  @result{} A caf� in Paris
+@endExample
+
+@noindent
+possible, but it is better not to use this feature to avoid confusion.
+
+@cindex @code{\%}, used as delimiter
+@cindex @code{\@key{SP}}, used as delimiter
+@cindex @code{\|}, used as delimiter
+@cindex @code{\^}, used as delimiter
+@cindex @code{\@{}, used as delimiter
+@cindex @code{\@}}, used as delimiter
+@cindex @code{\'}, used as delimiter
+@cindex @code{\`}, used as delimiter
+@cindex @code{\-}, used as delimiter
+@cindex @code{\_}, used as delimiter
+@cindex @code{\!}, used as delimiter
+@cindex @code{\?}, used as delimiter
+@cindex @code{\)}, used as delimiter
+@cindex @code{\/}, used as delimiter
+@cindex @code{\,}, used as delimiter
+@cindex @code{\&}, used as delimiter
+@ifnotinfo
+@cindex @code{\:}, used as delimiter
+@end ifnotinfo
+@ifinfo
+@cindex @code{\@r{<colon>}}, used as delimiter
+@end ifinfo
+@cindex @code{\~}, used as delimiter
+@cindex @code{\0}, used as delimiter
+@cindex @code{\a}, used as delimiter
+@cindex @code{\c}, used as delimiter
+@cindex @code{\d}, used as delimiter
+@cindex @code{\e}, used as delimiter
+@cindex @code{\E}, used as delimiter
+@cindex @code{\p}, used as delimiter
+@cindex @code{\r}, used as delimiter
+@cindex @code{\t}, used as delimiter
+@cindex @code{\u}, used as delimiter
+The following escapes sequences (which are handled similarly to
+characters since they don't take a parameter) are also allowed as
+delimiters: @code{\%}, @w{@samp{\ }}, @code{\|}, @code{\^}, @code{\@{},
+@code{\@}}, @code{\'}, @code{\`}, @code{\-}, @code{\_}, @code{\!},
+@code{\?}, @code{\)}, @code{\/}, @code{\,}, @code{\&}, @code{\:},
+@code{\~}, @code{\0}, @code{\a}, @code{\c}, @code{\d}, @code{\e},
+@code{\E}, @code{\p}, @code{\r}, @code{\t}, and @code{\u}.  Again, don't
+use these if possible.
+
+@cindex @code{\A}, allowed delimiters
+@cindex @code{\B}, allowed delimiters
+@cindex @code{\Z}, allowed delimiters
+@cindex @code{\C}, allowed delimiters
+@cindex @code{\w}, allowed delimiters
+No newline characters as delimiters are allowed in the following
+escapes: @code{\A}, @code{\B}, @code{\Z}, @code{\C}, and @code{\w}.
+
+@cindex @code{\D}, allowed delimiters
+@cindex @code{\h}, allowed delimiters
+@cindex @code{\H}, allowed delimiters
+@cindex @code{\l}, allowed delimiters
+@cindex @code{\L}, allowed delimiters
+@cindex @code{\N}, allowed delimiters
+@cindex @code{\R}, allowed delimiters
+@cindex @code{\s}, allowed delimiters
+@cindex @code{\S}, allowed delimiters
+@cindex @code{\v}, allowed delimiters
+@cindex @code{\x}, allowed delimiters
+Finally, the escapes @code{\D}, @code{\h}, @code{\H}, @code{\l},
+@code{\L}, @code{\N}, @code{\R}, @code{\s}, @code{\S}, @code{\v}, and
+@code{\x} can't use the following characters as delimiters:
+
+@itemize @bullet
+@item
+@cindex numbers, and delimiters
+@cindex digits, and delimiters
+The digits @code{0}-@code{9}.
+
+@item
+@cindex operators, as delimiters
+@cindex @code{+}, as delimiter
+@cindex @code{-}, as delimiter
+@cindex @code{/}, as delimiter
+@cindex @code{*}, as delimiter
+@cindex @code{%}, as delimiter
+@cindex @code{<}, as delimiter
+@cindex @code{>}, as delimiter
+@cindex @code{=}, as delimiter
+@cindex @code{&}, as delimiter
+@ifnotinfo
+@cindex @code{:}, as delimiter
+@end ifnotinfo
+@ifinfo
+@cindex <colon>, as delimiter
+@end ifinfo
+@cindex @code{(}, as delimiter
+@cindex @code{)}, as delimiter
+@cindex @code{.}, as delimiter
+The (single-character) operators @samp{+-/*%<>=&:().}.
+
+@item
+@cindex space character
+@cindex character, space
+@cindex tab character
+@cindex character, tab
+@cindex newline character
+@cindex character, newline
+The space, tab, and newline characters.
+
+@item
+@cindex @code{\%}, used as delimiter
+@ifnotinfo
+@cindex @code{\:}, used as delimiter
+@end ifnotinfo
+@ifinfo
+@cindex @code{\@r{<colon>}}, used as delimiter
+@end ifinfo
+@cindex @code{\@{}, used as delimiter
+@cindex @code{\@}}, used as delimiter
+@cindex @code{\'}, used as delimiter
+@cindex @code{\`}, used as delimiter
+@cindex @code{\-}, used as delimiter
+@cindex @code{\_}, used as delimiter
+@cindex @code{\!}, used as delimiter
+@cindex @code{\/}, used as delimiter
+@cindex @code{\c}, used as delimiter
+@cindex @code{\e}, used as delimiter
+@cindex @code{\p}, used as delimiter
+All escape sequences except @code{\%}, @code{\:}, @code{\@{},
+@code{\@}}, @code{\'}, @code{\`}, @code{\-}, @code{\_}, @code{\!},
+@code{\/}, @code{\c}, @code{\e}, and @code{\p}.
+@end itemize
+
+@cindex printing backslash (@code{\\}, @code{\e}, @code{\E}, @code{\[rs]})
+@cindex backslash, printing (@code{\\}, @code{\e}, @code{\E}, @code{\[rs]})
+To have a backslash (actually, the current escape character) appear in
+the output several escapes are defined: @code{\\}, @code{\e} or
+@code{\E}.  These are very similar, and only differ with respect to
+being used in macros or diversions.  @xref{Character Translations}, for
+an exact description of those escapes.
+
+@xref{Implementation Differences}, @ref{Copy-in Mode}, and
+@ref{Diversions}, @ref{Identifiers}, for more information.
+
+@menu
+* Comments::
+@end menu
+
+@node Comments,  , Escapes, Escapes
+@subsubsection Comments
+@cindex comments
+
+Probably one of the most@footnote{Unfortunately, this is a lie.  But
+hopefully future @code{gtroff} hackers will believe it @code{:-)}}
+common forms of escapes is the comment.
+
+@Defesc {\\", , , }
+Start a comment.  Everything to the end of the input line is ignored.
+
+This may sound simple, but it can be tricky to keep the comments from
+interfering with the appearance of the final output.
+
+@cindex @code{ds}, @code{ds1} requests, and comments
+@cindex @code{as}, @code{as1} requests, and comments
+If the escape is to the right of some text or a request, that portion of
+the line is ignored, but the space leading up to it is noticed by
+@code{gtroff}.  This only affects the @code{ds} and @code{as} request
+and its variants.
+
+@cindex tabs, before comments
+@cindex comments, lining up with tabs
+One possibly irritating idiosyncracy is that tabs must not be used to
+line up comments.  Tabs are not treated as whitespace between the
+request and macro arguments.
+
+@cindex undefined request
+@cindex request, undefined
+A comment on a line by itself is treated as a blank line, because after
+eliminating the comment, that is all that remains:
+
+@Example
+Test
+\" comment
+Test
+@endExample
+
+@noindent
+produces
+
+@Example
+Test
+
+Test
+@endExample
+
+To avoid this, it is common to start the line with @code{.\"}, which
+causes the line to be treated as an undefined request and thus ignored
+completely.
+
+@cindex @code{'}, as a comment
+Another commenting scheme seen sometimes is three consecutive single
+quotes (@code{'''}) at the beginning of a line.  This works, but
+@code{gtroff} gives a warning about an undefined macro (namely
+@code{''}), which is harmless, but irritating.
+@endDefesc
+
+@Defesc {\\#, , , }
+To avoid all this, @code{gtroff} has a new comment mechanism using the
+@code{\#} escape.  This escape works the same as @code{\"} except that
+the newline is also ignored:
+
+@Example
+Test
+\# comment
+Test
+@endExample
+
+@noindent
+produces
+
+@Example
+Test Test
+@endExample
+
+@noindent
+as expected.
+@endDefesc
+
+@Defreq {ig, [@Var{end}]}
+Ignore all input until @code{gtroff} encounters the macro named
+@code{.}@var{end} on a line by itself (or @code{..} if @var{end} is not
+specified).  This is useful for commenting out large blocks of text:
+
+@Example
+text text text...
+.ig
+This is part of a large block
+of text that has been
+temporarily(?) commented out.
+
+We can restore it simply by removing
+the .ig request and the ".." at the
+end of the block.
+..
+More text text text...
+@endExample
+
+@noindent
+produces
+
+@Example
+text text text@dots{}  More text text text@dots{}
+@endExample
+
+@noindent
+Note that the commented-out block of text does not cause a break.
+
+@cindex @code{ig} request, and copy-in mode
+@cindex copy-in mode, and @code{ig} request
+@cindex mode, copy-in, and @code{ig} request
+@cindex @code{ig} request, and auto-increment
+@cindex auto-increment, and @code{ig} request
+The input is read in copy-mode; auto-incremented registers @emph{are}
+affected (@pxref{Auto-increment}).
+@endDefreq
+
+
+@c =====================================================================
+
+@node Registers, Manipulating Filling and Adjusting, Embedded Commands, gtroff Reference
+@section Registers
+@cindex registers
+
+Numeric variables in @code{gtroff} are called @dfn{registers}.  There
+are a number of built-in registers, supplying anything from the date to
+details of formatting parameters.
+
+@xref{Identifiers}, for details on register identifiers.
+
+@menu
+* Setting Registers::
+* Interpolating Registers::
+* Auto-increment::
+* Assigning Formats::
+* Built-in Registers::
+@end menu
+
+@c ---------------------------------------------------------------------
+
+@node Setting Registers, Interpolating Registers, Registers, Registers
+@subsection Setting Registers
+@cindex setting registers (@code{nr}, @code{\R})
+@cindex registers, setting (@code{nr}, @code{\R})
+
+Define or set registers using the @code{nr} request or the @code{\R}
+escape.
+
+Although the following requests and escapes can be used to create
+registers, simply using an undefined register will cause it to be
+set to zero.
+
+@DefreqList {nr, ident value}
+@DefescListEndx {\\R, ', ident value, '}
+Set number register @var{ident} to @var{value}.  If @var{ident} doesn't
+exist, @code{gtroff} creates it.
+
+The argument to @code{\R} usually has to be enclosed in quotes.
+@xref{Escapes}, for details on parameter delimiting characters.
+
+The @code{\R} escape doesn't produce an input token in @code{gtroff};
+in other words, it vanishes completely after @code{gtroff} has
+processed it.
+
+For example, the following two lines are equivalent:
+
+@Example
+.nr a (((17 + (3 * 4))) % 4)
+\R'a (((17 + (3 * 4))) % 4)'
+    @result{} 1
+@endExample
+
+Note that the complete transparency of @code{\R} can cause surprising
+effects if you use number registers like @code{.k}, which get evaluated
+at the time they are accessed.
+
+@Example
+.ll 1.6i
+.
+aaa bbb ccc ddd eee fff ggg hhh\R':k \n[.k]'
+.tm :k == \n[:k]
+    @result{} :k == 126950
+.
+.br
+.
+aaa bbb ccc ddd eee fff ggg hhh\h'0'\R':k \n[.k]'
+.tm :k == \n[:k]
+    @result{} :k == 15000
+@endExample
+
+If you process this with the @sc{PostScript} device (@code{-Tps}),
+there will be a line break eventually after @code{ggg} in both input
+lines.  However, after processing the space after @code{ggg}, the
+partially collected line is not overfull yet, so @code{troff}
+continues to collect input until it sees the space (or in this case,
+the newline) after @code{hhh}.  At this point, the line is longer
+than the line length, and the line gets broken.
+
+In the first input line, since the @code{\R} escape leaves no traces,
+the check for the overfull line hasn't been done yet at the point where
+@code{\R} gets handled, and you get a value for the @code{.k} number
+register that is even greater than the current line length.
+
+In the second input line, the insertion of @code{\h'0'} to emit an
+invisible zero-width space forces @code{troff} to check the line length,
+which in turn causes the start of a new output line.  Now @code{.k}
+returns the expected value.
+@endDefreq
+
+Both @code{nr} and @code{\R} have two additional special forms to
+increment or decrement a register.
+
+@DefreqList {nr, ident @t{+}@Var{value}}
+@DefreqItem {nr, ident @t{-}@Var{value}}
+@DefescItemx {\\R, ', ident @t{+}value, '}
+@DefescListEnd {\\R, ', ident @t{-}value, '}
+Increment (decrement) register @var{ident} by @var{value}.
+
+@Example
+.nr a 1
+.nr a +1
+\na
+    @result{} 2
+@endExample
+
+@cindex negating register values
+To assign the negated value of a register to another register, some care
+must be taken to get the desired result:
+
+@Example
+.nr a 7
+.nr b 3
+.nr a -\nb
+\na
+    @result{} 4
+.nr a (-\nb)
+\na
+    @result{} -3
+@endExample
+
+@noindent
+The surrounding parentheses prevent the interpretation of the minus sign
+as a decrementing operator.  An alternative is to start the assignment
+with a @samp{0}:
+
+@Example
+.nr a 7
+.nr b -3
+.nr a \nb
+\na
+    @result{} 4
+.nr a 0\nb
+\na
+    @result{} -3
+@endExample
+@endDefreq
+
+@Defreq {rr, ident}
+@cindex removing number register (@code{rr})
+@cindex number register, removing (@code{rr})
+@cindex register, removing (@code{rr})
+Remove number register @var{ident}.  If @var{ident} doesn't exist, the
+request is ignored.
+@endDefreq
+
+@Defreq {rnn, ident1 ident2}
+@cindex renaming number register (@code{rnn})
+@cindex number register, renaming (@code{rnn})
+@cindex register, renaming (@code{rnn})
+Rename number register @var{ident1} to @var{ident2}.  If either
+@var{ident1} or @var{ident2} doesn't exist, the request is ignored.
+@endDefreq
+
+@Defreq {aln, ident1 ident2}
+@cindex alias, number register, creating (@code{aln})
+@cindex creating alias, for number register (@code{aln})
+@cindex number register, creating alias (@code{aln})
+@cindex register, creating alias (@code{aln})
+Create an alias @var{ident1} for a number register @var{ident2}.  The
+new name and the old name are exactly equivalent.  If @var{ident1} is
+undefined, a warning of type @samp{reg} is generated, and the request is
+ignored.  @xref{Debugging}, for information about warnings.
+@endDefreq
+
+@c ---------------------------------------------------------------------
+
+@node Interpolating Registers, Auto-increment, Setting Registers, Registers
+@subsection Interpolating Registers
+@cindex interpolating registers (@code{\n})
+@cindex registers, interpolating (@code{\n})
+
+Numeric registers can be accessed via the @code{\n} escape.
+
+@DefescList {\\n, , i, }
+@DefescItem {\\n, @Lparen{}, id, }
+@DefescListEnd {\\n, @Lbrack{}, ident, @Rbrack{}}
+@cindex nested assignments
+@cindex assignments, nested
+@cindex indirect assignments
+@cindex assignments, indirect
+Interpolate number register with name @var{ident} (one-character
+name@tie{}@var{i}, two-character name @var{id}).  This means that the
+value of the register is expanded in-place while @code{gtroff} is
+parsing the input line.  Nested assignments (also called indirect
+assignments) are possible.
+
+@Example
+.nr a 5
+.nr as \na+\na
+\n(as
+    @result{} 10
+@endExample
+
+@Example
+.nr a1 5
+.nr ab 6
+.ds str b
+.ds num 1
+\n[a\n[num]]
+    @result{} 5
+\n[a\*[str]]
+    @result{} 6
+@endExample
+@endDefesc
+
+@c ---------------------------------------------------------------------
+
+@node Auto-increment, Assigning Formats, Interpolating Registers, Registers
+@subsection Auto-increment
+@cindex auto-increment
+@cindex increment, automatic
+
+Number registers can also be auto-incremented and auto-decremented.  The
+increment or decrement value can be specified with a third argument to
+the @code{nr} request or @code{\R} escape.
+
+@Defreq {nr, ident value incr}
+@cindex @code{\R}, difference to @code{nr}
+Set number register @var{ident} to @var{value}; the increment for
+auto-incrementing is set to @var{incr}.  Note that the @code{\R} escape
+doesn't support this notation.
+@endDefreq
+
+To activate auto-incrementing, the escape @code{\n} has a special syntax
+form.
+
+@DefescList {\\n, +, i, }
+@DefescItem {\\n, -, i, }
+@DefescItem {\\n, @Lparen{}+, id, }
+@DefescItem {\\n, @Lparen{}-, id, }
+@DefescItem {\\n, +@Lparen{}, id, }
+@DefescItem {\\n, -@Lparen{}, id, }
+@DefescItem {\\n, @Lbrack{}+, ident, @Rbrack{}}
+@DefescItem {\\n, @Lbrack{}-, ident, @Rbrack{}}
+@DefescItem {\\n, +@Lbrack{}, ident, @Rbrack{}}
+@DefescListEnd {\\n, -@Lbrack{}, ident, @Rbrack{}}
+Before interpolating, increment or decrement @var{ident} (one-character
+name@tie{}@var{i}, two-character name @var{id}) by the auto-increment
+value as specified with the @code{nr} request (or the @code{\R} escape).
+If no auto-increment value has been specified, these syntax forms are
+identical to @code{\n}.
+@endDefesc
+
+For example,
+
+@Example
+.nr a 0 1
+.nr xx 0 5
+.nr foo 0 -2
+\n+a, \n+a, \n+a, \n+a, \n+a
+.br
+\n-(xx, \n-(xx, \n-(xx, \n-(xx, \n-(xx
+.br
+\n+[foo], \n+[foo], \n+[foo], \n+[foo], \n+[foo]
+@endExample
+
+@noindent
+produces
+
+@Example
+1, 2, 3, 4, 5
+-5, -10, -15, -20, -25
+-2, -4, -6, -8, -10
+@endExample
+
+@cindex increment value without changing the register
+@cindex value, incrementing without changing the register
+To change the increment value without changing the value of a register
+(@var{a} in the example), the following can be used:
+
+@Example
+.nr a \na 10
+@endExample
+
+@c ---------------------------------------------------------------------
+
+@node Assigning Formats, Built-in Registers, Auto-increment, Registers
+@subsection Assigning Formats
+@cindex assigning formats (@code{af})
+@cindex formats, assigning (@code{af})
+
+When a register is used, it is always textually replaced (or
+interpolated) with a representation of that number.  This output format
+can be changed to a variety of formats (numbers, Roman numerals, etc.).
+This is done using the @code{af} request.
+
+@Defreq {af, ident format}
+Change the output format of a number register.  The first argument
+@var{ident} is the name of the number register to be changed, and the
+second argument @var{format} is the output format.  The following output
+formats are available:
+
+@table @code
+@item 1
+Decimal arabic numbers.  This is the default format: 0, 1, 2,
+3,@tie{}@enddots{}
+
+@item 0@dots{}0
+Decimal numbers with as many digits as specified.  So, @samp{00} would
+result in printing numbers as 01, 02, 03,@tie{}@enddots{}
+
+In fact, any digit instead of zero does work; @code{gtroff} only counts
+how many digits are specified.  As a consequence, @code{af}'s default
+format @samp{1} could be specified as @samp{0} also (and exactly this is
+returned by the @code{\g} escape, see below).
+
+@item I
+@cindex Roman numerals
+@cindex numerals, Roman
+Upper-case Roman numerals: 0, I, II, III, IV,@tie{}@enddots{}
+
+@item i
+Lower-case Roman numerals: 0, i, ii, iii, iv,@tie{}@enddots{}
+
+@item A
+Upper-case letters: 0, A, B, C, @dots{},@tie{}Z, AA, AB,@tie{}@enddots{}
+
+@item a
+Lower-case letters: 0, a, b, c, @dots{},@tie{}z, aa, ab,@tie{}@enddots{}
+@end table
+
+Omitting the number register format causes a warning of type
+@samp{missing}.  @xref{Debugging}, for more details.  Specifying a
+nonexistent format causes an error.
+
+The following example produces @samp{10, X, j, 010}:
+
+@Example
+.nr a 10
+.af a 1           \" the default format
+\na,
+.af a I
+\na,
+.af a a
+\na,
+.af a 001
+\na
+@endExample
+
+@cindex Roman numerals, maximum and minimum
+@cindex maximum values of Roman numerals
+@cindex minimum values of Roman numerals
+The largest number representable for the @samp{i} and @samp{I} formats
+is 39999 (or @minus{}39999); @acronym{UNIX} @code{troff} uses @samp{z}
+and @samp{w} to represent 10000 and 5000 in Roman numerals, and so does
+@code{gtroff}.  Currently, the correct glyphs of Roman numeral five
+thousand and Roman numeral ten thousand (Unicode code points
+@code{U+2182} and @code{U+2181}, respectively) are not available.
+
+If @var{ident} doesn't exist, it is created.
+
+@cindex read-only register, changing format
+@cindex changing format, and read-only registers
+Changing the output format of a read-only register causes an error.  It
+is necessary to first copy the register's value to a writeable register,
+then apply the @code{af} request to this other register.
+@endDefreq
+
+@DefescList {\\g, , i, }
+@DefescItem {\\g, @Lparen{}, id, }
+@DefescListEnd {\\g, @Lbrack{}, ident, @Rbrack{}}
+@cindex format of register (@code{\g})
+@cindex register, format (@code{\g})
+Return the current format of the specified register @var{ident}
+(one-character name@tie{}@var{i}, two-character name @var{id}).  For
+example, @samp{\ga} after the previous example would produce the string
+@samp{000}.  If the register hasn't been defined yet, nothing is
+returned.
+@endDefesc
+
+@c ---------------------------------------------------------------------
+
+@node Built-in Registers,  , Assigning Formats, Registers
+@subsection Built-in Registers
+@cindex built-in registers
+@cindex registers, built-in
+
+The following lists some built-in registers that are not described
+elsewhere in this manual.  Any register that begins with a @samp{.} is
+read-only.  A complete listing of all built-in registers can be found in
+@ref{Register Index}.
+
+@table @code
+@item \n[.F]
+@cindex current input file name register (@code{.F})
+@cindex input file name, current, register (@code{.F})
+@vindex .F
+This string-valued register returns the current input file name.
+
+@item \n[.H]
+@cindex horizontal resolution register (@code{.H})
+@cindex resolution, horizontal, register (@code{.H})
+@vindex .H
+Horizontal resolution in basic units.
+
+@item \n[.R]
+@cindex number of registers register (@code{.R})
+@cindex registers, number of, register (@code{.R})
+@vindex .R
+The number of number registers available.  This is always 10000 in
+GNU@tie{}@code{troff}; it exists for backward compatibility.
+
+@item \n[.U]
+@cindex safer mode
+@cindex mode, safer
+@cindex unsafe mode
+@cindex mode, unsafe
+@vindex .U
+If @code{gtroff} is called with the @option{-U} command line option to
+activate unsafe mode, the number register @code{.U} is set to@tie{}1,
+and to zero otherwise.  @xref{Groff Options}.
+
+@item \n[.V]
+@cindex vertical resolution register (@code{.V})
+@cindex resolution, vertical, register (@code{.V})
+@vindex .V
+Vertical resolution in basic units.
+
+@item \n[seconds]
+@cindex seconds, current time (@code{seconds})
+@cindex time, current, seconds (@code{seconds})
+@cindex current time, seconds (@code{seconds})
+@vindex seconds
+The number of seconds after the minute, normally in the range@tie{}0
+to@tie{}59, but can be up to@tie{}61 to allow for leap seconds.
+Initialized at start-up of @code{gtroff}.
+
+@item \n[minutes]
+@cindex minutes, current time (@code{minutes})
+@cindex time, current, minutes (@code{minutes})
+@cindex current time, minutes (@code{minutes})
+@vindex minutes
+The number of minutes after the hour, in the range@tie{}0 to@tie{}59.
+Initialized at start-up of @code{gtroff}.
+
+@item \n[hours]
+@cindex hours, current time (@code{hours})
+@cindex time, current, hours (@code{hours})
+@cindex current time, hours (@code{hours})
+@vindex hours
+The number of hours past midnight, in the range@tie{}0 to@tie{}23.
+Initialized at start-up of @code{gtroff}.
+
+@item \n[dw]
+@cindex day of the week register (@code{dw})
+@cindex date, day of the week register (@code{dw})
+@vindex dw
+Day of the week (1-7).
+
+@item \n[dy]
+@cindex day of the month register (@code{dy})
+@cindex date, day of the month register (@code{dy})
+@vindex dy
+Day of the month (1-31).
+
+@item \n[mo]
+@cindex month of the year register (@code{mo})
+@cindex date, month of the year register (@code{mo})
+@vindex mo
+Current month (1-12).
+
+@item \n[year]
+@cindex date, year register (@code{year}, @code{yr})
+@cindex year, current, register (@code{year}, @code{yr})
+@vindex year
+The current year.
+
+@item \n[yr]
+@vindex yr
+The current year minus@tie{}1900.  Unfortunately, the documentation of
+@acronym{UNIX} Version@tie{}7's @code{troff} had a year@tie{}2000 bug:
+It incorrectly claimed that @code{yr} contains the last two digits of
+the year.  That claim has never been true of either @acronym{AT&T}
+@code{troff} or GNU @code{troff}.  Old @code{troff} input that looks
+like this:
+
+@Example
+'\" The following line stopped working after 1999
+This document was formatted in 19\n(yr.
+@endExample
+
+@noindent
+can be corrected as follows:
+
+@Example
+This document was formatted in \n[year].
+@endExample
+
+@noindent
+or, to be portable to older @code{troff} versions, as follows:
+
+@Example
+.nr y4 1900+\n(yr
+This document was formatted in \n(y4.
+@endExample
+
+@item \n[.c]
+@vindex .c
+@itemx \n[c.]
+@vindex c.
+@cindex input line number register (@code{.c}, @code{c.})
+@cindex line number, input, register (@code{.c}, @code{c.})
+The current @emph{input} line number.  Register @samp{.c} is read-only,
+whereas @samp{c.} (a @code{gtroff} extension) is writable also,
+affecting both @samp{.c} and @samp{c.}.
+
+@item \n[ln]
+@vindex ln
+@cindex output line number register (@code{ln})
+@cindex line number, output, register (@code{ln})
+The current @emph{output} line number after a call to the @code{nm}
+request to activate line numbering.
+
+@xref{Miscellaneous}, for more information about line numbering.
+
+@item \n[.x]
+@vindex .x
+@cindex major version number register (@code{.x})
+@cindex version number, major, register (@code{.x})
+The major version number.  For example, if the version number is 1.03
+then @code{.x} contains@tie{}@samp{1}.
+
+@item \n[.y]
+@vindex .y
+@cindex minor version number register (@code{.y})
+@cindex version number, minor, register (@code{.y})
+The minor version number.  For example, if the version number is 1.03
+then @code{.y} contains@tie{}@samp{03}.
+
+@item \n[.Y]
+@vindex .Y
+@cindex revision number register (@code{.Y})
+The revision number of @code{groff}.
+
+@item \n[$$]
+@vindex $$
+@cindex process ID of @code{gtroff} register (@code{$$})
+@cindex @code{gtroff}, process ID register (@code{$$})
+The process ID of @code{gtroff}.
+
+@item \n[.g]
+@vindex .g
+@cindex @code{gtroff}, identification register (@code{.g})
+@cindex GNU-specific register (@code{.g})
+Always@tie{}1.  Macros should use this to determine whether they are
+running under GNU @code{troff}.
+
+@item \n[.A]
+@vindex .A
+@cindex @acronym{ASCII} approximation output register (@code{.A})
+If the command line option @option{-a} is used to produce an
+@acronym{ASCII} approximation of the output, this is set to@tie{}1, zero
+otherwise.  @xref{Groff Options}.
+
+@item \n[.O]
+@vindex .O
+This read-only register is set to the suppression nesting level (see
+escapes @code{\O}).  @xref{Suppressing output}.
+
+@item \n[.P]
+@vindex .P
+This register is set to@tie{}1 (and to@tie{}0 otherwise) if the current
+page is actually being printed, i.e., if the @option{-o} option is being
+used to only print selected pages.  @xref{Groff Options}, for more
+information.
+
+@item \n[.T]
+@vindex .T
+If @code{gtroff} is called with the @option{-T} command line option, the
+number register @code{.T} is set to@tie{}1, and zero otherwise.
+@xref{Groff Options}.
+
+@item \*[.T]
+@stindex .T
+@cindex output device name string register (@code{.T})
+A single read-write string register that contains the current output
+device (for example, @samp{latin1} or @samp{ps}).  This is the only
+string register defined by @code{gtroff}.
+@end table
+
+
+@c =====================================================================
+
+@node Manipulating Filling and Adjusting, Manipulating Hyphenation, Registers, gtroff Reference
+@section Manipulating Filling and Adjusting
+@cindex manipulating filling and adjusting
+@cindex filling and adjusting, manipulating
+@cindex adjusting and filling, manipulating
+@cindex justifying text
+@cindex text, justifying
+
+@cindex break
+@cindex line break
+@cindex @code{bp} request, causing implicit linebreak
+@cindex @code{ce} request, causing implicit linebreak
+@cindex @code{cf} request, causing implicit linebreak
+@cindex @code{fi} request, causing implicit linebreak
+@cindex @code{fl} request, causing implicit linebreak
+@cindex @code{in} request, causing implicit linebreak
+@cindex @code{nf} request, causing implicit linebreak
+@cindex @code{rj} request, causing implicit linebreak
+@cindex @code{sp} request, causing implicit linebreak
+@cindex @code{ti} request, causing implicit linebreak
+@cindex @code{trf} request, causing implicit linebreak
+Various ways of causing @dfn{breaks} were given in @ref{Implicit Line
+Breaks}.  The @code{br} request likewise causes a break.  Several other
+requests also cause breaks, but implicitly.  These are @code{bp},
+@code{ce}, @code{cf}, @code{fi}, @code{fl}, @code{in}, @code{nf},
+@code{rj}, @code{sp}, @code{ti}, and @code{trf}.
+
+@Defreq {br, }
+Break the current line, i.e., the input collected so far is emitted
+without adjustment.
+
+If the no-break control character is used, @code{gtroff} suppresses the
+break:
+
+@Example
+a
+'br
+b
+    @result{} a b
+@endExample
+@endDefreq
+
+Initially, @code{gtroff} fills and adjusts text to both margins.
+Filling can be disabled via the @code{nf} request and re-enabled with
+the @code{fi} request.
+
+@DefreqList {fi, }
+@DefregListEndx {.u}
+@cindex fill mode (@code{fi})
+@cindex mode, fill (@code{fi})
+Activate fill mode (which is the default).  This request implicitly
+enables adjusting; it also inserts a break in the text currently being
+filled.  The read-only number register @code{.u} is set to@tie{}1.
+
+The fill mode status is associated with the current environment
+(@pxref{Environments}).
+
+See @ref{Line Control}, for interaction with the @code{\c} escape.
+@endDefreq
+
+@Defreq {nf, }
+@cindex no-fill mode (@code{nf})
+@cindex mode, no-fill (@code{nf})
+Activate no-fill mode.  Input lines are output as-is, retaining line
+breaks and ignoring the current line length.  This command implicitly
+disables adjusting; it also causes a break.  The number register
+@code{.u} is set to@tie{}0.
+
+The fill mode status is associated with the current environment
+(@pxref{Environments}).
+
+See @ref{Line Control}, for interaction with the @code{\c} escape.
+@endDefreq
+
+@DefreqList {ad, [@Var{mode}]}
+@DefregListEndx {.j}
+Set adjusting mode.
+
+Activation and deactivation of adjusting is done implicitly with calls
+to the @code{fi} or @code{nf} requests.
+
+@var{mode} can have one of the following values:
+
+@table @code
+@item l
+@cindex ragged-right
+Adjust text to the left margin.  This produces what is traditionally
+called ragged-right text.
+
+@item r
+@cindex ragged-left
+Adjust text to the right margin, producing ragged-left text.
+
+@item c
+@cindex centered text
+@cindex @code{ce} request, difference to @samp{.ad@tie{}c}
+Center filled text.  This is different to the @code{ce} request, which
+only centers text without filling.
+
+@item b
+@itemx n
+Justify to both margins.  This is the default used by @code{gtroff}.
+@end table
+
+Finally, @var{mode} can be the numeric argument returned by the
+@code{.j} register.
+
+Using @code{ad} without argument is the same as saying
+@w{@code{.ad \[.j]}}.  In particular, @code{gtroff} adjusts lines
+in the same way it did before adjusting was deactivated (with a call
+to @code{na}, say).  For example, this input code
+
+@Example
+.de AD
+.  br
+.  ad \\$1
+..
+.
+.de NA
+.  br
+.  na
+..
+.
+textA
+.AD r
+.nr ad \n[.j]
+textB
+.AD c
+textC
+.NA
+textD
+.AD         \" back to centering
+textE
+.AD \n[ad]  \" back to right justifying
+textF
+@endExample
+
+@noindent
+produces the following output:
+
+@Example
+textA
+                                                    textB
+                          textC
+textD
+                          textE
+                                                    textF
+@endExample
+
+@cindex adjustment mode register (@code{.j})
+As just demonstrated, the current adjustment mode is available in the
+read-only number register @code{.j}; it can be stored and
+subsequently used to set adjustment.
+
+The adjustment mode status is associated with the current environment
+(@pxref{Environments}).
+@endDefreq
+
+@Defreq {na, }
+Disable adjusting.  This request won't change the current adjustment
+mode: A subsequent call to @code{ad} uses the previous adjustment
+setting.
+
+The adjustment mode status is associated with the current environment
+(@pxref{Environments}).
+@endDefreq
+
+@DefreqList {brp, }
+@DefescListEndx {\\p, , , }
+Adjust the current line and cause a break.
+
+In most cases this produces very ugly results since @code{gtroff}
+doesn't have a sophisticated paragraph building algorithm (as @TeX{}
+have, for example); instead, @code{gtroff} fills and adjusts a paragraph
+line by line:
+
+@Example
+This is an uninteresting sentence.
+This is an uninteresting sentence.\p
+This is an uninteresting sentence.
+@endExample
+
+@noindent
+is formatted as
+
+@Example
+This is  an uninteresting  sentence.   This  is an
+uninteresting                            sentence.
+This is an uninteresting sentence.
+@endExample
+@endDefreq
+
+@DefreqList {ss, word_space_size [@Var{sentence_space_size}]}
+@DefregItemx {.ss}
+@DefregListEndx {.sss}
+@cindex word space size register (@code{.ss})
+@cindex size of word space register (@code{.ss})
+@cindex space between words register (@code{.ss})
+@cindex sentence space size register (@code{.sss})
+@cindex size of sentence space register (@code{.sss})
+@cindex space between sentences register (@code{.sss})
+Change the size of a space between words.  It takes its units as one
+twelfth of the space width parameter for the current font.  Initially
+both the @var{word_space_size} and @var{sentence_space_size}
+are@tie{}12.  In fill mode, the values specify the minimum distance.
+
+@cindex fill mode
+@cindex mode, fill
+If two arguments are given to the @code{ss} request, the second argument
+sets the sentence space size.  If the second argument is not given,
+sentence space size is set to @var{word_space_size}.  The sentence space
+size is used in two circumstances: If the end of a sentence occurs at
+the end of a line in fill mode, then both an inter-word space and a
+sentence space are added; if two spaces follow the end of a sentence in
+the middle of a line, then the second space is a sentence space.  If a
+second argument is never given to the @code{ss} request, the behaviour
+of @acronym{UNIX} @code{troff} is the same as that exhibited by GNU
+@code{troff}.  In GNU @code{troff}, as in @acronym{UNIX} @code{troff}, a
+sentence should always be followed by either a newline or two spaces.
+
+The read-only number registers @code{.ss} and @code{.sss} hold the
+values of the parameters set by the first and second arguments of the
+@code{ss} request.
+
+The word space and sentence space values are associated with the current
+environment (@pxref{Environments}).
+
+Contrary to @acronym{AT&T} @code{troff}, this request is @emph{not}
+ignored if a TTY output device is used; the given values are then
+rounded down to a multiple of@tie{}12 (@pxref{Implementation
+Differences}).
+
+The request is ignored if there is no parameter.
+
+@cindex discardable horizontal space
+@cindex space, discardable, horizontal
+@cindex horizontal discardable space
+Another useful application of the @code{ss} request is to insert
+discardable horizontal space, i.e., space that is discarded at a line
+break.  For example, paragraph-style footnotes could be separated this
+way:
+
+@Example
+.ll 4.5i
+1.\ This is the first footnote.\c
+.ss 48
+.nop
+.ss 12
+2.\ This is the second footnote.
+@endExample
+
+@noindent
+The result:
+
+@Example
+1. This is the first footnote.        2. This
+is the second footnote.
+@endExample
+
+@noindent
+Note that the @code{\h} escape produces unbreakable space.
+@endDefreq
+
+@DefreqList {ce, [@Var{nnn}]}
+@DefregListEndx {.ce}
+@cindex centering lines (@code{ce})
+@cindex lines, centering (@code{ce})
+Center text.  While the @w{@samp{.ad c}} request also centers text, it
+fills the text as well.  @code{ce} does not fill the text it affects.
+This request causes a break.  The number of lines still to be centered
+is associated with the current environment (@pxref{Environments}).
+
+The following example demonstrates the differences.  Here is the input:
+
+@Example
+.ll 4i
+.ce 1000
+This is a small text fragment that shows the differences
+between the `.ce' and the `.ad c' request.
+.ce 0
+
+.ad c
+This is a small text fragment that shows the differences
+between the `.ce' and the `.ad c' request.
+@endExample
+
+@noindent
+And here the result:
+
+@Example
+  This is a small text fragment that
+         shows the differences
+between the `.ce' and the `.ad c' request.
+
+  This is a small text fragment that
+shows the differences between the `.ce'
+        and the `.ad c' request.
+@endExample
+
+With no arguments, @code{ce} centers the next line of text.  @var{nnn}
+specifies the number of lines to be centered.  If the argument is zero
+or negative, centering is disabled.
+
+The basic length for centering text is the line length (as set with the
+@code{ll} request) minus the indentation (as set with the @code{in}
+request).  Temporary indentation is ignored.
+
+As can be seen in the previous example, it is a common idiom to turn on
+centering for a large number of lines, and to turn off centering after
+text to be centered.  This is useful for any request that takes a
+number of lines as an argument.
+
+The @code{.ce} read-only number register contains the number of lines
+remaining to be centered, as set by the @code{ce} request.
+@endDefreq
+
+@DefreqList {rj, [@Var{nnn}]}
+@DefregListEndx {.rj}
+@cindex justifying text (@code{rj})
+@cindex text, justifying (@code{rj})
+@cindex right-justifying (@code{rj})
+Justify unfilled text to the right margin.  Arguments are identical to
+the @code{ce} request.  The @code{.rj} read-only number register is the
+number of lines to be right-justified as set by the @code{rj} request.
+This request causes a break.  The number of lines still to be
+right-justified is associated with the current environment
+(@pxref{Environments}).
+@endDefreq
+
+
+@c =====================================================================
+
+@node Manipulating Hyphenation, Manipulating Spacing, Manipulating Filling and Adjusting, gtroff Reference
+@section Manipulating Hyphenation
+@cindex manipulating hyphenation
+@cindex hyphenation, manipulating
+
+Here a description of requests that influence hyphenation.
+
+@DefreqList {hy, [@Var{mode}]}
+@DefregListEndx {.hy}
+Enable hyphenation.  The request has an optional numeric argument,
+@var{mode}, to restrict hyphenation if necessary:
+
+@table @code
+@item 1
+The default argument if @var{mode} is omitted.  Hyphenate without
+restrictions.  This is also the start-up value of @code{gtroff}.
+
+@item 2
+Do not hyphenate the last word on a page or column.
+
+@item 4
+Do not hyphenate the last two characters of a word.
+
+@item 8
+Do not hyphenate the first two characters of a word.
+@end table
+
+Values in the previous table are additive.  For example, the
+value@tie{}12 causes @code{gtroff} to neither hyphenate the last two nor
+the first two characters of a word.
+
+@cindex hyphenation restrictions register (@code{.hy})
+The current hyphenation restrictions can be found in the read-only
+number register @samp{.hy}.
+
+The hyphenation mode is associated with the current environment
+(@pxref{Environments}).
+@endDefreq
+
+@Defreq {nh, }
+Disable hyphenation (i.e., set the hyphenation mode to zero).  Note that
+the hyphenation mode of the last call to @code{hy} is not remembered.
+
+The hyphenation mode is associated with the current environment
+(@pxref{Environments}).
+@endDefreq
+
+@DefreqList {hlm, [@Var{nnn}]}
+@DefregItemx {.hlm}
+@DefregListEndx {.hlc}
+@cindex explicit hyphen (@code{\%})
+@cindex hyphen, explicit (@code{\%})
+@cindex consecutive hyphenated lines (@code{hlm})
+@cindex lines, consecutive hyphenated (@code{hlm})
+@cindex hyphenated lines, consecutive (@code{hlm})
+Set the maximum number of consecutive hyphenated lines to @var{nnn}.  If
+this number is negative, there is no maximum.  The default value
+is@tie{}@minus{}1 if @var{nnn} is omitted.  This value is associated
+with the current environment (@pxref{Environments}).  Only lines output
+from a given environment count towards the maximum associated with that
+environment.  Hyphens resulting from @code{\%} are counted; explicit
+hyphens are not.
+
+The current setting of @code{hlm} is available in the @code{.hlm}
+read-only number register.  Also the number of immediately preceding
+consecutive hyphenated lines are available in the read-only number
+register @samp{.hlc}.
+@endDefreq
+
+@Defreq {hw, word1 word2 @dots{}}
+Define how @var{word1}, @var{word2}, etc.@: are to be hyphenated.  The
+words must be given with hyphens at the hyphenation points.  For
+example:
+
+@Example
+.hw in-sa-lub-rious
+@endExample
+
+@noindent
+Besides the space character, any character whose hyphenation code value
+is zero can be used to separate the arguments of @code{hw} (see the
+documentation for the @code{hcode} request below for more information).
+In addition, this request can be used more than once.
+
+Hyphenation exceptions specified with the @code{hw} request are
+associated with the current hyphenation language; it causes an error if
+there is no current hyphenation language.
+
+This request is ignored if there is no parameter.
+
+In old versions of @code{troff} there was a limited amount of space to
+store such information; fortunately, with @code{gtroff}, this is no
+longer a restriction.
+@endDefreq
+
+@DefescList {\\%, , , }
+@deffnx Escape @t{\:}
+@ifnotinfo
+@esindex \:
+@end ifnotinfo
+@ifinfo
+@esindex \@r{<colon>}
+@end ifinfo
+@cindex hyphenation character (@code{\%})
+@cindex character, hyphenation (@code{\%})
+@cindex disabling hyphenation (@code{\%})
+@cindex hyphenation, disabling (@code{\%})
+To tell @code{gtroff} how to hyphenate words on the fly, use the
+@code{\%} escape, also known as the @dfn{hyphenation character}.
+Preceding a word with this character prevents it from being
+hyphenated; putting it inside a word indicates to @code{gtroff} that
+the word may be hyphenated at that point.  Note that this mechanism
+only affects that one occurrence of the word; to change the
+hyphenation of a word for the entire document, use the @code{hw}
+request.
+
+The @code{\:} escape inserts a zero-width break point (that is, the word
+breaks but without adding a hyphen).
+
+@Example
+... check the /var/log/\:httpd/\:access_log file ...
+@endExample
+
+@cindex @code{\X}, followed by @code{\%}
+@cindex @code{\Y}, followed by @code{\%}
+@cindex @code{\%}, following @code{\X} or @code{\Y}
+Note that @code{\X} and @code{\Y} start a word, that is, the @code{\%}
+escape in (say) @w{@samp{\X'...'\%foobar}} and
+@w{@samp{\Y'...'\%foobar}} no longer prevents hyphenation but inserts a
+hyphenation point at the beginning of @samp{foobar}; most likely this
+isn't what you want to do.
+@endDefesc
+
+@Defreq {hc, [@Var{char}]}
+Change the hyphenation character to @var{char}.  This character then
+works the same as the @code{\%} escape, and thus, no longer appears in
+the output.  Without an argument, @code{hc} resets the hyphenation
+character to be @code{\%} (the default) only.
+
+The hyphenation character is associated with the current environment
+(@pxref{Environments}).
+@endDefreq
+
+@DefreqList {hpf, pattern_file}
+@DefreqItemx {hpfa, pattern_file}
+@DefreqListEndx {hpfcode, a b [c d @dots{}]}
+@cindex hyphenation patterns (@code{hpf})
+@cindex patterns for hyphenation (@code{hpf})
+Read in a file of hyphenation patterns.  This file is searched for in
+the same way as @file{@var{name}.tmac} (or @file{tmac.@var{name}}) is
+searched for if the @option{-m@var{name}} option is specified.
+
+It should have the same format as (simple) @TeX{} patterns files.  More
+specifically, the following scanning rules are implemented.
+
+@itemize @bullet
+@item
+A percent sign starts a comment (up to the end of the line) even if
+preceded by a backslash.
+
+@item
+No support for `digraphs' like @code{\$}.
+
+@item
+@code{^^@var{xx}} (@var{x} is 0-9 or a-f) and @code{^^@var{x}}
+(character code of @var{x} in the range 0-127) are recognized; other use
+of @code{^} causes an error.
+
+@item
+No macro expansion.
+
+@item
+@code{hpf} checks for the expression @code{\patterns@{@dots{}@}}
+(possibly with whitespace before and after the braces).  Everything
+between the braces is taken as hyphenation patterns.  Consequently,
+@code{@{} and @code{@}} are not allowed in patterns.
+
+@item
+Similarly, @code{\hyphenation@{@dots{}@}} gives a list of hyphenation
+exceptions.
+
+@item
+@code{\endinput} is recognized also.
+
+@item
+For backwards compatibility, if @code{\patterns} is missing, the whole
+file is treated as a list of hyphenation patterns (only recognizing the
+@code{%} character as the start of a comment).
+@end itemize
+
+If no @code{hpf} request is specified (either in the document or in a
+macro package), @code{gtroff} won't hyphenate at all.
+
+The @code{hpfa} request appends a file of patterns to the current list.
+
+The @code{hpfcode} request defines mapping values for character codes in
+hyphenation patterns.  @code{hpf} or @code{hpfa} then apply the mapping
+(after reading the patterns) before replacing or appending them to the
+current list of patterns.  Its arguments are pairs of character codes --
+integers from 0 to@tie{}255.  The request maps character
+code@tie{}@var{a} to code@tie{}@var{b}, code@tie{}@var{c} to
+code@tie{}@var{d}, and so on.  You can use character codes that would
+be invalid otherwise.  By default, everything maps to itself except
+letters `A' to `Z', which map to `a' to `z'.
+
+
+@pindex troffrc
+@pindex troffrc-end
+@pindex hyphen.us
+@pindex hyphenex.us
+The set of hyphenation patterns is associated with the current language
+set by the @code{hla} request.  The @code{hpf} request is usually
+invoked by the @file{troffrc} or @file{troffrc-end} file; by default,
+@file{troffrc} loads hyphenation patterns and exceptions for American
+English (in files @file{hyphen.us} and @file{hyphenex.us}).
+
+A second call to @code{hpf} (for the same language) replaces the
+hyphenation patterns with the new ones.
+
+Invoking @code{hpf} causes an error if there is no current hyphenation
+language.
+@endDefreq
+
+@Defreq {hcode, c1 code1 [c2 code2 @dots{}]}
+@cindex hyphenation code (@code{hcode})
+@cindex code, hyphenation (@code{hcode})
+Set the hyphenation code of character @var{c1} to @var{code1}, that of
+@var{c2} to @var{code2}, etc.  A hyphenation code must be a single input
+character (not a special character) other than a digit or a space.
+
+To make hyphenation work, hyphenation codes must be set up.  At
+start-up, groff only assigns hyphenation codes to the letters
+@samp{a}-@samp{z} (mapped to themselves) and to the letters
+@samp{A}-@samp{Z} (mapped to @samp{a}-@samp{z}); all other hyphenation
+codes are set to zero.  Normally, hyphenation patterns contain only
+lowercase letters, which should be applied regardless of case.  In
+other words, the words `FOO' and `Foo' should be hyphenated exactly the
+same way as the word `foo' is hyphenated, and this is what @code{hcode}
+is good for.  Words that contain other letters won't be hyphenated
+properly if the corresponding hyphenation patterns actually do contain
+them.  For example, the following @code{hcode} requests are necessary to
+assign hyphenation codes to the letters @samp{�������} (this is needed
+for German):
+
+@Example
+.hcode � �  � �
+.hcode � �  � �
+.hcode � �  � �
+.hcode � �
+@endExample
+
+Without those assignments, groff treats German words like
+@w{`Kinderg�rten'} (the plural form of `kindergarten') as two substrings
+@w{`kinderg'} and @w{`rten'} because the hyphenation code of the
+umlaut@tie{}a is zero by default.  There is a German hyphenation pattern
+that covers @w{`kinder'}, so groff finds the hyphenation `kin-der'.
+The other two hyphenation points (`kin-der-g�r-ten') are missed.
+
+This request is ignored if it has no parameter.
+@endDefreq
+
+@DefreqList {hym, [@Var{length}]}
+@DefregListEndx {.hym}
+@cindex hyphenation margin (@code{hym})
+@cindex margin for hyphenation (@code{hym})
+@cindex @code{ad} request, and hyphenation margin
+Set the (right) hyphenation margin to @var{length}.  If the current
+adjustment mode is not @samp{b} or @samp{n}, the line is not hyphenated
+if it is shorter than @var{length}.  Without an argument, the
+hyphenation margin is reset to its default value, which is@tie{}0.  The
+default scaling indicator for this request is @samp{m}.  The hyphenation
+margin is associated with the current environment
+(@pxref{Environments}).
+
+A negative argument resets the hyphenation margin to zero, emitting a
+warning of type @samp{range}.
+
+@cindex hyphenation margin register (@code{.hym})
+The current hyphenation margin is available in the @code{.hym} read-only
+number register.
+@endDefreq
+
+@DefreqList {hys, [@Var{hyphenation_space}]}
+@DefregListEndx {.hys}
+@cindex hyphenation space (@code{hys})
+@cindex @code{ad} request, and hyphenation space
+Set the hyphenation space to @var{hyphenation_space}.  If the current
+adjustment mode is @samp{b} or @samp{n}, don't hyphenate the line if it
+can be justified by adding no more than @var{hyphenation_space} extra
+space to each word space.  Without argument, the hyphenation space is
+set to its default value, which is@tie{}0.  The default scaling
+indicator for this request is @samp{m}.  The hyphenation space is
+associated with the current environment (@pxref{Environments}).
+
+A negative argument resets the hyphenation space to zero, emitting a
+warning of type @samp{range}.
+
+@cindex hyphenation space register (@code{.hys})
+The current hyphenation space is available in the @code{.hys} read-only
+number register.
+@endDefreq
+
+@Defreq {shc, [@Var{glyph}]}
+@cindex soft hyphen character, setting (@code{shc})
+@cindex character, soft hyphen, setting (@code{shc})
+@cindex glyph, soft hyphen (@code{hy})
+@cindex soft hyphen glyph (@code{hy})
+@cindex @code{char} request, and soft hyphen character
+@cindex @code{tr} request, and soft hyphen character
+Set the @dfn{soft hyphen character} to @var{glyph}.@footnote{@dfn{Soft
+hyphen character} is a misnomer since it is an output glyph.}  If the
+argument is omitted, the soft hyphen character is set to the default
+glyph @code{\(hy} (this is the start-up value of @code{gtroff} also).
+The soft hyphen character is the glyph that is inserted when a word is
+hyphenated at a line break.  If the soft hyphen character does not exist
+in the font of the character immediately preceding a potential break
+point, then the line is not broken at that point.  Neither definitions
+(specified with the @code{char} request) nor translations (specified
+with the @code{tr} request) are considered when finding the soft hyphen
+character.
+@endDefreq
+
+@DefreqList {hla, language}
+@DefregListEndx {.hla}
+@cindex @code{hpf} request, and hyphenation language
+@cindex @code{hw} request, and hyphenation language
+@pindex troffrc
+@pindex troffrc-end
+Set the current hyphenation language to the string @var{language}.
+Hyphenation exceptions specified with the @code{hw} request and
+hyphenation patterns specified with the @code{hpf} and @code{hpfa}
+requests are both associated with the current hyphenation language.  The
+@code{hla} request is usually invoked by the @file{troffrc} or the
+@file{troffrc-end} files; @file{troffrc} sets the default language to
+@samp{us}.
+
+@cindex hyphenation language register (@code{.hla})
+The current hyphenation language is available as a string in the
+read-only number register @samp{.hla}.
+
+@Example
+.ds curr_language \n[.hla]
+\*[curr_language]
+    @result{} us
+@endExample
+@endDefreq
+
+
+@c =====================================================================
+
+@node Manipulating Spacing, Tabs and Fields, Manipulating Hyphenation, gtroff Reference
+@section Manipulating Spacing
+@cindex manipulating spacing
+@cindex spacing, manipulating
+
+@Defreq {sp, [@Var{distance}]}
+Space downwards @var{distance}.  With no argument it advances
+1@tie{}line.  A negative argument causes @code{gtroff} to move up the
+page the specified distance.  If the argument is preceded by a @samp{|}
+then @code{gtroff} moves that distance from the top of the page.  This
+request causes a line break, and that adds the current line spacing to
+the space you have just specified.  The default scaling indicator is
+@samp{v}.
+
+For convenience you may wish to use the following macros to set the
+height of the next line at a given distance from the top or the bottom
+of the page:
+
+@Example
+.de y-from-top-down
+.  sp |\\$1-\\n[.v]u
+..
+.
+.de y-from-bot-up
+.  sp |\\n[.p]u-\\$1-\\n[.v]u
+..
+@endExample
+
+@noindent
+A call to @samp{.y-from-bot-up 10c} means that the bottom of the next
+line will be at 10@dmn{cm} from the paper edge at the bottom.
+
+If a vertical trap is sprung during execution of @code{sp}, the amount
+of vertical space after the trap is discarded.  For example, this
+
+@Example
+.de xxx
+..
+.
+.wh 0 xxx
+.
+.pl 5v
+foo
+.sp 2
+bar
+.sp 50
+baz
+@endExample
+
+@noindent
+results in
+
+@Example
+foo
+
+
+bar
+
+baz
+@endExample
+
+@cindex @code{sp} request, and traps
+@cindex discarded space in traps
+@cindex space, discarded, in traps
+@cindex traps, and discarded space
+The amount of discarded space is available in the number register
+@code{.trunc}.
+
+To protect @code{sp} against vertical traps, use the @code{vpt} request:
+
+@Example
+.vpt 0
+.sp -3
+.vpt 1
+@endExample
+@endDefreq
+
+@DefreqList {ls, [@Var{nnn}]}
+@DefregListEndx {.L}
+@cindex double-spacing (@code{ls})
+Output @w{@var{nnn}@minus{}1} blank lines after each line of text.  With
+no argument, @code{gtroff} uses the previous value before the last
+@code{ls} call.
+
+@Example
+.ls 2    \" This causes double-spaced output
+.ls 3    \" This causes triple-spaced output
+.ls      \" Again double-spaced
+@endExample
+
+The line spacing is associated with the current environment
+(@pxref{Environments}).
+
+@cindex line spacing register (@code{.L})
+The read-only number register @code{.L} contains the current line
+spacing setting.
+@endDefreq
+
+@xref{Changing Type Sizes}, for the requests @code{vs} and @code{pvs} as
+alternatives to @code{ls}.
+
+@DefescList {\\x, ', spacing, '}
+@DefregListEndx {.a}
+Sometimes, extra vertical spacing is only needed occasionally, e.g.@: to
+allow space for a tall construct (like an equation).  The @code{\x}
+escape does this.  The escape is given a numerical argument, usually
+enclosed in quotes (like @samp{\x'3p'}); the default scaling indicator
+is @samp{v}.  If this number is positive extra vertical space is
+inserted below the current line.  A negative number adds space above.
+If this escape is used multiple times on the same line, the maximum of
+the values is used.
+
+@xref{Escapes}, for details on parameter delimiting characters.
+
+@cindex extra post-vertical line space register (@code{.a})
+The @code{.a} read-only number register contains the most recent
+(nonnegative) extra vertical line space.
+
+Using @code{\x} can be necessary in combination with the @code{\b}
+escape, as the following example shows.
+
+@Example
+This is a test with the \[rs]b escape.
+.br
+This is a test with the \[rs]b escape.
+.br
+This is a test with \b'xyz'\x'-1m'\x'1m'.
+.br
+This is a test with the \[rs]b escape.
+.br
+This is a test with the \[rs]b escape.
+@endExample
+
+@noindent
+produces
+
+@Example
+This is a test with the \b escape.
+This is a test with the \b escape.
+                    x
+This is a test with y.
+                    z
+This is a test with the \b escape.
+This is a test with the \b escape.
+@endExample
+@endDefesc
+
+@DefreqList {ns, }
+@DefreqItemx {rs, }
+@DefregListEndx {.ns}
+@cindex @code{sp} request, and no-space mode
+@cindex no-space mode (@code{ns})
+@cindex mode, no-space (@code{ns})
+@cindex blank lines, disabling
+@cindex lines, blank, disabling
+Enable @dfn{no-space mode}.  In this mode, spacing (either via @code{sp}
+or via blank lines) is disabled.  The @code{bp} request to advance to
+the next page is also disabled, except if it is accompanied by a page
+number (see @ref{Page Control}, for more information).  This mode ends
+when actual text is output or the @code{rs} request is encountered, which
+ends no-space mode.  The read-only number register @code{.ns} is set
+to@tie{}1 as long as no-space mode is active.
+
+This request is useful for macros that conditionally insert vertical
+space before the text starts (for example, a paragraph macro could
+insert some space except when it is the first paragraph after a section
+header).
+@endDefreq
+
+
+@c =====================================================================
+
+@node Tabs and Fields, Character Translations, Manipulating Spacing, gtroff Reference
+@section Tabs and Fields
+@cindex tabs, and fields
+@cindex fields, and tabs
+
+@cindex @acronym{EBCDIC} encoding of a tab
+A tab character (@acronym{ASCII} char@tie{}9, @acronym{EBCDIC}
+char@tie{}5) causes a horizontal movement to the next tab stop (much
+like it did on a typewriter).
+
+@Defesc {\\t, , , }
+@cindex tab character, non-interpreted (@code{\t})
+@cindex character, tab, non-interpreted (@code{\t})
+@cindex @code{\t}, and copy-in mode
+@cindex copy-in mode, and @code{\t}
+@cindex mode, copy-in, and @code{\t}
+This escape is a non-interpreted tab character.  In copy mode
+(@pxref{Copy-in Mode}), @code{\t} is the same as a real tab character.
+@endDefesc
+
+@DefreqList {ta, [@Var{n1} @Var{n2} @dots{} @Var{nn} @t{T} @Var{r1} @Var{r2} @dots{} @Var{rn}]}
+@DefregListEndx {.tabs}
+Change tab stop positions.  This request takes a series of tab
+specifiers as arguments (optionally divided into two groups with the
+letter @samp{T}) that indicate where each tab stop is to be (overriding
+any previous settings).
+
+Tab stops can be specified absolutely, i.e., as the distance from the
+left margin.  For example, the following sets 6@tie{}tab stops every one
+inch.
+
+@Example
+.ta 1i 2i 3i 4i 5i 6i
+@endExample
+
+Tab stops can also be specified using a leading @samp{+}, which means
+that the specified tab stop is set relative to the previous tab stop.
+For example, the following is equivalent to the previous example.
+
+@Example
+.ta 1i +1i +1i +1i +1i +1i
+@endExample
+
+@code{gtroff} supports an extended syntax to specify repeat values after
+the @samp{T} mark (these values are always taken as relative) -- this is
+the usual way to specify tabs set at equal intervals.  The following is,
+yet again, the same as the previous examples.  It does even more since
+it defines an infinite number of tab stops separated by one inch.
+
+@Example
+.ta T 1i
+@endExample
+
+Now we are ready to interpret the full syntax given at the beginning:
+Set tabs at positions @var{n1}, @var{n2}, @dots{}, @var{nn} and then set
+tabs at @var{nn}+@var{r1}, @var{nn}+@var{r2}, @dots{}, @var{nn}+@var{rn}
+and then at @var{nn}+@var{rn}+@var{r1}, @var{nn}+@var{rn}+@var{r2},
+@dots{}, @var{nn}+@var{rn}+@var{rn}, and so on.
+
+Example: @samp{4c +6c T 3c 5c 2c} is equivalent to @samp{4c 10c 13c 18c
+20c 23c 28c 30c @dots{}}.
+
+The material in each tab column (i.e., the column between two tab stops)
+may be justified to the right or left or centered in the column.  This
+is specified by appending @samp{R}, @samp{L}, or @samp{C} to the tab
+specifier.  The default justification is @samp{L}.  Example:
+
+@Example
+.ta 1i 2iC 3iR
+@endExample
+
+Some notes:
+
+@itemize @bullet
+@item
+The default unit of the @code{ta} request is @samp{m}.
+
+@item
+A tab stop is converted into a non-breakable horizontal movement that
+can be neither stretched nor squeezed.  For example,
+
+@Example
+.ds foo a\tb\tc
+.ta T 5i
+\*[foo]
+@endExample
+
+@noindent
+creates a single line, which is a bit longer than 10@tie{}inches (a
+string is used to show exactly where the tab characters are).  Now
+consider the following:
+
+@Example
+.ds bar a\tb b\tc
+.ta T 5i
+\*[bar]
+@endExample
+
+@noindent
+@code{gtroff} first converts the tab stops of the line into unbreakable
+horizontal movements, then splits the line after the second @samp{b}
+(assuming a sufficiently short line length).  Usually, this isn't what
+the user wants.
+
+@item
+Superfluous tabs (i.e., tab characters that do not correspond to a tab
+stop) are ignored except the first one, which delimits the characters
+belonging to the last tab stop for right-justifying or centering.
+Consider the following example
+
+@Example
+.ds Z   foo\tbar\tfoo
+.ds ZZ  foo\tbar\tfoobar
+.ds ZZZ foo\tbar\tfoo\tbar
+.ta 2i 4iR
+\*[Z]
+.br
+\*[ZZ]
+.br
+\*[ZZZ]
+.br
+@endExample
+
+@noindent
+which produces the following output:
+
+@Example
+foo                 bar              foo
+foo                 bar           foobar
+foo                 bar              foobar
+@endExample
+
+@noindent
+The first line right-justifies the second `foo' relative to the tab
+stop.  The second line right-justifies `foobar'.  The third line finally
+right-justifies only `foo' because of the additional tab character, which
+marks the end of the string belonging to the last defined tab stop.
+
+@item
+Tab stops are associated with the current environment
+(@pxref{Environments}).
+
+@item
+Calling @code{ta} without an argument removes all tab stops.
+
+@item
+@cindex tab stops, for TTY output devices
+The start-up value of @code{gtroff} is @w{@samp{T 0.8i}}.
+@end itemize
+
+@cindex tab settings register (@code{.tabs})
+The read-only number register @code{.tabs} contains a string
+representation of the current tab settings suitable for use as an
+argument to the @code{ta} request.
+
+@Example
+.ds tab-string \n[.tabs]
+\*[tab-string]
+    @result{} T120u
+@endExample
+
+@cindex @code{.S} register, Plan@tie{}9 alias for @code{.tabs}
+@cindex @code{.tabs} register, Plan@tie{}9 alias (@code{.S})
+The @code{troff} version of the Plan@tie{}9 operating system uses
+register @code{.S} for the same purpose.
+@endDefreq
+
+@Defreq {tc, [@Var{fill-glyph}]}
+@cindex tab repetition character (@code{tc})
+@cindex character, tab repetition (@code{tc})
+@cindex glyph, tab repetition (@code{tc})
+Normally @code{gtroff} fills the space to the next tab stop with
+whitespace.  This can be changed with the @code{tc} request.  With no
+argument @code{gtroff} reverts to using whitespace, which is the
+default.  The value of this @dfn{tab repetition character} is associated
+with the current environment (@pxref{Environments}).@footnote{@dfn{Tab
+repetition character} is a misnomer since it is an output glyph.}
+@endDefreq
+
+@DefreqList {linetabs, n}
+@DefregListEndx {.linetabs}
+@cindex tab, line-tabs mode
+@cindex line-tabs mode
+@cindex mode, line-tabs
+If @var{n} is missing or not zero, enable @dfn{line-tabs} mode, or
+disable it otherwise (the default).  In line-tabs mode, @code{gtroff}
+computes tab distances relative to the (current) output line instead of
+the input line.
+
+For example, the following code:
+
+@Example
+.ds x a\t\c
+.ds y b\t\c
+.ds z c
+.ta 1i 3i
+\*x
+\*y
+\*z
+@endExample
+
+@noindent
+in normal mode, results in the output
+
+@Example
+a         b         c
+@endExample
+
+@noindent
+in line-tabs mode, the same code outputs
+
+@Example
+a         b                   c
+@endExample
+
+Line-tabs mode is associated with the current environment.  The
+read-only register @code{.linetabs} is set to@tie{}1 if in line-tabs
+mode, and 0 in normal mode.
+@endDefreq
+
+@menu
+* Leaders::
+* Fields::
+@end menu
+
+@c ---------------------------------------------------------------------
+
+@node Leaders, Fields, Tabs and Fields, Tabs and Fields
+@subsection Leaders
+@cindex leaders
+
+Sometimes it may may be desirable to use the @code{tc} request to fill a
+particular tab stop with a given glyph (for example dots in a table of
+contents), but also normal tab stops on the rest of the line.  For this
+@code{gtroff} provides an alternate tab mechanism, called @dfn{leaders},
+which does just that.
+
+@cindex leader character
+A leader character (character code@tie{}1) behaves similarly to a tab
+character: It moves to the next tab stop.  The only difference is that
+for this movement, the fill glyph defaults to a period character and not
+to space.
+
+@Defesc {\\a, , , }
+@cindex leader character, non-interpreted (@code{\a})
+@cindex character, leader, non-interpreted (@code{\a})
+@cindex @code{\a}, and copy-in mode
+@cindex copy-in mode, and @code{\a}
+@cindex mode, copy-in, and @code{\a}
+This escape is a non-interpreted leader character.  In copy mode
+(@pxref{Copy-in Mode}), @code{\a} is the same as a real leader
+character.
+@endDefesc
+
+@Defreq {lc, [@Var{fill-glyph}]}
+@cindex leader repetition character (@code{lc})
+@cindex character, leader repetition (@code{lc})
+@cindex glyph, leader repetition (@code{lc})
+Declare the @dfn{leader repetition character}.@footnote{@dfn{Leader
+repetition character} is a misnomer since it is an output glyph.}
+Without an argument, leaders act the same as tabs (i.e., using
+whitespace for filling).  @code{gtroff}'s start-up value is a dot
+(@samp{.}).  The value of the leader repetition character is associated
+with the current environment (@pxref{Environments}).
+@endDefreq
+
+@cindex table of contents
+@cindex contents, table of
+For a table of contents, to name an example, tab stops may be defined so
+that the section number is one tab stop, the title is the second with
+the remaining space being filled with a line of dots, and then the page
+number slightly separated from the dots.
+
+@Example
+.ds entry 1.1\tFoo\a\t12
+.lc .
+.ta 1i 5i +.25i
+\*[entry]
+@endExample
+
+@noindent
+This produces
+
+@Example
+1.1  Foo..........................................  12
+@endExample
+
+@c ---------------------------------------------------------------------
+
+@node Fields,  , Leaders, Tabs and Fields
+@subsection Fields
+@cindex fields
+
+@cindex field delimiting character (@code{fc})
+@cindex delimiting character, for fields (@code{fc})
+@cindex character, field delimiting (@code{fc})
+@cindex field padding character (@code{fc})
+@cindex padding character, for fields (@code{fc})
+@cindex character, field padding (@code{fc})
+@dfn{Fields} are a more general way of laying out tabular data.  A field
+is defined as the data between a pair of @dfn{delimiting characters}.
+It contains substrings that are separated by @dfn{padding characters}.
+The width of a field is the distance on the @emph{input} line from the
+position where the field starts to the next tab stop.  A padding
+character inserts stretchable space similar to @TeX{}'s @code{\hss}
+command (thus it can even be negative) to make the sum of all substring
+lengths plus the stretchable space equal to the field width.  If more
+than one padding character is inserted, the available space is evenly
+distributed among them.
+
+@Defreq {fc, [@Var{delim-char} [@Var{padding-char}]]}
+Define a delimiting and a padding character for fields.  If the latter
+is missing, the padding character defaults to a space character.  If
+there is no argument at all, the field mechanism is disabled (which is
+the default).  Note that contrary to e.g.@: the tab repetition
+character, delimiting and padding characters are @emph{not} associated
+to the current environment (@pxref{Environments}).
+
+Example:
+
+@Example
+.fc # ^
+.ta T 3i
+#foo^bar^smurf#
+.br
+#foo^^bar^smurf#
+@endExample
+
+@noindent
+and here the result:
+
+@Example
+foo         bar          smurf
+foo            bar       smurf
+@endExample
+@endDefreq
+
+
+@c =====================================================================
+
+@node Character Translations, Troff and Nroff Mode, Tabs and Fields, gtroff Reference
+@section Character Translations
+@cindex character translations
+@cindex translations of characters
+
+@cindex control character, changing (@code{cc})
+@cindex character, control, changing (@code{cc})
+@cindex no-break control character, changing (@code{c2})
+@cindex character, no-break control, changing (@code{c2})
+@cindex control character, no-break, changing (@code{c2})
+The control character (@samp{.}) and the no-break control character
+(@samp{'}) can be changed with the @code{cc} and @code{c2} requests,
+respectively.
+
+@Defreq {cc, [@Var{c}]}
+Set the control character to@tie{}@var{c}.  With no argument the default
+control character @samp{.} is restored.  The value of the control
+character is associated with the current environment
+(@pxref{Environments}).
+@endDefreq
+
+@Defreq {c2, [@Var{c}]}
+Set the no-break control character to@tie{}@var{c}.  With no argument
+the default control character @samp{'} is restored.  The value of the
+no-break control character is associated with the current environment
+(@pxref{Environments}).
+@endDefreq
+
+@xref{Requests}.
+
+@Defreq {eo, }
+@cindex disabling @code{\} (@code{eo})
+@cindex @code{\}, disabling (@code{eo})
+Disable the escape mechanism completely.  After executing this request,
+the backslash character @samp{\} no longer starts an escape sequence.
+
+This request can be very helpful in writing macros since it is not
+necessary then to double the escape character.  Here an example:
+
+@Example
+.\" This is a simplified version of the
+.\" .BR request from the man macro package
+.eo
+.de BR
+.  ds result \&
+.  while (\n[.$] >= 2) \@{\
+.    as result \fB\$1\fR\$2
+.    shift 2
+.  \@}
+.  if \n[.$] .as result \fB\$1
+\*[result]
+.  ft R
+..
+.ec
+@endExample
+@endDefreq
+
+@Defreq {ec, [@Var{c}]}
+@cindex escape character, changing (@code{ec})
+@cindex character, escape, changing (@code{ec})
+Set the escape character to@tie{}@var{c}.  With no argument the default
+escape character @samp{\} is restored.  It can be also used to re-enable
+the escape mechanism after an @code{eo} request.
+
+Note that changing the escape character globally likely breaks macro
+packages since @code{gtroff} has no mechanism to `intern' macros, i.e.,
+to convert a macro definition into an internal form that is independent
+of its representation (@TeX{} has this mechanism).  If a macro is
+called, it is executed literally.
+@endDefreq
+
+@DefreqList {ecs, }
+@DefreqListEndx {ecr, }
+The @code{ecs} request saves the current escape character in an internal
+register.  Use this request in combination with the @code{ec} request to
+temporarily change the escape character.
+
+The @code{ecr} request restores the escape character saved with
+@code{ecs}.  Without a previous call to @code{ecs}, this request sets
+the escape character to @code{\}.
+@endDefreq
+
+@DefescList {\\\\, , , }
+@DefescItemx {\\e, , , }
+@DefescListEndx {\\E, , , }
+Print the current escape character (which is the backslash character
+@samp{\} by default).
+
+@code{\\} is a `delayed' backslash; more precisely, it is the default
+escape character followed by a backslash, which no longer has special
+meaning due to the leading escape character.  It is @emph{not} an escape
+sequence in the usual sense!  In any unknown escape sequence
+@code{\@var{X}} the escape character is ignored and @var{X} is printed.
+But if @var{X} is equal to the current escape character, no warning is
+emitted.
+
+@cindex @code{\E}, and copy-in mode
+@cindex copy-in mode, and @code{\E}
+@cindex mode, copy-in, and @code{\E}
+As a consequence, only at top-level or in a diversion a backslash glyph
+is printed; in copy-in mode, it expands to a single backslash, which then
+combines with the following character to an escape sequence.
+
+The @code{\E} escape differs from @code{\e} by printing an escape
+character that is not interpreted in copy mode.  Use this to define
+strings with escapes that work when used in copy mode (for example, as a
+macro argument).  The following example defines strings to begin and end
+a superscript:
+
+@Example
+.ds @{ \v'-.3m'\s'\En[.s]*60/100'
+.ds @} \s0\v'.3m'
+@endExample
+
+Another example to demonstrate the differences between the various
+escape sequences, using a strange escape character, @samp{-}.
+
+@Example
+.ec -
+.de xxx
+--A'123'
+..
+.xxx
+    @result{} -A'foo'
+@endExample
+
+@noindent
+The result is surprising for most users, expecting @samp{1} since
+@samp{foo} is a valid identifier.  What has happened?  As mentioned
+above, the leading escape character makes the following character
+ordinary.  Written with the default escape character the sequence
+@samp{--} becomes @samp{\-} -- this is the minus sign.
+
+If the escape character followed by itself is a valid escape sequence,
+only @code{\E} yields the expected result:
+
+@Example
+.ec -
+.de xxx
+-EA'123'
+..
+.xxx
+    @result{} 1
+@endExample
+@endDefesc
+
+@Defesc {\\., , , }
+Similar to @code{\\}, the sequence @code{\.} isn't a real escape
+sequence.  As before, a warning message is suppressed if the escape
+character is followed by a dot, and the dot itself is printed.
+
+@Example
+.de foo
+.  nop foo
+.
+.  de bar
+.    nop bar
+\\..
+.
+..
+.foo
+.bar
+    @result{} foo bar
+@endExample
+
+@noindent
+The first backslash is consumed while the macro is read, and the second
+is swallowed while executing macro @code{foo}.
+@endDefesc
+
+A @dfn{translation} is a mapping of an input character to an output
+glyph.  The mapping occurs at output time, i.e., the input character
+gets assigned the metric information of the mapped output character
+right before input tokens are converted to nodes (@pxref{Gtroff
+Internals}, for more on this process).
+
+@DefreqList {tr, @Var{a}@Var{b}@Var{c}@Var{d}@dots{}}
+@DefreqListEndx {trin, @Var{a}@Var{b}@Var{c}@Var{d}@dots{}}
+Translate character @var{a} to glyph@tie{}@var{b}, character @var{c} to
+glyph@tie{}@var{d}, etc.  If there is an odd number of arguments, the
+last one is translated to an unstretchable space (@w{@samp{\ }}).
+
+The @code{trin} request is identical to @code{tr}, but when you unformat
+a diversion with @code{asciify} it ignores the translation.
+@xref{Diversions}, for details about the @code{asciify} request.
+
+Some notes:
+
+@itemize @bullet
+@item
+@cindex @code{\(}, and translations
+@cindex @code{\[}, and translations
+@cindex @code{\'}, and translations
+@cindex @code{\`}, and translations
+@cindex @code{\-}, and translations
+@cindex @code{\_}, and translations
+@cindex @code{\C}, and translations
+@cindex @code{\N}, and translations
+@cindex @code{char} request, and translations
+@cindex special characters
+@cindex character, special
+@cindex numbered glyph (@code{\N})
+@cindex glyph, numbered (@code{\N})
+Special characters (@code{\(@var{xx}}, @code{\[@var{xxx}]},
+@code{\C'@var{xxx}'}, @code{\'}, @code{\`}, @code{\-}, @code{\_}),
+glyphs defined with the @code{char} request, and numbered glyphs
+(@code{\N'@var{xxx}'}) can be translated also.
+
+@item
+@cindex @code{\e}, and translations
+The @code{\e} escape can be translated also.
+
+@item
+@cindex @code{\%}, and translations
+@cindex @code{\~}, and translations
+Characters can be mapped onto the @code{\%} and @code{\~} escapes (but
+@code{\%} and @code{\~} can't be mapped onto another glyph).
+
+@item
+@cindex backspace character, and translations
+@cindex character, backspace, and translations
+@cindex leader character, and translations
+@cindex character, leader, and translations
+@cindex newline character, and translations
+@cindex character, newline, and translations
+@cindex tab character, and translations
+@cindex character, tab, and translations
+@cindex @code{\a}, and translations
+@cindex @code{\t}, and translations
+The following characters can't be translated: space (with one exception,
+see below), backspace, newline, leader (and @code{\a}), tab (and
+@code{\t}).
+
+@item
+@cindex @code{shc} request, and translations
+Translations are not considered for finding the soft hyphen character
+set with the @code{shc} request.
+
+@item
+@cindex @code{\&}, and translations
+The pair @samp{@var{c}\&} (this is an arbitrary character@tie{}@var{c}
+followed by the zero width space character) maps this character to
+nothing.
+
+@Example
+.tr a\&
+foo bar
+    @result{} foo br
+@endExample
+
+@noindent
+It is even possible to map the space character to nothing:
+
+@Example
+.tr aa \&
+foo bar
+    @result{} foobar
+@endExample
+
+@noindent
+As shown in the example, the space character can't be the first
+character/glyph pair as an argument of @code{tr}.  Additionally, it is
+not possible to map the space character to any other glyph; requests
+like @w{@samp{.tr aa x}} undo @w{@samp{.tr aa \&}} instead.
+
+If justification is active, lines are justified in spite of the `empty'
+space character (but there is no minimal distance, i.e.@: the space
+character, between words).
+
+@item
+After an output glyph has been constructed (this happens at the moment
+immediately before the glyph is appended to an output glyph list, either
+by direct output, in a macro, diversion, or string), it is no longer
+affected by @code{tr}.
+
+@item
+Translating character to glyphs where one of them or both are undefined
+is possible also; @code{tr} does not check whether the entities in its
+argument do exist.
+
+@xref{Gtroff Internals}.
+
+@item
+@code{troff} no longer has a hard-coded dependency on @w{Latin-1}; all
+@code{char@var{XXX}} entities have been removed from the font
+description files.  This has a notable consequence that shows up in
+warnings like @code{can't find character with input code @var{XXX}} if
+the @code{tr} request isn't handled properly.
+
+Consider the following translation:
+
+@Example
+.tr ��
+@endExample
+
+@noindent
+This maps input character @code{�} onto glyph @code{�}, which is
+identical to glyph @code{char201}.  But this glyph intentionally doesn't
+exist!  Instead, @code{\[char201]} is treated as an input character
+entity and is by default mapped onto @code{\['E]}, and @code{gtroff}
+doesn't handle translations of translations.
+
+The right way to write the above translation is
+
+@Example
+.tr �\['E]
+@endExample
+
+@noindent
+In other words, the first argument of @code{tr} should be an input
+character or entity, and the second one a glyph entity.
+
+@item
+Without an argument, the @code{tr} request is ignored.
+@end itemize
+@endDefreq
+
+@Defreq {trnt, @Var{a}@Var{b}@Var{c}@Var{d}@dots{}}
+@cindex @code{\!}, and @code{trnt}
+@code{trnt} is the same as the @code{tr} request except that the
+translations do not apply to text that is transparently throughput into
+a diversion with @code{\!}.  @xref{Diversions}, for more information.
+
+For example,
+
+@Example
+.tr ab
+.di x
+\!.tm a
+.di
+.x
+@endExample
+
+@noindent
+prints @samp{b} to the standard error stream; if @code{trnt} is used
+instead of @code{tr} it prints @samp{a}.
+@endDefreq
+
+
+@c =====================================================================
+
+@node Troff and Nroff Mode, Line Layout, Character Translations, gtroff Reference
+@section Troff and Nroff Mode
+@cindex troff mode
+@cindex mode, troff
+@cindex nroff mode
+@cindex mode, nroff
+
+Originally, @code{nroff} and @code{troff} were two separate programs,
+the former for TTY output, the latter for everything else.  With GNU
+@code{troff}, both programs are merged into one executable, sending its
+output to a device driver (@code{grotty} for TTY devices, @code{grops}
+for @sc{PostScript}, etc.)@: which interprets the intermediate output of
+@code{gtroff}.  For @acronym{UNIX} @code{troff} it makes sense to talk
+about @dfn{Nroff mode} and @dfn{Troff mode} since the differences are
+hardcoded.  For GNU @code{troff}, this distinction is not appropriate
+because @code{gtroff} simply takes the information given in the font
+files for a particular device without handling requests specially if a
+TTY output device is used.
+
+Usually, a macro package can be used with all output devices.
+Nevertheless, it is sometimes necessary to make a distinction between
+TTY and non-TTY devices: @code{gtroff} provides two built-in conditions
+@samp{n} and @samp{t} for the @code{if}, @code{ie}, and @code{while}
+requests to decide whether @code{gtroff} shall behave like @code{nroff}
+or like @code{troff}.
+
+@Defreq {troff, }
+@pindex troffrc
+@pindex troffrc-end
+Make the @samp{t} built-in condition true (and the @samp{n} built-in
+condition false) for @code{if}, @code{ie}, and @code{while} conditional
+requests.  This is the default if @code{gtroff} (@emph{not}
+@code{groff}) is started with the @option{-R} switch to avoid loading of
+the start-up files @file{troffrc} and @file{troffrc-end}.  Without
+@option{-R}, @code{gtroff} stays in troff mode if the output device is
+not a TTY (e.g.@: `ps').
+@endDefreq
+
+@Defreq {nroff, }
+@pindex tty.tmac
+Make the @samp{n} built-in condition true (and the @samp{t} built-in
+condition false) for @code{if}, @code{ie}, and @code{while} conditional
+requests.  This is the default if @code{gtroff} uses a TTY output
+device; the code for switching to nroff mode is in the file
+@file{tty.tmac}, which is loaded by the start-up file @code{troffrc}.
+@endDefreq
+
+@xref{Conditionals and Loops}, for more details on built-in conditions.
+
+
+@c =====================================================================
+
+@node Line Layout, Line Control, Troff and Nroff Mode, gtroff Reference
+@section Line Layout
+@cindex line layout
+@cindex layout, line
+
+@cindex dimensions, line
+@cindex line dimensions
+The following drawing shows the dimensions that @code{gtroff} uses for
+placing a line of output onto the page.  They are labeled with the
+request that manipulates each dimension.
+
+@Example
+     -->| in |<--
+        |<-----------ll------------>|
+   +----+----+----------------------+----+
+   |    :    :                      :    |
+   +----+----+----------------------+----+
+-->| po |<--
+   |<--------paper width---------------->|
+@endExample
+
+@noindent
+These dimensions are:
+
+@ftable @code
+@item po
+@cindex left margin (@code{po})
+@cindex margin, left (@code{po})
+@cindex page offset (@code{po})
+@cindex offset, page (@code{po})
+@dfn{Page offset} -- this is the leftmost position of text on the final
+output, defining the @dfn{left margin}.
+
+@item in
+@cindex indentation (@code{in})
+@cindex line indentation (@code{in})
+@dfn{Indentation} -- this is the distance from the left margin where
+text is printed.
+
+@item ll
+@cindex line length (@code{ll})
+@cindex length of line (@code{ll})
+@dfn{Line length} -- this is the distance from the left margin to right
+margin.
+@end ftable
+
+A simple demonstration:
+
+@Example
+.ll 3i
+This is text without indentation.
+The line length has been set to 3\~inch.
+.in +.5i
+.ll -.5i
+Now the left and right margins are both increased.
+.in
+.ll
+Calling .in and .ll without parameters restore
+the previous values.
+@endExample
+
+Result:
+
+@Example
+This  is text without indenta-
+tion.   The  line  length  has
+been set to 3 inch.
+     Now   the  left  and
+     right  margins   are
+     both increased.
+Calling  .in  and  .ll without
+parameters restore the  previ-
+ous values.
+@endExample
+
+@DefreqList {po, [@Var{offset}]}
+@DefreqItem {po, @t{+}@Var{offset}}
+@DefreqItem {po, @t{-}@Var{offset}}
+@DefregListEndx {.o}
+@pindex troffrc
+Set horizontal page offset to @var{offset} (or increment or decrement
+the current value by @var{offset}).  Note that this request does not
+cause a break, so changing the page offset in the middle of text being
+filled may not yield the expected result.  The initial value is
+1@dmn{i}.  For TTY output devices, it is set to 0 in the startup file
+@file{troffrc}; the default scaling indicator is @samp{m} (and not
+@samp{v} as incorrectly documented in the original @acronym{UNIX} troff
+manual).
+
+The current page offset can be found in the read-only number register
+@samp{.o}.
+
+If @code{po} is called without an argument, the page offset is reset to
+the previous value before the last call to @code{po}.
+
+@Example
+.po 3i
+\n[.o]
+    @result{} 720
+.po -1i
+\n[.o]
+    @result{} 480
+.po
+\n[.o]
+    @result{} 720
+@endExample
+@endDefreq
+
+@DefreqList {in, [@Var{indent}]}
+@DefreqItem {in, @t{+}@Var{indent}}
+@DefreqItem {in, @t{-}@Var{indent}}
+@DefregListEndx {.i}
+Set indentation to @var{indent} (or increment or decrement the current
+value by @var{indent}).  This request causes a break.  Initially, there
+is no indentation.
+
+If @code{in} is called without an argument, the indentation is reset to
+the previous value before the last call to @code{in}.  The default
+scaling indicator is @samp{m}.
+
+The indentation is associated with the current environment
+(@pxref{Environments}).
+
+If a negative indentation value is specified (which is not allowed),
+@code{gtroff} emits a warning of type @samp{range} and sets the
+indentation to zero.
+
+The effect of @code{in} is delayed until a partially collected line (if
+it exists) is output.  A temporary indentation value is reset to zero
+also.
+
+The current indentation (as set by @code{in}) can be found in the
+read-only number register @samp{.i}.
+@endDefreq
+
+@DefreqList {ti, offset}
+@DefreqItem {ti, @t{+}@Var{offset}}
+@DefreqItem {ti, @t{-}@Var{offset}}
+@DefregListEndx {.in}
+Temporarily indent the next output line by @var{offset}.  If an
+increment or decrement value is specified, adjust the temporary
+indentation relative to the value set by the @code{in} request.
+
+This request causes a break; its value is associated with the current
+environment (@pxref{Environments}).  The default scaling indicator is
+@samp{m}.  A call of @code{ti} without an argument is ignored.
+
+If the total indentation value is negative (which is not allowed),
+@code{gtroff} emits a warning of type @samp{range} and sets the
+temporary indentation to zero.  `Total indentation' is either
+@var{offset} if specified as an absolute value, or the temporary plus
+normal indentation, if @var{offset} is given as a relative value.
+
+The effect of @code{ti} is delayed until a partially collected line (if
+it exists) is output.
+
+The read-only number register @code{.in} is the indentation that applies
+to the current output line.
+
+The difference between @code{.i} and @code{.in} is that the latter takes
+into account whether a partially collected line still uses the old
+indentation value or a temporary indentation value is active.
+@endDefreq
+
+@DefreqList {ll, [@Var{length}]}
+@DefreqItem {ll, @t{+}@Var{length}}
+@DefreqItem {ll, @t{-}@Var{length}}
+@DefregItemx {.l}
+@DefregListEndx {.ll}
+Set the line length to @var{length} (or increment or decrement the
+current value by @var{length}).  Initially, the line length is set to
+6.5@dmn{i}.  The effect of @code{ll} is delayed until a partially
+collected line (if it exists) is output.  The default scaling indicator
+is @samp{m}.
+
+If @code{ll} is called without an argument, the line length is reset to
+the previous value before the last call to @code{ll}.  If a negative
+line length is specified (which is not allowed), @code{gtroff} emits a
+warning of type @samp{range} and sets the line length to zero.
+
+The line length is associated with the current environment
+(@pxref{Environments}).
+
+@cindex line length register (@code{.l})
+The current line length (as set by @code{ll}) can be found in the
+read-only number register @samp{.l}.  The read-only number register
+@code{.ll} is the line length that applies to the current output line.
+
+Similar to @code{.i} and @code{.in}, the difference between @code{.l}
+and @code{.ll} is that the latter takes into account whether a partially
+collected line still uses the old line length value.
+@endDefreq
+
+
+@c =====================================================================
+
+@node Line Control, Page Layout, Line Layout, gtroff Reference
+@section Line Control
+@cindex line control
+@cindex control, line
+
+It is important to understand how @code{gtroff} handles input and output
+lines.
+
+Many escapes use positioning relative to the input line.  For example,
+this
+
+@Example
+This is a \h'|1.2i'test.
+
+This is a
+\h'|1.2i'test.
+@endExample
+
+@noindent
+produces
+
+@Example
+This is a   test.
+
+This is a             test.
+@endExample
+
+The main usage of this feature is to define macros that act exactly at
+the place where called.
+
+@Example
+.\" A simple macro to underline a word
+.de underline
+.  nop \\$1\l'|0\[ul]'
+..
+@endExample
+
+@noindent
+In the above example, @samp{|0} specifies a negative distance from the
+current position (at the end of the just emitted argument @code{\$1})
+back to the beginning of the input line.  Thus, the @samp{\l} escape
+draws a line from right to left.
+
+@cindex input line continuation (@code{\})
+@cindex line, input, continuation (@code{\})
+@cindex continuation, input line (@code{\})
+@cindex output line, continuation (@code{\c})
+@cindex line, output, continuation (@code{\c})
+@cindex continuation, output line (@code{\c})
+@cindex interrupted line
+@cindex line, interrupted
+@code{gtroff} makes a difference between input and output line
+continuation; the latter is also called @dfn{interrupting} a line.
+
+@DefescList {\\@key{RET}, , ,}
+@DefescItemx {\\c, , ,}
+@DefregListEndx {.int}
+Continue a line.  @code{\@key{RET}} (this is a backslash at the end of a
+line immediately followed by a newline) works on the input level,
+suppressing the effects of the following newline in the input.
+
+@Example
+This is a \
+.test
+    @result{} This is a .test
+@endExample
+
+The @samp{|} operator is also affected.
+
+@cindex @code{\R}, after @code{\c}
+@code{\c} works on the output level.  Anything after this escape on the
+same line is ignored except @code{\R}, which works as usual.  Anything
+before @code{\c} on the same line is appended to the current partial
+output line.  The next non-command line after an interrupted line counts
+as a new input line.
+
+The visual results depend on whether no-fill mode is active.
+
+@itemize @bullet
+@item
+@cindex @code{\c}, and no-fill mode
+@cindex no-fill mode, and @code{\c}
+@cindex mode, no-fill, and @code{\c}
+If no-fill mode is active (using the @code{nf} request), the next input
+text line after @code{\c} is handled as a continuation of the same input
+text line.
+
+@Example
+.nf
+This is a \c
+test.
+    @result{} This is a test.
+@endExample
+
+@item
+@cindex @code{\c}, and fill mode
+@cindex fill mode, and @code{\c}
+@cindex mode, fill, and @code{\c}
+If fill mode is active (using the @code{fi} request), a word interrupted
+with @code{\c} is continued with the text on the next input text line,
+without an intervening space.
+
+@Example
+This is a te\c
+st.
+    @result{} This is a test.
+@endExample
+@end itemize
+
+Note that an intervening control line that causes a break is stronger
+than @code{\c}, flushing out the current partial line in the usual way.
+
+@cindex interrupted line register (@code{.int})
+The @code{.int} register contains a positive value if the last output
+line was interrupted with @code{\c}; this is associated with the current
+environment (@pxref{Environments}).
+@endDefesc
+
+
+@c =====================================================================
+
+@node Page Layout, Page Control, Line Control, gtroff Reference
+@section Page Layout
+@cindex page layout
+@cindex layout, page
+
+@code{gtroff} provides some very primitive operations for controlling
+page layout.
+
+@DefreqList {pl, [@Var{length}]}
+@DefreqItem {pl, @t{+}@Var{length}}
+@DefreqItem {pl, @t{-}@Var{length}}
+@DefregListEndx {.p}
+@cindex page length (@code{pl})
+@cindex length of page (@code{pl})
+Set the @dfn{page length} to @var{length} (or increment or decrement the
+current value by @var{length}).  This is the length of the physical
+output page.  The default scaling indicator is @samp{v}.
+
+@cindex page length register (@code{.p})
+The current setting can be found in the read-only number register
+@samp{.p}.
+
+@cindex top margin
+@cindex margin, top
+@cindex bottom margin
+@cindex margin, bottom
+Note that this only specifies the size of the page, not the top and
+bottom margins.  Those are not set by @code{gtroff} directly.
+@xref{Traps}, for further information on how to do this.
+
+Negative @code{pl} values are possible also, but not very useful: No
+trap is sprung, and each line is output on a single page (thus
+suppressing all vertical spacing).
+
+If no argument or an invalid argument is given, @code{pl} sets the page
+length to 11@dmn{i}.
+@endDefreq
+
+@cindex headers
+@cindex footers
+@cindex titles
+@code{gtroff} provides several operations that help in setting up top
+and bottom titles (or headers and footers).
+
+@Defreq {tl, @t{'}@Var{left}@t{'}@Var{center}@t{'}@Var{right}@t{'}}
+@cindex title line (@code{tl})
+@cindex three-part title (@code{tl})
+@cindex page number character (@code{%})
+Print a @dfn{title line}.  It consists of three parts: a left justified
+portion, a centered portion, and a right justified portion.  The
+argument separator @samp{'} can be replaced with any character not
+occurring in the title line.  The @samp{%} character is replaced with
+the current page number.  This character can be changed with the
+@code{pc} request (see below).
+
+Without argument, @code{tl} is ignored.
+
+Some notes:
+
+@itemize @bullet
+@item
+The line length set by the @code{ll} request is not honoured by
+@code{tl}; use the @code{lt} request (described below) instead, to
+control line length for text set by @code{tl}.
+
+@item
+A title line is not restricted to the top or bottom of a page.
+
+@item
+@code{tl} prints the title line immediately, ignoring a partially filled
+line (which stays untouched).
+
+@item
+It is not an error to omit closing delimiters.  For example,
+@w{@samp{.tl /foo}} is equivalent to @w{@samp{.tl /foo///}}: It prints a
+title line with the left justified word @samp{foo}; the centered and
+right justfied parts are empty.
+
+@item
+@code{tl} accepts the same parameter delimiting characters as the
+@code{\A} escape; see @ref{Escapes}.
+@end itemize
+@endDefreq
+
+@DefreqList {lt, [@Var{length}]}
+@DefreqItem {lt, @t{+}@Var{length}}
+@DefreqItem {lt, @t{-}@Var{length}}
+@DefregListEndx {.lt}
+@cindex length of title line (@code{lt})
+@cindex title line, length (@code{lt})
+@cindex title line length register (@code{.lt})
+The title line is printed using its own line length, which is specified
+(or incremented or decremented) with the @code{lt} request.  Initially,
+the title line length is set to 6.5@dmn{i}.  If a negative line length
+is specified (which is not allowed), @code{gtroff} emits a warning of
+type @samp{range} and sets the title line length to zero.  The default
+scaling indicator is @samp{m}.  If @code{lt} is called without an
+argument, the title length is reset to the previous value before the
+last call to @code{lt}.
+
+The current setting of this is available in the @code{.lt} read-only
+number register; it is associated with the current environment
+(@pxref{Environments}).
+@endDefreq
+
+@DefreqList {pn, page}
+@DefreqItem {pn, @t{+}@Var{page}}
+@DefreqItem {pn, @t{-}@Var{page}}
+@DefregListEndx {.pn}
+@cindex page number (@code{pn})
+@cindex number, page (@code{pn})
+Change (increase or decrease) the page number of the @emph{next} page.
+The only argument is the page number; the request is ignored without a
+parameter.
+
+The read-only number register @code{.pn} contains the number of the next
+page: either the value set by a @code{pn} request, or the number of the
+current page plus@tie{}1.
+@endDefreq
+
+@Defreq {pc, [@Var{char}]}
+@cindex changing the page number character (@code{pc})
+@cindex page number character, changing (@code{pc})
+@vindex %
+Change the page number character (used by the @code{tl} request) to a
+different character.  With no argument, this mechanism is disabled.
+Note that this doesn't affect the number register@tie{}@code{%}.
+@endDefreq
+
+@xref{Traps}.
+
+
+@c =====================================================================
+
+@node Page Control, Fonts and Symbols, Page Layout, gtroff Reference
+@section Page Control
+@cindex page control
+@cindex control, page
+
+@DefreqList {bp, [@Var{page}]}
+@DefreqItem {bp, @t{+}@Var{page}}
+@DefreqItem {bp, @t{-}@Var{page}}
+@DefregListEndx {%}
+@cindex new page (@code{bp})
+@cindex page, new (@code{bp})
+Stop processing the current page and move to the next page.  This
+request causes a break.  It can also take an argument to set (increase,
+decrease) the page number of the next page (which actually becomes the
+current page after @code{bp} has finished).  The difference between
+@code{bp} and @code{pn} is that @code{pn} does not cause a break or
+actually eject a page.  @xref{Page Layout}.
+
+@Example
+.de newpage                         \" define macro
+'bp                                 \" begin page
+'sp .5i                             \" vertical space
+.tl 'left top'center top'right top' \" title
+'sp .3i                             \" vertical space
+..                                  \" end macro
+@endExample
+
+@cindex @code{bp} request, and top-level diversion
+@cindex top-level diversion, and @code{bp}
+@cindex diversion, top-level, and @code{bp}
+@code{bp} has no effect if not called within the top-level diversion
+(@pxref{Diversions}).
+
+@cindex page number register (@code{%})
+@cindex current page number (@code{%})
+The read-write register@tie{}@code{%} holds the current page number.
+
+The number register @code{.pe} is set to@tie{}1 while @code{bp} is
+active.  @xref{Page Location Traps}.
+@endDefreq
+
+@Defreq {ne, [@Var{space}]}
+@cindex orphan lines, preventing with @code{ne}
+@cindex conditional page break (@code{ne})
+@cindex page break, conditional (@code{ne})
+It is often necessary to force a certain amount of space before a new
+page occurs.  This is most useful to make sure that there is not a
+single @dfn{orphan} line left at the bottom of a page.  The @code{ne}
+request ensures that there is a certain distance, specified by the first
+argument, before the next page is triggered (see @ref{Traps}, for
+further information).  The default scaling indicator for @code{ne} is
+@samp{v}; the default value of @var{space} is@tie{}1@dmn{v} if no
+argument is given.
+
+For example, to make sure that no fewer than 2@tie{}lines get orphaned,
+do the following before each paragraph:
+
+@Example
+.ne 2
+text text text
+@endExample
+
+@code{ne} then automatically causes a page break if there is space for
+one line only.
+@endDefreq
+
+@DefreqList {sv, [@Var{space}]}
+@DefreqListEndx {os, }
+@cindex @code{ne} request, comparison with @code{sv}
+@code{sv} is similar to the @code{ne} request; it reserves the specified
+amount of vertical space.  If the desired amount of space exists before
+the next trap (or the bottom page boundary if no trap is set), the space
+is output immediately (ignoring a partially filled line, which stays
+untouched).  If there is not enough space, it is stored for later output
+via the @code{os} request.  The default value is@tie{}1@dmn{v} if no
+argument is given; the default scaling indicator is @samp{v}.
+
+@cindex @code{sv} request, and no-space mode
+@cindex @code{os} request, and no-space mode
+Both @code{sv} and @code{os} ignore no-space mode.  While the @code{sv}
+request allows negative values for @var{space}, @code{os} ignores them.
+@endDefreq
+
+@Defreg {nl}
+@cindex current vertical position (@code{nl})
+@cindex vertical position, current (@code{nl})
+@cindex position, vertical, current (@code{nl})
+This register contains the current vertical position.  If the vertical
+position is zero and the top of page transition hasn't happened yet,
+@code{nl} is set to negative value.  @code{gtroff} itself does this at
+the very beginning of a document before anything has been printed, but
+the main usage is to plant a header trap on a page if this page has
+already started.
+
+Consider the following:
+
+@Example
+.de xxx
+.  sp
+.  tl ''Header''
+.  sp
+..
+.
+First page.
+.bp
+.wh 0 xxx
+.nr nl (-1)
+Second page.
+@endExample
+
+@noindent
+Result:
+
+@Example
+First page.
+
+...
+
+                             Header
+
+Second page.
+
+...
+@endExample
+
+@noindent
+Without resetting @code{nl} to a negative value, the just planted trap
+would be active beginning with the @emph{next} page, not the current
+one.
+
+@xref{Diversions}, for a comparison with the @code{.h} and @code{.d}
+registers.
+@endDefreg
+
+
+@c =====================================================================
+
+@node Fonts and Symbols, Sizes, Page Control, gtroff Reference
+@section Fonts and Symbols
+@cindex fonts
+
+@code{gtroff} can switch fonts at any point in the text.
+
+The basic set of fonts is @samp{R}, @samp{I}, @samp{B}, and @samp{BI}.
+These are Times Roman, Italic, Bold, and Bold Italic.  For non-TTY
+devices, there is also at least one symbol font that contains various
+special symbols (Greek, mathematics).
+
+@menu
+* Changing Fonts::
+* Font Families::
+* Font Positions::
+* Using Symbols::
+* Character Classes::
+* Special Fonts::
+* Artificial Fonts::
+* Ligatures and Kerning::
+@end menu
+
+@c ---------------------------------------------------------------------
+
+@node Changing Fonts, Font Families, Fonts and Symbols, Fonts and Symbols
+@subsection Changing Fonts
+@cindex fonts
+
+@DefreqList {ft, [@Var{font}]}
+@DefescItemx {\\f, , f, }
+@DefescItem {\\f, @Lparen{}, fn, }
+@DefescItem {\\f, @Lbrack{}, font, @Rbrack{}}
+@DefregListEndx {.sty}
+@cindex changing fonts (@code{ft}, @code{\f})
+@cindex fonts, changing (@code{ft}, @code{\f})
+@cindex @code{sty} request, and changing fonts
+@cindex @code{fam} request, and changing fonts
+@cindex @code{\F}, and changing fonts
+@kindex styles
+@kindex family
+@pindex DESC
+The @code{ft} request and the @code{\f} escape change the current font
+to @var{font} (one-character name@tie{}@var{f}, two-character name
+@var{fn}).
+
+If @var{font} is a style name (as set with the @code{sty} request or
+with the @code{styles} command in the @file{DESC} file), use it within
+the current font family (as set with the @code{fam} request, @code{\F}
+escape, or with the @code{family} command in the @file{DESC} file).
+
+It is not possible to switch to a font with the name @samp{DESC}
+(whereas this name could be used as a style name; however, this is not
+recommended).
+
+@cindex previous font (@code{ft}, @code{\f[]}, @code{\fP})
+@cindex font, previous (@code{ft}, @code{\f[]}, @code{\fP})
+With no argument or using @samp{P} as an argument, @code{.ft} switches
+to the previous font.  Use @code{\f[]} to do this with the escape.  The
+old syntax forms @code{\fP} or @code{\f[P]} are also supported.
+
+Fonts are generally specified as upper-case strings, which are usually
+1@tie{}to 4 characters representing an abbreviation or acronym of the
+font name.  This is no limitation, just a convention.
+
+The example below produces two identical lines.
+
+@Example
+eggs, bacon,
+.ft B
+spam
+.ft
+and sausage.
+
+eggs, bacon, \fBspam\fP and sausage.
+@endExample
+
+Note that @code{\f} doesn't produce an input token in @code{gtroff}.  As
+a consequence, it can be used in requests like @code{mc} (which expects
+a single character as an argument) to change the font on the fly:
+
+@Example
+.mc \f[I]x\f[]
+@endExample
+
+The current style name is available in the read-only number register
+@samp{.sty} (this is a string-valued register); if the current font
+isn't a style, the empty string is returned.  It is associated with the
+current environment.
+
+@xref{Font Positions}, for an alternative syntax.
+@endDefreq
+
+@Defreq {ftr, f [@Var{g}]}
+@cindex font translation (@code{ftr})
+@cindex @code{ft} request, and font translations
+@cindex @code{ul} request, and font translations
+@cindex @code{bd} request, and font translations
+@cindex @code{\f}, and font translations
+@cindex @code{cs} request, and font translations
+@cindex @code{tkf} request, and font translations
+@cindex @code{special} request, and font translations
+@cindex @code{fspecial} request, and font translations
+@cindex @code{fp} request, and font translations
+@cindex @code{sty} request, and font translations
+@cindex @code{if} request, and font translations
+@cindex @code{ie} request, and font translations
+@cindex @code{while} request, and font translations
+Translate font@tie{}@var{f} to font@tie{}@var{g}.  Whenever a font
+named@tie{}@var{f} is referred to in a @code{\f} escape sequence, in the
+@code{F} and @code{S} conditional operators, or in the @code{ft},
+@code{ul}, @code{bd}, @code{cs}, @code{tkf}, @code{special},
+@code{fspecial}, @code{fp}, or @code{sty} requests, font@tie{}@var{g} is
+used.  If @var{g} is missing or equal to@tie{}@var{f} the translation is
+undone.
+
+Note that it is not possible to chain font translations.  Example:
+
+@Example
+.ftr XXX TR
+.ftr XXX YYY
+.ft XXX
+    @result{} warning: can't find font `XXX'
+@endExample
+@endDefreq
+
+@DefreqList {fzoom, f [@Var{zoom}]}
+@DefregListEndx {.zoom}
+@cindex magnification of a font (@code{fzoom})
+@cindex font, magnification (@code{fzoom})
+@cindex zoom factor of a font (@code{fzoom})
+@cindex factor, zoom, of a font (@code{fzoom})
+@cindex font, zoom factor (@code{fzoom})
+@cindex optical size of a font
+@cindex font, optical size
+@cindex size, optical, of a font
+Set magnification of font@tie{}@var{f} to factor @var{zoom}, which must
+be a non-negative integer multiple of 1/1000th.  This request is useful
+to adjust the optical size of a font in relation to the others.  In the
+example below, font @code{CR} is magnified by 10% (the zoom factor is
+thus 1.1).
+
+@Example
+.fam P
+.fzoom CR 1100
+.ps 12
+Palatino and \f[CR]Courier\f[]
+@endExample
+
+A missing or zero value of @var{zoom} is the same as a value of 1000,
+which means no magnification.  @var{f}@tie{}must be a real font name,
+not a style.
+
+Note that the magnification of a font is completely transparent to
+troff; a change of the zoom factor doesn't cause any effect except that
+the dimensions of glyphs, (word) spaces, kerns, etc., of the affected
+font are adjusted accordingly.
+
+The zoom factor of the current font is available in the read-only number
+register @samp{.zoom}, in multiples of 1/1000th.  It returns zero if
+there is no magnification.
+@endDefreq
+
+@c ---------------------------------------------------------------------
+
+@node Font Families, Font Positions, Changing Fonts, Fonts and Symbols
+@subsection Font Families
+@cindex font families
+@cindex families, font
+@cindex font styles
+@cindex styles, font
+
+Due to the variety of fonts available, @code{gtroff} has added the
+concept of @dfn{font families} and @dfn{font styles}.  The fonts are
+specified as the concatenation of the font family and style.  Specifying
+a font without the family part causes @code{gtroff} to use that style of
+the current family.
+
+@cindex PostScript fonts
+@cindex fonts, PostScript
+Currently, fonts for the devices @option{-Tps}, @option{-Tpdf},
+@option{-Tdvi}, @option{-Tlj4}, @option{-Tlbp}, and the X11 fonts are
+set up to this mechanism.  By default, @code{gtroff} uses the Times
+family with the four styles @samp{R}, @samp{I}, @samp{B}, and @samp{BI}.
+
+This way, it is possible to use the basic four fonts and to select a
+different font family on the command line (@pxref{Groff Options}).
+
+@DefreqList {fam, [@Var{family}]}
+@DefregItemx {.fam}
+@DefescItemx {\\F, , f, }
+@DefescItem {\\F, @Lparen{}, fm, }
+@DefescItem {\\F, @Lbrack{}, family, @Rbrack{}}
+@DefregListEndx {.fn}
+@cindex changing font family (@code{fam}, @code{\F})
+@cindex font family, changing (@code{fam}, @code{\F})
+Switch font family to @var{family} (one-character name@tie{}@var{f},
+two-character name @var{fm}).  If no argument is given, switch back to
+the previous font family.  Use @code{\F[]} to do this with the escape.
+Note that @code{\FP} doesn't work; it selects font family @samp{P}
+instead.
+
+The value at start-up is @samp{T}.  The current font family is available
+in the read-only number register @samp{.fam} (this is a string-valued
+register); it is associated with the current environment.
+
+@Example
+spam,
+.fam H    \" helvetica family
+spam,     \" used font is family H + style R = HR
+.ft B     \" family H + style B = font HB
+spam,
+.fam T    \" times family
+spam,     \" used font is family T + style B = TB
+.ft AR    \" font AR (not a style)
+baked beans,
+.ft R     \" family T + style R = font TR
+and spam.
+@endExample
+
+Note that @code{\F} doesn't produce an input token in @code{gtroff}.  As
+a consequence, it can be used in requests like @code{mc} (which expects
+a single character as an argument) to change the font family on the fly:
+
+@Example
+.mc \F[P]x\F[]
+@endExample
+
+The @samp{.fn} register contains the current @dfn{real font name} of the
+current font.  This is a string-valued register.  If the current font is
+a style, the value of @code{\n[.fn]} is the proper concatenation of
+family and style name.
+@endDefreq
+
+@Defreq {sty, n style}
+@cindex changing font style (@code{sty})
+@cindex font style, changing (@code{sty})
+@cindex @code{cs} request, and font styles
+@cindex @code{bd} request, and font styles
+@cindex @code{tkf} request, and font styles
+@cindex @code{uf} request, and font styles
+@cindex @code{fspecial} request, and font styles
+Associate @var{style} with font position@tie{}@var{n}.  A font position
+can be associated either with a font or with a style.  The current font
+is the index of a font position and so is also either a font or a style.
+If it is a style, the font that is actually used is the font which name
+is the concatenation of the name of the current family and the name of
+the current style.  For example, if the current font is@tie{}1 and font
+position@tie{}1 is associated with style @samp{R} and the current font
+family is @samp{T}, then font @samp{TR} is used.  If the current font is
+not a style, then the current family is ignored.  If the requests
+@code{cs}, @code{bd}, @code{tkf}, @code{uf}, or @code{fspecial} are
+applied to a style, they are instead applied to the member of the
+current family corresponding to that style.
+
+@var{n}@tie{}must be a non-negative integer value.
+
+@pindex DESC
+@kindex styles
+The default family can be set with the @option{-f} option (@pxref{Groff
+Options}).  The @code{styles} command in the @file{DESC} file controls
+which font positions (if any) are initially associated with styles
+rather than fonts.  For example, the default setting for @sc{PostScript}
+fonts
+
+@Example
+styles R I B BI
+@endExample
+
+@noindent
+is equivalent to
+
+@Example
+.sty 1 R
+.sty 2 I
+.sty 3 B
+.sty 4 BI
+@endExample
+
+@code{fam} and @code{\F} always check whether the current font position
+is valid; this can give surprising results if the current font position
+is associated with a style.
+
+In the following example, we want to access the @sc{PostScript} font
+@code{FooBar} from the font family @code{Foo}:
+
+@Example
+.sty \n[.fp] Bar
+.fam Foo
+    @result{} warning: can't find font `FooR'
+@endExample
+
+@noindent
+The default font position at start-up is@tie{}1; for the @sc{PostScript}
+device, this is associated with style @samp{R}, so @code{gtroff} tries
+to open @code{FooR}.
+
+A solution to this problem is to use a dummy font like the following:
+
+@Example
+.fp 0 dummy TR    \" set up dummy font at position 0
+.sty \n[.fp] Bar  \" register style `Bar'
+.ft 0             \" switch to font at position 0
+.fam Foo          \" activate family `Foo'
+.ft Bar           \" switch to font `FooBar'
+@endExample
+
+@xref{Font Positions}.
+@endDefreq
+
+@c ---------------------------------------------------------------------
+
+@node Font Positions, Using Symbols, Font Families, Fonts and Symbols
+@subsection Font Positions
+@cindex font positions
+@cindex positions, font
+
+For the sake of old phototypesetters and compatibility with old versions
+of @code{troff}, @code{gtroff} has the concept of font @dfn{positions},
+on which various fonts are mounted.
+
+@DefreqList {fp, pos font [@Var{external-name}]}
+@DefregItemx {.f}
+@DefregListEndx {.fp}
+@cindex mounting font (@code{fp})
+@cindex font, mounting (@code{fp})
+Mount font @var{font} at position @var{pos} (which must be a
+non-negative integer).  This numeric position can then be referred to
+with font changing commands.  When @code{gtroff} starts it is using font
+position@tie{}1 (which must exist; position@tie{}0 is unused usually at
+start-up).
+
+@cindex font position register (@code{.f})
+The current font in use, as a font position, is available in the
+read-only number register @samp{.f}.  This can be useful to remember the
+current font for later recall.  It is associated with the current
+environment (@pxref{Environments}).
+
+@Example
+.nr save-font \n[.f]
+.ft B
+... text text text ...
+.ft \n[save-font]
+@endExample
+
+@cindex next free font position register (@code{.fp})
+The number of the next free font position is available in the read-only
+number register @samp{.fp}.  This is useful when mounting a new font,
+like so:
+
+@Example
+.fp \n[.fp] NEATOFONT
+@endExample
+
+@pindex DESC@r{, and font mounting}
+Fonts not listed in the @file{DESC} file are automatically mounted on
+the next available font position when they are referenced.  If a font is
+to be mounted explicitly with the @code{fp} request on an unused font
+position, it should be mounted on the first unused font position, which
+can be found in the @code{.fp} register.  Although @code{gtroff} does
+not enforce this strictly, it is not allowed to mount a font at a
+position whose number is much greater (approx.@: 1000 positions) than
+that of any currently used position.
+
+The @code{fp} request has an optional third argument.  This argument
+gives the external name of the font, which is used for finding the font
+description file.  The second argument gives the internal name of the
+font, which is used to refer to the font in @code{gtroff} after it has
+been mounted.  If there is no third argument then the internal name is
+used as the external name.  This feature makes it possible to use fonts
+with long names in compatibility mode.
+@endDefreq
+
+Both the @code{ft} request and the @code{\f} escape have alternative
+syntax forms to access font positions.
+
+@DefreqList {ft, nnn}
+@DefescItemx {\\f, , n, }
+@DefescItem {\\f, @Lparen{}, nn, }
+@DefescListEnd {\\f, @Lbrack{}, nnn, @Rbrack{}}
+@cindex changing font position (@code{\f})
+@cindex font position, changing (@code{\f})
+@cindex @code{sty} request, and font positions
+@cindex @code{fam} request, and font positions
+@cindex @code{\F}, and font positions
+@kindex styles
+@kindex family
+@pindex DESC
+Change the current font position to @var{nnn} (one-digit
+position@tie{}@var{n}, two-digit position @var{nn}), which must be a
+non-negative integer.
+
+If @var{nnn} is associated with a style (as set with the @code{sty}
+request or with the @code{styles} command in the @file{DESC} file), use
+it within the current font family (as set with the @code{fam} request,
+the @code{\F} escape, or with the @code{family} command in the
+@file{DESC} file).
+
+@Example
+this is font 1
+.ft 2
+this is font 2
+.ft                   \" switch back to font 1
+.ft 3
+this is font 3
+.ft
+this is font 1 again
+@endExample
+
+@xref{Changing Fonts}, for the standard syntax form.
+@endDefreq
+
+@c ---------------------------------------------------------------------
+
+@node Using Symbols, Character Classes, Font Positions, Fonts and Symbols
+@subsection Using Symbols
+@cindex using symbols
+@cindex symbols, using
+
+@cindex glyph
+@cindex character
+@cindex ligature
+A @dfn{glyph} is a graphical representation of a @dfn{character}.  While
+a character is an abstract entity containing semantic information, a
+glyph is something that can be actually seen on screen or paper.  It is
+possible that a character has multiple glyph representation forms (for
+example, the character `A' can be either written in a roman or an italic
+font, yielding two different glyphs); sometimes more than one character
+maps to a single glyph (this is a @dfn{ligature} -- the most common is
+`fi').
+
+@cindex symbol
+@cindex special fonts
+@kindex fonts
+@pindex DESC
+@cindex @code{special} request, and glyph search order
+@cindex @code{fspecial} request, and glyph search order
+A @dfn{symbol} is simply a named glyph.  Within @code{gtroff}, all glyph
+names of a particular font are defined in its font file.  If the user
+requests a glyph not available in this font, @code{gtroff} looks up an
+ordered list of @dfn{special fonts}.  By default, the @sc{PostScript}
+output device supports the two special fonts @samp{SS} (slanted symbols)
+and @samp{S} (symbols) (the former is looked up before the latter).
+Other output devices use different names for special fonts.  Fonts
+mounted with the @code{fonts} keyword in the @file{DESC} file are
+globally available.  To install additional special fonts locally (i.e.@:
+for a particular font), use the @code{fspecial} request.
+
+Here are the exact rules how @code{gtroff} searches a given symbol:
+
+@itemize @bullet
+@item
+If the symbol has been defined with the @code{char} request, use it.
+This hides a symbol with the same name in the current font.
+
+@item
+Check the current font.
+
+@item
+If the symbol has been defined with the @code{fchar} request, use it.
+
+@item
+Check whether the current font has a font-specific list of special
+fonts; test all fonts in the order of appearance in the last
+@code{fspecial} call if appropriate.
+
+@item
+If the symbol has been defined with the @code{fschar} request for the
+current font, use it.
+
+@item
+Check all fonts in the order of appearance in the last @code{special}
+call.
+
+@item
+If the symbol has been defined with the @code{schar} request, use it.
+
+@item
+As a last resort, consult all fonts loaded up to now for special fonts
+and check them, starting with the lowest font number.  Note that this
+can sometimes lead to surprising results since the @code{fonts} line in
+the @file{DESC} file often contains empty positions, which are filled
+later on.  For example, consider the following:
+
+@Example
+fonts 3 0 0 FOO
+@endExample
+
+@noindent
+This mounts font @code{foo} at font position@tie{}3.  We assume that
+@code{FOO} is a special font, containing glyph @code{foo}, and that no
+font has been loaded yet.  The line
+
+@Example
+.fspecial BAR BAZ
+@endExample
+
+@noindent
+makes font @code{BAZ} special only if font @code{BAR} is active.  We
+further assume that @code{BAZ} is really a special font, i.e., the font
+description file contains the @code{special} keyword, and that it also
+contains glyph @code{foo} with a special shape fitting to font
+@code{BAR}.  After executing @code{fspecial}, font @code{BAR} is loaded
+at font position@tie{}1, and @code{BAZ} at position@tie{}2.
+
+We now switch to a new font @code{XXX}, trying to access glyph
+@code{foo} that is assumed to be missing.  There are neither
+font-specific special fonts for @code{XXX} nor any other fonts made
+special with the @code{special} request, so @code{gtroff} starts the
+search for special fonts in the list of already mounted fonts, with
+increasing font positions.  Consequently, it finds @code{BAZ} before
+@code{FOO} even for @code{XXX}, which is not the intended behaviour.
+@end itemize
+
+@xref{Font Files}, and @ref{Special Fonts}, for more details.
+
+@cindex list of available glyphs (@cite{groff_char(7)} man page)
+@cindex available glyphs, list (@cite{groff_char(7)} man page)
+@cindex glyphs, available, list (@cite{groff_char(7)} man page)
+The list of available symbols is device dependent; see the
+@cite{groff_char(7)} man page for a complete list of all glyphs.  For
+example, say
+
+@Example
+man -Tdvi groff_char > groff_char.dvi
+@endExample
+
+@noindent
+for a list using the default DVI fonts (not all versions of the
+@code{man} program support the @option{-T} option).  If you want to use
+an additional macro package to change the used fonts, @code{groff} must
+be called directly:
+
+@Example
+groff -Tdvi -mec -man groff_char.7 > groff_char.dvi
+@endExample
+
+@cindex composite glyph names
+@cindex glyph names, composite
+@cindex groff glyph list (GGL)
+@cindex GGL (groff glyph list)
+@cindex adobe glyph list (AGL)
+@cindex AGL (adobe glyph list)
+Glyph names not listed in groff_char(7) are derived algorithmically,
+using a simplified version of the Adobe Glyph List (AGL) algorithm, which
+is described in
+@uref{http://partners.adobe.com@//public@//developer@//opentype@//index_glyph.html}.
+The (frozen) set of glyph names that can't be derived algorithmically
+is called @dfn{groff glyph list (GGL)}.
+
+@itemize @bullet
+@item
+A glyph for Unicode character U+@var{XXXX}[@var{X}[@var{X}]], which is
+not a composite character is named
+@code{u@var{XXXX}@r{[}@var{X}@r{[}@var{X}@r{]]}}.  @var{X} must be an
+uppercase hexadecimal digit.  Examples: @code{u1234}, @code{u008E},
+@code{u12DB8}.  The largest Unicode value is 0x10FFFF.  There must be at
+least four @code{X} digits; if necessary, add leading zeroes (after the
+@samp{u}).  No zero padding is allowed for character codes greater than
+0xFFFF.  Surrogates (i.e., Unicode values greater than 0xFFFF
+represented with character codes from the surrogate area U+D800-U+DFFF)
+are not allowed too.
+
+@item
+A glyph representing more than a single input character is named
+
+@display
+@samp{u} @var{component1} @samp{_} @var{component2} @samp{_} @var{component3} @dots{}
+@end display
+
+@noindent
+Example: @code{u0045_0302_0301}.
+
+For simplicity, all Unicode characters that are composites must be
+decomposed maximally (this is normalization form@tie{}D in the Unicode
+standard); for example, @code{u00CA_0301} is not a valid glyph name
+since U+00CA (@sc{latin capital letter e with circumflex}) can be
+further decomposed into U+0045 (@sc{latin capital letter e}) and U+0302
+(@sc{combining circumflex accent}).  @code{u0045_0302_0301} is thus the
+glyph name for U+1EBE, @sc{latin capital letter e with circumflex and
+acute}.
+
+@item
+groff maintains a table to decompose all algorithmically derived glyph
+names that are composites itself.  For example, @code{u0100} (@sc{latin
+letter a with macron}) is automatically decomposed into
+@code{u0041_0304}.  Additionally, a glyph name of the GGL is preferred
+to an algorithmically derived glyph name; groff also automatically does
+the mapping.  Example: The glyph @code{u0045_0302} is mapped to
+@code{^E}.
+
+@item
+glyph names of the GGL can't be used in composite glyph names; for
+example, @code{^E_u0301} is invalid.
+@end itemize
+
+@DefescList {\\, @Lparen{}, nm, }
+@DefescItem {\\, @Lbrack{}, name, @Rbrack{}}
+@DefescListEnd {\\, @Lbrack{}, component1 component2 @dots{}, @Rbrack{}}
+Insert a symbol @var{name} (two-character name @var{nm}) or a composite
+glyph with component glyphs @var{component1}, @var{component2},
+@enddots{} There is no special syntax for one-character names -- the
+natural form @samp{\@var{n}} would collide with escapes.@footnote{Note
+that a one-character symbol is not the same as an input character, i.e.,
+the character @code{a} is not the same as @code{\[a]}.  By default,
+@code{groff} defines only a single one-character symbol, @code{\[-]}; it
+is usually accessed as @code{\-}.  On the other hand, @code{gtroff} has
+the special feature that @code{\[char@var{XXX}]} is the same as the
+input character with character code @var{XXX}.  For example,
+@code{\[char97]} is identical to the letter @code{a} if @acronym{ASCII}
+encoding is active.}
+
+If @var{name} is undefined, a warning of type @samp{char} is generated,
+and the escape is ignored.  @xref{Debugging}, for information about
+warnings.
+
+groff resolves @code{\[...]} with more than a single component as
+follows:
+
+@itemize @bullet
+@item
+Any component that is found in the GGL is converted to the
+@code{u@var{XXXX}} form.
+
+@item
+Any component @code{u@var{XXXX}} that is found in the list of
+decomposable glyphs is decomposed.
+
+@item
+The resulting elements are then concatenated with @samp{_} in between,
+dropping the leading @samp{u} in all elements but the first.
+@end itemize
+
+No check for the existence of any component (similar to @code{tr}
+request) is done.
+
+Examples:
+
+@table @code
+@item \[A ho]
+@samp{A} maps to @code{u0041}, @samp{ho} maps to @code{u02DB}, thus the
+final glyph name would be @code{u0041_02DB}.  Note this is not the
+expected result: The ogonek glyph @samp{ho} is a spacing ogonek, but for
+a proper composite a non-spacing ogonek (U+0328) is necessary.  Looking
+into the file @file{composite.tmac} one can find @w{@samp{.composite ho
+u0328}}, which changes the mapping of @samp{ho} while a composite glyph
+name is constructed, causing the final glyph name to be
+@code{u0041_0328}.
+
+@item \[^E u0301]
+@itemx \[^E aa]
+@itemx \[E a^ aa]
+@itemx \[E ^ ']
+@samp{^E} maps to @code{u0045_0302}, thus the final glyph name is
+@code{u0045_0302_0301} in all forms (assuming proper calls of the
+@code{composite} request).
+@end table
+
+It is not possible to define glyphs with names like @w{@samp{A ho}}
+within a groff font file.  This is not really a limitation; instead, you
+have to define @code{u0041_0328}.
+@endDefesc
+
+@Defesc {\\C, ', xxx, '}
+@cindex named character (@code{\C})
+@cindex character, named (@code{\C})
+Typeset the glyph named @var{xxx}.@footnote{@code{\C} is actually a
+misnomer since it accesses an output glyph.}  Normally it is more
+convenient to use @code{\[@var{xxx}]}, but @code{\C} has the advantage
+that it is compatible with newer versions of @acronym{AT&T} @code{troff}
+and is available in compatibility mode.
+@endDefesc
+
+@Defreq {composite, from to}
+@pindex composite.tmac
+Map glyph name @var{from} to glyph name @var{to} if it is used in
+@code{\[...]} with more than one component.  See above for examples.
+
+This mapping is based on glyph names only; no check for the existence of
+either glyph is done.
+
+A set of default mappings for many accents can be found in the file
+@file{composite.tmac}, which is loaded at start-up.
+@endDefreq
+
+@Defesc {\\N, ', n, '}
+@cindex numbered glyph (@code{\N})
+@cindex glyph, numbered (@code{\N})
+@cindex @code{char} request, used with @code{\N}
+@cindex Unicode
+Typeset the glyph with code@tie{}@var{n} in the current font
+(@code{n}@tie{}is @strong{not} the input character code).  The number
+@var{n}@tie{}can be any non-negative decimal integer.  Most devices only
+have glyphs with codes between 0 and@tie{}255; the Unicode output device
+uses codes in the range 0--65535.  If the current font does not contain
+a glyph with that code, special fonts are @emph{not} searched.  The
+@code{\N} escape sequence can be conveniently used in conjunction with
+the @code{char} request:
+
+@Example
+.char \[phone] \f[ZD]\N'37'
+@endExample
+
+@noindent
+@pindex DESC
+@cindex unnamed glyphs
+@cindex glyphs, unnamed
+The code of each glyph is given in the fourth column in the font
+description file after the @code{charset} command.  It is possible to
+include unnamed glyphs in the font description file by using a name of
+@samp{---}; the @code{\N} escape sequence is the only way to use these.
+
+No kerning is applied to glyphs accessed with @code{\N}.
+@endDefesc
+
+Some escape sequences directly map onto special glyphs.
+
+@Defesc {\\', , , }
+This is a backslash followed by the apostrophe character,
+@acronym{ASCII} character @code{0x27} (@acronym{EBCDIC} character
+@code{0x7D}).  The same as @code{\[aa]}, the acute accent.
+@endDefesc
+
+@Defesc {\\`, , , }
+This is a backslash followed by @acronym{ASCII} character @code{0x60}
+(@acronym{EBCDIC} character @code{0x79} usually).  The same as
+@code{\[ga]}, the grave accent.
+@endDefesc
+
+@Defesc {\\-, , , }
+This is the same as @code{\[-]}, the minus sign in the current font.
+@endDefesc
+
+@Defesc {\\_, , , }
+This is the same as @code{\[ul]}, the underline character.
+@endDefesc
+
+@Defreq {cflags, n c1 c2 @dots{}}
+@cindex glyph properties (@code{cflags})
+@cindex character properties (@code{cflags})
+@cindex properties of glyphs (@code{cflags})
+@cindex properties of characters (@code{cflags})
+Input characters and symbols have certain properties associated with
+it.@footnote{Note that the output glyphs themselves don't have such
+properties.  For @code{gtroff}, a glyph is a numbered box with a given
+width, depth, and height, nothing else.  All manipulations with the
+@code{cflags} request work on the input level.}  These properties can be
+modified with the @code{cflags} request.  The first argument is the sum
+of the desired flags and the remaining arguments are the characters or
+symbols to have those properties.  It is possible to omit the spaces
+between the characters or symbols.  Instead of single characters or
+symbols you can also use character classes (see @ref{Character Classes}
+for more details).
+
+@table @code
+@item 1
+@cindex end-of-sentence characters
+@cindex characters, end-of-sentence
+The character ends sentences (initially characters @samp{.?!} have this
+property).
+
+@item 2
+@cindex hyphenating characters
+@cindex characters, hyphenation
+Lines can be broken before the character (initially no characters have
+this property).  This only works if both the characters before and after
+have non-zero hyphenation codes (as set with the @code{hcode} request).
+Use value@tie{}64 to override this behaviour.
+
+@item 4
+@cindex @code{hy} glyph, and @code{cflags}
+@cindex @code{em} glyph, and @code{cflags}
+Lines can be broken after the character (initially the character
+@samp{-} and the symbols @samp{\[hy]} and @samp{\[em]} have this
+property).  This only works if both the characters before and after have
+non-zero hyphenation codes (as set with the @code{hcode} request).  Use
+value@tie{}64 to override this behaviour.
+
+@item 8
+@cindex overlapping characters
+@cindex characters, overlapping
+@cindex @code{ul} glyph, and @code{cflags}
+@cindex @code{rn} glyph, and @code{cflags}
+@cindex @code{ru} glyph, and @code{cflags}
+@cindex @code{radicalex} glyph, and @code{cflags}
+@cindex @code{sqrtex} glyph, and @code{cflags}
+The character overlaps horizontally if used as a horizontal line
+building element.  Initially the symbols @samp{\[ul]}, @samp{\[rn]},
+@samp{\[ru]}, @samp{\[radicalex]}, and @samp{\[sqrtex]} have this
+property.
+
+@item 16
+@cindex @code{br} glyph, and @code{cflags}
+The character overlaps vertically if used as vertical line building
+element.  Initially symbol @samp{\[br]} has this property.
+
+@item 32
+@cindex transparent characters
+@cindex character, transparent
+@cindex @code{"}, at end of sentence
+@cindex @code{'}, at end of sentence
+@cindex @code{)}, at end of sentence
+@cindex @code{]}, at end of sentence
+@cindex @code{*}, at end of sentence
+@cindex @code{dg} glyph, at end of sentence
+@cindex @code{rq} glyph, at end of sentence
+@cindex @code{cq} glyph, at end of sentence
+An end-of-sentence character followed by any number of characters with
+this property is treated as the end of a sentence if followed by a
+newline or two spaces; in other words the character is @dfn{transparent}
+for the purposes of end-of-sentence recognition -- this is the same as
+having a zero space factor in @TeX{} (initially characters @samp{"')]*}
+and the symbols @samp{\[dg]}, @samp{\[rq]}, and @samp{\[cq]} have this
+property).
+
+@item 64
+Ignore hyphenation code values of the surrounding characters.  Use this
+in combination with values 2 and@tie{}4 (initially no characters have
+this property).  For example, if you need an automatic break point after
+the hyphen in number ranges like `3000-5000', insert
+
+@Example
+.cflags 68 -
+@endExample
+
+@noindent
+into your document.  Note, however, that this can lead to bad layout if
+done without thinking; in most situations, a better solution instead of
+changing the @code{cflags} value is to insert @code{\:} right after the
+hyphen at the places that really need a break point.
+
+@item 128
+Prohibit a line break before the character, but allow a line break after
+the character.  This works only in combination with flags 256 and 512
+(see below) and has no effect otherwise.
+
+@item 256
+Prohibit a line break after the character, but allow a line break before
+the character.  This works only in combination with flags 128 and 512
+(see below) and has no effect otherwise.
+
+@item 512
+Allow line break before or after the character.  This works only in
+combination with flags 128 and 256 and has no effect otherwise.
+
+Contrary to flag values 2 and@tie{}4, the flags 128, 256, and 512 work
+pairwise.  If, for example, the left character has value 512, and the
+right character 128, no line break gets inserted.  If we use
+value@tie{}6 instead for the left character, a line break after the
+character can't be suppressed since the right neighbour character
+doesn't get examined.
+@end table
+@endDefreq
+
+@DefreqList {char, g [@Var{string}]}
+@DefreqItemx {fchar, g [@Var{string}]}
+@DefreqItemx {fschar, f g [@Var{string}]}
+@DefreqListEndx {schar, g [@Var{string}]}
+@cindex defining character (@code{char})
+@cindex defining fallback character (@code{fchar}, @code{fschar}, @code{schar})
+@cindex character, defining (@code{char})
+@cindex character, defining fallback (@code{fchar}, @code{fschar}, @code{schar})
+@cindex fallback character, defining (@code{fchar}, @code{fschar}, @code{schar})
+@cindex creating new characters (@code{char})
+@cindex defining symbol (@code{char})
+@cindex symbol, defining (@code{char})
+@cindex defining glyph (@code{char})
+@cindex glyph, defining (@code{char})
+@cindex escape character, while defining glyph
+@cindex character, escape, while defining glyph
+@cindex @code{tr} request, and glyph definitions
+@cindex @code{cp} request, and glyph definitions
+@cindex @code{rc} request, and glyph definitions
+@cindex @code{lc} request, and glyph definitions
+@cindex @code{\l}, and glyph definitions
+@cindex @code{\L}, and glyph definitions
+@cindex @code{\&}, and glyph definitions
+@cindex @code{\e}, and glyph definitions
+@cindex @code{hcode} request, and glyph definitions
+Define a new glyph@tie{}@var{g} to be @var{string} (which can be
+empty).@footnote{@code{char} is a misnomer since an output glyph is
+defined.}  Every time glyph@tie{}@var{g} needs to be printed,
+@var{string} is processed in a temporary environment and the result is
+wrapped up into a single object.  Compatibility mode is turned off and
+the escape character is set to @samp{\} while @var{string} is being
+processed.  Any emboldening, constant spacing or track kerning is
+applied to this object rather than to individual characters in
+@var{string}.
+
+A glyph defined by these requests can be used just like a normal glyph
+provided by the output device.  In particular, other characters can be
+translated to it with the @code{tr} or @code{trin} requests; it can be
+made the leader character by the @code{lc} request; repeated patterns
+can be drawn with the glyph using the @code{\l} and @code{\L} escape
+sequences; words containing the glyph can be hyphenated correctly if the
+@code{hcode} request is used to give the glyph's symbol a hyphenation
+code.
+
+There is a special anti-recursion feature: Use of @code{g} within the
+glyph's definition is handled like normal characters and symbols not
+defined with @code{char}.
+
+Note that the @code{tr} and @code{trin} requests take precedence if
+@code{char} accesses the same symbol.
+
+@Example
+.tr XY
+X
+    @result{} Y
+.char X Z
+X
+    @result{} Y
+.tr XX
+X
+    @result{} Z
+@endExample
+
+The @code{fchar} request defines a fallback glyph: @code{gtroff} only
+checks for glyphs defined with @code{fchar} if it cannot find the glyph
+in the current font.  @code{gtroff} carries out this test before
+checking special fonts.
+
+@code{fschar} defines a fallback glyph for font@tie{}@var{f}:
+@code{gtroff} checks for glyphs defined with @code{fschar} after the
+list of fonts declared as font-specific special fonts with the
+@code{fspecial} request, but before the list of fonts declared as global
+special fonts with the @code{special} request.
+
+Finally, the @code{schar} request defines a global fallback glyph:
+@code{gtroff} checks for glyphs defined with @code{schar} after the list
+of fonts declared as global special fonts with the @code{special}
+request, but before the already mounted special fonts.
+
+@xref{Using Symbols}, for a detailed description of the glyph searching
+mechanism in @code{gtroff}.
+@endDefreq
+
+@DefreqList {rchar, c1 c2 @dots{}}
+@DefreqListEndx {rfschar, f c1 c2 @dots{}}
+@cindex removing glyph definition (@code{rchar}, @code{rfschar})
+@cindex glyph, removing definition (@code{rchar}, @code{rfschar})
+@cindex fallback glyph, removing definition (@code{rchar}, @code{rfschar})
+Remove the definitions of glyphs @var{c1}, @var{c2},@tie{}@enddots{}
+This undoes the effect of a @code{char}, @code{fchar}, or @code{schar}
+request.
+
+It is possible to omit the whitespace between arguments.
+
+The request @code{rfschar} removes glyph definitions defined with
+@code{fschar} for glyph@tie{}f.
+@endDefreq
+
+@xref{Special Characters}.
+
+@c ---------------------------------------------------------------------
+
+@node Character Classes, Special Fonts, Using Symbols, Fonts and Symbols
+@subsection Character Classes
+@cindex character classes
+@cindex classes, character
+
+Classes are particularly useful for East Asian languages such as
+Chinese, Japanese, and Korean, where the number of needed characters is
+much larger than in European languages, and where large sets of
+characters share the same properties.
+
+@Defreq {class, n c1 c2 @dots{}}
+@cindex character class (@code{class})
+@cindex defining character class (@code{class})
+@cindex class of characters (@code{class})
+In @code{groff}, a @dfn{character class} (or simply ``class'') is a set
+of characters, grouped by some user aspect.  The @code{class} request
+defines such classes so that other requests can refer to all characters
+belonging to this set with a single class name.  Currently, only the
+@code{cflags} request can handle character classes.
+
+A @code{class} request takes a class name followed by a list of
+entities.  In its simplest form, the entities are characters or symbols:
+
+@Example
+.class [prepunct] , : ; > @}
+@endExample
+
+Since class and glyph names share the same namespace, it is recommended
+to start and end the class name with @code{[} and @code{]},
+respectively, to avoid collisions with normal @code{groff} symbols (and
+symbols defined by the user).  In particular, the presence of @code{]}
+in the symbol name intentionally prevents the usage of @code{\[...]},
+thus you must use the @code{\C} escape to access a class with such a
+name.
+
+@cindex GGL (groff glyph list)
+@cindex groff glyph list (GGL)
+You can also use a special character range notation, consisting of a
+start character or symbol, followed by @samp{-}, and an end character or
+symbol.  Internally, @code{gtroff} converts these two symbol names to
+Unicode values (according to the groff glyph gist), which then give the
+start and end value of the range.  If that fails, the class definition
+is skipped.
+
+Finally, classes can be nested, too.
+
+Here is a more complex example:
+
+@Example
+.class [prepunctx] \C'[prepunct]' \[u2013]-\[u2016]
+@endExample
+
+The class @samp{prepunctx} now contains the contents of the class
+@code{prepunct} as defined above (the set @samp{, : ; > @}}), and
+characters in the range between @code{U+2013} and @code{U+2016}.
+
+If you want to add @samp{-} to a class, it must be the first character
+value in the argument list, otherwise it gets misinterpreted as a range.
+
+Note that it is not possible to use class names within range
+definitions.
+
+Typical use of the @code{class} request is to control line-breaking and
+hyphenation rules as defined by the @code{cflags} request.  For example,
+to inhibit line breaks before the characters belonging to the
+@code{prepunctx} class, you can write:
+
+@Example
+.cflags 2 \C'[prepunctx]'
+@endExample
+
+See the @code{cflags} request in @ref{Using Symbols}, for more details.
+@endDefreq
+
+@c ---------------------------------------------------------------------
+
+@node Special Fonts, Artificial Fonts, Character Classes, Fonts and Symbols
+@subsection Special Fonts
+@cindex special fonts
+@cindex fonts, special
+
+Special fonts are those that @code{gtroff} searches when it cannot find
+the requested glyph in the current font.  The Symbol font is usually a
+special font.
+
+@code{gtroff} provides the following two requests to add more special
+fonts.  @xref{Using Symbols}, for a detailed description of the glyph
+searching mechanism in @code{gtroff}.
+
+Usually, only non-TTY devices have special fonts.
+
+@DefreqList {special, [@Var{s1} @Var{s2} @dots{}]}
+@DefreqListEndx {fspecial, f [@Var{s1} @Var{s2} @dots{}]}
+@kindex fonts
+@pindex DESC
+Use the @code{special} request to define special fonts.  Initially, this
+list is empty.
+
+Use the @code{fspecial} request to designate special fonts only when
+font@tie{}@var{f} is active.  Initially, this list is empty.
+
+Previous calls to @code{special} or @code{fspecial} are overwritten;
+without arguments, the particular list of special fonts is set to empty.
+Special fonts are searched in the order they appear as arguments.
+
+All fonts that appear in a call to @code{special} or @code{fspecial}
+are loaded.
+
+@xref{Using Symbols}, for the exact search order of glyphs.
+@endDefreq
+
+@c ---------------------------------------------------------------------
+
+@node Artificial Fonts, Ligatures and Kerning, Special Fonts, Fonts and Symbols
+@subsection Artificial Fonts
+@cindex artificial fonts
+@cindex fonts, artificial
+
+There are a number of requests and escapes for artificially creating
+fonts.  These are largely vestiges of the days when output devices did
+not have a wide variety of fonts, and when @code{nroff} and @code{troff}
+were separate programs.  Most of them are no longer necessary in GNU
+@code{troff}.  Nevertheless, they are supported.
+
+@DefescList {\\H, ', height, '}
+@DefescItem {\\H, ', @t{+}height, '}
+@DefescItem {\\H, ', @t{-}height, '}
+@DefregListEndx {.height}
+@cindex changing the font height (@code{\H})
+@cindex font height, changing (@code{\H})
+@cindex height, font, changing (@code{\H})
+Change (increment, decrement) the height of the current font, but not
+the width.  If @var{height} is zero, restore the original height.
+Default scaling indicator is @samp{z}.
+
+The read-only number register @code{.height} contains the font height as
+set by @code{\H}.
+
+Currently, only the @option{-Tps} and @option{-Tpdf} devices support
+this feature.
+
+Note that @code{\H} doesn't produce an input token in @code{gtroff}.  As
+a consequence, it can be used in requests like @code{mc} (which expects
+a single character as an argument) to change the font on the fly:
+
+@Example
+.mc \H'+5z'x\H'0'
+@endExample
+
+In compatibility mode, @code{gtroff} behaves differently: If an
+increment or decrement is used, it is always taken relative to the
+current point size and not relative to the previously selected font
+height.  Thus,
+
+@Example
+.cp 1
+\H'+5'test \H'+5'test
+@endExample
+
+@noindent
+prints the word @samp{test} twice with the same font height (five points
+larger than the current font size).
+@endDefesc
+
+@DefescList {\\S, ', slant, '}
+@DefregListEndx {.slant}
+@cindex changing the font slant (@code{\S})
+@cindex font slant, changing (@code{\S})
+@cindex slant, font, changing (@code{\S})
+Slant the current font by @var{slant} degrees.  Positive values slant to
+the right.  Only integer values are possible.
+
+The read-only number register @code{.slant} contains the font slant as
+set by @code{\S}.
+
+Currently, only the @option{-Tps} and @option{-Tpdf} devices support
+this feature.
+
+Note that @code{\S} doesn't produce an input token in @code{gtroff}.  As
+a consequence, it can be used in requests like @code{mc} (which expects
+a single character as an argument) to change the font on the fly:
+
+@Example
+.mc \S'20'x\S'0'
+@endExample
+
+This request is incorrectly documented in the original @acronym{UNIX}
+troff manual; the slant is always set to an absolute value.
+@endDefesc
+
+@Defreq {ul, [@Var{lines}]}
+@cindex underlining (@code{ul})
+The @code{ul} request normally underlines subsequent lines if a TTY
+output device is used.  Otherwise, the lines are printed in italics
+(only the term `underlined' is used in the following).  The single
+argument is the number of input lines to be underlined; with no
+argument, the next line is underlined.  If @var{lines} is zero or
+negative, stop the effects of @code{ul} (if it was active).  Requests
+and empty lines do not count for computing the number of underlined
+input lines, even if they produce some output like @code{tl}.  Lines
+inserted by macros (e.g.@: invoked by a trap) do count.
+
+At the beginning of @code{ul}, the current font is stored and the
+underline font is activated.  Within the span of a @code{ul} request, it
+is possible to change fonts, but after the last line affected by
+@code{ul} the saved font is restored.
+
+This number of lines still to be underlined is associated with the
+current environment (@pxref{Environments}).  The underline font can be
+changed with the @code{uf} request.
+
+@c XXX @xref should be changed to grotty
+
+@c @xref{Troff and Nroff Mode}, for a discussion how underlining is
+@c implemented in for TTY output devices, and which problems can arise.
+
+The @code{ul} request does not underline spaces.
+@endDefreq
+
+@Defreq {cu, [@Var{lines}]}
+@cindex continuous underlining (@code{cu})
+@cindex underlining, continuous (@code{cu})
+The @code{cu} request is similar to @code{ul} but underlines spaces as
+well (if a TTY output device is used).
+@endDefreq
+
+@Defreq {uf, font}
+@cindex underline font (@code{uf})
+@cindex font for underlining (@code{uf})
+Set the underline font (globally) used by @code{ul} and @code{cu}.  By
+default, this is the font at position@tie{}2.  @var{font} can be either
+a non-negative font position or the name of a font.
+@endDefreq
+
+@DefreqList {bd, font [@Var{offset}]}
+@DefreqItem {bd, font1 font2 [@Var{offset}]}
+@DefregListEndx {.b}
+@cindex imitating bold face (@code{bd})
+@cindex bold face, imitating (@code{bd})
+Artificially create a bold font by printing each glyph twice, slightly
+offset.
+
+Two syntax forms are available.
+
+@itemize @bullet
+@item
+Imitate a bold font unconditionally.  The first argument specifies the
+font to embolden, and the second is the number of basic units, minus
+one, by which the two glyphs are offset.  If the second argument is
+missing, emboldening is turned off.
+
+@var{font} can be either a non-negative font position or the name of a
+font.
+
+@var{offset} is available in the @code{.b} read-only register if a
+special font is active; in the @code{bd} request, its default unit is
+@samp{u}.
+
+@cindex @code{fspecial} request, and imitating bold
+@kindex special
+@cindex embolding of special fonts
+@cindex special fonts, emboldening
+@item
+Imitate a bold form conditionally.  Embolden @var{font1} by @var{offset}
+only if font @var{font2} is the current font.  This command can be
+issued repeatedly to set up different emboldening values for different
+current fonts.  If the second argument is missing, emboldening is turned
+off for this particular current font.
+
+This affects special fonts only (either set up with the @code{special}
+command in font files or with the @code{fspecial} request).
+@end itemize
+@endDefreq
+
+@Defreq {cs, font [@Var{width} [@Var{em-size}]]}
+@cindex constant glyph space mode (@code{cs})
+@cindex mode for constant glyph space (@code{cs})
+@cindex glyph, constant space
+@cindex @code{ps} request, and constant glyph space mode
+Switch to and from @dfn{constant glyph space mode}.  If activated, the
+width of every glyph is @math{@var{width}/36} ems.  The em size is given
+absolutely by @var{em-size}; if this argument is missing, the em value
+is taken from the current font size (as set with the @code{ps} request)
+when the font is effectively in use.  Without second and third argument,
+constant glyph space mode is deactivated.
+
+Default scaling indicator for @var{em-size} is @samp{z}; @var{width} is
+an integer.
+@endDefreq
+
+@c ---------------------------------------------------------------------
+
+@node Ligatures and Kerning,  , Artificial Fonts, Fonts and Symbols
+@subsection Ligatures and Kerning
+@cindex ligatures and kerning
+@cindex kerning and ligatures
+
+Ligatures are groups of characters that are run together, i.e, producing
+a single glyph.  For example, the letters `f' and `i' can form a
+ligature `fi' as in the word `file'.  This produces a cleaner look
+(albeit subtle) to the printed output.  Usually, ligatures are not
+available in fonts for TTY output devices.
+
+Most @sc{PostScript} fonts support the fi and fl ligatures.  The C/A/T
+typesetter that was the target of @acronym{AT&T} @code{troff} also
+supported `ff', `ffi', and `ffl' ligatures.  Advanced typesetters or
+`expert' fonts may include ligatures for `ft' and `ct', although GNU
+@code{troff} does not support these (yet).
+
+Only the current font is checked for ligatures and kerns; neither
+special fonts nor entities defined with the @code{char} request (and its
+siblings) are taken into account.
+
+@DefreqList {lg, [@Var{flag}]}
+@DefregListEndx {.lg}
+@cindex activating ligatures (@code{lg})
+@cindex ligatures, activating (@code{lg})
+@cindex ligatures enabled register (@code{.lg})
+Switch the ligature mechanism on or off; if the parameter is non-zero or
+missing, ligatures are enabled, otherwise disabled.  Default is on.  The
+current ligature mode can be found in the read-only number register
+@code{.lg} (set to 1 or@tie{}2 if ligatures are enabled,
+0@tie{}otherwise).
+
+Setting the ligature mode to@tie{}2 enables the two-character ligatures
+(fi, fl, and ff) and disables the three-character ligatures (ffi and
+ffl).
+@endDefreq
+
+@dfn{Pairwise kerning} is another subtle typesetting mechanism that
+modifies the distance between a glyph pair to improve readability.  In
+most cases (but not always) the distance is decreased.
+@iftex
+For example, compare the combination of the letters `V' and `A'.  With
+kerning, `VA' is printed.  Without kerning it appears as `V@w{}A'.
+@end iftex
+Typewriter-like fonts and fonts for terminals where all glyphs have the
+same width don't use kerning.
+
+@DefreqList {kern, [@Var{flag}]}
+@DefregListEndx {.kern}
+@cindex activating kerning (@code{kern})
+@cindex kerning, activating (@code{kern})
+@cindex kerning enabled register (@code{.kern})
+Switch kerning on or off.  If the parameter is non-zero or missing,
+enable pairwise kerning, otherwise disable it.  The read-only number
+register @code{.kern} is set to@tie{}1 if pairwise kerning is enabled,
+0@tie{}otherwise.
+
+@cindex zero width space character (@code{\&})
+@cindex character, zero width space (@code{\&})
+@cindex space character, zero width (@code{\&})
+If the font description file contains pairwise kerning information,
+glyphs from that font are kerned.  Kerning between two glyphs can be
+inhibited by placing @code{\&} between them: @samp{V\&A}.
+
+@xref{Font File Format}.
+@endDefreq
+
+@cindex track kerning
+@cindex kerning, track
+@dfn{Track kerning} expands or reduces the space between glyphs.  This
+can be handy, for example, if you need to squeeze a long word onto a
+single line or spread some text to fill a narrow column.  It must be
+used with great care since it is usually considered bad typography if
+the reader notices the effect.
+
+@Defreq {tkf, f s1 n1 s2 n2}
+@cindex activating track kerning (@code{tkf})
+@cindex track kerning, activating (@code{tkf})
+Enable track kerning for font@tie{}@var{f}.  If the current font
+is@tie{}@var{f} the width of every glyph is increased by an amount
+between @var{n1} and @var{n2} (@var{n1}, @var{n2} can be negative); if
+the current point size is less than or equal to @var{s1} the width is
+increased by @var{n1}; if it is greater than or equal to @var{s2} the
+width is increased by @var{n2}; if the point size is greater than or
+equal to @var{s1} and less than or equal to @var{s2} the increase in
+width is a linear function of the point size.
+
+The default scaling indicator is @samp{z} for @var{s1} and @var{s2},
+@samp{p} for @var{n1} and @var{n2}.
+
+Note that the track kerning amount is added even to the rightmost glyph
+in a line; for large values it is thus recommended to increase the line
+length by the same amount to compensate it.
+@endDefreq
+
+Sometimes, when typesetting letters of different fonts, more or less
+space at such boundaries are needed.  There are two escapes to help with
+this.
+
+@Defesc {\\/, , , }
+@cindex italic correction (@code{\/})
+@cindex correction, italic (@code{\/})
+@cindex correction between italic and roman glyph (@code{\/}, @code{\,})
+@cindex roman glyph, correction after italic glyph (@code{\/})
+@cindex italic glyph, correction before roman glyph (@code{\/})
+@cindex glyph, italic correction (@code{\/})
+Increase the width of the preceding glyph so that the spacing between
+that glyph and the following glyph is correct if the following glyph is
+a roman glyph.  For example, if an italic@tie{}@code{f} is immediately
+followed by a roman right parenthesis, then in many fonts the top right
+portion of the@tie{}@code{f} overlaps the top left of the right
+parenthesis.  Use this escape sequence whenever an italic glyph is
+immediately followed by a roman glyph without any intervening space.
+This small amount of space is also called @dfn{italic correction}.
+
+@iftex
+@c can't use @Example...@endExample here
+@example
+@group
+\f[I]f\f[R])
+    @result{} {@it f}@r{)}
+\f[I]f\/\f[R])
+    @result{} @i{f}@r{)}
+@end group
+@end example
+@end iftex
+@endDefesc
+
+@Defesc {\\\,, , , }
+@cindex left italic correction (@code{\,})
+@cindex correction, left italic (@code{\,})
+@cindex glyph, left italic correction (@code{\,})
+@cindex roman glyph, correction before italic glyph (@code{\,})
+@cindex italic glyph, correction after roman glyph (@code{\,})
+Modify the spacing of the following glyph so that the spacing between
+that glyph and the preceding glyph is correct if the preceding glyph is
+a roman glyph.  Use this escape sequence whenever a roman glyph is
+immediately followed by an italic glyph without any intervening space.
+In analogy to above, this space could be called @dfn{left italic
+correction}, but this term isn't used widely.
+
+@iftex
+@c can't use @Example...@endExample here
+@example
+@group
+q\f[I]f
+    @result{} @r{q}@i{f}
+q\,\f[I]f
+    @result{} @r{q}@math{@ptexcomma}@i{f}
+@end group
+@end example
+@end iftex
+@endDefesc
+
+@Defesc {\\&, , , }
+Insert a zero-width character, which is invisible.  Its intended use is
+to stop interaction of a character with its surrounding.
+
+@itemize @bullet
+@item
+It prevents the insertion of extra space after an end-of-sentence
+character.
+
+@Example
+Test.
+Test.
+    @result{} Test.  Test.
+Test.\&
+Test.
+    @result{} Test. Test.
+@endExample
+
+@item
+It prevents interpretation of a control character at the beginning of an
+input line.
+
+@Example
+.Test
+    @result{} warning: `Test' not defined
+\&.Test
+    @result{} .Test
+@endExample
+
+@item
+It prevents kerning between two glyphs.
+
+@iftex
+@c can't use @Example...@endExample here
+@example
+@group
+VA
+    @result{} @r{VA}
+V\&A
+    @result{} @r{V@w{}A}
+@end group
+@end example
+@end iftex
+
+@item
+It is needed to map an arbitrary character to nothing in the @code{tr}
+request (@pxref{Character Translations}).
+@end itemize
+@endDefesc
+
+@Defesc {\\), , , }
+This escape is similar to @code{\&} except that it behaves like a
+character declared with the @code{cflags} request to be transparent for
+the purposes of an end-of-sentence character.
+
+Its main usage is in macro definitions to protect against arguments
+starting with a control character.
+
+@Example
+.de xxx
+\)\\$1
+..
+.de yyy
+\&\\$1
+..
+This is a test.\c
+.xxx '
+This is a test.
+    @result{}This is a test.'  This is a test.
+This is a test.\c
+.yyy '
+This is a test.
+    @result{}This is a test.' This is a test.
+@endExample
+@endDefesc
+
+
+@c =====================================================================
+
+@node Sizes, Strings, Fonts and Symbols, gtroff Reference
+@section Sizes
+@cindex sizes
+
+@cindex baseline
+@cindex type size
+@cindex size of type
+@cindex vertical spacing
+@cindex spacing, vertical
+@code{gtroff} uses two dimensions with each line of text, type size and
+vertical spacing.  The @dfn{type size} is approximately the height of
+the tallest glyph.@footnote{This is usually the parenthesis.  Note that
+in most cases the real dimensions of the glyphs in a font are @emph{not}
+related to its type size!  For example, the standard @sc{PostScript}
+font families `Times Roman', `Helvetica', and `Courier' can't be used
+together at 10@dmn{pt}; to get acceptable output, the size of
+`Helvetica' has to be reduced by one point, and the size of `Courier'
+must be increased by one point.}  @dfn{Vertical spacing} is the amount
+of space @code{gtroff} allows for a line of text; normally, this is
+about 20%@tie{}larger than the current type size.  Ratios smaller than
+this can result in hard-to-read text; larger than this, it spreads the
+text out more vertically (useful for term papers).  By default,
+@code{gtroff} uses 10@tie{}point type on 12@tie{}point spacing.
+
+@cindex leading
+The difference between type size and vertical spacing is known, by
+typesetters, as @dfn{leading} (this is pronounced `ledding').
+
+@menu
+* Changing Type Sizes::
+* Fractional Type Sizes::
+@end menu
+
+@c ---------------------------------------------------------------------
+
+@node Changing Type Sizes, Fractional Type Sizes, Sizes, Sizes
+@subsection Changing Type Sizes
+
+@DefreqList {ps, [@Var{size}]}
+@DefreqItem {ps, @t{+}@Var{size}}
+@DefreqItem {ps, @t{-}@Var{size}}
+@DefescItemx {\\s, , size, }
+@DefregListEndx {.s}
+@cindex changing type sizes (@code{ps}, @code{\s})
+@cindex type sizes, changing (@code{ps}, @code{\s})
+@cindex point sizes, changing (@code{ps}, @code{\s})
+Use the @code{ps} request or the @code{\s} escape to change (increase,
+decrease) the type size (in points).  Specify @var{size} as either an
+absolute point size, or as a relative change from the current size.  The
+size@tie{}0 (for both @code{.ps} and @code{\s}), or no argument (for
+@code{.ps} only), goes back to the previous size.
+
+Default scaling indicator of @code{size} is @samp{z}.  If @code{size} is
+negative, it is set to 1@dmn{u}.
+
+@cindex type size registers (@code{.s}, @code{.ps})
+@cindex point size registers (@code{.s}, @code{.ps})
+The read-only number register @code{.s} returns the point size in points
+as a decimal fraction.  This is a string.  To get the point size in
+scaled points, use the @code{.ps} register instead.
+
+@code{.s} is associated with the current environment
+(@pxref{Environments}).
+
+@Example
+snap, snap,
+.ps +2
+grin, grin,
+.ps +2
+wink, wink, \s+2nudge, nudge,\s+8 say no more!
+.ps 10
+@endExample
+
+The @code{\s} escape may be called in a variety of ways.  Much like
+other escapes there must be a way to determine where the argument ends
+and the text begins.  Any of the following forms are valid:
+
+@table @code
+@item \s@var{n}
+Set the point size to @var{n}@tie{}points.  @var{n}@tie{}must be either
+0 or in the range 4 to@tie{}39.
+
+@item \s+@var{n}
+@itemx \s-@var{n}
+Increase or decrease the point size by @var{n}@tie{}points.
+@var{n}@tie{}must be exactly one digit.
+
+@item \s(@var{nn}
+Set the point size to @var{nn}@tie{}points.  @var{nn} must be exactly
+two digits.
+
+@item \s+(@var{nn}
+@itemx \s-(@var{nn}
+@itemx \s(+@var{nn}
+@itemx \s(-@var{nn}
+Increase or decrease the point size by @var{nn}@tie{}points.  @var{nn}
+must be exactly two digits.
+@end table
+
+Note that @code{\s} doesn't produce an input token in @code{gtroff}.  As
+a consequence, it can be used in requests like @code{mc} (which expects
+a single character as an argument) to change the font on the fly:
+
+@Example
+.mc \s[20]x\s[0]
+@endExample
+
+@xref{Fractional Type Sizes}, for yet another syntactical form of using
+the @code{\s} escape.
+@endDefreq
+
+@Defreq {sizes, s1 s2 @dots{} sn [0]}
+Some devices may only have certain permissible sizes, in which case
+@code{gtroff} rounds to the nearest permissible size.  The @file{DESC}
+file specifies which sizes are permissible for the device.
+
+Use the @code{sizes} request to change the permissible sizes for the
+current output device.  Arguments are in scaled points; the
+@code{sizescale} line in the @file{DESC} file for the output device
+provides the scaling factor.  For example, if the scaling factor is
+1000, then the value 12000 is 12@tie{}points.
+
+Each argument can be a single point size (such as @samp{12000}), or a
+range of sizes (such as @samp{4000-72000}).  You can optionally end the
+list with a zero.
+@endDefreq
+
+@DefreqList {vs, [@Var{space}]}
+@DefreqItem {vs, @t{+}@Var{space}}
+@DefreqItem {vs, @t{-}@Var{space}}
+@DefregListEndx {.v}
+@cindex changing vertical line spacing (@code{vs})
+@cindex vertical line spacing, changing (@code{vs})
+@cindex vertical line spacing register (@code{.v})
+Change (increase, decrease) the vertical spacing by @var{space}.  The
+default scaling indicator is @samp{p}.
+
+If @code{vs} is called without an argument, the vertical spacing is
+reset to the previous value before the last call to @code{vs}.
+
+@cindex @code{.V} register, and @code{vs}
+@code{gtroff} creates a warning of type @samp{range} if @var{space} is
+negative; the vertical spacing is then set to smallest positive value,
+the vertical resolution (as given in the @code{.V} register).
+
+Note that @w{@samp{.vs 0}} isn't saved in a diversion since it doesn't
+result in a vertical motion.  You explicitly have to repeat this command
+before inserting the diversion.
+
+The read-only number register @code{.v} contains the current vertical
+spacing; it is associated with the current environment
+(@pxref{Environments}).
+@endDefreq
+
+@cindex vertical line spacing, effective value
+The effective vertical line spacing consists of four components.
+Breaking a line causes the following actions (in the given order).
+
+@itemize @bullet
+@item
+@cindex extra pre-vertical line space (@code{\x})
+@cindex line space, extra pre-vertical (@code{\x})
+Move the current point vertically by the @dfn{extra pre-vertical line
+space}.  This is the minimum value of all @code{\x} escapes with a
+negative argument in the current output line.
+
+@item
+Move the current point vertically by the vertical line spacing as set
+with the @code{vs} request.
+
+@item
+Output the current line.
+
+@item
+@cindex extra post-vertical line space (@code{\x})
+@cindex line space, extra post-vertical (@code{\x})
+Move the current point vertically by the @dfn{extra post-vertical line
+space}.  This is the maximum value of all @code{\x} escapes with a
+positive argument in the line that has just been output.
+
+@item
+@cindex post-vertical line spacing
+@cindex line spacing, post-vertical (@code{pvs})
+Move the current point vertically by the @dfn{post-vertical line
+spacing} as set with the @code{pvs} request.
+@end itemize
+
+@cindex double-spacing (@code{vs}, @code{pvs})
+It is usually better to use @code{vs} or @code{pvs} instead of @code{ls}
+to produce double-spaced documents: @code{vs} and @code{pvs} have a
+finer granularity for the inserted vertical space compared to @code{ls};
+furthermore, certain preprocessors assume single-spacing.
+
+@xref{Manipulating Spacing}, for more details on the @code{\x} escape
+and the @code{ls} request.
+
+@DefreqList {pvs, [@Var{space}]}
+@DefreqItem {pvs, @t{+}@Var{space}}
+@DefreqItem {pvs, @t{-}@Var{space}}
+@DefregListEndx {.pvs}
+@cindex @code{ls} request, alternative to (@code{pvs})
+@cindex post-vertical line spacing, changing (@code{pvs})
+@cindex post-vertical line spacing register (@code{.pvs})
+Change (increase, decrease) the post-vertical spacing by @var{space}.
+The default scaling indicator is @samp{p}.
+
+If @code{pvs} is called without an argument, the post-vertical spacing
+is reset to the previous value before the last call to @code{pvs}.
+
+@code{gtroff} creates a warning of type @samp{range} if @var{space} is
+zero or negative; the vertical spacing is then set to zero.
+
+The read-only number register @code{.pvs} contains the current
+post-vertical spacing; it is associated with the current environment
+(@pxref{Environments}).
+@endDefreq
+
+@c ---------------------------------------------------------------------
+
+@node Fractional Type Sizes,  , Changing Type Sizes, Sizes
+@subsection Fractional Type Sizes
+@cindex fractional type sizes
+@cindex fractional point sizes
+@cindex type sizes, fractional
+@cindex point sizes, fractional
+@cindex sizes, fractional
+
+@cindex @code{s} unit
+@cindex unit, @code{s}
+@cindex @code{z} unit
+@cindex unit, @code{z}
+@cindex @code{ps} request, with fractional type sizes
+@cindex @code{cs} request, with fractional type sizes
+@cindex @code{tkf} request, with fractional type sizes
+@cindex @code{\H}, with fractional type sizes
+@cindex @code{\s}, with fractional type sizes
+A @dfn{scaled point} is equal to @math{1/@var{sizescale}} points, where
+@var{sizescale} is specified in the @file{DESC} file (1@tie{}by
+default).  There is a new scale indicator @samp{z}, which has the effect
+of multiplying by @var{sizescale}.  Requests and escape sequences in
+@code{gtroff} interpret arguments that represent a point size as being
+in units of scaled points, but they evaluate each such argument using a
+default scale indicator of @samp{z}.  Arguments treated in this way are
+the argument to the @code{ps} request, the third argument to the
+@code{cs} request, the second and fourth arguments to the @code{tkf}
+request, the argument to the @code{\H} escape sequence, and those
+variants of the @code{\s} escape sequence that take a numeric expression
+as their argument (see below).
+
+For example, suppose @var{sizescale} is@tie{}1000; then a scaled point
+is equivalent to a millipoint; the request @w{@samp{.ps 10.25}} is
+equivalent to @w{@samp{.ps 10.25z}} and thus sets the point size to
+10250@tie{}scaled points, which is equal to 10.25@tie{}points.
+
+@code{gtroff} disallows the use of the @samp{z} scale indicator in
+instances where it would make no sense, such as a numeric expression
+whose default scale indicator was neither @samp{u} nor @samp{z}.
+Similarly it would make no sense to use a scaling indicator other than
+@samp{z} or @samp{u} in a numeric expression whose default scale
+indicator was @samp{z}, and so @code{gtroff} disallows this as well.
+
+There is also new scale indicator @samp{s}, which multiplies by the
+number of units in a scaled point.  So, for example, @samp{\n[.ps]s} is
+equal to @samp{1m}.  Be sure not to confuse the @samp{s} and @samp{z}
+scale indicators.
+
+@Defreg {.ps}
+A read-only number register returning the point size in scaled points.
+
+@code{.ps} is associated with the current environment
+(@pxref{Environments}).
+@endDefreg
+
+@DefregList {.psr}
+@DefregListEndx {.sr}
+@cindex last-requested point size registers (@code{.psr}, @code{.sr})
+@cindex point size registers, last-requested (@code{.psr}, @code{.sr})
+@cindex @code{.ps} register, in comparison with @code{.psr}
+@cindex @code{.s} register, in comparison with @code{.sr}
+The last-requested point size in scaled points is contained in the
+@code{.psr} read-only number register.  The last requested point size in
+points as a decimal fraction can be found in @code{.sr}.  This is a
+string-valued read-only number register.
+
+Note that the requested point sizes are device-independent, whereas the
+values returned by the @code{.ps} and @code{.s} registers are not.  For
+example, if a point size of 11@dmn{pt} is requested, and a @code{sizes}
+request (or a @code{sizescale} line in a @file{DESC} file) specifies
+10.95@dmn{pt} instead, this value is actually used.
+
+Both registers are associated with the current environment
+(@pxref{Environments}).
+@endDefreg
+
+The @code{\s} escape has the following syntax for working with
+fractional type sizes:
+
+@table @code
+@item \s[@var{n}]
+@itemx \s'@var{n}'
+Set the point size to @var{n}@tie{}scaled points; @var{n}@tie{}is a
+numeric expression with a default scale indicator of @samp{z}.
+
+@item \s[+@var{n}]
+@itemx \s[-@var{n}]
+@itemx \s+[@var{n}]
+@itemx \s-[@var{n}]
+@itemx \s'+@var{n}'
+@itemx \s'-@var{n}'
+@itemx \s+'@var{n}'
+@itemx \s-'@var{n}'
+Increase or or decrease the point size by @var{n}@tie{}scaled points;
+@var{n}@tie{}is a numeric expression (which may start with a minus sign)
+with a default scale indicator of @samp{z}.
+@end table
+
+@xref{Font Files}.
+
+
+@c =====================================================================
+
+@node Strings, Conditionals and Loops, Sizes, gtroff Reference
+@section Strings
+@cindex strings
+
+@code{gtroff} has string variables, which are entirely for user
+convenience (i.e.@: there are no built-in strings exept @code{.T}, but
+even this is a read-write string variable).
+
+Although the following requests can be used to create strings,
+simply using an undefined string will cause it to be defined as empty.
+@xref{Identifiers}.
+
+@DefreqList {ds, name [@Var{string}]}
+@DefreqItemx {ds1, name [@Var{string}]}
+@DefescItemx {\\*, , n, }
+@DefescItem {\\*, @Lparen{}, nm, }
+@DefescListEnd {\\*, @Lbrack{}, name arg1 arg2 @dots{}, @Rbrack{}}
+@cindex string interpolation (@code{\*})
+@cindex string expansion (@code{\*})
+@cindex interpolation of strings (@code{\*})
+@cindex expansion of strings (@code{\*})
+@cindex string arguments
+@cindex arguments, of strings
+Define and access a string variable @var{name} (one-character
+name@tie{}@var{n}, two-character name @var{nm}).  If @var{name} already
+exists, @code{ds} overwrites the previous definition.  Only the syntax
+form using brackets can take arguments that are handled identically to
+macro arguments; the single exception is that a closing bracket as an
+argument must be enclosed in double quotes.  @xref{Request and Macro
+Arguments}, and @ref{Parameters}.
+
+Example:
+
+@Example
+.ds foo a \\$1 test
+.
+This is \*[foo nice].
+    @result{} This is a nice test.
+@endExample
+
+The @code{\*} escape @dfn{interpolates} (expands in-place) a
+previously-defined string variable.  To be more precise, the stored
+string is pushed onto the input stack, which is then parsed by
+@code{gtroff}.  Similar to number registers, it is possible to nest
+strings, i.e., string variables can be called within string variables.
+
+If the string named by the @code{\*} escape does not exist, it is
+defined as empty, and a warning of type @samp{mac} is emitted (see
+@ref{Debugging}, for more details).
+
+@cindex comments, with @code{ds}
+@cindex @code{ds} request, and comments
+@strong{Caution:} Unlike other requests, the second argument to the
+@code{ds} request takes up the entire line including trailing spaces.
+This means that comments on a line with such a request can introduce
+unwanted space into a string.
+
+@Example
+.ds UX \s-1UNIX\s0\u\s-3tm\s0\d \" UNIX trademark
+@endExample
+
+@noindent
+Instead the comment should be put on another line or have the comment
+escape adjacent with the end of the string.
+
+@Example
+.ds UX \s-1UNIX\s0\u\s-3tm\s0\d\"  UNIX trademark
+@endExample
+
+@cindex trailing quotes
+@cindex quotes, trailing
+@cindex leading spaces with @code{ds}
+@cindex spaces with @code{ds}
+@cindex @code{ds} request, and leading spaces
+To produce leading space the string can be started with a double quote.
+No trailing quote is needed; in fact, any trailing quote is included in
+your string.
+
+@Example
+.ds sign "           Yours in a white wine sauce,
+@endExample
+
+@cindex multi-line strings
+@cindex strings, multi-line
+@cindex newline character, in strings, escaping
+@cindex escaping newline characters, in strings
+Strings are not limited to a single line of text.  A string can span
+several lines by escaping the newlines with a backslash.  The resulting
+string is stored @emph{without} the newlines.
+
+@Example
+.ds foo lots and lots \
+of text are on these \
+next several lines
+@endExample
+
+It is not possible to have real newlines in a string.  To put a single
+double quote character into a string, use two consecutive double quote
+characters.
+
+The @code{ds1} request turns off compatibility mode while interpreting a
+string.  To be more precise, a @dfn{compatibility save} input token is
+inserted at the beginning of the string, and a @dfn{compatibility
+restore} input token at the end.
+
+@Example
+.nr xxx 12345
+.ds aa The value of xxx is \\n[xxx].
+.ds1 bb The value of xxx ix \\n[xxx].
+.
+.cp 1
+.
+\*(aa
+    @result{} warning: number register `[' not defined
+    @result{} The value of xxx is 0xxx].
+\*(bb
+    @result{} The value of xxx ix 12345.
+@endExample
+
+@cindex name space, common, of macros, diversions, and strings
+@cindex common name space of macros, diversions, and strings
+@cindex macros, shared name space with strings and diversions
+@cindex strings, shared name space with macros and diversions
+@cindex diversions, shared name space with macros and strings
+Strings, macros, and diversions (and boxes) share the same name space.
+Internally, even the same mechanism is used to store them.  This has
+some interesting consequences.  For example, it is possible to call a
+macro with string syntax and vice versa.
+
+@Example
+.de xxx
+a funny test.
+..
+This is \*[xxx]
+    @result{} This is a funny test.
+
+.ds yyy a funny test
+This is
+.yyy
+    @result{} This is a funny test.
+@endExample
+
+In particular, interpolating a string does not hide existing macro
+arguments.  Thus in a macro, a more efficient way of doing
+
+@Example
+.xx \\$@@
+@endExample
+
+@noindent
+is
+
+@Example
+\\*[xx]\\
+@endExample
+
+@noindent
+Note that the latter calling syntax doesn't change the value of
+@code{\$0}, which is then inherited from the calling macro.
+
+Diversions and boxes can be also called with string syntax.
+
+Another consequence is that you can copy one-line diversions or boxes to
+a string.
+
+@Example
+.di xxx
+a \fItest\fR
+.br
+.di
+.ds yyy This is \*[xxx]\c
+\*[yyy].
+    @result{} @r{This is a }@i{test}.
+@endExample
+
+@noindent
+As the previous example shows, it is possible to store formatted output
+in strings.  The @code{\c} escape prevents the insertion of an
+additional blank line in the output.
+
+Copying diversions longer than a single output line produces unexpected
+results.
+
+@Example
+.di xxx
+a funny
+.br
+test
+.br
+.di
+.ds yyy This is \*[xxx]\c
+\*[yyy].
+    @result{} test This is a funny.
+@endExample
+
+Usually, it is not predictable whether a diversion contains one or more
+output lines, so this mechanism should be avoided.  With @acronym{UNIX}
+@code{troff}, this was the only solution to strip off a final newline
+from a diversion.  Another disadvantage is that the spaces in the copied
+string are already formatted, making them unstretchable.  This can cause
+ugly results.
+
+@cindex stripping final newline in diversions
+@cindex diversion, stripping final newline
+@cindex final newline, stripping in diversions
+@cindex newline, final, stripping in diversions
+@cindex horizontal space, unformatting
+@cindex space, horizontal, unformatting
+@cindex unformatting horizontal space
+A clean solution to this problem is available in GNU @code{troff}, using
+the requests @code{chop} to remove the final newline of a diversion, and
+@code{unformat} to make the horizontal spaces stretchable again.
+
+@Example
+.box xxx
+a funny
+.br
+test
+.br
+.box
+.chop xxx
+.unformat xxx
+This is \*[xxx].
+    @result{} This is a funny test.
+@endExample
+
+@xref{Gtroff Internals}, for more information.
+@endDefreq
+
+@DefreqList {as, name [@Var{string}]}
+@DefreqListEndx {as1, name [@Var{string}]}
+@cindex appending to a string (@code{as})
+@cindex string, appending (@code{as})
+The @code{as} request is similar to @code{ds} but appends @var{string}
+to the string stored as @var{name} instead of redefining it.  If
+@var{name} doesn't exist yet, it is created.
+
+@Example
+.as sign " with shallots, onions and garlic,
+@endExample
+
+The @code{as1} request is similar to @code{as}, but compatibility mode
+is switched off while the appended string is interpreted.  To be more
+precise, a @dfn{compatibility save} input token is inserted at the
+beginning of the appended string, and a @dfn{compatibility restore}
+input token at the end.
+@endDefreq
+
+Rudimentary string manipulation routines are given with the next two
+requests.
+
+@Defreq {substring, str n1 [@Var{n2}]}
+@cindex substring (@code{substring})
+Replace the string named @var{str} with the substring defined by the
+indices @var{n1} and @var{n2}.  The first character in the string has
+index@tie{}0.  If @var{n2} is omitted, it is implicitly set to the
+largest valid value (the string length minus one).  If the index value
+@var{n1} or @var{n2} is negative, it is counted from the end of the
+string, going backwards: The last character has index@tie{}@minus{}1,
+the character before the last character has index@tie{}@minus{}2, etc.
+
+@Example
+.ds xxx abcdefgh
+.substring xxx 1 -4
+\*[xxx]
+    @result{} bcde
+.substring xxx 2
+\*[xxx]
+    @result{} de
+@endExample
+@endDefreq
+
+@Defreq {length, reg str}
+@cindex length of a string (@code{length})
+@cindex string, length of (@code{length})
+@cindex @code{length} request, and copy-in mode
+@cindex copy-in mode, and @code{length} request
+@cindex mode, copy-in, and @code{length} request
+Compute the number of characters of @var{str} and return it in the
+number register @var{reg}.  If @var{reg} doesn't exist, it is created.
+@code{str} is read in copy mode.
+
+@Example
+.ds xxx abcd\h'3i'efgh
+.length yyy \*[xxx]
+\n[yyy]
+    @result{} 14
+@endExample
+@endDefreq
+
+@Defreq {rn, xx yy}
+@cindex renaming request (@code{rn})
+@cindex request, renaming (@code{rn})
+@cindex renaming macro (@code{rn})
+@cindex macro, renaming (@code{rn})
+@cindex renaming string (@code{rn})
+@cindex string, renaming (@code{rn})
+@cindex renaming diversion (@code{rn})
+@cindex diversion, renaming (@code{rn})
+Rename the request, macro, diversion, or string @var{xx} to @var{yy}.
+@endDefreq
+
+@Defreq {rm, xx}
+@cindex removing request (@code{rm})
+@cindex request, removing (@code{rm})
+@cindex removing macro (@code{rm})
+@cindex macro, removing (@code{rm})
+@cindex removing string (@code{rm})
+@cindex string, removing (@code{rm})
+@cindex removing diversion (@code{rm})
+@cindex diversion, removing (@code{rm})
+Remove the request, macro, diversion, or string @var{xx}.  @code{gtroff}
+treats subsequent invocations as if the object had never been defined.
+@endDefreq
+
+@anchor{als}
+@Defreq {als, new old}
+@cindex alias, string, creating (@code{als})
+@cindex alias, macro, creating (@code{als})
+@cindex alias, diversion, creating (@code{als})
+@cindex creating alias, for string (@code{als})
+@cindex creating alias, for macro (@code{als})
+@cindex creating alias, for diversion (@code{als})
+@cindex string, creating alias (@code{als})
+@cindex macro, creating alias (@code{als})
+@cindex diversion, creating alias (@code{als})
+Create an alias named @var{new} for the request, string, macro, or
+diversion object named @var{old}.  The new name and the old name are
+exactly equivalent (it is similar to a hard rather than a soft link).  If
+@var{old} is undefined, @code{gtroff} generates a warning of type
+@samp{mac} and ignores the request.
+
+To understand how the @code{als} request works it is probably best to
+think of two different pools: one pool for objects (macros, strings,
+etc.), and another one for names.  As soon as an object is defined,
+@code{gtroff} adds it to the object pool, adds its name to the name
+pool, and creates a link between them.  When @code{als} creates an
+alias, it adds a new name to the name pool that gets linked to the same
+object as the old name.
+
+Now consider this example.
+
+@Example
+.de foo
+..
+.
+.als bar foo
+.
+.de bar
+.  foo
+..
+.
+.bar
+    @result{} input stack limit exceeded
+@endExample
+
+@noindent
+The definition of macro @code{bar} replaces the old object this name is
+linked to.  However, the alias to @code{foo} is still active!  In
+other words, @code{foo} is still linked to the same object as
+@code{bar}, and the result of calling @code{bar} is an infinite,
+recursive loop that finally leads to an error.
+
+@cindex alias, string, removing (@code{rm})
+@cindex alias, macro, removing (@code{rm})
+@cindex alias, diversion, removing (@code{rm})
+@cindex removing alias, for string (@code{rm})
+@cindex removing alias, for macro (@code{rm})
+@cindex removing alias, for diversion (@code{rm})
+@cindex string, removing alias (@code{rm})
+@cindex macro, removing alias (@code{rm})
+@cindex diversion, removing alias (@code{rm})
+To undo an alias, simply call @code{rm} on the aliased name.  The object
+itself is not destroyed until there are no more aliases.
+@endDefreq
+
+@Defreq {chop, xx}
+Remove (chop) the last character from the macro, string, or diversion
+named @var{xx}.  This is useful for removing the newline from the end of
+diversions that are to be interpolated as strings.  This command can be
+used repeatedly; see @ref{Gtroff Internals}, for details on nodes
+inserted additionally by @code{gtroff}.
+@endDefreq
+
+@xref{Identifiers}, and @ref{Comments}.
+
+
+@c =====================================================================
+
+@node Conditionals and Loops, Writing Macros, Strings, gtroff Reference
+@section Conditionals and Loops
+@cindex conditionals and loops
+@cindex loops and conditionals
+
+@menu
+* Operators in Conditionals::
+* if-else::
+* while::
+@end menu
+
+@c ---------------------------------------------------------------------
+
+@node Operators in Conditionals, if-else, Conditionals and Loops, Conditionals and Loops
+@subsection Operators in Conditionals
+
+@cindex @code{if} request, operators to use with
+@cindex @code{ie} request, operators to use with
+@cindex @code{while} request, operators to use with
+In @code{if}, @code{ie}, and @code{while} requests, in addition to ordinary
+@ref{Expressions}, there are several more operators available:
+
+@table @code
+@item e
+@itemx o
+True if the current page is even or odd numbered (respectively).
+
+@item n
+@cindex conditional output for terminal (TTY)
+@cindex TTY, conditional output for
+@cindex terminal, conditional output for
+True if the document is being processed in nroff mode (i.e., the
+@code{.nroff} command has been issued).  @xref{Troff and Nroff Mode}.
+
+@item t
+True if the document is being processed in troff mode (i.e., the
+@code{.troff} command has been issued).  @xref{Troff and Nroff Mode}.
+
+@item v
+Always false.  This condition is for compatibility with other
+@code{troff} versions only (identifying a @code{-Tversatec} device).
+
+@item '@var{xxx}'@var{yyy}'
+True if the output produced by @var{xxx} is equal to the output produced
+by @var{yyy}.  Other characters can be used in place of the single
+quotes; the same set of delimiters as for the @code{\D} escape is used
+(@pxref{Escapes}).  @code{gtroff} formats @var{xxx} and @var{yyy} in
+separate environments; after the comparison the resulting data is
+discarded.
+
+@Example
+.ie "|"\fR|\fP" \
+true
+.el \
+false
+    @result{} true
+@endExample
+
+@noindent
+The resulting motions, glyph sizes, and fonts have to
+match,@footnote{The created output nodes must be identical.
+@xref{Gtroff Internals}.} and not the individual motion, size, and font
+requests.  In the previous example, @samp{|} and @samp{\fR|\fP} both
+result in a roman @samp{|} glyph with the same point size and at the
+same location on the page, so the strings are equal.  If
+@samp{.ft@tie{}I} had been added before the @samp{.ie}, the result would
+be ``false'' because (the first) @samp{|} produces an italic @samp{|}
+rather than a roman one.
+
+@cindex string comparison
+@cindex comparison of strings
+To compare strings without processing, surround the data with @code{\?}.
+
+@Example
+.ie "\?|\?"\?\fR|\fP\?" \
+true
+.el \
+false
+    @result{} false
+@endExample
+
+@cindex @code{\?}, and copy-in mode
+@cindex copy-in mode, and @code{\?}
+@cindex mode, copy-in, and @code{\?}
+@noindent
+Since data protected with @code{\?} is read in copy-in mode it is even
+possible to use incomplete input without causing an error.
+
+@Example
+.ds a \[
+.ds b \[
+.ie '\?\*a\?'\?\*b\?' \
+true
+.el \
+false
+    @result{} true
+@endExample
+
+@item r @var{xxx}
+True if there is a number register named @var{xxx}.
+
+@item d @var{xxx}
+True if there is a string, macro, diversion, or request named @var{xxx}.
+
+@item m @var{xxx}
+True if there is a color named @var{xxx}.
+
+@item c @var{g}
+True if there is a glyph @var{g} available@footnote{The name of this
+conditional operator is a misnomer since it tests names of output
+glyphs.}; @var{g} is either an @acronym{ASCII} character or a special
+character (@code{\N'@var{xxx}'}, @code{\(@var{gg}} or
+@code{\[@var{ggg}]}); the condition is also true if @var{g} has been
+defined by the @code{char} request.
+
+@item F @var{font}
+True if a font named @var{font} exists.  @var{font} is handled as if it
+was opened with the @code{ft} request (this is, font translation and
+styles are applied), without actually mounting it.
+
+This test doesn't load the complete font but only its header to verify
+its validity.
+
+@item S @var{style}
+True if style @var{style} has been registered.  Font translation is
+applied.
+@end table
+
+Note that these operators can't be combined with other operators like
+@samp{:} or @samp{&}; only a leading @samp{!} (without whitespace
+between the exclamation mark and the operator) can be used to negate the
+result.
+
+@Example
+.nr xxx 1
+.ie !r xxx \
+true
+.el \
+false
+    @result{} false
+@endExample
+
+A whitespace after @samp{!} always evaluates to zero (this bizarre
+behaviour is due to compatibility with @acronym{UNIX} @code{troff}).
+
+@Example
+.nr xxx 1
+.ie ! r xxx \
+true
+.el \
+false
+    @result{} r xxx true
+@endExample
+
+It is possible to omit the whitespace before the argument to the
+@samp{r}, @samp{d}, and @samp{c} operators.
+
+@xref{Expressions}.
+
+@c ---------------------------------------------------------------------
+
+@node if-else, while, Operators in Conditionals, Conditionals and Loops
+@subsection if-else
+@cindex if-else
+
+@code{gtroff} has if-then-else constructs like other languages, although
+the formatting can be painful.
+
+@Defreq {if, expr anything}
+
+Evaluate the expression @var{expr}, and executes @var{anything} (the
+remainder of the line) if @var{expr} evaluates to a value greater than
+zero (true).  @var{anything} is interpreted as though it was on a line
+by itself (except that leading spaces are swallowed).
+@xref{Operators in Conditionals}, for more info.
+
+@Example
+.nr xxx 1
+.nr yyy 2
+.if ((\n[xxx] == 1) & (\n[yyy] == 2)) true
+    @result{} true
+@endExample
+@endDefreq
+
+@Defreq {nop, anything}
+Executes @var{anything}.  This is similar to @code{.if@tie{}1}.
+@endDefreq
+
+@DefreqList {ie, expr anything}
+@DefreqListEndx {el, anything}
+Use the @code{ie} and @code{el} requests to write an if-then-else.  The
+first request is the `if' part and the latter is the `else' part.
+
+@Example
+.ie n .ls 2 \" double-spacing in nroff
+.el   .ls 1 \" single-spacing in troff
+@endExample
+@endDefreq
+
+@c there is a bug in makeinfo <= 4.1a: you can't have `@{' as an argument
+@c to @deffn
+@c
+@c and in 4.2 you still can't use @{ in macros.
+
+@c @DefescList {\@{, , , }
+@c @DefescListEnd {\@}, , , }
+@deffn Escape @t{\@{}
+@deffnx Escape @t{\@}}
+@esindex \@{
+@esindex \@}
+@cindex begin of conditional block (@code{\@{})
+@cindex end of conditional block (@code{\@}})
+@cindex conditional block, begin (@code{\@{})
+@cindex conditional block, end (@code{\@}})
+@cindex block, conditional, begin (@code{\@{})
+@cindex block, condititional, end (@code{\@}})
+In many cases, an if (or if-else) construct needs to execute more than
+one request.  This can be done using the escapes @code{\@{} (which must
+start the first line) and @code{\@}} (which must end the last line).
+
+@Example
+.ie t \@{\
+.    ds lq ``
+.    ds rq ''
+.\@}
+.el \@{\
+.    ds lq ""
+.    ds rq ""
+.\@}
+@endExample
+@c @endDefesc
+@end deffn
+
+@xref{Expressions}.
+
+@c ---------------------------------------------------------------------
+
+@node while,  , if-else, Conditionals and Loops
+@subsection while
+@cindex while
+
+@code{gtroff} provides a looping construct using the @code{while}
+request, which is used much like the @code{if} (and related) requests.
+
+@Defreq {while, expr anything}
+Evaluate the expression @var{expr}, and repeatedly execute
+@var{anything} (the remainder of the line) until @var{expr} evaluates
+to@tie{}0.
+
+@Example
+.nr a 0 1
+.while (\na < 9) \@{\
+\n+a,
+.\@}
+\n+a
+    @result{} 1, 2, 3, 4, 5, 6, 7, 8, 9, 10
+@endExample
+
+Some remarks.
+
+@cindex @code{de} request, and @code{while}
+@itemize @bullet
+@item
+The body of a @code{while} request is treated like the body of a
+@code{de} request: @code{gtroff} temporarily stores it in a macro that
+is deleted after the loop has been exited.  It can considerably slow
+down a macro if the body of the @code{while} request (within the macro)
+is large.  Each time the macro is executed, the @code{while} body is
+parsed and stored again as a temporary macro.
+
+@Example
+.de xxx
+.  nr num 10
+.  while (\\n[num] > 0) \@{\
+.    \" many lines of code
+.    nr num -1
+.  \@}
+..
+@endExample
+
+@cindex recursive macros
+@cindex macros, recursive
+@noindent
+The traditional and ofter better solution (@acronym{UNIX} @code{troff}
+doesn't have the @code{while} request) is to use a recursive macro
+instead that is parsed only once during its definition.
+
+@Example
+.de yyy
+.  if (\\n[num] > 0) \@{\
+.    \" many lines of code
+.    nr num -1
+.    yyy
+.  \@}
+..
+.
+.de xxx
+.  nr num 10
+.  yyy
+..
+@endExample
+
+@noindent
+Note that the number of available recursion levels is set to@tie{}1000
+(this is a compile-time constant value of @code{gtroff}).
+
+@item
+The closing brace of a @code{while} body must end a line.
+
+@Example
+.if 1 \@{\
+.  nr a 0 1
+.  while (\n[a] < 10) \@{\
+.    nop \n+[a]
+.\@}\@}
+    @result{} unbalanced \@{ \@}
+@endExample
+@end itemize
+@endDefreq
+
+@Defreq {break, }
+@cindex @code{while} request, confusing with @code{br}
+@cindex @code{break} request, in a @code{while} loop
+@cindex @code{continue} request, in a @code{while} loop
+Break out of a @code{while} loop.  Be sure not to confuse this with the
+@code{br} request (causing a line break).
+@endDefreq
+
+@Defreq {continue, }
+Finish the current iteration of a @code{while} loop, immediately
+restarting the next iteration.
+@endDefreq
+
+@xref{Expressions}.
+
+
+@c =====================================================================
+
+@node Writing Macros, Page Motions, Conditionals and Loops, gtroff Reference
+@section Writing Macros
+@cindex writing macros
+@cindex macros, writing
+
+A @dfn{macro} is a collection of text and embedded commands that can be
+invoked multiple times.  Use macros to define common operations.
+@xref{Strings}, for a (limited) alternative syntax to call macros.
+
+Although the following requests can be used to create macros,
+simply using an undefined macro will cause it to be defined as empty.
+@xref{Identifiers}.
+
+@DefreqList {de, name [@Var{end}]}
+@DefreqItemx {de1, name [@Var{end}]}
+@DefreqItemx {dei, name [@Var{end}]}
+@DefreqListEndx {dei1, name [@Var{end}]}
+Define a new macro named @var{name}.  @code{gtroff} copies subsequent
+lines (starting with the next one) into an internal buffer until it
+encounters the line @samp{..} (two dots).  If the optional second
+argument to @code{de} is present it is used as the macro closure
+request instead of @samp{..}.
+
+There can be whitespace after the first dot in the line containing the
+ending token (either @samp{.} or macro @samp{@var{end}}).  Don't insert
+a tab character immediately after the @samp{..}, otherwise it isn't
+recognized as the end-of-macro symbol.@footnote{While it is possible to
+define and call a macro @samp{.} with
+
+@Example
+.de .
+.  tm foo
+..
+.
+..    \" This calls macro `.'!
+@endExample
+
+@noindent
+you can't use this as the end-of-macro macro: during a macro definition,
+@samp{..} is never handled as a call to @samp{.}, even if you say
+@samp{.de foo .} explicitly.}
+
+Here a small example macro called @samp{P} that causes a break and
+inserts some vertical space.  It could be used to separate paragraphs.
+
+@Example
+.de P
+.  br
+.  sp .8v
+..
+@endExample
+
+The following example defines a macro within another.  Remember that
+expansion must be protected twice; once for reading the macro and once
+for executing.
+
+@Example
+\# a dummy macro to avoid a warning
+.de end
+..
+.
+.de foo
+.  de bar end
+.    nop \f[B]Hallo \\\\$1!\f[]
+.  end
+..
+.
+.foo
+.bar Joe
+    @result{} @b{Hallo Joe!}
+@endExample
+
+@noindent
+Since @code{\f} has no expansion, it isn't necessary to protect its
+backslash.  Had we defined another macro within @code{bar} that takes a
+parameter, eight backslashes would be necessary before @samp{$1}.
+
+The @code{de1} request turns off compatibility mode while executing the
+macro.  On entry, the current compatibility mode is saved and restored
+at exit.
+
+@Example
+.nr xxx 12345
+.
+.de aa
+The value of xxx is \\n[xxx].
+..
+.de1 bb
+The value of xxx ix \\n[xxx].
+..
+.
+.cp 1
+.
+.aa
+    @result{} warning: number register `[' not defined
+    @result{} The value of xxx is 0xxx].
+.bb
+    @result{} The value of xxx ix 12345.
+@endExample
+
+The @code{dei} request defines a macro indirectly.  That is, it expands
+strings whose names are @var{name} or @var{end} before performing the
+append.
+
+This:
+
+@Example
+.ds xx aa
+.ds yy bb
+.dei xx yy
+@endExample
+
+@noindent
+is equivalent to:
+
+@Example
+.de aa bb
+@endExample
+
+The @code{dei1} request is similar to @code{dei} but with compatibility
+mode switched off during execution of the defined macro.
+
+If compatibility mode is on, @code{de} (and @code{dei}) behave similar
+to @code{de1} (and @code{dei1}): A `compatibility save' token is
+inserted at the beginning, and a `compatibility restore' token at the
+end, with compatibility mode switched on during execution.  @xref{Gtroff
+Internals}, for more information on switching compatibility mode on and
+off in a single document.
+
+@pindex trace.tmac
+Using @file{trace.tmac}, you can trace calls to @code{de} and
+@code{de1}.
+
+Note that macro identifiers are shared with identifiers for strings and
+diversions.
+
+@xref{als,,the description of the @code{als} request}, for possible
+pitfalls if redefining a macro that has been aliased.
+@endDefreq
+
+@DefreqList {am, name [@Var{end}]}
+@DefreqItemx {am1, name [@Var{end}]}
+@DefreqItemx {ami, name [@Var{end}]}
+@DefreqListEndx {ami1, name [@Var{end}]}
+@cindex appending to a macro (@code{am})
+@cindex macro, appending (@code{am})
+Works similarly to @code{de} except it appends onto the macro named
+@var{name}.  So, to make the previously defined @samp{P} macro actually
+do indented instead of block paragraphs, add the necessary code to the
+existing macro like this:
+
+@Example
+.am P
+.ti +5n
+..
+@endExample
+
+The @code{am1} request turns off compatibility mode while executing the
+appended macro piece.  To be more precise, a @dfn{compatibility save}
+input token is inserted at the beginning of the appended code, and a
+@dfn{compatibility restore} input token at the end.
+
+The @code{ami} request appends indirectly, meaning that @code{gtroff}
+expands strings whose names are @var{name} or @var{end} before
+performing the append.
+
+The @code{ami1} request is similar to @code{ami} but compatibility mode
+is switched off during execution of the defined macro.
+
+@pindex trace.tmac
+Using @file{trace.tmac}, you can trace calls to @code{am} and
+@code{am1}.
+@endDefreq
+
+@xref{Strings}, for the @code{als} and @code{rn} request to create an
+alias and rename a macro, respectively.
+
+The @code{de}, @code{am}, @code{di}, @code{da}, @code{ds}, and @code{as}
+requests (together with its variants) only create a new object if the
+name of the macro, diversion or string diversion is currently undefined
+or if it is defined to be a request; normally they modify the value of
+an existing object.
+
+@Defreq {return, [@Var{anything}]}
+Exit a macro, immediately returning to the caller.
+
+If called with an argument, exit twice, namely the current macro and the
+macro one level higher.  This is used to define a wrapper macro for
+@code{return} in @file{trace.tmac}.
+@endDefreq
+
+@menu
+* Copy-in Mode::
+* Parameters::
+@end menu
+
+@c ---------------------------------------------------------------------
+
+@node Copy-in Mode, Parameters, Writing Macros, Writing Macros
+@subsection Copy-in Mode
+@cindex copy mode
+@cindex copy-in mode
+@cindex mode, copy
+@cindex mode, copy-in
+
+@cindex @code{\n}, when reading text for a macro
+@cindex @code{\$}, when reading text for a macro
+@cindex @code{\*}, when reading text for a macro
+@cindex @code{\\}, when reading text for a macro
+@cindex \@key{RET}, when reading text for a macro
+When @code{gtroff} reads in the text for a macro, string, or diversion,
+it copies the text (including request lines, but excluding escapes) into
+an internal buffer.  Escapes are converted into an internal form, except
+for @code{\n}, @code{\$}, @code{\*}, @code{\\} and @code{\@key{RET}},
+which are evaluated and inserted into the text where the escape was
+located.  This is known as @dfn{copy-in} mode or @dfn{copy} mode.
+
+What this means is that you can specify when these escapes are to be
+evaluated (either at copy-in time or at the time of use) by insulating
+the escapes with an extra backslash.  Compare this to the @code{\def}
+and @code{\edef} commands in @TeX{}.
+
+The following example prints the numbers 20 and@tie{}10:
+
+@Example
+.nr x 20
+.de y
+.nr x 10
+\&\nx
+\&\\nx
+..
+.y
+@endExample
+
+@c ---------------------------------------------------------------------
+
+@node Parameters,  , Copy-in Mode, Writing Macros
+@subsection Parameters
+@cindex parameters
+
+The arguments to a macro or string can be examined using a variety of
+escapes.
+
+@Defreg {.$}
+@cindex number of arguments register (@code{.$})
+The number of arguments passed to a macro or string.  This is a
+read-only number register.
+
+Note that the @code{shift} request can change its value.
+@endDefreg
+
+Any individual argument can be retrieved with one of the following
+escapes:
+
+@DefescList {\\$, , n, }
+@DefescItem {\\$, @Lparen{}, nn, }
+@DefescListEnd {\\$, @Lbrack{}, nnn, @Rbrack{}}
+@cindex copy-in mode, and macro arguments
+@cindex mode, copy-in, and macro arguments
+@cindex macro, arguments (@code{\$})
+@cindex arguments, macro (@code{\$})
+Retrieve the @var{n}@dmn{th}, @var{nn}@dmn{th} or @var{nnn}@dmn{th}
+argument.  As usual, the first form only accepts a single number (larger
+than zero), the second a two-digit number (larger or equal to@tie{}10),
+and the third any positive integer value (larger than zero).  Macros and
+strings can have an unlimited number of arguments.  Note that due to
+copy-in mode, use two backslashes on these in actual use to prevent
+interpolation until the macro is actually invoked.
+@endDefesc
+
+@Defreq {shift, [@Var{n}]}
+Shift the arguments 1@tie{}position, or as many positions as specified
+by its argument.  After executing this request, argument@tie{}@var{i}
+becomes argument @math{@var{i}-@var{n}}; arguments 1 to@tie{}@var{n} are
+no longer available.  Shifting by negative amounts is currently
+undefined.
+
+The register @code{.$} is adjusted accordingly.
+@endDefreq
+
+@DefescList {\\$*, , , }
+@DefescListEndx {\\$@@, , , }
+In some cases it is convenient to use all of the arguments at once (for
+example, to pass the arguments along to another macro).  The @code{\$*}
+escape concatenates all the arguments separated by spaces.  A similar
+escape is @code{\$@@}, which concatenates all the arguments with each
+surrounded by double quotes, and separated by spaces.  If not in
+compatibility mode, the input level of double quotes is preserved (see
+@ref{Request and Macro Arguments}).
+@endDefesc
+
+@Defesc {\\$^, , , }
+Handle the parameters of a macro as if they were an argument to the
+@code{ds} or similar requests.
+
+@Example
+.de foo
+.  tm $1=`\\$1'
+.  tm $2=`\\$2'
+.  tm $*=`\\$*'
+.  tm $@@=`\\$@@'
+.  tm $^=`\\$^'
+..
+.foo " This is a "test"
+    @result{} $1=` This is a '
+    @result{} $2=`test"'
+    @result{} $*=` This is a  test"'
+    @result{} $@@=`" This is a " "test""'
+    @result{} $^=`" This is a "test"'
+@endExample
+
+This escape is useful mainly for macro packages like @file{trace.tmac},
+which redefines some requests and macros for debugging purposes.
+@endDefesc
+
+@Defesc {\\$0, , , }
+@cindex macro name register (@code{\$0})
+@cindex @code{als} request, and @code{\$0}
+The name used to invoke the current macro.  The @code{als} request can
+make a macro have more than one name.
+
+If a macro is called as a string (within another macro), the value of
+@code{\$0} isn't changed.
+
+@Example
+.de foo
+.  tm \\$0
+..
+.als foo bar
+.
+@endExample
+@Example
+.de aaa
+.  foo
+..
+.de bbb
+.  bar
+..
+.de ccc
+\\*[foo]\\
+..
+.de ddd
+\\*[bar]\\
+..
+.
+@endExample
+@Example
+.aaa
+    @result{} foo
+.bbb
+    @result{} bar
+.ccc
+    @result{} ccc
+.ddd
+    @result{} ddd
+@endExample
+@endDefesc
+
+@xref{Request and Macro Arguments}.
+
+
+@c =====================================================================
+
+@node Page Motions, Drawing Requests, Writing Macros, gtroff Reference
+@section Page Motions
+@cindex page motions
+@cindex motions, page
+
+@xref{Manipulating Spacing}, for a discussion of the main request for
+vertical motion, @code{sp}.
+
+@DefreqList {mk, [@Var{reg}]}
+@DefreqListEndx {rt, [@Var{dist}]}
+@cindex marking vertical page location (@code{mk})
+@cindex page location, vertical, marking (@code{mk})
+@cindex location, vertical, page, marking (@code{mk})
+@cindex vertical page location, marking (@code{mk})
+@cindex returning to marked vertical page location (@code{rt})
+@cindex page location, vertical, returning to marked (@code{rt})
+@cindex location, vertical, page, returning to marked (@code{rt})
+@cindex vertical page location, returning to marked (@code{rt})
+The request @code{mk} can be used to mark a location on a page, for
+movement to later.  This request takes a register name as an argument in
+which to store the current page location.  With no argument it stores
+the location in an internal register.  The results of this can be used
+later by the @code{rt} or the @code{sp} request (or the @code{\v}
+escape).
+
+The @code{rt} request returns @emph{upwards} to the location marked with
+the last @code{mk} request.  If used with an argument, return to a
+position which distance from the top of the page is @var{dist} (no
+previous call to @code{mk} is necessary in this case).  Default scaling
+indicator is @samp{v}.
+
+Here a primitive solution for a two-column macro.
+
+@Example
+.nr column-length 1.5i
+.nr column-gap 4m
+.nr bottom-margin 1m
+.
+@endExample
+@Example
+.de 2c
+.  br
+.  mk
+.  ll \\n[column-length]u
+.  wh -\\n[bottom-margin]u 2c-trap
+.  nr right-side 0
+..
+.
+@endExample
+@Example
+.de 2c-trap
+.  ie \\n[right-side] \@{\
+.    nr right-side 0
+.    po -(\\n[column-length]u + \\n[column-gap]u)
+.    \" remove trap
+.    wh -\\n[bottom-margin]u
+.  \@}
+.  el \@{\
+.    \" switch to right side
+.    nr right-side 1
+.    po +(\\n[column-length]u + \\n[column-gap]u)
+.    rt
+.  \@}
+..
+.
+@endExample
+@Example
+.pl 1.5i
+.ll 4i
+This is a small test that shows how the
+rt request works in combination with mk.
+
+.2c
+Starting here, text is typeset in two columns.
+Note that this implementation isn't robust
+and thus not suited for a real two-column
+macro.
+@endExample
+
+Result:
+
+@Example
+This is a small test that shows how the
+rt request works in combination with mk.
+
+Starting  here,    isn't    robust
+text is typeset    and   thus  not
+in two columns.    suited  for   a
+Note that  this    real two-column
+implementation     macro.
+@endExample
+@endDefreq
+
+The following escapes give fine control of movements about the page.
+
+@Defesc {\\v, ', e, '}
+@cindex vertical motion (@code{\v})
+@cindex motion, vertical (@code{\v})
+Move vertically, usually from the current location on the page (if no
+absolute position operator @samp{|} is used).  The argument@tie{}@var{e}
+specifies the distance to move; positive is downwards and negative
+upwards.  The default scaling indicator for this escape is @samp{v}.
+Beware, however, that @code{gtroff} continues text processing at the
+point where the motion ends, so you should always balance motions to
+avoid interference with text processing.
+
+@code{\v} doesn't trigger a trap.  This can be quite useful; for
+example, consider a page bottom trap macro that prints a marker in the
+margin to indicate continuation of a footnote or something similar.
+@endDefesc
+
+There are some special-case escapes for vertical motion.
+
+@Defesc {\\r, , , }
+Move upwards@tie{}1@dmn{v}.
+@endDefesc
+
+@Defesc {\\u, , , }
+Move upwards@tie{}.5@dmn{v}.
+@endDefesc
+
+@Defesc {\\d, , , }
+Move down@tie{}.5@dmn{v}.
+@endDefesc
+
+@Defesc {\\h, ', e, '}
+@cindex inserting horizontal space (@code{\h})
+@cindex horizontal space (@code{\h})
+@cindex space, horizontal (@code{\h})
+@cindex horizontal motion (@code{\h})
+@cindex motion, horizontal (@code{\h})
+Move horizontally, usually from the current location (if no absolute
+position operator @samp{|} is used).  The expression@tie{}@var{e}
+indicates how far to move: positive is rightwards and negative
+leftwards.  The default scaling indicator for this escape is @samp{m}.
+
+This horizontal space is not discarded at the end of a line.  To insert
+discardable space of a certain length use the @code{ss} request.
+@endDefesc
+
+There are a number of special-case escapes for horizontal motion.
+
+@Defesc {\\@key{SP}, , , }
+@cindex space, unbreakable
+@cindex unbreakable space
+An unbreakable and unpaddable (i.e.@: not expanded during filling)
+space.  (Note: This is a backslash followed by a space.)
+@endDefesc
+
+@Defesc {\\~, , , }
+An unbreakable space that stretches like a normal inter-word space when
+a line is adjusted.
+@endDefesc
+
+@Defesc {\\|, , , }
+A 1/6@dmn{th} em space.  Ignored for TTY output devices (rounded to
+zero).
+
+However, if there is a glyph defined in the current font file with name
+@code{\|} (note the leading backslash), the width of this glyph is used
+instead (even for TTYs).
+@endDefesc
+
+@Defesc {\\^, , , }
+A 1/12@dmn{th} em space.  Ignored for TTY output devices (rounded to
+zero).
+
+However, if there is a glyph defined in the current font file with name
+@code{\^} (note the leading backslash), the width of this glyph is used
+instead (even for TTYs).
+@endDefesc
+
+@Defesc {\\0, , , }
+@cindex space, width of a digit (@code{\0})
+@cindex digit width space (@code{\0})
+A space the size of a digit.
+@endDefesc
+
+The following string sets the @TeX{} logo:
+
+@Example
+.ds TeX T\h'-.1667m'\v'.224m'E\v'-.224m'\h'-.125m'X
+@endExample
+
+@DefescList {\\w, ', text, '}
+@DefregItemx {st}
+@DefregItemx {sb}
+@DefregItemx {rst}
+@DefregItemx {rsb}
+@DefregItemx {ct}
+@DefregItemx {ssc}
+@DefregListEndx {skw}
+@cindex width escape (@code{\w})
+Return the width of the specified @var{text} in basic units.  This
+allows horizontal movement based on the width of some arbitrary text
+(e.g.@: given as an argument to a macro).
+
+@Example
+The length of the string `abc' is \w'abc'u.
+    @result{} The length of the string `abc' is 72u.
+@endExample
+
+Font changes may occur in @var{text}, which don't affect current
+settings.
+
+After use, @code{\w} sets several registers:
+
+@table @code
+@item st
+@itemx sb
+The highest and lowest point of the baseline, respectively, in
+@var{text}.
+
+@item rst
+@itemx rsb
+Like the @code{st} and @code{sb} registers, but takes account of the
+heights and depths of glyphs.  In other words, this gives the highest
+and lowest point of @var{text}.  Values below the baseline are negative.
+
+@item ct
+Defines the kinds of glyphs occurring in @var{text}:
+
+@table @asis
+@item 0
+only short glyphs, no descenders or tall glyphs.
+
+@item 1
+at least one descender.
+
+@item 2
+at least one tall glyph.
+
+@item 3
+at least one each of a descender and a tall glyph.
+@end table
+
+@item ssc
+The amount of horizontal space (possibly negative) that should be added
+to the last glyph before a subscript.
+
+@item skw
+How far to right of the center of the last glyph in the @code{\w}
+argument, the center of an accent from a roman font should be placed
+over that glyph.
+@end table
+@endDefesc
+
+@DefescList {\\k, , p, }
+@DefescItem {\\k, @Lparen{}, ps, }
+@DefescListEnd {\\k, @Lbrack{}, position, @Rbrack{}}
+@cindex saving horizontal input line position (@code{\k})
+@cindex horizontal input line position, saving (@code{\k})
+@cindex input line position, horizontal, saving (@code{\k})
+@cindex position, horizontal input line, saving (@code{\k})
+@cindex line, input, horizontal position, saving (@code{\k})
+Store the current horizontal position in the @emph{input} line in number
+register with name @var{position} (one-character name@tie{}@var{p},
+two-character name @var{ps}).  Use this, for example, to return to the
+beginning of a string for highlighting or other decoration.
+@endDefesc
+
+@Defreg {hp}
+@cindex horizontal input line position register (@code{hp})
+@cindex input line, horizontal position, register (@code{hp})
+@cindex position, horizontal, in input line, register (@code{hp})
+@cindex line, input, horizontal position, register (@code{hp})
+The current horizontal position at the input line.
+@endDefreg
+
+@Defreg {.k}
+@cindex horizontal output line position register (@code{.k})
+@cindex output line, horizontal position, register (@code{.k})
+@cindex position, horizontal, in output line, register (@code{.k})
+@cindex line, output, horizontal position, register (@code{.k})
+A read-only number register containing the current horizontal output
+position (relative to the current indentation).
+@endDefreg
+
+@Defesc {\\o, ', abc, '}
+@cindex overstriking glyphs (@code{\o})
+@cindex glyphs, overstriking (@code{\o})
+Overstrike glyphs @var{a}, @var{b}, @var{c}, @dots{}; the glyphs are
+centered, and the resulting spacing is the largest width of the affected
+glyphs.
+@endDefesc
+
+@Defesc {\\z, , g, }
+@cindex zero-width printing (@code{\z}, @code{\Z})
+@cindex printing, zero-width (@code{\z}, @code{\Z})
+Print glyph @var{g} with zero width, i.e., without spacing.  Use this to
+overstrike glyphs left-aligned.
+@endDefesc
+
+@Defesc {\\Z, ', anything, '}
+@cindex zero-width printing (@code{\z}, @code{\Z})
+@cindex printing, zero-width (@code{\z}, @code{\Z})
+Print @var{anything}, then restore the horizontal and vertical position.
+The argument may not contain tabs or leaders.
+
+The following is an example of a strike-through macro:
+
+@Example
+.de ST
+.nr ww \w'\\$1'
+\Z@@\v'-.25m'\l'\\n[ww]u'@@\\$1
+..
+.
+This is
+.ST "a test"
+an actual emergency!
+@endExample
+@endDefesc
+
+
+@c =====================================================================
+
+@node Drawing Requests, Traps, Page Motions, gtroff Reference
+@section Drawing Requests
+@cindex drawing requests
+@cindex requests for drawing
+
+@code{gtroff} provides a number of ways to draw lines and other figures
+on the page.  Used in combination with the page motion commands (see
+@ref{Page Motions}, for more info), a wide variety of figures can be
+drawn.  However, for complex drawings these operations can be quite
+cumbersome, and it may be wise to use graphic preprocessors like
+@code{gpic} or @code{ggrn}.  @xref{gpic}, and @ref{ggrn}, for more
+information.
+
+All drawing is done via escapes.
+
+@DefescList {\\l, ', l, '}
+@DefescListEnd {\\l, ', lg, '}
+@cindex drawing horizontal lines (@code{\l})
+@cindex horizontal line, drawing (@code{\l})
+@cindex line, horizontal, drawing (@code{\l})
+Draw a line horizontally.  @var{l} is the length of the line to be
+drawn.  If it is positive, start the line at the current location and
+draw to the right; its end point is the new current location.  Negative
+values are handled differently: The line starts at the current location
+and draws to the left, but the current location doesn't move.
+
+@var{l} can also be specified absolutely (i.e.@: with a leading
+@samp{|}), which draws back to the beginning of the input line.  Default
+scaling indicator is @samp{m}.
+
+@cindex underscore glyph (@code{\[ru]})
+@cindex glyph, underscore (@code{\[ru]})
+@cindex line drawing glyph
+@cindex glyph, for line drawing
+The optional second parameter@tie{}@var{g} is a glyph to draw the line
+with.  If this second argument is not specified, @code{gtroff} uses the
+underscore glyph, @code{\[ru]}.
+
+@cindex zero width space character (@code{\&})
+@cindex character, zero width space (@code{\&})
+@cindex space character, zero width (@code{\&})
+To separate the two arguments (to prevent @code{gtroff} from
+interpreting a drawing glyph as a scaling indicator if the glyph is
+represented by a single character) use @code{\&}.
+
+Here a small useful example:
+
+@Example
+.de box
+\[br]\\$*\[br]\l'|0\[rn]'\l'|0\[ul]'
+..
+@endExample
+
+@noindent
+Note that this works by outputting a box rule (a vertical line), then
+the text given as an argument and then another box rule.  Finally, the
+line drawing escapes both draw from the current location to the
+beginning of the @emph{input} line -- this works because the line length
+is negative, not moving the current point.
+@endDefesc
+
+@DefescList {\\L, ', l, '}
+@DefescListEnd {\\L, ', lg, '}
+@cindex drawing vertical lines (@code{\L})
+@cindex vertical line drawing (@code{\L})
+@cindex line, vertical, drawing (@code{\L})
+@cindex line drawing glyph
+@cindex glyph for line drawing
+@cindex box rule glyph (@code{\[br]})
+@cindex glyph, box rule (@code{\[br]})
+Draw vertical lines.  Its parameters are similar to the @code{\l}
+escape, except that the default scaling indicator is @samp{v}.  The
+movement is downwards for positive values, and upwards for negative
+values.  The default glyph is the box rule glyph, @code{\[br]}.  As with
+the vertical motion escapes, text processing blindly continues where the
+line ends.
+
+@Example
+This is a \L'3v'test.
+@endExample
+
+@noindent
+Here is the result, produced with @code{grotty}.
+
+@Example
+This is a
+          |
+          |
+          |test.
+@endExample
+@endDefesc
+
+@Defesc {\\D, ', command arg @dots{}, '}
+The @code{\D} escape provides a variety of drawing functions.  Note that
+on character devices, only vertical and horizontal lines are supported
+within @code{grotty}; other devices may only support a subset of the
+available drawing functions.
+
+The default scaling indicator for all subcommands of @code{\D} is
+@samp{m} for horizontal distances and @samp{v} for vertical ones.
+Exceptions are @w{@code{\D'f @dots{}'}} and @w{@code{\D't @dots{}'}},
+which use @code{u} as the default, and @w{@code{\D'F@var{x} @dots{}'}},
+which arguments are treated similar to the @code{defcolor} request.
+
+@table @code
+@item \D'l @var{dx} @var{dy}'
+@cindex line, drawing (@w{@code{\D'l @dots{}'}})
+@cindex drawing a line (@w{@code{\D'l @dots{}'}})
+Draw a line from the current location to the relative point specified by
+(@var{dx},@var{dy}), where positive values mean down and right,
+respectively.  The end point of the line is the new current location.
+
+The following example is a macro for creating a box around a text
+string; for simplicity, the box margin is taken as a fixed value,
+0.2@dmn{m}.
+
+@Example
+.de BOX
+.  nr @@wd \w'\\$1'
+\h'.2m'\
+\h'-.2m'\v'(.2m - \\n[rsb]u)'\
+\D'l 0 -(\\n[rst]u - \\n[rsb]u + .4m)'\
+\D'l (\\n[@@wd]u + .4m) 0'\
+\D'l 0 (\\n[rst]u - \\n[rsb]u + .4m)'\
+\D'l -(\\n[@@wd]u + .4m) 0'\
+\h'.2m'\v'-(.2m - \\n[rsb]u)'\
+\\$1\
+\h'.2m'
+..
+@endExample
+
+@noindent
+First, the width of the string is stored in register @code{@@wd}.  Then,
+four lines are drawn to form a box, properly offset by the box margin.
+The registers @code{rst} and @code{rsb} are set by the @code{\w} escape,
+containing the largest height and depth of the whole string.
+
+@item \D'c @var{d}'
+@cindex circle, drawing (@w{@code{\D'c @dots{}'}})
+@cindex drawing a circle (@w{@code{\D'c @dots{}'}})
+Draw a circle with a diameter of@tie{}@var{d} with the leftmost point at
+the current position.  After drawing, the current location is positioned
+at the rightmost point of the circle.
+
+@item \D'C @var{d}'
+@cindex circle, solid, drawing (@w{@code{\D'C @dots{}'}})
+@cindex drawing a solid circle (@w{@code{\D'C @dots{}'}})
+@cindex solid circle, drawing (@w{@code{\D'C @dots{}'}})
+Draw a solid circle with the same parameters and behaviour as an
+outlined circle.  No outline is drawn.
+
+@item \D'e @var{x} @var{y}'
+@cindex drawing an ellipse (@w{@code{\D'e @dots{}'}})
+@cindex ellipse, drawing (@w{@code{\D'e @dots{}'}})
+Draw an ellipse with a horizontal diameter of @var{x} and a vertical
+diameter of @var{y} with the leftmost point at the current position.
+After drawing, the current location is positioned at the rightmost point
+of the ellipse.
+
+@item \D'E @var{x} @var{y}'
+@cindex ellipse, solid, drawing (@w{@code{\D'E @dots{}'}})
+@cindex drawing a solid ellipse (@w{@code{\D'E @dots{}'}})
+@cindex solid ellipse, drawing (@w{@code{\D'E @dots{}'}})
+Draw a solid ellipse with the same parameters and behaviour as an
+outlined ellipse.  No outline is drawn.
+
+@item \D'a @var{dx1} @var{dy1} @var{dx2} @var{dy2}'
+@cindex arc, drawing (@w{@code{\D'a @dots{}'}})
+@cindex drawing an arc (@w{@code{\D'a @dots{}'}})
+Draw an arc clockwise from the current location through the two
+specified relative locations (@var{dx1},@var{dy1}) and
+(@var{dx2},@var{dy2}).  The coordinates of the first point are relative
+to the current position, and the coordinates of the second point are
+relative to the first point.  After drawing, the current position is
+moved to the final point of the arc.
+
+@item \D'~ @var{dx1} @var{dy1} @var{dx2} @var{dy2} @dots{}'
+@cindex drawing a spline (@w{@code{\D'~ @dots{}'}})
+@cindex spline, drawing (@w{@code{\D'~ @dots{}'}})
+Draw a spline from the current location to the relative point
+(@var{dx1},@var{dy1}) and then to (@var{dx2},@var{dy2}), and so on.  The
+current position is moved to the terminal point of the drawn curve.
+
+@item \D'f @var{n}'
+@cindex gray shading (@w{@code{\D'f @dots{}'}})
+@cindex shading filled objects (@w{@code{\D'f @dots{}'}})
+Set the shade of gray to be used for filling solid objects
+to@tie{}@var{n}; @var{n}@tie{}must be an integer between 0
+and@tie{}1000, where 0 corresponds solid white and 1000 to solid black,
+and values in between correspond to intermediate shades of gray.  This
+applies only to solid circles, solid ellipses, and solid polygons.  By
+default, a level of 1000 is used.
+
+Despite of being silly, the current point is moved horizontally to the
+right by@tie{}@var{n}.
+
+@cindex @w{@code{\D'f @dots{}'}} and horizontal resolution
+Don't use this command!  It has the serious drawback that it is always
+rounded to the next integer multiple of the horizontal resolution (the
+value of the @code{hor} keyword in the @file{DESC} file).  Use @code{\M}
+(@pxref{Colors}) or @w{@code{\D'Fg @dots{}'}} instead.
+
+@item \D'p @var{dx1} @var{dy1} @var{dx2} @var{dy2} @dots{}'
+@cindex drawing a polygon (@w{@code{\D'p @dots{}'}})
+@cindex polygon, drawing (@w{@code{\D'p @dots{}'}})
+Draw a polygon from the current location to the relative position
+(@var{dx1},@var{dy1}) and then to (@var{dx2},@var{dy2}) and so on.  When
+the specified data points are exhausted, a line is drawn back to the
+starting point.  The current position is changed by adding the sum of
+all arguments with odd index to the actual horizontal position and the
+even ones to the vertical position.
+
+@item \D'P @var{dx1} @var{dy1} @var{dx2} @var{dy2} @dots{}'
+@cindex polygon, solid, drawing (@w{@code{\D'P @dots{}'}})
+@cindex drawing a solid polygon (@w{@code{\D'P @dots{}'}})
+@cindex solid polygon, drawing (@w{@code{\D'P @dots{}'}})
+Draw a solid polygon with the same parameters and behaviour as an
+outlined polygon.  No outline is drawn.
+
+Here a better variant of the box macro to fill the box with some color.
+Note that the box must be drawn before the text since colors in
+@code{gtroff} are not transparent; the filled polygon would hide the
+text completely.
+
+@Example
+.de BOX
+.  nr @@wd \w'\\$1'
+\h'.2m'\
+\h'-.2m'\v'(.2m - \\n[rsb]u)'\
+\M[lightcyan]\
+\D'P 0 -(\\n[rst]u - \\n[rsb]u + .4m) \
+     (\\n[@@wd]u + .4m) 0 \
+     0 (\\n[rst]u - \\n[rsb]u + .4m) \
+     -(\\n[@@wd]u + .4m) 0'\
+\h'.2m'\v'-(.2m - \\n[rsb]u)'\
+\M[]\
+\\$1\
+\h'.2m'
+..
+@endExample
+
+If you want a filled polygon that has exactly the same size as an
+unfilled one, you must draw both an unfilled and a filled polygon.  A
+filled polygon is always smaller than an unfilled one because the latter
+uses straight lines with a given line thickness to connect the polygon's
+corners, while the former simply fills the area defined by the
+coordinates.
+
+@Example
+\h'1i'\v'1i'\
+\# increase line thickness
+\Z'\D't 5p''\
+\# draw unfilled polygon
+\Z'\D'p 3 3 -6 0''\
+\# draw filled polygon
+\Z'\D'P 3 3 -6 0''
+@endExample
+
+@item \D't @var{n}'
+@cindex line thickness (@w{@code{\D't @dots{}'}})
+@cindex thickness of lines (@w{@code{\D't @dots{}'}})
+Set the current line thickness to @var{n}@tie{}machine units.  A value
+of zero selects the smallest available line thickness.  A negative value
+makes the line thickness proportional to the current point size (this is
+the default behaviour of @acronym{AT&T} @code{troff}).
+
+Despite of being silly, the current point is moved horizontally to the
+right by@tie{}@var{n}.
+
+@item \D'F@var{scheme} @var{color_components}'
+@cindex unnamed fill colors (@code{\D'F@dots{}'})
+@cindex fill colors, unnamed (@code{\D'F@dots{}'})
+@cindex colors, fill, unnamed (@code{\D'F@dots{}'})
+Change current fill color.  @var{scheme} is a single letter denoting the
+color scheme: @samp{r} (rgb), @samp{c} (cmy), @samp{k} (cmyk), @samp{g}
+(gray), or @samp{d} (default color).  The color components use exactly
+the same syntax as in the @code{defcolor} request (@pxref{Colors}); the
+command @code{\D'Fd'} doesn't take an argument.
+
+@emph{No} position changing!
+
+Examples:
+
+@Example
+\D'Fg .3'      \" same gray as \D'f 700'
+\D'Fr #0000ff' \" blue
+@endExample
+@end table
+@endDefesc
+
+@xref{Graphics Commands}.
+
+@Defesc {\\b, ', string, '}
+@cindex pile, glyph (@code{\b})
+@cindex glyph pile (@code{\b})
+@cindex stacking glyphs (@code{\b})
+@dfn{Pile} a sequence of glyphs vertically, and center it vertically on
+the current line.  Use it to build large brackets and braces.
+
+Here an example how to create a large opening brace:
+
+@Example
+\b'\[lt]\[bv]\[lk]\[bv]\[lb]'
+@endExample
+
+@cindex @code{\b}, limitations
+@cindex limitations of @code{\b} escape
+The first glyph is on the top, the last glyph in @var{string} is at the
+bottom.  Note that @code{gtroff} separates the glyphs vertically by
+1@dmn{m}, and the whole object is centered 0.5@dmn{m} above the current
+baseline; the largest glyph width is used as the width for the whole
+object.  This rather unflexible positioning algorithm doesn't work with
+@option{-Tdvi} since the bracket pieces vary in height for this device.
+Instead, use the @code{eqn} preprocessor.
+
+@xref{Manipulating Spacing}, how to adjust the vertical spacing with the
+@code{\x} escape.
+@endDefesc
+
+
+@c =====================================================================
+
+@node Traps, Diversions, Drawing Requests, gtroff Reference
+@section Traps
+@cindex traps
+
+@dfn{Traps} are locations that, when reached, call a specified macro.
+These traps can occur at a given location on the page, at a given
+location in the current diversion, at a blank line, after a certain
+number of input lines, or at the end of input.
+
+@cindex planting a trap
+@cindex trap, planting
+Setting a trap is also called @dfn{planting}.
+@cindex trap, springing
+@cindex springing a trap
+It is also said that a trap is @dfn{sprung} if the associated macro is
+executed.
+
+@menu
+* Page Location Traps::
+* Diversion Traps::
+* Input Line Traps::
+* Blank Line Traps::
+* Leading Spaces Traps::
+* End-of-input Traps::
+@end menu
+
+@c ---------------------------------------------------------------------
+
+@node Page Location Traps, Diversion Traps, Traps, Traps
+@subsection Page Location Traps
+@cindex page location traps
+@cindex traps, page location
+
+@dfn{Page location traps} perform an action when @code{gtroff} reaches
+or passes a certain vertical location on the page.  Page location traps
+have a variety of purposes, including:
+
+@itemize
+@item
+setting headers and footers
+
+@item
+setting body text in multiple columns
+
+@item
+setting footnotes
+@end itemize
+
+@DefreqList {vpt, flag}
+@DefregListEndx {.vpt}
+@cindex enabling vertical position traps (@code{vpt})
+@cindex vertical position traps, enabling (@code{vpt})
+@cindex vertical position trap enable register (@code{.vpt})
+Enable vertical position traps if @var{flag} is non-zero, or disables
+them otherwise.  Vertical position traps are traps set by the @code{wh}
+or @code{dt} requests.  Traps set by the @code{it} request are not
+vertical position traps.  The parameter that controls whether vertical
+position traps are enabled is global.  Initially vertical position traps
+are enabled.  The current setting of this is available in the
+@code{.vpt} read-only number register.
+
+Note that a page can't be ejected if @code{vpt} is set to zero.
+@endDefreq
+
+@Defreq {wh, dist [@Var{macro}]}
+Set a page location trap.  Non-negative values for @var{dist} set the
+trap relative to the top of the page; negative values set the trap
+relative to the bottom of the page.  Default scaling indicator is
+@samp{v}; values of @var{dist} are always rounded to be multiples of the
+vertical resolution (as given in register @code{.V}).
+
+@var{macro} is the name of the macro to execute when the trap is sprung.
+If @var{macro} is missing, remove the first trap (if any) at @var{dist}.
+
+@cindex page headers
+@cindex page footers
+@cindex headers
+@cindex footers
+The following is a simple example of how many macro packages set headers
+and footers.
+
+@Example
+.de hd                \" Page header
+'  sp .5i
+.  tl 'Title''date'
+'  sp .3i
+..
+.
+.de fo                \" Page footer
+'  sp 1v
+.  tl ''%''
+'  bp
+..
+.
+.wh 0   hd            \" trap at top of the page
+.wh -1i fo            \" trap one inch from bottom
+@endExample
+
+A trap at or below the bottom of the page is ignored; it can be made
+active by either moving it up or increasing the page length so that the
+trap is on the page.
+
+Negative trap values always use the @emph{current} page length; they are
+not converted to an absolute vertical position:
+
+@Example
+.pl 5i
+.wh -1i xx
+.ptr
+    @result{} xx      -240
+.pl 100i
+.ptr
+    @result{} xx      -240
+@endExample
+
+It is possible to have more than one trap at the same location; to do
+so, the traps must be defined at different locations, then moved
+together with the @code{ch} request; otherwise the second trap would
+replace the first one.  Earlier defined traps hide later defined traps
+if moved to the same position (the many empty lines caused by the
+@code{bp} request are omitted in the following example):
+
+@Example
+.de a
+.  nop a
+..
+.de b
+.  nop b
+..
+.de c
+.  nop c
+..
+.
+.wh 1i a
+.wh 2i b
+.wh 3i c
+.bp
+    @result{} a b c
+@endExample
+@Example
+.ch b 1i
+.ch c 1i
+.bp
+    @result{} a
+@endExample
+@Example
+.ch a 0.5i
+.bp
+    @result{} a b
+@endExample
+@endDefreq
+
+@Defreg {.t}
+@cindex distance to next trap register (@code{.t})
+@cindex trap, distance, register (@code{.t})
+A read-only number register holding the distance to the next trap.
+
+If there are no traps between the current position and the bottom of the
+page, it contains the distance to the page bottom.  In a diversion, the
+distance to the page bottom is infinite (the returned value is the
+biggest integer that can be represented in @code{groff}) if there are
+no diversion traps.
+@endDefreg
+
+@Defreq {ch, macro [@Var{dist}]}
+@cindex changing trap location (@code{ch})
+@cindex trap, changing location (@code{ch})
+Change the location of a trap.  The first argument is the name of the
+macro to be invoked at the trap, and the second argument is the new
+location for the trap (note that the parameters are specified in
+opposite order as in the @code{wh} request).  This is useful for
+building up footnotes in a diversion to allow more space at the bottom
+of the page for them.
+
+Default scaling indicator for @var{dist} is @samp{v}.  If @var{dist} is
+missing, the trap is removed.
+
+@c XXX
+
+@ignore
+@Example
+... (simplified) footnote example ...
+@endExample
+@end ignore
+@endDefreq
+
+@Defreg {.ne}
+The read-only number register @code{.ne} contains the amount of space
+that was needed in the last @code{ne} request that caused a trap to be
+sprung.  Useful in conjunction with the @code{.trunc} register.
+@xref{Page Control}, for more information.
+
+Since the @code{.ne} register is only set by traps it doesn't make much
+sense to use it outside of trap macros.
+@endDefreg
+
+@Defreg {.trunc}
+@cindex @code{ne} request, and the @code{.trunc} register
+@cindex truncated vertical space register (@code{.trunc})
+A read-only register containing the amount of vertical space truncated
+by the most recently sprung vertical position trap, or, if the trap was
+sprung by an @code{ne} request, minus the amount of vertical motion
+produced by the @code{ne} request.  In other words, at the point a trap
+is sprung, it represents the difference of what the vertical position
+would have been but for the trap, and what the vertical position
+actually is.
+
+Since the @code{.trunc} register is only set by traps it doesn't make
+much sense to use it outside of trap macros.
+@endDefreg
+
+@Defreg {.pe}
+@cindex @code{bp} request, and traps (@code{.pe})
+@cindex traps, sprung by @code{bp} request (@code{.pe})
+@cindex page ejecting register (@code{.pe})
+A read-only register that is set to@tie{}1 while a page is ejected with
+the @code{bp} request (or by the end of input).
+
+Outside of traps this register is always zero.  In the following
+example, only the second call to@tie{}@code{x} is caused by @code{bp}.
+
+@Example
+.de x
+\&.pe=\\n[.pe]
+.br
+..
+.wh 1v x
+.wh 4v x
+A line.
+.br
+Another line.
+.br
+    @result{} A line.
+       .pe=0
+       Another line.
+
+       .pe=1
+@endExample
+@endDefreg
+
+@cindex diversions, and traps
+@cindex traps, and diversions
+An important fact to consider while designing macros is that diversions
+and traps do not interact normally.  For example, if a trap invokes a
+header macro (while outputting a diversion) that tries to change the
+font on the current page, the effect is not visible before the diversion
+has completely been printed (except for input protected with @code{\!}
+or @code{\?}) since the data in the diversion is already formatted.  In
+most cases, this is not the expected behaviour.
+
+@c ---------------------------------------------------------------------
+
+@node Diversion Traps, Input Line Traps, Page Location Traps, Traps
+@subsection Diversion Traps
+@cindex diversion traps
+@cindex traps, diversion
+
+@Defreq {dt, [@Var{dist} @Var{macro}]}
+@cindex @code{.t} register, and diversions
+@cindex setting diversion trap (@code{dt})
+@cindex diversion trap, setting (@code{dt})
+@cindex trap, diversion, setting (@code{dt})
+Set a trap @emph{within} a diversion.  @var{dist} is the location of the
+trap (identical to the @code{wh} request; default scaling indicator is
+@samp{v}) and @var{macro} is the name of the macro to be invoked.  If
+called without arguments, the diversion trap is removed.
+
+Note that there exists only a single diversion trap.
+
+The number register @code{.t} still works within diversions.
+@xref{Diversions}, for more information.
+@endDefreq
+
+@c ---------------------------------------------------------------------
+
+@node Input Line Traps, Blank Line Traps, Diversion Traps, Traps
+@subsection Input Line Traps
+@cindex input line traps
+@cindex traps, input line
+
+@DefreqList {it, n macro}
+@DefreqListEndx {itc, n macro}
+@cindex setting input line trap (@code{it})
+@cindex input line trap, setting (@code{it})
+@cindex trap, input line, setting (@code{it})
+Set an input line trap.  @var{n}@tie{}is the number of lines of input
+that may be read before springing the trap, @var{macro} is the macro to
+be invoked.  Request lines are not counted as input lines.
+
+For example, one possible use is to have a macro that prints the next
+@var{n}@tie{}lines in a bold font.
+
+@Example
+.de B
+.  it \\$1 B-end
+.  ft B
+..
+.
+.de B-end
+.  ft R
+..
+@endExample
+
+@cindex input line traps and interrupted lines (@code{itc})
+@cindex interrupted lines and input line traps (@code{itc})
+@cindex traps, input line, and interrupted lines (@code{itc})
+@cindex lines, interrupted, and input line traps (@code{itc})
+The @code{itc} request is identical except that an interrupted text line
+(ending with @code{\c}) is not counted as a separate line.
+
+Both requests are associated with the current environment
+(@pxref{Environments}); switching to another environment disables the
+current input trap, and going back reactivates it, restoring the number
+of already processed lines.
+@endDefreq
+
+@c ---------------------------------------------------------------------
+
+@node Blank Line Traps, Leading Spaces Traps, Input Line Traps, Traps
+@subsection Blank Line Traps
+@cindex blank line traps
+@cindex traps, blank line
+
+@Defreq {blm, macro}
+@cindex blank line macro (@code{blm})
+Set a blank line trap.  @code{gtroff} executes @var{macro} when it
+encounters a blank line in the input file.
+@endDefreq
+
+@c ---------------------------------------------------------------------
+
+@node Leading Spaces Traps, End-of-input Traps, Blank Line Traps, Traps
+@subsection Leading Spaces Traps
+@cindex leading spaces traps
+@cindex traps, leading spaces
+
+@DefreqList {lsm, macro}
+@DefregItemx {lsn}
+@DefregListEndx {lss}
+@cindex leading spaces macro (@code{lsm})
+Set a leading spaces trap.  @code{gtroff} executes @var{macro} when it
+encounters leading spaces in an input line; the implicit line break
+that normally happens in this case is suppressed.  A line consisting
+of spaces only, however, is treated as an empty line, possibly subject
+to an empty line macro set with the @code{blm} request.
+
+Leading spaces are removed from the input line before calling the
+leading spaces macro.  The number of removed spaces is stored in
+register @code{lsn}; the horizontal space that would be emitted if
+there was no leading space macro is stored in register @code{lss}.
+Note that @code{lsn} and @code{lss} are available even if no leading
+space macro has been set.
+
+The first thing a leading space macro sees is a token.  However, some
+escapes like @code{\f} or @code{\m} are handled on the fly (see
+@ref{Gtroff Internals}, for a complete list) without creating a token
+at all.  Consider that a line starts with two spaces followed by
+@code{\fIfoo}.  While skipping the spaces @code{\fI} is handled too so
+that groff's current font is properly set to @samp{I}, but the leading
+space macro only sees @code{foo}, without the preceding @code{\fI}.
+If the macro should see the font escape you have to `protect' it with
+something that creates a token, for example with @code{\&\fIfoo}.
+@endDefreq
+
+@c ---------------------------------------------------------------------
+
+@node End-of-input Traps,  , Leading Spaces Traps, Traps
+@subsection End-of-input Traps
+@cindex end-of-input traps
+@cindex traps, end-of-input
+
+@Defreq {em, macro}
+@cindex setting end-of-input trap (@code{em})
+@cindex end-of-input trap, setting (@code{em})
+@cindex trap, end-of-input, setting (@code{em})
+@cindex end-of-input macro (@code{em})
+@cindex macro, end-of-input (@code{em})
+Set a trap at the end of input.  @var{macro} is executed after the last
+line of the input file has been processed.
+
+For example, if the document had to have a section at the bottom of the
+last page for someone to approve it, the @code{em} request could be
+used.
+
+@Example
+.de approval
+\c
+.  ne 3v
+.  sp (\\n[.t]u - 3v)
+.  in +4i
+.  lc _
+.  br
+Approved:\t\a
+.  sp
+Date:\t\t\a
+..
+.
+.em approval
+@endExample
+
+The @code{\c} in the above example needs explanation.  For historical
+reasons (and for compatibility with @acronym{AT&T} @code{troff}), the
+end macro exits as soon as it causes a page break and no remaining
+data is in the partially collected line.
+
+Let us assume that there is no @code{\c} in the above @code{approval}
+macro, and that the page is full and has been ended with, say, a
+@code{br} request.  The @code{ne} request now causes the start of a new
+page, which in turn makes @code{troff} exit immediately for the reasons
+just described.  In most situations this is not intended.
+
+To always force processing the whole end macro independently of this
+behaviour it is thus advisable to insert something that starts an
+empty partially filled line (@code{\c}) whenever there is a chance that
+a page break can happen.  In the above example, the call of the
+@code{ne} request assures that the remaining code stays on the same
+page, so we have to insert @code{\c} only once.
+
+The next example shows how to append three lines, then starting a new
+page unconditionally.  Since @w{@samp{.ne 1}} doesn't give the desired
+effect -- there is always one line available or we are already at the
+beginning of the next page -- we temporarily increase the page length
+by one line so that we can use @w{@samp{.ne 2}}.
+
+@Example
+.de EM
+.pl +1v
+\c
+.ne 2
+line one
+.br
+\c
+.ne 2
+line two
+.br
+\c
+.ne 2
+line three
+.br
+.pl -1v
+\c
+'bp
+..
+.em EM
+@endExample
+
+Note that this specific feature affects only the first potential page
+break caused by the end macro; further page breaks emitted by the end
+macro are handled normally.
+
+Another possible use of the @code{em} request is to make @code{gtroff}
+emit a single large page instead of multiple pages.  For example, one
+may want to produce a long plain-text file for reading on-screen.  The
+idea is to set the page length at the beginning of the document to a
+very large value to hold all the text, and automatically adjust it to
+the exact height of the document after the text has been output.
+
+@Example
+.de adjust-page-length
+.  br
+.  pl \\n[nl]u   \" \n[nl] holds the current page length
+..
+.
+.de single-page-mode
+.  pl 99999
+.  em adjust-page-length
+..
+.
+.\" activate the above code
+.single-page-mode
+@endExample
+
+Since only one end-of-input trap does exist and other macro packages
+may already use it, care must be taken not to break the mechanism.  A
+simple solution would be to append the above macro to the macro
+package's end-of-input macro using the @code{.am} request.
+@endDefreq
+
+
+@c =====================================================================
+
+@node Diversions, Environments, Traps, gtroff Reference
+@section Diversions
+@cindex diversions
+
+In @code{gtroff} it is possible to @dfn{divert} text into a named
+storage area.  Due to the similarity to defining macros it is sometimes
+said to be stored in a macro.  This is used for saving text for output
+at a later time, which is useful for keeping blocks of text on the same
+page, footnotes, tables of contents, and indices.
+
+@cindex top-level diversion
+@cindex diversion, top-level
+For orthogonality it is said that @code{gtroff} is in the @dfn{top-level
+diversion} if no diversion is active (i.e., the data is diverted to the
+output device).
+
+Although the following requests can be used to create diversions,
+simply using an undefined diversion will cause it to be defined as empty.
+@xref{Identifiers}.
+
+@DefreqList {di, macro}
+@DefreqListEndx {da, macro}
+@cindex beginning diversion (@code{di})
+@cindex diversion, beginning (@code{di})
+@cindex ending diversion (@code{di})
+@cindex diversion, ending (@code{di})
+@cindex appending to a diversion (@code{da})
+@cindex diversion, appending (@code{da})
+Begin a diversion.  Like the @code{de} request, it takes an argument of
+a macro name to divert subsequent text into.  The @code{da} macro
+appends to an existing diversion.
+
+@code{di} or @code{da} without an argument ends the diversion.
+
+The current partially-filled line is included into the diversion.  See
+the @code{box} request below for an example.  Note that switching to
+another (empty) environment (with the @code{ev} request) avoids the
+inclusion of the current partially-filled line.
+@endDefreq
+
+@DefreqList {box, macro}
+@DefreqListEndx {boxa, macro}
+Begin (or append to) a diversion like the @code{di} and @code{da}
+requests.  The difference is that @code{box} and @code{boxa} do not
+include a partially-filled line in the diversion.
+
+Compare this:
+
+@Example
+Before the box.
+.box xxx
+In the box.
+.br
+.box
+After the box.
+.br
+    @result{} Before the box.  After the box.
+.xxx
+    @result{} In the box.
+@endExample
+
+@noindent
+with this:
+
+@Example
+Before the diversion.
+.di yyy
+In the diversion.
+.br
+.di
+After the diversion.
+.br
+    @result{} After the diversion.
+.yyy
+    @result{} Before the diversion.  In the diversion.
+@endExample
+
+@code{box} or @code{boxa} without an argument ends the diversion.
+@endDefreq
+
+@DefregList {.z}
+@DefregListEndx {.d}
+@cindex @code{nl} register, and @code{.d}
+@cindex nested diversions
+@cindex diversion, nested
+@cindex diversion name register (@code{.z})
+@cindex vertical position in diversion register (@code{.d})
+@cindex position, vertical, in diversion, register (@code{.d})
+@cindex diversion, vertical position in, register (@code{.d})
+Diversions may be nested.  The read-only number register @code{.z}
+contains the name of the current diversion (this is a string-valued
+register).  The read-only number register @code{.d} contains the current
+vertical place in the diversion.  If not in a diversion it is the same
+as register @code{nl}.
+@endDefreg
+
+@Defreg {.h}
+@cindex high-water mark register (@code{.h})
+@cindex mark, high-water, register (@code{.h})
+@cindex position of lowest text line (@code{.h})
+@cindex text line, position of lowest (@code{.h})
+The @dfn{high-water mark} on the current page.  It corresponds to the
+text baseline of the lowest line on the page.  This is a read-only
+register.
+
+@Example
+.tm .h==\n[.h], nl==\n[nl]
+    @result{} .h==0, nl==-1
+This is a test.
+.br
+.sp 2
+.tm .h==\n[.h], nl==\n[nl]
+    @result{} .h==40, nl==120
+@endExample
+
+@cindex @code{.h} register, difference to @code{nl}
+@cindex @code{nl} register, difference to @code{.h}
+@noindent
+As can be seen in the previous example, empty lines are not considered
+in the return value of the @code{.h} register.
+@endDefreg
+
+@DefregList {dn}
+@DefregListEndx {dl}
+@cindex @code{dn} register, and @code{da} (@code{boxa})
+@cindex @code{dl} register, and @code{da} (@code{boxa})
+@cindex @code{da} request, and @code{dn} (@code{dl})
+@cindex @code{boxa} request, and @code{dn} (@code{dl})
+After completing a diversion, the read-write number registers @code{dn}
+and @code{dl} contain the vertical and horizontal size of the diversion.
+Note that only the just processed lines are counted: For the computation
+of @code{dn} and @code{dl}, the requests @code{da} and @code{boxa} are
+handled as if @code{di} and @code{box} had been used -- lines that have
+been already stored in a macro are not taken into account.
+
+@Example
+.\" Center text both horizontally & vertically
+.
+.\" Enclose macro definitions in .eo and .ec
+.\" to avoid the doubling of the backslash
+.eo
+.\" macro .(c starts centering mode
+.de (c
+.  br
+.  ev (c
+.  evc 0
+.  in 0
+.  nf
+.  di @@c
+..
+@endExample
+@Example
+.\" macro .)c terminates centering mode
+.de )c
+.  br
+.  ev
+.  di
+.  nr @@s (((\n[.t]u - \n[dn]u) / 2u) - 1v)
+.  sp \n[@@s]u
+.  ce 1000
+.  @@c
+.  ce 0
+.  sp \n[@@s]u
+.  br
+.  fi
+.  rr @@s
+.  rm @@s
+.  rm @@c
+..
+.\" End of macro definitions, restore escape mechanism
+.ec
+@endExample
+@endDefreg
+
+@DefescList {\\!, , , }
+@DefescListEndx {\\?, , anything, \\?}
+@cindex transparent output (@code{\!}, @code{\?})
+@cindex output, transparent (@code{\!}, @code{\?})
+Prevent requests, macros, and escapes from being interpreted when read
+into a diversion.  Both escapes take the given text and
+@dfn{transparently} embed it into the diversion.  This is useful for
+macros that shouldn't be invoked until the diverted text is actually
+output.
+
+The @code{\!} escape transparently embeds text up to and including the
+end of the line.  The @code{\?} escape transparently embeds text until
+the next occurrence of the @code{\?} escape.  Example:
+
+@Example
+\?@var{anything}\?
+@endExample
+
+@cindex @code{\?}, and copy-in mode
+@cindex copy-in mode, and @code{\?}
+@cindex mode, copy-in, and @code{\?}
+@cindex @code{\!}, and copy-in mode
+@cindex copy-in mode, and @code{\!}
+@cindex mode, copy-in, and @code{\!}
+@noindent
+@var{anything} may not contain newlines; use @code{\!}  to embed
+newlines in a diversion.  The escape sequence @code{\?} is also
+recognized in copy mode and turned into a single internal code; it is
+this code that terminates @var{anything}.  Thus the following example
+prints@tie{}4.
+
+@Example
+.nr x 1
+.nf
+.di d
+\?\\?\\\\?\\\\\\\\nx\\\\?\\?\?
+.di
+.nr x 2
+.di e
+.d
+.di
+.nr x 3
+.di f
+.e
+.di
+.nr x 4
+.f
+@endExample
+
+Both escapes read the data in copy mode.
+
+@cindex @code{\!}, in top-level diversion
+@cindex top-level diversion, and @code{\!}
+@cindex diversion, top-level, and @code{\!}
+If @code{\!} is used in the top-level diversion, its argument is
+directly embedded into the @code{gtroff} intermediate output.  This can
+be used for example to control a postprocessor that processes the data
+before it is sent to the device driver.
+
+@cindex @code{\?}, in top-level diversion
+@cindex top-level diversion, and @code{\?}
+@cindex diversion, top-level, and @code{\?}
+The @code{\?} escape used in the top-level diversion produces no output
+at all; its argument is simply ignored.
+@endDefesc
+
+@cindex @code{\!}, and @code{output} request
+@cindex @code{output} request, and @code{\!}
+@cindex @code{output} request, and copy-in mode
+@cindex copy-in mode, and @code{output} request
+@cindex mode, copy-in, and @code{output} request
+@Defreq {output, string}
+Emit @var{string} directly to the @code{gtroff} intermediate output
+(subject to copy mode interpretation); this is similar to @code{\!} used
+at the top level.  An initial double quote in @var{string} is stripped
+off to allow initial blanks.
+
+This request can't be used before the first page has started -- if you
+get an error, simply insert @code{.br} before the @code{output} request.
+
+Without argument, @code{output} is ignored.
+
+Use with caution!  It is normally only needed for mark-up used by a
+postprocessor that does something with the output before sending it to
+the output device, filtering out @var{string} again.
+@endDefreq
+
+@Defreq {asciify, div}
+@cindex unformatting diversions (@code{asciify})
+@cindex diversion, unformatting (@code{asciify})
+@cindex @code{trin} request, and @code{asciify}
+@dfn{Unformat} the diversion specified by @var{div} in such a way that
+@acronym{ASCII} characters, characters translated with the @code{trin}
+request, space characters, and some escape sequences that were formatted
+and diverted are treated like ordinary input characters when the
+diversion is reread.  It can be also used for gross hacks; for example,
+the following sets register@tie{}@code{n} to@tie{}1.
+
+@Example
+.tr @@.
+.di x
+@@nr n 1
+.br
+.di
+.tr @@@@
+.asciify x
+.x
+@endExample
+
+Note that @code{asciify} cannot return all items in a diversion back
+to their source equivalent, nodes such as @code{\N[...]} will still
+remain as nodes, so the result cannot be guaranteed to be a pure string.
+
+@xref{Copy-in Mode}.
+@endDefreq
+
+@Defreq {unformat, div}
+Like @code{asciify}, unformat the specified diversion.  However,
+@code{unformat} only unformats spaces and tabs between words.
+Unformatted tabs are treated as input tokens, and spaces are stretchable
+again.
+
+The vertical size of lines is not preserved; glyph information (font,
+font size, space width, etc.)@: is retained.
+@endDefreq
+
+
+@c =====================================================================
+
+@node Environments, Suppressing output, Diversions, gtroff Reference
+@section Environments
+@cindex environments
+
+It happens frequently that some text should be printed in a certain
+format regardless of what may be in effect at the time, for example, in
+a trap invoked macro to print headers and footers.  To solve this
+@code{gtroff} processes text in @dfn{environments}.  An environment
+contains most of the parameters that control text processing.  It is
+possible to switch amongst these environments; by default @code{gtroff}
+processes text in environment@tie{}0.  The following is the information
+kept in an environment.
+
+@itemize @bullet
+@item
+font parameters (size, family, style, glyph height and slant, space and
+sentence space size)
+
+@item
+page parameters (line length, title length, vertical spacing, line
+spacing, indentation, line numbering, centering, right-justifying,
+underlining, hyphenation data)
+
+@item
+fill and adjust mode
+
+@item
+tab stops, tab and leader characters, escape character, no-break and
+hyphen indicators, margin character data
+
+@item
+partially collected lines
+
+@item
+input traps
+
+@item
+drawing and fill colours
+@end itemize
+
+These environments may be given arbitrary names (see @ref{Identifiers},
+for more info).  Old versions of @code{troff} only had environments
+named @samp{0}, @samp{1}, and @samp{2}.
+
+@DefreqList {ev, [@Var{env}]}
+@DefregListEndx {.ev}
+@cindex switching environments (@code{ev})
+@cindex environment, switching (@code{ev})
+@cindex environment number/name register (@code{.ev})
+Switch to another environment.  The argument @var{env} is the name of
+the environment to switch to.  With no argument, @code{gtroff} switches
+back to the previous environment.  There is no limit on the number of
+named environments; they are created the first time that they are
+referenced.  The @code{.ev} read-only register contains the name or
+number of the current environment.  This is a string-valued register.
+
+Note that a call to @code{ev} (with argument) pushes the previously
+active environment onto a stack.  If, say, environments @samp{foo},
+@samp{bar}, and @samp{zap} are called (in that order), the first
+@code{ev} request without parameter switches back to environment
+@samp{bar} (which is popped off the stack), and a second call switches
+back to environment @samp{foo}.
+
+Here is an example:
+
+@Example
+.ev footnote-env
+.fam N
+.ps 6
+.vs 8
+.ll -.5i
+.ev
+
+...
+
+.ev footnote-env
+\(dg Note the large, friendly letters.
+.ev
+@endExample
+@endDefreq
+
+@Defreq {evc, env}
+@cindex copying environment (@code{evc})
+@cindex environment, copying (@code{evc})
+Copy the environment @var{env} into the current environment.
+
+The following environment data is not copied:
+
+@itemize @bullet
+@item
+Partially filled lines.
+
+@item
+The status whether the previous line was interrupted.
+
+@item
+The number of lines still to center, or to right-justify, or to
+underline (with or without underlined spaces); they are set to zero.
+
+@item
+The status whether a temporary indentation is active.
+
+@item
+Input traps and its associated data.
+
+@item
+Line numbering mode is disabled; it can be reactivated with @w{@samp{.nm
++0}}.
+
+@item
+The number of consecutive hyphenated lines (set to zero).
+@end itemize
+@endDefreq
+
+@DefregList {.w}
+@DefregItemx {.cht}
+@DefregItemx {.cdp}
+@DefregListEndx {.csk}
+@cindex environment, dimensions of last glyph (@code{.w}, @code{.cht}, @code{.cdp}, @code{.csk})
+@cindex width, of last glyph (@code{.w})
+@cindex height, of last glyph (@code{.cht})
+@cindex depth, of last glyph (@code{.cdp})
+@cindex skew, of last glyph (@code{.csk})
+@cindex last glyph, dimensions (@code{.w}, @code{.cht}, @code{.cdp}, @code{.csk})
+@cindex glyph, last, dimensions (@code{.w}, @code{.cht}, @code{.cdp}, @code{.csk})
+The @code{\n[.w]} register contains the width of the last glyph added to
+the current environment.
+
+The @code{\n[.cht]} register contains the height of the last glyph added
+to the current environment.
+
+The @code{\n[.cdp]} register contains the depth of the last glyph added
+to the current environment.  It is positive for glyphs extending below
+the baseline.
+
+The @code{\n[.csk]} register contains the @dfn{skew} (how far to the
+right of the glyph's center that @code{gtroff} should place an accent)
+of the last glyph added to the current environment.
+@endDefreg
+
+@Defreg {.n}
+@cindex environment, previous line length (@code{.n})
+@cindex line length, previous (@code{.n})
+@cindex length of previous line (@code{.n})
+@cindex previous line length (@code{.n})
+The @code{\n[.n]} register contains the length of the previous output
+line in the current environment.
+@endDefreg
+
+
+@c =====================================================================
+
+@node Suppressing output, Colors, Environments, gtroff Reference
+@section Suppressing output
+
+@Defesc {\\O, , num, }
+@cindex suppressing output (@code{\O})
+@cindex output, suppressing (@code{\O})
+Disable or enable output depending on the value of @var{num}:
+
+@table @samp
+@item \O0
+Disable any glyphs from being emitted to the device driver, provided
+that the escape occurs at the outer level (see @code{\O[3]} and
+@code{\O[4]}).  Motion is not suppressed so effectively @code{\O[0]}
+means @emph{pen up}.
+
+@item \O1
+Enable output of glyphs, provided that the escape occurs at the outer
+level.
+@end table
+
+@vindex opminx
+@vindex opminy
+@vindex opmaxx
+@vindex opmaxy
+@code{\O0} and @code{\O1} also reset the four registers @samp{opminx},
+@samp{opminy}, @samp{opmaxx}, and @samp{opmaxy} to @minus{}1.
+@xref{Register Index}.  These four registers mark the top left and
+bottom right hand corners of a box that encompasses all written glyphs.
+
+For example the input text:
+
+@Example
+Hello \O[0]world \O[1]this is a test.
+@endExample
+
+@noindent
+produces the following output:
+
+@Example
+Hello       this is a test.
+@endExample
+
+@table @samp
+@item \O2
+Provided that the escape occurs at the outer level, enable output of
+glyphs and also write out to @code{stderr} the page number and four
+registers encompassing the glyphs previously written since the last call
+to @code{\O}.
+
+@item \O3
+Begin a nesting level.  At start-up, @code{gtroff} is at outer level.
+The current level is contained within the read-only register @code{.O}.
+@xref{Built-in Registers}.
+
+@item \O4
+End a nesting level.  The current level is contained within the
+read-only register @code{.O}.  @xref{Built-in Registers}.
+
+@item \O[5@var{P}@var{filename}]
+This escape is @code{grohtml} specific.  Provided that this escape
+occurs at the outer nesting level write the @code{filename} to
+@code{stderr}.  The position of the image, @var{P}, must be specified
+and must be one of @code{l}, @code{r}, @code{c}, or@tie{}@code{i} (left,
+right, centered, inline).  @var{filename} is associated with the
+production of the next inline image.
+@end table
+@endDefesc
+
+
+@c =====================================================================
+
+@node Colors, I/O, Suppressing output, gtroff Reference
+@section Colors
+@cindex colors
+
+@DefreqList {color, [@Var{n}]}
+@DefregListEndx {.color}
+If @var{n} is missing or non-zero, activate colors (this is the
+default); otherwise, turn it off.
+
+The read-only number register @code{.color} is@tie{}1 if colors are
+active, 0@tie{}otherwise.
+
+Internally, @code{color} sets a global flag; it does not produce a
+token.  Similar to the @code{cp} request, you should use it at the
+beginning of your document to control color output.
+
+Colors can be also turned off with the @option{-c} command line option.
+@endDefreq
+
+@Defreq {defcolor, ident scheme color_components}
+Define color with name @var{ident}.  @var{scheme} can be one of the
+following values: @code{rgb} (three components), @code{cmy} (three
+components), @code{cmyk} (four components), and @code{gray} or
+@code{grey} (one component).
+
+@cindex default color
+@cindex color, default
+Color components can be given either as a hexadecimal string or as
+positive decimal integers in the range 0--65535.  A hexadecimal string
+contains all color components concatenated.  It must start with either
+@code{#} or @code{##}; the former specifies hex values in the range
+0--255 (which are internally multiplied by@tie{}257), the latter in the
+range 0--65535.  Examples: @code{#FFC0CB} (pink), @code{##ffff0000ffff}
+(magenta).  The default color name @c{default} can't be redefined; its
+value is device-specific (usually black).  It is possible that the
+default color for @code{\m} and @code{\M} is not identical.
+
+@cindex @code{f} unit, and colors
+@cindex unit, @code{f}, and colors
+A new scaling indicator@tie{}@code{f} has been introduced, which
+multiplies its value by 65536; this makes it convenient to specify color
+components as fractions in the range 0 to@tie{}1 (1f equals 65536u).
+Example:
+
+@Example
+.defcolor darkgreen rgb 0.1f 0.5f 0.2f
+@endExample
+
+Note that @code{f} is the default scaling indicator for the
+@code{defcolor} request, thus the above statement is equivalent to
+
+@Example
+.defcolor darkgreen rgb 0.1 0.5 0.2
+@endExample
+@endDefreq
+
+@DefreqList {gcolor, [@Var{color}]}
+@DefescItemx {\\m, , c, }
+@DefescItem {\\m, @Lparen{}, co, }
+@DefescItem {\\m, @Lbrack{}, color, @Rbrack{}}
+@DefregListEndx {.m}
+Set (glyph) drawing color.  The following examples show how to turn the
+next four words red.
+
+@Example
+.gcolor red
+these are in red
+.gcolor
+and these words are in black.
+@endExample
+
+@Example
+\m[red]these are in red\m[] and these words are in black.
+@endExample
+
+The escape @code{\m[]} returns to the previous color, as does a call to
+@code{gcolor} without an argument.
+
+@cindex drawing color name register (@code{.m})
+@cindex name, drawing color, register (@code{.m})
+@cindex color name, drawing, register (@code{.m})
+The name of the current drawing color is available in the read-only,
+string-valued number register @samp{.m}.
+
+The drawing color is associated with the current environment
+(@pxref{Environments}).
+
+Note that @code{\m} doesn't produce an input token in @code{gtroff}.  As
+a consequence, it can be used in requests like @code{mc} (which expects
+a single character as an argument) to change the color on the fly:
+
+@Example
+.mc \m[red]x\m[]
+@endExample
+@endDefesc
+
+@DefreqList {fcolor, [@Var{color}]}
+@DefescItemx {\\M, , c, }
+@DefescItem {\\M, @Lparen{}, co, }
+@DefescItem {\\M, @Lbrack{}, color, @Rbrack{}}
+@DefregListEndx {.M}
+Set fill (background) color for filled objects drawn with the
+@code{\D'@dots{}'} commands.
+
+A red ellipse can be created with the following code:
+
+@Example
+\M[red]\h'0.5i'\D'E 2i 1i'\M[]
+@endExample
+
+The escape @code{\M[]} returns to the previous fill color, as does a
+call to @code{fcolor} without an argument.
+
+@cindex background color name register (@code{.M})
+@cindex name, background color, register (@code{.M})
+@cindex color name, background, register (@code{.M})
+@cindex fill color name register (@code{.M})
+@cindex name, fill color, register (@code{.M})
+@cindex color name, fill, register (@code{.M})
+The name of the current fill (background) color is available in the
+read-only, string-valued number register @samp{.M}.
+
+The fill color is associated with the current environment
+(@pxref{Environments}).
+
+Note that @code{\M} doesn't produce an input token in @code{gtroff}.
+@endDefesc
+
+
+@c =====================================================================
+
+@node I/O, Postprocessor Access, Colors, gtroff Reference
+@section I/O
+@cindex i/o
+@cindex input and output requests
+@cindex requests for input and output
+@cindex output and input requests
+
+@code{gtroff} has several requests for including files:
+
+@Defreq {so, file}
+@cindex including a file (@code{so})
+@cindex file, inclusion (@code{so})
+Read in the specified @var{file} and includes it in place of the
+@code{so} request.  This is quite useful for large documents, e.g.@:
+keeping each chapter in a separate file.  @xref{gsoelim}, for more
+information.
+
+Since @code{gtroff} replaces the @code{so} request with the contents of
+@code{file}, it makes a difference whether the data is terminated with a
+newline or not: Assuming that file @file{xxx} contains the word
+@samp{foo} without a final newline, this
+
+@Example
+This is
+.so xxx
+bar
+@endExample
+
+@noindent
+yields @samp{This is foobar}.
+
+The search path for @var{file} can be controlled with the @option{-I}
+command line option.
+@endDefreq
+
+@Defreq {pso, command}
+Read the standard output from the specified @var{command} and includes
+it in place of the @code{pso} request.
+
+@cindex safer mode
+@cindex mode, safer
+@cindex unsafe mode
+@cindex mode, unsafe
+This request causes an error if used in safer mode (which is the
+default).  Use @code{groff}'s or @code{troff}'s @option{-U} option to
+activate unsafe mode.
+
+The comment regarding a final newline for the @code{so} request is valid
+for @code{pso} also.
+@endDefreq
+
+@Defreq {mso, file}
+Identical to the @code{so} request except that @code{gtroff} searches
+for the specified @var{file} in the same directories as macro files for
+the the @option{-m} command line option.  If the file name to be
+included has the form @file{@var{name}.tmac} and it isn't found,
+@code{mso} tries to include @file{tmac.@var{name}} and vice versa.
+If the file does not exist, a warning of type @samp{file} is emitted.
+@xref{Debugging}, for information about warnings.
+@endDefreq
+
+@DefreqList {trf, file}
+@DefreqListEndx {cf, file}
+@cindex transparent output (@code{cf}, @code{trf})
+@cindex output, transparent (@code{cf}, @code{trf})
+@cindex @code{cf} request, and copy-in mode
+@cindex copy-in mode, and @code{cf} request
+@cindex mode, copy-in, and @code{cf} request
+@cindex @code{trf} request, and copy-in mode
+@cindex copy-in mode, and @code{trf} request
+@cindex mode, copy-in, and @code{trf} request
+Transparently output the contents of @var{file}.  Each line is output as
+if it were preceded by @code{\!}; however, the lines are @emph{not}
+subject to copy mode interpretation.  If the file does not end with a
+newline, then a newline is added (@code{trf} only).  For example, to
+define a macro@tie{}@code{x} containing the contents of
+file@tie{}@file{f}, use
+
+@Example
+.ev 1
+.di x
+.trf f
+.di
+.ev
+@endExample
+
+@noindent
+The calls to @code{ev} prevent that the current partial input line
+becomes part of the diversion.
+
+Both @code{trf} and @code{cf}, when used in a diversion, embeds an
+object in the diversion which, when reread, causes the contents of
+@var{file} to be transparently copied through to the output.  In
+@acronym{UNIX} @code{troff}, the contents of @var{file} is immediately
+copied through to the output regardless of whether there is a current
+diversion; this behaviour is so anomalous that it must be considered a
+bug.
+
+@cindex @code{trf} request, and invalid characters
+@cindex characters, invalid for @code{trf} request
+@cindex invalid characters for @code{trf} request
+
+While @code{cf} copies the contents of @var{file} completely
+unprocessed, @code{trf} disallows characters such as NUL that are not
+valid @code{gtroff} input characters (@pxref{Identifiers}).
+
+For @code{cf}, within a diversion, `completely unprocessed' means that
+each line of a file to be inserted is handled as if it were preceded by
+@code{\!\\!}.
+
+Both requests cause a line break.
+@endDefreq
+
+@Defreq {nx, [@Var{file}]}
+@cindex processing next file (@code{nx})
+@cindex file, processing next (@code{nx})
+@cindex next file, processing (@code{nx})
+Force @code{gtroff} to continue processing of the file specified as an
+argument.  If no argument is given, immediately jump to the end of file.
+@endDefreq
+
+@Defreq {rd, [@Var{prompt} [@Var{arg1} @Var{arg2} @dots{}]]}
+@cindex reading from standard input (@code{rd})
+@cindex standard input, reading from (@code{rd})
+@cindex input, standard, reading from (@code{rd})
+Read from standard input, and include what is read as though it were
+part of the input file.  Text is read until a blank line is encountered.
+
+If standard input is a TTY input device (keyboard), write @var{prompt}
+to standard error, followed by a colon (or send BEL for a beep if no
+argument is given).
+
+Arguments after @var{prompt} are available for the input.  For example,
+the line
+
+@Example
+.rd data foo bar
+@endExample
+
+with the input @w{@samp{This is \$2.}} prints
+
+@Example
+This is bar.
+@endExample
+@endDefreq
+
+@cindex form letters
+@cindex letters, form
+Using the @code{nx} and @code{rd} requests, it is easy to set up form
+letters.  The form letter template is constructed like this, putting the
+following lines into a file called @file{repeat.let}:
+
+@Example
+.ce
+\*(td
+.sp 2
+.nf
+.rd
+.sp
+.rd
+.fi
+Body of letter.
+.bp
+.nx repeat.let
+@endExample
+
+@cindex @code{ex} request, used with @code{nx} and @code{rd}
+@noindent
+When this is run, a file containing the following lines should be
+redirected in.  Note that requests included in this file are executed as
+though they were part of the form letter.  The last block of input is
+the @code{ex} request, which tells @code{groff} to stop processing.  If
+this was not there, @code{groff} would not know when to stop.
+
+@Example
+Trent A. Fisher
+708 NW 19th Av., #202
+Portland, OR  97209
+
+Dear Trent,
+
+Len Adollar
+4315 Sierra Vista
+San Diego, CA  92103
+
+Dear Mr. Adollar,
+
+.ex
+@endExample
+
+@Defreq {pi, pipe}
+Pipe the output of @code{gtroff} to the shell command(s) specified by
+@var{pipe}.  This request must occur before @code{gtroff} has a chance
+to print anything.
+
+@cindex safer mode
+@cindex mode, safer
+@cindex unsafe mode
+@cindex mode, unsafe
+@code{pi} causes an error if used in safer mode (which is the default).
+Use @code{groff}'s or @code{troff}'s @option{-U} option to activate
+unsafe mode.
+
+Multiple calls to @code{pi} are allowed, acting as a chain.  For
+example,
+
+@Example
+.pi foo
+.pi bar
+...
+@endExample
+
+is the same as @w{@samp{.pi foo | bar}}.
+
+@cindex @code{groff}, and @code{pi} request
+@cindex @code{pi} request, and @code{groff}
+Note that the intermediate output format of @code{gtroff} is piped to
+the specified commands.  Consequently, calling @code{groff} without the
+@option{-Z} option normally causes a fatal error.
+@endDefreq
+
+@DefreqList {sy, cmds}
+@DefregListEndx {systat}
+Execute the shell command(s) specified by @var{cmds}.  The output is not
+saved anyplace, so it is up to the user to do so.
+
+@cindex safer mode
+@cindex mode, safer
+@cindex unsafe mode
+@cindex mode, unsafe
+This request causes an error if used in safer mode (which is the
+default).  Use @code{groff}'s or @code{troff}'s @option{-U} option to
+activate unsafe mode.
+
+For example, the following code fragment introduces the current time
+into a document:
+
+@cindex time, current
+@cindex current time
+@pindex perl
+@Example
+.sy perl -e 'printf ".nr H %d\\n.nr M %d\\n.nr S %d\\n",\
+             (localtime(time))[2,1,0]' > /tmp/x\n[$$]
+.so /tmp/x\n[$$]
+.sy rm /tmp/x\n[$$]
+\nH:\nM:\nS
+@endExample
+
+@noindent
+Note that this works by having the @code{perl} script (run by @code{sy})
+print out the @code{nr} requests that set the number registers
+@code{H}, @code{M}, and @code{S}, and then reads those commands in with
+the @code{so} request.
+
+For most practical purposes, the number registers @code{seconds},
+@code{minutes}, and @code{hours}, which are initialized at start-up of
+@code{gtroff}, should be sufficient.  Use the @code{af} request to get a
+formatted output:
+
+@Example
+.af hours 00
+.af minutes 00
+.af seconds 00
+\n[hours]:\n[minutes]:\n[seconds]
+@endExample
+
+@cindex @code{system()} return value register (@code{systat})
+The @code{systat} read-write number register contains the return value
+of the @code{system()} function executed by the last @code{sy} request.
+@endDefreq
+
+@DefreqList {open, stream file}
+@DefreqListEndx {opena, stream file}
+@cindex opening file (@code{open})
+@cindex file, opening (@code{open})
+@cindex appending to a file (@code{opena})
+@cindex file, appending to (@code{opena})
+Open the specified @var{file} for writing and associates the specified
+@var{stream} with it.
+
+The @code{opena} request is like @code{open}, but if the file exists,
+append to it instead of truncating it.
+
+@cindex safer mode
+@cindex mode, safer
+@cindex unsafe mode
+@cindex mode, unsafe
+Both @code{open} and @code{opena} cause an error if used in safer mode
+(which is the default).  Use @code{groff}'s or @code{troff}'s
+@option{-U} option to activate unsafe mode.
+@endDefreq
+
+@DefreqList {write, stream data}
+@DefreqListEndx {writec, stream data}
+@cindex copy-in mode, and @code{write} request
+@cindex @code{write} request, and copy-in mode
+@cindex mode, copy-in, and @code{write} request
+@cindex copy-in mode, and @code{writec} request
+@cindex @code{writec} request, and copy-in mode
+@cindex mode, copy-in, and @code{writec} request
+@cindex writing to file (@code{write}, @code{writec})
+@cindex file, writing to (@code{write}, @code{writec})
+Write to the file associated with the specified @var{stream}.  The
+stream must previously have been the subject of an open request.  The
+remainder of the line is interpreted as the @code{ds} request reads its
+second argument: A leading @samp{"} is stripped, and it is read in
+copy-in mode.
+
+The @code{writec} request is like @code{write}, but only @code{write}
+appends a newline to the data.
+@endDefreq
+
+@Defreq {writem, stream xx}
+@cindex @code{asciify} request, and @code{writem}
+Write the contents of the macro or string @var{xx} to the file
+associated with the specified @var{stream}.
+
+@cindex @code{writem} request, and copy-in mode
+@cindex copy-in mode, and @code{writem} request
+@cindex mode, copy-in, and @code{writem} request
+@var{xx} is read in copy mode, i.e., already formatted elements are
+ignored.  Consequently, diversions must be unformatted with the
+@code{asciify} request before calling @code{writem}.  Usually, this
+means a loss of information.
+@endDefreq
+
+@Defreq {close, stream}
+@cindex closing file (@code{close})
+@cindex file, closing (@code{close})
+Close the specified @var{stream}; the stream is no longer an acceptable
+argument to the @code{write} request.
+
+Here a simple macro to write an index entry.
+
+@Example
+.open idx test.idx
+.
+.de IX
+.  write idx \\n[%] \\$*
+..
+.
+.IX test entry
+.
+.close idx
+@endExample
+@endDefreq
+
+@DefescList {\\V, , e, }
+@DefescItem {\\V, @Lparen{}, ev, }
+@DefescListEnd {\\V, @Lbrack{}, env, @Rbrack{}}
+@cindex @code{\V}, and copy-in mode
+@cindex copy-in mode, and @code{\V}
+@cindex mode, copy-in, and @code{\V}
+Interpolate the contents of the specified environment variable @var{env}
+(one-character name@tie{}@var{e}, two-character name @var{ev}) as
+returned by the function @code{getenv}.  @code{\V} is interpreted in
+copy-in mode.
+@endDefesc
+
+
+@c =====================================================================
+
+@node Postprocessor Access, Miscellaneous, I/O, gtroff Reference
+@section Postprocessor Access
+@cindex postprocessor access
+@cindex access of postprocessor
+
+There are two escapes that give information directly to the
+postprocessor.  This is particularly useful for embedding
+@sc{PostScript} into the final document.
+
+@DefreqList {device, xxx}
+@DefescListEndx {\\X, ', xxx, '}
+Embeds its argument into the @code{gtroff} output preceded with
+@w{@samp{x X}}.
+
+@cindex @code{\&}, in @code{\X}
+@cindex @code{\)}, in @code{\X}
+@cindex @code{\%}, in @code{\X}
+@ifnotinfo
+@cindex @code{\:}, in @code{\X}
+@end ifnotinfo
+@ifinfo
+@cindex @code{\@r{<colon>}}, in @code{\X}
+@end ifinfo
+The escapes @code{\&}, @code{\)}, @code{\%}, and @code{\:} are ignored
+within @code{\X}, @w{@samp{\ }} and @code{\~} are converted to single
+space characters.  All other escapes (except @code{\\}, which produces a
+backslash) cause an error.
+
+@cindex @code{device} request, and copy-in mode
+@cindex copy-in mode, and @code{device} request
+@cindex mode, copy-in, and @code{device} request
+Contrary to @code{\X}, the @code{device} request simply processes its
+argument in copy mode (@pxref{Copy-in Mode}).
+
+@kindex use_charnames_in_special
+@pindex DESC@r{, and @code{use_charnames_in_special}}
+@cindex @code{\X}, and special characters
+If the @samp{use_charnames_in_special} keyword is set in the @file{DESC}
+file, special characters no longer cause an error; they are simply
+output verbatim.  Additionally, the backslash is represented as
+@code{\\}.
+
+@samp{use_charnames_in_special} is currently used by @code{grohtml}
+only.
+@endDefesc
+
+@DefreqList {devicem, xx}
+@DefescItemx {\\Y, , n, }
+@DefescItem {\\Y, @Lparen{}, nm, }
+@DefescListEnd {\\Y, @Lbrack{}, name, @Rbrack{}}
+This is approximately equivalent to @samp{\X'\*[@var{name}]'}
+(one-character name@tie{}@var{n}, two-character name @var{nm}).
+However, the contents of the string or macro @var{name} are not
+interpreted; also it is permitted for @var{name} to have been defined as
+a macro and thus contain newlines (it is not permitted for the argument
+to @code{\X} to contain newlines).  The inclusion of newlines requires
+an extension to the @acronym{UNIX} @code{troff} output format, and
+confuses drivers that do not know about this extension (@pxref{Device
+Control Commands}).
+@endDefesc
+
+@xref{Output Devices}.
+
+
+@c =====================================================================
+
+@node Miscellaneous, Gtroff Internals, Postprocessor Access, gtroff Reference
+@section Miscellaneous
+
+This section documents parts of @code{gtroff} that cannot (yet) be
+categorized elsewhere in this manual.
+
+@Defreq {nm, [@Var{start} [@Var{inc} [@Var{space} [@Var{indent}]]]]}
+@cindex printing line numbers (@code{nm})
+@cindex line numbers, printing (@code{nm})
+@cindex numbers, line, printing (@code{nm})
+Print line numbers.  @var{start} is the line number of the @emph{next}
+output line.  @var{inc} indicates which line numbers are printed.  For
+example, the value@tie{}5 means to emit only line numbers that are
+multiples of@tie{}5; this defaults to@tie{}1.  @var{space} is the space
+to be left between the number and the text; this defaults to one digit
+space.  The fourth argument is the indentation of the line numbers,
+defaulting to zero.  Both @var{space} and @var{indent} are given as
+multiples of digit spaces; they can be negative also.  Without any
+arguments, line numbers are turned off.
+
+@code{gtroff} reserves three digit spaces for the line number (which is
+printed right-justified) plus the amount given by @var{indent}; the
+output lines are concatenated to the line numbers, separated by
+@var{space}, and @emph{without} reducing the line length.  Depending on
+the value of the horizontal page offset (as set with the @code{po}
+request), line numbers that are longer than the reserved space stick
+out to the left, or the whole line is moved to the right.
+
+Parameters corresponding to missing arguments are not changed; any
+non-digit argument (to be more precise, any argument starting with a
+character valid as a delimiter for identifiers) is also treated as
+missing.
+
+If line numbering has been disabled with a call to @code{nm} without an
+argument, it can be reactivated with @samp{.nm +0}, using the previously
+active line numbering parameters.
+
+The parameters of @code{nm} are associated with the current environment
+(@pxref{Environments}).  The current output line number is available in
+the number register @code{ln}.
+
+@Example
+.po 1m
+.ll 2i
+This test shows how line numbering works with groff.
+.nm 999
+This test shows how line numbering works with groff.
+.br
+.nm xxx 3 2
+.ll -\w'0'u
+This test shows how line numbering works with groff.
+.nn 2
+This test shows how line numbering works with groff.
+@endExample
+
+@noindent
+And here the result:
+
+@Example
+ This  test shows how
+ line numbering works
+ 999 with   groff.   This
+1000 test shows how  line
+1001 numbering works with
+1002 groff.
+      This test shows how
+      line      numbering
+ works  with  groff.
+ This test shows how
+1005  line      numbering
+      works with groff.
+@endExample
+@endDefreq
+
+@Defreq {nn, [@Var{skip}]}
+Temporarily turn off line numbering.  The argument is the number of
+lines not to be numbered; this defaults to@tie{}1.
+@endDefreq
+
+@Defreq {mc, glyph [@Var{dist}]}
+@cindex margin glyph (@code{mc})
+@cindex glyph, for margins (@code{mc})
+Print a @dfn{margin character} to the right of the
+text.@footnote{@dfn{Margin character} is a misnomer since it is an
+output glyph.}  The first argument is the glyph to be printed.  The
+second argument is the distance away from the right margin.  If missing,
+the previously set value is used; default is 10@dmn{pt}).  For text
+lines that are too long (that is, longer than the text length plus
+@var{dist}), the margin character is directly appended to the lines.
+
+With no arguments the margin character is turned off.  If this occurs
+before a break, no margin character is printed.
+
+For compatibility with @acronym{AT&T} @code{troff}, a call to @code{mc}
+to set the margin character can't be undone immediately; at least one
+line gets a margin character.  Thus
+
+@Example
+.ll 1i
+.mc \[br]
+.mc
+xxx
+.br
+xxx
+@endExample
+
+@noindent
+produces
+
+@Example
+xxx        |
+xxx
+@endExample
+
+@cindex @code{tl} request, and @code{mc}
+For empty lines and lines produced by the @code{tl} request no margin
+character is emitted.
+
+The margin character is associated with the current environment
+(@pxref{Environments}).
+
+@pindex nrchbar
+@pindex changebar
+This is quite useful for indicating text that has changed, and, in fact,
+there are programs available for doing this (they are called
+@code{nrchbar} and @code{changebar} and can be found in any
+@samp{comp.sources.unix} archive).
+
+@Example
+.ll 3i
+.mc |
+This paragraph is highlighted with a margin
+character.
+.sp
+Note that vertical space isn't marked.
+.br
+\&
+.br
+But we can fake it with `\&'.
+@endExample
+
+Result:
+
+@Example
+This  paragraph is highlighted |
+with a margin character.       |
+
+Note that vertical space isn't |
+marked.                        |
+                               |
+But we can fake it with `\&'.  |
+@endExample
+@endDefreq
+
+@DefreqList {psbb, filename}
+@DefregItemx {llx}
+@DefregItemx {lly}
+@DefregItemx {urx}
+@DefregListEndx {ury}
+@cindex PostScript, bounding box
+@cindex bounding box
+Retrieve the bounding box of the @sc{PostScript} image found in
+@var{filename}.  The file must conform to Adobe's @dfn{Document
+Structuring Conventions} (DSC); the command searches for a
+@code{%%BoundingBox} comment and extracts the bounding box values into
+the number registers @code{llx}, @code{lly}, @code{urx}, and @code{ury}.
+If an error occurs (for example, @code{psbb} cannot find the
+@code{%%BoundingBox} comment), it sets the four number registers to
+zero.
+
+The search path for @var{filename} can be controlled with the
+@option{-I} command line option.
+@endDefreq
+
+
+@c =====================================================================
+
+@node Gtroff Internals, Debugging, Miscellaneous, gtroff Reference
+@section @code{gtroff} Internals
+
+@cindex input token
+@cindex token, input
+@cindex output node
+@cindex node, output
+@code{gtroff} processes input in three steps.  One or more input
+characters are converted to an @dfn{input token}.@footnote{Except the
+escapes @code{\f}, @code{\F}, @code{\H}, @code{\m}, @code{\M},
+@code{\R}, @code{\s}, and @code{\S}, which are processed immediately if
+not in copy-in mode.}  Then, one or more input tokens are converted to
+an @dfn{output node}.  Finally, output nodes are converted to the
+intermediate output language understood by all output devices.
+
+Actually, before step one happens, @code{gtroff} converts certain escape
+sequences into reserved input characters (not accessible by the user);
+such reserved characters are used for other internal processing also --
+this is the very reason why not all characters are valid input.
+@xref{Identifiers}, for more on this topic.
+
+For example, the input string @samp{fi\[:u]} is converted into a
+character token @samp{f}, a character token @samp{i}, and a special
+token @samp{:u} (representing u@tie{}umlaut).  Later on, the character
+tokens @samp{f} and @samp{i} are merged to a single output node
+representing the ligature glyph @samp{fi} (provided the current font has
+a glyph for this ligature); the same happens with @samp{:u}.  All output
+glyph nodes are `processed', which means that they are invariably
+associated with a given font, font size, advance width, etc.  During the
+formatting process, @code{gtroff} itself adds various nodes to control
+the data flow.
+
+Macros, diversions, and strings collect elements in two chained lists: a
+list of input tokens that have been passed unprocessed, and a list of
+output nodes.  Consider the following the diversion.
+
+@Example
+.di xxx
+a
+\!b
+c
+.br
+.di
+@endExample
+
+@noindent
+It contains these elements.
+
+@multitable {@i{vertical size node}} {token list} {element number}
+@item node list               @tab token list @tab element number
+
+@item @i{line start node}     @tab ---        @tab 1
+@item @i{glyph node @code{a}} @tab ---        @tab 2
+@item @i{word space node}     @tab ---        @tab 3
+@item ---                     @tab @code{b}   @tab 4
+@item ---                     @tab @code{\n}  @tab 5
+@item @i{glyph node @code{c}} @tab ---        @tab 6
+@item @i{vertical size node}  @tab ---        @tab 7
+@item @i{vertical size node}  @tab ---        @tab 8
+@item ---                     @tab @code{\n}  @tab 9
+@end multitable
+
+@cindex @code{\v}, internal representation
+@noindent
+Elements 1, 7, and@tie{}8 are inserted by @code{gtroff}; the latter two
+(which are always present) specify the vertical extent of the last line,
+possibly modified by @code{\x}.  The @code{br} request finishes the
+current partial line, inserting a newline input token, which is
+subsequently converted to a space when the diversion is reread.  Note
+that the word space node has a fixed width that isn't stretchable
+anymore.  To convert horizontal space nodes back to input tokens, use
+the @code{unformat} request.
+
+Macros only contain elements in the token list (and the node list is
+empty); diversions and strings can contain elements in both lists.
+
+Note that the @code{chop} request simply reduces the number of elements
+in a macro, string, or diversion by one.  Exceptions are
+@dfn{compatibility save} and @dfn{compatibility ignore} input tokens,
+which are ignored.  The @code{substring} request also ignores those
+input tokens.
+
+Some requests like @code{tr} or @code{cflags} work on glyph identifiers
+only; this means that the associated glyph can be changed without
+destroying this association.  This can be very helpful for substituting
+glyphs.  In the following example, we assume that glyph @samp{foo} isn't
+available by default, so we provide a substitution using the
+@code{fchar} request and map it to input character @samp{x}.
+
+@Example
+.fchar \[foo] foo
+.tr x \[foo]
+@endExample
+
+@noindent
+Now let us assume that we install an additional special font @samp{bar}
+that has glyph @samp{foo}.
+
+@Example
+.special bar
+.rchar \[foo]
+@endExample
+
+@noindent
+Since glyphs defined with @code{fchar} are searched before glyphs in
+special fonts, we must call @code{rchar} to remove the definition of the
+fallback glyph.  Anyway, the translation is still active; @samp{x} now
+maps to the real glyph @samp{foo}.
+
+@cindex compatibility mode, and parameters
+@cindex mode, compatibility, and parameters
+@cindex arguments, and compatibility mode
+@cindex parameters, and compatibility mode
+@cindex macro arguments, and compatibility mode
+@cindex request arguments, and compatibility mode
+Macro and request arguments preserve the compatibility mode:
+
+@Example
+.cp 1     \" switch to compatibility mode
+.de xx
+\\$1
+..
+.cp 0     \" switch compatibility mode off
+.xx caf\['e]
+    @result{} caf�
+@endExample
+
+@noindent
+Since compatibility mode is on while @code{de} is called, the macro
+@code{xx} activates compatibility mode while executing.  Argument
+@code{$1} can still be handled properly because it inherits the
+compatibility mode status which was active at the point where @code{xx}
+is called.
+
+After expansion of the parameters, the compatibility save and restore
+tokens are removed.
+
+
+@c =====================================================================
+
+@node Debugging, Implementation Differences, Gtroff Internals, gtroff Reference
+@section Debugging
+@cindex debugging
+
+@code{gtroff} is not easy to debug, but there are some useful features
+and strategies for debugging.
+
+@Defreq {lf, line [@Var{filename}]}
+@pindex soelim
+@cindex multi-file documents
+@cindex documents, multi-file
+@cindex setting input line number (@code{lf})
+@cindex input line number, setting (@code{lf})
+@cindex number, input line, setting (@code{lf})
+Change the line number and optionally the file name @code{gtroff} shall
+use for error and warning messages.  @var{line} is the input line number
+of the @emph{next} line.
+
+Without argument, the request is ignored.
+
+This is a debugging aid for documents that are split into many files,
+then put together with @code{soelim} and other preprocessors.  Usually,
+it isn't invoked manually.
+
+Note that other @code{troff} implementations (including the original
+@acronym{AT&T} version) handle @code{lf} differently.  For them,
+@var{line} changes the line number of the @emph{current} line.
+@endDefreq
+
+@DefreqList {tm, string}
+@DefreqItemx {tm1, string}
+@DefreqListEndx {tmc, string}
+@cindex printing to stderr (@code{tm}, @code{tm1}, @code{tmc})
+@cindex stderr, printing to (@code{tm}, @code{tm1}, @code{tmc})
+Send @var{string} to the standard error output; this is very useful for
+printing debugging messages among other things.
+
+@cindex @code{tm} request, and copy-in mode
+@cindex copy-in mode, and @code{tm} request
+@cindex mode, copy-in, and @code{tm} request
+@cindex @code{tm1} request, and copy-in mode
+@cindex copy-in mode, and @code{tm1} request
+@cindex mode, copy-in, and @code{tm1} request
+@cindex @code{tmc} request, and copy-in mode
+@cindex copy-in mode, and @code{tmc} request
+@cindex mode, copy-in, and @code{tmc} request
+@var{string} is read in copy mode.
+
+The @code{tm} request ignores leading spaces of @var{string}; @code{tm1}
+handles its argument similar to the @code{ds} request: a leading double
+quote in @var{string} is stripped to allow initial blanks.
+
+The @code{tmc} request is similar to @code{tm1} but does not append a
+newline (as is done in @code{tm} and @code{tm1}).
+@endDefreq
+
+@Defreq {ab, [@Var{string}]}
+@cindex aborting (@code{ab})
+Similar to the @code{tm} request, except that it causes @code{gtroff} to
+stop processing.  With no argument it prints @samp{User Abort.} to
+standard error.
+@endDefreq
+
+@Defreq {ex, }
+@cindex @code{ex} request, use in debugging
+@cindex exiting (@code{ex})
+The @code{ex} request also causes @code{gtroff} to stop processing; see
+also @ref{I/O}.
+@endDefreq
+
+When doing something involved it is useful to leave the debugging
+statements in the code and have them turned on by a command line flag.
+
+@Example
+.if \n(DB .tm debugging output
+@endExample
+
+@noindent
+To activate these statements say
+
+@Example
+groff -rDB=1 file
+@endExample
+
+If it is known in advance that there are many errors and no useful
+output, @code{gtroff} can be forced to suppress formatted output with
+the @option{-z} flag.
+
+@Defreq {pev, }
+@cindex dumping environments (@code{pev})
+@cindex environments, dumping (@code{pev})
+Print the contents of the current environment and all the currently
+defined environments (both named and numbered) on @code{stderr}.
+@endDefreq
+
+@Defreq {pm, }
+@cindex dumping symbol table (@code{pm})
+@cindex symbol table, dumping (@code{pm})
+Print the entire symbol table on @code{stderr}.  Names of all defined
+macros, strings, and diversions are print together with their size in
+bytes.  Since @code{gtroff} sometimes adds nodes by itself, the returned
+size can be larger than expected.
+
+This request differs from @acronym{UNIX} @code{troff}: @code{gtroff}
+reports the sizes of diversions, ignores an additional argument to print
+only the total of the sizes, and the size isn't returned in blocks of
+128 characters.
+@endDefreq
+
+@Defreq {pnr, }
+@cindex dumping number registers (@code{pnr})
+@cindex number registers, dumping (@code{pnr})
+Print the names and contents of all currently defined number registers
+on @code{stderr}.
+@endDefreq
+
+@Defreq {ptr, }
+@cindex dumping traps (@code{ptr})
+@cindex traps, dumping (@code{ptr})
+Print the names and positions of all traps (not including input line
+traps and diversion traps) on @code{stderr}.  Empty slots in the page
+trap list are printed as well, because they can affect the priority of
+subsequently planted traps.
+@endDefreq
+
+@Defreq {fl, }
+@cindex flush output (@code{fl})
+@cindex output, flush (@code{fl})
+@cindex interactive use of @code{gtroff}
+@cindex @code{gtroff}, interactive use
+Instruct @code{gtroff} to flush its output immediately.  The intent is
+for interactive use, but this behaviour is currently not implemented in
+@code{gtroff}.  Contrary to @acronym{UNIX} @code{troff}, TTY output is
+sent to a device driver also (@code{grotty}), making it non-trivial to
+communicate interactively.
+
+This request causes a line break.
+@endDefreq
+
+@Defreq {backtrace, }
+@cindex backtrace of input stack (@code{backtrace})
+@cindex input stack, backtrace (@code{backtrace})
+Print a backtrace of the input stack to the standard error stream.
+
+Consider the following in file @file{test}:
+
+@Example
+.de xxx
+.  backtrace
+..
+.de yyy
+.  xxx
+..
+.
+.yyy
+@endExample
+
+@noindent
+On execution, @code{gtroff} prints the following:
+
+@Example
+test:2: backtrace: macro `xxx'
+test:5: backtrace: macro `yyy'
+test:8: backtrace: file `test'
+@endExample
+
+The option @option{-b} of @code{gtroff} internally calls a variant of
+this request on each error and warning.
+@endDefreq
+
+@Defreg {slimit}
+@cindex input stack, setting limit
+Use the @code{slimit} number register to set the maximum number of
+objects on the input stack.  If @code{slimit} is less than or equal
+to@tie{}0, there is no limit set.  With no limit, a buggy recursive
+macro can exhaust virtual memory.
+
+The default value is 1000; this is a compile-time constant.
+@endDefreg
+
+@Defreq {warnscale, si}
+Set the scaling indicator used in warnings to @var{si}.  Valid values
+for @var{si} are @samp{u}, @samp{i}, @samp{c}, @samp{p}, and @samp{P}.
+At startup, it is set to @samp{i}.
+@endDefreq
+
+@Defreq {spreadwarn, [@Var{limit}]}
+Make @code{gtroff} emit a warning if the additional space inserted for
+each space between words in an output line is larger or equal to
+@var{limit}.  A negative value is changed to zero; no argument toggles
+the warning on and off without changing @var{limit}.  The default
+scaling indicator is @samp{m}.  At startup, @code{spreadwarn} is
+deactivated, and @var{limit} is set to 3@dmn{m}.
+
+For example,
+
+@Example
+.spreadwarn 0.2m
+@endExample
+
+@noindent
+causes a warning if @code{gtroff} must add 0.2@dmn{m} or more for each
+interword space in a line.
+
+This request is active only if text is justified to both margins (using
+@w{@samp{.ad b}}).
+@endDefreq
+
+@cindex warnings
+@code{gtroff} has command line options for printing out more warnings
+(@option{-w}) and for printing backtraces (@option{-b}) when a warning
+or an error occurs.  The most verbose level of warnings is @option{-ww}.
+
+@DefreqList {warn, [@Var{flags}]}
+@DefregListEndx {.warn}
+@cindex level of warnings (@code{warn})
+@cindex warnings, level (@code{warn})
+Control the level of warnings checked for.  The @var{flags} are the sum
+of the numbers associated with each warning that is to be enabled; all
+other warnings are disabled.  The number associated with each warning is
+listed below.  For example, @w{@code{.warn 0}} disables all warnings,
+and @w{@code{.warn 1}} disables all warnings except that about missing
+glyphs.  If no argument is given, all warnings are enabled.
+
+The read-only number register @code{.warn} contains the current warning
+level.
+@endDefreq
+
+@menu
+* Warnings::
+@end menu
+
+@c ---------------------------------------------------------------------
+
+@node Warnings,  , Debugging, Debugging
+@subsection Warnings
+@cindex warnings
+
+The warnings that can be given to @code{gtroff} are divided into the
+following categories.  The name associated with each warning is used by
+the @option{-w} and @option{-W} options; the number is used by the
+@code{warn} request and by the @code{.warn} register.
+
+@table @samp
+@item char
+@itemx 1
+Non-existent glyphs.@footnote{@code{char} is a misnomer since it reports
+missing glyphs -- there aren't missing input characters, only invalid
+ones.}  This is enabled by default.
+
+@item number
+@itemx 2
+Invalid numeric expressions.  This is enabled by default.
+@xref{Expressions}.
+
+@item break
+@itemx 4
+@cindex fill mode
+@cindex mode, fill
+In fill mode, lines that could not be broken so that their length was
+less than the line length.  This is enabled by default.
+
+@item delim
+@itemx 8
+Missing or mismatched closing delimiters.
+
+@item el
+@itemx 16
+@cindex @code{ie} request, and warnings
+@cindex @code{el} request, and warnings
+Use of the @code{el} request with no matching @code{ie} request.
+@xref{if-else}.
+
+@item scale
+@itemx 32
+Meaningless scaling indicators.
+
+@item range
+@itemx 64
+Out of range arguments.
+
+@item syntax
+@itemx 128
+Dubious syntax in numeric expressions.
+
+@item di
+@itemx 256
+@cindex @code{di} request, and warnings
+@cindex @code{da} request, and warnings
+Use of @code{di} or @code{da} without an argument when there is no
+current diversion.
+
+@item mac
+@itemx 512
+@cindex @code{de}, @code{de1}, @code{dei} requests, and warnings
+@cindex @code{am}, @code{am1}, @code{ami} requests, and warnings
+@cindex @code{ds}, @code{ds1} requests, and warnings
+@cindex @code{as}, @code{as1} requests, and warnings
+@cindex @code{di} request, and warnings
+@cindex @code{da} request, and warnings
+@cindex @code{box}, @code{boxa} requests, and warnings
+@cindex @code{\*}, and warnings
+Use of undefined strings, macros and diversions.  When an undefined
+string, macro, or diversion is used, that string is automatically
+defined as empty.  So, in most cases, at most one warning is given for
+each name.
+
+@item reg
+@itemx 1024
+@cindex @code{nr} request, and warnings
+@cindex @code{\R}, and warnings
+@cindex @code{\n}, and warnings
+Use of undefined number registers.  When an undefined number register is
+used, that register is automatically defined to have a value of@tie{}0.
+So, in most cases, at most one warning is given for use of a particular
+name.
+
+@item tab
+@itemx 2048
+@cindex @code{\t}, and warnings
+Use of a tab character where a number was expected.
+
+@item right-brace
+@itemx 4096
+@cindex @code{\@}}, and warnings
+Use of @code{\@}} where a number was expected.
+
+@item missing
+@itemx 8192
+Requests that are missing non-optional arguments.
+
+@item input
+@itemx 16384
+Invalid input characters.
+
+@item escape
+@itemx 32768
+Unrecognized escape sequences.  When an unrecognized escape sequence
+@code{\@var{X}} is encountered, the escape character is ignored, and
+@var{X} is printed.
+
+@item space
+@itemx 65536
+@cindex compatibility mode
+Missing space between a request or macro and its argument.  This warning
+is given when an undefined name longer than two characters is
+encountered, and the first two characters of the name make a defined
+name.  The request or macro is not invoked.  When this warning is given,
+no macro is automatically defined.  This is enabled by default.  This
+warning never occurs in compatibility mode.
+
+@item font
+@itemx 131072
+Non-existent fonts.  This is enabled by default.
+
+@item ig
+@itemx 262144
+Invalid escapes in text ignored with the @code{ig} request.  These are
+conditions that are errors when they do not occur in ignored text.
+
+@item color
+@itemx 524288
+Color related warnings.
+
+@item file
+@itemx 1048576
+Missing files.  The @code{mso} request gives this warning when the
+requested macro file does not exist.  This is enabled by default.
+
+@item all
+All warnings except @samp{di}, @samp{mac} and @samp{reg}.  It is
+intended that this covers all warnings that are useful with traditional
+macro packages.
+
+@item w
+All warnings.
+@end table
+
+
+@c =====================================================================
+
+@node Implementation Differences,  , Debugging, gtroff Reference
+@section Implementation Differences
+@cindex implementation differences
+@cindex differences in implementation
+@cindex incompatibilities with @acronym{AT&T} @code{troff}
+@cindex compatibility mode
+@cindex mode, compatibility
+
+GNU @code{troff} has a number of features that cause incompatibilities
+with documents written with old versions of @code{troff}.
+
+@cindex long names
+@cindex names, long
+Long names cause some incompatibilities.  @acronym{UNIX} @code{troff}
+interprets
+
+@Example
+.dsabcd
+@endExample
+
+@cindex @code{\*}, incompatibilities with @acronym{AT&T} @code{troff}
+@cindex @code{\n}, incompatibilities with @acronym{AT&T} @code{troff}
+@noindent
+as defining a string @samp{ab} with contents @samp{cd}.  Normally, GNU
+@code{troff} interprets this as a call of a macro named @code{dsabcd}.
+Also @acronym{UNIX} @code{troff} interprets @code{\*[} or @code{\n[} as
+references to a string or number register called @samp{[}.  In GNU
+@code{troff}, however, this is normally interpreted as the start of a
+long name.  In compatibility mode GNU @code{troff} interprets long names
+in the traditional way (which means that they are not recognized as
+names).
+
+@DefreqList {cp, [@Var{n}]}
+@DefreqItemx {do, cmd}
+@DefregListEndx {.C}
+If @var{n} is missing or non-zero, turn on compatibility mode;
+otherwise, turn it off.
+
+The read-only number register @code{.C} is@tie{}1 if compatibility mode
+is on, 0@tie{}otherwise.
+
+Compatibility mode can be also turned on with the @option{-C} command
+line option.
+
+The @code{do} request turns off compatibility mode while executing its
+arguments as a @code{gtroff} command.  However, it does not turn off
+compatibility mode while processing the macro itself.  To do that, use
+the @code{de1} request (or manipulate the @code{.C} register manually).
+@xref{Writing Macros}.
+
+@Example
+.do fam T
+@endExample
+
+@noindent
+executes the @code{fam} request when compatibility mode is enabled.
+
+@code{gtroff} restores the previous compatibility setting before
+interpreting any files sourced by the @var{cmd}.
+@endDefreq
+
+@cindex input level in delimited arguments
+@cindex delimited arguments, incompatibilities with @acronym{AT&T} @code{troff}
+Two other features are controlled by @option{-C}.  If not in
+compatibility mode, GNU @code{troff} preserves the input level in
+delimited arguments:
+
+@Example
+.ds xx '
+\w'abc\*(xxdef'
+@endExample
+
+@noindent
+In compatibility mode, the string @samp{72def'} is returned; without
+@option{-C} the resulting string is @samp{168} (assuming a TTY output
+device).
+
+@cindex @code{\f}, incompatibilities with @acronym{AT&T} @code{troff}
+@cindex @code{\H}, incompatibilities with @acronym{AT&T} @code{troff}
+@cindex @code{\s}, incompatibilities with @acronym{AT&T} @code{troff}
+@cindex @code{\S}, incompatibilities with @acronym{AT&T} @code{troff}
+Finally, the escapes @code{\f}, @code{\H}, @code{\m}, @code{\M},
+@code{\R}, @code{\s}, and @code{\S} are transparent for recognizing the
+beginning of a line only in compatibility mode (this is a rather obscure
+feature).  For example, the code
+
+@Example
+.de xx
+Hallo!
+..
+\fB.xx\fP
+@endExample
+
+@noindent
+prints @samp{Hallo!} in bold face if in compatibility mode, and
+@samp{.xx} in bold face otherwise.
+
+@cindex @code{\A}, incompatibilities with @acronym{AT&T} @code{troff}
+@cindex @code{\|}, incompatibilities with @acronym{AT&T} @code{troff}
+@cindex @code{\^}, incompatibilities with @acronym{AT&T} @code{troff}
+@cindex @code{\&}, incompatibilities with @acronym{AT&T} @code{troff}
+@cindex @code{\@{}, incompatibilities with @acronym{AT&T} @code{troff}
+@cindex @code{\@}}, incompatibilities with @acronym{AT&T} @code{troff}
+@cindex @code{\@key{SP}}, incompatibilities with @acronym{AT&T} @code{troff}
+@cindex @code{\'}, incompatibilities with @acronym{AT&T} @code{troff}
+@cindex @code{\`}, incompatibilities with @acronym{AT&T} @code{troff}
+@cindex @code{\-}, incompatibilities with @acronym{AT&T} @code{troff}
+@cindex @code{\_}, incompatibilities with @acronym{AT&T} @code{troff}
+@cindex @code{\!}, incompatibilities with @acronym{AT&T} @code{troff}
+@cindex @code{\%}, incompatibilities with @acronym{AT&T} @code{troff}
+@cindex @code{\c}, incompatibilities with @acronym{AT&T} @code{troff}
+GNU @code{troff} does not allow the use of the escape sequences
+@code{\|}, @code{\^}, @code{\&}, @code{\@{}, @code{\@}},
+@code{\@key{SP}}, @code{\'}, @code{\`}, @code{\-}, @code{\_}, @code{\!},
+@code{\%}, and @code{\c} in names of strings, macros, diversions, number
+registers, fonts or environments; @acronym{UNIX} @code{troff} does.  The
+@code{\A} escape sequence (@pxref{Identifiers}) may be helpful in
+avoiding use of these escape sequences in names.
+
+@cindex fractional point sizes
+@cindex fractional type sizes
+@cindex point sizes, fractional
+@cindex type sizes, fractional
+@cindex sizes, fractional
+@cindex @code{ps} request, incompatibilities with @acronym{AT&T} @code{troff}
+Fractional point sizes cause one noteworthy incompatibility.  In
+@acronym{UNIX} @code{troff} the @code{ps} request ignores scale
+indicators and thus
+
+@Example
+.ps 10u
+@endExample
+
+@noindent
+sets the point size to 10@tie{}points, whereas in GNU @code{troff} it
+sets the point size to 10@tie{}scaled points.  @xref{Fractional Type
+Sizes}, for more information.
+
+@cindex @code{bd} request, incompatibilities with @acronym{AT&T} @code{troff}
+@cindex @code{cs} request, incompatibilities with @acronym{AT&T} @code{troff}
+@cindex @code{tr} request, incompatibilities with @acronym{AT&T} @code{troff}
+@cindex @code{fp} request, incompatibilities with @acronym{AT&T} @code{troff}
+@cindex input characters and output glyphs, compatibility with @acronym{AT&T} @code{troff}
+@cindex output glyphs, and input characters,compatibility with @acronym{AT&T} @code{troff}
+@cindex characters, input, and output glyphs, compatibility with @acronym{AT&T} @code{troff}
+@cindex glyphs, output, and input characters, compatibility with @acronym{AT&T} @code{troff}
+In GNU @code{troff} there is a fundamental difference between
+(unformatted) input characters and (formatted) output glyphs.
+Everything that affects how a glyph is output is stored with the glyph
+node; once a glyph node has been constructed it is unaffected by any
+subsequent requests that are executed, including @code{bd}, @code{cs},
+@code{tkf}, @code{tr}, or @code{fp} requests.  Normally glyphs are
+constructed from input characters at the moment immediately before the
+glyph is added to the current output line.  Macros, diversions and
+strings are all, in fact, the same type of object; they contain lists of
+input characters and glyph nodes in any combination.  A glyph node does
+not behave like an input character for the purposes of macro processing;
+it does not inherit any of the special properties that the input
+character from which it was constructed might have had.  For example,
+
+@Example
+.di x
+\\\\
+.br
+.di
+.x
+@endExample
+
+@cindex printing backslash (@code{\\}, @code{\e}, @code{\E}, @code{\[rs]})
+@cindex backslash, printing (@code{\\}, @code{\e}, @code{\E}, @code{\[rs]})
+@cindex @code{\e}, incompatibilities with @acronym{AT&T} @code{troff}
+@cindex @code{\!}, incompatibilities with @acronym{AT&T} @code{troff}
+@cindex @code{\?}, incompatibilities with @acronym{AT&T} @code{troff}
+@cindex transparent output, incompatibilities with @acronym{AT&T} @code{troff}
+@cindex output, transparent, incompatibilities with @acronym{AT&T} @code{troff}
+@noindent
+prints @samp{\\} in GNU @code{troff}; each pair of input backslashes is
+turned into one output backslash and the resulting output backslashes
+are not interpreted as escape characters when they are reread.
+@acronym{UNIX} @code{troff} would interpret them as escape characters
+when they were reread and would end up printing one @samp{\}.  The
+correct way to obtain a printable backslash is to use the @code{\e}
+escape sequence: This always prints a single instance of the current
+escape character, regardless of whether or not it is used in a
+diversion; it also works in both GNU @code{troff} and @acronym{UNIX}
+@code{troff}.@footnote{To be completely independent of the current
+escape character, use @code{\(rs}, which represents a reverse solidus
+(backslash) glyph.}  To store, for some reason, an escape sequence in a
+diversion that is interpreted when the diversion is reread, either use
+the traditional @code{\!} transparent output facility, or, if this is
+unsuitable, the new @code{\?} escape sequence.
+
+@xref{Diversions}, and @ref{Gtroff Internals}, for more information.
+
+
+
+@c =====================================================================
+@c =====================================================================
+
+@node Preprocessors, Output Devices, gtroff Reference, Top
+@chapter Preprocessors
+@cindex preprocessors
+
+This chapter describes all preprocessors that come with @code{groff} or
+which are freely available.
+
+@menu
+* geqn::
+* gtbl::
+* gpic::
+* ggrn::
+* grap::
+* gchem::
+* grefer::
+* gsoelim::
+* preconv::
+@end menu
+
+
+@c =====================================================================
+
+@node geqn, gtbl, Preprocessors, Preprocessors
+@section @code{geqn}
+@cindex @code{eqn}, the program
+@cindex @code{geqn}, the program
+
+@c XXX
+
+@menu
+* Invoking geqn::
+@end menu
+
+@c ---------------------------------------------------------------------
+
+@node Invoking geqn,  , geqn, geqn
+@subsection Invoking @code{geqn}
+@cindex invoking @code{geqn}
+@cindex @code{geqn}, invoking
+
+@c XXX
+
+
+@c =====================================================================
+
+@node gtbl, gpic, geqn, Preprocessors
+@section @code{gtbl}
+@cindex @code{tbl}, the program
+@cindex @code{gtbl}, the program
+
+@c XXX
+
+@menu
+* Invoking gtbl::
+@end menu
+
+@c ---------------------------------------------------------------------
+
+@node Invoking gtbl,  , gtbl, gtbl
+@subsection Invoking @code{gtbl}
+@cindex invoking @code{gtbl}
+@cindex @code{gtbl}, invoking
+
+@c XXX
+
+
+@c =====================================================================
+
+@node gpic, ggrn, gtbl, Preprocessors
+@section @code{gpic}
+@cindex @code{pic}, the program
+@cindex @code{gpic}, the program
+
+@c XXX
+
+@menu
+* Invoking gpic::
+@end menu
+
+@c ---------------------------------------------------------------------
+
+@node Invoking gpic,  , gpic, gpic
+@subsection Invoking @code{gpic}
+@cindex invoking @code{gpic}
+@cindex @code{gpic}, invoking
+
+@c XXX
+
+
+@c =====================================================================
+
+@node ggrn, grap, gpic, Preprocessors
+@section @code{ggrn}
+@cindex @code{grn}, the program
+@cindex @code{ggrn}, the program
+
+@c XXX
+
+@menu
+* Invoking ggrn::
+@end menu
+
+@c ---------------------------------------------------------------------
+
+@node Invoking ggrn,  , ggrn, ggrn
+@subsection Invoking @code{ggrn}
+@cindex invoking @code{ggrn}
+@cindex @code{ggrn}, invoking
+
+@c XXX
+
+
+@c =====================================================================
+
+@node grap, gchem, ggrn, Preprocessors
+@section @code{grap}
+@cindex @code{grap}, the program
+
+A free implementation of @code{grap}, written by Ted Faber,
+is available as an extra package from the following address:
+
+@display
+@uref{http://www.lunabase.org/~faber/Vault/software/grap/}
+@end display
+
+
+@c =====================================================================
+
+@node gchem, grefer, grap, Preprocessors
+@section @code{gchem}
+@cindex @code{chem}, the program
+@cindex @code{gchem}, the program
+
+@c XXX
+
+@menu
+* Invoking gchem::
+@end menu
+
+@c ---------------------------------------------------------------------
+
+@node Invoking gchem,  , gchem, gchem
+@subsection Invoking @code{gchem}
+@cindex invoking @code{gchem}
+@cindex @code{gchem}, invoking
+
+@c XXX
+
+
+@c =====================================================================
+
+@node grefer, gsoelim, gchem, Preprocessors
+@section @code{grefer}
+@cindex @code{refer}, the program
+@cindex @code{grefer}, the program
+
+@c XXX
+
+@menu
+* Invoking grefer::
+@end menu
+
+@c ---------------------------------------------------------------------
+
+@node Invoking grefer,  , grefer, grefer
+@subsection Invoking @code{grefer}
+@cindex invoking @code{grefer}
+@cindex @code{grefer}, invoking
+
+@c XXX
+
+
+@c =====================================================================
+
+@node gsoelim, preconv, grefer, Preprocessors
+@section @code{gsoelim}
+@cindex @code{soelim}, the program
+@cindex @code{gsoelim}, the program
+
+@c XXX
+
+@menu
+* Invoking gsoelim::
+@end menu
+
+@c ---------------------------------------------------------------------
+
+@node Invoking gsoelim,  , gsoelim, gsoelim
+@subsection Invoking @code{gsoelim}
+@cindex invoking @code{gsoelim}
+@cindex @code{gsoelim}, invoking
+
+@c XXX
+
+
+@c =====================================================================
+
+@node preconv,  , gsoelim, Preprocessors
+@section @code{preconv}
+@cindex @code{preconv}, the program
+
+@c XXX
+
+@menu
+* Invoking preconv::
+@end menu
+
+@c ---------------------------------------------------------------------
+
+@node Invoking preconv,  , preconv, preconv
+@subsection Invoking @code{preconv}
+@cindex invoking @code{preconv}
+@cindex @code{preconv}, invoking
+
+@c XXX
+
+
+@c =====================================================================
+@c =====================================================================
+
+@node Output Devices, File formats, Preprocessors, Top
+@chapter Output Devices
+@cindex output devices
+@cindex devices for output
+
+@c XXX
+
+@menu
+* Special Characters::
+* grotty::
+* grops::
+* gropdf::
+* grodvi::
+* grolj4::
+* grolbp::
+* grohtml::
+* gxditview::
+@end menu
+
+
+@c =====================================================================
+
+@node Special Characters, grotty, Output Devices, Output Devices
+@section Special Characters
+@cindex special characters
+@cindex characters, special
+
+@c XXX
+
+@xref{Font Files}.
+
+
+@c =====================================================================
+
+@node grotty, grops, Special Characters, Output Devices
+@section @code{grotty}
+@cindex @code{grotty}, the program
+
+The postprocessor @code{grotty} translates the output from GNU
+@code{troff} into a form suitable for typewriter-like devices.  It is
+fully documented on its manual page, @cite{grotty(1)}.
+
+@menu
+* Invoking grotty::
+@end menu
+
+@c ---------------------------------------------------------------------
+
+@node Invoking grotty,  , grotty, grotty
+@subsection Invoking @code{grotty}
+@cindex invoking @code{grotty}
+@cindex @code{grotty}, invoking
+
+The postprocessor @command{grotty} accepts the following command-line
+options:
+
+@table @option
+@item -b
+Do not overstrike bold glyphs.  Ignored if @option{-c} isn't used.
+
+@item -B
+Do not underline bold-italic glyphs.  Ignored if @option{-c} isn't
+used.
+
+@item -c
+Use overprint and disable colours for printing on legacy Teletype
+printers (see below).
+
+@item -d
+Do not render lines (this is, ignore all @code{\D} escapes).
+
+@item -f
+Use form feed control characters in the output.
+
+@item -F@var{dir}
+Put the directory @file{@var{dir}/dev@var{name}} in front of the
+search path for the font and device description files, given the
+target device @var{name}.
+
+@item -h
+Use horizontal tabs for sequences of 8 space characters.
+
+@item -i
+Request italic glyphs from the terminal.  Ignored if @option{-c} is
+active.
+
+@item -o
+Do not overstrike.
+
+@item -r
+Highlight italic glyphs.  Ignored if @option{-c} is active.
+
+@item -u
+Do not underline italic glyphs.  Ignored if @option{-c} isn't used.
+
+@item -U
+Do not overstrike bold-italic glyphs.  Ignored if @option{-c} isn't
+used.
+
+@item -v
+Print the version number.
+@end table
+
+@pindex less
+@cindex Teletype
+@cindex ISO 6249 SGR
+@cindex terminal control sequences
+@cindex control sequences, for terminals
+The @option{-c} mode for TTY output devices means that underlining is
+done by emitting sequences of @samp{_} and @samp{^H} (the backspace
+character) before the actual character.  Literally, this is printing
+an underline character, then moving the caret back one character
+position, and printing the actual character at the same position as
+the underline character (similar to a typewriter).  Usually, a modern
+terminal can't interpret this (and the original Teletype machines for
+which this sequence was appropriate are no longer in use).  You need
+a pager program like @code{less} that translates this into
+ISO@tie{}6429 SGR sequences to control terminals.
+
+
+@c =====================================================================
+
+@node grops, gropdf, grotty, Output Devices
+@section @code{grops}
+@cindex @code{grops}, the program
+
+The postprocessor @command{grops} translates the output from GNU
+@command{troff} into a form suitable for Adobe @sc{PostScript}
+devices.  It is fully documented on its manual page, @cite{grops(1)}.
+
+
+@menu
+* Invoking grops::
+* Embedding PostScript::
+@end menu
+
+@c ---------------------------------------------------------------------
+
+@node Invoking grops, Embedding PostScript, grops, grops
+@subsection Invoking @code{grops}
+@cindex invoking @code{grops}
+@cindex @code{grops}, invoking
+
+The postprocessor @code{grops} accepts the following command-line
+options:
+
+@table @option
+@item -b@var{flags}
+Use backward compatibility settings given by @var{flags} as
+documented in the @cite{grops(1)} manual page.  Overrides the command
+@option{broken} in the @file{DESC} file.
+
+@item -c@var{n}
+Print @var{n} copies of each page.
+
+@item -F@var{dir}
+Put the directory @file{@var{dir}/dev@var{name}} in front of the
+search path for the font, prologue and device description files,
+given the target device @var{name}, usually @strong{ps}.
+
+@item -g
+Tell the printer to guess the page length.  Useful for printing
+vertically centered pages when the paper dimensions are determined at
+print time.
+
+@item -I@var{path} @dots{}
+Consider the directory @file{@var{path}} for searching included files
+specified with relative paths.  The current directory is searched as
+fallback.
+
+@item -l
+Use landscape orientation.
+
+@item -m
+Use manual feed.
+
+@item -p@var{papersize}
+Set the page dimensions.  Overrides the commands @option{papersize},
+@option{paperlength}, and @option{paperwidth} in the @file{DESC}
+file.  See the @cite{groff_font(5)} manual page for details.
+
+@item -P@var{prologue}
+Use the @var{prologue} in the font path as the prologue instead of
+the default @file{prologue}.  Overrides the environment variable
+@env{GROPS_PROLOGUE}.
+
+@item -w@var{n}
+Set the line thickness to @var{n}/1000@dmn{em}.  Overrides the
+default value @var{n} = 40.
+
+@item -v
+Print the version number.
+@end table
+
+@c ---------------------------------------------------------------------
+
+@node Embedding PostScript,  , Invoking grops, grops
+@subsection Embedding @sc{PostScript}
+@cindex embedding PostScript
+@cindex PostScript, embedding
+
+The escape sequence
+
+@code{\X'ps: import @var{file} @var{llx} @var{lly} @var{urx} @var{ury}
+  @var{width} [@var{height}]'}
+
+@noindent
+places a rectangle of the specified @var{width} containing the
+@sc{PostScript} drawing from file @var{file} bound by the box from
+@var{llx} @var{lly} to @var{urx} @var{ury} (in @sc{PostScript}
+coordinates) at the insertion point.  If @var{height} is not
+specified, the embedded drawing is scaled proportionally.
+
+@xref{Miscellaneous}, for the @code{psbb} request, which automatically
+generates the bounding box.
+
+This escape sequence is used internally by the macro @code{PSPIC}
+(see the @cite{groff_tmac(5)} manual page).
+
+
+@c =====================================================================
+
+@node gropdf, grodvi, grops, Output Devices
+@section @code{gropdf}
+@cindex @code{gropdf}, the program
+
+The postprocessor @command{gropdf} translates the output from GNU
+@command{troff} into a form suitable for Adobe PDF devices.  It is fully
+documented on its manual page, @cite{gropdf(1)}.
+
+@menu
+* Invoking gropdf::
+* Embedding PDF::
+@end menu
+
+@c ---------------------------------------------------------------------
+
+@node Invoking gropdf, Embedding PDF, gropdf, gropdf
+@subsection Invoking @code{gropdf}
+@cindex invoking @code{gropdf}
+@cindex @code{gropdf}, invoking
+
+The postprocessor @code{gropdf} accepts the following command-line
+options:
+
+@table @option
+@item -d
+Produce uncompressed PDFs that include debugging comments.
+
+@item -e
+This forces @code{gropdf} to embed all used fonts in the PDF,
+even if they are one of the 14 base Adobe fonts.
+
+@item -F@var{dir}
+Put the directory @file{@var{dir}/dev@var{name}} in front of the
+search path for the font, prologue and device description files,
+given the target device @var{name}, usually @strong{pdf}.
+
+@item -y@var{foundry}
+This forces the use of a different font foundry.
+
+@item -l
+Use landscape orientation.
+
+@item -p@var{papersize}
+Set the page dimensions.  Overrides the commands @option{papersize},
+@option{paperlength}, and @option{paperwidth} in the @file{DESC}
+file.  See the @cite{groff_font(5)} manual page for details.
+
+@item -v
+Print the version number.
+
+@item -s
+Append a comment line to end of PDF showing statistics, i.e. number of
+pages in document.  Ghostscript's @cite{ps2pdf(1)} complains about this
+line if it is included, but works anyway.
+
+@item -u@var{filename}
+@code{gropdf} normally includes a ToUnicode CMap with any font created
+using @file{text.enc} as the encoding file, this makes it easier to
+search for words that contain ligatures.  You can include your own CMap
+by specifying a @var{filename} or have no CMap at all by omitting the
+@var{filename}.
+@end table
+
+@c ---------------------------------------------------------------------
+
+@node Embedding PDF,  , Invoking gropdf, gropdf
+@subsection Embedding PDF
+@cindex embedding PDF
+@cindex PDF, embedding
+
+The escape sequence
+
+@code{\X'pdf: pdfpic @var{file} @var{alignment} @var{width} [@var{height}]
+  [@var{linelength}]'}
+
+@noindent
+places a rectangle of the specified @var{width} containing the PDF
+drawing from file @var{file} of desired @var{width} and @var{height} (if
+@var{height} is missing or zero then it is scaled proportionally).  If
+@var{alignment} is @code{-L} the drawing is left aligned.  If it is
+@code{-C} or @code{-R} a @var{linelength} greater than the width of the
+drawing is required as well.  If @var{width} is specified as zero then
+the width is scaled in proportion to the height.
+
+
+@c =====================================================================
+
+@node grodvi, grolj4, gropdf, Output Devices
+@section @code{grodvi}
+@cindex @code{grodvi}, the program
+
+The postprocessor @command{grodvi} translates the output from GNU
+@command{troff} into the @strong{DVI} output format compatible with
+the @strong{@TeX{}} document preparation system.  It is fully
+documented on its manual page, @cite{grodvi(1)}.
+
+@menu
+* Invoking grodvi::
+@end menu
+
+@c ---------------------------------------------------------------------
+
+@node Invoking grodvi,  , grodvi, grodvi
+@subsection Invoking @code{grodvi}
+@cindex invoking @code{grodvi}
+@cindex @code{grodvi}, invoking
+
+The postprocessor @code{grodvi} accepts the following command-line
+options:
+
+@table @option
+@item -d
+Do not use @strong{tpic} specials to implement drawing commands.
+
+@item -F@var{dir}
+Put the directory @file{@var{dir}/dev@var{name}} in front of the
+search path for the font and device description files, given the
+target device @var{name}, usually @strong{dvi}.
+
+@item -l
+Use landscape orientation.
+
+@item -p@var{papersize}
+Set the page dimensions.  Overrides the commands @option{papersize},
+@option{paperlength}, and @option{paperwidth} in the @file{DESC}
+file.  See @cite{groff_font(5)} manual page for details.
+
+@item -v
+Print the version number.
+
+@item -w@var{n}
+Set the line thickness to @var{n}/1000@dmn{em}.  Overrides the
+default value @var{n} = 40.
+@end table
+
+
+@c =====================================================================
+
+@node grolj4, grolbp, grodvi, Output Devices
+@section @code{grolj4}
+@cindex @code{grolj4}, the program
+
+The postprocessor @command{grolj4} translates the output from GNU
+@command{troff} into the @strong{PCL5} output format suitable for
+printing on a @strong{HP LaserJet@tie{}4} printer.  It is fully
+documented on its manual page, @cite{grolj4(1)}.
+
+@menu
+* Invoking grolj4::
+@end menu
+
+@c ---------------------------------------------------------------------
+
+@node Invoking grolj4,  , grolj4, grolj4
+@subsection Invoking @code{grolj4}
+@cindex invoking @code{grolj4}
+@cindex @code{grolj4}, invoking
+
+The postprocessor @code{grolj4} accepts the following command-line
+options:
+
+@table @option
+@item -c@var{n}
+Print @var{n} copies of each page.
+
+@item -F@var{dir}
+Put the directory @file{@var{dir}/dev@var{name}} in front of the
+search path for the font and device description files, given the
+target device @var{name}, usually @strong{lj4}.
+
+@item -l
+Use landscape orientation.
+
+@item -p@var{size}
+Set the page dimensions.  Valid values for @var{size} are:
+@code{letter}, @code{legal}, @code{executive}, @code{a4},
+@code{com10}, @code{monarch}, @code{c5}, @code{b5}, @code{d1}.
+
+@item -v
+Print the version number.
+
+@item -w@var{n}
+Set the line thickness to @var{n}/1000@dmn{em}.  Overrides the
+default value @var{n} = 40.
+@end table
+
+The special drawing command @code{\D'R @var{dh} @var{dv}'} draws a
+horizontal rectangle from the current position to the position at
+offset (@var{dh},@var{dv}).
+
+
+@c =====================================================================
+
+@node grolbp, grohtml, grolj4, Output Devices
+@section @code{grolbp}
+@cindex @code{grolbp}, the program
+
+The postprocessor @command{grolbp} translates the output from GNU
+@command{troff} into the @strong{LBP} output format suitable for
+printing on @strong{Canon CAPSL} printers.  It is fully documented on
+its manual page, @cite{grolbp(1)}.
+
+@menu
+* Invoking grolbp::
+@end menu
+
+@c ---------------------------------------------------------------------
+
+@node Invoking grolbp,  , grolbp, grolbp
+@subsection Invoking @code{grolbp}
+@cindex invoking @code{grolbp}
+@cindex @code{grolbp}, invoking
+
+The postprocessor @code{grolbp} accepts the following command-line
+options:
+
+@table @option
+@item -c@var{n}
+Print @var{n} copies of each page.
+
+@item -F@var{dir}
+Put the directory @file{@var{dir}/dev@var{name}} in front of the
+search path for the font, prologue and device description files,
+given the target device @var{name}, usually @strong{lbp}.
+
+@item -l
+Use landscape orientation.
+
+@item -o@var{orientation}
+Use the @var{orientation} specified: @code{portrait} or
+@code{landscape}.
+
+@item -p@var{papersize}
+Set the page dimensions.  See @cite{groff_font(5)} manual page for
+details.
+
+@item -w@var{n}
+Set the line thickness to @var{n}/1000@dmn{em}.  Overrides the
+default value @var{n} = 40.
+
+@item -v
+Print the version number.
+
+@item -h
+Print command-line help.
+@end table
+
+
+@c =====================================================================
+
+@node grohtml, gxditview, grolbp, Output Devices
+@section @code{grohtml}
+@cindex @code{grohtml}, the program
+
+The @code{grohtml} front end (which consists of a preprocessor,
+@code{pre-grohtml}, and a device driver, @code{post-grohtml}) translates
+the output of GNU @code{troff} to @acronym{HTML}.  Users should always
+invoke @code{grohtml} via the @code{groff} command with a @code{\-Thtml}
+option.  If no files are given, @code{grohtml} will read the standard
+input.  A filename of @code{-} will also cause @code{grohtml} to read
+the standard input.  @acronym{HTML} output is written to the standard
+output.  When @code{grohtml} is run by @code{groff}, options can be
+passed to @code{grohtml} using @code{groff}'s @option{-P} option.
+
+@code{grohtml} invokes @code{groff} twice.  In the first pass, pictures,
+equations, and tables are rendered using the @code{ps} device, and in
+the second pass @acronym{HTML} output is generated by the @code{html}
+device.
+
+@code{grohtml} always writes output in @code{UTF-8} encoding and has
+built-in entities for all non-composite unicode characters.  In spite of
+this, @code{groff} may issue warnings about unknown special characters
+if they can't be found during the first pass.  Such warnings can be
+safely ignored unless the special characters appear inside a table or
+equation, in which case glyphs for these characters must be defined for
+the @code{ps} device as well.
+
+This output device is fully documented on its manual page,
+@cite{grohtml(1)}.
+
+@menu
+* Invoking grohtml::
+* grohtml specific registers and strings::
+@end menu
+
+@c ---------------------------------------------------------------------
+
+@node Invoking grohtml, grohtml specific registers and strings, grohtml, grohtml
+@subsection Invoking @code{grohtml}
+@cindex invoking @code{grohtml}
+@cindex @code{grohtml}, invoking
+
+The postprocessor @code{grohtml} accepts the following command-line
+options:
+
+@table @option
+@item -a@var{bits}
+Use this number of @var{bits} (= 1, 2 or 4) for text antialiasing.
+Default: @var{bits} = 4.
+
+@item -a0
+Do not use text antialiasing.
+
+@item -b
+Use white background.
+
+@item -D@var{dir}
+Store rendered images in the directory @file{@var{dir}}.
+
+@item -F@var{dir}
+Put the directory @file{@var{dir}/dev@var{name}} in front of the
+search path for the font, prologue and device description files,
+given the target device @var{name}, usually @strong{html}.
+
+@item -g@var{bits}
+Use this number of @var{bits} (= 1, 2 or 4) for antialiasing of
+drawings.  Default: @var{bits} = 4.
+
+@item -g0
+Do not use antialiasing for drawings.
+
+@item -h
+Use the @code{B} element for section headings.
+
+@item -i@var{resolution}
+Use the @var{resolution} for rendered images.  Default:
+@var{resolution} = 100@dmn{dpi}.
+
+@item -I@var{stem}
+Set the images' @var{stem name}.  Default: @var{stem} =
+@file{grohtml-@var{XXX}} (@var{XXX} is the process ID).
+
+@item -j@var{stem}
+Place each section in a separate file called
+@file{@var{stem}-@var{n}.html} (where @var{n} is a generated section
+number).
+
+@item -l
+Do not generate the table of contents.
+
+@item -n
+Generate simple fragment identifiers.
+
+@item -o@var{offset}
+Use vertical paddding @var{offset} for images.
+
+@item -p
+Display the page rendering progress to @code{stderr}.
+
+@item -r
+Do not use horizontal rules to separate headers and footers.
+
+@item -s@var{size}
+Set the base font size, to be modified using the elements @code{BIG}
+and @code{SMALL}.
+
+@item -S@var{level}
+Generate separate files for sections at level @var{level}.
+
+@item -v
+Print the version number.
+
+@item -V
+Generate a validator button at the bottom.
+
+@item -y
+Generate a signature of groff after the validator button, if any.
+@end table
+
+
+@c ---------------------------------------------------------------------
+
+@node grohtml specific registers and strings,  , Invoking grohtml, grohtml
+@subsection @code{grohtml} specific registers and strings
+@cindex registers specific to @code{grohtml}
+@cindex strings specific to @code{grohtml}
+@cindex @code{grohtml}, registers and strings
+
+@DefmpregList {ps4html, grohtml}
+@DefstrListEndx {www-image-template, grohtml}
+The registers @code{ps4html} and @code{www-image-template} are defined
+by the @code{pre-grohtml} preprocessor.  @code{pre-grohtml} reads in the
+@code{troff} input, marks up the inline equations and passes the result
+firstly to
+
+@Example
+troff -Tps -rps4html=1 -dwww-image-template=@var{template}
+@endExample
+
+@noindent
+and secondly to
+
+@Example
+troff -Thtml
+@endExample
+
+@noindent
+or
+
+@Example
+troff -Txhtml
+@endExample
+
+@cindex MathML
+The @sc{PostScript} device is used to create all the image files (for
+@option{-Thtml}; if @option{-Txhtml} is used, all equations are passed
+to @code{geqn} to produce @acronym{MathML}, and the register
+@code{ps4html} enables the macro sets to ignore floating keeps, footers,
+and headings.
+
+The register @code{www-image-template} is set to the user specified
+template name or the default name.
+@endDefmpreg
+
+
+@c =====================================================================
+
+@node gxditview,  , grohtml, Output Devices
+@section @code{gxditview}
+@cindex @code{gxditview}, the program
+
+@c XXX
+
+@menu
+* Invoking gxditview::
+@end menu
+
+@c ---------------------------------------------------------------------
+
+@node Invoking gxditview,  , gxditview, gxditview
+@subsection Invoking @code{gxditview}
+@cindex invoking @code{gxditview}
+@cindex @code{gxditview}, invoking
+
+@c XXX
+@c X11's xditview
+
+
+
+@c =====================================================================
+@c =====================================================================
+
+@node File formats, Installation, Output Devices, Top
+@chapter File formats
+@cindex file formats
+@cindex formats, file
+
+All files read and written by @code{gtroff} are text files.  The
+following two sections describe their format.
+
+@menu
+* gtroff Output::
+* Font Files::
+@end menu
+
+
+@c =====================================================================
+
+@node gtroff Output, Font Files, File formats, File formats
+@section @code{gtroff} Output
+@cindex @code{gtroff}, output
+@cindex output, @code{gtroff}
+
+This section describes the intermediate output format of GNU
+@code{troff}.  This output is produced by a run of @code{gtroff} before
+it is fed into a device postprocessor program.
+
+As @code{groff} is a wrapper program around @code{gtroff} that
+automatically calls a postprocessor, this output does not show up
+normally.  This is why it is called @dfn{intermediate}.  @code{groff}
+provides the option @option{-Z} to inhibit postprocessing, such that the
+produced intermediate output is sent to standard output just like
+calling @code{gtroff} manually.
+
+@cindex troff output
+@cindex output, troff
+@cindex intermediate output
+@cindex output, intermediate
+Here, the term @dfn{troff output} describes what is output by
+@code{gtroff}, while @dfn{intermediate output} refers to the language
+that is accepted by the parser that prepares this output for the
+postprocessors.  This parser is smarter on whitespace and implements
+obsolete elements for compatibility, otherwise both formats are the
+same.@footnote{The parser and postprocessor for intermediate output can
+be found in the file@*
+@file{@var{groff-source-dir}/src/libs/libdriver/input.cpp}.}
+
+The main purpose of the intermediate output concept is to facilitate the
+development of postprocessors by providing a common programming
+interface for all devices.  It has a language of its own that is
+completely different from the @code{gtroff} language.  While the
+@code{gtroff} language is a high-level programming language for text
+processing, the intermediate output language is a kind of low-level
+assembler language by specifying all positions on the page for writing
+and drawing.
+
+The intermediate output produced by @code{gtroff} is fairly readable,
+while output from @acronym{AT&T} @code{troff} is rather hard to
+understand because of strange habits that are still supported, but not
+used any longer by @code{gtroff}.
+
+@menu
+* Language Concepts::
+* Command Reference::
+* Intermediate Output Examples::
+* Output Language Compatibility::
+@end menu
+
+@c ---------------------------------------------------------------------
+
+@node Language Concepts, Command Reference, gtroff Output, gtroff Output
+@subsection Language Concepts
+
+During the run of @code{gtroff}, the input data is cracked down to the
+information on what has to be printed at what position on the intended
+device.  So the language of the intermediate output format can be quite
+small.  Its only elements are commands with and without arguments.  In
+this section, the term @dfn{command} always refers to the intermediate
+output language, and never to the @code{gtroff} language used for
+document formatting.  There are commands for positioning and text
+writing, for drawing, and for device controlling.
+
+@menu
+* Separation::
+* Argument Units::
+* Document Parts::
+@end menu
+
+@node Separation, Argument Units, Language Concepts, Language Concepts
+@subsubsection Separation
+
+@acronym{AT&T} @code{troff} output has strange requirements on
+whitespace.  The @code{gtroff} output parser, however, is smart about
+whitespace by making it maximally optional.  The whitespace characters,
+i.e., the tab, space, and newline characters, always have a syntactical
+meaning.  They are never printable because spacing within the output is
+always done by positioning commands.
+
+Any sequence of space or tab characters is treated as a single
+@dfn{syntactical space}.  It separates commands and arguments, but is
+only required when there would occur a clashing between the command code
+and the arguments without the space.  Most often, this happens when
+variable-length command names, arguments, argument lists, or command
+clusters meet.  Commands and arguments with a known, fixed length need
+not be separated by syntactical space.
+
+A line break is a syntactical element, too.  Every command argument can
+be followed by whitespace, a comment, or a newline character.  Thus a
+@dfn{syntactical line break} is defined to consist of optional
+syntactical space that is optionally followed by a comment, and a
+newline character.
+
+The normal commands, those for positioning and text, consist of a single
+letter taking a fixed number of arguments.  For historical reasons, the
+parser allows to stack such commands on the same line, but fortunately,
+in @code{gtroff}'s intermediate output, every command with at least one
+argument is followed by a line break, thus providing excellent
+readability.
+
+The other commands -- those for drawing and device controlling -- have a
+more complicated structure; some recognize long command names, and some
+take a variable number of arguments.  So all @samp{D} and @samp{x}
+commands were designed to request a syntactical line break after their
+last argument.  Only one command, @w{@samp{x X}}, has an argument that
+can stretch over several lines; all other commands must have all of
+their arguments on the same line as the command, i.e., the arguments may
+not be split by a line break.
+
+Empty lines (these are lines containing only space and/or a comment),
+can occur everywhere.  They are just ignored.
+
+@node Argument Units, Document Parts, Separation, Language Concepts
+@subsubsection Argument Units
+
+Some commands take integer arguments that are assumed to represent
+values in a measurement unit, but the letter for the corresponding scale
+indicator is not written with the output command arguments.  Most
+commands assume the scale indicator @samp{u}, the basic unit of the
+device, some use @samp{z}, the scaled point unit of the device, while
+others, such as the color commands, expect plain integers.
+
+Note that single characters can have the eighth bit set, as can the
+names of fonts and special characters.  The names of characters and
+fonts can be of arbitrary length.  A character that is to be printed is
+always in the current font.
+
+A string argument is always terminated by the next whitespace character
+(space, tab, or newline); an embedded @samp{#} character is regarded as
+part of the argument, not as the beginning of a comment command.  An
+integer argument is already terminated by the next non-digit character,
+which then is regarded as the first character of the next argument or
+command.
+
+@node Document Parts,  , Argument Units, Language Concepts
+@subsubsection Document Parts
+
+A correct intermediate output document consists of two parts, the
+@dfn{prologue} and the @dfn{body}.
+
+The task of the prologue is to set the general device parameters using
+three exactly specified commands.  @code{gtroff}'s prologue is
+guaranteed to consist of the following three lines (in that order):
+
+@Example
+x T @var{device}
+x res @var{n} @var{h} @var{v}
+x init
+@endExample
+
+@noindent
+with the arguments set as outlined in @ref{Device Control Commands}.
+Note that the parser for the intermediate output format is able to
+swallow additional whitespace and comments as well even in the prologue.
+
+The body is the main section for processing the document data.
+Syntactically, it is a sequence of any commands different from the ones
+used in the prologue.  Processing is terminated as soon as the first
+@w{@samp{x stop}} command is encountered; the last line of any
+@code{gtroff} intermediate output always contains such a command.
+
+Semantically, the body is page oriented.  A new page is started by a
+@samp{p} command.  Positioning, writing, and drawing commands are always
+done within the current page, so they cannot occur before the first
+@samp{p} command.  Absolute positioning (by the @samp{H} and @samp{V}
+commands) is done relative to the current page; all other positioning is
+done relative to the current location within this page.
+
+@c ---------------------------------------------------------------------
+
+@node Command Reference, Intermediate Output Examples, Language Concepts, gtroff Output
+@subsection Command Reference
+
+This section describes all intermediate output commands, both from
+@acronym{AT&T} @code{troff} as well as the @code{gtroff} extensions.
+
+@menu
+* Comment Command::
+* Simple Commands::
+* Graphics Commands::
+* Device Control Commands::
+* Obsolete Command::
+@end menu
+
+@node Comment Command, Simple Commands, Command Reference, Command Reference
+@subsubsection Comment Command
+
+@table @code
+@item #@var{anything}@angles{end of line}
+A comment.  Ignore any characters from the @samp{#} character up to the
+next newline character.
+
+This command is the only possibility for commenting in the intermediate
+output.  Each comment can be preceded by arbitrary syntactical space;
+every command can be terminated by a comment.
+@end table
+
+@node Simple Commands, Graphics Commands, Comment Command, Command Reference
+@subsubsection Simple Commands
+
+The commands in this subsection have a command code consisting of a
+single character, taking a fixed number of arguments.  Most of them are
+commands for positioning and text writing.  These commands are smart
+about whitespace.  Optionally, syntactical space can be inserted before,
+after, and between the command letter and its arguments.  All of these
+commands are stackable, i.e., they can be preceded by other simple
+commands or followed by arbitrary other commands on the same line.  A
+separating syntactical space is only necessary when two integer
+arguments would clash or if the preceding argument ends with a string
+argument.
+
+@table @code
+@ignore
+.if (\n[@USE_ENV_STACK] == 1) \{\
+.command {
+Open a new environment by copying the actual device configuration data
+to the environment stack.
+.
+The current environment is setup by the device specification and
+manipulated by the setting commands.
+.
+.
+.command }
+Close the actual environment (opened by a preceding
+.BR { \~command)
+and restore the previous environment from the environment
+stack as the actual device configuration data.
+.
+\}              \" endif @USE_ENV_STACK
+@end ignore
+
+@item C @var{xxx}@angles{whitespace}
+Print a special character named @var{xxx}.  The trailing syntactical
+space or line break is necessary to allow glyph names of arbitrary
+length.  The glyph is printed at the current print position; the glyph's
+size is read from the font file.  The print position is not changed.
+
+@item c @var{g}
+Print glyph@tie{}@var{g} at the current print
+position;@footnote{@samp{c} is actually a misnomer since it outputs a
+glyph.} the glyph's size is read from the font file.  The print position
+is not changed.
+
+@item f @var{n}
+Set font to font number@tie{}@var{n} (a non-negative integer).
+
+@item H @var{n}
+Move right to the absolute vertical position@tie{}@var{n} (a
+non-negative integer in basic units @samp{u} relative to left edge of
+current page.
+
+@item h @var{n}
+Move @var{n} (a non-negative integer) basic units @samp{u} horizontally
+to the right.  The original @acronym{UNIX} troff manual allows negative
+values for @var{n} also, but @code{gtroff} doesn't use this.
+
+@item m @var{color-scheme} @r{[}@var{component} @dots{}@r{]}
+Set the color for text (glyphs), line drawing, and the outline of
+graphic objects using different color schemes; the analoguous command
+for the filling color of graphic objects is @samp{DF}.  The color
+components are specified as integer arguments between 0 and 65536.  The
+number of color components and their meaning vary for the different
+color schemes.  These commands are generated by @code{gtroff}'s escape
+sequence @code{\m}.  No position changing.  These commands are a
+@code{gtroff} extension.
+
+@table @code
+@item mc @var{cyan} @var{magenta} @var{yellow}
+Set color using the CMY color scheme, having the 3@tie{}color components
+@var{cyan}, @var{magenta}, and @var{yellow}.
+
+@item md
+Set color to the default color value (black in most cases).  No
+component arguments.
+
+@item mg @var{gray}
+Set color to the shade of gray given by the argument, an integer between
+0 (black) and 65536 (white).
+
+@item mk @var{cyan} @var{magenta} @var{yellow} @var{black}
+Set color using the CMYK color scheme, having the 4@tie{}color
+components @var{cyan}, @var{magenta}, @var{yellow}, and @var{black}.
+
+@item mr @var{red} @var{green} @var{blue}
+Set color using the RGB color scheme, having the 3@tie{}color components
+@var{red}, @var{green}, and @var{blue}.
+@end table
+
+@item N @var{n}
+Print glyph with index@tie{}@var{n} (a non-negative integer) of the
+current font.  This command is a @code{gtroff} extension.
+
+@item n @var{b} @var{a}
+Inform the device about a line break, but no positioning is done by this
+command.  In @acronym{AT&T} @code{troff}, the integer arguments @var{b}
+and@tie{}@var{a} informed about the space before and after the current
+line to make the intermediate output more human readable without
+performing any action.  In @code{groff}, they are just ignored, but they
+must be provided for compatibility reasons.
+
+@item p @var{n}
+Begin a new page in the outprint.  The page number is set
+to@tie{}@var{n}.  This page is completely independent of pages formerly
+processed even if those have the same page number.  The vertical
+position on the outprint is automatically set to@tie{}0.  All
+positioning, writing, and drawing is always done relative to a page, so
+a @samp{p} command must be issued before any of these commands.
+
+@item s @var{n}
+Set point size to @var{n}@tie{}scaled points (this is unit @samp{z}).
+@acronym{AT&T} @code{troff} used the unit points (@samp{p}) instead.
+@xref{Output Language Compatibility}.
+
+@item t @var{xxx}@angles{whitespace}
+@itemx t @var{xxx} @var{dummy-arg}@angles{whitespace}
+Print a word, i.e., a sequence of characters @var{xxx} representing
+output glyphs which names are single characters, terminated by a space
+character or a line break; an optional second integer argument is
+ignored (this allows the formatter to generate an even number of
+arguments).  The first glyph should be printed at the current position,
+the current horizontal position should then be increased by the width of
+the first glyph, and so on for each glyph.  The widths of the glyphs are
+read from the font file, scaled for the current point size, and rounded
+to a multiple of the horizontal resolution.  Special characters cannot
+be printed using this command (use the @samp{C} command for special
+characters).  This command is a @code{gtroff} extension; it is only used
+for devices whose @file{DESC} file contains the @code{tcommand} keyword
+(@pxref{DESC File Format}).
+
+@item u @var{n} @var{xxx}@angles{whitespace}
+Print word with track kerning.  This is the same as the @samp{t} command
+except that after printing each glyph, the current horizontal position
+is increased by the sum of the width of that glyph and@tie{}@var{n} (an
+integer in basic units @samp{u}).  This command is a @code{gtroff}
+extension; it is only used for devices whose @file{DESC} file contains
+the @code{tcommand} keyword (@pxref{DESC File Format}).
+
+@item V @var{n}
+Move down to the absolute vertical position@tie{}@var{n} (a non-negative
+integer in basic units @samp{u}) relative to upper edge of current page.
+
+@item v @var{n}
+Move @var{n}@tie{}basic units @samp{u} down (@var{n} is a non-negative
+integer).  The original @acronym{UNIX} troff manual allows negative
+values for @var{n} also, but @code{gtroff} doesn't use this.
+
+@item w
+Informs about a paddable white space to increase readability.  The
+spacing itself must be performed explicitly by a move command.
+@end table
+
+@node Graphics Commands, Device Control Commands, Simple Commands, Command Reference
+@subsubsection Graphics Commands
+
+Each graphics or drawing command in the intermediate output starts with
+the letter @samp{D}, followed by one or two characters that specify a
+subcommand; this is followed by a fixed or variable number of integer
+arguments that are separated by a single space character.  A @samp{D}
+command may not be followed by another command on the same line (apart
+from a comment), so each @samp{D} command is terminated by a syntactical
+line break.
+
+@code{gtroff} output follows the classical spacing rules (no space
+between command and subcommand, all arguments are preceded by a single
+space character), but the parser allows optional space between the
+command letters and makes the space before the first argument optional.
+As usual, each space can be any sequence of tab and space characters.
+
+Some graphics commands can take a variable number of arguments.  In this
+case, they are integers representing a size measured in basic units
+@samp{u}.  The arguments called @var{h1}, @var{h2}, @dots{}, @var{hn}
+stand for horizontal distances where positive means right, negative
+left.  The arguments called @var{v1}, @var{v2}, @dots{}, @var{vn} stand
+for vertical distances where positive means down, negative up.  All
+these distances are offsets relative to the current location.
+
+Each graphics command directly corresponds to a similar @code{gtroff}
+@code{\D} escape sequence.  @xref{Drawing Requests}.
+
+Unknown @samp{D} commands are assumed to be device-specific.  Its
+arguments are parsed as strings; the whole information is then sent to
+the postprocessor.
+
+In the following command reference, the syntax element @angles{line
+break} means a syntactical line break as defined above.
+
+@table @code
+@item D~ @var{h1} @var{v1} @var{h2} @var{v2} @dots{} @var{hn} @var{vn}@angles{line break}
+Draw B-spline from current position to offset (@var{h1},@var{v1}), then
+to offset (@var{h2},@var{v2}), if given, etc.@: up to
+(@var{hn},@var{vn}).  This command takes a variable number of argument
+pairs; the current position is moved to the terminal point of the drawn
+curve.
+
+@item Da @var{h1} @var{v1} @var{h2} @var{v2}@angles{line break}
+Draw arc from current position to
+(@var{h1},@var{v1})@math{+}(@var{h2},@var{v2}) with center at
+(@var{h1},@var{v1}); then move the current position to the final point
+of the arc.
+
+@item DC @var{d}@angles{line break}
+@itemx DC @var{d} @var{dummy-arg}@angles{line break}
+Draw a solid circle using the current fill color with
+diameter@tie{}@var{d} (integer in basic units @samp{u}) with leftmost
+point at the current position; then move the current position to the
+rightmost point of the circle.  An optional second integer argument is
+ignored (this allows the formatter to generate an even number of
+arguments).  This command is a @code{gtroff} extension.
+
+@item Dc @var{d}@angles{line break}
+Draw circle line with diameter@tie{}@var{d} (integer in basic units
+@samp{u}) with leftmost point at the current position; then move the
+current position to the rightmost point of the circle.
+
+@item DE @var{h} @var{v}@angles{line break}
+Draw a solid ellipse in the current fill color with a horizontal
+diameter of@tie{}@var{h} and a vertical diameter of@tie{}@var{v} (both
+integers in basic units @samp{u}) with the leftmost point at the current
+position; then move to the rightmost point of the ellipse.  This command
+is a @code{gtroff} extension.
+
+@item De @var{h} @var{v}@angles{line break}
+Draw an outlined ellipse with a horizontal diameter of@tie{}@var{h} and
+a vertical diameter of@tie{}@var{v} (both integers in basic units
+@samp{u}) with the leftmost point at current position; then move to the
+rightmost point of the ellipse.
+
+@item DF @var{color-scheme} @r{[}@var{component} @dots{}@r{]}@angles{line break}
+Set fill color for solid drawing objects using different color schemes;
+the analoguous command for setting the color of text, line graphics, and
+the outline of graphic objects is @samp{m}.  The color components are
+specified as integer arguments between 0 and 65536.  The number of color
+components and their meaning vary for the different color schemes.
+These commands are generated by @code{gtroff}'s escape sequences
+@w{@code{\D'F @dots{}'}} and @code{\M} (with no other corresponding
+graphics commands).  No position changing.  This command is a
+@code{gtroff} extension.
+
+@table @code
+@item DFc @var{cyan} @var{magenta} @var{yellow}@angles{line break}
+Set fill color for solid drawing objects using the CMY color scheme,
+having the 3@tie{}color components @var{cyan}, @var{magenta}, and
+@var{yellow}.
+
+@item DFd@angles{line break}
+Set fill color for solid drawing objects to the default fill color value
+(black in most cases).  No component arguments.
+
+@item DFg @var{gray}@angles{line break}
+Set fill color for solid drawing objects to the shade of gray given by
+the argument, an integer between 0 (black) and 65536 (white).
+
+@item DFk @var{cyan} @var{magenta} @var{yellow} @var{black}@angles{line break}
+Set fill color for solid drawing objects using the CMYK color scheme,
+having the 4@tie{}color components @var{cyan}, @var{magenta},
+@var{yellow}, and @var{black}.
+
+@item DFr @var{red} @var{green} @var{blue}@angles{line break}
+Set fill color for solid drawing objects using the RGB color scheme,
+having the 3@tie{}color components @var{red}, @var{green}, and
+@var{blue}.
+@end table
+
+@item Df @var{n}@angles{line break}
+The argument@tie{}@var{n} must be an integer in the range @math{-32767}
+to 32767.
+
+@table @asis
+@item @math{0 @value{LE} @var{n} @value{LE} 1000}
+Set the color for filling solid drawing objects to a shade of gray,
+where 0 corresponds to solid white, 1000 (the default) to solid black,
+and values in between to intermediate shades of gray; this is obsoleted
+by command @samp{DFg}.
+
+@item @math{@var{n} < 0} or @math{@var{n} > 1000}
+Set the filling color to the color that is currently being used for the
+text and the outline, see command @samp{m}.  For example, the command
+sequence
+
+@Example
+mg 0 0 65536
+Df -1
+@endExample
+
+@noindent
+sets all colors to blue.
+@end table
+
+@noindent
+No position changing.  This command is a @code{gtroff} extension.
+
+@item Dl @var{h} @var{v}@angles{line break}
+Draw line from current position to offset (@var{h},@var{v}) (integers in
+basic units @samp{u}); then set current position to the end of the drawn
+line.
+
+@item Dp @var{h1} @var{v1} @var{h2} @var{v2} @dots{} @var{hn} @var{vn}@angles{line break}
+Draw a polygon line from current position to offset (@var{h1},@var{v1}),
+from there to offset (@var{h2},@var{v2}), etc.@: up to offset
+(@var{hn},@var{vn}), and from there back to the starting position.  For
+historical reasons, the position is changed by adding the sum of all
+arguments with odd index to the actual horizontal position and the even
+ones to the vertical position.  Although this doesn't make sense it is
+kept for compatibility.
+@ignore
+As the polygon is closed, the end of drawing is the starting point, so
+the position doesn't change.
+@end ignore
+This command is a @code{gtroff} extension.
+
+@item Dp @var{h1} @var{v1} @var{h2} @var{v2} @dots{} @var{hn} @var{vn}@angles{line break}
+Draw a solid polygon in the current fill color rather than an outlined
+polygon, using the same arguments and positioning as the corresponding
+@samp{Dp} command.
+@ignore
+No position changing.
+@end ignore
+This command is a @code{gtroff} extension.
+
+@item Dt @var{n}@angles{line break}
+Set the current line thickness to@tie{}@var{n} (an integer in basic
+units @samp{u}) if @math{@var{n}>0}; if @math{@var{n}=0} select the
+smallest available line thickness; if @math{@var{n}<0} set the line
+thickness proportional to the point size (this is the default before the
+first @samp{Dt} command was specified).  For historical reasons, the
+horizontal position is changed by adding the argument to the actual
+horizontal position, while the vertical position is not changed.
+Although this doesn't make sense it is kept for compatibility.
+@ignore
+No position changing.
+@end ignore
+This command is a @code{gtroff} extension.
+@end table
+
+@node Device Control Commands, Obsolete Command, Graphics Commands, Command Reference
+@subsubsection Device Control Commands
+
+Each device control command starts with the letter @samp{x}, followed by
+a space character (optional or arbitrary space or tab in @code{gtroff})
+and a subcommand letter or word; each argument (if any) must be preceded
+by a syntactical space.  All @samp{x} commands are terminated by a
+syntactical line break; no device control command can be followed by
+another command on the same line (except a comment).
+
+The subcommand is basically a single letter, but to increase
+readability, it can be written as a word, i.e., an arbitrary sequence of
+characters terminated by the next tab, space, or newline character.  All
+characters of the subcommand word but the first are simply ignored.  For
+example, @code{gtroff} outputs the initialization command @w{@samp{x i}}
+as @w{@samp{x init}} and the resolution command @w{@samp{x r}} as
+@w{@samp{x res}}.
+
+In the following, the syntax element @angles{line break} means a
+syntactical line break (@pxref{Separation}).
+
+@table @code
+@item xF @var{name}@angles{line break}
+The @samp{F} stands for @var{Filename}.
+
+Use @var{name} as the intended name for the current file in error
+reports.  This is useful for remembering the original file name when
+@code{gtroff} uses an internal piping mechanism.  The input file is not
+changed by this command.  This command is a @code{gtroff} extension.
+
+@item xf @var{n} @var{s}@angles{line break}
+The @samp{f} stands for @var{font}.
+
+Mount font position@tie{}@var{n} (a non-negative integer) with font
+named@tie{}@var{s} (a text word).  @xref{Font Positions}.
+
+@item xH @var{n}@angles{line break}
+The @samp{H} stands for @var{Height}.
+
+Set glyph height to@tie{}@var{n} (a positive integer in scaled points
+@samp{z}).  @acronym{AT&T} @code{troff} uses the unit points (@samp{p})
+instead.  @xref{Output Language Compatibility}.
+
+@item xi@angles{line break}
+The @samp{i} stands for @var{init}.
+
+Initialize device.  This is the third command of the prologue.
+
+@item xp@angles{line break}
+The @samp{p} stands for @var{pause}.
+
+Parsed but ignored.  The original @acronym{UNIX} troff manual writes
+
+@display
+pause device, can be restarted
+@end display
+
+@item xr @var{n} @var{h} @var{v}@angles{line break}
+The @samp{r} stands for @var{resolution}.
+
+Resolution is@tie{}@var{n}, while @var{h} is the minimal horizontal
+motion, and @var{v} the minimal vertical motion possible with this
+device; all arguments are positive integers in basic units @samp{u} per
+inch.  This is the second command of the prologue.
+
+@item xS @var{n}@angles{line break}
+The @samp{S} stands for @var{Slant}.
+
+Set slant to@tie{}@var{n} (an integer in basic units @samp{u}).
+
+@item xs@angles{line break}
+The @samp{s} stands for @var{stop}.
+
+Terminates the processing of the current file; issued as the last
+command of any intermediate troff output.
+
+@item xt@angles{line break}
+The @samp{t} stands for @var{trailer}.
+
+Generate trailer information, if any.  In @var{gtroff}, this is actually
+just ignored.
+
+@item xT @var{xxx}@angles{line break}
+The @samp{T} stands for @var{Typesetter}.
+
+Set name of device to word @var{xxx}, a sequence of characters ended by
+the next white space character.  The possible device names coincide with
+those from the @code{groff} @option{-T} option.  This is the first
+command of the prologue.
+
+@item xu @var{n}@angles{line break}
+The @samp{u} stands for @var{underline}.
+
+Configure underlining of spaces.  If @var{n} is@tie{}1, start
+underlining of spaces; if @var{n} is@tie{}0, stop underlining of spaces.
+This is needed for the @code{cu} request in nroff mode and is ignored
+otherwise.  This command is a @code{gtroff} extension.
+
+@item xX @var{anything}@angles{line break}
+The @samp{x} stands for @var{X-escape}.
+
+Send string @var{anything} uninterpreted to the device.  If the line
+following this command starts with a @samp{+} character this line is
+interpreted as a continuation line in the following sense.  The @samp{+}
+is ignored, but a newline character is sent instead to the device, the
+rest of the line is sent uninterpreted.  The same applies to all
+following lines until the first character of a line is not a @samp{+}
+character.  This command is generated by the @code{gtroff} escape
+sequence @code{\X}.  The line-continuing feature is a @code{gtroff}
+extension.
+@end table
+
+@node Obsolete Command,  , Device Control Commands, Command Reference
+@subsubsection Obsolete Command
+In @acronym{AT&T} @code{troff} output, the writing of a single glyph is
+mostly done by a very strange command that combines a horizontal move
+and a single character giving the glyph name.  It doesn't have a command
+code, but is represented by a 3-character argument consisting of exactly
+2@tie{}digits and a character.
+
+@table @asis
+@item @var{dd}@var{g}
+Move right @var{dd} (exactly two decimal digits) basic units @samp{u},
+then print glyph@tie{}@var{g} (represented as a single character).
+
+In @code{gtroff}, arbitrary syntactical space around and within this
+command is allowed to be added.  Only when a preceding command on the
+same line ends with an argument of variable length a separating space is
+obligatory.  In @acronym{AT&T} @code{troff}, large clusters of these and
+other commands are used, mostly without spaces; this made such output
+almost unreadable.
+@end table
+
+For modern high-resolution devices, this command does not make sense
+because the width of the glyphs can become much larger than two decimal
+digits.  In @code{gtroff}, this is only used for the devices @code{X75},
+@code{X75-12}, @code{X100}, and @code{X100-12}.  For other devices, the
+commands @samp{t} and @samp{u} provide a better functionality.
+
+@c ---------------------------------------------------------------------
+
+@node Intermediate Output Examples, Output Language Compatibility, Command Reference, gtroff Output
+@subsection Intermediate Output Examples
+
+This section presents the intermediate output generated from the same
+input for three different devices.  The input is the sentence @samp{hell
+world} fed into @code{gtroff} on the command line.
+
+@table @asis
+@item High-resolution device @code{ps}
+
+This is the standard output of @code{gtroff} if no @option{-T} option is
+given.
+
+@example
+@group
+shell> echo "hell world" | groff -Z -T ps
+
+x T ps
+x res 72000 1 1
+x init
+@end group
+p1
+x font 5 TR
+f5
+s10000
+V12000
+H72000
+thell
+wh2500
+tw
+H96620
+torld
+n12000 0
+@group
+x trailer
+V792000
+x stop
+@end group
+@end example
+
+@noindent
+This output can be fed into @code{grops} to get its representation as a
+@sc{PostScript} file.
+
+@item Low-resolution device @code{latin1}
+
+This is similar to the high-resolution device except that the
+positioning is done at a minor scale.  Some comments (lines starting
+with @samp{#}) were added for clarification; they were not generated by
+the formatter.
+
+@example
+@group
+shell> echo "hell world" | groff -Z -T latin1
+
+# prologue
+x T latin1
+x res 240 24 40
+x init
+@end group
+# begin a new page
+p1
+# font setup
+x font 1 R
+f1
+s10
+# initial positioning on the page
+V40
+H0
+# write text `hell'
+thell
+# inform about space, and issue a horizontal jump
+wh24
+# write text `world'
+tworld
+# announce line break, but do nothing because ...
+n40 0
+@group
+# ... the end of the document has been reached
+x trailer
+V2640
+x stop
+@end group
+@end example
+
+@noindent
+This output can be fed into @code{grotty} to get a formatted text
+document.
+
+@item @acronym{AT&T} @code{troff} output
+Since a computer monitor has a very low resolution compared to modern
+printers the intermediate output for the X@tie{}Window devices can use
+the jump-and-write command with its 2-digit displacements.
+
+@example
+@group
+shell> echo "hell world" | groff -Z -T X100
+
+x T X100
+x res 100 1 1
+x init
+@end group
+p1
+x font 5 TR
+f5
+s10
+V16
+H100
+# write text with jump-and-write commands
+ch07e07l03lw06w11o07r05l03dh7
+n16 0
+@group
+x trailer
+V1100
+x stop
+@end group
+@end example
+
+@noindent
+This output can be fed into @code{xditview} or @code{gxditview} for
+displaying in@tie{}X.
+
+Due to the obsolete jump-and-write command, the text clusters in the
+@acronym{AT&T} @code{troff} output are almost unreadable.
+@end table
+
+@c ---------------------------------------------------------------------
+
+@node Output Language Compatibility,  , Intermediate Output Examples, gtroff Output
+@subsection Output Language Compatibility
+
+The intermediate output language of @acronym{AT&T} @code{troff} was
+first documented in the @acronym{UNIX} troff manual, with later
+additions documented in @cite{A Typesetter-indenpendent TROFF}, written
+by Brian Kernighan.
+
+The @code{gtroff} intermediate output format is compatible with this
+specification except for the following features.
+
+@itemize @bullet
+@item
+The classical quasi device independence is not yet implemented.
+
+@item
+The old hardware was very different from what we use today.  So the
+@code{groff} devices are also fundamentally different from the ones
+in @acronym{AT&T} @code{troff}.  For example, the @acronym{AT&T}
+@sc{PostScript} device is called @code{post} and has a resolution of
+only 720 units per inch, suitable for printers 20 years ago, while
+@code{groff}'s @code{ps} device has a resolution of 72000 units per
+inch.  Maybe, by implementing some rescaling mechanism similar to the
+classical quasi device independence, @code{groff} could emulate
+@acronym{AT&T}'s @code{post} device.
+
+@item
+The B-spline command @samp{D~} is correctly handled by the intermediate
+output parser, but the drawing routines aren't implemented in some of
+the postprocessor programs.
+
+@item
+The argument of the commands @samp{s} and @w{@samp{x H}} has the
+implicit unit scaled point @samp{z} in @code{gtroff}, while
+@acronym{AT&T} @code{troff} has point (@samp{p}).  This isn't an
+incompatibility but a compatible extension, for both units coincide for
+all devices without a @code{sizescale} parameter in the @file{DESC}
+file, including all postprocessors from @acronym{AT&T} and
+@code{groff}'s text devices.  The few @code{groff} devices with a
+@code{sizescale} parameter either do not exist for @acronym{AT&T}
+@code{troff}, have a different name, or seem to have a different
+resolution.  So conflicts are very unlikely.
+
+@item
+The position changing after the commands @samp{Dp}, @samp{DP}, and
+@samp{Dt} is illogical, but as old versions of @code{gtroff} used this
+feature it is kept for compatibility reasons.
+
+@ignore
+Temporarily, there existed some confusion on the positioning after the
+@samp{D} commands that are groff extensions.  This has been clarified by
+establishing the classical rule for all @code{groff} drawing commands:
+
+@itemize
+@item
+The position after a graphic object has been drawn is at its end; for
+circles and ellipses, the `end' is at the right side.
+
+@item
+From this, the positionings specified for the drawing commands above
+follow quite naturally.
+@end itemize
+@end ignore
+
+@end itemize
+
+
+@c =====================================================================
+
+@node Font Files,  , gtroff Output, File formats
+@section Font Files
+@cindex font files
+@cindex files, font
+
+The @code{gtroff} font format is roughly a superset of the
+@code{ditroff} font format (as used in later versions of @acronym{AT&T}
+@code{troff} and its descendants).  Unlike the @code{ditroff} font
+format, there is no associated binary format; all files are text
+files.@footnote{Plan@tie{}9 @code{troff} has also abandoned the binary
+format.}  The font files for device @var{name} are stored in a directory
+@file{dev@var{name}}.  There are two types of file: a device description
+file called @file{DESC} and for each font@tie{}@var{f} a font file
+called@tie{}@file{@var{f}}.
+
+@menu
+* DESC File Format::
+* Font File Format::
+@end menu
+
+@c ---------------------------------------------------------------------
+
+@node DESC File Format, Font File Format, Font Files, Font Files
+@subsection @file{DESC} File Format
+@cindex @file{DESC} file, format
+@cindex font description file, format
+@cindex format of font description file
+@pindex DESC@r{ file format}
+
+The @file{DESC} file can contain the following types of line.  Except
+for the @code{charset} keyword, which must comes last (if at all), the
+order of the lines is not important.  Later entries in the file,
+however, override previous values.
+
+@table @code
+@item charset
+@kindex charset
+This line and everything following in the file are ignored.  It is
+allowed for the sake of backwards compatibility.
+
+@item family @var{fam}
+@kindex family
+The default font family is @var{fam}.
+
+@item fonts @var{n} @var{F1} @var{F2} @var{F3} @dots{} @var{Fn}
+@kindex fonts
+Fonts @var{F1} @dots{} @var{Fn} are mounted in the font positions
+@var{m}+1, @dots{}, @var{m}+@var{n} where @var{m} is the number of
+styles.  This command may extend over more than one line.  A font name
+of@tie{}0 means no font is mounted on the corresponding font position.
+
+@item hor @var{n}
+@kindex hor
+@cindex horizontal resolution
+@cindex resolution, horizontal
+The horizontal resolution is @var{n}@tie{}machine units.  All horizontal
+quantities are rounded to be multiples of this value.
+
+@item image_generator @var{string}
+@kindex image_generator
+@cindex PostScript, PNG image generation
+@cindex PNG image generation from PostScript
+Needed for @code{grohtml} only.  It specifies the program to generate
+PNG images from @sc{PostScript} input.  Under GNU/Linux this is
+usually @code{gs} but under other systems (notably cygwin) it might
+be set to another name.
+
+@item paperlength @var{n}
+@kindex paperlength
+The physical vertical dimension of the output medium in machine units.
+This isn't used by @code{troff} itself but by output devices.
+Deprecated.  Use @code{papersize} instead.
+
+@item papersize @var{string} @dots{}
+@kindex papersize
+Select a paper size.  Valid values for @var{string} are the ISO paper
+types @code{A0}-@code{A7}, @code{B0}-@code{B7}, @code{C0}-@code{C7},
+@code{D0}-@code{D7}, @code{DL}, and the US paper types @code{letter},
+@code{legal}, @code{tabloid}, @code{ledger}, @code{statement},
+@code{executive}, @code{com10}, and @code{monarch}.  Case is not
+significant for @var{string} if it holds predefined paper types.
+Alternatively, @var{string} can be a file name (e.g.@:
+@file{/etc/papersize}); if the file can be opened, @code{groff} reads
+the first line and tests for the above paper sizes.  Finally,
+@var{string} can be a custom paper size in the format
+@code{@var{length},@var{width}} (no spaces before and after the comma).
+Both @var{length} and @var{width} must have a unit appended; valid
+values are @samp{i} for inches, @samp{C} for centimeters, @samp{p} for
+points, and @samp{P} for picas.  Example: @code{12c,235p}.  An argument
+that starts with a digit is always treated as a custom paper format.
+@code{papersize} sets both the vertical and horizontal dimension of the
+output medium.
+
+More than one argument can be specified; @code{groff} scans from left to
+right and uses the first valid paper specification.
+
+@item paperwidth @var{n}
+@kindex paperwidth
+The physical horizontal dimension of the output medium in machine units.
+This isn't used by @code{troff} itself but by output devices.
+Deprecated.  Use @code{papersize} instead.
+
+@item pass_filenames
+@kindex pass_filenames
+Tell @code{gtroff} to emit the name of the source file currently being
+processed.  This is achieved by the intermediate output command
+@samp{F}.  Currently, this is only used by the @code{grohtml} output
+device.
+
+@item postpro @var{program}
+@kindex postpro
+Call @var{program} as a postprocessor.  For example, the line
+
+@Example
+postpro grodvi
+@endExample
+
+@noindent
+in the file @file{devdvi/DESC} makes @code{groff} call @code{grodvi} if
+option @option{-Tdvi} is given (and @option{-Z} isn't used).
+
+@item prepro @var{program}
+@kindex prepro
+Call @var{program} as a preprocessor.  Currently, this keyword is used
+by @code{groff} with option @option{-Thtml} or @option{-Txhtml} only.
+
+@item print @var{program}
+@kindex print
+Use @var{program} as a spooler program for printing.  If omitted, the
+@option{-l} and @option{-L} options of @code{groff} are ignored.
+
+@item res @var{n}
+@kindex res
+@cindex device resolution
+@cindex resolution, device
+There are @var{n}@tie{}machine units per inch.
+
+@item sizes @var{s1} @var{s2} @dots{} @var{sn} 0
+@kindex sizes
+This means that the device has fonts at @var{s1}, @var{s2}, @dots{}
+@var{sn} scaled points.  The list of sizes must be terminated by@tie{}0
+(this is digit zero).  Each @var{si} can also be a range of sizes
+@var{m}-@var{n}.  The list can extend over more than one line.
+
+@item sizescale @var{n}
+@kindex sizescale
+The scale factor for point sizes.  By default this has a value
+of@tie{}1.  One scaled point is equal to one point/@var{n}.  The
+arguments to the @code{unitwidth} and @code{sizes} commands are given in
+scaled points.  @xref{Fractional Type Sizes}, for more information.
+
+@item styles @var{S1} @var{S2} @dots{} @var{Sm}
+@kindex styles
+The first @var{m}@tie{}font positions are associated with styles
+@var{S1} @dots{} @var{Sm}.
+
+@item tcommand
+@kindex tcommand
+This means that the postprocessor can handle the @samp{t} and @samp{u}
+intermediate output commands.
+
+@item unicode
+@kindex unicode
+Indicate that the output device supports the complete Unicode
+repertoire.  Useful only for devices that produce @emph{character
+entities} instead of glyphs.
+
+If @code{unicode} is present, no @code{charset} section is required in
+the font description files since the Unicode handling built into
+@code{groff} is used.  However, if there are entries in a @code{charset}
+section, they either override the default mappings for those particular
+characters or add new mappings (normally for composite characters).
+
+This is used for @option{-Tutf8}, @option{-Thtml}, and @option{-Txhtml}.
+
+@item unitwidth @var{n}
+@kindex unitwidth
+Quantities in the font files are given in machine units for fonts whose
+point size is @var{n}@tie{}scaled points.
+
+@item unscaled_charwidths
+@kindex unscaled_charwidths
+Make the font handling module always return unscaled character widths.
+Needed for the @code{grohtml} device.
+
+@item use_charnames_in_special
+@kindex use_charnames_in_special
+This command indicates that @code{gtroff} should encode special
+characters inside special commands.  Currently, this is only used by the
+@code{grohtml} output device.  @xref{Postprocessor Access}.
+
+@item vert @var{n}
+@kindex vert
+@cindex vertical resolution
+@cindex resolution, vertical
+The vertical resolution is @var{n}@tie{}machine units.  All vertical
+quantities are rounded to be multiples of this value.
+@end table
+
+The @code{res}, @code{unitwidth}, @code{fonts}, and @code{sizes} lines
+are mandatory.  Other commands are ignored by @code{gtroff} but may be
+used by postprocessors to store arbitrary information about the device
+in the @file{DESC} file.
+
+@kindex spare1
+@kindex spare2
+@kindex biggestfont
+Here a list of obsolete keywords that are recognized by @code{groff}
+but completely ignored: @code{spare1}, @code{spare2},
+@code{biggestfont}.
+
+@c ---------------------------------------------------------------------
+
+@node Font File Format,  , DESC File Format, Font Files
+@subsection Font File Format
+@cindex font file, format
+@cindex font description file, format
+@cindex format of font files
+@cindex format of font description files
+
+A @dfn{font file}, also (and probably better) called a @dfn{font
+description file}, has two sections.  The first section is a sequence of
+lines each containing a sequence of blank delimited words; the first
+word in the line is a key, and subsequent words give a value for that
+key.
+
+@table @code
+@item name @var{f}
+@kindex name
+The name of the font is@tie{}@var{f}.
+
+@item spacewidth @var{n}
+@kindex spacewidth
+The normal width of a space is@tie{}@var{n}.
+
+@item slant @var{n}
+@kindex slant
+The glyphs of the font have a slant of @var{n}@tie{}degrees.  (Positive
+means forward.)
+
+@item ligatures @var{lig1} @var{lig2} @dots{} @var{lign} [0]
+@kindex ligatures
+Glyphs @var{lig1}, @var{lig2}, @dots{}, @var{lign} are ligatures;
+possible ligatures are @samp{ff}, @samp{fi}, @samp{fl}, @samp{ffi} and
+@samp{ffl}.  For backwards compatibility, the list of ligatures may be
+terminated with a@tie{}0.  The list of ligatures may not extend over
+more than one line.
+
+@item special
+@cindex special fonts
+@kindex special
+The font is @dfn{special}; this means that when a glyph is requested
+that is not present in the current font, it is searched for in any
+special fonts that are mounted.
+@end table
+
+Other commands are ignored by @code{gtroff} but may be used by
+postprocessors to store arbitrary information about the font in the font
+file.
+
+@cindex comments in font files
+@cindex font files, comments
+@kindex #
+The first section can contain comments, which start with the @samp{#}
+character and extend to the end of a line.
+
+The second section contains one or two subsections.  It must contain a
+@code{charset} subsection and it may also contain a @code{kernpairs}
+subsection.  These subsections can appear in any order.  Each subsection
+starts with a word on a line by itself.
+
+@kindex charset
+The word @code{charset} starts the character set
+subsection.@footnote{This keyword is misnamed since it starts a list of
+ordered glyphs, not characters.}  The @code{charset} line is followed by
+a sequence of lines.  Each line gives information for one glyph.  A line
+comprises a number of fields separated by blanks or tabs.  The format is
+
+@quotation
+@var{name} @var{metrics} @var{type} @var{code} [@var{entity-name}]
+[@code{--} @var{comment}]
+@end quotation
+
+@cindex 8-bit input
+@cindex input, 8-bit
+@cindex accessing unnamed glyphs with @code{\N}
+@cindex unnamed glyphs, accessing with @code{\N}
+@cindex characters, unnamed, accessing with @code{\N}
+@cindex glyphs, unnamed, accessing with @code{\N}
+@kindex ---
+@noindent
+@var{name} identifies the glyph name@footnote{The distinction between
+input, characters, and output, glyphs, is not clearly separated in the
+terminology of @code{groff}; for example, the @code{char} request should
+be called @code{glyph} since it defines an output entity.}: If
+@var{name} is a single character@tie{}@var{c} then it corresponds to the
+@code{gtroff} input character@tie{}@var{c}; if it is of the form
+@samp{\@var{c}} where @var{c} is a single character, then it corresponds
+to the special character @code{\[@var{c}]}; otherwise it corresponds to
+the special character @samp{\[@var{name}]}.  If it is exactly two
+characters @var{xx} it can be entered as @samp{\(@var{xx}}.  Note that
+single-letter special characters can't be accessed as @samp{\@var{c}};
+the only exception is @samp{\-}, which is identical to @code{\[-]}.
+
+@code{gtroff} supports 8-bit input characters; however some utilities
+have difficulties with eight-bit characters.  For this reason, there is
+a convention that the entity name @samp{char@var{n}} is equivalent to
+the single input character whose code is@tie{}@var{n}.  For example,
+@samp{char163} would be equivalent to the character with code@tie{}163,
+which is the pounds sterling sign in the ISO@tie{}@w{Latin-1} character
+set.  You shouldn't use @samp{char@var{n}} entities in font description
+files since they are related to input, not output.  Otherwise, you get
+hard-coded connections between input and output encoding, which prevents
+use of different (input) character sets.
+
+The name @samp{---} is special and indicates that the glyph is unnamed;
+such glyphs can only be used by means of the @code{\N} escape sequence
+in @code{gtroff}.
+
+The @var{type} field gives the glyph type:
+
+@table @code
+@item 1
+the glyph has a descender, for example, @samp{p};
+
+@item 2
+the glyph has an ascender, for example, @samp{b};
+
+@item 3
+the glyph has both an ascender and a descender, for example, @samp{(}.
+@end table
+
+The @var{code} field gives the code that the postprocessor uses to
+print the glyph.  The glyph can also be input to @code{gtroff} using
+this code by means of the @code{\N} escape sequence.  @var{code} can be
+any integer.  If it starts with @samp{0} it is interpreted as octal; if
+it starts with @samp{0x} or @samp{0X} it is interpreted as hexadecimal.
+Note, however, that the @code{\N} escape sequence only accepts a decimal
+integer.
+
+The @var{entity-name} field gives an @acronym{ASCII} string identifying
+the glyph that the postprocessor uses to print the @code{gtroff} glyph
+@var{name}.  This field is optional and has been introduced so that the
+@code{grohtml} device driver can encode its character set.  For example,
+the glyph @samp{\[Po]} is represented as @samp{&pound;} in
+@acronym{HTML} 4.0.
+
+Anything on the line after the @var{entity-name} field resp.@: after
+@samp{--} is ignored.
+
+The @var{metrics} field has the form:
+
+@display
+@group
+@var{width}[@code{,}@var{height}[@code{,}@var{depth}[@code{,}@var{italic-correction}
+  [@code{,}@var{left-italic-correction}[@code{,}@var{subscript-correction}]]]]]
+@end group
+@end display
+
+@noindent
+There must not be any spaces between these subfields (it has been split
+here into two lines for better legibility only).  Missing subfields are
+assumed to be@tie{}0.  The subfields are all decimal integers.  Since
+there is no associated binary format, these values are not required to
+fit into a variable of type @samp{char} as they are in @code{ditroff}.
+The @var{width} subfield gives the width of the glyph.  The @var{height}
+subfield gives the height of the glyph (upwards is positive); if a glyph
+does not extend above the baseline, it should be given a zero height,
+rather than a negative height.  The @var{depth} subfield gives the depth
+of the glyph, that is, the distance from the baseline to the lowest
+point below the baseline to which the glyph extends (downwards is
+positive); if a glyph does not extend below the baseline, it should be
+given a zero depth, rather than a negative depth.  The
+@var{italic-correction} subfield gives the amount of space that should
+be added after the glyph when it is immediately to be followed by a
+glyph from a roman font.  The @var{left-italic-correction} subfield
+gives the amount of space that should be added before the glyph when it
+is immediately to be preceded by a glyph from a roman font.  The
+@var{subscript-correction} gives the amount of space that should be
+added after a glyph before adding a subscript.  This should be less than
+the italic correction.
+
+A line in the @code{charset} section can also have the format
+
+@Example
+@var{name} "
+@endExample
+
+@noindent
+This indicates that @var{name} is just another name for the glyph
+mentioned in the preceding line.
+
+@kindex kernpairs
+The word @code{kernpairs} starts the kernpairs section.  This contains a
+sequence of lines of the form:
+
+@Example
+@var{c1} @var{c2} @var{n}
+@endExample
+
+@noindent
+This means that when glyph @var{c1} appears next to glyph @var{c2} the
+space between them should be increased by@tie{}@var{n}.  Most entries in
+the kernpairs section have a negative value for@tie{}@var{n}.
+
+
+
+@c =====================================================================
+@c =====================================================================
+
+@node Installation, Copying This Manual, File formats, Top
+@chapter Installation
+@cindex installation
+
+@c XXX
+
+
+
+@c =====================================================================
+@c =====================================================================
+
+@node Copying This Manual, Request Index, Installation, Top
+@appendix Copying This Manual
+
+@include fdl.texi
+
+
+
+@c =====================================================================
+@c =====================================================================
+
+@node Request Index, Escape Index, Copying This Manual, Top
+@appendix Request Index
+
+Requests appear without the leading control character (normally either
+@samp{.} or @samp{'}).
+
+@printindex rq
+
+
+
+@c =====================================================================
+@c =====================================================================
+
+@node Escape Index, Operator Index, Request Index, Top
+@appendix Escape Index
+
+Any escape sequence @code{\@var{X}} with @var{X} not in the list below
+emits a warning, printing glyph @var{X}.
+
+@printindex es
+
+
+
+@c =====================================================================
+@c =====================================================================
+
+@node Operator Index, Register Index, Escape Index, Top
+@appendix Operator Index
+
+@printindex op
+
+
+
+@c =====================================================================
+@c =====================================================================
+
+@node Register Index, Macro Index, Operator Index, Top
+@appendix Register Index
+
+The macro package or program a specific register belongs to is appended in
+brackets.
+
+A register name@tie{}@code{x} consisting of exactly one character can be
+accessed as @samp{\nx}.  A register name @code{xx} consisting of exactly
+two characters can be accessed as @samp{\n(xx}.  Register names
+@code{xxx} of any length can be accessed as @samp{\n[xxx]}.
+
+@printindex vr
+
+
+
+@c =====================================================================
+@c =====================================================================
+
+@node Macro Index, String Index, Register Index, Top
+@appendix Macro Index
+
+The macro package a specific macro belongs to is appended in brackets.
+They appear without the leading control character (normally @samp{.}).
+
+@printindex ma
+
+
+
+@c =====================================================================
+@c =====================================================================
+
+@node String Index, Glyph Name Index, Macro Index, Top
+@appendix String Index
+
+The macro package or program a specific string belongs to is appended in
+brackets.
+
+A string name@tie{}@code{x} consisting of exactly one character can be
+accessed as @samp{\*x}.  A string name @code{xx} consisting of exactly
+two characters can be accessed as @samp{\*(xx}.  String names @code{xxx}
+of any length can be accessed as @samp{\*[xxx]}.
+
+
+@printindex st
+
+
+
+@c =====================================================================
+@c =====================================================================
+
+@node Glyph Name Index, Font File Keyword Index, String Index, Top
+@appendix Glyph Name Index
+
+A glyph name @code{xx} consisting of exactly two characters can be
+accessed as @samp{\(xx}.  Glyph names @code{xxx} of any length can be
+accessed as @samp{\[xxx]}.
+
+@c XXX
+
+
+
+@c =====================================================================
+@c =====================================================================
+
+@node Font File Keyword Index, Program and File Index, Glyph Name Index, Top
+@appendix Font File Keyword Index
+
+@printindex ky
+
+
+
+@c =====================================================================
+@c =====================================================================
+
+@node Program and File Index, Concept Index, Font File Keyword Index, Top
+@appendix Program and File Index
+
+@printindex pg
+
+
+
+@c =====================================================================
+@c =====================================================================
+
+@node Concept Index,  , Program and File Index, Top
+@appendix Concept Index
+
+@printindex cp
+
+
+@bye
+
+@c Local Variables:
+@c mode: texinfo
+@c coding: latin-1
+@c End:
diff -Nuar groff-1.22.3.old/doc/groff.texinfo groff-1.22.3/doc/groff.texinfo
--- groff-1.22.3.old/doc/groff.texinfo	2014-11-04 10:38:35.560519809 +0200
+++ groff-1.22.3/doc/groff.texinfo	1970-01-01 02:00:00.000000000 +0200
@@ -1,17157 +0,0 @@
-\input texinfo
-
-@c
-@c Please convert this manual with `texi2dvi -e groff.texinfo' due to
-@c problems in texinfo regarding expansion of user-defined macros.
-@c
-@c You need texinfo 4.8 or newer to format this document!
-@c
-
-@c %**start of header (This is for running Texinfo on a region.)
-@setfilename groff.info
-@settitle The GNU Troff Manual
-@setchapternewpage odd
-@footnotestyle separate
-@c %**end of header (This is for running Texinfo on a region.)
-
-@documentlanguage en
-@documentencoding ISO-8859-1
-
-
-@smallbook
-
-@finalout
-
-
-@copying
-This manual documents GNU @code{troff} version 1.22.3.
-
-Copyright @copyright{} 1994-2014 Free Software Foundation, Inc.
-
-@quotation
-Permission is granted to copy, distribute and/or modify this document
-under the terms of the GNU Free Documentation License, Version 1.3 or
-any later version published by the Free Software Foundation; with no
-Invariant Sections, with the Front-Cover texts being ``A GNU Manual,''
-and with the Back-Cover Texts as in (a) below.  A copy of the license is
-included in the section entitled ``GNU Free Documentation License.''
-
-(a) The FSF's Back-Cover Text is: ``You have the freedom to copy and
-modify this GNU manual.  Buying copies from the FSF supports it in
-developing GNU and promoting software freedom.''
-@end quotation
-@end copying
-
-
-@c We use the following indices:
-@c
-@c   cindex: concepts
-@c   rqindex: requests
-@c   esindex: escapes
-@c   vindex: registers
-@c   kindex: commands in font files
-@c   pindex: programs and files
-@c   tindex: environment variables
-@c   maindex: macros
-@c   stindex: strings
-@c   opindex: operators
-@c
-@c tindex and cindex are merged.
-
-@defcodeindex rq
-@defcodeindex es
-@defcodeindex ma
-@defcodeindex st
-@defcodeindex op
-@syncodeindex tp cp
-
-
-@c To avoid uppercasing in @deffn while converting to info, we define
-@c our special @Var{}.
-
-@macro Var{arg}
-@r{@slanted{\arg\}}
-@end macro
-
-
-@c To assure correct HTML translation, some ugly hacks are necessary.
-@c While processing a @def... request, the HTML translator looks at the
-@c next line to decide whether to start indentation, and if the line
-@c starts with @def... (e.g. @deffnx), indentation is started.  We must
-@c therefore ensure that a @def... is seen, during macro expansion.
-@c
-@c The following macros have to be used:
-@c
-@c One item:
-@c
-@c   @Def...
-@c
-@c Two items:
-@c
-@c   @Def...List
-@c   @Def...ListEnd
-@c
-@c More than two:
-@c
-@c   @Def...List
-@c   @Def...Item
-@c   @Def...Item
-@c   ...
-@c   @Def...ListEnd
-@c
-@c The definition block must end with
-@c
-@c   @endDef...
-@c
-@c The above is valid for texinfo 4.0f and above.
-@c
-@c By default, only the first item generates an index entry.  To
-@c override this, use a variant with a trailing `x' (like
-@c `@DefmacItemx').
-
-
-@c a dummy macro to assure the `@def...'
-
-@macro defdummy
-@c
-@end macro
-
-
-@c definition of requests
-
-@macro Defreq{name, arg}
-@deffn Request @t{.\name\} \arg\
-@rqindex \name\
-@c
-@end macro
-
-@macro DefreqList{name, arg}
-@deffn Request @t{.\name\} \arg\
-@defdummy
-@rqindex \name\
-@c
-@end macro
-
-@macro DefreqItem{name, arg}
-@deffnx Request @t{.\name\} \arg\
-@defdummy
-@c
-@end macro
-
-@macro DefreqItemx{name, arg}
-@deffnx Request @t{.\name\} \arg\
-@defdummy
-@rqindex \name\
-@c
-@end macro
-
-@macro DefreqListEnd{name, arg}
-@deffnx Request @t{.\name\} \arg\
-@c
-@end macro
-
-@macro DefreqListEndx{name, arg}
-@deffnx Request @t{.\name\} \arg\
-@rqindex \name\
-@c
-@end macro
-
-@macro endDefreq
-@end deffn
-@end macro
-
-
-@c definition of escapes
-
-@macro Defesc{name, delimI, arg, delimII}
-@deffn Escape @t{\name\\delimI\}@Var{\arg\}@t{\delimII\}
-@esindex \name\
-@c
-@end macro
-
-@macro DefescList{name, delimI, arg, delimII}
-@deffn Escape @t{\name\\delimI\}@Var{\arg\}@t{\delimII\}
-@defdummy
-@esindex \name\
-@c
-@end macro
-
-@macro DefescItem{name, delimI, arg, delimII}
-@deffnx Escape @t{\name\\delimI\}@Var{\arg\}@t{\delimII\}
-@defdummy
-@c
-@end macro
-
-@macro DefescItemx{name, delimI, arg, delimII}
-@deffnx Escape @t{\name\\delimI\}@Var{\arg\}@t{\delimII\}
-@defdummy
-@esindex \name\
-@c
-@end macro
-
-@macro DefescListEnd{name, delimI, arg, delimII}
-@deffnx Escape @t{\name\\delimI\}@Var{\arg\}@t{\delimII\}
-@c
-@end macro
-
-@macro DefescListEndx{name, delimI, arg, delimII}
-@deffnx Escape @t{\name\\delimI\}@Var{\arg\}@t{\delimII\}
-@esindex \name\
-@c
-@end macro
-
-@macro endDefesc
-@end deffn
-@end macro
-
-
-@c definition of registers
-
-@macro Defreg{name}
-@deffn Register @t{\\n[\name\]}
-@vindex \name\
-@c
-@end macro
-
-@macro DefregList{name}
-@deffn Register @t{\\n[\name\]}
-@defdummy
-@vindex \name\
-@c
-@end macro
-
-@macro DefregItem{name}
-@deffnx Register @t{\\n[\name\]}
-@defdummy
-@c
-@end macro
-
-@macro DefregItemx{name}
-@deffnx Register @t{\\n[\name\]}
-@defdummy
-@vindex \name\
-@c
-@end macro
-
-@macro DefregListEnd{name}
-@deffnx Register @t{\\n[\name\]}
-@c
-@end macro
-
-@macro DefregListEndx{name}
-@deffnx Register @t{\\n[\name\]}
-@vindex \name\
-@c
-@end macro
-
-@macro endDefreg
-@end deffn
-@end macro
-
-
-@c definition of registers specific to macro packages, preprocessors, etc.
-
-@macro Defmpreg{name, package}
-@deffn Register @t{\\n[\name\]}
-@vindex \name\ @r{[}\package\@r{]}
-@c
-@end macro
-
-@macro DefmpregList{name, package}
-@deffn Register @t{\\n[\name\]}
-@defdummy
-@vindex \name\ @r{[}\package\@r{]}
-@c
-@end macro
-
-@macro DefmpregItem{name, package}
-@deffnx Register @t{\\n[\name\]}
-@defdummy
-@c
-@end macro
-
-@macro DefmpregItemx{name, package}
-@deffnx Register @t{\\n[\name\]}
-@defdummy
-@vindex \name\ @r{[}\package\@r{]}
-@c
-@end macro
-
-@macro DefmpregListEnd{name, package}
-@deffnx Register @t{\\n[\name\]}
-@c
-@end macro
-
-@macro DefmpregListEndx{name, package}
-@deffnx Register @t{\\n[\name\]}
-@vindex \name\ @r{[}\package\@r{]}
-@c
-@end macro
-
-@macro endDefmpreg
-@end deffn
-@end macro
-
-
-@c definition of macros
-
-@macro Defmac{name, arg, package}
-@defmac @t{.\name\} \arg\
-@maindex \name\ @r{[}\package\@r{]}
-@c
-@end macro
-
-@macro DefmacList{name, arg, package}
-@defmac @t{.\name\} \arg\
-@defdummy
-@maindex \name\ @r{[}\package\@r{]}
-@c
-@end macro
-
-@macro DefmacItem{name, arg, package}
-@defmacx @t{.\name\} \arg\
-@defdummy
-@c
-@end macro
-
-@macro DefmacItemx{name, arg, package}
-@defmacx @t{.\name\} \arg\
-@defdummy
-@maindex \name\ @r{[}\package\@r{]}
-@c
-@end macro
-
-@macro DefmacListEnd{name, arg, package}
-@defmacx @t{.\name\} \arg\
-@c
-@end macro
-
-@macro DefmacListEndx{name, arg, package}
-@defmacx @t{.\name\} \arg\
-@maindex \name\ @r{[}\package\@r{]}
-@c
-@end macro
-
-@macro endDefmac
-@end defmac
-@end macro
-
-
-@c definition of strings
-
-@macro Defstr{name, package}
-@deffn String @t{\\*[\name\]}
-@stindex \name\ @r{[}\package\@r{]}
-@c
-@end macro
-
-@macro DefstrList{name, package}
-@deffn String @t{\\*[\name\]}
-@defdummy
-@stindex \name\ @r{[}\package\@r{]}
-@c
-@end macro
-
-@macro DefstrItem{name, package}
-@deffnx String @t{\\*[\name\]}
-@defdummy
-@c
-@end macro
-
-@macro DefstrItemx{name, package}
-@deffnx String @t{\\*[\name\]}
-@defdummy
-@stindex \name\ @r{[}\package\@r{]}
-@c
-@end macro
-
-@macro DefstrListEnd{name, package}
-@deffnx String @t{\\*[\name\]}
-@c
-@end macro
-
-@macro DefstrListEndx{name, package}
-@deffnx String @t{\\*[\name\]}
-@stindex \name\ @r{[}\package\@r{]}
-@c
-@end macro
-
-@macro endDefstr
-@end deffn
-@end macro
-
-
-@c our example macros
-
-@macro Example
-@example
-@group
-@end macro
-
-@macro endExample
-@end group
-@end example
-@end macro
-
-@macro CartoucheExample
-@cartouche
-@example
-@end macro
-
-@macro endCartoucheExample
-@end example
-@end cartouche
-@end macro
-
-
-@c <text>
-
-@tex
-\gdef\Langlemacro{\angleleft}
-\gdef\Ranglemacro{\angleright}
-@end tex
-
-@iftex
-@set Langlemacro @Langlemacro
-@set Ranglemacro @Ranglemacro
-@end iftex
-
-@ifnottex
-@set Langlemacro <
-@set Ranglemacro >
-@end ifnottex
-
-@macro angles{text}
-@value{Langlemacro}@r{\text\}@value{Ranglemacro}
-@end macro
-
-
-@c a <= sign
-@c
-@c Since expansion of macros has changed between texinfo 4.x and 5.x,
-@c we can't define a macro but have to use @value directly.
-
-@tex
-\gdef\LE{\le}
-@end tex
-
-@iftex
-@set LE @LE
-@end iftex
-
-@ifnottex
-@set LE <=
-@end ifnottex
-
-
-@c Special care is required with parentheses, brackets, and braces:
-@c
-@c . Real parentheses in @deffn produce an error while compiling with
-@c   TeX.
-@c . Real brackets use the wrong font in @deffn, overriding @t{}.
-@c
-@c . @{ and @} fail with info if used in a macro.
-@c
-@c Since macros aren't expanded in @deffn during -E, the following
-@c definitions are for non-TeX only.
-@c
-@c This is true for texinfo 4.0 and above.
-
-@iftex
-@set Lparenmacro @lparen
-@set Rparenmacro @rparen
-@set Lbrackmacro @lbrack
-@set Rbrackmacro @rbrack
-@set Lbracemacro @{
-@set Rbracemacro @}
-@end iftex
-
-@ifnottex
-@set Lparenmacro (
-@set Rparenmacro )
-@set Lbrackmacro [
-@set Rbrackmacro ]
-@set Lbracemacro @{
-@set Rbracemacro @}
-@end ifnottex
-
-@macro Lparen{}
-@value{Lparenmacro}
-@end macro
-@macro Rparen{}
-@value{Rparenmacro}
-@end macro
-@macro Lbrack{}
-@value{Lbrackmacro}
-@end macro
-@macro Rbrack{}
-@value{Rbrackmacro}
-@end macro
-@macro Lbrace{}
-@value{Lbracemacro}
-@end macro
-@macro Rbrace{}
-@value{Rbracemacro}
-@end macro
-
-
-@c This suppresses the word `Appendix' in the appendix headers.
-
-@tex
-\gdef\gobblefirst#1#2{#2}
-\gdef\putwordAppendix{\gobblefirst}
-@end tex
-
-
-@c We map some latin-1 characters to corresponding texinfo macros.
-@c Newer versions of texinfo.tex have similar code included already.
-
-@tex
-\global\catcode`^^e4\active % �
-\gdef^^e4{\"a}
-\global\catcode`^^c4\active % �
-\gdef^^c4{\"A}
-\global\catcode`^^e9\active % �
-\gdef^^e9{\'e}
-\global\catcode`^^c9\active % �
-\gdef^^c9{\'E}
-\global\catcode`^^f6\active % �
-\gdef^^f6{\"o}
-\global\catcode`^^d6\active % �
-\gdef^^d6{\"O}
-\global\catcode`^^fc\active % �
-\gdef^^fc{\"u}
-\global\catcode`^^dc\active % �
-\gdef^^dc{\"U}
-\global\catcode`^^e6\active % �
-\gdef^^e6{\ae}
-\global\catcode`^^c6\active % �
-\gdef^^c6{\AE}
-\global\catcode`^^df\active % �
-\gdef^^df{\ss}
-@end tex
-
-
-@c Note: We say `Roman numerals' but `roman font'.
-
-
-@dircategory Typesetting
-@direntry
-* Groff: (groff).               The GNU troff document formatting system.
-@end direntry
-
-
-@titlepage
-@title groff
-@subtitle The GNU implementation of @code{troff}
-@subtitle Edition 1.22.3
-@subtitle Autumn 2014
-@author by Trent A.@tie{}Fisher
-@author and Werner Lemberg (@email{bug-groff@@gnu.org})
-
-@page
-@vskip 0pt plus 1filll
-@insertcopying
-@end titlepage
-
-@contents
-
-@ifnottex
-@node Top, Introduction, (dir), (dir)
-@top GNU troff
-@end ifnottex
-
-@menu
-* Introduction::
-* Invoking groff::
-* Tutorial for Macro Users::
-* Macro Packages::
-* gtroff Reference::
-* Preprocessors::
-* Output Devices::
-* File formats::
-* Installation::
-* Copying This Manual::
-* Request Index::
-* Escape Index::
-* Operator Index::
-* Register Index::
-* Macro Index::
-* String Index::
-* Glyph Name Index::
-* Font File Keyword Index::
-* Program and File Index::
-* Concept Index::
-@end menu
-
-@ifnottex
-@insertcopying
-@end ifnottex
-
-
-
-@c =====================================================================
-@c =====================================================================
-
-@node Introduction, Invoking groff, Top, Top
-@chapter Introduction
-@cindex introduction
-
-GNU @code{troff} (or @code{groff}) is a system for typesetting
-documents.  @code{troff} is very flexible and has been used extensively
-for some thirty years.  It is well entrenched in the @acronym{UNIX}
-community.
-
-@menu
-* What Is groff?::
-* History::
-* groff Capabilities::
-* Macro Package Intro::
-* Preprocessor Intro::
-* Output device intro::
-* Credits::
-@end menu
-
-
-@c =====================================================================
-
-@node What Is groff?, History, Introduction, Introduction
-@section What Is @code{groff}?
-@cindex what is @code{groff}?
-@cindex @code{groff} -- what is it?
-
-@code{groff} belongs to an older generation of document preparation
-systems, which operate more like compilers than the more recent
-interactive @acronym{WYSIWYG}@footnote{What You See Is What You Get}
-systems.  @code{groff} and its contemporary counterpart, @TeX{}, both
-work using a @dfn{batch} paradigm: The input (or @dfn{source}) files are
-normal text files with embedded formatting commands.  These files can
-then be processed by @code{groff} to produce a typeset document on a
-variety of devices.
-
-@code{groff} should not be confused with a @dfn{word processor}, an
-integrated system of editor and text formatter.  Also, many word
-processors follow the @acronym{WYSIWYG} paradigm discussed earlier.
-
-Although @acronym{WYSIWYG} systems may be easier to use, they have a
-number of disadvantages compared to @code{troff}:
-
-@itemize @bullet
-@item
-They must be used on a graphics display to work on a document.
-
-@item
-Most of the @acronym{WYSIWYG} systems are either non-free or are not
-very portable.
-
-@item
-@code{troff} is firmly entrenched in all @acronym{UNIX} systems.
-
-@item
-It is difficult to have a wide range of capabilities within the confines
-of a GUI/window system.
-
-@item
-It is more difficult to make global changes to a document.
-@end itemize
-
-@quotation
-``GUIs normally make it simple to accomplish simple actions and
-impossible to accomplish complex actions.''  --Doug Gwyn (22/Jun/91 in
-@code{comp.unix.wizards})
-@end quotation
-
-
-@c =====================================================================
-
-@node History, groff Capabilities, What Is groff?, Introduction
-@section History
-@cindex history
-
-@cindex @code{RUNOFF}, the program
-@cindex @code{rf}, the program
-@code{troff} can trace its origins back to a formatting program called
-@code{RUNOFF}, written by Jerry Saltzer, which ran on the @acronym{CTSS}
-(@emph{Compatible Time Sharing System}, a project of MIT, the
-Massachusetts Institute of Technology) in the
-mid-sixties.@footnote{Jerome H.@: Saltzer, a grad student then, later a
-Professor of Electrical Engineering, now retired.  Saltzer's PhD thesis
-was the first application for @code{RUNOFF} and is available from the
-MIT Libraries.}  The name came from the use of the phrase ``run off a
-document'', meaning to print it out.
-@c
-@c Tom Van Vleck <thvv@multicians.org> writes about the following:
-@c
-@c I am not sure about this.. I think the BCPL runoff was the port to
-@c the 635 architecture, and that the order of events is
-@c 1. CTSS runoff
-@c 2. BCPL runoff on Multics
-@c 3. BCPL runoff on 635
-@c 4. rf on PDP-7
-@c
-Bob Morris ported it to the 635 architecture and called the program
-@code{roff} (an abbreviation of @code{runoff}).  It was rewritten as
-@code{rf} for the @w{PDP-7} (before having @acronym{UNIX}), and at the
-same time (1969), Doug McIllroy rewrote an extended and simplified
-version of @code{roff} in the @acronym{BCPL} programming language.
-
-@cindex @code{roff}, the program
-In 1971, the UNIX developers wanted to get a @w{PDP-11}, and to justify
-the cost, proposed the development of a document formatting system for
-the @acronym{AT&T} patents division.  This first formatting program was
-a reimplementation of McIllroy's @code{roff}, written by J.@tie{}F.@:
-Ossanna.
-
-@cindex @code{nroff}, the program
-When they needed a more flexible language, a new version of @code{roff}
-called @code{nroff} (``Newer @code{roff}'') was written.  It had a much
-more complicated syntax, but provided the basis for all future versions.
-When they got a Graphic Systems CAT Phototypesetter, Ossanna wrote a
-version of @code{nroff} that would drive it.  It was dubbed
-@code{troff}, for ``typesetter @code{roff}'', although many people have
-speculated that it actually means ``Times @code{roff}'' because of the
-use of the Times font family in @code{troff} by default.  As such, the
-name @code{troff} is pronounced `@w{t-roff}' rather than `trough'.
-
-With @code{troff} came @code{nroff} (they were actually the same program
-except for some @samp{#ifdef}s), which was for producing output for line
-printers and character terminals.  It understood everything @code{troff}
-did, and ignored the commands that were not applicable (e.g.@: font
-changes).
-
-Since there are several things that cannot be done easily in
-@code{troff}, work on several preprocessors began.  These programs would
-transform certain parts of a document into @code{troff}, which made a
-very natural use of pipes in @acronym{UNIX}.
-
-The @code{eqn} preprocessor allowed mathematical formul� to be specified
-in a much simpler and more intuitive manner.  @code{tbl} is a
-preprocessor for formatting tables.  The @code{refer} preprocessor (and
-the similar program, @code{bib}) processes citations in a document
-according to a bibliographic database.
-
-Unfortunately, Ossanna's @code{troff} was written in @w{PDP-11} assembly
-language and produced output specifically for the CAT phototypesetter.
-He rewrote it in C, although it was now 7000@tie{}lines of uncommented
-code and still dependent on the CAT@.  As the CAT became less common, and
-was no longer supported by the manufacturer, the need to make it support
-other devices became a priority.  However, before this could be done,
-Ossanna died by a severe heart attack in a hospital while recovering
-from a previous one.
-
-@pindex ditroff
-@cindex @code{ditroff}, the program
-So, Brian Kernighan took on the task of rewriting @code{troff}.  The
-newly rewritten version produced device independent code that was very
-easy for postprocessors to read and translate to the appropriate printer
-codes.  Also, this new version of @code{troff} (called @code{ditroff}
-for ``device independent @code{troff}'') had several extensions, which
-included drawing functions.
-
-Due to the additional abilities of the new version of @code{troff},
-several new preprocessors appeared.  The @code{pic} preprocessor
-provides a wide range of drawing functions.  Likewise the @code{ideal}
-preprocessor did the same, although via a much different paradigm.  The
-@code{grap} preprocessor took specifications for graphs, but, unlike
-other preprocessors, produced @code{pic} code.
-
-James Clark began work on a GNU implementation of @code{ditroff} in
-early@tie{}1989.  The first version, @code{groff}@tie{}0.3.1, was
-released June@tie{}1990.  @code{groff} included:
-
-@itemize @bullet
-@item
-A replacement for @code{ditroff} with many extensions.
-
-@item
-The @code{soelim}, @code{pic}, @code{tbl}, and @code{eqn} preprocessors.
-
-@item
-Postprocessors for character devices, @sc{PostScript}, @TeX{} DVI, and
-X@tie{}Windows.  GNU @code{troff} also eliminated the need for a
-separate @code{nroff} program with a postprocessor that would produce
-@acronym{ASCII} output.
-
-@item
-A version of the @file{me} macros and an implementation of the
-@file{man} macros.
-@end itemize
-
-Also, a front-end was included that could construct the, sometimes
-painfully long, pipelines required for all the post- and preprocessors.
-
-Development of GNU @code{troff} progressed rapidly, and saw the
-additions of a replacement for @code{refer}, an implementation of the
-@file{ms} and @file{mm} macros, and a program to deduce how to format a
-document (@code{grog}).
-
-It was declared a stable (i.e.@: non-beta) package with the release of
-version@tie{}1.04 around November@tie{}1991.
-
-Beginning in@tie{}1999, @code{groff} has new maintainers (the package
-was an orphan for a few years).  As a result, new features and programs
-like @code{grn}, a preprocessor for gremlin images, and an output device
-to produce @acronym{HTML} and @acronym{XHTML} have been added.
-
-
-@c =====================================================================
-
-@node groff Capabilities, Macro Package Intro, History, Introduction
-@section @code{groff} Capabilities
-@cindex @code{groff} capabilities
-@cindex capabilities of @code{groff}
-
-So what exactly is @code{groff} capable of doing?  @code{groff} provides
-a wide range of low-level text formatting operations.  Using these, it
-is possible to perform a wide range of formatting tasks, such as
-footnotes, table of contents, multiple columns, etc.  Here's a list of
-the most important operations supported by @code{groff}:
-
-@itemize @bullet
-@item
-text filling, adjusting, and centering
-
-@item
-hyphenation
-
-@item
-page control
-
-@item
-font and glyph size control
-
-@item
-vertical spacing (e.g.@: double-spacing)
-
-@item
-line length and indenting
-
-@item
-macros, strings, diversions, and traps
-
-@item
-number registers
-
-@item
-tabs, leaders, and fields
-
-@item
-input and output conventions and character translation
-
-@item
-overstrike, bracket, line drawing, and zero-width functions
-
-@item
-local horizontal and vertical motions and the width function
-
-@item
-three-part titles
-
-@item
-output line numbering
-
-@item
-conditional acceptance of input
-
-@item
-environment switching
-
-@item
-insertions from the standard input
-
-@item
-input/output file switching
-
-@item
-output and error messages
-@end itemize
-
-
-@c =====================================================================
-
-@node Macro Package Intro, Preprocessor Intro, groff Capabilities, Introduction
-@section Macro Packages
-@cindex macro packages
-
-Since @code{groff} provides such low-level facilities, it can be quite
-difficult to use by itself.  However, @code{groff} provides a
-@dfn{macro} facility to specify how certain routine operations
-(e.g.@tie{}starting paragraphs, printing headers and footers, etc.)@:
-should be done.  These macros can be collected together into a
-@dfn{macro package}.  There are a number of macro packages available;
-the most common (and the ones described in this manual) are @file{man},
-@file{mdoc}, @file{me}, @file{ms}, and @file{mm}.
-
-
-@c =====================================================================
-
-@node Preprocessor Intro, Output device intro, Macro Package Intro, Introduction
-@section Preprocessors
-@cindex preprocessors
-
-Although @code{groff} provides most functions needed to format a
-document, some operations would be unwieldy (e.g.@: to draw pictures).
-Therefore, programs called @dfn{preprocessors} were written that
-understand their own language and produce the necessary @code{groff}
-operations.  These preprocessors are able to differentiate their own
-input from the rest of the document via markers.
-
-To use a preprocessor, @acronym{UNIX} pipes are used to feed the output
-from the preprocessor into @code{groff}.  Any number of preprocessors
-may be used on a given document; in this case, the preprocessors are
-linked together into one pipeline.  However, with @code{groff}, the user
-does not need to construct the pipe, but only tell @code{groff} what
-preprocessors to use.
-
-@code{groff} currently has preprocessors for producing tables
-(@code{tbl}), typesetting equations (@code{eqn}), drawing pictures
-(@code{pic} and @code{grn}), processing bibliographies
-(@code{refer}), and drawing chemical structures (@code{chem}).  An
-associated program that is useful when dealing with preprocessors is
-@code{soelim}.
-
-A free implementation of @code{grap}, a preprocessor for drawing graphs,
-can be obtained as an extra package; @code{groff} can use @code{grap}
-also.
-
-Unique to @code{groff} is the @code{preconv} preprocessor that enables
-@code{groff} to handle documents in various input encodings.
-
-There are other preprocessors in existence, but, unfortunately, no free
-implementations are available.  Among them is a preprocessor for drawing
-mathematical pictures (@code{ideal}).
-
-
-@c =====================================================================
-
-@node Output device intro, Credits, Preprocessor Intro, Introduction
-@section Output Devices
-@cindex postprocessors
-@cindex output devices
-@cindex devices for output
-
-@code{groff} actually produces device independent code that may be fed
-into a postprocessor to produce output for a particular device.
-Currently, @code{groff} has postprocessors for @sc{PostScript} devices,
-character terminals, X@tie{}Windows (for previewing), @TeX{} DVI format,
-HP LaserJet@tie{}4 and Canon LBP printers (which use @acronym{CAPSL}),
-@acronym{HTML}, @acronym{XHTML}, and PDF.
-
-
-@c =====================================================================
-
-@node Credits,  , Output device intro, Introduction
-@section Credits
-@cindex credits
-
-Large portions of this manual were taken from existing documents, most
-notably, the manual pages for the @code{groff} package by James Clark,
-and Eric Allman's papers on the @file{me} macro package.
-
-The section on the @file{man} macro package is partly based on
-Susan@tie{}G.@: Kleinmann's @file{groff_man} manual page written for the
-Debian GNU/Linux system.
-
-Larry Kollar contributed the section in the @file{ms} macro package.
-
-
-
-@c =====================================================================
-@c =====================================================================
-
-@node Invoking groff, Tutorial for Macro Users, Introduction, Top
-@chapter Invoking @code{groff}
-@cindex invoking @code{groff}
-@cindex @code{groff} invocation
-
-This section focuses on how to invoke the @code{groff} front end.  This
-front end takes care of the details of constructing the pipeline among
-the preprocessors, @code{gtroff} and the postprocessor.
-
-It has become a tradition that GNU programs get the prefix @samp{g} to
-distinguish it from its original counterparts provided by the host (see
-@ref{Environment}, for more details).  Thus, for example, @code{geqn} is
-GNU @code{eqn}.  On operating systems like GNU/Linux or the Hurd, which
-don't contain proprietary versions of @code{troff}, and on
-MS-DOS/MS-Windows, where @code{troff} and associated programs are not
-available at all, this prefix is omitted since GNU @code{troff} is the
-only used incarnation of @code{troff}.  Exception: @samp{groff} is never
-replaced by @samp{roff}.
-
-In this document, we consequently say @samp{gtroff} when talking about
-the GNU @code{troff} program.  All other implementations of @code{troff}
-are called @acronym{AT&T} @code{troff}, which is the common origin of all
-@code{troff} derivates (with more or less compatible changes).
-Similarly, we say @samp{gpic}, @samp{geqn}, etc.
-
-@menu
-* Groff Options::
-* Environment::
-* Macro Directories::
-* Font Directories::
-* Paper Size::
-* Invocation Examples::
-@end menu
-
-
-@c =====================================================================
-
-@node Groff Options, Environment, Invoking groff, Invoking groff
-@section Options
-@cindex options
-
-@pindex groff
-@pindex gtroff
-@pindex gpic
-@pindex geqn
-@pindex ggrn
-@pindex grap
-@pindex gtbl
-@pindex gchem
-@pindex grefer
-@pindex gsoelim
-@pindex preconv
-@code{groff} normally runs the @code{gtroff} program and a
-postprocessor appropriate for the selected device.  The default device
-is @samp{ps} (but it can be changed when @code{groff} is configured and
-built).  It can optionally preprocess with any of @code{gpic},
-@code{geqn}, @code{gtbl}, @code{ggrn}, @code{grap}, @code{gchem},
-@code{grefer}, @code{gsoelim}, or @code{preconv}.
-
-This section only documents options to the @code{groff} front end.  Many
-of the arguments to @code{groff} are passed on to @code{gtroff},
-therefore those are also included.  Arguments to pre- or postprocessors
-can be found in @ref{Invoking gpic}, @ref{Invoking geqn}, @ref{Invoking
-gtbl}, @ref{Invoking ggrn}, @ref{Invoking grefer}, @ref{Invoking gchem},
-@ref{Invoking gsoelim}, @ref{Invoking preconv}, @ref{Invoking grotty},
-@ref{Invoking grops}, @ref{Invoking gropdf}, @ref{Invoking grohtml},
-@ref{Invoking grodvi}, @ref{Invoking grolj4}, @ref{Invoking grolbp}, and
-@ref{Invoking gxditview}.
-
-The command line format for @code{groff} is:
-
-@Example
-groff [ -abceghijklpstvzCEGNRSUVXZ ] [ -d@var{cs} ] [ -D@var{arg} ]
-      [ -f@var{fam} ] [ -F@var{dir} ] [ -I@var{dir} ] [ -K@var{arg} ]
-      [ -L@var{arg} ] [ -m@var{name} ] [ -M@var{dir} ] [ -n@var{num} ]
-      [ -o@var{list} ] [ -P@var{arg} ] [ -r@var{cn} ] [ -T@var{dev} ]
-      [ -w@var{name} ] [ -W@var{name} ] [ @var{files}@dots{} ]
-@endExample
-
-The command line format for @code{gtroff} is as follows.
-
-@Example
-gtroff [ -abcivzCERU ] [ -d@var{cs} ] [ -f@var{fam} ] [ -F@var{dir} ]
-       [ -m@var{name} ] [ -M@var{dir} ] [ -n@var{num} ] [ -o@var{list} ]
-       [ -r@var{cn} ] [ -T@var{name} ] [ -w@var{name} ] [ -W@var{name} ]
-       [ @var{files}@dots{} ]
-@endExample
-
-@noindent
-Obviously, many of the options to @code{groff} are actually passed on to
-@code{gtroff}.
-
-Options without an argument can be grouped behind a
-single@tie{}@option{-}.  A filename of@tie{}@file{-} denotes the
-standard input.  It is possible to have whitespace between an option and
-its parameter.
-
-The @code{grog} command can be used to guess the correct @code{groff}
-command to format a file.
-
-Here's the description of the command-line options:
-
-@cindex command-line options
-@table @samp
-@item -a
-@cindex @acronym{ASCII} approximation output register (@code{.A})
-Generate an @acronym{ASCII} approximation of the typeset output.  The
-read-only register @code{.A} is then set to@tie{}1.  @xref{Built-in
-Registers}.  A typical example is
-
-@Example
-groff -a -man -Tdvi troff.man | less
-@endExample
-
-@noindent
-which shows how lines are broken for the DVI device.  Note that this
-option is rather useless today since graphic output devices are
-available virtually everywhere.
-
-@item -b
-Print a backtrace with each warning or error message.  This backtrace
-should help track down the cause of the error.  The line numbers given
-in the backtrace may not always be correct: @code{gtroff} can get
-confused by @code{as} or @code{am} requests while counting line numbers.
-
-@item -c
-Suppress color output.
-
-@item -C
-Enable compatibility mode.  @xref{Implementation Differences}, for the
-list of incompatibilities between @code{groff} and @acronym{AT&T}
-@code{troff}.
-
-@item -d@var{c}@var{s}
-@itemx -d@var{name}=@var{s}
-Define @var{c} or @var{name} to be a string@tie{}@var{s}.
-@var{c}@tie{}must be a one-letter name; @var{name} can be of arbitrary
-length.  All string assignments happen before loading any macro file
-(including the start-up file).
-
-@item -D@var{arg}
-Set default input encoding used by @code{preconv} to @var{arg}.  Implies
-@option{-k}.
-
-@item -e
-Preprocess with @code{geqn}.
-
-@item -E
-Inhibit all error messages.
-
-@item -f@var{fam}
-Use @var{fam} as the default font family.  @xref{Font Families}.
-
-@item -F@var{dir}
-Search @file{@var{dir}} for subdirectories @file{dev@var{name}}
-(@var{name} is the name of the device), for the @file{DESC} file, and
-for font files before looking in the standard directories (@pxref{Font
-Directories}).  This option is passed to all pre- and postprocessors
-using the @env{GROFF_FONT_PATH} environment variable.
-
-@item -g
-Preprocess with @code{ggrn}.
-
-@item -G
-Preprocess with @code{grap}.  Implies @option{-p}.
-
-@item -h
-Print a help message.
-
-@item -i
-Read the standard input after all the named input files have been
-processed.
-
-@item -I@var{dir}
-This option may be used to specify a directory to search for files.
-It is passed to the following programs:
-
-@itemize
-@item
-@code{gsoelim} (see @ref{gsoelim} for more details);
-it also implies @code{groff}'s @option{-s} option.
-
-@item
-@code{gtroff}; it is used to search files named in the @code{psbb} and
-@code{so} requests.
-
-@item
-@code{grops}; it is used to search files named in the
-@w{@code{\X'ps: import}} and @w{@code{\X'ps: file}} escapes.
-@end itemize
-
-The current directory is always searched first.  This option may be
-specified more than once; the directories are searched in the order
-specified.  No directory search is performed for files specified using
-an absolute path.
-
-@item -j
-Preprocess with @code{gchem}.  Implies @option{-p}.
-
-@item -k
-Preprocess with @code{preconv}.  This is run before any other
-preprocessor.  Please refer to @code{preconv}'s manual page for its
-behaviour if no @option{-K} (or @option{-D}) option is specified.
-
-@item -K@var{arg}
-Set input encoding used by preconv to @var{arg}.  Implies @option{-k}.
-
-@item -l
-Send the output to a spooler for printing.  The command used for this is
-specified by the @code{print} command in the device description file
-(see @ref{Font Files}, for more info).  If not present, @option{-l} is
-ignored.
-
-@item -L@var{arg}
-Pass @var{arg} to the spooler.  Each argument should be passed with a
-separate @option{-L} option.  Note that @code{groff} does not prepend a
-@samp{-} to @var{arg} before passing it to the postprocessor.  If the
-@code{print} keyword in the device description file is missing,
-@option{-L} is ignored.
-
-@item -m@var{name}
-Read in the file @file{@var{name}.tmac}.  Normally @code{groff} searches
-for this in its macro directories.  If it isn't found, it tries
-@file{tmac.@var{name}} (searching in the same directories).
-
-@item -M@var{dir}
-Search directory @file{@var{dir}} for macro files before the standard
-directories (@pxref{Macro Directories}).
-
-@item -n@var{num}
-Number the first page @var{num}.
-
-@item -N
-Don't allow newlines with @code{eqn} delimiters.  This is the same as
-the @option{-N} option in @code{geqn}.
-
-@item -o@var{list}
-@cindex print current page register (@code{.P})
-Output only pages in @var{list}, which is a comma-separated list of page
-ranges; @samp{@var{n}} means print page@tie{}@var{n},
-@samp{@var{m}-@var{n}} means print every page between @var{m}
-and@tie{}@var{n}, @samp{-@var{n}} means print every page up
-to@tie{}@var{n}, @samp{@var{n}-} means print every page beginning
-with@tie{}@var{n}.  @code{gtroff} exits after printing the last page in
-the list.  All the ranges are inclusive on both ends.
-
-Within @code{gtroff}, this information can be extracted with the
-@samp{.P} register.  @xref{Built-in Registers}.
-
-If your document restarts page numbering at the beginning of each
-chapter, then @code{gtroff} prints the specified page range for each
-chapter.
-
-@item -p
-Preprocess with @code{gpic}.
-
-@item -P@var{arg}
-Pass @var{arg} to the postprocessor.  Each argument should be passed
-with a separate @option{-P} option.  Note that @code{groff} does not
-prepend @samp{-} to @var{arg} before passing it to the postprocessor.
-
-@item -r@var{c}@var{n}
-@itemx -r@var{name}=@var{n}
-Set number register@tie{}@var{c} or @var{name} to the
-value@tie{}@var{n}.  @var{c}@tie{}must be a one-letter name; @var{name}
-can be of arbitrary length.  @var{n}@tie{}can be any @code{gtroff}
-numeric expression.  All register assignments happen before loading any
-macro file (including the start-up file).
-
-@item -R
-Preprocess with @code{grefer}.  No mechanism is provided for passing
-arguments to @code{grefer} because most @code{grefer} options have
-equivalent commands that can be included in the file.  @xref{grefer},
-for more details.
-
-@pindex troffrc
-@pindex troffrc-end
-Note that @code{gtroff} also accepts a @option{-R} option, which is not
-accessible via @code{groff}.  This option prevents the loading of the
-@file{troffrc} and @file{troffrc-end} files.
-
-@item -s
-Preprocess with @code{gsoelim}.
-
-@item -S
-@cindex @code{open} request, and safer mode
-@cindex @code{opena} request, and safer mode
-@cindex @code{pso} request, and safer mode
-@cindex @code{sy} request, and safer mode
-@cindex @code{pi} request, and safer mode
-@cindex safer mode
-@cindex mode, safer
-Safer mode.  Pass the @option{-S} option to @code{gpic} and disable the
-@code{open}, @code{opena}, @code{pso}, @code{sy}, and @code{pi}
-requests.  For security reasons, this is enabled by default.
-
-@item -t
-Preprocess with @code{gtbl}.
-
-@item -T@var{dev}
-Prepare output for device @var{dev}.  The default device is @samp{ps},
-unless changed when @code{groff} was configured and built.  The
-following are the output devices currently available:
-
-@table @code
-@item ps
-For @sc{PostScript} printers and previewers.
-
-@item pdf
-For PDF viewers or printers.
-
-@item dvi
-For @TeX{} DVI format.
-
-@item X75
-For a 75@dmn{dpi} X11 previewer.
-
-@item X75-12
-For a 75@dmn{dpi} X11 previewer with a 12@dmn{pt} base font in the
-document.
-
-@item X100
-For a 100@dmn{dpi} X11 previewer.
-
-@item X100-12
-For a 100@dmn{dpi} X11 previewer with a 12@dmn{pt} base font in the
-document.
-
-@item ascii
-@cindex encoding, output, @acronym{ASCII}
-@cindex @acronym{ASCII}, output encoding
-@cindex output encoding, @acronym{ASCII}
-For typewriter-like devices using the (7-bit) @acronym{ASCII}
-character set.
-
-@item latin1
-@cindex encoding, output, @w{latin-1} (ISO @w{8859-1})
-@cindex @w{latin-1} (ISO @w{8859-1}), output encoding
-@cindex ISO @w{8859-1} (@w{latin-1}), output encoding
-@cindex output encoding, @w{latin-1} (ISO @w{8859-1})
-For typewriter-like devices that support the @w{Latin-1}
-(ISO@tie{}@w{8859-1}) character set.
-
-@item utf8
-@cindex encoding, output, @w{utf-8}
-@cindex @w{utf-8}, output encoding
-@cindex output encoding, @w{utf-8}
-For typewriter-like devices that use the Unicode (ISO@tie{}10646)
-character set with @w{UTF-8} encoding.
-
-@item cp1047
-@cindex encoding, output, @acronym{EBCDIC}
-@cindex @acronym{EBCDIC}, output encoding
-@cindex output encoding, @acronym{EBCDIC}
-@cindex encoding, output, cp1047
-@cindex cp1047, output encoding
-@cindex output encoding, cp1047
-@cindex IBM cp1047 output encoding
-For typewriter-like devices that use the @acronym{EBCDIC} encoding IBM
-cp1047.
-
-@item lj4
-For HP LaserJet4-compatible (or other PCL5-compatible) printers.
-
-@item lbp
-For Canon @acronym{CAPSL} printers (@w{LBP-4} and @w{LBP-8} series laser
-printers).
-
-@pindex pre-grohtml
-@pindex post-grohtml
-@cindex @code{grohtml}, the program
-@item html
-@itemx xhtml
-To produce @acronym{HTML} and @acronym{XHTML} output, respectively.
-Note that this driver consists of two parts, a preprocessor
-(@code{pre-grohtml}) and a postprocessor (@code{post-grohtml}).
-@end table
-
-@cindex output device name string register (@code{.T})
-@cindex output device usage number register (@code{.T})
-The predefined @code{gtroff} string register @code{.T} contains the
-current output device; the read-only number register @code{.T} is set
-to@tie{}1 if this option is used (which is always true if @code{groff}
-is used to call @code{gtroff}).  @xref{Built-in Registers}.
-
-The postprocessor to be used for a device is specified by the
-@code{postpro} command in the device description file.  (@xref{Font
-Files}, for more info.)  This can be overridden with the @option{-X}
-option.
-
-@item -U
-@cindex mode, unsafe
-@cindex unsafe mode
-Unsafe mode.  This enables the @code{open}, @code{opena}, @code{pso},
-@code{sy}, and @code{pi} requests.
-
-@item -w@var{name}
-Enable warning @var{name}.  Available warnings are described in
-@ref{Debugging}.  Multiple @option{-w} options are allowed.
-
-@item -W@var{name}
-Inhibit warning @var{name}.  Multiple @option{-W} options are allowed.
-
-@item -v
-Make programs run by @code{groff} print out their version number.
-
-@item -V
-Print the pipeline on @code{stdout} instead of executing it.  If
-specified more than once, print the pipeline on @code{stderr} and
-execute it.
-
-@item -X
-Preview with @code{gxditview} instead of using the usual postprocessor.
-This is unlikely to produce good results except with @option{-Tps}.
-
-Note that this is not the same as using @option{-TX75} or
-@option{-TX100} to view a document with @code{gxditview}: The former
-uses the metrics of the specified device, whereas the latter uses
-X-specific fonts and metrics.
-
-@item -z
-Suppress output from @code{gtroff}.  Only error messages are printed.
-
-@item -Z
-Do not postprocess the output of @code{gtroff}.  Normally @code{groff}
-automatically runs the appropriate postprocessor.
-@end table
-
-
-@c =====================================================================
-
-@node Environment, Macro Directories, Groff Options, Invoking groff
-@section Environment
-@cindex environment variables
-@cindex variables in environment
-
-There are also several environment variables (of the operating system,
-not within @code{gtroff}) that can modify the behavior of @code{groff}.
-
-@table @code
-@item GROFF_BIN_PATH
-@tindex GROFF_BIN_PATH@r{, environment variable}
-This search path, followed by @code{PATH}, is used for commands executed
-by @code{groff}.
-
-@item GROFF_COMMAND_PREFIX
-@tindex GROFF_COMMAND_PREFIX@r{, environment variable}
-@cindex command prefix
-@cindex prefix, for commands
-If this is set to@tie{}@var{X}, then @code{groff} runs
-@code{@var{X}troff} instead of @code{gtroff}.  This also applies to
-@code{tbl}, @code{pic}, @code{eqn}, @code{grn}, @code{chem},
-@code{refer}, and @code{soelim}.  It does not apply to @code{grops},
-@code{grodvi}, @code{grotty}, @code{pre-grohtml}, @code{post-grohtml},
-@code{preconv}, @code{grolj4}, @code{gropdf}, and @code{gxditview}.
-
-The default command prefix is determined during the installation
-process.  If a non-GNU troff system is found, prefix @samp{g} is used,
-none otherwise.
-
-@item GROFF_ENCODING
-@tindex GROFF_ENCODING@r{, environment variable}
-The value of this environment value is passed to the @code{preconv}
-preprocessor to select the encoding of input files.  Setting this option
-implies @code{groff}'s command line option @option{-k} (this is,
-@code{groff} actually always calls @code{preconv}).  If set without a
-value, @code{groff} calls @code{preconv} without arguments.  An explicit
-@option{-K} command line option overrides the value of
-@env{GROFF_ENCODING}.  See the manual page of @code{preconv} for details.
-
-@item GROFF_FONT_PATH
-@tindex GROFF_FONT_PATH@r{, environment variable}
-A colon-separated list of directories in which to search for the
-@code{dev}@var{name} directory (before the default directories are
-tried).  @xref{Font Directories}.
-
-@item GROFF_TMAC_PATH
-@tindex GROFF_TMAC_PATH@r{, environment variable}
-A colon-separated list of directories in which to search for macro files
-(before the default directories are tried).  @xref{Macro Directories}.
-
-@item GROFF_TMPDIR
-@tindex GROFF_TMPDIR@r{, environment variable}
-@tindex TMPDIR@r{, environment variable}
-The directory in which @code{groff} creates temporary files.  If this is
-not set and @env{TMPDIR} is set, temporary files are created in that
-directory.  Otherwise temporary files are created in a system-dependent
-default directory (on Unix and GNU/Linux systems, this is usually
-@file{/tmp}).  @code{grops}, @code{grefer}, @code{pre-grohtml}, and
-@code{post-grohtml} can create temporary files in this directory.
-
-@item GROFF_TYPESETTER
-@tindex GROFF_TYPESETTER@r{, environment variable}
-The default output device.
-@end table
-
-Note that MS-DOS and MS-Windows ports of @code{groff} use semi-colons,
-rather than colons, to separate the directories in the lists described
-above.
-
-
-@c =====================================================================
-
-@node Macro Directories, Font Directories, Environment, Invoking groff
-@section Macro Directories
-@cindex macro directories
-@cindex directories for macros
-@cindex searching macros
-@cindex macros, searching
-
-All macro file names must be named @code{@var{name}.tmac} or
-@code{tmac.@var{name}} to make the @option{-m@var{name}} command line
-option work.  The @code{mso} request doesn't have this restriction; any
-file name can be used, and @code{gtroff} won't try to append or prepend
-the @samp{tmac} string.
-
-@cindex tmac, directory
-@cindex directory, for tmac files
-@cindex tmac, path
-@cindex path, for tmac files
-@cindex searching macro files
-@cindex macro files, searching
-@cindex files, macro, searching
-Macro files are kept in the @dfn{tmac directories}, all of which
-constitute the @dfn{tmac path}.  The elements of the search path for
-macro files are (in that order):
-
-@itemize @bullet
-@item
-The directories specified with @code{gtroff}'s or @code{groff}'s
-@option{-M} command line option.
-
-@item
-@tindex GROFF_TMAC_PATH@r{, environment variable}
-The directories given in the @env{GROFF_TMAC_PATH} environment variable.
-
-@item
-@cindex safer mode
-@cindex mode, safer
-@cindex unsafe mode
-@cindex mode, unsafe
-@cindex current directory
-@cindex directory, current
-The current directory (only if in unsafe mode using the @option{-U}
-command line switch).
-
-@item
-@cindex home directory
-@cindex directory, home
-The home directory.
-
-@item
-@cindex site-specific directory
-@cindex directory, site-specific
-@cindex platform-specific directory
-@cindex directory, platform-specific
-A platform-dependent directory, a site-specific (platform-independent)
-directory, and the main tmac directory; the default locations are
-
-@Example
-/usr/local/lib/groff/site-tmac
-/usr/local/share/groff/site-tmac
-/usr/local/share/groff/1.22.3/tmac
-@endExample
-
-@noindent
-assuming that the version of @code{groff} is 1.22.3, and the
-installation prefix was @file{/usr/local}.  It is possible to fine-tune
-those directories during the installation process.
-@end itemize
-
-
-@c =====================================================================
-
-@node Font Directories, Paper Size, Macro Directories, Invoking groff
-@section Font Directories
-@cindex font directories
-@cindex directories for fonts
-@cindex searching fonts
-@cindex fonts, searching
-
-Basically, there is no restriction how font files for @code{groff} are
-named and how long font names are; however, to make the font family
-mechanism work (@pxref{Font Families}), fonts within a family should
-start with the family name, followed by the shape.  For example, the
-Times family uses @samp{T} for the family name and @samp{R}, @samp{B},
-@samp{I}, and @samp{BI} to indicate the shapes `roman', `bold',
-`italic', and `bold italic', respectively.  Thus the final font names
-are @samp{TR}, @samp{TB}, @samp{TI}, and @samp{TBI}.
-
-@cindex font path
-@cindex path, for font files
-All font files are kept in the @dfn{font directories}, which constitute
-the @dfn{font path}.  The file search functions always append the
-directory @code{dev}@var{name}, where @var{name} is the name of the
-output device.  Assuming, say, DVI output, and @file{/foo/bar} as a font
-directory, the font files for @code{grodvi} must be in
-@file{/foo/bar/devdvi}.
-
-The elements of the search path for font files are (in that order):
-
-@itemize @bullet
-@item
-The directories specified with @code{gtroff}'s or @code{groff}'s
-@option{-F} command line option.  All device drivers and some
-preprocessors also have this option.
-
-@item
-@tindex GROFF_FONT_PATH@r{, environment variable}
-The directories given in the @env{GROFF_FONT_PATH} environment variable.
-
-@item
-@cindex site-specific directory
-@cindex directory, site-specific
-A site-specific directory and the main font directory; the default
-locations are
-
-@Example
-/usr/local/share/groff/site-font
-/usr/local/share/groff/1.22.3/font
-@endExample
-
-@noindent
-assuming that the version of @code{groff} is 1.22.3, and the
-installation prefix was @file{/usr/local}.  It is possible to fine-tune
-those directories during the installation process.
-@end itemize
-
-
-@c =====================================================================
-
-@node Paper Size, Invocation Examples, Font Directories, Invoking groff
-@section Paper Size
-@cindex paper size
-@cindex size, paper
-@cindex landscape page orientation
-@cindex orientation, landscape
-@cindex page orientation, landscape
-
-In groff, the page size for @code{gtroff} and for output devices are
-handled separately.  @xref{Page Layout}, for vertical manipulation of
-the page size.  @xref{Line Layout}, for horizontal changes.
-
-A default paper size can be set in the device's @file{DESC} file.  Most
-output devices also have a command line option @option{-p} to override
-the default paper size and option @option{-l} to use landscape
-orientation.  @xref{DESC File Format}, for a description of the
-@code{papersize} keyword, which takes the same argument as @option{-p}.
-
-@pindex papersize.tmac
-@pindex troffrc
-A convenient shorthand to set a particular paper size for @code{gtroff}
-is command line option @option{-dpaper=@var{size}}.  This defines string
-@code{paper}, which is processed in file @file{papersize.tmac} (loaded in
-the start-up file @file{troffrc} by default).  Possible values for
-@var{size} are the same as the predefined values for the
-@code{papersize} keyword (but only in lowercase) except
-@code{a7}-@code{d7}.  An appended @samp{l} (ell) character denotes
-landscape orientation.
-
-For example, use the following for PS output on A4 paper in landscape
-orientation:
-
-@Example
-groff -Tps -dpaper=a4l -P-pa4 -P-l -ms foo.ms > foo.ps
-@endExample
-
-Note that it is up to the particular macro package to respect default
-page dimensions set in this way (most do).
-
-
-@c =====================================================================
-
-@node Invocation Examples,  , Paper Size, Invoking groff
-@section Invocation Examples
-@cindex invocation examples
-@cindex examples of invocation
-
-This section lists several common uses of @code{groff} and the
-corresponding command lines.
-
-@Example
-groff file
-@endExample
-
-@noindent
-This command processes @file{file} without a macro package or a
-preprocessor.  The output device is the default, @samp{ps}, and the
-output is sent to @code{stdout}.
-
-@Example
-groff -t -mandoc -Tascii file | less
-@endExample
-
-@noindent
-This is basically what a call to the @code{man} program does.
-@code{gtroff} processes the manual page @file{file} with the
-@file{mandoc} macro file (which in turn either calls the @file{man} or
-the @file{mdoc} macro package), using the @code{tbl} preprocessor and
-the @acronym{ASCII} output device.  Finally, the @code{less} pager
-displays the result.
-
-@Example
-groff -X -m me file
-@endExample
-
-@noindent
-Preview @file{file} with @code{gxditview}, using the @file{me} macro
-package.  Since no @option{-T} option is specified, use the default
-device (@samp{ps}).  Note that you can either say @w{@samp{-m me}} or
-@w{@samp{-me}}; the latter is an anachronism from the early days of
-@acronym{UNIX}.@footnote{The same is true for the other main macro
-packages that come with @code{groff}: @file{man}, @file{mdoc},
-@file{ms}, @file{mm}, and @file{mandoc}.  This won't work in general;
-for example, to load @file{trace.tmac}, either @samp{-mtrace} or
-@w{@samp{-m trace}} must be used.}
-
-@Example
-groff -man -rD1 -z file
-@endExample
-
-@noindent
-Check @file{file} with the @file{man} macro package, forcing
-double-sided printing -- don't produce any output.
-
-@menu
-* grog::
-@end menu
-
-@c ---------------------------------------------------------------------
-
-@node grog,  , Invocation Examples, Invocation Examples
-@subsection @code{grog}
-
-@pindex grog
-@code{grog} reads files, guesses which of the @code{groff} preprocessors
-and/or macro packages are required for formatting them, and prints the
-@code{groff} command including those options on the standard output.  It
-generates one or more of the options @option{-e}, @option{-man},
-@option{-me}, @option{-mm}, @option{-mom}, @option{-ms}, @option{-mdoc},
-@option{-mdoc-old}, @option{-p}, @option{-R}, @option{-g}, @option{-G},
-@option{-s}, and @option{-t}.
-
-A special file name@tie{}@file{-} refers to the standard input.
-Specifying no files also means to read the standard input.  Any
-specified options are included in the printed command.  No space is
-allowed between options and their arguments.  The only options
-recognized are @option{-C} (which is also passed on) to enable
-compatibility mode, and @option{-v} to print the version number and
-exit.
-
-For example,
-
-@Example
-grog -Tdvi paper.ms
-@endExample
-
-@noindent
-guesses the appropriate command to print @file{paper.ms} and then prints
-it to the command line after adding the @option{-Tdvi} option.  For
-direct execution, enclose the call to @code{grog} in backquotes at the
-@acronym{UNIX} shell prompt:
-
-@Example
-`grog -Tdvi paper.ms` > paper.dvi
-@endExample
-
-@noindent
-As seen in the example, it is still necessary to redirect the output to
-something meaningful (i.e.@: either a file or a pager program like
-@code{less}).
-
-
-
-@c =====================================================================
-@c =====================================================================
-
-@node Tutorial for Macro Users, Macro Packages, Invoking groff, Top
-@chapter Tutorial for Macro Users
-@cindex tutorial for macro users
-@cindex macros, tutorial for users
-@cindex user's tutorial for macros
-@cindex user's macro tutorial
-
-Most users tend to use a macro package to format their papers.  This
-means that the whole breadth of @code{groff} is not necessary for most
-people.  This chapter covers the material needed to efficiently use a
-macro package.
-
-@menu
-* Basics::
-* Common Features::
-@end menu
-
-
-@c =====================================================================
-
-@node Basics, Common Features, Tutorial for Macro Users, Tutorial for Macro Users
-@section Basics
-@cindex basics of macros
-@cindex macro basics
-
-This section covers some of the basic concepts necessary to understand
-how to use a macro package.@footnote{This section is derived from
-@cite{Writing Papers with nroff using -me} by Eric P.@tie{}Allman.}
-References are made throughout to more detailed information, if desired.
-
-@code{gtroff} reads an input file prepared by the user and outputs a
-formatted document suitable for publication or framing.  The input
-consists of text, or words to be printed, and embedded commands
-(@dfn{requests} and @dfn{escapes}), which tell @code{gtroff} how to
-format the output.  For more detail on this, see @ref{Embedded
-Commands}.
-
-The word @dfn{argument} is used in this chapter to mean a word or number
-that appears on the same line as a request, and which modifies the
-meaning of that request.  For example, the request
-
-@Example
-.sp
-@endExample
-
-@noindent
-spaces one line, but
-
-@Example
-.sp 4
-@endExample
-
-@noindent
-spaces four lines.  The number@tie{}4 is an argument to the @code{sp}
-request, which says to space four lines instead of one.  Arguments are
-separated from the request and from each other by spaces (@emph{no}
-tabs).  More details on this can be found in @ref{Request and Macro
-Arguments}.
-
-The primary function of @code{gtroff} is to collect words from input
-lines, fill output lines with those words, justify the right-hand margin
-by inserting extra spaces in the line, and output the result.  For
-example, the input:
-
-@Example
-Now is the time
-for all good men
-to come to the aid
-of their party.
-Four score and seven
-years ago, etc.
-@endExample
-
-@noindent
-is read, packed onto output lines, and justified to produce:
-
-@quotation
-Now is the time for all good men to come to the aid of their party.
-Four score and seven years ago, etc.
-@end quotation
-
-@cindex break
-@cindex line break
-Sometimes a new output line should be started even though the current
-line is not yet full; for example, at the end of a paragraph.  To do
-this it is possible to cause a @dfn{break}, which starts a new output
-line.  Some requests cause a break automatically, as normally do blank
-input lines and input lines beginning with a space.
-
-Not all input lines are text to be formatted.  Some input lines are
-requests that describe how to format the text.  Requests always have a
-period (@samp{.}) or an apostrophe (@samp{'}) as the first character of
-the input line.
-
-The text formatter also does more complex things, such as automatically
-numbering pages, skipping over page boundaries, putting footnotes in the
-correct place, and so forth.
-
-Here are a few hints for preparing text for input to @code{gtroff}.
-
-@itemize @bullet
-@item
-First, keep the input lines short.  Short input lines are easier to
-edit, and @code{gtroff} packs words onto longer lines anyhow.
-
-@item
-In keeping with this, it is helpful to begin a new line after every
-comma or phrase, since common corrections are to add or delete sentences
-or phrases.
-
-@item
-End each sentence with two spaces -- or better, start each sentence on a
-new line.  @code{gtroff} recognizes characters that usually end a
-sentence, and inserts sentence space accordingly.
-
-@item
-Do not hyphenate words at the end of lines -- @code{gtroff} is smart
-enough to hyphenate words as needed, but is not smart enough to take
-hyphens out and join a word back together.  Also, words such as
-``mother-in-law'' should not be broken over a line, since then a space
-can occur where not wanted, such as ``@w{mother- in}-law''.
-@end itemize
-
-@cindex double-spacing (@code{ls})
-@cindex spacing
-@code{gtroff} double-spaces output text automatically if you use the
-request @w{@samp{.ls 2}}.  Reactivate single-spaced mode by typing
-@w{@samp{.ls 1}}.@footnote{If you need finer granularity of the vertical
-space, use the @code{pvs} request (@pxref{Changing Type Sizes}).}
-
-A number of requests allow to change the way the output looks, sometimes
-called the @dfn{layout} of the output page.  Most of these requests
-adjust the placing of @dfn{whitespace} (blank lines or spaces).
-
-@cindex new page (@code{bp})
-The @code{bp} request starts a new page, causing a line break.
-
-@cindex blank line (@code{sp})
-@cindex empty line (@code{sp})
-@cindex line, empty (@code{sp})
-The request @w{@samp{.sp @var{N}}} leaves @var{N}@tie{}lines of blank
-space.  @var{N}@tie{}can be omitted (meaning skip a single line) or can
-be of the form @var{N}i (for @var{N}@tie{}inches) or @var{N}c (for
-@var{N}@tie{}centimeters).  For example, the input:
-
-@Example
-.sp 1.5i
-My thoughts on the subject
-.sp
-@endExample
-
-@noindent
-leaves one and a half inches of space, followed by the line ``My
-thoughts on the subject'', followed by a single blank line (more
-measurement units are available, see @ref{Measurements}).
-
-@cindex centering lines (@code{ce})
-@cindex lines, centering (@code{ce})
-Text lines can be centered by using the @code{ce} request.  The line
-after @code{ce} is centered (horizontally) on the page.  To center more
-than one line, use @w{@samp{.ce @var{N}}} (where @var{N} is the number
-of lines to center), followed by the @var{N}@tie{}lines.  To center many
-lines without counting them, type:
-
-@Example
-.ce 1000
-lines to center
-.ce 0
-@endExample
-
-@noindent
-The @w{@samp{.ce 0}} request tells @code{groff} to center zero more
-lines, in other words, stop centering.
-
-@cindex line break (@code{br})
-@cindex break (@code{br})
-All of these requests cause a break; that is, they always start a new
-line.  To start a new line without performing any other action, use
-@code{br}.
-
-
-@c =====================================================================
-
-@node Common Features,  , Basics, Tutorial for Macro Users
-@section Common Features
-@cindex common features
-@cindex features, common
-
-@code{gtroff} provides very low-level operations for formatting a
-document.  There are many common routine operations that are done in
-all documents.  These common operations are written into @dfn{macros}
-and collected into a @dfn{macro package}.
-
-All macro packages provide certain common capabilities that fall into
-the following categories.
-
-@menu
-* Paragraphs::
-* Sections and Chapters::
-* Headers and Footers::
-* Page Layout Adjustment::
-* Displays::
-* Footnotes and Annotations::
-* Table of Contents::
-* Indices::
-* Paper Formats::
-* Multiple Columns::
-* Font and Size Changes::
-* Predefined Strings::
-* Preprocessor Support::
-* Configuration and Customization::
-@end menu
-
-@c ---------------------------------------------------------------------
-
-@node Paragraphs, Sections and Chapters, Common Features, Common Features
-@subsection Paragraphs
-@cindex paragraphs
-
-One of the most common and most used capability is starting a paragraph.
-There are a number of different types of paragraphs, any of which can be
-initiated with macros supplied by the macro package.  Normally,
-paragraphs start with a blank line and the first line indented, like the
-text in this manual.  There are also block style paragraphs, which omit
-the indentation:
-
-@Example
-Some   men  look   at  constitutions   with  sanctimonious
-reverence, and deem them like the ark of the covenant, too
-sacred to be touched.
-@endExample
-
-@noindent
-And there are also indented paragraphs, which begin with a tag or label
-at the margin and the remaining text indented.
-
-@Example
-one   This is  the first paragraph.  Notice  how the first
-      line of  the resulting  paragraph lines up  with the
-      other lines in the paragraph.
-@endExample
-
-@Example
-longlabel
-      This  paragraph   had  a  long   label.   The  first
-      character of text on the first line does not line up
-      with  the  text  on  second  and  subsequent  lines,
-      although they line up with each other.
-@endExample
-
-A variation of this is a bulleted list.
-
-@Example
-.     Bulleted lists start with a bullet.   It is possible
-      to use other glyphs instead of the bullet.  In nroff
-      mode using the ASCII character set for output, a dot
-      is used instead of a real bullet.
-@endExample
-
-@c ---------------------------------------------------------------------
-
-@node Sections and Chapters, Headers and Footers, Paragraphs, Common Features
-@subsection Sections and Chapters
-
-Most macro packages supply some form of section headers.  The simplest
-kind is simply the heading on a line by itself in bold type.  Others
-supply automatically numbered section heading or different heading
-styles at different levels.  Some, more sophisticated, macro packages
-supply macros for starting chapters and appendices.
-
-@c ---------------------------------------------------------------------
-
-@node Headers and Footers, Page Layout Adjustment, Sections and Chapters, Common Features
-@subsection Headers and Footers
-
-Every macro package gives some way to manipulate the @dfn{headers} and
-@dfn{footers} (also called @dfn{titles}) on each page.  This is text put
-at the top and bottom of each page, respectively, which contain data
-like the current page number, the current chapter title, and so on.  Its
-appearance is not affected by the running text.  Some packages allow for
-different ones on the even and odd pages (for material printed in a book
-form).
-
-The titles are called @dfn{three-part titles}, that is, there is a
-left-justified part, a centered part, and a right-justified part.  An
-automatically generated page number may be put in any of these fields
-with the @samp{%} character (see @ref{Page Layout}, for more details).
-
-@c ---------------------------------------------------------------------
-
-@node Page Layout Adjustment, Displays, Headers and Footers, Common Features
-@subsection Page Layout
-
-Most macro packages let the user specify top and bottom margins and
-other details about the appearance of the printed pages.
-
-@c ---------------------------------------------------------------------
-
-@node Displays, Footnotes and Annotations, Page Layout Adjustment, Common Features
-@subsection Displays
-@cindex displays
-
-@dfn{Displays} are sections of text to be set off from the body of the
-paper.  Major quotes, tables, and figures are types of displays, as are
-all the examples used in this document.
-
-@cindex quotes, major
-@cindex major quotes
-@dfn{Major quotes} are quotes that are several lines long, and hence
-are set in from the rest of the text without quote marks around them.
-
-@cindex list
-A @dfn{list} is an indented, single-spaced, unfilled display.  Lists
-should be used when the material to be printed should not be filled and
-justified like normal text, such as columns of figures or the examples
-used in this paper.
-
-@cindex keep
-A @dfn{keep} is a display of lines that are kept on a single page if
-possible.  An example for a keep might be a diagram.  Keeps differ from
-lists in that lists may be broken over a page boundary whereas keeps are
-not.
-
-@cindex keep, floating
-@cindex floating keep
-@dfn{Floating keeps} move relative to the text.  Hence, they are good
-for things that are referred to by name, such as ``See figure@tie{}3''.
-A floating keep appears at the bottom of the current page if it fits;
-otherwise, it appears at the top of the next page.  Meanwhile, the
-surrounding text `flows' around the keep, thus leaving no blank areas.
-
-@c ---------------------------------------------------------------------
-
-@node Footnotes and Annotations, Table of Contents, Displays, Common Features
-@subsection Footnotes and Annotations
-@cindex footnotes
-@cindex annotations
-
-There are a number of requests to save text for later printing.
-
-@dfn{Footnotes} are printed at the bottom of the current page.
-
-@cindex delayed text
-@dfn{Delayed text} is very similar to a footnote except that it is
-printed when called for explicitly.  This allows a list of references to
-appear (for example) at the end of each chapter, as is the convention in
-some disciplines.
-
-Most macro packages that supply this functionality also supply a means
-of automatically numbering either type of annotation.
-
-@c ---------------------------------------------------------------------
-
-@node Table of Contents, Indices, Footnotes and Annotations, Common Features
-@subsection Table of Contents
-@cindex table of contents
-@cindex contents, table of
-
-@dfn{Tables of contents} are a type of delayed text having a tag
-(usually the page number) attached to each entry after a row of dots.
-The table accumulates throughout the paper until printed, usually after
-the paper has ended.  Many macro packages provide the ability to have
-several tables of contents (e.g.@: a standard table of contents, a list
-of tables, etc).
-
-@c ---------------------------------------------------------------------
-
-@node Indices, Paper Formats, Table of Contents, Common Features
-@subsection Indices
-@cindex index, in macro package
-
-While some macro packages use the term @dfn{index}, none actually
-provide that functionality.  The facilities they call indices are
-actually more appropriate for tables of contents.
-
-@pindex makeindex
-To produce a real index in a document, external tools like the
-@code{makeindex} program are necessary.
-
-@c ---------------------------------------------------------------------
-
-@node Paper Formats, Multiple Columns, Indices, Common Features
-@subsection Paper Formats
-@cindex paper formats
-
-Some macro packages provide stock formats for various kinds of
-documents.  Many of them provide a common format for the title and
-opening pages of a technical paper.  The @file{mm} macros in particular
-provide formats for letters and memoranda.
-
-@c ---------------------------------------------------------------------
-
-@node Multiple Columns, Font and Size Changes, Paper Formats, Common Features
-@subsection Multiple Columns
-
-Some macro packages (but not @file{man}) provide the ability to have two
-or more columns on a page.
-
-@c ---------------------------------------------------------------------
-
-@node Font and Size Changes, Predefined Strings, Multiple Columns, Common Features
-@subsection Font and Size Changes
-
-The built-in font and size functions are not always intuitive, so all
-macro packages provide macros to make these operations simpler.
-
-@c ---------------------------------------------------------------------
-
-@node Predefined Strings, Preprocessor Support, Font and Size Changes, Common Features
-@subsection Predefined Strings
-
-Most macro packages provide various predefined strings for a variety of
-uses; examples are sub- and superscripts, printable dates, quotes and
-various special characters.
-
-@c ---------------------------------------------------------------------
-
-@node Preprocessor Support, Configuration and Customization, Predefined Strings, Common Features
-@subsection Preprocessor Support
-
-All macro packages provide support for various preprocessors and may
-extend their functionality.
-
-For example, all macro packages mark tables (which are processed with
-@code{gtbl}) by placing them between @code{TS} and @code{TE} macros.
-The @file{ms} macro package has an option, @samp{.TS@tie{}H}, that
-prints a caption at the top of a new page (when the table is too long to
-fit on a single page).
-
-@c ---------------------------------------------------------------------
-
-@node Configuration and Customization,  , Preprocessor Support, Common Features
-@subsection Configuration and Customization
-
-Some macro packages provide means of customizing many of the details of
-how the package behaves.  This ranges from setting the default type size
-to changing the appearance of section headers.
-
-
-
-@c =====================================================================
-@c =====================================================================
-
-@node Macro Packages, gtroff Reference, Tutorial for Macro Users, Top
-@chapter Macro Packages
-@cindex macro packages
-@cindex packages, macros
-
-This chapter documents the main macro packages that come with
-@code{groff}.
-
-Different main macro packages can't be used at the same time; for
-example
-
-@Example
-groff -m man foo.man -m ms bar.doc
-@endExample
-
-@noindent
-doesn't work.  Note that option arguments are processed before
-non-option arguments; the above (failing) sample is thus reordered to
-
-@Example
-groff -m man -m ms foo.man bar.doc
-@endExample
-
-@menu
-* man::
-* mdoc::
-* ms::
-* me::
-* mm::
-* mom::
-@end menu
-
-
-@c =====================================================================
-
-@node man, mdoc, Macro Packages, Macro Packages
-@section @file{man}
-@cindex manual pages
-@cindex man pages
-@pindex an.tmac
-@pindex man.tmac
-@pindex man-old.tmac
-
-This is the most popular and probably the most important macro package
-of @code{groff}.  It is easy to use, and a vast majority of manual pages
-are based on it.
-
-@menu
-* Man options::
-* Man usage::
-* Man font macros::
-* Miscellaneous man macros::
-* Predefined man strings::
-* Preprocessors in man pages::
-* Optional man extensions::
-@end menu
-
-@c ---------------------------------------------------------------------
-
-@node Man options, Man usage, man, man
-@subsection Options
-
-The command line format for using the @file{man} macros with
-@code{groff} is:
-
-@Example
-groff -m man [ -rLL=@var{length} ] [ -rLT=@var{length} ] [ -rFT=@var{dist} ]
-      [ -rcR=1 ] [ -rC1 ] [ -rD1 ] [-rHY=@var{flags} ]
-      [ -rP@var{nnn} ] [ -rS@var{xx} ] [ -rX@var{nnn} ]
-      [ -rIN=@var{length} ] [ -rSN=@var{length} ] [ @var{files}@dots{} ]
-@endExample
-
-@noindent
-It is possible to use @samp{-man} instead of @w{@samp{-m man}}.
-
-@table @code
-@item -rcR=1
-This option (the default if a TTY output device is used) creates a
-single, very long page instead of multiple pages.  Use @code{-rcR=0} to
-disable it.
-
-@item -rC1
-If more than one manual page is given on the command line, number the
-pages continuously, rather than starting each at@tie{}1.
-
-@item -rD1
-Double-sided printing.  Footers for even and odd pages are formatted
-differently.
-
-@item -rFT=@var{dist}
-Set the position of the footer text to @var{dist}.  If positive, the
-distance is measured relative to the top of the page, otherwise it is
-relative to the bottom.  The default is @minus{}0.5@dmn{i}.
-
-@item -rHY=@var{flags}
-Set hyphenation flags.  Possible values are 1@tie{}to hyphenate without
-restrictions, 2@tie{}to not hyphenate the last word on a page, 4@tie{}to
-not hyphenate the last two characters of a word, and 8@tie{}to not
-hyphenate the first two characters of a word.  These values are
-additive; the default is@tie{}14.
-
-@item -rIN=@var{length}
-Set the body text indentation to @var{length}.  If not specified, the
-indentation defaults to 7@dmn{n} (7@tie{}characters) in nroff mode and
-7.2@dmn{n} otherwise.  For nroff, this value should always be an integer
-multiple of unit @samp{n} to get consistent indentation.
-
-@item -rLL=@var{length}
-Set line length to @var{length}.  If not specified, the line length is
-set to respect any value set by a prior @samp{ll} request (which
-@emph{must} be in effect when the @samp{TH} macro is invoked), if this
-differs from the built-in default for the formatter; otherwise it
-defaults to 78@dmn{n} in nroff mode (this is 78 characters per line) and
-6.5@dmn{i} in troff mode.@footnote{Note that the use of a @samp{.ll
-@var{length}} request to initialize the line length, prior to use of the
-@samp{TH} macro, is supported for backward compatibility with some
-versions of the @code{man} program.  @emph{Always} use the
-@option{-rLL=@var{length}} option, or an equivalent @samp{.nr LL
-@var{length}} request, in preference to such a @samp{.ll @var{length}}
-request.  In particular, note that in nroff mode, the request @samp{.ll
-65n}, (with any @var{length} expression that evaluates equal to
-65@dmn{n}, i.e., the formatter's default line length in nroff mode),
-does @emph{not} set the line length to 65@dmn{n} (it is adjusted to the
-@code{man} macro package's default setting of 78@dmn{n}), whereas the
-use of the @option{-rLL=65n} option, or the @samp{.nr LL 65n} request
-@emph{does} establish a line length of 65@dmn{n}.}
-
-@item -rLT=@var{length}
-Set title length to @var{length}.  If not specified, the title length
-defaults to the line length.
-
-@item -rP@var{nnn}
-Page numbering starts with @var{nnn} rather than with@tie{}1.
-
-@item -rS@var{xx}
-Use @var{xx} (which can be 10, 11, or@tie{}12@dmn{pt}) as the base
-document font size instead of the default value of@tie{}10@dmn{pt}.
-
-@item -rSN=@var{length}
-Set the indentation for sub-subheadings to @var{length}.  If not
-specified, the indentation defaults to 3@dmn{n}.
-
-@item -rX@var{nnn}
-After page @var{nnn}, number pages as @var{nnn}a, @var{nnn}b,
-@var{nnn}c, etc.  For example, the option @option{-rX2} produces the
-following page numbers: 1, 2, 2a, 2b, 2c, etc.
-@end table
-
-@c ---------------------------------------------------------------------
-
-@node Man usage, Man font macros, Man options, man
-@subsection Usage
-@cindex @code{man} macros
-@cindex macros for manual pages [@code{man}]
-
-@pindex man.local
-This section describes the available macros for manual pages.  For
-further customization, put additional macros and requests into the file
-@file{man.local}, which is loaded immediately after the @file{man}
-package.
-
-@Defmac {TH, title section [@Var{extra1} [@Var{extra2} [@Var{extra3}]]], man}
-Set the title of the man page to @var{title} and the section to
-@var{section}, which must have a value between 1 and@tie{}8.  The value
-of @var{section} may also have a string appended, e.g.@: @samp{.pm}, to
-indicate a specific subsection of the man pages.
-
-Both @var{title} and @var{section} are positioned at the left and right
-in the header line (with @var{section} in parentheses immediately
-appended to @var{title}.  @var{extra1} is positioned in the middle of
-the footer line.  @var{extra2} is positioned at the left in the footer
-line (or at the left on even pages and at the right on odd pages if
-double-sided printing is active).  @var{extra3} is centered in the
-header line.
-
-For @acronym{HTML} and @acronym{XHTML} output, headers and footers are
-completely suppressed.
-
-Additionally, this macro starts a new page; the new line number
-is@tie{}1 again (except if the @option{-rC1} option is given on the
-command line) -- this feature is intended only for formatting multiple
-man pages; a single man page should contain exactly one @code{TH} macro
-at the beginning of the file.
-@endDefmac
-
-@Defmac {SH, [@Var{heading}], man}
-Set up an unnumbered section heading sticking out to the left.  Prints
-out all the text following @code{SH} up to the end of the line (or the
-text in the next line if there is no argument to @code{SH}) in bold face
-(or the font specified by the string @code{HF}), one size larger than
-the base document size.  Additionally, the left margin and the
-indentation for the following text is reset to its default value.
-@endDefmac
-
-@Defmac {SS, [@Var{heading}], man}
-Set up an unnumbered (sub)section heading.  Prints out all the text
-following @code{SS} up to the end of the line (or the text in the next
-line if there is no argument to @code{SS}) in bold face (or the font
-specified by the string @code{HF}), at the same size as the base
-document size.  Additionally, the left margin and the indentation for
-the following text is reset to its default value.
-@endDefmac
-
-@Defmac {TP, [@Var{nnn}], man}
-Set up an indented paragraph with label.  The indentation is set to
-@var{nnn} if that argument is supplied (the default unit is @samp{n} if
-omitted), otherwise it is set to the previous indentation value
-specified with @code{TP}, @code{IP}, or @code{HP} (or to the default
-value if none of them have been used yet).
-
-The first line of text following this macro is interpreted as a string
-to be printed flush-left, as it is appropriate for a label.  It is not
-interpreted as part of a paragraph, so there is no attempt to fill the
-first line with text from the following input lines.  Nevertheless, if
-the label is not as wide as the indentation the paragraph starts at the
-same line (but indented), continuing on the following lines.  If the
-label is wider than the indentation the descriptive part of the
-paragraph begins on the line following the label, entirely indented.
-Note that neither font shape nor font size of the label is set to a
-default value; on the other hand, the rest of the text has default font
-settings.
-@endDefmac
-
-@DefmacList {LP, , man}
-@DefmacItemx {PP, , man}
-@DefmacListEndx {P, , man}
-These macros are mutual aliases.  Any of them causes a line break at the
-current position, followed by a vertical space downwards by the amount
-specified by the @code{PD} macro.  The font size and shape are reset to
-the default value (10@dmn{pt} roman if no @option{-rS} option is given
-on the command line).  Finally, the current left margin and the
-indentation is restored.
-@endDefmac
-
-@Defmac {IP, [@Var{designator} [@Var{nnn}]], man}
-Set up an indented paragraph, using @var{designator} as a tag to mark
-its beginning.  The indentation is set to @var{nnn} if that argument is
-supplied (default unit is @samp{n}), otherwise it is set to the previous
-indentation value specified with @code{TP}, @code{IP}, or @code{HP} (or
-the default value if none of them have been used yet).  Font size and
-face of the paragraph (but not the designator) are reset to their
-default values.
-
-To start an indented paragraph with a particular indentation but without
-a designator, use @samp{""} (two double quotes) as the first argument of
-@code{IP}.
-
-For example, to start a paragraph with bullets as the designator and
-4@tie{}en indentation, write
-
-@Example
-.IP \(bu 4
-@endExample
-@endDefmac
-
-@Defmac {HP, [@Var{nnn}], man}
-@cindex hanging indentation [@code{man}]
-@cindex @code{man} macros, hanging indentation
-Set up a paragraph with hanging left indentation.  The indentation is
-set to @var{nnn} if that argument is supplied (default unit is
-@samp{n}), otherwise it is set to the previous indentation value
-specified with @code{TP}, @code{IP}, or @code{HP} (or the default value
-if non of them have been used yet).  Font size and face are reset to
-their default values.
-@endDefmac
-
-@Defmac {RS, [@Var{nnn}], man}
-@cindex left margin, how to move [@code{man}]
-@cindex @code{man} macros, moving left margin
-Move the left margin to the right by the value @var{nnn} if specified
-(default unit is @samp{n}); otherwise it is set to the previous
-indentation value specified with @code{TP}, @code{IP}, or @code{HP} (or
-to the default value if none of them have been used yet).  The
-indentation value is then set to the default.
-
-Calls to the @code{RS} macro can be nested.
-@endDefmac
-
-@Defmac {RE, [@Var{nnn}], man}
-Move the left margin back to level @var{nnn}, restoring the previous
-left margin.  If no argument is given, it moves one level back.  The
-first level (i.e., no call to @code{RS} yet) has number@tie{}1, and each
-call to @code{RS} increases the level by@tie{}1.
-@endDefmac
-
-@cindex line breaks, with vertical space [@code{man}]
-@cindex @code{man} macros, line breaks with vertical space
-To summarize, the following macros cause a line break with the insertion
-of vertical space (which amount can be changed with the @code{PD}
-macro): @code{SH}, @code{SS}, @code{TP}, @code{LP} (@code{PP},
-@code{P}), @code{IP}, and @code{HP}.
-
-@cindex line breaks, without vertical space [@code{man}]
-@cindex @code{man} macros, line breaks without vertical space
-The macros @code{RS} and @code{RE} also cause a break but do not insert
-vertical space.
-
-@cindex default indentation, resetting [@code{man}]
-@cindex indentaion, resetting to default [@code{man}]
-@cindex @code{man} macros, resetting default indentation
-Finally, the macros @code{SH}, @code{SS}, @code{LP} (@code{PP},
-@code{P}), and @code{RS} reset the indentation to its default value.
-
-@c ---------------------------------------------------------------------
-
-@node Man font macros, Miscellaneous man macros, Man usage, man
-@subsection Macros to set fonts
-@cindex font selection [@code{man}]
-@cindex @code{man} macros, how to set fonts
-
-The standard font is roman; the default text size is 10@tie{}point.  If
-command line option @option{-rS=@var{n}} is given, use @var{n}@dmn{pt}
-as the default text size.
-
-@Defmac {SM, [@Var{text}], man}
-Set the text on the same line or the text on the next line in a font
-that is one point size smaller than the default font.
-@endDefmac
-
-@Defmac {SB, [@Var{text}], man}
-@cindex bold face [@code{man}]
-@cindex @code{man} macros, bold face
-Set the text on the same line or the text on the next line in bold face
-font, one point size smaller than the default font.
-@endDefmac
-
-@Defmac {BI, text, man}
-Set its arguments alternately in bold face and italic, without a space
-between the arguments.  Thus,
-
-@Example
-.BI this "word and" that
-@endExample
-
-@noindent
-produces ``thisword andthat'' with ``this'' and ``that'' in bold face,
-and ``word and'' in italics.
-@endDefmac
-
-@Defmac {IB, text, man}
-Set its arguments alternately in italic and bold face, without a space
-between the arguments.
-@endDefmac
-
-@Defmac {RI, text, man}
-Set its arguments alternately in roman and italic, without a space
-between the arguments.
-@endDefmac
-
-@Defmac {IR, text, man}
-Set its arguments alternately in italic and roman, without a space
-between the arguments.
-@endDefmac
-
-@Defmac {BR, text, man}
-Set its arguments alternately in bold face and roman, without a space
-between the arguments.
-@endDefmac
-
-@Defmac {RB, text, man}
-Set its arguments alternately in roman and bold face, without a space
-between the arguments.
-@endDefmac
-
-@Defmac {B, [@Var{text}], man}
-Set @var{text} in bold face.  If no text is present on the line where
-the macro is called, then the text of the next line appears in bold
-face.
-@endDefmac
-
-@Defmac {I, [@Var{text}], man}
-@cindex italic fonts [@code{man}]
-@cindex @code{man} macros, italic fonts
-Set @var{text} in italic.  If no text is present on the line where the
-macro is called, then the text of the next line appears in italic.
-@endDefmac
-
-@c ---------------------------------------------------------------------
-
-@node Miscellaneous man macros, Predefined man strings, Man font macros, man
-@subsection Miscellaneous macros
-
-@pindex grohtml
-@cindex @code{man} macros, default indentation
-@cindex default indentation [@code{man}]
-The default indentation is 7.2@dmn{n} in troff mode and 7@dmn{n} in
-nroff mode except for @code{grohtml}, which ignores indentation.
-
-@Defmac {DT, , man}
-@cindex tab stops [@code{man}]
-@cindex @code{man} macros, tab stops
-Set tabs every 0.5@tie{}inches.  Since this macro is always executed
-during a call to the @code{TH} macro, it makes sense to call it only if
-the tab positions have been changed.
-@endDefmac
-
-@Defmac {PD, [@Var{nnn}], man}
-@cindex empty space before a paragraph [@code{man}]
-@cindex @code{man} macros, empty space before a paragraph
-Adjust the empty space before a new paragraph (or section).  The
-optional argument gives the amount of space (default unit is @samp{v});
-without parameter, the value is reset to its default value (1@tie{}line
-in nroff mode, 0.4@dmn{v}@tie{}otherwise).
-
-This affects the macros @code{SH}, @code{SS}, @code{TP}, @code{LP} (as
-well as @code{PP} and @code{P}), @code{IP}, and @code{HP}.
-@endDefmac
-
-The following two macros are included for BSD compatibility.
-
-@Defmac {AT, [@Var{system} [@Var{release}]], man}
-@cindex @code{man}macros, BSD compatibility
-Alter the footer for use with @acronym{AT&T} manpages.  This command
-exists only for compatibility; don't use it.  The first argument
-@var{system} can be:
-
-@table @code
-@item 3
-7th Edition (the default)
-
-@item 4
-System III
-
-@item 5
-System V
-@end table
-
-An optional second argument @var{release} to @code{AT} specifies the
-release number (such as ``System V Release 3'').
-@endDefmac
-
-@Defmac {UC, [@Var{version}], man}
-@cindex @code{man}macros, BSD compatibility
-Alters the footer for use with BSD manpages.  This command exists only
-for compatibility; don't use it.  The argument can be:
-
-@table @code
-@item 3
-3rd Berkeley Distribution (the default)
-
-@item 4
-4th Berkeley Distribution
-
-@item 5
-4.2 Berkeley Distribution
-
-@item 6
-4.3 Berkeley Distribution
-
-@item 7
-4.4 Berkeley Distribution
-@end table
-@endDefmac
-
-@c ---------------------------------------------------------------------
-
-@node Predefined man strings, Preprocessors in man pages, Miscellaneous man macros, man
-@subsection Predefined strings
-
-The following strings are defined:
-
-@Defstr {S, man}
-Switch back to the default font size.
-@endDefstr
-
-@Defstr {HF, man}
-The typeface used for headings.
-The default is @samp{B}.
-@endDefstr
-
-@Defstr {R, man}
-The `registered' sign.
-@endDefstr
-
-@Defstr {Tm, man}
-The `trademark' sign.
-@endDefstr
-
-@DefstrList {lq, man}
-@DefstrListEndx {rq, man}
-@cindex @code{lq} glyph, and @code{lq} string [@code{man}]
-@cindex @code{rq} glyph, and @code{rq} string [@code{man}]
-Left and right quote.  This is equal to @code{\(lq} and @code{\(rq},
-respectively.
-@endDefstr
-
-@c ---------------------------------------------------------------------
-
-@node Preprocessors in man pages, Optional man extensions, Predefined man strings, man
-@subsection Preprocessors in @file{man} pages
-
-@cindex preprocessor, calling convention
-@cindex calling convention of preprocessors
-If a preprocessor like @code{gtbl} or @code{geqn} is needed, it has
-become common usage to make the first line of the man page look like
-this:
-
-@Example
-'\" @var{word}
-@endExample
-
-@pindex geqn@r{, invocation in manual pages}
-@pindex grefer@r{, invocation in manual pages}
-@pindex gtbl@r{, invocation in manual pages}
-@pindex man@r{, invocation of preprocessors}
-@noindent
-Note the single space character after the double quote.  @var{word}
-consists of letters for the needed preprocessors: @samp{e} for
-@code{geqn}, @samp{r} for @code{grefer}, @samp{t} for @code{gtbl}.
-Modern implementations of the @code{man} program read this first line
-and automatically call the right preprocessor(s).
-
-@c ---------------------------------------------------------------------
-
-@node Optional man extensions,  , Preprocessors in man pages, man
-@subsection Optional @file{man} extensions
-
-@pindex man.local
-Use the file @file{man.local} for local extensions to the @code{man}
-macros or for style changes.
-
-@unnumberedsubsubsec Custom headers and footers
-@cindex @code{man} macros, custom headers and footers
-
-In groff versions 1.18.2 and later, you can specify custom headers and
-footers by redefining the following macros in @file{man.local}.
-
-@Defmac {PT, , man}
-Control the content of the headers.  Normally, the header prints the
-command name and section number on either side, and the optional fifth
-argument to @code{TH} in the center.
-@endDefmac
-
-@Defmac {BT, , man}
-Control the content of the footers.  Normally, the footer prints the
-page number and the third and fourth arguments to @code{TH}.
-
-Use the @code{FT} number register to specify the footer position.  The
-default is @minus{}0.5@dmn{i}.
-@endDefmac
-
-@unnumberedsubsubsec Ultrix-specific man macros
-@cindex Ultrix-specific @code{man} macros
-@cindex @code{man} macros, Ultrix-specific
-
-@pindex man.ultrix
-The @code{groff} source distribution includes a file named
-@file{man.ultrix}, containing macros compatible with the Ultrix variant
-of @code{man}.  Copy this file into @file{man.local} (or use the
-@code{mso} request to load it) to enable the following macros.
-
-@Defmac {CT, @Var{key}, man}
-Print @samp{<CTRL/@var{key}>}.
-@endDefmac
-
-@Defmac {CW, , man}
-Print subsequent text using the constant width (Courier) typeface.
-@endDefmac
-
-@Defmac {Ds, , man}
-Begin a non-filled display.
-@endDefmac
-
-@Defmac {De, , man}
-End a non-filled display started with @code{Ds}.
-@endDefmac
-
-@Defmac {EX, [@Var{indent}], man}
-Begin a non-filled display using the constant width (Courier) typeface.
-Use the optional @var{indent} argument to indent the display.
-@endDefmac
-
-@Defmac {EE, , man}
-End a non-filled display started with @code{EX}.
-@endDefmac
-
-@Defmac {G, [@Var{text}], man}
-Set @var{text} in Helvetica.  If no text is present on the line where
-the macro is called, then the text of the next line appears in
-Helvetica.
-@endDefmac
-
-@Defmac {GL, [@Var{text}], man}
-Set @var{text} in Helvetica Oblique.  If no text is present on the line
-where the macro is called, then the text of the next line appears in
-Helvetica Oblique.
-@endDefmac
-
-@Defmac {HB, [@Var{text}], man}
-Set @var{text} in Helvetica Bold.  If no text is present on the line
-where the macro is called, then all text up to the next @code{HB}
-appears in Helvetica Bold.
-@endDefmac
-
-@Defmac {TB, [@Var{text}], man}
-Identical to @code{HB}.
-@endDefmac
-
-@Defmac {MS, @Var{title} @Var{sect} [@Var{punct}], man}
-Set a manpage reference in Ultrix format.  The @var{title} is in Courier
-instead of italic.  Optional punctuation follows the section number
-without an intervening space.
-@endDefmac
-
-@Defmac {NT, [@code{C}] [@Var{title}], man}
-Begin a note.  Print the optional @Var{title}, or the word ``Note'',
-centered on the page.  Text following the macro makes up the body of the
-note, and is indented on both sides.  If the first argument is @code{C},
-the body of the note is printed centered (the second argument replaces
-the word ``Note'' if specified).
-@endDefmac
-
-@Defmac {NE, , man}
-End a note begun with @code{NT}.
-@endDefmac
-
-@Defmac {PN, @Var{path} [@Var{punct}], man}
-Set the path name in constant width (Courier), followed by optional
-punctuation.
-@endDefmac
-
-@Defmac {Pn, [@Var{punct}] @Var{path} [@Var{punct}], man}
-If called with two arguments, identical to @code{PN}.  If called with
-three arguments, set the second argument in constant width (Courier),
-bracketed by the first and third arguments in the current font.
-@endDefmac
-
-@Defmac {R, , man}
-Switch to roman font and turn off any underlining in effect.
-@endDefmac
-
-@Defmac {RN, , man}
-Print the string @samp{<RETURN>}.
-@endDefmac
-
-@Defmac {VS, [@code{4}], man}
-Start printing a change bar in the margin if the number@tie{}@code{4} is
-specified.  Otherwise, this macro does nothing.
-@endDefmac
-
-@Defmac {VE, , man}
-End printing the change bar begun by @code{VS}.
-@endDefmac
-
-@unnumberedsubsubsec Simple example
-
-The following example @file{man.local} file alters the @code{SH} macro
-to add some extra vertical space before printing the heading.  Headings
-are printed in Helvetica Bold.
-
-@Example
-.\" Make the heading fonts Helvetica
-.ds HF HB
-.
-.\" Put more whitespace in front of headings.
-.rn SH SH-orig
-.de SH
-.  if t .sp (u;\\n[PD]*2)
-.  SH-orig \\$*
-..
-@endExample
-
-
-@c =====================================================================
-
-@node mdoc, ms, man, Macro Packages
-@section @file{mdoc}
-@cindex @code{mdoc} macros
-
-@c XXX documentation
-@c XXX this is a placeholder until we get stuff knocked into shape
-See the @cite{groff_mdoc(7)} man page (type @command{man groff_mdoc}
-at the command line).
-
-
-@c =====================================================================
-
-@node ms, me, mdoc, Macro Packages
-@section @file{ms}
-@cindex @code{ms} macros
-
-The @file{-ms} macros are suitable for reports, letters, books, user
-manuals, and so forth.  The package provides macros for cover pages,
-section headings, paragraphs, lists, footnotes, pagination, and a table
-of contents.
-
-@menu
-* ms Intro::
-* General ms Structure::
-* ms Document Control Registers::
-* ms Cover Page Macros::
-* ms Body Text::
-* ms Page Layout::
-* Differences from AT&T ms::
-* Naming Conventions::
-@end menu
-
-@c ---------------------------------------------------------------------
-
-@node ms Intro, General ms Structure, ms, ms
-@subsection Introduction to @file{ms}
-
-The original @file{-ms} macros were included with @acronym{AT&T}
-@code{troff} as well as the @file{man} macros.  While the @file{man}
-package is intended for brief documents that can be read on-line as well
-as printed, the @file{ms} macros are suitable for longer documents that
-are meant to be printed rather than read on-line.
-
-The @file{ms} macro package included with @code{groff} is a complete,
-bottom-up re-implementation.  Several macros (specific to @acronym{AT&T}
-or Berkeley) are not included, while several new commands are.
-@xref{Differences from AT&T ms}, for more information.
-
-@c ---------------------------------------------------------------------
-
-@node General ms Structure, ms Document Control Registers, ms Intro, ms
-@subsection General structure of an @file{ms} document
-@cindex @code{ms} macros, general structure
-
-The @file{ms} macro package expects a certain amount of structure, but
-not as much as packages such as @file{man} or @file{mdoc}.
-
-The simplest documents can begin with a paragraph macro (such as
-@code{LP} or @code{PP}), and consist of text separated by paragraph
-macros or even blank lines.  Longer documents have a structure as
-follows:
-
-@table @strong
-@item Document type
-If you invoke the @code{RP} (report) macro on the first line of the
-document, @code{groff} prints the cover page information on its own
-page; otherwise it prints the information on the first page with your
-document text immediately following.  Other document formats found in
-@acronym{AT&T} @code{troff} are specific to @acronym{AT&T} or Berkeley,
-and are not supported in @code{groff}.
-
-@item Format and layout
-By setting number registers, you can change your document's type (font
-and size), margins, spacing, headers and footers, and footnotes.
-@xref{ms Document Control Registers}, for more details.
-
-@item Cover page
-A cover page consists of a title, the author's name and institution, an
-abstract, and the date.@footnote{Actually, only the title is required.}
-@xref{ms Cover Page Macros}, for more details.
-
-@item Body
-Following the cover page is your document.  You can use the @file{ms}
-macros to write reports, letters, books, and so forth.  The package is
-designed for structured documents, consisting of paragraphs interspersed
-with headings and augmented by lists, footnotes, tables, and other
-common constructs.  @xref{ms Body Text}, for more details.
-
-@item Table of contents
-Longer documents usually include a table of contents, which you can
-invoke by placing the @code{TC} macro at the end of your document.  The
-@file{ms} macros have minimal indexing facilities, consisting of the
-@code{IX} macro, which prints an entry on standard error.  Printing the
-table of contents at the end is necessary since @code{groff} is a
-single-pass text formatter, thus it cannot determine the page number of
-each section until that section has actually been set and printed.
-Since @file{ms} output is intended for hardcopy, you can manually
-relocate the pages containing the table of contents between the cover
-page and the body text after printing.
-@end table
-
-@c ---------------------------------------------------------------------
-
-@node ms Document Control Registers, ms Cover Page Macros, General ms Structure, ms
-@subsection Document control registers
-@cindex @code{ms} macros, document control registers
-
-The following is a list of document control number registers.  For the
-sake of consistency, set registers related to margins at the beginning
-of your document, or just after the @code{RP} macro.  You can set other
-registers later in your document, but you should keep them together at
-the beginning to make them easy to find and edit as necessary.
-
-@unnumberedsubsubsec Margin Settings
-
-@Defmpreg {PO, ms}
-Defines the page offset (i.e., the left margin).  There is no explicit
-right margin setting; the combination of the @code{PO} and @code{LL}
-registers implicitly define the right margin width.
-
-Effective: next page.
-
-Default value: 1@dmn{i}.
-@endDefmpreg
-
-@Defmpreg {LL, ms}
-Defines the line length (i.e., the width of the body text).
-
-Effective: next paragraph.
-
-Default: 6@dmn{i}.
-@endDefmpreg
-
-@Defmpreg {LT, ms}
-Defines the title length (i.e., the header and footer width).  This
-is usually the same as @code{LL}, but not necessarily.
-
-Effective: next paragraph.
-
-Default: 6@dmn{i}.
-@endDefmpreg
-
-@Defmpreg {HM, ms}
-Defines the header margin height at the top of the page.
-
-Effective: next page.
-
-Default: 1@dmn{i}.
-@endDefmpreg
-
-@Defmpreg {FM, ms}
-Defines the footer margin height at the bottom of the page.
-
-Effective: next page.
-
-Default: 1@dmn{i}.
-@endDefmpreg
-
-@unnumberedsubsubsec Text Settings
-
-@Defmpreg {PS, ms}
-Defines the point size of the body text.  If the value is larger than or
-equal to 1000, divide it by 1000 to get a fractional point size.  For
-example, @samp{.nr PS 10250} sets the document's point size to
-10.25@dmn{p}.
-
-Effective: next paragraph.
-
-Default: 10@dmn{p}.
-@endDefmpreg
-
-@Defmpreg {VS, ms}
-Defines the space between lines (line height plus leading).  If the
-value is larger than or equal to 1000, divide it by 1000 to get a
-fractional point size.  Due to backwards compatibility, @code{VS} must
-be smaller than 40000 (this is 40.0@dmn{p}).
-
-Effective: next paragraph.
-
-Default: 12@dmn{p}.
-@endDefmpreg
-
-@Defmpreg {PSINCR, ms}
-Defines an increment in point size, which is applied to section headings
-at nesting levels below the value specified in @code{GROWPS}.  The value
-of @code{PSINCR} should be specified in points, with the @dmn{p} scaling
-factor, and may include a fractional component; for example,
-@w{@samp{.nr PSINCR 1.5p}} sets a point size increment of 1.5@dmn{p}.
-
-Effective: next section heading.
-
-Default: 1@dmn{p}.
-@endDefmpreg
-
-@Defmpreg {GROWPS, ms}
-Defines the heading level below which the point size increment set by
-@code{PSINCR} becomes effective.  Section headings at and above the
-level specified by @code{GROWPS} are printed at the point size set by
-@code{PS}; for each level below the value of @code{GROWPS}, the point
-size is increased in steps equal to the value of @code{PSINCR}.  Setting
-@code{GROWPS} to any value less than@tie{}2 disables the incremental
-heading size feature.
-
-Effective: next section heading.
-
-Default: 0.
-@endDefmpreg
-
-@Defmpreg {HY, ms}
-Defines the hyphenation level.  @code{HY} sets safely the value of the
-low-level @code{hy} register.  Setting the value of @code{HY} to@tie{}0
-is equivalent to using the @code{nh} request.
-
-Effective: next paragraph.
-
-Default: 14.
-@endDefmpreg
-
-@Defmpreg {FAM, ms}
-Defines the font family used to typeset the document.
-
-Effective: next paragraph.
-
-Default: as defined in the output device.
-@endDefmpreg
-
-@unnumberedsubsubsec Paragraph Settings
-
-@Defmpreg {PI, ms}
-Defines the initial indentation of a (@code{PP} macro) paragraph.
-
-Effective: next paragraph.
-
-Default: 5@dmn{n}.
-@endDefmpreg
-
-@Defmpreg {PD, ms}
-Defines the space between paragraphs.
-
-Effective: next paragraph.
-
-Default: 0.3@dmn{v}.
-@endDefmpreg
-
-@Defmpreg {QI, ms}
-Defines the indentation on both sides of a quoted (@code{QP} macro)
-paragraph.
-
-Effective: next paragraph.
-
-Default: 5@dmn{n}.
-@endDefmpreg
-
-@Defmpreg {PORPHANS, ms}
-Defines the minimum number of initial lines of any paragraph that
-should be kept together, to avoid orphan lines at the bottom of a page.
-If a new paragraph is started close to the bottom of a page, and there
-is insufficient space to accommodate @code{PORPHANS} lines before an
-automatic page break, then the page break is forced, before the start of
-the paragraph.
-
-Effective: next paragraph.
-
-Default: 1.
-@endDefmpreg
-
-@Defmpreg {HORPHANS, ms}
-Defines the minimum number of lines of the following paragraph that
-should be kept together with any section heading introduced by the
-@code{NH} or @code{SH} macros.  If a section heading is placed close to
-the bottom of a page, and there is insufficient space to accommodate
-both the heading and at least @code{HORPHANS} lines of the following
-paragraph, before an automatic page break, then the page break is forced
-before the heading.
-
-Effective: next paragraph.
-
-Default: 1.
-@endDefmpreg
-
-@unnumberedsubsubsec Footnote Settings
-
-@Defmpreg {FL, ms}
-Defines the length of a footnote.
-
-Effective: next footnote.
-
-Default: @math{@code{@\n[LL]} * 5 / 6}.
-@endDefmpreg
-
-@Defmpreg {FI, ms}
-Defines the footnote indentation.
-
-Effective: next footnote.
-
-Default: 2@dmn{n}.
-@endDefmpreg
-
-@Defmpreg {FF, ms}
-The footnote format:
-@table @code
-@item 0
-Print the footnote number as a superscript; indent the footnote
-(default).
-
-@item 1
-Print the number followed by a period (like 1.@:) and indent the
-footnote.
-
-@item 2
-Like 1, without an indentation.
-
-@item 3
-Like 1, but print the footnote number as a hanging paragraph.
-@end table
-
-Effective: next footnote.
-
-Default: 0.
-@endDefmpreg
-
-@Defmpreg {FPS, ms}
-Defines the footnote point size.  If the value is larger than or equal
-to 1000, divide it by 1000 to get a fractional point size.
-
-Effective: next footnote.
-
-Default: @math{@code{@\n[PS]} - 2}.
-@endDefmpreg
-
-@Defmpreg {FVS, ms}
-Defines the footnote vertical spacing.  If the value is larger than or
-equal to 1000, divide it by 1000 to get a fractional point size.
-
-Effective: next footnote.
-
-Default: @math{@code{@\n[FPS]} + 2}.
-@endDefmpreg
-
-@Defmpreg {FPD, ms}
-Defines the footnote paragraph spacing.
-
-Effective: next footnote.
-
-Default: @math{@code{@\n[PD]} / 2}.
-@endDefmpreg
-
-@unnumberedsubsubsec Miscellaneous Number Registers
-
-@Defmpreg {MINGW, ms}
-Defines the minimum width between columns in a multi-column document.
-
-Effective: next page.
-
-Default: 2@dmn{n}.
-@endDefmpreg
-
-@Defmpreg {DD, ms}
-Sets the vertical spacing before and after a display, a @code{tbl} table, an
-@code{eqn} equation, or a @code{pic} image.
-
-Effective: next paragraph.
-
-Default: 0.5@dmn{v}.
-@endDefmpreg
-
-@c ---------------------------------------------------------------------
-
-@node ms Cover Page Macros, ms Body Text, ms Document Control Registers, ms
-@subsection Cover page macros
-@cindex @code{ms} macros, cover page
-@cindex cover page macros, [@code{ms}]
-
-Use the following macros to create a cover page for your document in the
-order shown.
-
-@Defmac {RP, [@code{no}], ms}
-Specifies the report format for your document.  The report format
-creates a separate cover page.  The default action (no @code{RP} macro)
-is to print a subset of the cover page on page@tie{}1 of your document.
-
-If you use the word @code{no} as an optional argument, @code{groff}
-prints a title page but does not repeat any of the title page
-information (title, author, abstract, etc.@:) on page@tie{}1 of the
-document.
-@endDefmac
-
-@Defmac {P1, , ms}
-(P-one) Prints the header on page@tie{}1.  The default is to suppress
-the header.
-@endDefmac
-
-@Defmac {DA, [@dots{}], ms}
-(optional) Prints the current date, or the arguments to the macro if
-any, on the title page (if specified) and in the footers.  This is the
-default for @code{nroff}.
-@endDefmac
-
-@Defmac {ND, [@dots{}], ms}
-(optional) Prints the current date, or the arguments to the macro if
-any, on the title page (if specified) but not in the footers.  This is
-the default for @code{troff}.
-@endDefmac
-
-@Defmac {TL, , ms}
-Specifies the document title.  @code{groff} collects text following the
-@code{TL} macro into the title, until reaching the author name or
-abstract.
-@endDefmac
-
-@Defmac {AU, , ms}
-Specifies the author's name, which appears on the line (or lines)
-immediately following.  You can specify multiple authors as follows:
-
-@Example
-.AU
-John Doe
-.AI
-University of West Bumblefuzz
-.AU
-Martha Buck
-.AI
-Monolithic Corporation
-
-...
-@endExample
-@endDefmac
-
-@Defmac {AI, , ms}
-Specifies the author's institution.  You can specify multiple
-institutions in the same way that you specify multiple authors.
-@endDefmac
-
-@Defmac {AB, [@code{no}], ms}
-Begins the abstract.  The default is to print the word
-@acronym{ABSTRACT}, centered and in italics, above the text of the
-abstract.  The word @code{no} as an optional argument suppresses this
-heading.
-@endDefmac
-
-@Defmac {AE, , ms}
-Ends the abstract.
-@endDefmac
-
-The following is example mark-up for a title page.
-@cindex title page, example markup
-@cindex example markup, title page
-
-@CartoucheExample
-.RP
-.TL
-The Inevitability of Code Bloat
-in Commercial and Free Software
-.AU
-J. Random Luser
-.AI
-University of West Bumblefuzz
-.AB
-This report examines the long-term growth
-of the code bases in two large, popular software
-packages; the free Emacs and the commercial
-Microsoft Word.
-While differences appear in the type or order
-of features added, due to the different
-methodologies used, the results are the same
-in the end.
-.PP
-The free software approach is shown to be
-superior in that while free software can
-become as bloated as commercial offerings,
-free software tends to have fewer serious
-bugs and the added features are in line with
-user demand.
-.AE
-
-... the rest of the paper follows ...
-@endCartoucheExample
-
-@c ---------------------------------------------------------------------
-
-@node ms Body Text, ms Page Layout, ms Cover Page Macros, ms
-@subsection Body text
-@cindex @code{ms} macros, body text
-
-This section describes macros used to mark up the body of your document.
-Examples include paragraphs, sections, and other groups.
-
-@menu
-* Paragraphs in ms::
-* Headings in ms::
-* Highlighting in ms::
-* Lists in ms::
-* Indentation values in ms::
-* Tabstops in ms::
-* ms Displays and Keeps::
-* ms Insertions::
-* Example multi-page table::
-* ms Footnotes::
-@end menu
-
-@c ---------------------------------------------------------------------
-
-@node Paragraphs in ms, Headings in ms, ms Body Text, ms Body Text
-@subsubsection Paragraphs
-@cindex @code{ms} macros, paragraph handling
-
-The following paragraph types are available.
-
-@Defmac {PP, , ms}
-Sets a paragraph with an initial indentation.
-@endDefmac
-
-@Defmac {LP, , ms}
-Sets a paragraph without an initial indentation.
-@endDefmac
-
-@Defmac {QP, , ms}
-Sets a paragraph that is indented at both left and right margins.  The
-effect is identical to the @acronym{HTML} @code{<BLOCKQUOTE>} element.
-The next paragraph or heading returns margins to normal.
-@endDefmac
-
-@Defmac {XP, , ms}
-Sets a paragraph whose lines are indented, except for the first line.
-This is a Berkeley extension.
-@endDefmac
-
-The following markup uses all four paragraph macros.
-
-@CartoucheExample
-.NH 2
-Cases used in the study
-.LP
-The following software and versions were
-considered for this report.
-.PP
-For commercial software, we chose
-.B "Microsoft Word for Windows" ,
-starting with version 1.0 through the
-current version (Word 2000).
-.PP
-For free software, we chose
-.B Emacs ,
-from its first appearance as a standalone
-editor through the current version (v20).
-See [Bloggs 2002] for details.
-.QP
-Franklin's Law applied to software:
-software expands to outgrow both
-RAM and disk space over time.
-.LP
-Bibliography:
-.XP
-Bloggs, Joseph R.,
-.I "Everyone's a Critic" ,
-Underground Press, March 2002.
-A definitive work that answers all questions
-and criticisms about the quality and usability of
-free software.
-@endCartoucheExample
-
-The @code{PORPHANS} register (@pxref{ms Document Control Registers})
-operates in conjunction with each of these macros, to inhibit the
-printing of orphan lines at the bottom of any page.
-
-@c ---------------------------------------------------------------------
-
-@node Headings in ms, Highlighting in ms, Paragraphs in ms, ms Body Text
-@subsubsection Headings
-@cindex @code{ms} macros, headings
-
-Use headings to create a hierarchical structure for your document.  The
-@file{ms} macros print headings in @strong{bold}, using the same font
-family and point size as the body text.
-
-The following describes the heading macros:
-
-@DefmacList {NH, @Var{curr-level}, ms}
-@DefmacListEnd {NH, @t{S} @Var{level0} @dots{}, ms}
-Numbered heading.  The argument is either a numeric argument to indicate
-the level of the heading, or the letter@tie{}@code{S} followed by
-numeric arguments to set the heading level explicitly.
-
-If you specify heading levels out of sequence, such as invoking
-@samp{.NH 3} after @samp{.NH 1}, @code{groff} prints a warning on
-standard error.
-@endDefmac
-
-@DefstrList {SN, ms}
-@DefstrItemx {SN-DOT, ms}
-@DefstrListEndx {SN-NO-DOT, ms}
-After invocation of @code{NH}, the assigned section number is made
-available in the strings @code{SN-DOT} (as it appears in a printed
-section heading with default formatting, followed by a terminating
-period), and @code{SN-NO-DOT} (with the terminating period omitted).
-The string @code{SN} is also defined, as an alias for @code{SN-DOT}; if
-preferred, you may redefine it as an alias for @code{SN-NO-DOT}, by
-including the initialization
-@Example
-.als SN SN-NO-DOT
-@endExample
-
-@noindent
-at any time @strong{before} you would like the change to take effect.
-@endDefstr
-
-@Defstr {SN-STYLE, ms}
-You may control the style used to print section numbers, within numbered
-section headings, by defining an appropriate alias for the string
-@code{SN-STYLE}.  The default style, in which the printed section number
-is followed by a terminating period, is obtained by defining the alias
-
-@Example
-.als SN-STYLE SN-DOT
-@endExample
-
-@noindent
-If you prefer to omit the terminating period, from section numbers
-appearing in numbered section headings, you may define the alias
-
-@Example
-.als SN-STYLE SN-NO-DOT
-@endExample
-
-@noindent
-Any such change in section numbering style becomes effective from the
-next use of @code{.NH}, following redefinition of the alias for
-@code{SN-STYLE}.
-@endDefstr
-
-@Defmac {SH, [@Var{match-level}], ms}
-Unnumbered subheading.
-
-The optional @var{match-level} argument is a GNU extension.  It is a
-number indicating the level of the heading, in a manner analogous to the
-@var{curr-level} argument to @code{.NH}.  Its purpose is to match the
-point size, at which the heading is printed, to the size of a numbered
-heading at the same level, when the @code{GROWPS} and @code{PSINCR}
-heading size adjustment mechanism is in effect.  @xref{ms Document
-Control Registers}.
-@endDefmac
-
-The @code{HORPHANS} register (@pxref{ms Document Control Registers})
-operates in conjunction with the @code{NH} and @code{SH} macros, to
-inhibit the printing of orphaned section headings at the bottom of any
-page.
-
-@c ---------------------------------------------------------------------
-
-@node Highlighting in ms, Lists in ms, Headings in ms, ms Body Text
-@subsubsection Highlighting
-@cindex @code{ms} macros, highlighting
-
-The @file{ms} macros provide a variety of methods to highlight or
-emphasize text:
-
-@Defmac {B, [@Var{txt} [@Var{post} [@Var{pre}]]], ms}
-Sets its first argument in @strong{bold type}.  If you specify a second
-argument, @code{groff} prints it in the previous font after the bold
-text, with no intervening space (this allows you to set punctuation
-after the highlighted text without highlighting the punctuation).
-Similarly, it prints the third argument (if any) in the previous font
-@strong{before} the first argument.  For example,
-
-@Example
-.B foo ) (
-@endExample
-
-prints (@strong{foo}).
-
-If you give this macro no arguments, @code{groff} prints all text
-following in bold until the next highlighting, paragraph, or heading
-macro.
-@endDefmac
-
-@Defmac {R, [@Var{txt} [@Var{post} [@Var{pre}]]], ms}
-Sets its first argument in roman (or regular) type.  It operates
-similarly to the @code{B}@tie{}macro otherwise.
-@endDefmac
-
-@Defmac {I, [@Var{txt} [@Var{post} [@Var{pre}]]], ms}
-Sets its first argument in @emph{italic type}.  It operates similarly
-to the @code{B}@tie{}macro otherwise.
-@endDefmac
-
-@Defmac {CW, [@Var{txt} [@Var{post} [@Var{pre}]]], ms}
-Sets its first argument in a @code{constant width face}.  It operates
-similarly to the @code{B}@tie{}macro otherwise.
-@endDefmac
-
-@Defmac {BI, [@Var{txt} [@Var{post} [@Var{pre}]]], ms}
-Sets its first argument in bold italic type.  It operates similarly to
-the @code{B}@tie{}macro otherwise.
-@endDefmac
-
-@Defmac {BX, [@Var{txt}], ms}
-Prints its argument and draws a box around it.  If you want to box a
-string that contains spaces, use a digit-width space (@code{\0}).
-@endDefmac
-
-@Defmac {UL, [@Var{txt} [@Var{post}]], ms}
-Prints its first argument with an underline.  If you specify a second
-argument, @code{groff} prints it in the previous font after the
-underlined text, with no intervening space.
-@endDefmac
-
-@Defmac {LG, , ms}
-Prints all text following in larger type (two points larger than the
-current point size) until the next font size, highlighting, paragraph,
-or heading macro.  You can specify this macro multiple times to
-enlarge the point size as needed.
-@endDefmac
-
-@Defmac {SM, , ms}
-Prints all text following in smaller type (two points smaller than the
-current point size) until the next type size, highlighting, paragraph,
-or heading macro.  You can specify this macro multiple times to reduce
-the point size as needed.
-@endDefmac
-
-@Defmac {NL, , ms}
-Prints all text following in the normal point size (that is, the value
-of the @code{PS} register).
-@endDefmac
-
-@DefstrList {@Lbrace{}, ms}
-@DefstrListEndx {@Rbrace{}, ms}
-Text enclosed with @code{\*@{} and @code{\*@}} is printed as a
-superscript.
-@endDefstr
-
-@c ---------------------------------------------------------------------
-
-@node Lists in ms, Indentation values in ms, Highlighting in ms, ms Body Text
-@subsubsection Lists
-@cindex @code{ms} macros, lists
-
-The @code{IP} macro handles duties for all lists.
-
-@Defmac {IP, [@Var{marker} [@Var{width}]], ms}
-The @var{marker} is usually a bullet glyph (@code{\[bu]}) for unordered
-lists, a number (or auto-incrementing number register) for numbered
-lists, or a word or phrase for indented (glossary-style) lists.
-
-The @var{width} specifies the indentation for the body of each list
-item; its default unit is @samp{n}.  Once specified, the indentation
-remains the same for all list items in the document until specified
-again.
-
-The @code{PORPHANS} register (@pxref{ms Document Control Registers})
-operates in conjunction with the @code{IP} macro, to inhibit the
-printing of orphaned list markers at the bottom of any page.
-@endDefmac
-
-The following is an example of a bulleted list.
-@cindex example markup, bulleted list [@code{ms}]
-@cindex bulleted list, example markup [@code{ms}]
-
-@Example
-A bulleted list:
-.IP \[bu] 2
-lawyers
-.IP \[bu]
-guns
-.IP \[bu]
-money
-@endExample
-
-Produces:
-
-@Example
-A bulleted list:
-
-o lawyers
-
-o guns
-
-o money
-@endExample
-
-The following is an example of a numbered list.
-@cindex example markup, numbered list [@code{ms}]
-@cindex numbered list, example markup [@code{ms}]
-
-@Example
-.nr step 1 1
-A numbered list:
-.IP \n[step] 3
-lawyers
-.IP \n+[step]
-guns
-.IP \n+[step]
-money
-@endExample
-
-Produces:
-
-@Example
-A numbered list:
-
-1. lawyers
-
-2. guns
-
-3. money
-@endExample
-
-Note the use of the auto-incrementing number register in this example.
-
-The following is an example of a glossary-style list.
-@cindex example markup, glossary-style list [@code{ms}]
-@cindex glossary-style list, example markup [@code{ms}]
-
-@Example
-A glossary-style list:
-.IP lawyers 0.4i
-Two or more attorneys.
-.IP guns
-Firearms, preferably
-large-caliber.
-.IP money
-Gotta pay for those
-lawyers and guns!
-@endExample
-
-Produces:
-
-@Example
-A glossary-style list:
-
-lawyers
-      Two or more attorneys.
-
-guns  Firearms, preferably large-caliber.
-
-money
-      Gotta pay for those lawyers and guns!
-@endExample
-
-In the last example, the @code{IP} macro places the definition on the
-same line as the term if it has enough space; otherwise, it breaks to
-the next line and starts the definition below the term.  This may or may
-not be the effect you want, especially if some of the definitions break
-and some do not.  The following examples show two possible ways to force
-a break.
-
-The first workaround uses the @code{br} request to force a break after
-printing the term or label.
-
-@CartoucheExample
-A glossary-style list:
-.IP lawyers 0.4i
-Two or more attorneys.
-.IP guns
-.br
-Firearms, preferably large-caliber.
-.IP money
-Gotta pay for those lawyers and guns!
-@endCartoucheExample
-
-The second workaround uses the @code{\p} escape to force the break.
-Note the space following the escape; this is important.  If you omit the
-space, @code{groff} prints the first word on the same line as the term
-or label (if it fits) @strong{then} breaks the line.
-
-@CartoucheExample
-A glossary-style list:
-.IP lawyers 0.4i
-Two or more attorneys.
-.IP guns
-\p Firearms, preferably large-caliber.
-.IP money
-Gotta pay for those lawyers and guns!
-@endCartoucheExample
-
-To set nested lists, use the @code{RS} and @code{RE} macros.
-@xref{Indentation values in ms}, for more information.
-@cindex @code{ms} macros, nested lists
-@cindex nested lists [@code{ms}]
-
-For example:
-
-@CartoucheExample
-.IP \[bu] 2
-Lawyers:
-.RS
-.IP \[bu]
-Dewey,
-.IP \[bu]
-Cheatham,
-.IP \[bu]
-and Howe.
-.RE
-.IP \[bu]
-Guns
-@endCartoucheExample
-
-Produces:
-
-@Example
-o Lawyers:
-
-  o  Dewey,
-
-  o  Cheatham,
-
-  o  and Howe.
-
-o Guns
-@endExample
-
-@c ---------------------------------------------------------------------
-
-@node Indentation values in ms, Tabstops in ms, Lists in ms, ms Body Text
-@subsubsection Indentation values
-
-In many situations, you may need to indentation a section of text while
-still wrapping and filling.  @xref{Lists in ms}, for an example of
-nested lists.
-
-@DefmacList {RS, , ms}
-@DefmacListEndx {RE, , ms}
-These macros begin and end an indented section.  The @code{PI} register
-controls the amount of indentation, allowing the indented text to line
-up under hanging and indented paragraphs.
-@endDefmac
-
-@xref{ms Displays and Keeps}, for macros to indentation and turn off
-filling.
-
-@c ---------------------------------------------------------------------
-
-@node Tabstops in ms, ms Displays and Keeps, Indentation values in ms, ms Body Text
-@subsubsection Tab Stops
-
-Use the @code{ta} request to define tab stops as needed.  @xref{Tabs and
-Fields}.
-
-@Defmac {TA, , ms}
-Use this macro to reset the tab stops to the default for @file{ms}
-(every 5n).  You can redefine the @code{TA} macro to create a different
-set of default tab stops.
-@endDefmac
-
-@c ---------------------------------------------------------------------
-
-@node ms Displays and Keeps, ms Insertions, Tabstops in ms, ms Body Text
-@subsubsection Displays and keeps
-@cindex @code{ms} macros, displays
-@cindex @code{ms} macros, keeps
-@cindex keeps [@code{ms}]
-@cindex displays [@code{ms}]
-
-Use displays to show text-based examples or figures (such as code
-listings).
-
-Displays turn off filling, so lines of code are displayed as-is without
-inserting @code{br} requests in between each line.  Displays can be
-@dfn{kept} on a single page, or allowed to break across pages.
-
-@DefmacList {DS, @t{L}, ms}
-@DefmacItemx {LD, , ms}
-@DefmacListEndx {DE, , ms}
-Left-justified display.  The @samp{.DS L} call generates a page break,
-if necessary, to keep the entire display on one page.  The @code{LD}
-macro allows the display to break across pages.  The @code{DE} macro
-ends the display.
-@endDefmac
-
-@DefmacList {DS, @t{I}, ms}
-@DefmacItemx {ID, , ms}
-@DefmacListEndx {DE, , ms}
-Indents the display as defined by the @code{DI} register.  The @samp{.DS
-I} call generates a page break, if necessary, to keep the entire display
-on one page.  The @code{ID} macro allows the display to break across
-pages.  The @code{DE} macro ends the display.
-@endDefmac
-
-@DefmacList {DS, @t{B}, ms}
-@DefmacItemx {BD, , ms}
-@DefmacListEndx {DE, , ms}
-Sets a block-centered display: the entire display is left-justified, but
-indented so that the longest line in the display is centered on the
-page.  The @samp{.DS B} call generates a page break, if necessary, to
-keep the entire display on one page.  The @code{BD} macro allows the
-display to break across pages.  The @code{DE} macro ends the display.
-@endDefmac
-
-@DefmacList {DS, @t{C}, ms}
-@DefmacItemx {CD, , ms}
-@DefmacListEndx {DE, , ms}
-Sets a centered display: each line in the display is centered.  The
-@samp{.DS C} call generates a page break, if necessary, to keep the
-entire display on one page.  The @code{CD} macro allows the display to
-break across pages.  The @code{DE} macro ends the display.
-@endDefmac
-
-@DefmacList {DS, @t{R}, ms}
-@DefmacItemx {RD, , ms}
-@DefmacListEndx {DE, , ms}
-Right-justifies each line in the display.  The @samp{.DS R} call
-generates a page break, if necessary, to keep the entire display on one
-page.  The @code{RD} macro allows the display to break across pages.
-The @code{DE} macro ends the display.
-@endDefmac
-
-@DefmacList {Ds, , ms}
-@DefmacListEndx {De, , ms}
-These two macros were formerly provided as aliases for @code{DS} and
-@code{DE}, respectively.  They have been removed, and should no longer
-be used.  The original implementations of @code{DS} and @code{DE} are
-retained, and should be used instead.  X11 documents that actually use
-@code{Ds} and @code{De} always load a specific macro file from the X11
-distribution (@file{macros.t}) that provides proper definitions for the
-two macros.
-@endDefmac
-
-On occasion, you may want to @dfn{keep} other text together on a page.
-For example, you may want to keep two paragraphs together, or a
-paragraph that refers to a table (or list, or other item) immediately
-following.  The @file{ms} macros provide the @code{KS} and @code{KE}
-macros for this purpose.
-
-@DefmacList {KS, , ms}
-@DefmacListEndx {KE, , ms}
-The @code{KS} macro begins a block of text to be kept on a single page,
-and the @code{KE} macro ends the block.
-@endDefmac
-
-@DefmacList {KF, , ms}
-@DefmacListEndx {KE, , ms}
-Specifies a @dfn{floating keep}; if the keep cannot fit on the current
-page, @code{groff} holds the contents of the keep and allows text
-following the keep (in the source file) to fill in the remainder of the
-current page.  When the page breaks, whether by an explicit @code{bp}
-request or by reaching the end of the page, @code{groff} prints the
-floating keep at the top of the new page.  This is useful for printing
-large graphics or tables that do not need to appear exactly where
-specified.
-@endDefmac
-
-You can also use the @code{ne} request to force a page break if there is
-not enough vertical space remaining on the page.
-
-Use the following macros to draw a box around a section of text (such as
-a display).
-
-@DefmacList {B1, , ms}
-@DefmacListEndx {B2, , ms}
-Marks the beginning and ending of text that is to have a box drawn
-around it.  The @code{B1} macro begins the box; the @code{B2} macro ends
-it.  Text in the box is automatically placed in a diversion (keep).
-@endDefmac
-
-@c ---------------------------------------------------------------------
-
-@node ms Insertions, Example multi-page table, ms Displays and Keeps, ms Body Text
-@subsubsection Tables, figures, equations, and references
-@cindex @code{ms} macros, tables
-@cindex @code{ms} macros, figures
-@cindex @code{ms} macros, equations
-@cindex @code{ms} macros, references
-@cindex tables [@code{ms}]
-@cindex figures [@code{ms}]
-@cindex equations [@code{ms}]
-@cindex references [@code{ms}]
-
-The @file{ms} macros support the standard @code{groff} preprocessors:
-@code{tbl}, @code{pic}, @code{eqn}, and @code{refer}.
-@pindex tbl
-@pindex pic
-@pindex eqn
-@pindex refer
-You mark text meant for preprocessors by enclosing it in pairs of tags
-as follows.
-
-@DefmacList {TS, [@code{H}], ms}
-@DefmacListEndx {TE, , ms}
-Denotes a table, to be processed by the @code{tbl} preprocessor.  The
-optional argument@tie{}@code{H} to @code{TS} instructs @code{groff} to
-create a running header with the information up to the @code{TH} macro.
-@code{groff} prints the header at the beginning of the table; if the
-table runs onto another page, @code{groff} prints the header on the next
-page as well.
-@endDefmac
-
-@DefmacList {PS, , ms}
-@DefmacListEndx {PE, , ms}
-Denotes a graphic, to be processed by the @code{pic} preprocessor.  You
-can create a @code{pic} file by hand, using the @acronym{AT&T}
-@code{pic} manual available on the Web as a reference, or by using a
-graphics program such as @code{xfig}.
-@endDefmac
-
-@DefmacList {EQ, [@Var{align}], ms}
-@DefmacListEndx {EN, , ms}
-Denotes an equation, to be processed by the @code{eqn} preprocessor.
-The optional @var{align} argument can be @code{C}, @code{L},
-or@tie{}@code{I} to center (the default), left-justify, or indent the
-equation.
-@endDefmac
-
-@DefmacList {[, , ms}
-@DefmacListEndx {], , ms}
-Denotes a reference, to be processed by the @code{refer} preprocessor.
-The GNU @cite{refer(1)} man page provides a comprehensive reference to
-the preprocessor and the format of the bibliographic database.
-@endDefmac
-
-@menu
-* Example multi-page table::
-@end menu
-
-@c ---------------------------------------------------------------------
-
-@node Example multi-page table, ms Footnotes, ms Insertions, ms Body Text
-@subsubsection An example multi-page table
-@cindex example markup, multi-page table [@code{ms}]
-@cindex multi-page table, example markup [@code{ms}]
-
-The following is an example of how to set up a table that may print
-across two or more pages.
-
-@CartoucheExample
-.TS H
-allbox expand;
-cb | cb .
-Text      ...of heading...
-_
-.TH
-.T&
-l | l .
-... the rest of the table follows...
-.CW
-.TE
-@endCartoucheExample
-
-@c ---------------------------------------------------------------------
-
-@node ms Footnotes,  , Example multi-page table, ms Body Text
-@subsubsection Footnotes
-@cindex @code{ms} macros, footnotes
-@cindex footnotes [@code{ms}]
-
-The @file{ms} macro package has a flexible footnote system.  You can
-specify either numbered footnotes or symbolic footnotes (that is, using
-a marker such as a dagger symbol).
-
-@Defstr {*, ms}
-Specifies the location of a numbered footnote marker in the text.
-@endDefesc
-
-@DefmacList {FS, , ms}
-@DefmacListEndx {FE, , ms}
-Specifies the text of the footnote.  The default action is to create a
-numbered footnote; you can create a symbolic footnote by specifying a
-@dfn{mark} glyph (such as @code{\[dg]} for the dagger glyph) in the body
-text and as an argument to the @code{FS} macro, followed by the text of
-the footnote and the @code{FE} macro.
-@endDefmac
-
-You can control how @code{groff} prints footnote numbers by changing the
-value of the @code{FF} register.  @xref{ms Document Control Registers}.
-
-@cindex footnotes, and keeps [@code{ms}]
-@cindex keeps, and footnotes [@code{ms}]
-@cindex footnotes, and displays [@code{ms}]
-@cindex displays, and footnotes [@code{ms}]
-Footnotes can be safely used within keeps and displays, but you should
-avoid using numbered footnotes within floating keeps.  You can set a
-second @code{\**} marker between a @code{\**} and its corresponding
-@code{.FS} entry; as long as each @code{FS} macro occurs @emph{after}
-the corresponding @code{\**} and the occurrences of @code{.FS} are in
-the same order as the corresponding occurrences of @code{\**}.
-
-@c ---------------------------------------------------------------------
-
-@node ms Page Layout, Differences from AT&T ms, ms Body Text, ms
-@subsection Page layout
-@cindex @code{ms} macros, page layout
-@cindex page layout [@code{ms}]
-
-The default output from the @file{ms} macros provides a minimalist page
-layout: it prints a single column, with the page number centered at the
-top of each page.  It prints no footers.
-
-You can change the layout by setting the proper number registers and
-strings.
-
-@menu
-* ms Headers and Footers::
-* ms Margins::
-* ms Multiple Columns::
-* ms TOC::
-* ms Strings and Special Characters::
-@end menu
-
-@c ---------------------------------------------------------------------
-
-@node ms Headers and Footers, ms Margins, ms Page Layout, ms Page Layout
-@subsubsection Headers and footers
-@cindex @code{ms} macros, headers
-@cindex @code{ms} macros, footers
-@cindex headers [@code{ms}]
-@cindex footers [@code{ms}]
-
-For documents that do not distinguish between odd and even pages, set
-the following strings:
-
-@DefstrList {LH, ms}
-@DefstrItemx {CH, ms}
-@DefstrListEndx {RH, ms}
-Sets the left, center, and right headers.
-@endDefstr
-
-@DefstrList {LF, ms}
-@DefstrItemx {CF, ms}
-@DefstrListEndx {RF, ms}
-Sets the left, center, and right footers.
-@endDefstr
-
-For documents that need different information printed in the even and
-odd pages, use the following macros:
-
-@DefmacList {OH, @t{'}@Var{left}@t{'}@Var{center}@t{'}@Var{right}@t{'}, ms}
-@DefmacItemx {EH, @t{'}@Var{left}@t{'}@Var{center}@t{'}@Var{right}@t{'}, ms}
-@DefmacItemx {OF, @t{'}@Var{left}@t{'}@Var{center}@t{'}@Var{right}@t{'}, ms}
-@DefmacListEndx {EF, @t{'}@Var{left}@t{'}@Var{center}@t{'}@Var{right}@t{'}, ms}
-The @code{OH} and @code{EH} macros define headers for the odd and even
-pages; the @code{OF} and @code{EF} macros define footers for the odd and
-even pages.  This is more flexible than defining the individual strings.
-
-You can replace the quote (@code{'}) marks with any character not
-appearing in the header or footer text.
-@endDefmac
-
-To specify custom header and footer processing, redefine the following
-macros:
-
-@DefmacList {PT,, ms}
-@DefmacItemx {HD,, ms}
-@DefmacListEndx {BT,, ms}
-The @code{PT} macro defines a custom header; the @code{BT} macro defines
-a custom footer.  These macros must handle odd/even/first page
-differences if necessary.
-
-The @code{HD} macro defines additional header processing to take place
-after executing the @code{PT} macro.
-@endDefmac
-
-@c ---------------------------------------------------------------------
-
-@node ms Margins, ms Multiple Columns, ms Headers and Footers, ms Page Layout
-@subsubsection Margins
-@cindex @code{ms} macros, margins
-
-You control margins using a set of number registers.  @xref{ms Document
-Control Registers}, for details.
-
-@c ---------------------------------------------------------------------
-
-@node ms Multiple Columns, ms TOC, ms Margins, ms Page Layout
-@subsubsection Multiple columns
-@cindex @code{ms} macros, multiple columns
-@cindex multiple columns [@code{ms}]
-
-The @file{ms} macros can set text in as many columns as do reasonably
-fit on the page.  The following macros are available; all of them force
-a page break if a multi-column mode is already set.  However, if the
-current mode is single-column, starting a multi-column mode does
-@emph{not} force a page break.
-
-@Defmac {1C, , ms}
-Single-column mode.
-@endDefmac
-
-@Defmac {2C, , ms}
-Two-column mode.
-@endDefmac
-
-@Defmac {MC, [@Var{width} [@Var{gutter}]], ms}
-Multi-column mode.  If you specify no arguments, it is equivalent to the
-@code{2C} macro.  Otherwise, @var{width} is the width of each column and
-@var{gutter} is the space between columns.  The @code{MINGW} number
-register controls the default gutter width.
-@endDefmac
-
-@c ---------------------------------------------------------------------
-
-@node ms TOC, ms Strings and Special Characters, ms Multiple Columns, ms Page Layout
-@subsubsection Creating a table of contents
-@cindex @code{ms} macros, creating table of contents
-@cindex table of contents, creating [@code{ms}]
-
-The facilities in the @file{ms} macro package for creating a table of
-contents are semi-automated at best.  Assuming that you want the table
-of contents to consist of the document's headings, you need to repeat
-those headings wrapped in @code{XS} and @code{XE} macros.
-
-@DefmacList {XS, [@Var{page}], ms}
-@DefmacItemx {XA, [@Var{page}], ms}
-@DefmacListEndx {XE, , ms}
-These macros define a table of contents or an individual entry in the
-table of contents, depending on their use.  The macros are very simple;
-they cannot indent a heading based on its level.  The easiest way to
-work around this is to add tabs to the table of contents string.  The
-following is an example:
-
-@CartoucheExample
-.NH 1
-Introduction
-.XS
-Introduction
-.XE
-.LP
-...
-.CW
-.NH 2
-Methodology
-.XS
-Methodology
-.XE
-.LP
-...
-@endCartoucheExample
-
-You can manually create a table of contents by beginning with the
-@code{XS} macro for the first entry, specifying the page number for that
-entry as the argument to @code{XS}.  Add subsequent entries using the
-@code{XA} macro, specifying the page number for that entry as the
-argument to @code{XA}.  The following is an example:
-
-@CartoucheExample
-.XS 1
-Introduction
-.XA 2
-A Brief History of the Universe
-.XA 729
-Details of Galactic Formation
-...
-.XE
-@endCartoucheExample
-@endDefmac
-
-@Defmac {TC, [@code{no}], ms}
-Prints the table of contents on a new page, setting the page number
-to@tie{}@strong{i} (Roman lowercase numeral one).  You should usually
-place this macro at the end of the file, since @code{groff} is a
-single-pass formatter and can only print what has been collected up to
-the point that the @code{TC} macro appears.
-
-The optional argument @code{no} suppresses printing the title specified
-by the string register @code{TOC}.
-@endDefmac
-
-@Defmac {PX, [@code{no}], ms}
-Prints the table of contents on a new page, using the current page
-numbering sequence.  Use this macro to print a manually-generated table
-of contents at the beginning of your document.
-
-The optional argument @code{no} suppresses printing the title specified
-by the string register @code{TOC}.
-@endDefmac
-
-The @cite{Groff and Friends HOWTO} includes a @code{sed} script that
-automatically inserts @code{XS} and @code{XE} macro entries after each
-heading in a document.
-
-Altering the @code{NH} macro to automatically build the table of
-contents is perhaps initially more difficult, but would save a great
-deal of time in the long run if you use @file{ms} regularly.
-
-@c ---------------------------------------------------------------------
-
-@node ms Strings and Special Characters,  , ms TOC, ms Page Layout
-@subsubsection Strings and Special Characters
-@cindex @code{ms} macros, strings
-@cindex @code{ms} macros, special characters
-@cindex @code{ms} macros, accent marks
-@cindex accent marks [@code{ms}]
-@cindex special characters [@code{ms}]
-@cindex strings [@code{ms}]
-
-The @file{ms} macros provide the following predefined strings.  You can
-change the string definitions to help in creating documents in languages
-other than English.
-
-@Defstr {REFERENCES, ms}
-Contains the string printed at the beginning of the references
-(bibliography) page.  The default is @samp{References}.
-@endDefstr
-
-@Defstr {ABSTRACT, ms}
-Contains the string printed at the beginning of the abstract.  The
-default is @samp{ABSTRACT}.
-@endDefstr
-
-@Defstr {TOC, ms}
-Contains the string printed at the beginning of the table of contents.
-@endDefstr
-
-@DefstrList {MONTH1, ms}
-@DefstrItemx {MONTH2, ms}
-@DefstrItemx {MONTH3, ms}
-@DefstrItemx {MONTH4, ms}
-@DefstrItemx {MONTH5, ms}
-@DefstrItemx {MONTH6, ms}
-@DefstrItemx {MONTH7, ms}
-@DefstrItemx {MONTH8, ms}
-@DefstrItemx {MONTH9, ms}
-@DefstrItemx {MONTH10, ms}
-@DefstrItemx {MONTH11, ms}
-@DefstrListEndx {MONTH12, ms}
-Prints the full name of the month in dates.  The default is
-@samp{January}, @samp{February}, etc.
-@endDefstr
-
-The following special characters are available@footnote{For an
-explanation what special characters are see @ref{Special Characters}.}:
-
-@Defstr {-, ms}
-Prints an em dash.
-@endDefstr
-
-@DefstrList {Q, ms}
-@DefstrListEndx {U, ms}
-Prints typographer's quotes in troff, and plain quotes in nroff.
-@code{\*Q} is the left quote and @code{\*U} is the right quote.
-@endDefstr
-
-Improved accent marks are available in the @file{ms} macros.
-
-@Defmac {AM, , ms}
-Specify this macro at the beginning of your document to enable extended
-accent marks and special characters.  This is a Berkeley extension.
-
-To use the accent marks, place them @strong{after} the character being
-accented.
-
-Note that groff's native support for accents is superior to the
-following definitions.
-@endDefmac
-
-The following accent marks are available after invoking the @code{AM}
-macro:
-
-@Defstr {', ms}
-Acute accent.
-@endDefstr
-
-@Defstr {`, ms}
-Grave accent.
-@endDefstr
-
-@Defstr {^, ms}
-Circumflex.
-@endDefstr
-
-@Defstr {\,, ms}
-Cedilla.
-@endDefstr
-
-@Defstr {~, ms}
-Tilde.
-@endDefstr
-
-@deffn String @t{\*[:]}
-@ifnotinfo
-@stindex : @r{[}ms@r{]}
-@end ifnotinfo
-@ifinfo
-@stindex \*[@r{<colon>}] @r{[}ms@r{]}
-@end ifinfo
-Umlaut.
-@end deffn
-
-@Defstr {v, ms}
-Hacek.
-@endDefstr
-
-@Defstr {_, ms}
-Macron (overbar).
-@endDefstr
-
-@Defstr {., ms}
-Underdot.
-@endDefstr
-
-@Defstr {o, ms}
-Ring above.
-@endDefstr
-
-The following are standalone characters available after invoking the
-@code{AM} macro:
-
-@Defstr {?, ms}
-Upside-down question mark.
-@endDefstr
-
-@Defstr {!, ms}
-Upside-down exclamation point.
-@endDefstr
-
-@Defstr {8, ms}
-German � ligature.
-@endDefstr
-
-@Defstr {3, ms}
-Yogh.
-@endDefstr
-
-@Defstr {Th, ms}
-Uppercase thorn.
-@endDefstr
-
-@Defstr {th, ms}
-Lowercase thorn.
-@endDefstr
-
-@Defstr {D-, ms}
-Uppercase eth.
-@endDefstr
-
-@Defstr {d-, ms}
-Lowercase eth.
-@endDefstr
-
-@Defstr {q, ms}
-Hooked o.
-@endDefstr
-
-@Defstr {ae, ms}
-Lowercase � ligature.
-@endDefstr
-
-@Defstr {Ae, ms}
-Uppercase � ligature.
-@endDefstr
-
-@c ---------------------------------------------------------------------
-
-@node Differences from AT&T ms, Naming Conventions, ms Page Layout, ms
-@subsection Differences from @acronym{AT&T} @file{ms}
-@cindex @code{ms} macros, differences from @acronym{AT&T}
-@cindex @acronym{AT&T} @code{troff}, @code{ms} macro package differences
-
-This section lists the (minor) differences between the @code{groff -ms}
-macros and @acronym{AT&T} @code{troff -ms} macros.
-
-@itemize @bullet
-@item
-The internals of @code{groff -ms} differ from the internals of
-@acronym{AT&T} @code{troff -ms}.  Documents that depend upon
-implementation details of @acronym{AT&T} @code{troff -ms} may not format
-properly with @code{groff -ms}.
-
-@item
-The general error-handling policy of @code{groff -ms} is to detect and
-report errors, rather than silently to ignore them.
-
-@item
-@code{groff -ms} does not work in compatibility mode (this is, with the
-@option{-C} option).
-
-@item
-There is no special support for typewriter-like devices.
-
-@item
-@code{groff -ms} does not provide cut marks.
-
-@item
-Multiple line spacing is not supported.  Use a larger vertical spacing
-instead.
-
-@item
-Some @acronym{UNIX} @code{ms} documentation says that the @code{CW} and
-@code{GW} number registers can be used to control the column width and
-gutter width, respectively.  These number registers are not used in
-@code{groff -ms}.
-
-@item
-Macros that cause a reset (paragraphs, headings, etc.@:) may change the
-indentation.  Macros that change the indentation do not increment or
-decrement the indentation, but rather set it absolutely.  This can cause
-problems for documents that define additional macros of their own.  The
-solution is to use not the @code{in} request but instead the @code{RS}
-and @code{RE} macros.
-
-@item
-To make @code{groff -ms} use the default page offset (which also
-specifies the left margin), the @code{PO} register must stay undefined
-until the first @file{-ms} macro is evaluated.  This implies that
-@code{PO} should not be used early in the document, unless it is changed
-also: Remember that accessing an undefined register automatically
-defines it.
-@end itemize
-
-@Defmpreg {GS, ms}
-This number register is set to@tie{}1 by the @code{groff -ms} macros,
-but it is not used by the @code{AT&T} @code{troff -ms} macros.
-Documents that need to determine whether they are being formatted with
-@code{AT&T} @code{troff -ms} or @code{groff -ms} should use this number
-register.
-@endDefmpreg
-
-Emulations of a few ancient Bell Labs macros can be re-enabled by
-calling the otherwise undocumented @code{SC} section-header macro.
-Calling @code{SC} enables @code{UC} for marking up a product or
-application name, and the pair @code{P1}/@code{P2} for surrounding code
-example displays.
-
-These are not enabled by default because (a)@tie{}they were not
-documented, in the original @code{ms} manual, and (b)@tie{}the @code{P1}
-and @code{UC} macros collide with different macros with the same names
-in the Berkeley version of @code{ms}.
-
-These @code{groff} emulations are sufficient to give back the 1976
-Kernighan@tie{}& Cherry paper @cite{Typsetting Mathematics -- User's
-Guide} its section headings, and restore some text that had gone missing
-as arguments of undefined macros.  No warranty express or implied is
-given as to how well the typographic details these produce match the
-original Bell Labs macros.
-
-@menu
-* Missing ms Macros::
-* Additional ms Macros::
-@end menu
-
-@c ---------------------------------------------------------------------
-
-@node Missing ms Macros, Additional ms Macros, Differences from AT&T ms, Differences from AT&T ms
-@subsubsection @code{troff} macros not appearing in @code{groff}
-
-Macros missing from @code{groff -ms} are cover page macros specific to
-Bell Labs and Berkeley.  The macros known to be missing are:
-
-@table @code
-@item .TM
-Technical memorandum; a cover sheet style
-
-@item .IM
-Internal memorandum; a cover sheet style
-
-@item .MR
-Memo for record; a cover sheet style
-
-@item .MF
-Memo for file; a cover sheet style
-
-@item .EG
-Engineer's notes; a cover sheet style
-
-@item .TR
-Computing Science Tech Report; a cover sheet style
-
-@item .OK
-Other keywords
-
-@item .CS
-Cover sheet information
-
-@item .MH
-A cover sheet macro
-@end table
-
-@c ---------------------------------------------------------------------
-
-@node Additional ms Macros,  , Missing ms Macros, Differences from AT&T ms
-@subsubsection @code{groff} macros not appearing in @acronym{AT&T} @code{troff}
-
-The @code{groff -ms} macros have a few minor extensions compared to the
-@acronym{AT&T} @code{troff -ms} macros.
-
-@Defmac {AM, , ms}
-Improved accent marks.  @xref{ms Strings and Special Characters}, for
-details.
-@endDefmac
-
-@Defmac {DS, @t{I}, ms}
-Indented display.  The default behavior of @acronym{AT&T} @code{troff
--ms} was to indent; the @code{groff} default prints displays flush left
-with the body text.
-@endDefmac
-
-@Defmac {CW, , ms}
-Print text in @code{constant width} (Courier) font.
-@endDefmac
-
-@Defmac {IX, , ms}
-Indexing term (printed on standard error).  You can write a script to
-capture and process an index generated in this manner.
-@endDefmac
-
-The following additional number registers
-appear in @code{groff -ms}:
-
-@Defmpreg {MINGW, ms}
-Specifies a minimum space between columns (for multi-column output);
-this takes the place of the @code{GW} register that was documented but
-apparently not implemented in @acronym{AT&T} @code{troff}.
-@endDefmpreg
-
-Several new string registers are available as well.  You can change
-these to handle (for example) the local language.  @xref{ms Strings and
-Special Characters}, for details.
-
-@c ---------------------------------------------------------------------
-
-@node Naming Conventions,  , Differences from AT&T ms, ms
-@subsection Naming Conventions
-@cindex @code{ms} macros, naming conventions
-@cindex naming conventions, @code{ms} macros
-
-The following conventions are used for names of macros, strings and
-number registers.  External names available to documents that use the
-@code{groff -ms} macros contain only uppercase letters and digits.
-
-Internally the macros are divided into modules; naming conventions are
-as follows:
-
-@itemize @bullet
-@item
-Names used only within one module are of the form
-@var{module}@code{*}@var{name}.
-
-@item
-Names used outside the module in which they are defined are of the form
-@var{module}@code{@@}@var{name}.
-
-@item
-Names associated with a particular environment are of the form
-@var{environment}@code{:}@var{name}; these are used only within the
-@code{par} module.
-
-@item
-@var{name} does not have a module prefix.
-
-@item
-Constructed names used to implement arrays are of the form
-@var{array}@code{!}@var{index}.
-@end itemize
-
-Thus the groff ms macros reserve the following names:
-
-@itemize @bullet
-@item
-Names containing the characters @code{*}, @code{@@}, and@tie{}@code{:}.
-
-@item
-Names containing only uppercase letters and digits.
-@end itemize
-
-
-@c =====================================================================
-
-@node me, mm, ms, Macro Packages
-@section @file{me}
-@cindex @code{me} macro package
-
-@c XXX documentation
-@c XXX this is a placeholder until we get stuff knocked into shape
-See the @file{meintro.me} and @file{meref.me} documents in groff's
-@file{doc} directory.
-
-
-@c =====================================================================
-
-@node mm, mom, me, Macro Packages
-@section @file{mm}
-@cindex @code{mm} macro package
-
-@c XXX documentation
-@c XXX this is a placeholder until we get stuff knocked into shape
-See the @cite{groff_mm(7)} man page (type @command{man groff_mm} at the
-command line).
-
-
-@c =====================================================================
-
-@node mom,  , mm, Macro Packages
-@section @file{mom}
-@cindex @code{mom} macro package
-
-@c XXX documentation
-@c XXX this is a placeholder until we get stuff knocked into shape
-See the @cite{groff_mom(7)} man page (type @command{man groff_mom} at
-the command line), which gives a short overview and a link to its
-extensive documentation in HTML format.
-
-
-
-@c =====================================================================
-@c =====================================================================
-
-@node gtroff Reference, Preprocessors, Macro Packages, Top
-@chapter @code{gtroff} Reference
-@cindex reference, @code{gtroff}
-@cindex @code{gtroff}, reference
-
-This chapter covers @strong{all} of the facilities of @code{gtroff}.
-Users of macro packages may skip it if not interested in details.
-
-
-@menu
-* Text::
-* Measurements::
-* Expressions::
-* Identifiers::
-* Embedded Commands::
-* Registers::
-* Manipulating Filling and Adjusting::
-* Manipulating Hyphenation::
-* Manipulating Spacing::
-* Tabs and Fields::
-* Character Translations::
-* Troff and Nroff Mode::
-* Line Layout::
-* Line Control::
-* Page Layout::
-* Page Control::
-* Fonts and Symbols::
-* Sizes::
-* Strings::
-* Conditionals and Loops::
-* Writing Macros::
-* Page Motions::
-* Drawing Requests::
-* Traps::
-* Diversions::
-* Environments::
-* Suppressing output::
-* Colors::
-* I/O::
-* Postprocessor Access::
-* Miscellaneous::
-* Gtroff Internals::
-* Debugging::
-* Implementation Differences::
-@end menu
-
-
-@c =====================================================================
-
-@node Text, Measurements, gtroff Reference, gtroff Reference
-@section Text
-@cindex text, @code{gtroff} processing
-
-@code{gtroff} input files contain text with control commands
-interspersed throughout.  But, even without control codes, @code{gtroff}
-still does several things with the input text:
-
-@itemize @bullet
-@item
-filling and adjusting
-
-@item
-adding additional space after sentences
-
-@item
-hyphenating
-
-@item
-inserting implicit line breaks
-@end itemize
-
-@menu
-* Filling and Adjusting::
-* Hyphenation::
-* Sentences::
-* Tab Stops::
-* Implicit Line Breaks::
-* Input Conventions::
-* Input Encodings::
-@end menu
-
-@c ---------------------------------------------------------------------
-
-@node Filling and Adjusting, Hyphenation, Text, Text
-@subsection Filling and Adjusting
-@cindex filling
-@cindex adjusting
-
-When @code{gtroff} reads text, it collects words from the input and fits
-as many of them together on one output line as it can.  This is known as
-@dfn{filling}.
-
-@cindex leading spaces
-@cindex spaces, leading and trailing
-@cindex extra spaces
-@cindex trailing spaces
-Once @code{gtroff} has a @dfn{filled} line, it tries to @dfn{adjust} it.
-This means it widens the spacing between words until the text reaches
-the right margin (in the default adjustment mode).  Extra spaces between
-words are preserved, but spaces at the end of lines are ignored.  Spaces
-at the front of a line cause a @dfn{break} (breaks are explained in
-@ref{Implicit Line Breaks}).
-
-@xref{Manipulating Filling and Adjusting}.
-
-@c ---------------------------------------------------------------------
-
-@node Hyphenation, Sentences, Filling and Adjusting, Text
-@subsection Hyphenation
-@cindex hyphenation
-
-Since the odds are not great for finding a set of words, for every
-output line, which fit nicely on a line without inserting excessive
-amounts of space between words, @code{gtroff} hyphenates words so that
-it can justify lines without inserting too much space between words.  It
-uses an internal hyphenation algorithm (a simplified version of the
-algorithm used within @TeX{}) to indicate which words can be hyphenated
-and how to do so.  When a word is hyphenated, the first part of the word
-is added to the current filled line being output (with an attached
-hyphen), and the other portion is added to the next line to be filled.
-
-@xref{Manipulating Hyphenation}.
-
-@c ---------------------------------------------------------------------
-
-@node Sentences, Tab Stops, Hyphenation, Text
-@subsection Sentences
-@cindex sentences
-
-Although it is often debated, some typesetting rules say there should be
-different amounts of space after various punctuation marks.  For
-example, the @cite{Chicago typsetting manual} says that a period at the
-end of a sentence should have twice as much space following it as would
-a comma or a period as part of an abbreviation.
-
-@c XXX exact citation of Chicago manual
-
-@cindex sentence space
-@cindex space between sentences
-@cindex french-spacing
-@code{gtroff} does this by flagging certain characters (normally
-@samp{!}, @samp{?}, and @samp{.}) as @dfn{end-of-sentence} characters.
-When @code{gtroff} encounters one of these characters at the end of a
-line, it appends a normal space followed by a @dfn{sentence space} in
-the formatted output.  (This justifies one of the conventions mentioned
-in @ref{Input Conventions}.)
-
-@cindex transparent characters
-@cindex character, transparent
-@cindex @code{dg} glyph, at end of sentence
-@cindex @code{rq} glyph, at end of sentence
-@cindex @code{cq} glyph, at end of sentence
-@cindex @code{"}, at end of sentence
-@cindex @code{'}, at end of sentence
-@cindex @code{)}, at end of sentence
-@cindex @code{]}, at end of sentence
-@cindex @code{*}, at end of sentence
-In addition, the following characters and symbols are treated
-transparently while handling end-of-sentence characters: @samp{"},
-@samp{'}, @samp{)}, @samp{]}, @samp{*}, @code{\[dg]}, @code{\[rq]}, and
-@code{\[cq]}.
-
-See the @code{cflags} request in @ref{Using Symbols}, for more details.
-
-@cindex @code{\&}, at end of sentence
-To prevent the insertion of extra space after an end-of-sentence
-character (at the end of a line), append @code{\&}.
-
-@c ---------------------------------------------------------------------
-
-@node Tab Stops, Implicit Line Breaks, Sentences, Text
-@subsection Tab Stops
-@cindex tab stops
-@cindex stops, tabulator
-@cindex tab character
-@cindex character, tabulator
-
-@cindex @acronym{EBCDIC} encoding
-@cindex encoding, @acronym{EBCDIC}
-@code{gtroff} translates @dfn{tabulator characters}, also called
-@dfn{tabs} (normally code point @acronym{ASCII} @code{0x09} or
-@acronym{EBCDIC} @code{0x05}), in the input into movements to the next
-tabulator stop.  These tab stops are initially located every half inch
-across the page.  Using this, simple tables can be made easily.
-However, it can often be deceptive as the appearance (and width) of the
-text on a terminal and the results from @code{gtroff} can vary greatly.
-
-Also, a possible sticking point is that lines beginning with tab
-characters are still filled, again producing unexpected results.  For
-example, the following input
-
-@multitable {12345678} {12345678} {12345678} {12345678}
-@item
-@tab 1 @tab 2 @tab 3
-@item
-@tab   @tab 4 @tab 5
-@end multitable
-
-@noindent
-produces
-
-@multitable {12345678} {12345678} {12345678} {12345678} {12345678} {12345678} {12345678}
-@item
-@tab 1 @tab 2 @tab 3 @tab   @tab 4 @tab 5
-@end multitable
-
-@xref{Tabs and Fields}.
-
-@c ---------------------------------------------------------------------
-
-@node Implicit Line Breaks, Input Conventions, Tab Stops, Text
-@subsection Implicit Line Breaks
-@cindex implicit line breaks
-@cindex implicit breaks of lines
-@cindex line, implicit breaks
-@cindex break, implicit
-@cindex line break
-
-An important concept in @code{gtroff} is the @dfn{break}.  When a break
-occurs, @code{gtroff} outputs the partially filled line (unjustified),
-and resumes collecting and filling text on the next output line.
-
-@cindex blank line
-@cindex empty line
-@cindex line, blank
-@cindex blank line macro (@code{blm})
-There are several ways to cause a break in @code{gtroff}.  A blank line
-not only causes a break, but it also outputs a one-line vertical space
-(effectively a blank line).  Note that this behaviour can be modified
-with the blank line macro request @code{blm}.  @xref{Blank Line Traps}.
-
-@cindex fill mode
-@cindex mode, fill
-@cindex leading spaces macro (@code{lsm})
-A line that begins with a space causes a break and the space is output
-at the beginning of the next line.  Note that this space isn't adjusted,
-even in fill mode; however, the behaviour can be modified with the
-leading spaces macro request @code{lsm}.  @xref{Leading Spaces Traps}.
-
-The end of file also causes a break -- otherwise the last line of the
-document may vanish!
-
-Certain requests also cause breaks, implicitly or explicitly.  This is
-discussed in @ref{Manipulating Filling and Adjusting}.
-
-@c ---------------------------------------------------------------------
-
-@node Input Conventions, Input Encodings, Implicit Line Breaks, Text
-@subsection Input Conventions
-@cindex input conventions
-@cindex conventions for input
-
-Since @code{gtroff} does filling automatically, it is traditional in
-@code{groff} not to try and type things in as nicely formatted
-paragraphs.  These are some conventions commonly used when typing
-@code{gtroff} text:
-
-@itemize @bullet
-@item
-Break lines after punctuation, particularly at the end of a sentence and
-in other logical places.  Keep separate phrases on lines by themselves,
-as entire phrases are often added or deleted when editing.
-
-@item
-Try to keep lines less than 40-60@tie{}characters, to allow space for
-inserting more text.
-
-@item
-Do not try to do any formatting in a @acronym{WYSIWYG} manner (i.e.,
-don't try using spaces to get proper indentation).
-@end itemize
-
-@c ---------------------------------------------------------------------
-
-@node Input Encodings,  , Input Conventions, Text
-@subsection Input Encodings
-
-Currently, the following input encodings are available.
-
-@table @asis
-@item cp1047
-@cindex encoding, input, @acronym{EBCDIC}
-@cindex @acronym{EBCDIC}, input encoding
-@cindex input encoding, @acronym{EBCDIC}
-@cindex encoding, input, cp1047
-@cindex cp1047, input encoding
-@cindex input encoding, cp1047
-@cindex IBM cp1047 input encoding
-@pindex cp1047.tmac
-This input encoding works only on @acronym{EBCDIC} platforms (and vice
-versa, the other input encodings don't work with @acronym{EBCDIC}); the
-file @file{cp1047.tmac} is by default loaded at start-up.
-
-@item latin-1
-@cindex encoding, input, @w{latin-1} (ISO @w{8859-1})
-@cindex @w{latin-1} (ISO @w{8859-1}), input encoding
-@cindex ISO @w{8859-1} (@w{latin-1}), input encoding
-@cindex input encoding, @w{latin-1} (ISO @w{8859-1})
-@pindex latin1.tmac
-This is the default input encoding on non-@acronym{EBCDIC} platforms;
-the file @file{latin1.tmac} is loaded at start-up.
-
-@item latin-2
-@cindex encoding, input, @w{latin-2} (ISO @w{8859-2})
-@cindex @w{latin-2} (ISO @w{8859-2}), input encoding
-@cindex ISO @w{8859-2} (@w{latin-2}), input encoding
-@cindex input encoding, @w{latin-2} (ISO @w{8859-2})
-@pindex latin2.tmac
-To use this encoding, either say @w{@samp{.mso latin2.tmac}} at the very
-beginning of your document or use @samp{-mlatin2} as a command line
-argument for @code{groff}.
-
-@item latin-5
-@cindex encoding, input, @w{latin-5} (ISO @w{8859-9})
-@cindex @w{latin-2} (ISO @w{8859-9}), input encoding
-@cindex ISO @w{8859-9} (@w{latin-2}), input encoding
-@cindex input encoding, @w{latin-2} (ISO @w{8859-9})
-@pindex latin2.tmac
-For Turkish.  Either say @w{@samp{.mso latin9.tmac}} at the very
-beginning of your document or use @samp{-mlatin9} as a command line
-argument for @code{groff}.
-
-@item latin-9 (latin-0)
-@cindex encoding, input, @w{latin-9} (@w{latin-0}, ISO @w{8859-15})
-@cindex @w{latin-9} (@w{latin-0}, ISO @w{8859-15}), input encoding
-@cindex ISO @w{8859-15} (@w{latin-9}, @w{latin-0}), input encoding
-@cindex input encoding, @w{latin-9} (@w{latin-9}, ISO @w{8859-15})
-@pindex latin9.tmac
-This encoding is intended (at least in Europe) to replace @w{latin-1}
-encoding.  The main difference to @w{latin-1} is that @w{latin-9}
-contains the Euro character.  To use this encoding, either say
-@w{@samp{.mso latin9.tmac}} at the very beginning of your document or
-use @samp{-mlatin9} as a command line argument for @code{groff}.
-@end table
-
-Note that it can happen that some input encoding characters are not
-available for a particular output device.  For example, saying
-
-@Example
-groff -Tlatin1 -mlatin9 ...
-@endExample
-
-@noindent
-fails if you use the Euro character in the input.  Usually, this
-limitation is present only for devices that have a limited set of
-output glyphs (e.g.@: @option{-Tascii} and @option{-Tlatin1}); for other
-devices it is usually sufficient to install proper fonts that contain
-the necessary glyphs.
-
-@pindex freeeuro.pfa
-@pindex ec.tmac
-Due to the importance of the Euro glyph in Europe, the groff package now
-comes with a @sc{PostScript} font called @file{freeeuro.pfa}, which
-provides various glyph shapes for the Euro.  In other words,
-@w{latin-9} encoding is supported for the @option{-Tps} device out of
-the box (@w{latin-2} isn't).
-
-By its very nature, @option{-Tutf8} supports all input encodings;
-@option{-Tdvi} has support for both @w{latin-2} and @w{latin-9} if the
-command line @option{-mec} is used also to load the file @file{ec.tmac}
-(which flips to the EC fonts).
-
-
-@c =====================================================================
-
-@node Measurements, Expressions, Text, gtroff Reference
-@section Measurements
-@cindex measurements
-@cindex scaling indicator
-@cindex indicator, scaling
-
-@cindex units of measurement
-@cindex basic unit (@code{u})
-@cindex machine unit (@code{u})
-@cindex measurement unit
-@cindex @code{u} unit
-@cindex unit, @code{u}
-@code{gtroff} (like many other programs) requires numeric parameters to
-specify various measurements.  Most numeric parameters@footnote{those
-that specify vertical or horizontal motion or a type size} may have a
-@dfn{measurement unit} attached.  These units are specified as a single
-character that immediately follows the number or expression.  Each of
-these units are understood, by @code{gtroff}, to be a multiple of its
-@dfn{basic unit}.  So, whenever a different measurement unit is
-specified @code{gtroff} converts this into its @dfn{basic units}.  This
-basic unit, represented by a @samp{u}, is a device dependent measurement,
-which is quite small, ranging from 1/75@dmn{th} to 1/72000@dmn{th} of an
-inch.  The values may be given as fractional numbers; however,
-fractional basic units are always rounded to integers.
-
-Some of the measurement units are completely independent of any of the
-current settings (e.g.@: type size) of @code{gtroff}.
-
-@table @code
-@item i
-@cindex inch unit (@code{i})
-@cindex @code{i} unit
-@cindex unit, @code{i}
-Inches.  An antiquated measurement unit still in use in certain
-backwards countries with incredibly low-cost computer equipment.  One
-inch is equal to@tie{}2.54@dmn{cm}.
-
-@item c
-@cindex centimeter unit (@code{c})
-@cindex @code{c} unit
-@cindex unit, @code{c}
-Centimeters.  One centimeter is equal to@tie{}0.3937@dmn{in}.
-
-@item p
-@cindex point unit (@code{p})
-@cindex @code{p} unit
-@cindex unit, @code{p}
-Points.  This is a typesetter's measurement used for measure type size.
-It is 72@tie{}points to an inch.
-
-@item P
-@cindex pica unit (@code{P})
-@cindex @code{P} unit
-@cindex unit, @code{P}
-Pica.  Another typesetting measurement.  6@tie{}Picas to an inch (and
-12@tie{}points to a pica).
-
-@item s
-@itemx z
-@cindex @code{s} unit
-@cindex unit, @code{s}
-@cindex @code{z} unit
-@cindex unit, @code{z}
-@xref{Fractional Type Sizes}, for a discussion of these units.
-
-@item f
-@cindex @code{f} unit
-@cindex unit, @code{f}
-Fractions.  Value is 65536.
-@xref{Colors}, for usage.
-@end table
-
-The other measurements understood by @code{gtroff} depend on settings
-currently in effect in @code{gtroff}.  These are very useful for
-specifying measurements that should look proper with any size of text.
-
-@table @code
-@item m
-@cindex em unit (@code{m})
-@cindex @code{m} unit
-@cindex unit, @code{m}
-Ems.  This unit is equal to the current font size in points.  So called
-because it is @emph{approximately} the width of the letter@tie{}@samp{m}
-in the current font.
-
-@item n
-@cindex en unit (@code{n})
-@cindex @code{n} unit
-@cindex unit, @code{n}
-Ens.  In @code{groff}, this is half of an em.
-
-@item v
-@cindex vertical space unit (@code{v})
-@cindex space, vertical, unit (@code{v})
-@cindex @code{v} unit
-@cindex unit, @code{v}
-Vertical space.  This is equivalent to the current line spacing.
-@xref{Sizes}, for more information about this.
-
-@item M
-@cindex @code{M} unit
-@cindex unit, @code{M}
-100ths of an em.
-@end table
-
-@menu
-* Default Units::
-@end menu
-
-@c ---------------------------------------------------------------------
-
-@node Default Units,  , Measurements, Measurements
-@subsection Default Units
-@cindex default units
-@cindex units, default
-
-Many requests take a default unit.  While this can be helpful at times,
-it can cause strange errors in some expressions.  For example, the line
-length request expects em units.  Here are several attempts to get a
-line length of 3.5@tie{}inches and their results:
-
-@Example
-3.5i      @result{}   3.5i
-7/2       @result{}   0i
-7/2i      @result{}   0i
-(7 / 2)u  @result{}   0i
-7i/2      @result{}   0.1i
-7i/2u     @result{}   3.5i
-@endExample
-
-@noindent
-Everything is converted to basic units first.  In the above example it
-is assumed that 1@dmn{i} equals@tie{}240@dmn{u}, and 1@dmn{m}
-equals@tie{}10@dmn{p} (thus 1@dmn{m} equals@tie{}33@dmn{u}).  The value
-7@dmn{i}/2 is first handled as 7@dmn{i}/2@dmn{m}, then converted to
-1680@dmn{u}/66@dmn{u}, which is 25@dmn{u}, and this is approximately
-0.1@dmn{i}.  As can be seen, a scaling indicator after a closing
-parenthesis is simply ignored.
-
-@cindex measurements, specifying safely
-Thus, the safest way to specify measurements is to always attach a
-scaling indicator.  If you want to multiply or divide by a certain
-scalar value, use @samp{u} as the unit for that value.
-
-
-@c =====================================================================
-
-@node Expressions, Identifiers, Measurements, gtroff Reference
-@section Expressions
-@cindex expressions
-
-@code{gtroff} has most arithmetic operators common to other languages:
-
-@itemize @bullet
-@item
-@cindex arithmetic operators
-@cindex operators, arithmetic
-@opindex +
-@opindex -
-@opindex /
-@opindex *
-@opindex %
-Arithmetic: @samp{+} (addition), @samp{-} (subtraction), @samp{/}
-(division), @samp{*} (multiplication), @samp{%} (modulo).
-
-@code{gtroff} only provides integer arithmetic.  The internal type used
-for computing results is @samp{int}, which is usually a 32@dmn{bit}
-signed integer.
-
-@item
-@cindex comparison operators
-@cindex operators, comparison
-@opindex <
-@opindex >
-@opindex >=
-@opindex <=
-@opindex =
-@opindex ==
-Comparison: @samp{<} (less than), @samp{>} (greater than), @samp{<=}
-(less than or equal), @samp{>=} (greater than or equal), @samp{=}
-(equal), @samp{==} (the same as @samp{=}).
-
-@item
-@cindex logical operators
-@cindex operators, logical
-@opindex &
-@ifnotinfo
-@opindex :
-@end ifnotinfo
-@ifinfo
-@opindex @r{<colon>}
-@end ifinfo
-Logical: @samp{&} (logical and), @samp{:} (logical or).
-
-@item
-@cindex unary operators
-@cindex operators, unary
-@opindex -
-@opindex +
-@opindex !
-@cindex @code{if} request, and the @samp{!} operator
-@cindex @code{while} request, and the @samp{!} operator
-Unary operators: @samp{-} (negating, i.e.@: changing the sign), @samp{+}
-(just for completeness; does nothing in expressions), @samp{!} (logical
-not; this works only within @code{if} and @code{while}
-requests).@footnote{Note that, for example, @samp{!(-1)} evaluates to
-`true' because @code{gtroff} treats both negative numbers and zero as
-`false'.}  See below for the use of unary operators in motion requests.
-
-@cindex logical not, limitation in expression
-@cindex expression, limitation of logical not in
-The logical not operator,
-as described above,
-works only within @code{if} and @code{while} requests.
-Furthermore, it may appear
-only at the beginning of an expression,
-and negates the entire expression.
-Attempting to insert the @samp{!} operator
-within the expression results in a
-@samp{numeric expression expected} warning.  This
-maintains compatibility
-with old versions of @code{troff}.
-
-Example:
-
-@Example
-.nr X 1
-.nr Y 0
-.\" This does not work as expected
-.if (\n[X])&(!\n[Y]) .nop X only
-.
-.\" Use this construct instead
-.if (\n[X]=1)&(\n[Y]=0) .nop X only
-@endExample
-
-@item
-@cindex extremum operators (@code{>?}, @code{<?})
-@cindex operators, extremum (@code{>?}, @code{<?})
-@opindex >?
-@opindex <?
-Extrema: @samp{>?} (maximum), @samp{<?} (minimum).
-
-Example:
-
-@Example
-.nr x 5
-.nr y 3
-.nr z (\n[x] >? \n[y])
-@endExample
-
-@noindent
-The register@tie{}@code{z} now contains@tie{}5.
-
-@item
-@cindex scaling operator
-@cindex operator, scaling
-Scaling: @code{(@var{c};@var{e})}.  Evaluate@tie{}@var{e}
-using@tie{}@var{c} as the default scaling indicator.  If @var{c} is
-missing, ignore scaling indicators in the evaluation of@tie{}@var{e}.
-@end itemize
-
-@cindex parentheses
-@cindex order of evaluation in expressions
-@cindex expression, order of evaluation
-@opindex (
-@opindex )
-Parentheses may be used as in any other language.  However, in
-@code{gtroff} they are necessary to ensure order of evaluation.
-@code{gtroff} has no operator precedence; expressions are evaluated left
-to right.  This means that @code{gtroff} evaluates @samp{3+5*4} as if it
-were parenthesized like @samp{(3+5)*4}, not as @samp{3+(5*4)}, as might
-be expected.
-
-@cindex @code{+}, and page motion
-@cindex @code{-}, and page motion
-@cindex motion operators
-@cindex operators, motion
-For many requests that cause a motion on the page, the unary operators
-@samp{+} and @samp{-} work differently if leading an expression.  They
-then indicate a motion relative to the current position (down or up,
-respectively).
-
-@cindex @code{|}, and page motion
-@cindex absolute position operator (@code{|})
-@cindex position, absolute, operator (@code{|})
-Similarly, a leading @samp{|} operator indicates an absolute position.
-For vertical movements, it specifies the distance from the top of the
-page; for horizontal movements, it gives the distance from the beginning
-of the @emph{input} line.
-
-@cindex @code{bp} request, using @code{+} and@tie{}@code{-}
-@cindex @code{in} request, using @code{+} and@tie{}@code{-}
-@cindex @code{ll} request, using @code{+} and@tie{}@code{-}
-@cindex @code{lt} request, using @code{+} and@tie{}@code{-}
-@cindex @code{nm} request, using @code{+} and@tie{}@code{-}
-@cindex @code{nr} request, using @code{+} and@tie{}@code{-}
-@cindex @code{pl} request, using @code{+} and@tie{}@code{-}
-@cindex @code{pn} request, using @code{+} and@tie{}@code{-}
-@cindex @code{po} request, using @code{+} and@tie{}@code{-}
-@cindex @code{ps} request, using @code{+} and@tie{}@code{-}
-@cindex @code{pvs} request, using @code{+} and@tie{}@code{-}
-@cindex @code{rt} request, using @code{+} and@tie{}@code{-}
-@cindex @code{ti} request, using @code{+} and@tie{}@code{-}
-@cindex @code{\H}, using @code{+} and@tie{}@code{-}
-@cindex @code{\R}, using @code{+} and@tie{}@code{-}
-@cindex @code{\s}, using @code{+} and@tie{}@code{-}
-@samp{+} and @samp{-} are also treated differently by the following
-requests and escapes: @code{bp}, @code{in}, @code{ll}, @code{lt},
-@code{nm}, @code{nr}, @code{pl}, @code{pn}, @code{po}, @code{ps},
-@code{pvs}, @code{rt}, @code{ti}, @code{\H}, @code{\R}, and @code{\s}.
-Here, leading plus and minus signs indicate increments and decrements.
-
-@xref{Setting Registers}, for some examples.
-
-@Defesc {\\B, ', anything, '}
-@cindex numeric expression, valid
-@cindex valid numeric expression
-Return@tie{}1 if @var{anything} is a valid numeric expression; or@tie{}0
-if @var{anything} is empty or not a valid numeric expression.
-@endDefesc
-
-@cindex space characters, in expressions
-@cindex expressions, and space characters
-Due to the way arguments are parsed, spaces are not allowed in
-expressions, unless the entire expression is surrounded by parentheses.
-
-@xref{Request and Macro Arguments}, and @ref{Conditionals and Loops}.
-
-
-@c =====================================================================
-
-@node Identifiers, Embedded Commands, Expressions, gtroff Reference
-@section Identifiers
-@cindex identifiers
-
-Like any other language, @code{gtroff} has rules for properly formed
-@dfn{identifiers}.  In @code{gtroff}, an identifier can be made up of
-almost any printable character, with the exception of the following
-characters:
-
-@itemize @bullet
-@item
-@cindex whitespace characters
-@cindex newline character
-@cindex character, whitespace
-Whitespace characters (spaces, tabs, and newlines).
-
-@item
-@cindex character, backspace
-@cindex backspace character
-@cindex @acronym{EBCDIC} encoding of backspace
-Backspace (@acronym{ASCII}@tie{}@code{0x08} or
-@acronym{EBCDIC}@tie{}@code{0x16}) and character code @code{0x01}.
-
-@item
-@cindex invalid input characters
-@cindex input characters, invalid
-@cindex characters, invalid input
-@cindex Unicode
-The following input characters are invalid and are ignored if
-@code{groff} runs on a machine based on @acronym{ASCII}, causing a
-warning message of type @samp{input} (see @ref{Debugging}, for more
-details): @code{0x00}, @code{0x0B}, @code{0x0D}-@code{0x1F},
-@code{0x80}-@code{0x9F}.
-
-And here are the invalid input characters if @code{groff} runs on an
-@acronym{EBCDIC} host: @code{0x00}, @code{0x08}, @code{0x09},
-@code{0x0B}, @code{0x0D}-@code{0x14}, @code{0x17}-@code{0x1F},
-@code{0x30}-@code{0x3F}.
-
-Currently, some of these reserved codepoints are used internally, thus
-making it non-trivial to extend @code{gtroff} to cover Unicode or other
-character sets and encodings that use characters of these ranges.
-
-Note that invalid characters are removed before parsing; an identifier
-@code{foo}, followed by an invalid character, followed by @code{bar} is
-treated as @code{foobar}.
-@end itemize
-
-For example, any of the following is valid.
-
-@Example
-br
-PP
-(l
-end-list
-@@_
-@endExample
-
-@cindex @code{]}, as part of an identifier
-@noindent
-Note that identifiers longer than two characters with a closing bracket
-(@samp{]}) in its name can't be accessed with escape sequences that
-expect an identifier as a parameter.  For example, @samp{\[foo]]}
-accesses the glyph @samp{foo}, followed by @samp{]}, whereas
-@samp{\C'foo]'} really asks for glyph @samp{foo]}.
-
-@cindex @code{refer}, and macro names starting with @code{[} or @code{]}
-@cindex @code{[}, macro names starting with, and @code{refer}
-@cindex @code{]}, macro names starting with, and @code{refer}
-@cindex macro names, starting with @code{[} or @code{]}, and @code{refer}
-To avoid problems with the @code{refer} preprocessor, macro names should
-not start with @samp{[} or @samp{]}.  Due to backwards compatibility,
-everything after @samp{.[} and @samp{.]} is handled as a special
-argument to @code{refer}.  For example, @samp{.[foo} makes @code{refer}
-to start a reference, using @samp{foo} as a parameter.
-
-@Defesc {\\A, ', ident, '}
-Test whether an identifier @var{ident} is valid in @code{gtroff}.  It
-expands to the character@tie{}1 or@tie{}0 according to whether its
-argument (usually delimited by quotes) is or is not acceptable as the
-name of a string, macro, diversion, number register, environment, or
-font.  It returns@tie{}0 if no argument is given.  This is useful for
-looking up user input in some sort of associative table.
-
-@Example
-\A'end-list'
-    @result{} 1
-@endExample
-@endDefesc
-
-@xref{Escapes}, for details on parameter delimiting characters.
-
-Identifiers in @code{gtroff} can be any length, but, in some contexts,
-@code{gtroff} needs to be told where identifiers end and text begins
-(and in different ways depending on their length):
-
-@itemize @bullet
-@item
-Single character.
-
-@cindex @code{(}, starting a two-character identifier
-@item
-Two characters.  Must be prefixed with @samp{(} in some situations.
-
-@cindex @code{[}, starting an identifier
-@cindex @code{]}, ending an identifier
-@item
-Arbitrary length (@code{gtroff} only).  Must be bracketed with @samp{[}
-and@tie{}@samp{]} in some situations.  Any length identifier can be put
-in brackets.
-@end itemize
-
-@cindex undefined identifiers
-@cindex identifiers, undefined
-Unlike many other programming languages, undefined identifiers are
-silently ignored or expanded to nothing.  When @code{gtroff} finds an
-undefined identifier, it emits a warning, doing the following:
-
-@itemize @bullet
-@item
-If the identifier is a string, macro, or diversion, @code{gtroff}
-defines it as empty.
-
-@item
-If the identifier is a number register, @code{gtroff} defines it with a
-value of@tie{}0.
-@end itemize
-
-@xref{Warnings}., @ref{Interpolating Registers}, and @ref{Strings}.
-
-Note that macros, strings, and diversions share the same name space.
-
-@Example
-.de xxx
-.  nop foo
-..
-.
-.di xxx
-bar
-.br
-.di
-.
-.xxx
-    @result{} bar
-@endExample
-
-@noindent
-As can be seen in the previous example, @code{gtroff} reuses the
-identifier @samp{xxx}, changing it from a macro to a diversion.  No
-warning is emitted!  The contents of the first macro definition is lost.
-
-@xref{Interpolating Registers}, and @ref{Strings}.
-
-
-@c =====================================================================
-
-@node Embedded Commands, Registers, Identifiers, gtroff Reference
-@section Embedded Commands
-@cindex embedded commands
-@cindex commands, embedded
-
-Most documents need more functionality beyond filling, adjusting and
-implicit line breaking.  In order to gain further functionality,
-@code{gtroff} allows commands to be embedded into the text, in two ways.
-
-The first is a @dfn{request} that takes up an entire line, and does
-some large-scale operation (e.g.@: break lines, start new pages).
-
-The other is an @dfn{escape} that can be usually embedded anywhere in
-the text; most requests can accept it even as an argument.  Escapes
-generally do more minor operations like sub- and superscripts, print a
-symbol, etc.
-
-@menu
-* Requests::
-* Macros::
-* Escapes::
-@end menu
-
-@c ---------------------------------------------------------------------
-
-@node Requests, Macros, Embedded Commands, Embedded Commands
-@subsection Requests
-@cindex requests
-
-@cindex control character (@code{.})
-@cindex character, control (@code{.})
-@cindex no-break control character (@code{'})
-@cindex character, no-break control (@code{'})
-@cindex control character, no-break (@code{'})
-A request line begins with a control character, which is either a single
-quote (@samp{'}, the @dfn{no-break control character}) or a period
-(@samp{.}, the normal @dfn{control character}).  These can be changed;
-see @ref{Character Translations}, for details.  After this there may be
-optional tabs or spaces followed by an identifier, which is the name of
-the request.  This may be followed by any number of space-separated
-arguments (@emph{no} tabs here).
-
-@cindex structuring source code of documents or macro packages
-@cindex documents, structuring the source code
-@cindex macro packages, structuring the source code
-Since a control character followed by whitespace only is ignored, it is
-common practice to use this feature for structuring the source code of
-documents or macro packages.
-
-@Example
-.de foo
-.  tm This is foo.
-..
-.
-.
-.de bar
-.  tm This is bar.
-..
-@endExample
-
-@cindex blank line
-@cindex blank line macro (@code{blm})
-Another possibility is to use the blank line macro request @code{blm} by
-assigning an empty macro to it.
-
-@Example
-.de do-nothing
-..
-.blm do-nothing  \" activate blank line macro
-
-.de foo
-.  tm This is foo.
-..
-
-
-.de bar
-.  tm This is bar.
-..
-
-.blm             \" deactivate blank line macro
-@endExample
-
-@xref{Blank Line Traps}.
-
-@cindex zero width space character (@code{\&})
-@cindex character, zero width space (@code{\&})
-@cindex space character, zero width (@code{\&})
-@cindex @code{\&}, escaping control characters
-To begin a line with a control character without it being interpreted,
-precede it with @code{\&}.  This represents a zero width space, which
-means it does not affect the output.
-
-In most cases the period is used as a control character.  Several
-requests cause a break implicitly; using the single quote control
-character prevents this.
-
-@Defreg {.br}
-A read-only number register, which is set to@tie{}1 if a macro is called
-with the normal control character (as defined with the @code{cc}
-request), and set to@tie{}0 otherwise.
-
-@cindex modifying requests
-@cindex requests, modifying
-This allows to reliably modify requests.
-
-@Example
-.als bp*orig bp
-.de bp
-.  tm before bp
-.  ie \\n[.br] .bp*orig
-.  el 'bp*orig
-.  tm after bp
-..
-@endExample
-
-Using this register outside of a macro makes no sense (it always returns
-zero in such cases).
-
-If a macro is called as a string (this is, using @code{\*}), the value
-of the @code{.br} register is inherited from the calling macro.
-@endDefreg
-
-@menu
-* Request and Macro Arguments::
-@end menu
-
-@node Request and Macro Arguments,  , Requests, Requests
-@subsubsection Request and Macro Arguments
-@cindex request arguments
-@cindex macro arguments
-@cindex arguments to requests and macros
-
-@cindex tabs, and macro arguments
-@cindex macro arguments, and tabs
-@cindex arguments to macros, and tabs
-Arguments to requests and macros are processed much like the shell:
-The line is split into arguments according to
-spaces.@footnote{Plan@tie{}9's @code{troff} implementation also allows
-tabs for argument separation -- @code{gtroff} intentionally doesn't
-support this.}
-
-@cindex spaces, in a macro argument
-An argument to a macro that is intended to contain spaces can either be
-enclosed in double quotes, or have the spaces @dfn{escaped} with
-backslashes.  This is @emph{not} true for requests.
-
-Here are a few examples for a hypothetical macro @code{uh}:
-
-@Example
-.uh The Mouse Problem
-.uh "The Mouse Problem"
-.uh The\ Mouse\ Problem
-@endExample
-
-@cindex @code{\~}, difference to @code{\@key{SP}}
-@cindex @code{\@key{SP}}, difference to @code{\~}
-@noindent
-The first line is the @code{uh} macro being called with 3 arguments,
-@samp{The}, @samp{Mouse}, and @samp{Problem}.  The latter two have the
-same effect of calling the @code{uh} macro with one argument, @samp{The
-Mouse Problem}.@footnote{The last solution, i.e., using escaped spaces,
-is ``classical'' in the sense that it can be found in most @code{troff}
-documents.  Nevertheless, it is not optimal in all situations, since
-@w{@samp{\ }} inserts a fixed-width, non-breaking space character that
-can't stretch.  @code{gtroff} provides a different command @code{\~} to
-insert a stretchable, non-breaking space.}
-
-@cindex @code{"}, in a macro argument
-@cindex double quote, in a macro argument
-A double quote that isn't preceded by a space doesn't start a macro
-argument.  If not closing a string, it is printed literally.
-
-For example,
-
-@Example
-.xxx a" "b c" "de"fg"
-@endExample
-
-@noindent
-has the arguments @samp{a"}, @w{@samp{b c}}, @samp{de}, and @samp{fg"}.
-Don't rely on this obscure behaviour!
-
-There are two possibilities to get a double quote reliably.
-
-@itemize @bullet
-@item
-Enclose the whole argument with double quotes and use two consecutive
-double quotes to represent a single one.  This traditional solution has
-the disadvantage that double quotes don't survive argument expansion
-again if called in compatibility mode (using the @option{-C} option of
-@code{groff}):
-
-@Example
-.de xx
-.  tm xx: `\\$1' `\\$2' `\\$3'
-.
-.  yy "\\$1" "\\$2" "\\$3"
-..
-.de yy
-.  tm yy: `\\$1' `\\$2' `\\$3'
-..
-.xx A "test with ""quotes""" .
-    @result{} xx: `A' `test with "quotes"' `.'
-    @result{} yy: `A' `test with ' `quotes""'
-@endExample
-
-@noindent
-If not in compatibility mode, you get the expected result
-
-@Example
-xx: `A' `test with "quotes"' `.'
-yy: `A' `test with "quotes"' `.'
-@endExample
-
-@noindent
-since @code{gtroff} preserves the input level.
-
-@item
-Use the double quote glyph @code{\(dq}.  This works with and without
-compatibility mode enabled since @code{gtroff} doesn't convert
-@code{\(dq} back to a double quote input character.
-
-Note that this method won't work with @acronym{UNIX} @code{troff} in
-general since the glyph `dq' isn't defined normally.
-@end itemize
-
-@cindex @code{ds} request, and double quotes
-Double quotes in the @code{ds} request are handled differently.
-@xref{Strings}, for more details.
-
-@c ---------------------------------------------------------------------
-
-@node Macros, Escapes, Requests, Embedded Commands
-@subsection Macros
-@cindex macros
-
-@code{gtroff} has a @dfn{macro} facility for defining a series of lines
-that can be invoked by name.  They are called in the same manner as
-requests -- arguments also may be passed basically in the same manner.
-
-@xref{Writing Macros}, and @ref{Request and Macro Arguments}.
-
-@c ---------------------------------------------------------------------
-
-@node Escapes,  , Macros, Embedded Commands
-@subsection Escapes
-@cindex escapes
-
-Escapes may occur anywhere in the input to @code{gtroff}.  They usually
-begin with a backslash and are followed by a single character, which
-indicates the function to be performed.  The escape character can be
-changed; see @ref{Character Translations}.
-
-Escape sequences that require an identifier as a parameter accept three
-possible syntax forms.
-
-@itemize @bullet
-@item
-The next single character is the identifier.
-
-@cindex @code{(}, starting a two-character identifier
-@item
-If this single character is an opening parenthesis, take the following
-two characters as the identifier.  Note that there is no closing
-parenthesis after the identifier.
-
-@cindex @code{[}, starting an identifier
-@cindex @code{]}, ending an identifier
-@item
-If this single character is an opening bracket, take all characters
-until a closing bracket as the identifier.
-@end itemize
-
-@noindent
-Examples:
-
-@Example
-\fB
-\n(XX
-\*[TeX]
-@endExample
-
-@cindex @code{'}, delimiting arguments
-@cindex argument delimiting characters
-@cindex characters, argument delimiting
-@cindex delimiting characters for arguments
-Other escapes may require several arguments and/or some special format.
-In such cases the argument is traditionally enclosed in single quotes
-(and quotes are always used in this manual for the definitions of escape
-sequences).  The enclosed text is then processed according to what that
-escape expects.  Example:
-
-@Example
-\l'1.5i\(bu'
-@endExample
-
-@cindex @code{\o}, possible quote characters
-@cindex @code{\b}, possible quote characters
-@cindex @code{\X}, possible quote characters
-Note that the quote character can be replaced with any other character
-that does not occur in the argument (even a newline or a space
-character) in the following escapes: @code{\o}, @code{\b}, and
-@code{\X}.  This makes e.g.
-
-@Example
-A caf
-\o
-e\'
-
-
-in Paris
-  @result{} A caf� in Paris
-@endExample
-
-@noindent
-possible, but it is better not to use this feature to avoid confusion.
-
-@cindex @code{\%}, used as delimiter
-@cindex @code{\@key{SP}}, used as delimiter
-@cindex @code{\|}, used as delimiter
-@cindex @code{\^}, used as delimiter
-@cindex @code{\@{}, used as delimiter
-@cindex @code{\@}}, used as delimiter
-@cindex @code{\'}, used as delimiter
-@cindex @code{\`}, used as delimiter
-@cindex @code{\-}, used as delimiter
-@cindex @code{\_}, used as delimiter
-@cindex @code{\!}, used as delimiter
-@cindex @code{\?}, used as delimiter
-@cindex @code{\)}, used as delimiter
-@cindex @code{\/}, used as delimiter
-@cindex @code{\,}, used as delimiter
-@cindex @code{\&}, used as delimiter
-@ifnotinfo
-@cindex @code{\:}, used as delimiter
-@end ifnotinfo
-@ifinfo
-@cindex @code{\@r{<colon>}}, used as delimiter
-@end ifinfo
-@cindex @code{\~}, used as delimiter
-@cindex @code{\0}, used as delimiter
-@cindex @code{\a}, used as delimiter
-@cindex @code{\c}, used as delimiter
-@cindex @code{\d}, used as delimiter
-@cindex @code{\e}, used as delimiter
-@cindex @code{\E}, used as delimiter
-@cindex @code{\p}, used as delimiter
-@cindex @code{\r}, used as delimiter
-@cindex @code{\t}, used as delimiter
-@cindex @code{\u}, used as delimiter
-The following escapes sequences (which are handled similarly to
-characters since they don't take a parameter) are also allowed as
-delimiters: @code{\%}, @w{@samp{\ }}, @code{\|}, @code{\^}, @code{\@{},
-@code{\@}}, @code{\'}, @code{\`}, @code{\-}, @code{\_}, @code{\!},
-@code{\?}, @code{\)}, @code{\/}, @code{\,}, @code{\&}, @code{\:},
-@code{\~}, @code{\0}, @code{\a}, @code{\c}, @code{\d}, @code{\e},
-@code{\E}, @code{\p}, @code{\r}, @code{\t}, and @code{\u}.  Again, don't
-use these if possible.
-
-@cindex @code{\A}, allowed delimiters
-@cindex @code{\B}, allowed delimiters
-@cindex @code{\Z}, allowed delimiters
-@cindex @code{\C}, allowed delimiters
-@cindex @code{\w}, allowed delimiters
-No newline characters as delimiters are allowed in the following
-escapes: @code{\A}, @code{\B}, @code{\Z}, @code{\C}, and @code{\w}.
-
-@cindex @code{\D}, allowed delimiters
-@cindex @code{\h}, allowed delimiters
-@cindex @code{\H}, allowed delimiters
-@cindex @code{\l}, allowed delimiters
-@cindex @code{\L}, allowed delimiters
-@cindex @code{\N}, allowed delimiters
-@cindex @code{\R}, allowed delimiters
-@cindex @code{\s}, allowed delimiters
-@cindex @code{\S}, allowed delimiters
-@cindex @code{\v}, allowed delimiters
-@cindex @code{\x}, allowed delimiters
-Finally, the escapes @code{\D}, @code{\h}, @code{\H}, @code{\l},
-@code{\L}, @code{\N}, @code{\R}, @code{\s}, @code{\S}, @code{\v}, and
-@code{\x} can't use the following characters as delimiters:
-
-@itemize @bullet
-@item
-@cindex numbers, and delimiters
-@cindex digits, and delimiters
-The digits @code{0}-@code{9}.
-
-@item
-@cindex operators, as delimiters
-@cindex @code{+}, as delimiter
-@cindex @code{-}, as delimiter
-@cindex @code{/}, as delimiter
-@cindex @code{*}, as delimiter
-@cindex @code{%}, as delimiter
-@cindex @code{<}, as delimiter
-@cindex @code{>}, as delimiter
-@cindex @code{=}, as delimiter
-@cindex @code{&}, as delimiter
-@ifnotinfo
-@cindex @code{:}, as delimiter
-@end ifnotinfo
-@ifinfo
-@cindex <colon>, as delimiter
-@end ifinfo
-@cindex @code{(}, as delimiter
-@cindex @code{)}, as delimiter
-@cindex @code{.}, as delimiter
-The (single-character) operators @samp{+-/*%<>=&:().}.
-
-@item
-@cindex space character
-@cindex character, space
-@cindex tab character
-@cindex character, tab
-@cindex newline character
-@cindex character, newline
-The space, tab, and newline characters.
-
-@item
-@cindex @code{\%}, used as delimiter
-@ifnotinfo
-@cindex @code{\:}, used as delimiter
-@end ifnotinfo
-@ifinfo
-@cindex @code{\@r{<colon>}}, used as delimiter
-@end ifinfo
-@cindex @code{\@{}, used as delimiter
-@cindex @code{\@}}, used as delimiter
-@cindex @code{\'}, used as delimiter
-@cindex @code{\`}, used as delimiter
-@cindex @code{\-}, used as delimiter
-@cindex @code{\_}, used as delimiter
-@cindex @code{\!}, used as delimiter
-@cindex @code{\/}, used as delimiter
-@cindex @code{\c}, used as delimiter
-@cindex @code{\e}, used as delimiter
-@cindex @code{\p}, used as delimiter
-All escape sequences except @code{\%}, @code{\:}, @code{\@{},
-@code{\@}}, @code{\'}, @code{\`}, @code{\-}, @code{\_}, @code{\!},
-@code{\/}, @code{\c}, @code{\e}, and @code{\p}.
-@end itemize
-
-@cindex printing backslash (@code{\\}, @code{\e}, @code{\E}, @code{\[rs]})
-@cindex backslash, printing (@code{\\}, @code{\e}, @code{\E}, @code{\[rs]})
-To have a backslash (actually, the current escape character) appear in
-the output several escapes are defined: @code{\\}, @code{\e} or
-@code{\E}.  These are very similar, and only differ with respect to
-being used in macros or diversions.  @xref{Character Translations}, for
-an exact description of those escapes.
-
-@xref{Implementation Differences}, @ref{Copy-in Mode}, and
-@ref{Diversions}, @ref{Identifiers}, for more information.
-
-@menu
-* Comments::
-@end menu
-
-@node Comments,  , Escapes, Escapes
-@subsubsection Comments
-@cindex comments
-
-Probably one of the most@footnote{Unfortunately, this is a lie.  But
-hopefully future @code{gtroff} hackers will believe it @code{:-)}}
-common forms of escapes is the comment.
-
-@Defesc {\\", , , }
-Start a comment.  Everything to the end of the input line is ignored.
-
-This may sound simple, but it can be tricky to keep the comments from
-interfering with the appearance of the final output.
-
-@cindex @code{ds}, @code{ds1} requests, and comments
-@cindex @code{as}, @code{as1} requests, and comments
-If the escape is to the right of some text or a request, that portion of
-the line is ignored, but the space leading up to it is noticed by
-@code{gtroff}.  This only affects the @code{ds} and @code{as} request
-and its variants.
-
-@cindex tabs, before comments
-@cindex comments, lining up with tabs
-One possibly irritating idiosyncracy is that tabs must not be used to
-line up comments.  Tabs are not treated as whitespace between the
-request and macro arguments.
-
-@cindex undefined request
-@cindex request, undefined
-A comment on a line by itself is treated as a blank line, because after
-eliminating the comment, that is all that remains:
-
-@Example
-Test
-\" comment
-Test
-@endExample
-
-@noindent
-produces
-
-@Example
-Test
-
-Test
-@endExample
-
-To avoid this, it is common to start the line with @code{.\"}, which
-causes the line to be treated as an undefined request and thus ignored
-completely.
-
-@cindex @code{'}, as a comment
-Another commenting scheme seen sometimes is three consecutive single
-quotes (@code{'''}) at the beginning of a line.  This works, but
-@code{gtroff} gives a warning about an undefined macro (namely
-@code{''}), which is harmless, but irritating.
-@endDefesc
-
-@Defesc {\\#, , , }
-To avoid all this, @code{gtroff} has a new comment mechanism using the
-@code{\#} escape.  This escape works the same as @code{\"} except that
-the newline is also ignored:
-
-@Example
-Test
-\# comment
-Test
-@endExample
-
-@noindent
-produces
-
-@Example
-Test Test
-@endExample
-
-@noindent
-as expected.
-@endDefesc
-
-@Defreq {ig, [@Var{end}]}
-Ignore all input until @code{gtroff} encounters the macro named
-@code{.}@var{end} on a line by itself (or @code{..} if @var{end} is not
-specified).  This is useful for commenting out large blocks of text:
-
-@Example
-text text text...
-.ig
-This is part of a large block
-of text that has been
-temporarily(?) commented out.
-
-We can restore it simply by removing
-the .ig request and the ".." at the
-end of the block.
-..
-More text text text...
-@endExample
-
-@noindent
-produces
-
-@Example
-text text text@dots{}  More text text text@dots{}
-@endExample
-
-@noindent
-Note that the commented-out block of text does not cause a break.
-
-@cindex @code{ig} request, and copy-in mode
-@cindex copy-in mode, and @code{ig} request
-@cindex mode, copy-in, and @code{ig} request
-@cindex @code{ig} request, and auto-increment
-@cindex auto-increment, and @code{ig} request
-The input is read in copy-mode; auto-incremented registers @emph{are}
-affected (@pxref{Auto-increment}).
-@endDefreq
-
-
-@c =====================================================================
-
-@node Registers, Manipulating Filling and Adjusting, Embedded Commands, gtroff Reference
-@section Registers
-@cindex registers
-
-Numeric variables in @code{gtroff} are called @dfn{registers}.  There
-are a number of built-in registers, supplying anything from the date to
-details of formatting parameters.
-
-@xref{Identifiers}, for details on register identifiers.
-
-@menu
-* Setting Registers::
-* Interpolating Registers::
-* Auto-increment::
-* Assigning Formats::
-* Built-in Registers::
-@end menu
-
-@c ---------------------------------------------------------------------
-
-@node Setting Registers, Interpolating Registers, Registers, Registers
-@subsection Setting Registers
-@cindex setting registers (@code{nr}, @code{\R})
-@cindex registers, setting (@code{nr}, @code{\R})
-
-Define or set registers using the @code{nr} request or the @code{\R}
-escape.
-
-Although the following requests and escapes can be used to create
-registers, simply using an undefined register will cause it to be
-set to zero.
-
-@DefreqList {nr, ident value}
-@DefescListEndx {\\R, ', ident value, '}
-Set number register @var{ident} to @var{value}.  If @var{ident} doesn't
-exist, @code{gtroff} creates it.
-
-The argument to @code{\R} usually has to be enclosed in quotes.
-@xref{Escapes}, for details on parameter delimiting characters.
-
-The @code{\R} escape doesn't produce an input token in @code{gtroff};
-in other words, it vanishes completely after @code{gtroff} has
-processed it.
-
-For example, the following two lines are equivalent:
-
-@Example
-.nr a (((17 + (3 * 4))) % 4)
-\R'a (((17 + (3 * 4))) % 4)'
-    @result{} 1
-@endExample
-
-Note that the complete transparency of @code{\R} can cause surprising
-effects if you use number registers like @code{.k}, which get evaluated
-at the time they are accessed.
-
-@Example
-.ll 1.6i
-.
-aaa bbb ccc ddd eee fff ggg hhh\R':k \n[.k]'
-.tm :k == \n[:k]
-    @result{} :k == 126950
-.
-.br
-.
-aaa bbb ccc ddd eee fff ggg hhh\h'0'\R':k \n[.k]'
-.tm :k == \n[:k]
-    @result{} :k == 15000
-@endExample
-
-If you process this with the @sc{PostScript} device (@code{-Tps}),
-there will be a line break eventually after @code{ggg} in both input
-lines.  However, after processing the space after @code{ggg}, the
-partially collected line is not overfull yet, so @code{troff}
-continues to collect input until it sees the space (or in this case,
-the newline) after @code{hhh}.  At this point, the line is longer
-than the line length, and the line gets broken.
-
-In the first input line, since the @code{\R} escape leaves no traces,
-the check for the overfull line hasn't been done yet at the point where
-@code{\R} gets handled, and you get a value for the @code{.k} number
-register that is even greater than the current line length.
-
-In the second input line, the insertion of @code{\h'0'} to emit an
-invisible zero-width space forces @code{troff} to check the line length,
-which in turn causes the start of a new output line.  Now @code{.k}
-returns the expected value.
-@endDefreq
-
-Both @code{nr} and @code{\R} have two additional special forms to
-increment or decrement a register.
-
-@DefreqList {nr, ident @t{+}@Var{value}}
-@DefreqItem {nr, ident @t{-}@Var{value}}
-@DefescItemx {\\R, ', ident @t{+}value, '}
-@DefescListEnd {\\R, ', ident @t{-}value, '}
-Increment (decrement) register @var{ident} by @var{value}.
-
-@Example
-.nr a 1
-.nr a +1
-\na
-    @result{} 2
-@endExample
-
-@cindex negating register values
-To assign the negated value of a register to another register, some care
-must be taken to get the desired result:
-
-@Example
-.nr a 7
-.nr b 3
-.nr a -\nb
-\na
-    @result{} 4
-.nr a (-\nb)
-\na
-    @result{} -3
-@endExample
-
-@noindent
-The surrounding parentheses prevent the interpretation of the minus sign
-as a decrementing operator.  An alternative is to start the assignment
-with a @samp{0}:
-
-@Example
-.nr a 7
-.nr b -3
-.nr a \nb
-\na
-    @result{} 4
-.nr a 0\nb
-\na
-    @result{} -3
-@endExample
-@endDefreq
-
-@Defreq {rr, ident}
-@cindex removing number register (@code{rr})
-@cindex number register, removing (@code{rr})
-@cindex register, removing (@code{rr})
-Remove number register @var{ident}.  If @var{ident} doesn't exist, the
-request is ignored.
-@endDefreq
-
-@Defreq {rnn, ident1 ident2}
-@cindex renaming number register (@code{rnn})
-@cindex number register, renaming (@code{rnn})
-@cindex register, renaming (@code{rnn})
-Rename number register @var{ident1} to @var{ident2}.  If either
-@var{ident1} or @var{ident2} doesn't exist, the request is ignored.
-@endDefreq
-
-@Defreq {aln, ident1 ident2}
-@cindex alias, number register, creating (@code{aln})
-@cindex creating alias, for number register (@code{aln})
-@cindex number register, creating alias (@code{aln})
-@cindex register, creating alias (@code{aln})
-Create an alias @var{ident1} for a number register @var{ident2}.  The
-new name and the old name are exactly equivalent.  If @var{ident1} is
-undefined, a warning of type @samp{reg} is generated, and the request is
-ignored.  @xref{Debugging}, for information about warnings.
-@endDefreq
-
-@c ---------------------------------------------------------------------
-
-@node Interpolating Registers, Auto-increment, Setting Registers, Registers
-@subsection Interpolating Registers
-@cindex interpolating registers (@code{\n})
-@cindex registers, interpolating (@code{\n})
-
-Numeric registers can be accessed via the @code{\n} escape.
-
-@DefescList {\\n, , i, }
-@DefescItem {\\n, @Lparen{}, id, }
-@DefescListEnd {\\n, @Lbrack{}, ident, @Rbrack{}}
-@cindex nested assignments
-@cindex assignments, nested
-@cindex indirect assignments
-@cindex assignments, indirect
-Interpolate number register with name @var{ident} (one-character
-name@tie{}@var{i}, two-character name @var{id}).  This means that the
-value of the register is expanded in-place while @code{gtroff} is
-parsing the input line.  Nested assignments (also called indirect
-assignments) are possible.
-
-@Example
-.nr a 5
-.nr as \na+\na
-\n(as
-    @result{} 10
-@endExample
-
-@Example
-.nr a1 5
-.nr ab 6
-.ds str b
-.ds num 1
-\n[a\n[num]]
-    @result{} 5
-\n[a\*[str]]
-    @result{} 6
-@endExample
-@endDefesc
-
-@c ---------------------------------------------------------------------
-
-@node Auto-increment, Assigning Formats, Interpolating Registers, Registers
-@subsection Auto-increment
-@cindex auto-increment
-@cindex increment, automatic
-
-Number registers can also be auto-incremented and auto-decremented.  The
-increment or decrement value can be specified with a third argument to
-the @code{nr} request or @code{\R} escape.
-
-@Defreq {nr, ident value incr}
-@cindex @code{\R}, difference to @code{nr}
-Set number register @var{ident} to @var{value}; the increment for
-auto-incrementing is set to @var{incr}.  Note that the @code{\R} escape
-doesn't support this notation.
-@endDefreq
-
-To activate auto-incrementing, the escape @code{\n} has a special syntax
-form.
-
-@DefescList {\\n, +, i, }
-@DefescItem {\\n, -, i, }
-@DefescItem {\\n, @Lparen{}+, id, }
-@DefescItem {\\n, @Lparen{}-, id, }
-@DefescItem {\\n, +@Lparen{}, id, }
-@DefescItem {\\n, -@Lparen{}, id, }
-@DefescItem {\\n, @Lbrack{}+, ident, @Rbrack{}}
-@DefescItem {\\n, @Lbrack{}-, ident, @Rbrack{}}
-@DefescItem {\\n, +@Lbrack{}, ident, @Rbrack{}}
-@DefescListEnd {\\n, -@Lbrack{}, ident, @Rbrack{}}
-Before interpolating, increment or decrement @var{ident} (one-character
-name@tie{}@var{i}, two-character name @var{id}) by the auto-increment
-value as specified with the @code{nr} request (or the @code{\R} escape).
-If no auto-increment value has been specified, these syntax forms are
-identical to @code{\n}.
-@endDefesc
-
-For example,
-
-@Example
-.nr a 0 1
-.nr xx 0 5
-.nr foo 0 -2
-\n+a, \n+a, \n+a, \n+a, \n+a
-.br
-\n-(xx, \n-(xx, \n-(xx, \n-(xx, \n-(xx
-.br
-\n+[foo], \n+[foo], \n+[foo], \n+[foo], \n+[foo]
-@endExample
-
-@noindent
-produces
-
-@Example
-1, 2, 3, 4, 5
--5, -10, -15, -20, -25
--2, -4, -6, -8, -10
-@endExample
-
-@cindex increment value without changing the register
-@cindex value, incrementing without changing the register
-To change the increment value without changing the value of a register
-(@var{a} in the example), the following can be used:
-
-@Example
-.nr a \na 10
-@endExample
-
-@c ---------------------------------------------------------------------
-
-@node Assigning Formats, Built-in Registers, Auto-increment, Registers
-@subsection Assigning Formats
-@cindex assigning formats (@code{af})
-@cindex formats, assigning (@code{af})
-
-When a register is used, it is always textually replaced (or
-interpolated) with a representation of that number.  This output format
-can be changed to a variety of formats (numbers, Roman numerals, etc.).
-This is done using the @code{af} request.
-
-@Defreq {af, ident format}
-Change the output format of a number register.  The first argument
-@var{ident} is the name of the number register to be changed, and the
-second argument @var{format} is the output format.  The following output
-formats are available:
-
-@table @code
-@item 1
-Decimal arabic numbers.  This is the default format: 0, 1, 2,
-3,@tie{}@enddots{}
-
-@item 0@dots{}0
-Decimal numbers with as many digits as specified.  So, @samp{00} would
-result in printing numbers as 01, 02, 03,@tie{}@enddots{}
-
-In fact, any digit instead of zero does work; @code{gtroff} only counts
-how many digits are specified.  As a consequence, @code{af}'s default
-format @samp{1} could be specified as @samp{0} also (and exactly this is
-returned by the @code{\g} escape, see below).
-
-@item I
-@cindex Roman numerals
-@cindex numerals, Roman
-Upper-case Roman numerals: 0, I, II, III, IV,@tie{}@enddots{}
-
-@item i
-Lower-case Roman numerals: 0, i, ii, iii, iv,@tie{}@enddots{}
-
-@item A
-Upper-case letters: 0, A, B, C, @dots{},@tie{}Z, AA, AB,@tie{}@enddots{}
-
-@item a
-Lower-case letters: 0, a, b, c, @dots{},@tie{}z, aa, ab,@tie{}@enddots{}
-@end table
-
-Omitting the number register format causes a warning of type
-@samp{missing}.  @xref{Debugging}, for more details.  Specifying a
-nonexistent format causes an error.
-
-The following example produces @samp{10, X, j, 010}:
-
-@Example
-.nr a 10
-.af a 1           \" the default format
-\na,
-.af a I
-\na,
-.af a a
-\na,
-.af a 001
-\na
-@endExample
-
-@cindex Roman numerals, maximum and minimum
-@cindex maximum values of Roman numerals
-@cindex minimum values of Roman numerals
-The largest number representable for the @samp{i} and @samp{I} formats
-is 39999 (or @minus{}39999); @acronym{UNIX} @code{troff} uses @samp{z}
-and @samp{w} to represent 10000 and 5000 in Roman numerals, and so does
-@code{gtroff}.  Currently, the correct glyphs of Roman numeral five
-thousand and Roman numeral ten thousand (Unicode code points
-@code{U+2182} and @code{U+2181}, respectively) are not available.
-
-If @var{ident} doesn't exist, it is created.
-
-@cindex read-only register, changing format
-@cindex changing format, and read-only registers
-Changing the output format of a read-only register causes an error.  It
-is necessary to first copy the register's value to a writeable register,
-then apply the @code{af} request to this other register.
-@endDefreq
-
-@DefescList {\\g, , i, }
-@DefescItem {\\g, @Lparen{}, id, }
-@DefescListEnd {\\g, @Lbrack{}, ident, @Rbrack{}}
-@cindex format of register (@code{\g})
-@cindex register, format (@code{\g})
-Return the current format of the specified register @var{ident}
-(one-character name@tie{}@var{i}, two-character name @var{id}).  For
-example, @samp{\ga} after the previous example would produce the string
-@samp{000}.  If the register hasn't been defined yet, nothing is
-returned.
-@endDefesc
-
-@c ---------------------------------------------------------------------
-
-@node Built-in Registers,  , Assigning Formats, Registers
-@subsection Built-in Registers
-@cindex built-in registers
-@cindex registers, built-in
-
-The following lists some built-in registers that are not described
-elsewhere in this manual.  Any register that begins with a @samp{.} is
-read-only.  A complete listing of all built-in registers can be found in
-@ref{Register Index}.
-
-@table @code
-@item \n[.F]
-@cindex current input file name register (@code{.F})
-@cindex input file name, current, register (@code{.F})
-@vindex .F
-This string-valued register returns the current input file name.
-
-@item \n[.H]
-@cindex horizontal resolution register (@code{.H})
-@cindex resolution, horizontal, register (@code{.H})
-@vindex .H
-Horizontal resolution in basic units.
-
-@item \n[.R]
-@cindex number of registers register (@code{.R})
-@cindex registers, number of, register (@code{.R})
-@vindex .R
-The number of number registers available.  This is always 10000 in
-GNU@tie{}@code{troff}; it exists for backward compatibility.
-
-@item \n[.U]
-@cindex safer mode
-@cindex mode, safer
-@cindex unsafe mode
-@cindex mode, unsafe
-@vindex .U
-If @code{gtroff} is called with the @option{-U} command line option to
-activate unsafe mode, the number register @code{.U} is set to@tie{}1,
-and to zero otherwise.  @xref{Groff Options}.
-
-@item \n[.V]
-@cindex vertical resolution register (@code{.V})
-@cindex resolution, vertical, register (@code{.V})
-@vindex .V
-Vertical resolution in basic units.
-
-@item \n[seconds]
-@cindex seconds, current time (@code{seconds})
-@cindex time, current, seconds (@code{seconds})
-@cindex current time, seconds (@code{seconds})
-@vindex seconds
-The number of seconds after the minute, normally in the range@tie{}0
-to@tie{}59, but can be up to@tie{}61 to allow for leap seconds.
-Initialized at start-up of @code{gtroff}.
-
-@item \n[minutes]
-@cindex minutes, current time (@code{minutes})
-@cindex time, current, minutes (@code{minutes})
-@cindex current time, minutes (@code{minutes})
-@vindex minutes
-The number of minutes after the hour, in the range@tie{}0 to@tie{}59.
-Initialized at start-up of @code{gtroff}.
-
-@item \n[hours]
-@cindex hours, current time (@code{hours})
-@cindex time, current, hours (@code{hours})
-@cindex current time, hours (@code{hours})
-@vindex hours
-The number of hours past midnight, in the range@tie{}0 to@tie{}23.
-Initialized at start-up of @code{gtroff}.
-
-@item \n[dw]
-@cindex day of the week register (@code{dw})
-@cindex date, day of the week register (@code{dw})
-@vindex dw
-Day of the week (1-7).
-
-@item \n[dy]
-@cindex day of the month register (@code{dy})
-@cindex date, day of the month register (@code{dy})
-@vindex dy
-Day of the month (1-31).
-
-@item \n[mo]
-@cindex month of the year register (@code{mo})
-@cindex date, month of the year register (@code{mo})
-@vindex mo
-Current month (1-12).
-
-@item \n[year]
-@cindex date, year register (@code{year}, @code{yr})
-@cindex year, current, register (@code{year}, @code{yr})
-@vindex year
-The current year.
-
-@item \n[yr]
-@vindex yr
-The current year minus@tie{}1900.  Unfortunately, the documentation of
-@acronym{UNIX} Version@tie{}7's @code{troff} had a year@tie{}2000 bug:
-It incorrectly claimed that @code{yr} contains the last two digits of
-the year.  That claim has never been true of either @acronym{AT&T}
-@code{troff} or GNU @code{troff}.  Old @code{troff} input that looks
-like this:
-
-@Example
-'\" The following line stopped working after 1999
-This document was formatted in 19\n(yr.
-@endExample
-
-@noindent
-can be corrected as follows:
-
-@Example
-This document was formatted in \n[year].
-@endExample
-
-@noindent
-or, to be portable to older @code{troff} versions, as follows:
-
-@Example
-.nr y4 1900+\n(yr
-This document was formatted in \n(y4.
-@endExample
-
-@item \n[.c]
-@vindex .c
-@itemx \n[c.]
-@vindex c.
-@cindex input line number register (@code{.c}, @code{c.})
-@cindex line number, input, register (@code{.c}, @code{c.})
-The current @emph{input} line number.  Register @samp{.c} is read-only,
-whereas @samp{c.} (a @code{gtroff} extension) is writable also,
-affecting both @samp{.c} and @samp{c.}.
-
-@item \n[ln]
-@vindex ln
-@cindex output line number register (@code{ln})
-@cindex line number, output, register (@code{ln})
-The current @emph{output} line number after a call to the @code{nm}
-request to activate line numbering.
-
-@xref{Miscellaneous}, for more information about line numbering.
-
-@item \n[.x]
-@vindex .x
-@cindex major version number register (@code{.x})
-@cindex version number, major, register (@code{.x})
-The major version number.  For example, if the version number is 1.03
-then @code{.x} contains@tie{}@samp{1}.
-
-@item \n[.y]
-@vindex .y
-@cindex minor version number register (@code{.y})
-@cindex version number, minor, register (@code{.y})
-The minor version number.  For example, if the version number is 1.03
-then @code{.y} contains@tie{}@samp{03}.
-
-@item \n[.Y]
-@vindex .Y
-@cindex revision number register (@code{.Y})
-The revision number of @code{groff}.
-
-@item \n[$$]
-@vindex $$
-@cindex process ID of @code{gtroff} register (@code{$$})
-@cindex @code{gtroff}, process ID register (@code{$$})
-The process ID of @code{gtroff}.
-
-@item \n[.g]
-@vindex .g
-@cindex @code{gtroff}, identification register (@code{.g})
-@cindex GNU-specific register (@code{.g})
-Always@tie{}1.  Macros should use this to determine whether they are
-running under GNU @code{troff}.
-
-@item \n[.A]
-@vindex .A
-@cindex @acronym{ASCII} approximation output register (@code{.A})
-If the command line option @option{-a} is used to produce an
-@acronym{ASCII} approximation of the output, this is set to@tie{}1, zero
-otherwise.  @xref{Groff Options}.
-
-@item \n[.O]
-@vindex .O
-This read-only register is set to the suppression nesting level (see
-escapes @code{\O}).  @xref{Suppressing output}.
-
-@item \n[.P]
-@vindex .P
-This register is set to@tie{}1 (and to@tie{}0 otherwise) if the current
-page is actually being printed, i.e., if the @option{-o} option is being
-used to only print selected pages.  @xref{Groff Options}, for more
-information.
-
-@item \n[.T]
-@vindex .T
-If @code{gtroff} is called with the @option{-T} command line option, the
-number register @code{.T} is set to@tie{}1, and zero otherwise.
-@xref{Groff Options}.
-
-@item \*[.T]
-@stindex .T
-@cindex output device name string register (@code{.T})
-A single read-write string register that contains the current output
-device (for example, @samp{latin1} or @samp{ps}).  This is the only
-string register defined by @code{gtroff}.
-@end table
-
-
-@c =====================================================================
-
-@node Manipulating Filling and Adjusting, Manipulating Hyphenation, Registers, gtroff Reference
-@section Manipulating Filling and Adjusting
-@cindex manipulating filling and adjusting
-@cindex filling and adjusting, manipulating
-@cindex adjusting and filling, manipulating
-@cindex justifying text
-@cindex text, justifying
-
-@cindex break
-@cindex line break
-@cindex @code{bp} request, causing implicit linebreak
-@cindex @code{ce} request, causing implicit linebreak
-@cindex @code{cf} request, causing implicit linebreak
-@cindex @code{fi} request, causing implicit linebreak
-@cindex @code{fl} request, causing implicit linebreak
-@cindex @code{in} request, causing implicit linebreak
-@cindex @code{nf} request, causing implicit linebreak
-@cindex @code{rj} request, causing implicit linebreak
-@cindex @code{sp} request, causing implicit linebreak
-@cindex @code{ti} request, causing implicit linebreak
-@cindex @code{trf} request, causing implicit linebreak
-Various ways of causing @dfn{breaks} were given in @ref{Implicit Line
-Breaks}.  The @code{br} request likewise causes a break.  Several other
-requests also cause breaks, but implicitly.  These are @code{bp},
-@code{ce}, @code{cf}, @code{fi}, @code{fl}, @code{in}, @code{nf},
-@code{rj}, @code{sp}, @code{ti}, and @code{trf}.
-
-@Defreq {br, }
-Break the current line, i.e., the input collected so far is emitted
-without adjustment.
-
-If the no-break control character is used, @code{gtroff} suppresses the
-break:
-
-@Example
-a
-'br
-b
-    @result{} a b
-@endExample
-@endDefreq
-
-Initially, @code{gtroff} fills and adjusts text to both margins.
-Filling can be disabled via the @code{nf} request and re-enabled with
-the @code{fi} request.
-
-@DefreqList {fi, }
-@DefregListEndx {.u}
-@cindex fill mode (@code{fi})
-@cindex mode, fill (@code{fi})
-Activate fill mode (which is the default).  This request implicitly
-enables adjusting; it also inserts a break in the text currently being
-filled.  The read-only number register @code{.u} is set to@tie{}1.
-
-The fill mode status is associated with the current environment
-(@pxref{Environments}).
-
-See @ref{Line Control}, for interaction with the @code{\c} escape.
-@endDefreq
-
-@Defreq {nf, }
-@cindex no-fill mode (@code{nf})
-@cindex mode, no-fill (@code{nf})
-Activate no-fill mode.  Input lines are output as-is, retaining line
-breaks and ignoring the current line length.  This command implicitly
-disables adjusting; it also causes a break.  The number register
-@code{.u} is set to@tie{}0.
-
-The fill mode status is associated with the current environment
-(@pxref{Environments}).
-
-See @ref{Line Control}, for interaction with the @code{\c} escape.
-@endDefreq
-
-@DefreqList {ad, [@Var{mode}]}
-@DefregListEndx {.j}
-Set adjusting mode.
-
-Activation and deactivation of adjusting is done implicitly with calls
-to the @code{fi} or @code{nf} requests.
-
-@var{mode} can have one of the following values:
-
-@table @code
-@item l
-@cindex ragged-right
-Adjust text to the left margin.  This produces what is traditionally
-called ragged-right text.
-
-@item r
-@cindex ragged-left
-Adjust text to the right margin, producing ragged-left text.
-
-@item c
-@cindex centered text
-@cindex @code{ce} request, difference to @samp{.ad@tie{}c}
-Center filled text.  This is different to the @code{ce} request, which
-only centers text without filling.
-
-@item b
-@itemx n
-Justify to both margins.  This is the default used by @code{gtroff}.
-@end table
-
-Finally, @var{mode} can be the numeric argument returned by the
-@code{.j} register.
-
-Using @code{ad} without argument is the same as saying
-@w{@code{.ad \[.j]}}.  In particular, @code{gtroff} adjusts lines
-in the same way it did before adjusting was deactivated (with a call
-to @code{na}, say).  For example, this input code
-
-@Example
-.de AD
-.  br
-.  ad \\$1
-..
-.
-.de NA
-.  br
-.  na
-..
-.
-textA
-.AD r
-.nr ad \n[.j]
-textB
-.AD c
-textC
-.NA
-textD
-.AD         \" back to centering
-textE
-.AD \n[ad]  \" back to right justifying
-textF
-@endExample
-
-@noindent
-produces the following output:
-
-@Example
-textA
-                                                    textB
-                          textC
-textD
-                          textE
-                                                    textF
-@endExample
-
-@cindex adjustment mode register (@code{.j})
-As just demonstrated, the current adjustment mode is available in the
-read-only number register @code{.j}; it can be stored and
-subsequently used to set adjustment.
-
-The adjustment mode status is associated with the current environment
-(@pxref{Environments}).
-@endDefreq
-
-@Defreq {na, }
-Disable adjusting.  This request won't change the current adjustment
-mode: A subsequent call to @code{ad} uses the previous adjustment
-setting.
-
-The adjustment mode status is associated with the current environment
-(@pxref{Environments}).
-@endDefreq
-
-@DefreqList {brp, }
-@DefescListEndx {\\p, , , }
-Adjust the current line and cause a break.
-
-In most cases this produces very ugly results since @code{gtroff}
-doesn't have a sophisticated paragraph building algorithm (as @TeX{}
-have, for example); instead, @code{gtroff} fills and adjusts a paragraph
-line by line:
-
-@Example
-This is an uninteresting sentence.
-This is an uninteresting sentence.\p
-This is an uninteresting sentence.
-@endExample
-
-@noindent
-is formatted as
-
-@Example
-This is  an uninteresting  sentence.   This  is an
-uninteresting                            sentence.
-This is an uninteresting sentence.
-@endExample
-@endDefreq
-
-@DefreqList {ss, word_space_size [@Var{sentence_space_size}]}
-@DefregItemx {.ss}
-@DefregListEndx {.sss}
-@cindex word space size register (@code{.ss})
-@cindex size of word space register (@code{.ss})
-@cindex space between words register (@code{.ss})
-@cindex sentence space size register (@code{.sss})
-@cindex size of sentence space register (@code{.sss})
-@cindex space between sentences register (@code{.sss})
-Change the size of a space between words.  It takes its units as one
-twelfth of the space width parameter for the current font.  Initially
-both the @var{word_space_size} and @var{sentence_space_size}
-are@tie{}12.  In fill mode, the values specify the minimum distance.
-
-@cindex fill mode
-@cindex mode, fill
-If two arguments are given to the @code{ss} request, the second argument
-sets the sentence space size.  If the second argument is not given,
-sentence space size is set to @var{word_space_size}.  The sentence space
-size is used in two circumstances: If the end of a sentence occurs at
-the end of a line in fill mode, then both an inter-word space and a
-sentence space are added; if two spaces follow the end of a sentence in
-the middle of a line, then the second space is a sentence space.  If a
-second argument is never given to the @code{ss} request, the behaviour
-of @acronym{UNIX} @code{troff} is the same as that exhibited by GNU
-@code{troff}.  In GNU @code{troff}, as in @acronym{UNIX} @code{troff}, a
-sentence should always be followed by either a newline or two spaces.
-
-The read-only number registers @code{.ss} and @code{.sss} hold the
-values of the parameters set by the first and second arguments of the
-@code{ss} request.
-
-The word space and sentence space values are associated with the current
-environment (@pxref{Environments}).
-
-Contrary to @acronym{AT&T} @code{troff}, this request is @emph{not}
-ignored if a TTY output device is used; the given values are then
-rounded down to a multiple of@tie{}12 (@pxref{Implementation
-Differences}).
-
-The request is ignored if there is no parameter.
-
-@cindex discardable horizontal space
-@cindex space, discardable, horizontal
-@cindex horizontal discardable space
-Another useful application of the @code{ss} request is to insert
-discardable horizontal space, i.e., space that is discarded at a line
-break.  For example, paragraph-style footnotes could be separated this
-way:
-
-@Example
-.ll 4.5i
-1.\ This is the first footnote.\c
-.ss 48
-.nop
-.ss 12
-2.\ This is the second footnote.
-@endExample
-
-@noindent
-The result:
-
-@Example
-1. This is the first footnote.        2. This
-is the second footnote.
-@endExample
-
-@noindent
-Note that the @code{\h} escape produces unbreakable space.
-@endDefreq
-
-@DefreqList {ce, [@Var{nnn}]}
-@DefregListEndx {.ce}
-@cindex centering lines (@code{ce})
-@cindex lines, centering (@code{ce})
-Center text.  While the @w{@samp{.ad c}} request also centers text, it
-fills the text as well.  @code{ce} does not fill the text it affects.
-This request causes a break.  The number of lines still to be centered
-is associated with the current environment (@pxref{Environments}).
-
-The following example demonstrates the differences.  Here the input:
-
-@Example
-.ll 4i
-.ce 1000
-This is a small text fragment that shows the differences
-between the `.ce' and the `.ad c' request.
-.ce 0
-
-.ad c
-This is a small text fragment that shows the differences
-between the `.ce' and the `.ad c' request.
-@endExample
-
-@noindent
-And here the result:
-
-@Example
-  This is a small text fragment that
-         shows the differences
-between the `.ce' and the `.ad c' request.
-
-  This is a small text fragment that
-shows the differences between the `.ce'
-        and the `.ad c' request.
-@endExample
-
-With no arguments, @code{ce} centers the next line of text.  @var{nnn}
-specifies the number of lines to be centered.  If the argument is zero
-or negative, centering is disabled.
-
-The basic length for centering text is the line length (as set with the
-@code{ll} request) minus the indentation (as set with the @code{in}
-request).  Temporary indentation is ignored.
-
-As can be seen in the previous example, it is a common idiom to turn on
-centering for a large number of lines, and to turn off centering after
-text to be centered.  This is useful for any request that takes a
-number of lines as an argument.
-
-The @code{.ce} read-only number register contains the number of lines
-remaining to be centered, as set by the @code{ce} request.
-@endDefreq
-
-@DefreqList {rj, [@Var{nnn}]}
-@DefregListEndx {.rj}
-@cindex justifying text (@code{rj})
-@cindex text, justifying (@code{rj})
-@cindex right-justifying (@code{rj})
-Justify unfilled text to the right margin.  Arguments are identical to
-the @code{ce} request.  The @code{.rj} read-only number register is the
-number of lines to be right-justified as set by the @code{rj} request.
-This request causes a break.  The number of lines still to be
-right-justified is associated with the current environment
-(@pxref{Environments}).
-@endDefreq
-
-
-@c =====================================================================
-
-@node Manipulating Hyphenation, Manipulating Spacing, Manipulating Filling and Adjusting, gtroff Reference
-@section Manipulating Hyphenation
-@cindex manipulating hyphenation
-@cindex hyphenation, manipulating
-
-Here a description of requests that influence hyphenation.
-
-@DefreqList {hy, [@Var{mode}]}
-@DefregListEndx {.hy}
-Enable hyphenation.  The request has an optional numeric argument,
-@var{mode}, to restrict hyphenation if necessary:
-
-@table @code
-@item 1
-The default argument if @var{mode} is omitted.  Hyphenate without
-restrictions.  This is also the start-up value of @code{gtroff}.
-
-@item 2
-Do not hyphenate the last word on a page or column.
-
-@item 4
-Do not hyphenate the last two characters of a word.
-
-@item 8
-Do not hyphenate the first two characters of a word.
-@end table
-
-Values in the previous table are additive.  For example, the
-value@tie{}12 causes @code{gtroff} to neither hyphenate the last two nor
-the first two characters of a word.
-
-@cindex hyphenation restrictions register (@code{.hy})
-The current hyphenation restrictions can be found in the read-only
-number register @samp{.hy}.
-
-The hyphenation mode is associated with the current environment
-(@pxref{Environments}).
-@endDefreq
-
-@Defreq {nh, }
-Disable hyphenation (i.e., set the hyphenation mode to zero).  Note that
-the hyphenation mode of the last call to @code{hy} is not remembered.
-
-The hyphenation mode is associated with the current environment
-(@pxref{Environments}).
-@endDefreq
-
-@DefreqList {hlm, [@Var{nnn}]}
-@DefregItemx {.hlm}
-@DefregListEndx {.hlc}
-@cindex explicit hyphen (@code{\%})
-@cindex hyphen, explicit (@code{\%})
-@cindex consecutive hyphenated lines (@code{hlm})
-@cindex lines, consecutive hyphenated (@code{hlm})
-@cindex hyphenated lines, consecutive (@code{hlm})
-Set the maximum number of consecutive hyphenated lines to @var{nnn}.  If
-this number is negative, there is no maximum.  The default value
-is@tie{}@minus{}1 if @var{nnn} is omitted.  This value is associated
-with the current environment (@pxref{Environments}).  Only lines output
-from a given environment count towards the maximum associated with that
-environment.  Hyphens resulting from @code{\%} are counted; explicit
-hyphens are not.
-
-The current setting of @code{hlm} is available in the @code{.hlm}
-read-only number register.  Also the number of immediately preceding
-consecutive hyphenated lines are available in the read-only number
-register @samp{.hlc}.
-@endDefreq
-
-@Defreq {hw, word1 word2 @dots{}}
-Define how @var{word1}, @var{word2}, etc.@: are to be hyphenated.  The
-words must be given with hyphens at the hyphenation points.  For
-example:
-
-@Example
-.hw in-sa-lub-rious
-@endExample
-
-@noindent
-Besides the space character, any character whose hyphenation code value
-is zero can be used to separate the arguments of @code{hw} (see the
-documentation for the @code{hcode} request below for more information).
-In addition, this request can be used more than once.
-
-Hyphenation exceptions specified with the @code{hw} request are
-associated with the current hyphenation language; it causes an error if
-there is no current hyphenation language.
-
-This request is ignored if there is no parameter.
-
-In old versions of @code{troff} there was a limited amount of space to
-store such information; fortunately, with @code{gtroff}, this is no
-longer a restriction.
-@endDefreq
-
-@DefescList {\\%, , , }
-@deffnx Escape @t{\:}
-@ifnotinfo
-@esindex \:
-@end ifnotinfo
-@ifinfo
-@esindex \@r{<colon>}
-@end ifinfo
-@cindex hyphenation character (@code{\%})
-@cindex character, hyphenation (@code{\%})
-@cindex disabling hyphenation (@code{\%})
-@cindex hyphenation, disabling (@code{\%})
-To tell @code{gtroff} how to hyphenate words on the fly, use the
-@code{\%} escape, also known as the @dfn{hyphenation character}.
-Preceding a word with this character prevents it from being
-hyphenated; putting it inside a word indicates to @code{gtroff} that
-the word may be hyphenated at that point.  Note that this mechanism
-only affects that one occurrence of the word; to change the
-hyphenation of a word for the entire document, use the @code{hw}
-request.
-
-The @code{\:} escape inserts a zero-width break point (that is, the word
-breaks but without adding a hyphen).
-
-@Example
-... check the /var/log/\:httpd/\:access_log file ...
-@endExample
-
-@cindex @code{\X}, followed by @code{\%}
-@cindex @code{\Y}, followed by @code{\%}
-@cindex @code{\%}, following @code{\X} or @code{\Y}
-Note that @code{\X} and @code{\Y} start a word, that is, the @code{\%}
-escape in (say) @w{@samp{\X'...'\%foobar}} and
-@w{@samp{\Y'...'\%foobar}} no longer prevents hyphenation but inserts a
-hyphenation point at the beginning of @samp{foobar}; most likely this
-isn't what you want to do.
-@endDefesc
-
-@Defreq {hc, [@Var{char}]}
-Change the hyphenation character to @var{char}.  This character then
-works the same as the @code{\%} escape, and thus, no longer appears in
-the output.  Without an argument, @code{hc} resets the hyphenation
-character to be @code{\%} (the default) only.
-
-The hyphenation character is associated with the current environment
-(@pxref{Environments}).
-@endDefreq
-
-@DefreqList {hpf, pattern_file}
-@DefreqItemx {hpfa, pattern_file}
-@DefreqListEndx {hpfcode, a b [c d @dots{}]}
-@cindex hyphenation patterns (@code{hpf})
-@cindex patterns for hyphenation (@code{hpf})
-Read in a file of hyphenation patterns.  This file is searched for in
-the same way as @file{@var{name}.tmac} (or @file{tmac.@var{name}}) is
-searched for if the @option{-m@var{name}} option is specified.
-
-It should have the same format as (simple) @TeX{} patterns files.  More
-specifically, the following scanning rules are implemented.
-
-@itemize @bullet
-@item
-A percent sign starts a comment (up to the end of the line) even if
-preceded by a backslash.
-
-@item
-No support for `digraphs' like @code{\$}.
-
-@item
-@code{^^@var{xx}} (@var{x} is 0-9 or a-f) and @code{^^@var{x}}
-(character code of @var{x} in the range 0-127) are recognized; other use
-of @code{^} causes an error.
-
-@item
-No macro expansion.
-
-@item
-@code{hpf} checks for the expression @code{\patterns@{@dots{}@}}
-(possibly with whitespace before and after the braces).  Everything
-between the braces is taken as hyphenation patterns.  Consequently,
-@code{@{} and @code{@}} are not allowed in patterns.
-
-@item
-Similarly, @code{\hyphenation@{@dots{}@}} gives a list of hyphenation
-exceptions.
-
-@item
-@code{\endinput} is recognized also.
-
-@item
-For backwards compatibility, if @code{\patterns} is missing, the whole
-file is treated as a list of hyphenation patterns (only recognizing the
-@code{%} character as the start of a comment).
-@end itemize
-
-If no @code{hpf} request is specified (either in the document or in a
-macro package), @code{gtroff} won't hyphenate at all.
-
-The @code{hpfa} request appends a file of patterns to the current list.
-
-The @code{hpfcode} request defines mapping values for character codes in
-hyphenation patterns.  @code{hpf} or @code{hpfa} then apply the mapping
-(after reading the patterns) before replacing or appending them to the
-current list of patterns.  Its arguments are pairs of character codes --
-integers from 0 to@tie{}255.  The request maps character
-code@tie{}@var{a} to code@tie{}@var{b}, code@tie{}@var{c} to
-code@tie{}@var{d}, and so on.  You can use character codes that would
-be invalid otherwise.  By default, everything maps to itself except
-letters `A' to `Z', which map to `a' to `z'.
-
-
-@pindex troffrc
-@pindex troffrc-end
-@pindex hyphen.us
-@pindex hyphenex.us
-The set of hyphenation patterns is associated with the current language
-set by the @code{hla} request.  The @code{hpf} request is usually
-invoked by the @file{troffrc} or @file{troffrc-end} file; by default,
-@file{troffrc} loads hyphenation patterns and exceptions for American
-English (in files @file{hyphen.us} and @file{hyphenex.us}).
-
-A second call to @code{hpf} (for the same language) replaces the
-hyphenation patterns with the new ones.
-
-Invoking @code{hpf} causes an error if there is no current hyphenation
-language.
-@endDefreq
-
-@Defreq {hcode, c1 code1 [c2 code2 @dots{}]}
-@cindex hyphenation code (@code{hcode})
-@cindex code, hyphenation (@code{hcode})
-Set the hyphenation code of character @var{c1} to @var{code1}, that of
-@var{c2} to @var{code2}, etc.  A hyphenation code must be a single input
-character (not a special character) other than a digit or a space.
-
-To make hyphenation work, hyphenation codes must be set up.  At
-start-up, groff only assigns hyphenation codes to the letters
-@samp{a}-@samp{z} (mapped to themselves) and to the letters
-@samp{A}-@samp{Z} (mapped to @samp{a}-@samp{z}); all other hyphenation
-codes are set to zero.  Normally, hyphenation patterns contain only
-lowercase letters, which should be applied regardless of case.  In
-other words, the words `FOO' and `Foo' should be hyphenated exactly the
-same way as the word `foo' is hyphenated, and this is what @code{hcode}
-is good for.  Words that contain other letters won't be hyphenated
-properly if the corresponding hyphenation patterns actually do contain
-them.  For example, the following @code{hcode} requests are necessary to
-assign hyphenation codes to the letters @samp{�������} (this is needed
-for German):
-
-@Example
-.hcode � �  � �
-.hcode � �  � �
-.hcode � �  � �
-.hcode � �
-@endExample
-
-Without those assignments, groff treats German words like
-@w{`Kinderg�rten'} (the plural form of `kindergarten') as two substrings
-@w{`kinderg'} and @w{`rten'} because the hyphenation code of the
-umlaut@tie{}a is zero by default.  There is a German hyphenation pattern
-that covers @w{`kinder'}, so groff finds the hyphenation `kin-der'.
-The other two hyphenation points (`kin-der-g�r-ten') are missed.
-
-This request is ignored if it has no parameter.
-@endDefreq
-
-@DefreqList {hym, [@Var{length}]}
-@DefregListEndx {.hym}
-@cindex hyphenation margin (@code{hym})
-@cindex margin for hyphenation (@code{hym})
-@cindex @code{ad} request, and hyphenation margin
-Set the (right) hyphenation margin to @var{length}.  If the current
-adjustment mode is not @samp{b} or @samp{n}, the line is not hyphenated
-if it is shorter than @var{length}.  Without an argument, the
-hyphenation margin is reset to its default value, which is@tie{}0.  The
-default scaling indicator for this request is @samp{m}.  The hyphenation
-margin is associated with the current environment
-(@pxref{Environments}).
-
-A negative argument resets the hyphenation margin to zero, emitting a
-warning of type @samp{range}.
-
-@cindex hyphenation margin register (@code{.hym})
-The current hyphenation margin is available in the @code{.hym} read-only
-number register.
-@endDefreq
-
-@DefreqList {hys, [@Var{hyphenation_space}]}
-@DefregListEndx {.hys}
-@cindex hyphenation space (@code{hys})
-@cindex @code{ad} request, and hyphenation space
-Set the hyphenation space to @var{hyphenation_space}.  If the current
-adjustment mode is @samp{b} or @samp{n}, don't hyphenate the line if it
-can be justified by adding no more than @var{hyphenation_space} extra
-space to each word space.  Without argument, the hyphenation space is
-set to its default value, which is@tie{}0.  The default scaling
-indicator for this request is @samp{m}.  The hyphenation space is
-associated with the current environment (@pxref{Environments}).
-
-A negative argument resets the hyphenation space to zero, emitting a
-warning of type @samp{range}.
-
-@cindex hyphenation space register (@code{.hys})
-The current hyphenation space is available in the @code{.hys} read-only
-number register.
-@endDefreq
-
-@Defreq {shc, [@Var{glyph}]}
-@cindex soft hyphen character, setting (@code{shc})
-@cindex character, soft hyphen, setting (@code{shc})
-@cindex glyph, soft hyphen (@code{hy})
-@cindex soft hyphen glyph (@code{hy})
-@cindex @code{char} request, and soft hyphen character
-@cindex @code{tr} request, and soft hyphen character
-Set the @dfn{soft hyphen character} to @var{glyph}.@footnote{@dfn{Soft
-hyphen character} is a misnomer since it is an output glyph.}  If the
-argument is omitted, the soft hyphen character is set to the default
-glyph @code{\(hy} (this is the start-up value of @code{gtroff} also).
-The soft hyphen character is the glyph that is inserted when a word is
-hyphenated at a line break.  If the soft hyphen character does not exist
-in the font of the character immediately preceding a potential break
-point, then the line is not broken at that point.  Neither definitions
-(specified with the @code{char} request) nor translations (specified
-with the @code{tr} request) are considered when finding the soft hyphen
-character.
-@endDefreq
-
-@DefreqList {hla, language}
-@DefregListEndx {.hla}
-@cindex @code{hpf} request, and hyphenation language
-@cindex @code{hw} request, and hyphenation language
-@pindex troffrc
-@pindex troffrc-end
-Set the current hyphenation language to the string @var{language}.
-Hyphenation exceptions specified with the @code{hw} request and
-hyphenation patterns specified with the @code{hpf} and @code{hpfa}
-requests are both associated with the current hyphenation language.  The
-@code{hla} request is usually invoked by the @file{troffrc} or the
-@file{troffrc-end} files; @file{troffrc} sets the default language to
-@samp{us}.
-
-@cindex hyphenation language register (@code{.hla})
-The current hyphenation language is available as a string in the
-read-only number register @samp{.hla}.
-
-@Example
-.ds curr_language \n[.hla]
-\*[curr_language]
-    @result{} us
-@endExample
-@endDefreq
-
-
-@c =====================================================================
-
-@node Manipulating Spacing, Tabs and Fields, Manipulating Hyphenation, gtroff Reference
-@section Manipulating Spacing
-@cindex manipulating spacing
-@cindex spacing, manipulating
-
-@Defreq {sp, [@Var{distance}]}
-Space downwards @var{distance}.  With no argument it advances
-1@tie{}line.  A negative argument causes @code{gtroff} to move up the
-page the specified distance.  If the argument is preceded by a @samp{|}
-then @code{gtroff} moves that distance from the top of the page.  This
-request causes a line break, and that adds the current line spacing to
-the space you have just specified.  The default scaling indicator is
-@samp{v}.
-
-For convenience you may wish to use the following macros to set the
-height of the next line at a given distance from the top or the bottom
-of the page:
-
-@Example
-.de y-from-top-down
-.  sp |\\$1-\\n[.v]u
-..
-.
-.de y-from-bot-up
-.  sp |\\n[.p]u-\\$1-\\n[.v]u
-..
-@endExample
-
-@noindent
-A call to @samp{.y-from-bot-up 10c} means that the bottom of the next
-line will be at 10@dmn{cm} from the paper edge at the bottom.
-
-If a vertical trap is sprung during execution of @code{sp}, the amount
-of vertical space after the trap is discarded.  For example, this
-
-@Example
-.de xxx
-..
-.
-.wh 0 xxx
-.
-.pl 5v
-foo
-.sp 2
-bar
-.sp 50
-baz
-@endExample
-
-@noindent
-results in
-
-@Example
-foo
-
-
-bar
-
-baz
-@endExample
-
-@cindex @code{sp} request, and traps
-@cindex discarded space in traps
-@cindex space, discarded, in traps
-@cindex traps, and discarded space
-The amount of discarded space is available in the number register
-@code{.trunc}.
-
-To protect @code{sp} against vertical traps, use the @code{vpt} request:
-
-@Example
-.vpt 0
-.sp -3
-.vpt 1
-@endExample
-@endDefreq
-
-@DefreqList {ls, [@Var{nnn}]}
-@DefregListEndx {.L}
-@cindex double-spacing (@code{ls})
-Output @w{@var{nnn}@minus{}1} blank lines after each line of text.  With
-no argument, @code{gtroff} uses the previous value before the last
-@code{ls} call.
-
-@Example
-.ls 2    \" This causes double-spaced output
-.ls 3    \" This causes triple-spaced output
-.ls      \" Again double-spaced
-@endExample
-
-The line spacing is associated with the current environment
-(@pxref{Environments}).
-
-@cindex line spacing register (@code{.L})
-The read-only number register @code{.L} contains the current line
-spacing setting.
-@endDefreq
-
-@xref{Changing Type Sizes}, for the requests @code{vs} and @code{pvs} as
-alternatives to @code{ls}.
-
-@DefescList {\\x, ', spacing, '}
-@DefregListEndx {.a}
-Sometimes, extra vertical spacing is only needed occasionally, e.g.@: to
-allow space for a tall construct (like an equation).  The @code{\x}
-escape does this.  The escape is given a numerical argument, usually
-enclosed in quotes (like @samp{\x'3p'}); the default scaling indicator
-is @samp{v}.  If this number is positive extra vertical space is
-inserted below the current line.  A negative number adds space above.
-If this escape is used multiple times on the same line, the maximum of
-the values is used.
-
-@xref{Escapes}, for details on parameter delimiting characters.
-
-@cindex extra post-vertical line space register (@code{.a})
-The @code{.a} read-only number register contains the most recent
-(nonnegative) extra vertical line space.
-
-Using @code{\x} can be necessary in combination with the @code{\b}
-escape, as the following example shows.
-
-@Example
-This is a test with the \[rs]b escape.
-.br
-This is a test with the \[rs]b escape.
-.br
-This is a test with \b'xyz'\x'-1m'\x'1m'.
-.br
-This is a test with the \[rs]b escape.
-.br
-This is a test with the \[rs]b escape.
-@endExample
-
-@noindent
-produces
-
-@Example
-This is a test with the \b escape.
-This is a test with the \b escape.
-                    x
-This is a test with y.
-                    z
-This is a test with the \b escape.
-This is a test with the \b escape.
-@endExample
-@endDefesc
-
-@DefreqList {ns, }
-@DefreqItemx {rs, }
-@DefregListEndx {.ns}
-@cindex @code{sp} request, and no-space mode
-@cindex no-space mode (@code{ns})
-@cindex mode, no-space (@code{ns})
-@cindex blank lines, disabling
-@cindex lines, blank, disabling
-Enable @dfn{no-space mode}.  In this mode, spacing (either via @code{sp}
-or via blank lines) is disabled.  The @code{bp} request to advance to
-the next page is also disabled, except if it is accompanied by a page
-number (see @ref{Page Control}, for more information).  This mode ends
-when actual text is output or the @code{rs} request is encountered, which
-ends no-space mode.  The read-only number register @code{.ns} is set
-to@tie{}1 as long as no-space mode is active.
-
-This request is useful for macros that conditionally insert vertical
-space before the text starts (for example, a paragraph macro could
-insert some space except when it is the first paragraph after a section
-header).
-@endDefreq
-
-
-@c =====================================================================
-
-@node Tabs and Fields, Character Translations, Manipulating Spacing, gtroff Reference
-@section Tabs and Fields
-@cindex tabs, and fields
-@cindex fields, and tabs
-
-@cindex @acronym{EBCDIC} encoding of a tab
-A tab character (@acronym{ASCII} char@tie{}9, @acronym{EBCDIC}
-char@tie{}5) causes a horizontal movement to the next tab stop (much
-like it did on a typewriter).
-
-@Defesc {\\t, , , }
-@cindex tab character, non-interpreted (@code{\t})
-@cindex character, tab, non-interpreted (@code{\t})
-@cindex @code{\t}, and copy-in mode
-@cindex copy-in mode, and @code{\t}
-@cindex mode, copy-in, and @code{\t}
-This escape is a non-interpreted tab character.  In copy mode
-(@pxref{Copy-in Mode}), @code{\t} is the same as a real tab character.
-@endDefesc
-
-@DefreqList {ta, [@Var{n1} @Var{n2} @dots{} @Var{nn} @t{T} @Var{r1} @Var{r2} @dots{} @Var{rn}]}
-@DefregListEndx {.tabs}
-Change tab stop positions.  This request takes a series of tab
-specifiers as arguments (optionally divided into two groups with the
-letter @samp{T}) that indicate where each tab stop is to be (overriding
-any previous settings).
-
-Tab stops can be specified absolutely, i.e., as the distance from the
-left margin.  For example, the following sets 6@tie{}tab stops every one
-inch.
-
-@Example
-.ta 1i 2i 3i 4i 5i 6i
-@endExample
-
-Tab stops can also be specified using a leading @samp{+}, which means
-that the specified tab stop is set relative to the previous tab stop.
-For example, the following is equivalent to the previous example.
-
-@Example
-.ta 1i +1i +1i +1i +1i +1i
-@endExample
-
-@code{gtroff} supports an extended syntax to specify repeat values after
-the @samp{T} mark (these values are always taken as relative) -- this is
-the usual way to specify tabs set at equal intervals.  The following is,
-yet again, the same as the previous examples.  It does even more since
-it defines an infinite number of tab stops separated by one inch.
-
-@Example
-.ta T 1i
-@endExample
-
-Now we are ready to interpret the full syntax given at the beginning:
-Set tabs at positions @var{n1}, @var{n2}, @dots{}, @var{nn} and then set
-tabs at @var{nn}+@var{r1}, @var{nn}+@var{r2}, @dots{}, @var{nn}+@var{rn}
-and then at @var{nn}+@var{rn}+@var{r1}, @var{nn}+@var{rn}+@var{r2},
-@dots{}, @var{nn}+@var{rn}+@var{rn}, and so on.
-
-Example: @samp{4c +6c T 3c 5c 2c} is equivalent to @samp{4c 10c 13c 18c
-20c 23c 28c 30c @dots{}}.
-
-The material in each tab column (i.e., the column between two tab stops)
-may be justified to the right or left or centered in the column.  This
-is specified by appending @samp{R}, @samp{L}, or @samp{C} to the tab
-specifier.  The default justification is @samp{L}.  Example:
-
-@Example
-.ta 1i 2iC 3iR
-@endExample
-
-Some notes:
-
-@itemize @bullet
-@item
-The default unit of the @code{ta} request is @samp{m}.
-
-@item
-A tab stop is converted into a non-breakable horizontal movement that
-can be neither stretched nor squeezed.  For example,
-
-@Example
-.ds foo a\tb\tc
-.ta T 5i
-\*[foo]
-@endExample
-
-@noindent
-creates a single line, which is a bit longer than 10@tie{}inches (a
-string is used to show exactly where the tab characters are).  Now
-consider the following:
-
-@Example
-.ds bar a\tb b\tc
-.ta T 5i
-\*[bar]
-@endExample
-
-@noindent
-@code{gtroff} first converts the tab stops of the line into unbreakable
-horizontal movements, then splits the line after the second @samp{b}
-(assuming a sufficiently short line length).  Usually, this isn't what
-the user wants.
-
-@item
-Superfluous tabs (i.e., tab characters that do not correspond to a tab
-stop) are ignored except the first one, which delimits the characters
-belonging to the last tab stop for right-justifying or centering.
-Consider the following example
-
-@Example
-.ds Z   foo\tbar\tfoo
-.ds ZZ  foo\tbar\tfoobar
-.ds ZZZ foo\tbar\tfoo\tbar
-.ta 2i 4iR
-\*[Z]
-.br
-\*[ZZ]
-.br
-\*[ZZZ]
-.br
-@endExample
-
-@noindent
-which produces the following output:
-
-@Example
-foo                 bar              foo
-foo                 bar           foobar
-foo                 bar              foobar
-@endExample
-
-@noindent
-The first line right-justifies the second `foo' relative to the tab
-stop.  The second line right-justifies `foobar'.  The third line finally
-right-justifies only `foo' because of the additional tab character, which
-marks the end of the string belonging to the last defined tab stop.
-
-@item
-Tab stops are associated with the current environment
-(@pxref{Environments}).
-
-@item
-Calling @code{ta} without an argument removes all tab stops.
-
-@item
-@cindex tab stops, for TTY output devices
-The start-up value of @code{gtroff} is @w{@samp{T 0.8i}}.
-@end itemize
-
-@cindex tab settings register (@code{.tabs})
-The read-only number register @code{.tabs} contains a string
-representation of the current tab settings suitable for use as an
-argument to the @code{ta} request.
-
-@Example
-.ds tab-string \n[.tabs]
-\*[tab-string]
-    @result{} T120u
-@endExample
-
-@cindex @code{.S} register, Plan@tie{}9 alias for @code{.tabs}
-@cindex @code{.tabs} register, Plan@tie{}9 alias (@code{.S})
-The @code{troff} version of the Plan@tie{}9 operating system uses
-register @code{.S} for the same purpose.
-@endDefreq
-
-@Defreq {tc, [@Var{fill-glyph}]}
-@cindex tab repetition character (@code{tc})
-@cindex character, tab repetition (@code{tc})
-@cindex glyph, tab repetition (@code{tc})
-Normally @code{gtroff} fills the space to the next tab stop with
-whitespace.  This can be changed with the @code{tc} request.  With no
-argument @code{gtroff} reverts to using whitespace, which is the
-default.  The value of this @dfn{tab repetition character} is associated
-with the current environment (@pxref{Environments}).@footnote{@dfn{Tab
-repetition character} is a misnomer since it is an output glyph.}
-@endDefreq
-
-@DefreqList {linetabs, n}
-@DefregListEndx {.linetabs}
-@cindex tab, line-tabs mode
-@cindex line-tabs mode
-@cindex mode, line-tabs
-If @var{n} is missing or not zero, enable @dfn{line-tabs} mode, or
-disable it otherwise (the default).  In line-tabs mode, @code{gtroff}
-computes tab distances relative to the (current) output line instead of
-the input line.
-
-For example, the following code:
-
-@Example
-.ds x a\t\c
-.ds y b\t\c
-.ds z c
-.ta 1i 3i
-\*x
-\*y
-\*z
-@endExample
-
-@noindent
-in normal mode, results in the output
-
-@Example
-a         b         c
-@endExample
-
-@noindent
-in line-tabs mode, the same code outputs
-
-@Example
-a         b                   c
-@endExample
-
-Line-tabs mode is associated with the current environment.  The
-read-only register @code{.linetabs} is set to@tie{}1 if in line-tabs
-mode, and 0 in normal mode.
-@endDefreq
-
-@menu
-* Leaders::
-* Fields::
-@end menu
-
-@c ---------------------------------------------------------------------
-
-@node Leaders, Fields, Tabs and Fields, Tabs and Fields
-@subsection Leaders
-@cindex leaders
-
-Sometimes it may may be desirable to use the @code{tc} request to fill a
-particular tab stop with a given glyph (for example dots in a table of
-contents), but also normal tab stops on the rest of the line.  For this
-@code{gtroff} provides an alternate tab mechanism, called @dfn{leaders},
-which does just that.
-
-@cindex leader character
-A leader character (character code@tie{}1) behaves similarly to a tab
-character: It moves to the next tab stop.  The only difference is that
-for this movement, the fill glyph defaults to a period character and not
-to space.
-
-@Defesc {\\a, , , }
-@cindex leader character, non-interpreted (@code{\a})
-@cindex character, leader, non-interpreted (@code{\a})
-@cindex @code{\a}, and copy-in mode
-@cindex copy-in mode, and @code{\a}
-@cindex mode, copy-in, and @code{\a}
-This escape is a non-interpreted leader character.  In copy mode
-(@pxref{Copy-in Mode}), @code{\a} is the same as a real leader
-character.
-@endDefesc
-
-@Defreq {lc, [@Var{fill-glyph}]}
-@cindex leader repetition character (@code{lc})
-@cindex character, leader repetition (@code{lc})
-@cindex glyph, leader repetition (@code{lc})
-Declare the @dfn{leader repetition character}.@footnote{@dfn{Leader
-repetition character} is a misnomer since it is an output glyph.}
-Without an argument, leaders act the same as tabs (i.e., using
-whitespace for filling).  @code{gtroff}'s start-up value is a dot
-(@samp{.}).  The value of the leader repetition character is associated
-with the current environment (@pxref{Environments}).
-@endDefreq
-
-@cindex table of contents
-@cindex contents, table of
-For a table of contents, to name an example, tab stops may be defined so
-that the section number is one tab stop, the title is the second with
-the remaining space being filled with a line of dots, and then the page
-number slightly separated from the dots.
-
-@Example
-.ds entry 1.1\tFoo\a\t12
-.lc .
-.ta 1i 5i +.25i
-\*[entry]
-@endExample
-
-@noindent
-This produces
-
-@Example
-1.1  Foo..........................................  12
-@endExample
-
-@c ---------------------------------------------------------------------
-
-@node Fields,  , Leaders, Tabs and Fields
-@subsection Fields
-@cindex fields
-
-@cindex field delimiting character (@code{fc})
-@cindex delimiting character, for fields (@code{fc})
-@cindex character, field delimiting (@code{fc})
-@cindex field padding character (@code{fc})
-@cindex padding character, for fields (@code{fc})
-@cindex character, field padding (@code{fc})
-@dfn{Fields} are a more general way of laying out tabular data.  A field
-is defined as the data between a pair of @dfn{delimiting characters}.
-It contains substrings that are separated by @dfn{padding characters}.
-The width of a field is the distance on the @emph{input} line from the
-position where the field starts to the next tab stop.  A padding
-character inserts stretchable space similar to @TeX{}'s @code{\hss}
-command (thus it can even be negative) to make the sum of all substring
-lengths plus the stretchable space equal to the field width.  If more
-than one padding character is inserted, the available space is evenly
-distributed among them.
-
-@Defreq {fc, [@Var{delim-char} [@Var{padding-char}]]}
-Define a delimiting and a padding character for fields.  If the latter
-is missing, the padding character defaults to a space character.  If
-there is no argument at all, the field mechanism is disabled (which is
-the default).  Note that contrary to e.g.@: the tab repetition
-character, delimiting and padding characters are @emph{not} associated
-to the current environment (@pxref{Environments}).
-
-Example:
-
-@Example
-.fc # ^
-.ta T 3i
-#foo^bar^smurf#
-.br
-#foo^^bar^smurf#
-@endExample
-
-@noindent
-and here the result:
-
-@Example
-foo         bar          smurf
-foo            bar       smurf
-@endExample
-@endDefreq
-
-
-@c =====================================================================
-
-@node Character Translations, Troff and Nroff Mode, Tabs and Fields, gtroff Reference
-@section Character Translations
-@cindex character translations
-@cindex translations of characters
-
-@cindex control character, changing (@code{cc})
-@cindex character, control, changing (@code{cc})
-@cindex no-break control character, changing (@code{c2})
-@cindex character, no-break control, changing (@code{c2})
-@cindex control character, no-break, changing (@code{c2})
-The control character (@samp{.}) and the no-break control character
-(@samp{'}) can be changed with the @code{cc} and @code{c2} requests,
-respectively.
-
-@Defreq {cc, [@Var{c}]}
-Set the control character to@tie{}@var{c}.  With no argument the default
-control character @samp{.} is restored.  The value of the control
-character is associated with the current environment
-(@pxref{Environments}).
-@endDefreq
-
-@Defreq {c2, [@Var{c}]}
-Set the no-break control character to@tie{}@var{c}.  With no argument
-the default control character @samp{'} is restored.  The value of the
-no-break control character is associated with the current environment
-(@pxref{Environments}).
-@endDefreq
-
-@xref{Requests}.
-
-@Defreq {eo, }
-@cindex disabling @code{\} (@code{eo})
-@cindex @code{\}, disabling (@code{eo})
-Disable the escape mechanism completely.  After executing this request,
-the backslash character @samp{\} no longer starts an escape sequence.
-
-This request can be very helpful in writing macros since it is not
-necessary then to double the escape character.  Here an example:
-
-@Example
-.\" This is a simplified version of the
-.\" .BR request from the man macro package
-.eo
-.de BR
-.  ds result \&
-.  while (\n[.$] >= 2) \@{\
-.    as result \fB\$1\fR\$2
-.    shift 2
-.  \@}
-.  if \n[.$] .as result \fB\$1
-\*[result]
-.  ft R
-..
-.ec
-@endExample
-@endDefreq
-
-@Defreq {ec, [@Var{c}]}
-@cindex escape character, changing (@code{ec})
-@cindex character, escape, changing (@code{ec})
-Set the escape character to@tie{}@var{c}.  With no argument the default
-escape character @samp{\} is restored.  It can be also used to re-enable
-the escape mechanism after an @code{eo} request.
-
-Note that changing the escape character globally likely breaks macro
-packages since @code{gtroff} has no mechanism to `intern' macros, i.e.,
-to convert a macro definition into an internal form that is independent
-of its representation (@TeX{} has this mechanism).  If a macro is
-called, it is executed literally.
-@endDefreq
-
-@DefreqList {ecs, }
-@DefreqListEndx {ecr, }
-The @code{ecs} request saves the current escape character in an internal
-register.  Use this request in combination with the @code{ec} request to
-temporarily change the escape character.
-
-The @code{ecr} request restores the escape character saved with
-@code{ecs}.  Without a previous call to @code{ecs}, this request sets
-the escape character to @code{\}.
-@endDefreq
-
-@DefescList {\\\\, , , }
-@DefescItemx {\\e, , , }
-@DefescListEndx {\\E, , , }
-Print the current escape character (which is the backslash character
-@samp{\} by default).
-
-@code{\\} is a `delayed' backslash; more precisely, it is the default
-escape character followed by a backslash, which no longer has special
-meaning due to the leading escape character.  It is @emph{not} an escape
-sequence in the usual sense!  In any unknown escape sequence
-@code{\@var{X}} the escape character is ignored and @var{X} is printed.
-But if @var{X} is equal to the current escape character, no warning is
-emitted.
-
-@cindex @code{\E}, and copy-in mode
-@cindex copy-in mode, and @code{\E}
-@cindex mode, copy-in, and @code{\E}
-As a consequence, only at top-level or in a diversion a backslash glyph
-is printed; in copy-in mode, it expands to a single backslash, which then
-combines with the following character to an escape sequence.
-
-The @code{\E} escape differs from @code{\e} by printing an escape
-character that is not interpreted in copy mode.  Use this to define
-strings with escapes that work when used in copy mode (for example, as a
-macro argument).  The following example defines strings to begin and end
-a superscript:
-
-@Example
-.ds @{ \v'-.3m'\s'\En[.s]*60/100'
-.ds @} \s0\v'.3m'
-@endExample
-
-Another example to demonstrate the differences between the various
-escape sequences, using a strange escape character, @samp{-}.
-
-@Example
-.ec -
-.de xxx
---A'123'
-..
-.xxx
-    @result{} -A'foo'
-@endExample
-
-@noindent
-The result is surprising for most users, expecting @samp{1} since
-@samp{foo} is a valid identifier.  What has happened?  As mentioned
-above, the leading escape character makes the following character
-ordinary.  Written with the default escape character the sequence
-@samp{--} becomes @samp{\-} -- this is the minus sign.
-
-If the escape character followed by itself is a valid escape sequence,
-only @code{\E} yields the expected result:
-
-@Example
-.ec -
-.de xxx
--EA'123'
-..
-.xxx
-    @result{} 1
-@endExample
-@endDefesc
-
-@Defesc {\\., , , }
-Similar to @code{\\}, the sequence @code{\.} isn't a real escape
-sequence.  As before, a warning message is suppressed if the escape
-character is followed by a dot, and the dot itself is printed.
-
-@Example
-.de foo
-.  nop foo
-.
-.  de bar
-.    nop bar
-\\..
-.
-..
-.foo
-.bar
-    @result{} foo bar
-@endExample
-
-@noindent
-The first backslash is consumed while the macro is read, and the second
-is swallowed while executing macro @code{foo}.
-@endDefesc
-
-A @dfn{translation} is a mapping of an input character to an output
-glyph.  The mapping occurs at output time, i.e., the input character
-gets assigned the metric information of the mapped output character
-right before input tokens are converted to nodes (@pxref{Gtroff
-Internals}, for more on this process).
-
-@DefreqList {tr, @Var{a}@Var{b}@Var{c}@Var{d}@dots{}}
-@DefreqListEndx {trin, @Var{a}@Var{b}@Var{c}@Var{d}@dots{}}
-Translate character @var{a} to glyph@tie{}@var{b}, character @var{c} to
-glyph@tie{}@var{d}, etc.  If there is an odd number of arguments, the
-last one is translated to an unstretchable space (@w{@samp{\ }}).
-
-The @code{trin} request is identical to @code{tr}, but when you unformat
-a diversion with @code{asciify} it ignores the translation.
-@xref{Diversions}, for details about the @code{asciify} request.
-
-Some notes:
-
-@itemize @bullet
-@item
-@cindex @code{\(}, and translations
-@cindex @code{\[}, and translations
-@cindex @code{\'}, and translations
-@cindex @code{\`}, and translations
-@cindex @code{\-}, and translations
-@cindex @code{\_}, and translations
-@cindex @code{\C}, and translations
-@cindex @code{\N}, and translations
-@cindex @code{char} request, and translations
-@cindex special characters
-@cindex character, special
-@cindex numbered glyph (@code{\N})
-@cindex glyph, numbered (@code{\N})
-Special characters (@code{\(@var{xx}}, @code{\[@var{xxx}]},
-@code{\C'@var{xxx}'}, @code{\'}, @code{\`}, @code{\-}, @code{\_}),
-glyphs defined with the @code{char} request, and numbered glyphs
-(@code{\N'@var{xxx}'}) can be translated also.
-
-@item
-@cindex @code{\e}, and translations
-The @code{\e} escape can be translated also.
-
-@item
-@cindex @code{\%}, and translations
-@cindex @code{\~}, and translations
-Characters can be mapped onto the @code{\%} and @code{\~} escapes (but
-@code{\%} and @code{\~} can't be mapped onto another glyph).
-
-@item
-@cindex backspace character, and translations
-@cindex character, backspace, and translations
-@cindex leader character, and translations
-@cindex character, leader, and translations
-@cindex newline character, and translations
-@cindex character, newline, and translations
-@cindex tab character, and translations
-@cindex character, tab, and translations
-@cindex @code{\a}, and translations
-@cindex @code{\t}, and translations
-The following characters can't be translated: space (with one exception,
-see below), backspace, newline, leader (and @code{\a}), tab (and
-@code{\t}).
-
-@item
-@cindex @code{shc} request, and translations
-Translations are not considered for finding the soft hyphen character
-set with the @code{shc} request.
-
-@item
-@cindex @code{\&}, and translations
-The pair @samp{@var{c}\&} (this is an arbitrary character@tie{}@var{c}
-followed by the zero width space character) maps this character to
-nothing.
-
-@Example
-.tr a\&
-foo bar
-    @result{} foo br
-@endExample
-
-@noindent
-It is even possible to map the space character to nothing:
-
-@Example
-.tr aa \&
-foo bar
-    @result{} foobar
-@endExample
-
-@noindent
-As shown in the example, the space character can't be the first
-character/glyph pair as an argument of @code{tr}.  Additionally, it is
-not possible to map the space character to any other glyph; requests
-like @w{@samp{.tr aa x}} undo @w{@samp{.tr aa \&}} instead.
-
-If justification is active, lines are justified in spite of the `empty'
-space character (but there is no minimal distance, i.e.@: the space
-character, between words).
-
-@item
-After an output glyph has been constructed (this happens at the moment
-immediately before the glyph is appended to an output glyph list, either
-by direct output, in a macro, diversion, or string), it is no longer
-affected by @code{tr}.
-
-@item
-Translating character to glyphs where one of them or both are undefined
-is possible also; @code{tr} does not check whether the entities in its
-argument do exist.
-
-@xref{Gtroff Internals}.
-
-@item
-@code{troff} no longer has a hard-coded dependency on @w{Latin-1}; all
-@code{char@var{XXX}} entities have been removed from the font
-description files.  This has a notable consequence that shows up in
-warnings like @code{can't find character with input code @var{XXX}} if
-the @code{tr} request isn't handled properly.
-
-Consider the following translation:
-
-@Example
-.tr ��
-@endExample
-
-@noindent
-This maps input character @code{�} onto glyph @code{�}, which is
-identical to glyph @code{char201}.  But this glyph intentionally doesn't
-exist!  Instead, @code{\[char201]} is treated as an input character
-entity and is by default mapped onto @code{\['E]}, and @code{gtroff}
-doesn't handle translations of translations.
-
-The right way to write the above translation is
-
-@Example
-.tr �\['E]
-@endExample
-
-@noindent
-In other words, the first argument of @code{tr} should be an input
-character or entity, and the second one a glyph entity.
-
-@item
-Without an argument, the @code{tr} request is ignored.
-@end itemize
-@endDefreq
-
-@Defreq {trnt, @Var{a}@Var{b}@Var{c}@Var{d}@dots{}}
-@cindex @code{\!}, and @code{trnt}
-@code{trnt} is the same as the @code{tr} request except that the
-translations do not apply to text that is transparently throughput into
-a diversion with @code{\!}.  @xref{Diversions}, for more information.
-
-For example,
-
-@Example
-.tr ab
-.di x
-\!.tm a
-.di
-.x
-@endExample
-
-@noindent
-prints @samp{b} to the standard error stream; if @code{trnt} is used
-instead of @code{tr} it prints @samp{a}.
-@endDefreq
-
-
-@c =====================================================================
-
-@node Troff and Nroff Mode, Line Layout, Character Translations, gtroff Reference
-@section Troff and Nroff Mode
-@cindex troff mode
-@cindex mode, troff
-@cindex nroff mode
-@cindex mode, nroff
-
-Originally, @code{nroff} and @code{troff} were two separate programs,
-the former for TTY output, the latter for everything else.  With GNU
-@code{troff}, both programs are merged into one executable, sending its
-output to a device driver (@code{grotty} for TTY devices, @code{grops}
-for @sc{PostScript}, etc.)@: which interprets the intermediate output of
-@code{gtroff}.  For @acronym{UNIX} @code{troff} it makes sense to talk
-about @dfn{Nroff mode} and @dfn{Troff mode} since the differences are
-hardcoded.  For GNU @code{troff}, this distinction is not appropriate
-because @code{gtroff} simply takes the information given in the font
-files for a particular device without handling requests specially if a
-TTY output device is used.
-
-Usually, a macro package can be used with all output devices.
-Nevertheless, it is sometimes necessary to make a distinction between
-TTY and non-TTY devices: @code{gtroff} provides two built-in conditions
-@samp{n} and @samp{t} for the @code{if}, @code{ie}, and @code{while}
-requests to decide whether @code{gtroff} shall behave like @code{nroff}
-or like @code{troff}.
-
-@Defreq {troff, }
-@pindex troffrc
-@pindex troffrc-end
-Make the @samp{t} built-in condition true (and the @samp{n} built-in
-condition false) for @code{if}, @code{ie}, and @code{while} conditional
-requests.  This is the default if @code{gtroff} (@emph{not}
-@code{groff}) is started with the @option{-R} switch to avoid loading of
-the start-up files @file{troffrc} and @file{troffrc-end}.  Without
-@option{-R}, @code{gtroff} stays in troff mode if the output device is
-not a TTY (e.g.@: `ps').
-@endDefreq
-
-@Defreq {nroff, }
-@pindex tty.tmac
-Make the @samp{n} built-in condition true (and the @samp{t} built-in
-condition false) for @code{if}, @code{ie}, and @code{while} conditional
-requests.  This is the default if @code{gtroff} uses a TTY output
-device; the code for switching to nroff mode is in the file
-@file{tty.tmac}, which is loaded by the start-up file @code{troffrc}.
-@endDefreq
-
-@xref{Conditionals and Loops}, for more details on built-in conditions.
-
-
-@c =====================================================================
-
-@node Line Layout, Line Control, Troff and Nroff Mode, gtroff Reference
-@section Line Layout
-@cindex line layout
-@cindex layout, line
-
-@cindex dimensions, line
-@cindex line dimensions
-The following drawing shows the dimensions that @code{gtroff} uses for
-placing a line of output onto the page.  They are labeled with the
-request that manipulates each dimension.
-
-@Example
-     -->| in |<--
-        |<-----------ll------------>|
-   +----+----+----------------------+----+
-   |    :    :                      :    |
-   +----+----+----------------------+----+
--->| po |<--
-   |<--------paper width---------------->|
-@endExample
-
-@noindent
-These dimensions are:
-
-@ftable @code
-@item po
-@cindex left margin (@code{po})
-@cindex margin, left (@code{po})
-@cindex page offset (@code{po})
-@cindex offset, page (@code{po})
-@dfn{Page offset} -- this is the leftmost position of text on the final
-output, defining the @dfn{left margin}.
-
-@item in
-@cindex indentation (@code{in})
-@cindex line indentation (@code{in})
-@dfn{Indentation} -- this is the distance from the left margin where
-text is printed.
-
-@item ll
-@cindex line length (@code{ll})
-@cindex length of line (@code{ll})
-@dfn{Line length} -- this is the distance from the left margin to right
-margin.
-@end ftable
-
-A simple demonstration:
-
-@Example
-.ll 3i
-This is text without indentation.
-The line length has been set to 3\~inch.
-.in +.5i
-.ll -.5i
-Now the left and right margins are both increased.
-.in
-.ll
-Calling .in and .ll without parameters restore
-the previous values.
-@endExample
-
-Result:
-
-@Example
-This  is text without indenta-
-tion.   The  line  length  has
-been set to 3 inch.
-     Now   the  left  and
-     right  margins   are
-     both increased.
-Calling  .in  and  .ll without
-parameters restore the  previ-
-ous values.
-@endExample
-
-@DefreqList {po, [@Var{offset}]}
-@DefreqItem {po, @t{+}@Var{offset}}
-@DefreqItem {po, @t{-}@Var{offset}}
-@DefregListEndx {.o}
-@pindex troffrc
-Set horizontal page offset to @var{offset} (or increment or decrement
-the current value by @var{offset}).  Note that this request does not
-cause a break, so changing the page offset in the middle of text being
-filled may not yield the expected result.  The initial value is
-1@dmn{i}.  For TTY output devices, it is set to 0 in the startup file
-@file{troffrc}; the default scaling indicator is @samp{m} (and not
-@samp{v} as incorrectly documented in the original @acronym{UNIX} troff
-manual).
-
-The current page offset can be found in the read-only number register
-@samp{.o}.
-
-If @code{po} is called without an argument, the page offset is reset to
-the previous value before the last call to @code{po}.
-
-@Example
-.po 3i
-\n[.o]
-    @result{} 720
-.po -1i
-\n[.o]
-    @result{} 480
-.po
-\n[.o]
-    @result{} 720
-@endExample
-@endDefreq
-
-@DefreqList {in, [@Var{indent}]}
-@DefreqItem {in, @t{+}@Var{indent}}
-@DefreqItem {in, @t{-}@Var{indent}}
-@DefregListEndx {.i}
-Set indentation to @var{indent} (or increment or decrement the current
-value by @var{indent}).  This request causes a break.  Initially, there
-is no indentation.
-
-If @code{in} is called without an argument, the indentation is reset to
-the previous value before the last call to @code{in}.  The default
-scaling indicator is @samp{m}.
-
-The indentation is associated with the current environment
-(@pxref{Environments}).
-
-If a negative indentation value is specified (which is not allowed),
-@code{gtroff} emits a warning of type @samp{range} and sets the
-indentation to zero.
-
-The effect of @code{in} is delayed until a partially collected line (if
-it exists) is output.  A temporary indentation value is reset to zero
-also.
-
-The current indentation (as set by @code{in}) can be found in the
-read-only number register @samp{.i}.
-@endDefreq
-
-@DefreqList {ti, offset}
-@DefreqItem {ti, @t{+}@Var{offset}}
-@DefreqItem {ti, @t{-}@Var{offset}}
-@DefregListEndx {.in}
-Temporarily indent the next output line by @var{offset}.  If an
-increment or decrement value is specified, adjust the temporary
-indentation relative to the value set by the @code{in} request.
-
-This request causes a break; its value is associated with the current
-environment (@pxref{Environments}).  The default scaling indicator is
-@samp{m}.  A call of @code{ti} without an argument is ignored.
-
-If the total indentation value is negative (which is not allowed),
-@code{gtroff} emits a warning of type @samp{range} and sets the
-temporary indentation to zero.  `Total indentation' is either
-@var{offset} if specified as an absolute value, or the temporary plus
-normal indentation, if @var{offset} is given as a relative value.
-
-The effect of @code{ti} is delayed until a partially collected line (if
-it exists) is output.
-
-The read-only number register @code{.in} is the indentation that applies
-to the current output line.
-
-The difference between @code{.i} and @code{.in} is that the latter takes
-into account whether a partially collected line still uses the old
-indentation value or a temporary indentation value is active.
-@endDefreq
-
-@DefreqList {ll, [@Var{length}]}
-@DefreqItem {ll, @t{+}@Var{length}}
-@DefreqItem {ll, @t{-}@Var{length}}
-@DefregItemx {.l}
-@DefregListEndx {.ll}
-Set the line length to @var{length} (or increment or decrement the
-current value by @var{length}).  Initially, the line length is set to
-6.5@dmn{i}.  The effect of @code{ll} is delayed until a partially
-collected line (if it exists) is output.  The default scaling indicator
-is @samp{m}.
-
-If @code{ll} is called without an argument, the line length is reset to
-the previous value before the last call to @code{ll}.  If a negative
-line length is specified (which is not allowed), @code{gtroff} emits a
-warning of type @samp{range} and sets the line length to zero.
-
-The line length is associated with the current environment
-(@pxref{Environments}).
-
-@cindex line length register (@code{.l})
-The current line length (as set by @code{ll}) can be found in the
-read-only number register @samp{.l}.  The read-only number register
-@code{.ll} is the line length that applies to the current output line.
-
-Similar to @code{.i} and @code{.in}, the difference between @code{.l}
-and @code{.ll} is that the latter takes into account whether a partially
-collected line still uses the old line length value.
-@endDefreq
-
-
-@c =====================================================================
-
-@node Line Control, Page Layout, Line Layout, gtroff Reference
-@section Line Control
-@cindex line control
-@cindex control, line
-
-It is important to understand how @code{gtroff} handles input and output
-lines.
-
-Many escapes use positioning relative to the input line.  For example,
-this
-
-@Example
-This is a \h'|1.2i'test.
-
-This is a
-\h'|1.2i'test.
-@endExample
-
-@noindent
-produces
-
-@Example
-This is a   test.
-
-This is a             test.
-@endExample
-
-The main usage of this feature is to define macros that act exactly at
-the place where called.
-
-@Example
-.\" A simple macro to underline a word
-.de underline
-.  nop \\$1\l'|0\[ul]'
-..
-@endExample
-
-@noindent
-In the above example, @samp{|0} specifies a negative distance from the
-current position (at the end of the just emitted argument @code{\$1})
-back to the beginning of the input line.  Thus, the @samp{\l} escape
-draws a line from right to left.
-
-@cindex input line continuation (@code{\})
-@cindex line, input, continuation (@code{\})
-@cindex continuation, input line (@code{\})
-@cindex output line, continuation (@code{\c})
-@cindex line, output, continuation (@code{\c})
-@cindex continuation, output line (@code{\c})
-@cindex interrupted line
-@cindex line, interrupted
-@code{gtroff} makes a difference between input and output line
-continuation; the latter is also called @dfn{interrupting} a line.
-
-@DefescList {\\@key{RET}, , ,}
-@DefescItemx {\\c, , ,}
-@DefregListEndx {.int}
-Continue a line.  @code{\@key{RET}} (this is a backslash at the end of a
-line immediately followed by a newline) works on the input level,
-suppressing the effects of the following newline in the input.
-
-@Example
-This is a \
-.test
-    @result{} This is a .test
-@endExample
-
-The @samp{|} operator is also affected.
-
-@cindex @code{\R}, after @code{\c}
-@code{\c} works on the output level.  Anything after this escape on the
-same line is ignored except @code{\R}, which works as usual.  Anything
-before @code{\c} on the same line is appended to the current partial
-output line.  The next non-command line after an interrupted line counts
-as a new input line.
-
-The visual results depend on whether no-fill mode is active.
-
-@itemize @bullet
-@item
-@cindex @code{\c}, and no-fill mode
-@cindex no-fill mode, and @code{\c}
-@cindex mode, no-fill, and @code{\c}
-If no-fill mode is active (using the @code{nf} request), the next input
-text line after @code{\c} is handled as a continuation of the same input
-text line.
-
-@Example
-.nf
-This is a \c
-test.
-    @result{} This is a test.
-@endExample
-
-@item
-@cindex @code{\c}, and fill mode
-@cindex fill mode, and @code{\c}
-@cindex mode, fill, and @code{\c}
-If fill mode is active (using the @code{fi} request), a word interrupted
-with @code{\c} is continued with the text on the next input text line,
-without an intervening space.
-
-@Example
-This is a te\c
-st.
-    @result{} This is a test.
-@endExample
-@end itemize
-
-Note that an intervening control line that causes a break is stronger
-than @code{\c}, flushing out the current partial line in the usual way.
-
-@cindex interrupted line register (@code{.int})
-The @code{.int} register contains a positive value if the last output
-line was interrupted with @code{\c}; this is associated with the current
-environment (@pxref{Environments}).
-@endDefesc
-
-
-@c =====================================================================
-
-@node Page Layout, Page Control, Line Control, gtroff Reference
-@section Page Layout
-@cindex page layout
-@cindex layout, page
-
-@code{gtroff} provides some very primitive operations for controlling
-page layout.
-
-@DefreqList {pl, [@Var{length}]}
-@DefreqItem {pl, @t{+}@Var{length}}
-@DefreqItem {pl, @t{-}@Var{length}}
-@DefregListEndx {.p}
-@cindex page length (@code{pl})
-@cindex length of page (@code{pl})
-Set the @dfn{page length} to @var{length} (or increment or decrement the
-current value by @var{length}).  This is the length of the physical
-output page.  The default scaling indicator is @samp{v}.
-
-@cindex page length register (@code{.p})
-The current setting can be found in the read-only number register
-@samp{.p}.
-
-@cindex top margin
-@cindex margin, top
-@cindex bottom margin
-@cindex margin, bottom
-Note that this only specifies the size of the page, not the top and
-bottom margins.  Those are not set by @code{gtroff} directly.
-@xref{Traps}, for further information on how to do this.
-
-Negative @code{pl} values are possible also, but not very useful: No
-trap is sprung, and each line is output on a single page (thus
-suppressing all vertical spacing).
-
-If no argument or an invalid argument is given, @code{pl} sets the page
-length to 11@dmn{i}.
-@endDefreq
-
-@cindex headers
-@cindex footers
-@cindex titles
-@code{gtroff} provides several operations that help in setting up top
-and bottom titles (or headers and footers).
-
-@Defreq {tl, @t{'}@Var{left}@t{'}@Var{center}@t{'}@Var{right}@t{'}}
-@cindex title line (@code{tl})
-@cindex three-part title (@code{tl})
-@cindex page number character (@code{%})
-Print a @dfn{title line}.  It consists of three parts: a left justified
-portion, a centered portion, and a right justified portion.  The
-argument separator @samp{'} can be replaced with any character not
-occurring in the title line.  The @samp{%} character is replaced with
-the current page number.  This character can be changed with the
-@code{pc} request (see below).
-
-Without argument, @code{tl} is ignored.
-
-Some notes:
-
-@itemize @bullet
-@item
-The line length set by the @code{ll} request is not honoured by
-@code{tl}; use the @code{lt} request (described below) instead, to
-control line length for text set by @code{tl}.
-
-@item
-A title line is not restricted to the top or bottom of a page.
-
-@item
-@code{tl} prints the title line immediately, ignoring a partially filled
-line (which stays untouched).
-
-@item
-It is not an error to omit closing delimiters.  For example,
-@w{@samp{.tl /foo}} is equivalent to @w{@samp{.tl /foo///}}: It prints a
-title line with the left justified word @samp{foo}; the centered and
-right justfied parts are empty.
-
-@item
-@code{tl} accepts the same parameter delimiting characters as the
-@code{\A} escape; see @ref{Escapes}.
-@end itemize
-@endDefreq
-
-@DefreqList {lt, [@Var{length}]}
-@DefreqItem {lt, @t{+}@Var{length}}
-@DefreqItem {lt, @t{-}@Var{length}}
-@DefregListEndx {.lt}
-@cindex length of title line (@code{lt})
-@cindex title line, length (@code{lt})
-@cindex title line length register (@code{.lt})
-The title line is printed using its own line length, which is specified
-(or incremented or decremented) with the @code{lt} request.  Initially,
-the title line length is set to 6.5@dmn{i}.  If a negative line length
-is specified (which is not allowed), @code{gtroff} emits a warning of
-type @samp{range} and sets the title line length to zero.  The default
-scaling indicator is @samp{m}.  If @code{lt} is called without an
-argument, the title length is reset to the previous value before the
-last call to @code{lt}.
-
-The current setting of this is available in the @code{.lt} read-only
-number register; it is associated with the current environment
-(@pxref{Environments}).
-@endDefreq
-
-@DefreqList {pn, page}
-@DefreqItem {pn, @t{+}@Var{page}}
-@DefreqItem {pn, @t{-}@Var{page}}
-@DefregListEndx {.pn}
-@cindex page number (@code{pn})
-@cindex number, page (@code{pn})
-Change (increase or decrease) the page number of the @emph{next} page.
-The only argument is the page number; the request is ignored without a
-parameter.
-
-The read-only number register @code{.pn} contains the number of the next
-page: either the value set by a @code{pn} request, or the number of the
-current page plus@tie{}1.
-@endDefreq
-
-@Defreq {pc, [@Var{char}]}
-@cindex changing the page number character (@code{pc})
-@cindex page number character, changing (@code{pc})
-@vindex %
-Change the page number character (used by the @code{tl} request) to a
-different character.  With no argument, this mechanism is disabled.
-Note that this doesn't affect the number register@tie{}@code{%}.
-@endDefreq
-
-@xref{Traps}.
-
-
-@c =====================================================================
-
-@node Page Control, Fonts and Symbols, Page Layout, gtroff Reference
-@section Page Control
-@cindex page control
-@cindex control, page
-
-@DefreqList {bp, [@Var{page}]}
-@DefreqItem {bp, @t{+}@Var{page}}
-@DefreqItem {bp, @t{-}@Var{page}}
-@DefregListEndx {%}
-@cindex new page (@code{bp})
-@cindex page, new (@code{bp})
-Stop processing the current page and move to the next page.  This
-request causes a break.  It can also take an argument to set (increase,
-decrease) the page number of the next page (which actually becomes the
-current page after @code{bp} has finished).  The difference between
-@code{bp} and @code{pn} is that @code{pn} does not cause a break or
-actually eject a page.  @xref{Page Layout}.
-
-@Example
-.de newpage                         \" define macro
-'bp                                 \" begin page
-'sp .5i                             \" vertical space
-.tl 'left top'center top'right top' \" title
-'sp .3i                             \" vertical space
-..                                  \" end macro
-@endExample
-
-@cindex @code{bp} request, and top-level diversion
-@cindex top-level diversion, and @code{bp}
-@cindex diversion, top-level, and @code{bp}
-@code{bp} has no effect if not called within the top-level diversion
-(@pxref{Diversions}).
-
-@cindex page number register (@code{%})
-@cindex current page number (@code{%})
-The read-write register@tie{}@code{%} holds the current page number.
-
-The number register @code{.pe} is set to@tie{}1 while @code{bp} is
-active.  @xref{Page Location Traps}.
-@endDefreq
-
-@Defreq {ne, [@Var{space}]}
-@cindex orphan lines, preventing with @code{ne}
-@cindex conditional page break (@code{ne})
-@cindex page break, conditional (@code{ne})
-It is often necessary to force a certain amount of space before a new
-page occurs.  This is most useful to make sure that there is not a
-single @dfn{orphan} line left at the bottom of a page.  The @code{ne}
-request ensures that there is a certain distance, specified by the first
-argument, before the next page is triggered (see @ref{Traps}, for
-further information).  The default scaling indicator for @code{ne} is
-@samp{v}; the default value of @var{space} is@tie{}1@dmn{v} if no
-argument is given.
-
-For example, to make sure that no fewer than 2@tie{}lines get orphaned,
-do the following before each paragraph:
-
-@Example
-.ne 2
-text text text
-@endExample
-
-@code{ne} then automatically causes a page break if there is space for
-one line only.
-@endDefreq
-
-@DefreqList {sv, [@Var{space}]}
-@DefreqListEndx {os, }
-@cindex @code{ne} request, comparison with @code{sv}
-@code{sv} is similar to the @code{ne} request; it reserves the specified
-amount of vertical space.  If the desired amount of space exists before
-the next trap (or the bottom page boundary if no trap is set), the space
-is output immediately (ignoring a partially filled line, which stays
-untouched).  If there is not enough space, it is stored for later output
-via the @code{os} request.  The default value is@tie{}1@dmn{v} if no
-argument is given; the default scaling indicator is @samp{v}.
-
-@cindex @code{sv} request, and no-space mode
-@cindex @code{os} request, and no-space mode
-Both @code{sv} and @code{os} ignore no-space mode.  While the @code{sv}
-request allows negative values for @var{space}, @code{os} ignores them.
-@endDefreq
-
-@Defreg {nl}
-@cindex current vertical position (@code{nl})
-@cindex vertical position, current (@code{nl})
-@cindex position, vertical, current (@code{nl})
-This register contains the current vertical position.  If the vertical
-position is zero and the top of page transition hasn't happened yet,
-@code{nl} is set to negative value.  @code{gtroff} itself does this at
-the very beginning of a document before anything has been printed, but
-the main usage is to plant a header trap on a page if this page has
-already started.
-
-Consider the following:
-
-@Example
-.de xxx
-.  sp
-.  tl ''Header''
-.  sp
-..
-.
-First page.
-.bp
-.wh 0 xxx
-.nr nl (-1)
-Second page.
-@endExample
-
-@noindent
-Result:
-
-@Example
-First page.
-
-...
-
-                             Header
-
-Second page.
-
-...
-@endExample
-
-@noindent
-Without resetting @code{nl} to a negative value, the just planted trap
-would be active beginning with the @emph{next} page, not the current
-one.
-
-@xref{Diversions}, for a comparison with the @code{.h} and @code{.d}
-registers.
-@endDefreg
-
-
-@c =====================================================================
-
-@node Fonts and Symbols, Sizes, Page Control, gtroff Reference
-@section Fonts and Symbols
-@cindex fonts
-
-@code{gtroff} can switch fonts at any point in the text.
-
-The basic set of fonts is @samp{R}, @samp{I}, @samp{B}, and @samp{BI}.
-These are Times Roman, Italic, Bold, and Bold Italic.  For non-TTY
-devices, there is also at least one symbol font that contains various
-special symbols (Greek, mathematics).
-
-@menu
-* Changing Fonts::
-* Font Families::
-* Font Positions::
-* Using Symbols::
-* Character Classes::
-* Special Fonts::
-* Artificial Fonts::
-* Ligatures and Kerning::
-@end menu
-
-@c ---------------------------------------------------------------------
-
-@node Changing Fonts, Font Families, Fonts and Symbols, Fonts and Symbols
-@subsection Changing Fonts
-@cindex fonts
-
-@DefreqList {ft, [@Var{font}]}
-@DefescItemx {\\f, , f, }
-@DefescItem {\\f, @Lparen{}, fn, }
-@DefescItem {\\f, @Lbrack{}, font, @Rbrack{}}
-@DefregListEndx {.sty}
-@cindex changing fonts (@code{ft}, @code{\f})
-@cindex fonts, changing (@code{ft}, @code{\f})
-@cindex @code{sty} request, and changing fonts
-@cindex @code{fam} request, and changing fonts
-@cindex @code{\F}, and changing fonts
-@kindex styles
-@kindex family
-@pindex DESC
-The @code{ft} request and the @code{\f} escape change the current font
-to @var{font} (one-character name@tie{}@var{f}, two-character name
-@var{fn}).
-
-If @var{font} is a style name (as set with the @code{sty} request or
-with the @code{styles} command in the @file{DESC} file), use it within
-the current font family (as set with the @code{fam} request, @code{\F}
-escape, or with the @code{family} command in the @file{DESC} file).
-
-It is not possible to switch to a font with the name @samp{DESC}
-(whereas this name could be used as a style name; however, this is not
-recommended).
-
-@cindex previous font (@code{ft}, @code{\f[]}, @code{\fP})
-@cindex font, previous (@code{ft}, @code{\f[]}, @code{\fP})
-With no argument or using @samp{P} as an argument, @code{.ft} switches
-to the previous font.  Use @code{\f[]} to do this with the escape.  The
-old syntax forms @code{\fP} or @code{\f[P]} are also supported.
-
-Fonts are generally specified as upper-case strings, which are usually
-1@tie{}to 4 characters representing an abbreviation or acronym of the
-font name.  This is no limitation, just a convention.
-
-The example below produces two identical lines.
-
-@Example
-eggs, bacon,
-.ft B
-spam
-.ft
-and sausage.
-
-eggs, bacon, \fBspam\fP and sausage.
-@endExample
-
-Note that @code{\f} doesn't produce an input token in @code{gtroff}.  As
-a consequence, it can be used in requests like @code{mc} (which expects
-a single character as an argument) to change the font on the fly:
-
-@Example
-.mc \f[I]x\f[]
-@endExample
-
-The current style name is available in the read-only number register
-@samp{.sty} (this is a string-valued register); if the current font
-isn't a style, the empty string is returned.  It is associated with the
-current environment.
-
-@xref{Font Positions}, for an alternative syntax.
-@endDefreq
-
-@Defreq {ftr, f [@Var{g}]}
-@cindex font translation (@code{ftr})
-@cindex @code{ft} request, and font translations
-@cindex @code{ul} request, and font translations
-@cindex @code{bd} request, and font translations
-@cindex @code{\f}, and font translations
-@cindex @code{cs} request, and font translations
-@cindex @code{tkf} request, and font translations
-@cindex @code{special} request, and font translations
-@cindex @code{fspecial} request, and font translations
-@cindex @code{fp} request, and font translations
-@cindex @code{sty} request, and font translations
-@cindex @code{if} request, and font translations
-@cindex @code{ie} request, and font translations
-@cindex @code{while} request, and font translations
-Translate font@tie{}@var{f} to font@tie{}@var{g}.  Whenever a font
-named@tie{}@var{f} is referred to in a @code{\f} escape sequence, in the
-@code{F} and @code{S} conditional operators, or in the @code{ft},
-@code{ul}, @code{bd}, @code{cs}, @code{tkf}, @code{special},
-@code{fspecial}, @code{fp}, or @code{sty} requests, font@tie{}@var{g} is
-used.  If @var{g} is missing or equal to@tie{}@var{f} the translation is
-undone.
-
-Note that it is not possible to chain font translations.  Example:
-
-@Example
-.ftr XXX TR
-.ftr XXX YYY
-.ft XXX
-    @result{} warning: can't find font `XXX'
-@endExample
-@endDefreq
-
-@DefreqList {fzoom, f [@Var{zoom}]}
-@DefregListEndx {.zoom}
-@cindex magnification of a font (@code{fzoom})
-@cindex font, magnification (@code{fzoom})
-@cindex zoom factor of a font (@code{fzoom})
-@cindex factor, zoom, of a font (@code{fzoom})
-@cindex font, zoom factor (@code{fzoom})
-@cindex optical size of a font
-@cindex font, optical size
-@cindex size, optical, of a font
-Set magnification of font@tie{}@var{f} to factor @var{zoom}, which must
-be a non-negative integer multiple of 1/1000th.  This request is useful
-to adjust the optical size of a font in relation to the others.  In the
-example below, font @code{CR} is magnified by 10% (the zoom factor is
-thus 1.1).
-
-@Example
-.fam P
-.fzoom CR 1100
-.ps 12
-Palatino and \f[CR]Courier\f[]
-@endExample
-
-A missing or zero value of @var{zoom} is the same as a value of 1000,
-which means no magnification.  @var{f}@tie{}must be a real font name,
-not a style.
-
-Note that the magnification of a font is completely transparent to
-troff; a change of the zoom factor doesn't cause any effect except that
-the dimensions of glyphs, (word) spaces, kerns, etc., of the affected
-font are adjusted accordingly.
-
-The zoom factor of the current font is available in the read-only number
-register @samp{.zoom}, in multiples of 1/1000th.  It returns zero if
-there is no magnification.
-@endDefreq
-
-@c ---------------------------------------------------------------------
-
-@node Font Families, Font Positions, Changing Fonts, Fonts and Symbols
-@subsection Font Families
-@cindex font families
-@cindex families, font
-@cindex font styles
-@cindex styles, font
-
-Due to the variety of fonts available, @code{gtroff} has added the
-concept of @dfn{font families} and @dfn{font styles}.  The fonts are
-specified as the concatenation of the font family and style.  Specifying
-a font without the family part causes @code{gtroff} to use that style of
-the current family.
-
-@cindex PostScript fonts
-@cindex fonts, PostScript
-Currently, fonts for the devices @option{-Tps}, @option{-Tpdf},
-@option{-Tdvi}, @option{-Tlj4}, @option{-Tlbp}, and the X11 fonts are
-set up to this mechanism.  By default, @code{gtroff} uses the Times
-family with the four styles @samp{R}, @samp{I}, @samp{B}, and @samp{BI}.
-
-This way, it is possible to use the basic four fonts and to select a
-different font family on the command line (@pxref{Groff Options}).
-
-@DefreqList {fam, [@Var{family}]}
-@DefregItemx {.fam}
-@DefescItemx {\\F, , f, }
-@DefescItem {\\F, @Lparen{}, fm, }
-@DefescItem {\\F, @Lbrack{}, family, @Rbrack{}}
-@DefregListEndx {.fn}
-@cindex changing font family (@code{fam}, @code{\F})
-@cindex font family, changing (@code{fam}, @code{\F})
-Switch font family to @var{family} (one-character name@tie{}@var{f},
-two-character name @var{fm}).  If no argument is given, switch back to
-the previous font family.  Use @code{\F[]} to do this with the escape.
-Note that @code{\FP} doesn't work; it selects font family @samp{P}
-instead.
-
-The value at start-up is @samp{T}.  The current font family is available
-in the read-only number register @samp{.fam} (this is a string-valued
-register); it is associated with the current environment.
-
-@Example
-spam,
-.fam H    \" helvetica family
-spam,     \" used font is family H + style R = HR
-.ft B     \" family H + style B = font HB
-spam,
-.fam T    \" times family
-spam,     \" used font is family T + style B = TB
-.ft AR    \" font AR (not a style)
-baked beans,
-.ft R     \" family T + style R = font TR
-and spam.
-@endExample
-
-Note that @code{\F} doesn't produce an input token in @code{gtroff}.  As
-a consequence, it can be used in requests like @code{mc} (which expects
-a single character as an argument) to change the font family on the fly:
-
-@Example
-.mc \F[P]x\F[]
-@endExample
-
-The @samp{.fn} register contains the current @dfn{real font name} of the
-current font.  This is a string-valued register.  If the current font is
-a style, the value of @code{\n[.fn]} is the proper concatenation of
-family and style name.
-@endDefreq
-
-@Defreq {sty, n style}
-@cindex changing font style (@code{sty})
-@cindex font style, changing (@code{sty})
-@cindex @code{cs} request, and font styles
-@cindex @code{bd} request, and font styles
-@cindex @code{tkf} request, and font styles
-@cindex @code{uf} request, and font styles
-@cindex @code{fspecial} request, and font styles
-Associate @var{style} with font position@tie{}@var{n}.  A font position
-can be associated either with a font or with a style.  The current font
-is the index of a font position and so is also either a font or a style.
-If it is a style, the font that is actually used is the font which name
-is the concatenation of the name of the current family and the name of
-the current style.  For example, if the current font is@tie{}1 and font
-position@tie{}1 is associated with style @samp{R} and the current font
-family is @samp{T}, then font @samp{TR} is used.  If the current font is
-not a style, then the current family is ignored.  If the requests
-@code{cs}, @code{bd}, @code{tkf}, @code{uf}, or @code{fspecial} are
-applied to a style, they are instead applied to the member of the
-current family corresponding to that style.
-
-@var{n}@tie{}must be a non-negative integer value.
-
-@pindex DESC
-@kindex styles
-The default family can be set with the @option{-f} option (@pxref{Groff
-Options}).  The @code{styles} command in the @file{DESC} file controls
-which font positions (if any) are initially associated with styles
-rather than fonts.  For example, the default setting for @sc{PostScript}
-fonts
-
-@Example
-styles R I B BI
-@endExample
-
-@noindent
-is equivalent to
-
-@Example
-.sty 1 R
-.sty 2 I
-.sty 3 B
-.sty 4 BI
-@endExample
-
-@code{fam} and @code{\F} always check whether the current font position
-is valid; this can give surprising results if the current font position
-is associated with a style.
-
-In the following example, we want to access the @sc{PostScript} font
-@code{FooBar} from the font family @code{Foo}:
-
-@Example
-.sty \n[.fp] Bar
-.fam Foo
-    @result{} warning: can't find font `FooR'
-@endExample
-
-@noindent
-The default font position at start-up is@tie{}1; for the @sc{PostScript}
-device, this is associated with style @samp{R}, so @code{gtroff} tries
-to open @code{FooR}.
-
-A solution to this problem is to use a dummy font like the following:
-
-@Example
-.fp 0 dummy TR    \" set up dummy font at position 0
-.sty \n[.fp] Bar  \" register style `Bar'
-.ft 0             \" switch to font at position 0
-.fam Foo          \" activate family `Foo'
-.ft Bar           \" switch to font `FooBar'
-@endExample
-
-@xref{Font Positions}.
-@endDefreq
-
-@c ---------------------------------------------------------------------
-
-@node Font Positions, Using Symbols, Font Families, Fonts and Symbols
-@subsection Font Positions
-@cindex font positions
-@cindex positions, font
-
-For the sake of old phototypesetters and compatibility with old versions
-of @code{troff}, @code{gtroff} has the concept of font @dfn{positions},
-on which various fonts are mounted.
-
-@DefreqList {fp, pos font [@Var{external-name}]}
-@DefregItemx {.f}
-@DefregListEndx {.fp}
-@cindex mounting font (@code{fp})
-@cindex font, mounting (@code{fp})
-Mount font @var{font} at position @var{pos} (which must be a
-non-negative integer).  This numeric position can then be referred to
-with font changing commands.  When @code{gtroff} starts it is using font
-position@tie{}1 (which must exist; position@tie{}0 is unused usually at
-start-up).
-
-@cindex font position register (@code{.f})
-The current font in use, as a font position, is available in the
-read-only number register @samp{.f}.  This can be useful to remember the
-current font for later recall.  It is associated with the current
-environment (@pxref{Environments}).
-
-@Example
-.nr save-font \n[.f]
-.ft B
-... text text text ...
-.ft \n[save-font]
-@endExample
-
-@cindex next free font position register (@code{.fp})
-The number of the next free font position is available in the read-only
-number register @samp{.fp}.  This is useful when mounting a new font,
-like so:
-
-@Example
-.fp \n[.fp] NEATOFONT
-@endExample
-
-@pindex DESC@r{, and font mounting}
-Fonts not listed in the @file{DESC} file are automatically mounted on
-the next available font position when they are referenced.  If a font is
-to be mounted explicitly with the @code{fp} request on an unused font
-position, it should be mounted on the first unused font position, which
-can be found in the @code{.fp} register.  Although @code{gtroff} does
-not enforce this strictly, it is not allowed to mount a font at a
-position whose number is much greater (approx.@: 1000 positions) than
-that of any currently used position.
-
-The @code{fp} request has an optional third argument.  This argument
-gives the external name of the font, which is used for finding the font
-description file.  The second argument gives the internal name of the
-font, which is used to refer to the font in @code{gtroff} after it has
-been mounted.  If there is no third argument then the internal name is
-used as the external name.  This feature makes it possible to use fonts
-with long names in compatibility mode.
-@endDefreq
-
-Both the @code{ft} request and the @code{\f} escape have alternative
-syntax forms to access font positions.
-
-@DefreqList {ft, nnn}
-@DefescItemx {\\f, , n, }
-@DefescItem {\\f, @Lparen{}, nn, }
-@DefescListEnd {\\f, @Lbrack{}, nnn, @Rbrack{}}
-@cindex changing font position (@code{\f})
-@cindex font position, changing (@code{\f})
-@cindex @code{sty} request, and font positions
-@cindex @code{fam} request, and font positions
-@cindex @code{\F}, and font positions
-@kindex styles
-@kindex family
-@pindex DESC
-Change the current font position to @var{nnn} (one-digit
-position@tie{}@var{n}, two-digit position @var{nn}), which must be a
-non-negative integer.
-
-If @var{nnn} is associated with a style (as set with the @code{sty}
-request or with the @code{styles} command in the @file{DESC} file), use
-it within the current font family (as set with the @code{fam} request,
-the @code{\F} escape, or with the @code{family} command in the
-@file{DESC} file).
-
-@Example
-this is font 1
-.ft 2
-this is font 2
-.ft                   \" switch back to font 1
-.ft 3
-this is font 3
-.ft
-this is font 1 again
-@endExample
-
-@xref{Changing Fonts}, for the standard syntax form.
-@endDefreq
-
-@c ---------------------------------------------------------------------
-
-@node Using Symbols, Character Classes, Font Positions, Fonts and Symbols
-@subsection Using Symbols
-@cindex using symbols
-@cindex symbols, using
-
-@cindex glyph
-@cindex character
-@cindex ligature
-A @dfn{glyph} is a graphical representation of a @dfn{character}.  While
-a character is an abstract entity containing semantic information, a
-glyph is something that can be actually seen on screen or paper.  It is
-possible that a character has multiple glyph representation forms (for
-example, the character `A' can be either written in a roman or an italic
-font, yielding two different glyphs); sometimes more than one character
-maps to a single glyph (this is a @dfn{ligature} -- the most common is
-`fi').
-
-@cindex symbol
-@cindex special fonts
-@kindex fonts
-@pindex DESC
-@cindex @code{special} request, and glyph search order
-@cindex @code{fspecial} request, and glyph search order
-A @dfn{symbol} is simply a named glyph.  Within @code{gtroff}, all glyph
-names of a particular font are defined in its font file.  If the user
-requests a glyph not available in this font, @code{gtroff} looks up an
-ordered list of @dfn{special fonts}.  By default, the @sc{PostScript}
-output device supports the two special fonts @samp{SS} (slanted symbols)
-and @samp{S} (symbols) (the former is looked up before the latter).
-Other output devices use different names for special fonts.  Fonts
-mounted with the @code{fonts} keyword in the @file{DESC} file are
-globally available.  To install additional special fonts locally (i.e.@:
-for a particular font), use the @code{fspecial} request.
-
-Here the exact rules how @code{gtroff} searches a given symbol:
-
-@itemize @bullet
-@item
-If the symbol has been defined with the @code{char} request, use it.
-This hides a symbol with the same name in the current font.
-
-@item
-Check the current font.
-
-@item
-If the symbol has been defined with the @code{fchar} request, use it.
-
-@item
-Check whether the current font has a font-specific list of special
-fonts; test all fonts in the order of appearance in the last
-@code{fspecial} call if appropriate.
-
-@item
-If the symbol has been defined with the @code{fschar} request for the
-current font, use it.
-
-@item
-Check all fonts in the order of appearance in the last @code{special}
-call.
-
-@item
-If the symbol has been defined with the @code{schar} request, use it.
-
-@item
-As a last resort, consult all fonts loaded up to now for special fonts
-and check them, starting with the lowest font number.  Note that this
-can sometimes lead to surprising results since the @code{fonts} line in
-the @file{DESC} file often contains empty positions, which are filled
-later on.  For example, consider the following:
-
-@Example
-fonts 3 0 0 FOO
-@endExample
-
-@noindent
-This mounts font @code{foo} at font position@tie{}3.  We assume that
-@code{FOO} is a special font, containing glyph @code{foo}, and that no
-font has been loaded yet.  The line
-
-@Example
-.fspecial BAR BAZ
-@endExample
-
-@noindent
-makes font @code{BAZ} special only if font @code{BAR} is active.  We
-further assume that @code{BAZ} is really a special font, i.e., the font
-description file contains the @code{special} keyword, and that it also
-contains glyph @code{foo} with a special shape fitting to font
-@code{BAR}.  After executing @code{fspecial}, font @code{BAR} is loaded
-at font position@tie{}1, and @code{BAZ} at position@tie{}2.
-
-We now switch to a new font @code{XXX}, trying to access glyph
-@code{foo} that is assumed to be missing.  There are neither
-font-specific special fonts for @code{XXX} nor any other fonts made
-special with the @code{special} request, so @code{gtroff} starts the
-search for special fonts in the list of already mounted fonts, with
-increasing font positions.  Consequently, it finds @code{BAZ} before
-@code{FOO} even for @code{XXX}, which is not the intended behaviour.
-@end itemize
-
-@xref{Font Files}, and @ref{Special Fonts}, for more details.
-
-@cindex list of available glyphs (@cite{groff_char(7)} man page)
-@cindex available glyphs, list (@cite{groff_char(7)} man page)
-@cindex glyphs, available, list (@cite{groff_char(7)} man page)
-The list of available symbols is device dependent; see the
-@cite{groff_char(7)} man page for a complete list of all glyphs.  For
-example, say
-
-@Example
-man -Tdvi groff_char > groff_char.dvi
-@endExample
-
-@noindent
-for a list using the default DVI fonts (not all versions of the
-@code{man} program support the @option{-T} option).  If you want to use
-an additional macro package to change the used fonts, @code{groff} must
-be called directly:
-
-@Example
-groff -Tdvi -mec -man groff_char.7 > groff_char.dvi
-@endExample
-
-@cindex composite glyph names
-@cindex glyph names, composite
-@cindex groff glyph list (GGL)
-@cindex GGL (groff glyph list)
-@cindex adobe glyph list (AGL)
-@cindex AGL (adobe glyph list)
-Glyph names not listed in groff_char(7) are derived algorithmically,
-using a simplified version of the Adobe Glyph List (AGL) algorithm, which
-is described in
-@uref{http://partners.adobe.com@//public@//developer@//opentype@//index_glyph.html}.
-The (frozen) set of glyph names that can't be derived algorithmically
-is called @dfn{groff glyph list (GGL)}.
-
-@itemize @bullet
-@item
-A glyph for Unicode character U+@var{XXXX}[@var{X}[@var{X}]], which is
-not a composite character is named
-@code{u@var{XXXX}@r{[}@var{X}@r{[}@var{X}@r{]]}}.  @var{X} must be an
-uppercase hexadecimal digit.  Examples: @code{u1234}, @code{u008E},
-@code{u12DB8}.  The largest Unicode value is 0x10FFFF.  There must be at
-least four @code{X} digits; if necessary, add leading zeroes (after the
-@samp{u}).  No zero padding is allowed for character codes greater than
-0xFFFF.  Surrogates (i.e., Unicode values greater than 0xFFFF
-represented with character codes from the surrogate area U+D800-U+DFFF)
-are not allowed too.
-
-@item
-A glyph representing more than a single input character is named
-
-@display
-@samp{u} @var{component1} @samp{_} @var{component2} @samp{_} @var{component3} @dots{}
-@end display
-
-@noindent
-Example: @code{u0045_0302_0301}.
-
-For simplicity, all Unicode characters that are composites must be
-decomposed maximally (this is normalization form@tie{}D in the Unicode
-standard); for example, @code{u00CA_0301} is not a valid glyph name
-since U+00CA (@sc{latin capital letter e with circumflex}) can be
-further decomposed into U+0045 (@sc{latin capital letter e}) and U+0302
-(@sc{combining circumflex accent}).  @code{u0045_0302_0301} is thus the
-glyph name for U+1EBE, @sc{latin capital letter e with circumflex and
-acute}.
-
-@item
-groff maintains a table to decompose all algorithmically derived glyph
-names that are composites itself.  For example, @code{u0100} (@sc{latin
-letter a with macron}) is automatically decomposed into
-@code{u0041_0304}.  Additionally, a glyph name of the GGL is preferred
-to an algorithmically derived glyph name; groff also automatically does
-the mapping.  Example: The glyph @code{u0045_0302} is mapped to
-@code{^E}.
-
-@item
-glyph names of the GGL can't be used in composite glyph names; for
-example, @code{^E_u0301} is invalid.
-@end itemize
-
-@DefescList {\\, @Lparen{}, nm, }
-@DefescItem {\\, @Lbrack{}, name, @Rbrack{}}
-@DefescListEnd {\\, @Lbrack{}, component1 component2 @dots{}, @Rbrack{}}
-Insert a symbol @var{name} (two-character name @var{nm}) or a composite
-glyph with component glyphs @var{component1}, @var{component2},
-@enddots{} There is no special syntax for one-character names -- the
-natural form @samp{\@var{n}} would collide with escapes.@footnote{Note
-that a one-character symbol is not the same as an input character, i.e.,
-the character @code{a} is not the same as @code{\[a]}.  By default,
-@code{groff} defines only a single one-character symbol, @code{\[-]}; it
-is usually accessed as @code{\-}.  On the other hand, @code{gtroff} has
-the special feature that @code{\[char@var{XXX}]} is the same as the
-input character with character code @var{XXX}.  For example,
-@code{\[char97]} is identical to the letter @code{a} if @acronym{ASCII}
-encoding is active.}
-
-If @var{name} is undefined, a warning of type @samp{char} is generated,
-and the escape is ignored.  @xref{Debugging}, for information about
-warnings.
-
-groff resolves @code{\[...]} with more than a single component as
-follows:
-
-@itemize @bullet
-@item
-Any component that is found in the GGL is converted to the
-@code{u@var{XXXX}} form.
-
-@item
-Any component @code{u@var{XXXX}} that is found in the list of
-decomposable glyphs is decomposed.
-
-@item
-The resulting elements are then concatenated with @samp{_} in between,
-dropping the leading @samp{u} in all elements but the first.
-@end itemize
-
-No check for the existence of any component (similar to @code{tr}
-request) is done.
-
-Examples:
-
-@table @code
-@item \[A ho]
-@samp{A} maps to @code{u0041}, @samp{ho} maps to @code{u02DB}, thus the
-final glyph name would be @code{u0041_02DB}.  Note this is not the
-expected result: The ogonek glyph @samp{ho} is a spacing ogonek, but for
-a proper composite a non-spacing ogonek (U+0328) is necessary.  Looking
-into the file @file{composite.tmac} one can find @w{@samp{.composite ho
-u0328}}, which changes the mapping of @samp{ho} while a composite glyph
-name is constructed, causing the final glyph name to be
-@code{u0041_0328}.
-
-@item \[^E u0301]
-@itemx \[^E aa]
-@itemx \[E a^ aa]
-@itemx \[E ^ ']
-@samp{^E} maps to @code{u0045_0302}, thus the final glyph name is
-@code{u0045_0302_0301} in all forms (assuming proper calls of the
-@code{composite} request).
-@end table
-
-It is not possible to define glyphs with names like @w{@samp{A ho}}
-within a groff font file.  This is not really a limitation; instead, you
-have to define @code{u0041_0328}.
-@endDefesc
-
-@Defesc {\\C, ', xxx, '}
-@cindex named character (@code{\C})
-@cindex character, named (@code{\C})
-Typeset the glyph named @var{xxx}.@footnote{@code{\C} is actually a
-misnomer since it accesses an output glyph.}  Normally it is more
-convenient to use @code{\[@var{xxx}]}, but @code{\C} has the advantage
-that it is compatible with newer versions of @acronym{AT&T} @code{troff}
-and is available in compatibility mode.
-@endDefesc
-
-@Defreq {composite, from to}
-@pindex composite.tmac
-Map glyph name @var{from} to glyph name @var{to} if it is used in
-@code{\[...]} with more than one component.  See above for examples.
-
-This mapping is based on glyph names only; no check for the existence of
-either glyph is done.
-
-A set of default mappings for many accents can be found in the file
-@file{composite.tmac}, which is loaded at start-up.
-@endDefreq
-
-@Defesc {\\N, ', n, '}
-@cindex numbered glyph (@code{\N})
-@cindex glyph, numbered (@code{\N})
-@cindex @code{char} request, used with @code{\N}
-@cindex Unicode
-Typeset the glyph with code@tie{}@var{n} in the current font
-(@code{n}@tie{}is @strong{not} the input character code).  The number
-@var{n}@tie{}can be any non-negative decimal integer.  Most devices only
-have glyphs with codes between 0 and@tie{}255; the Unicode output device
-uses codes in the range 0--65535.  If the current font does not contain
-a glyph with that code, special fonts are @emph{not} searched.  The
-@code{\N} escape sequence can be conveniently used in conjunction with
-the @code{char} request:
-
-@Example
-.char \[phone] \f[ZD]\N'37'
-@endExample
-
-@noindent
-@pindex DESC
-@cindex unnamed glyphs
-@cindex glyphs, unnamed
-The code of each glyph is given in the fourth column in the font
-description file after the @code{charset} command.  It is possible to
-include unnamed glyphs in the font description file by using a name of
-@samp{---}; the @code{\N} escape sequence is the only way to use these.
-
-No kerning is applied to glyphs accessed with @code{\N}.
-@endDefesc
-
-Some escape sequences directly map onto special glyphs.
-
-@Defesc {\\', , , }
-This is a backslash followed by the apostrophe character,
-@acronym{ASCII} character @code{0x27} (@acronym{EBCDIC} character
-@code{0x7D}).  The same as @code{\[aa]}, the acute accent.
-@endDefesc
-
-@Defesc {\\`, , , }
-This is a backslash followed by @acronym{ASCII} character @code{0x60}
-(@acronym{EBCDIC} character @code{0x79} usually).  The same as
-@code{\[ga]}, the grave accent.
-@endDefesc
-
-@Defesc {\\-, , , }
-This is the same as @code{\[-]}, the minus sign in the current font.
-@endDefesc
-
-@Defesc {\\_, , , }
-This is the same as @code{\[ul]}, the underline character.
-@endDefesc
-
-@Defreq {cflags, n c1 c2 @dots{}}
-@cindex glyph properties (@code{cflags})
-@cindex character properties (@code{cflags})
-@cindex properties of glyphs (@code{cflags})
-@cindex properties of characters (@code{cflags})
-Input characters and symbols have certain properties associated with
-it.@footnote{Note that the output glyphs themselves don't have such
-properties.  For @code{gtroff}, a glyph is a numbered box with a given
-width, depth, and height, nothing else.  All manipulations with the
-@code{cflags} request work on the input level.}  These properties can be
-modified with the @code{cflags} request.  The first argument is the sum
-of the desired flags and the remaining arguments are the characters or
-symbols to have those properties.  It is possible to omit the spaces
-between the characters or symbols.  Instead of single characters or
-symbols you can also use character classes (see @ref{Character Classes}
-for more details).
-
-@table @code
-@item 1
-@cindex end-of-sentence characters
-@cindex characters, end-of-sentence
-The character ends sentences (initially characters @samp{.?!} have this
-property).
-
-@item 2
-@cindex hyphenating characters
-@cindex characters, hyphenation
-Lines can be broken before the character (initially no characters have
-this property).  This only works if both the characters before and after
-have non-zero hyphenation codes (as set with the @code{hcode} request).
-Use value@tie{}64 to override this behaviour.
-
-@item 4
-@cindex @code{hy} glyph, and @code{cflags}
-@cindex @code{em} glyph, and @code{cflags}
-Lines can be broken after the character (initially the character
-@samp{-} and the symbols @samp{\[hy]} and @samp{\[em]} have this
-property).  This only works if both the characters before and after have
-non-zero hyphenation codes (as set with the @code{hcode} request).  Use
-value@tie{}64 to override this behaviour.
-
-@item 8
-@cindex overlapping characters
-@cindex characters, overlapping
-@cindex @code{ul} glyph, and @code{cflags}
-@cindex @code{rn} glyph, and @code{cflags}
-@cindex @code{ru} glyph, and @code{cflags}
-@cindex @code{radicalex} glyph, and @code{cflags}
-@cindex @code{sqrtex} glyph, and @code{cflags}
-The character overlaps horizontally if used as a horizontal line
-building element.  Initially the symbols @samp{\[ul]}, @samp{\[rn]},
-@samp{\[ru]}, @samp{\[radicalex]}, and @samp{\[sqrtex]} have this
-property.
-
-@item 16
-@cindex @code{br} glyph, and @code{cflags}
-The character overlaps vertically if used as vertical line building
-element.  Initially symbol @samp{\[br]} has this property.
-
-@item 32
-@cindex transparent characters
-@cindex character, transparent
-@cindex @code{"}, at end of sentence
-@cindex @code{'}, at end of sentence
-@cindex @code{)}, at end of sentence
-@cindex @code{]}, at end of sentence
-@cindex @code{*}, at end of sentence
-@cindex @code{dg} glyph, at end of sentence
-@cindex @code{rq} glyph, at end of sentence
-@cindex @code{cq} glyph, at end of sentence
-An end-of-sentence character followed by any number of characters with
-this property is treated as the end of a sentence if followed by a
-newline or two spaces; in other words the character is @dfn{transparent}
-for the purposes of end-of-sentence recognition -- this is the same as
-having a zero space factor in @TeX{} (initially characters @samp{"')]*}
-and the symbols @samp{\[dg]}, @samp{\[rq]}, and @samp{\[cq]} have this
-property).
-
-@item 64
-Ignore hyphenation code values of the surrounding characters.  Use this
-in combination with values 2 and@tie{}4 (initially no characters have
-this property).  For example, if you need an automatic break point after
-the hyphen in number ranges like `3000-5000', insert
-
-@Example
-.cflags 68 -
-@endExample
-
-@noindent
-into your document.  Note, however, that this can lead to bad layout if
-done without thinking; in most situations, a better solution instead of
-changing the @code{cflags} value is to insert @code{\:} right after the
-hyphen at the places that really need a break point.
-
-@item 128
-Prohibit a line break before the character, but allow a line break after
-the character.  This works only in combination with flags 256 and 512
-(see below) and has no effect otherwise.
-
-@item 256
-Prohibit a line break after the character, but allow a line break before
-the character.  This works only in combination with flags 128 and 512
-(see below) and has no effect otherwise.
-
-@item 512
-Allow line break before or after the character.  This works only in
-combination with flags 128 and 256 and has no effect otherwise.
-
-Contrary to flag values 2 and@tie{}4, the flags 128, 256, and 512 work
-pairwise.  If, for example, the left character has value 512, and the
-right character 128, no line break gets inserted.  If we use
-value@tie{}6 instead for the left character, a line break after the
-character can't be suppressed since the right neighbour character
-doesn't get examined.
-@end table
-@endDefreq
-
-@DefreqList {char, g [@Var{string}]}
-@DefreqItemx {fchar, g [@Var{string}]}
-@DefreqItemx {fschar, f g [@Var{string}]}
-@DefreqListEndx {schar, g [@Var{string}]}
-@cindex defining character (@code{char})
-@cindex defining fallback character (@code{fchar}, @code{fschar}, @code{schar})
-@cindex character, defining (@code{char})
-@cindex character, defining fallback (@code{fchar}, @code{fschar}, @code{schar})
-@cindex fallback character, defining (@code{fchar}, @code{fschar}, @code{schar})
-@cindex creating new characters (@code{char})
-@cindex defining symbol (@code{char})
-@cindex symbol, defining (@code{char})
-@cindex defining glyph (@code{char})
-@cindex glyph, defining (@code{char})
-@cindex escape character, while defining glyph
-@cindex character, escape, while defining glyph
-@cindex @code{tr} request, and glyph definitions
-@cindex @code{cp} request, and glyph definitions
-@cindex @code{rc} request, and glyph definitions
-@cindex @code{lc} request, and glyph definitions
-@cindex @code{\l}, and glyph definitions
-@cindex @code{\L}, and glyph definitions
-@cindex @code{\&}, and glyph definitions
-@cindex @code{\e}, and glyph definitions
-@cindex @code{hcode} request, and glyph definitions
-Define a new glyph@tie{}@var{g} to be @var{string} (which can be
-empty).@footnote{@code{char} is a misnomer since an output glyph is
-defined.}  Every time glyph@tie{}@var{g} needs to be printed,
-@var{string} is processed in a temporary environment and the result is
-wrapped up into a single object.  Compatibility mode is turned off and
-the escape character is set to @samp{\} while @var{string} is being
-processed.  Any emboldening, constant spacing or track kerning is
-applied to this object rather than to individual characters in
-@var{string}.
-
-A glyph defined by these requests can be used just like a normal glyph
-provided by the output device.  In particular, other characters can be
-translated to it with the @code{tr} or @code{trin} requests; it can be
-made the leader character by the @code{lc} request; repeated patterns
-can be drawn with the glyph using the @code{\l} and @code{\L} escape
-sequences; words containing the glyph can be hyphenated correctly if the
-@code{hcode} request is used to give the glyph's symbol a hyphenation
-code.
-
-There is a special anti-recursion feature: Use of @code{g} within the
-glyph's definition is handled like normal characters and symbols not
-defined with @code{char}.
-
-Note that the @code{tr} and @code{trin} requests take precedence if
-@code{char} accesses the same symbol.
-
-@Example
-.tr XY
-X
-    @result{} Y
-.char X Z
-X
-    @result{} Y
-.tr XX
-X
-    @result{} Z
-@endExample
-
-The @code{fchar} request defines a fallback glyph: @code{gtroff} only
-checks for glyphs defined with @code{fchar} if it cannot find the glyph
-in the current font.  @code{gtroff} carries out this test before
-checking special fonts.
-
-@code{fschar} defines a fallback glyph for font@tie{}@var{f}:
-@code{gtroff} checks for glyphs defined with @code{fschar} after the
-list of fonts declared as font-specific special fonts with the
-@code{fspecial} request, but before the list of fonts declared as global
-special fonts with the @code{special} request.
-
-Finally, the @code{schar} request defines a global fallback glyph:
-@code{gtroff} checks for glyphs defined with @code{schar} after the list
-of fonts declared as global special fonts with the @code{special}
-request, but before the already mounted special fonts.
-
-@xref{Using Symbols}, for a detailed description of the glyph searching
-mechanism in @code{gtroff}.
-@endDefreq
-
-@DefreqList {rchar, c1 c2 @dots{}}
-@DefreqListEndx {rfschar, f c1 c2 @dots{}}
-@cindex removing glyph definition (@code{rchar}, @code{rfschar})
-@cindex glyph, removing definition (@code{rchar}, @code{rfschar})
-@cindex fallback glyph, removing definition (@code{rchar}, @code{rfschar})
-Remove the definitions of glyphs @var{c1}, @var{c2},@tie{}@enddots{}
-This undoes the effect of a @code{char}, @code{fchar}, or @code{schar}
-request.
-
-It is possible to omit the whitespace between arguments.
-
-The request @code{rfschar} removes glyph definitions defined with
-@code{fschar} for glyph@tie{}f.
-@endDefreq
-
-@xref{Special Characters}.
-
-@c ---------------------------------------------------------------------
-
-@node Character Classes, Special Fonts, Using Symbols, Fonts and Symbols
-@subsection Character Classes
-@cindex character classes
-@cindex classes, character
-
-Classes are particularly useful for East Asian languages such as
-Chinese, Japanese, and Korean, where the number of needed characters is
-much larger than in European languages, and where large sets of
-characters share the same properties.
-
-@Defreq {class, n c1 c2 @dots{}}
-@cindex character class (@code{class})
-@cindex defining character class (@code{class})
-@cindex class of characters (@code{class})
-In @code{groff}, a @dfn{character class} (or simply ``class'') is a set
-of characters, grouped by some user aspect.  The @code{class} request
-defines such classes so that other requests can refer to all characters
-belonging to this set with a single class name.  Currently, only the
-@code{cflags} request can handle character classes.
-
-A @code{class} request takes a class name followed by a list of
-entities.  In its simplest form, the entities are characters or symbols:
-
-@Example
-.class [prepunct] , : ; > @}
-@endExample
-
-Since class and glyph names share the same namespace, it is recommended
-to start and end the class name with @code{[} and @code{]},
-respectively, to avoid collisions with normal @code{groff} symbols (and
-symbols defined by the user).  In particular, the presence of @code{]}
-in the symbol name intentionally prevents the usage of @code{\[...]},
-thus you must use the @code{\C} escape to access a class with such a
-name.
-
-@cindex GGL (groff glyph list)
-@cindex groff glyph list (GGL)
-You can also use a special character range notation, consisting of a
-start character or symbol, followed by @samp{-}, and an end character or
-symbol.  Internally, @code{gtroff} converts these two symbol names to
-Unicode values (according to the groff glyph gist), which then give the
-start and end value of the range.  If that fails, the class definition
-is skipped.
-
-Finally, classes can be nested, too.
-
-Here is a more complex example:
-
-@Example
-.class [prepunctx] \C'[prepunct]' \[u2013]-\[u2016]
-@endExample
-
-The class @samp{prepunctx} now contains the contents of the class
-@code{prepunct} as defined above (the set @samp{, : ; > @}}), and
-characters in the range between @code{U+2013} and @code{U+2016}.
-
-If you want to add @samp{-} to a class, it must be the first character
-value in the argument list, otherwise it gets misinterpreted as a range.
-
-Note that it is not possible to use class names within range
-definitions.
-
-Typical use of the @code{class} request is to control line-breaking and
-hyphenation rules as defined by the @code{cflags} request.  For example,
-to inhibit line breaks before the characters belonging to the
-@code{prepunctx} class, you can write:
-
-@Example
-.cflags 2 \C'[prepunctx]'
-@endExample
-
-See the @code{cflags} request in @ref{Using Symbols}, for more details.
-@endDefreq
-
-@c ---------------------------------------------------------------------
-
-@node Special Fonts, Artificial Fonts, Character Classes, Fonts and Symbols
-@subsection Special Fonts
-@cindex special fonts
-@cindex fonts, special
-
-Special fonts are those that @code{gtroff} searches when it cannot find
-the requested glyph in the current font.  The Symbol font is usually a
-special font.
-
-@code{gtroff} provides the following two requests to add more special
-fonts.  @xref{Using Symbols}, for a detailed description of the glyph
-searching mechanism in @code{gtroff}.
-
-Usually, only non-TTY devices have special fonts.
-
-@DefreqList {special, [@Var{s1} @Var{s2} @dots{}]}
-@DefreqListEndx {fspecial, f [@Var{s1} @Var{s2} @dots{}]}
-@kindex fonts
-@pindex DESC
-Use the @code{special} request to define special fonts.  Initially, this
-list is empty.
-
-Use the @code{fspecial} request to designate special fonts only when
-font@tie{}@var{f} is active.  Initially, this list is empty.
-
-Previous calls to @code{special} or @code{fspecial} are overwritten;
-without arguments, the particular list of special fonts is set to empty.
-Special fonts are searched in the order they appear as arguments.
-
-All fonts that appear in a call to @code{special} or @code{fspecial}
-are loaded.
-
-@xref{Using Symbols}, for the exact search order of glyphs.
-@endDefreq
-
-@c ---------------------------------------------------------------------
-
-@node Artificial Fonts, Ligatures and Kerning, Special Fonts, Fonts and Symbols
-@subsection Artificial Fonts
-@cindex artificial fonts
-@cindex fonts, artificial
-
-There are a number of requests and escapes for artificially creating
-fonts.  These are largely vestiges of the days when output devices did
-not have a wide variety of fonts, and when @code{nroff} and @code{troff}
-were separate programs.  Most of them are no longer necessary in GNU
-@code{troff}.  Nevertheless, they are supported.
-
-@DefescList {\\H, ', height, '}
-@DefescItem {\\H, ', @t{+}height, '}
-@DefescItem {\\H, ', @t{-}height, '}
-@DefregListEndx {.height}
-@cindex changing the font height (@code{\H})
-@cindex font height, changing (@code{\H})
-@cindex height, font, changing (@code{\H})
-Change (increment, decrement) the height of the current font, but not
-the width.  If @var{height} is zero, restore the original height.
-Default scaling indicator is @samp{z}.
-
-The read-only number register @code{.height} contains the font height as
-set by @code{\H}.
-
-Currently, only the @option{-Tps} and @option{-Tpdf} devices support
-this feature.
-
-Note that @code{\H} doesn't produce an input token in @code{gtroff}.  As
-a consequence, it can be used in requests like @code{mc} (which expects
-a single character as an argument) to change the font on the fly:
-
-@Example
-.mc \H'+5z'x\H'0'
-@endExample
-
-In compatibility mode, @code{gtroff} behaves differently: If an
-increment or decrement is used, it is always taken relative to the
-current point size and not relative to the previously selected font
-height.  Thus,
-
-@Example
-.cp 1
-\H'+5'test \H'+5'test
-@endExample
-
-@noindent
-prints the word @samp{test} twice with the same font height (five points
-larger than the current font size).
-@endDefesc
-
-@DefescList {\\S, ', slant, '}
-@DefregListEndx {.slant}
-@cindex changing the font slant (@code{\S})
-@cindex font slant, changing (@code{\S})
-@cindex slant, font, changing (@code{\S})
-Slant the current font by @var{slant} degrees.  Positive values slant to
-the right.  Only integer values are possible.
-
-The read-only number register @code{.slant} contains the font slant as
-set by @code{\S}.
-
-Currently, only the @option{-Tps} and @option{-Tpdf} devices support
-this feature.
-
-Note that @code{\S} doesn't produce an input token in @code{gtroff}.  As
-a consequence, it can be used in requests like @code{mc} (which expects
-a single character as an argument) to change the font on the fly:
-
-@Example
-.mc \S'20'x\S'0'
-@endExample
-
-This request is incorrectly documented in the original @acronym{UNIX}
-troff manual; the slant is always set to an absolute value.
-@endDefesc
-
-@Defreq {ul, [@Var{lines}]}
-@cindex underlining (@code{ul})
-The @code{ul} request normally underlines subsequent lines if a TTY
-output device is used.  Otherwise, the lines are printed in italics
-(only the term `underlined' is used in the following).  The single
-argument is the number of input lines to be underlined; with no
-argument, the next line is underlined.  If @var{lines} is zero or
-negative, stop the effects of @code{ul} (if it was active).  Requests
-and empty lines do not count for computing the number of underlined
-input lines, even if they produce some output like @code{tl}.  Lines
-inserted by macros (e.g.@: invoked by a trap) do count.
-
-At the beginning of @code{ul}, the current font is stored and the
-underline font is activated.  Within the span of a @code{ul} request, it
-is possible to change fonts, but after the last line affected by
-@code{ul} the saved font is restored.
-
-This number of lines still to be underlined is associated with the
-current environment (@pxref{Environments}).  The underline font can be
-changed with the @code{uf} request.
-
-@c XXX @xref should be changed to grotty
-
-@c @xref{Troff and Nroff Mode}, for a discussion how underlining is
-@c implemented in for TTY output devices, and which problems can arise.
-
-The @code{ul} request does not underline spaces.
-@endDefreq
-
-@Defreq {cu, [@Var{lines}]}
-@cindex continuous underlining (@code{cu})
-@cindex underlining, continuous (@code{cu})
-The @code{cu} request is similar to @code{ul} but underlines spaces as
-well (if a TTY output device is used).
-@endDefreq
-
-@Defreq {uf, font}
-@cindex underline font (@code{uf})
-@cindex font for underlining (@code{uf})
-Set the underline font (globally) used by @code{ul} and @code{cu}.  By
-default, this is the font at position@tie{}2.  @var{font} can be either
-a non-negative font position or the name of a font.
-@endDefreq
-
-@DefreqList {bd, font [@Var{offset}]}
-@DefreqItem {bd, font1 font2 [@Var{offset}]}
-@DefregListEndx {.b}
-@cindex imitating bold face (@code{bd})
-@cindex bold face, imitating (@code{bd})
-Artificially create a bold font by printing each glyph twice, slightly
-offset.
-
-Two syntax forms are available.
-
-@itemize @bullet
-@item
-Imitate a bold font unconditionally.  The first argument specifies the
-font to embolden, and the second is the number of basic units, minus
-one, by which the two glyphs are offset.  If the second argument is
-missing, emboldening is turned off.
-
-@var{font} can be either a non-negative font position or the name of a
-font.
-
-@var{offset} is available in the @code{.b} read-only register if a
-special font is active; in the @code{bd} request, its default unit is
-@samp{u}.
-
-@cindex @code{fspecial} request, and imitating bold
-@kindex special
-@cindex embolding of special fonts
-@cindex special fonts, emboldening
-@item
-Imitate a bold form conditionally.  Embolden @var{font1} by @var{offset}
-only if font @var{font2} is the current font.  This command can be
-issued repeatedly to set up different emboldening values for different
-current fonts.  If the second argument is missing, emboldening is turned
-off for this particular current font.
-
-This affects special fonts only (either set up with the @code{special}
-command in font files or with the @code{fspecial} request).
-@end itemize
-@endDefreq
-
-@Defreq {cs, font [@Var{width} [@Var{em-size}]]}
-@cindex constant glyph space mode (@code{cs})
-@cindex mode for constant glyph space (@code{cs})
-@cindex glyph, constant space
-@cindex @code{ps} request, and constant glyph space mode
-Switch to and from @dfn{constant glyph space mode}.  If activated, the
-width of every glyph is @math{@var{width}/36} ems.  The em size is given
-absolutely by @var{em-size}; if this argument is missing, the em value
-is taken from the current font size (as set with the @code{ps} request)
-when the font is effectively in use.  Without second and third argument,
-constant glyph space mode is deactivated.
-
-Default scaling indicator for @var{em-size} is @samp{z}; @var{width} is
-an integer.
-@endDefreq
-
-@c ---------------------------------------------------------------------
-
-@node Ligatures and Kerning,  , Artificial Fonts, Fonts and Symbols
-@subsection Ligatures and Kerning
-@cindex ligatures and kerning
-@cindex kerning and ligatures
-
-Ligatures are groups of characters that are run together, i.e, producing
-a single glyph.  For example, the letters `f' and `i' can form a
-ligature `fi' as in the word `file'.  This produces a cleaner look
-(albeit subtle) to the printed output.  Usually, ligatures are not
-available in fonts for TTY output devices.
-
-Most @sc{PostScript} fonts support the fi and fl ligatures.  The C/A/T
-typesetter that was the target of @acronym{AT&T} @code{troff} also
-supported `ff', `ffi', and `ffl' ligatures.  Advanced typesetters or
-`expert' fonts may include ligatures for `ft' and `ct', although GNU
-@code{troff} does not support these (yet).
-
-Only the current font is checked for ligatures and kerns; neither
-special fonts nor entities defined with the @code{char} request (and its
-siblings) are taken into account.
-
-@DefreqList {lg, [@Var{flag}]}
-@DefregListEndx {.lg}
-@cindex activating ligatures (@code{lg})
-@cindex ligatures, activating (@code{lg})
-@cindex ligatures enabled register (@code{.lg})
-Switch the ligature mechanism on or off; if the parameter is non-zero or
-missing, ligatures are enabled, otherwise disabled.  Default is on.  The
-current ligature mode can be found in the read-only number register
-@code{.lg} (set to 1 or@tie{}2 if ligatures are enabled,
-0@tie{}otherwise).
-
-Setting the ligature mode to@tie{}2 enables the two-character ligatures
-(fi, fl, and ff) and disables the three-character ligatures (ffi and
-ffl).
-@endDefreq
-
-@dfn{Pairwise kerning} is another subtle typesetting mechanism that
-modifies the distance between a glyph pair to improve readability.  In
-most cases (but not always) the distance is decreased.
-@iftex
-For example, compare the combination of the letters `V' and `A'.  With
-kerning, `VA' is printed.  Without kerning it appears as `V@w{}A'.
-@end iftex
-Typewriter-like fonts and fonts for terminals where all glyphs have the
-same width don't use kerning.
-
-@DefreqList {kern, [@Var{flag}]}
-@DefregListEndx {.kern}
-@cindex activating kerning (@code{kern})
-@cindex kerning, activating (@code{kern})
-@cindex kerning enabled register (@code{.kern})
-Switch kerning on or off.  If the parameter is non-zero or missing,
-enable pairwise kerning, otherwise disable it.  The read-only number
-register @code{.kern} is set to@tie{}1 if pairwise kerning is enabled,
-0@tie{}otherwise.
-
-@cindex zero width space character (@code{\&})
-@cindex character, zero width space (@code{\&})
-@cindex space character, zero width (@code{\&})
-If the font description file contains pairwise kerning information,
-glyphs from that font are kerned.  Kerning between two glyphs can be
-inhibited by placing @code{\&} between them: @samp{V\&A}.
-
-@xref{Font File Format}.
-@endDefreq
-
-@cindex track kerning
-@cindex kerning, track
-@dfn{Track kerning} expands or reduces the space between glyphs.  This
-can be handy, for example, if you need to squeeze a long word onto a
-single line or spread some text to fill a narrow column.  It must be
-used with great care since it is usually considered bad typography if
-the reader notices the effect.
-
-@Defreq {tkf, f s1 n1 s2 n2}
-@cindex activating track kerning (@code{tkf})
-@cindex track kerning, activating (@code{tkf})
-Enable track kerning for font@tie{}@var{f}.  If the current font
-is@tie{}@var{f} the width of every glyph is increased by an amount
-between @var{n1} and @var{n2} (@var{n1}, @var{n2} can be negative); if
-the current point size is less than or equal to @var{s1} the width is
-increased by @var{n1}; if it is greater than or equal to @var{s2} the
-width is increased by @var{n2}; if the point size is greater than or
-equal to @var{s1} and less than or equal to @var{s2} the increase in
-width is a linear function of the point size.
-
-The default scaling indicator is @samp{z} for @var{s1} and @var{s2},
-@samp{p} for @var{n1} and @var{n2}.
-
-Note that the track kerning amount is added even to the rightmost glyph
-in a line; for large values it is thus recommended to increase the line
-length by the same amount to compensate it.
-@endDefreq
-
-Sometimes, when typesetting letters of different fonts, more or less
-space at such boundaries are needed.  There are two escapes to help with
-this.
-
-@Defesc {\\/, , , }
-@cindex italic correction (@code{\/})
-@cindex correction, italic (@code{\/})
-@cindex correction between italic and roman glyph (@code{\/}, @code{\,})
-@cindex roman glyph, correction after italic glyph (@code{\/})
-@cindex italic glyph, correction before roman glyph (@code{\/})
-@cindex glyph, italic correction (@code{\/})
-Increase the width of the preceding glyph so that the spacing between
-that glyph and the following glyph is correct if the following glyph is
-a roman glyph.  For example, if an italic@tie{}@code{f} is immediately
-followed by a roman right parenthesis, then in many fonts the top right
-portion of the@tie{}@code{f} overlaps the top left of the right
-parenthesis.  Use this escape sequence whenever an italic glyph is
-immediately followed by a roman glyph without any intervening space.
-This small amount of space is also called @dfn{italic correction}.
-
-@iftex
-@c can't use @Example...@endExample here
-@example
-@group
-\f[I]f\f[R])
-    @result{} {@it f}@r{)}
-\f[I]f\/\f[R])
-    @result{} @i{f}@r{)}
-@end group
-@end example
-@end iftex
-@endDefesc
-
-@Defesc {\\\,, , , }
-@cindex left italic correction (@code{\,})
-@cindex correction, left italic (@code{\,})
-@cindex glyph, left italic correction (@code{\,})
-@cindex roman glyph, correction before italic glyph (@code{\,})
-@cindex italic glyph, correction after roman glyph (@code{\,})
-Modify the spacing of the following glyph so that the spacing between
-that glyph and the preceding glyph is correct if the preceding glyph is
-a roman glyph.  Use this escape sequence whenever a roman glyph is
-immediately followed by an italic glyph without any intervening space.
-In analogy to above, this space could be called @dfn{left italic
-correction}, but this term isn't used widely.
-
-@iftex
-@c can't use @Example...@endExample here
-@example
-@group
-q\f[I]f
-    @result{} @r{q}@i{f}
-q\,\f[I]f
-    @result{} @r{q}@math{@ptexcomma}@i{f}
-@end group
-@end example
-@end iftex
-@endDefesc
-
-@Defesc {\\&, , , }
-Insert a zero-width character, which is invisible.  Its intended use is
-to stop interaction of a character with its surrounding.
-
-@itemize @bullet
-@item
-It prevents the insertion of extra space after an end-of-sentence
-character.
-
-@Example
-Test.
-Test.
-    @result{} Test.  Test.
-Test.\&
-Test.
-    @result{} Test. Test.
-@endExample
-
-@item
-It prevents interpretation of a control character at the beginning of an
-input line.
-
-@Example
-.Test
-    @result{} warning: `Test' not defined
-\&.Test
-    @result{} .Test
-@endExample
-
-@item
-It prevents kerning between two glyphs.
-
-@iftex
-@c can't use @Example...@endExample here
-@example
-@group
-VA
-    @result{} @r{VA}
-V\&A
-    @result{} @r{V@w{}A}
-@end group
-@end example
-@end iftex
-
-@item
-It is needed to map an arbitrary character to nothing in the @code{tr}
-request (@pxref{Character Translations}).
-@end itemize
-@endDefesc
-
-@Defesc {\\), , , }
-This escape is similar to @code{\&} except that it behaves like a
-character declared with the @code{cflags} request to be transparent for
-the purposes of an end-of-sentence character.
-
-Its main usage is in macro definitions to protect against arguments
-starting with a control character.
-
-@Example
-.de xxx
-\)\\$1
-..
-.de yyy
-\&\\$1
-..
-This is a test.\c
-.xxx '
-This is a test.
-    @result{}This is a test.'  This is a test.
-This is a test.\c
-.yyy '
-This is a test.
-    @result{}This is a test.' This is a test.
-@endExample
-@endDefesc
-
-
-@c =====================================================================
-
-@node Sizes, Strings, Fonts and Symbols, gtroff Reference
-@section Sizes
-@cindex sizes
-
-@cindex baseline
-@cindex type size
-@cindex size of type
-@cindex vertical spacing
-@cindex spacing, vertical
-@code{gtroff} uses two dimensions with each line of text, type size and
-vertical spacing.  The @dfn{type size} is approximately the height of
-the tallest glyph.@footnote{This is usually the parenthesis.  Note that
-in most cases the real dimensions of the glyphs in a font are @emph{not}
-related to its type size!  For example, the standard @sc{PostScript}
-font families `Times Roman', `Helvetica', and `Courier' can't be used
-together at 10@dmn{pt}; to get acceptable output, the size of
-`Helvetica' has to be reduced by one point, and the size of `Courier'
-must be increased by one point.}  @dfn{Vertical spacing} is the amount
-of space @code{gtroff} allows for a line of text; normally, this is
-about 20%@tie{}larger than the current type size.  Ratios smaller than
-this can result in hard-to-read text; larger than this, it spreads the
-text out more vertically (useful for term papers).  By default,
-@code{gtroff} uses 10@tie{}point type on 12@tie{}point spacing.
-
-@cindex leading
-The difference between type size and vertical spacing is known, by
-typesetters, as @dfn{leading} (this is pronounced `ledding').
-
-@menu
-* Changing Type Sizes::
-* Fractional Type Sizes::
-@end menu
-
-@c ---------------------------------------------------------------------
-
-@node Changing Type Sizes, Fractional Type Sizes, Sizes, Sizes
-@subsection Changing Type Sizes
-
-@DefreqList {ps, [@Var{size}]}
-@DefreqItem {ps, @t{+}@Var{size}}
-@DefreqItem {ps, @t{-}@Var{size}}
-@DefescItemx {\\s, , size, }
-@DefregListEndx {.s}
-@cindex changing type sizes (@code{ps}, @code{\s})
-@cindex type sizes, changing (@code{ps}, @code{\s})
-@cindex point sizes, changing (@code{ps}, @code{\s})
-Use the @code{ps} request or the @code{\s} escape to change (increase,
-decrease) the type size (in points).  Specify @var{size} as either an
-absolute point size, or as a relative change from the current size.  The
-size@tie{}0 (for both @code{.ps} and @code{\s}), or no argument (for
-@code{.ps} only), goes back to the previous size.
-
-Default scaling indicator of @code{size} is @samp{z}.  If @code{size} is
-negative, it is set to 1@dmn{u}.
-
-@cindex type size registers (@code{.s}, @code{.ps})
-@cindex point size registers (@code{.s}, @code{.ps})
-The read-only number register @code{.s} returns the point size in points
-as a decimal fraction.  This is a string.  To get the point size in
-scaled points, use the @code{.ps} register instead.
-
-@code{.s} is associated with the current environment
-(@pxref{Environments}).
-
-@Example
-snap, snap,
-.ps +2
-grin, grin,
-.ps +2
-wink, wink, \s+2nudge, nudge,\s+8 say no more!
-.ps 10
-@endExample
-
-The @code{\s} escape may be called in a variety of ways.  Much like
-other escapes there must be a way to determine where the argument ends
-and the text begins.  Any of the following forms are valid:
-
-@table @code
-@item \s@var{n}
-Set the point size to @var{n}@tie{}points.  @var{n}@tie{}must be either
-0 or in the range 4 to@tie{}39.
-
-@item \s+@var{n}
-@itemx \s-@var{n}
-Increase or decrease the point size by @var{n}@tie{}points.
-@var{n}@tie{}must be exactly one digit.
-
-@item \s(@var{nn}
-Set the point size to @var{nn}@tie{}points.  @var{nn} must be exactly
-two digits.
-
-@item \s+(@var{nn}
-@itemx \s-(@var{nn}
-@itemx \s(+@var{nn}
-@itemx \s(-@var{nn}
-Increase or decrease the point size by @var{nn}@tie{}points.  @var{nn}
-must be exactly two digits.
-@end table
-
-Note that @code{\s} doesn't produce an input token in @code{gtroff}.  As
-a consequence, it can be used in requests like @code{mc} (which expects
-a single character as an argument) to change the font on the fly:
-
-@Example
-.mc \s[20]x\s[0]
-@endExample
-
-@xref{Fractional Type Sizes}, for yet another syntactical form of using
-the @code{\s} escape.
-@endDefreq
-
-@Defreq {sizes, s1 s2 @dots{} sn [0]}
-Some devices may only have certain permissible sizes, in which case
-@code{gtroff} rounds to the nearest permissible size.  The @file{DESC}
-file specifies which sizes are permissible for the device.
-
-Use the @code{sizes} request to change the permissible sizes for the
-current output device.  Arguments are in scaled points; the
-@code{sizescale} line in the @file{DESC} file for the output device
-provides the scaling factor.  For example, if the scaling factor is
-1000, then the value 12000 is 12@tie{}points.
-
-Each argument can be a single point size (such as @samp{12000}), or a
-range of sizes (such as @samp{4000-72000}).  You can optionally end the
-list with a zero.
-@endDefreq
-
-@DefreqList {vs, [@Var{space}]}
-@DefreqItem {vs, @t{+}@Var{space}}
-@DefreqItem {vs, @t{-}@Var{space}}
-@DefregListEndx {.v}
-@cindex changing vertical line spacing (@code{vs})
-@cindex vertical line spacing, changing (@code{vs})
-@cindex vertical line spacing register (@code{.v})
-Change (increase, decrease) the vertical spacing by @var{space}.  The
-default scaling indicator is @samp{p}.
-
-If @code{vs} is called without an argument, the vertical spacing is
-reset to the previous value before the last call to @code{vs}.
-
-@cindex @code{.V} register, and @code{vs}
-@code{gtroff} creates a warning of type @samp{range} if @var{space} is
-negative; the vertical spacing is then set to smallest positive value,
-the vertical resolution (as given in the @code{.V} register).
-
-Note that @w{@samp{.vs 0}} isn't saved in a diversion since it doesn't
-result in a vertical motion.  You explicitly have to repeat this command
-before inserting the diversion.
-
-The read-only number register @code{.v} contains the current vertical
-spacing; it is associated with the current environment
-(@pxref{Environments}).
-@endDefreq
-
-@cindex vertical line spacing, effective value
-The effective vertical line spacing consists of four components.
-Breaking a line causes the following actions (in the given order).
-
-@itemize @bullet
-@item
-@cindex extra pre-vertical line space (@code{\x})
-@cindex line space, extra pre-vertical (@code{\x})
-Move the current point vertically by the @dfn{extra pre-vertical line
-space}.  This is the minimum value of all @code{\x} escapes with a
-negative argument in the current output line.
-
-@item
-Move the current point vertically by the vertical line spacing as set
-with the @code{vs} request.
-
-@item
-Output the current line.
-
-@item
-@cindex extra post-vertical line space (@code{\x})
-@cindex line space, extra post-vertical (@code{\x})
-Move the current point vertically by the @dfn{extra post-vertical line
-space}.  This is the maximum value of all @code{\x} escapes with a
-positive argument in the line that has just been output.
-
-@item
-@cindex post-vertical line spacing
-@cindex line spacing, post-vertical (@code{pvs})
-Move the current point vertically by the @dfn{post-vertical line
-spacing} as set with the @code{pvs} request.
-@end itemize
-
-@cindex double-spacing (@code{vs}, @code{pvs})
-It is usually better to use @code{vs} or @code{pvs} instead of @code{ls}
-to produce double-spaced documents: @code{vs} and @code{pvs} have a
-finer granularity for the inserted vertical space compared to @code{ls};
-furthermore, certain preprocessors assume single-spacing.
-
-@xref{Manipulating Spacing}, for more details on the @code{\x} escape
-and the @code{ls} request.
-
-@DefreqList {pvs, [@Var{space}]}
-@DefreqItem {pvs, @t{+}@Var{space}}
-@DefreqItem {pvs, @t{-}@Var{space}}
-@DefregListEndx {.pvs}
-@cindex @code{ls} request, alternative to (@code{pvs})
-@cindex post-vertical line spacing, changing (@code{pvs})
-@cindex post-vertical line spacing register (@code{.pvs})
-Change (increase, decrease) the post-vertical spacing by @var{space}.
-The default scaling indicator is @samp{p}.
-
-If @code{pvs} is called without an argument, the post-vertical spacing
-is reset to the previous value before the last call to @code{pvs}.
-
-@code{gtroff} creates a warning of type @samp{range} if @var{space} is
-zero or negative; the vertical spacing is then set to zero.
-
-The read-only number register @code{.pvs} contains the current
-post-vertical spacing; it is associated with the current environment
-(@pxref{Environments}).
-@endDefreq
-
-@c ---------------------------------------------------------------------
-
-@node Fractional Type Sizes,  , Changing Type Sizes, Sizes
-@subsection Fractional Type Sizes
-@cindex fractional type sizes
-@cindex fractional point sizes
-@cindex type sizes, fractional
-@cindex point sizes, fractional
-@cindex sizes, fractional
-
-@cindex @code{s} unit
-@cindex unit, @code{s}
-@cindex @code{z} unit
-@cindex unit, @code{z}
-@cindex @code{ps} request, with fractional type sizes
-@cindex @code{cs} request, with fractional type sizes
-@cindex @code{tkf} request, with fractional type sizes
-@cindex @code{\H}, with fractional type sizes
-@cindex @code{\s}, with fractional type sizes
-A @dfn{scaled point} is equal to @math{1/@var{sizescale}} points, where
-@var{sizescale} is specified in the @file{DESC} file (1@tie{}by
-default).  There is a new scale indicator @samp{z}, which has the effect
-of multiplying by @var{sizescale}.  Requests and escape sequences in
-@code{gtroff} interpret arguments that represent a point size as being
-in units of scaled points, but they evaluate each such argument using a
-default scale indicator of @samp{z}.  Arguments treated in this way are
-the argument to the @code{ps} request, the third argument to the
-@code{cs} request, the second and fourth arguments to the @code{tkf}
-request, the argument to the @code{\H} escape sequence, and those
-variants of the @code{\s} escape sequence that take a numeric expression
-as their argument (see below).
-
-For example, suppose @var{sizescale} is@tie{}1000; then a scaled point
-is equivalent to a millipoint; the request @w{@samp{.ps 10.25}} is
-equivalent to @w{@samp{.ps 10.25z}} and thus sets the point size to
-10250@tie{}scaled points, which is equal to 10.25@tie{}points.
-
-@code{gtroff} disallows the use of the @samp{z} scale indicator in
-instances where it would make no sense, such as a numeric expression
-whose default scale indicator was neither @samp{u} nor @samp{z}.
-Similarly it would make no sense to use a scaling indicator other than
-@samp{z} or @samp{u} in a numeric expression whose default scale
-indicator was @samp{z}, and so @code{gtroff} disallows this as well.
-
-There is also new scale indicator @samp{s}, which multiplies by the
-number of units in a scaled point.  So, for example, @samp{\n[.ps]s} is
-equal to @samp{1m}.  Be sure not to confuse the @samp{s} and @samp{z}
-scale indicators.
-
-@Defreg {.ps}
-A read-only number register returning the point size in scaled points.
-
-@code{.ps} is associated with the current environment
-(@pxref{Environments}).
-@endDefreg
-
-@DefregList {.psr}
-@DefregListEndx {.sr}
-@cindex last-requested point size registers (@code{.psr}, @code{.sr})
-@cindex point size registers, last-requested (@code{.psr}, @code{.sr})
-@cindex @code{.ps} register, in comparison with @code{.psr}
-@cindex @code{.s} register, in comparison with @code{.sr}
-The last-requested point size in scaled points is contained in the
-@code{.psr} read-only number register.  The last requested point size in
-points as a decimal fraction can be found in @code{.sr}.  This is a
-string-valued read-only number register.
-
-Note that the requested point sizes are device-independent, whereas the
-values returned by the @code{.ps} and @code{.s} registers are not.  For
-example, if a point size of 11@dmn{pt} is requested, and a @code{sizes}
-request (or a @code{sizescale} line in a @file{DESC} file) specifies
-10.95@dmn{pt} instead, this value is actually used.
-
-Both registers are associated with the current environment
-(@pxref{Environments}).
-@endDefreg
-
-The @code{\s} escape has the following syntax for working with
-fractional type sizes:
-
-@table @code
-@item \s[@var{n}]
-@itemx \s'@var{n}'
-Set the point size to @var{n}@tie{}scaled points; @var{n}@tie{}is a
-numeric expression with a default scale indicator of @samp{z}.
-
-@item \s[+@var{n}]
-@itemx \s[-@var{n}]
-@itemx \s+[@var{n}]
-@itemx \s-[@var{n}]
-@itemx \s'+@var{n}'
-@itemx \s'-@var{n}'
-@itemx \s+'@var{n}'
-@itemx \s-'@var{n}'
-Increase or or decrease the point size by @var{n}@tie{}scaled points;
-@var{n}@tie{}is a numeric expression (which may start with a minus sign)
-with a default scale indicator of @samp{z}.
-@end table
-
-@xref{Font Files}.
-
-
-@c =====================================================================
-
-@node Strings, Conditionals and Loops, Sizes, gtroff Reference
-@section Strings
-@cindex strings
-
-@code{gtroff} has string variables, which are entirely for user
-convenience (i.e.@: there are no built-in strings exept @code{.T}, but
-even this is a read-write string variable).
-
-Although the following requests can be used to create strings,
-simply using an undefined string will cause it to be defined as empty.
-@xref{Identifiers}.
-
-@DefreqList {ds, name [@Var{string}]}
-@DefreqItemx {ds1, name [@Var{string}]}
-@DefescItemx {\\*, , n, }
-@DefescItem {\\*, @Lparen{}, nm, }
-@DefescListEnd {\\*, @Lbrack{}, name arg1 arg2 @dots{}, @Rbrack{}}
-@cindex string interpolation (@code{\*})
-@cindex string expansion (@code{\*})
-@cindex interpolation of strings (@code{\*})
-@cindex expansion of strings (@code{\*})
-@cindex string arguments
-@cindex arguments, of strings
-Define and access a string variable @var{name} (one-character
-name@tie{}@var{n}, two-character name @var{nm}).  If @var{name} already
-exists, @code{ds} overwrites the previous definition.  Only the syntax
-form using brackets can take arguments that are handled identically to
-macro arguments; the single exception is that a closing bracket as an
-argument must be enclosed in double quotes.  @xref{Request and Macro
-Arguments}, and @ref{Parameters}.
-
-Example:
-
-@Example
-.ds foo a \\$1 test
-.
-This is \*[foo nice].
-    @result{} This is a nice test.
-@endExample
-
-The @code{\*} escape @dfn{interpolates} (expands in-place) a
-previously-defined string variable.  To be more precise, the stored
-string is pushed onto the input stack, which is then parsed by
-@code{gtroff}.  Similar to number registers, it is possible to nest
-strings, i.e., string variables can be called within string variables.
-
-If the string named by the @code{\*} escape does not exist, it is
-defined as empty, and a warning of type @samp{mac} is emitted (see
-@ref{Debugging}, for more details).
-
-@cindex comments, with @code{ds}
-@cindex @code{ds} request, and comments
-@strong{Caution:} Unlike other requests, the second argument to the
-@code{ds} request takes up the entire line including trailing spaces.
-This means that comments on a line with such a request can introduce
-unwanted space into a string.
-
-@Example
-.ds UX \s-1UNIX\s0\u\s-3tm\s0\d \" UNIX trademark
-@endExample
-
-@noindent
-Instead the comment should be put on another line or have the comment
-escape adjacent with the end of the string.
-
-@Example
-.ds UX \s-1UNIX\s0\u\s-3tm\s0\d\"  UNIX trademark
-@endExample
-
-@cindex trailing quotes
-@cindex quotes, trailing
-@cindex leading spaces with @code{ds}
-@cindex spaces with @code{ds}
-@cindex @code{ds} request, and leading spaces
-To produce leading space the string can be started with a double quote.
-No trailing quote is needed; in fact, any trailing quote is included in
-your string.
-
-@Example
-.ds sign "           Yours in a white wine sauce,
-@endExample
-
-@cindex multi-line strings
-@cindex strings, multi-line
-@cindex newline character, in strings, escaping
-@cindex escaping newline characters, in strings
-Strings are not limited to a single line of text.  A string can span
-several lines by escaping the newlines with a backslash.  The resulting
-string is stored @emph{without} the newlines.
-
-@Example
-.ds foo lots and lots \
-of text are on these \
-next several lines
-@endExample
-
-It is not possible to have real newlines in a string.  To put a single
-double quote character into a string, use two consecutive double quote
-characters.
-
-The @code{ds1} request turns off compatibility mode while interpreting a
-string.  To be more precise, a @dfn{compatibility save} input token is
-inserted at the beginning of the string, and a @dfn{compatibility
-restore} input token at the end.
-
-@Example
-.nr xxx 12345
-.ds aa The value of xxx is \\n[xxx].
-.ds1 bb The value of xxx ix \\n[xxx].
-.
-.cp 1
-.
-\*(aa
-    @result{} warning: number register `[' not defined
-    @result{} The value of xxx is 0xxx].
-\*(bb
-    @result{} The value of xxx ix 12345.
-@endExample
-
-@cindex name space, common, of macros, diversions, and strings
-@cindex common name space of macros, diversions, and strings
-@cindex macros, shared name space with strings and diversions
-@cindex strings, shared name space with macros and diversions
-@cindex diversions, shared name space with macros and strings
-Strings, macros, and diversions (and boxes) share the same name space.
-Internally, even the same mechanism is used to store them.  This has
-some interesting consequences.  For example, it is possible to call a
-macro with string syntax and vice versa.
-
-@Example
-.de xxx
-a funny test.
-..
-This is \*[xxx]
-    @result{} This is a funny test.
-
-.ds yyy a funny test
-This is
-.yyy
-    @result{} This is a funny test.
-@endExample
-
-In particular, interpolating a string does not hide existing macro
-arguments.  Thus in a macro, a more efficient way of doing
-
-@Example
-.xx \\$@@
-@endExample
-
-@noindent
-is
-
-@Example
-\\*[xx]\\
-@endExample
-
-@noindent
-Note that the latter calling syntax doesn't change the value of
-@code{\$0}, which is then inherited from the calling macro.
-
-Diversions and boxes can be also called with string syntax.
-
-Another consequence is that you can copy one-line diversions or boxes to
-a string.
-
-@Example
-.di xxx
-a \fItest\fR
-.br
-.di
-.ds yyy This is \*[xxx]\c
-\*[yyy].
-    @result{} @r{This is a }@i{test}.
-@endExample
-
-@noindent
-As the previous example shows, it is possible to store formatted output
-in strings.  The @code{\c} escape prevents the insertion of an
-additional blank line in the output.
-
-Copying diversions longer than a single output line produces unexpected
-results.
-
-@Example
-.di xxx
-a funny
-.br
-test
-.br
-.di
-.ds yyy This is \*[xxx]\c
-\*[yyy].
-    @result{} test This is a funny.
-@endExample
-
-Usually, it is not predictable whether a diversion contains one or more
-output lines, so this mechanism should be avoided.  With @acronym{UNIX}
-@code{troff}, this was the only solution to strip off a final newline
-from a diversion.  Another disadvantage is that the spaces in the copied
-string are already formatted, making them unstretchable.  This can cause
-ugly results.
-
-@cindex stripping final newline in diversions
-@cindex diversion, stripping final newline
-@cindex final newline, stripping in diversions
-@cindex newline, final, stripping in diversions
-@cindex horizontal space, unformatting
-@cindex space, horizontal, unformatting
-@cindex unformatting horizontal space
-A clean solution to this problem is available in GNU @code{troff}, using
-the requests @code{chop} to remove the final newline of a diversion, and
-@code{unformat} to make the horizontal spaces stretchable again.
-
-@Example
-.box xxx
-a funny
-.br
-test
-.br
-.box
-.chop xxx
-.unformat xxx
-This is \*[xxx].
-    @result{} This is a funny test.
-@endExample
-
-@xref{Gtroff Internals}, for more information.
-@endDefreq
-
-@DefreqList {as, name [@Var{string}]}
-@DefreqListEndx {as1, name [@Var{string}]}
-@cindex appending to a string (@code{as})
-@cindex string, appending (@code{as})
-The @code{as} request is similar to @code{ds} but appends @var{string}
-to the string stored as @var{name} instead of redefining it.  If
-@var{name} doesn't exist yet, it is created.
-
-@Example
-.as sign " with shallots, onions and garlic,
-@endExample
-
-The @code{as1} request is similar to @code{as}, but compatibility mode
-is switched off while the appended string is interpreted.  To be more
-precise, a @dfn{compatibility save} input token is inserted at the
-beginning of the appended string, and a @dfn{compatibility restore}
-input token at the end.
-@endDefreq
-
-Rudimentary string manipulation routines are given with the next two
-requests.
-
-@Defreq {substring, str n1 [@Var{n2}]}
-@cindex substring (@code{substring})
-Replace the string named @var{str} with the substring defined by the
-indices @var{n1} and @var{n2}.  The first character in the string has
-index@tie{}0.  If @var{n2} is omitted, it is implicitly set to the
-largest valid value (the string length minus one).  If the index value
-@var{n1} or @var{n2} is negative, it is counted from the end of the
-string, going backwards: The last character has index@tie{}@minus{}1,
-the character before the last character has index@tie{}@minus{}2, etc.
-
-@Example
-.ds xxx abcdefgh
-.substring xxx 1 -4
-\*[xxx]
-    @result{} bcde
-.substring xxx 2
-\*[xxx]
-    @result{} de
-@endExample
-@endDefreq
-
-@Defreq {length, reg str}
-@cindex length of a string (@code{length})
-@cindex string, length of (@code{length})
-@cindex @code{length} request, and copy-in mode
-@cindex copy-in mode, and @code{length} request
-@cindex mode, copy-in, and @code{length} request
-Compute the number of characters of @var{str} and return it in the
-number register @var{reg}.  If @var{reg} doesn't exist, it is created.
-@code{str} is read in copy mode.
-
-@Example
-.ds xxx abcd\h'3i'efgh
-.length yyy \*[xxx]
-\n[yyy]
-    @result{} 14
-@endExample
-@endDefreq
-
-@Defreq {rn, xx yy}
-@cindex renaming request (@code{rn})
-@cindex request, renaming (@code{rn})
-@cindex renaming macro (@code{rn})
-@cindex macro, renaming (@code{rn})
-@cindex renaming string (@code{rn})
-@cindex string, renaming (@code{rn})
-@cindex renaming diversion (@code{rn})
-@cindex diversion, renaming (@code{rn})
-Rename the request, macro, diversion, or string @var{xx} to @var{yy}.
-@endDefreq
-
-@Defreq {rm, xx}
-@cindex removing request (@code{rm})
-@cindex request, removing (@code{rm})
-@cindex removing macro (@code{rm})
-@cindex macro, removing (@code{rm})
-@cindex removing string (@code{rm})
-@cindex string, removing (@code{rm})
-@cindex removing diversion (@code{rm})
-@cindex diversion, removing (@code{rm})
-Remove the request, macro, diversion, or string @var{xx}.  @code{gtroff}
-treats subsequent invocations as if the object had never been defined.
-@endDefreq
-
-@anchor{als}
-@Defreq {als, new old}
-@cindex alias, string, creating (@code{als})
-@cindex alias, macro, creating (@code{als})
-@cindex alias, diversion, creating (@code{als})
-@cindex creating alias, for string (@code{als})
-@cindex creating alias, for macro (@code{als})
-@cindex creating alias, for diversion (@code{als})
-@cindex string, creating alias (@code{als})
-@cindex macro, creating alias (@code{als})
-@cindex diversion, creating alias (@code{als})
-Create an alias named @var{new} for the request, string, macro, or
-diversion object named @var{old}.  The new name and the old name are
-exactly equivalent (it is similar to a hard rather than a soft link).  If
-@var{old} is undefined, @code{gtroff} generates a warning of type
-@samp{mac} and ignores the request.
-
-To understand how the @code{als} request works it is probably best to
-think of two different pools: one pool for objects (macros, strings,
-etc.), and another one for names.  As soon as an object is defined,
-@code{gtroff} adds it to the object pool, adds its name to the name
-pool, and creates a link between them.  When @code{als} creates an
-alias, it adds a new name to the name pool that gets linked to the same
-object as the old name.
-
-Now consider this example.
-
-@Example
-.de foo
-..
-.
-.als bar foo
-.
-.de bar
-.  foo
-..
-.
-.bar
-    @result{} input stack limit exceeded
-@endExample
-
-@noindent
-The definition of macro @code{bar} replaces the old object this name is
-linked to.  However, the alias to @code{foo} is still active!  In
-other words, @code{foo} is still linked to the same object as
-@code{bar}, and the result of calling @code{bar} is an infinite,
-recursive loop that finally leads to an error.
-
-@cindex alias, string, removing (@code{rm})
-@cindex alias, macro, removing (@code{rm})
-@cindex alias, diversion, removing (@code{rm})
-@cindex removing alias, for string (@code{rm})
-@cindex removing alias, for macro (@code{rm})
-@cindex removing alias, for diversion (@code{rm})
-@cindex string, removing alias (@code{rm})
-@cindex macro, removing alias (@code{rm})
-@cindex diversion, removing alias (@code{rm})
-To undo an alias, simply call @code{rm} on the aliased name.  The object
-itself is not destroyed until there are no more aliases.
-@endDefreq
-
-@Defreq {chop, xx}
-Remove (chop) the last character from the macro, string, or diversion
-named @var{xx}.  This is useful for removing the newline from the end of
-diversions that are to be interpolated as strings.  This command can be
-used repeatedly; see @ref{Gtroff Internals}, for details on nodes
-inserted additionally by @code{gtroff}.
-@endDefreq
-
-@xref{Identifiers}, and @ref{Comments}.
-
-
-@c =====================================================================
-
-@node Conditionals and Loops, Writing Macros, Strings, gtroff Reference
-@section Conditionals and Loops
-@cindex conditionals and loops
-@cindex loops and conditionals
-
-@menu
-* Operators in Conditionals::
-* if-else::
-* while::
-@end menu
-
-@c ---------------------------------------------------------------------
-
-@node Operators in Conditionals, if-else, Conditionals and Loops, Conditionals and Loops
-@subsection Operators in Conditionals
-
-@cindex @code{if} request, operators to use with
-@cindex @code{ie} request, operators to use with
-@cindex @code{while} request, operators to use with
-In @code{if}, @code{ie}, and @code{while} requests, in addition to ordinary
-@ref{Expressions}, there are several more operators available:
-
-@table @code
-@item e
-@itemx o
-True if the current page is even or odd numbered (respectively).
-
-@item n
-@cindex conditional output for terminal (TTY)
-@cindex TTY, conditional output for
-@cindex terminal, conditional output for
-True if the document is being processed in nroff mode (i.e., the
-@code{.nroff} command has been issued).  @xref{Troff and Nroff Mode}.
-
-@item t
-True if the document is being processed in troff mode (i.e., the
-@code{.troff} command has been issued).  @xref{Troff and Nroff Mode}.
-
-@item v
-Always false.  This condition is for compatibility with other
-@code{troff} versions only (identifying a @code{-Tversatec} device).
-
-@item '@var{xxx}'@var{yyy}'
-True if the output produced by @var{xxx} is equal to the output produced
-by @var{yyy}.  Other characters can be used in place of the single
-quotes; the same set of delimiters as for the @code{\D} escape is used
-(@pxref{Escapes}).  @code{gtroff} formats @var{xxx} and @var{yyy} in
-separate environments; after the comparison the resulting data is
-discarded.
-
-@Example
-.ie "|"\fR|\fP" \
-true
-.el \
-false
-    @result{} true
-@endExample
-
-@noindent
-The resulting motions, glyph sizes, and fonts have to
-match,@footnote{The created output nodes must be identical.
-@xref{Gtroff Internals}.} and not the individual motion, size, and font
-requests.  In the previous example, @samp{|} and @samp{\fR|\fP} both
-result in a roman @samp{|} glyph with the same point size and at the
-same location on the page, so the strings are equal.  If
-@samp{.ft@tie{}I} had been added before the @samp{.ie}, the result would
-be ``false'' because (the first) @samp{|} produces an italic @samp{|}
-rather than a roman one.
-
-@cindex string comparison
-@cindex comparison of strings
-To compare strings without processing, surround the data with @code{\?}.
-
-@Example
-.ie "\?|\?"\?\fR|\fP\?" \
-true
-.el \
-false
-    @result{} false
-@endExample
-
-@cindex @code{\?}, and copy-in mode
-@cindex copy-in mode, and @code{\?}
-@cindex mode, copy-in, and @code{\?}
-@noindent
-Since data protected with @code{\?} is read in copy-in mode it is even
-possible to use incomplete input without causing an error.
-
-@Example
-.ds a \[
-.ds b \[
-.ie '\?\*a\?'\?\*b\?' \
-true
-.el \
-false
-    @result{} true
-@endExample
-
-@item r @var{xxx}
-True if there is a number register named @var{xxx}.
-
-@item d @var{xxx}
-True if there is a string, macro, diversion, or request named @var{xxx}.
-
-@item m @var{xxx}
-True if there is a color named @var{xxx}.
-
-@item c @var{g}
-True if there is a glyph @var{g} available@footnote{The name of this
-conditional operator is a misnomer since it tests names of output
-glyphs.}; @var{g} is either an @acronym{ASCII} character or a special
-character (@code{\N'@var{xxx}'}, @code{\(@var{gg}} or
-@code{\[@var{ggg}]}); the condition is also true if @var{g} has been
-defined by the @code{char} request.
-
-@item F @var{font}
-True if a font named @var{font} exists.  @var{font} is handled as if it
-was opened with the @code{ft} request (this is, font translation and
-styles are applied), without actually mounting it.
-
-This test doesn't load the complete font but only its header to verify
-its validity.
-
-@item S @var{style}
-True if style @var{style} has been registered.  Font translation is
-applied.
-@end table
-
-Note that these operators can't be combined with other operators like
-@samp{:} or @samp{&}; only a leading @samp{!} (without whitespace
-between the exclamation mark and the operator) can be used to negate the
-result.
-
-@Example
-.nr xxx 1
-.ie !r xxx \
-true
-.el \
-false
-    @result{} false
-@endExample
-
-A whitespace after @samp{!} always evaluates to zero (this bizarre
-behaviour is due to compatibility with @acronym{UNIX} @code{troff}).
-
-@Example
-.nr xxx 1
-.ie ! r xxx \
-true
-.el \
-false
-    @result{} r xxx true
-@endExample
-
-It is possible to omit the whitespace before the argument to the
-@samp{r}, @samp{d}, and @samp{c} operators.
-
-@xref{Expressions}.
-
-@c ---------------------------------------------------------------------
-
-@node if-else, while, Operators in Conditionals, Conditionals and Loops
-@subsection if-else
-@cindex if-else
-
-@code{gtroff} has if-then-else constructs like other languages, although
-the formatting can be painful.
-
-@Defreq {if, expr anything}
-
-Evaluate the expression @var{expr}, and executes @var{anything} (the
-remainder of the line) if @var{expr} evaluates to a value greater than
-zero (true).  @var{anything} is interpreted as though it was on a line
-by itself (except that leading spaces are swallowed).
-@xref{Operators in Conditionals}, for more info.
-
-@Example
-.nr xxx 1
-.nr yyy 2
-.if ((\n[xxx] == 1) & (\n[yyy] == 2)) true
-    @result{} true
-@endExample
-@endDefreq
-
-@Defreq {nop, anything}
-Executes @var{anything}.  This is similar to @code{.if@tie{}1}.
-@endDefreq
-
-@DefreqList {ie, expr anything}
-@DefreqListEndx {el, anything}
-Use the @code{ie} and @code{el} requests to write an if-then-else.  The
-first request is the `if' part and the latter is the `else' part.
-
-@Example
-.ie n .ls 2 \" double-spacing in nroff
-.el   .ls 1 \" single-spacing in troff
-@endExample
-@endDefreq
-
-@c there is a bug in makeinfo <= 4.1a: you can't have `@{' as an argument
-@c to @deffn
-@c
-@c and in 4.2 you still can't use @{ in macros.
-
-@c @DefescList {\@{, , , }
-@c @DefescListEnd {\@}, , , }
-@deffn Escape @t{\@{}
-@deffnx Escape @t{\@}}
-@esindex \@{
-@esindex \@}
-@cindex begin of conditional block (@code{\@{})
-@cindex end of conditional block (@code{\@}})
-@cindex conditional block, begin (@code{\@{})
-@cindex conditional block, end (@code{\@}})
-@cindex block, conditional, begin (@code{\@{})
-@cindex block, condititional, end (@code{\@}})
-In many cases, an if (or if-else) construct needs to execute more than
-one request.  This can be done using the escapes @code{\@{} (which must
-start the first line) and @code{\@}} (which must end the last line).
-
-@Example
-.ie t \@{\
-.    ds lq ``
-.    ds rq ''
-.\@}
-.el \@{\
-.    ds lq ""
-.    ds rq ""
-.\@}
-@endExample
-@c @endDefesc
-@end deffn
-
-@xref{Expressions}.
-
-@c ---------------------------------------------------------------------
-
-@node while,  , if-else, Conditionals and Loops
-@subsection while
-@cindex while
-
-@code{gtroff} provides a looping construct using the @code{while}
-request, which is used much like the @code{if} (and related) requests.
-
-@Defreq {while, expr anything}
-Evaluate the expression @var{expr}, and repeatedly execute
-@var{anything} (the remainder of the line) until @var{expr} evaluates
-to@tie{}0.
-
-@Example
-.nr a 0 1
-.while (\na < 9) \@{\
-\n+a,
-.\@}
-\n+a
-    @result{} 1, 2, 3, 4, 5, 6, 7, 8, 9, 10
-@endExample
-
-Some remarks.
-
-@cindex @code{de} request, and @code{while}
-@itemize @bullet
-@item
-The body of a @code{while} request is treated like the body of a
-@code{de} request: @code{gtroff} temporarily stores it in a macro that
-is deleted after the loop has been exited.  It can considerably slow
-down a macro if the body of the @code{while} request (within the macro)
-is large.  Each time the macro is executed, the @code{while} body is
-parsed and stored again as a temporary macro.
-
-@Example
-.de xxx
-.  nr num 10
-.  while (\\n[num] > 0) \@{\
-.    \" many lines of code
-.    nr num -1
-.  \@}
-..
-@endExample
-
-@cindex recursive macros
-@cindex macros, recursive
-@noindent
-The traditional and ofter better solution (@acronym{UNIX} @code{troff}
-doesn't have the @code{while} request) is to use a recursive macro
-instead that is parsed only once during its definition.
-
-@Example
-.de yyy
-.  if (\\n[num] > 0) \@{\
-.    \" many lines of code
-.    nr num -1
-.    yyy
-.  \@}
-..
-.
-.de xxx
-.  nr num 10
-.  yyy
-..
-@endExample
-
-@noindent
-Note that the number of available recursion levels is set to@tie{}1000
-(this is a compile-time constant value of @code{gtroff}).
-
-@item
-The closing brace of a @code{while} body must end a line.
-
-@Example
-.if 1 \@{\
-.  nr a 0 1
-.  while (\n[a] < 10) \@{\
-.    nop \n+[a]
-.\@}\@}
-    @result{} unbalanced \@{ \@}
-@endExample
-@end itemize
-@endDefreq
-
-@Defreq {break, }
-@cindex @code{while} request, confusing with @code{br}
-@cindex @code{break} request, in a @code{while} loop
-@cindex @code{continue} request, in a @code{while} loop
-Break out of a @code{while} loop.  Be sure not to confuse this with the
-@code{br} request (causing a line break).
-@endDefreq
-
-@Defreq {continue, }
-Finish the current iteration of a @code{while} loop, immediately
-restarting the next iteration.
-@endDefreq
-
-@xref{Expressions}.
-
-
-@c =====================================================================
-
-@node Writing Macros, Page Motions, Conditionals and Loops, gtroff Reference
-@section Writing Macros
-@cindex writing macros
-@cindex macros, writing
-
-A @dfn{macro} is a collection of text and embedded commands that can be
-invoked multiple times.  Use macros to define common operations.
-@xref{Strings}, for a (limited) alternative syntax to call macros.
-
-Although the following requests can be used to create macros,
-simply using an undefined macro will cause it to be defined as empty.
-@xref{Identifiers}.
-
-@DefreqList {de, name [@Var{end}]}
-@DefreqItemx {de1, name [@Var{end}]}
-@DefreqItemx {dei, name [@Var{end}]}
-@DefreqListEndx {dei1, name [@Var{end}]}
-Define a new macro named @var{name}.  @code{gtroff} copies subsequent
-lines (starting with the next one) into an internal buffer until it
-encounters the line @samp{..} (two dots).  If the optional second
-argument to @code{de} is present it is used as the macro closure
-request instead of @samp{..}.
-
-There can be whitespace after the first dot in the line containing the
-ending token (either @samp{.} or macro @samp{@var{end}}).  Don't insert
-a tab character immediately after the @samp{..}, otherwise it isn't
-recognized as the end-of-macro symbol.@footnote{While it is possible to
-define and call a macro @samp{.} with
-
-@Example
-.de .
-.  tm foo
-..
-.
-..    \" This calls macro `.'!
-@endExample
-
-@noindent
-you can't use this as the end-of-macro macro: during a macro definition,
-@samp{..} is never handled as a call to @samp{.}, even if you say
-@samp{.de foo .} explicitly.}
-
-Here a small example macro called @samp{P} that causes a break and
-inserts some vertical space.  It could be used to separate paragraphs.
-
-@Example
-.de P
-.  br
-.  sp .8v
-..
-@endExample
-
-The following example defines a macro within another.  Remember that
-expansion must be protected twice; once for reading the macro and once
-for executing.
-
-@Example
-\# a dummy macro to avoid a warning
-.de end
-..
-.
-.de foo
-.  de bar end
-.    nop \f[B]Hallo \\\\$1!\f[]
-.  end
-..
-.
-.foo
-.bar Joe
-    @result{} @b{Hallo Joe!}
-@endExample
-
-@noindent
-Since @code{\f} has no expansion, it isn't necessary to protect its
-backslash.  Had we defined another macro within @code{bar} that takes a
-parameter, eight backslashes would be necessary before @samp{$1}.
-
-The @code{de1} request turns off compatibility mode while executing the
-macro.  On entry, the current compatibility mode is saved and restored
-at exit.
-
-@Example
-.nr xxx 12345
-.
-.de aa
-The value of xxx is \\n[xxx].
-..
-.de1 bb
-The value of xxx ix \\n[xxx].
-..
-.
-.cp 1
-.
-.aa
-    @result{} warning: number register `[' not defined
-    @result{} The value of xxx is 0xxx].
-.bb
-    @result{} The value of xxx ix 12345.
-@endExample
-
-The @code{dei} request defines a macro indirectly.  That is, it expands
-strings whose names are @var{name} or @var{end} before performing the
-append.
-
-This:
-
-@Example
-.ds xx aa
-.ds yy bb
-.dei xx yy
-@endExample
-
-@noindent
-is equivalent to:
-
-@Example
-.de aa bb
-@endExample
-
-The @code{dei1} request is similar to @code{dei} but with compatibility
-mode switched off during execution of the defined macro.
-
-If compatibility mode is on, @code{de} (and @code{dei}) behave similar
-to @code{de1} (and @code{dei1}): A `compatibility save' token is
-inserted at the beginning, and a `compatibility restore' token at the
-end, with compatibility mode switched on during execution.  @xref{Gtroff
-Internals}, for more information on switching compatibility mode on and
-off in a single document.
-
-@pindex trace.tmac
-Using @file{trace.tmac}, you can trace calls to @code{de} and
-@code{de1}.
-
-Note that macro identifiers are shared with identifiers for strings and
-diversions.
-
-@xref{als,,the description of the @code{als} request}, for possible
-pitfalls if redefining a macro that has been aliased.
-@endDefreq
-
-@DefreqList {am, name [@Var{end}]}
-@DefreqItemx {am1, name [@Var{end}]}
-@DefreqItemx {ami, name [@Var{end}]}
-@DefreqListEndx {ami1, name [@Var{end}]}
-@cindex appending to a macro (@code{am})
-@cindex macro, appending (@code{am})
-Works similarly to @code{de} except it appends onto the macro named
-@var{name}.  So, to make the previously defined @samp{P} macro actually
-do indented instead of block paragraphs, add the necessary code to the
-existing macro like this:
-
-@Example
-.am P
-.ti +5n
-..
-@endExample
-
-The @code{am1} request turns off compatibility mode while executing the
-appended macro piece.  To be more precise, a @dfn{compatibility save}
-input token is inserted at the beginning of the appended code, and a
-@dfn{compatibility restore} input token at the end.
-
-The @code{ami} request appends indirectly, meaning that @code{gtroff}
-expands strings whose names are @var{name} or @var{end} before
-performing the append.
-
-The @code{ami1} request is similar to @code{ami} but compatibility mode
-is switched off during execution of the defined macro.
-
-@pindex trace.tmac
-Using @file{trace.tmac}, you can trace calls to @code{am} and
-@code{am1}.
-@endDefreq
-
-@xref{Strings}, for the @code{als} and @code{rn} request to create an
-alias and rename a macro, respectively.
-
-The @code{de}, @code{am}, @code{di}, @code{da}, @code{ds}, and @code{as}
-requests (together with its variants) only create a new object if the
-name of the macro, diversion or string diversion is currently undefined
-or if it is defined to be a request; normally they modify the value of
-an existing object.
-
-@Defreq {return, [@Var{anything}]}
-Exit a macro, immediately returning to the caller.
-
-If called with an argument, exit twice, namely the current macro and the
-macro one level higher.  This is used to define a wrapper macro for
-@code{return} in @file{trace.tmac}.
-@endDefreq
-
-@menu
-* Copy-in Mode::
-* Parameters::
-@end menu
-
-@c ---------------------------------------------------------------------
-
-@node Copy-in Mode, Parameters, Writing Macros, Writing Macros
-@subsection Copy-in Mode
-@cindex copy mode
-@cindex copy-in mode
-@cindex mode, copy
-@cindex mode, copy-in
-
-@cindex @code{\n}, when reading text for a macro
-@cindex @code{\$}, when reading text for a macro
-@cindex @code{\*}, when reading text for a macro
-@cindex @code{\\}, when reading text for a macro
-@cindex \@key{RET}, when reading text for a macro
-When @code{gtroff} reads in the text for a macro, string, or diversion,
-it copies the text (including request lines, but excluding escapes) into
-an internal buffer.  Escapes are converted into an internal form, except
-for @code{\n}, @code{\$}, @code{\*}, @code{\\} and @code{\@key{RET}},
-which are evaluated and inserted into the text where the escape was
-located.  This is known as @dfn{copy-in} mode or @dfn{copy} mode.
-
-What this means is that you can specify when these escapes are to be
-evaluated (either at copy-in time or at the time of use) by insulating
-the escapes with an extra backslash.  Compare this to the @code{\def}
-and @code{\edef} commands in @TeX{}.
-
-The following example prints the numbers 20 and@tie{}10:
-
-@Example
-.nr x 20
-.de y
-.nr x 10
-\&\nx
-\&\\nx
-..
-.y
-@endExample
-
-@c ---------------------------------------------------------------------
-
-@node Parameters,  , Copy-in Mode, Writing Macros
-@subsection Parameters
-@cindex parameters
-
-The arguments to a macro or string can be examined using a variety of
-escapes.
-
-@Defreg {.$}
-@cindex number of arguments register (@code{.$})
-The number of arguments passed to a macro or string.  This is a
-read-only number register.
-
-Note that the @code{shift} request can change its value.
-@endDefreg
-
-Any individual argument can be retrieved with one of the following
-escapes:
-
-@DefescList {\\$, , n, }
-@DefescItem {\\$, @Lparen{}, nn, }
-@DefescListEnd {\\$, @Lbrack{}, nnn, @Rbrack{}}
-@cindex copy-in mode, and macro arguments
-@cindex mode, copy-in, and macro arguments
-@cindex macro, arguments (@code{\$})
-@cindex arguments, macro (@code{\$})
-Retrieve the @var{n}@dmn{th}, @var{nn}@dmn{th} or @var{nnn}@dmn{th}
-argument.  As usual, the first form only accepts a single number (larger
-than zero), the second a two-digit number (larger or equal to@tie{}10),
-and the third any positive integer value (larger than zero).  Macros and
-strings can have an unlimited number of arguments.  Note that due to
-copy-in mode, use two backslashes on these in actual use to prevent
-interpolation until the macro is actually invoked.
-@endDefesc
-
-@Defreq {shift, [@Var{n}]}
-Shift the arguments 1@tie{}position, or as many positions as specified
-by its argument.  After executing this request, argument@tie{}@var{i}
-becomes argument @math{@var{i}-@var{n}}; arguments 1 to@tie{}@var{n} are
-no longer available.  Shifting by negative amounts is currently
-undefined.
-
-The register @code{.$} is adjusted accordingly.
-@endDefreq
-
-@DefescList {\\$*, , , }
-@DefescListEndx {\\$@@, , , }
-In some cases it is convenient to use all of the arguments at once (for
-example, to pass the arguments along to another macro).  The @code{\$*}
-escape concatenates all the arguments separated by spaces.  A similar
-escape is @code{\$@@}, which concatenates all the arguments with each
-surrounded by double quotes, and separated by spaces.  If not in
-compatibility mode, the input level of double quotes is preserved (see
-@ref{Request and Macro Arguments}).
-@endDefesc
-
-@Defesc {\\$^, , , }
-Handle the parameters of a macro as if they were an argument to the
-@code{ds} or similar requests.
-
-@Example
-.de foo
-.  tm $1=`\\$1'
-.  tm $2=`\\$2'
-.  tm $*=`\\$*'
-.  tm $@@=`\\$@@'
-.  tm $^=`\\$^'
-..
-.foo " This is a "test"
-    @result{} $1=` This is a '
-    @result{} $2=`test"'
-    @result{} $*=` This is a  test"'
-    @result{} $@@=`" This is a " "test""'
-    @result{} $^=`" This is a "test"'
-@endExample
-
-This escape is useful mainly for macro packages like @file{trace.tmac},
-which redefines some requests and macros for debugging purposes.
-@endDefesc
-
-@Defesc {\\$0, , , }
-@cindex macro name register (@code{\$0})
-@cindex @code{als} request, and @code{\$0}
-The name used to invoke the current macro.  The @code{als} request can
-make a macro have more than one name.
-
-If a macro is called as a string (within another macro), the value of
-@code{\$0} isn't changed.
-
-@Example
-.de foo
-.  tm \\$0
-..
-.als foo bar
-.
-@endExample
-@Example
-.de aaa
-.  foo
-..
-.de bbb
-.  bar
-..
-.de ccc
-\\*[foo]\\
-..
-.de ddd
-\\*[bar]\\
-..
-.
-@endExample
-@Example
-.aaa
-    @result{} foo
-.bbb
-    @result{} bar
-.ccc
-    @result{} ccc
-.ddd
-    @result{} ddd
-@endExample
-@endDefesc
-
-@xref{Request and Macro Arguments}.
-
-
-@c =====================================================================
-
-@node Page Motions, Drawing Requests, Writing Macros, gtroff Reference
-@section Page Motions
-@cindex page motions
-@cindex motions, page
-
-@xref{Manipulating Spacing}, for a discussion of the main request for
-vertical motion, @code{sp}.
-
-@DefreqList {mk, [@Var{reg}]}
-@DefreqListEndx {rt, [@Var{dist}]}
-@cindex marking vertical page location (@code{mk})
-@cindex page location, vertical, marking (@code{mk})
-@cindex location, vertical, page, marking (@code{mk})
-@cindex vertical page location, marking (@code{mk})
-@cindex returning to marked vertical page location (@code{rt})
-@cindex page location, vertical, returning to marked (@code{rt})
-@cindex location, vertical, page, returning to marked (@code{rt})
-@cindex vertical page location, returning to marked (@code{rt})
-The request @code{mk} can be used to mark a location on a page, for
-movement to later.  This request takes a register name as an argument in
-which to store the current page location.  With no argument it stores
-the location in an internal register.  The results of this can be used
-later by the @code{rt} or the @code{sp} request (or the @code{\v}
-escape).
-
-The @code{rt} request returns @emph{upwards} to the location marked with
-the last @code{mk} request.  If used with an argument, return to a
-position which distance from the top of the page is @var{dist} (no
-previous call to @code{mk} is necessary in this case).  Default scaling
-indicator is @samp{v}.
-
-Here a primitive solution for a two-column macro.
-
-@Example
-.nr column-length 1.5i
-.nr column-gap 4m
-.nr bottom-margin 1m
-.
-@endExample
-@Example
-.de 2c
-.  br
-.  mk
-.  ll \\n[column-length]u
-.  wh -\\n[bottom-margin]u 2c-trap
-.  nr right-side 0
-..
-.
-@endExample
-@Example
-.de 2c-trap
-.  ie \\n[right-side] \@{\
-.    nr right-side 0
-.    po -(\\n[column-length]u + \\n[column-gap]u)
-.    \" remove trap
-.    wh -\\n[bottom-margin]u
-.  \@}
-.  el \@{\
-.    \" switch to right side
-.    nr right-side 1
-.    po +(\\n[column-length]u + \\n[column-gap]u)
-.    rt
-.  \@}
-..
-.
-@endExample
-@Example
-.pl 1.5i
-.ll 4i
-This is a small test that shows how the
-rt request works in combination with mk.
-
-.2c
-Starting here, text is typeset in two columns.
-Note that this implementation isn't robust
-and thus not suited for a real two-column
-macro.
-@endExample
-
-Result:
-
-@Example
-This is a small test that shows how the
-rt request works in combination with mk.
-
-Starting  here,    isn't    robust
-text is typeset    and   thus  not
-in two columns.    suited  for   a
-Note that  this    real two-column
-implementation     macro.
-@endExample
-@endDefreq
-
-The following escapes give fine control of movements about the page.
-
-@Defesc {\\v, ', e, '}
-@cindex vertical motion (@code{\v})
-@cindex motion, vertical (@code{\v})
-Move vertically, usually from the current location on the page (if no
-absolute position operator @samp{|} is used).  The argument@tie{}@var{e}
-specifies the distance to move; positive is downwards and negative
-upwards.  The default scaling indicator for this escape is @samp{v}.
-Beware, however, that @code{gtroff} continues text processing at the
-point where the motion ends, so you should always balance motions to
-avoid interference with text processing.
-
-@code{\v} doesn't trigger a trap.  This can be quite useful; for
-example, consider a page bottom trap macro that prints a marker in the
-margin to indicate continuation of a footnote or something similar.
-@endDefesc
-
-There are some special-case escapes for vertical motion.
-
-@Defesc {\\r, , , }
-Move upwards@tie{}1@dmn{v}.
-@endDefesc
-
-@Defesc {\\u, , , }
-Move upwards@tie{}.5@dmn{v}.
-@endDefesc
-
-@Defesc {\\d, , , }
-Move down@tie{}.5@dmn{v}.
-@endDefesc
-
-@Defesc {\\h, ', e, '}
-@cindex inserting horizontal space (@code{\h})
-@cindex horizontal space (@code{\h})
-@cindex space, horizontal (@code{\h})
-@cindex horizontal motion (@code{\h})
-@cindex motion, horizontal (@code{\h})
-Move horizontally, usually from the current location (if no absolute
-position operator @samp{|} is used).  The expression@tie{}@var{e}
-indicates how far to move: positive is rightwards and negative
-leftwards.  The default scaling indicator for this escape is @samp{m}.
-
-This horizontal space is not discarded at the end of a line.  To insert
-discardable space of a certain length use the @code{ss} request.
-@endDefesc
-
-There are a number of special-case escapes for horizontal motion.
-
-@Defesc {\\@key{SP}, , , }
-@cindex space, unbreakable
-@cindex unbreakable space
-An unbreakable and unpaddable (i.e.@: not expanded during filling)
-space.  (Note: This is a backslash followed by a space.)
-@endDefesc
-
-@Defesc {\\~, , , }
-An unbreakable space that stretches like a normal inter-word space when
-a line is adjusted.
-@endDefesc
-
-@Defesc {\\|, , , }
-A 1/6@dmn{th} em space.  Ignored for TTY output devices (rounded to
-zero).
-
-However, if there is a glyph defined in the current font file with name
-@code{\|} (note the leading backslash), the width of this glyph is used
-instead (even for TTYs).
-@endDefesc
-
-@Defesc {\\^, , , }
-A 1/12@dmn{th} em space.  Ignored for TTY output devices (rounded to
-zero).
-
-However, if there is a glyph defined in the current font file with name
-@code{\^} (note the leading backslash), the width of this glyph is used
-instead (even for TTYs).
-@endDefesc
-
-@Defesc {\\0, , , }
-@cindex space, width of a digit (@code{\0})
-@cindex digit width space (@code{\0})
-A space the size of a digit.
-@endDefesc
-
-The following string sets the @TeX{} logo:
-
-@Example
-.ds TeX T\h'-.1667m'\v'.224m'E\v'-.224m'\h'-.125m'X
-@endExample
-
-@DefescList {\\w, ', text, '}
-@DefregItemx {st}
-@DefregItemx {sb}
-@DefregItemx {rst}
-@DefregItemx {rsb}
-@DefregItemx {ct}
-@DefregItemx {ssc}
-@DefregListEndx {skw}
-@cindex width escape (@code{\w})
-Return the width of the specified @var{text} in basic units.  This
-allows horizontal movement based on the width of some arbitrary text
-(e.g.@: given as an argument to a macro).
-
-@Example
-The length of the string `abc' is \w'abc'u.
-    @result{} The length of the string `abc' is 72u.
-@endExample
-
-Font changes may occur in @var{text}, which don't affect current
-settings.
-
-After use, @code{\w} sets several registers:
-
-@table @code
-@item st
-@itemx sb
-The highest and lowest point of the baseline, respectively, in
-@var{text}.
-
-@item rst
-@itemx rsb
-Like the @code{st} and @code{sb} registers, but takes account of the
-heights and depths of glyphs.  In other words, this gives the highest
-and lowest point of @var{text}.  Values below the baseline are negative.
-
-@item ct
-Defines the kinds of glyphs occurring in @var{text}:
-
-@table @asis
-@item 0
-only short glyphs, no descenders or tall glyphs.
-
-@item 1
-at least one descender.
-
-@item 2
-at least one tall glyph.
-
-@item 3
-at least one each of a descender and a tall glyph.
-@end table
-
-@item ssc
-The amount of horizontal space (possibly negative) that should be added
-to the last glyph before a subscript.
-
-@item skw
-How far to right of the center of the last glyph in the @code{\w}
-argument, the center of an accent from a roman font should be placed
-over that glyph.
-@end table
-@endDefesc
-
-@DefescList {\\k, , p, }
-@DefescItem {\\k, @Lparen{}, ps, }
-@DefescListEnd {\\k, @Lbrack{}, position, @Rbrack{}}
-@cindex saving horizontal input line position (@code{\k})
-@cindex horizontal input line position, saving (@code{\k})
-@cindex input line position, horizontal, saving (@code{\k})
-@cindex position, horizontal input line, saving (@code{\k})
-@cindex line, input, horizontal position, saving (@code{\k})
-Store the current horizontal position in the @emph{input} line in number
-register with name @var{position} (one-character name@tie{}@var{p},
-two-character name @var{ps}).  Use this, for example, to return to the
-beginning of a string for highlighting or other decoration.
-@endDefesc
-
-@Defreg {hp}
-@cindex horizontal input line position register (@code{hp})
-@cindex input line, horizontal position, register (@code{hp})
-@cindex position, horizontal, in input line, register (@code{hp})
-@cindex line, input, horizontal position, register (@code{hp})
-The current horizontal position at the input line.
-@endDefreg
-
-@Defreg {.k}
-@cindex horizontal output line position register (@code{.k})
-@cindex output line, horizontal position, register (@code{.k})
-@cindex position, horizontal, in output line, register (@code{.k})
-@cindex line, output, horizontal position, register (@code{.k})
-A read-only number register containing the current horizontal output
-position (relative to the current indentation).
-@endDefreg
-
-@Defesc {\\o, ', abc, '}
-@cindex overstriking glyphs (@code{\o})
-@cindex glyphs, overstriking (@code{\o})
-Overstrike glyphs @var{a}, @var{b}, @var{c}, @dots{}; the glyphs are
-centered, and the resulting spacing is the largest width of the affected
-glyphs.
-@endDefesc
-
-@Defesc {\\z, , g, }
-@cindex zero-width printing (@code{\z}, @code{\Z})
-@cindex printing, zero-width (@code{\z}, @code{\Z})
-Print glyph @var{g} with zero width, i.e., without spacing.  Use this to
-overstrike glyphs left-aligned.
-@endDefesc
-
-@Defesc {\\Z, ', anything, '}
-@cindex zero-width printing (@code{\z}, @code{\Z})
-@cindex printing, zero-width (@code{\z}, @code{\Z})
-Print @var{anything}, then restore the horizontal and vertical position.
-The argument may not contain tabs or leaders.
-
-The following is an example of a strike-through macro:
-
-@Example
-.de ST
-.nr ww \w'\\$1'
-\Z@@\v'-.25m'\l'\\n[ww]u'@@\\$1
-..
-.
-This is
-.ST "a test"
-an actual emergency!
-@endExample
-@endDefesc
-
-
-@c =====================================================================
-
-@node Drawing Requests, Traps, Page Motions, gtroff Reference
-@section Drawing Requests
-@cindex drawing requests
-@cindex requests for drawing
-
-@code{gtroff} provides a number of ways to draw lines and other figures
-on the page.  Used in combination with the page motion commands (see
-@ref{Page Motions}, for more info), a wide variety of figures can be
-drawn.  However, for complex drawings these operations can be quite
-cumbersome, and it may be wise to use graphic preprocessors like
-@code{gpic} or @code{ggrn}.  @xref{gpic}, and @ref{ggrn}, for more
-information.
-
-All drawing is done via escapes.
-
-@DefescList {\\l, ', l, '}
-@DefescListEnd {\\l, ', lg, '}
-@cindex drawing horizontal lines (@code{\l})
-@cindex horizontal line, drawing (@code{\l})
-@cindex line, horizontal, drawing (@code{\l})
-Draw a line horizontally.  @var{l} is the length of the line to be
-drawn.  If it is positive, start the line at the current location and
-draw to the right; its end point is the new current location.  Negative
-values are handled differently: The line starts at the current location
-and draws to the left, but the current location doesn't move.
-
-@var{l} can also be specified absolutely (i.e.@: with a leading
-@samp{|}), which draws back to the beginning of the input line.  Default
-scaling indicator is @samp{m}.
-
-@cindex underscore glyph (@code{\[ru]})
-@cindex glyph, underscore (@code{\[ru]})
-@cindex line drawing glyph
-@cindex glyph, for line drawing
-The optional second parameter@tie{}@var{g} is a glyph to draw the line
-with.  If this second argument is not specified, @code{gtroff} uses the
-underscore glyph, @code{\[ru]}.
-
-@cindex zero width space character (@code{\&})
-@cindex character, zero width space (@code{\&})
-@cindex space character, zero width (@code{\&})
-To separate the two arguments (to prevent @code{gtroff} from
-interpreting a drawing glyph as a scaling indicator if the glyph is
-represented by a single character) use @code{\&}.
-
-Here a small useful example:
-
-@Example
-.de box
-\[br]\\$*\[br]\l'|0\[rn]'\l'|0\[ul]'
-..
-@endExample
-
-@noindent
-Note that this works by outputting a box rule (a vertical line), then
-the text given as an argument and then another box rule.  Finally, the
-line drawing escapes both draw from the current location to the
-beginning of the @emph{input} line -- this works because the line length
-is negative, not moving the current point.
-@endDefesc
-
-@DefescList {\\L, ', l, '}
-@DefescListEnd {\\L, ', lg, '}
-@cindex drawing vertical lines (@code{\L})
-@cindex vertical line drawing (@code{\L})
-@cindex line, vertical, drawing (@code{\L})
-@cindex line drawing glyph
-@cindex glyph for line drawing
-@cindex box rule glyph (@code{\[br]})
-@cindex glyph, box rule (@code{\[br]})
-Draw vertical lines.  Its parameters are similar to the @code{\l}
-escape, except that the default scaling indicator is @samp{v}.  The
-movement is downwards for positive values, and upwards for negative
-values.  The default glyph is the box rule glyph, @code{\[br]}.  As with
-the vertical motion escapes, text processing blindly continues where the
-line ends.
-
-@Example
-This is a \L'3v'test.
-@endExample
-
-@noindent
-Here the result, produced with @code{grotty}.
-
-@Example
-This is a
-          |
-          |
-          |test.
-@endExample
-@endDefesc
-
-@Defesc {\\D, ', command arg @dots{}, '}
-The @code{\D} escape provides a variety of drawing functions.  Note that
-on character devices, only vertical and horizontal lines are supported
-within @code{grotty}; other devices may only support a subset of the
-available drawing functions.
-
-The default scaling indicator for all subcommands of @code{\D} is
-@samp{m} for horizontal distances and @samp{v} for vertical ones.
-Exceptions are @w{@code{\D'f @dots{}'}} and @w{@code{\D't @dots{}'}},
-which use @code{u} as the default, and @w{@code{\D'F@var{x} @dots{}'}},
-which arguments are treated similar to the @code{defcolor} request.
-
-@table @code
-@item \D'l @var{dx} @var{dy}'
-@cindex line, drawing (@w{@code{\D'l @dots{}'}})
-@cindex drawing a line (@w{@code{\D'l @dots{}'}})
-Draw a line from the current location to the relative point specified by
-(@var{dx},@var{dy}), where positive values mean down and right,
-respectively.  The end point of the line is the new current location.
-
-The following example is a macro for creating a box around a text
-string; for simplicity, the box margin is taken as a fixed value,
-0.2@dmn{m}.
-
-@Example
-.de BOX
-.  nr @@wd \w'\\$1'
-\h'.2m'\
-\h'-.2m'\v'(.2m - \\n[rsb]u)'\
-\D'l 0 -(\\n[rst]u - \\n[rsb]u + .4m)'\
-\D'l (\\n[@@wd]u + .4m) 0'\
-\D'l 0 (\\n[rst]u - \\n[rsb]u + .4m)'\
-\D'l -(\\n[@@wd]u + .4m) 0'\
-\h'.2m'\v'-(.2m - \\n[rsb]u)'\
-\\$1\
-\h'.2m'
-..
-@endExample
-
-@noindent
-First, the width of the string is stored in register @code{@@wd}.  Then,
-four lines are drawn to form a box, properly offset by the box margin.
-The registers @code{rst} and @code{rsb} are set by the @code{\w} escape,
-containing the largest height and depth of the whole string.
-
-@item \D'c @var{d}'
-@cindex circle, drawing (@w{@code{\D'c @dots{}'}})
-@cindex drawing a circle (@w{@code{\D'c @dots{}'}})
-Draw a circle with a diameter of@tie{}@var{d} with the leftmost point at
-the current position.  After drawing, the current location is positioned
-at the rightmost point of the circle.
-
-@item \D'C @var{d}'
-@cindex circle, solid, drawing (@w{@code{\D'C @dots{}'}})
-@cindex drawing a solid circle (@w{@code{\D'C @dots{}'}})
-@cindex solid circle, drawing (@w{@code{\D'C @dots{}'}})
-Draw a solid circle with the same parameters and behaviour as an
-outlined circle.  No outline is drawn.
-
-@item \D'e @var{x} @var{y}'
-@cindex drawing an ellipse (@w{@code{\D'e @dots{}'}})
-@cindex ellipse, drawing (@w{@code{\D'e @dots{}'}})
-Draw an ellipse with a horizontal diameter of @var{x} and a vertical
-diameter of @var{y} with the leftmost point at the current position.
-After drawing, the current location is positioned at the rightmost point
-of the ellipse.
-
-@item \D'E @var{x} @var{y}'
-@cindex ellipse, solid, drawing (@w{@code{\D'E @dots{}'}})
-@cindex drawing a solid ellipse (@w{@code{\D'E @dots{}'}})
-@cindex solid ellipse, drawing (@w{@code{\D'E @dots{}'}})
-Draw a solid ellipse with the same parameters and behaviour as an
-outlined ellipse.  No outline is drawn.
-
-@item \D'a @var{dx1} @var{dy1} @var{dx2} @var{dy2}'
-@cindex arc, drawing (@w{@code{\D'a @dots{}'}})
-@cindex drawing an arc (@w{@code{\D'a @dots{}'}})
-Draw an arc clockwise from the current location through the two
-specified relative locations (@var{dx1},@var{dy1}) and
-(@var{dx2},@var{dy2}).  The coordinates of the first point are relative
-to the current position, and the coordinates of the second point are
-relative to the first point.  After drawing, the current position is
-moved to the final point of the arc.
-
-@item \D'~ @var{dx1} @var{dy1} @var{dx2} @var{dy2} @dots{}'
-@cindex drawing a spline (@w{@code{\D'~ @dots{}'}})
-@cindex spline, drawing (@w{@code{\D'~ @dots{}'}})
-Draw a spline from the current location to the relative point
-(@var{dx1},@var{dy1}) and then to (@var{dx2},@var{dy2}), and so on.  The
-current position is moved to the terminal point of the drawn curve.
-
-@item \D'f @var{n}'
-@cindex gray shading (@w{@code{\D'f @dots{}'}})
-@cindex shading filled objects (@w{@code{\D'f @dots{}'}})
-Set the shade of gray to be used for filling solid objects
-to@tie{}@var{n}; @var{n}@tie{}must be an integer between 0
-and@tie{}1000, where 0 corresponds solid white and 1000 to solid black,
-and values in between correspond to intermediate shades of gray.  This
-applies only to solid circles, solid ellipses, and solid polygons.  By
-default, a level of 1000 is used.
-
-Despite of being silly, the current point is moved horizontally to the
-right by@tie{}@var{n}.
-
-@cindex @w{@code{\D'f @dots{}'}} and horizontal resolution
-Don't use this command!  It has the serious drawback that it is always
-rounded to the next integer multiple of the horizontal resolution (the
-value of the @code{hor} keyword in the @file{DESC} file).  Use @code{\M}
-(@pxref{Colors}) or @w{@code{\D'Fg @dots{}'}} instead.
-
-@item \D'p @var{dx1} @var{dy1} @var{dx2} @var{dy2} @dots{}'
-@cindex drawing a polygon (@w{@code{\D'p @dots{}'}})
-@cindex polygon, drawing (@w{@code{\D'p @dots{}'}})
-Draw a polygon from the current location to the relative position
-(@var{dx1},@var{dy1}) and then to (@var{dx2},@var{dy2}) and so on.  When
-the specified data points are exhausted, a line is drawn back to the
-starting point.  The current position is changed by adding the sum of
-all arguments with odd index to the actual horizontal position and the
-even ones to the vertical position.
-
-@item \D'P @var{dx1} @var{dy1} @var{dx2} @var{dy2} @dots{}'
-@cindex polygon, solid, drawing (@w{@code{\D'P @dots{}'}})
-@cindex drawing a solid polygon (@w{@code{\D'P @dots{}'}})
-@cindex solid polygon, drawing (@w{@code{\D'P @dots{}'}})
-Draw a solid polygon with the same parameters and behaviour as an
-outlined polygon.  No outline is drawn.
-
-Here a better variant of the box macro to fill the box with some color.
-Note that the box must be drawn before the text since colors in
-@code{gtroff} are not transparent; the filled polygon would hide the
-text completely.
-
-@Example
-.de BOX
-.  nr @@wd \w'\\$1'
-\h'.2m'\
-\h'-.2m'\v'(.2m - \\n[rsb]u)'\
-\M[lightcyan]\
-\D'P 0 -(\\n[rst]u - \\n[rsb]u + .4m) \
-     (\\n[@@wd]u + .4m) 0 \
-     0 (\\n[rst]u - \\n[rsb]u + .4m) \
-     -(\\n[@@wd]u + .4m) 0'\
-\h'.2m'\v'-(.2m - \\n[rsb]u)'\
-\M[]\
-\\$1\
-\h'.2m'
-..
-@endExample
-
-If you want a filled polygon that has exactly the same size as an
-unfilled one, you must draw both an unfilled and a filled polygon.  A
-filled polygon is always smaller than an unfilled one because the latter
-uses straight lines with a given line thickness to connect the polygon's
-corners, while the former simply fills the area defined by the
-coordinates.
-
-@Example
-\h'1i'\v'1i'\
-\# increase line thickness
-\Z'\D't 5p''\
-\# draw unfilled polygon
-\Z'\D'p 3 3 -6 0''\
-\# draw filled polygon
-\Z'\D'P 3 3 -6 0''
-@endExample
-
-@item \D't @var{n}'
-@cindex line thickness (@w{@code{\D't @dots{}'}})
-@cindex thickness of lines (@w{@code{\D't @dots{}'}})
-Set the current line thickness to @var{n}@tie{}machine units.  A value
-of zero selects the smallest available line thickness.  A negative value
-makes the line thickness proportional to the current point size (this is
-the default behaviour of @acronym{AT&T} @code{troff}).
-
-Despite of being silly, the current point is moved horizontally to the
-right by@tie{}@var{n}.
-
-@item \D'F@var{scheme} @var{color_components}'
-@cindex unnamed fill colors (@code{\D'F@dots{}'})
-@cindex fill colors, unnamed (@code{\D'F@dots{}'})
-@cindex colors, fill, unnamed (@code{\D'F@dots{}'})
-Change current fill color.  @var{scheme} is a single letter denoting the
-color scheme: @samp{r} (rgb), @samp{c} (cmy), @samp{k} (cmyk), @samp{g}
-(gray), or @samp{d} (default color).  The color components use exactly
-the same syntax as in the @code{defcolor} request (@pxref{Colors}); the
-command @code{\D'Fd'} doesn't take an argument.
-
-@emph{No} position changing!
-
-Examples:
-
-@Example
-\D'Fg .3'      \" same gray as \D'f 700'
-\D'Fr #0000ff' \" blue
-@endExample
-@end table
-@endDefesc
-
-@xref{Graphics Commands}.
-
-@Defesc {\\b, ', string, '}
-@cindex pile, glyph (@code{\b})
-@cindex glyph pile (@code{\b})
-@cindex stacking glyphs (@code{\b})
-@dfn{Pile} a sequence of glyphs vertically, and center it vertically on
-the current line.  Use it to build large brackets and braces.
-
-Here an example how to create a large opening brace:
-
-@Example
-\b'\[lt]\[bv]\[lk]\[bv]\[lb]'
-@endExample
-
-@cindex @code{\b}, limitations
-@cindex limitations of @code{\b} escape
-The first glyph is on the top, the last glyph in @var{string} is at the
-bottom.  Note that @code{gtroff} separates the glyphs vertically by
-1@dmn{m}, and the whole object is centered 0.5@dmn{m} above the current
-baseline; the largest glyph width is used as the width for the whole
-object.  This rather unflexible positioning algorithm doesn't work with
-@option{-Tdvi} since the bracket pieces vary in height for this device.
-Instead, use the @code{eqn} preprocessor.
-
-@xref{Manipulating Spacing}, how to adjust the vertical spacing with the
-@code{\x} escape.
-@endDefesc
-
-
-@c =====================================================================
-
-@node Traps, Diversions, Drawing Requests, gtroff Reference
-@section Traps
-@cindex traps
-
-@dfn{Traps} are locations that, when reached, call a specified macro.
-These traps can occur at a given location on the page, at a given
-location in the current diversion, at a blank line, after a certain
-number of input lines, or at the end of input.
-
-@cindex planting a trap
-@cindex trap, planting
-Setting a trap is also called @dfn{planting}.
-@cindex trap, springing
-@cindex springing a trap
-It is also said that a trap is @dfn{sprung} if the associated macro is
-executed.
-
-@menu
-* Page Location Traps::
-* Diversion Traps::
-* Input Line Traps::
-* Blank Line Traps::
-* Leading Spaces Traps::
-* End-of-input Traps::
-@end menu
-
-@c ---------------------------------------------------------------------
-
-@node Page Location Traps, Diversion Traps, Traps, Traps
-@subsection Page Location Traps
-@cindex page location traps
-@cindex traps, page location
-
-@dfn{Page location traps} perform an action when @code{gtroff} reaches
-or passes a certain vertical location on the page.  Page location traps
-have a variety of purposes, including:
-
-@itemize
-@item
-setting headers and footers
-
-@item
-setting body text in multiple columns
-
-@item
-setting footnotes
-@end itemize
-
-@DefreqList {vpt, flag}
-@DefregListEndx {.vpt}
-@cindex enabling vertical position traps (@code{vpt})
-@cindex vertical position traps, enabling (@code{vpt})
-@cindex vertical position trap enable register (@code{.vpt})
-Enable vertical position traps if @var{flag} is non-zero, or disables
-them otherwise.  Vertical position traps are traps set by the @code{wh}
-or @code{dt} requests.  Traps set by the @code{it} request are not
-vertical position traps.  The parameter that controls whether vertical
-position traps are enabled is global.  Initially vertical position traps
-are enabled.  The current setting of this is available in the
-@code{.vpt} read-only number register.
-
-Note that a page can't be ejected if @code{vpt} is set to zero.
-@endDefreq
-
-@Defreq {wh, dist [@Var{macro}]}
-Set a page location trap.  Non-negative values for @var{dist} set the
-trap relative to the top of the page; negative values set the trap
-relative to the bottom of the page.  Default scaling indicator is
-@samp{v}; values of @var{dist} are always rounded to be multiples of the
-vertical resolution (as given in register @code{.V}).
-
-@var{macro} is the name of the macro to execute when the trap is sprung.
-If @var{macro} is missing, remove the first trap (if any) at @var{dist}.
-
-@cindex page headers
-@cindex page footers
-@cindex headers
-@cindex footers
-The following is a simple example of how many macro packages set headers
-and footers.
-
-@Example
-.de hd                \" Page header
-'  sp .5i
-.  tl 'Title''date'
-'  sp .3i
-..
-.
-.de fo                \" Page footer
-'  sp 1v
-.  tl ''%''
-'  bp
-..
-.
-.wh 0   hd            \" trap at top of the page
-.wh -1i fo            \" trap one inch from bottom
-@endExample
-
-A trap at or below the bottom of the page is ignored; it can be made
-active by either moving it up or increasing the page length so that the
-trap is on the page.
-
-Negative trap values always use the @emph{current} page length; they are
-not converted to an absolute vertical position:
-
-@Example
-.pl 5i
-.wh -1i xx
-.ptr
-    @result{} xx      -240
-.pl 100i
-.ptr
-    @result{} xx      -240
-@endExample
-
-It is possible to have more than one trap at the same location; to do
-so, the traps must be defined at different locations, then moved
-together with the @code{ch} request; otherwise the second trap would
-replace the first one.  Earlier defined traps hide later defined traps
-if moved to the same position (the many empty lines caused by the
-@code{bp} request are omitted in the following example):
-
-@Example
-.de a
-.  nop a
-..
-.de b
-.  nop b
-..
-.de c
-.  nop c
-..
-.
-.wh 1i a
-.wh 2i b
-.wh 3i c
-.bp
-    @result{} a b c
-@endExample
-@Example
-.ch b 1i
-.ch c 1i
-.bp
-    @result{} a
-@endExample
-@Example
-.ch a 0.5i
-.bp
-    @result{} a b
-@endExample
-@endDefreq
-
-@Defreg {.t}
-@cindex distance to next trap register (@code{.t})
-@cindex trap, distance, register (@code{.t})
-A read-only number register holding the distance to the next trap.
-
-If there are no traps between the current position and the bottom of the
-page, it contains the distance to the page bottom.  In a diversion, the
-distance to the page bottom is infinite (the returned value is the
-biggest integer that can be represented in @code{groff}) if there are
-no diversion traps.
-@endDefreg
-
-@Defreq {ch, macro [@Var{dist}]}
-@cindex changing trap location (@code{ch})
-@cindex trap, changing location (@code{ch})
-Change the location of a trap.  The first argument is the name of the
-macro to be invoked at the trap, and the second argument is the new
-location for the trap (note that the parameters are specified in
-opposite order as in the @code{wh} request).  This is useful for
-building up footnotes in a diversion to allow more space at the bottom
-of the page for them.
-
-Default scaling indicator for @var{dist} is @samp{v}.  If @var{dist} is
-missing, the trap is removed.
-
-@c XXX
-
-@ignore
-@Example
-... (simplified) footnote example ...
-@endExample
-@end ignore
-@endDefreq
-
-@Defreg {.ne}
-The read-only number register @code{.ne} contains the amount of space
-that was needed in the last @code{ne} request that caused a trap to be
-sprung.  Useful in conjunction with the @code{.trunc} register.
-@xref{Page Control}, for more information.
-
-Since the @code{.ne} register is only set by traps it doesn't make much
-sense to use it outside of trap macros.
-@endDefreg
-
-@Defreg {.trunc}
-@cindex @code{ne} request, and the @code{.trunc} register
-@cindex truncated vertical space register (@code{.trunc})
-A read-only register containing the amount of vertical space truncated
-by the most recently sprung vertical position trap, or, if the trap was
-sprung by an @code{ne} request, minus the amount of vertical motion
-produced by the @code{ne} request.  In other words, at the point a trap
-is sprung, it represents the difference of what the vertical position
-would have been but for the trap, and what the vertical position
-actually is.
-
-Since the @code{.trunc} register is only set by traps it doesn't make
-much sense to use it outside of trap macros.
-@endDefreg
-
-@Defreg {.pe}
-@cindex @code{bp} request, and traps (@code{.pe})
-@cindex traps, sprung by @code{bp} request (@code{.pe})
-@cindex page ejecting register (@code{.pe})
-A read-only register that is set to@tie{}1 while a page is ejected with
-the @code{bp} request (or by the end of input).
-
-Outside of traps this register is always zero.  In the following
-example, only the second call to@tie{}@code{x} is caused by @code{bp}.
-
-@Example
-.de x
-\&.pe=\\n[.pe]
-.br
-..
-.wh 1v x
-.wh 4v x
-A line.
-.br
-Another line.
-.br
-    @result{} A line.
-       .pe=0
-       Another line.
-
-       .pe=1
-@endExample
-@endDefreg
-
-@cindex diversions, and traps
-@cindex traps, and diversions
-An important fact to consider while designing macros is that diversions
-and traps do not interact normally.  For example, if a trap invokes a
-header macro (while outputting a diversion) that tries to change the
-font on the current page, the effect is not visible before the diversion
-has completely been printed (except for input protected with @code{\!}
-or @code{\?}) since the data in the diversion is already formatted.  In
-most cases, this is not the expected behaviour.
-
-@c ---------------------------------------------------------------------
-
-@node Diversion Traps, Input Line Traps, Page Location Traps, Traps
-@subsection Diversion Traps
-@cindex diversion traps
-@cindex traps, diversion
-
-@Defreq {dt, [@Var{dist} @Var{macro}]}
-@cindex @code{.t} register, and diversions
-@cindex setting diversion trap (@code{dt})
-@cindex diversion trap, setting (@code{dt})
-@cindex trap, diversion, setting (@code{dt})
-Set a trap @emph{within} a diversion.  @var{dist} is the location of the
-trap (identical to the @code{wh} request; default scaling indicator is
-@samp{v}) and @var{macro} is the name of the macro to be invoked.  If
-called without arguments, the diversion trap is removed.
-
-Note that there exists only a single diversion trap.
-
-The number register @code{.t} still works within diversions.
-@xref{Diversions}, for more information.
-@endDefreq
-
-@c ---------------------------------------------------------------------
-
-@node Input Line Traps, Blank Line Traps, Diversion Traps, Traps
-@subsection Input Line Traps
-@cindex input line traps
-@cindex traps, input line
-
-@DefreqList {it, n macro}
-@DefreqListEndx {itc, n macro}
-@cindex setting input line trap (@code{it})
-@cindex input line trap, setting (@code{it})
-@cindex trap, input line, setting (@code{it})
-Set an input line trap.  @var{n}@tie{}is the number of lines of input
-that may be read before springing the trap, @var{macro} is the macro to
-be invoked.  Request lines are not counted as input lines.
-
-For example, one possible use is to have a macro that prints the next
-@var{n}@tie{}lines in a bold font.
-
-@Example
-.de B
-.  it \\$1 B-end
-.  ft B
-..
-.
-.de B-end
-.  ft R
-..
-@endExample
-
-@cindex input line traps and interrupted lines (@code{itc})
-@cindex interrupted lines and input line traps (@code{itc})
-@cindex traps, input line, and interrupted lines (@code{itc})
-@cindex lines, interrupted, and input line traps (@code{itc})
-The @code{itc} request is identical except that an interrupted text line
-(ending with @code{\c}) is not counted as a separate line.
-
-Both requests are associated with the current environment
-(@pxref{Environments}); switching to another environment disables the
-current input trap, and going back reactivates it, restoring the number
-of already processed lines.
-@endDefreq
-
-@c ---------------------------------------------------------------------
-
-@node Blank Line Traps, Leading Spaces Traps, Input Line Traps, Traps
-@subsection Blank Line Traps
-@cindex blank line traps
-@cindex traps, blank line
-
-@Defreq {blm, macro}
-@cindex blank line macro (@code{blm})
-Set a blank line trap.  @code{gtroff} executes @var{macro} when it
-encounters a blank line in the input file.
-@endDefreq
-
-@c ---------------------------------------------------------------------
-
-@node Leading Spaces Traps, End-of-input Traps, Blank Line Traps, Traps
-@subsection Leading Spaces Traps
-@cindex leading spaces traps
-@cindex traps, leading spaces
-
-@DefreqList {lsm, macro}
-@DefregItemx {lsn}
-@DefregListEndx {lss}
-@cindex leading spaces macro (@code{lsm})
-Set a leading spaces trap.  @code{gtroff} executes @var{macro} when it
-encounters leading spaces in an input line; the implicit line break
-that normally happens in this case is suppressed.  A line consisting
-of spaces only, however, is treated as an empty line, possibly subject
-to an empty line macro set with the @code{blm} request.
-
-Leading spaces are removed from the input line before calling the
-leading spaces macro.  The number of removed spaces is stored in
-register @code{lsn}; the horizontal space that would be emitted if
-there was no leading space macro is stored in register @code{lss}.
-Note that @code{lsn} and @code{lss} are available even if no leading
-space macro has been set.
-
-The first thing a leading space macro sees is a token.  However, some
-escapes like @code{\f} or @code{\m} are handled on the fly (see
-@ref{Gtroff Internals}, for a complete list) without creating a token
-at all.  Consider that a line starts with two spaces followed by
-@code{\fIfoo}.  While skipping the spaces @code{\fI} is handled too so
-that groff's current font is properly set to @samp{I}, but the leading
-space macro only sees @code{foo}, without the preceding @code{\fI}.
-If the macro should see the font escape you have to `protect' it with
-something that creates a token, for example with @code{\&\fIfoo}.
-@endDefreq
-
-@c ---------------------------------------------------------------------
-
-@node End-of-input Traps,  , Leading Spaces Traps, Traps
-@subsection End-of-input Traps
-@cindex end-of-input traps
-@cindex traps, end-of-input
-
-@Defreq {em, macro}
-@cindex setting end-of-input trap (@code{em})
-@cindex end-of-input trap, setting (@code{em})
-@cindex trap, end-of-input, setting (@code{em})
-@cindex end-of-input macro (@code{em})
-@cindex macro, end-of-input (@code{em})
-Set a trap at the end of input.  @var{macro} is executed after the last
-line of the input file has been processed.
-
-For example, if the document had to have a section at the bottom of the
-last page for someone to approve it, the @code{em} request could be
-used.
-
-@Example
-.de approval
-\c
-.  ne 3v
-.  sp (\\n[.t]u - 3v)
-.  in +4i
-.  lc _
-.  br
-Approved:\t\a
-.  sp
-Date:\t\t\a
-..
-.
-.em approval
-@endExample
-
-The @code{\c} in the above example needs explanation.  For historical
-reasons (and for compatibility with @acronym{AT&T} @code{troff}), the
-end macro exits as soon as it causes a page break and no remaining
-data is in the partially collected line.
-
-Let us assume that there is no @code{\c} in the above @code{approval}
-macro, and that the page is full and has been ended with, say, a
-@code{br} request.  The @code{ne} request now causes the start of a new
-page, which in turn makes @code{troff} exit immediately for the reasons
-just described.  In most situations this is not intended.
-
-To always force processing the whole end macro independently of this
-behaviour it is thus advisable to insert something that starts an
-empty partially filled line (@code{\c}) whenever there is a chance that
-a page break can happen.  In the above example, the call of the
-@code{ne} request assures that the remaining code stays on the same
-page, so we have to insert @code{\c} only once.
-
-The next example shows how to append three lines, then starting a new
-page unconditionally.  Since @w{@samp{.ne 1}} doesn't give the desired
-effect -- there is always one line available or we are already at the
-beginning of the next page -- we temporarily increase the page length
-by one line so that we can use @w{@samp{.ne 2}}.
-
-@Example
-.de EM
-.pl +1v
-\c
-.ne 2
-line one
-.br
-\c
-.ne 2
-line two
-.br
-\c
-.ne 2
-line three
-.br
-.pl -1v
-\c
-'bp
-..
-.em EM
-@endExample
-
-Note that this specific feature affects only the first potential page
-break caused by the end macro; further page breaks emitted by the end
-macro are handled normally.
-
-Another possible use of the @code{em} request is to make @code{gtroff}
-emit a single large page instead of multiple pages.  For example, one
-may want to produce a long plain-text file for reading on-screen.  The
-idea is to set the page length at the beginning of the document to a
-very large value to hold all the text, and automatically adjust it to
-the exact height of the document after the text has been output.
-
-@Example
-.de adjust-page-length
-.  br
-.  pl \\n[nl]u   \" \n[nl] holds the current page length
-..
-.
-.de single-page-mode
-.  pl 99999
-.  em adjust-page-length
-..
-.
-.\" activate the above code
-.single-page-mode
-@endExample
-
-Since only one end-of-input trap does exist and other macro packages
-may already use it, care must be taken not to break the mechanism.  A
-simple solution would be to append the above macro to the macro
-package's end-of-input macro using the @code{.am} request.
-@endDefreq
-
-
-@c =====================================================================
-
-@node Diversions, Environments, Traps, gtroff Reference
-@section Diversions
-@cindex diversions
-
-In @code{gtroff} it is possible to @dfn{divert} text into a named
-storage area.  Due to the similarity to defining macros it is sometimes
-said to be stored in a macro.  This is used for saving text for output
-at a later time, which is useful for keeping blocks of text on the same
-page, footnotes, tables of contents, and indices.
-
-@cindex top-level diversion
-@cindex diversion, top-level
-For orthogonality it is said that @code{gtroff} is in the @dfn{top-level
-diversion} if no diversion is active (i.e., the data is diverted to the
-output device).
-
-Although the following requests can be used to create diversions,
-simply using an undefined diversion will cause it to be defined as empty.
-@xref{Identifiers}.
-
-@DefreqList {di, macro}
-@DefreqListEndx {da, macro}
-@cindex beginning diversion (@code{di})
-@cindex diversion, beginning (@code{di})
-@cindex ending diversion (@code{di})
-@cindex diversion, ending (@code{di})
-@cindex appending to a diversion (@code{da})
-@cindex diversion, appending (@code{da})
-Begin a diversion.  Like the @code{de} request, it takes an argument of
-a macro name to divert subsequent text into.  The @code{da} macro
-appends to an existing diversion.
-
-@code{di} or @code{da} without an argument ends the diversion.
-
-The current partially-filled line is included into the diversion.  See
-the @code{box} request below for an example.  Note that switching to
-another (empty) environment (with the @code{ev} request) avoids the
-inclusion of the current partially-filled line.
-@endDefreq
-
-@DefreqList {box, macro}
-@DefreqListEndx {boxa, macro}
-Begin (or append to) a diversion like the @code{di} and @code{da}
-requests.  The difference is that @code{box} and @code{boxa} do not
-include a partially-filled line in the diversion.
-
-Compare this:
-
-@Example
-Before the box.
-.box xxx
-In the box.
-.br
-.box
-After the box.
-.br
-    @result{} Before the box.  After the box.
-.xxx
-    @result{} In the box.
-@endExample
-
-@noindent
-with this:
-
-@Example
-Before the diversion.
-.di yyy
-In the diversion.
-.br
-.di
-After the diversion.
-.br
-    @result{} After the diversion.
-.yyy
-    @result{} Before the diversion.  In the diversion.
-@endExample
-
-@code{box} or @code{boxa} without an argument ends the diversion.
-@endDefreq
-
-@DefregList {.z}
-@DefregListEndx {.d}
-@cindex @code{nl} register, and @code{.d}
-@cindex nested diversions
-@cindex diversion, nested
-@cindex diversion name register (@code{.z})
-@cindex vertical position in diversion register (@code{.d})
-@cindex position, vertical, in diversion, register (@code{.d})
-@cindex diversion, vertical position in, register (@code{.d})
-Diversions may be nested.  The read-only number register @code{.z}
-contains the name of the current diversion (this is a string-valued
-register).  The read-only number register @code{.d} contains the current
-vertical place in the diversion.  If not in a diversion it is the same
-as register @code{nl}.
-@endDefreg
-
-@Defreg {.h}
-@cindex high-water mark register (@code{.h})
-@cindex mark, high-water, register (@code{.h})
-@cindex position of lowest text line (@code{.h})
-@cindex text line, position of lowest (@code{.h})
-The @dfn{high-water mark} on the current page.  It corresponds to the
-text baseline of the lowest line on the page.  This is a read-only
-register.
-
-@Example
-.tm .h==\n[.h], nl==\n[nl]
-    @result{} .h==0, nl==-1
-This is a test.
-.br
-.sp 2
-.tm .h==\n[.h], nl==\n[nl]
-    @result{} .h==40, nl==120
-@endExample
-
-@cindex @code{.h} register, difference to @code{nl}
-@cindex @code{nl} register, difference to @code{.h}
-@noindent
-As can be seen in the previous example, empty lines are not considered
-in the return value of the @code{.h} register.
-@endDefreg
-
-@DefregList {dn}
-@DefregListEndx {dl}
-@cindex @code{dn} register, and @code{da} (@code{boxa})
-@cindex @code{dl} register, and @code{da} (@code{boxa})
-@cindex @code{da} request, and @code{dn} (@code{dl})
-@cindex @code{boxa} request, and @code{dn} (@code{dl})
-After completing a diversion, the read-write number registers @code{dn}
-and @code{dl} contain the vertical and horizontal size of the diversion.
-Note that only the just processed lines are counted: For the computation
-of @code{dn} and @code{dl}, the requests @code{da} and @code{boxa} are
-handled as if @code{di} and @code{box} had been used -- lines that have
-been already stored in a macro are not taken into account.
-
-@Example
-.\" Center text both horizontally & vertically
-.
-.\" Enclose macro definitions in .eo and .ec
-.\" to avoid the doubling of the backslash
-.eo
-.\" macro .(c starts centering mode
-.de (c
-.  br
-.  ev (c
-.  evc 0
-.  in 0
-.  nf
-.  di @@c
-..
-@endExample
-@Example
-.\" macro .)c terminates centering mode
-.de )c
-.  br
-.  ev
-.  di
-.  nr @@s (((\n[.t]u - \n[dn]u) / 2u) - 1v)
-.  sp \n[@@s]u
-.  ce 1000
-.  @@c
-.  ce 0
-.  sp \n[@@s]u
-.  br
-.  fi
-.  rr @@s
-.  rm @@s
-.  rm @@c
-..
-.\" End of macro definitions, restore escape mechanism
-.ec
-@endExample
-@endDefreg
-
-@DefescList {\\!, , , }
-@DefescListEndx {\\?, , anything, \\?}
-@cindex transparent output (@code{\!}, @code{\?})
-@cindex output, transparent (@code{\!}, @code{\?})
-Prevent requests, macros, and escapes from being interpreted when read
-into a diversion.  Both escapes take the given text and
-@dfn{transparently} embed it into the diversion.  This is useful for
-macros that shouldn't be invoked until the diverted text is actually
-output.
-
-The @code{\!} escape transparently embeds text up to and including the
-end of the line.  The @code{\?} escape transparently embeds text until
-the next occurrence of the @code{\?} escape.  Example:
-
-@Example
-\?@var{anything}\?
-@endExample
-
-@cindex @code{\?}, and copy-in mode
-@cindex copy-in mode, and @code{\?}
-@cindex mode, copy-in, and @code{\?}
-@cindex @code{\!}, and copy-in mode
-@cindex copy-in mode, and @code{\!}
-@cindex mode, copy-in, and @code{\!}
-@noindent
-@var{anything} may not contain newlines; use @code{\!}  to embed
-newlines in a diversion.  The escape sequence @code{\?} is also
-recognized in copy mode and turned into a single internal code; it is
-this code that terminates @var{anything}.  Thus the following example
-prints@tie{}4.
-
-@Example
-.nr x 1
-.nf
-.di d
-\?\\?\\\\?\\\\\\\\nx\\\\?\\?\?
-.di
-.nr x 2
-.di e
-.d
-.di
-.nr x 3
-.di f
-.e
-.di
-.nr x 4
-.f
-@endExample
-
-Both escapes read the data in copy mode.
-
-@cindex @code{\!}, in top-level diversion
-@cindex top-level diversion, and @code{\!}
-@cindex diversion, top-level, and @code{\!}
-If @code{\!} is used in the top-level diversion, its argument is
-directly embedded into the @code{gtroff} intermediate output.  This can
-be used for example to control a postprocessor that processes the data
-before it is sent to the device driver.
-
-@cindex @code{\?}, in top-level diversion
-@cindex top-level diversion, and @code{\?}
-@cindex diversion, top-level, and @code{\?}
-The @code{\?} escape used in the top-level diversion produces no output
-at all; its argument is simply ignored.
-@endDefesc
-
-@cindex @code{\!}, and @code{output} request
-@cindex @code{output} request, and @code{\!}
-@cindex @code{output} request, and copy-in mode
-@cindex copy-in mode, and @code{output} request
-@cindex mode, copy-in, and @code{output} request
-@Defreq {output, string}
-Emit @var{string} directly to the @code{gtroff} intermediate output
-(subject to copy mode interpretation); this is similar to @code{\!} used
-at the top level.  An initial double quote in @var{string} is stripped
-off to allow initial blanks.
-
-This request can't be used before the first page has started -- if you
-get an error, simply insert @code{.br} before the @code{output} request.
-
-Without argument, @code{output} is ignored.
-
-Use with caution!  It is normally only needed for mark-up used by a
-postprocessor that does something with the output before sending it to
-the output device, filtering out @var{string} again.
-@endDefreq
-
-@Defreq {asciify, div}
-@cindex unformatting diversions (@code{asciify})
-@cindex diversion, unformatting (@code{asciify})
-@cindex @code{trin} request, and @code{asciify}
-@dfn{Unformat} the diversion specified by @var{div} in such a way that
-@acronym{ASCII} characters, characters translated with the @code{trin}
-request, space characters, and some escape sequences that were formatted
-and diverted are treated like ordinary input characters when the
-diversion is reread.  It can be also used for gross hacks; for example,
-the following sets register@tie{}@code{n} to@tie{}1.
-
-@Example
-.tr @@.
-.di x
-@@nr n 1
-.br
-.di
-.tr @@@@
-.asciify x
-.x
-@endExample
-
-Note that @code{asciify} cannot return all items in a diversion back
-to their source equivalent, nodes such as @code{\N[...]} will still
-remain as nodes, so the result cannot be guaranteed to be a pure string.
-
-@xref{Copy-in Mode}.
-@endDefreq
-
-@Defreq {unformat, div}
-Like @code{asciify}, unformat the specified diversion.  However,
-@code{unformat} only unformats spaces and tabs between words.
-Unformatted tabs are treated as input tokens, and spaces are stretchable
-again.
-
-The vertical size of lines is not preserved; glyph information (font,
-font size, space width, etc.)@: is retained.
-@endDefreq
-
-
-@c =====================================================================
-
-@node Environments, Suppressing output, Diversions, gtroff Reference
-@section Environments
-@cindex environments
-
-It happens frequently that some text should be printed in a certain
-format regardless of what may be in effect at the time, for example, in
-a trap invoked macro to print headers and footers.  To solve this
-@code{gtroff} processes text in @dfn{environments}.  An environment
-contains most of the parameters that control text processing.  It is
-possible to switch amongst these environments; by default @code{gtroff}
-processes text in environment@tie{}0.  The following is the information
-kept in an environment.
-
-@itemize @bullet
-@item
-font parameters (size, family, style, glyph height and slant, space and
-sentence space size)
-
-@item
-page parameters (line length, title length, vertical spacing, line
-spacing, indentation, line numbering, centering, right-justifying,
-underlining, hyphenation data)
-
-@item
-fill and adjust mode
-
-@item
-tab stops, tab and leader characters, escape character, no-break and
-hyphen indicators, margin character data
-
-@item
-partially collected lines
-
-@item
-input traps
-
-@item
-drawing and fill colours
-@end itemize
-
-These environments may be given arbitrary names (see @ref{Identifiers},
-for more info).  Old versions of @code{troff} only had environments
-named @samp{0}, @samp{1}, and @samp{2}.
-
-@DefreqList {ev, [@Var{env}]}
-@DefregListEndx {.ev}
-@cindex switching environments (@code{ev})
-@cindex environment, switching (@code{ev})
-@cindex environment number/name register (@code{.ev})
-Switch to another environment.  The argument @var{env} is the name of
-the environment to switch to.  With no argument, @code{gtroff} switches
-back to the previous environment.  There is no limit on the number of
-named environments; they are created the first time that they are
-referenced.  The @code{.ev} read-only register contains the name or
-number of the current environment.  This is a string-valued register.
-
-Note that a call to @code{ev} (with argument) pushes the previously
-active environment onto a stack.  If, say, environments @samp{foo},
-@samp{bar}, and @samp{zap} are called (in that order), the first
-@code{ev} request without parameter switches back to environment
-@samp{bar} (which is popped off the stack), and a second call switches
-back to environment @samp{foo}.
-
-Here is an example:
-
-@Example
-.ev footnote-env
-.fam N
-.ps 6
-.vs 8
-.ll -.5i
-.ev
-
-...
-
-.ev footnote-env
-\(dg Note the large, friendly letters.
-.ev
-@endExample
-@endDefreq
-
-@Defreq {evc, env}
-@cindex copying environment (@code{evc})
-@cindex environment, copying (@code{evc})
-Copy the environment @var{env} into the current environment.
-
-The following environment data is not copied:
-
-@itemize @bullet
-@item
-Partially filled lines.
-
-@item
-The status whether the previous line was interrupted.
-
-@item
-The number of lines still to center, or to right-justify, or to
-underline (with or without underlined spaces); they are set to zero.
-
-@item
-The status whether a temporary indentation is active.
-
-@item
-Input traps and its associated data.
-
-@item
-Line numbering mode is disabled; it can be reactivated with @w{@samp{.nm
-+0}}.
-
-@item
-The number of consecutive hyphenated lines (set to zero).
-@end itemize
-@endDefreq
-
-@DefregList {.w}
-@DefregItemx {.cht}
-@DefregItemx {.cdp}
-@DefregListEndx {.csk}
-@cindex environment, dimensions of last glyph (@code{.w}, @code{.cht}, @code{.cdp}, @code{.csk})
-@cindex width, of last glyph (@code{.w})
-@cindex height, of last glyph (@code{.cht})
-@cindex depth, of last glyph (@code{.cdp})
-@cindex skew, of last glyph (@code{.csk})
-@cindex last glyph, dimensions (@code{.w}, @code{.cht}, @code{.cdp}, @code{.csk})
-@cindex glyph, last, dimensions (@code{.w}, @code{.cht}, @code{.cdp}, @code{.csk})
-The @code{\n[.w]} register contains the width of the last glyph added to
-the current environment.
-
-The @code{\n[.cht]} register contains the height of the last glyph added
-to the current environment.
-
-The @code{\n[.cdp]} register contains the depth of the last glyph added
-to the current environment.  It is positive for glyphs extending below
-the baseline.
-
-The @code{\n[.csk]} register contains the @dfn{skew} (how far to the
-right of the glyph's center that @code{gtroff} should place an accent)
-of the last glyph added to the current environment.
-@endDefreg
-
-@Defreg {.n}
-@cindex environment, previous line length (@code{.n})
-@cindex line length, previous (@code{.n})
-@cindex length of previous line (@code{.n})
-@cindex previous line length (@code{.n})
-The @code{\n[.n]} register contains the length of the previous output
-line in the current environment.
-@endDefreg
-
-
-@c =====================================================================
-
-@node Suppressing output, Colors, Environments, gtroff Reference
-@section Suppressing output
-
-@Defesc {\\O, , num, }
-@cindex suppressing output (@code{\O})
-@cindex output, suppressing (@code{\O})
-Disable or enable output depending on the value of @var{num}:
-
-@table @samp
-@item \O0
-Disable any glyphs from being emitted to the device driver, provided
-that the escape occurs at the outer level (see @code{\O[3]} and
-@code{\O[4]}).  Motion is not suppressed so effectively @code{\O[0]}
-means @emph{pen up}.
-
-@item \O1
-Enable output of glyphs, provided that the escape occurs at the outer
-level.
-@end table
-
-@vindex opminx
-@vindex opminy
-@vindex opmaxx
-@vindex opmaxy
-@code{\O0} and @code{\O1} also reset the four registers @samp{opminx},
-@samp{opminy}, @samp{opmaxx}, and @samp{opmaxy} to @minus{}1.
-@xref{Register Index}.  These four registers mark the top left and
-bottom right hand corners of a box that encompasses all written glyphs.
-
-For example the input text:
-
-@Example
-Hello \O[0]world \O[1]this is a test.
-@endExample
-
-@noindent
-produces the following output:
-
-@Example
-Hello       this is a test.
-@endExample
-
-@table @samp
-@item \O2
-Provided that the escape occurs at the outer level, enable output of
-glyphs and also write out to @code{stderr} the page number and four
-registers encompassing the glyphs previously written since the last call
-to @code{\O}.
-
-@item \O3
-Begin a nesting level.  At start-up, @code{gtroff} is at outer level.
-The current level is contained within the read-only register @code{.O}.
-@xref{Built-in Registers}.
-
-@item \O4
-End a nesting level.  The current level is contained within the
-read-only register @code{.O}.  @xref{Built-in Registers}.
-
-@item \O[5@var{P}@var{filename}]
-This escape is @code{grohtml} specific.  Provided that this escape
-occurs at the outer nesting level write the @code{filename} to
-@code{stderr}.  The position of the image, @var{P}, must be specified
-and must be one of @code{l}, @code{r}, @code{c}, or@tie{}@code{i} (left,
-right, centered, inline).  @var{filename} is associated with the
-production of the next inline image.
-@end table
-@endDefesc
-
-
-@c =====================================================================
-
-@node Colors, I/O, Suppressing output, gtroff Reference
-@section Colors
-@cindex colors
-
-@DefreqList {color, [@Var{n}]}
-@DefregListEndx {.color}
-If @var{n} is missing or non-zero, activate colors (this is the
-default); otherwise, turn it off.
-
-The read-only number register @code{.color} is@tie{}1 if colors are
-active, 0@tie{}otherwise.
-
-Internally, @code{color} sets a global flag; it does not produce a
-token.  Similar to the @code{cp} request, you should use it at the
-beginning of your document to control color output.
-
-Colors can be also turned off with the @option{-c} command line option.
-@endDefreq
-
-@Defreq {defcolor, ident scheme color_components}
-Define color with name @var{ident}.  @var{scheme} can be one of the
-following values: @code{rgb} (three components), @code{cmy} (three
-components), @code{cmyk} (four components), and @code{gray} or
-@code{grey} (one component).
-
-@cindex default color
-@cindex color, default
-Color components can be given either as a hexadecimal string or as
-positive decimal integers in the range 0--65535.  A hexadecimal string
-contains all color components concatenated.  It must start with either
-@code{#} or @code{##}; the former specifies hex values in the range
-0--255 (which are internally multiplied by@tie{}257), the latter in the
-range 0--65535.  Examples: @code{#FFC0CB} (pink), @code{##ffff0000ffff}
-(magenta).  The default color name @c{default} can't be redefined; its
-value is device-specific (usually black).  It is possible that the
-default color for @code{\m} and @code{\M} is not identical.
-
-@cindex @code{f} unit, and colors
-@cindex unit, @code{f}, and colors
-A new scaling indicator@tie{}@code{f} has been introduced, which
-multiplies its value by 65536; this makes it convenient to specify color
-components as fractions in the range 0 to@tie{}1 (1f equals 65536u).
-Example:
-
-@Example
-.defcolor darkgreen rgb 0.1f 0.5f 0.2f
-@endExample
-
-Note that @code{f} is the default scaling indicator for the
-@code{defcolor} request, thus the above statement is equivalent to
-
-@Example
-.defcolor darkgreen rgb 0.1 0.5 0.2
-@endExample
-@endDefreq
-
-@DefreqList {gcolor, [@Var{color}]}
-@DefescItemx {\\m, , c, }
-@DefescItem {\\m, @Lparen{}, co, }
-@DefescItem {\\m, @Lbrack{}, color, @Rbrack{}}
-@DefregListEndx {.m}
-Set (glyph) drawing color.  The following examples show how to turn the
-next four words red.
-
-@Example
-.gcolor red
-these are in red
-.gcolor
-and these words are in black.
-@endExample
-
-@Example
-\m[red]these are in red\m[] and these words are in black.
-@endExample
-
-The escape @code{\m[]} returns to the previous color, as does a call to
-@code{gcolor} without an argument.
-
-@cindex drawing color name register (@code{.m})
-@cindex name, drawing color, register (@code{.m})
-@cindex color name, drawing, register (@code{.m})
-The name of the current drawing color is available in the read-only,
-string-valued number register @samp{.m}.
-
-The drawing color is associated with the current environment
-(@pxref{Environments}).
-
-Note that @code{\m} doesn't produce an input token in @code{gtroff}.  As
-a consequence, it can be used in requests like @code{mc} (which expects
-a single character as an argument) to change the color on the fly:
-
-@Example
-.mc \m[red]x\m[]
-@endExample
-@endDefesc
-
-@DefreqList {fcolor, [@Var{color}]}
-@DefescItemx {\\M, , c, }
-@DefescItem {\\M, @Lparen{}, co, }
-@DefescItem {\\M, @Lbrack{}, color, @Rbrack{}}
-@DefregListEndx {.M}
-Set fill (background) color for filled objects drawn with the
-@code{\D'@dots{}'} commands.
-
-A red ellipse can be created with the following code:
-
-@Example
-\M[red]\h'0.5i'\D'E 2i 1i'\M[]
-@endExample
-
-The escape @code{\M[]} returns to the previous fill color, as does a
-call to @code{fcolor} without an argument.
-
-@cindex background color name register (@code{.M})
-@cindex name, background color, register (@code{.M})
-@cindex color name, background, register (@code{.M})
-@cindex fill color name register (@code{.M})
-@cindex name, fill color, register (@code{.M})
-@cindex color name, fill, register (@code{.M})
-The name of the current fill (background) color is available in the
-read-only, string-valued number register @samp{.M}.
-
-The fill color is associated with the current environment
-(@pxref{Environments}).
-
-Note that @code{\M} doesn't produce an input token in @code{gtroff}.
-@endDefesc
-
-
-@c =====================================================================
-
-@node I/O, Postprocessor Access, Colors, gtroff Reference
-@section I/O
-@cindex i/o
-@cindex input and output requests
-@cindex requests for input and output
-@cindex output and input requests
-
-@code{gtroff} has several requests for including files:
-
-@Defreq {so, file}
-@cindex including a file (@code{so})
-@cindex file, inclusion (@code{so})
-Read in the specified @var{file} and includes it in place of the
-@code{so} request.  This is quite useful for large documents, e.g.@:
-keeping each chapter in a separate file.  @xref{gsoelim}, for more
-information.
-
-Since @code{gtroff} replaces the @code{so} request with the contents of
-@code{file}, it makes a difference whether the data is terminated with a
-newline or not: Assuming that file @file{xxx} contains the word
-@samp{foo} without a final newline, this
-
-@Example
-This is
-.so xxx
-bar
-@endExample
-
-@noindent
-yields @samp{This is foobar}.
-
-The search path for @var{file} can be controlled with the @option{-I}
-command line option.
-@endDefreq
-
-@Defreq {pso, command}
-Read the standard output from the specified @var{command} and includes
-it in place of the @code{pso} request.
-
-@cindex safer mode
-@cindex mode, safer
-@cindex unsafe mode
-@cindex mode, unsafe
-This request causes an error if used in safer mode (which is the
-default).  Use @code{groff}'s or @code{troff}'s @option{-U} option to
-activate unsafe mode.
-
-The comment regarding a final newline for the @code{so} request is valid
-for @code{pso} also.
-@endDefreq
-
-@Defreq {mso, file}
-Identical to the @code{so} request except that @code{gtroff} searches
-for the specified @var{file} in the same directories as macro files for
-the the @option{-m} command line option.  If the file name to be
-included has the form @file{@var{name}.tmac} and it isn't found,
-@code{mso} tries to include @file{tmac.@var{name}} and vice versa.
-If the file does not exist, a warning of type @samp{file} is emitted.
-@xref{Debugging}, for information about warnings.
-@endDefreq
-
-@DefreqList {trf, file}
-@DefreqListEndx {cf, file}
-@cindex transparent output (@code{cf}, @code{trf})
-@cindex output, transparent (@code{cf}, @code{trf})
-@cindex @code{cf} request, and copy-in mode
-@cindex copy-in mode, and @code{cf} request
-@cindex mode, copy-in, and @code{cf} request
-@cindex @code{trf} request, and copy-in mode
-@cindex copy-in mode, and @code{trf} request
-@cindex mode, copy-in, and @code{trf} request
-Transparently output the contents of @var{file}.  Each line is output as
-if it were preceded by @code{\!}; however, the lines are @emph{not}
-subject to copy mode interpretation.  If the file does not end with a
-newline, then a newline is added (@code{trf} only).  For example, to
-define a macro@tie{}@code{x} containing the contents of
-file@tie{}@file{f}, use
-
-@Example
-.ev 1
-.di x
-.trf f
-.di
-.ev
-@endExample
-
-@noindent
-The calls to @code{ev} prevent that the current partial input line
-becomes part of the diversion.
-
-Both @code{trf} and @code{cf}, when used in a diversion, embeds an
-object in the diversion which, when reread, causes the contents of
-@var{file} to be transparently copied through to the output.  In
-@acronym{UNIX} @code{troff}, the contents of @var{file} is immediately
-copied through to the output regardless of whether there is a current
-diversion; this behaviour is so anomalous that it must be considered a
-bug.
-
-@cindex @code{trf} request, and invalid characters
-@cindex characters, invalid for @code{trf} request
-@cindex invalid characters for @code{trf} request
-
-While @code{cf} copies the contents of @var{file} completely
-unprocessed, @code{trf} disallows characters such as NUL that are not
-valid @code{gtroff} input characters (@pxref{Identifiers}).
-
-For @code{cf}, within a diversion, `completely unprocessed' means that
-each line of a file to be inserted is handled as if it were preceded by
-@code{\!\\!}.
-
-Both requests cause a line break.
-@endDefreq
-
-@Defreq {nx, [@Var{file}]}
-@cindex processing next file (@code{nx})
-@cindex file, processing next (@code{nx})
-@cindex next file, processing (@code{nx})
-Force @code{gtroff} to continue processing of the file specified as an
-argument.  If no argument is given, immediately jump to the end of file.
-@endDefreq
-
-@Defreq {rd, [@Var{prompt} [@Var{arg1} @Var{arg2} @dots{}]]}
-@cindex reading from standard input (@code{rd})
-@cindex standard input, reading from (@code{rd})
-@cindex input, standard, reading from (@code{rd})
-Read from standard input, and include what is read as though it were
-part of the input file.  Text is read until a blank line is encountered.
-
-If standard input is a TTY input device (keyboard), write @var{prompt}
-to standard error, followed by a colon (or send BEL for a beep if no
-argument is given).
-
-Arguments after @var{prompt} are available for the input.  For example,
-the line
-
-@Example
-.rd data foo bar
-@endExample
-
-with the input @w{@samp{This is \$2.}} prints
-
-@Example
-This is bar.
-@endExample
-@endDefreq
-
-@cindex form letters
-@cindex letters, form
-Using the @code{nx} and @code{rd} requests, it is easy to set up form
-letters.  The form letter template is constructed like this, putting the
-following lines into a file called @file{repeat.let}:
-
-@Example
-.ce
-\*(td
-.sp 2
-.nf
-.rd
-.sp
-.rd
-.fi
-Body of letter.
-.bp
-.nx repeat.let
-@endExample
-
-@cindex @code{ex} request, used with @code{nx} and @code{rd}
-@noindent
-When this is run, a file containing the following lines should be
-redirected in.  Note that requests included in this file are executed as
-though they were part of the form letter.  The last block of input is
-the @code{ex} request, which tells @code{groff} to stop processing.  If
-this was not there, @code{groff} would not know when to stop.
-
-@Example
-Trent A. Fisher
-708 NW 19th Av., #202
-Portland, OR  97209
-
-Dear Trent,
-
-Len Adollar
-4315 Sierra Vista
-San Diego, CA  92103
-
-Dear Mr. Adollar,
-
-.ex
-@endExample
-
-@Defreq {pi, pipe}
-Pipe the output of @code{gtroff} to the shell command(s) specified by
-@var{pipe}.  This request must occur before @code{gtroff} has a chance
-to print anything.
-
-@cindex safer mode
-@cindex mode, safer
-@cindex unsafe mode
-@cindex mode, unsafe
-@code{pi} causes an error if used in safer mode (which is the default).
-Use @code{groff}'s or @code{troff}'s @option{-U} option to activate
-unsafe mode.
-
-Multiple calls to @code{pi} are allowed, acting as a chain.  For
-example,
-
-@Example
-.pi foo
-.pi bar
-...
-@endExample
-
-is the same as @w{@samp{.pi foo | bar}}.
-
-@cindex @code{groff}, and @code{pi} request
-@cindex @code{pi} request, and @code{groff}
-Note that the intermediate output format of @code{gtroff} is piped to
-the specified commands.  Consequently, calling @code{groff} without the
-@option{-Z} option normally causes a fatal error.
-@endDefreq
-
-@DefreqList {sy, cmds}
-@DefregListEndx {systat}
-Execute the shell command(s) specified by @var{cmds}.  The output is not
-saved anyplace, so it is up to the user to do so.
-
-@cindex safer mode
-@cindex mode, safer
-@cindex unsafe mode
-@cindex mode, unsafe
-This request causes an error if used in safer mode (which is the
-default).  Use @code{groff}'s or @code{troff}'s @option{-U} option to
-activate unsafe mode.
-
-For example, the following code fragment introduces the current time
-into a document:
-
-@cindex time, current
-@cindex current time
-@pindex perl
-@Example
-.sy perl -e 'printf ".nr H %d\\n.nr M %d\\n.nr S %d\\n",\
-             (localtime(time))[2,1,0]' > /tmp/x\n[$$]
-.so /tmp/x\n[$$]
-.sy rm /tmp/x\n[$$]
-\nH:\nM:\nS
-@endExample
-
-@noindent
-Note that this works by having the @code{perl} script (run by @code{sy})
-print out the @code{nr} requests that set the number registers
-@code{H}, @code{M}, and @code{S}, and then reads those commands in with
-the @code{so} request.
-
-For most practical purposes, the number registers @code{seconds},
-@code{minutes}, and @code{hours}, which are initialized at start-up of
-@code{gtroff}, should be sufficient.  Use the @code{af} request to get a
-formatted output:
-
-@Example
-.af hours 00
-.af minutes 00
-.af seconds 00
-\n[hours]:\n[minutes]:\n[seconds]
-@endExample
-
-@cindex @code{system()} return value register (@code{systat})
-The @code{systat} read-write number register contains the return value
-of the @code{system()} function executed by the last @code{sy} request.
-@endDefreq
-
-@DefreqList {open, stream file}
-@DefreqListEndx {opena, stream file}
-@cindex opening file (@code{open})
-@cindex file, opening (@code{open})
-@cindex appending to a file (@code{opena})
-@cindex file, appending to (@code{opena})
-Open the specified @var{file} for writing and associates the specified
-@var{stream} with it.
-
-The @code{opena} request is like @code{open}, but if the file exists,
-append to it instead of truncating it.
-
-@cindex safer mode
-@cindex mode, safer
-@cindex unsafe mode
-@cindex mode, unsafe
-Both @code{open} and @code{opena} cause an error if used in safer mode
-(which is the default).  Use @code{groff}'s or @code{troff}'s
-@option{-U} option to activate unsafe mode.
-@endDefreq
-
-@DefreqList {write, stream data}
-@DefreqListEndx {writec, stream data}
-@cindex copy-in mode, and @code{write} request
-@cindex @code{write} request, and copy-in mode
-@cindex mode, copy-in, and @code{write} request
-@cindex copy-in mode, and @code{writec} request
-@cindex @code{writec} request, and copy-in mode
-@cindex mode, copy-in, and @code{writec} request
-@cindex writing to file (@code{write}, @code{writec})
-@cindex file, writing to (@code{write}, @code{writec})
-Write to the file associated with the specified @var{stream}.  The
-stream must previously have been the subject of an open request.  The
-remainder of the line is interpreted as the @code{ds} request reads its
-second argument: A leading @samp{"} is stripped, and it is read in
-copy-in mode.
-
-The @code{writec} request is like @code{write}, but only @code{write}
-appends a newline to the data.
-@endDefreq
-
-@Defreq {writem, stream xx}
-@cindex @code{asciify} request, and @code{writem}
-Write the contents of the macro or string @var{xx} to the file
-associated with the specified @var{stream}.
-
-@cindex @code{writem} request, and copy-in mode
-@cindex copy-in mode, and @code{writem} request
-@cindex mode, copy-in, and @code{writem} request
-@var{xx} is read in copy mode, i.e., already formatted elements are
-ignored.  Consequently, diversions must be unformatted with the
-@code{asciify} request before calling @code{writem}.  Usually, this
-means a loss of information.
-@endDefreq
-
-@Defreq {close, stream}
-@cindex closing file (@code{close})
-@cindex file, closing (@code{close})
-Close the specified @var{stream}; the stream is no longer an acceptable
-argument to the @code{write} request.
-
-Here a simple macro to write an index entry.
-
-@Example
-.open idx test.idx
-.
-.de IX
-.  write idx \\n[%] \\$*
-..
-.
-.IX test entry
-.
-.close idx
-@endExample
-@endDefreq
-
-@DefescList {\\V, , e, }
-@DefescItem {\\V, @Lparen{}, ev, }
-@DefescListEnd {\\V, @Lbrack{}, env, @Rbrack{}}
-@cindex @code{\V}, and copy-in mode
-@cindex copy-in mode, and @code{\V}
-@cindex mode, copy-in, and @code{\V}
-Interpolate the contents of the specified environment variable @var{env}
-(one-character name@tie{}@var{e}, two-character name @var{ev}) as
-returned by the function @code{getenv}.  @code{\V} is interpreted in
-copy-in mode.
-@endDefesc
-
-
-@c =====================================================================
-
-@node Postprocessor Access, Miscellaneous, I/O, gtroff Reference
-@section Postprocessor Access
-@cindex postprocessor access
-@cindex access of postprocessor
-
-There are two escapes that give information directly to the
-postprocessor.  This is particularly useful for embedding
-@sc{PostScript} into the final document.
-
-@DefreqList {device, xxx}
-@DefescListEndx {\\X, ', xxx, '}
-Embeds its argument into the @code{gtroff} output preceded with
-@w{@samp{x X}}.
-
-@cindex @code{\&}, in @code{\X}
-@cindex @code{\)}, in @code{\X}
-@cindex @code{\%}, in @code{\X}
-@ifnotinfo
-@cindex @code{\:}, in @code{\X}
-@end ifnotinfo
-@ifinfo
-@cindex @code{\@r{<colon>}}, in @code{\X}
-@end ifinfo
-The escapes @code{\&}, @code{\)}, @code{\%}, and @code{\:} are ignored
-within @code{\X}, @w{@samp{\ }} and @code{\~} are converted to single
-space characters.  All other escapes (except @code{\\}, which produces a
-backslash) cause an error.
-
-@cindex @code{device} request, and copy-in mode
-@cindex copy-in mode, and @code{device} request
-@cindex mode, copy-in, and @code{device} request
-Contrary to @code{\X}, the @code{device} request simply processes its
-argument in copy mode (@pxref{Copy-in Mode}).
-
-@kindex use_charnames_in_special
-@pindex DESC@r{, and @code{use_charnames_in_special}}
-@cindex @code{\X}, and special characters
-If the @samp{use_charnames_in_special} keyword is set in the @file{DESC}
-file, special characters no longer cause an error; they are simply
-output verbatim.  Additionally, the backslash is represented as
-@code{\\}.
-
-@samp{use_charnames_in_special} is currently used by @code{grohtml}
-only.
-@endDefesc
-
-@DefreqList {devicem, xx}
-@DefescItemx {\\Y, , n, }
-@DefescItem {\\Y, @Lparen{}, nm, }
-@DefescListEnd {\\Y, @Lbrack{}, name, @Rbrack{}}
-This is approximately equivalent to @samp{\X'\*[@var{name}]'}
-(one-character name@tie{}@var{n}, two-character name @var{nm}).
-However, the contents of the string or macro @var{name} are not
-interpreted; also it is permitted for @var{name} to have been defined as
-a macro and thus contain newlines (it is not permitted for the argument
-to @code{\X} to contain newlines).  The inclusion of newlines requires
-an extension to the @acronym{UNIX} @code{troff} output format, and
-confuses drivers that do not know about this extension (@pxref{Device
-Control Commands}).
-@endDefesc
-
-@xref{Output Devices}.
-
-
-@c =====================================================================
-
-@node Miscellaneous, Gtroff Internals, Postprocessor Access, gtroff Reference
-@section Miscellaneous
-
-This section documents parts of @code{gtroff} that cannot (yet) be
-categorized elsewhere in this manual.
-
-@Defreq {nm, [@Var{start} [@Var{inc} [@Var{space} [@Var{indent}]]]]}
-@cindex printing line numbers (@code{nm})
-@cindex line numbers, printing (@code{nm})
-@cindex numbers, line, printing (@code{nm})
-Print line numbers.  @var{start} is the line number of the @emph{next}
-output line.  @var{inc} indicates which line numbers are printed.  For
-example, the value@tie{}5 means to emit only line numbers that are
-multiples of@tie{}5; this defaults to@tie{}1.  @var{space} is the space
-to be left between the number and the text; this defaults to one digit
-space.  The fourth argument is the indentation of the line numbers,
-defaulting to zero.  Both @var{space} and @var{indent} are given as
-multiples of digit spaces; they can be negative also.  Without any
-arguments, line numbers are turned off.
-
-@code{gtroff} reserves three digit spaces for the line number (which is
-printed right-justified) plus the amount given by @var{indent}; the
-output lines are concatenated to the line numbers, separated by
-@var{space}, and @emph{without} reducing the line length.  Depending on
-the value of the horizontal page offset (as set with the @code{po}
-request), line numbers that are longer than the reserved space stick
-out to the left, or the whole line is moved to the right.
-
-Parameters corresponding to missing arguments are not changed; any
-non-digit argument (to be more precise, any argument starting with a
-character valid as a delimiter for identifiers) is also treated as
-missing.
-
-If line numbering has been disabled with a call to @code{nm} without an
-argument, it can be reactivated with @samp{.nm +0}, using the previously
-active line numbering parameters.
-
-The parameters of @code{nm} are associated with the current environment
-(@pxref{Environments}).  The current output line number is available in
-the number register @code{ln}.
-
-@Example
-.po 1m
-.ll 2i
-This test shows how line numbering works with groff.
-.nm 999
-This test shows how line numbering works with groff.
-.br
-.nm xxx 3 2
-.ll -\w'0'u
-This test shows how line numbering works with groff.
-.nn 2
-This test shows how line numbering works with groff.
-@endExample
-
-@noindent
-And here the result:
-
-@Example
- This  test shows how
- line numbering works
- 999 with   groff.   This
-1000 test shows how  line
-1001 numbering works with
-1002 groff.
-      This test shows how
-      line      numbering
- works  with  groff.
- This test shows how
-1005  line      numbering
-      works with groff.
-@endExample
-@endDefreq
-
-@Defreq {nn, [@Var{skip}]}
-Temporarily turn off line numbering.  The argument is the number of
-lines not to be numbered; this defaults to@tie{}1.
-@endDefreq
-
-@Defreq {mc, glyph [@Var{dist}]}
-@cindex margin glyph (@code{mc})
-@cindex glyph, for margins (@code{mc})
-Print a @dfn{margin character} to the right of the
-text.@footnote{@dfn{Margin character} is a misnomer since it is an
-output glyph.}  The first argument is the glyph to be printed.  The
-second argument is the distance away from the right margin.  If missing,
-the previously set value is used; default is 10@dmn{pt}).  For text
-lines that are too long (that is, longer than the text length plus
-@var{dist}), the margin character is directly appended to the lines.
-
-With no arguments the margin character is turned off.  If this occurs
-before a break, no margin character is printed.
-
-For compatibility with @acronym{AT&T} @code{troff}, a call to @code{mc}
-to set the margin character can't be undone immediately; at least one
-line gets a margin character.  Thus
-
-@Example
-.ll 1i
-.mc \[br]
-.mc
-xxx
-.br
-xxx
-@endExample
-
-@noindent
-produces
-
-@Example
-xxx        |
-xxx
-@endExample
-
-@cindex @code{tl} request, and @code{mc}
-For empty lines and lines produced by the @code{tl} request no margin
-character is emitted.
-
-The margin character is associated with the current environment
-(@pxref{Environments}).
-
-@pindex nrchbar
-@pindex changebar
-This is quite useful for indicating text that has changed, and, in fact,
-there are programs available for doing this (they are called
-@code{nrchbar} and @code{changebar} and can be found in any
-@samp{comp.sources.unix} archive).
-
-@Example
-.ll 3i
-.mc |
-This paragraph is highlighted with a margin
-character.
-.sp
-Note that vertical space isn't marked.
-.br
-\&
-.br
-But we can fake it with `\&'.
-@endExample
-
-Result:
-
-@Example
-This  paragraph is highlighted |
-with a margin character.       |
-
-Note that vertical space isn't |
-marked.                        |
-                               |
-But we can fake it with `\&'.  |
-@endExample
-@endDefreq
-
-@DefreqList {psbb, filename}
-@DefregItemx {llx}
-@DefregItemx {lly}
-@DefregItemx {urx}
-@DefregListEndx {ury}
-@cindex PostScript, bounding box
-@cindex bounding box
-Retrieve the bounding box of the @sc{PostScript} image found in
-@var{filename}.  The file must conform to Adobe's @dfn{Document
-Structuring Conventions} (DSC); the command searches for a
-@code{%%BoundingBox} comment and extracts the bounding box values into
-the number registers @code{llx}, @code{lly}, @code{urx}, and @code{ury}.
-If an error occurs (for example, @code{psbb} cannot find the
-@code{%%BoundingBox} comment), it sets the four number registers to
-zero.
-
-The search path for @var{filename} can be controlled with the
-@option{-I} command line option.
-@endDefreq
-
-
-@c =====================================================================
-
-@node Gtroff Internals, Debugging, Miscellaneous, gtroff Reference
-@section @code{gtroff} Internals
-
-@cindex input token
-@cindex token, input
-@cindex output node
-@cindex node, output
-@code{gtroff} processes input in three steps.  One or more input
-characters are converted to an @dfn{input token}.@footnote{Except the
-escapes @code{\f}, @code{\F}, @code{\H}, @code{\m}, @code{\M},
-@code{\R}, @code{\s}, and @code{\S}, which are processed immediately if
-not in copy-in mode.}  Then, one or more input tokens are converted to
-an @dfn{output node}.  Finally, output nodes are converted to the
-intermediate output language understood by all output devices.
-
-Actually, before step one happens, @code{gtroff} converts certain escape
-sequences into reserved input characters (not accessible by the user);
-such reserved characters are used for other internal processing also --
-this is the very reason why not all characters are valid input.
-@xref{Identifiers}, for more on this topic.
-
-For example, the input string @samp{fi\[:u]} is converted into a
-character token @samp{f}, a character token @samp{i}, and a special
-token @samp{:u} (representing u@tie{}umlaut).  Later on, the character
-tokens @samp{f} and @samp{i} are merged to a single output node
-representing the ligature glyph @samp{fi} (provided the current font has
-a glyph for this ligature); the same happens with @samp{:u}.  All output
-glyph nodes are `processed', which means that they are invariably
-associated with a given font, font size, advance width, etc.  During the
-formatting process, @code{gtroff} itself adds various nodes to control
-the data flow.
-
-Macros, diversions, and strings collect elements in two chained lists: a
-list of input tokens that have been passed unprocessed, and a list of
-output nodes.  Consider the following the diversion.
-
-@Example
-.di xxx
-a
-\!b
-c
-.br
-.di
-@endExample
-
-@noindent
-It contains these elements.
-
-@multitable {@i{vertical size node}} {token list} {element number}
-@item node list               @tab token list @tab element number
-
-@item @i{line start node}     @tab ---        @tab 1
-@item @i{glyph node @code{a}} @tab ---        @tab 2
-@item @i{word space node}     @tab ---        @tab 3
-@item ---                     @tab @code{b}   @tab 4
-@item ---                     @tab @code{\n}  @tab 5
-@item @i{glyph node @code{c}} @tab ---        @tab 6
-@item @i{vertical size node}  @tab ---        @tab 7
-@item @i{vertical size node}  @tab ---        @tab 8
-@item ---                     @tab @code{\n}  @tab 9
-@end multitable
-
-@cindex @code{\v}, internal representation
-@noindent
-Elements 1, 7, and@tie{}8 are inserted by @code{gtroff}; the latter two
-(which are always present) specify the vertical extent of the last line,
-possibly modified by @code{\x}.  The @code{br} request finishes the
-current partial line, inserting a newline input token, which is
-subsequently converted to a space when the diversion is reread.  Note
-that the word space node has a fixed width that isn't stretchable
-anymore.  To convert horizontal space nodes back to input tokens, use
-the @code{unformat} request.
-
-Macros only contain elements in the token list (and the node list is
-empty); diversions and strings can contain elements in both lists.
-
-Note that the @code{chop} request simply reduces the number of elements
-in a macro, string, or diversion by one.  Exceptions are
-@dfn{compatibility save} and @dfn{compatibility ignore} input tokens,
-which are ignored.  The @code{substring} request also ignores those
-input tokens.
-
-Some requests like @code{tr} or @code{cflags} work on glyph identifiers
-only; this means that the associated glyph can be changed without
-destroying this association.  This can be very helpful for substituting
-glyphs.  In the following example, we assume that glyph @samp{foo} isn't
-available by default, so we provide a substitution using the
-@code{fchar} request and map it to input character @samp{x}.
-
-@Example
-.fchar \[foo] foo
-.tr x \[foo]
-@endExample
-
-@noindent
-Now let us assume that we install an additional special font @samp{bar}
-that has glyph @samp{foo}.
-
-@Example
-.special bar
-.rchar \[foo]
-@endExample
-
-@noindent
-Since glyphs defined with @code{fchar} are searched before glyphs in
-special fonts, we must call @code{rchar} to remove the definition of the
-fallback glyph.  Anyway, the translation is still active; @samp{x} now
-maps to the real glyph @samp{foo}.
-
-@cindex compatibility mode, and parameters
-@cindex mode, compatibility, and parameters
-@cindex arguments, and compatibility mode
-@cindex parameters, and compatibility mode
-@cindex macro arguments, and compatibility mode
-@cindex request arguments, and compatibility mode
-Macro and request arguments preserve the compatibility mode:
-
-@Example
-.cp 1     \" switch to compatibility mode
-.de xx
-\\$1
-..
-.cp 0     \" switch compatibility mode off
-.xx caf\['e]
-    @result{} caf�
-@endExample
-
-@noindent
-Since compatibility mode is on while @code{de} is called, the macro
-@code{xx} activates compatibility mode while executing.  Argument
-@code{$1} can still be handled properly because it inherits the
-compatibility mode status which was active at the point where @code{xx}
-is called.
-
-After expansion of the parameters, the compatibility save and restore
-tokens are removed.
-
-
-@c =====================================================================
-
-@node Debugging, Implementation Differences, Gtroff Internals, gtroff Reference
-@section Debugging
-@cindex debugging
-
-@code{gtroff} is not easy to debug, but there are some useful features
-and strategies for debugging.
-
-@Defreq {lf, line [@Var{filename}]}
-@pindex soelim
-@cindex multi-file documents
-@cindex documents, multi-file
-@cindex setting input line number (@code{lf})
-@cindex input line number, setting (@code{lf})
-@cindex number, input line, setting (@code{lf})
-Change the line number and optionally the file name @code{gtroff} shall
-use for error and warning messages.  @var{line} is the input line number
-of the @emph{next} line.
-
-Without argument, the request is ignored.
-
-This is a debugging aid for documents that are split into many files,
-then put together with @code{soelim} and other preprocessors.  Usually,
-it isn't invoked manually.
-
-Note that other @code{troff} implementations (including the original
-@acronym{AT&T} version) handle @code{lf} differently.  For them,
-@var{line} changes the line number of the @emph{current} line.
-@endDefreq
-
-@DefreqList {tm, string}
-@DefreqItemx {tm1, string}
-@DefreqListEndx {tmc, string}
-@cindex printing to stderr (@code{tm}, @code{tm1}, @code{tmc})
-@cindex stderr, printing to (@code{tm}, @code{tm1}, @code{tmc})
-Send @var{string} to the standard error output; this is very useful for
-printing debugging messages among other things.
-
-@cindex @code{tm} request, and copy-in mode
-@cindex copy-in mode, and @code{tm} request
-@cindex mode, copy-in, and @code{tm} request
-@cindex @code{tm1} request, and copy-in mode
-@cindex copy-in mode, and @code{tm1} request
-@cindex mode, copy-in, and @code{tm1} request
-@cindex @code{tmc} request, and copy-in mode
-@cindex copy-in mode, and @code{tmc} request
-@cindex mode, copy-in, and @code{tmc} request
-@var{string} is read in copy mode.
-
-The @code{tm} request ignores leading spaces of @var{string}; @code{tm1}
-handles its argument similar to the @code{ds} request: a leading double
-quote in @var{string} is stripped to allow initial blanks.
-
-The @code{tmc} request is similar to @code{tm1} but does not append a
-newline (as is done in @code{tm} and @code{tm1}).
-@endDefreq
-
-@Defreq {ab, [@Var{string}]}
-@cindex aborting (@code{ab})
-Similar to the @code{tm} request, except that it causes @code{gtroff} to
-stop processing.  With no argument it prints @samp{User Abort.} to
-standard error.
-@endDefreq
-
-@Defreq {ex, }
-@cindex @code{ex} request, use in debugging
-@cindex exiting (@code{ex})
-The @code{ex} request also causes @code{gtroff} to stop processing; see
-also @ref{I/O}.
-@endDefreq
-
-When doing something involved it is useful to leave the debugging
-statements in the code and have them turned on by a command line flag.
-
-@Example
-.if \n(DB .tm debugging output
-@endExample
-
-@noindent
-To activate these statements say
-
-@Example
-groff -rDB=1 file
-@endExample
-
-If it is known in advance that there are many errors and no useful
-output, @code{gtroff} can be forced to suppress formatted output with
-the @option{-z} flag.
-
-@Defreq {pev, }
-@cindex dumping environments (@code{pev})
-@cindex environments, dumping (@code{pev})
-Print the contents of the current environment and all the currently
-defined environments (both named and numbered) on @code{stderr}.
-@endDefreq
-
-@Defreq {pm, }
-@cindex dumping symbol table (@code{pm})
-@cindex symbol table, dumping (@code{pm})
-Print the entire symbol table on @code{stderr}.  Names of all defined
-macros, strings, and diversions are print together with their size in
-bytes.  Since @code{gtroff} sometimes adds nodes by itself, the returned
-size can be larger than expected.
-
-This request differs from @acronym{UNIX} @code{troff}: @code{gtroff}
-reports the sizes of diversions, ignores an additional argument to print
-only the total of the sizes, and the size isn't returned in blocks of
-128 characters.
-@endDefreq
-
-@Defreq {pnr, }
-@cindex dumping number registers (@code{pnr})
-@cindex number registers, dumping (@code{pnr})
-Print the names and contents of all currently defined number registers
-on @code{stderr}.
-@endDefreq
-
-@Defreq {ptr, }
-@cindex dumping traps (@code{ptr})
-@cindex traps, dumping (@code{ptr})
-Print the names and positions of all traps (not including input line
-traps and diversion traps) on @code{stderr}.  Empty slots in the page
-trap list are printed as well, because they can affect the priority of
-subsequently planted traps.
-@endDefreq
-
-@Defreq {fl, }
-@cindex flush output (@code{fl})
-@cindex output, flush (@code{fl})
-@cindex interactive use of @code{gtroff}
-@cindex @code{gtroff}, interactive use
-Instruct @code{gtroff} to flush its output immediately.  The intent is
-for interactive use, but this behaviour is currently not implemented in
-@code{gtroff}.  Contrary to @acronym{UNIX} @code{troff}, TTY output is
-sent to a device driver also (@code{grotty}), making it non-trivial to
-communicate interactively.
-
-This request causes a line break.
-@endDefreq
-
-@Defreq {backtrace, }
-@cindex backtrace of input stack (@code{backtrace})
-@cindex input stack, backtrace (@code{backtrace})
-Print a backtrace of the input stack to the standard error stream.
-
-Consider the following in file @file{test}:
-
-@Example
-.de xxx
-.  backtrace
-..
-.de yyy
-.  xxx
-..
-.
-.yyy
-@endExample
-
-@noindent
-On execution, @code{gtroff} prints the following:
-
-@Example
-test:2: backtrace: macro `xxx'
-test:5: backtrace: macro `yyy'
-test:8: backtrace: file `test'
-@endExample
-
-The option @option{-b} of @code{gtroff} internally calls a variant of
-this request on each error and warning.
-@endDefreq
-
-@Defreg {slimit}
-@cindex input stack, setting limit
-Use the @code{slimit} number register to set the maximum number of
-objects on the input stack.  If @code{slimit} is less than or equal
-to@tie{}0, there is no limit set.  With no limit, a buggy recursive
-macro can exhaust virtual memory.
-
-The default value is 1000; this is a compile-time constant.
-@endDefreg
-
-@Defreq {warnscale, si}
-Set the scaling indicator used in warnings to @var{si}.  Valid values
-for @var{si} are @samp{u}, @samp{i}, @samp{c}, @samp{p}, and @samp{P}.
-At startup, it is set to @samp{i}.
-@endDefreq
-
-@Defreq {spreadwarn, [@Var{limit}]}
-Make @code{gtroff} emit a warning if the additional space inserted for
-each space between words in an output line is larger or equal to
-@var{limit}.  A negative value is changed to zero; no argument toggles
-the warning on and off without changing @var{limit}.  The default
-scaling indicator is @samp{m}.  At startup, @code{spreadwarn} is
-deactivated, and @var{limit} is set to 3@dmn{m}.
-
-For example,
-
-@Example
-.spreadwarn 0.2m
-@endExample
-
-@noindent
-causes a warning if @code{gtroff} must add 0.2@dmn{m} or more for each
-interword space in a line.
-
-This request is active only if text is justified to both margins (using
-@w{@samp{.ad b}}).
-@endDefreq
-
-@cindex warnings
-@code{gtroff} has command line options for printing out more warnings
-(@option{-w}) and for printing backtraces (@option{-b}) when a warning
-or an error occurs.  The most verbose level of warnings is @option{-ww}.
-
-@DefreqList {warn, [@Var{flags}]}
-@DefregListEndx {.warn}
-@cindex level of warnings (@code{warn})
-@cindex warnings, level (@code{warn})
-Control the level of warnings checked for.  The @var{flags} are the sum
-of the numbers associated with each warning that is to be enabled; all
-other warnings are disabled.  The number associated with each warning is
-listed below.  For example, @w{@code{.warn 0}} disables all warnings,
-and @w{@code{.warn 1}} disables all warnings except that about missing
-glyphs.  If no argument is given, all warnings are enabled.
-
-The read-only number register @code{.warn} contains the current warning
-level.
-@endDefreq
-
-@menu
-* Warnings::
-@end menu
-
-@c ---------------------------------------------------------------------
-
-@node Warnings,  , Debugging, Debugging
-@subsection Warnings
-@cindex warnings
-
-The warnings that can be given to @code{gtroff} are divided into the
-following categories.  The name associated with each warning is used by
-the @option{-w} and @option{-W} options; the number is used by the
-@code{warn} request and by the @code{.warn} register.
-
-@table @samp
-@item char
-@itemx 1
-Non-existent glyphs.@footnote{@code{char} is a misnomer since it reports
-missing glyphs -- there aren't missing input characters, only invalid
-ones.}  This is enabled by default.
-
-@item number
-@itemx 2
-Invalid numeric expressions.  This is enabled by default.
-@xref{Expressions}.
-
-@item break
-@itemx 4
-@cindex fill mode
-@cindex mode, fill
-In fill mode, lines that could not be broken so that their length was
-less than the line length.  This is enabled by default.
-
-@item delim
-@itemx 8
-Missing or mismatched closing delimiters.
-
-@item el
-@itemx 16
-@cindex @code{ie} request, and warnings
-@cindex @code{el} request, and warnings
-Use of the @code{el} request with no matching @code{ie} request.
-@xref{if-else}.
-
-@item scale
-@itemx 32
-Meaningless scaling indicators.
-
-@item range
-@itemx 64
-Out of range arguments.
-
-@item syntax
-@itemx 128
-Dubious syntax in numeric expressions.
-
-@item di
-@itemx 256
-@cindex @code{di} request, and warnings
-@cindex @code{da} request, and warnings
-Use of @code{di} or @code{da} without an argument when there is no
-current diversion.
-
-@item mac
-@itemx 512
-@cindex @code{de}, @code{de1}, @code{dei} requests, and warnings
-@cindex @code{am}, @code{am1}, @code{ami} requests, and warnings
-@cindex @code{ds}, @code{ds1} requests, and warnings
-@cindex @code{as}, @code{as1} requests, and warnings
-@cindex @code{di} request, and warnings
-@cindex @code{da} request, and warnings
-@cindex @code{box}, @code{boxa} requests, and warnings
-@cindex @code{\*}, and warnings
-Use of undefined strings, macros and diversions.  When an undefined
-string, macro, or diversion is used, that string is automatically
-defined as empty.  So, in most cases, at most one warning is given for
-each name.
-
-@item reg
-@itemx 1024
-@cindex @code{nr} request, and warnings
-@cindex @code{\R}, and warnings
-@cindex @code{\n}, and warnings
-Use of undefined number registers.  When an undefined number register is
-used, that register is automatically defined to have a value of@tie{}0.
-So, in most cases, at most one warning is given for use of a particular
-name.
-
-@item tab
-@itemx 2048
-@cindex @code{\t}, and warnings
-Use of a tab character where a number was expected.
-
-@item right-brace
-@itemx 4096
-@cindex @code{\@}}, and warnings
-Use of @code{\@}} where a number was expected.
-
-@item missing
-@itemx 8192
-Requests that are missing non-optional arguments.
-
-@item input
-@itemx 16384
-Invalid input characters.
-
-@item escape
-@itemx 32768
-Unrecognized escape sequences.  When an unrecognized escape sequence
-@code{\@var{X}} is encountered, the escape character is ignored, and
-@var{X} is printed.
-
-@item space
-@itemx 65536
-@cindex compatibility mode
-Missing space between a request or macro and its argument.  This warning
-is given when an undefined name longer than two characters is
-encountered, and the first two characters of the name make a defined
-name.  The request or macro is not invoked.  When this warning is given,
-no macro is automatically defined.  This is enabled by default.  This
-warning never occurs in compatibility mode.
-
-@item font
-@itemx 131072
-Non-existent fonts.  This is enabled by default.
-
-@item ig
-@itemx 262144
-Invalid escapes in text ignored with the @code{ig} request.  These are
-conditions that are errors when they do not occur in ignored text.
-
-@item color
-@itemx 524288
-Color related warnings.
-
-@item file
-@itemx 1048576
-Missing files.  The @code{mso} request gives this warning when the
-requested macro file does not exist.  This is enabled by default.
-
-@item all
-All warnings except @samp{di}, @samp{mac} and @samp{reg}.  It is
-intended that this covers all warnings that are useful with traditional
-macro packages.
-
-@item w
-All warnings.
-@end table
-
-
-@c =====================================================================
-
-@node Implementation Differences,  , Debugging, gtroff Reference
-@section Implementation Differences
-@cindex implementation differences
-@cindex differences in implementation
-@cindex incompatibilities with @acronym{AT&T} @code{troff}
-@cindex compatibility mode
-@cindex mode, compatibility
-
-GNU @code{troff} has a number of features that cause incompatibilities
-with documents written with old versions of @code{troff}.
-
-@cindex long names
-@cindex names, long
-Long names cause some incompatibilities.  @acronym{UNIX} @code{troff}
-interprets
-
-@Example
-.dsabcd
-@endExample
-
-@cindex @code{\*}, incompatibilities with @acronym{AT&T} @code{troff}
-@cindex @code{\n}, incompatibilities with @acronym{AT&T} @code{troff}
-@noindent
-as defining a string @samp{ab} with contents @samp{cd}.  Normally, GNU
-@code{troff} interprets this as a call of a macro named @code{dsabcd}.
-Also @acronym{UNIX} @code{troff} interprets @code{\*[} or @code{\n[} as
-references to a string or number register called @samp{[}.  In GNU
-@code{troff}, however, this is normally interpreted as the start of a
-long name.  In compatibility mode GNU @code{troff} interprets long names
-in the traditional way (which means that they are not recognized as
-names).
-
-@DefreqList {cp, [@Var{n}]}
-@DefreqItemx {do, cmd}
-@DefregListEndx {.C}
-If @var{n} is missing or non-zero, turn on compatibility mode;
-otherwise, turn it off.
-
-The read-only number register @code{.C} is@tie{}1 if compatibility mode
-is on, 0@tie{}otherwise.
-
-Compatibility mode can be also turned on with the @option{-C} command
-line option.
-
-The @code{do} request turns off compatibility mode while executing its
-arguments as a @code{gtroff} command.  However, it does not turn off
-compatibility mode while processing the macro itself.  To do that, use
-the @code{de1} request (or manipulate the @code{.C} register manually).
-@xref{Writing Macros}.
-
-@Example
-.do fam T
-@endExample
-
-@noindent
-executes the @code{fam} request when compatibility mode is enabled.
-
-@code{gtroff} restores the previous compatibility setting before
-interpreting any files sourced by the @var{cmd}.
-@endDefreq
-
-@cindex input level in delimited arguments
-@cindex delimited arguments, incompatibilities with @acronym{AT&T} @code{troff}
-Two other features are controlled by @option{-C}.  If not in
-compatibility mode, GNU @code{troff} preserves the input level in
-delimited arguments:
-
-@Example
-.ds xx '
-\w'abc\*(xxdef'
-@endExample
-
-@noindent
-In compatibility mode, the string @samp{72def'} is returned; without
-@option{-C} the resulting string is @samp{168} (assuming a TTY output
-device).
-
-@cindex @code{\f}, incompatibilities with @acronym{AT&T} @code{troff}
-@cindex @code{\H}, incompatibilities with @acronym{AT&T} @code{troff}
-@cindex @code{\s}, incompatibilities with @acronym{AT&T} @code{troff}
-@cindex @code{\S}, incompatibilities with @acronym{AT&T} @code{troff}
-Finally, the escapes @code{\f}, @code{\H}, @code{\m}, @code{\M},
-@code{\R}, @code{\s}, and @code{\S} are transparent for recognizing the
-beginning of a line only in compatibility mode (this is a rather obscure
-feature).  For example, the code
-
-@Example
-.de xx
-Hallo!
-..
-\fB.xx\fP
-@endExample
-
-@noindent
-prints @samp{Hallo!} in bold face if in compatibility mode, and
-@samp{.xx} in bold face otherwise.
-
-@cindex @code{\A}, incompatibilities with @acronym{AT&T} @code{troff}
-@cindex @code{\|}, incompatibilities with @acronym{AT&T} @code{troff}
-@cindex @code{\^}, incompatibilities with @acronym{AT&T} @code{troff}
-@cindex @code{\&}, incompatibilities with @acronym{AT&T} @code{troff}
-@cindex @code{\@{}, incompatibilities with @acronym{AT&T} @code{troff}
-@cindex @code{\@}}, incompatibilities with @acronym{AT&T} @code{troff}
-@cindex @code{\@key{SP}}, incompatibilities with @acronym{AT&T} @code{troff}
-@cindex @code{\'}, incompatibilities with @acronym{AT&T} @code{troff}
-@cindex @code{\`}, incompatibilities with @acronym{AT&T} @code{troff}
-@cindex @code{\-}, incompatibilities with @acronym{AT&T} @code{troff}
-@cindex @code{\_}, incompatibilities with @acronym{AT&T} @code{troff}
-@cindex @code{\!}, incompatibilities with @acronym{AT&T} @code{troff}
-@cindex @code{\%}, incompatibilities with @acronym{AT&T} @code{troff}
-@cindex @code{\c}, incompatibilities with @acronym{AT&T} @code{troff}
-GNU @code{troff} does not allow the use of the escape sequences
-@code{\|}, @code{\^}, @code{\&}, @code{\@{}, @code{\@}},
-@code{\@key{SP}}, @code{\'}, @code{\`}, @code{\-}, @code{\_}, @code{\!},
-@code{\%}, and @code{\c} in names of strings, macros, diversions, number
-registers, fonts or environments; @acronym{UNIX} @code{troff} does.  The
-@code{\A} escape sequence (@pxref{Identifiers}) may be helpful in
-avoiding use of these escape sequences in names.
-
-@cindex fractional point sizes
-@cindex fractional type sizes
-@cindex point sizes, fractional
-@cindex type sizes, fractional
-@cindex sizes, fractional
-@cindex @code{ps} request, incompatibilities with @acronym{AT&T} @code{troff}
-Fractional point sizes cause one noteworthy incompatibility.  In
-@acronym{UNIX} @code{troff} the @code{ps} request ignores scale
-indicators and thus
-
-@Example
-.ps 10u
-@endExample
-
-@noindent
-sets the point size to 10@tie{}points, whereas in GNU @code{troff} it
-sets the point size to 10@tie{}scaled points.  @xref{Fractional Type
-Sizes}, for more information.
-
-@cindex @code{bd} request, incompatibilities with @acronym{AT&T} @code{troff}
-@cindex @code{cs} request, incompatibilities with @acronym{AT&T} @code{troff}
-@cindex @code{tr} request, incompatibilities with @acronym{AT&T} @code{troff}
-@cindex @code{fp} request, incompatibilities with @acronym{AT&T} @code{troff}
-@cindex input characters and output glyphs, compatibility with @acronym{AT&T} @code{troff}
-@cindex output glyphs, and input characters,compatibility with @acronym{AT&T} @code{troff}
-@cindex characters, input, and output glyphs, compatibility with @acronym{AT&T} @code{troff}
-@cindex glyphs, output, and input characters, compatibility with @acronym{AT&T} @code{troff}
-In GNU @code{troff} there is a fundamental difference between
-(unformatted) input characters and (formatted) output glyphs.
-Everything that affects how a glyph is output is stored with the glyph
-node; once a glyph node has been constructed it is unaffected by any
-subsequent requests that are executed, including @code{bd}, @code{cs},
-@code{tkf}, @code{tr}, or @code{fp} requests.  Normally glyphs are
-constructed from input characters at the moment immediately before the
-glyph is added to the current output line.  Macros, diversions and
-strings are all, in fact, the same type of object; they contain lists of
-input characters and glyph nodes in any combination.  A glyph node does
-not behave like an input character for the purposes of macro processing;
-it does not inherit any of the special properties that the input
-character from which it was constructed might have had.  For example,
-
-@Example
-.di x
-\\\\
-.br
-.di
-.x
-@endExample
-
-@cindex printing backslash (@code{\\}, @code{\e}, @code{\E}, @code{\[rs]})
-@cindex backslash, printing (@code{\\}, @code{\e}, @code{\E}, @code{\[rs]})
-@cindex @code{\e}, incompatibilities with @acronym{AT&T} @code{troff}
-@cindex @code{\!}, incompatibilities with @acronym{AT&T} @code{troff}
-@cindex @code{\?}, incompatibilities with @acronym{AT&T} @code{troff}
-@cindex transparent output, incompatibilities with @acronym{AT&T} @code{troff}
-@cindex output, transparent, incompatibilities with @acronym{AT&T} @code{troff}
-@noindent
-prints @samp{\\} in GNU @code{troff}; each pair of input backslashes is
-turned into one output backslash and the resulting output backslashes
-are not interpreted as escape characters when they are reread.
-@acronym{UNIX} @code{troff} would interpret them as escape characters
-when they were reread and would end up printing one @samp{\}.  The
-correct way to obtain a printable backslash is to use the @code{\e}
-escape sequence: This always prints a single instance of the current
-escape character, regardless of whether or not it is used in a
-diversion; it also works in both GNU @code{troff} and @acronym{UNIX}
-@code{troff}.@footnote{To be completely independent of the current
-escape character, use @code{\(rs}, which represents a reverse solidus
-(backslash) glyph.}  To store, for some reason, an escape sequence in a
-diversion that is interpreted when the diversion is reread, either use
-the traditional @code{\!} transparent output facility, or, if this is
-unsuitable, the new @code{\?} escape sequence.
-
-@xref{Diversions}, and @ref{Gtroff Internals}, for more information.
-
-
-
-@c =====================================================================
-@c =====================================================================
-
-@node Preprocessors, Output Devices, gtroff Reference, Top
-@chapter Preprocessors
-@cindex preprocessors
-
-This chapter describes all preprocessors that come with @code{groff} or
-which are freely available.
-
-@menu
-* geqn::
-* gtbl::
-* gpic::
-* ggrn::
-* grap::
-* gchem::
-* grefer::
-* gsoelim::
-* preconv::
-@end menu
-
-
-@c =====================================================================
-
-@node geqn, gtbl, Preprocessors, Preprocessors
-@section @code{geqn}
-@cindex @code{eqn}, the program
-@cindex @code{geqn}, the program
-
-@c XXX
-
-@menu
-* Invoking geqn::
-@end menu
-
-@c ---------------------------------------------------------------------
-
-@node Invoking geqn,  , geqn, geqn
-@subsection Invoking @code{geqn}
-@cindex invoking @code{geqn}
-@cindex @code{geqn}, invoking
-
-@c XXX
-
-
-@c =====================================================================
-
-@node gtbl, gpic, geqn, Preprocessors
-@section @code{gtbl}
-@cindex @code{tbl}, the program
-@cindex @code{gtbl}, the program
-
-@c XXX
-
-@menu
-* Invoking gtbl::
-@end menu
-
-@c ---------------------------------------------------------------------
-
-@node Invoking gtbl,  , gtbl, gtbl
-@subsection Invoking @code{gtbl}
-@cindex invoking @code{gtbl}
-@cindex @code{gtbl}, invoking
-
-@c XXX
-
-
-@c =====================================================================
-
-@node gpic, ggrn, gtbl, Preprocessors
-@section @code{gpic}
-@cindex @code{pic}, the program
-@cindex @code{gpic}, the program
-
-@c XXX
-
-@menu
-* Invoking gpic::
-@end menu
-
-@c ---------------------------------------------------------------------
-
-@node Invoking gpic,  , gpic, gpic
-@subsection Invoking @code{gpic}
-@cindex invoking @code{gpic}
-@cindex @code{gpic}, invoking
-
-@c XXX
-
-
-@c =====================================================================
-
-@node ggrn, grap, gpic, Preprocessors
-@section @code{ggrn}
-@cindex @code{grn}, the program
-@cindex @code{ggrn}, the program
-
-@c XXX
-
-@menu
-* Invoking ggrn::
-@end menu
-
-@c ---------------------------------------------------------------------
-
-@node Invoking ggrn,  , ggrn, ggrn
-@subsection Invoking @code{ggrn}
-@cindex invoking @code{ggrn}
-@cindex @code{ggrn}, invoking
-
-@c XXX
-
-
-@c =====================================================================
-
-@node grap, gchem, ggrn, Preprocessors
-@section @code{grap}
-@cindex @code{grap}, the program
-
-A free implementation of @code{grap}, written by Ted Faber,
-is available as an extra package from the following address:
-
-@display
-@uref{http://www.lunabase.org/~faber/Vault/software/grap/}
-@end display
-
-
-@c =====================================================================
-
-@node gchem, grefer, grap, Preprocessors
-@section @code{gchem}
-@cindex @code{chem}, the program
-@cindex @code{gchem}, the program
-
-@c XXX
-
-@menu
-* Invoking gchem::
-@end menu
-
-@c ---------------------------------------------------------------------
-
-@node Invoking gchem,  , gchem, gchem
-@subsection Invoking @code{gchem}
-@cindex invoking @code{gchem}
-@cindex @code{gchem}, invoking
-
-@c XXX
-
-
-@c =====================================================================
-
-@node grefer, gsoelim, gchem, Preprocessors
-@section @code{grefer}
-@cindex @code{refer}, the program
-@cindex @code{grefer}, the program
-
-@c XXX
-
-@menu
-* Invoking grefer::
-@end menu
-
-@c ---------------------------------------------------------------------
-
-@node Invoking grefer,  , grefer, grefer
-@subsection Invoking @code{grefer}
-@cindex invoking @code{grefer}
-@cindex @code{grefer}, invoking
-
-@c XXX
-
-
-@c =====================================================================
-
-@node gsoelim, preconv, grefer, Preprocessors
-@section @code{gsoelim}
-@cindex @code{soelim}, the program
-@cindex @code{gsoelim}, the program
-
-@c XXX
-
-@menu
-* Invoking gsoelim::
-@end menu
-
-@c ---------------------------------------------------------------------
-
-@node Invoking gsoelim,  , gsoelim, gsoelim
-@subsection Invoking @code{gsoelim}
-@cindex invoking @code{gsoelim}
-@cindex @code{gsoelim}, invoking
-
-@c XXX
-
-
-@c =====================================================================
-
-@node preconv,  , gsoelim, Preprocessors
-@section @code{preconv}
-@cindex @code{preconv}, the program
-
-@c XXX
-
-@menu
-* Invoking preconv::
-@end menu
-
-@c ---------------------------------------------------------------------
-
-@node Invoking preconv,  , preconv, preconv
-@subsection Invoking @code{preconv}
-@cindex invoking @code{preconv}
-@cindex @code{preconv}, invoking
-
-@c XXX
-
-
-@c =====================================================================
-@c =====================================================================
-
-@node Output Devices, File formats, Preprocessors, Top
-@chapter Output Devices
-@cindex output devices
-@cindex devices for output
-
-@c XXX
-
-@menu
-* Special Characters::
-* grotty::
-* grops::
-* gropdf::
-* grodvi::
-* grolj4::
-* grolbp::
-* grohtml::
-* gxditview::
-@end menu
-
-
-@c =====================================================================
-
-@node Special Characters, grotty, Output Devices, Output Devices
-@section Special Characters
-@cindex special characters
-@cindex characters, special
-
-@c XXX
-
-@xref{Font Files}.
-
-
-@c =====================================================================
-
-@node grotty, grops, Special Characters, Output Devices
-@section @code{grotty}
-@cindex @code{grotty}, the program
-
-The postprocessor @code{grotty} translates the output from GNU
-@code{troff} into a form suitable for typewriter-like devices.  It is
-fully documented on its manual page, @cite{grotty(1)}.
-
-@menu
-* Invoking grotty::
-@end menu
-
-@c ---------------------------------------------------------------------
-
-@node Invoking grotty,  , grotty, grotty
-@subsection Invoking @code{grotty}
-@cindex invoking @code{grotty}
-@cindex @code{grotty}, invoking
-
-The postprocessor @command{grotty} accepts the following command-line
-options:
-
-@table @option
-@item -b
-Do not overstrike bold glyphs.  Ignored if @option{-c} isn't used.
-
-@item -B
-Do not underline bold-italic glyphs.  Ignored if @option{-c} isn't
-used.
-
-@item -c
-Use overprint and disable colours for printing on legacy Teletype
-printers (see below).
-
-@item -d
-Do not render lines (this is, ignore all @code{\D} escapes).
-
-@item -f
-Use form feed control characters in the output.
-
-@item -F@var{dir}
-Put the directory @file{@var{dir}/dev@var{name}} in front of the
-search path for the font and device description files, given the
-target device @var{name}.
-
-@item -h
-Use horizontal tabs for sequences of 8 space characters.
-
-@item -i
-Request italic glyphs from the terminal.  Ignored if @option{-c} is
-active.
-
-@item -o
-Do not overstrike.
-
-@item -r
-Highlight italic glyphs.  Ignored if @option{-c} is active.
-
-@item -u
-Do not underline italic glyphs.  Ignored if @option{-c} isn't used.
-
-@item -U
-Do not overstrike bold-italic glyphs.  Ignored if @option{-c} isn't
-used.
-
-@item -v
-Print the version number.
-@end table
-
-@pindex less
-@cindex Teletype
-@cindex ISO 6249 SGR
-@cindex terminal control sequences
-@cindex control sequences, for terminals
-The @option{-c} mode for TTY output devices means that underlining is
-done by emitting sequences of @samp{_} and @samp{^H} (the backspace
-character) before the actual character.  Literally, this is printing
-an underline character, then moving the caret back one character
-position, and printing the actual character at the same position as
-the underline character (similar to a typewriter).  Usually, a modern
-terminal can't interpret this (and the original Teletype machines for
-which this sequence was appropriate are no longer in use).  You need
-a pager program like @code{less} that translates this into
-ISO@tie{}6429 SGR sequences to control terminals.
-
-
-@c =====================================================================
-
-@node grops, gropdf, grotty, Output Devices
-@section @code{grops}
-@cindex @code{grops}, the program
-
-The postprocessor @command{grops} translates the output from GNU
-@command{troff} into a form suitable for Adobe @sc{PostScript}
-devices.  It is fully documented on its manual page, @cite{grops(1)}.
-
-
-@menu
-* Invoking grops::
-* Embedding PostScript::
-@end menu
-
-@c ---------------------------------------------------------------------
-
-@node Invoking grops, Embedding PostScript, grops, grops
-@subsection Invoking @code{grops}
-@cindex invoking @code{grops}
-@cindex @code{grops}, invoking
-
-The postprocessor @code{grops} accepts the following command-line
-options:
-
-@table @option
-@item -b@var{flags}
-Use backward compatibility settings given by @var{flags} as
-documented in the @cite{grops(1)} manual page.  Overrides the command
-@option{broken} in the @file{DESC} file.
-
-@item -c@var{n}
-Print @var{n} copies of each page.
-
-@item -F@var{dir}
-Put the directory @file{@var{dir}/dev@var{name}} in front of the
-search path for the font, prologue and device description files,
-given the target device @var{name}, usually @strong{ps}.
-
-@item -g
-Tell the printer to guess the page length.  Useful for printing
-vertically centered pages when the paper dimensions are determined at
-print time.
-
-@item -I@var{path} @dots{}
-Consider the directory @file{@var{path}} for searching included files
-specified with relative paths.  The current directory is searched as
-fallback.
-
-@item -l
-Use landscape orientation.
-
-@item -m
-Use manual feed.
-
-@item -p@var{papersize}
-Set the page dimensions.  Overrides the commands @option{papersize},
-@option{paperlength}, and @option{paperwidth} in the @file{DESC}
-file.  See the @cite{groff_font(5)} manual page for details.
-
-@item -P@var{prologue}
-Use the @var{prologue} in the font path as the prologue instead of
-the default @file{prologue}.  Overrides the environment variable
-@env{GROPS_PROLOGUE}.
-
-@item -w@var{n}
-Set the line thickness to @var{n}/1000@dmn{em}.  Overrides the
-default value @var{n} = 40.
-
-@item -v
-Print the version number.
-@end table
-
-@c ---------------------------------------------------------------------
-
-@node Embedding PostScript,  , Invoking grops, grops
-@subsection Embedding @sc{PostScript}
-@cindex embedding PostScript
-@cindex PostScript, embedding
-
-The escape sequence
-
-@code{\X'ps: import @var{file} @var{llx} @var{lly} @var{urx} @var{ury}
-  @var{width} [@var{height}]'}
-
-@noindent
-places a rectangle of the specified @var{width} containing the
-@sc{PostScript} drawing from file @var{file} bound by the box from
-@var{llx} @var{lly} to @var{urx} @var{ury} (in @sc{PostScript}
-coordinates) at the insertion point.  If @var{height} is not
-specified, the embedded drawing is scaled proportionally.
-
-@xref{Miscellaneous}, for the @code{psbb} request, which automatically
-generates the bounding box.
-
-This escape sequence is used internally by the macro @code{PSPIC}
-(see the @cite{groff_tmac(5)} manual page).
-
-
-@c =====================================================================
-
-@node gropdf, grodvi, grops, Output Devices
-@section @code{gropdf}
-@cindex @code{gropdf}, the program
-
-The postprocessor @command{gropdf} translates the output from GNU
-@command{troff} into a form suitable for Adobe PDF devices.  It is fully
-documented on its manual page, @cite{gropdf(1)}.
-
-@menu
-* Invoking gropdf::
-* Embedding PDF::
-@end menu
-
-@c ---------------------------------------------------------------------
-
-@node Invoking gropdf, Embedding PDF, gropdf, gropdf
-@subsection Invoking @code{gropdf}
-@cindex invoking @code{gropdf}
-@cindex @code{gropdf}, invoking
-
-The postprocessor @code{gropdf} accepts the following command-line
-options:
-
-@table @option
-@item -d
-Produce uncompressed PDFs that include debugging comments.
-
-@item -e
-This forces @code{gropdf} to embed all used fonts in the PDF,
-even if they are one of the 14 base Adobe fonts.
-
-@item -F@var{dir}
-Put the directory @file{@var{dir}/dev@var{name}} in front of the
-search path for the font, prologue and device description files,
-given the target device @var{name}, usually @strong{pdf}.
-
-@item -y@var{foundry}
-This forces the use of a different font foundry.
-
-@item -l
-Use landscape orientation.
-
-@item -p@var{papersize}
-Set the page dimensions.  Overrides the commands @option{papersize},
-@option{paperlength}, and @option{paperwidth} in the @file{DESC}
-file.  See the @cite{groff_font(5)} manual page for details.
-
-@item -v
-Print the version number.
-
-@item -s
-Append a comment line to end of PDF showing statistics, i.e. number of
-pages in document.  Ghostscript's @cite{ps2pdf(1)} complains about this
-line if it is included, but works anyway.
-
-@item -u@var{filename}
-@code{gropdf} normally includes a ToUnicode CMap with any font created
-using @file{text.enc} as the encoding file, this makes it easier to
-search for words that contain ligatures.  You can include your own CMap
-by specifying a @var{filename} or have no CMap at all by omitting the
-@var{filename}.
-@end table
-
-@c ---------------------------------------------------------------------
-
-@node Embedding PDF,  , Invoking gropdf, gropdf
-@subsection Embedding PDF
-@cindex embedding PDF
-@cindex PDF, embedding
-
-The escape sequence
-
-@code{\X'pdf: pdfpic @var{file} @var{alignment} @var{width} [@var{height}]
-  [@var{linelength}]'}
-
-@noindent
-places a rectangle of the specified @var{width} containing the PDF
-drawing from file @var{file} of desired @var{width} and @var{height} (if
-@var{height} is missing or zero then it is scaled proportionally).  If
-@var{alignment} is @code{-L} the drawing is left aligned.  If it is
-@code{-C} or @code{-R} a @var{linelength} greater than the width of the
-drawing is required as well.  If @var{width} is specified as zero then
-the width is scaled in proportion to the height.
-
-
-@c =====================================================================
-
-@node grodvi, grolj4, gropdf, Output Devices
-@section @code{grodvi}
-@cindex @code{grodvi}, the program
-
-The postprocessor @command{grodvi} translates the output from GNU
-@command{troff} into the @strong{DVI} output format compatible with
-the @strong{@TeX{}} document preparation system.  It is fully
-documented on its manual page, @cite{grodvi(1)}.
-
-@menu
-* Invoking grodvi::
-@end menu
-
-@c ---------------------------------------------------------------------
-
-@node Invoking grodvi,  , grodvi, grodvi
-@subsection Invoking @code{grodvi}
-@cindex invoking @code{grodvi}
-@cindex @code{grodvi}, invoking
-
-The postprocessor @code{grodvi} accepts the following command-line
-options:
-
-@table @option
-@item -d
-Do not use @strong{tpic} specials to implement drawing commands.
-
-@item -F@var{dir}
-Put the directory @file{@var{dir}/dev@var{name}} in front of the
-search path for the font and device description files, given the
-target device @var{name}, usually @strong{dvi}.
-
-@item -l
-Use landscape orientation.
-
-@item -p@var{papersize}
-Set the page dimensions.  Overrides the commands @option{papersize},
-@option{paperlength}, and @option{paperwidth} in the @file{DESC}
-file.  See @cite{groff_font(5)} manual page for details.
-
-@item -v
-Print the version number.
-
-@item -w@var{n}
-Set the line thickness to @var{n}/1000@dmn{em}.  Overrides the
-default value @var{n} = 40.
-@end table
-
-
-@c =====================================================================
-
-@node grolj4, grolbp, grodvi, Output Devices
-@section @code{grolj4}
-@cindex @code{grolj4}, the program
-
-The postprocessor @command{grolj4} translates the output from GNU
-@command{troff} into the @strong{PCL5} output format suitable for
-printing on a @strong{HP LaserJet@tie{}4} printer.  It is fully
-documented on its manual page, @cite{grolj4(1)}.
-
-@menu
-* Invoking grolj4::
-@end menu
-
-@c ---------------------------------------------------------------------
-
-@node Invoking grolj4,  , grolj4, grolj4
-@subsection Invoking @code{grolj4}
-@cindex invoking @code{grolj4}
-@cindex @code{grolj4}, invoking
-
-The postprocessor @code{grolj4} accepts the following command-line
-options:
-
-@table @option
-@item -c@var{n}
-Print @var{n} copies of each page.
-
-@item -F@var{dir}
-Put the directory @file{@var{dir}/dev@var{name}} in front of the
-search path for the font and device description files, given the
-target device @var{name}, usually @strong{lj4}.
-
-@item -l
-Use landscape orientation.
-
-@item -p@var{size}
-Set the page dimensions.  Valid values for @var{size} are:
-@code{letter}, @code{legal}, @code{executive}, @code{a4},
-@code{com10}, @code{monarch}, @code{c5}, @code{b5}, @code{d1}.
-
-@item -v
-Print the version number.
-
-@item -w@var{n}
-Set the line thickness to @var{n}/1000@dmn{em}.  Overrides the
-default value @var{n} = 40.
-@end table
-
-The special drawing command @code{\D'R @var{dh} @var{dv}'} draws a
-horizontal rectangle from the current position to the position at
-offset (@var{dh},@var{dv}).
-
-
-@c =====================================================================
-
-@node grolbp, grohtml, grolj4, Output Devices
-@section @code{grolbp}
-@cindex @code{grolbp}, the program
-
-The postprocessor @command{grolbp} translates the output from GNU
-@command{troff} into the @strong{LBP} output format suitable for
-printing on @strong{Canon CAPSL} printers.  It is fully documented on
-its manual page, @cite{grolbp(1)}.
-
-@menu
-* Invoking grolbp::
-@end menu
-
-@c ---------------------------------------------------------------------
-
-@node Invoking grolbp,  , grolbp, grolbp
-@subsection Invoking @code{grolbp}
-@cindex invoking @code{grolbp}
-@cindex @code{grolbp}, invoking
-
-The postprocessor @code{grolbp} accepts the following command-line
-options:
-
-@table @option
-@item -c@var{n}
-Print @var{n} copies of each page.
-
-@item -F@var{dir}
-Put the directory @file{@var{dir}/dev@var{name}} in front of the
-search path for the font, prologue and device description files,
-given the target device @var{name}, usually @strong{lbp}.
-
-@item -l
-Use landscape orientation.
-
-@item -o@var{orientation}
-Use the @var{orientation} specified: @code{portrait} or
-@code{landscape}.
-
-@item -p@var{papersize}
-Set the page dimensions.  See @cite{groff_font(5)} manual page for
-details.
-
-@item -w@var{n}
-Set the line thickness to @var{n}/1000@dmn{em}.  Overrides the
-default value @var{n} = 40.
-
-@item -v
-Print the version number.
-
-@item -h
-Print command-line help.
-@end table
-
-
-@c =====================================================================
-
-@node grohtml, gxditview, grolbp, Output Devices
-@section @code{grohtml}
-@cindex @code{grohtml}, the program
-
-The @code{grohtml} front end (which consists of a preprocessor,
-@code{pre-grohtml}, and a device driver, @code{post-grohtml}) translates
-the output of GNU @code{troff} to @acronym{HTML}.  Users should always
-invoke @code{grohtml} via the @code{groff} command with a @code{\-Thtml}
-option.  If no files are given, @code{grohtml} will read the standard
-input.  A filename of @code{-} will also cause @code{grohtml} to read
-the standard input.  @acronym{HTML} output is written to the standard
-output.  When @code{grohtml} is run by @code{groff}, options can be
-passed to @code{grohtml} using @code{groff}'s @option{-P} option.
-
-@code{grohtml} invokes @code{groff} twice.  In the first pass, pictures,
-equations, and tables are rendered using the @code{ps} device, and in
-the second pass @acronym{HTML} output is generated by the @code{html}
-device.
-
-@code{grohtml} always writes output in @code{UTF-8} encoding and has
-built-in entities for all non-composite unicode characters.  In spite of
-this, @code{groff} may issue warnings about unknown special characters
-if they can't be found during the first pass.  Such warnings can be
-safely ignored unless the special characters appear inside a table or
-equation, in which case glyphs for these characters must be defined for
-the @code{ps} device as well.
-
-This output device is fully documented on its manual page,
-@cite{grohtml(1)}.
-
-@menu
-* Invoking grohtml::
-* grohtml specific registers and strings::
-@end menu
-
-@c ---------------------------------------------------------------------
-
-@node Invoking grohtml, grohtml specific registers and strings, grohtml, grohtml
-@subsection Invoking @code{grohtml}
-@cindex invoking @code{grohtml}
-@cindex @code{grohtml}, invoking
-
-The postprocessor @code{grohtml} accepts the following command-line
-options:
-
-@table @option
-@item -a@var{bits}
-Use this number of @var{bits} (= 1, 2 or 4) for text antialiasing.
-Default: @var{bits} = 4.
-
-@item -a0
-Do not use text antialiasing.
-
-@item -b
-Use white background.
-
-@item -D@var{dir}
-Store rendered images in the directory @file{@var{dir}}.
-
-@item -F@var{dir}
-Put the directory @file{@var{dir}/dev@var{name}} in front of the
-search path for the font, prologue and device description files,
-given the target device @var{name}, usually @strong{html}.
-
-@item -g@var{bits}
-Use this number of @var{bits} (= 1, 2 or 4) for antialiasing of
-drawings.  Default: @var{bits} = 4.
-
-@item -g0
-Do not use antialiasing for drawings.
-
-@item -h
-Use the @code{B} element for section headings.
-
-@item -i@var{resolution}
-Use the @var{resolution} for rendered images.  Default:
-@var{resolution} = 100@dmn{dpi}.
-
-@item -I@var{stem}
-Set the images' @var{stem name}.  Default: @var{stem} =
-@file{grohtml-@var{XXX}} (@var{XXX} is the process ID).
-
-@item -j@var{stem}
-Place each section in a separate file called
-@file{@var{stem}-@var{n}.html} (where @var{n} is a generated section
-number).
-
-@item -l
-Do not generate the table of contents.
-
-@item -n
-Generate simple fragment identifiers.
-
-@item -o@var{offset}
-Use vertical paddding @var{offset} for images.
-
-@item -p
-Display the page rendering progress to @code{stderr}.
-
-@item -r
-Do not use horizontal rules to separate headers and footers.
-
-@item -s@var{size}
-Set the base font size, to be modified using the elements @code{BIG}
-and @code{SMALL}.
-
-@item -S@var{level}
-Generate separate files for sections at level @var{level}.
-
-@item -v
-Print the version number.
-
-@item -V
-Generate a validator button at the bottom.
-
-@item -y
-Generate a signature of groff after the validator button, if any.
-@end table
-
-
-@c ---------------------------------------------------------------------
-
-@node grohtml specific registers and strings,  , Invoking grohtml, grohtml
-@subsection @code{grohtml} specific registers and strings
-@cindex registers specific to @code{grohtml}
-@cindex strings specific to @code{grohtml}
-@cindex @code{grohtml}, registers and strings
-
-@DefmpregList {ps4html, grohtml}
-@DefstrListEndx {www-image-template, grohtml}
-The registers @code{ps4html} and @code{www-image-template} are defined
-by the @code{pre-grohtml} preprocessor.  @code{pre-grohtml} reads in the
-@code{troff} input, marks up the inline equations and passes the result
-firstly to
-
-@Example
-troff -Tps -rps4html=1 -dwww-image-template=@var{template}
-@endExample
-
-@noindent
-and secondly to
-
-@Example
-troff -Thtml
-@endExample
-
-@noindent
-or
-
-@Example
-troff -Txhtml
-@endExample
-
-@cindex MathML
-The @sc{PostScript} device is used to create all the image files (for
-@option{-Thtml}; if @option{-Txhtml} is used, all equations are passed
-to @code{geqn} to produce @acronym{MathML}, and the register
-@code{ps4html} enables the macro sets to ignore floating keeps, footers,
-and headings.
-
-The register @code{www-image-template} is set to the user specified
-template name or the default name.
-@endDefmpreg
-
-
-@c =====================================================================
-
-@node gxditview,  , grohtml, Output Devices
-@section @code{gxditview}
-@cindex @code{gxditview}, the program
-
-@c XXX
-
-@menu
-* Invoking gxditview::
-@end menu
-
-@c ---------------------------------------------------------------------
-
-@node Invoking gxditview,  , gxditview, gxditview
-@subsection Invoking @code{gxditview}
-@cindex invoking @code{gxditview}
-@cindex @code{gxditview}, invoking
-
-@c XXX
-@c X11's xditview
-
-
-
-@c =====================================================================
-@c =====================================================================
-
-@node File formats, Installation, Output Devices, Top
-@chapter File formats
-@cindex file formats
-@cindex formats, file
-
-All files read and written by @code{gtroff} are text files.  The
-following two sections describe their format.
-
-@menu
-* gtroff Output::
-* Font Files::
-@end menu
-
-
-@c =====================================================================
-
-@node gtroff Output, Font Files, File formats, File formats
-@section @code{gtroff} Output
-@cindex @code{gtroff}, output
-@cindex output, @code{gtroff}
-
-This section describes the intermediate output format of GNU
-@code{troff}.  This output is produced by a run of @code{gtroff} before
-it is fed into a device postprocessor program.
-
-As @code{groff} is a wrapper program around @code{gtroff} that
-automatically calls a postprocessor, this output does not show up
-normally.  This is why it is called @dfn{intermediate}.  @code{groff}
-provides the option @option{-Z} to inhibit postprocessing, such that the
-produced intermediate output is sent to standard output just like
-calling @code{gtroff} manually.
-
-@cindex troff output
-@cindex output, troff
-@cindex intermediate output
-@cindex output, intermediate
-Here, the term @dfn{troff output} describes what is output by
-@code{gtroff}, while @dfn{intermediate output} refers to the language
-that is accepted by the parser that prepares this output for the
-postprocessors.  This parser is smarter on whitespace and implements
-obsolete elements for compatibility, otherwise both formats are the
-same.@footnote{The parser and postprocessor for intermediate output can
-be found in the file@*
-@file{@var{groff-source-dir}/src/libs/libdriver/input.cpp}.}
-
-The main purpose of the intermediate output concept is to facilitate the
-development of postprocessors by providing a common programming
-interface for all devices.  It has a language of its own that is
-completely different from the @code{gtroff} language.  While the
-@code{gtroff} language is a high-level programming language for text
-processing, the intermediate output language is a kind of low-level
-assembler language by specifying all positions on the page for writing
-and drawing.
-
-The intermediate output produced by @code{gtroff} is fairly readable,
-while output from @acronym{AT&T} @code{troff} is rather hard to
-understand because of strange habits that are still supported, but not
-used any longer by @code{gtroff}.
-
-@menu
-* Language Concepts::
-* Command Reference::
-* Intermediate Output Examples::
-* Output Language Compatibility::
-@end menu
-
-@c ---------------------------------------------------------------------
-
-@node Language Concepts, Command Reference, gtroff Output, gtroff Output
-@subsection Language Concepts
-
-During the run of @code{gtroff}, the input data is cracked down to the
-information on what has to be printed at what position on the intended
-device.  So the language of the intermediate output format can be quite
-small.  Its only elements are commands with and without arguments.  In
-this section, the term @dfn{command} always refers to the intermediate
-output language, and never to the @code{gtroff} language used for
-document formatting.  There are commands for positioning and text
-writing, for drawing, and for device controlling.
-
-@menu
-* Separation::
-* Argument Units::
-* Document Parts::
-@end menu
-
-@node Separation, Argument Units, Language Concepts, Language Concepts
-@subsubsection Separation
-
-@acronym{AT&T} @code{troff} output has strange requirements on
-whitespace.  The @code{gtroff} output parser, however, is smart about
-whitespace by making it maximally optional.  The whitespace characters,
-i.e., the tab, space, and newline characters, always have a syntactical
-meaning.  They are never printable because spacing within the output is
-always done by positioning commands.
-
-Any sequence of space or tab characters is treated as a single
-@dfn{syntactical space}.  It separates commands and arguments, but is
-only required when there would occur a clashing between the command code
-and the arguments without the space.  Most often, this happens when
-variable-length command names, arguments, argument lists, or command
-clusters meet.  Commands and arguments with a known, fixed length need
-not be separated by syntactical space.
-
-A line break is a syntactical element, too.  Every command argument can
-be followed by whitespace, a comment, or a newline character.  Thus a
-@dfn{syntactical line break} is defined to consist of optional
-syntactical space that is optionally followed by a comment, and a
-newline character.
-
-The normal commands, those for positioning and text, consist of a single
-letter taking a fixed number of arguments.  For historical reasons, the
-parser allows to stack such commands on the same line, but fortunately,
-in @code{gtroff}'s intermediate output, every command with at least one
-argument is followed by a line break, thus providing excellent
-readability.
-
-The other commands -- those for drawing and device controlling -- have a
-more complicated structure; some recognize long command names, and some
-take a variable number of arguments.  So all @samp{D} and @samp{x}
-commands were designed to request a syntactical line break after their
-last argument.  Only one command, @w{@samp{x X}}, has an argument that
-can stretch over several lines; all other commands must have all of
-their arguments on the same line as the command, i.e., the arguments may
-not be split by a line break.
-
-Empty lines (these are lines containing only space and/or a comment),
-can occur everywhere.  They are just ignored.
-
-@node Argument Units, Document Parts, Separation, Language Concepts
-@subsubsection Argument Units
-
-Some commands take integer arguments that are assumed to represent
-values in a measurement unit, but the letter for the corresponding scale
-indicator is not written with the output command arguments.  Most
-commands assume the scale indicator @samp{u}, the basic unit of the
-device, some use @samp{z}, the scaled point unit of the device, while
-others, such as the color commands, expect plain integers.
-
-Note that single characters can have the eighth bit set, as can the
-names of fonts and special characters.  The names of characters and
-fonts can be of arbitrary length.  A character that is to be printed is
-always in the current font.
-
-A string argument is always terminated by the next whitespace character
-(space, tab, or newline); an embedded @samp{#} character is regarded as
-part of the argument, not as the beginning of a comment command.  An
-integer argument is already terminated by the next non-digit character,
-which then is regarded as the first character of the next argument or
-command.
-
-@node Document Parts,  , Argument Units, Language Concepts
-@subsubsection Document Parts
-
-A correct intermediate output document consists of two parts, the
-@dfn{prologue} and the @dfn{body}.
-
-The task of the prologue is to set the general device parameters using
-three exactly specified commands.  @code{gtroff}'s prologue is
-guaranteed to consist of the following three lines (in that order):
-
-@Example
-x T @var{device}
-x res @var{n} @var{h} @var{v}
-x init
-@endExample
-
-@noindent
-with the arguments set as outlined in @ref{Device Control Commands}.
-Note that the parser for the intermediate output format is able to
-swallow additional whitespace and comments as well even in the prologue.
-
-The body is the main section for processing the document data.
-Syntactically, it is a sequence of any commands different from the ones
-used in the prologue.  Processing is terminated as soon as the first
-@w{@samp{x stop}} command is encountered; the last line of any
-@code{gtroff} intermediate output always contains such a command.
-
-Semantically, the body is page oriented.  A new page is started by a
-@samp{p} command.  Positioning, writing, and drawing commands are always
-done within the current page, so they cannot occur before the first
-@samp{p} command.  Absolute positioning (by the @samp{H} and @samp{V}
-commands) is done relative to the current page; all other positioning is
-done relative to the current location within this page.
-
-@c ---------------------------------------------------------------------
-
-@node Command Reference, Intermediate Output Examples, Language Concepts, gtroff Output
-@subsection Command Reference
-
-This section describes all intermediate output commands, both from
-@acronym{AT&T} @code{troff} as well as the @code{gtroff} extensions.
-
-@menu
-* Comment Command::
-* Simple Commands::
-* Graphics Commands::
-* Device Control Commands::
-* Obsolete Command::
-@end menu
-
-@node Comment Command, Simple Commands, Command Reference, Command Reference
-@subsubsection Comment Command
-
-@table @code
-@item #@var{anything}@angles{end of line}
-A comment.  Ignore any characters from the @samp{#} character up to the
-next newline character.
-
-This command is the only possibility for commenting in the intermediate
-output.  Each comment can be preceded by arbitrary syntactical space;
-every command can be terminated by a comment.
-@end table
-
-@node Simple Commands, Graphics Commands, Comment Command, Command Reference
-@subsubsection Simple Commands
-
-The commands in this subsection have a command code consisting of a
-single character, taking a fixed number of arguments.  Most of them are
-commands for positioning and text writing.  These commands are smart
-about whitespace.  Optionally, syntactical space can be inserted before,
-after, and between the command letter and its arguments.  All of these
-commands are stackable, i.e., they can be preceded by other simple
-commands or followed by arbitrary other commands on the same line.  A
-separating syntactical space is only necessary when two integer
-arguments would clash or if the preceding argument ends with a string
-argument.
-
-@table @code
-@ignore
-.if (\n[@USE_ENV_STACK] == 1) \{\
-.command {
-Open a new environment by copying the actual device configuration data
-to the environment stack.
-.
-The current environment is setup by the device specification and
-manipulated by the setting commands.
-.
-.
-.command }
-Close the actual environment (opened by a preceding
-.BR { \~command)
-and restore the previous environment from the environment
-stack as the actual device configuration data.
-.
-\}              \" endif @USE_ENV_STACK
-@end ignore
-
-@item C @var{xxx}@angles{whitespace}
-Print a special character named @var{xxx}.  The trailing syntactical
-space or line break is necessary to allow glyph names of arbitrary
-length.  The glyph is printed at the current print position; the glyph's
-size is read from the font file.  The print position is not changed.
-
-@item c @var{g}
-Print glyph@tie{}@var{g} at the current print
-position;@footnote{@samp{c} is actually a misnomer since it outputs a
-glyph.} the glyph's size is read from the font file.  The print position
-is not changed.
-
-@item f @var{n}
-Set font to font number@tie{}@var{n} (a non-negative integer).
-
-@item H @var{n}
-Move right to the absolute vertical position@tie{}@var{n} (a
-non-negative integer in basic units @samp{u} relative to left edge of
-current page.
-
-@item h @var{n}
-Move @var{n} (a non-negative integer) basic units @samp{u} horizontally
-to the right.  The original @acronym{UNIX} troff manual allows negative
-values for @var{n} also, but @code{gtroff} doesn't use this.
-
-@item m @var{color-scheme} @r{[}@var{component} @dots{}@r{]}
-Set the color for text (glyphs), line drawing, and the outline of
-graphic objects using different color schemes; the analoguous command
-for the filling color of graphic objects is @samp{DF}.  The color
-components are specified as integer arguments between 0 and 65536.  The
-number of color components and their meaning vary for the different
-color schemes.  These commands are generated by @code{gtroff}'s escape
-sequence @code{\m}.  No position changing.  These commands are a
-@code{gtroff} extension.
-
-@table @code
-@item mc @var{cyan} @var{magenta} @var{yellow}
-Set color using the CMY color scheme, having the 3@tie{}color components
-@var{cyan}, @var{magenta}, and @var{yellow}.
-
-@item md
-Set color to the default color value (black in most cases).  No
-component arguments.
-
-@item mg @var{gray}
-Set color to the shade of gray given by the argument, an integer between
-0 (black) and 65536 (white).
-
-@item mk @var{cyan} @var{magenta} @var{yellow} @var{black}
-Set color using the CMYK color scheme, having the 4@tie{}color
-components @var{cyan}, @var{magenta}, @var{yellow}, and @var{black}.
-
-@item mr @var{red} @var{green} @var{blue}
-Set color using the RGB color scheme, having the 3@tie{}color components
-@var{red}, @var{green}, and @var{blue}.
-@end table
-
-@item N @var{n}
-Print glyph with index@tie{}@var{n} (a non-negative integer) of the
-current font.  This command is a @code{gtroff} extension.
-
-@item n @var{b} @var{a}
-Inform the device about a line break, but no positioning is done by this
-command.  In @acronym{AT&T} @code{troff}, the integer arguments @var{b}
-and@tie{}@var{a} informed about the space before and after the current
-line to make the intermediate output more human readable without
-performing any action.  In @code{groff}, they are just ignored, but they
-must be provided for compatibility reasons.
-
-@item p @var{n}
-Begin a new page in the outprint.  The page number is set
-to@tie{}@var{n}.  This page is completely independent of pages formerly
-processed even if those have the same page number.  The vertical
-position on the outprint is automatically set to@tie{}0.  All
-positioning, writing, and drawing is always done relative to a page, so
-a @samp{p} command must be issued before any of these commands.
-
-@item s @var{n}
-Set point size to @var{n}@tie{}scaled points (this is unit @samp{z}).
-@acronym{AT&T} @code{troff} used the unit points (@samp{p}) instead.
-@xref{Output Language Compatibility}.
-
-@item t @var{xxx}@angles{whitespace}
-@itemx t @var{xxx} @var{dummy-arg}@angles{whitespace}
-Print a word, i.e., a sequence of characters @var{xxx} representing
-output glyphs which names are single characters, terminated by a space
-character or a line break; an optional second integer argument is
-ignored (this allows the formatter to generate an even number of
-arguments).  The first glyph should be printed at the current position,
-the current horizontal position should then be increased by the width of
-the first glyph, and so on for each glyph.  The widths of the glyphs are
-read from the font file, scaled for the current point size, and rounded
-to a multiple of the horizontal resolution.  Special characters cannot
-be printed using this command (use the @samp{C} command for special
-characters).  This command is a @code{gtroff} extension; it is only used
-for devices whose @file{DESC} file contains the @code{tcommand} keyword
-(@pxref{DESC File Format}).
-
-@item u @var{n} @var{xxx}@angles{whitespace}
-Print word with track kerning.  This is the same as the @samp{t} command
-except that after printing each glyph, the current horizontal position
-is increased by the sum of the width of that glyph and@tie{}@var{n} (an
-integer in basic units @samp{u}).  This command is a @code{gtroff}
-extension; it is only used for devices whose @file{DESC} file contains
-the @code{tcommand} keyword (@pxref{DESC File Format}).
-
-@item V @var{n}
-Move down to the absolute vertical position@tie{}@var{n} (a non-negative
-integer in basic units @samp{u}) relative to upper edge of current page.
-
-@item v @var{n}
-Move @var{n}@tie{}basic units @samp{u} down (@var{n} is a non-negative
-integer).  The original @acronym{UNIX} troff manual allows negative
-values for @var{n} also, but @code{gtroff} doesn't use this.
-
-@item w
-Informs about a paddable white space to increase readability.  The
-spacing itself must be performed explicitly by a move command.
-@end table
-
-@node Graphics Commands, Device Control Commands, Simple Commands, Command Reference
-@subsubsection Graphics Commands
-
-Each graphics or drawing command in the intermediate output starts with
-the letter @samp{D}, followed by one or two characters that specify a
-subcommand; this is followed by a fixed or variable number of integer
-arguments that are separated by a single space character.  A @samp{D}
-command may not be followed by another command on the same line (apart
-from a comment), so each @samp{D} command is terminated by a syntactical
-line break.
-
-@code{gtroff} output follows the classical spacing rules (no space
-between command and subcommand, all arguments are preceded by a single
-space character), but the parser allows optional space between the
-command letters and makes the space before the first argument optional.
-As usual, each space can be any sequence of tab and space characters.
-
-Some graphics commands can take a variable number of arguments.  In this
-case, they are integers representing a size measured in basic units
-@samp{u}.  The arguments called @var{h1}, @var{h2}, @dots{}, @var{hn}
-stand for horizontal distances where positive means right, negative
-left.  The arguments called @var{v1}, @var{v2}, @dots{}, @var{vn} stand
-for vertical distances where positive means down, negative up.  All
-these distances are offsets relative to the current location.
-
-Each graphics command directly corresponds to a similar @code{gtroff}
-@code{\D} escape sequence.  @xref{Drawing Requests}.
-
-Unknown @samp{D} commands are assumed to be device-specific.  Its
-arguments are parsed as strings; the whole information is then sent to
-the postprocessor.
-
-In the following command reference, the syntax element @angles{line
-break} means a syntactical line break as defined above.
-
-@table @code
-@item D~ @var{h1} @var{v1} @var{h2} @var{v2} @dots{} @var{hn} @var{vn}@angles{line break}
-Draw B-spline from current position to offset (@var{h1},@var{v1}), then
-to offset (@var{h2},@var{v2}), if given, etc.@: up to
-(@var{hn},@var{vn}).  This command takes a variable number of argument
-pairs; the current position is moved to the terminal point of the drawn
-curve.
-
-@item Da @var{h1} @var{v1} @var{h2} @var{v2}@angles{line break}
-Draw arc from current position to
-(@var{h1},@var{v1})@math{+}(@var{h2},@var{v2}) with center at
-(@var{h1},@var{v1}); then move the current position to the final point
-of the arc.
-
-@item DC @var{d}@angles{line break}
-@itemx DC @var{d} @var{dummy-arg}@angles{line break}
-Draw a solid circle using the current fill color with
-diameter@tie{}@var{d} (integer in basic units @samp{u}) with leftmost
-point at the current position; then move the current position to the
-rightmost point of the circle.  An optional second integer argument is
-ignored (this allows the formatter to generate an even number of
-arguments).  This command is a @code{gtroff} extension.
-
-@item Dc @var{d}@angles{line break}
-Draw circle line with diameter@tie{}@var{d} (integer in basic units
-@samp{u}) with leftmost point at the current position; then move the
-current position to the rightmost point of the circle.
-
-@item DE @var{h} @var{v}@angles{line break}
-Draw a solid ellipse in the current fill color with a horizontal
-diameter of@tie{}@var{h} and a vertical diameter of@tie{}@var{v} (both
-integers in basic units @samp{u}) with the leftmost point at the current
-position; then move to the rightmost point of the ellipse.  This command
-is a @code{gtroff} extension.
-
-@item De @var{h} @var{v}@angles{line break}
-Draw an outlined ellipse with a horizontal diameter of@tie{}@var{h} and
-a vertical diameter of@tie{}@var{v} (both integers in basic units
-@samp{u}) with the leftmost point at current position; then move to the
-rightmost point of the ellipse.
-
-@item DF @var{color-scheme} @r{[}@var{component} @dots{}@r{]}@angles{line break}
-Set fill color for solid drawing objects using different color schemes;
-the analoguous command for setting the color of text, line graphics, and
-the outline of graphic objects is @samp{m}.  The color components are
-specified as integer arguments between 0 and 65536.  The number of color
-components and their meaning vary for the different color schemes.
-These commands are generated by @code{gtroff}'s escape sequences
-@w{@code{\D'F @dots{}'}} and @code{\M} (with no other corresponding
-graphics commands).  No position changing.  This command is a
-@code{gtroff} extension.
-
-@table @code
-@item DFc @var{cyan} @var{magenta} @var{yellow}@angles{line break}
-Set fill color for solid drawing objects using the CMY color scheme,
-having the 3@tie{}color components @var{cyan}, @var{magenta}, and
-@var{yellow}.
-
-@item DFd@angles{line break}
-Set fill color for solid drawing objects to the default fill color value
-(black in most cases).  No component arguments.
-
-@item DFg @var{gray}@angles{line break}
-Set fill color for solid drawing objects to the shade of gray given by
-the argument, an integer between 0 (black) and 65536 (white).
-
-@item DFk @var{cyan} @var{magenta} @var{yellow} @var{black}@angles{line break}
-Set fill color for solid drawing objects using the CMYK color scheme,
-having the 4@tie{}color components @var{cyan}, @var{magenta},
-@var{yellow}, and @var{black}.
-
-@item DFr @var{red} @var{green} @var{blue}@angles{line break}
-Set fill color for solid drawing objects using the RGB color scheme,
-having the 3@tie{}color components @var{red}, @var{green}, and
-@var{blue}.
-@end table
-
-@item Df @var{n}@angles{line break}
-The argument@tie{}@var{n} must be an integer in the range @math{-32767}
-to 32767.
-
-@table @asis
-@item @math{0 @value{LE} @var{n} @value{LE} 1000}
-Set the color for filling solid drawing objects to a shade of gray,
-where 0 corresponds to solid white, 1000 (the default) to solid black,
-and values in between to intermediate shades of gray; this is obsoleted
-by command @samp{DFg}.
-
-@item @math{@var{n} < 0} or @math{@var{n} > 1000}
-Set the filling color to the color that is currently being used for the
-text and the outline, see command @samp{m}.  For example, the command
-sequence
-
-@Example
-mg 0 0 65536
-Df -1
-@endExample
-
-@noindent
-sets all colors to blue.
-@end table
-
-@noindent
-No position changing.  This command is a @code{gtroff} extension.
-
-@item Dl @var{h} @var{v}@angles{line break}
-Draw line from current position to offset (@var{h},@var{v}) (integers in
-basic units @samp{u}); then set current position to the end of the drawn
-line.
-
-@item Dp @var{h1} @var{v1} @var{h2} @var{v2} @dots{} @var{hn} @var{vn}@angles{line break}
-Draw a polygon line from current position to offset (@var{h1},@var{v1}),
-from there to offset (@var{h2},@var{v2}), etc.@: up to offset
-(@var{hn},@var{vn}), and from there back to the starting position.  For
-historical reasons, the position is changed by adding the sum of all
-arguments with odd index to the actual horizontal position and the even
-ones to the vertical position.  Although this doesn't make sense it is
-kept for compatibility.
-@ignore
-As the polygon is closed, the end of drawing is the starting point, so
-the position doesn't change.
-@end ignore
-This command is a @code{gtroff} extension.
-
-@item Dp @var{h1} @var{v1} @var{h2} @var{v2} @dots{} @var{hn} @var{vn}@angles{line break}
-Draw a solid polygon in the current fill color rather than an outlined
-polygon, using the same arguments and positioning as the corresponding
-@samp{Dp} command.
-@ignore
-No position changing.
-@end ignore
-This command is a @code{gtroff} extension.
-
-@item Dt @var{n}@angles{line break}
-Set the current line thickness to@tie{}@var{n} (an integer in basic
-units @samp{u}) if @math{@var{n}>0}; if @math{@var{n}=0} select the
-smallest available line thickness; if @math{@var{n}<0} set the line
-thickness proportional to the point size (this is the default before the
-first @samp{Dt} command was specified).  For historical reasons, the
-horizontal position is changed by adding the argument to the actual
-horizontal position, while the vertical position is not changed.
-Although this doesn't make sense it is kept for compatibility.
-@ignore
-No position changing.
-@end ignore
-This command is a @code{gtroff} extension.
-@end table
-
-@node Device Control Commands, Obsolete Command, Graphics Commands, Command Reference
-@subsubsection Device Control Commands
-
-Each device control command starts with the letter @samp{x}, followed by
-a space character (optional or arbitrary space or tab in @code{gtroff})
-and a subcommand letter or word; each argument (if any) must be preceded
-by a syntactical space.  All @samp{x} commands are terminated by a
-syntactical line break; no device control command can be followed by
-another command on the same line (except a comment).
-
-The subcommand is basically a single letter, but to increase
-readability, it can be written as a word, i.e., an arbitrary sequence of
-characters terminated by the next tab, space, or newline character.  All
-characters of the subcommand word but the first are simply ignored.  For
-example, @code{gtroff} outputs the initialization command @w{@samp{x i}}
-as @w{@samp{x init}} and the resolution command @w{@samp{x r}} as
-@w{@samp{x res}}.
-
-In the following, the syntax element @angles{line break} means a
-syntactical line break (@pxref{Separation}).
-
-@table @code
-@item xF @var{name}@angles{line break}
-The @samp{F} stands for @var{Filename}.
-
-Use @var{name} as the intended name for the current file in error
-reports.  This is useful for remembering the original file name when
-@code{gtroff} uses an internal piping mechanism.  The input file is not
-changed by this command.  This command is a @code{gtroff} extension.
-
-@item xf @var{n} @var{s}@angles{line break}
-The @samp{f} stands for @var{font}.
-
-Mount font position@tie{}@var{n} (a non-negative integer) with font
-named@tie{}@var{s} (a text word).  @xref{Font Positions}.
-
-@item xH @var{n}@angles{line break}
-The @samp{H} stands for @var{Height}.
-
-Set glyph height to@tie{}@var{n} (a positive integer in scaled points
-@samp{z}).  @acronym{AT&T} @code{troff} uses the unit points (@samp{p})
-instead.  @xref{Output Language Compatibility}.
-
-@item xi@angles{line break}
-The @samp{i} stands for @var{init}.
-
-Initialize device.  This is the third command of the prologue.
-
-@item xp@angles{line break}
-The @samp{p} stands for @var{pause}.
-
-Parsed but ignored.  The original @acronym{UNIX} troff manual writes
-
-@display
-pause device, can be restarted
-@end display
-
-@item xr @var{n} @var{h} @var{v}@angles{line break}
-The @samp{r} stands for @var{resolution}.
-
-Resolution is@tie{}@var{n}, while @var{h} is the minimal horizontal
-motion, and @var{v} the minimal vertical motion possible with this
-device; all arguments are positive integers in basic units @samp{u} per
-inch.  This is the second command of the prologue.
-
-@item xS @var{n}@angles{line break}
-The @samp{S} stands for @var{Slant}.
-
-Set slant to@tie{}@var{n} (an integer in basic units @samp{u}).
-
-@item xs@angles{line break}
-The @samp{s} stands for @var{stop}.
-
-Terminates the processing of the current file; issued as the last
-command of any intermediate troff output.
-
-@item xt@angles{line break}
-The @samp{t} stands for @var{trailer}.
-
-Generate trailer information, if any.  In @var{gtroff}, this is actually
-just ignored.
-
-@item xT @var{xxx}@angles{line break}
-The @samp{T} stands for @var{Typesetter}.
-
-Set name of device to word @var{xxx}, a sequence of characters ended by
-the next white space character.  The possible device names coincide with
-those from the @code{groff} @option{-T} option.  This is the first
-command of the prologue.
-
-@item xu @var{n}@angles{line break}
-The @samp{u} stands for @var{underline}.
-
-Configure underlining of spaces.  If @var{n} is@tie{}1, start
-underlining of spaces; if @var{n} is@tie{}0, stop underlining of spaces.
-This is needed for the @code{cu} request in nroff mode and is ignored
-otherwise.  This command is a @code{gtroff} extension.
-
-@item xX @var{anything}@angles{line break}
-The @samp{x} stands for @var{X-escape}.
-
-Send string @var{anything} uninterpreted to the device.  If the line
-following this command starts with a @samp{+} character this line is
-interpreted as a continuation line in the following sense.  The @samp{+}
-is ignored, but a newline character is sent instead to the device, the
-rest of the line is sent uninterpreted.  The same applies to all
-following lines until the first character of a line is not a @samp{+}
-character.  This command is generated by the @code{gtroff} escape
-sequence @code{\X}.  The line-continuing feature is a @code{gtroff}
-extension.
-@end table
-
-@node Obsolete Command,  , Device Control Commands, Command Reference
-@subsubsection Obsolete Command
-In @acronym{AT&T} @code{troff} output, the writing of a single glyph is
-mostly done by a very strange command that combines a horizontal move
-and a single character giving the glyph name.  It doesn't have a command
-code, but is represented by a 3-character argument consisting of exactly
-2@tie{}digits and a character.
-
-@table @asis
-@item @var{dd}@var{g}
-Move right @var{dd} (exactly two decimal digits) basic units @samp{u},
-then print glyph@tie{}@var{g} (represented as a single character).
-
-In @code{gtroff}, arbitrary syntactical space around and within this
-command is allowed to be added.  Only when a preceding command on the
-same line ends with an argument of variable length a separating space is
-obligatory.  In @acronym{AT&T} @code{troff}, large clusters of these and
-other commands are used, mostly without spaces; this made such output
-almost unreadable.
-@end table
-
-For modern high-resolution devices, this command does not make sense
-because the width of the glyphs can become much larger than two decimal
-digits.  In @code{gtroff}, this is only used for the devices @code{X75},
-@code{X75-12}, @code{X100}, and @code{X100-12}.  For other devices, the
-commands @samp{t} and @samp{u} provide a better functionality.
-
-@c ---------------------------------------------------------------------
-
-@node Intermediate Output Examples, Output Language Compatibility, Command Reference, gtroff Output
-@subsection Intermediate Output Examples
-
-This section presents the intermediate output generated from the same
-input for three different devices.  The input is the sentence @samp{hell
-world} fed into @code{gtroff} on the command line.
-
-@table @asis
-@item High-resolution device @code{ps}
-
-This is the standard output of @code{gtroff} if no @option{-T} option is
-given.
-
-@example
-@group
-shell> echo "hell world" | groff -Z -T ps
-
-x T ps
-x res 72000 1 1
-x init
-@end group
-p1
-x font 5 TR
-f5
-s10000
-V12000
-H72000
-thell
-wh2500
-tw
-H96620
-torld
-n12000 0
-@group
-x trailer
-V792000
-x stop
-@end group
-@end example
-
-@noindent
-This output can be fed into @code{grops} to get its representation as a
-@sc{PostScript} file.
-
-@item Low-resolution device @code{latin1}
-
-This is similar to the high-resolution device except that the
-positioning is done at a minor scale.  Some comments (lines starting
-with @samp{#}) were added for clarification; they were not generated by
-the formatter.
-
-@example
-@group
-shell> echo "hell world" | groff -Z -T latin1
-
-# prologue
-x T latin1
-x res 240 24 40
-x init
-@end group
-# begin a new page
-p1
-# font setup
-x font 1 R
-f1
-s10
-# initial positioning on the page
-V40
-H0
-# write text `hell'
-thell
-# inform about space, and issue a horizontal jump
-wh24
-# write text `world'
-tworld
-# announce line break, but do nothing because ...
-n40 0
-@group
-# ... the end of the document has been reached
-x trailer
-V2640
-x stop
-@end group
-@end example
-
-@noindent
-This output can be fed into @code{grotty} to get a formatted text
-document.
-
-@item @acronym{AT&T} @code{troff} output
-Since a computer monitor has a very low resolution compared to modern
-printers the intermediate output for the X@tie{}Window devices can use
-the jump-and-write command with its 2-digit displacements.
-
-@example
-@group
-shell> echo "hell world" | groff -Z -T X100
-
-x T X100
-x res 100 1 1
-x init
-@end group
-p1
-x font 5 TR
-f5
-s10
-V16
-H100
-# write text with jump-and-write commands
-ch07e07l03lw06w11o07r05l03dh7
-n16 0
-@group
-x trailer
-V1100
-x stop
-@end group
-@end example
-
-@noindent
-This output can be fed into @code{xditview} or @code{gxditview} for
-displaying in@tie{}X.
-
-Due to the obsolete jump-and-write command, the text clusters in the
-@acronym{AT&T} @code{troff} output are almost unreadable.
-@end table
-
-@c ---------------------------------------------------------------------
-
-@node Output Language Compatibility,  , Intermediate Output Examples, gtroff Output
-@subsection Output Language Compatibility
-
-The intermediate output language of @acronym{AT&T} @code{troff} was
-first documented in the @acronym{UNIX} troff manual, with later
-additions documented in @cite{A Typesetter-indenpendent TROFF}, written
-by Brian Kernighan.
-
-The @code{gtroff} intermediate output format is compatible with this
-specification except for the following features.
-
-@itemize @bullet
-@item
-The classical quasi device independence is not yet implemented.
-
-@item
-The old hardware was very different from what we use today.  So the
-@code{groff} devices are also fundamentally different from the ones
-in @acronym{AT&T} @code{troff}.  For example, the @acronym{AT&T}
-@sc{PostScript} device is called @code{post} and has a resolution of
-only 720 units per inch, suitable for printers 20 years ago, while
-@code{groff}'s @code{ps} device has a resolution of 72000 units per
-inch.  Maybe, by implementing some rescaling mechanism similar to the
-classical quasi device independence, @code{groff} could emulate
-@acronym{AT&T}'s @code{post} device.
-
-@item
-The B-spline command @samp{D~} is correctly handled by the intermediate
-output parser, but the drawing routines aren't implemented in some of
-the postprocessor programs.
-
-@item
-The argument of the commands @samp{s} and @w{@samp{x H}} has the
-implicit unit scaled point @samp{z} in @code{gtroff}, while
-@acronym{AT&T} @code{troff} has point (@samp{p}).  This isn't an
-incompatibility but a compatible extension, for both units coincide for
-all devices without a @code{sizescale} parameter in the @file{DESC}
-file, including all postprocessors from @acronym{AT&T} and
-@code{groff}'s text devices.  The few @code{groff} devices with a
-@code{sizescale} parameter either do not exist for @acronym{AT&T}
-@code{troff}, have a different name, or seem to have a different
-resolution.  So conflicts are very unlikely.
-
-@item
-The position changing after the commands @samp{Dp}, @samp{DP}, and
-@samp{Dt} is illogical, but as old versions of @code{gtroff} used this
-feature it is kept for compatibility reasons.
-
-@ignore
-Temporarily, there existed some confusion on the positioning after the
-@samp{D} commands that are groff extensions.  This has been clarified by
-establishing the classical rule for all @code{groff} drawing commands:
-
-@itemize
-@item
-The position after a graphic object has been drawn is at its end; for
-circles and ellipses, the `end' is at the right side.
-
-@item
-From this, the positionings specified for the drawing commands above
-follow quite naturally.
-@end itemize
-@end ignore
-
-@end itemize
-
-
-@c =====================================================================
-
-@node Font Files,  , gtroff Output, File formats
-@section Font Files
-@cindex font files
-@cindex files, font
-
-The @code{gtroff} font format is roughly a superset of the
-@code{ditroff} font format (as used in later versions of @acronym{AT&T}
-@code{troff} and its descendants).  Unlike the @code{ditroff} font
-format, there is no associated binary format; all files are text
-files.@footnote{Plan@tie{}9 @code{troff} has also abandoned the binary
-format.}  The font files for device @var{name} are stored in a directory
-@file{dev@var{name}}.  There are two types of file: a device description
-file called @file{DESC} and for each font@tie{}@var{f} a font file
-called@tie{}@file{@var{f}}.
-
-@menu
-* DESC File Format::
-* Font File Format::
-@end menu
-
-@c ---------------------------------------------------------------------
-
-@node DESC File Format, Font File Format, Font Files, Font Files
-@subsection @file{DESC} File Format
-@cindex @file{DESC} file, format
-@cindex font description file, format
-@cindex format of font description file
-@pindex DESC@r{ file format}
-
-The @file{DESC} file can contain the following types of line.  Except
-for the @code{charset} keyword, which must comes last (if at all), the
-order of the lines is not important.  Later entries in the file,
-however, override previous values.
-
-@table @code
-@item charset
-@kindex charset
-This line and everything following in the file are ignored.  It is
-allowed for the sake of backwards compatibility.
-
-@item family @var{fam}
-@kindex family
-The default font family is @var{fam}.
-
-@item fonts @var{n} @var{F1} @var{F2} @var{F3} @dots{} @var{Fn}
-@kindex fonts
-Fonts @var{F1} @dots{} @var{Fn} are mounted in the font positions
-@var{m}+1, @dots{}, @var{m}+@var{n} where @var{m} is the number of
-styles.  This command may extend over more than one line.  A font name
-of@tie{}0 means no font is mounted on the corresponding font position.
-
-@item hor @var{n}
-@kindex hor
-@cindex horizontal resolution
-@cindex resolution, horizontal
-The horizontal resolution is @var{n}@tie{}machine units.  All horizontal
-quantities are rounded to be multiples of this value.
-
-@item image_generator @var{string}
-@kindex image_generator
-@cindex PostScript, PNG image generation
-@cindex PNG image generation from PostScript
-Needed for @code{grohtml} only.  It specifies the program to generate
-PNG images from @sc{PostScript} input.  Under GNU/Linux this is
-usually @code{gs} but under other systems (notably cygwin) it might
-be set to another name.
-
-@item paperlength @var{n}
-@kindex paperlength
-The physical vertical dimension of the output medium in machine units.
-This isn't used by @code{troff} itself but by output devices.
-Deprecated.  Use @code{papersize} instead.
-
-@item papersize @var{string} @dots{}
-@kindex papersize
-Select a paper size.  Valid values for @var{string} are the ISO paper
-types @code{A0}-@code{A7}, @code{B0}-@code{B7}, @code{C0}-@code{C7},
-@code{D0}-@code{D7}, @code{DL}, and the US paper types @code{letter},
-@code{legal}, @code{tabloid}, @code{ledger}, @code{statement},
-@code{executive}, @code{com10}, and @code{monarch}.  Case is not
-significant for @var{string} if it holds predefined paper types.
-Alternatively, @var{string} can be a file name (e.g.@:
-@file{/etc/papersize}); if the file can be opened, @code{groff} reads
-the first line and tests for the above paper sizes.  Finally,
-@var{string} can be a custom paper size in the format
-@code{@var{length},@var{width}} (no spaces before and after the comma).
-Both @var{length} and @var{width} must have a unit appended; valid
-values are @samp{i} for inches, @samp{C} for centimeters, @samp{p} for
-points, and @samp{P} for picas.  Example: @code{12c,235p}.  An argument
-that starts with a digit is always treated as a custom paper format.
-@code{papersize} sets both the vertical and horizontal dimension of the
-output medium.
-
-More than one argument can be specified; @code{groff} scans from left to
-right and uses the first valid paper specification.
-
-@item paperwidth @var{n}
-@kindex paperwidth
-The physical horizontal dimension of the output medium in machine units.
-This isn't used by @code{troff} itself but by output devices.
-Deprecated.  Use @code{papersize} instead.
-
-@item pass_filenames
-@kindex pass_filenames
-Tell @code{gtroff} to emit the name of the source file currently being
-processed.  This is achieved by the intermediate output command
-@samp{F}.  Currently, this is only used by the @code{grohtml} output
-device.
-
-@item postpro @var{program}
-@kindex postpro
-Call @var{program} as a postprocessor.  For example, the line
-
-@Example
-postpro grodvi
-@endExample
-
-@noindent
-in the file @file{devdvi/DESC} makes @code{groff} call @code{grodvi} if
-option @option{-Tdvi} is given (and @option{-Z} isn't used).
-
-@item prepro @var{program}
-@kindex prepro
-Call @var{program} as a preprocessor.  Currently, this keyword is used
-by @code{groff} with option @option{-Thtml} or @option{-Txhtml} only.
-
-@item print @var{program}
-@kindex print
-Use @var{program} as a spooler program for printing.  If omitted, the
-@option{-l} and @option{-L} options of @code{groff} are ignored.
-
-@item res @var{n}
-@kindex res
-@cindex device resolution
-@cindex resolution, device
-There are @var{n}@tie{}machine units per inch.
-
-@item sizes @var{s1} @var{s2} @dots{} @var{sn} 0
-@kindex sizes
-This means that the device has fonts at @var{s1}, @var{s2}, @dots{}
-@var{sn} scaled points.  The list of sizes must be terminated by@tie{}0
-(this is digit zero).  Each @var{si} can also be a range of sizes
-@var{m}-@var{n}.  The list can extend over more than one line.
-
-@item sizescale @var{n}
-@kindex sizescale
-The scale factor for point sizes.  By default this has a value
-of@tie{}1.  One scaled point is equal to one point/@var{n}.  The
-arguments to the @code{unitwidth} and @code{sizes} commands are given in
-scaled points.  @xref{Fractional Type Sizes}, for more information.
-
-@item styles @var{S1} @var{S2} @dots{} @var{Sm}
-@kindex styles
-The first @var{m}@tie{}font positions are associated with styles
-@var{S1} @dots{} @var{Sm}.
-
-@item tcommand
-@kindex tcommand
-This means that the postprocessor can handle the @samp{t} and @samp{u}
-intermediate output commands.
-
-@item unicode
-@kindex unicode
-Indicate that the output device supports the complete Unicode
-repertoire.  Useful only for devices that produce @emph{character
-entities} instead of glyphs.
-
-If @code{unicode} is present, no @code{charset} section is required in
-the font description files since the Unicode handling built into
-@code{groff} is used.  However, if there are entries in a @code{charset}
-section, they either override the default mappings for those particular
-characters or add new mappings (normally for composite characters).
-
-This is used for @option{-Tutf8}, @option{-Thtml}, and @option{-Txhtml}.
-
-@item unitwidth @var{n}
-@kindex unitwidth
-Quantities in the font files are given in machine units for fonts whose
-point size is @var{n}@tie{}scaled points.
-
-@item unscaled_charwidths
-@kindex unscaled_charwidths
-Make the font handling module always return unscaled character widths.
-Needed for the @code{grohtml} device.
-
-@item use_charnames_in_special
-@kindex use_charnames_in_special
-This command indicates that @code{gtroff} should encode special
-characters inside special commands.  Currently, this is only used by the
-@code{grohtml} output device.  @xref{Postprocessor Access}.
-
-@item vert @var{n}
-@kindex vert
-@cindex vertical resolution
-@cindex resolution, vertical
-The vertical resolution is @var{n}@tie{}machine units.  All vertical
-quantities are rounded to be multiples of this value.
-@end table
-
-The @code{res}, @code{unitwidth}, @code{fonts}, and @code{sizes} lines
-are mandatory.  Other commands are ignored by @code{gtroff} but may be
-used by postprocessors to store arbitrary information about the device
-in the @file{DESC} file.
-
-@kindex spare1
-@kindex spare2
-@kindex biggestfont
-Here a list of obsolete keywords that are recognized by @code{groff}
-but completely ignored: @code{spare1}, @code{spare2},
-@code{biggestfont}.
-
-@c ---------------------------------------------------------------------
-
-@node Font File Format,  , DESC File Format, Font Files
-@subsection Font File Format
-@cindex font file, format
-@cindex font description file, format
-@cindex format of font files
-@cindex format of font description files
-
-A @dfn{font file}, also (and probably better) called a @dfn{font
-description file}, has two sections.  The first section is a sequence of
-lines each containing a sequence of blank delimited words; the first
-word in the line is a key, and subsequent words give a value for that
-key.
-
-@table @code
-@item name @var{f}
-@kindex name
-The name of the font is@tie{}@var{f}.
-
-@item spacewidth @var{n}
-@kindex spacewidth
-The normal width of a space is@tie{}@var{n}.
-
-@item slant @var{n}
-@kindex slant
-The glyphs of the font have a slant of @var{n}@tie{}degrees.  (Positive
-means forward.)
-
-@item ligatures @var{lig1} @var{lig2} @dots{} @var{lign} [0]
-@kindex ligatures
-Glyphs @var{lig1}, @var{lig2}, @dots{}, @var{lign} are ligatures;
-possible ligatures are @samp{ff}, @samp{fi}, @samp{fl}, @samp{ffi} and
-@samp{ffl}.  For backwards compatibility, the list of ligatures may be
-terminated with a@tie{}0.  The list of ligatures may not extend over
-more than one line.
-
-@item special
-@cindex special fonts
-@kindex special
-The font is @dfn{special}; this means that when a glyph is requested
-that is not present in the current font, it is searched for in any
-special fonts that are mounted.
-@end table
-
-Other commands are ignored by @code{gtroff} but may be used by
-postprocessors to store arbitrary information about the font in the font
-file.
-
-@cindex comments in font files
-@cindex font files, comments
-@kindex #
-The first section can contain comments, which start with the @samp{#}
-character and extend to the end of a line.
-
-The second section contains one or two subsections.  It must contain a
-@code{charset} subsection and it may also contain a @code{kernpairs}
-subsection.  These subsections can appear in any order.  Each subsection
-starts with a word on a line by itself.
-
-@kindex charset
-The word @code{charset} starts the character set
-subsection.@footnote{This keyword is misnamed since it starts a list of
-ordered glyphs, not characters.}  The @code{charset} line is followed by
-a sequence of lines.  Each line gives information for one glyph.  A line
-comprises a number of fields separated by blanks or tabs.  The format is
-
-@quotation
-@var{name} @var{metrics} @var{type} @var{code} [@var{entity-name}]
-[@code{--} @var{comment}]
-@end quotation
-
-@cindex 8-bit input
-@cindex input, 8-bit
-@cindex accessing unnamed glyphs with @code{\N}
-@cindex unnamed glyphs, accessing with @code{\N}
-@cindex characters, unnamed, accessing with @code{\N}
-@cindex glyphs, unnamed, accessing with @code{\N}
-@kindex ---
-@noindent
-@var{name} identifies the glyph name@footnote{The distinction between
-input, characters, and output, glyphs, is not clearly separated in the
-terminology of @code{groff}; for example, the @code{char} request should
-be called @code{glyph} since it defines an output entity.}: If
-@var{name} is a single character@tie{}@var{c} then it corresponds to the
-@code{gtroff} input character@tie{}@var{c}; if it is of the form
-@samp{\@var{c}} where @var{c} is a single character, then it corresponds
-to the special character @code{\[@var{c}]}; otherwise it corresponds to
-the special character @samp{\[@var{name}]}.  If it is exactly two
-characters @var{xx} it can be entered as @samp{\(@var{xx}}.  Note that
-single-letter special characters can't be accessed as @samp{\@var{c}};
-the only exception is @samp{\-}, which is identical to @code{\[-]}.
-
-@code{gtroff} supports 8-bit input characters; however some utilities
-have difficulties with eight-bit characters.  For this reason, there is
-a convention that the entity name @samp{char@var{n}} is equivalent to
-the single input character whose code is@tie{}@var{n}.  For example,
-@samp{char163} would be equivalent to the character with code@tie{}163,
-which is the pounds sterling sign in the ISO@tie{}@w{Latin-1} character
-set.  You shouldn't use @samp{char@var{n}} entities in font description
-files since they are related to input, not output.  Otherwise, you get
-hard-coded connections between input and output encoding, which prevents
-use of different (input) character sets.
-
-The name @samp{---} is special and indicates that the glyph is unnamed;
-such glyphs can only be used by means of the @code{\N} escape sequence
-in @code{gtroff}.
-
-The @var{type} field gives the glyph type:
-
-@table @code
-@item 1
-the glyph has a descender, for example, @samp{p};
-
-@item 2
-the glyph has an ascender, for example, @samp{b};
-
-@item 3
-the glyph has both an ascender and a descender, for example, @samp{(}.
-@end table
-
-The @var{code} field gives the code that the postprocessor uses to
-print the glyph.  The glyph can also be input to @code{gtroff} using
-this code by means of the @code{\N} escape sequence.  @var{code} can be
-any integer.  If it starts with @samp{0} it is interpreted as octal; if
-it starts with @samp{0x} or @samp{0X} it is interpreted as hexadecimal.
-Note, however, that the @code{\N} escape sequence only accepts a decimal
-integer.
-
-The @var{entity-name} field gives an @acronym{ASCII} string identifying
-the glyph that the postprocessor uses to print the @code{gtroff} glyph
-@var{name}.  This field is optional and has been introduced so that the
-@code{grohtml} device driver can encode its character set.  For example,
-the glyph @samp{\[Po]} is represented as @samp{&pound;} in
-@acronym{HTML} 4.0.
-
-Anything on the line after the @var{entity-name} field resp.@: after
-@samp{--} is ignored.
-
-The @var{metrics} field has the form:
-
-@display
-@group
-@var{width}[@code{,}@var{height}[@code{,}@var{depth}[@code{,}@var{italic-correction}
-  [@code{,}@var{left-italic-correction}[@code{,}@var{subscript-correction}]]]]]
-@end group
-@end display
-
-@noindent
-There must not be any spaces between these subfields (it has been split
-here into two lines for better legibility only).  Missing subfields are
-assumed to be@tie{}0.  The subfields are all decimal integers.  Since
-there is no associated binary format, these values are not required to
-fit into a variable of type @samp{char} as they are in @code{ditroff}.
-The @var{width} subfield gives the width of the glyph.  The @var{height}
-subfield gives the height of the glyph (upwards is positive); if a glyph
-does not extend above the baseline, it should be given a zero height,
-rather than a negative height.  The @var{depth} subfield gives the depth
-of the glyph, that is, the distance from the baseline to the lowest
-point below the baseline to which the glyph extends (downwards is
-positive); if a glyph does not extend below the baseline, it should be
-given a zero depth, rather than a negative depth.  The
-@var{italic-correction} subfield gives the amount of space that should
-be added after the glyph when it is immediately to be followed by a
-glyph from a roman font.  The @var{left-italic-correction} subfield
-gives the amount of space that should be added before the glyph when it
-is immediately to be preceded by a glyph from a roman font.  The
-@var{subscript-correction} gives the amount of space that should be
-added after a glyph before adding a subscript.  This should be less than
-the italic correction.
-
-A line in the @code{charset} section can also have the format
-
-@Example
-@var{name} "
-@endExample
-
-@noindent
-This indicates that @var{name} is just another name for the glyph
-mentioned in the preceding line.
-
-@kindex kernpairs
-The word @code{kernpairs} starts the kernpairs section.  This contains a
-sequence of lines of the form:
-
-@Example
-@var{c1} @var{c2} @var{n}
-@endExample
-
-@noindent
-This means that when glyph @var{c1} appears next to glyph @var{c2} the
-space between them should be increased by@tie{}@var{n}.  Most entries in
-the kernpairs section have a negative value for@tie{}@var{n}.
-
-
-
-@c =====================================================================
-@c =====================================================================
-
-@node Installation, Copying This Manual, File formats, Top
-@chapter Installation
-@cindex installation
-
-@c XXX
-
-
-
-@c =====================================================================
-@c =====================================================================
-
-@node Copying This Manual, Request Index, Installation, Top
-@appendix Copying This Manual
-
-@include fdl.texi
-
-
-
-@c =====================================================================
-@c =====================================================================
-
-@node Request Index, Escape Index, Copying This Manual, Top
-@appendix Request Index
-
-Requests appear without the leading control character (normally either
-@samp{.} or @samp{'}).
-
-@printindex rq
-
-
-
-@c =====================================================================
-@c =====================================================================
-
-@node Escape Index, Operator Index, Request Index, Top
-@appendix Escape Index
-
-Any escape sequence @code{\@var{X}} with @var{X} not in the list below
-emits a warning, printing glyph @var{X}.
-
-@printindex es
-
-
-
-@c =====================================================================
-@c =====================================================================
-
-@node Operator Index, Register Index, Escape Index, Top
-@appendix Operator Index
-
-@printindex op
-
-
-
-@c =====================================================================
-@c =====================================================================
-
-@node Register Index, Macro Index, Operator Index, Top
-@appendix Register Index
-
-The macro package or program a specific register belongs to is appended in
-brackets.
-
-A register name@tie{}@code{x} consisting of exactly one character can be
-accessed as @samp{\nx}.  A register name @code{xx} consisting of exactly
-two characters can be accessed as @samp{\n(xx}.  Register names
-@code{xxx} of any length can be accessed as @samp{\n[xxx]}.
-
-@printindex vr
-
-
-
-@c =====================================================================
-@c =====================================================================
-
-@node Macro Index, String Index, Register Index, Top
-@appendix Macro Index
-
-The macro package a specific macro belongs to is appended in brackets.
-They appear without the leading control character (normally @samp{.}).
-
-@printindex ma
-
-
-
-@c =====================================================================
-@c =====================================================================
-
-@node String Index, Glyph Name Index, Macro Index, Top
-@appendix String Index
-
-The macro package or program a specific string belongs to is appended in
-brackets.
-
-A string name@tie{}@code{x} consisting of exactly one character can be
-accessed as @samp{\*x}.  A string name @code{xx} consisting of exactly
-two characters can be accessed as @samp{\*(xx}.  String names @code{xxx}
-of any length can be accessed as @samp{\*[xxx]}.
-
-
-@printindex st
-
-
-
-@c =====================================================================
-@c =====================================================================
-
-@node Glyph Name Index, Font File Keyword Index, String Index, Top
-@appendix Glyph Name Index
-
-A glyph name @code{xx} consisting of exactly two characters can be
-accessed as @samp{\(xx}.  Glyph names @code{xxx} of any length can be
-accessed as @samp{\[xxx]}.
-
-@c XXX
-
-
-
-@c =====================================================================
-@c =====================================================================
-
-@node Font File Keyword Index, Program and File Index, Glyph Name Index, Top
-@appendix Font File Keyword Index
-
-@printindex ky
-
-
-
-@c =====================================================================
-@c =====================================================================
-
-@node Program and File Index, Concept Index, Font File Keyword Index, Top
-@appendix Program and File Index
-
-@printindex pg
-
-
-
-@c =====================================================================
-@c =====================================================================
-
-@node Concept Index,  , Program and File Index, Top
-@appendix Concept Index
-
-@printindex cp
-
-
-@bye
-
-@c Local Variables:
-@c mode: texinfo
-@c coding: latin-1
-@c End:
diff -Nuar groff-1.22.3.old/doc/Makefile.in groff-1.22.3/doc/Makefile.in
--- groff-1.22.3.old/doc/Makefile.in	2014-11-04 10:38:35.561519796 +0200
+++ groff-1.22.3/doc/Makefile.in	1970-01-01 02:00:00.000000000 +0200
@@ -1,177 +0,0 @@
-# Copyright (C) 2002-2014  Free Software Foundation, Inc.
-#      Written by Werner Lemberg <wl@gnu.org>
-#
-# This file is part of groff.
-#
-# groff is free software; you can redistribute it and/or modify it under
-# the terms of the GNU General Public License as published by the Free
-# Software Foundation, either version 3 of the License, or
-# (at your option) any later version.
-#
-# groff is distributed in the hope that it will be useful, but WITHOUT ANY
-# WARRANTY; without even the implied warranty of MERCHANTABILITY or
-# FITNESS FOR A PARTICULAR PURPOSE.  See the GNU General Public License
-# for more details.
-#
-# You should have received a copy of the GNU General Public License
-# along with this program. If not, see <http://www.gnu.org/licenses/>.
-
-
-# Use this file to produce documentation in various formats; e.g. you can
-# say
-#
-#   make groff.pdf
-#
-# to get the groff texinfo manual as a PDF file.
-#
-# Note that you have to compile the groff package first.
-
-
-srcdir=@srcdir@
-top_srcdir=@abs_top_srcdir@
-VPATH=@srcdir@
-top_builddir=@abs_top_builddir@
-pnmtops=@pnmtops_nosetpage@
-
-# These may be overridden if cross-compiling.
-TROFFBIN=$(top_builddir)/src/roff/troff/troff
-GROFFBIN=$(top_builddir)/src/roff/groff/groff
-GROFF_BIN_PATH=`echo $(groff_bin_dirs) \
-                | LANG=C LC_ALL=C sed -e 's|  *|:|g'`
-
-# info files are distributed with the groff package, so makeinfo is
-# usually not needed (however, to build from the repo you NEED it!)
-MAKEINFO=@MAKEINFO@
-
-# Users who want to print out the groff manual are expected to have a
-# working TeX installation.  Note that texi2dvi properly honours the
-# `MAKEINFO' environment variable.
-TEXI2DVI=texi2dvi
-
-groff_bin_dirs=\
-  $(top_builddir)/src/roff/groff \
-  $(top_builddir)/src/roff/troff \
-  $(top_builddir)/src/preproc/preconv \
-  $(top_builddir)/src/preproc/pic \
-  $(top_builddir)/src/preproc/eqn \
-  $(top_builddir)/src/preproc/tbl \
-  $(top_builddir)/src/preproc/grn \
-  $(top_builddir)/src/preproc/refer \
-  $(top_builddir)/src/preproc/soelim \
-  $(top_builddir)/src/preproc/html \
-  $(top_builddir)/src/devices/grops \
-  $(top_builddir)/src/devices/gropdf \
-  $(top_builddir)/src/devices/grodvi \
-  $(top_builddir)/src/devices/grotty \
-  $(top_builddir)/src/devices/grolj4 \
-  $(top_builddir)/src/devices/grolbp \
-  $(top_builddir)/src/devices/grohtml
-
-version=`cat $(top_srcdir)/VERSION`
-# No additional number if revision is zero.
-revision=`sed -e 's/^0$$//' -e 's/^[1-9].*$$/.&/' $(top_srcdir)/REVISION`
-
-FFLAG=-F$(top_builddir)/font -F$(top_srcdir)/font
-TFLAG=-M$(top_builddir)/tmac -M$(top_srcdir)/tmac
-
-TROFF=$(TROFFBIN) $(TFLAG) $(FFLAG) -ww
-GROFF=\
-  LANG=C \
-  LC_ALL=C \
-  sed -e "s;@VERSION@;$(version)$(revision);" $< \
-    | GROFF_COMMAND_PREFIX= \
-      GROFF_BIN_PATH="$(GROFF_BIN_PATH)" \
-      $(GROFFBIN) $(TFLAG) $(FFLAG) -Upet -ww
-
-imagedir=img
-
-.SUFFIXES: .me .ms .ps .html .txt .texinfo .dvi .pdf .xhtml
-.PHONY: all prepare_examples clean distclean realclean extraclean
-
-# For simplicity, we always call preconv, grn, and eqn.
-.me.txt:
-	$(GROFF) -k -Tutf8 -ge -me >$@
-.me.ps:
-	$(GROFF) -k -Tps -ge -me >$@
-
-.ms.html:
-	$(GROFF) -P-p -P-b -P-I`basename $< | sed -e 's|.ms$$||'` \
-	         -P-D$(imagedir) -P-V -Thtml -ms >$@
-.ms.txt:
-	$(GROFF) -Tascii -ms -mwww >$@
-.ms.ps:
-	$(GROFF) -Tps -ms -mwww >$@
-
-.texinfo.txt:
-	LANG=C \
-	LC_ALL=C \
-	$(MAKEINFO) --enable-encoding -I$(srcdir) --plaintext -o $@ $<
-.texinfo.dvi:
-	LANG=C \
-	LC_ALL=C \
-	MAKEINFO=$(MAKEINFO) $(TEXI2DVI) -e $<
-.texinfo.pdf:
-	LANG=C \
-	LC_ALL=C \
-	MAKEINFO=$(MAKEINFO) $(TEXI2DVI) -e --pdf $<
-.texinfo.html:
-	LANG=C \
-	LC_ALL=C \
-	$(MAKEINFO) --enable-encoding -I$(srcdir) --html --no-split $< \
-	  && $(SHELL) $(srcdir)/fixinfo.sh $@
-
-all: prepare_examples
-
-prepare_examples: grnexmpl.g groff.css
-	test -f grnexmpl.g || cp $(srcdir)/grnexmpl.g .
-	test -f groff.css || cp $(srcdir)/groff.css .
-
-groff.info: groff.texinfo
-	$(MAKEINFO) --enable-encoding -I$(srcdir) $(srcdir)/groff.texinfo
-
-gnu.eps: gnu.xpm
-	xpmtoppm $(srcdir)/gnu.xpm | pnmdepth 15 | $(pnmtops) -noturn >$@
-
-pic.html: pic.ms
-	$(GROFF) -P-p -P-I`basename $< | sed -e 's|.ms$$||'` \
-	         -P-D$(imagedir) -P-j`basename $< | sed -e 's|.ms$$||'` \
-	         -Thtml -P-V -ms >$@
-
-webpage.html: webpage.ms gnu.eps groff.css
-	$(GROFF) -P-j`basename $< | sed -e 's|.ms$$||'` \
-	         -P-nrpb -P-I`basename $< | sed -e 's|.ms$$||'` \
-	         -P-D$(imagedir) -Thtml -ms >$@
-
-webpage.ps: gnu.eps
-
-grnexmpl.ps: grnexmpl.me grnexmpl.g
-
-split-html:
-	LANG=C \
-	LC_ALL=C \
-	$(MAKEINFO) --enable-encoding -I$(srcdir) --html groff.texinfo \
-	  && for f in groff/*; do $(SHELL) $(srcdir)/fixinfo.sh $$f; done
-
-clean:
-	rm -f *.ps *.html *.txt core
-	rm -f *.aux *.dvi *.pdf *.log *.toc texput.log
-	rm -f *.cp *.cps *.cv *.cn *.es *.ess *.fn *.fns *.ky *.kys \
-	      *.ma *.mas *.op *.ops *.pg *.pgs *.rq *.rqs *.st *.sts \
-	      *.tp *.tps *.tr *.vr *.vrs *.xhtml
-	-rm -rf img
-
-distclean: clean
-
-realclean: distclean
-	rm -f *.png *.eps
-
-extraclean: distclean
-	rm -f core *~ \#* junk temp grot
-
-########################################################################
-# Emacs settings
-########################################################################
-#
-# Local Variables:
-# mode: makefile
-# End:
diff -Nuar groff-1.22.3.old/doc/Makefile.sub groff-1.22.3/doc/Makefile.sub
--- groff-1.22.3.old/doc/Makefile.sub	2014-11-04 10:38:35.561519796 +0200
+++ groff-1.22.3/doc/Makefile.sub	1970-01-01 02:00:00.000000000 +0200
@@ -1,296 +0,0 @@
-# Copyright (C) 2002-2014  Free Software Foundation, Inc.
-#      Written by Werner Lemberg <wl@gnu.org>
-#
-# This file is part of groff.
-#
-# groff is free software; you can redistribute it and/or modify it under
-# the terms of the GNU General Public License as published by the Free
-# Software Foundation, either version 3 of the License, or
-# (at your option) any later version.
-#
-# groff is distributed in the hope that it will be useful, but WITHOUT ANY
-# WARRANTY; without even the implied warranty of MERCHANTABILITY or
-# FITNESS FOR A PARTICULAR PURPOSE.  See the GNU General Public License
-# for more details.
-#
-# You should have received a copy of the GNU General Public License
-# along with this program. If not, see <http://www.gnu.org/licenses/>.
-
-# These may be overridden if cross-compiling.
-GROFFBIN=$(top_builddir)/src/roff/groff/groff
-GROFF_BIN_PATH=`echo $(groff_bin_dirs) | sed -e 's|  *|$(SH_SEP)|g'`
-
-groff_bin_dirs=\
-  $(top_builddir)/src/roff/groff \
-  $(top_builddir)/src/roff/troff \
-  $(top_builddir)/src/preproc/preconv \
-  $(top_builddir)/src/preproc/pic \
-  $(top_builddir)/src/preproc/eqn \
-  $(top_builddir)/src/preproc/tbl \
-  $(top_builddir)/src/preproc/grn \
-  $(top_builddir)/src/preproc/refer \
-  $(top_builddir)/src/preproc/soelim \
-  $(top_builddir)/src/preproc/html \
-  $(top_builddir)/src/devices/grops \
-  $(top_builddir)/src/devices/gropdf \
-  $(top_builddir)/src/devices/grohtml
-
-FFLAG=-F$(top_builddir)/font -F$(top_srcdir)/font
-TFLAG=-M$(top_builddir)/tmac -M$(top_srcdir)/tmac
-
-GROFF=\
-  sed -e "s;@VERSION@;$(version)$(revision);" $< \
-  | GROFF_COMMAND_PREFIX= \
-    GROFF_BIN_PATH="$(GROFF_BIN_PATH)" \
-    $(GROFFBIN) $(TFLAG) $(FFLAG) -Upet -ww
-
-DOCFILES=\
-  meref.me \
-  meintro.me \
-  meintro_fr.me \
-  pic.ms
-
-PROCESSEDDOCFILES=\
-  meref.ps \
-  meintro.ps \
-  meintro_fr.ps \
-  pic.ps
-
-HTMLDOCFILES=\
-  pic.html
-
-HTMLDOCFILESALL=\
-  pic*.html
-
-HTMLDOCIMAGEFILES=\
-  pic*
-
-EXAMPLEFILES=\
-  webpage.ms \
-  groff.css \
-  grnexmpl.g \
-  grnexmpl.me
-
-PROCESSEDEXAMPLEFILES=\
-  webpage.ps \
-  grnexmpl.ps
-
-HTMLEXAMPLEFILES=\
-  webpage.html
-
-HTMLEXAMPLEFILESALL=\
-  webpage*.html
-
-HTMLEXAMPLEIMAGEFILES=\
-  webpage*
-
-imagedir=img
-htmldocimagedir=$(htmldocdir)/$(imagedir)
-exampleimagedir=$(exampledir)/$(imagedir)
-
-MOSTLYCLEANADD=\
-  $(PROCESSEDDOCFILES) \
-  $(PROCESSEDEXAMPLEFILES) \
-  $(HTMLEXAMPLEFILESALL) \
-  $(HTMLDOCFILESALL) \
-  groff.aux groff.cp* groff.dvi groff.es* groff.fn* groff.html groff.ky* \
-  groff.log groff.ma* groff.op* groff.pdf groff.pg* groff.ps groff.rq* \
-  groff.st* groff.toc groff.tp groff.vr* \
-  examples.stamp
-
-MOSTLYCLEANDIRADD=\
-  $(imagedir)
-
-MOSTLYCLEANNOTSRCDIRADD=\
-  groff.css \
-  grnexmpl.g \
-  groff.info \
-  groff-*.info \
-  gnu.eps
-
-RM=rm -f
-
-.SUFFIXES: .me .ms .ps .html
-
-# For simplicity, we always call preconv, grn, and eqn.
-.me.ps:
-	$(GROFF) -k -Tps -ge -me >$@
-
-.ms.html:
-	$(GROFF) -P-p -P-b -P-I`basename $< | sed -e 's|.ms$$||'` \
-	         -P-D$(imagedir) -P-V -Thtml -ms >$@
-.ms.ps:
-	$(GROFF) -Tps -ms -mwww >$@
-
-all: $(make_otherdoc) \
-     $(make_infodoc) \
-     $(make_htmldoc) \
-     $(make_examples) \
-     $(make_htmlexamples)
-
-otherdoc: $(PROCESSEDDOCFILES)
-infodoc: groff.info
-htmldoc: $(HTMLDOCFILES)
-
-examples: examples.stamp $(PROCESSEDEXAMPLEFILES)
-
-html_examples: $(HTMLEXAMPLEFILES)
-
-examples.stamp: grnexmpl.g groff.css gnu.eps
-	test -f grnexmpl.g || cp $(srcdir)/grnexmpl.g .
-	test -f groff.css || cp $(srcdir)/groff.css .
-	if test ! -f gnu.eps; then \
-	  if test -f $(srcdir)/gnu.eps; then \
-	    cp $(srcdir)/gnu.eps .; \
-	  elif test -f $(top_builddir)/contrib/pdfmark/gnu.eps; then \
-	    cp $(top_builddir)/contrib/pdfmark/gnu.eps .; \
-	  fi; \
-	fi
-	echo timestamp > $@
-
-groff.info: groff.texinfo
-	$(MAKEINFO) --enable-encoding -I$(srcdir) $(srcdir)/groff.texinfo
-
-gnu.eps: gnu.xpm
-	xpmtoppm $(srcdir)/gnu.xpm | pnmdepth 15 \
-	  | $(pnmtops_nosetpage) -noturn -rle >$@
-
-pic.html: pic.ms
-	$(GROFF) -P-p -P-I`basename $< | sed -e 's|.ms$$||'` \
-	         -P-D$(imagedir) -P-j`basename $< | sed -e 's|.ms$$||'` \
-	         -Thtml -P-V -ms >$@
-
-webpage.html: webpage.ms gnu.eps groff.css
-	$(GROFF) -P-j`basename $< | sed -e 's|.ms$$||'` \
-	         -P-nrpb -P-I`basename $< | sed -e 's|.ms$$||'` \
-	         -P-D$(imagedir) -Thtml -ms >$@
-
-webpage.ps: gnu.eps
-
-grnexmpl.ps: grnexmpl.me grnexmpl.g
-
-distfiles: groff.info gnu.eps
-
-install_data: install_always $(make_install_otherdoc) \
-	      $(make_install_infodoc) $(make_install_htmldoc) \
-	      $(make_install_examples)
-
-install_always:
-	-test -d $(DESTDIR)$(docdir) || $(mkinstalldirs) $(DESTDIR)$(docdir)
-
-install_otherdoc: install_always $(DOCFILES) $(PROCESSEDDOCFILES)
-	for f in $(DOCFILES); do \
-	  $(RM) $(DESTDIR)$(docdir)/$$f; \
-	  $(INSTALL_DATA) $(srcdir)/$$f $(DESTDIR)$(docdir)/$$f; \
-	done
-	for f in $(PROCESSEDDOCFILES); do \
-	  $(RM) $(DESTDIR)$(docdir)/$$f; \
-	  $(INSTALL_DATA) $$f $(DESTDIR)$(docdir)/$$f; \
-	done
-
-install_infodoc: install_always groff.info
-# Prefer info files in builddir over srcdir; we test for
-# the existence of `groff.info'.
-	-test -d $(DESTDIR)$(infodir) || $(mkinstalldirs) $(DESTDIR)$(infodir)
-	d=.; test -f "groff.info" || d=$(srcdir); \
-	  for p in $$d/groff.info `ls $$d/groff.info*`; do \
-	    f=`basename $$p`; \
-	    $(RM) $(DESTDIR)$(infodir)/$$f; \
-	    $(INSTALL_DATA) $$p $(DESTDIR)$(infodir)/$$f; \
-	  done
-	$(INSTALL_INFO) --info-dir=$(DESTDIR)$(infodir) \
-	  $(DESTDIR)$(infodir)/groff.info
-
-install_htmldoc: install_always $(HTMLDOCFILES)
-	-test -d $(DESTDIR)$(htmldocdir) \
-	  || $(mkinstalldirs) $(DESTDIR)$(htmldocdir)
-	for f in `ls $(HTMLDOCFILESALL)`; do \
-	  $(RM) $(DESTDIR)$(htmldocdir)/$$f; \
-	  $(INSTALL_DATA) $$f $(DESTDIR)$(htmldocdir)/$$f; \
-	done
-	-test -d $(DESTDIR)$(htmldocimagedir) \
-	  || $(mkinstalldirs) $(DESTDIR)$(htmldocimagedir)
-	$(RM) $(DESTDIR)$(htmldocimagedir)/$(HTMLDOCIMAGEFILES)
-	$(INSTALL_DATA) $(imagedir)/$(HTMLDOCIMAGEFILES) \
-	  $(DESTDIR)$(htmldocimagedir)
-
-install_examples: install_always install_examples_always \
-		  $(make_install_htmlexamples)
-
-install_examples_always: gnu.eps $(EXAMPLEFILES) $(PROCESSEDEXAMPLEFILES)
-# Prefer gnu.eps in builddir over srcdir.
-	-test -d $(DESTDIR)$(exampledir) \
-	  || $(mkinstalldirs) $(DESTDIR)$(exampledir)
-	d=.; test -f "gnu.eps" || d=$(srcdir); \
-	  $(RM) $(DESTDIR)$(exampledir)/gnu.eps; \
-	  $(INSTALL_DATA) $$d/gnu.eps $(DESTDIR)$(exampledir)/gnu.eps
-	for f in $(EXAMPLEFILES); do \
-	  $(RM) $(DESTDIR)$(exampledir)/$$f; \
-	  $(INSTALL_DATA) $(srcdir)/$$f $(DESTDIR)$(exampledir)/$$f; \
-	done
-	for f in $(PROCESSEDEXAMPLEFILES); do \
-	  $(RM) $(DESTDIR)$(exampledir)/$$f; \
-	  $(INSTALL_DATA) $$f $(DESTDIR)$(exampledir)/$$f; \
-	done
-
-install_htmlexamples: install_examples_always $(HTMLEXAMPLEFILES)
-	for f in `ls $(HTMLEXAMPLEFILESALL)`; do \
-	  $(RM) $(DESTDIR)$(exampledir)/$$f; \
-	  $(INSTALL_DATA) $$f $(DESTDIR)$(exampledir)/$$f; \
-	done
-	-test -d $(DESTDIR)$(exampleimagedir) \
-	  || $(mkinstalldirs) $(DESTDIR)$(exampleimagedir)
-	$(RM) $(DESTDIR)$(exampleimagedir)/$(HTMLEXAMPLEIMAGEFILES)
-	$(INSTALL_DATA) $(imagedir)/$(HTMLEXAMPLEIMAGEFILES) \
-	  $(DESTDIR)$(exampleimagedir)
-
-uninstall_sub: uninstall_always \
-		$(make_uninstall_infodoc) $(make_uninstall_htmldoc) \
-		$(make_uninstall_examples)
-
-uninstall_always:
-	-for f in $(DOCFILES) $(PROCESSEDDOCFILES); do \
-	  $(RM) $(DESTDIR)$(docdir)/$$f; \
-	done
-
-uninstall_infodoc: uninstall_always
-	-$(INSTALL_INFO) --remove --info-dir=$(DESTDIR)$(infodir) \
-	  $(DESTDIR)$(infodir)/groff.info
-	-for f in groff `ls groff.info*`; do \
-	  $(RM) $(DESTDIR)$(infodir)/$$f; \
-	done
-
-uninstall_htmldoc: uninstall_always
-	-for f in `ls $(HTMLDOCFILESALL)`; do \
-	  $(RM) $(DESTDIR)$(htmldocdir)/$$f; \
-	done
-	$(RM) $(DESTDIR)$(htmldocimagedir)/$(HTMLDOCIMAGEFILES)
-	-test -d $(DESTDIR)$(htmldocimagedir) && \
-	  rmdir $(DESTDIR)$(htmldocimagedir)
-
-uninstall_examples: uninstall_always uninstall_examples_always \
-		    $(make_uninstall_htmlexamples)
-	-test -d $(DESTDIR)$(exampledir) && \
-	  rmdir $(DESTDIR)$(exampledir)
-
-uninstall_examples_always:
-	-for f in $(EXAMPLEFILES) $(PROCESSEDEXAMPLEFILES); do \
-	  $(RM) $(DESTDIR)$(exampledir)/$$f; \
-	done
-	$(RM) $(DESTDIR)$(exampledir)/gnu.eps
-
-uninstall_htmlexamples: uninstall_examples_always
-	-for f in `ls $(HTMLEXAMPLEFILESALL)`; do \
-	  $(RM) $(DESTDIR)$(exampledir)/$$f; \
-	done
-	$(RM) $(DESTDIR)$(exampleimagedir)/$(HTMLEXAMPLEIMAGEFILES)
-	-test -d $(DESTDIR)$(exampleimagedir) && \
-	  rmdir $(DESTDIR)$(exampleimagedir)
-
-########################################################################
-# Emacs settings
-########################################################################
-#
-# Local Variables:
-# mode: makefile
-# End:
diff -Nuar groff-1.22.3.old/doc/texinfo.tex groff-1.22.3/doc/texinfo.tex
--- groff-1.22.3.old/doc/texinfo.tex	2014-11-04 10:38:35.563519771 +0200
+++ groff-1.22.3/doc/texinfo.tex	1970-01-01 02:00:00.000000000 +0200
@@ -1,10183 +0,0 @@
-% texinfo.tex -- TeX macros to handle Texinfo files.
-% 
-% Load plain if necessary, i.e., if running under initex.
-\expandafter\ifx\csname fmtname\endcsname\relax\input plain\fi
-%
-\def\texinfoversion{2014-10-29.10}
-%
-% Copyright 1985, 1986, 1988, 1990, 1991, 1992, 1993, 1994, 1995,
-% 1996, 1997, 1998, 1999, 2000, 2001, 2002, 2003, 2004, 2005, 2006,
-% 2007, 2008, 2009, 2010, 2011, 2012, 2013, 2014 Free Software Foundation, Inc.
-%
-% This texinfo.tex file is free software: you can redistribute it and/or
-% modify it under the terms of the GNU General Public License as
-% published by the Free Software Foundation, either version 3 of the
-% License, or (at your option) any later version.
-%
-% This texinfo.tex file is distributed in the hope that it will be
-% useful, but WITHOUT ANY WARRANTY; without even the implied warranty
-% of MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the GNU
-% General Public License for more details.
-%
-% You should have received a copy of the GNU General Public License
-% along with this program.  If not, see <http://www.gnu.org/licenses/>.
-%
-% As a special exception, when this file is read by TeX when processing
-% a Texinfo source document, you may use the result without
-% restriction. This Exception is an additional permission under section 7
-% of the GNU General Public License, version 3 ("GPLv3").
-%
-% Please try the latest version of texinfo.tex before submitting bug
-% reports; you can get the latest version from:
-%   http://ftp.gnu.org/gnu/texinfo/ (the Texinfo release area), or
-%   http://ftpmirror.gnu.org/texinfo/ (same, via a mirror), or
-%   http://www.gnu.org/software/texinfo/ (the Texinfo home page)
-% The texinfo.tex in any given distribution could well be out
-% of date, so if that's what you're using, please check.
-%
-% Send bug reports to bug-texinfo@gnu.org.  Please include including a
-% complete document in each bug report with which we can reproduce the
-% problem.  Patches are, of course, greatly appreciated.
-%
-% To process a Texinfo manual with TeX, it's most reliable to use the
-% texi2dvi shell script that comes with the distribution.  For a simple
-% manual foo.texi, however, you can get away with this:
-%   tex foo.texi
-%   texindex foo.??
-%   tex foo.texi
-%   tex foo.texi
-%   dvips foo.dvi -o  # or whatever; this makes foo.ps.
-% The extra TeX runs get the cross-reference information correct.
-% Sometimes one run after texindex suffices, and sometimes you need more
-% than two; texi2dvi does it as many times as necessary.
-%
-% It is possible to adapt texinfo.tex for other languages, to some
-% extent.  You can get the existing language-specific files from the
-% full Texinfo distribution.
-%
-% The GNU Texinfo home page is http://www.gnu.org/software/texinfo.
-
-
-\message{Loading texinfo [version \texinfoversion]:}
-
-% If in a .fmt file, print the version number
-% and turn on active characters that we couldn't do earlier because
-% they might have appeared in the input file name.
-\everyjob{\message{[Texinfo version \texinfoversion]}%
-  \catcode`+=\active \catcode`\_=\active}
-
-\chardef\other=12
-
-% We never want plain's \outer definition of \+ in Texinfo.
-% For @tex, we can use \tabalign.
-\let\+ = \relax
-
-% Save some plain tex macros whose names we will redefine.
-\let\ptexb=\b
-\let\ptexbullet=\bullet
-\let\ptexc=\c
-\let\ptexcomma=\,
-\let\ptexdot=\.
-\let\ptexdots=\dots
-\let\ptexend=\end
-\let\ptexequiv=\equiv
-\let\ptexexclam=\!
-\let\ptexfootnote=\footnote
-\let\ptexgtr=>
-\let\ptexhat=^
-\let\ptexi=\i
-\let\ptexindent=\indent
-\let\ptexinsert=\insert
-\let\ptexlbrace=\{
-\let\ptexless=<
-\let\ptexnewwrite\newwrite
-\let\ptexnoindent=\noindent
-\let\ptexplus=+
-\let\ptexraggedright=\raggedright
-\let\ptexrbrace=\}
-\let\ptexslash=\/
-\let\ptexstar=\*
-\let\ptext=\t
-\let\ptextop=\top
-{\catcode`\'=\active \global\let\ptexquoteright'}% active in plain's math mode
-
-% If this character appears in an error message or help string, it
-% starts a new line in the output.
-\newlinechar = `^^J
-
-% Use TeX 3.0's \inputlineno to get the line number, for better error
-% messages, but if we're using an old version of TeX, don't do anything.
-%
-\ifx\inputlineno\thisisundefined
-  \let\linenumber = \empty % Pre-3.0.
-\else
-  \def\linenumber{l.\the\inputlineno:\space}
-\fi
-
-% Set up fixed words for English if not already set.
-\ifx\putwordAppendix\undefined  \gdef\putwordAppendix{Appendix}\fi
-\ifx\putwordChapter\undefined   \gdef\putwordChapter{Chapter}\fi
-\ifx\putworderror\undefined     \gdef\putworderror{error}\fi
-\ifx\putwordfile\undefined      \gdef\putwordfile{file}\fi
-\ifx\putwordin\undefined        \gdef\putwordin{in}\fi
-\ifx\putwordIndexIsEmpty\undefined       \gdef\putwordIndexIsEmpty{(Index is empty)}\fi
-\ifx\putwordIndexNonexistent\undefined   \gdef\putwordIndexNonexistent{(Index is nonexistent)}\fi
-\ifx\putwordInfo\undefined      \gdef\putwordInfo{Info}\fi
-\ifx\putwordInstanceVariableof\undefined \gdef\putwordInstanceVariableof{Instance Variable of}\fi
-\ifx\putwordMethodon\undefined  \gdef\putwordMethodon{Method on}\fi
-\ifx\putwordNoTitle\undefined   \gdef\putwordNoTitle{No Title}\fi
-\ifx\putwordof\undefined        \gdef\putwordof{of}\fi
-\ifx\putwordon\undefined        \gdef\putwordon{on}\fi
-\ifx\putwordpage\undefined      \gdef\putwordpage{page}\fi
-\ifx\putwordsection\undefined   \gdef\putwordsection{section}\fi
-\ifx\putwordSection\undefined   \gdef\putwordSection{Section}\fi
-\ifx\putwordsee\undefined       \gdef\putwordsee{see}\fi
-\ifx\putwordSee\undefined       \gdef\putwordSee{See}\fi
-\ifx\putwordShortTOC\undefined  \gdef\putwordShortTOC{Short Contents}\fi
-\ifx\putwordTOC\undefined       \gdef\putwordTOC{Table of Contents}\fi
-%
-\ifx\putwordMJan\undefined \gdef\putwordMJan{January}\fi
-\ifx\putwordMFeb\undefined \gdef\putwordMFeb{February}\fi
-\ifx\putwordMMar\undefined \gdef\putwordMMar{March}\fi
-\ifx\putwordMApr\undefined \gdef\putwordMApr{April}\fi
-\ifx\putwordMMay\undefined \gdef\putwordMMay{May}\fi
-\ifx\putwordMJun\undefined \gdef\putwordMJun{June}\fi
-\ifx\putwordMJul\undefined \gdef\putwordMJul{July}\fi
-\ifx\putwordMAug\undefined \gdef\putwordMAug{August}\fi
-\ifx\putwordMSep\undefined \gdef\putwordMSep{September}\fi
-\ifx\putwordMOct\undefined \gdef\putwordMOct{October}\fi
-\ifx\putwordMNov\undefined \gdef\putwordMNov{November}\fi
-\ifx\putwordMDec\undefined \gdef\putwordMDec{December}\fi
-%
-\ifx\putwordDefmac\undefined    \gdef\putwordDefmac{Macro}\fi
-\ifx\putwordDefspec\undefined   \gdef\putwordDefspec{Special Form}\fi
-\ifx\putwordDefvar\undefined    \gdef\putwordDefvar{Variable}\fi
-\ifx\putwordDefopt\undefined    \gdef\putwordDefopt{User Option}\fi
-\ifx\putwordDeffunc\undefined   \gdef\putwordDeffunc{Function}\fi
-
-% Since the category of space is not known, we have to be careful.
-\chardef\spacecat = 10
-\def\spaceisspace{\catcode`\ =\spacecat}
-
-% sometimes characters are active, so we need control sequences.
-\chardef\ampChar   = `\&
-\chardef\colonChar = `\:
-\chardef\commaChar = `\,
-\chardef\dashChar  = `\-
-\chardef\dotChar   = `\.
-\chardef\exclamChar= `\!
-\chardef\hashChar  = `\#
-\chardef\lquoteChar= `\`
-\chardef\questChar = `\?
-\chardef\rquoteChar= `\'
-\chardef\semiChar  = `\;
-\chardef\slashChar = `\/
-\chardef\underChar = `\_
-
-% Ignore a token.
-%
-\def\gobble#1{}
-
-% The following is used inside several \edef's.
-\def\makecsname#1{\expandafter\noexpand\csname#1\endcsname}
-
-% Hyphenation fixes.
-\hyphenation{
-  Flor-i-da Ghost-script Ghost-view Mac-OS Post-Script
-  ap-pen-dix bit-map bit-maps
-  data-base data-bases eshell fall-ing half-way long-est man-u-script
-  man-u-scripts mini-buf-fer mini-buf-fers over-view par-a-digm
-  par-a-digms rath-er rec-tan-gu-lar ro-bot-ics se-vere-ly set-up spa-ces
-  spell-ing spell-ings
-  stand-alone strong-est time-stamp time-stamps which-ever white-space
-  wide-spread wrap-around
-}
-
-% Margin to add to right of even pages, to left of odd pages.
-\newdimen\bindingoffset
-\newdimen\normaloffset
-\newdimen\pagewidth \newdimen\pageheight
-
-% For a final copy, take out the rectangles
-% that mark overfull boxes (in case you have decided
-% that the text looks ok even though it passes the margin).
-%
-\def\finalout{\overfullrule=0pt }
-
-% Sometimes it is convenient to have everything in the transcript file
-% and nothing on the terminal.  We don't just call \tracingall here,
-% since that produces some useless output on the terminal.  We also make
-% some effort to order the tracing commands to reduce output in the log
-% file; cf. trace.sty in LaTeX.
-%
-\def\gloggingall{\begingroup \globaldefs = 1 \loggingall \endgroup}%
-\def\loggingall{%
-  \tracingstats2
-  \tracingpages1
-  \tracinglostchars2  % 2 gives us more in etex
-  \tracingparagraphs1
-  \tracingoutput1
-  \tracingmacros2
-  \tracingrestores1
-  \showboxbreadth\maxdimen \showboxdepth\maxdimen
-  \ifx\eTeXversion\thisisundefined\else % etex gives us more logging
-    \tracingscantokens1
-    \tracingifs1
-    \tracinggroups1
-    \tracingnesting2
-    \tracingassigns1
-  \fi
-  \tracingcommands3  % 3 gives us more in etex
-  \errorcontextlines16
-}%
-
-% @errormsg{MSG}.  Do the index-like expansions on MSG, but if things
-% aren't perfect, it's not the end of the world, being an error message,
-% after all.
-% 
-\def\errormsg{\begingroup \indexnofonts \doerrormsg}
-\def\doerrormsg#1{\errmessage{#1}}
-
-% add check for \lastpenalty to plain's definitions.  If the last thing
-% we did was a \nobreak, we don't want to insert more space.
-%
-\def\smallbreak{\ifnum\lastpenalty<10000\par\ifdim\lastskip<\smallskipamount
-  \removelastskip\penalty-50\smallskip\fi\fi}
-\def\medbreak{\ifnum\lastpenalty<10000\par\ifdim\lastskip<\medskipamount
-  \removelastskip\penalty-100\medskip\fi\fi}
-\def\bigbreak{\ifnum\lastpenalty<10000\par\ifdim\lastskip<\bigskipamount
-  \removelastskip\penalty-200\bigskip\fi\fi}
-
-% Do @cropmarks to get crop marks.
-%
-\newif\ifcropmarks
-\let\cropmarks = \cropmarkstrue
-%
-% Dimensions to add cropmarks at corners.
-% Added by P. A. MacKay, 12 Nov. 1986
-%
-\newdimen\outerhsize \newdimen\outervsize % set by the paper size routines
-\newdimen\cornerlong  \cornerlong=1pc
-\newdimen\cornerthick \cornerthick=.3pt
-\newdimen\topandbottommargin \topandbottommargin=.75in
-
-% Output a mark which sets \thischapter, \thissection and \thiscolor.
-% We dump everything together because we only have one kind of mark.
-% This works because we only use \botmark / \topmark, not \firstmark.
-%
-% A mark contains a subexpression of the \ifcase ... \fi construct.
-% \get*marks macros below extract the needed part using \ifcase.
-%
-% Another complication is to let the user choose whether \thischapter
-% (\thissection) refers to the chapter (section) in effect at the top
-% of a page, or that at the bottom of a page.  The solution is
-% described on page 260 of The TeXbook.  It involves outputting two
-% marks for the sectioning macros, one before the section break, and
-% one after.  I won't pretend I can describe this better than DEK...
-\def\domark{%
-  \toks0=\expandafter{\lastchapterdefs}%
-  \toks2=\expandafter{\lastsectiondefs}%
-  \toks4=\expandafter{\prevchapterdefs}%
-  \toks6=\expandafter{\prevsectiondefs}%
-  \toks8=\expandafter{\lastcolordefs}%
-  \mark{%
-                   \the\toks0 \the\toks2  % 0: top marks (\last...)
-      \noexpand\or \the\toks4 \the\toks6  % 1: bottom marks (default, \prev...)
-    \noexpand\else \the\toks8             % 2: color marks
-  }%
-}
-% \topmark doesn't work for the very first chapter (after the title
-% page or the contents), so we use \firstmark there -- this gets us
-% the mark with the chapter defs, unless the user sneaks in, e.g.,
-% @setcolor (or @url, or @link, etc.) between @contents and the very
-% first @chapter.
-\def\gettopheadingmarks{%
-  \ifcase0\topmark\fi
-  \ifx\thischapter\empty \ifcase0\firstmark\fi \fi
-}
-\def\getbottomheadingmarks{\ifcase1\botmark\fi}
-\def\getcolormarks{\ifcase2\topmark\fi}
-
-% Avoid "undefined control sequence" errors.
-\def\lastchapterdefs{}
-\def\lastsectiondefs{}
-\def\prevchapterdefs{}
-\def\prevsectiondefs{}
-\def\lastcolordefs{}
-
-% Main output routine.
-\chardef\PAGE = 255
-\output = {\onepageout{\pagecontents\PAGE}}
-
-\newbox\headlinebox
-\newbox\footlinebox
-
-% \onepageout takes a vbox as an argument.  Note that \pagecontents
-% does insertions, but you have to call it yourself.
-\def\onepageout#1{%
-  \ifcropmarks \hoffset=0pt \else \hoffset=\normaloffset \fi
-  %
-  \ifodd\pageno  \advance\hoffset by \bindingoffset
-  \else \advance\hoffset by -\bindingoffset\fi
-  %
-  % Do this outside of the \shipout so @code etc. will be expanded in
-  % the headline as they should be, not taken literally (outputting ''code).
-  \def\commmonheadfootline{\let\hsize=\pagewidth \texinfochars}
-  %
-  \ifodd\pageno \getoddheadingmarks \else \getevenheadingmarks \fi
-  \global\setbox\headlinebox = \vbox{\commmonheadfootline \makeheadline}%
-  %
-  \ifodd\pageno \getoddfootingmarks \else \getevenfootingmarks \fi
-  \global\setbox\footlinebox = \vbox{\commmonheadfootline \makefootline}%
-  %
-  {%
-    % Have to do this stuff outside the \shipout because we want it to
-    % take effect in \write's, yet the group defined by the \vbox ends
-    % before the \shipout runs.
-    %
-    \indexdummies         % don't expand commands in the output.
-    \normalturnoffactive  % \ in index entries must not stay \, e.g., if
-               % the page break happens to be in the middle of an example.
-               % We don't want .vr (or whatever) entries like this:
-               % \entry{{\tt \indexbackslash }acronym}{32}{\code {\acronym}}
-               % "\acronym" won't work when it's read back in;
-               % it needs to be
-               % {\code {{\tt \backslashcurfont }acronym}
-    \shipout\vbox{%
-      % Do this early so pdf references go to the beginning of the page.
-      \ifpdfmakepagedest \pdfdest name{\the\pageno} xyz\fi
-      %
-      \ifcropmarks \vbox to \outervsize\bgroup
-        \hsize = \outerhsize
-        \vskip-\topandbottommargin
-        \vtop to0pt{%
-          \line{\ewtop\hfil\ewtop}%
-          \nointerlineskip
-          \line{%
-            \vbox{\moveleft\cornerthick\nstop}%
-            \hfill
-            \vbox{\moveright\cornerthick\nstop}%
-          }%
-          \vss}%
-        \vskip\topandbottommargin
-        \line\bgroup
-          \hfil % center the page within the outer (page) hsize.
-          \ifodd\pageno\hskip\bindingoffset\fi
-          \vbox\bgroup
-      \fi
-      %
-      \unvbox\headlinebox
-      \pagebody{#1}%
-      \ifdim\ht\footlinebox > 0pt
-        % Only leave this space if the footline is nonempty.
-        % (We lessened \vsize for it in \oddfootingyyy.)
-        % The \baselineskip=24pt in plain's \makefootline has no effect.
-        \vskip 24pt
-        \unvbox\footlinebox
-      \fi
-      %
-      \ifcropmarks
-          \egroup % end of \vbox\bgroup
-        \hfil\egroup % end of (centering) \line\bgroup
-        \vskip\topandbottommargin plus1fill minus1fill
-        \boxmaxdepth = \cornerthick
-        \vbox to0pt{\vss
-          \line{%
-            \vbox{\moveleft\cornerthick\nsbot}%
-            \hfill
-            \vbox{\moveright\cornerthick\nsbot}%
-          }%
-          \nointerlineskip
-          \line{\ewbot\hfil\ewbot}%
-        }%
-      \egroup % \vbox from first cropmarks clause
-      \fi
-    }% end of \shipout\vbox
-  }% end of group with \indexdummies
-  \advancepageno
-  \ifnum\outputpenalty>-20000 \else\dosupereject\fi
-}
-
-\newinsert\margin \dimen\margin=\maxdimen
-
-\def\pagebody#1{\vbox to\pageheight{\boxmaxdepth=\maxdepth #1}}
-{\catcode`\@ =11
-\gdef\pagecontents#1{\ifvoid\topins\else\unvbox\topins\fi
-% marginal hacks, juha@viisa.uucp (Juha Takala)
-\ifvoid\margin\else % marginal info is present
-  \rlap{\kern\hsize\vbox to\z@{\kern1pt\box\margin \vss}}\fi
-\dimen@=\dp#1\relax \unvbox#1\relax
-\ifvoid\footins\else\vskip\skip\footins\footnoterule \unvbox\footins\fi
-\ifr@ggedbottom \kern-\dimen@ \vfil \fi}
-}
-
-% Here are the rules for the cropmarks.  Note that they are
-% offset so that the space between them is truly \outerhsize or \outervsize
-% (P. A. MacKay, 12 November, 1986)
-%
-\def\ewtop{\vrule height\cornerthick depth0pt width\cornerlong}
-\def\nstop{\vbox
-  {\hrule height\cornerthick depth\cornerlong width\cornerthick}}
-\def\ewbot{\vrule height0pt depth\cornerthick width\cornerlong}
-\def\nsbot{\vbox
-  {\hrule height\cornerlong depth\cornerthick width\cornerthick}}
-
-% Parse an argument, then pass it to #1.  The argument is the rest of
-% the input line (except we remove a trailing comment).  #1 should be a
-% macro which expects an ordinary undelimited TeX argument.
-%
-\def\parsearg{\parseargusing{}}
-\def\parseargusing#1#2{%
-  \def\argtorun{#2}%
-  \begingroup
-    \obeylines
-    \spaceisspace
-    #1%
-    \parseargline\empty% Insert the \empty token, see \finishparsearg below.
-}
-
-{\obeylines %
-  \gdef\parseargline#1^^M{%
-    \endgroup % End of the group started in \parsearg.
-    \argremovecomment #1\comment\ArgTerm%
-  }%
-}
-
-% First remove any @comment, then any @c comment.
-\def\argremovecomment#1\comment#2\ArgTerm{\argremovec #1\c\ArgTerm}
-\def\argremovec#1\c#2\ArgTerm{\argcheckspaces#1\^^M\ArgTerm}
-
-% Each occurrence of `\^^M' or `<space>\^^M' is replaced by a single space.
-%
-% \argremovec might leave us with trailing space, e.g.,
-%    @end itemize  @c foo
-% This space token undergoes the same procedure and is eventually removed
-% by \finishparsearg.
-%
-\def\argcheckspaces#1\^^M{\argcheckspacesX#1\^^M \^^M}
-\def\argcheckspacesX#1 \^^M{\argcheckspacesY#1\^^M}
-\def\argcheckspacesY#1\^^M#2\^^M#3\ArgTerm{%
-  \def\temp{#3}%
-  \ifx\temp\empty
-    % Do not use \next, perhaps the caller of \parsearg uses it; reuse \temp:
-    \let\temp\finishparsearg
-  \else
-    \let\temp\argcheckspaces
-  \fi
-  % Put the space token in:
-  \temp#1 #3\ArgTerm
-}
-
-% If a _delimited_ argument is enclosed in braces, they get stripped; so
-% to get _exactly_ the rest of the line, we had to prevent such situation.
-% We prepended an \empty token at the very beginning and we expand it now,
-% just before passing the control to \argtorun.
-% (Similarly, we have to think about #3 of \argcheckspacesY above: it is
-% either the null string, or it ends with \^^M---thus there is no danger
-% that a pair of braces would be stripped.
-%
-% But first, we have to remove the trailing space token.
-%
-\def\finishparsearg#1 \ArgTerm{\expandafter\argtorun\expandafter{#1}}
-
-% \parseargdef\foo{...}
-%	is roughly equivalent to
-% \def\foo{\parsearg\Xfoo}
-% \def\Xfoo#1{...}
-%
-% Actually, I use \csname\string\foo\endcsname, ie. \\foo, as it is my
-% favourite TeX trick.  --kasal, 16nov03
-
-\def\parseargdef#1{%
-  \expandafter \doparseargdef \csname\string#1\endcsname #1%
-}
-\def\doparseargdef#1#2{%
-  \def#2{\parsearg#1}%
-  \def#1##1%
-}
-
-% Several utility definitions with active space:
-{
-  \obeyspaces
-  \gdef\obeyedspace{ }
-
-  % Make each space character in the input produce a normal interword
-  % space in the output.  Don't allow a line break at this space, as this
-  % is used only in environments like @example, where each line of input
-  % should produce a line of output anyway.
-  %
-  \gdef\sepspaces{\obeyspaces\let =\tie}
-
-  % If an index command is used in an @example environment, any spaces
-  % therein should become regular spaces in the raw index file, not the
-  % expansion of \tie (\leavevmode \penalty \@M \ ).
-  \gdef\unsepspaces{\let =\space}
-}
-
-
-\def\flushcr{\ifx\par\lisppar \def\next##1{}\else \let\next=\relax \fi \next}
-
-% Define the framework for environments in texinfo.tex.  It's used like this:
-%
-%   \envdef\foo{...}
-%   \def\Efoo{...}
-%
-% It's the responsibility of \envdef to insert \begingroup before the
-% actual body; @end closes the group after calling \Efoo.  \envdef also
-% defines \thisenv, so the current environment is known; @end checks
-% whether the environment name matches.  The \checkenv macro can also be
-% used to check whether the current environment is the one expected.
-%
-% Non-false conditionals (@iftex, @ifset) don't fit into this, so they
-% are not treated as environments; they don't open a group.  (The
-% implementation of @end takes care not to call \endgroup in this
-% special case.)
-
-
-% At run-time, environments start with this:
-\def\startenvironment#1{\begingroup\def\thisenv{#1}}
-% initialize
-\let\thisenv\empty
-
-% ... but they get defined via ``\envdef\foo{...}'':
-\long\def\envdef#1#2{\def#1{\startenvironment#1#2}}
-\def\envparseargdef#1#2{\parseargdef#1{\startenvironment#1#2}}
-
-% Check whether we're in the right environment:
-\def\checkenv#1{%
-  \def\temp{#1}%
-  \ifx\thisenv\temp
-  \else
-    \badenverr
-  \fi
-}
-
-% Environment mismatch, #1 expected:
-\def\badenverr{%
-  \errhelp = \EMsimple
-  \errmessage{This command can appear only \inenvironment\temp,
-    not \inenvironment\thisenv}%
-}
-\def\inenvironment#1{%
-  \ifx#1\empty
-    outside of any environment%
-  \else
-    in environment \expandafter\string#1%
-  \fi
-}
-
-% @end foo executes the definition of \Efoo.
-% But first, it executes a specialized version of \checkenv
-%
-\parseargdef\end{%
-  \if 1\csname iscond.#1\endcsname
-  \else
-    % The general wording of \badenverr may not be ideal.
-    \expandafter\checkenv\csname#1\endcsname
-    \csname E#1\endcsname
-    \endgroup
-  \fi
-}
-
-\newhelp\EMsimple{Press RETURN to continue.}
-
-
-% Be sure we're in horizontal mode when doing a tie, since we make space
-% equivalent to this in @example-like environments. Otherwise, a space
-% at the beginning of a line will start with \penalty -- and
-% since \penalty is valid in vertical mode, we'd end up putting the
-% penalty on the vertical list instead of in the new paragraph.
-{\catcode`@ = 11
- % Avoid using \@M directly, because that causes trouble
- % if the definition is written into an index file.
- \global\let\tiepenalty = \@M
- \gdef\tie{\leavevmode\penalty\tiepenalty\ }
-}
-
-% @: forces normal size whitespace following.
-\def\:{\spacefactor=1000 }
-
-% @* forces a line break.
-\def\*{\unskip\hfil\break\hbox{}\ignorespaces}
-
-% @/ allows a line break.
-\let\/=\allowbreak
-
-% @. is an end-of-sentence period.
-\def\.{.\spacefactor=\endofsentencespacefactor\space}
-
-% @! is an end-of-sentence bang.
-\def\!{!\spacefactor=\endofsentencespacefactor\space}
-
-% @? is an end-of-sentence query.
-\def\?{?\spacefactor=\endofsentencespacefactor\space}
-
-% @frenchspacing on|off  says whether to put extra space after punctuation.
-%
-\def\onword{on}
-\def\offword{off}
-%
-\parseargdef\frenchspacing{%
-  \def\temp{#1}%
-  \ifx\temp\onword \plainfrenchspacing
-  \else\ifx\temp\offword \plainnonfrenchspacing
-  \else
-    \errhelp = \EMsimple
-    \errmessage{Unknown @frenchspacing option `\temp', must be on|off}%
-  \fi\fi
-}
-
-% @w prevents a word break.  Without the \leavevmode, @w at the
-% beginning of a paragraph, when TeX is still in vertical mode, would
-% produce a whole line of output instead of starting the paragraph.
-\def\w#1{\leavevmode\hbox{#1}}
-
-% @group ... @end group forces ... to be all on one page, by enclosing
-% it in a TeX vbox.  We use \vtop instead of \vbox to construct the box
-% to keep its height that of a normal line.  According to the rules for
-% \topskip (p.114 of the TeXbook), the glue inserted is
-% max (\topskip - \ht (first item), 0).  If that height is large,
-% therefore, no glue is inserted, and the space between the headline and
-% the text is small, which looks bad.
-%
-% Another complication is that the group might be very large.  This can
-% cause the glue on the previous page to be unduly stretched, because it
-% does not have much material.  In this case, it's better to add an
-% explicit \vfill so that the extra space is at the bottom.  The
-% threshold for doing this is if the group is more than \vfilllimit
-% percent of a page (\vfilllimit can be changed inside of @tex).
-%
-\newbox\groupbox
-\def\vfilllimit{0.7}
-%
-\envdef\group{%
-  \ifnum\catcode`\^^M=\active \else
-    \errhelp = \groupinvalidhelp
-    \errmessage{@group invalid in context where filling is enabled}%
-  \fi
-  \startsavinginserts
-  %
-  \setbox\groupbox = \vtop\bgroup
-    % Do @comment since we are called inside an environment such as
-    % @example, where each end-of-line in the input causes an
-    % end-of-line in the output.  We don't want the end-of-line after
-    % the `@group' to put extra space in the output.  Since @group
-    % should appear on a line by itself (according to the Texinfo
-    % manual), we don't worry about eating any user text.
-    \comment
-}
-%
-% The \vtop produces a box with normal height and large depth; thus, TeX puts
-% \baselineskip glue before it, and (when the next line of text is done)
-% \lineskip glue after it.  Thus, space below is not quite equal to space
-% above.  But it's pretty close.
-\def\Egroup{%
-    % To get correct interline space between the last line of the group
-    % and the first line afterwards, we have to propagate \prevdepth.
-    \endgraf % Not \par, as it may have been set to \lisppar.
-    \global\dimen1 = \prevdepth
-  \egroup           % End the \vtop.
-  % \dimen0 is the vertical size of the group's box.
-  \dimen0 = \ht\groupbox  \advance\dimen0 by \dp\groupbox
-  % \dimen2 is how much space is left on the page (more or less).
-  \dimen2 = \pageheight   \advance\dimen2 by -\pagetotal
-  % if the group doesn't fit on the current page, and it's a big big
-  % group, force a page break.
-  \ifdim \dimen0 > \dimen2
-    \ifdim \pagetotal < \vfilllimit\pageheight
-      \page
-    \fi
-  \fi
-  \box\groupbox
-  \prevdepth = \dimen1
-  \checkinserts
-}
-%
-% TeX puts in an \escapechar (i.e., `@') at the beginning of the help
-% message, so this ends up printing `@group can only ...'.
-%
-\newhelp\groupinvalidhelp{%
-group can only be used in environments such as @example,^^J%
-where each line of input produces a line of output.}
-
-% @need space-in-mils
-% forces a page break if there is not space-in-mils remaining.
-
-\newdimen\mil  \mil=0.001in
-
-\parseargdef\need{%
-  % Ensure vertical mode, so we don't make a big box in the middle of a
-  % paragraph.
-  \par
-  %
-  % If the @need value is less than one line space, it's useless.
-  \dimen0 = #1\mil
-  \dimen2 = \ht\strutbox
-  \advance\dimen2 by \dp\strutbox
-  \ifdim\dimen0 > \dimen2
-    %
-    % Do a \strut just to make the height of this box be normal, so the
-    % normal leading is inserted relative to the preceding line.
-    % And a page break here is fine.
-    \vtop to #1\mil{\strut\vfil}%
-    %
-    % TeX does not even consider page breaks if a penalty added to the
-    % main vertical list is 10000 or more.  But in order to see if the
-    % empty box we just added fits on the page, we must make it consider
-    % page breaks.  On the other hand, we don't want to actually break the
-    % page after the empty box.  So we use a penalty of 9999.
-    %
-    % There is an extremely small chance that TeX will actually break the
-    % page at this \penalty, if there are no other feasible breakpoints in
-    % sight.  (If the user is using lots of big @group commands, which
-    % almost-but-not-quite fill up a page, TeX will have a hard time doing
-    % good page breaking, for example.)  However, I could not construct an
-    % example where a page broke at this \penalty; if it happens in a real
-    % document, then we can reconsider our strategy.
-    \penalty9999
-    %
-    % Back up by the size of the box, whether we did a page break or not.
-    \kern -#1\mil
-    %
-    % Do not allow a page break right after this kern.
-    \nobreak
-  \fi
-}
-
-% @br   forces paragraph break (and is undocumented).
-
-\let\br = \par
-
-% @page forces the start of a new page.
-%
-\def\page{\par\vfill\supereject}
-
-% @exdent text....
-% outputs text on separate line in roman font, starting at standard page margin
-
-% This records the amount of indent in the innermost environment.
-% That's how much \exdent should take out.
-\newskip\exdentamount
-
-% This defn is used inside fill environments such as @defun.
-\parseargdef\exdent{\hfil\break\hbox{\kern -\exdentamount{\rm#1}}\hfil\break}
-
-% This defn is used inside nofill environments such as @example.
-\parseargdef\nofillexdent{{\advance \leftskip by -\exdentamount
-  \leftline{\hskip\leftskip{\rm#1}}}}
-
-% @inmargin{WHICH}{TEXT} puts TEXT in the WHICH margin next to the current
-% paragraph.  For more general purposes, use the \margin insertion
-% class.  WHICH is `l' or `r'.  Not documented, written for gawk manual.
-%
-\newskip\inmarginspacing \inmarginspacing=1cm
-\def\strutdepth{\dp\strutbox}
-%
-\def\doinmargin#1#2{\strut\vadjust{%
-  \nobreak
-  \kern-\strutdepth
-  \vtop to \strutdepth{%
-    \baselineskip=\strutdepth
-    \vss
-    % if you have multiple lines of stuff to put here, you'll need to
-    % make the vbox yourself of the appropriate size.
-    \ifx#1l%
-      \llap{\ignorespaces #2\hskip\inmarginspacing}%
-    \else
-      \rlap{\hskip\hsize \hskip\inmarginspacing \ignorespaces #2}%
-    \fi
-    \null
-  }%
-}}
-\def\inleftmargin{\doinmargin l}
-\def\inrightmargin{\doinmargin r}
-%
-% @inmargin{TEXT [, RIGHT-TEXT]}
-% (if RIGHT-TEXT is given, use TEXT for left page, RIGHT-TEXT for right;
-% else use TEXT for both).
-%
-\def\inmargin#1{\parseinmargin #1,,\finish}
-\def\parseinmargin#1,#2,#3\finish{% not perfect, but better than nothing.
-  \setbox0 = \hbox{\ignorespaces #2}%
-  \ifdim\wd0 > 0pt
-    \def\lefttext{#1}%  have both texts
-    \def\righttext{#2}%
-  \else
-    \def\lefttext{#1}%  have only one text
-    \def\righttext{#1}%
-  \fi
-  %
-  \ifodd\pageno
-    \def\temp{\inrightmargin\righttext}% odd page -> outside is right margin
-  \else
-    \def\temp{\inleftmargin\lefttext}%
-  \fi
-  \temp
-}
-
-% @| inserts a changebar to the left of the current line.  It should
-% surround any changed text.  This approach does *not* work if the
-% change spans more than two lines of output.  To handle that, we would
-% have adopt a much more difficult approach (putting marks into the main
-% vertical list for the beginning and end of each change).  This command
-% is not documented, not supported, and doesn't work.
-%
-\def\|{%
-  % \vadjust can only be used in horizontal mode.
-  \leavevmode
-  %
-  % Append this vertical mode material after the current line in the output.
-  \vadjust{%
-    % We want to insert a rule with the height and depth of the current
-    % leading; that is exactly what \strutbox is supposed to record.
-    \vskip-\baselineskip
-    %
-    % \vadjust-items are inserted at the left edge of the type.  So
-    % the \llap here moves out into the left-hand margin.
-    \llap{%
-      %
-      % For a thicker or thinner bar, change the `1pt'.
-      \vrule height\baselineskip width1pt
-      %
-      % This is the space between the bar and the text.
-      \hskip 12pt
-    }%
-  }%
-}
-
-% @include FILE -- \input text of FILE.
-%
-\def\include{\parseargusing\filenamecatcodes\includezzz}
-\def\includezzz#1{%
-  \pushthisfilestack
-  \def\thisfile{#1}%
-  {%
-    \makevalueexpandable  % we want to expand any @value in FILE.
-    \turnoffactive        % and allow special characters in the expansion
-    \indexnofonts         % Allow `@@' and other weird things in file names.
-    \wlog{texinfo.tex: doing @include of #1^^J}%
-    \edef\temp{\noexpand\input #1 }%
-    %
-    % This trickery is to read FILE outside of a group, in case it makes
-    % definitions, etc.
-    \expandafter
-  }\temp
-  \popthisfilestack
-}
-\def\filenamecatcodes{%
-  \catcode`\\=\other
-  \catcode`~=\other
-  \catcode`^=\other
-  \catcode`_=\other
-  \catcode`|=\other
-  \catcode`<=\other
-  \catcode`>=\other
-  \catcode`+=\other
-  \catcode`-=\other
-  \catcode`\`=\other
-  \catcode`\'=\other
-}
-
-\def\pushthisfilestack{%
-  \expandafter\pushthisfilestackX\popthisfilestack\StackTerm
-}
-\def\pushthisfilestackX{%
-  \expandafter\pushthisfilestackY\thisfile\StackTerm
-}
-\def\pushthisfilestackY #1\StackTerm #2\StackTerm {%
-  \gdef\popthisfilestack{\gdef\thisfile{#1}\gdef\popthisfilestack{#2}}%
-}
-
-\def\popthisfilestack{\errthisfilestackempty}
-\def\errthisfilestackempty{\errmessage{Internal error:
-  the stack of filenames is empty.}}
-%
-\def\thisfile{}
-
-% @center line
-% outputs that line, centered.
-%
-\parseargdef\center{%
-  \ifhmode
-    \let\centersub\centerH
-  \else
-    \let\centersub\centerV
-  \fi
-  \centersub{\hfil \ignorespaces#1\unskip \hfil}%
-  \let\centersub\relax % don't let the definition persist, just in case
-}
-\def\centerH#1{{%
-  \hfil\break
-  \advance\hsize by -\leftskip
-  \advance\hsize by -\rightskip
-  \line{#1}%
-  \break
-}}
-%
-\newcount\centerpenalty
-\def\centerV#1{%
-  % The idea here is the same as in \startdefun, \cartouche, etc.: if
-  % @center is the first thing after a section heading, we need to wipe
-  % out the negative parskip inserted by \sectionheading, but still
-  % prevent a page break here.
-  \centerpenalty = \lastpenalty
-  \ifnum\centerpenalty>10000 \vskip\parskip \fi
-  \ifnum\centerpenalty>9999 \penalty\centerpenalty \fi
-  \line{\kern\leftskip #1\kern\rightskip}%
-}
-
-% @sp n   outputs n lines of vertical space
-%
-\parseargdef\sp{\vskip #1\baselineskip}
-
-% @comment ...line which is ignored...
-% @c is the same as @comment
-% @ignore ... @end ignore  is another way to write a comment
-%
-\def\comment{\begingroup \catcode`\^^M=\other%
-\catcode`\@=\other \catcode`\{=\other \catcode`\}=\other%
-\commentxxx}
-{\catcode`\^^M=\other \gdef\commentxxx#1^^M{\endgroup}}
-%
-\let\c=\comment
-
-% @paragraphindent NCHARS
-% We'll use ems for NCHARS, close enough.
-% NCHARS can also be the word `asis' or `none'.
-% We cannot feasibly implement @paragraphindent asis, though.
-%
-\def\asisword{asis} % no translation, these are keywords
-\def\noneword{none}
-%
-\parseargdef\paragraphindent{%
-  \def\temp{#1}%
-  \ifx\temp\asisword
-  \else
-    \ifx\temp\noneword
-      \defaultparindent = 0pt
-    \else
-      \defaultparindent = #1em
-    \fi
-  \fi
-  \parindent = \defaultparindent
-}
-
-% @exampleindent NCHARS
-% We'll use ems for NCHARS like @paragraphindent.
-% It seems @exampleindent asis isn't necessary, but
-% I preserve it to make it similar to @paragraphindent.
-\parseargdef\exampleindent{%
-  \def\temp{#1}%
-  \ifx\temp\asisword
-  \else
-    \ifx\temp\noneword
-      \lispnarrowing = 0pt
-    \else
-      \lispnarrowing = #1em
-    \fi
-  \fi
-}
-
-% @firstparagraphindent WORD
-% If WORD is `none', then suppress indentation of the first paragraph
-% after a section heading.  If WORD is `insert', then do indent at such
-% paragraphs.
-%
-% The paragraph indentation is suppressed or not by calling
-% \suppressfirstparagraphindent, which the sectioning commands do.
-% We switch the definition of this back and forth according to WORD.
-% By default, we suppress indentation.
-%
-\def\suppressfirstparagraphindent{\dosuppressfirstparagraphindent}
-\def\insertword{insert}
-%
-\parseargdef\firstparagraphindent{%
-  \def\temp{#1}%
-  \ifx\temp\noneword
-    \let\suppressfirstparagraphindent = \dosuppressfirstparagraphindent
-  \else\ifx\temp\insertword
-    \let\suppressfirstparagraphindent = \relax
-  \else
-    \errhelp = \EMsimple
-    \errmessage{Unknown @firstparagraphindent option `\temp'}%
-  \fi\fi
-}
-
-% Here is how we actually suppress indentation.  Redefine \everypar to
-% \kern backwards by \parindent, and then reset itself to empty.
-%
-% We also make \indent itself not actually do anything until the next
-% paragraph.
-%
-\gdef\dosuppressfirstparagraphindent{%
-  \gdef\indent{%
-    \restorefirstparagraphindent
-    \indent
-  }%
-  \gdef\noindent{%
-    \restorefirstparagraphindent
-    \noindent
-  }%
-  \global\everypar = {%
-    \kern -\parindent
-    \restorefirstparagraphindent
-  }%
-}
-
-\gdef\restorefirstparagraphindent{%
-  \global \let \indent = \ptexindent
-  \global \let \noindent = \ptexnoindent
-  \global \everypar = {}%
-}
-
-
-% @refill is a no-op.
-\let\refill=\relax
-
-% If working on a large document in chapters, it is convenient to
-% be able to disable indexing, cross-referencing, and contents, for test runs.
-% This is done with @novalidate (before @setfilename).
-%
-\newif\iflinks \linkstrue % by default we want the aux files.
-\let\novalidate = \linksfalse
-
-% @setfilename is done at the beginning of every texinfo file.
-% So open here the files we need to have open while reading the input.
-% This makes it possible to make a .fmt file for texinfo.
-\def\setfilename{%
-   \fixbackslash  % Turn off hack to swallow `\input texinfo'.
-   \iflinks
-     \tryauxfile
-     % Open the new aux file.  TeX will close it automatically at exit.
-     \immediate\openout\auxfile=\jobname.aux
-   \fi % \openindices needs to do some work in any case.
-   \openindices
-   \let\setfilename=\comment % Ignore extra @setfilename cmds.
-   %
-   % If texinfo.cnf is present on the system, read it.
-   % Useful for site-wide @afourpaper, etc.
-   \openin 1 texinfo.cnf
-   \ifeof 1 \else \input texinfo.cnf \fi
-   \closein 1
-   %
-   \comment % Ignore the actual filename.
-}
-
-% Called from \setfilename.
-%
-\def\openindices{%
-  \newindex{cp}%
-  \newcodeindex{fn}%
-  \newcodeindex{vr}%
-  \newcodeindex{tp}%
-  \newcodeindex{ky}%
-  \newcodeindex{pg}%
-}
-
-% @bye.
-\outer\def\bye{\pagealignmacro\tracingstats=1\ptexend}
-
-
-\message{pdf,}
-% adobe `portable' document format
-\newcount\tempnum
-\newcount\lnkcount
-\newtoks\filename
-\newcount\filenamelength
-\newcount\pgn
-\newtoks\toksA
-\newtoks\toksB
-\newtoks\toksC
-\newtoks\toksD
-\newbox\boxA
-\newcount\countA
-\newif\ifpdf
-\newif\ifpdfmakepagedest
-
-% when pdftex is run in dvi mode, \pdfoutput is defined (so \pdfoutput=1
-% can be set).  So we test for \relax and 0 as well as being undefined.
-\ifx\pdfoutput\thisisundefined
-\else
-  \ifx\pdfoutput\relax
-  \else
-    \ifcase\pdfoutput
-    \else
-      \pdftrue
-    \fi
-  \fi
-\fi
-
-% PDF uses PostScript string constants for the names of xref targets,
-% for display in the outlines, and in other places.  Thus, we have to
-% double any backslashes.  Otherwise, a name like "\node" will be
-% interpreted as a newline (\n), followed by o, d, e.  Not good.
-% 
-% See http://www.ntg.nl/pipermail/ntg-pdftex/2004-July/000654.html and
-% related messages.  The final outcome is that it is up to the TeX user
-% to double the backslashes and otherwise make the string valid, so
-% that's what we do.  pdftex 1.30.0 (ca.2005) introduced a primitive to
-% do this reliably, so we use it.
-
-% #1 is a control sequence in which to do the replacements,
-% which we \xdef.
-\def\txiescapepdf#1{%
-  \ifx\pdfescapestring\thisisundefined
-    % No primitive available; should we give a warning or log?
-    % Many times it won't matter.
-  \else
-    % The expandable \pdfescapestring primitive escapes parentheses,
-    % backslashes, and other special chars.
-    \xdef#1{\pdfescapestring{#1}}%
-  \fi
-}
-
-\newhelp\nopdfimagehelp{Texinfo supports .png, .jpg, .jpeg, and .pdf images
-with PDF output, and none of those formats could be found.  (.eps cannot
-be supported due to the design of the PDF format; use regular TeX (DVI
-output) for that.)}
-
-\ifpdf
-  %
-  % Color manipulation macros using ideas from pdfcolor.tex,
-  % except using rgb instead of cmyk; the latter is said to render as a
-  % very dark gray on-screen and a very dark halftone in print, instead
-  % of actual black. The dark red here is dark enough to print on paper as
-  % nearly black, but still distinguishable for online viewing.  We use
-  % black by default, though.
-  \def\rgbDarkRed{0.50 0.09 0.12}
-  \def\rgbBlack{0 0 0}
-  %
-  % k sets the color for filling (usual text, etc.);
-  % K sets the color for stroking (thin rules, e.g., normal _'s).
-  \def\pdfsetcolor#1{\pdfliteral{#1 rg  #1 RG}}
-  %
-  % Set color, and create a mark which defines \thiscolor accordingly,
-  % so that \makeheadline knows which color to restore.
-  \def\setcolor#1{%
-    \xdef\lastcolordefs{\gdef\noexpand\thiscolor{#1}}%
-    \domark
-    \pdfsetcolor{#1}%
-  }
-  %
-  \def\maincolor{\rgbBlack}
-  \pdfsetcolor{\maincolor}
-  \edef\thiscolor{\maincolor}
-  \def\lastcolordefs{}
-  %
-  \def\makefootline{%
-    \baselineskip24pt
-    \line{\pdfsetcolor{\maincolor}\the\footline}%
-  }
-  %
-  \def\makeheadline{%
-    \vbox to 0pt{%
-      \vskip-22.5pt
-      \line{%
-        \vbox to8.5pt{}%
-        % Extract \thiscolor definition from the marks.
-        \getcolormarks
-        % Typeset the headline with \maincolor, then restore the color.
-        \pdfsetcolor{\maincolor}\the\headline\pdfsetcolor{\thiscolor}%
-      }%
-      \vss
-    }%
-    \nointerlineskip
-  }
-  %
-  %
-  \pdfcatalog{/PageMode /UseOutlines}
-  %
-  % #1 is image name, #2 width (might be empty/whitespace), #3 height (ditto).
-  \def\dopdfimage#1#2#3{%
-    \def\pdfimagewidth{#2}\setbox0 = \hbox{\ignorespaces #2}%
-    \def\pdfimageheight{#3}\setbox2 = \hbox{\ignorespaces #3}%
-    %
-    % pdftex (and the PDF format) support .pdf, .png, .jpg (among
-    % others).  Let's try in that order, PDF first since if
-    % someone has a scalable image, presumably better to use that than a
-    % bitmap.
-    \let\pdfimgext=\empty
-    \begingroup
-      \openin 1 #1.pdf \ifeof 1
-        \openin 1 #1.PDF \ifeof 1
-          \openin 1 #1.png \ifeof 1
-            \openin 1 #1.jpg \ifeof 1
-              \openin 1 #1.jpeg \ifeof 1
-                \openin 1 #1.JPG \ifeof 1
-                  \errhelp = \nopdfimagehelp
-                  \errmessage{Could not find image file #1 for pdf}%
-                \else \gdef\pdfimgext{JPG}%
-                \fi
-              \else \gdef\pdfimgext{jpeg}%
-              \fi
-            \else \gdef\pdfimgext{jpg}%
-            \fi
-          \else \gdef\pdfimgext{png}%
-          \fi
-        \else \gdef\pdfimgext{PDF}%
-        \fi
-      \else \gdef\pdfimgext{pdf}%
-      \fi
-      \closein 1
-    \endgroup
-    %
-    % without \immediate, ancient pdftex seg faults when the same image is
-    % included twice.  (Version 3.14159-pre-1.0-unofficial-20010704.)
-    \ifnum\pdftexversion < 14
-      \immediate\pdfimage
-    \else
-      \immediate\pdfximage
-    \fi
-      \ifdim \wd0 >0pt width \pdfimagewidth \fi
-      \ifdim \wd2 >0pt height \pdfimageheight \fi
-      \ifnum\pdftexversion<13
-         #1.\pdfimgext
-       \else
-         {#1.\pdfimgext}%
-       \fi
-    \ifnum\pdftexversion < 14 \else
-      \pdfrefximage \pdflastximage
-    \fi}
-  %
-  \def\pdfmkdest#1{{%
-    % We have to set dummies so commands such as @code, and characters
-    % such as \, aren't expanded when present in a section title.
-    \indexnofonts
-    \turnoffactive
-    \makevalueexpandable
-    \def\pdfdestname{#1}%
-    \txiescapepdf\pdfdestname
-    \safewhatsit{\pdfdest name{\pdfdestname} xyz}%
-  }}
-  %
-  % used to mark target names; must be expandable.
-  \def\pdfmkpgn#1{#1}
-  %
-  % by default, use black for everything.
-  \def\urlcolor{\rgbBlack}
-  \def\linkcolor{\rgbBlack}
-  \def\endlink{\setcolor{\maincolor}\pdfendlink}
-  %
-  % Adding outlines to PDF; macros for calculating structure of outlines
-  % come from Petr Olsak
-  \def\expnumber#1{\expandafter\ifx\csname#1\endcsname\relax 0%
-    \else \csname#1\endcsname \fi}
-  \def\advancenumber#1{\tempnum=\expnumber{#1}\relax
-    \advance\tempnum by 1
-    \expandafter\xdef\csname#1\endcsname{\the\tempnum}}
-  %
-  % #1 is the section text, which is what will be displayed in the
-  % outline by the pdf viewer.  #2 is the pdf expression for the number
-  % of subentries (or empty, for subsubsections).  #3 is the node text,
-  % which might be empty if this toc entry had no corresponding node.
-  % #4 is the page number
-  %
-  \def\dopdfoutline#1#2#3#4{%
-    % Generate a link to the node text if that exists; else, use the
-    % page number.  We could generate a destination for the section
-    % text in the case where a section has no node, but it doesn't
-    % seem worth the trouble, since most documents are normally structured.
-    \edef\pdfoutlinedest{#3}%
-    \ifx\pdfoutlinedest\empty
-      \def\pdfoutlinedest{#4}%
-    \else
-      \txiescapepdf\pdfoutlinedest
-    \fi
-    %
-    % Also escape PDF chars in the display string.
-    \edef\pdfoutlinetext{#1}%
-    \txiescapepdf\pdfoutlinetext
-    %
-    \pdfoutline goto name{\pdfmkpgn{\pdfoutlinedest}}#2{\pdfoutlinetext}%
-  }
-  %
-  \def\pdfmakeoutlines{%
-    \begingroup
-      % Read toc silently, to get counts of subentries for \pdfoutline.
-      \def\partentry##1##2##3##4{}% ignore parts in the outlines
-      \def\numchapentry##1##2##3##4{%
-	\def\thischapnum{##2}%
-	\def\thissecnum{0}%
-	\def\thissubsecnum{0}%
-      }%
-      \def\numsecentry##1##2##3##4{%
-	\advancenumber{chap\thischapnum}%
-	\def\thissecnum{##2}%
-	\def\thissubsecnum{0}%
-      }%
-      \def\numsubsecentry##1##2##3##4{%
-	\advancenumber{sec\thissecnum}%
-	\def\thissubsecnum{##2}%
-      }%
-      \def\numsubsubsecentry##1##2##3##4{%
-	\advancenumber{subsec\thissubsecnum}%
-      }%
-      \def\thischapnum{0}%
-      \def\thissecnum{0}%
-      \def\thissubsecnum{0}%
-      %
-      % use \def rather than \let here because we redefine \chapentry et
-      % al. a second time, below.
-      \def\appentry{\numchapentry}%
-      \def\appsecentry{\numsecentry}%
-      \def\appsubsecentry{\numsubsecentry}%
-      \def\appsubsubsecentry{\numsubsubsecentry}%
-      \def\unnchapentry{\numchapentry}%
-      \def\unnsecentry{\numsecentry}%
-      \def\unnsubsecentry{\numsubsecentry}%
-      \def\unnsubsubsecentry{\numsubsubsecentry}%
-      \readdatafile{toc}%
-      %
-      % Read toc second time, this time actually producing the outlines.
-      % The `-' means take the \expnumber as the absolute number of
-      % subentries, which we calculated on our first read of the .toc above.
-      %
-      % We use the node names as the destinations.
-      \def\numchapentry##1##2##3##4{%
-        \dopdfoutline{##1}{count-\expnumber{chap##2}}{##3}{##4}}%
-      \def\numsecentry##1##2##3##4{%
-        \dopdfoutline{##1}{count-\expnumber{sec##2}}{##3}{##4}}%
-      \def\numsubsecentry##1##2##3##4{%
-        \dopdfoutline{##1}{count-\expnumber{subsec##2}}{##3}{##4}}%
-      \def\numsubsubsecentry##1##2##3##4{% count is always zero
-        \dopdfoutline{##1}{}{##3}{##4}}%
-      %
-      % PDF outlines are displayed using system fonts, instead of
-      % document fonts.  Therefore we cannot use special characters,
-      % since the encoding is unknown.  For example, the eogonek from
-      % Latin 2 (0xea) gets translated to a | character.  Info from
-      % Staszek Wawrykiewicz, 19 Jan 2004 04:09:24 +0100.
-      %
-      % TODO this right, we have to translate 8-bit characters to
-      % their "best" equivalent, based on the @documentencoding.  Too
-      % much work for too little return.  Just use the ASCII equivalents
-      % we use for the index sort strings.
-      % 
-      \indexnofonts
-      \setupdatafile
-      % We can have normal brace characters in the PDF outlines, unlike
-      % Texinfo index files.  So set that up.
-      \def\{{\lbracecharliteral}%
-      \def\}{\rbracecharliteral}%
-      \catcode`\\=\active \otherbackslash
-      \input \tocreadfilename
-    \endgroup
-  }
-  {\catcode`[=1 \catcode`]=2
-   \catcode`{=\other \catcode`}=\other
-   \gdef\lbracecharliteral[{]%
-   \gdef\rbracecharliteral[}]%
-  ]
-  %
-  \def\skipspaces#1{\def\PP{#1}\def\D{|}%
-    \ifx\PP\D\let\nextsp\relax
-    \else\let\nextsp\skipspaces
-      \addtokens{\filename}{\PP}%
-      \advance\filenamelength by 1
-    \fi
-    \nextsp}
-  \def\getfilename#1{%
-    \filenamelength=0
-    % If we don't expand the argument now, \skipspaces will get
-    % snagged on things like "@value{foo}".
-    \edef\temp{#1}%
-    \expandafter\skipspaces\temp|\relax
-  }
-  \ifnum\pdftexversion < 14
-    \let \startlink \pdfannotlink
-  \else
-    \let \startlink \pdfstartlink
-  \fi
-  % make a live url in pdf output.
-  \def\pdfurl#1{%
-    \begingroup
-      % it seems we really need yet another set of dummies; have not
-      % tried to figure out what each command should do in the context
-      % of @url.  for now, just make @/ a no-op, that's the only one
-      % people have actually reported a problem with.
-      %
-      \normalturnoffactive
-      \def\@{@}%
-      \let\/=\empty
-      \makevalueexpandable
-      % do we want to go so far as to use \indexnofonts instead of just
-      % special-casing \var here?
-      \def\var##1{##1}%
-      %
-      \leavevmode\setcolor{\urlcolor}%
-      \startlink attr{/Border [0 0 0]}%
-        user{/Subtype /Link /A << /S /URI /URI (#1) >>}%
-    \endgroup}
-  \def\pdfgettoks#1.{\setbox\boxA=\hbox{\toksA={#1.}\toksB={}\maketoks}}
-  \def\addtokens#1#2{\edef\addtoks{\noexpand#1={\the#1#2}}\addtoks}
-  \def\adn#1{\addtokens{\toksC}{#1}\global\countA=1\let\next=\maketoks}
-  \def\poptoks#1#2|ENDTOKS|{\let\first=#1\toksD={#1}\toksA={#2}}
-  \def\maketoks{%
-    \expandafter\poptoks\the\toksA|ENDTOKS|\relax
-    \ifx\first0\adn0
-    \else\ifx\first1\adn1 \else\ifx\first2\adn2 \else\ifx\first3\adn3
-    \else\ifx\first4\adn4 \else\ifx\first5\adn5 \else\ifx\first6\adn6
-    \else\ifx\first7\adn7 \else\ifx\first8\adn8 \else\ifx\first9\adn9
-    \else
-      \ifnum0=\countA\else\makelink\fi
-      \ifx\first.\let\next=\done\else
-        \let\next=\maketoks
-        \addtokens{\toksB}{\the\toksD}
-        \ifx\first,\addtokens{\toksB}{\space}\fi
-      \fi
-    \fi\fi\fi\fi\fi\fi\fi\fi\fi\fi
-    \next}
-  \def\makelink{\addtokens{\toksB}%
-    {\noexpand\pdflink{\the\toksC}}\toksC={}\global\countA=0}
-  \def\pdflink#1{%
-    \startlink attr{/Border [0 0 0]} goto name{\pdfmkpgn{#1}}
-    \setcolor{\linkcolor}#1\endlink}
-  \def\done{\edef\st{\global\noexpand\toksA={\the\toksB}}\st}
-\else
-  % non-pdf mode
-  \let\pdfmkdest = \gobble
-  \let\pdfurl = \gobble
-  \let\endlink = \relax
-  \let\setcolor = \gobble
-  \let\pdfsetcolor = \gobble
-  \let\pdfmakeoutlines = \relax
-\fi  % \ifx\pdfoutput
-
-
-\message{fonts,}
-
-% Change the current font style to #1, remembering it in \curfontstyle.
-% For now, we do not accumulate font styles: @b{@i{foo}} prints foo in
-% italics, not bold italics.
-%
-\def\setfontstyle#1{%
-  \def\curfontstyle{#1}% not as a control sequence, because we are \edef'd.
-  \csname ten#1\endcsname  % change the current font
-}
-
-% Select #1 fonts with the current style.
-%
-\def\selectfonts#1{\csname #1fonts\endcsname \csname\curfontstyle\endcsname}
-
-\def\rm{\fam=0 \setfontstyle{rm}}
-\def\it{\fam=\itfam \setfontstyle{it}}
-\def\sl{\fam=\slfam \setfontstyle{sl}}
-\def\bf{\fam=\bffam \setfontstyle{bf}}\def\bfstylename{bf}
-\def\tt{\fam=\ttfam \setfontstyle{tt}}
-
-% Unfortunately, we have to override this for titles and the like, since
-% in those cases "rm" is bold.  Sigh.
-\def\rmisbold{\rm\def\curfontstyle{bf}}
-
-% Texinfo sort of supports the sans serif font style, which plain TeX does not.
-% So we set up a \sf.
-\newfam\sffam
-\def\sf{\fam=\sffam \setfontstyle{sf}}
-\let\li = \sf % Sometimes we call it \li, not \sf.
-
-% We don't need math for this font style.
-\def\ttsl{\setfontstyle{ttsl}}
-
-
-% Set the baselineskip to #1, and the lineskip and strut size
-% correspondingly.  There is no deep meaning behind these magic numbers
-% used as factors; they just match (closely enough) what Knuth defined.
-%
-\def\lineskipfactor{.08333}
-\def\strutheightpercent{.70833}
-\def\strutdepthpercent {.29167}
-%
-% can get a sort of poor man's double spacing by redefining this.
-\def\baselinefactor{1}
-%
-\newdimen\textleading
-\def\setleading#1{%
-  \dimen0 = #1\relax
-  \normalbaselineskip = \baselinefactor\dimen0
-  \normallineskip = \lineskipfactor\normalbaselineskip
-  \normalbaselines
-  \setbox\strutbox =\hbox{%
-    \vrule width0pt height\strutheightpercent\baselineskip
-                    depth \strutdepthpercent \baselineskip
-  }%
-}
-
-% PDF CMaps.  See also LaTeX's t1.cmap.
-%
-% do nothing with this by default.
-\expandafter\let\csname cmapOT1\endcsname\gobble
-\expandafter\let\csname cmapOT1IT\endcsname\gobble
-\expandafter\let\csname cmapOT1TT\endcsname\gobble
-
-% if we are producing pdf, and we have \pdffontattr, then define cmaps.
-% (\pdffontattr was introduced many years ago, but people still run
-% older pdftex's; it's easy to conditionalize, so we do.)
-\ifpdf \ifx\pdffontattr\thisisundefined \else
-  \begingroup
-    \catcode`\^^M=\active \def^^M{^^J}% Output line endings as the ^^J char.
-    \catcode`\%=12 \immediate\pdfobj stream {%!PS-Adobe-3.0 Resource-CMap
-%%DocumentNeededResources: ProcSet (CIDInit)
-%%IncludeResource: ProcSet (CIDInit)
-%%BeginResource: CMap (TeX-OT1-0)
-%%Title: (TeX-OT1-0 TeX OT1 0)
-%%Version: 1.000
-%%EndComments
-/CIDInit /ProcSet findresource begin
-12 dict begin
-begincmap
-/CIDSystemInfo
-<< /Registry (TeX)
-/Ordering (OT1)
-/Supplement 0
->> def
-/CMapName /TeX-OT1-0 def
-/CMapType 2 def
-1 begincodespacerange
-<00> <7F>
-endcodespacerange
-8 beginbfrange
-<00> <01> <0393>
-<09> <0A> <03A8>
-<23> <26> <0023>
-<28> <3B> <0028>
-<3F> <5B> <003F>
-<5D> <5E> <005D>
-<61> <7A> <0061>
-<7B> <7C> <2013>
-endbfrange
-40 beginbfchar
-<02> <0398>
-<03> <039B>
-<04> <039E>
-<05> <03A0>
-<06> <03A3>
-<07> <03D2>
-<08> <03A6>
-<0B> <00660066>
-<0C> <00660069>
-<0D> <0066006C>
-<0E> <006600660069>
-<0F> <00660066006C>
-<10> <0131>
-<11> <0237>
-<12> <0060>
-<13> <00B4>
-<14> <02C7>
-<15> <02D8>
-<16> <00AF>
-<17> <02DA>
-<18> <00B8>
-<19> <00DF>
-<1A> <00E6>
-<1B> <0153>
-<1C> <00F8>
-<1D> <00C6>
-<1E> <0152>
-<1F> <00D8>
-<21> <0021>
-<22> <201D>
-<27> <2019>
-<3C> <00A1>
-<3D> <003D>
-<3E> <00BF>
-<5C> <201C>
-<5F> <02D9>
-<60> <2018>
-<7D> <02DD>
-<7E> <007E>
-<7F> <00A8>
-endbfchar
-endcmap
-CMapName currentdict /CMap defineresource pop
-end
-end
-%%EndResource
-%%EOF
-    }\endgroup
-  \expandafter\edef\csname cmapOT1\endcsname#1{%
-    \pdffontattr#1{/ToUnicode \the\pdflastobj\space 0 R}%
-  }%
-%
-% \cmapOT1IT
-  \begingroup
-    \catcode`\^^M=\active \def^^M{^^J}% Output line endings as the ^^J char.
-    \catcode`\%=12 \immediate\pdfobj stream {%!PS-Adobe-3.0 Resource-CMap
-%%DocumentNeededResources: ProcSet (CIDInit)
-%%IncludeResource: ProcSet (CIDInit)
-%%BeginResource: CMap (TeX-OT1IT-0)
-%%Title: (TeX-OT1IT-0 TeX OT1IT 0)
-%%Version: 1.000
-%%EndComments
-/CIDInit /ProcSet findresource begin
-12 dict begin
-begincmap
-/CIDSystemInfo
-<< /Registry (TeX)
-/Ordering (OT1IT)
-/Supplement 0
->> def
-/CMapName /TeX-OT1IT-0 def
-/CMapType 2 def
-1 begincodespacerange
-<00> <7F>
-endcodespacerange
-8 beginbfrange
-<00> <01> <0393>
-<09> <0A> <03A8>
-<25> <26> <0025>
-<28> <3B> <0028>
-<3F> <5B> <003F>
-<5D> <5E> <005D>
-<61> <7A> <0061>
-<7B> <7C> <2013>
-endbfrange
-42 beginbfchar
-<02> <0398>
-<03> <039B>
-<04> <039E>
-<05> <03A0>
-<06> <03A3>
-<07> <03D2>
-<08> <03A6>
-<0B> <00660066>
-<0C> <00660069>
-<0D> <0066006C>
-<0E> <006600660069>
-<0F> <00660066006C>
-<10> <0131>
-<11> <0237>
-<12> <0060>
-<13> <00B4>
-<14> <02C7>
-<15> <02D8>
-<16> <00AF>
-<17> <02DA>
-<18> <00B8>
-<19> <00DF>
-<1A> <00E6>
-<1B> <0153>
-<1C> <00F8>
-<1D> <00C6>
-<1E> <0152>
-<1F> <00D8>
-<21> <0021>
-<22> <201D>
-<23> <0023>
-<24> <00A3>
-<27> <2019>
-<3C> <00A1>
-<3D> <003D>
-<3E> <00BF>
-<5C> <201C>
-<5F> <02D9>
-<60> <2018>
-<7D> <02DD>
-<7E> <007E>
-<7F> <00A8>
-endbfchar
-endcmap
-CMapName currentdict /CMap defineresource pop
-end
-end
-%%EndResource
-%%EOF
-    }\endgroup
-  \expandafter\edef\csname cmapOT1IT\endcsname#1{%
-    \pdffontattr#1{/ToUnicode \the\pdflastobj\space 0 R}%
-  }%
-%
-% \cmapOT1TT
-  \begingroup
-    \catcode`\^^M=\active \def^^M{^^J}% Output line endings as the ^^J char.
-    \catcode`\%=12 \immediate\pdfobj stream {%!PS-Adobe-3.0 Resource-CMap
-%%DocumentNeededResources: ProcSet (CIDInit)
-%%IncludeResource: ProcSet (CIDInit)
-%%BeginResource: CMap (TeX-OT1TT-0)
-%%Title: (TeX-OT1TT-0 TeX OT1TT 0)
-%%Version: 1.000
-%%EndComments
-/CIDInit /ProcSet findresource begin
-12 dict begin
-begincmap
-/CIDSystemInfo
-<< /Registry (TeX)
-/Ordering (OT1TT)
-/Supplement 0
->> def
-/CMapName /TeX-OT1TT-0 def
-/CMapType 2 def
-1 begincodespacerange
-<00> <7F>
-endcodespacerange
-5 beginbfrange
-<00> <01> <0393>
-<09> <0A> <03A8>
-<21> <26> <0021>
-<28> <5F> <0028>
-<61> <7E> <0061>
-endbfrange
-32 beginbfchar
-<02> <0398>
-<03> <039B>
-<04> <039E>
-<05> <03A0>
-<06> <03A3>
-<07> <03D2>
-<08> <03A6>
-<0B> <2191>
-<0C> <2193>
-<0D> <0027>
-<0E> <00A1>
-<0F> <00BF>
-<10> <0131>
-<11> <0237>
-<12> <0060>
-<13> <00B4>
-<14> <02C7>
-<15> <02D8>
-<16> <00AF>
-<17> <02DA>
-<18> <00B8>
-<19> <00DF>
-<1A> <00E6>
-<1B> <0153>
-<1C> <00F8>
-<1D> <00C6>
-<1E> <0152>
-<1F> <00D8>
-<20> <2423>
-<27> <2019>
-<60> <2018>
-<7F> <00A8>
-endbfchar
-endcmap
-CMapName currentdict /CMap defineresource pop
-end
-end
-%%EndResource
-%%EOF
-    }\endgroup
-  \expandafter\edef\csname cmapOT1TT\endcsname#1{%
-    \pdffontattr#1{/ToUnicode \the\pdflastobj\space 0 R}%
-  }%
-\fi\fi
-
-
-% Set the font macro #1 to the font named \fontprefix#2.
-% #3 is the font's design size, #4 is a scale factor, #5 is the CMap
-% encoding (only OT1, OT1IT and OT1TT are allowed, or empty to omit).
-% Example:
-% #1 = \textrm
-% #2 = \rmshape
-% #3 = 10
-% #4 = \mainmagstep
-% #5 = OT1
-%
-\def\setfont#1#2#3#4#5{%
-  \font#1=\fontprefix#2#3 scaled #4
-  \csname cmap#5\endcsname#1%
-}
-% This is what gets called when #5 of \setfont is empty.
-\let\cmap\gobble
-%
-% (end of cmaps)
-
-% Use cm as the default font prefix.
-% To specify the font prefix, you must define \fontprefix
-% before you read in texinfo.tex.
-\ifx\fontprefix\thisisundefined
-\def\fontprefix{cm}
-\fi
-% Support font families that don't use the same naming scheme as CM.
-\def\rmshape{r}
-\def\rmbshape{bx}               % where the normal face is bold
-\def\bfshape{b}
-\def\bxshape{bx}
-\def\ttshape{tt}
-\def\ttbshape{tt}
-\def\ttslshape{sltt}
-\def\itshape{ti}
-\def\itbshape{bxti}
-\def\slshape{sl}
-\def\slbshape{bxsl}
-\def\sfshape{ss}
-\def\sfbshape{ss}
-\def\scshape{csc}
-\def\scbshape{csc}
-
-% Definitions for a main text size of 11pt.  (The default in Texinfo.)
-%
-\def\definetextfontsizexi{%
-% Text fonts (11.2pt, magstep1).
-\def\textnominalsize{11pt}
-\edef\mainmagstep{\magstephalf}
-\setfont\textrm\rmshape{10}{\mainmagstep}{OT1}
-\setfont\texttt\ttshape{10}{\mainmagstep}{OT1TT}
-\setfont\textbf\bfshape{10}{\mainmagstep}{OT1}
-\setfont\textit\itshape{10}{\mainmagstep}{OT1IT}
-\setfont\textsl\slshape{10}{\mainmagstep}{OT1}
-\setfont\textsf\sfshape{10}{\mainmagstep}{OT1}
-\setfont\textsc\scshape{10}{\mainmagstep}{OT1}
-\setfont\textttsl\ttslshape{10}{\mainmagstep}{OT1TT}
-\font\texti=cmmi10 scaled \mainmagstep
-\font\textsy=cmsy10 scaled \mainmagstep
-\def\textecsize{1095}
-
-% A few fonts for @defun names and args.
-\setfont\defbf\bfshape{10}{\magstep1}{OT1}
-\setfont\deftt\ttshape{10}{\magstep1}{OT1TT}
-\setfont\defttsl\ttslshape{10}{\magstep1}{OT1TT}
-\def\df{\let\tentt=\deftt \let\tenbf = \defbf \let\tenttsl=\defttsl \bf}
-
-% Fonts for indices, footnotes, small examples (9pt).
-\def\smallnominalsize{9pt}
-\setfont\smallrm\rmshape{9}{1000}{OT1}
-\setfont\smalltt\ttshape{9}{1000}{OT1TT}
-\setfont\smallbf\bfshape{10}{900}{OT1}
-\setfont\smallit\itshape{9}{1000}{OT1IT}
-\setfont\smallsl\slshape{9}{1000}{OT1}
-\setfont\smallsf\sfshape{9}{1000}{OT1}
-\setfont\smallsc\scshape{10}{900}{OT1}
-\setfont\smallttsl\ttslshape{10}{900}{OT1TT}
-\font\smalli=cmmi9
-\font\smallsy=cmsy9
-\def\smallecsize{0900}
-
-% Fonts for small examples (8pt).
-\def\smallernominalsize{8pt}
-\setfont\smallerrm\rmshape{8}{1000}{OT1}
-\setfont\smallertt\ttshape{8}{1000}{OT1TT}
-\setfont\smallerbf\bfshape{10}{800}{OT1}
-\setfont\smallerit\itshape{8}{1000}{OT1IT}
-\setfont\smallersl\slshape{8}{1000}{OT1}
-\setfont\smallersf\sfshape{8}{1000}{OT1}
-\setfont\smallersc\scshape{10}{800}{OT1}
-\setfont\smallerttsl\ttslshape{10}{800}{OT1TT}
-\font\smalleri=cmmi8
-\font\smallersy=cmsy8
-\def\smallerecsize{0800}
-
-% Fonts for title page (20.4pt):
-\def\titlenominalsize{20pt}
-\setfont\titlerm\rmbshape{12}{\magstep3}{OT1}
-\setfont\titleit\itbshape{10}{\magstep4}{OT1IT}
-\setfont\titlesl\slbshape{10}{\magstep4}{OT1}
-\setfont\titlett\ttbshape{12}{\magstep3}{OT1TT}
-\setfont\titlettsl\ttslshape{10}{\magstep4}{OT1TT}
-\setfont\titlesf\sfbshape{17}{\magstep1}{OT1}
-\let\titlebf=\titlerm
-\setfont\titlesc\scbshape{10}{\magstep4}{OT1}
-\font\titlei=cmmi12 scaled \magstep3
-\font\titlesy=cmsy10 scaled \magstep4
-\def\titleecsize{2074}
-
-% Chapter (and unnumbered) fonts (17.28pt).
-\def\chapnominalsize{17pt}
-\setfont\chaprm\rmbshape{12}{\magstep2}{OT1}
-\setfont\chapit\itbshape{10}{\magstep3}{OT1IT}
-\setfont\chapsl\slbshape{10}{\magstep3}{OT1}
-\setfont\chaptt\ttbshape{12}{\magstep2}{OT1TT}
-\setfont\chapttsl\ttslshape{10}{\magstep3}{OT1TT}
-\setfont\chapsf\sfbshape{17}{1000}{OT1}
-\let\chapbf=\chaprm
-\setfont\chapsc\scbshape{10}{\magstep3}{OT1}
-\font\chapi=cmmi12 scaled \magstep2
-\font\chapsy=cmsy10 scaled \magstep3
-\def\chapecsize{1728}
-
-% Section fonts (14.4pt).
-\def\secnominalsize{14pt}
-\setfont\secrm\rmbshape{12}{\magstep1}{OT1}
-\setfont\secit\itbshape{10}{\magstep2}{OT1IT}
-\setfont\secsl\slbshape{10}{\magstep2}{OT1}
-\setfont\sectt\ttbshape{12}{\magstep1}{OT1TT}
-\setfont\secttsl\ttslshape{10}{\magstep2}{OT1TT}
-\setfont\secsf\sfbshape{12}{\magstep1}{OT1}
-\let\secbf\secrm
-\setfont\secsc\scbshape{10}{\magstep2}{OT1}
-\font\seci=cmmi12 scaled \magstep1
-\font\secsy=cmsy10 scaled \magstep2
-\def\sececsize{1440}
-
-% Subsection fonts (13.15pt).
-\def\ssecnominalsize{13pt}
-\setfont\ssecrm\rmbshape{12}{\magstephalf}{OT1}
-\setfont\ssecit\itbshape{10}{1315}{OT1IT}
-\setfont\ssecsl\slbshape{10}{1315}{OT1}
-\setfont\ssectt\ttbshape{12}{\magstephalf}{OT1TT}
-\setfont\ssecttsl\ttslshape{10}{1315}{OT1TT}
-\setfont\ssecsf\sfbshape{12}{\magstephalf}{OT1}
-\let\ssecbf\ssecrm
-\setfont\ssecsc\scbshape{10}{1315}{OT1}
-\font\sseci=cmmi12 scaled \magstephalf
-\font\ssecsy=cmsy10 scaled 1315
-\def\ssececsize{1200}
-
-% Reduced fonts for @acro in text (10pt).
-\def\reducednominalsize{10pt}
-\setfont\reducedrm\rmshape{10}{1000}{OT1}
-\setfont\reducedtt\ttshape{10}{1000}{OT1TT}
-\setfont\reducedbf\bfshape{10}{1000}{OT1}
-\setfont\reducedit\itshape{10}{1000}{OT1IT}
-\setfont\reducedsl\slshape{10}{1000}{OT1}
-\setfont\reducedsf\sfshape{10}{1000}{OT1}
-\setfont\reducedsc\scshape{10}{1000}{OT1}
-\setfont\reducedttsl\ttslshape{10}{1000}{OT1TT}
-\font\reducedi=cmmi10
-\font\reducedsy=cmsy10
-\def\reducedecsize{1000}
-
-\textleading = 13.2pt % line spacing for 11pt CM
-\textfonts            % reset the current fonts
-\rm
-} % end of 11pt text font size definitions, \definetextfontsizexi
-
-
-% Definitions to make the main text be 10pt Computer Modern, with
-% section, chapter, etc., sizes following suit.  This is for the GNU
-% Press printing of the Emacs 22 manual.  Maybe other manuals in the
-% future.  Used with @smallbook, which sets the leading to 12pt.
-%
-\def\definetextfontsizex{%
-% Text fonts (10pt).
-\def\textnominalsize{10pt}
-\edef\mainmagstep{1000}
-\setfont\textrm\rmshape{10}{\mainmagstep}{OT1}
-\setfont\texttt\ttshape{10}{\mainmagstep}{OT1TT}
-\setfont\textbf\bfshape{10}{\mainmagstep}{OT1}
-\setfont\textit\itshape{10}{\mainmagstep}{OT1IT}
-\setfont\textsl\slshape{10}{\mainmagstep}{OT1}
-\setfont\textsf\sfshape{10}{\mainmagstep}{OT1}
-\setfont\textsc\scshape{10}{\mainmagstep}{OT1}
-\setfont\textttsl\ttslshape{10}{\mainmagstep}{OT1TT}
-\font\texti=cmmi10 scaled \mainmagstep
-\font\textsy=cmsy10 scaled \mainmagstep
-\def\textecsize{1000}
-
-% A few fonts for @defun names and args.
-\setfont\defbf\bfshape{10}{\magstephalf}{OT1}
-\setfont\deftt\ttshape{10}{\magstephalf}{OT1TT}
-\setfont\defttsl\ttslshape{10}{\magstephalf}{OT1TT}
-\def\df{\let\tentt=\deftt \let\tenbf = \defbf \let\tenttsl=\defttsl \bf}
-
-% Fonts for indices, footnotes, small examples (9pt).
-\def\smallnominalsize{9pt}
-\setfont\smallrm\rmshape{9}{1000}{OT1}
-\setfont\smalltt\ttshape{9}{1000}{OT1TT}
-\setfont\smallbf\bfshape{10}{900}{OT1}
-\setfont\smallit\itshape{9}{1000}{OT1IT}
-\setfont\smallsl\slshape{9}{1000}{OT1}
-\setfont\smallsf\sfshape{9}{1000}{OT1}
-\setfont\smallsc\scshape{10}{900}{OT1}
-\setfont\smallttsl\ttslshape{10}{900}{OT1TT}
-\font\smalli=cmmi9
-\font\smallsy=cmsy9
-\def\smallecsize{0900}
-
-% Fonts for small examples (8pt).
-\def\smallernominalsize{8pt}
-\setfont\smallerrm\rmshape{8}{1000}{OT1}
-\setfont\smallertt\ttshape{8}{1000}{OT1TT}
-\setfont\smallerbf\bfshape{10}{800}{OT1}
-\setfont\smallerit\itshape{8}{1000}{OT1IT}
-\setfont\smallersl\slshape{8}{1000}{OT1}
-\setfont\smallersf\sfshape{8}{1000}{OT1}
-\setfont\smallersc\scshape{10}{800}{OT1}
-\setfont\smallerttsl\ttslshape{10}{800}{OT1TT}
-\font\smalleri=cmmi8
-\font\smallersy=cmsy8
-\def\smallerecsize{0800}
-
-% Fonts for title page (20.4pt):
-\def\titlenominalsize{20pt}
-\setfont\titlerm\rmbshape{12}{\magstep3}{OT1}
-\setfont\titleit\itbshape{10}{\magstep4}{OT1IT}
-\setfont\titlesl\slbshape{10}{\magstep4}{OT1}
-\setfont\titlett\ttbshape{12}{\magstep3}{OT1TT}
-\setfont\titlettsl\ttslshape{10}{\magstep4}{OT1TT}
-\setfont\titlesf\sfbshape{17}{\magstep1}{OT1}
-\let\titlebf=\titlerm
-\setfont\titlesc\scbshape{10}{\magstep4}{OT1}
-\font\titlei=cmmi12 scaled \magstep3
-\font\titlesy=cmsy10 scaled \magstep4
-\def\titleecsize{2074}
-
-% Chapter fonts (14.4pt).
-\def\chapnominalsize{14pt}
-\setfont\chaprm\rmbshape{12}{\magstep1}{OT1}
-\setfont\chapit\itbshape{10}{\magstep2}{OT1IT}
-\setfont\chapsl\slbshape{10}{\magstep2}{OT1}
-\setfont\chaptt\ttbshape{12}{\magstep1}{OT1TT}
-\setfont\chapttsl\ttslshape{10}{\magstep2}{OT1TT}
-\setfont\chapsf\sfbshape{12}{\magstep1}{OT1}
-\let\chapbf\chaprm
-\setfont\chapsc\scbshape{10}{\magstep2}{OT1}
-\font\chapi=cmmi12 scaled \magstep1
-\font\chapsy=cmsy10 scaled \magstep2
-\def\chapecsize{1440}
-
-% Section fonts (12pt).
-\def\secnominalsize{12pt}
-\setfont\secrm\rmbshape{12}{1000}{OT1}
-\setfont\secit\itbshape{10}{\magstep1}{OT1IT}
-\setfont\secsl\slbshape{10}{\magstep1}{OT1}
-\setfont\sectt\ttbshape{12}{1000}{OT1TT}
-\setfont\secttsl\ttslshape{10}{\magstep1}{OT1TT}
-\setfont\secsf\sfbshape{12}{1000}{OT1}
-\let\secbf\secrm
-\setfont\secsc\scbshape{10}{\magstep1}{OT1}
-\font\seci=cmmi12
-\font\secsy=cmsy10 scaled \magstep1
-\def\sececsize{1200}
-
-% Subsection fonts (10pt).
-\def\ssecnominalsize{10pt}
-\setfont\ssecrm\rmbshape{10}{1000}{OT1}
-\setfont\ssecit\itbshape{10}{1000}{OT1IT}
-\setfont\ssecsl\slbshape{10}{1000}{OT1}
-\setfont\ssectt\ttbshape{10}{1000}{OT1TT}
-\setfont\ssecttsl\ttslshape{10}{1000}{OT1TT}
-\setfont\ssecsf\sfbshape{10}{1000}{OT1}
-\let\ssecbf\ssecrm
-\setfont\ssecsc\scbshape{10}{1000}{OT1}
-\font\sseci=cmmi10
-\font\ssecsy=cmsy10
-\def\ssececsize{1000}
-
-% Reduced fonts for @acro in text (9pt).
-\def\reducednominalsize{9pt}
-\setfont\reducedrm\rmshape{9}{1000}{OT1}
-\setfont\reducedtt\ttshape{9}{1000}{OT1TT}
-\setfont\reducedbf\bfshape{10}{900}{OT1}
-\setfont\reducedit\itshape{9}{1000}{OT1IT}
-\setfont\reducedsl\slshape{9}{1000}{OT1}
-\setfont\reducedsf\sfshape{9}{1000}{OT1}
-\setfont\reducedsc\scshape{10}{900}{OT1}
-\setfont\reducedttsl\ttslshape{10}{900}{OT1TT}
-\font\reducedi=cmmi9
-\font\reducedsy=cmsy9
-\def\reducedecsize{0900}
-
-\divide\parskip by 2  % reduce space between paragraphs
-\textleading = 12pt   % line spacing for 10pt CM
-\textfonts            % reset the current fonts
-\rm
-} % end of 10pt text font size definitions, \definetextfontsizex
-
-
-% We provide the user-level command
-%   @fonttextsize 10
-% (or 11) to redefine the text font size.  pt is assumed.
-%
-\def\xiword{11}
-\def\xword{10}
-\def\xwordpt{10pt}
-%
-\parseargdef\fonttextsize{%
-  \def\textsizearg{#1}%
-  %\wlog{doing @fonttextsize \textsizearg}%
-  %
-  % Set \globaldefs so that documents can use this inside @tex, since
-  % makeinfo 4.8 does not support it, but we need it nonetheless.
-  %
- \begingroup \globaldefs=1
-  \ifx\textsizearg\xword \definetextfontsizex
-  \else \ifx\textsizearg\xiword \definetextfontsizexi
-  \else
-    \errhelp=\EMsimple
-    \errmessage{@fonttextsize only supports `10' or `11', not `\textsizearg'}
-  \fi\fi
- \endgroup
-}
-
-
-% In order for the font changes to affect most math symbols and letters,
-% we have to define the \textfont of the standard families.  Since
-% texinfo doesn't allow for producing subscripts and superscripts except
-% in the main text, we don't bother to reset \scriptfont and
-% \scriptscriptfont (which would also require loading a lot more fonts).
-%
-\def\resetmathfonts{%
-  \textfont0=\tenrm \textfont1=\teni \textfont2=\tensy
-  \textfont\itfam=\tenit \textfont\slfam=\tensl \textfont\bffam=\tenbf
-  \textfont\ttfam=\tentt \textfont\sffam=\tensf
-}
-
-% The font-changing commands redefine the meanings of \tenSTYLE, instead
-% of just \STYLE.  We do this because \STYLE needs to also set the
-% current \fam for math mode.  Our \STYLE (e.g., \rm) commands hardwire
-% \tenSTYLE to set the current font.
-%
-% Each font-changing command also sets the names \lsize (one size lower)
-% and \lllsize (three sizes lower).  These relative commands are used in
-% the LaTeX logo and acronyms.
-%
-% This all needs generalizing, badly.
-%
-\def\textfonts{%
-  \let\tenrm=\textrm \let\tenit=\textit \let\tensl=\textsl
-  \let\tenbf=\textbf \let\tentt=\texttt \let\smallcaps=\textsc
-  \let\tensf=\textsf \let\teni=\texti \let\tensy=\textsy
-  \let\tenttsl=\textttsl
-  \def\curfontsize{text}%
-  \def\lsize{reduced}\def\lllsize{smaller}%
-  \resetmathfonts \setleading{\textleading}}
-\def\titlefonts{%
-  \let\tenrm=\titlerm \let\tenit=\titleit \let\tensl=\titlesl
-  \let\tenbf=\titlebf \let\tentt=\titlett \let\smallcaps=\titlesc
-  \let\tensf=\titlesf \let\teni=\titlei \let\tensy=\titlesy
-  \let\tenttsl=\titlettsl
-  \def\curfontsize{title}%
-  \def\lsize{chap}\def\lllsize{subsec}%
-  \resetmathfonts \setleading{27pt}}
-\def\titlefont#1{{\titlefonts\rmisbold #1}}
-\def\chapfonts{%
-  \let\tenrm=\chaprm \let\tenit=\chapit \let\tensl=\chapsl
-  \let\tenbf=\chapbf \let\tentt=\chaptt \let\smallcaps=\chapsc
-  \let\tensf=\chapsf \let\teni=\chapi \let\tensy=\chapsy
-  \let\tenttsl=\chapttsl
-  \def\curfontsize{chap}%
-  \def\lsize{sec}\def\lllsize{text}%
-  \resetmathfonts \setleading{19pt}}
-\def\secfonts{%
-  \let\tenrm=\secrm \let\tenit=\secit \let\tensl=\secsl
-  \let\tenbf=\secbf \let\tentt=\sectt \let\smallcaps=\secsc
-  \let\tensf=\secsf \let\teni=\seci \let\tensy=\secsy
-  \let\tenttsl=\secttsl
-  \def\curfontsize{sec}%
-  \def\lsize{subsec}\def\lllsize{reduced}%
-  \resetmathfonts \setleading{17pt}}
-\def\subsecfonts{%
-  \let\tenrm=\ssecrm \let\tenit=\ssecit \let\tensl=\ssecsl
-  \let\tenbf=\ssecbf \let\tentt=\ssectt \let\smallcaps=\ssecsc
-  \let\tensf=\ssecsf \let\teni=\sseci \let\tensy=\ssecsy
-  \let\tenttsl=\ssecttsl
-  \def\curfontsize{ssec}%
-  \def\lsize{text}\def\lllsize{small}%
-  \resetmathfonts \setleading{15pt}}
-\let\subsubsecfonts = \subsecfonts
-\def\reducedfonts{%
-  \let\tenrm=\reducedrm \let\tenit=\reducedit \let\tensl=\reducedsl
-  \let\tenbf=\reducedbf \let\tentt=\reducedtt \let\reducedcaps=\reducedsc
-  \let\tensf=\reducedsf \let\teni=\reducedi \let\tensy=\reducedsy
-  \let\tenttsl=\reducedttsl
-  \def\curfontsize{reduced}%
-  \def\lsize{small}\def\lllsize{smaller}%
-  \resetmathfonts \setleading{10.5pt}}
-\def\smallfonts{%
-  \let\tenrm=\smallrm \let\tenit=\smallit \let\tensl=\smallsl
-  \let\tenbf=\smallbf \let\tentt=\smalltt \let\smallcaps=\smallsc
-  \let\tensf=\smallsf \let\teni=\smalli \let\tensy=\smallsy
-  \let\tenttsl=\smallttsl
-  \def\curfontsize{small}%
-  \def\lsize{smaller}\def\lllsize{smaller}%
-  \resetmathfonts \setleading{10.5pt}}
-\def\smallerfonts{%
-  \let\tenrm=\smallerrm \let\tenit=\smallerit \let\tensl=\smallersl
-  \let\tenbf=\smallerbf \let\tentt=\smallertt \let\smallcaps=\smallersc
-  \let\tensf=\smallersf \let\teni=\smalleri \let\tensy=\smallersy
-  \let\tenttsl=\smallerttsl
-  \def\curfontsize{smaller}%
-  \def\lsize{smaller}\def\lllsize{smaller}%
-  \resetmathfonts \setleading{9.5pt}}
-
-% Fonts for short table of contents.
-\setfont\shortcontrm\rmshape{12}{1000}{OT1}
-\setfont\shortcontbf\bfshape{10}{\magstep1}{OT1}  % no cmb12
-\setfont\shortcontsl\slshape{12}{1000}{OT1}
-\setfont\shortconttt\ttshape{12}{1000}{OT1TT}
-
-% Define these just so they can be easily changed for other fonts.
-\def\angleleft{$\langle$}
-\def\angleright{$\rangle$}
-
-% Set the fonts to use with the @small... environments.
-\let\smallexamplefonts = \smallfonts
-
-% About \smallexamplefonts.  If we use \smallfonts (9pt), @smallexample
-% can fit this many characters:
-%   8.5x11=86   smallbook=72  a4=90  a5=69
-% If we use \scriptfonts (8pt), then we can fit this many characters:
-%   8.5x11=90+  smallbook=80  a4=90+  a5=77
-% For me, subjectively, the few extra characters that fit aren't worth
-% the additional smallness of 8pt.  So I'm making the default 9pt.
-%
-% By the way, for comparison, here's what fits with @example (10pt):
-%   8.5x11=71  smallbook=60  a4=75  a5=58
-% --karl, 24jan03.
-
-% Set up the default fonts, so we can use them for creating boxes.
-%
-\definetextfontsizexi
-
-
-\message{markup,}
-
-% Check if we are currently using a typewriter font.  Since all the
-% Computer Modern typewriter fonts have zero interword stretch (and
-% shrink), and it is reasonable to expect all typewriter fonts to have
-% this property, we can check that font parameter.
-%
-\def\ifmonospace{\ifdim\fontdimen3\font=0pt }
-
-% Markup style infrastructure.  \defmarkupstylesetup\INITMACRO will
-% define and register \INITMACRO to be called on markup style changes.
-% \INITMACRO can check \currentmarkupstyle for the innermost
-% style and the set of \ifmarkupSTYLE switches for all styles
-% currently in effect.
-\newif\ifmarkupvar
-\newif\ifmarkupsamp
-\newif\ifmarkupkey
-%\newif\ifmarkupfile % @file == @samp.
-%\newif\ifmarkupoption % @option == @samp.
-\newif\ifmarkupcode
-\newif\ifmarkupkbd
-%\newif\ifmarkupenv % @env == @code.
-%\newif\ifmarkupcommand % @command == @code.
-\newif\ifmarkuptex % @tex (and part of @math, for now).
-\newif\ifmarkupexample
-\newif\ifmarkupverb
-\newif\ifmarkupverbatim
-
-\let\currentmarkupstyle\empty
-
-\def\setupmarkupstyle#1{%
-  \csname markup#1true\endcsname
-  \def\currentmarkupstyle{#1}%
-  \markupstylesetup
-}
-
-\let\markupstylesetup\empty
-
-\def\defmarkupstylesetup#1{%
-  \expandafter\def\expandafter\markupstylesetup
-    \expandafter{\markupstylesetup #1}%
-  \def#1%
-}
-
-% Markup style setup for left and right quotes.
-\defmarkupstylesetup\markupsetuplq{%
-  \expandafter\let\expandafter \temp
-    \csname markupsetuplq\currentmarkupstyle\endcsname
-  \ifx\temp\relax \markupsetuplqdefault \else \temp \fi
-}
-
-\defmarkupstylesetup\markupsetuprq{%
-  \expandafter\let\expandafter \temp
-    \csname markupsetuprq\currentmarkupstyle\endcsname
-  \ifx\temp\relax \markupsetuprqdefault \else \temp \fi
-}
-
-{
-\catcode`\'=\active
-\catcode`\`=\active
-
-\gdef\markupsetuplqdefault{\let`\lq}
-\gdef\markupsetuprqdefault{\let'\rq}
-
-\gdef\markupsetcodequoteleft{\let`\codequoteleft}
-\gdef\markupsetcodequoteright{\let'\codequoteright}
-}
-
-\let\markupsetuplqcode \markupsetcodequoteleft
-\let\markupsetuprqcode \markupsetcodequoteright
-%
-\let\markupsetuplqexample \markupsetcodequoteleft
-\let\markupsetuprqexample \markupsetcodequoteright
-%
-\let\markupsetuplqkbd     \markupsetcodequoteleft
-\let\markupsetuprqkbd     \markupsetcodequoteright
-%
-\let\markupsetuplqsamp \markupsetcodequoteleft
-\let\markupsetuprqsamp \markupsetcodequoteright
-%
-\let\markupsetuplqverb \markupsetcodequoteleft
-\let\markupsetuprqverb \markupsetcodequoteright
-%
-\let\markupsetuplqverbatim \markupsetcodequoteleft
-\let\markupsetuprqverbatim \markupsetcodequoteright
-
-% Allow an option to not use regular directed right quote/apostrophe
-% (char 0x27), but instead the undirected quote from cmtt (char 0x0d).
-% The undirected quote is ugly, so don't make it the default, but it
-% works for pasting with more pdf viewers (at least evince), the
-% lilypond developers report.  xpdf does work with the regular 0x27.
-%
-\def\codequoteright{%
-  \expandafter\ifx\csname SETtxicodequoteundirected\endcsname\relax
-    \expandafter\ifx\csname SETcodequoteundirected\endcsname\relax
-      '%
-    \else \char'15 \fi
-  \else \char'15 \fi
-}
-%
-% and a similar option for the left quote char vs. a grave accent.
-% Modern fonts display ASCII 0x60 as a grave accent, so some people like
-% the code environments to do likewise.
-%
-\def\codequoteleft{%
-  \expandafter\ifx\csname SETtxicodequotebacktick\endcsname\relax
-    \expandafter\ifx\csname SETcodequotebacktick\endcsname\relax
-      % [Knuth] pp. 380,381,391
-      % \relax disables Spanish ligatures ?` and !` of \tt font.
-      \relax`%
-    \else \char'22 \fi
-  \else \char'22 \fi
-}
-
-% Commands to set the quote options.
-% 
-\parseargdef\codequoteundirected{%
-  \def\temp{#1}%
-  \ifx\temp\onword
-    \expandafter\let\csname SETtxicodequoteundirected\endcsname
-      = t%
-  \else\ifx\temp\offword
-    \expandafter\let\csname SETtxicodequoteundirected\endcsname
-      = \relax
-  \else
-    \errhelp = \EMsimple
-    \errmessage{Unknown @codequoteundirected value `\temp', must be on|off}%
-  \fi\fi
-}
-%
-\parseargdef\codequotebacktick{%
-  \def\temp{#1}%
-  \ifx\temp\onword
-    \expandafter\let\csname SETtxicodequotebacktick\endcsname
-      = t%
-  \else\ifx\temp\offword
-    \expandafter\let\csname SETtxicodequotebacktick\endcsname
-      = \relax
-  \else
-    \errhelp = \EMsimple
-    \errmessage{Unknown @codequotebacktick value `\temp', must be on|off}%
-  \fi\fi
-}
-
-% [Knuth] pp. 380,381,391, disable Spanish ligatures ?` and !` of \tt font.
-\def\noligaturesquoteleft{\relax\lq}
-
-% Count depth in font-changes, for error checks
-\newcount\fontdepth \fontdepth=0
-
-% Font commands.
-
-% #1 is the font command (\sl or \it), #2 is the text to slant.
-% If we are in a monospaced environment, however, 1) always use \ttsl,
-% and 2) do not add an italic correction.
-\def\dosmartslant#1#2{%
-  \ifusingtt 
-    {{\ttsl #2}\let\next=\relax}%
-    {\def\next{{#1#2}\futurelet\next\smartitaliccorrection}}%
-  \next
-}
-\def\smartslanted{\dosmartslant\sl}
-\def\smartitalic{\dosmartslant\it}
-
-% Output an italic correction unless \next (presumed to be the following
-% character) is such as not to need one.
-\def\smartitaliccorrection{%
-  \ifx\next,%
-  \else\ifx\next-%
-  \else\ifx\next.%
-  \else\ifx\next\.%
-  \else\ifx\next\comma%
-  \else\ptexslash
-  \fi\fi\fi\fi\fi
-  \aftersmartic
-}
-
-% Unconditional use \ttsl, and no ic.  @var is set to this for defuns.
-\def\ttslanted#1{{\ttsl #1}}
-
-% @cite is like \smartslanted except unconditionally use \sl.  We never want
-% ttsl for book titles, do we?
-\def\cite#1{{\sl #1}\futurelet\next\smartitaliccorrection}
-
-\def\aftersmartic{}
-\def\var#1{%
-  \let\saveaftersmartic = \aftersmartic
-  \def\aftersmartic{\null\let\aftersmartic=\saveaftersmartic}%
-  \smartslanted{#1}%
-}
-
-\let\i=\smartitalic
-\let\slanted=\smartslanted
-\let\dfn=\smartslanted
-\let\emph=\smartitalic
-
-% Explicit font changes: @r, @sc, undocumented @ii.
-\def\r#1{{\rm #1}}              % roman font
-\def\sc#1{{\smallcaps#1}}       % smallcaps font
-\def\ii#1{{\it #1}}             % italic font
-
-% @b, explicit bold.  Also @strong.
-\def\b#1{{\bf #1}}
-\let\strong=\b
-
-% @sansserif, explicit sans.
-\def\sansserif#1{{\sf #1}}
-
-% We can't just use \exhyphenpenalty, because that only has effect at
-% the end of a paragraph.  Restore normal hyphenation at the end of the
-% group within which \nohyphenation is presumably called.
-%
-\def\nohyphenation{\hyphenchar\font = -1  \aftergroup\restorehyphenation}
-\def\restorehyphenation{\hyphenchar\font = `- }
-
-% Set sfcode to normal for the chars that usually have another value.
-% Can't use plain's \frenchspacing because it uses the `\x notation, and
-% sometimes \x has an active definition that messes things up.
-%
-\catcode`@=11
-  \def\plainfrenchspacing{%
-    \sfcode\dotChar  =\@m \sfcode\questChar=\@m \sfcode\exclamChar=\@m
-    \sfcode\colonChar=\@m \sfcode\semiChar =\@m \sfcode\commaChar =\@m
-    \def\endofsentencespacefactor{1000}% for @. and friends
-  }
-  \def\plainnonfrenchspacing{%
-    \sfcode`\.3000\sfcode`\?3000\sfcode`\!3000
-    \sfcode`\:2000\sfcode`\;1500\sfcode`\,1250
-    \def\endofsentencespacefactor{3000}% for @. and friends
-  }
-\catcode`@=\other
-\def\endofsentencespacefactor{3000}% default
-
-% @t, explicit typewriter.
-\def\t#1{%
-  {\tt \rawbackslash \plainfrenchspacing #1}%
-  \null
-}
-
-% @samp.
-\def\samp#1{{\setupmarkupstyle{samp}\lq\tclose{#1}\rq\null}}
-
-% @indicateurl is \samp, that is, with quotes.
-\let\indicateurl=\samp
-
-% @code (and similar) prints in typewriter, but with spaces the same
-% size as normal in the surrounding text, without hyphenation, etc.
-% This is a subroutine for that.
-\def\tclose#1{%
-  {%
-    % Change normal interword space to be same as for the current font.
-    \spaceskip = \fontdimen2\font
-    %
-    % Switch to typewriter.
-    \tt
-    %
-    % But `\ ' produces the large typewriter interword space.
-    \def\ {{\spaceskip = 0pt{} }}%
-    %
-    % Turn off hyphenation.
-    \nohyphenation
-    %
-    \rawbackslash
-    \plainfrenchspacing
-    #1%
-  }%
-  \null % reset spacefactor to 1000
-}
-
-% We *must* turn on hyphenation at `-' and `_' in @code.
-% (But see \codedashfinish below.)
-% Otherwise, it is too hard to avoid overfull hboxes
-% in the Emacs manual, the Library manual, etc.
-%
-% Unfortunately, TeX uses one parameter (\hyphenchar) to control
-% both hyphenation at - and hyphenation within words.
-% We must therefore turn them both off (\tclose does that)
-% and arrange explicitly to hyphenate at a dash. -- rms.
-{
-  \catcode`\-=\active \catcode`\_=\active
-  \catcode`\'=\active \catcode`\`=\active
-  \global\let'=\rq \global\let`=\lq  % default definitions
-  %
-  \global\def\code{\begingroup
-    \setupmarkupstyle{code}%
-    % The following should really be moved into \setupmarkupstyle handlers.
-    \catcode\dashChar=\active  \catcode\underChar=\active
-    \ifallowcodebreaks
-     \let-\codedash
-     \let_\codeunder
-    \else
-     \let-\normaldash
-     \let_\realunder
-    \fi
-    % Given -foo (with a single dash), we do not want to allow a break
-    % after the hyphen.
-    \global\let\codedashprev=\codedash
-    %
-    \codex
-  }
-  %
-  \gdef\codedash{\futurelet\next\codedashfinish}
-  \gdef\codedashfinish{%
-    \normaldash % always output the dash character itself.
-    % 
-    % Now, output a discretionary to allow a line break, unless
-    % (a) the next character is a -, or
-    % (b) the preceding character is a -.
-    % E.g., given --posix, we do not want to allow a break after either -.
-    % Given --foo-bar, we do want to allow a break between the - and the b.
-    \ifx\next\codedash \else
-      \ifx\codedashprev\codedash 
-      \else \discretionary{}{}{}\fi
-    \fi
-    % we need the space after the = for the case when \next itself is a
-    % space token; it would get swallowed otherwise.  As in @code{- a}.
-    \global\let\codedashprev= \next
-  }
-}
-\def\normaldash{-}
-%
-\def\codex #1{\tclose{#1}\endgroup}
-
-\def\codeunder{%
-  % this is all so @math{@code{var_name}+1} can work.  In math mode, _
-  % is "active" (mathcode"8000) and \normalunderscore (or \char95, etc.)
-  % will therefore expand the active definition of _, which is us
-  % (inside @code that is), therefore an endless loop.
-  \ifusingtt{\ifmmode
-               \mathchar"075F % class 0=ordinary, family 7=ttfam, pos 0x5F=_.
-             \else\normalunderscore \fi
-             \discretionary{}{}{}}%
-            {\_}%
-}
-
-% An additional complication: the above will allow breaks after, e.g.,
-% each of the four underscores in __typeof__.  This is bad.
-% @allowcodebreaks provides a document-level way to turn breaking at -
-% and _ on and off.
-%
-\newif\ifallowcodebreaks  \allowcodebreakstrue
-
-\def\keywordtrue{true}
-\def\keywordfalse{false}
-
-\parseargdef\allowcodebreaks{%
-  \def\txiarg{#1}%
-  \ifx\txiarg\keywordtrue
-    \allowcodebreakstrue
-  \else\ifx\txiarg\keywordfalse
-    \allowcodebreaksfalse
-  \else
-    \errhelp = \EMsimple
-    \errmessage{Unknown @allowcodebreaks option `\txiarg', must be true|false}%
-  \fi\fi
-}
-
-% For @command, @env, @file, @option quotes seem unnecessary,
-% so use \code rather than \samp.
-\let\command=\code
-\let\env=\code
-\let\file=\code
-\let\option=\code
-
-% @uref (abbreviation for `urlref') aka @url takes an optional
-% (comma-separated) second argument specifying the text to display and
-% an optional third arg as text to display instead of (rather than in
-% addition to) the url itself.  First (mandatory) arg is the url.
-
-% TeX-only option to allow changing PDF output to show only the second
-% arg (if given), and not the url (which is then just the link target).
-\newif\ifurefurlonlylink
-
-% The main macro is \urefbreak, which allows breaking at expected
-% places within the url.  (There used to be another version, which
-% didn't support automatic breaking.)
-\def\urefbreak{\begingroup \urefcatcodes \dourefbreak}
-\let\uref=\urefbreak
-%
-\def\dourefbreak#1{\urefbreakfinish #1,,,\finish}
-\def\urefbreakfinish#1,#2,#3,#4\finish{% doesn't work in @example
-  \unsepspaces
-  \pdfurl{#1}%
-  \setbox0 = \hbox{\ignorespaces #3}%
-  \ifdim\wd0 > 0pt
-    \unhbox0 % third arg given, show only that
-  \else
-    \setbox0 = \hbox{\ignorespaces #2}% look for second arg
-    \ifdim\wd0 > 0pt
-      \ifpdf
-        \ifurefurlonlylink
-          % PDF plus option to not display url, show just arg
-          \unhbox0             
-        \else
-          % PDF, normally display both arg and url for consistency,
-          % visibility, if the pdf is eventually used to print, etc.
-          \unhbox0\ (\urefcode{#1})%
-        \fi
-      \else
-        \unhbox0\ (\urefcode{#1})% DVI, always show arg and url
-      \fi
-    \else
-      \urefcode{#1}% only url given, so show it
-    \fi
-  \fi
-  \endlink
-\endgroup}
-
-% Allow line breaks around only a few characters (only).
-\def\urefcatcodes{%
-  \catcode\ampChar=\active   \catcode\dotChar=\active
-  \catcode\hashChar=\active  \catcode\questChar=\active
-  \catcode\slashChar=\active
-}
-{
-  \urefcatcodes
-  %
-  \global\def\urefcode{\begingroup
-    \setupmarkupstyle{code}%
-    \urefcatcodes
-    \let&\urefcodeamp
-    \let.\urefcodedot
-    \let#\urefcodehash
-    \let?\urefcodequest
-    \let/\urefcodeslash
-    \codex
-  }
-  %
-  % By default, they are just regular characters.
-  \global\def&{\normalamp}
-  \global\def.{\normaldot}
-  \global\def#{\normalhash}
-  \global\def?{\normalquest}
-  \global\def/{\normalslash}
-}
-
-% we put a little stretch before and after the breakable chars, to help
-% line breaking of long url's.  The unequal skips make look better in
-% cmtt at least, especially for dots.
-\def\urefprestretchamount{.13em}
-\def\urefpoststretchamount{.1em}
-\def\urefprestretch{\urefprebreak \hskip0pt plus\urefprestretchamount\relax}
-\def\urefpoststretch{\urefpostbreak \hskip0pt plus\urefprestretchamount\relax}
-%
-\def\urefcodeamp{\urefprestretch \&\urefpoststretch}
-\def\urefcodedot{\urefprestretch .\urefpoststretch}
-\def\urefcodehash{\urefprestretch \#\urefpoststretch}
-\def\urefcodequest{\urefprestretch ?\urefpoststretch}
-\def\urefcodeslash{\futurelet\next\urefcodeslashfinish}
-{
-  \catcode`\/=\active
-  \global\def\urefcodeslashfinish{%
-    \urefprestretch \slashChar
-    % Allow line break only after the final / in a sequence of
-    % slashes, to avoid line break between the slashes in http://.
-    \ifx\next/\else \urefpoststretch \fi
-  }
-}
-
-% One more complication: by default we'll break after the special
-% characters, but some people like to break before the special chars, so
-% allow that.  Also allow no breaking at all, for manual control.
-% 
-\parseargdef\urefbreakstyle{%
-  \def\txiarg{#1}%
-  \ifx\txiarg\wordnone
-    \def\urefprebreak{\nobreak}\def\urefpostbreak{\nobreak}
-  \else\ifx\txiarg\wordbefore
-    \def\urefprebreak{\allowbreak}\def\urefpostbreak{\nobreak}
-  \else\ifx\txiarg\wordafter
-    \def\urefprebreak{\nobreak}\def\urefpostbreak{\allowbreak}
-  \else
-    \errhelp = \EMsimple
-    \errmessage{Unknown @urefbreakstyle setting `\txiarg'}%
-  \fi\fi\fi
-}
-\def\wordafter{after}
-\def\wordbefore{before}
-\def\wordnone{none}
-
-\urefbreakstyle after
-
-% @url synonym for @uref, since that's how everyone uses it.
-%
-\let\url=\uref
-
-% rms does not like angle brackets --karl, 17may97.
-% So now @email is just like @uref, unless we are pdf.
-%
-%\def\email#1{\angleleft{\tt #1}\angleright}
-\ifpdf
-  \def\email#1{\doemail#1,,\finish}
-  \def\doemail#1,#2,#3\finish{\begingroup
-    \unsepspaces
-    \pdfurl{mailto:#1}%
-    \setbox0 = \hbox{\ignorespaces #2}%
-    \ifdim\wd0>0pt\unhbox0\else\code{#1}\fi
-    \endlink
-  \endgroup}
-\else
-  \let\email=\uref
-\fi
-
-% @kbdinputstyle -- arg is `distinct' (@kbd uses slanted tty font always),
-%   `example' (@kbd uses ttsl only inside of @example and friends),
-%   or `code' (@kbd uses normal tty font always).
-\parseargdef\kbdinputstyle{%
-  \def\txiarg{#1}%
-  \ifx\txiarg\worddistinct
-    \gdef\kbdexamplefont{\ttsl}\gdef\kbdfont{\ttsl}%
-  \else\ifx\txiarg\wordexample
-    \gdef\kbdexamplefont{\ttsl}\gdef\kbdfont{\tt}%
-  \else\ifx\txiarg\wordcode
-    \gdef\kbdexamplefont{\tt}\gdef\kbdfont{\tt}%
-  \else
-    \errhelp = \EMsimple
-    \errmessage{Unknown @kbdinputstyle setting `\txiarg'}%
-  \fi\fi\fi
-}
-\def\worddistinct{distinct}
-\def\wordexample{example}
-\def\wordcode{code}
-
-% Default is `distinct'.
-\kbdinputstyle distinct
-
-% @kbd is like @code, except that if the argument is just one @key command,
-% then @kbd has no effect.
-\def\kbd#1{{\def\look{#1}\expandafter\kbdsub\look??\par}}
-
-\def\xkey{\key}
-\def\kbdsub#1#2#3\par{%
-  \def\one{#1}\def\three{#3}\def\threex{??}%
-  \ifx\one\xkey\ifx\threex\three \key{#2}%
-  \else{\tclose{\kbdfont\setupmarkupstyle{kbd}\look}}\fi
-  \else{\tclose{\kbdfont\setupmarkupstyle{kbd}\look}}\fi
-}
-
-% definition of @key that produces a lozenge.  Doesn't adjust to text size.
-%\setfont\keyrm\rmshape{8}{1000}{OT1}
-%\font\keysy=cmsy9
-%\def\key#1{{\keyrm\textfont2=\keysy \leavevmode\hbox{%
-%  \raise0.4pt\hbox{\angleleft}\kern-.08em\vtop{%
-%    \vbox{\hrule\kern-0.4pt
-%     \hbox{\raise0.4pt\hbox{\vphantom{\angleleft}}#1}}%
-%    \kern-0.4pt\hrule}%
-%  \kern-.06em\raise0.4pt\hbox{\angleright}}}}
-
-% definition of @key with no lozenge.  If the current font is already
-% monospace, don't change it; that way, we respect @kbdinputstyle.  But
-% if it isn't monospace, then use \tt.
-%
-\def\key#1{{\setupmarkupstyle{key}%
-  \nohyphenation
-  \ifmonospace\else\tt\fi
-  #1}\null}
-
-% @clicksequence{File @click{} Open ...}
-\def\clicksequence#1{\begingroup #1\endgroup}
-
-% @clickstyle @arrow   (by default)
-\parseargdef\clickstyle{\def\click{#1}}
-\def\click{\arrow}
-
-% Typeset a dimension, e.g., `in' or `pt'.  The only reason for the
-% argument is to make the input look right: @dmn{pt} instead of @dmn{}pt.
-%
-\def\dmn#1{\thinspace #1}
-
-% @l was never documented to mean ``switch to the Lisp font'',
-% and it is not used as such in any manual I can find.  We need it for
-% Polish suppressed-l.  --karl, 22sep96.
-%\def\l#1{{\li #1}\null}
-
-% @acronym for "FBI", "NATO", and the like.
-% We print this one point size smaller, since it's intended for
-% all-uppercase.
-%
-\def\acronym#1{\doacronym #1,,\finish}
-\def\doacronym#1,#2,#3\finish{%
-  {\selectfonts\lsize #1}%
-  \def\temp{#2}%
-  \ifx\temp\empty \else
-    \space ({\unsepspaces \ignorespaces \temp \unskip})%
-  \fi
-  \null % reset \spacefactor=1000
-}
-
-% @abbr for "Comput. J." and the like.
-% No font change, but don't do end-of-sentence spacing.
-%
-\def\abbr#1{\doabbr #1,,\finish}
-\def\doabbr#1,#2,#3\finish{%
-  {\plainfrenchspacing #1}%
-  \def\temp{#2}%
-  \ifx\temp\empty \else
-    \space ({\unsepspaces \ignorespaces \temp \unskip})%
-  \fi
-  \null % reset \spacefactor=1000
-}
-
-% @asis just yields its argument.  Used with @table, for example.
-%
-\def\asis#1{#1}
-
-% @math outputs its argument in math mode.
-%
-% One complication: _ usually means subscripts, but it could also mean
-% an actual _ character, as in @math{@var{some_variable} + 1}.  So make
-% _ active, and distinguish by seeing if the current family is \slfam,
-% which is what @var uses.
-{
-  \catcode`\_ = \active
-  \gdef\mathunderscore{%
-    \catcode`\_=\active
-    \def_{\ifnum\fam=\slfam \_\else\sb\fi}%
-  }
-}
-% Another complication: we want \\ (and @\) to output a math (or tt) \.
-% FYI, plain.tex uses \\ as a temporary control sequence (for no
-% particular reason), but this is not advertised and we don't care.
-%
-% The \mathchar is class=0=ordinary, family=7=ttfam, position=5C=\.
-\def\mathbackslash{\ifnum\fam=\ttfam \mathchar"075C \else\backslash \fi}
-%
-\def\math{%
-  \tex
-  \mathunderscore
-  \let\\ = \mathbackslash
-  \mathactive
-  % make the texinfo accent commands work in math mode
-  \let\"=\ddot
-  \let\'=\acute
-  \let\==\bar
-  \let\^=\hat
-  \let\`=\grave
-  \let\u=\breve
-  \let\v=\check
-  \let\~=\tilde
-  \let\dotaccent=\dot
-  $\finishmath
-}
-\def\finishmath#1{#1$\endgroup}  % Close the group opened by \tex.
-
-% Some active characters (such as <) are spaced differently in math.
-% We have to reset their definitions in case the @math was an argument
-% to a command which sets the catcodes (such as @item or @section).
-%
-{
-  \catcode`^ = \active
-  \catcode`< = \active
-  \catcode`> = \active
-  \catcode`+ = \active
-  \catcode`' = \active
-  \gdef\mathactive{%
-    \let^ = \ptexhat
-    \let< = \ptexless
-    \let> = \ptexgtr
-    \let+ = \ptexplus
-    \let' = \ptexquoteright
-  }
-}
-
-% ctrl is no longer a Texinfo command, but leave this definition for fun.
-\def\ctrl #1{{\tt \rawbackslash \hat}#1}
-
-% @inlinefmt{FMTNAME,PROCESSED-TEXT} and @inlineraw{FMTNAME,RAW-TEXT}.
-% Ignore unless FMTNAME == tex; then it is like @iftex and @tex,
-% except specified as a normal braced arg, so no newlines to worry about.
-% 
-\def\outfmtnametex{tex}
-%
-\long\def\inlinefmt#1{\doinlinefmt #1,\finish}
-\long\def\doinlinefmt#1,#2,\finish{%
-  \def\inlinefmtname{#1}%
-  \ifx\inlinefmtname\outfmtnametex \ignorespaces #2\fi
-}
-% 
-% @inlinefmtifelse{FMTNAME,THEN-TEXT,ELSE-TEXT} expands THEN-TEXT if
-% FMTNAME is tex, else ELSE-TEXT.
-\long\def\inlinefmtifelse#1{\doinlinefmtifelse #1,,,\finish}
-\long\def\doinlinefmtifelse#1,#2,#3,#4,\finish{%
-  \def\inlinefmtname{#1}%
-  \ifx\inlinefmtname\outfmtnametex \ignorespaces #2\else \ignorespaces #3\fi
-}
-%
-% For raw, must switch into @tex before parsing the argument, to avoid
-% setting catcodes prematurely.  Doing it this way means that, for
-% example, @inlineraw{html, foo{bar} gets a parse error instead of being
-% ignored.  But this isn't important because if people want a literal
-% *right* brace they would have to use a command anyway, so they may as
-% well use a command to get a left brace too.  We could re-use the
-% delimiter character idea from \verb, but it seems like overkill.
-% 
-\long\def\inlineraw{\tex \doinlineraw}
-\long\def\doinlineraw#1{\doinlinerawtwo #1,\finish}
-\def\doinlinerawtwo#1,#2,\finish{%
-  \def\inlinerawname{#1}%
-  \ifx\inlinerawname\outfmtnametex \ignorespaces #2\fi
-  \endgroup % close group opened by \tex.
-}
-
-% @inlineifset{VAR, TEXT} expands TEXT if VAR is @set.
-%
-\long\def\inlineifset#1{\doinlineifset #1,\finish}
-\long\def\doinlineifset#1,#2,\finish{%
-  \def\inlinevarname{#1}%
-  \expandafter\ifx\csname SET\inlinevarname\endcsname\relax
-  \else\ignorespaces#2\fi
-}
-
-% @inlineifclear{VAR, TEXT} expands TEXT if VAR is not @set.
-%
-\long\def\inlineifclear#1{\doinlineifclear #1,\finish}
-\long\def\doinlineifclear#1,#2,\finish{%
-  \def\inlinevarname{#1}%
-  \expandafter\ifx\csname SET\inlinevarname\endcsname\relax \ignorespaces#2\fi
-}
-
-
-\message{glyphs,}
-% and logos.
-
-% @@ prints an @, as does @atchar{}.
-\def\@{\char64 }
-\let\atchar=\@
-
-% @{ @} @lbracechar{} @rbracechar{} all generate brace characters.
-% Unless we're in typewriter, use \ecfont because the CM text fonts do
-% not have braces, and we don't want to switch into math.
-\def\mylbrace{{\ifmonospace\else\ecfont\fi \char123}}
-\def\myrbrace{{\ifmonospace\else\ecfont\fi \char125}}
-\let\{=\mylbrace \let\lbracechar=\{
-\let\}=\myrbrace \let\rbracechar=\}
-\begingroup
-  % Definitions to produce \{ and \} commands for indices,
-  % and @{ and @} for the aux/toc files.
-  \catcode`\{ = \other \catcode`\} = \other
-  \catcode`\[ = 1 \catcode`\] = 2
-  \catcode`\! = 0 \catcode`\\ = \other
-  !gdef!lbracecmd[\{]%
-  !gdef!rbracecmd[\}]%
-  !gdef!lbraceatcmd[@{]%
-  !gdef!rbraceatcmd[@}]%
-!endgroup
-
-% @comma{} to avoid , parsing problems.
-\let\comma = ,
-
-% Accents: @, @dotaccent @ringaccent @ubaraccent @udotaccent
-% Others are defined by plain TeX: @` @' @" @^ @~ @= @u @v @H.
-\let\, = \ptexc
-\let\dotaccent = \ptexdot
-\def\ringaccent#1{{\accent23 #1}}
-\let\tieaccent = \ptext
-\let\ubaraccent = \ptexb
-\let\udotaccent = \d
-
-% Other special characters: @questiondown @exclamdown @ordf @ordm
-% Plain TeX defines: @AA @AE @O @OE @L (plus lowercase versions) @ss.
-\def\questiondown{?`}
-\def\exclamdown{!`}
-\def\ordf{\leavevmode\raise1ex\hbox{\selectfonts\lllsize \underbar{a}}}
-\def\ordm{\leavevmode\raise1ex\hbox{\selectfonts\lllsize \underbar{o}}}
-
-% Dotless i and dotless j, used for accents.
-\def\imacro{i}
-\def\jmacro{j}
-\def\dotless#1{%
-  \def\temp{#1}%
-  \ifx\temp\imacro \ifmmode\imath \else\ptexi \fi
-  \else\ifx\temp\jmacro \ifmmode\jmath \else\j \fi
-  \else \errmessage{@dotless can be used only with i or j}%
-  \fi\fi
-}
-
-% The \TeX{} logo, as in plain, but resetting the spacing so that a
-% period following counts as ending a sentence.  (Idea found in latex.)
-%
-\edef\TeX{\TeX \spacefactor=1000 }
-
-% @LaTeX{} logo.  Not quite the same results as the definition in
-% latex.ltx, since we use a different font for the raised A; it's most
-% convenient for us to use an explicitly smaller font, rather than using
-% the \scriptstyle font (since we don't reset \scriptstyle and
-% \scriptscriptstyle).
-%
-\def\LaTeX{%
-  L\kern-.36em
-  {\setbox0=\hbox{T}%
-   \vbox to \ht0{\hbox{%
-     \ifx\textnominalsize\xwordpt
-       % for 10pt running text, \lllsize (8pt) is too small for the A in LaTeX.
-       % Revert to plain's \scriptsize, which is 7pt.
-       \count255=\the\fam $\fam\count255 \scriptstyle A$%
-     \else
-       % For 11pt, we can use our lllsize.
-       \selectfonts\lllsize A%
-     \fi
-     }%
-     \vss
-  }}%
-  \kern-.15em
-  \TeX
-}
-
-% Some math mode symbols.
-\def\bullet{$\ptexbullet$}
-\def\geq{\ifmmode \ge\else $\ge$\fi}
-\def\leq{\ifmmode \le\else $\le$\fi}
-\def\minus{\ifmmode -\else $-$\fi}
-
-% @dots{} outputs an ellipsis using the current font.
-% We do .5em per period so that it has the same spacing in the cm
-% typewriter fonts as three actual period characters; on the other hand,
-% in other typewriter fonts three periods are wider than 1.5em.  So do
-% whichever is larger.
-%
-\def\dots{%
-  \leavevmode
-  \setbox0=\hbox{...}% get width of three periods
-  \ifdim\wd0 > 1.5em
-    \dimen0 = \wd0
-  \else
-    \dimen0 = 1.5em
-  \fi
-  \hbox to \dimen0{%
-    \hskip 0pt plus.25fil
-    .\hskip 0pt plus1fil
-    .\hskip 0pt plus1fil
-    .\hskip 0pt plus.5fil
-  }%
-}
-
-% @enddots{} is an end-of-sentence ellipsis.
-%
-\def\enddots{%
-  \dots
-  \spacefactor=\endofsentencespacefactor
-}
-
-% @point{}, @result{}, @expansion{}, @print{}, @equiv{}.
-%
-% Since these characters are used in examples, they should be an even number of
-% \tt widths. Each \tt character is 1en, so two makes it 1em.
-%
-\def\point{$\star$}
-\def\arrow{\leavevmode\raise.05ex\hbox to 1em{\hfil$\rightarrow$\hfil}}
-\def\result{\leavevmode\raise.05ex\hbox to 1em{\hfil$\Rightarrow$\hfil}}
-\def\expansion{\leavevmode\hbox to 1em{\hfil$\mapsto$\hfil}}
-\def\print{\leavevmode\lower.1ex\hbox to 1em{\hfil$\dashv$\hfil}}
-\def\equiv{\leavevmode\hbox to 1em{\hfil$\ptexequiv$\hfil}}
-
-% The @error{} command.
-% Adapted from the TeXbook's \boxit.
-%
-\newbox\errorbox
-%
-{\tentt \global\dimen0 = 3em}% Width of the box.
-\dimen2 = .55pt % Thickness of rules
-% The text. (`r' is open on the right, `e' somewhat less so on the left.)
-\setbox0 = \hbox{\kern-.75pt \reducedsf \putworderror\kern-1.5pt}
-%
-\setbox\errorbox=\hbox to \dimen0{\hfil
-   \hsize = \dimen0 \advance\hsize by -5.8pt % Space to left+right.
-   \advance\hsize by -2\dimen2 % Rules.
-   \vbox{%
-      \hrule height\dimen2
-      \hbox{\vrule width\dimen2 \kern3pt          % Space to left of text.
-         \vtop{\kern2.4pt \box0 \kern2.4pt}% Space above/below.
-         \kern3pt\vrule width\dimen2}% Space to right.
-      \hrule height\dimen2}
-    \hfil}
-%
-\def\error{\leavevmode\lower.7ex\copy\errorbox}
-
-% @pounds{} is a sterling sign, which Knuth put in the CM italic font.
-%
-\def\pounds{{\it\$}}
-
-% @euro{} comes from a separate font, depending on the current style.
-% We use the free feym* fonts from the eurosym package by Henrik
-% Theiling, which support regular, slanted, bold and bold slanted (and
-% "outlined" (blackboard board, sort of) versions, which we don't need).
-% It is available from http://www.ctan.org/tex-archive/fonts/eurosym.
-%
-% Although only regular is the truly official Euro symbol, we ignore
-% that.  The Euro is designed to be slightly taller than the regular
-% font height.
-%
-% feymr - regular
-% feymo - slanted
-% feybr - bold
-% feybo - bold slanted
-%
-% There is no good (free) typewriter version, to my knowledge.
-% A feymr10 euro is ~7.3pt wide, while a normal cmtt10 char is ~5.25pt wide.
-% Hmm.
-%
-% Also doesn't work in math.  Do we need to do math with euro symbols?
-% Hope not.
-%
-%
-\def\euro{{\eurofont e}}
-\def\eurofont{%
-  % We set the font at each command, rather than predefining it in
-  % \textfonts and the other font-switching commands, so that
-  % installations which never need the symbol don't have to have the
-  % font installed.
-  %
-  % There is only one designed size (nominal 10pt), so we always scale
-  % that to the current nominal size.
-  %
-  % By the way, simply using "at 1em" works for cmr10 and the like, but
-  % does not work for cmbx10 and other extended/shrunken fonts.
-  %
-  \def\eurosize{\csname\curfontsize nominalsize\endcsname}%
-  %
-  \ifx\curfontstyle\bfstylename
-    % bold:
-    \font\thiseurofont = \ifusingit{feybo10}{feybr10} at \eurosize
-  \else
-    % regular:
-    \font\thiseurofont = \ifusingit{feymo10}{feymr10} at \eurosize
-  \fi
-  \thiseurofont
-}
-
-% Glyphs from the EC fonts.  We don't use \let for the aliases, because
-% sometimes we redefine the original macro, and the alias should reflect
-% the redefinition.
-%
-% Use LaTeX names for the Icelandic letters.
-\def\DH{{\ecfont \char"D0}} % Eth
-\def\dh{{\ecfont \char"F0}} % eth
-\def\TH{{\ecfont \char"DE}} % Thorn
-\def\th{{\ecfont \char"FE}} % thorn
-%
-\def\guillemetleft{{\ecfont \char"13}}
-\def\guillemotleft{\guillemetleft}
-\def\guillemetright{{\ecfont \char"14}}
-\def\guillemotright{\guillemetright}
-\def\guilsinglleft{{\ecfont \char"0E}}
-\def\guilsinglright{{\ecfont \char"0F}}
-\def\quotedblbase{{\ecfont \char"12}}
-\def\quotesinglbase{{\ecfont \char"0D}}
-%
-% This positioning is not perfect (see the ogonek LaTeX package), but
-% we have the precomposed glyphs for the most common cases.  We put the
-% tests to use those glyphs in the single \ogonek macro so we have fewer
-% dummy definitions to worry about for index entries, etc.
-%
-% ogonek is also used with other letters in Lithuanian (IOU), but using
-% the precomposed glyphs for those is not so easy since they aren't in
-% the same EC font.
-\def\ogonek#1{{%
-  \def\temp{#1}%
-  \ifx\temp\macrocharA\Aogonek
-  \else\ifx\temp\macrochara\aogonek
-  \else\ifx\temp\macrocharE\Eogonek
-  \else\ifx\temp\macrochare\eogonek
-  \else
-    \ecfont \setbox0=\hbox{#1}%
-    \ifdim\ht0=1ex\accent"0C #1%
-    \else\ooalign{\unhbox0\crcr\hidewidth\char"0C \hidewidth}%
-    \fi
-  \fi\fi\fi\fi
-  }%
-}
-\def\Aogonek{{\ecfont \char"81}}\def\macrocharA{A}
-\def\aogonek{{\ecfont \char"A1}}\def\macrochara{a}
-\def\Eogonek{{\ecfont \char"86}}\def\macrocharE{E}
-\def\eogonek{{\ecfont \char"A6}}\def\macrochare{e}
-%
-% Use the ec* fonts (cm-super in outline format) for non-CM glyphs.
-\def\ecfont{%
-  % We can't distinguish serif/sans and italic/slanted, but this
-  % is used for crude hacks anyway (like adding French and German
-  % quotes to documents typeset with CM, where we lose kerning), so
-  % hopefully nobody will notice/care.
-  \edef\ecsize{\csname\curfontsize ecsize\endcsname}%
-  \edef\nominalsize{\csname\curfontsize nominalsize\endcsname}%
-  \ifmonospace
-    % typewriter:
-    \font\thisecfont = ectt\ecsize \space at \nominalsize
-  \else
-    \ifx\curfontstyle\bfstylename
-      % bold:
-      \font\thisecfont = ecb\ifusingit{i}{x}\ecsize \space at \nominalsize
-    \else
-      % regular:
-      \font\thisecfont = ec\ifusingit{ti}{rm}\ecsize \space at \nominalsize
-    \fi
-  \fi
-  \thisecfont
-}
-
-% @registeredsymbol - R in a circle.  The font for the R should really
-% be smaller yet, but lllsize is the best we can do for now.
-% Adapted from the plain.tex definition of \copyright.
-%
-\def\registeredsymbol{%
-  $^{{\ooalign{\hfil\raise.07ex\hbox{\selectfonts\lllsize R}%
-               \hfil\crcr\Orb}}%
-    }$%
-}
-
-% @textdegree - the normal degrees sign.
-%
-\def\textdegree{$^\circ$}
-
-% Laurent Siebenmann reports \Orb undefined with:
-%  Textures 1.7.7 (preloaded format=plain 93.10.14)  (68K)  16 APR 2004 02:38
-% so we'll define it if necessary.
-%
-\ifx\Orb\thisisundefined
-\def\Orb{\mathhexbox20D}
-\fi
-
-% Quotes.
-\chardef\quotedblleft="5C
-\chardef\quotedblright=`\"
-\chardef\quoteleft=`\`
-\chardef\quoteright=`\'
-
-
-\message{page headings,}
-
-\newskip\titlepagetopglue \titlepagetopglue = 1.5in
-\newskip\titlepagebottomglue \titlepagebottomglue = 2pc
-
-% First the title page.  Must do @settitle before @titlepage.
-\newif\ifseenauthor
-\newif\iffinishedtitlepage
-
-% Do an implicit @contents or @shortcontents after @end titlepage if the
-% user says @setcontentsaftertitlepage or @setshortcontentsaftertitlepage.
-%
-\newif\ifsetcontentsaftertitlepage
- \let\setcontentsaftertitlepage = \setcontentsaftertitlepagetrue
-\newif\ifsetshortcontentsaftertitlepage
- \let\setshortcontentsaftertitlepage = \setshortcontentsaftertitlepagetrue
-
-\parseargdef\shorttitlepage{%
-  \begingroup \hbox{}\vskip 1.5in \chaprm \centerline{#1}%
-  \endgroup\page\hbox{}\page}
-
-\envdef\titlepage{%
-  % Open one extra group, as we want to close it in the middle of \Etitlepage.
-  \begingroup
-    \parindent=0pt \textfonts
-    % Leave some space at the very top of the page.
-    \vglue\titlepagetopglue
-    % No rule at page bottom unless we print one at the top with @title.
-    \finishedtitlepagetrue
-    %
-    % Most title ``pages'' are actually two pages long, with space
-    % at the top of the second.  We don't want the ragged left on the second.
-    \let\oldpage = \page
-    \def\page{%
-      \iffinishedtitlepage\else
-	 \finishtitlepage
-      \fi
-      \let\page = \oldpage
-      \page
-      \null
-    }%
-}
-
-\def\Etitlepage{%
-    \iffinishedtitlepage\else
-	\finishtitlepage
-    \fi
-    % It is important to do the page break before ending the group,
-    % because the headline and footline are only empty inside the group.
-    % If we use the new definition of \page, we always get a blank page
-    % after the title page, which we certainly don't want.
-    \oldpage
-  \endgroup
-  %
-  % Need this before the \...aftertitlepage checks so that if they are
-  % in effect the toc pages will come out with page numbers.
-  \HEADINGSon
-  %
-  % If they want short, they certainly want long too.
-  \ifsetshortcontentsaftertitlepage
-    \shortcontents
-    \contents
-    \global\let\shortcontents = \relax
-    \global\let\contents = \relax
-  \fi
-  %
-  \ifsetcontentsaftertitlepage
-    \contents
-    \global\let\contents = \relax
-    \global\let\shortcontents = \relax
-  \fi
-}
-
-\def\finishtitlepage{%
-  \vskip4pt \hrule height 2pt width \hsize
-  \vskip\titlepagebottomglue
-  \finishedtitlepagetrue
-}
-
-% Settings used for typesetting titles: no hyphenation, no indentation,
-% don't worry much about spacing, ragged right.  This should be used
-% inside a \vbox, and fonts need to be set appropriately first.  Because
-% it is always used for titles, nothing else, we call \rmisbold.  \par
-% should be specified before the end of the \vbox, since a vbox is a group.
-% 
-\def\raggedtitlesettings{%
-  \rmisbold
-  \hyphenpenalty=10000
-  \parindent=0pt
-  \tolerance=5000
-  \ptexraggedright
-}
-
-% Macros to be used within @titlepage:
-
-\let\subtitlerm=\tenrm
-\def\subtitlefont{\subtitlerm \normalbaselineskip = 13pt \normalbaselines}
-
-\parseargdef\title{%
-  \checkenv\titlepage
-  \vbox{\titlefonts \raggedtitlesettings #1\par}%
-  % print a rule at the page bottom also.
-  \finishedtitlepagefalse
-  \vskip4pt \hrule height 4pt width \hsize \vskip4pt
-}
-
-\parseargdef\subtitle{%
-  \checkenv\titlepage
-  {\subtitlefont \rightline{#1}}%
-}
-
-% @author should come last, but may come many times.
-% It can also be used inside @quotation.
-%
-\parseargdef\author{%
-  \def\temp{\quotation}%
-  \ifx\thisenv\temp
-    \def\quotationauthor{#1}% printed in \Equotation.
-  \else
-    \checkenv\titlepage
-    \ifseenauthor\else \vskip 0pt plus 1filll \seenauthortrue \fi
-    {\secfonts\rmisbold \leftline{#1}}%
-  \fi
-}
-
-
-% Set up page headings and footings.
-
-\let\thispage=\folio
-
-\newtoks\evenheadline    % headline on even pages
-\newtoks\oddheadline     % headline on odd pages
-\newtoks\evenfootline    % footline on even pages
-\newtoks\oddfootline     % footline on odd pages
-
-% Now make TeX use those variables
-\headline={{\textfonts\rm \ifodd\pageno \the\oddheadline
-                            \else \the\evenheadline \fi}}
-\footline={{\textfonts\rm \ifodd\pageno \the\oddfootline
-                            \else \the\evenfootline \fi}\HEADINGShook}
-\let\HEADINGShook=\relax
-
-% Commands to set those variables.
-% For example, this is what  @headings on  does
-% @evenheading @thistitle|@thispage|@thischapter
-% @oddheading @thischapter|@thispage|@thistitle
-% @evenfooting @thisfile||
-% @oddfooting ||@thisfile
-
-
-\def\evenheading{\parsearg\evenheadingxxx}
-\def\evenheadingxxx #1{\evenheadingyyy #1\|\|\|\|\finish}
-\def\evenheadingyyy #1\|#2\|#3\|#4\finish{%
-\global\evenheadline={\rlap{\centerline{#2}}\line{#1\hfil#3}}}
-
-\def\oddheading{\parsearg\oddheadingxxx}
-\def\oddheadingxxx #1{\oddheadingyyy #1\|\|\|\|\finish}
-\def\oddheadingyyy #1\|#2\|#3\|#4\finish{%
-\global\oddheadline={\rlap{\centerline{#2}}\line{#1\hfil#3}}}
-
-\parseargdef\everyheading{\oddheadingxxx{#1}\evenheadingxxx{#1}}%
-
-\def\evenfooting{\parsearg\evenfootingxxx}
-\def\evenfootingxxx #1{\evenfootingyyy #1\|\|\|\|\finish}
-\def\evenfootingyyy #1\|#2\|#3\|#4\finish{%
-\global\evenfootline={\rlap{\centerline{#2}}\line{#1\hfil#3}}}
-
-\def\oddfooting{\parsearg\oddfootingxxx}
-\def\oddfootingxxx #1{\oddfootingyyy #1\|\|\|\|\finish}
-\def\oddfootingyyy #1\|#2\|#3\|#4\finish{%
-  \global\oddfootline = {\rlap{\centerline{#2}}\line{#1\hfil#3}}%
-  %
-  % Leave some space for the footline.  Hopefully ok to assume
-  % @evenfooting will not be used by itself.
-  \global\advance\pageheight by -12pt
-  \global\advance\vsize by -12pt
-}
-
-\parseargdef\everyfooting{\oddfootingxxx{#1}\evenfootingxxx{#1}}
-
-% @evenheadingmarks top     \thischapter <- chapter at the top of a page
-% @evenheadingmarks bottom  \thischapter <- chapter at the bottom of a page
-%
-% The same set of arguments for:
-%
-% @oddheadingmarks
-% @evenfootingmarks
-% @oddfootingmarks
-% @everyheadingmarks
-% @everyfootingmarks
-
-\def\evenheadingmarks{\headingmarks{even}{heading}}
-\def\oddheadingmarks{\headingmarks{odd}{heading}}
-\def\evenfootingmarks{\headingmarks{even}{footing}}
-\def\oddfootingmarks{\headingmarks{odd}{footing}}
-\def\everyheadingmarks#1 {\headingmarks{even}{heading}{#1}
-                          \headingmarks{odd}{heading}{#1} }
-\def\everyfootingmarks#1 {\headingmarks{even}{footing}{#1}
-                          \headingmarks{odd}{footing}{#1} }
-% #1 = even/odd, #2 = heading/footing, #3 = top/bottom.
-\def\headingmarks#1#2#3 {%
-  \expandafter\let\expandafter\temp \csname get#3headingmarks\endcsname
-  \global\expandafter\let\csname get#1#2marks\endcsname \temp
-}
-
-\everyheadingmarks bottom
-\everyfootingmarks bottom
-
-% @headings double      turns headings on for double-sided printing.
-% @headings single      turns headings on for single-sided printing.
-% @headings off         turns them off.
-% @headings on          same as @headings double, retained for compatibility.
-% @headings after       turns on double-sided headings after this page.
-% @headings doubleafter turns on double-sided headings after this page.
-% @headings singleafter turns on single-sided headings after this page.
-% By default, they are off at the start of a document,
-% and turned `on' after @end titlepage.
-
-\def\headings #1 {\csname HEADINGS#1\endcsname}
-
-\def\headingsoff{% non-global headings elimination
-  \evenheadline={\hfil}\evenfootline={\hfil}%
-   \oddheadline={\hfil}\oddfootline={\hfil}%
-}
-
-\def\HEADINGSoff{{\globaldefs=1 \headingsoff}} % global setting
-\HEADINGSoff  % it's the default
-
-% When we turn headings on, set the page number to 1.
-% For double-sided printing, put current file name in lower left corner,
-% chapter name on inside top of right hand pages, document
-% title on inside top of left hand pages, and page numbers on outside top
-% edge of all pages.
-\def\HEADINGSdouble{%
-\global\pageno=1
-\global\evenfootline={\hfil}
-\global\oddfootline={\hfil}
-\global\evenheadline={\line{\folio\hfil\thistitle}}
-\global\oddheadline={\line{\thischapter\hfil\folio}}
-\global\let\contentsalignmacro = \chapoddpage
-}
-\let\contentsalignmacro = \chappager
-
-% For single-sided printing, chapter title goes across top left of page,
-% page number on top right.
-\def\HEADINGSsingle{%
-\global\pageno=1
-\global\evenfootline={\hfil}
-\global\oddfootline={\hfil}
-\global\evenheadline={\line{\thischapter\hfil\folio}}
-\global\oddheadline={\line{\thischapter\hfil\folio}}
-\global\let\contentsalignmacro = \chappager
-}
-\def\HEADINGSon{\HEADINGSdouble}
-
-\def\HEADINGSafter{\let\HEADINGShook=\HEADINGSdoublex}
-\let\HEADINGSdoubleafter=\HEADINGSafter
-\def\HEADINGSdoublex{%
-\global\evenfootline={\hfil}
-\global\oddfootline={\hfil}
-\global\evenheadline={\line{\folio\hfil\thistitle}}
-\global\oddheadline={\line{\thischapter\hfil\folio}}
-\global\let\contentsalignmacro = \chapoddpage
-}
-
-\def\HEADINGSsingleafter{\let\HEADINGShook=\HEADINGSsinglex}
-\def\HEADINGSsinglex{%
-\global\evenfootline={\hfil}
-\global\oddfootline={\hfil}
-\global\evenheadline={\line{\thischapter\hfil\folio}}
-\global\oddheadline={\line{\thischapter\hfil\folio}}
-\global\let\contentsalignmacro = \chappager
-}
-
-% Subroutines used in generating headings
-% This produces Day Month Year style of output.
-% Only define if not already defined, in case a txi-??.tex file has set
-% up a different format (e.g., txi-cs.tex does this).
-\ifx\today\thisisundefined
-\def\today{%
-  \number\day\space
-  \ifcase\month
-  \or\putwordMJan\or\putwordMFeb\or\putwordMMar\or\putwordMApr
-  \or\putwordMMay\or\putwordMJun\or\putwordMJul\or\putwordMAug
-  \or\putwordMSep\or\putwordMOct\or\putwordMNov\or\putwordMDec
-  \fi
-  \space\number\year}
-\fi
-
-% @settitle line...  specifies the title of the document, for headings.
-% It generates no output of its own.
-\def\thistitle{\putwordNoTitle}
-\def\settitle{\parsearg{\gdef\thistitle}}
-
-
-\message{tables,}
-% Tables -- @table, @ftable, @vtable, @item(x).
-
-% default indentation of table text
-\newdimen\tableindent \tableindent=.8in
-% default indentation of @itemize and @enumerate text
-\newdimen\itemindent  \itemindent=.3in
-% margin between end of table item and start of table text.
-\newdimen\itemmargin  \itemmargin=.1in
-
-% used internally for \itemindent minus \itemmargin
-\newdimen\itemmax
-
-% Note @table, @ftable, and @vtable define @item, @itemx, etc., with
-% these defs.
-% They also define \itemindex
-% to index the item name in whatever manner is desired (perhaps none).
-
-\newif\ifitemxneedsnegativevskip
-
-\def\itemxpar{\par\ifitemxneedsnegativevskip\nobreak\vskip-\parskip\nobreak\fi}
-
-\def\internalBitem{\smallbreak \parsearg\itemzzz}
-\def\internalBitemx{\itemxpar \parsearg\itemzzz}
-
-\def\itemzzz #1{\begingroup %
-  \advance\hsize by -\rightskip
-  \advance\hsize by -\tableindent
-  \setbox0=\hbox{\itemindicate{#1}}%
-  \itemindex{#1}%
-  \nobreak % This prevents a break before @itemx.
-  %
-  % If the item text does not fit in the space we have, put it on a line
-  % by itself, and do not allow a page break either before or after that
-  % line.  We do not start a paragraph here because then if the next
-  % command is, e.g., @kindex, the whatsit would get put into the
-  % horizontal list on a line by itself, resulting in extra blank space.
-  \ifdim \wd0>\itemmax
-    %
-    % Make this a paragraph so we get the \parskip glue and wrapping,
-    % but leave it ragged-right.
-    \begingroup
-      \advance\leftskip by-\tableindent
-      \advance\hsize by\tableindent
-      \advance\rightskip by0pt plus1fil\relax
-      \leavevmode\unhbox0\par
-    \endgroup
-    %
-    % We're going to be starting a paragraph, but we don't want the
-    % \parskip glue -- logically it's part of the @item we just started.
-    \nobreak \vskip-\parskip
-    %
-    % Stop a page break at the \parskip glue coming up.  However, if
-    % what follows is an environment such as @example, there will be no
-    % \parskip glue; then the negative vskip we just inserted would
-    % cause the example and the item to crash together.  So we use this
-    % bizarre value of 10001 as a signal to \aboveenvbreak to insert
-    % \parskip glue after all.  Section titles are handled this way also.
-    %
-    \penalty 10001
-    \endgroup
-    \itemxneedsnegativevskipfalse
-  \else
-    % The item text fits into the space.  Start a paragraph, so that the
-    % following text (if any) will end up on the same line.
-    \noindent
-    % Do this with kerns and \unhbox so that if there is a footnote in
-    % the item text, it can migrate to the main vertical list and
-    % eventually be printed.
-    \nobreak\kern-\tableindent
-    \dimen0 = \itemmax  \advance\dimen0 by \itemmargin \advance\dimen0 by -\wd0
-    \unhbox0
-    \nobreak\kern\dimen0
-    \endgroup
-    \itemxneedsnegativevskiptrue
-  \fi
-}
-
-\def\item{\errmessage{@item while not in a list environment}}
-\def\itemx{\errmessage{@itemx while not in a list environment}}
-
-% @table, @ftable, @vtable.
-\envdef\table{%
-  \let\itemindex\gobble
-  \tablecheck{table}%
-}
-\envdef\ftable{%
-  \def\itemindex ##1{\doind {fn}{\code{##1}}}%
-  \tablecheck{ftable}%
-}
-\envdef\vtable{%
-  \def\itemindex ##1{\doind {vr}{\code{##1}}}%
-  \tablecheck{vtable}%
-}
-\def\tablecheck#1{%
-  \ifnum \the\catcode`\^^M=\active
-    \endgroup
-    \errmessage{This command won't work in this context; perhaps the problem is
-      that we are \inenvironment\thisenv}%
-    \def\next{\doignore{#1}}%
-  \else
-    \let\next\tablex
-  \fi
-  \next
-}
-\def\tablex#1{%
-  \def\itemindicate{#1}%
-  \parsearg\tabley
-}
-\def\tabley#1{%
-  {%
-    \makevalueexpandable
-    \edef\temp{\noexpand\tablez #1\space\space\space}%
-    \expandafter
-  }\temp \endtablez
-}
-\def\tablez #1 #2 #3 #4\endtablez{%
-  \aboveenvbreak
-  \ifnum 0#1>0 \advance \leftskip by #1\mil \fi
-  \ifnum 0#2>0 \tableindent=#2\mil \fi
-  \ifnum 0#3>0 \advance \rightskip by #3\mil \fi
-  \itemmax=\tableindent
-  \advance \itemmax by -\itemmargin
-  \advance \leftskip by \tableindent
-  \exdentamount=\tableindent
-  \parindent = 0pt
-  \parskip = \smallskipamount
-  \ifdim \parskip=0pt \parskip=2pt \fi
-  \let\item = \internalBitem
-  \let\itemx = \internalBitemx
-}
-\def\Etable{\endgraf\afterenvbreak}
-\let\Eftable\Etable
-\let\Evtable\Etable
-\let\Eitemize\Etable
-\let\Eenumerate\Etable
-
-% This is the counter used by @enumerate, which is really @itemize
-
-\newcount \itemno
-
-\envdef\itemize{\parsearg\doitemize}
-
-\def\doitemize#1{%
-  \aboveenvbreak
-  \itemmax=\itemindent
-  \advance\itemmax by -\itemmargin
-  \advance\leftskip by \itemindent
-  \exdentamount=\itemindent
-  \parindent=0pt
-  \parskip=\smallskipamount
-  \ifdim\parskip=0pt \parskip=2pt \fi
-  %
-  % Try typesetting the item mark so that if the document erroneously says
-  % something like @itemize @samp (intending @table), there's an error
-  % right away at the @itemize.  It's not the best error message in the
-  % world, but it's better than leaving it to the @item.  This means if
-  % the user wants an empty mark, they have to say @w{} not just @w.
-  \def\itemcontents{#1}%
-  \setbox0 = \hbox{\itemcontents}%
-  %
-  % @itemize with no arg is equivalent to @itemize @bullet.
-  \ifx\itemcontents\empty\def\itemcontents{\bullet}\fi
-  %
-  \let\item=\itemizeitem
-}
-
-% Definition of @item while inside @itemize and @enumerate.
-%
-\def\itemizeitem{%
-  \advance\itemno by 1  % for enumerations
-  {\let\par=\endgraf \smallbreak}% reasonable place to break
-  {%
-   % If the document has an @itemize directly after a section title, a
-   % \nobreak will be last on the list, and \sectionheading will have
-   % done a \vskip-\parskip.  In that case, we don't want to zero
-   % parskip, or the item text will crash with the heading.  On the
-   % other hand, when there is normal text preceding the item (as there
-   % usually is), we do want to zero parskip, or there would be too much
-   % space.  In that case, we won't have a \nobreak before.  At least
-   % that's the theory.
-   \ifnum\lastpenalty<10000 \parskip=0in \fi
-   \noindent
-   \hbox to 0pt{\hss \itemcontents \kern\itemmargin}%
-   %
-   \vadjust{\penalty 1200}}% not good to break after first line of item.
-  \flushcr
-}
-
-% \splitoff TOKENS\endmark defines \first to be the first token in
-% TOKENS, and \rest to be the remainder.
-%
-\def\splitoff#1#2\endmark{\def\first{#1}\def\rest{#2}}%
-
-% Allow an optional argument of an uppercase letter, lowercase letter,
-% or number, to specify the first label in the enumerated list.  No
-% argument is the same as `1'.
-%
-\envparseargdef\enumerate{\enumeratey #1  \endenumeratey}
-\def\enumeratey #1 #2\endenumeratey{%
-  % If we were given no argument, pretend we were given `1'.
-  \def\thearg{#1}%
-  \ifx\thearg\empty \def\thearg{1}\fi
-  %
-  % Detect if the argument is a single token.  If so, it might be a
-  % letter.  Otherwise, the only valid thing it can be is a number.
-  % (We will always have one token, because of the test we just made.
-  % This is a good thing, since \splitoff doesn't work given nothing at
-  % all -- the first parameter is undelimited.)
-  \expandafter\splitoff\thearg\endmark
-  \ifx\rest\empty
-    % Only one token in the argument.  It could still be anything.
-    % A ``lowercase letter'' is one whose \lccode is nonzero.
-    % An ``uppercase letter'' is one whose \lccode is both nonzero, and
-    %   not equal to itself.
-    % Otherwise, we assume it's a number.
-    %
-    % We need the \relax at the end of the \ifnum lines to stop TeX from
-    % continuing to look for a <number>.
-    %
-    \ifnum\lccode\expandafter`\thearg=0\relax
-      \numericenumerate % a number (we hope)
-    \else
-      % It's a letter.
-      \ifnum\lccode\expandafter`\thearg=\expandafter`\thearg\relax
-        \lowercaseenumerate % lowercase letter
-      \else
-        \uppercaseenumerate % uppercase letter
-      \fi
-    \fi
-  \else
-    % Multiple tokens in the argument.  We hope it's a number.
-    \numericenumerate
-  \fi
-}
-
-% An @enumerate whose labels are integers.  The starting integer is
-% given in \thearg.
-%
-\def\numericenumerate{%
-  \itemno = \thearg
-  \startenumeration{\the\itemno}%
-}
-
-% The starting (lowercase) letter is in \thearg.
-\def\lowercaseenumerate{%
-  \itemno = \expandafter`\thearg
-  \startenumeration{%
-    % Be sure we're not beyond the end of the alphabet.
-    \ifnum\itemno=0
-      \errmessage{No more lowercase letters in @enumerate; get a bigger
-                  alphabet}%
-    \fi
-    \char\lccode\itemno
-  }%
-}
-
-% The starting (uppercase) letter is in \thearg.
-\def\uppercaseenumerate{%
-  \itemno = \expandafter`\thearg
-  \startenumeration{%
-    % Be sure we're not beyond the end of the alphabet.
-    \ifnum\itemno=0
-      \errmessage{No more uppercase letters in @enumerate; get a bigger
-                  alphabet}
-    \fi
-    \char\uccode\itemno
-  }%
-}
-
-% Call \doitemize, adding a period to the first argument and supplying the
-% common last two arguments.  Also subtract one from the initial value in
-% \itemno, since @item increments \itemno.
-%
-\def\startenumeration#1{%
-  \advance\itemno by -1
-  \doitemize{#1.}\flushcr
-}
-
-% @alphaenumerate and @capsenumerate are abbreviations for giving an arg
-% to @enumerate.
-%
-\def\alphaenumerate{\enumerate{a}}
-\def\capsenumerate{\enumerate{A}}
-\def\Ealphaenumerate{\Eenumerate}
-\def\Ecapsenumerate{\Eenumerate}
-
-
-% @multitable macros
-% Amy Hendrickson, 8/18/94, 3/6/96
-%
-% @multitable ... @end multitable will make as many columns as desired.
-% Contents of each column will wrap at width given in preamble.  Width
-% can be specified either with sample text given in a template line,
-% or in percent of \hsize, the current width of text on page.
-
-% Table can continue over pages but will only break between lines.
-
-% To make preamble:
-%
-% Either define widths of columns in terms of percent of \hsize:
-%   @multitable @columnfractions .25 .3 .45
-%   @item ...
-%
-%   Numbers following @columnfractions are the percent of the total
-%   current hsize to be used for each column. You may use as many
-%   columns as desired.
-
-
-% Or use a template:
-%   @multitable {Column 1 template} {Column 2 template} {Column 3 template}
-%   @item ...
-%   using the widest term desired in each column.
-
-% Each new table line starts with @item, each subsequent new column
-% starts with @tab. Empty columns may be produced by supplying @tab's
-% with nothing between them for as many times as empty columns are needed,
-% ie, @tab@tab@tab will produce two empty columns.
-
-% @item, @tab do not need to be on their own lines, but it will not hurt
-% if they are.
-
-% Sample multitable:
-
-%   @multitable {Column 1 template} {Column 2 template} {Column 3 template}
-%   @item first col stuff @tab second col stuff @tab third col
-%   @item
-%   first col stuff
-%   @tab
-%   second col stuff
-%   @tab
-%   third col
-%   @item first col stuff @tab second col stuff
-%   @tab Many paragraphs of text may be used in any column.
-%
-%         They will wrap at the width determined by the template.
-%   @item@tab@tab This will be in third column.
-%   @end multitable
-
-% Default dimensions may be reset by user.
-% @multitableparskip is vertical space between paragraphs in table.
-% @multitableparindent is paragraph indent in table.
-% @multitablecolmargin is horizontal space to be left between columns.
-% @multitablelinespace is space to leave between table items, baseline
-%                                                            to baseline.
-%   0pt means it depends on current normal line spacing.
-%
-\newskip\multitableparskip
-\newskip\multitableparindent
-\newdimen\multitablecolspace
-\newskip\multitablelinespace
-\multitableparskip=0pt
-\multitableparindent=6pt
-\multitablecolspace=12pt
-\multitablelinespace=0pt
-
-% Macros used to set up halign preamble:
-%
-\let\endsetuptable\relax
-\def\xendsetuptable{\endsetuptable}
-\let\columnfractions\relax
-\def\xcolumnfractions{\columnfractions}
-\newif\ifsetpercent
-
-% #1 is the @columnfraction, usually a decimal number like .5, but might
-% be just 1.  We just use it, whatever it is.
-%
-\def\pickupwholefraction#1 {%
-  \global\advance\colcount by 1
-  \expandafter\xdef\csname col\the\colcount\endcsname{#1\hsize}%
-  \setuptable
-}
-
-\newcount\colcount
-\def\setuptable#1{%
-  \def\firstarg{#1}%
-  \ifx\firstarg\xendsetuptable
-    \let\go = \relax
-  \else
-    \ifx\firstarg\xcolumnfractions
-      \global\setpercenttrue
-    \else
-      \ifsetpercent
-         \let\go\pickupwholefraction
-      \else
-         \global\advance\colcount by 1
-         \setbox0=\hbox{#1\unskip\space}% Add a normal word space as a
-                   % separator; typically that is always in the input, anyway.
-         \expandafter\xdef\csname col\the\colcount\endcsname{\the\wd0}%
-      \fi
-    \fi
-    \ifx\go\pickupwholefraction
-      % Put the argument back for the \pickupwholefraction call, so
-      % we'll always have a period there to be parsed.
-      \def\go{\pickupwholefraction#1}%
-    \else
-      \let\go = \setuptable
-    \fi%
-  \fi
-  \go
-}
-
-% multitable-only commands.
-% 
-% @headitem starts a heading row, which we typeset in bold.  Assignments
-% have to be global since we are inside the implicit group of an
-% alignment entry.  \everycr below resets \everytab so we don't have to
-% undo it ourselves.
-\def\headitemfont{\b}% for people to use in the template row; not changeable
-\def\headitem{%
-  \checkenv\multitable
-  \crcr
-  \gdef\headitemcrhook{\nobreak}% attempt to avoid page break after headings
-  \global\everytab={\bf}% can't use \headitemfont since the parsing differs
-  \the\everytab % for the first item
-}%
-%
-% default for tables with no headings.
-\let\headitemcrhook=\relax
-%
-% A \tab used to include \hskip1sp.  But then the space in a template
-% line is not enough.  That is bad.  So let's go back to just `&' until
-% we again encounter the problem the 1sp was intended to solve.
-%					--karl, nathan@acm.org, 20apr99.
-\def\tab{\checkenv\multitable &\the\everytab}%
-
-% @multitable ... @end multitable definitions:
-%
-\newtoks\everytab  % insert after every tab.
-%
-\envdef\multitable{%
-  \vskip\parskip
-  \startsavinginserts
-  %
-  % @item within a multitable starts a normal row.
-  % We use \def instead of \let so that if one of the multitable entries
-  % contains an @itemize, we don't choke on the \item (seen as \crcr aka
-  % \endtemplate) expanding \doitemize.
-  \def\item{\crcr}%
-  %
-  \tolerance=9500
-  \hbadness=9500
-  \setmultitablespacing
-  \parskip=\multitableparskip
-  \parindent=\multitableparindent
-  \overfullrule=0pt
-  \global\colcount=0
-  %
-  \everycr = {%
-    \noalign{%
-      \global\everytab={}% Reset from possible headitem.
-      \global\colcount=0 % Reset the column counter.
-      %
-      % Check for saved footnotes, etc.:
-      \checkinserts
-      %
-      % Perhaps a \nobreak, then reset:
-      \headitemcrhook
-      \global\let\headitemcrhook=\relax
-    }%
-  }%
-  %
-  \parsearg\domultitable
-}
-\def\domultitable#1{%
-  % To parse everything between @multitable and @item:
-  \setuptable#1 \endsetuptable
-  %
-  % This preamble sets up a generic column definition, which will
-  % be used as many times as user calls for columns.
-  % \vtop will set a single line and will also let text wrap and
-  % continue for many paragraphs if desired.
-  \halign\bgroup &%
-    \global\advance\colcount by 1
-    \multistrut
-    \vtop{%
-      % Use the current \colcount to find the correct column width:
-      \hsize=\expandafter\csname col\the\colcount\endcsname
-      %
-      % In order to keep entries from bumping into each other
-      % we will add a \leftskip of \multitablecolspace to all columns after
-      % the first one.
-      %
-      % If a template has been used, we will add \multitablecolspace
-      % to the width of each template entry.
-      %
-      % If the user has set preamble in terms of percent of \hsize we will
-      % use that dimension as the width of the column, and the \leftskip
-      % will keep entries from bumping into each other.  Table will start at
-      % left margin and final column will justify at right margin.
-      %
-      % Make sure we don't inherit \rightskip from the outer environment.
-      \rightskip=0pt
-      \ifnum\colcount=1
-	% The first column will be indented with the surrounding text.
-	\advance\hsize by\leftskip
-      \else
-	\ifsetpercent \else
-	  % If user has not set preamble in terms of percent of \hsize
-	  % we will advance \hsize by \multitablecolspace.
-	  \advance\hsize by \multitablecolspace
-	\fi
-       % In either case we will make \leftskip=\multitablecolspace:
-      \leftskip=\multitablecolspace
-      \fi
-      % Ignoring space at the beginning and end avoids an occasional spurious
-      % blank line, when TeX decides to break the line at the space before the
-      % box from the multistrut, so the strut ends up on a line by itself.
-      % For example:
-      % @multitable @columnfractions .11 .89
-      % @item @code{#}
-      % @tab Legal holiday which is valid in major parts of the whole country.
-      % Is automatically provided with highlighting sequences respectively
-      % marking characters.
-      \noindent\ignorespaces##\unskip\multistrut
-    }\cr
-}
-\def\Emultitable{%
-  \crcr
-  \egroup % end the \halign
-  \global\setpercentfalse
-}
-
-\def\setmultitablespacing{%
-  \def\multistrut{\strut}% just use the standard line spacing
-  %
-  % Compute \multitablelinespace (if not defined by user) for use in
-  % \multitableparskip calculation.  We used define \multistrut based on
-  % this, but (ironically) that caused the spacing to be off.
-  % See bug-texinfo report from Werner Lemberg, 31 Oct 2004 12:52:20 +0100.
-\ifdim\multitablelinespace=0pt
-\setbox0=\vbox{X}\global\multitablelinespace=\the\baselineskip
-\global\advance\multitablelinespace by-\ht0
-\fi
-% Test to see if parskip is larger than space between lines of
-% table. If not, do nothing.
-%        If so, set to same dimension as multitablelinespace.
-\ifdim\multitableparskip>\multitablelinespace
-\global\multitableparskip=\multitablelinespace
-\global\advance\multitableparskip-7pt % to keep parskip somewhat smaller
-                                      % than skip between lines in the table.
-\fi%
-\ifdim\multitableparskip=0pt
-\global\multitableparskip=\multitablelinespace
-\global\advance\multitableparskip-7pt % to keep parskip somewhat smaller
-                                      % than skip between lines in the table.
-\fi}
-
-
-\message{conditionals,}
-
-% @iftex, @ifnotdocbook, @ifnothtml, @ifnotinfo, @ifnotplaintext,
-% @ifnotxml always succeed.  They currently do nothing; we don't
-% attempt to check whether the conditionals are properly nested.  But we
-% have to remember that they are conditionals, so that @end doesn't
-% attempt to close an environment group.
-%
-\def\makecond#1{%
-  \expandafter\let\csname #1\endcsname = \relax
-  \expandafter\let\csname iscond.#1\endcsname = 1
-}
-\makecond{iftex}
-\makecond{ifnotdocbook}
-\makecond{ifnothtml}
-\makecond{ifnotinfo}
-\makecond{ifnotplaintext}
-\makecond{ifnotxml}
-
-% Ignore @ignore, @ifhtml, @ifinfo, and the like.
-%
-\def\direntry{\doignore{direntry}}
-\def\documentdescription{\doignore{documentdescription}}
-\def\docbook{\doignore{docbook}}
-\def\html{\doignore{html}}
-\def\ifdocbook{\doignore{ifdocbook}}
-\def\ifhtml{\doignore{ifhtml}}
-\def\ifinfo{\doignore{ifinfo}}
-\def\ifnottex{\doignore{ifnottex}}
-\def\ifplaintext{\doignore{ifplaintext}}
-\def\ifxml{\doignore{ifxml}}
-\def\ignore{\doignore{ignore}}
-\def\menu{\doignore{menu}}
-\def\xml{\doignore{xml}}
-
-% Ignore text until a line `@end #1', keeping track of nested conditionals.
-%
-% A count to remember the depth of nesting.
-\newcount\doignorecount
-
-\def\doignore#1{\begingroup
-  % Scan in ``verbatim'' mode:
-  \obeylines
-  \catcode`\@ = \other
-  \catcode`\{ = \other
-  \catcode`\} = \other
-  %
-  % Make sure that spaces turn into tokens that match what \doignoretext wants.
-  \spaceisspace
-  %
-  % Count number of #1's that we've seen.
-  \doignorecount = 0
-  %
-  % Swallow text until we reach the matching `@end #1'.
-  \dodoignore{#1}%
-}
-
-{ \catcode`_=11 % We want to use \_STOP_ which cannot appear in texinfo source.
-  \obeylines %
-  %
-  \gdef\dodoignore#1{%
-    % #1 contains the command name as a string, e.g., `ifinfo'.
-    %
-    % Define a command to find the next `@end #1'.
-    \long\def\doignoretext##1^^M@end #1{%
-      \doignoretextyyy##1^^M@#1\_STOP_}%
-    %
-    % And this command to find another #1 command, at the beginning of a
-    % line.  (Otherwise, we would consider a line `@c @ifset', for
-    % example, to count as an @ifset for nesting.)
-    \long\def\doignoretextyyy##1^^M@#1##2\_STOP_{\doignoreyyy{##2}\_STOP_}%
-    %
-    % And now expand that command.
-    \doignoretext ^^M%
-  }%
-}
-
-\def\doignoreyyy#1{%
-  \def\temp{#1}%
-  \ifx\temp\empty			% Nothing found.
-    \let\next\doignoretextzzz
-  \else					% Found a nested condition, ...
-    \advance\doignorecount by 1
-    \let\next\doignoretextyyy		% ..., look for another.
-    % If we're here, #1 ends with ^^M\ifinfo (for example).
-  \fi
-  \next #1% the token \_STOP_ is present just after this macro.
-}
-
-% We have to swallow the remaining "\_STOP_".
-%
-\def\doignoretextzzz#1{%
-  \ifnum\doignorecount = 0	% We have just found the outermost @end.
-    \let\next\enddoignore
-  \else				% Still inside a nested condition.
-    \advance\doignorecount by -1
-    \let\next\doignoretext      % Look for the next @end.
-  \fi
-  \next
-}
-
-% Finish off ignored text.
-{ \obeylines%
-  % Ignore anything after the last `@end #1'; this matters in verbatim
-  % environments, where otherwise the newline after an ignored conditional
-  % would result in a blank line in the output.
-  \gdef\enddoignore#1^^M{\endgroup\ignorespaces}%
-}
-
-
-% @set VAR sets the variable VAR to an empty value.
-% @set VAR REST-OF-LINE sets VAR to the value REST-OF-LINE.
-%
-% Since we want to separate VAR from REST-OF-LINE (which might be
-% empty), we can't just use \parsearg; we have to insert a space of our
-% own to delimit the rest of the line, and then take it out again if we
-% didn't need it.
-% We rely on the fact that \parsearg sets \catcode`\ =10.
-%
-\parseargdef\set{\setyyy#1 \endsetyyy}
-\def\setyyy#1 #2\endsetyyy{%
-  {%
-    \makevalueexpandable
-    \def\temp{#2}%
-    \edef\next{\gdef\makecsname{SET#1}}%
-    \ifx\temp\empty
-      \next{}%
-    \else
-      \setzzz#2\endsetzzz
-    \fi
-  }%
-}
-% Remove the trailing space \setxxx inserted.
-\def\setzzz#1 \endsetzzz{\next{#1}}
-
-% @clear VAR clears (i.e., unsets) the variable VAR.
-%
-\parseargdef\clear{%
-  {%
-    \makevalueexpandable
-    \global\expandafter\let\csname SET#1\endcsname=\relax
-  }%
-}
-
-% @value{foo} gets the text saved in variable foo.
-\def\value{\begingroup\makevalueexpandable\valuexxx}
-\def\valuexxx#1{\expandablevalue{#1}\endgroup}
-{
-  \catcode`\-=\active \catcode`\_=\active
-  %
-  \gdef\makevalueexpandable{%
-    \let\value = \expandablevalue
-    % We don't want these characters active, ...
-    \catcode`\-=\other \catcode`\_=\other
-    % ..., but we might end up with active ones in the argument if
-    % we're called from @code, as @code{@value{foo-bar_}}, though.
-    % So \let them to their normal equivalents.
-    \let-\normaldash \let_\normalunderscore
-  }
-}
-
-% We have this subroutine so that we can handle at least some @value's
-% properly in indexes (we call \makevalueexpandable in \indexdummies).
-% The command has to be fully expandable (if the variable is set), since
-% the result winds up in the index file.  This means that if the
-% variable's value contains other Texinfo commands, it's almost certain
-% it will fail (although perhaps we could fix that with sufficient work
-% to do a one-level expansion on the result, instead of complete).
-% 
-% Unfortunately, this has the consequence that when _ is in the *value*
-% of an @set, it does not print properly in the roman fonts (get the cmr
-% dot accent at position 126 instead).  No fix comes to mind, and it's
-% been this way since 2003 or earlier, so just ignore it.
-% 
-\def\expandablevalue#1{%
-  \expandafter\ifx\csname SET#1\endcsname\relax
-    {[No value for ``#1'']}%
-    \message{Variable `#1', used in @value, is not set.}%
-  \else
-    \csname SET#1\endcsname
-  \fi
-}
-
-% @ifset VAR ... @end ifset reads the `...' iff VAR has been defined
-% with @set.
-% 
-% To get the special treatment we need for `@end ifset,' we call
-% \makecond and then redefine.
-%
-\makecond{ifset}
-\def\ifset{\parsearg{\doifset{\let\next=\ifsetfail}}}
-\def\doifset#1#2{%
-  {%
-    \makevalueexpandable
-    \let\next=\empty
-    \expandafter\ifx\csname SET#2\endcsname\relax
-      #1% If not set, redefine \next.
-    \fi
-    \expandafter
-  }\next
-}
-\def\ifsetfail{\doignore{ifset}}
-
-% @ifclear VAR ... @end executes the `...' iff VAR has never been
-% defined with @set, or has been undefined with @clear.
-%
-% The `\else' inside the `\doifset' parameter is a trick to reuse the
-% above code: if the variable is not set, do nothing, if it is set,
-% then redefine \next to \ifclearfail.
-%
-\makecond{ifclear}
-\def\ifclear{\parsearg{\doifset{\else \let\next=\ifclearfail}}}
-\def\ifclearfail{\doignore{ifclear}}
-
-% @ifcommandisdefined CMD ... @end executes the `...' if CMD (written
-% without the @) is in fact defined.  We can only feasibly check at the
-% TeX level, so something like `mathcode' is going to considered
-% defined even though it is not a Texinfo command.
-% 
-\makecond{ifcommanddefined}
-\def\ifcommanddefined{\parsearg{\doifcmddefined{\let\next=\ifcmddefinedfail}}}
-%
-\def\doifcmddefined#1#2{{%
-    \makevalueexpandable
-    \let\next=\empty
-    \expandafter\ifx\csname #2\endcsname\relax
-      #1% If not defined, \let\next as above.
-    \fi
-    \expandafter
-  }\next
-}
-\def\ifcmddefinedfail{\doignore{ifcommanddefined}}
-
-% @ifcommandnotdefined CMD ... handled similar to @ifclear above.
-\makecond{ifcommandnotdefined}
-\def\ifcommandnotdefined{%
-  \parsearg{\doifcmddefined{\else \let\next=\ifcmdnotdefinedfail}}}
-\def\ifcmdnotdefinedfail{\doignore{ifcommandnotdefined}}
-
-% Set the `txicommandconditionals' variable, so documents have a way to
-% test if the @ifcommand...defined conditionals are available.
-\set txicommandconditionals
-
-% @dircategory CATEGORY  -- specify a category of the dir file
-% which this file should belong to.  Ignore this in TeX.
-\let\dircategory=\comment
-
-% @defininfoenclose.
-\let\definfoenclose=\comment
-
-
-\message{indexing,}
-% Index generation facilities
-
-% Define \newwrite to be identical to plain tex's \newwrite
-% except not \outer, so it can be used within macros and \if's.
-\edef\newwrite{\makecsname{ptexnewwrite}}
-
-% \newindex {foo} defines an index named foo.
-% It automatically defines \fooindex such that
-% \fooindex ...rest of line... puts an entry in the index foo.
-% It also defines \fooindfile to be the number of the output channel for
-% the file that accumulates this index.  The file's extension is foo.
-% The name of an index should be no more than 2 characters long
-% for the sake of vms.
-%
-\def\newindex#1{%
-  \iflinks
-    \expandafter\newwrite \csname#1indfile\endcsname
-    \openout \csname#1indfile\endcsname \jobname.#1 % Open the file
-  \fi
-  \expandafter\xdef\csname#1index\endcsname{%     % Define @#1index
-    \noexpand\doindex{#1}}
-}
-
-% @defindex foo  ==  \newindex{foo}
-%
-\def\defindex{\parsearg\newindex}
-
-% Define @defcodeindex, like @defindex except put all entries in @code.
-%
-\def\defcodeindex{\parsearg\newcodeindex}
-%
-\def\newcodeindex#1{%
-  \iflinks
-    \expandafter\newwrite \csname#1indfile\endcsname
-    \openout \csname#1indfile\endcsname \jobname.#1
-  \fi
-  \expandafter\xdef\csname#1index\endcsname{%
-    \noexpand\docodeindex{#1}}%
-}
-
-
-% @synindex foo bar    makes index foo feed into index bar.
-% Do this instead of @defindex foo if you don't want it as a separate index.
-%
-% @syncodeindex foo bar   similar, but put all entries made for index foo
-% inside @code.
-%
-\def\synindex#1 #2 {\dosynindex\doindex{#1}{#2}}
-\def\syncodeindex#1 #2 {\dosynindex\docodeindex{#1}{#2}}
-
-% #1 is \doindex or \docodeindex, #2 the index getting redefined (foo),
-% #3 the target index (bar).
-\def\dosynindex#1#2#3{%
-  % Only do \closeout if we haven't already done it, else we'll end up
-  % closing the target index.
-  \expandafter \ifx\csname donesynindex#2\endcsname \relax
-    % The \closeout helps reduce unnecessary open files; the limit on the
-    % Acorn RISC OS is a mere 16 files.
-    \expandafter\closeout\csname#2indfile\endcsname
-    \expandafter\let\csname donesynindex#2\endcsname = 1
-  \fi
-  % redefine \fooindfile:
-  \expandafter\let\expandafter\temp\expandafter=\csname#3indfile\endcsname
-  \expandafter\let\csname#2indfile\endcsname=\temp
-  % redefine \fooindex:
-  \expandafter\xdef\csname#2index\endcsname{\noexpand#1{#3}}%
-}
-
-% Define \doindex, the driver for all \fooindex macros.
-% Argument #1 is generated by the calling \fooindex macro,
-%  and it is "foo", the name of the index.
-
-% \doindex just uses \parsearg; it calls \doind for the actual work.
-% This is because \doind is more useful to call from other macros.
-
-% There is also \dosubind {index}{topic}{subtopic}
-% which makes an entry in a two-level index such as the operation index.
-
-\def\doindex#1{\edef\indexname{#1}\parsearg\singleindexer}
-\def\singleindexer #1{\doind{\indexname}{#1}}
-
-% like the previous two, but they put @code around the argument.
-\def\docodeindex#1{\edef\indexname{#1}\parsearg\singlecodeindexer}
-\def\singlecodeindexer #1{\doind{\indexname}{\code{#1}}}
-
-% Take care of Texinfo commands that can appear in an index entry.
-% Since there are some commands we want to expand, and others we don't,
-% we have to laboriously prevent expansion for those that we don't.
-%
-\def\indexdummies{%
-  \escapechar = `\\     % use backslash in output files.
-  \def\@{@}% change to @@ when we switch to @ as escape char in index files.
-  \def\ {\realbackslash\space }%
-  %
-  % Need these unexpandable (because we define \tt as a dummy)
-  % definitions when @{ or @} appear in index entry text.  Also, more
-  % complicated, when \tex is in effect and \{ is a \delimiter again.
-  % We can't use \lbracecmd and \rbracecmd because texindex assumes
-  % braces and backslashes are used only as delimiters.  Perhaps we
-  % should use @lbracechar and @rbracechar?
-  \def\{{{\tt\char123}}%
-  \def\}{{\tt\char125}}%
-  %
-  % I don't entirely understand this, but when an index entry is
-  % generated from a macro call, the \endinput which \scanmacro inserts
-  % causes processing to be prematurely terminated.  This is,
-  % apparently, because \indexsorttmp is fully expanded, and \endinput
-  % is an expandable command.  The redefinition below makes \endinput
-  % disappear altogether for that purpose -- although logging shows that
-  % processing continues to some further point.  On the other hand, it
-  % seems \endinput does not hurt in the printed index arg, since that
-  % is still getting written without apparent harm.
-  %
-  % Sample source (mac-idx3.tex, reported by Graham Percival to
-  % help-texinfo, 22may06):
-  % @macro funindex {WORD}
-  % @findex xyz
-  % @end macro
-  % ...
-  % @funindex commtest
-  % This is not enough to reproduce the bug, but it gives the flavor.
-  %
-  % Sample whatsit resulting:
-  % .@write3{\entry{xyz}{@folio }{@code {xyz@endinput }}}
-  %
-  % So:
-  \let\endinput = \empty
-  %
-  % Do the redefinitions.
-  \commondummies
-}
-
-% For the aux and toc files, @ is the escape character.  So we want to
-% redefine everything using @ as the escape character (instead of
-% \realbackslash, still used for index files).  When everything uses @,
-% this will be simpler.
-%
-\def\atdummies{%
-  \def\@{@@}%
-  \def\ {@ }%
-  \let\{ = \lbraceatcmd
-  \let\} = \rbraceatcmd
-  %
-  % Do the redefinitions.
-  \commondummies
-  \otherbackslash
-}
-
-% Called from \indexdummies and \atdummies.
-%
-\def\commondummies{%
-  %
-  % \definedummyword defines \#1 as \string\#1\space, thus effectively
-  % preventing its expansion.  This is used only for control words,
-  % not control letters, because the \space would be incorrect for
-  % control characters, but is needed to separate the control word
-  % from whatever follows.
-  %
-  % For control letters, we have \definedummyletter, which omits the
-  % space.
-  %
-  % These can be used both for control words that take an argument and
-  % those that do not.  If it is followed by {arg} in the input, then
-  % that will dutifully get written to the index (or wherever).
-  %
-  \def\definedummyword  ##1{\def##1{\string##1\space}}%
-  \def\definedummyletter##1{\def##1{\string##1}}%
-  \let\definedummyaccent\definedummyletter
-  %
-  \commondummiesnofonts
-  %
-  \definedummyletter\_%
-  \definedummyletter\-%
-  %
-  % Non-English letters.
-  \definedummyword\AA
-  \definedummyword\AE
-  \definedummyword\DH
-  \definedummyword\L
-  \definedummyword\O
-  \definedummyword\OE
-  \definedummyword\TH
-  \definedummyword\aa
-  \definedummyword\ae
-  \definedummyword\dh
-  \definedummyword\exclamdown
-  \definedummyword\l
-  \definedummyword\o
-  \definedummyword\oe
-  \definedummyword\ordf
-  \definedummyword\ordm
-  \definedummyword\questiondown
-  \definedummyword\ss
-  \definedummyword\th
-  %
-  % Although these internal commands shouldn't show up, sometimes they do.
-  \definedummyword\bf
-  \definedummyword\gtr
-  \definedummyword\hat
-  \definedummyword\less
-  \definedummyword\sf
-  \definedummyword\sl
-  \definedummyword\tclose
-  \definedummyword\tt
-  %
-  \definedummyword\LaTeX
-  \definedummyword\TeX
-  %
-  % Assorted special characters.
-  \definedummyword\arrow
-  \definedummyword\bullet
-  \definedummyword\comma
-  \definedummyword\copyright
-  \definedummyword\registeredsymbol
-  \definedummyword\dots
-  \definedummyword\enddots
-  \definedummyword\entrybreak
-  \definedummyword\equiv
-  \definedummyword\error
-  \definedummyword\euro
-  \definedummyword\expansion
-  \definedummyword\geq
-  \definedummyword\guillemetleft
-  \definedummyword\guillemetright
-  \definedummyword\guilsinglleft
-  \definedummyword\guilsinglright
-  \definedummyword\lbracechar
-  \definedummyword\leq
-  \definedummyword\minus
-  \definedummyword\ogonek
-  \definedummyword\pounds
-  \definedummyword\point
-  \definedummyword\print
-  \definedummyword\quotedblbase
-  \definedummyword\quotedblleft
-  \definedummyword\quotedblright
-  \definedummyword\quoteleft
-  \definedummyword\quoteright
-  \definedummyword\quotesinglbase
-  \definedummyword\rbracechar
-  \definedummyword\result
-  \definedummyword\textdegree
-  %
-  % We want to disable all macros so that they are not expanded by \write.
-  \macrolist
-  %
-  \normalturnoffactive
-  %
-  % Handle some cases of @value -- where it does not contain any
-  % (non-fully-expandable) commands.
-  \makevalueexpandable
-}
-
-% \commondummiesnofonts: common to \commondummies and \indexnofonts.
-%
-\def\commondummiesnofonts{%
-  % Control letters and accents.
-  \definedummyletter\!%
-  \definedummyaccent\"%
-  \definedummyaccent\'%
-  \definedummyletter\*%
-  \definedummyaccent\,%
-  \definedummyletter\.%
-  \definedummyletter\/%
-  \definedummyletter\:%
-  \definedummyaccent\=%
-  \definedummyletter\?%
-  \definedummyaccent\^%
-  \definedummyaccent\`%
-  \definedummyaccent\~%
-  \definedummyword\u
-  \definedummyword\v
-  \definedummyword\H
-  \definedummyword\dotaccent
-  \definedummyword\ogonek
-  \definedummyword\ringaccent
-  \definedummyword\tieaccent
-  \definedummyword\ubaraccent
-  \definedummyword\udotaccent
-  \definedummyword\dotless
-  %
-  % Texinfo font commands.
-  \definedummyword\b
-  \definedummyword\i
-  \definedummyword\r
-  \definedummyword\sansserif
-  \definedummyword\sc
-  \definedummyword\slanted
-  \definedummyword\t
-  %
-  % Commands that take arguments.
-  \definedummyword\abbr
-  \definedummyword\acronym
-  \definedummyword\anchor
-  \definedummyword\cite
-  \definedummyword\code
-  \definedummyword\command
-  \definedummyword\dfn
-  \definedummyword\dmn
-  \definedummyword\email
-  \definedummyword\emph
-  \definedummyword\env
-  \definedummyword\file
-  \definedummyword\image
-  \definedummyword\indicateurl
-  \definedummyword\inforef
-  \definedummyword\kbd
-  \definedummyword\key
-  \definedummyword\math
-  \definedummyword\option
-  \definedummyword\pxref
-  \definedummyword\ref
-  \definedummyword\samp
-  \definedummyword\strong
-  \definedummyword\tie
-  \definedummyword\uref
-  \definedummyword\url
-  \definedummyword\var
-  \definedummyword\verb
-  \definedummyword\w
-  \definedummyword\xref
-  %
-  % Consider:
-  %   @macro mkind{arg1,arg2}
-  %   @cindex \arg2\
-  %   @end macro
-  %   @mkind{foo, bar}
-  % The space after the comma will end up in the temporary definition
-  % that we make for arg2 (see \parsemargdef ff.).  We want all this to be
-  % expanded for the sake of the index, so we end up just seeing "bar".
-  \let\xeatspaces = \eatspaces
-}
-
-% For testing: output @{ and @} in index sort strings as \{ and \}.
-\newif\ifusebracesinindexes
-
-% \indexnofonts is used when outputting the strings to sort the index
-% by, and when constructing control sequence names.  It eliminates all
-% control sequences and just writes whatever the best ASCII sort string
-% would be for a given command (usually its argument).
-%
-\def\indexnofonts{%
-  % Accent commands should become @asis.
-  \def\definedummyaccent##1{\let##1\asis}%
-  % We can just ignore other control letters.
-  \def\definedummyletter##1{\let##1\empty}%
-  % All control words become @asis by default; overrides below.
-  \let\definedummyword\definedummyaccent
-  %
-  \commondummiesnofonts
-  %
-  % Don't no-op \tt, since it isn't a user-level command
-  % and is used in the definitions of the active chars like <, >, |, etc.
-  % Likewise with the other plain tex font commands.
-  %\let\tt=\asis
-  %
-  \def\ { }%
-  \def\@{@}%
-  \def\_{\normalunderscore}%
-  \def\-{}% @- shouldn't affect sorting
-  %
-  % Unfortunately, texindex is not prepared to handle braces in the
-  % content at all.  So for index sorting, we map @{ and @} to strings
-  % starting with |, since that ASCII character is between ASCII { and }.
-  \ifusebracesinindexes
-    \def\lbracechar{\lbracecmd}%
-    \def\rbracechar{\rbracecmd}%
-  \else
-    \def\lbracechar{|a}%
-    \def\rbracechar{|b}%
-  \fi
-  \let\{=\lbracechar
-  \let\}=\rbracechar
-  %
-  %
-  % Non-English letters.
-  \def\AA{AA}%
-  \def\AE{AE}%
-  \def\DH{DZZ}%
-  \def\L{L}%
-  \def\OE{OE}%
-  \def\O{O}%
-  \def\TH{ZZZ}%
-  \def\aa{aa}%
-  \def\ae{ae}%
-  \def\dh{dzz}%
-  \def\exclamdown{!}%
-  \def\l{l}%
-  \def\oe{oe}%
-  \def\ordf{a}%
-  \def\ordm{o}%
-  \def\o{o}%
-  \def\questiondown{?}%
-  \def\ss{ss}%
-  \def\th{zzz}%
-  %
-  \def\LaTeX{LaTeX}%
-  \def\TeX{TeX}%
-  %
-  % Assorted special characters.
-  % (The following {} will end up in the sort string, but that's ok.)
-  \def\arrow{->}%
-  \def\bullet{bullet}%
-  \def\comma{,}%
-  \def\copyright{copyright}%
-  \def\dots{...}%
-  \def\enddots{...}%
-  \def\equiv{==}%
-  \def\error{error}%
-  \def\euro{euro}%
-  \def\expansion{==>}%
-  \def\geq{>=}%
-  \def\guillemetleft{<<}%
-  \def\guillemetright{>>}%
-  \def\guilsinglleft{<}%
-  \def\guilsinglright{>}%
-  \def\leq{<=}%
-  \def\minus{-}%
-  \def\point{.}%
-  \def\pounds{pounds}%
-  \def\print{-|}%
-  \def\quotedblbase{"}%
-  \def\quotedblleft{"}%
-  \def\quotedblright{"}%
-  \def\quoteleft{`}%
-  \def\quoteright{'}%
-  \def\quotesinglbase{,}%
-  \def\registeredsymbol{R}%
-  \def\result{=>}%
-  \def\textdegree{o}%
-  %
-  \expandafter\ifx\csname SETtxiindexlquoteignore\endcsname\relax
-  \else \indexlquoteignore \fi
-  %
-  % We need to get rid of all macros, leaving only the arguments (if present).
-  % Of course this is not nearly correct, but it is the best we can do for now.
-  % makeinfo does not expand macros in the argument to @deffn, which ends up
-  % writing an index entry, and texindex isn't prepared for an index sort entry
-  % that starts with \.
-  %
-  % Since macro invocations are followed by braces, we can just redefine them
-  % to take a single TeX argument.  The case of a macro invocation that
-  % goes to end-of-line is not handled.
-  %
-  \macrolist
-}
-
-% Undocumented (for FSFS 2nd ed.): @set txiindexlquoteignore makes us
-% ignore left quotes in the sort term.
-{\catcode`\`=\active
- \gdef\indexlquoteignore{\let`=\empty}}
-
-\let\indexbackslash=0  %overridden during \printindex.
-\let\SETmarginindex=\relax % put index entries in margin (undocumented)?
-
-% Most index entries go through here, but \dosubind is the general case.
-% #1 is the index name, #2 is the entry text.
-\def\doind#1#2{\dosubind{#1}{#2}{}}
-
-% Workhorse for all \fooindexes.
-% #1 is name of index, #2 is stuff to put there, #3 is subentry --
-% empty if called from \doind, as we usually are (the main exception
-% is with most defuns, which call us directly).
-%
-\def\dosubind#1#2#3{%
-  \iflinks
-  {%
-    % Store the main index entry text (including the third arg).
-    \toks0 = {#2}%
-    % If third arg is present, precede it with a space.
-    \def\thirdarg{#3}%
-    \ifx\thirdarg\empty \else
-      \toks0 = \expandafter{\the\toks0 \space #3}%
-    \fi
-    %
-    \edef\writeto{\csname#1indfile\endcsname}%
-    %
-    \safewhatsit\dosubindwrite
-  }%
-  \fi
-}
-
-% Write the entry in \toks0 to the index file:
-%
-\def\dosubindwrite{%
-  % Put the index entry in the margin if desired.
-  \ifx\SETmarginindex\relax\else
-    \insert\margin{\hbox{\vrule height8pt depth3pt width0pt \the\toks0}}%
-  \fi
-  %
-  % Remember, we are within a group.
-  \indexdummies % Must do this here, since \bf, etc expand at this stage
-  \def\backslashcurfont{\indexbackslash}% \indexbackslash isn't defined now
-      % so it will be output as is; and it will print as backslash.
-  %
-  % Process the index entry with all font commands turned off, to
-  % get the string to sort by.
-  {\indexnofonts
-   \edef\temp{\the\toks0}% need full expansion
-   \xdef\indexsorttmp{\temp}%
-  }%
-  %
-  % Set up the complete index entry, with both the sort key and
-  % the original text, including any font commands.  We write
-  % three arguments to \entry to the .?? file (four in the
-  % subentry case), texindex reduces to two when writing the .??s
-  % sorted result.
-  \edef\temp{%
-    \write\writeto{%
-      \string\entry{\indexsorttmp}{\noexpand\folio}{\the\toks0}}%
-  }%
-  \temp
-}
-
-% Take care of unwanted page breaks/skips around a whatsit:
-%
-% If a skip is the last thing on the list now, preserve it
-% by backing up by \lastskip, doing the \write, then inserting
-% the skip again.  Otherwise, the whatsit generated by the
-% \write or \pdfdest will make \lastskip zero.  The result is that
-% sequences like this:
-% @end defun
-% @tindex whatever
-% @defun ...
-% will have extra space inserted, because the \medbreak in the
-% start of the @defun won't see the skip inserted by the @end of
-% the previous defun.
-%
-% But don't do any of this if we're not in vertical mode.  We
-% don't want to do a \vskip and prematurely end a paragraph.
-%
-% Avoid page breaks due to these extra skips, too.
-%
-% But wait, there is a catch there:
-% We'll have to check whether \lastskip is zero skip.  \ifdim is not
-% sufficient for this purpose, as it ignores stretch and shrink parts
-% of the skip.  The only way seems to be to check the textual
-% representation of the skip.
-%
-% The following is almost like \def\zeroskipmacro{0.0pt} except that
-% the ``p'' and ``t'' characters have catcode \other, not 11 (letter).
-%
-\edef\zeroskipmacro{\expandafter\the\csname z@skip\endcsname}
-%
-\newskip\whatsitskip
-\newcount\whatsitpenalty
-%
-% ..., ready, GO:
-%
-\def\safewhatsit#1{\ifhmode
-  #1%
- \else
-  % \lastskip and \lastpenalty cannot both be nonzero simultaneously.
-  \whatsitskip = \lastskip
-  \edef\lastskipmacro{\the\lastskip}%
-  \whatsitpenalty = \lastpenalty
-  %
-  % If \lastskip is nonzero, that means the last item was a
-  % skip.  And since a skip is discardable, that means this
-  % -\whatsitskip glue we're inserting is preceded by a
-  % non-discardable item, therefore it is not a potential
-  % breakpoint, therefore no \nobreak needed.
-  \ifx\lastskipmacro\zeroskipmacro
-  \else
-    \vskip-\whatsitskip
-  \fi
-  %
-  #1%
-  %
-  \ifx\lastskipmacro\zeroskipmacro
-    % If \lastskip was zero, perhaps the last item was a penalty, and
-    % perhaps it was >=10000, e.g., a \nobreak.  In that case, we want
-    % to re-insert the same penalty (values >10000 are used for various
-    % signals); since we just inserted a non-discardable item, any
-    % following glue (such as a \parskip) would be a breakpoint.  For example:
-    %   @deffn deffn-whatever
-    %   @vindex index-whatever
-    %   Description.
-    % would allow a break between the index-whatever whatsit
-    % and the "Description." paragraph.
-    \ifnum\whatsitpenalty>9999 \penalty\whatsitpenalty \fi
-  \else
-    % On the other hand, if we had a nonzero \lastskip,
-    % this make-up glue would be preceded by a non-discardable item
-    % (the whatsit from the \write), so we must insert a \nobreak.
-    \nobreak\vskip\whatsitskip
-  \fi
-\fi}
-
-% The index entry written in the file actually looks like
-%  \entry {sortstring}{page}{topic}
-% or
-%  \entry {sortstring}{page}{topic}{subtopic}
-% The texindex program reads in these files and writes files
-% containing these kinds of lines:
-%  \initial {c}
-%     before the first topic whose initial is c
-%  \entry {topic}{pagelist}
-%     for a topic that is used without subtopics
-%  \primary {topic}
-%     for the beginning of a topic that is used with subtopics
-%  \secondary {subtopic}{pagelist}
-%     for each subtopic.
-
-% Define the user-accessible indexing commands
-% @findex, @vindex, @kindex, @cindex.
-
-\def\findex {\fnindex}
-\def\kindex {\kyindex}
-\def\cindex {\cpindex}
-\def\vindex {\vrindex}
-\def\tindex {\tpindex}
-\def\pindex {\pgindex}
-
-\def\cindexsub {\begingroup\obeylines\cindexsub}
-{\obeylines %
-\gdef\cindexsub "#1" #2^^M{\endgroup %
-\dosubind{cp}{#2}{#1}}}
-
-% Define the macros used in formatting output of the sorted index material.
-
-% @printindex causes a particular index (the ??s file) to get printed.
-% It does not print any chapter heading (usually an @unnumbered).
-%
-\parseargdef\printindex{\begingroup
-  \dobreak \chapheadingskip{10000}%
-  %
-  \smallfonts \rm
-  \tolerance = 9500
-  \plainfrenchspacing
-  \everypar = {}% don't want the \kern\-parindent from indentation suppression.
-  %
-  % See if the index file exists and is nonempty.
-  % Change catcode of @ here so that if the index file contains
-  % \initial {@}
-  % as its first line, TeX doesn't complain about mismatched braces
-  % (because it thinks @} is a control sequence).
-  \catcode`\@ = 11
-  \openin 1 \jobname.#1s
-  \ifeof 1
-    % \enddoublecolumns gets confused if there is no text in the index,
-    % and it loses the chapter title and the aux file entries for the
-    % index.  The easiest way to prevent this problem is to make sure
-    % there is some text.
-    \putwordIndexNonexistent
-  \else
-    %
-    % If the index file exists but is empty, then \openin leaves \ifeof
-    % false.  We have to make TeX try to read something from the file, so
-    % it can discover if there is anything in it.
-    \read 1 to \temp
-    \ifeof 1
-      \putwordIndexIsEmpty
-    \else
-      % Index files are almost Texinfo source, but we use \ as the escape
-      % character.  It would be better to use @, but that's too big a change
-      % to make right now.
-      \def\indexbackslash{\backslashcurfont}%
-      \catcode`\\ = 0
-      \escapechar = `\\
-      \begindoublecolumns
-      \input \jobname.#1s
-      \enddoublecolumns
-    \fi
-  \fi
-  \closein 1
-\endgroup}
-
-% These macros are used by the sorted index file itself.
-% Change them to control the appearance of the index.
-
-\def\initial#1{{%
-  % Some minor font changes for the special characters.
-  \let\tentt=\sectt \let\tt=\sectt \let\sf=\sectt
-  %
-  % Remove any glue we may have, we'll be inserting our own.
-  \removelastskip
-  %
-  % We like breaks before the index initials, so insert a bonus.
-  \nobreak
-  \vskip 0pt plus 3\baselineskip
-  \penalty 0
-  \vskip 0pt plus -3\baselineskip
-  %
-  % Typeset the initial.  Making this add up to a whole number of
-  % baselineskips increases the chance of the dots lining up from column
-  % to column.  It still won't often be perfect, because of the stretch
-  % we need before each entry, but it's better.
-  %
-  % No shrink because it confuses \balancecolumns.
-  \vskip 1.67\baselineskip plus .5\baselineskip
-  \leftline{\secbf #1}%
-  % Do our best not to break after the initial.
-  \nobreak
-  \vskip .33\baselineskip plus .1\baselineskip
-}}
-
-% \entry typesets a paragraph consisting of the text (#1), dot leaders, and
-% then page number (#2) flushed to the right margin.  It is used for index
-% and table of contents entries.  The paragraph is indented by \leftskip.
-%
-% A straightforward implementation would start like this:
-%	\def\entry#1#2{...
-% But this freezes the catcodes in the argument, and can cause problems to
-% @code, which sets - active.  This problem was fixed by a kludge---
-% ``-'' was active throughout whole index, but this isn't really right.
-% The right solution is to prevent \entry from swallowing the whole text.
-%                                 --kasal, 21nov03
-\def\entry{%
-  \begingroup
-    %
-    % Start a new paragraph if necessary, so our assignments below can't
-    % affect previous text.
-    \par
-    %
-    % Do not fill out the last line with white space.
-    \parfillskip = 0in
-    %
-    % No extra space above this paragraph.
-    \parskip = 0in
-    %
-    % Do not prefer a separate line ending with a hyphen to fewer lines.
-    \finalhyphendemerits = 0
-    %
-    % \hangindent is only relevant when the entry text and page number
-    % don't both fit on one line.  In that case, bob suggests starting the
-    % dots pretty far over on the line.  Unfortunately, a large
-    % indentation looks wrong when the entry text itself is broken across
-    % lines.  So we use a small indentation and put up with long leaders.
-    %
-    % \hangafter is reset to 1 (which is the value we want) at the start
-    % of each paragraph, so we need not do anything with that.
-    \hangindent = 2em
-    %
-    % When the entry text needs to be broken, just fill out the first line
-    % with blank space.
-    \rightskip = 0pt plus1fil
-    %
-    % A bit of stretch before each entry for the benefit of balancing
-    % columns.
-    \vskip 0pt plus1pt
-    %
-    % When reading the text of entry, convert explicit line breaks
-    % from @* into spaces.  The user might give these in long section
-    % titles, for instance.
-    \def\*{\unskip\space\ignorespaces}%
-    \def\entrybreak{\hfil\break}%
-    %
-    % Swallow the left brace of the text (first parameter):
-    \afterassignment\doentry
-    \let\temp =
-}
-\def\entrybreak{\unskip\space\ignorespaces}%
-\def\doentry{%
-    \bgroup % Instead of the swallowed brace.
-      \noindent
-      \aftergroup\finishentry
-      % And now comes the text of the entry.
-}
-\def\finishentry#1{%
-    % #1 is the page number.
-    %
-    % The following is kludged to not output a line of dots in the index if
-    % there are no page numbers.  The next person who breaks this will be
-    % cursed by a Unix daemon.
-    \setbox\boxA = \hbox{#1}%
-    \ifdim\wd\boxA = 0pt
-      \ %
-    \else
-      %
-      % If we must, put the page number on a line of its own, and fill out
-      % this line with blank space.  (The \hfil is overwhelmed with the
-      % fill leaders glue in \indexdotfill if the page number does fit.)
-      \hfil\penalty50
-      \null\nobreak\indexdotfill % Have leaders before the page number.
-      %
-      % The `\ ' here is removed by the implicit \unskip that TeX does as
-      % part of (the primitive) \par.  Without it, a spurious underfull
-      % \hbox ensues.
-      \ifpdf
-	\pdfgettoks#1.%
-	\ \the\toksA
-      \else
-	\ #1%
-      \fi
-    \fi
-    \par
-  \endgroup
-}
-
-% Like plain.tex's \dotfill, except uses up at least 1 em.
-\def\indexdotfill{\cleaders
-  \hbox{$\mathsurround=0pt \mkern1.5mu.\mkern1.5mu$}\hskip 1em plus 1fill}
-
-\def\primary #1{\line{#1\hfil}}
-
-\newskip\secondaryindent \secondaryindent=0.5cm
-\def\secondary#1#2{{%
-  \parfillskip=0in
-  \parskip=0in
-  \hangindent=1in
-  \hangafter=1
-  \noindent\hskip\secondaryindent\hbox{#1}\indexdotfill
-  \ifpdf
-    \pdfgettoks#2.\ \the\toksA % The page number ends the paragraph.
-  \else
-    #2
-  \fi
-  \par
-}}
-
-% Define two-column mode, which we use to typeset indexes.
-% Adapted from the TeXbook, page 416, which is to say,
-% the manmac.tex format used to print the TeXbook itself.
-\catcode`\@=11
-
-\newbox\partialpage
-\newdimen\doublecolumnhsize
-
-\def\begindoublecolumns{\begingroup % ended by \enddoublecolumns
-  % Grab any single-column material above us.
-  \output = {%
-    %
-    % Here is a possibility not foreseen in manmac: if we accumulate a
-    % whole lot of material, we might end up calling this \output
-    % routine twice in a row (see the doublecol-lose test, which is
-    % essentially a couple of indexes with @setchapternewpage off).  In
-    % that case we just ship out what is in \partialpage with the normal
-    % output routine.  Generally, \partialpage will be empty when this
-    % runs and this will be a no-op.  See the indexspread.tex test case.
-    \ifvoid\partialpage \else
-      \onepageout{\pagecontents\partialpage}%
-    \fi
-    %
-    \global\setbox\partialpage = \vbox{%
-      % Unvbox the main output page.
-      \unvbox\PAGE
-      \kern-\topskip \kern\baselineskip
-    }%
-  }%
-  \eject % run that output routine to set \partialpage
-  %
-  % Use the double-column output routine for subsequent pages.
-  \output = {\doublecolumnout}%
-  %
-  % Change the page size parameters.  We could do this once outside this
-  % routine, in each of @smallbook, @afourpaper, and the default 8.5x11
-  % format, but then we repeat the same computation.  Repeating a couple
-  % of assignments once per index is clearly meaningless for the
-  % execution time, so we may as well do it in one place.
-  %
-  % First we halve the line length, less a little for the gutter between
-  % the columns.  We compute the gutter based on the line length, so it
-  % changes automatically with the paper format.  The magic constant
-  % below is chosen so that the gutter has the same value (well, +-<1pt)
-  % as it did when we hard-coded it.
-  %
-  % We put the result in a separate register, \doublecolumhsize, so we
-  % can restore it in \pagesofar, after \hsize itself has (potentially)
-  % been clobbered.
-  %
-  \doublecolumnhsize = \hsize
-    \advance\doublecolumnhsize by -.04154\hsize
-    \divide\doublecolumnhsize by 2
-  \hsize = \doublecolumnhsize
-  %
-  % Double the \vsize as well.  (We don't need a separate register here,
-  % since nobody clobbers \vsize.)
-  \vsize = 2\vsize
-}
-
-% The double-column output routine for all double-column pages except
-% the last.
-%
-\def\doublecolumnout{%
-  \splittopskip=\topskip \splitmaxdepth=\maxdepth
-  % Get the available space for the double columns -- the normal
-  % (undoubled) page height minus any material left over from the
-  % previous page.
-  \dimen@ = \vsize
-  \divide\dimen@ by 2
-  \advance\dimen@ by -\ht\partialpage
-  %
-  % box0 will be the left-hand column, box2 the right.
-  \setbox0=\vsplit255 to\dimen@ \setbox2=\vsplit255 to\dimen@
-  \onepageout\pagesofar
-  \unvbox255
-  \penalty\outputpenalty
-}
-%
-% Re-output the contents of the output page -- any previous material,
-% followed by the two boxes we just split, in box0 and box2.
-\def\pagesofar{%
-  \unvbox\partialpage
-  %
-  \hsize = \doublecolumnhsize
-  \wd0=\hsize \wd2=\hsize
-  \hbox to\pagewidth{\box0\hfil\box2}%
-}
-%
-% All done with double columns.
-\def\enddoublecolumns{%
-  % The following penalty ensures that the page builder is exercised
-  % _before_ we change the output routine.  This is necessary in the
-  % following situation:
-  %
-  % The last section of the index consists only of a single entry.
-  % Before this section, \pagetotal is less than \pagegoal, so no
-  % break occurs before the last section starts.  However, the last
-  % section, consisting of \initial and the single \entry, does not
-  % fit on the page and has to be broken off.  Without the following
-  % penalty the page builder will not be exercised until \eject
-  % below, and by that time we'll already have changed the output
-  % routine to the \balancecolumns version, so the next-to-last
-  % double-column page will be processed with \balancecolumns, which
-  % is wrong:  The two columns will go to the main vertical list, with
-  % the broken-off section in the recent contributions.  As soon as
-  % the output routine finishes, TeX starts reconsidering the page
-  % break.  The two columns and the broken-off section both fit on the
-  % page, because the two columns now take up only half of the page
-  % goal.  When TeX sees \eject from below which follows the final
-  % section, it invokes the new output routine that we've set after
-  % \balancecolumns below; \onepageout will try to fit the two columns
-  % and the final section into the vbox of \pageheight (see
-  % \pagebody), causing an overfull box.
-  %
-  % Note that glue won't work here, because glue does not exercise the
-  % page builder, unlike penalties (see The TeXbook, pp. 280-281).
-  \penalty0
-  %
-  \output = {%
-    % Split the last of the double-column material.  Leave it on the
-    % current page, no automatic page break.
-    \balancecolumns
-    %
-    % If we end up splitting too much material for the current page,
-    % though, there will be another page break right after this \output
-    % invocation ends.  Having called \balancecolumns once, we do not
-    % want to call it again.  Therefore, reset \output to its normal
-    % definition right away.  (We hope \balancecolumns will never be
-    % called on to balance too much material, but if it is, this makes
-    % the output somewhat more palatable.)
-    \global\output = {\onepageout{\pagecontents\PAGE}}%
-  }%
-  \eject
-  \endgroup % started in \begindoublecolumns
-  %
-  % \pagegoal was set to the doubled \vsize above, since we restarted
-  % the current page.  We're now back to normal single-column
-  % typesetting, so reset \pagegoal to the normal \vsize (after the
-  % \endgroup where \vsize got restored).
-  \pagegoal = \vsize
-}
-%
-% Called at the end of the double column material.
-\def\balancecolumns{%
-  \setbox0 = \vbox{\unvbox255}% like \box255 but more efficient, see p.120.
-  \dimen@ = \ht0
-  \advance\dimen@ by \topskip
-  \advance\dimen@ by-\baselineskip
-  \divide\dimen@ by 2 % target to split to
-  %debug\message{final 2-column material height=\the\ht0, target=\the\dimen@.}%
-  \splittopskip = \topskip
-  % Loop until we get a decent breakpoint.
-  {%
-    \vbadness = 10000
-    \loop
-      \global\setbox3 = \copy0
-      \global\setbox1 = \vsplit3 to \dimen@
-    \ifdim\ht3>\dimen@
-      \global\advance\dimen@ by 1pt
-    \repeat
-  }%
-  %debug\message{split to \the\dimen@, column heights: \the\ht1, \the\ht3.}%
-  \setbox0=\vbox to\dimen@{\unvbox1}%
-  \setbox2=\vbox to\dimen@{\unvbox3}%
-  %
-  \pagesofar
-}
-\catcode`\@ = \other
-
-
-\message{sectioning,}
-% Chapters, sections, etc.
-
-% Let's start with @part.
-\outer\parseargdef\part{\partzzz{#1}}
-\def\partzzz#1{%
-  \chapoddpage
-  \null
-  \vskip.3\vsize  % move it down on the page a bit
-  \begingroup
-    \noindent \titlefonts\rmisbold #1\par % the text
-    \let\lastnode=\empty      % no node to associate with
-    \writetocentry{part}{#1}{}% but put it in the toc
-    \headingsoff              % no headline or footline on the part page
-    \chapoddpage
-  \endgroup
-}
-
-% \unnumberedno is an oxymoron.  But we count the unnumbered
-% sections so that we can refer to them unambiguously in the pdf
-% outlines by their "section number".  We avoid collisions with chapter
-% numbers by starting them at 10000.  (If a document ever has 10000
-% chapters, we're in trouble anyway, I'm sure.)
-\newcount\unnumberedno \unnumberedno = 10000
-\newcount\chapno
-\newcount\secno        \secno=0
-\newcount\subsecno     \subsecno=0
-\newcount\subsubsecno  \subsubsecno=0
-
-% This counter is funny since it counts through charcodes of letters A, B, ...
-\newcount\appendixno  \appendixno = `\@
-%
-% \def\appendixletter{\char\the\appendixno}
-% We do the following ugly conditional instead of the above simple
-% construct for the sake of pdftex, which needs the actual
-% letter in the expansion, not just typeset.
-%
-\def\appendixletter{%
-  \ifnum\appendixno=`A A%
-  \else\ifnum\appendixno=`B B%
-  \else\ifnum\appendixno=`C C%
-  \else\ifnum\appendixno=`D D%
-  \else\ifnum\appendixno=`E E%
-  \else\ifnum\appendixno=`F F%
-  \else\ifnum\appendixno=`G G%
-  \else\ifnum\appendixno=`H H%
-  \else\ifnum\appendixno=`I I%
-  \else\ifnum\appendixno=`J J%
-  \else\ifnum\appendixno=`K K%
-  \else\ifnum\appendixno=`L L%
-  \else\ifnum\appendixno=`M M%
-  \else\ifnum\appendixno=`N N%
-  \else\ifnum\appendixno=`O O%
-  \else\ifnum\appendixno=`P P%
-  \else\ifnum\appendixno=`Q Q%
-  \else\ifnum\appendixno=`R R%
-  \else\ifnum\appendixno=`S S%
-  \else\ifnum\appendixno=`T T%
-  \else\ifnum\appendixno=`U U%
-  \else\ifnum\appendixno=`V V%
-  \else\ifnum\appendixno=`W W%
-  \else\ifnum\appendixno=`X X%
-  \else\ifnum\appendixno=`Y Y%
-  \else\ifnum\appendixno=`Z Z%
-  % The \the is necessary, despite appearances, because \appendixletter is
-  % expanded while writing the .toc file.  \char\appendixno is not
-  % expandable, thus it is written literally, thus all appendixes come out
-  % with the same letter (or @) in the toc without it.
-  \else\char\the\appendixno
-  \fi\fi\fi\fi\fi\fi\fi\fi\fi\fi\fi\fi\fi
-  \fi\fi\fi\fi\fi\fi\fi\fi\fi\fi\fi\fi\fi}
-
-% Each @chapter defines these (using marks) as the number+name, number
-% and name of the chapter.  Page headings and footings can use
-% these.  @section does likewise.
-\def\thischapter{}
-\def\thischapternum{}
-\def\thischaptername{}
-\def\thissection{}
-\def\thissectionnum{}
-\def\thissectionname{}
-
-\newcount\absseclevel % used to calculate proper heading level
-\newcount\secbase\secbase=0 % @raisesections/@lowersections modify this count
-
-% @raisesections: treat @section as chapter, @subsection as section, etc.
-\def\raisesections{\global\advance\secbase by -1}
-\let\up=\raisesections % original BFox name
-
-% @lowersections: treat @chapter as section, @section as subsection, etc.
-\def\lowersections{\global\advance\secbase by 1}
-\let\down=\lowersections % original BFox name
-
-% we only have subsub.
-\chardef\maxseclevel = 3
-%
-% A numbered section within an unnumbered changes to unnumbered too.
-% To achieve this, remember the "biggest" unnum. sec. we are currently in:
-\chardef\unnlevel = \maxseclevel
-%
-% Trace whether the current chapter is an appendix or not:
-% \chapheadtype is "N" or "A", unnumbered chapters are ignored.
-\def\chapheadtype{N}
-
-% Choose a heading macro
-% #1 is heading type
-% #2 is heading level
-% #3 is text for heading
-\def\genhead#1#2#3{%
-  % Compute the abs. sec. level:
-  \absseclevel=#2
-  \advance\absseclevel by \secbase
-  % Make sure \absseclevel doesn't fall outside the range:
-  \ifnum \absseclevel < 0
-    \absseclevel = 0
-  \else
-    \ifnum \absseclevel > 3
-      \absseclevel = 3
-    \fi
-  \fi
-  % The heading type:
-  \def\headtype{#1}%
-  \if \headtype U%
-    \ifnum \absseclevel < \unnlevel
-      \chardef\unnlevel = \absseclevel
-    \fi
-  \else
-    % Check for appendix sections:
-    \ifnum \absseclevel = 0
-      \edef\chapheadtype{\headtype}%
-    \else
-      \if \headtype A\if \chapheadtype N%
-	\errmessage{@appendix... within a non-appendix chapter}%
-      \fi\fi
-    \fi
-    % Check for numbered within unnumbered:
-    \ifnum \absseclevel > \unnlevel
-      \def\headtype{U}%
-    \else
-      \chardef\unnlevel = 3
-    \fi
-  \fi
-  % Now print the heading:
-  \if \headtype U%
-    \ifcase\absseclevel
-	\unnumberedzzz{#3}%
-    \or \unnumberedseczzz{#3}%
-    \or \unnumberedsubseczzz{#3}%
-    \or \unnumberedsubsubseczzz{#3}%
-    \fi
-  \else
-    \if \headtype A%
-      \ifcase\absseclevel
-	  \appendixzzz{#3}%
-      \or \appendixsectionzzz{#3}%
-      \or \appendixsubseczzz{#3}%
-      \or \appendixsubsubseczzz{#3}%
-      \fi
-    \else
-      \ifcase\absseclevel
-	  \chapterzzz{#3}%
-      \or \seczzz{#3}%
-      \or \numberedsubseczzz{#3}%
-      \or \numberedsubsubseczzz{#3}%
-      \fi
-    \fi
-  \fi
-  \suppressfirstparagraphindent
-}
-
-% an interface:
-\def\numhead{\genhead N}
-\def\apphead{\genhead A}
-\def\unnmhead{\genhead U}
-
-% @chapter, @appendix, @unnumbered.  Increment top-level counter, reset
-% all lower-level sectioning counters to zero.
-%
-% Also set \chaplevelprefix, which we prepend to @float sequence numbers
-% (e.g., figures), q.v.  By default (before any chapter), that is empty.
-\let\chaplevelprefix = \empty
-%
-\outer\parseargdef\chapter{\numhead0{#1}} % normally numhead0 calls chapterzzz
-\def\chapterzzz#1{%
-  % section resetting is \global in case the chapter is in a group, such
-  % as an @include file.
-  \global\secno=0 \global\subsecno=0 \global\subsubsecno=0
-    \global\advance\chapno by 1
-  %
-  % Used for \float.
-  \gdef\chaplevelprefix{\the\chapno.}%
-  \resetallfloatnos
-  %
-  % \putwordChapter can contain complex things in translations.
-  \toks0=\expandafter{\putwordChapter}%
-  \message{\the\toks0 \space \the\chapno}%
-  %
-  % Write the actual heading.
-  \chapmacro{#1}{Ynumbered}{\the\chapno}%
-  %
-  % So @section and the like are numbered underneath this chapter.
-  \global\let\section = \numberedsec
-  \global\let\subsection = \numberedsubsec
-  \global\let\subsubsection = \numberedsubsubsec
-}
-
-\outer\parseargdef\appendix{\apphead0{#1}} % normally calls appendixzzz
-%
-\def\appendixzzz#1{%
-  \global\secno=0 \global\subsecno=0 \global\subsubsecno=0
-    \global\advance\appendixno by 1
-  \gdef\chaplevelprefix{\appendixletter.}%
-  \resetallfloatnos
-  %
-  % \putwordAppendix can contain complex things in translations.
-  \toks0=\expandafter{\putwordAppendix}%
-  \message{\the\toks0 \space \appendixletter}%
-  %
-  \chapmacro{#1}{Yappendix}{\appendixletter}%
-  %
-  \global\let\section = \appendixsec
-  \global\let\subsection = \appendixsubsec
-  \global\let\subsubsection = \appendixsubsubsec
-}
-
-% normally unnmhead0 calls unnumberedzzz:
-\outer\parseargdef\unnumbered{\unnmhead0{#1}}
-\def\unnumberedzzz#1{%
-  \global\secno=0 \global\subsecno=0 \global\subsubsecno=0
-    \global\advance\unnumberedno by 1
-  %
-  % Since an unnumbered has no number, no prefix for figures.
-  \global\let\chaplevelprefix = \empty
-  \resetallfloatnos
-  %
-  % This used to be simply \message{#1}, but TeX fully expands the
-  % argument to \message.  Therefore, if #1 contained @-commands, TeX
-  % expanded them.  For example, in `@unnumbered The @cite{Book}', TeX
-  % expanded @cite (which turns out to cause errors because \cite is meant
-  % to be executed, not expanded).
-  %
-  % Anyway, we don't want the fully-expanded definition of @cite to appear
-  % as a result of the \message, we just want `@cite' itself.  We use
-  % \the<toks register> to achieve this: TeX expands \the<toks> only once,
-  % simply yielding the contents of <toks register>.  (We also do this for
-  % the toc entries.)
-  \toks0 = {#1}%
-  \message{(\the\toks0)}%
-  %
-  \chapmacro{#1}{Ynothing}{\the\unnumberedno}%
-  %
-  \global\let\section = \unnumberedsec
-  \global\let\subsection = \unnumberedsubsec
-  \global\let\subsubsection = \unnumberedsubsubsec
-}
-
-% @centerchap is like @unnumbered, but the heading is centered.
-\outer\parseargdef\centerchap{%
-  % Well, we could do the following in a group, but that would break
-  % an assumption that \chapmacro is called at the outermost level.
-  % Thus we are safer this way:		--kasal, 24feb04
-  \let\centerparametersmaybe = \centerparameters
-  \unnmhead0{#1}%
-  \let\centerparametersmaybe = \relax
-}
-
-% @top is like @unnumbered.
-\let\top\unnumbered
-
-% Sections.
-% 
-\outer\parseargdef\numberedsec{\numhead1{#1}} % normally calls seczzz
-\def\seczzz#1{%
-  \global\subsecno=0 \global\subsubsecno=0  \global\advance\secno by 1
-  \sectionheading{#1}{sec}{Ynumbered}{\the\chapno.\the\secno}%
-}
-
-% normally calls appendixsectionzzz:
-\outer\parseargdef\appendixsection{\apphead1{#1}}
-\def\appendixsectionzzz#1{%
-  \global\subsecno=0 \global\subsubsecno=0  \global\advance\secno by 1
-  \sectionheading{#1}{sec}{Yappendix}{\appendixletter.\the\secno}%
-}
-\let\appendixsec\appendixsection
-
-% normally calls unnumberedseczzz:
-\outer\parseargdef\unnumberedsec{\unnmhead1{#1}}
-\def\unnumberedseczzz#1{%
-  \global\subsecno=0 \global\subsubsecno=0  \global\advance\secno by 1
-  \sectionheading{#1}{sec}{Ynothing}{\the\unnumberedno.\the\secno}%
-}
-
-% Subsections.
-% 
-% normally calls numberedsubseczzz:
-\outer\parseargdef\numberedsubsec{\numhead2{#1}}
-\def\numberedsubseczzz#1{%
-  \global\subsubsecno=0  \global\advance\subsecno by 1
-  \sectionheading{#1}{subsec}{Ynumbered}{\the\chapno.\the\secno.\the\subsecno}%
-}
-
-% normally calls appendixsubseczzz:
-\outer\parseargdef\appendixsubsec{\apphead2{#1}}
-\def\appendixsubseczzz#1{%
-  \global\subsubsecno=0  \global\advance\subsecno by 1
-  \sectionheading{#1}{subsec}{Yappendix}%
-                 {\appendixletter.\the\secno.\the\subsecno}%
-}
-
-% normally calls unnumberedsubseczzz:
-\outer\parseargdef\unnumberedsubsec{\unnmhead2{#1}}
-\def\unnumberedsubseczzz#1{%
-  \global\subsubsecno=0  \global\advance\subsecno by 1
-  \sectionheading{#1}{subsec}{Ynothing}%
-                 {\the\unnumberedno.\the\secno.\the\subsecno}%
-}
-
-% Subsubsections.
-% 
-% normally numberedsubsubseczzz:
-\outer\parseargdef\numberedsubsubsec{\numhead3{#1}}
-\def\numberedsubsubseczzz#1{%
-  \global\advance\subsubsecno by 1
-  \sectionheading{#1}{subsubsec}{Ynumbered}%
-                 {\the\chapno.\the\secno.\the\subsecno.\the\subsubsecno}%
-}
-
-% normally appendixsubsubseczzz:
-\outer\parseargdef\appendixsubsubsec{\apphead3{#1}}
-\def\appendixsubsubseczzz#1{%
-  \global\advance\subsubsecno by 1
-  \sectionheading{#1}{subsubsec}{Yappendix}%
-                 {\appendixletter.\the\secno.\the\subsecno.\the\subsubsecno}%
-}
-
-% normally unnumberedsubsubseczzz:
-\outer\parseargdef\unnumberedsubsubsec{\unnmhead3{#1}}
-\def\unnumberedsubsubseczzz#1{%
-  \global\advance\subsubsecno by 1
-  \sectionheading{#1}{subsubsec}{Ynothing}%
-                 {\the\unnumberedno.\the\secno.\the\subsecno.\the\subsubsecno}%
-}
-
-% These macros control what the section commands do, according
-% to what kind of chapter we are in (ordinary, appendix, or unnumbered).
-% Define them by default for a numbered chapter.
-\let\section = \numberedsec
-\let\subsection = \numberedsubsec
-\let\subsubsection = \numberedsubsubsec
-
-% Define @majorheading, @heading and @subheading
-
-\def\majorheading{%
-  {\advance\chapheadingskip by 10pt \chapbreak }%
-  \parsearg\chapheadingzzz
-}
-
-\def\chapheading{\chapbreak \parsearg\chapheadingzzz}
-\def\chapheadingzzz#1{%
-  \vbox{\chapfonts \raggedtitlesettings #1\par}%
-  \nobreak\bigskip \nobreak
-  \suppressfirstparagraphindent
-}
-
-% @heading, @subheading, @subsubheading.
-\parseargdef\heading{\sectionheading{#1}{sec}{Yomitfromtoc}{}
-  \suppressfirstparagraphindent}
-\parseargdef\subheading{\sectionheading{#1}{subsec}{Yomitfromtoc}{}
-  \suppressfirstparagraphindent}
-\parseargdef\subsubheading{\sectionheading{#1}{subsubsec}{Yomitfromtoc}{}
-  \suppressfirstparagraphindent}
-
-% These macros generate a chapter, section, etc. heading only
-% (including whitespace, linebreaking, etc. around it),
-% given all the information in convenient, parsed form.
-
-% Args are the skip and penalty (usually negative)
-\def\dobreak#1#2{\par\ifdim\lastskip<#1\removelastskip\penalty#2\vskip#1\fi}
-
-% Parameter controlling skip before chapter headings (if needed)
-\newskip\chapheadingskip
-
-% Define plain chapter starts, and page on/off switching for it.
-\def\chapbreak{\dobreak \chapheadingskip {-4000}}
-\def\chappager{\par\vfill\supereject}
-% Because \domark is called before \chapoddpage, the filler page will
-% get the headings for the next chapter, which is wrong.  But we don't
-% care -- we just disable all headings on the filler page.
-\def\chapoddpage{%
-  \chappager
-  \ifodd\pageno \else
-    \begingroup
-      \headingsoff
-      \null
-      \chappager
-    \endgroup
-  \fi
-}
-
-\def\setchapternewpage #1 {\csname CHAPPAG#1\endcsname}
-
-\def\CHAPPAGoff{%
-\global\let\contentsalignmacro = \chappager
-\global\let\pchapsepmacro=\chapbreak
-\global\let\pagealignmacro=\chappager}
-
-\def\CHAPPAGon{%
-\global\let\contentsalignmacro = \chappager
-\global\let\pchapsepmacro=\chappager
-\global\let\pagealignmacro=\chappager
-\global\def\HEADINGSon{\HEADINGSsingle}}
-
-\def\CHAPPAGodd{%
-\global\let\contentsalignmacro = \chapoddpage
-\global\let\pchapsepmacro=\chapoddpage
-\global\let\pagealignmacro=\chapoddpage
-\global\def\HEADINGSon{\HEADINGSdouble}}
-
-\CHAPPAGon
-
-% Chapter opening.
-%
-% #1 is the text, #2 is the section type (Ynumbered, Ynothing,
-% Yappendix, Yomitfromtoc), #3 the chapter number.
-% Not used for @heading series.
-%
-% To test against our argument.
-\def\Ynothingkeyword{Ynothing}
-\def\Yappendixkeyword{Yappendix}
-\def\Yomitfromtockeyword{Yomitfromtoc}
-%
-\def\chapmacro#1#2#3{%
-  \checkenv{}% chapters, etc., should not start inside an environment.
-  %
-  % Insert the first mark before the heading break (see notes for \domark).
-  \let\prevchapterdefs=\lastchapterdefs
-  \let\prevsectiondefs=\lastsectiondefs
-  \gdef\lastsectiondefs{\gdef\thissectionname{}\gdef\thissectionnum{}%
-                        \gdef\thissection{}}%
-  %
-  \def\temptype{#2}%
-  \ifx\temptype\Ynothingkeyword
-    \gdef\lastchapterdefs{\gdef\thischaptername{#1}\gdef\thischapternum{}%
-                          \gdef\thischapter{\thischaptername}}%
-  \else\ifx\temptype\Yomitfromtockeyword
-    \gdef\lastchapterdefs{\gdef\thischaptername{#1}\gdef\thischapternum{}%
-                          \gdef\thischapter{}}%
-  \else\ifx\temptype\Yappendixkeyword
-    \toks0={#1}%
-    \xdef\lastchapterdefs{%
-      \gdef\noexpand\thischaptername{\the\toks0}%
-      \gdef\noexpand\thischapternum{\appendixletter}%
-      % \noexpand\putwordAppendix avoids expanding indigestible
-      % commands in some of the translations.
-      \gdef\noexpand\thischapter{\noexpand\putwordAppendix{}
-                                 \noexpand\thischapternum:
-                                 \noexpand\thischaptername}%
-    }%
-  \else
-    \toks0={#1}%
-    \xdef\lastchapterdefs{%
-      \gdef\noexpand\thischaptername{\the\toks0}%
-      \gdef\noexpand\thischapternum{\the\chapno}%
-      % \noexpand\putwordChapter avoids expanding indigestible
-      % commands in some of the translations.
-      \gdef\noexpand\thischapter{\noexpand\putwordChapter{}
-                                 \noexpand\thischapternum:
-                                 \noexpand\thischaptername}%
-    }%
-  \fi\fi\fi
-  %
-  % Output the mark.  Pass it through \safewhatsit, to take care of
-  % the preceding space.
-  \safewhatsit\domark
-  %
-  % Insert the chapter heading break.
-  \pchapsepmacro
-  %
-  % Now the second mark, after the heading break.  No break points
-  % between here and the heading.
-  \let\prevchapterdefs=\lastchapterdefs
-  \let\prevsectiondefs=\lastsectiondefs
-  \domark
-  %
-  {%
-    \chapfonts \rmisbold
-    %
-    % Have to define \lastsection before calling \donoderef, because the
-    % xref code eventually uses it.  On the other hand, it has to be called
-    % after \pchapsepmacro, or the headline will change too soon.
-    \gdef\lastsection{#1}%
-    %
-    % Only insert the separating space if we have a chapter/appendix
-    % number, and don't print the unnumbered ``number''.
-    \ifx\temptype\Ynothingkeyword
-      \setbox0 = \hbox{}%
-      \def\toctype{unnchap}%
-    \else\ifx\temptype\Yomitfromtockeyword
-      \setbox0 = \hbox{}% contents like unnumbered, but no toc entry
-      \def\toctype{omit}%
-    \else\ifx\temptype\Yappendixkeyword
-      \setbox0 = \hbox{\putwordAppendix{} #3\enspace}%
-      \def\toctype{app}%
-    \else
-      \setbox0 = \hbox{#3\enspace}%
-      \def\toctype{numchap}%
-    \fi\fi\fi
-    %
-    % Write the toc entry for this chapter.  Must come before the
-    % \donoderef, because we include the current node name in the toc
-    % entry, and \donoderef resets it to empty.
-    \writetocentry{\toctype}{#1}{#3}%
-    %
-    % For pdftex, we have to write out the node definition (aka, make
-    % the pdfdest) after any page break, but before the actual text has
-    % been typeset.  If the destination for the pdf outline is after the
-    % text, then jumping from the outline may wind up with the text not
-    % being visible, for instance under high magnification.
-    \donoderef{#2}%
-    %
-    % Typeset the actual heading.
-    \nobreak % Avoid page breaks at the interline glue.
-    \vbox{\raggedtitlesettings \hangindent=\wd0 \centerparametersmaybe
-          \unhbox0 #1\par}%
-  }%
-  \nobreak\bigskip % no page break after a chapter title
-  \nobreak
-}
-
-% @centerchap -- centered and unnumbered.
-\let\centerparametersmaybe = \relax
-\def\centerparameters{%
-  \advance\rightskip by 3\rightskip
-  \leftskip = \rightskip
-  \parfillskip = 0pt
-}
-
-
-% I don't think this chapter style is supported any more, so I'm not
-% updating it with the new noderef stuff.  We'll see.  --karl, 11aug03.
-%
-\def\setchapterstyle #1 {\csname CHAPF#1\endcsname}
-%
-\def\unnchfopen #1{%
-  \chapoddpage
-  \vbox{\chapfonts \raggedtitlesettings #1\par}%
-  \nobreak\bigskip\nobreak
-}
-\def\chfopen #1#2{\chapoddpage {\chapfonts
-\vbox to 3in{\vfil \hbox to\hsize{\hfil #2} \hbox to\hsize{\hfil #1} \vfil}}%
-\par\penalty 5000 %
-}
-\def\centerchfopen #1{%
-  \chapoddpage
-  \vbox{\chapfonts \raggedtitlesettings \hfill #1\hfill}%
-  \nobreak\bigskip \nobreak
-}
-\def\CHAPFopen{%
-  \global\let\chapmacro=\chfopen
-  \global\let\centerchapmacro=\centerchfopen}
-
-
-% Section titles.  These macros combine the section number parts and
-% call the generic \sectionheading to do the printing.
-%
-\newskip\secheadingskip
-\def\secheadingbreak{\dobreak \secheadingskip{-1000}}
-
-% Subsection titles.
-\newskip\subsecheadingskip
-\def\subsecheadingbreak{\dobreak \subsecheadingskip{-500}}
-
-% Subsubsection titles.
-\def\subsubsecheadingskip{\subsecheadingskip}
-\def\subsubsecheadingbreak{\subsecheadingbreak}
-
-
-% Print any size, any type, section title.
-%
-% #1 is the text of the title,
-% #2 is the section level (sec/subsec/subsubsec),
-% #3 is the section type (Ynumbered, Ynothing, Yappendix, Yomitfromtoc),
-% #4 is the section number.
-%
-\def\seckeyword{sec}
-%
-\def\sectionheading#1#2#3#4{%
-  {%
-    \def\sectionlevel{#2}%
-    \def\temptype{#3}%
-    %
-    % It is ok for the @heading series commands to appear inside an
-    % environment (it's been historically allowed, though the logic is
-    % dubious), but not the others.
-    \ifx\temptype\Yomitfromtockeyword\else
-      \checkenv{}% non-@*heading should not be in an environment.
-    \fi
-    %
-    % Switch to the right set of fonts.
-    \csname #2fonts\endcsname \rmisbold
-    %
-    % Insert first mark before the heading break (see notes for \domark).
-    \let\prevsectiondefs=\lastsectiondefs
-    \ifx\temptype\Ynothingkeyword
-      \ifx\sectionlevel\seckeyword
-        \gdef\lastsectiondefs{\gdef\thissectionname{#1}\gdef\thissectionnum{}%
-                              \gdef\thissection{\thissectionname}}%
-      \fi
-    \else\ifx\temptype\Yomitfromtockeyword
-      % Don't redefine \thissection.
-    \else\ifx\temptype\Yappendixkeyword
-      \ifx\sectionlevel\seckeyword
-        \toks0={#1}%
-        \xdef\lastsectiondefs{%
-          \gdef\noexpand\thissectionname{\the\toks0}%
-          \gdef\noexpand\thissectionnum{#4}%
-          % \noexpand\putwordSection avoids expanding indigestible
-          % commands in some of the translations.
-          \gdef\noexpand\thissection{\noexpand\putwordSection{}
-                                     \noexpand\thissectionnum:
-                                     \noexpand\thissectionname}%
-        }%
-      \fi
-    \else
-      \ifx\sectionlevel\seckeyword
-        \toks0={#1}%
-        \xdef\lastsectiondefs{%
-          \gdef\noexpand\thissectionname{\the\toks0}%
-          \gdef\noexpand\thissectionnum{#4}%
-          % \noexpand\putwordSection avoids expanding indigestible
-          % commands in some of the translations.
-          \gdef\noexpand\thissection{\noexpand\putwordSection{}
-                                     \noexpand\thissectionnum:
-                                     \noexpand\thissectionname}%
-        }%
-      \fi
-    \fi\fi\fi
-    %
-    % Go into vertical mode.  Usually we'll already be there, but we
-    % don't want the following whatsit to end up in a preceding paragraph
-    % if the document didn't happen to have a blank line.
-    \par
-    %
-    % Output the mark.  Pass it through \safewhatsit, to take care of
-    % the preceding space.
-    \safewhatsit\domark
-    %
-    % Insert space above the heading.
-    \csname #2headingbreak\endcsname
-    %
-    % Now the second mark, after the heading break.  No break points
-    % between here and the heading.
-    \global\let\prevsectiondefs=\lastsectiondefs
-    \domark
-    %
-    % Only insert the space after the number if we have a section number.
-    \ifx\temptype\Ynothingkeyword
-      \setbox0 = \hbox{}%
-      \def\toctype{unn}%
-      \gdef\lastsection{#1}%
-    \else\ifx\temptype\Yomitfromtockeyword
-      % for @headings -- no section number, don't include in toc,
-      % and don't redefine \lastsection.
-      \setbox0 = \hbox{}%
-      \def\toctype{omit}%
-      \let\sectionlevel=\empty
-    \else\ifx\temptype\Yappendixkeyword
-      \setbox0 = \hbox{#4\enspace}%
-      \def\toctype{app}%
-      \gdef\lastsection{#1}%
-    \else
-      \setbox0 = \hbox{#4\enspace}%
-      \def\toctype{num}%
-      \gdef\lastsection{#1}%
-    \fi\fi\fi
-    %
-    % Write the toc entry (before \donoderef).  See comments in \chapmacro.
-    \writetocentry{\toctype\sectionlevel}{#1}{#4}%
-    %
-    % Write the node reference (= pdf destination for pdftex).
-    % Again, see comments in \chapmacro.
-    \donoderef{#3}%
-    %
-    % Interline glue will be inserted when the vbox is completed.
-    % That glue will be a valid breakpoint for the page, since it'll be
-    % preceded by a whatsit (usually from the \donoderef, or from the
-    % \writetocentry if there was no node).  We don't want to allow that
-    % break, since then the whatsits could end up on page n while the
-    % section is on page n+1, thus toc/etc. are wrong.  Debian bug 276000.
-    \nobreak
-    %
-    % Output the actual section heading.
-    \vbox{\hyphenpenalty=10000 \tolerance=5000 \parindent=0pt \ptexraggedright
-          \hangindent=\wd0  % zero if no section number
-          \unhbox0 #1}%
-  }%
-  % Add extra space after the heading -- half of whatever came above it.
-  % Don't allow stretch, though.
-  \kern .5 \csname #2headingskip\endcsname
-  %
-  % Do not let the kern be a potential breakpoint, as it would be if it
-  % was followed by glue.
-  \nobreak
-  %
-  % We'll almost certainly start a paragraph next, so don't let that
-  % glue accumulate.  (Not a breakpoint because it's preceded by a
-  % discardable item.)  However, when a paragraph is not started next
-  % (\startdefun, \cartouche, \center, etc.), this needs to be wiped out
-  % or the negative glue will cause weirdly wrong output, typically
-  % obscuring the section heading with something else.
-  \vskip-\parskip
-  %
-  % This is so the last item on the main vertical list is a known
-  % \penalty > 10000, so \startdefun, etc., can recognize the situation
-  % and do the needful.
-  \penalty 10001
-}
-
-
-\message{toc,}
-% Table of contents.
-\newwrite\tocfile
-
-% Write an entry to the toc file, opening it if necessary.
-% Called from @chapter, etc.
-%
-% Example usage: \writetocentry{sec}{Section Name}{\the\chapno.\the\secno}
-% We append the current node name (if any) and page number as additional
-% arguments for the \{chap,sec,...}entry macros which will eventually
-% read this.  The node name is used in the pdf outlines as the
-% destination to jump to.
-%
-% We open the .toc file for writing here instead of at @setfilename (or
-% any other fixed time) so that @contents can be anywhere in the document.
-% But if #1 is `omit', then we don't do anything.  This is used for the
-% table of contents chapter openings themselves.
-%
-\newif\iftocfileopened
-\def\omitkeyword{omit}%
-%
-\def\writetocentry#1#2#3{%
-  \edef\writetoctype{#1}%
-  \ifx\writetoctype\omitkeyword \else
-    \iftocfileopened\else
-      \immediate\openout\tocfile = \jobname.toc
-      \global\tocfileopenedtrue
-    \fi
-    %
-    \iflinks
-      {\atdummies
-       \edef\temp{%
-         \write\tocfile{@#1entry{#2}{#3}{\lastnode}{\noexpand\folio}}}%
-       \temp
-      }%
-    \fi
-  \fi
-  %
-  % Tell \shipout to create a pdf destination on each page, if we're
-  % writing pdf.  These are used in the table of contents.  We can't
-  % just write one on every page because the title pages are numbered
-  % 1 and 2 (the page numbers aren't printed), and so are the first
-  % two pages of the document.  Thus, we'd have two destinations named
-  % `1', and two named `2'.
-  \ifpdf \global\pdfmakepagedesttrue \fi
-}
-
-
-% These characters do not print properly in the Computer Modern roman
-% fonts, so we must take special care.  This is more or less redundant
-% with the Texinfo input format setup at the end of this file.
-%
-\def\activecatcodes{%
-  \catcode`\"=\active
-  \catcode`\$=\active
-  \catcode`\<=\active
-  \catcode`\>=\active
-  \catcode`\\=\active
-  \catcode`\^=\active
-  \catcode`\_=\active
-  \catcode`\|=\active
-  \catcode`\~=\active
-}
-
-
-% Read the toc file, which is essentially Texinfo input.
-\def\readtocfile{%
-  \setupdatafile
-  \activecatcodes
-  \input \tocreadfilename
-}
-
-\newskip\contentsrightmargin \contentsrightmargin=1in
-\newcount\savepageno
-\newcount\lastnegativepageno \lastnegativepageno = -1
-
-% Prepare to read what we've written to \tocfile.
-%
-\def\startcontents#1{%
-  % If @setchapternewpage on, and @headings double, the contents should
-  % start on an odd page, unlike chapters.  Thus, we maintain
-  % \contentsalignmacro in parallel with \pagealignmacro.
-  % From: Torbjorn Granlund <tege@matematik.su.se>
-  \contentsalignmacro
-  \immediate\closeout\tocfile
-  %
-  % Don't need to put `Contents' or `Short Contents' in the headline.
-  % It is abundantly clear what they are.
-  \chapmacro{#1}{Yomitfromtoc}{}%
-  %
-  \savepageno = \pageno
-  \begingroup                  % Set up to handle contents files properly.
-    \raggedbottom              % Worry more about breakpoints than the bottom.
-    \advance\hsize by -\contentsrightmargin % Don't use the full line length.
-    %
-    % Roman numerals for page numbers.
-    \ifnum \pageno>0 \global\pageno = \lastnegativepageno \fi
-}
-
-% redefined for the two-volume lispref.  We always output on
-% \jobname.toc even if this is redefined.
-%
-\def\tocreadfilename{\jobname.toc}
-
-% Normal (long) toc.
-%
-\def\contents{%
-  \startcontents{\putwordTOC}%
-    \openin 1 \tocreadfilename\space
-    \ifeof 1 \else
-      \readtocfile
-    \fi
-    \vfill \eject
-    \contentsalignmacro % in case @setchapternewpage odd is in effect
-    \ifeof 1 \else
-      \pdfmakeoutlines
-    \fi
-    \closein 1
-  \endgroup
-  \lastnegativepageno = \pageno
-  \global\pageno = \savepageno
-}
-
-% And just the chapters.
-\def\summarycontents{%
-  \startcontents{\putwordShortTOC}%
-    %
-    \let\partentry = \shortpartentry
-    \let\numchapentry = \shortchapentry
-    \let\appentry = \shortchapentry
-    \let\unnchapentry = \shortunnchapentry
-    % We want a true roman here for the page numbers.
-    \secfonts
-    \let\rm=\shortcontrm \let\bf=\shortcontbf
-    \let\sl=\shortcontsl \let\tt=\shortconttt
-    \rm
-    \hyphenpenalty = 10000
-    \advance\baselineskip by 1pt % Open it up a little.
-    \def\numsecentry##1##2##3##4{}
-    \let\appsecentry = \numsecentry
-    \let\unnsecentry = \numsecentry
-    \let\numsubsecentry = \numsecentry
-    \let\appsubsecentry = \numsecentry
-    \let\unnsubsecentry = \numsecentry
-    \let\numsubsubsecentry = \numsecentry
-    \let\appsubsubsecentry = \numsecentry
-    \let\unnsubsubsecentry = \numsecentry
-    \openin 1 \tocreadfilename\space
-    \ifeof 1 \else
-      \readtocfile
-    \fi
-    \closein 1
-    \vfill \eject
-    \contentsalignmacro % in case @setchapternewpage odd is in effect
-  \endgroup
-  \lastnegativepageno = \pageno
-  \global\pageno = \savepageno
-}
-\let\shortcontents = \summarycontents
-
-% Typeset the label for a chapter or appendix for the short contents.
-% The arg is, e.g., `A' for an appendix, or `3' for a chapter.
-%
-\def\shortchaplabel#1{%
-  % This space should be enough, since a single number is .5em, and the
-  % widest letter (M) is 1em, at least in the Computer Modern fonts.
-  % But use \hss just in case.
-  % (This space doesn't include the extra space that gets added after
-  % the label; that gets put in by \shortchapentry above.)
-  %
-  % We'd like to right-justify chapter numbers, but that looks strange
-  % with appendix letters.  And right-justifying numbers and
-  % left-justifying letters looks strange when there is less than 10
-  % chapters.  Have to read the whole toc once to know how many chapters
-  % there are before deciding ...
-  \hbox to 1em{#1\hss}%
-}
-
-% These macros generate individual entries in the table of contents.
-% The first argument is the chapter or section name.
-% The last argument is the page number.
-% The arguments in between are the chapter number, section number, ...
-
-% Parts, in the main contents.  Replace the part number, which doesn't
-% exist, with an empty box.  Let's hope all the numbers have the same width.
-% Also ignore the page number, which is conventionally not printed.
-\def\numeralbox{\setbox0=\hbox{8}\hbox to \wd0{\hfil}}
-\def\partentry#1#2#3#4{\dochapentry{\numeralbox\labelspace#1}{}}
-%
-% Parts, in the short toc.
-\def\shortpartentry#1#2#3#4{%
-  \penalty-300
-  \vskip.5\baselineskip plus.15\baselineskip minus.1\baselineskip
-  \shortchapentry{{\bf #1}}{\numeralbox}{}{}%
-}
-
-% Chapters, in the main contents.
-\def\numchapentry#1#2#3#4{\dochapentry{#2\labelspace#1}{#4}}
-%
-% Chapters, in the short toc.
-% See comments in \dochapentry re vbox and related settings.
-\def\shortchapentry#1#2#3#4{%
-  \tocentry{\shortchaplabel{#2}\labelspace #1}{\doshortpageno\bgroup#4\egroup}%
-}
-
-% Appendices, in the main contents.
-% Need the word Appendix, and a fixed-size box.
-%
-\def\appendixbox#1{%
-  % We use M since it's probably the widest letter.
-  \setbox0 = \hbox{\putwordAppendix{} M}%
-  \hbox to \wd0{\putwordAppendix{} #1\hss}}
-%
-\def\appentry#1#2#3#4{\dochapentry{\appendixbox{#2}\labelspace#1}{#4}}
-
-% Unnumbered chapters.
-\def\unnchapentry#1#2#3#4{\dochapentry{#1}{#4}}
-\def\shortunnchapentry#1#2#3#4{\tocentry{#1}{\doshortpageno\bgroup#4\egroup}}
-
-% Sections.
-\def\numsecentry#1#2#3#4{\dosecentry{#2\labelspace#1}{#4}}
-\let\appsecentry=\numsecentry
-\def\unnsecentry#1#2#3#4{\dosecentry{#1}{#4}}
-
-% Subsections.
-\def\numsubsecentry#1#2#3#4{\dosubsecentry{#2\labelspace#1}{#4}}
-\let\appsubsecentry=\numsubsecentry
-\def\unnsubsecentry#1#2#3#4{\dosubsecentry{#1}{#4}}
-
-% And subsubsections.
-\def\numsubsubsecentry#1#2#3#4{\dosubsubsecentry{#2\labelspace#1}{#4}}
-\let\appsubsubsecentry=\numsubsubsecentry
-\def\unnsubsubsecentry#1#2#3#4{\dosubsubsecentry{#1}{#4}}
-
-% This parameter controls the indentation of the various levels.
-% Same as \defaultparindent.
-\newdimen\tocindent \tocindent = 15pt
-
-% Now for the actual typesetting. In all these, #1 is the text and #2 is the
-% page number.
-%
-% If the toc has to be broken over pages, we want it to be at chapters
-% if at all possible; hence the \penalty.
-\def\dochapentry#1#2{%
-   \penalty-300 \vskip1\baselineskip plus.33\baselineskip minus.25\baselineskip
-   \begingroup
-     \chapentryfonts
-     \tocentry{#1}{\dopageno\bgroup#2\egroup}%
-   \endgroup
-   \nobreak\vskip .25\baselineskip plus.1\baselineskip
-}
-
-\def\dosecentry#1#2{\begingroup
-  \secentryfonts \leftskip=\tocindent
-  \tocentry{#1}{\dopageno\bgroup#2\egroup}%
-\endgroup}
-
-\def\dosubsecentry#1#2{\begingroup
-  \subsecentryfonts \leftskip=2\tocindent
-  \tocentry{#1}{\dopageno\bgroup#2\egroup}%
-\endgroup}
-
-\def\dosubsubsecentry#1#2{\begingroup
-  \subsubsecentryfonts \leftskip=3\tocindent
-  \tocentry{#1}{\dopageno\bgroup#2\egroup}%
-\endgroup}
-
-% We use the same \entry macro as for the index entries.
-\let\tocentry = \entry
-
-% Space between chapter (or whatever) number and the title.
-\def\labelspace{\hskip1em \relax}
-
-\def\dopageno#1{{\rm #1}}
-\def\doshortpageno#1{{\rm #1}}
-
-\def\chapentryfonts{\secfonts \rm}
-\def\secentryfonts{\textfonts}
-\def\subsecentryfonts{\textfonts}
-\def\subsubsecentryfonts{\textfonts}
-
-
-\message{environments,}
-% @foo ... @end foo.
-
-% @tex ... @end tex    escapes into raw TeX temporarily.
-% One exception: @ is still an escape character, so that @end tex works.
-% But \@ or @@ will get a plain @ character.
-
-\envdef\tex{%
-  \setupmarkupstyle{tex}%
-  \catcode `\\=0 \catcode `\{=1 \catcode `\}=2
-  \catcode `\$=3 \catcode `\&=4 \catcode `\#=6
-  \catcode `\^=7 \catcode `\_=8 \catcode `\~=\active \let~=\tie
-  \catcode `\%=14
-  \catcode `\+=\other
-  \catcode `\"=\other
-  \catcode `\|=\other
-  \catcode `\<=\other
-  \catcode `\>=\other
-  \catcode `\`=\other
-  \catcode `\'=\other
-  \escapechar=`\\
-  %
-  % ' is active in math mode (mathcode"8000).  So reset it, and all our
-  % other math active characters (just in case), to plain's definitions.
-  \mathactive
-  %
-  \let\b=\ptexb
-  \let\bullet=\ptexbullet
-  \let\c=\ptexc
-  \let\,=\ptexcomma
-  \let\.=\ptexdot
-  \let\dots=\ptexdots
-  \let\equiv=\ptexequiv
-  \let\!=\ptexexclam
-  \let\i=\ptexi
-  \let\indent=\ptexindent
-  \let\noindent=\ptexnoindent
-  \let\{=\ptexlbrace
-  \let\+=\tabalign
-  \let\}=\ptexrbrace
-  \let\/=\ptexslash
-  \let\*=\ptexstar
-  \let\t=\ptext
-  \expandafter \let\csname top\endcsname=\ptextop  % we've made it outer
-  \let\frenchspacing=\plainfrenchspacing
-  %
-  \def\endldots{\mathinner{\ldots\ldots\ldots\ldots}}%
-  \def\enddots{\relax\ifmmode\endldots\else$\mathsurround=0pt \endldots\,$\fi}%
-  \def\@{@}%
-}
-% There is no need to define \Etex.
-
-% Define @lisp ... @end lisp.
-% @lisp environment forms a group so it can rebind things,
-% including the definition of @end lisp (which normally is erroneous).
-
-% Amount to narrow the margins by for @lisp.
-\newskip\lispnarrowing \lispnarrowing=0.4in
-
-% This is the definition that ^^M gets inside @lisp, @example, and other
-% such environments.  \null is better than a space, since it doesn't
-% have any width.
-\def\lisppar{\null\endgraf}
-
-% This space is always present above and below environments.
-\newskip\envskipamount \envskipamount = 0pt
-
-% Make spacing and below environment symmetrical.  We use \parskip here
-% to help in doing that, since in @example-like environments \parskip
-% is reset to zero; thus the \afterenvbreak inserts no space -- but the
-% start of the next paragraph will insert \parskip.
-%
-\def\aboveenvbreak{{%
-  % =10000 instead of <10000 because of a special case in \itemzzz and
-  % \sectionheading, q.v.
-  \ifnum \lastpenalty=10000 \else
-    \advance\envskipamount by \parskip
-    \endgraf
-    \ifdim\lastskip<\envskipamount
-      \removelastskip
-      % it's not a good place to break if the last penalty was \nobreak
-      % or better ...
-      \ifnum\lastpenalty<10000 \penalty-50 \fi
-      \vskip\envskipamount
-    \fi
-  \fi
-}}
-
-\let\afterenvbreak = \aboveenvbreak
-
-% \nonarrowing is a flag.  If "set", @lisp etc don't narrow margins; it will
-% also clear it, so that its embedded environments do the narrowing again.
-\let\nonarrowing=\relax
-
-% @cartouche ... @end cartouche: draw rectangle w/rounded corners around
-% environment contents.
-\font\circle=lcircle10
-\newdimen\circthick
-\newdimen\cartouter\newdimen\cartinner
-\newskip\normbskip\newskip\normpskip\newskip\normlskip
-\circthick=\fontdimen8\circle
-%
-\def\ctl{{\circle\char'013\hskip -6pt}}% 6pt from pl file: 1/2charwidth
-\def\ctr{{\hskip 6pt\circle\char'010}}
-\def\cbl{{\circle\char'012\hskip -6pt}}
-\def\cbr{{\hskip 6pt\circle\char'011}}
-\def\carttop{\hbox to \cartouter{\hskip\lskip
-        \ctl\leaders\hrule height\circthick\hfil\ctr
-        \hskip\rskip}}
-\def\cartbot{\hbox to \cartouter{\hskip\lskip
-        \cbl\leaders\hrule height\circthick\hfil\cbr
-        \hskip\rskip}}
-%
-\newskip\lskip\newskip\rskip
-
-\envdef\cartouche{%
-  \ifhmode\par\fi  % can't be in the midst of a paragraph.
-  \startsavinginserts
-  \lskip=\leftskip \rskip=\rightskip
-  \leftskip=0pt\rightskip=0pt % we want these *outside*.
-  \cartinner=\hsize \advance\cartinner by-\lskip
-  \advance\cartinner by-\rskip
-  \cartouter=\hsize
-  \advance\cartouter by 18.4pt	% allow for 3pt kerns on either
-				% side, and for 6pt waste from
-				% each corner char, and rule thickness
-  \normbskip=\baselineskip \normpskip=\parskip \normlskip=\lineskip
-  %
-  % If this cartouche directly follows a sectioning command, we need the
-  % \parskip glue (backspaced over by default) or the cartouche can
-  % collide with the section heading.
-  \ifnum\lastpenalty>10000 \vskip\parskip \penalty\lastpenalty \fi
-  %
-  \vbox\bgroup
-      \baselineskip=0pt\parskip=0pt\lineskip=0pt
-      \carttop
-      \hbox\bgroup
-	  \hskip\lskip
-	  \vrule\kern3pt
-	  \vbox\bgroup
-	      \kern3pt
-	      \hsize=\cartinner
-	      \baselineskip=\normbskip
-	      \lineskip=\normlskip
-	      \parskip=\normpskip
-	      \vskip -\parskip
-	      \comment % For explanation, see the end of def\group.
-}
-\def\Ecartouche{%
-              \ifhmode\par\fi
-	      \kern3pt
-	  \egroup
-	  \kern3pt\vrule
-	  \hskip\rskip
-      \egroup
-      \cartbot
-  \egroup
-  \checkinserts
-}
-
-
-% This macro is called at the beginning of all the @example variants,
-% inside a group.
-\newdimen\nonfillparindent
-\def\nonfillstart{%
-  \aboveenvbreak
-  \ifdim\hfuzz < 12pt \hfuzz = 12pt \fi % Don't be fussy
-  \sepspaces % Make spaces be word-separators rather than space tokens.
-  \let\par = \lisppar % don't ignore blank lines
-  \obeylines % each line of input is a line of output
-  \parskip = 0pt
-  % Turn off paragraph indentation but redefine \indent to emulate
-  % the normal \indent.
-  \nonfillparindent=\parindent
-  \parindent = 0pt
-  \let\indent\nonfillindent
-  %
-  \emergencystretch = 0pt % don't try to avoid overfull boxes
-  \ifx\nonarrowing\relax
-    \advance \leftskip by \lispnarrowing
-    \exdentamount=\lispnarrowing
-  \else
-    \let\nonarrowing = \relax
-  \fi
-  \let\exdent=\nofillexdent
-}
-
-\begingroup
-\obeyspaces
-% We want to swallow spaces (but not other tokens) after the fake
-% @indent in our nonfill-environments, where spaces are normally
-% active and set to @tie, resulting in them not being ignored after
-% @indent.
-\gdef\nonfillindent{\futurelet\temp\nonfillindentcheck}%
-\gdef\nonfillindentcheck{%
-\ifx\temp %
-\expandafter\nonfillindentgobble%
-\else%
-\leavevmode\nonfillindentbox%
-\fi%
-}%
-\endgroup
-\def\nonfillindentgobble#1{\nonfillindent}
-\def\nonfillindentbox{\hbox to \nonfillparindent{\hss}}
-
-% If you want all examples etc. small: @set dispenvsize small.
-% If you want even small examples the full size: @set dispenvsize nosmall.
-% This affects the following displayed environments:
-%    @example, @display, @format, @lisp
-%
-\def\smallword{small}
-\def\nosmallword{nosmall}
-\let\SETdispenvsize\relax
-\def\setnormaldispenv{%
-  \ifx\SETdispenvsize\smallword
-    % end paragraph for sake of leading, in case document has no blank
-    % line.  This is redundant with what happens in \aboveenvbreak, but
-    % we need to do it before changing the fonts, and it's inconvenient
-    % to change the fonts afterward.
-    \ifnum \lastpenalty=10000 \else \endgraf \fi
-    \smallexamplefonts \rm
-  \fi
-}
-\def\setsmalldispenv{%
-  \ifx\SETdispenvsize\nosmallword
-  \else
-    \ifnum \lastpenalty=10000 \else \endgraf \fi
-    \smallexamplefonts \rm
-  \fi
-}
-
-% We often define two environments, @foo and @smallfoo.
-% Let's do it in one command.  #1 is the env name, #2 the definition.
-\def\makedispenvdef#1#2{%
-  \expandafter\envdef\csname#1\endcsname {\setnormaldispenv #2}%
-  \expandafter\envdef\csname small#1\endcsname {\setsmalldispenv #2}%
-  \expandafter\let\csname E#1\endcsname \afterenvbreak
-  \expandafter\let\csname Esmall#1\endcsname \afterenvbreak
-}
-
-% Define two environment synonyms (#1 and #2) for an environment.
-\def\maketwodispenvdef#1#2#3{%
-  \makedispenvdef{#1}{#3}%
-  \makedispenvdef{#2}{#3}%
-}
-%
-% @lisp: indented, narrowed, typewriter font;
-% @example: same as @lisp.
-%
-% @smallexample and @smalllisp: use smaller fonts.
-% Originally contributed by Pavel@xerox.
-%
-\maketwodispenvdef{lisp}{example}{%
-  \nonfillstart
-  \tt\setupmarkupstyle{example}%
-  \let\kbdfont = \kbdexamplefont % Allow @kbd to do something special.
-  \gobble % eat return
-}
-% @display/@smalldisplay: same as @lisp except keep current font.
-%
-\makedispenvdef{display}{%
-  \nonfillstart
-  \gobble
-}
-
-% @format/@smallformat: same as @display except don't narrow margins.
-%
-\makedispenvdef{format}{%
-  \let\nonarrowing = t%
-  \nonfillstart
-  \gobble
-}
-
-% @flushleft: same as @format, but doesn't obey \SETdispenvsize.
-\envdef\flushleft{%
-  \let\nonarrowing = t%
-  \nonfillstart
-  \gobble
-}
-\let\Eflushleft = \afterenvbreak
-
-% @flushright.
-%
-\envdef\flushright{%
-  \let\nonarrowing = t%
-  \nonfillstart
-  \advance\leftskip by 0pt plus 1fill\relax
-  \gobble
-}
-\let\Eflushright = \afterenvbreak
-
-
-% @raggedright does more-or-less normal line breaking but no right
-% justification.  From plain.tex.  Don't stretch around special
-% characters in urls in this environment, since the stretch at the right
-% should be enough.
-\envdef\raggedright{%
-  \rightskip0pt plus2.4em \spaceskip.3333em \xspaceskip.5em\relax
-  \def\urefprestretchamount{0pt}%
-  \def\urefpoststretchamount{0pt}%
-}
-\let\Eraggedright\par
-
-\envdef\raggedleft{%
-  \parindent=0pt \leftskip0pt plus2em
-  \spaceskip.3333em \xspaceskip.5em \parfillskip=0pt
-  \hbadness=10000 % Last line will usually be underfull, so turn off
-                  % badness reporting.
-}
-\let\Eraggedleft\par
-
-\envdef\raggedcenter{%
-  \parindent=0pt \rightskip0pt plus1em \leftskip0pt plus1em
-  \spaceskip.3333em \xspaceskip.5em \parfillskip=0pt
-  \hbadness=10000 % Last line will usually be underfull, so turn off
-                  % badness reporting.
-}
-\let\Eraggedcenter\par
-
-
-% @quotation does normal linebreaking (hence we can't use \nonfillstart)
-% and narrows the margins.  We keep \parskip nonzero in general, since
-% we're doing normal filling.  So, when using \aboveenvbreak and
-% \afterenvbreak, temporarily make \parskip 0.
-%
-\makedispenvdef{quotation}{\quotationstart}
-%
-\def\quotationstart{%
-  \indentedblockstart % same as \indentedblock, but increase right margin too.
-  \ifx\nonarrowing\relax
-    \advance\rightskip by \lispnarrowing
-  \fi
-  \parsearg\quotationlabel
-}
-
-% We have retained a nonzero parskip for the environment, since we're
-% doing normal filling.
-%
-\def\Equotation{%
-  \par
-  \ifx\quotationauthor\thisisundefined\else
-    % indent a bit.
-    \leftline{\kern 2\leftskip \sl ---\quotationauthor}%
-  \fi
-  {\parskip=0pt \afterenvbreak}%
-}
-\def\Esmallquotation{\Equotation}
-
-% If we're given an argument, typeset it in bold with a colon after.
-\def\quotationlabel#1{%
-  \def\temp{#1}%
-  \ifx\temp\empty \else
-    {\bf #1: }%
-  \fi
-}
-
-% @indentedblock is like @quotation, but indents only on the left and
-% has no optional argument.
-% 
-\makedispenvdef{indentedblock}{\indentedblockstart}
-%
-\def\indentedblockstart{%
-  {\parskip=0pt \aboveenvbreak}% because \aboveenvbreak inserts \parskip
-  \parindent=0pt
-  %
-  % @cartouche defines \nonarrowing to inhibit narrowing at next level down.
-  \ifx\nonarrowing\relax
-    \advance\leftskip by \lispnarrowing
-    \exdentamount = \lispnarrowing
-  \else
-    \let\nonarrowing = \relax
-  \fi
-}
-
-% Keep a nonzero parskip for the environment, since we're doing normal filling.
-%
-\def\Eindentedblock{%
-  \par
-  {\parskip=0pt \afterenvbreak}%
-}
-\def\Esmallindentedblock{\Eindentedblock}
-
-
-% LaTeX-like @verbatim...@end verbatim and @verb{<char>...<char>}
-% If we want to allow any <char> as delimiter,
-% we need the curly braces so that makeinfo sees the @verb command, eg:
-% `@verbx...x' would look like the '@verbx' command.  --janneke@gnu.org
-%
-% [Knuth]: Donald Ervin Knuth, 1996.  The TeXbook.
-%
-% [Knuth] p.344; only we need to do the other characters Texinfo sets
-% active too.  Otherwise, they get lost as the first character on a
-% verbatim line.
-\def\dospecials{%
-  \do\ \do\\\do\{\do\}\do\$\do\&%
-  \do\#\do\^\do\^^K\do\_\do\^^A\do\%\do\~%
-  \do\<\do\>\do\|\do\@\do+\do\"%
-  % Don't do the quotes -- if we do, @set txicodequoteundirected and
-  % @set txicodequotebacktick will not have effect on @verb and
-  % @verbatim, and ?` and !` ligatures won't get disabled.
-  %\do\`\do\'%
-}
-%
-% [Knuth] p. 380
-\def\uncatcodespecials{%
-  \def\do##1{\catcode`##1=\other}\dospecials}
-%
-% Setup for the @verb command.
-%
-% Eight spaces for a tab
-\begingroup
-  \catcode`\^^I=\active
-  \gdef\tabeightspaces{\catcode`\^^I=\active\def^^I{\ \ \ \ \ \ \ \ }}
-\endgroup
-%
-\def\setupverb{%
-  \tt  % easiest (and conventionally used) font for verbatim
-  \def\par{\leavevmode\endgraf}%
-  \setupmarkupstyle{verb}%
-  \tabeightspaces
-  % Respect line breaks,
-  % print special symbols as themselves, and
-  % make each space count
-  % must do in this order:
-  \obeylines \uncatcodespecials \sepspaces
-}
-
-% Setup for the @verbatim environment
-%
-% Real tab expansion.
-\newdimen\tabw \setbox0=\hbox{\tt\space} \tabw=8\wd0 % tab amount
-%
-% We typeset each line of the verbatim in an \hbox, so we can handle
-% tabs.  The \global is in case the verbatim line starts with an accent,
-% or some other command that starts with a begin-group.  Otherwise, the
-% entire \verbbox would disappear at the corresponding end-group, before
-% it is typeset.  Meanwhile, we can't have nested verbatim commands
-% (can we?), so the \global won't be overwriting itself.
-\newbox\verbbox
-\def\starttabbox{\global\setbox\verbbox=\hbox\bgroup}
-%
-\begingroup
-  \catcode`\^^I=\active
-  \gdef\tabexpand{%
-    \catcode`\^^I=\active
-    \def^^I{\leavevmode\egroup
-      \dimen\verbbox=\wd\verbbox % the width so far, or since the previous tab
-      \divide\dimen\verbbox by\tabw
-      \multiply\dimen\verbbox by\tabw % compute previous multiple of \tabw
-      \advance\dimen\verbbox by\tabw  % advance to next multiple of \tabw
-      \wd\verbbox=\dimen\verbbox \box\verbbox \starttabbox
-    }%
-  }
-\endgroup
-
-% start the verbatim environment.
-\def\setupverbatim{%
-  \let\nonarrowing = t%
-  \nonfillstart
-  \tt % easiest (and conventionally used) font for verbatim
-  % The \leavevmode here is for blank lines.  Otherwise, we would
-  % never \starttabox and the \egroup would end verbatim mode.
-  \def\par{\leavevmode\egroup\box\verbbox\endgraf}%
-  \tabexpand
-  \setupmarkupstyle{verbatim}%
-  % Respect line breaks,
-  % print special symbols as themselves, and
-  % make each space count.
-  % Must do in this order:
-  \obeylines \uncatcodespecials \sepspaces
-  \everypar{\starttabbox}%
-}
-
-% Do the @verb magic: verbatim text is quoted by unique
-% delimiter characters.  Before first delimiter expect a
-% right brace, after last delimiter expect closing brace:
-%
-%    \def\doverb'{'<char>#1<char>'}'{#1}
-%
-% [Knuth] p. 382; only eat outer {}
-\begingroup
-  \catcode`[=1\catcode`]=2\catcode`\{=\other\catcode`\}=\other
-  \gdef\doverb{#1[\def\next##1#1}[##1\endgroup]\next]
-\endgroup
-%
-\def\verb{\begingroup\setupverb\doverb}
-%
-%
-% Do the @verbatim magic: define the macro \doverbatim so that
-% the (first) argument ends when '@end verbatim' is reached, ie:
-%
-%     \def\doverbatim#1@end verbatim{#1}
-%
-% For Texinfo it's a lot easier than for LaTeX,
-% because texinfo's \verbatim doesn't stop at '\end{verbatim}':
-% we need not redefine '\', '{' and '}'.
-%
-% Inspired by LaTeX's verbatim command set [latex.ltx]
-%
-\begingroup
-  \catcode`\ =\active
-  \obeylines %
-  % ignore everything up to the first ^^M, that's the newline at the end
-  % of the @verbatim input line itself.  Otherwise we get an extra blank
-  % line in the output.
-  \xdef\doverbatim#1^^M#2@end verbatim{#2\noexpand\end\gobble verbatim}%
-  % We really want {...\end verbatim} in the body of the macro, but
-  % without the active space; thus we have to use \xdef and \gobble.
-\endgroup
-%
-\envdef\verbatim{%
-    \setupverbatim\doverbatim
-}
-\let\Everbatim = \afterenvbreak
-
-
-% @verbatiminclude FILE - insert text of file in verbatim environment.
-%
-\def\verbatiminclude{\parseargusing\filenamecatcodes\doverbatiminclude}
-%
-\def\doverbatiminclude#1{%
-  {%
-    \makevalueexpandable
-    \setupverbatim
-    \indexnofonts       % Allow `@@' and other weird things in file names.
-    \wlog{texinfo.tex: doing @verbatiminclude of #1^^J}%
-    \input #1
-    \afterenvbreak
-  }%
-}
-
-% @copying ... @end copying.
-% Save the text away for @insertcopying later.
-%
-% We save the uninterpreted tokens, rather than creating a box.
-% Saving the text in a box would be much easier, but then all the
-% typesetting commands (@smallbook, font changes, etc.) have to be done
-% beforehand -- and a) we want @copying to be done first in the source
-% file; b) letting users define the frontmatter in as flexible order as
-% possible is very desirable.
-%
-\def\copying{\checkenv{}\begingroup\scanargctxt\docopying}
-\def\docopying#1@end copying{\endgroup\def\copyingtext{#1}}
-%
-\def\insertcopying{%
-  \begingroup
-    \parindent = 0pt  % paragraph indentation looks wrong on title page
-    \scanexp\copyingtext
-  \endgroup
-}
-
-
-\message{defuns,}
-% @defun etc.
-
-\newskip\defbodyindent \defbodyindent=.4in
-\newskip\defargsindent \defargsindent=50pt
-\newskip\deflastargmargin \deflastargmargin=18pt
-\newcount\defunpenalty
-
-% Start the processing of @deffn:
-\def\startdefun{%
-  \ifnum\lastpenalty<10000
-    \medbreak
-    \defunpenalty=10003 % Will keep this @deffn together with the
-                        % following @def command, see below.
-  \else
-    % If there are two @def commands in a row, we'll have a \nobreak,
-    % which is there to keep the function description together with its
-    % header.  But if there's nothing but headers, we need to allow a
-    % break somewhere.  Check specifically for penalty 10002, inserted
-    % by \printdefunline, instead of 10000, since the sectioning
-    % commands also insert a nobreak penalty, and we don't want to allow
-    % a break between a section heading and a defun.
-    %
-    % As a further refinement, we avoid "club" headers by signalling
-    % with penalty of 10003 after the very first @deffn in the
-    % sequence (see above), and penalty of 10002 after any following
-    % @def command.
-    \ifnum\lastpenalty=10002 \penalty2000 \else \defunpenalty=10002 \fi
-    %
-    % Similarly, after a section heading, do not allow a break.
-    % But do insert the glue.
-    \medskip  % preceded by discardable penalty, so not a breakpoint
-  \fi
-  %
-  \parindent=0in
-  \advance\leftskip by \defbodyindent
-  \exdentamount=\defbodyindent
-}
-
-\def\dodefunx#1{%
-  % First, check whether we are in the right environment:
-  \checkenv#1%
-  %
-  % As above, allow line break if we have multiple x headers in a row.
-  % It's not a great place, though.
-  \ifnum\lastpenalty=10002 \penalty3000 \else \defunpenalty=10002 \fi
-  %
-  % And now, it's time to reuse the body of the original defun:
-  \expandafter\gobbledefun#1%
-}
-\def\gobbledefun#1\startdefun{}
-
-% \printdefunline \deffnheader{text}
-%
-\def\printdefunline#1#2{%
-  \begingroup
-    % call \deffnheader:
-    #1#2 \endheader
-    % common ending:
-    \interlinepenalty = 10000
-    \advance\rightskip by 0pt plus 1fil\relax
-    \endgraf
-    \nobreak\vskip -\parskip
-    \penalty\defunpenalty  % signal to \startdefun and \dodefunx
-    % Some of the @defun-type tags do not enable magic parentheses,
-    % rendering the following check redundant.  But we don't optimize.
-    \checkparencounts
-  \endgroup
-}
-
-\def\Edefun{\endgraf\medbreak}
-
-% \makedefun{deffn} creates \deffn, \deffnx and \Edeffn;
-% the only thing remaining is to define \deffnheader.
-%
-\def\makedefun#1{%
-  \expandafter\let\csname E#1\endcsname = \Edefun
-  \edef\temp{\noexpand\domakedefun
-    \makecsname{#1}\makecsname{#1x}\makecsname{#1header}}%
-  \temp
-}
-
-% \domakedefun \deffn \deffnx \deffnheader
-%
-% Define \deffn and \deffnx, without parameters.
-% \deffnheader has to be defined explicitly.
-%
-\def\domakedefun#1#2#3{%
-  \envdef#1{%
-    \startdefun
-    \doingtypefnfalse    % distinguish typed functions from all else
-    \parseargusing\activeparens{\printdefunline#3}%
-  }%
-  \def#2{\dodefunx#1}%
-  \def#3%
-}
-
-\newif\ifdoingtypefn       % doing typed function?
-\newif\ifrettypeownline    % typeset return type on its own line?
-
-% @deftypefnnewline on|off says whether the return type of typed functions
-% are printed on their own line.  This affects @deftypefn, @deftypefun,
-% @deftypeop, and @deftypemethod.
-% 
-\parseargdef\deftypefnnewline{%
-  \def\temp{#1}%
-  \ifx\temp\onword
-    \expandafter\let\csname SETtxideftypefnnl\endcsname
-      = \empty
-  \else\ifx\temp\offword
-    \expandafter\let\csname SETtxideftypefnnl\endcsname
-      = \relax
-  \else
-    \errhelp = \EMsimple
-    \errmessage{Unknown @txideftypefnnl value `\temp',
-                must be on|off}%
-  \fi\fi
-}
-
-% Untyped functions:
-
-% @deffn category name args
-\makedefun{deffn}{\deffngeneral{}}
-
-% @deffn category class name args
-\makedefun{defop}#1 {\defopon{#1\ \putwordon}}
-
-% \defopon {category on}class name args
-\def\defopon#1#2 {\deffngeneral{\putwordon\ \code{#2}}{#1\ \code{#2}} }
-
-% \deffngeneral {subind}category name args
-%
-\def\deffngeneral#1#2 #3 #4\endheader{%
-  % Remember that \dosubind{fn}{foo}{} is equivalent to \doind{fn}{foo}.
-  \dosubind{fn}{\code{#3}}{#1}%
-  \defname{#2}{}{#3}\magicamp\defunargs{#4\unskip}%
-}
-
-% Typed functions:
-
-% @deftypefn category type name args
-\makedefun{deftypefn}{\deftypefngeneral{}}
-
-% @deftypeop category class type name args
-\makedefun{deftypeop}#1 {\deftypeopon{#1\ \putwordon}}
-
-% \deftypeopon {category on}class type name args
-\def\deftypeopon#1#2 {\deftypefngeneral{\putwordon\ \code{#2}}{#1\ \code{#2}} }
-
-% \deftypefngeneral {subind}category type name args
-%
-\def\deftypefngeneral#1#2 #3 #4 #5\endheader{%
-  \dosubind{fn}{\code{#4}}{#1}%
-  \doingtypefntrue
-  \defname{#2}{#3}{#4}\defunargs{#5\unskip}%
-}
-
-% Typed variables:
-
-% @deftypevr category type var args
-\makedefun{deftypevr}{\deftypecvgeneral{}}
-
-% @deftypecv category class type var args
-\makedefun{deftypecv}#1 {\deftypecvof{#1\ \putwordof}}
-
-% \deftypecvof {category of}class type var args
-\def\deftypecvof#1#2 {\deftypecvgeneral{\putwordof\ \code{#2}}{#1\ \code{#2}} }
-
-% \deftypecvgeneral {subind}category type var args
-%
-\def\deftypecvgeneral#1#2 #3 #4 #5\endheader{%
-  \dosubind{vr}{\code{#4}}{#1}%
-  \defname{#2}{#3}{#4}\defunargs{#5\unskip}%
-}
-
-% Untyped variables:
-
-% @defvr category var args
-\makedefun{defvr}#1 {\deftypevrheader{#1} {} }
-
-% @defcv category class var args
-\makedefun{defcv}#1 {\defcvof{#1\ \putwordof}}
-
-% \defcvof {category of}class var args
-\def\defcvof#1#2 {\deftypecvof{#1}#2 {} }
-
-% Types:
-
-% @deftp category name args
-\makedefun{deftp}#1 #2 #3\endheader{%
-  \doind{tp}{\code{#2}}%
-  \defname{#1}{}{#2}\defunargs{#3\unskip}%
-}
-
-% Remaining @defun-like shortcuts:
-\makedefun{defun}{\deffnheader{\putwordDeffunc} }
-\makedefun{defmac}{\deffnheader{\putwordDefmac} }
-\makedefun{defspec}{\deffnheader{\putwordDefspec} }
-\makedefun{deftypefun}{\deftypefnheader{\putwordDeffunc} }
-\makedefun{defvar}{\defvrheader{\putwordDefvar} }
-\makedefun{defopt}{\defvrheader{\putwordDefopt} }
-\makedefun{deftypevar}{\deftypevrheader{\putwordDefvar} }
-\makedefun{defmethod}{\defopon\putwordMethodon}
-\makedefun{deftypemethod}{\deftypeopon\putwordMethodon}
-\makedefun{defivar}{\defcvof\putwordInstanceVariableof}
-\makedefun{deftypeivar}{\deftypecvof\putwordInstanceVariableof}
-
-% \defname, which formats the name of the @def (not the args).
-% #1 is the category, such as "Function".
-% #2 is the return type, if any.
-% #3 is the function name.
-%
-% We are followed by (but not passed) the arguments, if any.
-%
-\def\defname#1#2#3{%
-  \par
-  % Get the values of \leftskip and \rightskip as they were outside the @def...
-  \advance\leftskip by -\defbodyindent
-  %
-  % Determine if we are typesetting the return type of a typed function
-  % on a line by itself.
-  \rettypeownlinefalse
-  \ifdoingtypefn  % doing a typed function specifically?
-    % then check user option for putting return type on its own line:
-    \expandafter\ifx\csname SETtxideftypefnnl\endcsname\relax \else
-      \rettypeownlinetrue
-    \fi
-  \fi
-  %
-  % How we'll format the category name.  Putting it in brackets helps
-  % distinguish it from the body text that may end up on the next line
-  % just below it.
-  \def\temp{#1}%
-  \setbox0=\hbox{\kern\deflastargmargin \ifx\temp\empty\else [\rm\temp]\fi}
-  %
-  % Figure out line sizes for the paragraph shape.  We'll always have at
-  % least two.
-  \tempnum = 2
-  %
-  % The first line needs space for \box0; but if \rightskip is nonzero,
-  % we need only space for the part of \box0 which exceeds it:
-  \dimen0=\hsize  \advance\dimen0 by -\wd0  \advance\dimen0 by \rightskip
-  %
-  % If doing a return type on its own line, we'll have another line.
-  \ifrettypeownline
-    \advance\tempnum by 1
-    \def\maybeshapeline{0in \hsize}%
-  \else
-    \def\maybeshapeline{}%
-  \fi
-  %
-  % The continuations:
-  \dimen2=\hsize  \advance\dimen2 by -\defargsindent
-  %
-  % The final paragraph shape:
-  \parshape \tempnum  0in \dimen0  \maybeshapeline  \defargsindent \dimen2
-  %
-  % Put the category name at the right margin.
-  \noindent
-  \hbox to 0pt{%
-    \hfil\box0 \kern-\hsize
-    % \hsize has to be shortened this way:
-    \kern\leftskip
-    % Intentionally do not respect \rightskip, since we need the space.
-  }%
-  %
-  % Allow all lines to be underfull without complaint:
-  \tolerance=10000 \hbadness=10000
-  \exdentamount=\defbodyindent
-  {%
-    % defun fonts. We use typewriter by default (used to be bold) because:
-    % . we're printing identifiers, they should be in tt in principle.
-    % . in languages with many accents, such as Czech or French, it's
-    %   common to leave accents off identifiers.  The result looks ok in
-    %   tt, but exceedingly strange in rm.
-    % . we don't want -- and --- to be treated as ligatures.
-    % . this still does not fix the ?` and !` ligatures, but so far no
-    %   one has made identifiers using them :).
-    \df \tt
-    \def\temp{#2}% text of the return type
-    \ifx\temp\empty\else
-      \tclose{\temp}% typeset the return type
-      \ifrettypeownline
-        % put return type on its own line; prohibit line break following:
-        \hfil\vadjust{\nobreak}\break  
-      \else
-        \space  % type on same line, so just followed by a space
-      \fi
-    \fi           % no return type
-    #3% output function name
-  }%
-  {\rm\enskip}% hskip 0.5 em of \tenrm
-  %
-  \boldbrax
-  % arguments will be output next, if any.
-}
-
-% Print arguments in slanted roman (not ttsl), inconsistently with using
-% tt for the name.  This is because literal text is sometimes needed in
-% the argument list (groff manual), and ttsl and tt are not very
-% distinguishable.  Prevent hyphenation at `-' chars.
-%
-\def\defunargs#1{%
-  % use sl by default (not ttsl),
-  % tt for the names.
-  \df \sl \hyphenchar\font=0
-  %
-  % On the other hand, if an argument has two dashes (for instance), we
-  % want a way to get ttsl.  We used to recommend @var for that, so
-  % leave the code in, but it's strange for @var to lead to typewriter.
-  % Nowadays we recommend @code, since the difference between a ttsl hyphen
-  % and a tt hyphen is pretty tiny.  @code also disables ?` !`.
-  \def\var##1{{\setupmarkupstyle{var}\ttslanted{##1}}}%
-  #1%
-  \sl\hyphenchar\font=45
-}
-
-% We want ()&[] to print specially on the defun line.
-%
-\def\activeparens{%
-  \catcode`\(=\active \catcode`\)=\active
-  \catcode`\[=\active \catcode`\]=\active
-  \catcode`\&=\active
-}
-
-% Make control sequences which act like normal parenthesis chars.
-\let\lparen = ( \let\rparen = )
-
-% Be sure that we always have a definition for `(', etc.  For example,
-% if the fn name has parens in it, \boldbrax will not be in effect yet,
-% so TeX would otherwise complain about undefined control sequence.
-{
-  \activeparens
-  \global\let(=\lparen \global\let)=\rparen
-  \global\let[=\lbrack \global\let]=\rbrack
-  \global\let& = \&
-
-  \gdef\boldbrax{\let(=\opnr\let)=\clnr\let[=\lbrb\let]=\rbrb}
-  \gdef\magicamp{\let&=\amprm}
-}
-
-\newcount\parencount
-
-% If we encounter &foo, then turn on ()-hacking afterwards
-\newif\ifampseen
-\def\amprm#1 {\ampseentrue{\bf\&#1 }}
-
-\def\parenfont{%
-  \ifampseen
-    % At the first level, print parens in roman,
-    % otherwise use the default font.
-    \ifnum \parencount=1 \rm \fi
-  \else
-    % The \sf parens (in \boldbrax) actually are a little bolder than
-    % the contained text.  This is especially needed for [ and ] .
-    \sf
-  \fi
-}
-\def\infirstlevel#1{%
-  \ifampseen
-    \ifnum\parencount=1
-      #1%
-    \fi
-  \fi
-}
-\def\bfafterword#1 {#1 \bf}
-
-\def\opnr{%
-  \global\advance\parencount by 1
-  {\parenfont(}%
-  \infirstlevel \bfafterword
-}
-\def\clnr{%
-  {\parenfont)}%
-  \infirstlevel \sl
-  \global\advance\parencount by -1
-}
-
-\newcount\brackcount
-\def\lbrb{%
-  \global\advance\brackcount by 1
-  {\bf[}%
-}
-\def\rbrb{%
-  {\bf]}%
-  \global\advance\brackcount by -1
-}
-
-\def\checkparencounts{%
-  \ifnum\parencount=0 \else \badparencount \fi
-  \ifnum\brackcount=0 \else \badbrackcount \fi
-}
-% these should not use \errmessage; the glibc manual, at least, actually
-% has such constructs (when documenting function pointers).
-\def\badparencount{%
-  \message{Warning: unbalanced parentheses in @def...}%
-  \global\parencount=0
-}
-\def\badbrackcount{%
-  \message{Warning: unbalanced square brackets in @def...}%
-  \global\brackcount=0
-}
-
-
-\message{macros,}
-% @macro.
-
-% To do this right we need a feature of e-TeX, \scantokens,
-% which we arrange to emulate with a temporary file in ordinary TeX.
-\ifx\eTeXversion\thisisundefined
-  \newwrite\macscribble
-  \def\scantokens#1{%
-    \toks0={#1}%
-    \immediate\openout\macscribble=\jobname.tmp
-    \immediate\write\macscribble{\the\toks0}%
-    \immediate\closeout\macscribble
-    \input \jobname.tmp
-  }
-\fi
-
-\def\scanmacro#1{\begingroup
-  \newlinechar`\^^M
-  \let\xeatspaces\eatspaces
-  %
-  % Undo catcode changes of \startcontents and \doprintindex
-  % When called from @insertcopying or (short)caption, we need active
-  % backslash to get it printed correctly.  Previously, we had
-  % \catcode`\\=\other instead.  We'll see whether a problem appears
-  % with macro expansion.				--kasal, 19aug04
-  \catcode`\@=0 \catcode`\\=\active \escapechar=`\@
-  %
-  % ... and for \example:
-  \spaceisspace
-  %
-  % The \empty here causes a following catcode 5 newline to be eaten as
-  % part of reading whitespace after a control sequence.  It does not
-  % eat a catcode 13 newline.  There's no good way to handle the two
-  % cases (untried: maybe e-TeX's \everyeof could help, though plain TeX
-  % would then have different behavior).  See the Macro Details node in
-  % the manual for the workaround we recommend for macros and
-  % line-oriented commands.
-  % 
-  \scantokens{#1\empty}%
-\endgroup}
-
-\def\scanexp#1{%
-  \edef\temp{\noexpand\scanmacro{#1}}%
-  \temp
-}
-
-\newcount\paramno   % Count of parameters
-\newtoks\macname    % Macro name
-\newif\ifrecursive  % Is it recursive?
-
-% List of all defined macros in the form
-%    \definedummyword\macro1\definedummyword\macro2...
-% Currently is also contains all @aliases; the list can be split
-% if there is a need.
-\def\macrolist{}
-
-% Add the macro to \macrolist
-\def\addtomacrolist#1{\expandafter \addtomacrolistxxx \csname#1\endcsname}
-\def\addtomacrolistxxx#1{%
-     \toks0 = \expandafter{\macrolist\definedummyword#1}%
-     \xdef\macrolist{\the\toks0}%
-}
-
-% Utility routines.
-% This does \let #1 = #2, with \csnames; that is,
-%   \let \csname#1\endcsname = \csname#2\endcsname
-% (except of course we have to play expansion games).
-%
-\def\cslet#1#2{%
-  \expandafter\let
-  \csname#1\expandafter\endcsname
-  \csname#2\endcsname
-}
-
-% Trim leading and trailing spaces off a string.
-% Concepts from aro-bend problem 15 (see CTAN).
-{\catcode`\@=11
-\gdef\eatspaces #1{\expandafter\trim@\expandafter{#1 }}
-\gdef\trim@ #1{\trim@@ @#1 @ #1 @ @@}
-\gdef\trim@@ #1@ #2@ #3@@{\trim@@@\empty #2 @}
-\def\unbrace#1{#1}
-\unbrace{\gdef\trim@@@ #1 } #2@{#1}
-}
-
-% Trim a single trailing ^^M off a string.
-{\catcode`\^^M=\other \catcode`\Q=3%
-\gdef\eatcr #1{\eatcra #1Q^^MQ}%
-\gdef\eatcra#1^^MQ{\eatcrb#1Q}%
-\gdef\eatcrb#1Q#2Q{#1}%
-}
-
-% Macro bodies are absorbed as an argument in a context where
-% all characters are catcode 10, 11 or 12, except \ which is active
-% (as in normal texinfo). It is necessary to change the definition of \
-% to recognize macro arguments; this is the job of \mbodybackslash.
-%
-% Non-ASCII encodings make 8-bit characters active, so un-activate
-% them to avoid their expansion.  Must do this non-globally, to
-% confine the change to the current group.
-%
-% It's necessary to have hard CRs when the macro is executed. This is
-% done by making ^^M (\endlinechar) catcode 12 when reading the macro
-% body, and then making it the \newlinechar in \scanmacro.
-%
-\def\scanctxt{% used as subroutine
-  \catcode`\"=\other
-  \catcode`\+=\other
-  \catcode`\<=\other
-  \catcode`\>=\other
-  \catcode`\@=\other
-  \catcode`\^=\other
-  \catcode`\_=\other
-  \catcode`\|=\other
-  \catcode`\~=\other
-  \ifx\declaredencoding\ascii \else \setnonasciicharscatcodenonglobal\other \fi
-}
-
-\def\scanargctxt{% used for copying and captions, not macros.
-  \scanctxt
-  \catcode`\\=\other
-  \catcode`\^^M=\other
-}
-
-\def\macrobodyctxt{% used for @macro definitions
-  \scanctxt
-  \catcode`\{=\other
-  \catcode`\}=\other
-  \catcode`\^^M=\other
-  \usembodybackslash
-}
-
-\def\macroargctxt{% used when scanning invocations
-  \scanctxt
-  \catcode`\\=0
-}
-% why catcode 0 for \ in the above?  To recognize \\ \{ \} as "escapes"
-% for the single characters \ { }.  Thus, we end up with the "commands"
-% that would be written @\ @{ @} in a Texinfo document.
-% 
-% We already have @{ and @}.  For @\, we define it here, and only for
-% this purpose, to produce a typewriter backslash (so, the @\ that we
-% define for @math can't be used with @macro calls):
-%
-\def\\{\normalbackslash}%
-% 
-% We would like to do this for \, too, since that is what makeinfo does.
-% But it is not possible, because Texinfo already has a command @, for a
-% cedilla accent.  Documents must use @comma{} instead.
-%
-% \anythingelse will almost certainly be an error of some kind.
-
-
-% \mbodybackslash is the definition of \ in @macro bodies.
-% It maps \foo\ => \csname macarg.foo\endcsname => #N
-% where N is the macro parameter number.
-% We define \csname macarg.\endcsname to be \realbackslash, so
-% \\ in macro replacement text gets you a backslash.
-%
-{\catcode`@=0 @catcode`@\=@active
- @gdef@usembodybackslash{@let\=@mbodybackslash}
- @gdef@mbodybackslash#1\{@csname macarg.#1@endcsname}
-}
-\expandafter\def\csname macarg.\endcsname{\realbackslash}
-
-\def\margbackslash#1{\char`\#1 }
-
-\def\macro{\recursivefalse\parsearg\macroxxx}
-\def\rmacro{\recursivetrue\parsearg\macroxxx}
-
-\def\macroxxx#1{%
-  \getargs{#1}% now \macname is the macname and \argl the arglist
-  \ifx\argl\empty       % no arguments
-     \paramno=0\relax
-  \else
-     \expandafter\parsemargdef \argl;%
-     \if\paramno>256\relax
-       \ifx\eTeXversion\thisisundefined
-         \errhelp = \EMsimple
-         \errmessage{You need eTeX to compile a file with macros with more than 256 arguments}
-       \fi
-     \fi
-  \fi
-  \if1\csname ismacro.\the\macname\endcsname
-     \message{Warning: redefining \the\macname}%
-  \else
-     \expandafter\ifx\csname \the\macname\endcsname \relax
-     \else \errmessage{Macro name \the\macname\space already defined}\fi
-     \global\cslet{macsave.\the\macname}{\the\macname}%
-     \global\expandafter\let\csname ismacro.\the\macname\endcsname=1%
-     \addtomacrolist{\the\macname}%
-  \fi
-  \begingroup \macrobodyctxt
-  \ifrecursive \expandafter\parsermacbody
-  \else \expandafter\parsemacbody
-  \fi}
-
-\parseargdef\unmacro{%
-  \if1\csname ismacro.#1\endcsname
-    \global\cslet{#1}{macsave.#1}%
-    \global\expandafter\let \csname ismacro.#1\endcsname=0%
-    % Remove the macro name from \macrolist:
-    \begingroup
-      \expandafter\let\csname#1\endcsname \relax
-      \let\definedummyword\unmacrodo
-      \xdef\macrolist{\macrolist}%
-    \endgroup
-  \else
-    \errmessage{Macro #1 not defined}%
-  \fi
-}
-
-% Called by \do from \dounmacro on each macro.  The idea is to omit any
-% macro definitions that have been changed to \relax.
-%
-\def\unmacrodo#1{%
-  \ifx #1\relax
-    % remove this
-  \else
-    \noexpand\definedummyword \noexpand#1%
-  \fi
-}
-
-% This makes use of the obscure feature that if the last token of a
-% <parameter list> is #, then the preceding argument is delimited by
-% an opening brace, and that opening brace is not consumed.
-\def\getargs#1{\getargsxxx#1{}}
-\def\getargsxxx#1#{\getmacname #1 \relax\getmacargs}
-\def\getmacname#1 #2\relax{\macname={#1}}
-\def\getmacargs#1{\def\argl{#1}}
-
-% For macro processing make @ a letter so that we can make Texinfo private macro names.
-\edef\texiatcatcode{\the\catcode`\@}
-\catcode `@=11\relax
-
-% Parse the optional {params} list.  Set up \paramno and \paramlist
-% so \defmacro knows what to do.  Define \macarg.BLAH for each BLAH
-% in the params list to some hook where the argument is to be expanded.  If
-% there are less than 10 arguments that hook is to be replaced by ##N where N
-% is the position in that list, that is to say the macro arguments are to be
-% defined `a la TeX in the macro body.  
-%
-% That gets used by \mbodybackslash (above).
-%
-% We need to get `macro parameter char #' into several definitions.
-% The technique used is stolen from LaTeX: let \hash be something
-% unexpandable, insert that wherever you need a #, and then redefine
-% it to # just before using the token list produced.
-%
-% The same technique is used to protect \eatspaces till just before
-% the macro is used.
-%
-% If there are 10 or more arguments, a different technique is used, where the
-% hook remains in the body, and when macro is to be expanded the body is
-% processed again to replace the arguments.
-%
-% In that case, the hook is \the\toks N-1, and we simply set \toks N-1 to the
-% argument N value and then \edef  the body (nothing else will expand because of
-% the catcode regime underwhich the body was input).
-%
-% If you compile with TeX (not eTeX), and you have macros with 10 or more
-% arguments, you need that no macro has more than 256 arguments, otherwise an
-% error is produced.
-\def\parsemargdef#1;{%
-  \paramno=0\def\paramlist{}%
-  \let\hash\relax
-  \let\xeatspaces\relax
-  \parsemargdefxxx#1,;,%
-  % In case that there are 10 or more arguments we parse again the arguments
-  % list to set new definitions for the \macarg.BLAH macros corresponding to
-  % each BLAH argument. It was anyhow needed to parse already once this list
-  % in order to count the arguments, and as macros with at most 9 arguments
-  % are by far more frequent than macro with 10 or more arguments, defining
-  % twice the \macarg.BLAH macros does not cost too much processing power.
-  \ifnum\paramno<10\relax\else
-    \paramno0\relax
-    \parsemmanyargdef@@#1,;,% 10 or more arguments
-  \fi
-}
-\def\parsemargdefxxx#1,{%
-  \if#1;\let\next=\relax
-  \else \let\next=\parsemargdefxxx
-    \advance\paramno by 1
-    \expandafter\edef\csname macarg.\eatspaces{#1}\endcsname
-        {\xeatspaces{\hash\the\paramno}}%
-    \edef\paramlist{\paramlist\hash\the\paramno,}%
-  \fi\next}
-
-\def\parsemmanyargdef@@#1,{%
-  \if#1;\let\next=\relax
-  \else 
-    \let\next=\parsemmanyargdef@@
-    \edef\tempb{\eatspaces{#1}}%
-    \expandafter\def\expandafter\tempa
-       \expandafter{\csname macarg.\tempb\endcsname}%
-    % Note that we need some extra \noexpand\noexpand, this is because we
-    % don't want \the  to be expanded in the \parsermacbody  as it uses an
-    % \xdef .
-    \expandafter\edef\tempa
-      {\noexpand\noexpand\noexpand\the\toks\the\paramno}%
-    \advance\paramno by 1\relax
-  \fi\next}
-
-% These two commands read recursive and nonrecursive macro bodies.
-% (They're different since rec and nonrec macros end differently.)
-%
-
-\catcode `\@\texiatcatcode
-\long\def\parsemacbody#1@end macro%
-{\xdef\temp{\eatcr{#1}}\endgroup\defmacro}%
-\long\def\parsermacbody#1@end rmacro%
-{\xdef\temp{\eatcr{#1}}\endgroup\defmacro}%
-\catcode `\@=11\relax
-
-\let\endargs@\relax
-\let\nil@\relax
-\def\nilm@{\nil@}%
-\long\def\nillm@{\nil@}%
-
-% This macro is expanded during the Texinfo macro expansion, not during its
-% definition.  It gets all the arguments values and assigns them to macros
-% macarg.ARGNAME
-%
-% #1 is the macro name
-% #2 is the list of argument names
-% #3 is the list of argument values
-\def\getargvals@#1#2#3{%
-  \def\macargdeflist@{}%
-  \def\saveparamlist@{#2}% Need to keep a copy for parameter expansion.
-  \def\paramlist{#2,\nil@}%
-  \def\macroname{#1}%
-  \begingroup
-  \macroargctxt
-  \def\argvaluelist{#3,\nil@}%
-  \def\@tempa{#3}%
-  \ifx\@tempa\empty
-    \setemptyargvalues@
-  \else
-    \getargvals@@
-  \fi
-}
-
-% 
-\def\getargvals@@{%
-  \ifx\paramlist\nilm@
-      % Some sanity check needed here that \argvaluelist is also empty.
-      \ifx\argvaluelist\nillm@
-      \else
-        \errhelp = \EMsimple
-        \errmessage{Too many arguments in macro `\macroname'!}%
-      \fi
-      \let\next\macargexpandinbody@
-  \else
-    \ifx\argvaluelist\nillm@
-       % No more arguments values passed to macro.  Set remaining named-arg
-       % macros to empty.
-       \let\next\setemptyargvalues@
-    \else
-      % pop current arg name into \@tempb
-      \def\@tempa##1{\pop@{\@tempb}{\paramlist}##1\endargs@}%
-      \expandafter\@tempa\expandafter{\paramlist}%
-       % pop current argument value into \@tempc
-      \def\@tempa##1{\longpop@{\@tempc}{\argvaluelist}##1\endargs@}%
-      \expandafter\@tempa\expandafter{\argvaluelist}%
-       % Here \@tempb is the current arg name and \@tempc is the current arg value.
-       % First place the new argument macro definition into \@tempd
-       \expandafter\macname\expandafter{\@tempc}%
-       \expandafter\let\csname macarg.\@tempb\endcsname\relax
-       \expandafter\def\expandafter\@tempe\expandafter{%
-         \csname macarg.\@tempb\endcsname}%
-       \edef\@tempd{\long\def\@tempe{\the\macname}}%
-       \push@\@tempd\macargdeflist@
-       \let\next\getargvals@@
-    \fi
-  \fi
-  \next
-}
-
-\def\push@#1#2{%
-  \expandafter\expandafter\expandafter\def
-  \expandafter\expandafter\expandafter#2%
-  \expandafter\expandafter\expandafter{%
-  \expandafter#1#2}%
-}
-
-% Replace arguments by their values in the macro body, and place the result
-% in macro \@tempa
-\def\macvalstoargs@{%
-  %  To do this we use the property that token registers that are \the'ed
-  % within an \edef  expand only once. So we are going to place all argument
-  % values into respective token registers.
-  %
-  % First we save the token context, and initialize argument numbering.
-  \begingroup
-    \paramno0\relax
-    % Then, for each argument number #N, we place the corresponding argument
-    % value into a new token list register \toks#N
-    \expandafter\putargsintokens@\saveparamlist@,;,%
-    % Then, we expand the body so that argument are replaced by their
-    % values. The trick for values not to be expanded themselves is that they
-    % are within tokens and that tokens expand only once in an \edef .
-    \edef\@tempc{\csname mac.\macroname .body\endcsname}%
-    % Now we restore the token stack pointer to free the token list registers
-    % which we have used, but we make sure that expanded body is saved after
-    % group.
-    \expandafter
-  \endgroup
-  \expandafter\def\expandafter\@tempa\expandafter{\@tempc}%
-  }
-
-\def\macargexpandinbody@{% 
-  %% Define the named-macro outside of this group and then close this group. 
-  \expandafter
-  \endgroup
-  \macargdeflist@
-  % First the replace in body the macro arguments by their values, the result
-  % is in \@tempa .
-  \macvalstoargs@
-  % Then we point at the \norecurse or \gobble (for recursive) macro value
-  % with \@tempb .
-  \expandafter\let\expandafter\@tempb\csname mac.\macroname .recurse\endcsname
-  % Depending on whether it is recursive or not, we need some tailing
-  % \egroup .
-  \ifx\@tempb\gobble
-     \let\@tempc\relax
-  \else
-     \let\@tempc\egroup
-  \fi
-  % And now we do the real job:
-  \edef\@tempd{\noexpand\@tempb{\macroname}\noexpand\scanmacro{\@tempa}\@tempc}%
-  \@tempd
-}
-
-\def\putargsintokens@#1,{%
-  \if#1;\let\next\relax
-  \else
-    \let\next\putargsintokens@
-    % First we allocate the new token list register, and give it a temporary
-    % alias \@tempb .
-    \toksdef\@tempb\the\paramno
-    % Then we place the argument value into that token list register.
-    \expandafter\let\expandafter\@tempa\csname macarg.#1\endcsname
-    \expandafter\@tempb\expandafter{\@tempa}%
-    \advance\paramno by 1\relax
-  \fi
-  \next
-}
-
-% Save the token stack pointer into macro #1
-\def\texisavetoksstackpoint#1{\edef#1{\the\@cclvi}}
-% Restore the token stack pointer from number in macro #1
-\def\texirestoretoksstackpoint#1{\expandafter\mathchardef\expandafter\@cclvi#1\relax}
-% newtoks that can be used non \outer .
-\def\texinonouternewtoks{\alloc@ 5\toks \toksdef \@cclvi}
-
-% Tailing missing arguments are set to empty
-\def\setemptyargvalues@{%
-  \ifx\paramlist\nilm@
-    \let\next\macargexpandinbody@
-  \else
-    \expandafter\setemptyargvaluesparser@\paramlist\endargs@
-    \let\next\setemptyargvalues@
-  \fi
-  \next
-}
-
-\def\setemptyargvaluesparser@#1,#2\endargs@{%
-  \expandafter\def\expandafter\@tempa\expandafter{%
-    \expandafter\def\csname macarg.#1\endcsname{}}%
-  \push@\@tempa\macargdeflist@
-  \def\paramlist{#2}%
-}
-
-% #1 is the element target macro
-% #2 is the list macro
-% #3,#4\endargs@ is the list value
-\def\pop@#1#2#3,#4\endargs@{%
-   \def#1{#3}%
-   \def#2{#4}%
-}
-\long\def\longpop@#1#2#3,#4\endargs@{%
-   \long\def#1{#3}%
-   \long\def#2{#4}%
-}
-
-% This defines a Texinfo @macro. There are eight cases: recursive and
-% nonrecursive macros of zero, one, up to nine, and many arguments.
-% Much magic with \expandafter here.
-% \xdef is used so that macro definitions will survive the file
-% they're defined in; @include reads the file inside a group.
-%
-\def\defmacro{%
-  \let\hash=##% convert placeholders to macro parameter chars
-  \ifrecursive
-    \ifcase\paramno
-    % 0
-      \expandafter\xdef\csname\the\macname\endcsname{%
-        \noexpand\scanmacro{\temp}}%
-    \or % 1
-      \expandafter\xdef\csname\the\macname\endcsname{%
-         \bgroup\noexpand\macroargctxt
-         \noexpand\braceorline
-         \expandafter\noexpand\csname\the\macname xxx\endcsname}%
-      \expandafter\xdef\csname\the\macname xxx\endcsname##1{%
-         \egroup\noexpand\scanmacro{\temp}}%
-    \else
-      \ifnum\paramno<10\relax % at most 9
-        \expandafter\xdef\csname\the\macname\endcsname{%
-           \bgroup\noexpand\macroargctxt
-           \noexpand\csname\the\macname xx\endcsname}%
-        \expandafter\xdef\csname\the\macname xx\endcsname##1{%
-            \expandafter\noexpand\csname\the\macname xxx\endcsname ##1,}%
-        \expandafter\expandafter
-        \expandafter\xdef
-        \expandafter\expandafter
-          \csname\the\macname xxx\endcsname
-            \paramlist{\egroup\noexpand\scanmacro{\temp}}%
-      \else % 10 or more
-        \expandafter\xdef\csname\the\macname\endcsname{%
-          \noexpand\getargvals@{\the\macname}{\argl}%
-        }%    
-        \global\expandafter\let\csname mac.\the\macname .body\endcsname\temp
-        \global\expandafter\let\csname mac.\the\macname .recurse\endcsname\gobble
-      \fi
-    \fi
-  \else
-    \ifcase\paramno
-    % 0
-      \expandafter\xdef\csname\the\macname\endcsname{%
-        \noexpand\norecurse{\the\macname}%
-        \noexpand\scanmacro{\temp}\egroup}%
-    \or % 1
-      \expandafter\xdef\csname\the\macname\endcsname{%
-         \bgroup\noexpand\macroargctxt
-         \noexpand\braceorline
-         \expandafter\noexpand\csname\the\macname xxx\endcsname}%
-      \expandafter\xdef\csname\the\macname xxx\endcsname##1{%
-        \egroup
-        \noexpand\norecurse{\the\macname}%
-        \noexpand\scanmacro{\temp}\egroup}%
-    \else % at most 9
-      \ifnum\paramno<10\relax
-        \expandafter\xdef\csname\the\macname\endcsname{%
-           \bgroup\noexpand\macroargctxt
-           \expandafter\noexpand\csname\the\macname xx\endcsname}%
-        \expandafter\xdef\csname\the\macname xx\endcsname##1{%
-            \expandafter\noexpand\csname\the\macname xxx\endcsname ##1,}%
-        \expandafter\expandafter
-        \expandafter\xdef
-        \expandafter\expandafter
-        \csname\the\macname xxx\endcsname
-        \paramlist{%
-            \egroup
-            \noexpand\norecurse{\the\macname}%
-            \noexpand\scanmacro{\temp}\egroup}%
-      \else % 10 or more:
-        \expandafter\xdef\csname\the\macname\endcsname{%
-          \noexpand\getargvals@{\the\macname}{\argl}%
-        }%
-        \global\expandafter\let\csname mac.\the\macname .body\endcsname\temp
-        \global\expandafter\let\csname mac.\the\macname .recurse\endcsname\norecurse
-      \fi
-    \fi
-  \fi}
-
-\catcode `\@\texiatcatcode\relax
-
-\def\norecurse#1{\bgroup\cslet{#1}{macsave.#1}}
-
-% \braceorline decides whether the next nonwhitespace character is a
-% {.  If so it reads up to the closing }, if not, it reads the whole
-% line.  Whatever was read is then fed to the next control sequence
-% as an argument (by \parsebrace or \parsearg).
-% 
-\def\braceorline#1{\let\macnamexxx=#1\futurelet\nchar\braceorlinexxx}
-\def\braceorlinexxx{%
-  \ifx\nchar\bgroup\else
-    \expandafter\parsearg
-  \fi \macnamexxx}
-
-
-% @alias.
-% We need some trickery to remove the optional spaces around the equal
-% sign.  Make them active and then expand them all to nothing.
-%
-\def\alias{\parseargusing\obeyspaces\aliasxxx}
-\def\aliasxxx #1{\aliasyyy#1\relax}
-\def\aliasyyy #1=#2\relax{%
-  {%
-    \expandafter\let\obeyedspace=\empty
-    \addtomacrolist{#1}%
-    \xdef\next{\global\let\makecsname{#1}=\makecsname{#2}}%
-  }%
-  \next
-}
-
-
-\message{cross references,}
-
-\newwrite\auxfile
-\newif\ifhavexrefs    % True if xref values are known.
-\newif\ifwarnedxrefs  % True if we warned once that they aren't known.
-
-% @inforef is relatively simple.
-\def\inforef #1{\inforefzzz #1,,,,**}
-\def\inforefzzz #1,#2,#3,#4**{%
-  \putwordSee{} \putwordInfo{} \putwordfile{} \file{\ignorespaces #3{}},
-  node \samp{\ignorespaces#1{}}}
-
-% @node's only job in TeX is to define \lastnode, which is used in
-% cross-references.  The @node line might or might not have commas, and
-% might or might not have spaces before the first comma, like:
-% @node foo , bar , ...
-% We don't want such trailing spaces in the node name.
-%
-\parseargdef\node{\checkenv{}\donode #1 ,\finishnodeparse}
-%
-% also remove a trailing comma, in case of something like this:
-% @node Help-Cross,  ,  , Cross-refs
-\def\donode#1 ,#2\finishnodeparse{\dodonode #1,\finishnodeparse}
-\def\dodonode#1,#2\finishnodeparse{\gdef\lastnode{#1}}
-
-\let\nwnode=\node
-\let\lastnode=\empty
-
-% Write a cross-reference definition for the current node.  #1 is the
-% type (Ynumbered, Yappendix, Ynothing).
-%
-\def\donoderef#1{%
-  \ifx\lastnode\empty\else
-    \setref{\lastnode}{#1}%
-    \global\let\lastnode=\empty
-  \fi
-}
-
-% @anchor{NAME} -- define xref target at arbitrary point.
-%
-\newcount\savesfregister
-%
-\def\savesf{\relax \ifhmode \savesfregister=\spacefactor \fi}
-\def\restoresf{\relax \ifhmode \spacefactor=\savesfregister \fi}
-\def\anchor#1{\savesf \setref{#1}{Ynothing}\restoresf \ignorespaces}
-
-% \setref{NAME}{SNT} defines a cross-reference point NAME (a node or an
-% anchor), which consists of three parts:
-% 1) NAME-title - the current sectioning name taken from \lastsection,
-%                 or the anchor name.
-% 2) NAME-snt   - section number and type, passed as the SNT arg, or
-%                 empty for anchors.
-% 3) NAME-pg    - the page number.
-%
-% This is called from \donoderef, \anchor, and \dofloat.  In the case of
-% floats, there is an additional part, which is not written here:
-% 4) NAME-lof   - the text as it should appear in a @listoffloats.
-%
-\def\setref#1#2{%
-  \pdfmkdest{#1}%
-  \iflinks
-    {%
-      \atdummies  % preserve commands, but don't expand them
-      \edef\writexrdef##1##2{%
-	\write\auxfile{@xrdef{#1-% #1 of \setref, expanded by the \edef
-	  ##1}{##2}}% these are parameters of \writexrdef
-      }%
-      \toks0 = \expandafter{\lastsection}%
-      \immediate \writexrdef{title}{\the\toks0 }%
-      \immediate \writexrdef{snt}{\csname #2\endcsname}% \Ynumbered etc.
-      \safewhatsit{\writexrdef{pg}{\folio}}% will be written later, at \shipout
-    }%
-  \fi
-}
-
-% @xrefautosectiontitle on|off says whether @section(ing) names are used
-% automatically in xrefs, if the third arg is not explicitly specified.
-% This was provided as a "secret" @set xref-automatic-section-title
-% variable, now it's official.
-% 
-\parseargdef\xrefautomaticsectiontitle{%
-  \def\temp{#1}%
-  \ifx\temp\onword
-    \expandafter\let\csname SETxref-automatic-section-title\endcsname
-      = \empty
-  \else\ifx\temp\offword
-    \expandafter\let\csname SETxref-automatic-section-title\endcsname
-      = \relax
-  \else
-    \errhelp = \EMsimple
-    \errmessage{Unknown @xrefautomaticsectiontitle value `\temp',
-                must be on|off}%
-  \fi\fi
-}
-
-% 
-% @xref, @pxref, and @ref generate cross-references.  For \xrefX, #1 is
-% the node name, #2 the name of the Info cross-reference, #3 the printed
-% node name, #4 the name of the Info file, #5 the name of the printed
-% manual.  All but the node name can be omitted.
-%
-\def\pxref#1{\putwordsee{} \xrefX[#1,,,,,,,]}
-\def\xref#1{\putwordSee{} \xrefX[#1,,,,,,,]}
-\def\ref#1{\xrefX[#1,,,,,,,]}
-%
-\newbox\toprefbox
-\newbox\printedrefnamebox
-\newbox\infofilenamebox
-\newbox\printedmanualbox
-%
-\def\xrefX[#1,#2,#3,#4,#5,#6]{\begingroup
-  \unsepspaces
-  %
-  % Get args without leading/trailing spaces.
-  \def\printedrefname{\ignorespaces #3}%
-  \setbox\printedrefnamebox = \hbox{\printedrefname\unskip}%
-  %
-  \def\infofilename{\ignorespaces #4}%
-  \setbox\infofilenamebox = \hbox{\infofilename\unskip}%
-  %
-  \def\printedmanual{\ignorespaces #5}%
-  \setbox\printedmanualbox  = \hbox{\printedmanual\unskip}%
-  %
-  % If the printed reference name (arg #3) was not explicitly given in
-  % the @xref, figure out what we want to use.
-  \ifdim \wd\printedrefnamebox = 0pt
-    % No printed node name was explicitly given.
-    \expandafter\ifx\csname SETxref-automatic-section-title\endcsname \relax
-      % Not auto section-title: use node name inside the square brackets.
-      \def\printedrefname{\ignorespaces #1}%
-    \else
-      % Auto section-title: use chapter/section title inside
-      % the square brackets if we have it.
-      \ifdim \wd\printedmanualbox > 0pt
-        % It is in another manual, so we don't have it; use node name.
-        \def\printedrefname{\ignorespaces #1}%
-      \else
-        \ifhavexrefs
-          % We (should) know the real title if we have the xref values.
-          \def\printedrefname{\refx{#1-title}{}}%
-        \else
-          % Otherwise just copy the Info node name.
-          \def\printedrefname{\ignorespaces #1}%
-        \fi%
-      \fi
-    \fi
-  \fi
-  %
-  % Make link in pdf output.
-  \ifpdf
-    {\indexnofonts
-     \turnoffactive
-     \makevalueexpandable
-     % This expands tokens, so do it after making catcode changes, so _
-     % etc. don't get their TeX definitions.  This ignores all spaces in
-     % #4, including (wrongly) those in the middle of the filename.
-     \getfilename{#4}%
-     %
-     % This (wrongly) does not take account of leading or trailing
-     % spaces in #1, which should be ignored.
-     \edef\pdfxrefdest{#1}%
-     \ifx\pdfxrefdest\empty
-       \def\pdfxrefdest{Top}% no empty targets
-     \else
-       \txiescapepdf\pdfxrefdest  % escape PDF special chars
-     \fi
-     %
-     \leavevmode
-     \startlink attr{/Border [0 0 0]}%
-     \ifnum\filenamelength>0
-       goto file{\the\filename.pdf} name{\pdfxrefdest}%
-     \else
-       goto name{\pdfmkpgn{\pdfxrefdest}}%
-     \fi
-    }%
-    \setcolor{\linkcolor}%
-  \fi
-  %
-  % Float references are printed completely differently: "Figure 1.2"
-  % instead of "[somenode], p.3".  We distinguish them by the
-  % LABEL-title being set to a magic string.
-  {%
-    % Have to otherify everything special to allow the \csname to
-    % include an _ in the xref name, etc.
-    \indexnofonts
-    \turnoffactive
-    \expandafter\global\expandafter\let\expandafter\Xthisreftitle
-      \csname XR#1-title\endcsname
-  }%
-  \iffloat\Xthisreftitle
-    % If the user specified the print name (third arg) to the ref,
-    % print it instead of our usual "Figure 1.2".
-    \ifdim\wd\printedrefnamebox = 0pt
-      \refx{#1-snt}{}%
-    \else
-      \printedrefname
-    \fi
-    %
-    % If the user also gave the printed manual name (fifth arg), append
-    % "in MANUALNAME".
-    \ifdim \wd\printedmanualbox > 0pt
-      \space \putwordin{} \cite{\printedmanual}%
-    \fi
-  \else
-    % node/anchor (non-float) references.
-    % 
-    % If we use \unhbox to print the node names, TeX does not insert
-    % empty discretionaries after hyphens, which means that it will not
-    % find a line break at a hyphen in a node names.  Since some manuals
-    % are best written with fairly long node names, containing hyphens,
-    % this is a loss.  Therefore, we give the text of the node name
-    % again, so it is as if TeX is seeing it for the first time.
-    % 
-    \ifdim \wd\printedmanualbox > 0pt
-      % Cross-manual reference with a printed manual name.
-      % 
-      \crossmanualxref{\cite{\printedmanual\unskip}}%
-    %
-    \else\ifdim \wd\infofilenamebox > 0pt
-      % Cross-manual reference with only an info filename (arg 4), no
-      % printed manual name (arg 5).  This is essentially the same as
-      % the case above; we output the filename, since we have nothing else.
-      % 
-      \crossmanualxref{\code{\infofilename\unskip}}%
-    %
-    \else
-      % Reference within this manual.
-      %
-      % _ (for example) has to be the character _ for the purposes of the
-      % control sequence corresponding to the node, but it has to expand
-      % into the usual \leavevmode...\vrule stuff for purposes of
-      % printing. So we \turnoffactive for the \refx-snt, back on for the
-      % printing, back off for the \refx-pg.
-      {\turnoffactive
-       % Only output a following space if the -snt ref is nonempty; for
-       % @unnumbered and @anchor, it won't be.
-       \setbox2 = \hbox{\ignorespaces \refx{#1-snt}{}}%
-       \ifdim \wd2 > 0pt \refx{#1-snt}\space\fi
-      }%
-      % output the `[mynode]' via the macro below so it can be overridden.
-      \xrefprintnodename\printedrefname
-      %
-      % But we always want a comma and a space:
-      ,\space
-      %
-      % output the `page 3'.
-      \turnoffactive \putwordpage\tie\refx{#1-pg}{}%
-    \fi\fi
-  \fi
-  \endlink
-\endgroup}
-
-% Output a cross-manual xref to #1.  Used just above (twice).
-% 
-% Only include the text "Section ``foo'' in" if the foo is neither
-% missing or Top.  Thus, @xref{,,,foo,The Foo Manual} outputs simply
-% "see The Foo Manual", the idea being to refer to the whole manual.
-% 
-% But, this being TeX, we can't easily compare our node name against the
-% string "Top" while ignoring the possible spaces before and after in
-% the input.  By adding the arbitrary 7sp below, we make it much less
-% likely that a real node name would have the same width as "Top" (e.g.,
-% in a monospaced font).  Hopefully it will never happen in practice.
-% 
-% For the same basic reason, we retypeset the "Top" at every
-% reference, since the current font is indeterminate.
-% 
-\def\crossmanualxref#1{%
-  \setbox\toprefbox = \hbox{Top\kern7sp}%
-  \setbox2 = \hbox{\ignorespaces \printedrefname \unskip \kern7sp}%
-  \ifdim \wd2 > 7sp  % nonempty?
-    \ifdim \wd2 = \wd\toprefbox \else  % same as Top?
-      \putwordSection{} ``\printedrefname'' \putwordin{}\space
-    \fi
-  \fi
-  #1%
-}
-
-% This macro is called from \xrefX for the `[nodename]' part of xref
-% output.  It's a separate macro only so it can be changed more easily,
-% since square brackets don't work well in some documents.  Particularly
-% one that Bob is working on :).
-%
-\def\xrefprintnodename#1{[#1]}
-
-% Things referred to by \setref.
-%
-\def\Ynothing{}
-\def\Yomitfromtoc{}
-\def\Ynumbered{%
-  \ifnum\secno=0
-    \putwordChapter@tie \the\chapno
-  \else \ifnum\subsecno=0
-    \putwordSection@tie \the\chapno.\the\secno
-  \else \ifnum\subsubsecno=0
-    \putwordSection@tie \the\chapno.\the\secno.\the\subsecno
-  \else
-    \putwordSection@tie \the\chapno.\the\secno.\the\subsecno.\the\subsubsecno
-  \fi\fi\fi
-}
-\def\Yappendix{%
-  \ifnum\secno=0
-     \putwordAppendix@tie @char\the\appendixno{}%
-  \else \ifnum\subsecno=0
-     \putwordSection@tie @char\the\appendixno.\the\secno
-  \else \ifnum\subsubsecno=0
-    \putwordSection@tie @char\the\appendixno.\the\secno.\the\subsecno
-  \else
-    \putwordSection@tie
-      @char\the\appendixno.\the\secno.\the\subsecno.\the\subsubsecno
-  \fi\fi\fi
-}
-
-% Define \refx{NAME}{SUFFIX} to reference a cross-reference string named NAME.
-% If its value is nonempty, SUFFIX is output afterward.
-%
-\def\refx#1#2{%
-  {%
-    \indexnofonts
-    \otherbackslash
-    \expandafter\global\expandafter\let\expandafter\thisrefX
-      \csname XR#1\endcsname
-  }%
-  \ifx\thisrefX\relax
-    % If not defined, say something at least.
-    \angleleft un\-de\-fined\angleright
-    \iflinks
-      \ifhavexrefs
-        {\toks0 = {#1}% avoid expansion of possibly-complex value
-         \message{\linenumber Undefined cross reference `\the\toks0'.}}%
-      \else
-        \ifwarnedxrefs\else
-          \global\warnedxrefstrue
-          \message{Cross reference values unknown; you must run TeX again.}%
-        \fi
-      \fi
-    \fi
-  \else
-    % It's defined, so just use it.
-    \thisrefX
-  \fi
-  #2% Output the suffix in any case.
-}
-
-% This is the macro invoked by entries in the aux file.  Usually it's
-% just a \def (we prepend XR to the control sequence name to avoid
-% collisions).  But if this is a float type, we have more work to do.
-%
-\def\xrdef#1#2{%
-  {% The node name might contain 8-bit characters, which in our current
-   % implementation are changed to commands like @'e.  Don't let these
-   % mess up the control sequence name.
-    \indexnofonts
-    \turnoffactive
-    \xdef\safexrefname{#1}%
-  }%
-  %
-  \expandafter\gdef\csname XR\safexrefname\endcsname{#2}% remember this xref
-  %
-  % Was that xref control sequence that we just defined for a float?
-  \expandafter\iffloat\csname XR\safexrefname\endcsname
-    % it was a float, and we have the (safe) float type in \iffloattype.
-    \expandafter\let\expandafter\floatlist
-      \csname floatlist\iffloattype\endcsname
-    %
-    % Is this the first time we've seen this float type?
-    \expandafter\ifx\floatlist\relax
-      \toks0 = {\do}% yes, so just \do
-    \else
-      % had it before, so preserve previous elements in list.
-      \toks0 = \expandafter{\floatlist\do}%
-    \fi
-    %
-    % Remember this xref in the control sequence \floatlistFLOATTYPE,
-    % for later use in \listoffloats.
-    \expandafter\xdef\csname floatlist\iffloattype\endcsname{\the\toks0
-      {\safexrefname}}%
-  \fi
-}
-
-% Read the last existing aux file, if any.  No error if none exists.
-%
-\def\tryauxfile{%
-  \openin 1 \jobname.aux
-  \ifeof 1 \else
-    \readdatafile{aux}%
-    \global\havexrefstrue
-  \fi
-  \closein 1
-}
-
-\def\setupdatafile{%
-  \catcode`\^^@=\other
-  \catcode`\^^A=\other
-  \catcode`\^^B=\other
-  \catcode`\^^C=\other
-  \catcode`\^^D=\other
-  \catcode`\^^E=\other
-  \catcode`\^^F=\other
-  \catcode`\^^G=\other
-  \catcode`\^^H=\other
-  \catcode`\^^K=\other
-  \catcode`\^^L=\other
-  \catcode`\^^N=\other
-  \catcode`\^^P=\other
-  \catcode`\^^Q=\other
-  \catcode`\^^R=\other
-  \catcode`\^^S=\other
-  \catcode`\^^T=\other
-  \catcode`\^^U=\other
-  \catcode`\^^V=\other
-  \catcode`\^^W=\other
-  \catcode`\^^X=\other
-  \catcode`\^^Z=\other
-  \catcode`\^^[=\other
-  \catcode`\^^\=\other
-  \catcode`\^^]=\other
-  \catcode`\^^^=\other
-  \catcode`\^^_=\other
-  % It was suggested to set the catcode of ^ to 7, which would allow ^^e4 etc.
-  % in xref tags, i.e., node names.  But since ^^e4 notation isn't
-  % supported in the main text, it doesn't seem desirable.  Furthermore,
-  % that is not enough: for node names that actually contain a ^
-  % character, we would end up writing a line like this: 'xrdef {'hat
-  % b-title}{'hat b} and \xrdef does a \csname...\endcsname on the first
-  % argument, and \hat is not an expandable control sequence.  It could
-  % all be worked out, but why?  Either we support ^^ or we don't.
-  %
-  % The other change necessary for this was to define \auxhat:
-  % \def\auxhat{\def^{'hat }}% extra space so ok if followed by letter
-  % and then to call \auxhat in \setq.
-  %
-  \catcode`\^=\other
-  %
-  % Special characters.  Should be turned off anyway, but...
-  \catcode`\~=\other
-  \catcode`\[=\other
-  \catcode`\]=\other
-  \catcode`\"=\other
-  \catcode`\_=\other
-  \catcode`\|=\other
-  \catcode`\<=\other
-  \catcode`\>=\other
-  \catcode`\$=\other
-  \catcode`\#=\other
-  \catcode`\&=\other
-  \catcode`\%=\other
-  \catcode`+=\other % avoid \+ for paranoia even though we've turned it off
-  %
-  % This is to support \ in node names and titles, since the \
-  % characters end up in a \csname.  It's easier than
-  % leaving it active and making its active definition an actual \
-  % character.  What I don't understand is why it works in the *value*
-  % of the xrdef.  Seems like it should be a catcode12 \, and that
-  % should not typeset properly.  But it works, so I'm moving on for
-  % now.  --karl, 15jan04.
-  \catcode`\\=\other
-  %
-  % Make the characters 128-255 be printing characters.
-  {%
-    \count1=128
-    \def\loop{%
-      \catcode\count1=\other
-      \advance\count1 by 1
-      \ifnum \count1<256 \loop \fi
-    }%
-  }%
-  %
-  % @ is our escape character in .aux files, and we need braces.
-  \catcode`\{=1
-  \catcode`\}=2
-  \catcode`\@=0
-}
-
-\def\readdatafile#1{%
-\begingroup
-  \setupdatafile
-  \input\jobname.#1
-\endgroup}
-
-
-\message{insertions,}
-% including footnotes.
-
-\newcount \footnoteno
-
-% The trailing space in the following definition for supereject is
-% vital for proper filling; pages come out unaligned when you do a
-% pagealignmacro call if that space before the closing brace is
-% removed. (Generally, numeric constants should always be followed by a
-% space to prevent strange expansion errors.)
-\def\supereject{\par\penalty -20000\footnoteno =0 }
-
-% @footnotestyle is meaningful for Info output only.
-\let\footnotestyle=\comment
-
-{\catcode `\@=11
-%
-% Auto-number footnotes.  Otherwise like plain.
-\gdef\footnote{%
-  \let\indent=\ptexindent
-  \let\noindent=\ptexnoindent
-  %
-  \global\advance\footnoteno by \@ne
-  \edef\thisfootno{$^{\the\footnoteno}$}%
-  %
-  % In case the footnote comes at the end of a sentence, preserve the
-  % extra spacing after we do the footnote number.
-  \let\@sf\empty
-  \ifhmode\edef\@sf{\spacefactor\the\spacefactor}\ptexslash\fi
-  %
-  % Remove inadvertent blank space before typesetting the footnote number.
-  \unskip
-  \thisfootno\@sf
-  \dofootnote
-}%
-
-% Don't bother with the trickery in plain.tex to not require the
-% footnote text as a parameter.  Our footnotes don't need to be so general.
-%
-% Oh yes, they do; otherwise, @ifset (and anything else that uses
-% \parseargline) fails inside footnotes because the tokens are fixed when
-% the footnote is read.  --karl, 16nov96.
-%
-\gdef\dofootnote{%
-  \insert\footins\bgroup
-  %
-  % Nested footnotes are not supported in TeX, that would take a lot
-  % more work.  (\startsavinginserts does not suffice.)
-  \let\footnote=\errfootnote
-  %
-  % We want to typeset this text as a normal paragraph, even if the
-  % footnote reference occurs in (for example) a display environment.
-  % So reset some parameters.
-  \hsize=\pagewidth
-  \interlinepenalty\interfootnotelinepenalty
-  \splittopskip\ht\strutbox % top baseline for broken footnotes
-  \splitmaxdepth\dp\strutbox
-  \floatingpenalty\@MM
-  \leftskip\z@skip
-  \rightskip\z@skip
-  \spaceskip\z@skip
-  \xspaceskip\z@skip
-  \parindent\defaultparindent
-  %
-  \smallfonts \rm
-  %
-  % Because we use hanging indentation in footnotes, a @noindent appears
-  % to exdent this text, so make it be a no-op.  makeinfo does not use
-  % hanging indentation so @noindent can still be needed within footnote
-  % text after an @example or the like (not that this is good style).
-  \let\noindent = \relax
-  %
-  % Hang the footnote text off the number.  Use \everypar in case the
-  % footnote extends for more than one paragraph.
-  \everypar = {\hang}%
-  \textindent{\thisfootno}%
-  %
-  % Don't crash into the line above the footnote text.  Since this
-  % expands into a box, it must come within the paragraph, lest it
-  % provide a place where TeX can split the footnote.
-  \footstrut
-  %
-  % Invoke rest of plain TeX footnote routine.
-  \futurelet\next\fo@t
-}
-}%end \catcode `\@=11
-
-\def\errfootnote{%
-  \errhelp=\EMsimple
-  \errmessage{Nested footnotes not supported in texinfo.tex,
-    even though they work in makeinfo; sorry}
-}
-
-% In case a @footnote appears in a vbox, save the footnote text and create
-% the real \insert just after the vbox finished.  Otherwise, the insertion
-% would be lost.
-% Similarly, if a @footnote appears inside an alignment, save the footnote
-% text to a box and make the \insert when a row of the table is finished.
-% And the same can be done for other insert classes.  --kasal, 16nov03.
-%
-% Replace the \insert primitive by a cheating macro.
-% Deeper inside, just make sure that the saved insertions are not spilled
-% out prematurely.
-%
-\def\startsavinginserts{%
-  \ifx \insert\ptexinsert
-    \let\insert\saveinsert
-  \else
-    \let\checkinserts\relax
-  \fi
-}
-
-% This \insert replacement works for both \insert\footins{foo} and
-% \insert\footins\bgroup foo\egroup, but it doesn't work for \insert27{foo}.
-%
-\def\saveinsert#1{%
-  \edef\next{\noexpand\savetobox \makeSAVEname#1}%
-  \afterassignment\next
-  % swallow the left brace
-  \let\temp =
-}
-\def\makeSAVEname#1{\makecsname{SAVE\expandafter\gobble\string#1}}
-\def\savetobox#1{\global\setbox#1 = \vbox\bgroup \unvbox#1}
-
-\def\checksaveins#1{\ifvoid#1\else \placesaveins#1\fi}
-
-\def\placesaveins#1{%
-  \ptexinsert \csname\expandafter\gobblesave\string#1\endcsname
-    {\box#1}%
-}
-
-% eat @SAVE -- beware, all of them have catcode \other:
-{
-  \def\dospecials{\do S\do A\do V\do E} \uncatcodespecials  %  ;-)
-  \gdef\gobblesave @SAVE{}
-}
-
-% initialization:
-\def\newsaveins #1{%
-  \edef\next{\noexpand\newsaveinsX \makeSAVEname#1}%
-  \next
-}
-\def\newsaveinsX #1{%
-  \csname newbox\endcsname #1%
-  \expandafter\def\expandafter\checkinserts\expandafter{\checkinserts
-    \checksaveins #1}%
-}
-
-% initialize:
-\let\checkinserts\empty
-\newsaveins\footins
-\newsaveins\margin
-
-
-% @image.  We use the macros from epsf.tex to support this.
-% If epsf.tex is not installed and @image is used, we complain.
-%
-% Check for and read epsf.tex up front.  If we read it only at @image
-% time, we might be inside a group, and then its definitions would get
-% undone and the next image would fail.
-\openin 1 = epsf.tex
-\ifeof 1 \else
-  % Do not bother showing banner with epsf.tex v2.7k (available in
-  % doc/epsf.tex and on ctan).
-  \def\epsfannounce{\toks0 = }%
-  \input epsf.tex
-\fi
-\closein 1
-%
-% We will only complain once about lack of epsf.tex.
-\newif\ifwarnednoepsf
-\newhelp\noepsfhelp{epsf.tex must be installed for images to
-  work.  It is also included in the Texinfo distribution, or you can get
-  it from ftp://tug.org/tex/epsf.tex.}
-%
-\def\image#1{%
-  \ifx\epsfbox\thisisundefined
-    \ifwarnednoepsf \else
-      \errhelp = \noepsfhelp
-      \errmessage{epsf.tex not found, images will be ignored}%
-      \global\warnednoepsftrue
-    \fi
-  \else
-    \imagexxx #1,,,,,\finish
-  \fi
-}
-%
-% Arguments to @image:
-% #1 is (mandatory) image filename; we tack on .eps extension.
-% #2 is (optional) width, #3 is (optional) height.
-% #4 is (ignored optional) html alt text.
-% #5 is (ignored optional) extension.
-% #6 is just the usual extra ignored arg for parsing stuff.
-\newif\ifimagevmode
-\def\imagexxx#1,#2,#3,#4,#5,#6\finish{\begingroup
-  \catcode`\^^M = 5     % in case we're inside an example
-  \normalturnoffactive  % allow _ et al. in names
-  % If the image is by itself, center it.
-  \ifvmode
-    \imagevmodetrue
-  \else \ifx\centersub\centerV
-    % for @center @image, we need a vbox so we can have our vertical space
-    \imagevmodetrue
-    \vbox\bgroup % vbox has better behavior than vtop herev
-  \fi\fi
-  %
-  \ifimagevmode
-    \nobreak\medskip
-    % Usually we'll have text after the image which will insert
-    % \parskip glue, so insert it here too to equalize the space
-    % above and below.
-    \nobreak\vskip\parskip
-    \nobreak
-  \fi
-  %
-  % Leave vertical mode so that indentation from an enclosing
-  %  environment such as @quotation is respected.
-  % However, if we're at the top level, we don't want the
-  %  normal paragraph indentation.
-  % On the other hand, if we are in the case of @center @image, we don't
-  %  want to start a paragraph, which will create a hsize-width box and
-  %  eradicate the centering.
-  \ifx\centersub\centerV\else \noindent \fi
-  %
-  % Output the image.
-  \ifpdf
-    \dopdfimage{#1}{#2}{#3}%
-  \else
-    % \epsfbox itself resets \epsf?size at each figure.
-    \setbox0 = \hbox{\ignorespaces #2}\ifdim\wd0 > 0pt \epsfxsize=#2\relax \fi
-    \setbox0 = \hbox{\ignorespaces #3}\ifdim\wd0 > 0pt \epsfysize=#3\relax \fi
-    \epsfbox{#1.eps}%
-  \fi
-  %
-  \ifimagevmode
-    \medskip  % space after a standalone image
-  \fi  
-  \ifx\centersub\centerV \egroup \fi
-\endgroup}
-
-
-% @float FLOATTYPE,LABEL,LOC ... @end float for displayed figures, tables,
-% etc.  We don't actually implement floating yet, we always include the
-% float "here".  But it seemed the best name for the future.
-%
-\envparseargdef\float{\eatcommaspace\eatcommaspace\dofloat#1, , ,\finish}
-
-% There may be a space before second and/or third parameter; delete it.
-\def\eatcommaspace#1, {#1,}
-
-% #1 is the optional FLOATTYPE, the text label for this float, typically
-% "Figure", "Table", "Example", etc.  Can't contain commas.  If omitted,
-% this float will not be numbered and cannot be referred to.
-%
-% #2 is the optional xref label.  Also must be present for the float to
-% be referable.
-%
-% #3 is the optional positioning argument; for now, it is ignored.  It
-% will somehow specify the positions allowed to float to (here, top, bottom).
-%
-% We keep a separate counter for each FLOATTYPE, which we reset at each
-% chapter-level command.
-\let\resetallfloatnos=\empty
-%
-\def\dofloat#1,#2,#3,#4\finish{%
-  \let\thiscaption=\empty
-  \let\thisshortcaption=\empty
-  %
-  % don't lose footnotes inside @float.
-  %
-  % BEWARE: when the floats start float, we have to issue warning whenever an
-  % insert appears inside a float which could possibly float. --kasal, 26may04
-  %
-  \startsavinginserts
-  %
-  % We can't be used inside a paragraph.
-  \par
-  %
-  \vtop\bgroup
-    \def\floattype{#1}%
-    \def\floatlabel{#2}%
-    \def\floatloc{#3}% we do nothing with this yet.
-    %
-    \ifx\floattype\empty
-      \let\safefloattype=\empty
-    \else
-      {%
-        % the floattype might have accents or other special characters,
-        % but we need to use it in a control sequence name.
-        \indexnofonts
-        \turnoffactive
-        \xdef\safefloattype{\floattype}%
-      }%
-    \fi
-    %
-    % If label is given but no type, we handle that as the empty type.
-    \ifx\floatlabel\empty \else
-      % We want each FLOATTYPE to be numbered separately (Figure 1,
-      % Table 1, Figure 2, ...).  (And if no label, no number.)
-      %
-      \expandafter\getfloatno\csname\safefloattype floatno\endcsname
-      \global\advance\floatno by 1
-      %
-      {%
-        % This magic value for \lastsection is output by \setref as the
-        % XREFLABEL-title value.  \xrefX uses it to distinguish float
-        % labels (which have a completely different output format) from
-        % node and anchor labels.  And \xrdef uses it to construct the
-        % lists of floats.
-        %
-        \edef\lastsection{\floatmagic=\safefloattype}%
-        \setref{\floatlabel}{Yfloat}%
-      }%
-    \fi
-    %
-    % start with \parskip glue, I guess.
-    \vskip\parskip
-    %
-    % Don't suppress indentation if a float happens to start a section.
-    \restorefirstparagraphindent
-}
-
-% we have these possibilities:
-% @float Foo,lbl & @caption{Cap}: Foo 1.1: Cap
-% @float Foo,lbl & no caption:    Foo 1.1
-% @float Foo & @caption{Cap}:     Foo: Cap
-% @float Foo & no caption:        Foo
-% @float ,lbl & Caption{Cap}:     1.1: Cap
-% @float ,lbl & no caption:       1.1
-% @float & @caption{Cap}:         Cap
-% @float & no caption:
-%
-\def\Efloat{%
-    \let\floatident = \empty
-    %
-    % In all cases, if we have a float type, it comes first.
-    \ifx\floattype\empty \else \def\floatident{\floattype}\fi
-    %
-    % If we have an xref label, the number comes next.
-    \ifx\floatlabel\empty \else
-      \ifx\floattype\empty \else % if also had float type, need tie first.
-        \appendtomacro\floatident{\tie}%
-      \fi
-      % the number.
-      \appendtomacro\floatident{\chaplevelprefix\the\floatno}%
-    \fi
-    %
-    % Start the printed caption with what we've constructed in
-    % \floatident, but keep it separate; we need \floatident again.
-    \let\captionline = \floatident
-    %
-    \ifx\thiscaption\empty \else
-      \ifx\floatident\empty \else
-	\appendtomacro\captionline{: }% had ident, so need a colon between
-      \fi
-      %
-      % caption text.
-      \appendtomacro\captionline{\scanexp\thiscaption}%
-    \fi
-    %
-    % If we have anything to print, print it, with space before.
-    % Eventually this needs to become an \insert.
-    \ifx\captionline\empty \else
-      \vskip.5\parskip
-      \captionline
-      %
-      % Space below caption.
-      \vskip\parskip
-    \fi
-    %
-    % If have an xref label, write the list of floats info.  Do this
-    % after the caption, to avoid chance of it being a breakpoint.
-    \ifx\floatlabel\empty \else
-      % Write the text that goes in the lof to the aux file as
-      % \floatlabel-lof.  Besides \floatident, we include the short
-      % caption if specified, else the full caption if specified, else nothing.
-      {%
-        \atdummies
-        %
-        % since we read the caption text in the macro world, where ^^M
-        % is turned into a normal character, we have to scan it back, so
-        % we don't write the literal three characters "^^M" into the aux file.
-	\scanexp{%
-	  \xdef\noexpand\gtemp{%
-	    \ifx\thisshortcaption\empty
-	      \thiscaption
-	    \else
-	      \thisshortcaption
-	    \fi
-	  }%
-	}%
-        \immediate\write\auxfile{@xrdef{\floatlabel-lof}{\floatident
-	  \ifx\gtemp\empty \else : \gtemp \fi}}%
-      }%
-    \fi
-  \egroup  % end of \vtop
-  %
-  % place the captured inserts
-  %
-  % BEWARE: when the floats start floating, we have to issue warning
-  % whenever an insert appears inside a float which could possibly
-  % float. --kasal, 26may04
-  %
-  \checkinserts
-}
-
-% Append the tokens #2 to the definition of macro #1, not expanding either.
-%
-\def\appendtomacro#1#2{%
-  \expandafter\def\expandafter#1\expandafter{#1#2}%
-}
-
-% @caption, @shortcaption
-%
-\def\caption{\docaption\thiscaption}
-\def\shortcaption{\docaption\thisshortcaption}
-\def\docaption{\checkenv\float \bgroup\scanargctxt\defcaption}
-\def\defcaption#1#2{\egroup \def#1{#2}}
-
-% The parameter is the control sequence identifying the counter we are
-% going to use.  Create it if it doesn't exist and assign it to \floatno.
-\def\getfloatno#1{%
-  \ifx#1\relax
-      % Haven't seen this figure type before.
-      \csname newcount\endcsname #1%
-      %
-      % Remember to reset this floatno at the next chap.
-      \expandafter\gdef\expandafter\resetallfloatnos
-        \expandafter{\resetallfloatnos #1=0 }%
-  \fi
-  \let\floatno#1%
-}
-
-% \setref calls this to get the XREFLABEL-snt value.  We want an @xref
-% to the FLOATLABEL to expand to "Figure 3.1".  We call \setref when we
-% first read the @float command.
-%
-\def\Yfloat{\floattype@tie \chaplevelprefix\the\floatno}%
-
-% Magic string used for the XREFLABEL-title value, so \xrefX can
-% distinguish floats from other xref types.
-\def\floatmagic{!!float!!}
-
-% #1 is the control sequence we are passed; we expand into a conditional
-% which is true if #1 represents a float ref.  That is, the magic
-% \lastsection value which we \setref above.
-%
-\def\iffloat#1{\expandafter\doiffloat#1==\finish}
-%
-% #1 is (maybe) the \floatmagic string.  If so, #2 will be the
-% (safe) float type for this float.  We set \iffloattype to #2.
-%
-\def\doiffloat#1=#2=#3\finish{%
-  \def\temp{#1}%
-  \def\iffloattype{#2}%
-  \ifx\temp\floatmagic
-}
-
-% @listoffloats FLOATTYPE - print a list of floats like a table of contents.
-%
-\parseargdef\listoffloats{%
-  \def\floattype{#1}% floattype
-  {%
-    % the floattype might have accents or other special characters,
-    % but we need to use it in a control sequence name.
-    \indexnofonts
-    \turnoffactive
-    \xdef\safefloattype{\floattype}%
-  }%
-  %
-  % \xrdef saves the floats as a \do-list in \floatlistSAFEFLOATTYPE.
-  \expandafter\ifx\csname floatlist\safefloattype\endcsname \relax
-    \ifhavexrefs
-      % if the user said @listoffloats foo but never @float foo.
-      \message{\linenumber No `\safefloattype' floats to list.}%
-    \fi
-  \else
-    \begingroup
-      \leftskip=\tocindent  % indent these entries like a toc
-      \let\do=\listoffloatsdo
-      \csname floatlist\safefloattype\endcsname
-    \endgroup
-  \fi
-}
-
-% This is called on each entry in a list of floats.  We're passed the
-% xref label, in the form LABEL-title, which is how we save it in the
-% aux file.  We strip off the -title and look up \XRLABEL-lof, which
-% has the text we're supposed to typeset here.
-%
-% Figures without xref labels will not be included in the list (since
-% they won't appear in the aux file).
-%
-\def\listoffloatsdo#1{\listoffloatsdoentry#1\finish}
-\def\listoffloatsdoentry#1-title\finish{{%
-  % Can't fully expand XR#1-lof because it can contain anything.  Just
-  % pass the control sequence.  On the other hand, XR#1-pg is just the
-  % page number, and we want to fully expand that so we can get a link
-  % in pdf output.
-  \toksA = \expandafter{\csname XR#1-lof\endcsname}%
-  %
-  % use the same \entry macro we use to generate the TOC and index.
-  \edef\writeentry{\noexpand\entry{\the\toksA}{\csname XR#1-pg\endcsname}}%
-  \writeentry
-}}
-
-
-\message{localization,}
-
-% For single-language documents, @documentlanguage is usually given very
-% early, just after @documentencoding.  Single argument is the language
-% (de) or locale (de_DE) abbreviation.
-%
-{
-  \catcode`\_ = \active
-  \globaldefs=1
-\parseargdef\documentlanguage{%
-  \tex % read txi-??.tex file in plain TeX.
-    % Read the file by the name they passed if it exists.
-    \let_ = \normalunderscore  % normal _ character for filename test
-    \openin 1 txi-#1.tex
-    \ifeof 1
-      \documentlanguagetrywithoutunderscore #1_\finish
-    \else
-      \globaldefs = 1  % everything in the txi-LL files needs to persist
-      \input txi-#1.tex
-    \fi
-    \closein 1
-  \endgroup % end raw TeX
-}
-%
-% If they passed de_DE, and txi-de_DE.tex doesn't exist,
-% try txi-de.tex.
-%
-\gdef\documentlanguagetrywithoutunderscore#1_#2\finish{%
-  \openin 1 txi-#1.tex
-  \ifeof 1
-    \errhelp = \nolanghelp
-    \errmessage{Cannot read language file txi-#1.tex}%
-  \else
-    \globaldefs = 1  % everything in the txi-LL files needs to persist
-    \input txi-#1.tex
-  \fi
-  \closein 1
-}
-}% end of special _ catcode
-%
-\newhelp\nolanghelp{The given language definition file cannot be found or
-is empty.  Maybe you need to install it?  Putting it in the current
-directory should work if nowhere else does.}
-
-% This macro is called from txi-??.tex files; the first argument is the
-% \language name to set (without the "\lang@" prefix), the second and
-% third args are \{left,right}hyphenmin.
-%
-% The language names to pass are determined when the format is built.
-% See the etex.log file created at that time, e.g.,
-% /usr/local/texlive/2008/texmf-var/web2c/pdftex/etex.log.
-%
-% With TeX Live 2008, etex now includes hyphenation patterns for all
-% available languages.  This means we can support hyphenation in
-% Texinfo, at least to some extent.  (This still doesn't solve the
-% accented characters problem.)
-%
-\catcode`@=11
-\def\txisetlanguage#1#2#3{%
-  % do not set the language if the name is undefined in the current TeX.
-  \expandafter\ifx\csname lang@#1\endcsname \relax
-    \message{no patterns for #1}%
-  \else
-    \global\language = \csname lang@#1\endcsname
-  \fi
-  % but there is no harm in adjusting the hyphenmin values regardless.
-  \global\lefthyphenmin = #2\relax
-  \global\righthyphenmin = #3\relax
-}
-
-% Helpers for encodings.
-% Set the catcode of characters 128 through 255 to the specified number.
-%
-\def\setnonasciicharscatcode#1{%
-   \count255=128
-   \loop\ifnum\count255<256
-      \global\catcode\count255=#1\relax
-      \advance\count255 by 1
-   \repeat
-}
-
-\def\setnonasciicharscatcodenonglobal#1{%
-   \count255=128
-   \loop\ifnum\count255<256
-      \catcode\count255=#1\relax
-      \advance\count255 by 1
-   \repeat
-}
-
-% @documentencoding sets the definition of non-ASCII characters
-% according to the specified encoding.
-%
-\parseargdef\documentencoding{%
-  % Encoding being declared for the document.
-  \def\declaredencoding{\csname #1.enc\endcsname}%
-  %
-  % Supported encodings: names converted to tokens in order to be able
-  % to compare them with \ifx.
-  \def\ascii{\csname US-ASCII.enc\endcsname}%
-  \def\latnine{\csname ISO-8859-15.enc\endcsname}%
-  \def\latone{\csname ISO-8859-1.enc\endcsname}%
-  \def\lattwo{\csname ISO-8859-2.enc\endcsname}%
-  \def\utfeight{\csname UTF-8.enc\endcsname}%
-  %
-  \ifx \declaredencoding \ascii
-     \asciichardefs
-  %
-  \else \ifx \declaredencoding \lattwo
-     \setnonasciicharscatcode\active
-     \lattwochardefs
-  %
-  \else \ifx \declaredencoding \latone
-     \setnonasciicharscatcode\active
-     \latonechardefs
-  %
-  \else \ifx \declaredencoding \latnine
-     \setnonasciicharscatcode\active
-     \latninechardefs
-  %
-  \else \ifx \declaredencoding \utfeight
-     \setnonasciicharscatcode\active
-     \utfeightchardefs
-  %
-  \else
-    \message{Unknown document encoding #1, ignoring.}%
-  %
-  \fi % utfeight
-  \fi % latnine
-  \fi % latone
-  \fi % lattwo
-  \fi % ascii
-}
-
-% A message to be logged when using a character that isn't available
-% the default font encoding (OT1).
-%
-\def\missingcharmsg#1{\message{Character missing in OT1 encoding: #1.}}
-
-% Take account of \c (plain) vs. \, (Texinfo) difference.
-\def\cedilla#1{\ifx\c\ptexc\c{#1}\else\,{#1}\fi}
-
-% First, make active non-ASCII characters in order for them to be
-% correctly categorized when TeX reads the replacement text of
-% macros containing the character definitions.
-\setnonasciicharscatcode\active
-%
-% Latin1 (ISO-8859-1) character definitions.
-\def\latonechardefs{%
-  \gdef^^a0{\tie}
-  \gdef^^a1{\exclamdown}
-  \gdef^^a2{\missingcharmsg{CENT SIGN}}
-  \gdef^^a3{{\pounds}}
-  \gdef^^a4{\missingcharmsg{CURRENCY SIGN}}
-  \gdef^^a5{\missingcharmsg{YEN SIGN}}
-  \gdef^^a6{\missingcharmsg{BROKEN BAR}}
-  \gdef^^a7{\S}
-  \gdef^^a8{\"{}}
-  \gdef^^a9{\copyright}
-  \gdef^^aa{\ordf}
-  \gdef^^ab{\guillemetleft}
-  \gdef^^ac{$\lnot$}
-  \gdef^^ad{\-}
-  \gdef^^ae{\registeredsymbol}
-  \gdef^^af{\={}}
-  %
-  \gdef^^b0{\textdegree}
-  \gdef^^b1{$\pm$}
-  \gdef^^b2{$^2$}
-  \gdef^^b3{$^3$}
-  \gdef^^b4{\'{}}
-  \gdef^^b5{$\mu$}
-  \gdef^^b6{\P}
-  %
-  \gdef^^b7{$^.$}
-  \gdef^^b8{\cedilla\ }
-  \gdef^^b9{$^1$}
-  \gdef^^ba{\ordm}
-  %
-  \gdef^^bb{\guillemetright}
-  \gdef^^bc{$1\over4$}
-  \gdef^^bd{$1\over2$}
-  \gdef^^be{$3\over4$}
-  \gdef^^bf{\questiondown}
-  %
-  \gdef^^c0{\`A}
-  \gdef^^c1{\'A}
-  \gdef^^c2{\^A}
-  \gdef^^c3{\~A}
-  \gdef^^c4{\"A}
-  \gdef^^c5{\ringaccent A}
-  \gdef^^c6{\AE}
-  \gdef^^c7{\cedilla C}
-  \gdef^^c8{\`E}
-  \gdef^^c9{\'E}
-  \gdef^^ca{\^E}
-  \gdef^^cb{\"E}
-  \gdef^^cc{\`I}
-  \gdef^^cd{\'I}
-  \gdef^^ce{\^I}
-  \gdef^^cf{\"I}
-  %
-  \gdef^^d0{\DH}
-  \gdef^^d1{\~N}
-  \gdef^^d2{\`O}
-  \gdef^^d3{\'O}
-  \gdef^^d4{\^O}
-  \gdef^^d5{\~O}
-  \gdef^^d6{\"O}
-  \gdef^^d7{$\times$}
-  \gdef^^d8{\O}
-  \gdef^^d9{\`U}
-  \gdef^^da{\'U}
-  \gdef^^db{\^U}
-  \gdef^^dc{\"U}
-  \gdef^^dd{\'Y}
-  \gdef^^de{\TH}
-  \gdef^^df{\ss}
-  %
-  \gdef^^e0{\`a}
-  \gdef^^e1{\'a}
-  \gdef^^e2{\^a}
-  \gdef^^e3{\~a}
-  \gdef^^e4{\"a}
-  \gdef^^e5{\ringaccent a}
-  \gdef^^e6{\ae}
-  \gdef^^e7{\cedilla c}
-  \gdef^^e8{\`e}
-  \gdef^^e9{\'e}
-  \gdef^^ea{\^e}
-  \gdef^^eb{\"e}
-  \gdef^^ec{\`{\dotless i}}
-  \gdef^^ed{\'{\dotless i}}
-  \gdef^^ee{\^{\dotless i}}
-  \gdef^^ef{\"{\dotless i}}
-  %
-  \gdef^^f0{\dh}
-  \gdef^^f1{\~n}
-  \gdef^^f2{\`o}
-  \gdef^^f3{\'o}
-  \gdef^^f4{\^o}
-  \gdef^^f5{\~o}
-  \gdef^^f6{\"o}
-  \gdef^^f7{$\div$}
-  \gdef^^f8{\o}
-  \gdef^^f9{\`u}
-  \gdef^^fa{\'u}
-  \gdef^^fb{\^u}
-  \gdef^^fc{\"u}
-  \gdef^^fd{\'y}
-  \gdef^^fe{\th}
-  \gdef^^ff{\"y}
-}
-
-% Latin9 (ISO-8859-15) encoding character definitions.
-\def\latninechardefs{%
-  % Encoding is almost identical to Latin1.
-  \latonechardefs
-  %
-  \gdef^^a4{\euro}
-  \gdef^^a6{\v S}
-  \gdef^^a8{\v s}
-  \gdef^^b4{\v Z}
-  \gdef^^b8{\v z}
-  \gdef^^bc{\OE}
-  \gdef^^bd{\oe}
-  \gdef^^be{\"Y}
-}
-
-% Latin2 (ISO-8859-2) character definitions.
-\def\lattwochardefs{%
-  \gdef^^a0{\tie}
-  \gdef^^a1{\ogonek{A}}
-  \gdef^^a2{\u{}}
-  \gdef^^a3{\L}
-  \gdef^^a4{\missingcharmsg{CURRENCY SIGN}}
-  \gdef^^a5{\v L}
-  \gdef^^a6{\'S}
-  \gdef^^a7{\S}
-  \gdef^^a8{\"{}}
-  \gdef^^a9{\v S}
-  \gdef^^aa{\cedilla S}
-  \gdef^^ab{\v T}
-  \gdef^^ac{\'Z}
-  \gdef^^ad{\-}
-  \gdef^^ae{\v Z}
-  \gdef^^af{\dotaccent Z}
-  %
-  \gdef^^b0{\textdegree}
-  \gdef^^b1{\ogonek{a}}
-  \gdef^^b2{\ogonek{ }}
-  \gdef^^b3{\l}
-  \gdef^^b4{\'{}}
-  \gdef^^b5{\v l}
-  \gdef^^b6{\'s}
-  \gdef^^b7{\v{}}
-  \gdef^^b8{\cedilla\ }
-  \gdef^^b9{\v s}
-  \gdef^^ba{\cedilla s}
-  \gdef^^bb{\v t}
-  \gdef^^bc{\'z}
-  \gdef^^bd{\H{}}
-  \gdef^^be{\v z}
-  \gdef^^bf{\dotaccent z}
-  %
-  \gdef^^c0{\'R}
-  \gdef^^c1{\'A}
-  \gdef^^c2{\^A}
-  \gdef^^c3{\u A}
-  \gdef^^c4{\"A}
-  \gdef^^c5{\'L}
-  \gdef^^c6{\'C}
-  \gdef^^c7{\cedilla C}
-  \gdef^^c8{\v C}
-  \gdef^^c9{\'E}
-  \gdef^^ca{\ogonek{E}}
-  \gdef^^cb{\"E}
-  \gdef^^cc{\v E}
-  \gdef^^cd{\'I}
-  \gdef^^ce{\^I}
-  \gdef^^cf{\v D}
-  %
-  \gdef^^d0{\DH}
-  \gdef^^d1{\'N}
-  \gdef^^d2{\v N}
-  \gdef^^d3{\'O}
-  \gdef^^d4{\^O}
-  \gdef^^d5{\H O}
-  \gdef^^d6{\"O}
-  \gdef^^d7{$\times$}
-  \gdef^^d8{\v R}
-  \gdef^^d9{\ringaccent U}
-  \gdef^^da{\'U}
-  \gdef^^db{\H U}
-  \gdef^^dc{\"U}
-  \gdef^^dd{\'Y}
-  \gdef^^de{\cedilla T}
-  \gdef^^df{\ss}
-  %
-  \gdef^^e0{\'r}
-  \gdef^^e1{\'a}
-  \gdef^^e2{\^a}
-  \gdef^^e3{\u a}
-  \gdef^^e4{\"a}
-  \gdef^^e5{\'l}
-  \gdef^^e6{\'c}
-  \gdef^^e7{\cedilla c}
-  \gdef^^e8{\v c}
-  \gdef^^e9{\'e}
-  \gdef^^ea{\ogonek{e}}
-  \gdef^^eb{\"e}
-  \gdef^^ec{\v e}
-  \gdef^^ed{\'{\dotless{i}}}
-  \gdef^^ee{\^{\dotless{i}}}
-  \gdef^^ef{\v d}
-  %
-  \gdef^^f0{\dh}
-  \gdef^^f1{\'n}
-  \gdef^^f2{\v n}
-  \gdef^^f3{\'o}
-  \gdef^^f4{\^o}
-  \gdef^^f5{\H o}
-  \gdef^^f6{\"o}
-  \gdef^^f7{$\div$}
-  \gdef^^f8{\v r}
-  \gdef^^f9{\ringaccent u}
-  \gdef^^fa{\'u}
-  \gdef^^fb{\H u}
-  \gdef^^fc{\"u}
-  \gdef^^fd{\'y}
-  \gdef^^fe{\cedilla t}
-  \gdef^^ff{\dotaccent{}}
-}
-
-% UTF-8 character definitions.
-%
-% This code to support UTF-8 is based on LaTeX's utf8.def, with some
-% changes for Texinfo conventions.  It is included here under the GPL by
-% permission from Frank Mittelbach and the LaTeX team.
-%
-\newcount\countUTFx
-\newcount\countUTFy
-\newcount\countUTFz
-
-\gdef\UTFviiiTwoOctets#1#2{\expandafter
-   \UTFviiiDefined\csname u8:#1\string #2\endcsname}
-%
-\gdef\UTFviiiThreeOctets#1#2#3{\expandafter
-   \UTFviiiDefined\csname u8:#1\string #2\string #3\endcsname}
-%
-\gdef\UTFviiiFourOctets#1#2#3#4{\expandafter
-   \UTFviiiDefined\csname u8:#1\string #2\string #3\string #4\endcsname}
-
-\gdef\UTFviiiDefined#1{%
-  \ifx #1\relax
-    \message{\linenumber Unicode char \string #1 not defined for Texinfo}%
-  \else
-    \expandafter #1%
-  \fi
-}
-
-\begingroup
-  \catcode`\~13
-  \catcode`\"12
-
-  \def\UTFviiiLoop{%
-    \global\catcode\countUTFx\active
-    \uccode`\~\countUTFx
-    \uppercase\expandafter{\UTFviiiTmp}%
-    \advance\countUTFx by 1
-    \ifnum\countUTFx < \countUTFy
-      \expandafter\UTFviiiLoop
-    \fi}
-
-  \countUTFx = "C2
-  \countUTFy = "E0
-  \def\UTFviiiTmp{%
-    \xdef~{\noexpand\UTFviiiTwoOctets\string~}}
-  \UTFviiiLoop
-
-  \countUTFx = "E0
-  \countUTFy = "F0
-  \def\UTFviiiTmp{%
-    \xdef~{\noexpand\UTFviiiThreeOctets\string~}}
-  \UTFviiiLoop
-
-  \countUTFx = "F0
-  \countUTFy = "F4
-  \def\UTFviiiTmp{%
-    \xdef~{\noexpand\UTFviiiFourOctets\string~}}
-  \UTFviiiLoop
-\endgroup
-
-\begingroup
-  \catcode`\"=12
-  \catcode`\<=12
-  \catcode`\.=12
-  \catcode`\,=12
-  \catcode`\;=12
-  \catcode`\!=12
-  \catcode`\~=13
-
-  \gdef\DeclareUnicodeCharacter#1#2{%
-    \countUTFz = "#1\relax
-    %\wlog{\space\space defining Unicode char U+#1 (decimal \the\countUTFz)}%
-    \begingroup
-      \parseXMLCharref
-      \def\UTFviiiTwoOctets##1##2{%
-        \csname u8:##1\string ##2\endcsname}%
-      \def\UTFviiiThreeOctets##1##2##3{%
-        \csname u8:##1\string ##2\string ##3\endcsname}%
-      \def\UTFviiiFourOctets##1##2##3##4{%
-        \csname u8:##1\string ##2\string ##3\string ##4\endcsname}%
-      \expandafter\expandafter\expandafter\expandafter
-       \expandafter\expandafter\expandafter
-       \gdef\UTFviiiTmp{#2}%
-    \endgroup}
-
-  \gdef\parseXMLCharref{%
-    \ifnum\countUTFz < "A0\relax
-      \errhelp = \EMsimple
-      \errmessage{Cannot define Unicode char value < 00A0}%
-    \else\ifnum\countUTFz < "800\relax
-      \parseUTFviiiA,%
-      \parseUTFviiiB C\UTFviiiTwoOctets.,%
-    \else\ifnum\countUTFz < "10000\relax
-      \parseUTFviiiA;%
-      \parseUTFviiiA,%
-      \parseUTFviiiB E\UTFviiiThreeOctets.{,;}%
-    \else
-      \parseUTFviiiA;%
-      \parseUTFviiiA,%
-      \parseUTFviiiA!%
-      \parseUTFviiiB F\UTFviiiFourOctets.{!,;}%
-    \fi\fi\fi
-  }
-
-  \gdef\parseUTFviiiA#1{%
-    \countUTFx = \countUTFz
-    \divide\countUTFz by 64
-    \countUTFy = \countUTFz
-    \multiply\countUTFz by 64
-    \advance\countUTFx by -\countUTFz
-    \advance\countUTFx by 128
-    \uccode `#1\countUTFx
-    \countUTFz = \countUTFy}
-
-  \gdef\parseUTFviiiB#1#2#3#4{%
-    \advance\countUTFz by "#10\relax
-    \uccode `#3\countUTFz
-    \uppercase{\gdef\UTFviiiTmp{#2#3#4}}}
-\endgroup
-
-\def\utfeightchardefs{%
-  \DeclareUnicodeCharacter{00A0}{\tie}
-  \DeclareUnicodeCharacter{00A1}{\exclamdown}
-  \DeclareUnicodeCharacter{00A3}{\pounds}
-  \DeclareUnicodeCharacter{00A8}{\"{ }}
-  \DeclareUnicodeCharacter{00A9}{\copyright}
-  \DeclareUnicodeCharacter{00AA}{\ordf}
-  \DeclareUnicodeCharacter{00AB}{\guillemetleft}
-  \DeclareUnicodeCharacter{00AD}{\-}
-  \DeclareUnicodeCharacter{00AE}{\registeredsymbol}
-  \DeclareUnicodeCharacter{00AF}{\={ }}
-
-  \DeclareUnicodeCharacter{00B0}{\ringaccent{ }}
-  \DeclareUnicodeCharacter{00B4}{\'{ }}
-  \DeclareUnicodeCharacter{00B8}{\cedilla{ }}
-  \DeclareUnicodeCharacter{00BA}{\ordm}
-  \DeclareUnicodeCharacter{00BB}{\guillemetright}
-  \DeclareUnicodeCharacter{00BF}{\questiondown}
-
-  \DeclareUnicodeCharacter{00C0}{\`A}
-  \DeclareUnicodeCharacter{00C1}{\'A}
-  \DeclareUnicodeCharacter{00C2}{\^A}
-  \DeclareUnicodeCharacter{00C3}{\~A}
-  \DeclareUnicodeCharacter{00C4}{\"A}
-  \DeclareUnicodeCharacter{00C5}{\AA}
-  \DeclareUnicodeCharacter{00C6}{\AE}
-  \DeclareUnicodeCharacter{00C7}{\cedilla{C}}
-  \DeclareUnicodeCharacter{00C8}{\`E}
-  \DeclareUnicodeCharacter{00C9}{\'E}
-  \DeclareUnicodeCharacter{00CA}{\^E}
-  \DeclareUnicodeCharacter{00CB}{\"E}
-  \DeclareUnicodeCharacter{00CC}{\`I}
-  \DeclareUnicodeCharacter{00CD}{\'I}
-  \DeclareUnicodeCharacter{00CE}{\^I}
-  \DeclareUnicodeCharacter{00CF}{\"I}
-
-  \DeclareUnicodeCharacter{00D0}{\DH}
-  \DeclareUnicodeCharacter{00D1}{\~N}
-  \DeclareUnicodeCharacter{00D2}{\`O}
-  \DeclareUnicodeCharacter{00D3}{\'O}
-  \DeclareUnicodeCharacter{00D4}{\^O}
-  \DeclareUnicodeCharacter{00D5}{\~O}
-  \DeclareUnicodeCharacter{00D6}{\"O}
-  \DeclareUnicodeCharacter{00D8}{\O}
-  \DeclareUnicodeCharacter{00D9}{\`U}
-  \DeclareUnicodeCharacter{00DA}{\'U}
-  \DeclareUnicodeCharacter{00DB}{\^U}
-  \DeclareUnicodeCharacter{00DC}{\"U}
-  \DeclareUnicodeCharacter{00DD}{\'Y}
-  \DeclareUnicodeCharacter{00DE}{\TH}
-  \DeclareUnicodeCharacter{00DF}{\ss}
-
-  \DeclareUnicodeCharacter{00E0}{\`a}
-  \DeclareUnicodeCharacter{00E1}{\'a}
-  \DeclareUnicodeCharacter{00E2}{\^a}
-  \DeclareUnicodeCharacter{00E3}{\~a}
-  \DeclareUnicodeCharacter{00E4}{\"a}
-  \DeclareUnicodeCharacter{00E5}{\aa}
-  \DeclareUnicodeCharacter{00E6}{\ae}
-  \DeclareUnicodeCharacter{00E7}{\cedilla{c}}
-  \DeclareUnicodeCharacter{00E8}{\`e}
-  \DeclareUnicodeCharacter{00E9}{\'e}
-  \DeclareUnicodeCharacter{00EA}{\^e}
-  \DeclareUnicodeCharacter{00EB}{\"e}
-  \DeclareUnicodeCharacter{00EC}{\`{\dotless{i}}}
-  \DeclareUnicodeCharacter{00ED}{\'{\dotless{i}}}
-  \DeclareUnicodeCharacter{00EE}{\^{\dotless{i}}}
-  \DeclareUnicodeCharacter{00EF}{\"{\dotless{i}}}
-
-  \DeclareUnicodeCharacter{00F0}{\dh}
-  \DeclareUnicodeCharacter{00F1}{\~n}
-  \DeclareUnicodeCharacter{00F2}{\`o}
-  \DeclareUnicodeCharacter{00F3}{\'o}
-  \DeclareUnicodeCharacter{00F4}{\^o}
-  \DeclareUnicodeCharacter{00F5}{\~o}
-  \DeclareUnicodeCharacter{00F6}{\"o}
-  \DeclareUnicodeCharacter{00F8}{\o}
-  \DeclareUnicodeCharacter{00F9}{\`u}
-  \DeclareUnicodeCharacter{00FA}{\'u}
-  \DeclareUnicodeCharacter{00FB}{\^u}
-  \DeclareUnicodeCharacter{00FC}{\"u}
-  \DeclareUnicodeCharacter{00FD}{\'y}
-  \DeclareUnicodeCharacter{00FE}{\th}
-  \DeclareUnicodeCharacter{00FF}{\"y}
-
-  \DeclareUnicodeCharacter{0100}{\=A}
-  \DeclareUnicodeCharacter{0101}{\=a}
-  \DeclareUnicodeCharacter{0102}{\u{A}}
-  \DeclareUnicodeCharacter{0103}{\u{a}}
-  \DeclareUnicodeCharacter{0104}{\ogonek{A}}
-  \DeclareUnicodeCharacter{0105}{\ogonek{a}}
-  \DeclareUnicodeCharacter{0106}{\'C}
-  \DeclareUnicodeCharacter{0107}{\'c}
-  \DeclareUnicodeCharacter{0108}{\^C}
-  \DeclareUnicodeCharacter{0109}{\^c}
-  \DeclareUnicodeCharacter{0118}{\ogonek{E}}
-  \DeclareUnicodeCharacter{0119}{\ogonek{e}}
-  \DeclareUnicodeCharacter{010A}{\dotaccent{C}}
-  \DeclareUnicodeCharacter{010B}{\dotaccent{c}}
-  \DeclareUnicodeCharacter{010C}{\v{C}}
-  \DeclareUnicodeCharacter{010D}{\v{c}}
-  \DeclareUnicodeCharacter{010E}{\v{D}}
-
-  \DeclareUnicodeCharacter{0112}{\=E}
-  \DeclareUnicodeCharacter{0113}{\=e}
-  \DeclareUnicodeCharacter{0114}{\u{E}}
-  \DeclareUnicodeCharacter{0115}{\u{e}}
-  \DeclareUnicodeCharacter{0116}{\dotaccent{E}}
-  \DeclareUnicodeCharacter{0117}{\dotaccent{e}}
-  \DeclareUnicodeCharacter{011A}{\v{E}}
-  \DeclareUnicodeCharacter{011B}{\v{e}}
-  \DeclareUnicodeCharacter{011C}{\^G}
-  \DeclareUnicodeCharacter{011D}{\^g}
-  \DeclareUnicodeCharacter{011E}{\u{G}}
-  \DeclareUnicodeCharacter{011F}{\u{g}}
-
-  \DeclareUnicodeCharacter{0120}{\dotaccent{G}}
-  \DeclareUnicodeCharacter{0121}{\dotaccent{g}}
-  \DeclareUnicodeCharacter{0124}{\^H}
-  \DeclareUnicodeCharacter{0125}{\^h}
-  \DeclareUnicodeCharacter{0128}{\~I}
-  \DeclareUnicodeCharacter{0129}{\~{\dotless{i}}}
-  \DeclareUnicodeCharacter{012A}{\=I}
-  \DeclareUnicodeCharacter{012B}{\={\dotless{i}}}
-  \DeclareUnicodeCharacter{012C}{\u{I}}
-  \DeclareUnicodeCharacter{012D}{\u{\dotless{i}}}
-
-  \DeclareUnicodeCharacter{0130}{\dotaccent{I}}
-  \DeclareUnicodeCharacter{0131}{\dotless{i}}
-  \DeclareUnicodeCharacter{0132}{IJ}
-  \DeclareUnicodeCharacter{0133}{ij}
-  \DeclareUnicodeCharacter{0134}{\^J}
-  \DeclareUnicodeCharacter{0135}{\^{\dotless{j}}}
-  \DeclareUnicodeCharacter{0139}{\'L}
-  \DeclareUnicodeCharacter{013A}{\'l}
-
-  \DeclareUnicodeCharacter{0141}{\L}
-  \DeclareUnicodeCharacter{0142}{\l}
-  \DeclareUnicodeCharacter{0143}{\'N}
-  \DeclareUnicodeCharacter{0144}{\'n}
-  \DeclareUnicodeCharacter{0147}{\v{N}}
-  \DeclareUnicodeCharacter{0148}{\v{n}}
-  \DeclareUnicodeCharacter{014C}{\=O}
-  \DeclareUnicodeCharacter{014D}{\=o}
-  \DeclareUnicodeCharacter{014E}{\u{O}}
-  \DeclareUnicodeCharacter{014F}{\u{o}}
-
-  \DeclareUnicodeCharacter{0150}{\H{O}}
-  \DeclareUnicodeCharacter{0151}{\H{o}}
-  \DeclareUnicodeCharacter{0152}{\OE}
-  \DeclareUnicodeCharacter{0153}{\oe}
-  \DeclareUnicodeCharacter{0154}{\'R}
-  \DeclareUnicodeCharacter{0155}{\'r}
-  \DeclareUnicodeCharacter{0158}{\v{R}}
-  \DeclareUnicodeCharacter{0159}{\v{r}}
-  \DeclareUnicodeCharacter{015A}{\'S}
-  \DeclareUnicodeCharacter{015B}{\'s}
-  \DeclareUnicodeCharacter{015C}{\^S}
-  \DeclareUnicodeCharacter{015D}{\^s}
-  \DeclareUnicodeCharacter{015E}{\cedilla{S}}
-  \DeclareUnicodeCharacter{015F}{\cedilla{s}}
-
-  \DeclareUnicodeCharacter{0160}{\v{S}}
-  \DeclareUnicodeCharacter{0161}{\v{s}}
-  \DeclareUnicodeCharacter{0162}{\cedilla{t}}
-  \DeclareUnicodeCharacter{0163}{\cedilla{T}}
-  \DeclareUnicodeCharacter{0164}{\v{T}}
-
-  \DeclareUnicodeCharacter{0168}{\~U}
-  \DeclareUnicodeCharacter{0169}{\~u}
-  \DeclareUnicodeCharacter{016A}{\=U}
-  \DeclareUnicodeCharacter{016B}{\=u}
-  \DeclareUnicodeCharacter{016C}{\u{U}}
-  \DeclareUnicodeCharacter{016D}{\u{u}}
-  \DeclareUnicodeCharacter{016E}{\ringaccent{U}}
-  \DeclareUnicodeCharacter{016F}{\ringaccent{u}}
-
-  \DeclareUnicodeCharacter{0170}{\H{U}}
-  \DeclareUnicodeCharacter{0171}{\H{u}}
-  \DeclareUnicodeCharacter{0174}{\^W}
-  \DeclareUnicodeCharacter{0175}{\^w}
-  \DeclareUnicodeCharacter{0176}{\^Y}
-  \DeclareUnicodeCharacter{0177}{\^y}
-  \DeclareUnicodeCharacter{0178}{\"Y}
-  \DeclareUnicodeCharacter{0179}{\'Z}
-  \DeclareUnicodeCharacter{017A}{\'z}
-  \DeclareUnicodeCharacter{017B}{\dotaccent{Z}}
-  \DeclareUnicodeCharacter{017C}{\dotaccent{z}}
-  \DeclareUnicodeCharacter{017D}{\v{Z}}
-  \DeclareUnicodeCharacter{017E}{\v{z}}
-
-  \DeclareUnicodeCharacter{01C4}{D\v{Z}}
-  \DeclareUnicodeCharacter{01C5}{D\v{z}}
-  \DeclareUnicodeCharacter{01C6}{d\v{z}}
-  \DeclareUnicodeCharacter{01C7}{LJ}
-  \DeclareUnicodeCharacter{01C8}{Lj}
-  \DeclareUnicodeCharacter{01C9}{lj}
-  \DeclareUnicodeCharacter{01CA}{NJ}
-  \DeclareUnicodeCharacter{01CB}{Nj}
-  \DeclareUnicodeCharacter{01CC}{nj}
-  \DeclareUnicodeCharacter{01CD}{\v{A}}
-  \DeclareUnicodeCharacter{01CE}{\v{a}}
-  \DeclareUnicodeCharacter{01CF}{\v{I}}
-
-  \DeclareUnicodeCharacter{01D0}{\v{\dotless{i}}}
-  \DeclareUnicodeCharacter{01D1}{\v{O}}
-  \DeclareUnicodeCharacter{01D2}{\v{o}}
-  \DeclareUnicodeCharacter{01D3}{\v{U}}
-  \DeclareUnicodeCharacter{01D4}{\v{u}}
-
-  \DeclareUnicodeCharacter{01E2}{\={\AE}}
-  \DeclareUnicodeCharacter{01E3}{\={\ae}}
-  \DeclareUnicodeCharacter{01E6}{\v{G}}
-  \DeclareUnicodeCharacter{01E7}{\v{g}}
-  \DeclareUnicodeCharacter{01E8}{\v{K}}
-  \DeclareUnicodeCharacter{01E9}{\v{k}}
-
-  \DeclareUnicodeCharacter{01F0}{\v{\dotless{j}}}
-  \DeclareUnicodeCharacter{01F1}{DZ}
-  \DeclareUnicodeCharacter{01F2}{Dz}
-  \DeclareUnicodeCharacter{01F3}{dz}
-  \DeclareUnicodeCharacter{01F4}{\'G}
-  \DeclareUnicodeCharacter{01F5}{\'g}
-  \DeclareUnicodeCharacter{01F8}{\`N}
-  \DeclareUnicodeCharacter{01F9}{\`n}
-  \DeclareUnicodeCharacter{01FC}{\'{\AE}}
-  \DeclareUnicodeCharacter{01FD}{\'{\ae}}
-  \DeclareUnicodeCharacter{01FE}{\'{\O}}
-  \DeclareUnicodeCharacter{01FF}{\'{\o}}
-
-  \DeclareUnicodeCharacter{021E}{\v{H}}
-  \DeclareUnicodeCharacter{021F}{\v{h}}
-
-  \DeclareUnicodeCharacter{0226}{\dotaccent{A}}
-  \DeclareUnicodeCharacter{0227}{\dotaccent{a}}
-  \DeclareUnicodeCharacter{0228}{\cedilla{E}}
-  \DeclareUnicodeCharacter{0229}{\cedilla{e}}
-  \DeclareUnicodeCharacter{022E}{\dotaccent{O}}
-  \DeclareUnicodeCharacter{022F}{\dotaccent{o}}
-
-  \DeclareUnicodeCharacter{0232}{\=Y}
-  \DeclareUnicodeCharacter{0233}{\=y}
-  \DeclareUnicodeCharacter{0237}{\dotless{j}}
-
-  \DeclareUnicodeCharacter{02DB}{\ogonek{ }}
-
-  \DeclareUnicodeCharacter{1E02}{\dotaccent{B}}
-  \DeclareUnicodeCharacter{1E03}{\dotaccent{b}}
-  \DeclareUnicodeCharacter{1E04}{\udotaccent{B}}
-  \DeclareUnicodeCharacter{1E05}{\udotaccent{b}}
-  \DeclareUnicodeCharacter{1E06}{\ubaraccent{B}}
-  \DeclareUnicodeCharacter{1E07}{\ubaraccent{b}}
-  \DeclareUnicodeCharacter{1E0A}{\dotaccent{D}}
-  \DeclareUnicodeCharacter{1E0B}{\dotaccent{d}}
-  \DeclareUnicodeCharacter{1E0C}{\udotaccent{D}}
-  \DeclareUnicodeCharacter{1E0D}{\udotaccent{d}}
-  \DeclareUnicodeCharacter{1E0E}{\ubaraccent{D}}
-  \DeclareUnicodeCharacter{1E0F}{\ubaraccent{d}}
-
-  \DeclareUnicodeCharacter{1E1E}{\dotaccent{F}}
-  \DeclareUnicodeCharacter{1E1F}{\dotaccent{f}}
-
-  \DeclareUnicodeCharacter{1E20}{\=G}
-  \DeclareUnicodeCharacter{1E21}{\=g}
-  \DeclareUnicodeCharacter{1E22}{\dotaccent{H}}
-  \DeclareUnicodeCharacter{1E23}{\dotaccent{h}}
-  \DeclareUnicodeCharacter{1E24}{\udotaccent{H}}
-  \DeclareUnicodeCharacter{1E25}{\udotaccent{h}}
-  \DeclareUnicodeCharacter{1E26}{\"H}
-  \DeclareUnicodeCharacter{1E27}{\"h}
-
-  \DeclareUnicodeCharacter{1E30}{\'K}
-  \DeclareUnicodeCharacter{1E31}{\'k}
-  \DeclareUnicodeCharacter{1E32}{\udotaccent{K}}
-  \DeclareUnicodeCharacter{1E33}{\udotaccent{k}}
-  \DeclareUnicodeCharacter{1E34}{\ubaraccent{K}}
-  \DeclareUnicodeCharacter{1E35}{\ubaraccent{k}}
-  \DeclareUnicodeCharacter{1E36}{\udotaccent{L}}
-  \DeclareUnicodeCharacter{1E37}{\udotaccent{l}}
-  \DeclareUnicodeCharacter{1E3A}{\ubaraccent{L}}
-  \DeclareUnicodeCharacter{1E3B}{\ubaraccent{l}}
-  \DeclareUnicodeCharacter{1E3E}{\'M}
-  \DeclareUnicodeCharacter{1E3F}{\'m}
-
-  \DeclareUnicodeCharacter{1E40}{\dotaccent{M}}
-  \DeclareUnicodeCharacter{1E41}{\dotaccent{m}}
-  \DeclareUnicodeCharacter{1E42}{\udotaccent{M}}
-  \DeclareUnicodeCharacter{1E43}{\udotaccent{m}}
-  \DeclareUnicodeCharacter{1E44}{\dotaccent{N}}
-  \DeclareUnicodeCharacter{1E45}{\dotaccent{n}}
-  \DeclareUnicodeCharacter{1E46}{\udotaccent{N}}
-  \DeclareUnicodeCharacter{1E47}{\udotaccent{n}}
-  \DeclareUnicodeCharacter{1E48}{\ubaraccent{N}}
-  \DeclareUnicodeCharacter{1E49}{\ubaraccent{n}}
-
-  \DeclareUnicodeCharacter{1E54}{\'P}
-  \DeclareUnicodeCharacter{1E55}{\'p}
-  \DeclareUnicodeCharacter{1E56}{\dotaccent{P}}
-  \DeclareUnicodeCharacter{1E57}{\dotaccent{p}}
-  \DeclareUnicodeCharacter{1E58}{\dotaccent{R}}
-  \DeclareUnicodeCharacter{1E59}{\dotaccent{r}}
-  \DeclareUnicodeCharacter{1E5A}{\udotaccent{R}}
-  \DeclareUnicodeCharacter{1E5B}{\udotaccent{r}}
-  \DeclareUnicodeCharacter{1E5E}{\ubaraccent{R}}
-  \DeclareUnicodeCharacter{1E5F}{\ubaraccent{r}}
-
-  \DeclareUnicodeCharacter{1E60}{\dotaccent{S}}
-  \DeclareUnicodeCharacter{1E61}{\dotaccent{s}}
-  \DeclareUnicodeCharacter{1E62}{\udotaccent{S}}
-  \DeclareUnicodeCharacter{1E63}{\udotaccent{s}}
-  \DeclareUnicodeCharacter{1E6A}{\dotaccent{T}}
-  \DeclareUnicodeCharacter{1E6B}{\dotaccent{t}}
-  \DeclareUnicodeCharacter{1E6C}{\udotaccent{T}}
-  \DeclareUnicodeCharacter{1E6D}{\udotaccent{t}}
-  \DeclareUnicodeCharacter{1E6E}{\ubaraccent{T}}
-  \DeclareUnicodeCharacter{1E6F}{\ubaraccent{t}}
-
-  \DeclareUnicodeCharacter{1E7C}{\~V}
-  \DeclareUnicodeCharacter{1E7D}{\~v}
-  \DeclareUnicodeCharacter{1E7E}{\udotaccent{V}}
-  \DeclareUnicodeCharacter{1E7F}{\udotaccent{v}}
-
-  \DeclareUnicodeCharacter{1E80}{\`W}
-  \DeclareUnicodeCharacter{1E81}{\`w}
-  \DeclareUnicodeCharacter{1E82}{\'W}
-  \DeclareUnicodeCharacter{1E83}{\'w}
-  \DeclareUnicodeCharacter{1E84}{\"W}
-  \DeclareUnicodeCharacter{1E85}{\"w}
-  \DeclareUnicodeCharacter{1E86}{\dotaccent{W}}
-  \DeclareUnicodeCharacter{1E87}{\dotaccent{w}}
-  \DeclareUnicodeCharacter{1E88}{\udotaccent{W}}
-  \DeclareUnicodeCharacter{1E89}{\udotaccent{w}}
-  \DeclareUnicodeCharacter{1E8A}{\dotaccent{X}}
-  \DeclareUnicodeCharacter{1E8B}{\dotaccent{x}}
-  \DeclareUnicodeCharacter{1E8C}{\"X}
-  \DeclareUnicodeCharacter{1E8D}{\"x}
-  \DeclareUnicodeCharacter{1E8E}{\dotaccent{Y}}
-  \DeclareUnicodeCharacter{1E8F}{\dotaccent{y}}
-
-  \DeclareUnicodeCharacter{1E90}{\^Z}
-  \DeclareUnicodeCharacter{1E91}{\^z}
-  \DeclareUnicodeCharacter{1E92}{\udotaccent{Z}}
-  \DeclareUnicodeCharacter{1E93}{\udotaccent{z}}
-  \DeclareUnicodeCharacter{1E94}{\ubaraccent{Z}}
-  \DeclareUnicodeCharacter{1E95}{\ubaraccent{z}}
-  \DeclareUnicodeCharacter{1E96}{\ubaraccent{h}}
-  \DeclareUnicodeCharacter{1E97}{\"t}
-  \DeclareUnicodeCharacter{1E98}{\ringaccent{w}}
-  \DeclareUnicodeCharacter{1E99}{\ringaccent{y}}
-
-  \DeclareUnicodeCharacter{1EA0}{\udotaccent{A}}
-  \DeclareUnicodeCharacter{1EA1}{\udotaccent{a}}
-
-  \DeclareUnicodeCharacter{1EB8}{\udotaccent{E}}
-  \DeclareUnicodeCharacter{1EB9}{\udotaccent{e}}
-  \DeclareUnicodeCharacter{1EBC}{\~E}
-  \DeclareUnicodeCharacter{1EBD}{\~e}
-
-  \DeclareUnicodeCharacter{1ECA}{\udotaccent{I}}
-  \DeclareUnicodeCharacter{1ECB}{\udotaccent{i}}
-  \DeclareUnicodeCharacter{1ECC}{\udotaccent{O}}
-  \DeclareUnicodeCharacter{1ECD}{\udotaccent{o}}
-
-  \DeclareUnicodeCharacter{1EE4}{\udotaccent{U}}
-  \DeclareUnicodeCharacter{1EE5}{\udotaccent{u}}
-
-  \DeclareUnicodeCharacter{1EF2}{\`Y}
-  \DeclareUnicodeCharacter{1EF3}{\`y}
-  \DeclareUnicodeCharacter{1EF4}{\udotaccent{Y}}
-
-  \DeclareUnicodeCharacter{1EF8}{\~Y}
-  \DeclareUnicodeCharacter{1EF9}{\~y}
-
-  \DeclareUnicodeCharacter{2013}{--}
-  \DeclareUnicodeCharacter{2014}{---}
-  \DeclareUnicodeCharacter{2018}{\quoteleft}
-  \DeclareUnicodeCharacter{2019}{\quoteright}
-  \DeclareUnicodeCharacter{201A}{\quotesinglbase}
-  \DeclareUnicodeCharacter{201C}{\quotedblleft}
-  \DeclareUnicodeCharacter{201D}{\quotedblright}
-  \DeclareUnicodeCharacter{201E}{\quotedblbase}
-  \DeclareUnicodeCharacter{2022}{\bullet}
-  \DeclareUnicodeCharacter{2026}{\dots}
-  \DeclareUnicodeCharacter{2039}{\guilsinglleft}
-  \DeclareUnicodeCharacter{203A}{\guilsinglright}
-  \DeclareUnicodeCharacter{20AC}{\euro}
-
-  \DeclareUnicodeCharacter{2192}{\expansion}
-  \DeclareUnicodeCharacter{21D2}{\result}
-
-  \DeclareUnicodeCharacter{2212}{\minus}
-  \DeclareUnicodeCharacter{2217}{\point}
-  \DeclareUnicodeCharacter{2261}{\equiv}
-}% end of \utfeightchardefs
-
-
-% US-ASCII character definitions.
-\def\asciichardefs{% nothing need be done
-   \relax
-}
-
-% Make non-ASCII characters printable again for compatibility with
-% existing Texinfo documents that may use them, even without declaring a
-% document encoding.
-%
-\setnonasciicharscatcode \other
-
-
-\message{formatting,}
-
-\newdimen\defaultparindent \defaultparindent = 15pt
-
-\chapheadingskip = 15pt plus 4pt minus 2pt
-\secheadingskip = 12pt plus 3pt minus 2pt
-\subsecheadingskip = 9pt plus 2pt minus 2pt
-
-% Prevent underfull vbox error messages.
-\vbadness = 10000
-
-% Don't be very finicky about underfull hboxes, either.
-\hbadness = 6666
-
-% Following George Bush, get rid of widows and orphans.
-\widowpenalty=10000
-\clubpenalty=10000
-
-% Use TeX 3.0's \emergencystretch to help line breaking, but if we're
-% using an old version of TeX, don't do anything.  We want the amount of
-% stretch added to depend on the line length, hence the dependence on
-% \hsize.  We call this whenever the paper size is set.
-%
-\def\setemergencystretch{%
-  \ifx\emergencystretch\thisisundefined
-    % Allow us to assign to \emergencystretch anyway.
-    \def\emergencystretch{\dimen0}%
-  \else
-    \emergencystretch = .15\hsize
-  \fi
-}
-
-% Parameters in order: 1) textheight; 2) textwidth;
-% 3) voffset; 4) hoffset; 5) binding offset; 6) topskip;
-% 7) physical page height; 8) physical page width.
-%
-% We also call \setleading{\textleading}, so the caller should define
-% \textleading.  The caller should also set \parskip.
-%
-\def\internalpagesizes#1#2#3#4#5#6#7#8{%
-  \voffset = #3\relax
-  \topskip = #6\relax
-  \splittopskip = \topskip
-  %
-  \vsize = #1\relax
-  \advance\vsize by \topskip
-  \outervsize = \vsize
-  \advance\outervsize by 2\topandbottommargin
-  \pageheight = \vsize
-  %
-  \hsize = #2\relax
-  \outerhsize = \hsize
-  \advance\outerhsize by 0.5in
-  \pagewidth = \hsize
-  %
-  \normaloffset = #4\relax
-  \bindingoffset = #5\relax
-  %
-  \ifpdf
-    \pdfpageheight #7\relax
-    \pdfpagewidth #8\relax
-    % if we don't reset these, they will remain at "1 true in" of
-    % whatever layout pdftex was dumped with.
-    \pdfhorigin = 1 true in
-    \pdfvorigin = 1 true in
-  \fi
-  %
-  \setleading{\textleading}
-  %
-  \parindent = \defaultparindent
-  \setemergencystretch
-}
-
-% @letterpaper (the default).
-\def\letterpaper{{\globaldefs = 1
-  \parskip = 3pt plus 2pt minus 1pt
-  \textleading = 13.2pt
-  %
-  % If page is nothing but text, make it come out even.
-  \internalpagesizes{607.2pt}{6in}% that's 46 lines
-                    {\voffset}{.25in}%
-                    {\bindingoffset}{36pt}%
-                    {11in}{8.5in}%
-}}
-
-% Use @smallbook to reset parameters for 7x9.25 trim size.
-\def\smallbook{{\globaldefs = 1
-  \parskip = 2pt plus 1pt
-  \textleading = 12pt
-  %
-  \internalpagesizes{7.5in}{5in}%
-                    {-.2in}{0in}%
-                    {\bindingoffset}{16pt}%
-                    {9.25in}{7in}%
-  %
-  \lispnarrowing = 0.3in
-  \tolerance = 700
-  \hfuzz = 1pt
-  \contentsrightmargin = 0pt
-  \defbodyindent = .5cm
-}}
-
-% Use @smallerbook to reset parameters for 6x9 trim size.
-% (Just testing, parameters still in flux.)
-\def\smallerbook{{\globaldefs = 1
-  \parskip = 1.5pt plus 1pt
-  \textleading = 12pt
-  %
-  \internalpagesizes{7.4in}{4.8in}%
-                    {-.2in}{-.4in}%
-                    {0pt}{14pt}%
-                    {9in}{6in}%
-  %
-  \lispnarrowing = 0.25in
-  \tolerance = 700
-  \hfuzz = 1pt
-  \contentsrightmargin = 0pt
-  \defbodyindent = .4cm
-}}
-
-% Use @afourpaper to print on European A4 paper.
-\def\afourpaper{{\globaldefs = 1
-  \parskip = 3pt plus 2pt minus 1pt
-  \textleading = 13.2pt
-  %
-  % Double-side printing via postscript on Laserjet 4050
-  % prints double-sided nicely when \bindingoffset=10mm and \hoffset=-6mm.
-  % To change the settings for a different printer or situation, adjust
-  % \normaloffset until the front-side and back-side texts align.  Then
-  % do the same for \bindingoffset.  You can set these for testing in
-  % your texinfo source file like this:
-  % @tex
-  % \global\normaloffset = -6mm
-  % \global\bindingoffset = 10mm
-  % @end tex
-  \internalpagesizes{673.2pt}{160mm}% that's 51 lines
-                    {\voffset}{\hoffset}%
-                    {\bindingoffset}{44pt}%
-                    {297mm}{210mm}%
-  %
-  \tolerance = 700
-  \hfuzz = 1pt
-  \contentsrightmargin = 0pt
-  \defbodyindent = 5mm
-}}
-
-% Use @afivepaper to print on European A5 paper.
-% From romildo@urano.iceb.ufop.br, 2 July 2000.
-% He also recommends making @example and @lisp be small.
-\def\afivepaper{{\globaldefs = 1
-  \parskip = 2pt plus 1pt minus 0.1pt
-  \textleading = 12.5pt
-  %
-  \internalpagesizes{160mm}{120mm}%
-                    {\voffset}{\hoffset}%
-                    {\bindingoffset}{8pt}%
-                    {210mm}{148mm}%
-  %
-  \lispnarrowing = 0.2in
-  \tolerance = 800
-  \hfuzz = 1.2pt
-  \contentsrightmargin = 0pt
-  \defbodyindent = 2mm
-  \tableindent = 12mm
-}}
-
-% A specific text layout, 24x15cm overall, intended for A4 paper.
-\def\afourlatex{{\globaldefs = 1
-  \afourpaper
-  \internalpagesizes{237mm}{150mm}%
-                    {\voffset}{4.6mm}%
-                    {\bindingoffset}{7mm}%
-                    {297mm}{210mm}%
-  %
-  % Must explicitly reset to 0 because we call \afourpaper.
-  \globaldefs = 0
-}}
-
-% Use @afourwide to print on A4 paper in landscape format.
-\def\afourwide{{\globaldefs = 1
-  \afourpaper
-  \internalpagesizes{241mm}{165mm}%
-                    {\voffset}{-2.95mm}%
-                    {\bindingoffset}{7mm}%
-                    {297mm}{210mm}%
-  \globaldefs = 0
-}}
-
-% @pagesizes TEXTHEIGHT[,TEXTWIDTH]
-% Perhaps we should allow setting the margins, \topskip, \parskip,
-% and/or leading, also. Or perhaps we should compute them somehow.
-%
-\parseargdef\pagesizes{\pagesizesyyy #1,,\finish}
-\def\pagesizesyyy#1,#2,#3\finish{{%
-  \setbox0 = \hbox{\ignorespaces #2}\ifdim\wd0 > 0pt \hsize=#2\relax \fi
-  \globaldefs = 1
-  %
-  \parskip = 3pt plus 2pt minus 1pt
-  \setleading{\textleading}%
-  %
-  \dimen0 = #1\relax
-  \advance\dimen0 by \voffset
-  %
-  \dimen2 = \hsize
-  \advance\dimen2 by \normaloffset
-  %
-  \internalpagesizes{#1}{\hsize}%
-                    {\voffset}{\normaloffset}%
-                    {\bindingoffset}{44pt}%
-                    {\dimen0}{\dimen2}%
-}}
-
-% Set default to letter.
-%
-\letterpaper
-
-
-\message{and turning on texinfo input format.}
-
-\def^^L{\par} % remove \outer, so ^L can appear in an @comment
-
-% DEL is a comment character, in case @c does not suffice.
-\catcode`\^^? = 14
-
-% Define macros to output various characters with catcode for normal text.
-\catcode`\"=\other \def\normaldoublequote{"}
-\catcode`\$=\other \def\normaldollar{$}%$ font-lock fix
-\catcode`\+=\other \def\normalplus{+}
-\catcode`\<=\other \def\normalless{<}
-\catcode`\>=\other \def\normalgreater{>}
-\catcode`\^=\other \def\normalcaret{^}
-\catcode`\_=\other \def\normalunderscore{_}
-\catcode`\|=\other \def\normalverticalbar{|}
-\catcode`\~=\other \def\normaltilde{~}
-
-% This macro is used to make a character print one way in \tt
-% (where it can probably be output as-is), and another way in other fonts,
-% where something hairier probably needs to be done.
-%
-% #1 is what to print if we are indeed using \tt; #2 is what to print
-% otherwise.  Since all the Computer Modern typewriter fonts have zero
-% interword stretch (and shrink), and it is reasonable to expect all
-% typewriter fonts to have this, we can check that font parameter.
-%
-\def\ifusingtt#1#2{\ifdim \fontdimen3\font=0pt #1\else #2\fi}
-
-% Same as above, but check for italic font.  Actually this also catches
-% non-italic slanted fonts since it is impossible to distinguish them from
-% italic fonts.  But since this is only used by $ and it uses \sl anyway
-% this is not a problem.
-\def\ifusingit#1#2{\ifdim \fontdimen1\font>0pt #1\else #2\fi}
-
-% Turn off all special characters except @
-% (and those which the user can use as if they were ordinary).
-% Most of these we simply print from the \tt font, but for some, we can
-% use math or other variants that look better in normal text.
-
-\catcode`\"=\active
-\def\activedoublequote{{\tt\char34}}
-\let"=\activedoublequote
-\catcode`\~=\active \def\activetilde{{\tt\char126}} \let~ = \activetilde
-\chardef\hat=`\^
-\catcode`\^=\active \def\activehat{{\tt \hat}} \let^ = \activehat
-
-\catcode`\_=\active
-\def_{\ifusingtt\normalunderscore\_}
-\let\realunder=_
-% Subroutine for the previous macro.
-\def\_{\leavevmode \kern.07em \vbox{\hrule width.3em height.1ex}\kern .07em }
-
-\catcode`\|=\active
-\def|{{\tt\char124}}
-
-\chardef \less=`\<
-\catcode`\<=\active \def\activeless{{\tt \less}}\let< = \activeless
-\chardef \gtr=`\>
-\catcode`\>=\active \def\activegtr{{\tt \gtr}}\let> = \activegtr
-\catcode`\+=\active \def+{{\tt \char 43}}
-\catcode`\$=\active \def${\ifusingit{{\sl\$}}\normaldollar}%$ font-lock fix
-
-% used for headline/footline in the output routine, in case the page
-% breaks in the middle of an @tex block.
-\def\texinfochars{%
-  \let< = \activeless
-  \let> = \activegtr
-  \let~ = \activetilde 
-  \let^ = \activehat
-  \markupsetuplqdefault \markupsetuprqdefault 
-  \let\b = \strong
-  \let\i = \smartitalic
-  % in principle, all other definitions in \tex have to be undone too.
-}
-
-% If a .fmt file is being used, characters that might appear in a file
-% name cannot be active until we have parsed the command line.
-% So turn them off again, and have \everyjob (or @setfilename) turn them on.
-% \otherifyactive is called near the end of this file.
-\def\otherifyactive{\catcode`+=\other \catcode`\_=\other}
-
-% Used sometimes to turn off (effectively) the active characters even after
-% parsing them.
-\def\turnoffactive{%
-  \normalturnoffactive
-  \otherbackslash
-}
-
-\catcode`\@=0
-
-% \backslashcurfont outputs one backslash character in current font,
-% as in \char`\\.
-\global\chardef\backslashcurfont=`\\
-\global\let\rawbackslashxx=\backslashcurfont  % let existing .??s files work
-
-% \realbackslash is an actual character `\' with catcode other, and
-% \doublebackslash is two of them (for the pdf outlines).
-{\catcode`\\=\other @gdef@realbackslash{\} @gdef@doublebackslash{\\}}
-
-% In texinfo, backslash is an active character; it prints the backslash
-% in fixed width font.
-\catcode`\\=\active  % @ for escape char from now on.
-
-% The story here is that in math mode, the \char of \backslashcurfont
-% ends up printing the roman \ from the math symbol font (because \char
-% in math mode uses the \mathcode, and plain.tex sets
-% \mathcode`\\="026E).  It seems better for @backslashchar{} to always
-% print a typewriter backslash, hence we use an explicit \mathchar,
-% which is the decimal equivalent of "715c (class 7, e.g., use \fam;
-% ignored family value; char position "5C).  We can't use " for the
-% usual hex value because it has already been made active.
-@def@normalbackslash{{@tt @ifmmode @mathchar29020 @else @backslashcurfont @fi}}
-@let@backslashchar = @normalbackslash % @backslashchar{} is for user documents.
-
-% On startup, @fixbackslash assigns:
-%  @let \ = @normalbackslash
-% \rawbackslash defines an active \ to do \backslashcurfont.
-% \otherbackslash defines an active \ to be a literal `\' character with
-% catcode other.  We switch back and forth between these.
-@gdef@rawbackslash{@let\=@backslashcurfont}
-@gdef@otherbackslash{@let\=@realbackslash}
-
-% Same as @turnoffactive except outputs \ as {\tt\char`\\} instead of
-% the literal character `\'.  Also revert - to its normal character, in
-% case the active - from code has slipped in.
-%
-{@catcode`- = @active
- @gdef@normalturnoffactive{%
-   @let-=@normaldash
-   @let"=@normaldoublequote
-   @let$=@normaldollar %$ font-lock fix
-   @let+=@normalplus
-   @let<=@normalless
-   @let>=@normalgreater
-   @let\=@normalbackslash
-   @let^=@normalcaret
-   @let_=@normalunderscore
-   @let|=@normalverticalbar
-   @let~=@normaltilde
-   @markupsetuplqdefault
-   @markupsetuprqdefault
-   @unsepspaces
- }
-}
-
-% Make _ and + \other characters, temporarily.
-% This is canceled by @fixbackslash.
-@otherifyactive
-
-% If a .fmt file is being used, we don't want the `\input texinfo' to show up.
-% That is what \eatinput is for; after that, the `\' should revert to printing
-% a backslash.
-%
-@gdef@eatinput input texinfo{@fixbackslash}
-@global@let\ = @eatinput
-
-% On the other hand, perhaps the file did not have a `\input texinfo'. Then
-% the first `\' in the file would cause an error. This macro tries to fix
-% that, assuming it is called before the first `\' could plausibly occur.
-% Also turn back on active characters that might appear in the input
-% file name, in case not using a pre-dumped format.
-%
-@gdef@fixbackslash{%
-  @ifx\@eatinput @let\ = @normalbackslash @fi
-  @catcode`+=@active
-  @catcode`@_=@active
-}
-
-% Say @foo, not \foo, in error messages.
-@escapechar = `@@
-
-% These (along with & and #) are made active for url-breaking, so need
-% active definitions as the normal characters.
-@def@normaldot{.}
-@def@normalquest{?}
-@def@normalslash{/}
-
-% These look ok in all fonts, so just make them not special.
-% @hashchar{} gets its own user-level command, because of #line.
-@catcode`@& = @other @def@normalamp{&}
-@catcode`@# = @other @def@normalhash{#}
-@catcode`@% = @other @def@normalpercent{%}
-
-@let @hashchar = @normalhash
-
-@c Finally, make ` and ' active, so that txicodequoteundirected and
-@c txicodequotebacktick work right in, e.g., @w{@code{`foo'}}.  If we
-@c don't make ` and ' active, @code will not get them as active chars.
-@c Do this last of all since we use ` in the previous @catcode assignments.
-@catcode`@'=@active
-@catcode`@`=@active
-@markupsetuplqdefault
-@markupsetuprqdefault
-
-@c Local variables:
-@c eval: (add-hook 'write-file-hooks 'time-stamp)
-@c page-delimiter: "^\\\\message"
-@c time-stamp-start: "def\\\\texinfoversion{"
-@c time-stamp-format: "%:y-%02m-%02d.%02H"
-@c time-stamp-end: "}"
-@c End:
-
-@c vim:sw=2:
-
-@ignore
-   arch-tag: e1b36e32-c96e-4135-a41a-0b2efa2ea115
-@end ignore
diff -Nuar groff-1.22.3.old/font/devascii/devascii.am groff-1.22.3/font/devascii/devascii.am
--- groff-1.22.3.old/font/devascii/devascii.am	1970-01-01 02:00:00.000000000 +0200
+++ groff-1.22.3/font/devascii/devascii.am	2015-04-23 20:57:03.000000000 +0300
@@ -0,0 +1,46 @@
+# Copyright (C) 2014
+#   Free Software Foundation, Inc.
+#
+# This file is part of `groff'
+#
+# `groff' is free software; you can redistribute it and/or modify it
+# under the terms of the GNU General Public License as published by
+# the Free Software Foundation, either version 3 of the License, or
+# (at your option) any later version.
+#
+# `groff' is distributed in the hope that it will be useful, but
+# WITHOUT ANY WARRANTY; without even the implied warranty of
+# MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the GNU
+# General Public License for more details.
+#
+# You should have received a copy of the GNU General Public License
+# along with this program. If not, see <http://www.gnu.org/licenses/>.
+
+devascii_srcdir = $(top_srcdir)/font/devascii
+DEVASCIIFONTS = R I B BI
+DEVASCIIFONTSFILES = \
+  font/devascii/R font/devascii/I font/devascii/B font/devascii/BI
+
+DEVASCIIRES = 240
+DEVASCIICPI = 10
+DEVASCIILPI = 6
+
+devasciifontdir = $(fontdir)/devascii
+devasciifont_DATA = $(DEVASCIIFONTSFILES) font/devascii/DESC
+MOSTLYCLEANFILES += $(DEVASCIIFONTSFILES) font/devascii/DESC
+EXTRA_DIST += \
+  font/devascii/R.proto \
+  font/devascii/DESC.proto
+
+$(DEVASCIIFONTSFILES): $(devascii_srcdir)/R.proto
+	@echo Making $@
+	$(MKDIR_P) `dirname $@`
+	$(RM) $@
+	$(SHELL) $(GENFONTSSH) $(devascii_srcdir)/R.proto \
+	  $(DEVASCIIRES) $(DEVASCIICPI) `basename $@` > $@
+
+font/devascii/DESC: $(devascii_srcdir)/DESC.proto
+	@echo Making $@
+	$(MKDIR_P) `dirname $@`
+	$(SHELL) $(GENDESCSH) $(devascii_srcdir)/DESC.proto \
+	  $(DEVASCIIRES) $(DEVASCIICPI) $(DEVASCIILPI) $(DEVASCIIFONTS) > $@
diff -Nuar groff-1.22.3.old/font/devascii/.gitignore groff-1.22.3/font/devascii/.gitignore
--- groff-1.22.3.old/font/devascii/.gitignore	1970-01-01 02:00:00.000000000 +0200
+++ groff-1.22.3/font/devascii/.gitignore	2015-04-23 20:57:03.000000000 +0300
@@ -0,0 +1,5 @@
+B
+BI
+DESC
+I
+R
diff -Nuar groff-1.22.3.old/font/devascii/Makefile.sub groff-1.22.3/font/devascii/Makefile.sub
--- groff-1.22.3.old/font/devascii/Makefile.sub	2014-11-04 10:38:35.401521797 +0200
+++ groff-1.22.3/font/devascii/Makefile.sub	1970-01-01 02:00:00.000000000 +0200
@@ -1,68 +0,0 @@
-# Makefile.sub for `font devascii'
-#
-# File position: <groff-source>/font/devascii/Makefile.sub
-#
-# Copyright (C) 2014
-#   Free Software Foundation, Inc.
-#
-# Last update: 2 Sep 2014
-#
-# This file is part of `font utf8' which is part of `groff'.
-#
-# `groff' is free software; you can redistribute it and/or modify it
-# under the terms of the GNU General Public License as published by
-# the Free Software Foundation, either version 2 of the License, or
-# (at your option) any later version.
-#
-# `groff' is distributed in the hope that it will be useful, but
-# WITHOUT ANY WARRANTY; without even the implied warranty of
-# MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the GNU
-# General Public License for more details.
-#
-# You should have received a copy of the GNU General Public License
-# along with this program. If not, see
-# <http://www.gnu.org/licenses/gpl-2.0.html>.
-#
-########################################################################
-
-DEV=ascii
-FONTS=R I B BI
-DEVFILES=$(FONTS) DESC
-MOSTLYCLEANADD=$(FONTS) DESC
-
-RES=240
-CPI=10
-LPI=6
-
-RM=rm -f
-
-$(FONTS): R.proto
-	@echo Making $@
-	@$(RM) $@
-	@charwidth=`expr $(RES) / $(CPI)` ; \
-	 sed -e "s/^name [A-Z]*$$/name $@/" \
-	     -e \
-	      "s/^\\([^	]*\\)	[0-9][0-9]*	/\\1	$$charwidth	/" \
-	     -e "s/^spacewidth [0-9][0-9]*$$/spacewidth $$charwidth/" \
-	     -e "s/^internalname .*$$/internalname $@/" \
-	     -e "/^internalname/s/BI/3/" \
-	     -e "/^internalname/s/B/2/" \
-	     -e "/^internalname/s/I/1/" \
-	     -e "/^internalname .*[^ 0-9]/d" \
-	     $(srcdir)/R.proto >$@
-
-DESC: DESC.proto
-	@echo Making $@
-	@sed -e "s/^res .*$$/res $(RES)/" \
-	     -e "s/^hor .*$$/hor `expr $(RES) / $(CPI)`/" \
-	     -e "s/^vert .*$$/vert `expr $(RES) / $(LPI)`/" \
-	     -e "s/^fonts .*$$/fonts `set $(FONTS); echo $$#` $(FONTS)/" \
-	     $(srcdir)/DESC.proto >$@
-
-########################################################################
-# Emacs settings
-########################################################################
-#
-# Local Variables:
-# mode: makefile
-# End:
diff -Nuar groff-1.22.3.old/font/devcp1047/devcp1047.am groff-1.22.3/font/devcp1047/devcp1047.am
--- groff-1.22.3.old/font/devcp1047/devcp1047.am	1970-01-01 02:00:00.000000000 +0200
+++ groff-1.22.3/font/devcp1047/devcp1047.am	2015-04-23 20:57:03.000000000 +0300
@@ -0,0 +1,44 @@
+# Copyright (C) 2014
+#   Free Software Foundation, Inc.
+#
+# This file is part of `groff'
+#
+# `groff' is free software; you can redistribute it and/or modify it
+# under the terms of the GNU General Public License as published by
+# the Free Software Foundation, either version 3 of the License, or
+# (at your option) any later version.
+#
+# `groff' is distributed in the hope that it will be useful, but
+# WITHOUT ANY WARRANTY; without even the implied warranty of
+# MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the GNU
+# General Public License for more details.
+#
+# You should have received a copy of the GNU General Public License
+# along with this program. If not, see <http://www.gnu.org/licenses/>.
+
+devcp1047_srcdir = $(top_srcdir)/font/devcp1047
+DEVCP1047FONTS = R I B BI
+DEVCP1047FONTSFILES = \
+  font/devcp1047/R font/devcp1047/I font/devcp1047/B font/devcp1047/BI
+
+DEVCP1047RES = 240
+DEVCP1047CPI = 10
+DEVCP1047LPI = 6
+
+devcp1047fontdir = $(fontdir)/devcp1047
+devcp1047font_DATA = $(DEVCP1047FONTSFILES) font/devcp1047/DESC
+MOSTLYCLEANFILES += $(DEVCP1047FONTSFILES) font/devcp1047/DESC
+EXTRA_DIST += font/devcp1047/R.proto font/devcp1047/DESC.proto
+
+$(DEVCP1047FONTSFILES): $(devcp1047_srcdir)/R.proto
+	@echo Making $@
+	@$(MKDIR_P) `dirname $@`
+	@$(RM) $@
+	@$(SHELL) $(GENFONTSSH) $(devcp1047_srcdir)/R.proto \
+	 $(DEVCP1047RES) $(DEVCP1047CPI) `basename $@` > $@
+
+font/devcp1047/DESC: $(devcp1047_srcdir)/DESC.proto
+	@echo Making $@
+	@$(MKDIR_P) `dirname $@`
+	@$(SHELL) $(GENDESCSH) $(devcp1047_srcdir)/DESC.proto \
+	 $(DEVCP1047RES) $(DEVCP1047CPI) $(DEVCP1047LPI) $(DEVCP1047FONTS) > $@
diff -Nuar groff-1.22.3.old/font/devcp1047/.gitignore groff-1.22.3/font/devcp1047/.gitignore
--- groff-1.22.3.old/font/devcp1047/.gitignore	1970-01-01 02:00:00.000000000 +0200
+++ groff-1.22.3/font/devcp1047/.gitignore	2015-04-23 20:57:03.000000000 +0300
@@ -0,0 +1,5 @@
+B
+BI
+DESC
+I
+R
diff -Nuar groff-1.22.3.old/font/devcp1047/Makefile.sub groff-1.22.3/font/devcp1047/Makefile.sub
--- groff-1.22.3.old/font/devcp1047/Makefile.sub	2014-11-04 10:38:35.414521634 +0200
+++ groff-1.22.3/font/devcp1047/Makefile.sub	1970-01-01 02:00:00.000000000 +0200
@@ -1,68 +0,0 @@
-# Makefile.sub for `font devcp1047'
-#
-# File position: <groff-source>/font/devcp1047/Makefile.sub
-#
-# Copyright (C) 2014
-#   Free Software Foundation, Inc.
-#
-# Last update: 2 Sep 2014
-#
-# This file is part of `font utf8' which is part of `groff'.
-#
-# `groff' is free software; you can redistribute it and/or modify it
-# under the terms of the GNU General Public License as published by
-# the Free Software Foundation, either version 2 of the License, or
-# (at your option) any later version.
-#
-# `groff' is distributed in the hope that it will be useful, but
-# WITHOUT ANY WARRANTY; without even the implied warranty of
-# MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the GNU
-# General Public License for more details.
-#
-# You should have received a copy of the GNU General Public License
-# along with this program. If not, see
-# <http://www.gnu.org/licenses/gpl-2.0.html>.
-#
-########################################################################
-
-DEV=cp1047
-FONTS=R I B BI
-DEVFILES=$(FONTS) DESC
-MOSTLYCLEANADD=$(FONTS) DESC
-
-RES=240
-CPI=10
-LPI=6
-
-RM=rm -f
-
-$(FONTS): R.proto
-	@echo Making $@
-	@$(RM) $@
-	@charwidth=`expr $(RES) / $(CPI)` ; \
-	 sed -e "s/^name [A-Z]*$$/name $@/" \
-	     -e \
-	      "s/^\\([^	]*\\)	[0-9][0-9]*	/\\1	$$charwidth	/" \
-	     -e "s/^spacewidth [0-9][0-9]*$$/spacewidth $$charwidth/" \
-	     -e "s/^internalname .*$$/internalname $@/" \
-	     -e "/^internalname/s/BI/3/" \
-	     -e "/^internalname/s/B/2/" \
-	     -e "/^internalname/s/I/1/" \
-	     -e "/^internalname .*[^ 0-9]/d" \
-	     $(srcdir)/R.proto >$@
-
-DESC: DESC.proto
-	@echo Making $@
-	@sed -e "s/^res .*$$/res $(RES)/" \
-	     -e "s/^hor .*$$/hor `expr $(RES) / $(CPI)`/" \
-	     -e "s/^vert .*$$/vert `expr $(RES) / $(LPI)`/" \
-	     -e "s/^fonts .*$$/fonts `set $(FONTS); echo $$#` $(FONTS)/" \
-	     $(srcdir)/DESC.proto >$@
-
-########################################################################
-# Emacs settings
-########################################################################
-#
-# Local Variables:
-# mode: makefile
-# End:
diff -Nuar groff-1.22.3.old/font/devdvi/devdvi.am groff-1.22.3/font/devdvi/devdvi.am
--- groff-1.22.3.old/font/devdvi/devdvi.am	1970-01-01 02:00:00.000000000 +0200
+++ groff-1.22.3/font/devdvi/devdvi.am	2015-04-23 20:57:03.000000000 +0300
@@ -0,0 +1,90 @@
+# Copyright (C) 2014
+#   Free Software Foundation, Inc.
+#
+# This file is part of `groff'
+#
+# `groff' is free software; you can redistribute it and/or modify it
+# under the terms of the GNU General Public License as published by
+# the Free Software Foundation, either version 3 of the License, or
+# (at your option) any later version.
+#
+# `groff' is distributed in the hope that it will be useful, but
+# WITHOUT ANY WARRANTY; without even the implied warranty of
+# MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the GNU
+# General Public License for more details.
+#
+# You should have received a copy of the GNU General Public License
+# along with this program. If not, see <http://www.gnu.org/licenses/>.
+
+devdvi_srcdir = $(top_srcdir)/font/devdvi
+DEVDVIFONTFILES = \
+  font/devdvi/TR \
+  font/devdvi/TI \
+  font/devdvi/TB \
+  font/devdvi/TBI \
+  font/devdvi/CW \
+  font/devdvi/CWI \
+  font/devdvi/HR \
+  font/devdvi/HI \
+  font/devdvi/HB \
+  font/devdvi/HBI \
+  font/devdvi/TREC \
+  font/devdvi/TIEC \
+  font/devdvi/TBEC \
+  font/devdvi/TBIEC \
+  font/devdvi/CWEC \
+  font/devdvi/CWIEC \
+  font/devdvi/HREC \
+  font/devdvi/HIEC \
+  font/devdvi/HBEC \
+  font/devdvi/HBIEC \
+  font/devdvi/TRTC \
+  font/devdvi/TITC \
+  font/devdvi/TBTC \
+  font/devdvi/TBITC \
+  font/devdvi/CWTC \
+  font/devdvi/CWITC \
+  font/devdvi/HRTC \
+  font/devdvi/HITC \
+  font/devdvi/HBTC \
+  font/devdvi/HBITC \
+  font/devdvi/MI \
+  font/devdvi/S \
+  font/devdvi/EX \
+  font/devdvi/SA \
+  font/devdvi/SB \
+  font/devdvi/SC
+devdvifontdir = $(fontdir)/devdvi
+devdvifont_DATA = $(DEVDVIFONTFILES) font/devdvi/DESC
+
+DEVDVIGENFILES = \
+  font/devdvi/generate/Makefile \
+  font/devdvi/generate/msam.map \
+  font/devdvi/generate/msbm.map \
+  font/devdvi/generate/texb.map \
+  font/devdvi/generate/texex.map \
+  font/devdvi/generate/texi.map \
+  font/devdvi/generate/texmi.map \
+  font/devdvi/generate/texr.map \
+  font/devdvi/generate/texsy.map \
+  font/devdvi/generate/textt.map \
+  font/devdvi/generate/textex.map \
+  font/devdvi/generate/ec.map \
+  font/devdvi/generate/tc.map \
+  font/devdvi/generate/CompileFonts
+devdvigendir = $(fontdir)/devdvi/generate
+devdvigen_DATA = $(DEVDVIGENFILES)
+
+EXTRA_DIST += $(DEVDVIFONTFILES) $(DEVDVIGENFILES) font/devdvi/DESC.in
+MOSTLYCLEANFILES += font/devdvi/DESC
+
+font/devdvi/DESC: $(devdvi_srcdir)/DESC.in
+	@echo Making $@
+	@$(MKDIR_P) `dirname $@`
+	@cat $(devdvi_srcdir)/DESC.in >$@
+	@if test "$(PAGE)" = A4; then \
+	  echo "papersize a4" >>$@; \
+	else \
+	  echo "papersize letter" >>$@; \
+	fi
+	@test -z '$(DVIPRINT)' || echo print '$(DVIPRINT)' >>$@
diff -Nuar groff-1.22.3.old/font/devdvi/.gitignore groff-1.22.3/font/devdvi/.gitignore
--- groff-1.22.3.old/font/devdvi/.gitignore	1970-01-01 02:00:00.000000000 +0200
+++ groff-1.22.3/font/devdvi/.gitignore	2015-04-23 20:57:03.000000000 +0300
@@ -0,0 +1 @@
+DESC
diff -Nuar groff-1.22.3.old/font/devdvi/Makefile.sub groff-1.22.3/font/devdvi/Makefile.sub
--- groff-1.22.3.old/font/devdvi/Makefile.sub	2014-11-04 10:38:35.350522434 +0200
+++ groff-1.22.3/font/devdvi/Makefile.sub	1970-01-01 02:00:00.000000000 +0200
@@ -1,58 +0,0 @@
-# Makefile.sub for `font devdvi'
-#
-# File position: <groff-source>/font/devdvi/Makefile.sub
-#
-# Copyright (C) 2014
-#   Free Software Foundation, Inc.
-#
-# Last update: 2 Sep 2014
-#
-# This file is part of `font utf8' which is part of `groff'.
-#
-# `groff' is free software; you can redistribute it and/or modify it
-# under the terms of the GNU General Public License as published by
-# the Free Software Foundation, either version 2 of the License, or
-# (at your option) any later version.
-#
-# `groff' is distributed in the hope that it will be useful, but
-# WITHOUT ANY WARRANTY; without even the implied warranty of
-# MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the GNU
-# General Public License for more details.
-#
-# You should have received a copy of the GNU General Public License
-# along with this program. If not, see
-# <http://www.gnu.org/licenses/gpl-2.0.html>.
-#
-########################################################################
-
-DEV=dvi
-DEVFILES=DESC \
-  TR TI TB TBI CW CWI HR HI HB HBI \
-  TREC TIEC TBEC TBIEC CWEC CWIEC HREC HIEC HBEC HBIEC \
-  TRTC TITC TBTC TBITC CWTC CWITC HRTC HITC HBTC HBITC \
-  MI S EX SA SB SC \
-  generate/Makefile \
-  generate/msam.map generate/msbm.map \
-  generate/texb.map generate/texex.map generate/texi.map generate/texmi.map \
-  generate/texr.map generate/texsy.map generate/textt.map generate/textex.map \
-  generate/ec.map generate/tc.map
-DEVSCRIPTS=generate/CompileFonts
-
-MOSTLYCLEANADD=DESC
-
-DESC: DESC.in
-	cat $(srcdir)/DESC.in >DESC
-	if test "$(PAGE)" = A4; then \
-	  echo "papersize a4" >>DESC; \
-	else \
-	  echo "papersize letter" >>DESC; \
-	fi
-	test -z '$(DVIPRINT)' || echo print '$(DVIPRINT)' >>DESC
-
-########################################################################
-# Emacs settings
-########################################################################
-#
-# Local Variables:
-# mode: makefile
-# End:
diff -Nuar groff-1.22.3.old/font/devhtml/devhtml.am groff-1.22.3/font/devhtml/devhtml.am
--- groff-1.22.3.old/font/devhtml/devhtml.am	1970-01-01 02:00:00.000000000 +0200
+++ groff-1.22.3/font/devhtml/devhtml.am	2015-04-23 20:57:03.000000000 +0300
@@ -0,0 +1,56 @@
+# Copyright (C) 2014
+#   Free Software Foundation, Inc.
+#
+# This file is part of `groff'
+#
+# `groff' is free software; you can redistribute it and/or modify it
+# under the terms of the GNU General Public License as published by
+# the Free Software Foundation, either version 3 of the License, or
+# (at your option) any later version.
+#
+# `groff' is distributed in the hope that it will be useful, but
+# WITHOUT ANY WARRANTY; without even the implied warranty of
+# MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the GNU
+# General Public License for more details.
+#
+# You should have received a copy of the GNU General Public License
+# along with this program. If not, see <http://www.gnu.org/licenses/>.
+
+devhtml_srcdir = $(top_srcdir)/font/devhtml
+DEVHTMLFONTS = R I B BI CR CI CB CBI S
+DEVHTMLFONTSFILES = \
+  font/devhtml/R \
+  font/devhtml/I \
+  font/devhtml/B \
+  font/devhtml/BI \
+  font/devhtml/CR \
+  font/devhtml/CI \
+  font/devhtml/CB \
+  font/devhtml/CBI \
+  font/devhtml/S
+
+DEVHTMLRES = 240
+DEVHTMLCPI = 10
+DEVHTMLLPI = 6
+
+devhtmlfontdir = $(fontdir)/devhtml
+devhtmlfont_DATA = $(DEVHTMLFONTSFILES) font/devhtml/DESC
+MOSTLYCLEANFILES += $(DEVHTMLFONTSFILES) font/devhtml/DESC
+EXTRA_DIST += \
+  font/devhtml/R.proto \
+  font/devhtml/DESC.proto \
+  font/devhtml/R.in
+
+$(DEVHTMLFONTSFILES): $(devhtml_srcdir)/R.proto
+	@echo Making $@
+	@$(MKDIR_P) `dirname $@`
+	@$(RM) $@
+	@$(SHELL) $(GENFONTSSH) $(devhtml_srcdir)/R.proto \
+	 $(DEVHTMLRES) $(DEVHTMLCPI) `basename $@` > $@
+
+font/devhtml/DESC: $(devhtml_srcdir)/DESC.proto
+	@echo Making $@
+	@$(MKDIR_P) `dirname $@`
+	@$(SHELL) $(GENDESCSH) $(devhtml_srcdir)/DESC.proto \
+	 $(DEVHTMLRES) $(DEVHTMLCPI) $(DEVHTMLLPI) $(DEVHTMLFONTS) > $@
+	@echo "image_generator $(GHOSTSCRIPT)" >> $@
diff -Nuar groff-1.22.3.old/font/devhtml/.gitignore groff-1.22.3/font/devhtml/.gitignore
--- groff-1.22.3.old/font/devhtml/.gitignore	1970-01-01 02:00:00.000000000 +0200
+++ groff-1.22.3/font/devhtml/.gitignore	2015-04-23 20:57:03.000000000 +0300
@@ -0,0 +1,10 @@
+B
+BI
+CB
+CBI
+CI
+CR
+DESC
+I
+R
+S
diff -Nuar groff-1.22.3.old/font/devhtml/Makefile.sub groff-1.22.3/font/devhtml/Makefile.sub
--- groff-1.22.3.old/font/devhtml/Makefile.sub	2014-11-04 10:38:35.356522359 +0200
+++ groff-1.22.3/font/devhtml/Makefile.sub	1970-01-01 02:00:00.000000000 +0200
@@ -1,71 +0,0 @@
-# Makefile.sub for `font devhtml'
-#
-# File position: <groff-source>/font/devhtml/Makefile.sub
-#
-# Copyright (C) 2014
-#   Free Software Foundation, Inc.
-#
-# Last update: 2 Sep 2014
-#
-# This file is part of `font utf8' which is part of `groff'.
-#
-# `groff' is free software; you can redistribute it and/or modify it
-# under the terms of the GNU General Public License as published by
-# the Free Software Foundation, either version 2 of the License, or
-# (at your option) any later version.
-#
-# `groff' is distributed in the hope that it will be useful, but
-# WITHOUT ANY WARRANTY; without even the implied warranty of
-# MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the GNU
-# General Public License for more details.
-#
-# You should have received a copy of the GNU General Public License
-# along with this program. If not, see
-# <http://www.gnu.org/licenses/gpl-2.0.html>.
-#
-########################################################################
-
-DEV=html
-PROTOFONTS=R I B BI CR CI CB CBI
-FONTS=$(PROTOFONTS) S
-DEVFILES=$(FONTS) DESC
-MOSTLYCLEANADD=$(FONTS) DESC
-
-RES=240
-CPI=10
-LPI=6
-
-RM=rm -f
-
-$(FONTS): R.proto
-	@echo Making $@
-	@$(RM) $@
-	@charwidth=`expr $(RES) / $(CPI)` ; \
-	 sed -e "s/^name [A-Z]*$$/name $@/" \
-	     -e \
-	      "s/^\\([^	]*\\)	[0-9][0-9]*	/\\1	$$charwidth	/" \
-	     -e "s/^spacewidth [0-9][0-9]*$$/spacewidth $$charwidth/" \
-	     -e "s/^internalname .*$$/internalname $@/" \
-	     -e "/^internalname/s/CR/4/" \
-	     -e "/^internalname/s/BI/3/" \
-	     -e "/^internalname/s/B/2/" \
-	     -e "/^internalname/s/I/1/" \
-	     -e "/^internalname .*[^ 0-9]/d" \
-	     $(srcdir)/R.proto >$@
-
-DESC: DESC.proto
-	@echo Making $@
-	@sed -e "s/^res .*$$/res $(RES)/" \
-	     -e "s/^hor .*$$/hor `expr $(RES) / $(CPI)`/" \
-	     -e "s/^vert .*$$/vert `expr $(RES) / $(LPI)`/" \
-	     -e "s/^fonts .*$$/fonts `set $(FONTS); echo $$#` $(FONTS)/" \
-	     $(srcdir)/DESC.proto >$@
-	@echo "image_generator $(GHOSTSCRIPT)" >> $@
-
-########################################################################
-# Emacs settings
-########################################################################
-#
-# Local Variables:
-# mode: makefile
-# End:
diff -Nuar groff-1.22.3.old/font/devlatin1/devlatin1.am groff-1.22.3/font/devlatin1/devlatin1.am
--- groff-1.22.3.old/font/devlatin1/devlatin1.am	1970-01-01 02:00:00.000000000 +0200
+++ groff-1.22.3/font/devlatin1/devlatin1.am	2015-04-23 20:57:03.000000000 +0300
@@ -0,0 +1,44 @@
+# Copyright (C) 2014
+#   Free Software Foundation, Inc.
+#
+# This file is part of `groff'
+#
+# `groff' is free software; you can redistribute it and/or modify it
+# under the terms of the GNU General Public License as published by
+# the Free Software Foundation, either version 3 of the License, or
+# (at your option) any later version.
+#
+# `groff' is distributed in the hope that it will be useful, but
+# WITHOUT ANY WARRANTY; without even the implied warranty of
+# MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the GNU
+# General Public License for more details.
+#
+# You should have received a copy of the GNU General Public License
+# along with this program. If not, see <http://www.gnu.org/licenses/>.
+
+devlatin1_srcdir = $(top_srcdir)/font/devlatin1
+DEVLATIN1FONTS = R I B BI
+DEVLATIN1FONTSFILES = \
+  font/devlatin1/R font/devlatin1/I font/devlatin1/B font/devlatin1/BI
+
+DEVLATIN1RES = 240
+DEVLATIN1CPI = 10
+DEVLATIN1LPI = 6
+
+devlatin1fontdir = $(fontdir)/devlatin1
+devlatin1font_DATA = $(DEVLATIN1FONTSFILES) font/devlatin1/DESC
+MOSTLYCLEANFILES += $(DEVLATIN1FONTSFILES) font/devlatin1/DESC
+EXTRA_DIST += font/devlatin1/R.proto font/devlatin1/DESC.proto
+
+$(DEVLATIN1FONTSFILES): $(devlatin1_srcdir)/R.proto
+	@echo Making $@
+	@$(MKDIR_P) `dirname $@`
+	@$(RM) $@
+	@$(SHELL) $(GENFONTSSH) $(devlatin1_srcdir)/R.proto \
+	 $(DEVLATIN1RES) $(DEVLATIN1CPI) `basename $@` > $@
+
+font/devlatin1/DESC: $(devlatin1_srcdir)/DESC.proto
+	@echo Making $@
+	@$(MKDIR_P) `dirname $@`
+	@$(SHELL) $(GENDESCSH) $(devlatin1_srcdir)/DESC.proto \
+	 $(DEVLATIN1RES) $(DEVLATIN1CPI) $(DEVLATIN1LPI) $(DEVLATIN1FONTS) > $@
diff -Nuar groff-1.22.3.old/font/devlatin1/.gitignore groff-1.22.3/font/devlatin1/.gitignore
--- groff-1.22.3.old/font/devlatin1/.gitignore	1970-01-01 02:00:00.000000000 +0200
+++ groff-1.22.3/font/devlatin1/.gitignore	2015-04-23 20:57:03.000000000 +0300
@@ -0,0 +1,5 @@
+B
+BI
+DESC
+I
+R
diff -Nuar groff-1.22.3.old/font/devlatin1/Makefile.sub groff-1.22.3/font/devlatin1/Makefile.sub
--- groff-1.22.3.old/font/devlatin1/Makefile.sub	2014-11-04 10:38:35.405521747 +0200
+++ groff-1.22.3/font/devlatin1/Makefile.sub	1970-01-01 02:00:00.000000000 +0200
@@ -1,65 +0,0 @@
-# Makefile.sub for `font devlatin1'
-#
-# File position: <groff-source>/font/devlatin1/Makefile.sub
-#
-# Copyright (C) 2014 Free Software Foundation, Inc.
-#
-# This file is part of `font utf8' which is part of `groff'.
-#
-# `groff' is free software; you can redistribute it and/or modify it
-# under the terms of the GNU General Public License as published by
-# the Free Software Foundation, either version 2 of the License, or
-# (at your option) any later version.
-#
-# `groff' is distributed in the hope that it will be useful, but
-# WITHOUT ANY WARRANTY; without even the implied warranty of
-# MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the GNU
-# General Public License for more details.
-#
-# You should have received a copy of the GNU General Public License
-# along with this program. If not, see
-# <http://www.gnu.org/licenses/gpl-2.0.html>.
-#
-########################################################################
-
-DEV=latin1
-FONTS=R I B BI
-DEVFILES=$(FONTS) DESC
-MOSTLYCLEANADD=$(FONTS) DESC
-
-RES=240
-CPI=10
-LPI=6
-
-RM=rm -f
-
-$(FONTS): R.proto
-	@echo Making $@
-	@$(RM) $@
-	@charwidth=`expr $(RES) / $(CPI)` ; \
-	 sed -e "s/^name [A-Z]*$$/name $@/" \
-	     -e \
-	      "s/^\\([^	]*\\)	[0-9][0-9]*	/\\1	$$charwidth	/" \
-	     -e "s/^spacewidth [0-9][0-9]*$$/spacewidth $$charwidth/" \
-	     -e "s/^internalname .*$$/internalname $@/" \
-	     -e "/^internalname/s/BI/3/" \
-	     -e "/^internalname/s/B/2/" \
-	     -e "/^internalname/s/I/1/" \
-	     -e "/^internalname .*[^ 0-9]/d" \
-	     $(srcdir)/R.proto >$@
-
-DESC: DESC.proto
-	@echo Making $@
-	@sed -e "s/^res .*$$/res $(RES)/" \
-	     -e "s/^hor .*$$/hor `expr $(RES) / $(CPI)`/" \
-	     -e "s/^vert .*$$/vert `expr $(RES) / $(LPI)`/" \
-	     -e "s/^fonts .*$$/fonts `set $(FONTS); echo $$#` $(FONTS)/" \
-	     $(srcdir)/DESC.proto >$@
-
-########################################################################
-# Emacs settings
-########################################################################
-#
-# Local Variables:
-# mode: makefile
-# End:
diff -Nuar groff-1.22.3.old/font/devlbp/devlbp.am groff-1.22.3/font/devlbp/devlbp.am
--- groff-1.22.3.old/font/devlbp/devlbp.am	1970-01-01 02:00:00.000000000 +0200
+++ groff-1.22.3/font/devlbp/devlbp.am	2015-04-23 20:57:03.000000000 +0300
@@ -0,0 +1,54 @@
+# Copyright (C) 2014
+#   Free Software Foundation, Inc.
+#
+# This file is part of `groff'
+#
+# `groff' is free software; you can redistribute it and/or modify it
+# under the terms of the GNU General Public License as published by
+# the Free Software Foundation, either version 3 of the License, or
+# (at your option) any later version.
+#
+# `groff' is distributed in the hope that it will be useful, but
+# WITHOUT ANY WARRANTY; without even the implied warranty of
+# MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the GNU
+# General Public License for more details.
+#
+# You should have received a copy of the GNU General Public License
+# along with this program. If not, see <http://www.gnu.org/licenses/>.
+
+LBPPRINT=$(PSPRINT)
+devlbp_srcdir = $(top_srcdir)/font/devlbp
+DEVLBPFONTFILES = \
+  font/devlbp/HB \
+  font/devlbp/HBI \
+  font/devlbp/HI \
+  font/devlbp/HR \
+  font/devlbp/HNB \
+  font/devlbp/HNBI \
+  font/devlbp/HNI \
+  font/devlbp/HNR \
+  font/devlbp/TB \
+  font/devlbp/TBI \
+  font/devlbp/TI \
+  font/devlbp/TR \
+  font/devlbp/CR \
+  font/devlbp/CB \
+  font/devlbp/CI \
+  font/devlbp/ER \
+  font/devlbp/EB \
+  font/devlbp/EI
+devlbpfontdir = $(fontdir)/devlbp
+devlbpfont_DATA = $(DEVLBPFONTFILES) font/devlbp/DESC
+EXTRA_DIST += $(DEVLBPFONTFILES) font/devlbp/DESC.in
+MOSTLYCLEANFILES += font/devlbp/DESC
+
+font/devlbp/DESC: $(devlbp_srcdir)/DESC.in
+	@echo Making $@
+	@$(MKDIR_P) `dirname $@`
+	@cat $(devlbp_srcdir)/DESC.in >$@
+	@if test "$(PAGE)" = A4; then \
+	  echo "papersize a4" >>$@; \
+	else \
+	  echo "papersize letter" >>$@; \
+	fi
+	@test -z '$(LBPPRINT)' || echo print '$(LBPPRINT)' >>$@
diff -Nuar groff-1.22.3.old/font/devlbp/.gitignore groff-1.22.3/font/devlbp/.gitignore
--- groff-1.22.3.old/font/devlbp/.gitignore	1970-01-01 02:00:00.000000000 +0200
+++ groff-1.22.3/font/devlbp/.gitignore	2015-04-23 20:57:03.000000000 +0300
@@ -0,0 +1 @@
+DESC
diff -Nuar groff-1.22.3.old/font/devlbp/Makefile.sub groff-1.22.3/font/devlbp/Makefile.sub
--- groff-1.22.3.old/font/devlbp/Makefile.sub	2014-11-04 10:38:35.396521859 +0200
+++ groff-1.22.3/font/devlbp/Makefile.sub	1970-01-01 02:00:00.000000000 +0200
@@ -1,54 +0,0 @@
-# Makefile.sub for `font devlbp'
-#
-# File position: <groff-source>/font/devlbp/Makefile.sub
-#
-# Copyright (C) 2014
-#   Free Software Foundation, Inc.
-#
-# Last update: 2 Sep 2014
-#
-# This file is part of `font utf8' which is part of `groff'.
-#
-# `groff' is free software; you can redistribute it and/or modify it
-# under the terms of the GNU General Public License as published by
-# the Free Software Foundation, either version 2 of the License, or
-# (at your option) any later version.
-#
-# `groff' is distributed in the hope that it will be useful, but
-# WITHOUT ANY WARRANTY; without even the implied warranty of
-# MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the GNU
-# General Public License for more details.
-#
-# You should have received a copy of the GNU General Public License
-# along with this program. If not, see
-# <http://www.gnu.org/licenses/gpl-2.0.html>.
-#
-########################################################################
-
-DEV=lbp
-LBPPRINT=$(PSPRINT)
-DEVFILES=DESC \
-  HB HBI HI HR \
-  HNB HNBI HNI HNR \
-  TB TBI TI TR \
-  CR CB CI \
-  ER EB EI
-
-MOSTLYCLEANADD=DESC
-
-DESC: DESC.in
-	cat $(srcdir)/DESC.in >DESC
-	if test "$(PAGE)" = A4; then \
-	  echo "papersize a4" >>DESC; \
-	else \
-	  echo "papersize letter" >>DESC; \
-	fi
-	test -z '$(LBPPRINT)' || echo print '$(LBPPRINT)' >>DESC
-
-########################################################################
-# Emacs settings
-########################################################################
-#
-# Local Variables:
-# mode: makefile
-# End:
diff -Nuar groff-1.22.3.old/font/devlj4/devlj4.am groff-1.22.3/font/devlj4/devlj4.am
--- groff-1.22.3.old/font/devlj4/devlj4.am	1970-01-01 02:00:00.000000000 +0200
+++ groff-1.22.3/font/devlj4/devlj4.am	2015-04-23 20:57:03.000000000 +0300
@@ -0,0 +1,104 @@
+# Copyright (C) 2014
+#   Free Software Foundation, Inc.
+#
+# This file is part of `groff'
+#
+# `groff' is free software; you can redistribute it and/or modify it
+# under the terms of the GNU General Public License as published by
+# the Free Software Foundation, either version 3 of the License, or
+# (at your option) any later version.
+#
+# `groff' is distributed in the hope that it will be useful, but
+# WITHOUT ANY WARRANTY; without even the implied warranty of
+# MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the GNU
+# General Public License for more details.
+#
+# You should have received a copy of the GNU General Public License
+# along with this program. If not, see <http://www.gnu.org/licenses/>.
+
+devlj4_srcdir = $(top_srcdir)/font/devlj4
+LJ4RES = 1200
+LJ4PRINT = $(PSPRINT)
+DEVLJ4FONTFILES = \
+  font/devlj4/AB \
+  font/devlj4/ABI \
+  font/devlj4/AI \
+  font/devlj4/AR \
+  font/devlj4/ALBB \
+  font/devlj4/ALBR \
+  font/devlj4/AOB \
+  font/devlj4/AOI \
+  font/devlj4/AOR \
+  font/devlj4/CB \
+  font/devlj4/CBI \
+  font/devlj4/CI \
+  font/devlj4/CR \
+  font/devlj4/GB \
+  font/devlj4/GBI \
+  font/devlj4/GI \
+  font/devlj4/GR \
+  font/devlj4/LGB \
+  font/devlj4/LGI \
+  font/devlj4/LGR \
+  font/devlj4/OB \
+  font/devlj4/OBI \
+  font/devlj4/OI \
+  font/devlj4/OR \
+  font/devlj4/TB \
+  font/devlj4/TBI \
+  font/devlj4/TI \
+  font/devlj4/TR \
+  font/devlj4/TNRB \
+  font/devlj4/TNRBI \
+  font/devlj4/TNRI \
+  font/devlj4/TNRR \
+  font/devlj4/UB \
+  font/devlj4/UBI \
+  font/devlj4/UI \
+  font/devlj4/UR \
+  font/devlj4/UCB \
+  font/devlj4/UCBI \
+  font/devlj4/UCI \
+  font/devlj4/UCR \
+  font/devlj4/CLARENDON \
+  font/devlj4/CORONET \
+  font/devlj4/MARIGOLD \
+  font/devlj4/S \
+  font/devlj4/SYMBOL \
+  font/devlj4/WINGDINGS
+
+devlj4fontdir = $(fontdir)/devlj4
+dist_devlj4font_DATA = $(DEVLJ4FONTFILES) 
+nodist_devlj4font_DATA = font/devlj4/DESC
+
+DEVLJ4GENFILES = \
+  font/devlj4/generate/Makefile \
+  font/devlj4/generate/special.map \
+  font/devlj4/generate/symbol.map \
+  font/devlj4/generate/text.map \
+  font/devlj4/generate/wingdings.map \
+  font/devlj4/generate/special.awk
+devlj4fontgendir = $(devlj4fontdir)/generate
+dist_devlj4fontgen_DATA = $(DEVLJ4GENFILES)
+
+EXTRA_DIST += font/devlj4/DESC.in
+
+MOSTLYCLEANFILES += font/devlj4/DESC
+
+font/devlj4/DESC: $(devlj4_srcdir)/DESC.in
+	@echo Making $@
+	@$(MKDIR_P) `dirname $@`
+	@echo "res $(LJ4RES)" >$@
+	@echo "unitwidth `expr 7620000 / $(LJ4RES)`" >>$@
+	@cat $(devlj4_srcdir)/DESC.in >>$@
+	@if test "$(PAGE)" = A4; then \
+	   echo "papersize a4" >>$@; \
+	else \
+	   echo "papersize letter" >>$@; \
+	fi
+	@test -z '$(LJ4PRINT)' || echo print '$(LJ4PRINT)' >>$@
+
+fonts: devlj4_fonts
+devlj4_fonts: hpftodit font/devlj4/DESC
+	$(MAKE) -f $(devlj4_srcdir)/generate/Makefile \
+	  srcdir=$(devlj4_srcdir)/generate HPFTODIT=$(top_builddir)/hpftodit
diff -Nuar groff-1.22.3.old/font/devlj4/.gitignore groff-1.22.3/font/devlj4/.gitignore
--- groff-1.22.3.old/font/devlj4/.gitignore	1970-01-01 02:00:00.000000000 +0200
+++ groff-1.22.3/font/devlj4/.gitignore	2015-04-23 20:57:03.000000000 +0300
@@ -0,0 +1 @@
+DESC
diff -Nuar groff-1.22.3.old/font/devlj4/Makefile.sub groff-1.22.3/font/devlj4/Makefile.sub
--- groff-1.22.3.old/font/devlj4/Makefile.sub	2014-11-04 10:38:35.387521972 +0200
+++ groff-1.22.3/font/devlj4/Makefile.sub	1970-01-01 02:00:00.000000000 +0200
@@ -1,77 +0,0 @@
-# Makefile.sub for `font devlj4'
-#
-# File position: <groff-source>/font/devlj4/Makefile.sub
-#
-# Copyright (C) 2014
-#   Free Software Foundation, Inc.
-#   Written by Werner Lemberg <wl@gnu.org> and
-#   Bernd Warken <groff-bernd.warken-72@web.de>.
-#
-# Last update: 2 Sep 2014
-#
-# This file is part of `groffer' which is part of `groff'.
-#
-# `groff' is free software; you can redistribute it and/or modify it
-# under the terms of the GNU General Public License as published by
-# the Free Software Foundation, either version 2 of the License, or
-# (at your option) any later version.
-#
-# `groff' is distributed in the hope that it will be useful, but
-# WITHOUT ANY WARRANTY; without even the implied warranty of
-# MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the GNU
-# General Public License for more details.
-#
-# You should have received a copy of the GNU General Public License
-# along with this program. If not, see
-# <http://www.gnu.org/licenses/gpl-2.0.html>.
-#
-########################################################################
-
-DEV=lj4
-LJ4RES=1200
-LJ4PRINT=$(PSPRINT)
-DEVFILES=DESC \
-  AB ABI AI AR \
-  ALBB ALBR \
-  AOB AOI AOR \
-  CB CBI CI CR \
-  GB GBI GI GR \
-  LGB LGI LGR \
-  OB OBI OI OR \
-  TB TBI TI TR \
-  TNRB TNRBI TNRI TNRR \
-  UB UBI UI UR \
-  UCB UCBI UCI UCR \
-  CLARENDON CORONET MARIGOLD S \
-  SYMBOL WINGDINGS \
-  generate/Makefile \
-  generate/special.map \
-  generate/symbol.map \
-  generate/text.map \
-  generate/wingdings.map \
-  generate/special.awk
-
-MOSTLYCLEANADD=DESC
-
-DESC: DESC.in
-	echo "res $(LJ4RES)" >DESC
-	echo "unitwidth `expr 7620000 / $(LJ4RES)`" >>DESC
-	cat $(srcdir)/DESC.in >>DESC
-	if test "$(PAGE)" = A4; then \
-	  echo "papersize a4" >>DESC; \
-	else \
-	  echo "papersize letter" >>DESC; \
-	fi
-	test -z '$(LJ4PRINT)' || echo print '$(LJ4PRINT)' >>DESC
-
-fonts:
-	$(MAKE) -f $(srcdir)/generate/Makefile srcdir=$(srcdir)/generate \
-	  HPFTODIT=$(top_builddir)/src/utils/hpftodit/hpftodit
-
-########################################################################
-# Emacs settings
-########################################################################
-#
-# Local Variables:
-# mode: makefile
-# End:
diff -Nuar groff-1.22.3.old/font/devpdf/devpdf.am groff-1.22.3/font/devpdf/devpdf.am
--- groff-1.22.3.old/font/devpdf/devpdf.am	1970-01-01 02:00:00.000000000 +0200
+++ groff-1.22.3/font/devpdf/devpdf.am	2015-04-23 20:57:03.000000000 +0300
@@ -0,0 +1,167 @@
+# Copyright (C) 2011-2014 Free Software Foundation, Inc.
+#      Free Software Foundation, Inc.
+#      Original Makefile.sub Written 
+#      by Deri James <deri@chuzzlewit.demon.co.uk>
+#      Automake migration by Bertrand Garrigues
+#
+# This file is part of groff.
+#
+# groff is free software; you can redistribute it and/or modify it under
+# the terms of the GNU General Public License as published by the Free
+# Software Foundation, either version 3 of the License, or
+# (at your option) any later version.
+#
+# groff is distributed in the hope that it will be useful, but WITHOUT ANY
+# WARRANTY; without even the implied warranty of MERCHANTABILITY or
+# FITNESS FOR A PARTICULAR PURPOSE.  See the GNU General Public License
+# for more details.
+#
+# You should have received a copy of the GNU General Public License
+# along with this program. If not, see <http://www.gnu.org/licenses/>.
+
+devpdf_srcdir = $(top_srcdir)/font/devpdf
+GROFF_FONT_FILES=`cd $(top_builddir)/font/devpdf && grep -l internalname * | grep -v devpdf.am`
+ENC_FILES=`cd $(top_builddir)/font/devpdf; ls enc/*`
+MAP_FILES=`cd $(top_builddir)/font/devpdf; ls map/*`
+
+MOSTLYCLEANFILES += \
+  font/devpdf/download \
+  font/devpdf/DESC \
+  font/devpdf/Foundry \
+  font/devpdf/build_font_files \
+  font/devpdf/util/BuildFoundries
+
+devpdffontdir = $(fontdir)/devpdf
+devpdffont_DATA = \
+  font/devpdf/DESC \
+  font/devpdf/Foundry
+
+devpdffontencdir = $(devpdffontdir)/enc
+devpdffontenc_DATA = font/devpdf/enc/text.enc
+
+devpdffontmapdir = $(devpdffontdir)/map
+DEVPDFFONTMAP_1 = \
+  font/devpdf/map/dingbats.map \
+  font/devpdf/map/symbolchars \
+  font/devpdf/map/textmap
+DEVPDFFONTMAP_2 = font/devpdf/map/symbolmap
+devpdffontmap_DATA = $(DEVPDFFONTMAP_1) $(DEVPDFFONTMAP_2)
+
+devpdffontutildir = $(devpdffontdir)/util
+nodist_devpdffontutil_DATA = font/devpdf/util/BuildFoundries
+
+EXTRA_DIST += \
+  font/devpdf/DESC.in \
+  font/devpdf/Foundry.in \
+  font/devpdf/util/BuildFoundries.pl
+
+font/devpdf/enc/text.enc:
+	@$(MKDIR_P) $(top_builddir)/font/devpdf/enc
+	cp -f $(top_srcdir)/font/devps/text.enc \
+	  $(top_builddir)/font/devpdf/enc
+
+font/devpdf/map/symbolmap:
+	@$(MKDIR_P) $(top_builddir)/font/devpdf/map
+	@cp -f $(top_srcdir)/font/devps/symbolmap \
+	  $(top_builddir)/font/devpdf/map
+
+$(DEVPDFFONTMAP_1):
+	@$(MKDIR_P) $(top_builddir)/font/devpdf/map
+	@cp -f $(top_srcdir)/font/devps/generate/`basename $@` \
+	  $(top_builddir)/font/devpdf/map
+
+font/devpdf/util/BuildFoundries: shdeps.sed $(devpdf_srcdir)/util/BuildFoundries.pl
+	@echo Making $@
+	@$(MKDIR_P) $(top_builddir)/font/devpdf/util
+	@$(RM) $(top_builddir)/font/devpdf/util/BuildFoundries
+	@if test -n "$(PERL)"; then \
+	  sed -f $(SH_DEPS_SED_SCRIPT) \
+	      -e "s|/usr/bin/perl|$(PERL)|" \
+	      -e "s|[@]GROFF_GHOSTSCRIPT_INTERPRETERS[@]|$(GHOSTSCRIPT)|" \
+	      -e "s|[@]VERSION[@]|$(VERSION)|" \
+	      -e "s|[@]GROFF_FONT_DIR[@]|$(fontdir)|" \
+	      $(devpdf_srcdir)/util/BuildFoundries.pl \
+	  >$(top_builddir)/font/devpdf/util/BuildFoundries ;\
+	else \
+	  sed -f $(SH_DEPS_SED_SCRIPT) \
+	      -e "s|[@]VERSION[@]|$(VERSION)|" \
+	      -e "s|[@]GROFF_FONT_DIR[@]|$(fontdir)|" \
+	      $(devpdf_srcdir)/util/BuildFoundries.pl \
+	  >$(top_builddir)/font/devpdf/util/BuildFoundries ;\
+	fi
+	@chmod +x $(top_builddir)/font/devpdf/util/BuildFoundries
+
+font/devpdf/DESC: $(devpdf_srcdir)/DESC.in
+	@echo Making $@
+	@$(MKDIR_P) $(top_builddir)/font/devpdf
+	@$(RM) $(top_builddir)/font/devpdf/DESC
+	@cat $(devpdf_srcdir)/DESC.in >$(top_builddir)/font/devpdf/DESC
+	@if test "$(PAGE)" = A4; then \
+	  echo "papersize a4" >>$(top_builddir)/font/devpdf/DESC; \
+	else \
+	  echo "papersize letter" >>$(top_builddir)/font/devpdf/DESC; \
+	fi
+
+font/devpdf/Foundry:
+	@$(RM) $(top_builddir)/font/devpdf/Foundry
+	@cat $(devpdf_srcdir)/Foundry.in >$(top_builddir)/font/devpdf/Foundry
+
+all: font/devpdf/build_font_files
+
+# PATH : path to find afmtodit. We add $(abs_top_builddir) because afmtodit is
+# built in the top builddir.
+font/devpdf/build_font_files: afmtodit font/devpdf/DESC $(devpdffontenc_DATA) $(devpdffontmap_DATA) $(devpdffont_DATA) font/devpdf/util/BuildFoundries
+	@echo Making all fonts
+	@$(RM) $@
+	@$(MKDIR_P) $(top_builddir)/font/devpdf
+	@echo "# foundry	ps name	psfile" > $(top_builddir)/font/devpdf/download
+	PATH="$(abs_top_builddir)$(GROFF_PATH_SEPARATOR)$(abs_top_builddir)/build-aux$(GROFF_PATH_SEPARATOR)$(PATH)" \
+	  $(abs_top_builddir)/font/devpdf/util/BuildFoundries $(abs_top_builddir)/font/devpdf \
+	    '$(abs_top_srcdir)/font/devps : $(abs_top_builddir)/font/devps' \
+	   >> $(top_builddir)/font/devpdf/download
+	@touch $@
+
+mostlyclean-local: mostlyclean_devpdf_extra
+mostlyclean_devpdf_extra:
+	@echo Cleaning font/devpdf
+	rm -rf $(top_builddir)/font/devpdf/enc $(top_builddir)/font/devpdf/map;
+	if test -d $(top_builddir)/font/devpdf; then \
+	  for f in $(GROFF_FONT_FILES); do \
+	    rm -f $(top_builddir)/font/devpdf/$$f; \
+	  done; \
+	fi
+
+install-data-local: install_devpdf
+install_devpdf:
+	@echo Installing devpdf files
+	-@test -d $(DESTDIR)$(devpdffontdir)/util \
+	  || $(mkinstalldirs) $(DESTDIR)$(devpdffontdir)/util
+	@for f in $(GROFF_FONT_FILES); do \
+	  $(RM) $(DESTDIR)$(devpdffontdir)/$$f; \
+	  if test -f $$f; then \
+	    $(INSTALL_DATA) $$f $(DESTDIR)$(devpdffontdir)/$$f; \
+	  else \
+	    $(INSTALL_DATA) $(top_builddir)/font/devpdf/$$f $(DESTDIR)$(devpdffontdir)/$$f; \
+	  fi; \
+	done
+	$(INSTALL_DATA) $(top_builddir)/font/devpdf/download $(DESTDIR)$(devpdffontdir)/
+
+uninstall_groffdirs: uninstall_devpdf
+uninstall_devpdf:
+	@echo Uninstalling devpdf files
+	if test -d $(DESTDIR)$(devpdffontdir); then \
+	  for f in $(GROFF_FONT_FILES); do \
+	    rm -f $(DESTDIR)$(devpdffontdir)/$$f; \
+	  done; \
+	  if test -d $(DESTDIR)$(devpdffontutildir); then \
+	    rmdir $(DESTDIR)$(devpdffontutildir); \
+	  fi; \
+	  if test -d $(DESTDIR)$(devpdffontencdir); then \
+	    rmdir $(DESTDIR)$(devpdffontencdir); \
+	  fi; \
+	  if test -d $(DESTDIR)$(devpdffontmapdir); then \
+	    rmdir $(DESTDIR)$(devpdffontmapdir); \
+	  fi; \
+	  rm -f $(DESTDIR)$(devpdffontdir)/download; \
+	  rmdir $(DESTDIR)$(devpdffontdir); \
+	fi
diff -Nuar groff-1.22.3.old/font/devpdf/Makefile.sub groff-1.22.3/font/devpdf/Makefile.sub
--- groff-1.22.3.old/font/devpdf/Makefile.sub	2014-11-04 10:38:35.427521472 +0200
+++ groff-1.22.3/font/devpdf/Makefile.sub	1970-01-01 02:00:00.000000000 +0200
@@ -1,139 +0,0 @@
-# Makefile.sub for `font devpdf'
-#
-# File position: <groff-source>/font/devpdf/Makefile.sub
-#
-# Copyright (C) 2011-2014 Free Software Foundation, Inc.
-#      Written by Deri James <deri@chuzzlewit.demon.co.uk>
-#
-# This file is part of groff.
-#
-# groff is free software; you can redistribute it and/or modify it under
-# the terms of the GNU General Public License as published by the Free
-# Software Foundation, either version 3 of the License, or
-# (at your option) any later version.
-#
-# groff is distributed in the hope that it will be useful, but WITHOUT ANY
-# WARRANTY; without even the implied warranty of MERCHANTABILITY or
-# FITNESS FOR A PARTICULAR PURPOSE.  See the GNU General Public License
-# for more details.
-#
-# You should have received a copy of the GNU General Public License
-# along with this program. If not, see <http://www.gnu.org/licenses/>.
-
-DEV=pdf
-GROFF_FONT_FILES=`cd $(top_builddir)/font/devpdf \
-                  && find * -maxdepth 0 -type f ! -name 'Makefile.sub*' \
-                            -exec grep -l internalname {} \;`
-ENC_FILES=`cd $(top_builddir)/font/devpdf; ls enc/*`
-MAP_FILES=`cd $(top_builddir)/font/devpdf; ls map/*`
-
-MOSTLYCLEANADD=\
-  download \
-  DESC \
-  Foundry \
-  util/BuildFoundries \
-  $(GROFF_FONT_FILES) \
-  $(ENC_FILES) \
-  $(MAP_FILES)
-
-MOSTLYCLEANDIRADD=enc map
-
-DEVFILES=\
-  Foundry
-
-#DEVSCRIPTS=util/BuildFoundries
-
-DISTFILES=\
-  $(DEVFILES) \
-  $(DEVSCRIPTS)
-
-RM=rm -f
-
-all: DESC
-
-DESC: DESC.in
-	$(RM) DESC
-	cat $(srcdir)/DESC.in >$(top_builddir)/font/devpdf/DESC
-	if test "$(PAGE)" = A4; then \
-	  echo "papersize a4" >>$(top_builddir)/font/devpdf/DESC; \
-	else \
-	  echo "papersize letter" >>$(top_builddir)/font/devpdf/DESC; \
-	fi
-	$(RM) Foundry
-	cat $(srcdir)/Foundry.in >$(top_builddir)/font/devpdf/Foundry
-	-test -d $(top_builddir)/font/devpdf/enc \
-	  || $(mkinstalldirs) $(top_builddir)/font/devpdf/enc
-	-test -d $(top_builddir)/font/devpdf/map \
-	  || $(mkinstalldirs) $(top_builddir)/font/devpdf/map
-	cp -f $(top_srcdir)/font/devps/text.enc \
-	  $(top_builddir)/font/devpdf/enc
-	cp -f $(top_srcdir)/font/devps/symbolmap \
-	  $(top_builddir)/font/devpdf/map
-	cp -f $(top_srcdir)/font/devps/generate/dingbats.map \
-	  $(top_builddir)/font/devpdf/map
-	cp -f $(top_srcdir)/font/devps/generate/textmap \
-	  $(top_builddir)/font/devpdf/map
-	cp -f $(top_srcdir)/font/devps/generate/symbolchars \
-	  $(top_builddir)/font/devpdf/map
-	-test -d util || $(mkinstalldirs) util
-	$(RM) util/BuildFoundries
-	if test -n "$(PERL)"; then \
-	  sed -f $(SH_DEPS_SED_SCRIPT) \
-	      -e "s|/usr/bin/perl|$(PERL)|" \
-	      -e "s|@GROFF_GHOSTSCRIPT_INTERPRETERS@|$(GHOSTSCRIPT)|" \
-	      -e "s|@VERSION@|$(version)$(revision)|" \
-	      -e "s|@GROFF_FONT_DIR@|$(fontdir)|" \
-	      $(srcdir)/util/BuildFoundries.pl \
-	  >$(top_builddir)/font/devpdf/util/BuildFoundries ;\
-	else \
-	  sed -f $(SH_DEPS_SED_SCRIPT) \
-	      -e "s|@VERSION@|$(version)$(revision)|" \
-	      -e "s|@GROFF_FONT_DIR@|$(fontdir)|" \
-	      $(srcdir)/util/BuildFoundries.pl \
-	  >$(top_builddir)/font/devpdf/util/BuildFoundries ;\
-	fi
-	chmod +x util/BuildFoundries
-	echo "# foundry	ps name	psfile" > $(top_builddir)/font/devpdf/download
-	PATH="$(top_builddir)/src/utils/afmtodit:$(GROFF_PATH_SEPARATOR)$(PATH)" \
-	  util/BuildFoundries $(top_builddir)/font/devpdf \
-	    '$(top_srcdir)/font/devps : $(top_builddir)/font/devps' \
-	   >> $(top_builddir)/font/devpdf/download
-
-install_data:
-	-test -d $(DESTDIR)$(fontsubdir) \
-	  || $(mkinstalldirs) $(DESTDIR)$(fontsubdir)
-	-test -d $(DESTDIR)$(fontsubdir)/enc \
-	  || $(mkinstalldirs) $(DESTDIR)$(fontsubdir)/enc
-	-test -d $(DESTDIR)$(fontsubdir)/map \
-	  || $(mkinstalldirs) $(DESTDIR)$(fontsubdir)/map
-	-test -d $(DESTDIR)$(fontsubdir)/util \
-	  || $(mkinstalldirs) $(DESTDIR)$(fontsubdir)/util
-	for f in $(MOSTLYCLEANADD); do \
-	  $(RM) $(DESTDIR)$(fontsubdir)/$$f; \
-	  if test -f $$f; then \
-	    $(INSTALL_DATA) $$f $(DESTDIR)$(fontsubdir)/$$f; \
-	  else \
-	    $(INSTALL_DATA) $(srcdir)/$$f $(DESTDIR)$(fontsubdir)/$$f; \
-	  fi; \
-	done
-
-uninstall_sub:
-	-for f in $(MOSTLYCLEANADD); do \
-	  $(RM) $(DESTDIR)$(fontsubdir)/$$f; \
-	done
-	-d=$(DESTDIR)$(fontsubdir)/enc; \
-	  if test -d $$d; then rmdir $$d; fi
-	-d=$(DESTDIR)$(fontsubdir)/map; \
-	  if test -d $$d; then rmdir $$d; fi
-	-d=$(DESTDIR)$(fontsubdir)/util; \
-	  if test -d $$d; then rmdir $$d; fi
-	-d=$(DESTDIR)$(fontsubdir); \
-	  if test -d $$d; then rmdir $$d; fi
-
-########################################################################
-# Emacs settings
-########################################################################
-#
-# Local Variables:
-# mode: makefile
-# End:
diff -Nuar groff-1.22.3.old/font/devps/devps.am groff-1.22.3/font/devps/devps.am
--- groff-1.22.3.old/font/devps/devps.am	1970-01-01 02:00:00.000000000 +0200
+++ groff-1.22.3/font/devps/devps.am	2015-04-23 20:57:03.000000000 +0300
@@ -0,0 +1,170 @@
+# Copyright (C) 2014
+#   Free Software Foundation, Inc.
+#
+# This file is part of `groff'
+#
+# `groff' is free software; you can redistribute it and/or modify it
+# under the terms of the GNU General Public License as published by
+# the Free Software Foundation, either version 3 of the License, or
+# (at your option) any later version.
+#
+# `groff' is distributed in the hope that it will be useful, but
+# WITHOUT ANY WARRANTY; without even the implied warranty of
+# MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the GNU
+# General Public License for more details.
+#
+# You should have received a copy of the GNU General Public License
+# along with this program. If not, see <http://www.gnu.org/licenses/>.
+
+devps_srcdir = $(top_srcdir)/font/devps
+devps_builddir = $(top_builddir)/font/devps
+DEVPSFONTFILES = \
+  font/devps/S \
+  font/devps/SS \
+  font/devps/ZD \
+  font/devps/ZDR \
+  font/devps/ZCMI \
+  font/devps/AB \
+  font/devps/ABI \
+  font/devps/AI \
+  font/devps/AR \
+  font/devps/BMB \
+  font/devps/BMBI \
+  font/devps/BMI \
+  font/devps/BMR \
+  font/devps/CB \
+  font/devps/CBI \
+  font/devps/CI \
+  font/devps/CR \
+  font/devps/HB \
+  font/devps/HBI \
+  font/devps/HI \
+  font/devps/HR \
+  font/devps/HNB \
+  font/devps/HNBI \
+  font/devps/HNI \
+  font/devps/HNR \
+  font/devps/NB \
+  font/devps/NBI \
+  font/devps/NI \
+  font/devps/NR \
+  font/devps/PB \
+  font/devps/PBI \
+  font/devps/PI \
+  font/devps/PR \
+  font/devps/TB \
+  font/devps/TBI \
+  font/devps/TI \
+  font/devps/TR \
+  font/devps/EURO \
+  font/devps/freeeuro.pfa \
+  font/devps/freeeuro.afm \
+  font/devps/text.enc \
+  font/devps/download
+
+DEVPSFONTFILES_GENERATED = \
+  font/devps/DESC \
+  font/devps/prologue \
+  font/devps/zapfdr.pfa \
+  font/devps/symbolsl.pfa
+devpsfontdir = $(fontdir)/devps
+dist_devpsfont_DATA = $(DEVPSFONTFILES) 
+nodist_devpsfont_DATA = $(DEVPSFONTFILES_GENERATED)
+
+# these files will be installed in oldfontdir
+OLDDEVPSFONTFILES = \
+  font/devps/old/S \
+  font/devps/old/SS \
+  font/devps/old/CB \
+  font/devps/old/CBI \
+  font/devps/old/CI \
+  font/devps/old/CR \
+  font/devps/old/HB \
+  font/devps/old/HBI \
+  font/devps/old/HI \
+  font/devps/old/HR \
+  font/devps/old/HNB \
+  font/devps/old/HNBI \
+  font/devps/old/HNI \
+  font/devps/old/HNR \
+  font/devps/old/NB \
+  font/devps/old/NBI \
+  font/devps/old/NI \
+  font/devps/old/NR \
+  font/devps/old/PB \
+  font/devps/old/PBI \
+  font/devps/old/PI \
+  font/devps/old/PR \
+  font/devps/old/TB \
+  font/devps/old/TBI \
+  font/devps/old/TI \
+  font/devps/old/TR \
+  font/devps/old/symbol.afm \
+  font/devps/old/symbolsl.afm \
+  font/devps/old/zapfdr.afm \
+  font/devps/old/zapfdr.ps
+olddevpsfontdir = $(oldfontdir)/devps
+dist_olddevpsfont_DATA = $(OLDDEVPSFONTFILES)
+
+# Files installed in $(devfontdir)/generate
+DEVPSGENFILES = \
+  font/devps/generate/Makefile \
+  font/devps/generate/dingbats.map \
+  font/devps/generate/dingbats.rmap \
+  font/devps/generate/lgreekmap \
+  font/devps/generate/symbolchars \
+  font/devps/generate/symbolsl.afm \
+  font/devps/generate/textmap
+DEVPSGENSCRIPTS = \
+  font/devps/generate/afmname \
+  font/devps/generate/symbol.sed
+devpsgendir = $(devpsfontdir)/generate
+dist_devpsgen_DATA = $(DEVPSGENFILES) $(DEVPSGENSCRIPTS)
+
+MOSTLYCLEANFILES += $(DEVPSFONTFILES_GENERATED)
+EXTRA_DIST += \
+  font/devps/symbolmap \
+  font/devps/DESC.in  \
+  font/devps/prologue.ps \
+  font/devps/psstrip.sed \
+  font/devps/symbol.afm \
+  font/devps/symbolsl.ps \
+  font/devps/zapfdr.afm \
+  font/devps/zapfdr.ps \
+  font/devps/generate/freeeuro.sfd \
+  font/devps/generate/make-zapfdr \
+  font/devps/generate/symbolsl.awk \
+  font/devps/generate/sfdtopfa.pe \
+  font/devps/generate/zapfdr.sed
+
+font/devps/DESC: $(devps_srcdir)/DESC.in
+	@$(MKDIR_P) font/devps
+	@cat $(devps_srcdir)/DESC.in >$@
+	@echo broken $(BROKEN_SPOOLER_FLAGS) >>$@
+	@if test "$(PAGE)" = A4; then \
+	  echo "papersize a4" >>$@; \
+	else \
+	  echo "papersize letter" >>$@; \
+	fi
+	@test -z '$(PSPRINT)' ||	echo print '$(PSPRINT)' >>$@
+
+fonts: devps_fonts
+# We add top_builddir to the PATH in case the only afmtodit available is the 
+# one in the current build.
+devps_fonts: afmtodit font/devps/DESC
+	PATH=$(top_builddir)$(GROFF_PATH_SEPARATOR)$(PATH) \
+        $(MAKE) -f $(devps_srcdir)/generate/Makefile \
+	  srcdir=$(devps_srcdir)/generate DESC=$(devps_srcdir)/DESC.in
+
+font/devps/prologue: $(devps_srcdir)/prologue.ps
+	@$(MKDIR_P) font/devps
+	$(RM) $@
+	sed -f $(devps_srcdir)/psstrip.sed $? >$@
+font/devps/zapfdr.pfa: $(devps_srcdir)/zapfdr.ps
+	@$(MKDIR_P) font/devps
+	$(RM) $@
+	sed -f $(devps_srcdir)/psstrip.sed $? >$@
+font/devps/symbolsl.pfa: $(devps_srcdir)/symbolsl.ps
+	@$(MKDIR_P) font/devps
+	$(RM) $@
+	sed -f $(devps_srcdir)/psstrip.sed $? >$@
diff -Nuar groff-1.22.3.old/font/devps/.gitignore groff-1.22.3/font/devps/.gitignore
--- groff-1.22.3.old/font/devps/.gitignore	1970-01-01 02:00:00.000000000 +0200
+++ groff-1.22.3/font/devps/.gitignore	2015-04-23 20:57:03.000000000 +0300
@@ -0,0 +1,4 @@
+DESC
+prologue
+symbolsl.pfa
+zapfdr.pfa
diff -Nuar groff-1.22.3.old/font/devps/Makefile.sub groff-1.22.3/font/devps/Makefile.sub
--- groff-1.22.3.old/font/devps/Makefile.sub	2014-11-04 10:38:35.340522559 +0200
+++ groff-1.22.3/font/devps/Makefile.sub	1970-01-01 02:00:00.000000000 +0200
@@ -1,92 +0,0 @@
-# Makefile.sub for `font devps'
-
-# File position: <groff-source>/font/devps/Makefile.sub
-
-# Copyright (C) 2014 Free Software Foundation, Inc.
-
-# This file is part of `groffer' which is part of `groff'.
-
-# `groff' is free software; you can redistribute it and/or modify it
-# under the terms of the GNU General Public License as published by
-# the Free Software Foundation, either version 2 of the License, or
-# (at your option) any later version.
-
-# `groff' is distributed in the hope that it will be useful, but
-# WITHOUT ANY WARRANTY; without even the implied warranty of
-# MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the GNU
-# General Public License for more details.
-
-# You should have received a copy of the GNU General Public License
-# along with this program. If not, see
-# <http://www.gnu.org/licenses/gpl-2.0.html>.
-
-########################################################################
-
-DEV=ps
-DISTFILES=\
-  S SS \
-  ZD ZDR ZCMI \
-  AB ABI AI AR \
-  BMB BMBI BMI BMR \
-  CB CBI CI CR \
-  HB HBI HI HR \
-  HNB HNBI HNI HNR \
-  NB NBI NI NR \
-  PB PBI PI PR \
-  TB TBI TI TR \
-  EURO freeeuro.pfa freeeuro.afm \
-  text.enc download
-# these files must be in a subdirectory called `old'
-OLDDISTFILES=\
-  S SS \
-  CB CBI CI CR \
-  HB HBI HI HR \
-  HNB HNBI HNI HNR \
-  NB NBI NI NR \
-  PB PBI PI PR \
-  TB TBI TI TR \
-  symbol.afm symbolsl.afm \
-  zapfdr.afm zapfdr.ps
-
-PSFILES=prologue symbolsl.pfa zapfdr.pfa
-DEVGENFILES=generate/Makefile generate/dingbats.map \
-  generate/dingbats.rmap generate/lgreekmap \
-  generate/symbolchars generate/symbolsl.afm generate/textmap
-DEVGENSCRIPTS=generate/afmname generate/symbol.sed
-DEVFILES=DESC $(PSFILES) $(DISTFILES) $(DEVGENFILES)
-OLDDEVFILES=$(OLDDISTFILES)
-DEVSCRIPTS=$(DEVGENSCRIPTS)
-
-MOSTLYCLEANADD=DESC $(PSFILES)
-
-RM=rm -f
-
-DESC: DESC.in
-	cat $(srcdir)/DESC.in >DESC
-	echo broken $(BROKEN_SPOOLER_FLAGS) >>DESC
-	if test "$(PAGE)" = A4; then \
-	  echo "papersize a4" >>DESC; \
-	else \
-	  echo "papersize letter" >>DESC; \
-	fi
-	test -z '$(PSPRINT)' ||	echo print '$(PSPRINT)' >>DESC
-
-fonts: DESC
-	$(MAKE) -f $(srcdir)/generate/Makefile \
-	  srcdir=$(srcdir)/generate DESC=$(srcdir)/DESC.in
-
-prologue: prologue.ps
-zapfdr.pfa: zapfdr.ps
-symbolsl.pfa: symbolsl.ps
-
-$(PSFILES):
-	$(RM) $@
-	sed -f $(srcdir)/psstrip.sed $? >$@
-
-########################################################################
-# Emacs settings
-########################################################################
-#
-# Local Variables:
-# mode: makefile
-# End:
diff -Nuar groff-1.22.3.old/font/devutf8/devutf8.am groff-1.22.3/font/devutf8/devutf8.am
--- groff-1.22.3.old/font/devutf8/devutf8.am	1970-01-01 02:00:00.000000000 +0200
+++ groff-1.22.3/font/devutf8/devutf8.am	2015-04-23 20:57:03.000000000 +0300
@@ -0,0 +1,48 @@
+# Copyright (C) 2014
+#   Free Software Foundation, Inc.
+#
+# This file is part of `groff'
+#
+# `groff' is free software; you can redistribute it and/or modify it
+# under the terms of the GNU General Public License as published by
+# the Free Software Foundation, either version 3 of the License, or
+# (at your option) any later version.
+#
+# `groff' is distributed in the hope that it will be useful, but
+# WITHOUT ANY WARRANTY; without even the implied warranty of
+# MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the GNU
+# General Public License for more details.
+#
+# You should have received a copy of the GNU General Public License
+# along with this program. If not, see <http://www.gnu.org/licenses/>.
+
+devutf8_srcdir = $(top_srcdir)/font/devutf8
+DEVUTF8FONTS = R I B BI
+DEVUTF8FONTSFILES = \
+  font/devutf8/R font/devutf8/I font/devutf8/B font/devutf8/BI
+
+DEVUTF8RES = 240
+DEVUTF8CPI = 10
+DEVUTF8LPI = 6
+
+devutf8fontdir = $(fontdir)/devutf8
+devutf8font_DATA = $(DEVUTF8FONTSFILES) font/devutf8/DESC
+MOSTLYCLEANFILES += $(DEVUTF8FONTSFILES) font/devutf8/DESC
+EXTRA_DIST += \
+  font/devutf8/R.proto \
+  font/devutf8/DESC.proto \
+  font/devutf8/NOTES \
+  font/devutf8/R.in
+
+$(DEVUTF8FONTSFILES): $(devutf8_srcdir)/R.proto
+	@echo Making $@
+	@$(MKDIR_P) `dirname $@`
+	@$(RM) $@
+	@$(SHELL) $(GENFONTSSH) $(devutf8_srcdir)/R.proto \
+	 $(DEVUTF8RES) $(DEVUTF8CPI) `basename $@` > $@
+
+font/devutf8/DESC: $(devutf8_srcdir)/DESC.proto
+	@echo Making $@
+	@$(MKDIR_P) `dirname $@`
+	@$(SHELL) $(GENDESCSH) $(devutf8_srcdir)/DESC.proto \
+	 $(DEVUTF8RES) $(DEVUTF8CPI) $(DEVUTF8LPI) $(DEVUTF8FONTS) > $@
diff -Nuar groff-1.22.3.old/font/devutf8/.gitignore groff-1.22.3/font/devutf8/.gitignore
--- groff-1.22.3.old/font/devutf8/.gitignore	1970-01-01 02:00:00.000000000 +0200
+++ groff-1.22.3/font/devutf8/.gitignore	2015-04-23 20:57:03.000000000 +0300
@@ -0,0 +1,5 @@
+B
+BI
+DESC
+I
+R
diff -Nuar groff-1.22.3.old/font/devutf8/Makefile.sub groff-1.22.3/font/devutf8/Makefile.sub
--- groff-1.22.3.old/font/devutf8/Makefile.sub	2014-11-04 10:38:35.410521684 +0200
+++ groff-1.22.3/font/devutf8/Makefile.sub	1970-01-01 02:00:00.000000000 +0200
@@ -1,65 +0,0 @@
-# Makefile.sub for `font devutf8'
-#
-# File position: <groff-source>/font/devutf8/Makefile.sub
-#
-# Copyright (C) 2014 Free Software Foundation, Inc.
-#
-# This file is part of `font utf8' which is part of `groff'.
-#
-# `groff' is free software; you can redistribute it and/or modify it
-# under the terms of the GNU General Public License as published by
-# the Free Software Foundation, either version 2 of the License, or
-# (at your option) any later version.
-#
-# `groff' is distributed in the hope that it will be useful, but
-# WITHOUT ANY WARRANTY; without even the implied warranty of
-# MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the GNU
-# General Public License for more details.
-#
-# You should have received a copy of the GNU General Public License
-# along with this program. If not, see
-# <http://www.gnu.org/licenses/gpl-2.0.html>.
-#
-########################################################################
-
-DEV=utf8
-FONTS=R I B BI
-DEVFILES=$(FONTS) DESC
-MOSTLYCLEANADD=$(FONTS) DESC
-
-RES=240
-CPI=10
-LPI=6
-
-RM=rm -f
-
-$(FONTS): R.proto
-	@echo Making $@
-	@$(RM) $@
-	@charwidth=`expr $(RES) / $(CPI)` ; \
-	 sed -e "s/^name [A-Z]*$$/name $@/" \
-	     -e \
-	      "s/^\\([^	]*\\)	[0-9][0-9]*	/\\1	$$charwidth	/" \
-	     -e "s/^spacewidth [0-9][0-9]*$$/spacewidth $$charwidth/" \
-	     -e "s/^internalname .*$$/internalname $@/" \
-	     -e "/^internalname/s/BI/3/" \
-	     -e "/^internalname/s/B/2/" \
-	     -e "/^internalname/s/I/1/" \
-	     -e "/^internalname .*[^ 0-9]/d" \
-	     $(srcdir)/R.proto >$@
-
-DESC: DESC.proto
-	@echo Making $@
-	@sed -e "s/^res .*$$/res $(RES)/" \
-	     -e "s/^hor .*$$/hor `expr $(RES) / $(CPI)`/" \
-	     -e "s/^vert .*$$/vert `expr $(RES) / $(LPI)`/" \
-	     -e "s/^fonts .*$$/fonts `set $(FONTS); echo $$#` $(FONTS)/" \
-	     $(srcdir)/DESC.proto >$@
-
-########################################################################
-# Emacs settings
-########################################################################
-#
-# Local Variables:
-# mode: makefile
-# End:
diff -Nuar groff-1.22.3.old/font/devX100/devX100.am groff-1.22.3/font/devX100/devX100.am
--- groff-1.22.3.old/font/devX100/devX100.am	1970-01-01 02:00:00.000000000 +0200
+++ groff-1.22.3/font/devX100/devX100.am	2015-04-23 20:57:03.000000000 +0300
@@ -0,0 +1,44 @@
+# Copyright (C) 2014
+#   Free Software Foundation, Inc.
+#
+# This file is part of `groff'.
+#
+# `groff' is free software; you can redistribute it and/or modify it
+# under the terms of the GNU General Public License as published by
+# the Free Software Foundation, either version 3 of the License, or
+# (at your option) any later version.
+#
+# `groff' is distributed in the hope that it will be useful, but
+# WITHOUT ANY WARRANTY; without even the implied warranty of
+# MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the GNU
+# General Public License for more details.
+#
+# You should have received a copy of the GNU General Public License
+# along with this program. If not, see <http://www.gnu.org/licenses/>.
+
+DEVX100FONTS = \
+  font/devX100/DESC \
+  font/devX100/TR \
+  font/devX100/TI \
+  font/devX100/TB \
+  font/devX100/TBI \
+  font/devX100/CR \
+  font/devX100/CI \
+  font/devX100/CB \
+  font/devX100/CBI \
+  font/devX100/HR \
+  font/devX100/HI \
+  font/devX100/HB \
+  font/devX100/HBI \
+  font/devX100/NR \
+  font/devX100/NI \
+  font/devX100/NB \
+  font/devX100/NBI \
+  font/devX100/S
+
+if !WITHOUT_X11
+devX100fontdir = $(fontdir)/devX100
+devX100font_DATA = $(DEVX100FONTS)
+endif
+
+EXTRA_DIST += $(DEVX100FONTS)
diff -Nuar groff-1.22.3.old/font/devX100/Makefile.sub groff-1.22.3/font/devX100/Makefile.sub
--- groff-1.22.3.old/font/devX100/Makefile.sub	2014-11-04 10:38:35.373522147 +0200
+++ groff-1.22.3/font/devX100/Makefile.sub	1970-01-01 02:00:00.000000000 +0200
@@ -1,37 +0,0 @@
-# Makefile.sub for `font devX100'
-#
-# File position: <groff-source>/font/devX100/Makefile.sub
-#
-# Copyright (C) 2014
-#   Free Software Foundation, Inc.
-#
-# Last update: 2 Sep 2014
-#
-# This file is part of `font utf8' which is part of `groff'.
-#
-# `groff' is free software; you can redistribute it and/or modify it
-# under the terms of the GNU General Public License as published by
-# the Free Software Foundation, either version 2 of the License, or
-# (at your option) any later version.
-#
-# `groff' is distributed in the hope that it will be useful, but
-# WITHOUT ANY WARRANTY; without even the implied warranty of
-# MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the GNU
-# General Public License for more details.
-#
-# You should have received a copy of the GNU General Public License
-# along with this program. If not, see
-# <http://www.gnu.org/licenses/gpl-2.0.html>.
-#
-########################################################################
-
-DEV=X100
-DEVFILES=DESC TR TI TB TBI CR CI CB CBI HR HI HB HBI NR NI NB NBI S
-
-########################################################################
-# Emacs settings
-########################################################################
-#
-# Local Variables:
-# mode: makefile
-# End:
diff -Nuar groff-1.22.3.old/font/devX100-12/devX100-12.am groff-1.22.3/font/devX100-12/devX100-12.am
--- groff-1.22.3.old/font/devX100-12/devX100-12.am	1970-01-01 02:00:00.000000000 +0200
+++ groff-1.22.3/font/devX100-12/devX100-12.am	2015-04-23 20:57:03.000000000 +0300
@@ -0,0 +1,44 @@
+# Copyright (C) 2014
+#   Free Software Foundation, Inc.
+#
+# This file is part of `groff'.
+#
+# `groff' is free software; you can redistribute it and/or modify it
+# under the terms of the GNU General Public License as published by
+# the Free Software Foundation, either version 3 of the License, or
+# (at your option) any later version.
+#
+# `groff' is distributed in the hope that it will be useful, but
+# WITHOUT ANY WARRANTY; without even the implied warranty of
+# MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the GNU
+# General Public License for more details.
+#
+# You should have received a copy of the GNU General Public License
+# along with this program. If not, see <http://www.gnu.org/licenses/>.
+
+DEVX10012FONTS = \
+  font/devX100-12/DESC \
+  font/devX100-12/TR \
+  font/devX100-12/TI \
+  font/devX100-12/TB \
+  font/devX100-12/TBI \
+  font/devX100-12/CR \
+  font/devX100-12/CI \
+  font/devX100-12/CB \
+  font/devX100-12/CBI \
+  font/devX100-12/HR \
+  font/devX100-12/HI \
+  font/devX100-12/HB \
+  font/devX100-12/HBI \
+  font/devX100-12/NR \
+  font/devX100-12/NI \
+  font/devX100-12/NB \
+  font/devX100-12/NBI \
+  font/devX100-12/S
+
+if !WITHOUT_X11
+devX10012fontdir = $(fontdir)/devX100-12
+devX10012font_DATA = $(DEVX10012FONTS)
+endif
+
+EXTRA_DIST += $(DEVX10012FONTS)
diff -Nuar groff-1.22.3.old/font/devX100-12/Makefile.sub groff-1.22.3/font/devX100-12/Makefile.sub
--- groff-1.22.3.old/font/devX100-12/Makefile.sub	2014-11-04 10:38:35.379522072 +0200
+++ groff-1.22.3/font/devX100-12/Makefile.sub	1970-01-01 02:00:00.000000000 +0200
@@ -1,37 +0,0 @@
-# Makefile.sub for `font devX100-12'
-#
-# File position: <groff-source>/font/devX100-12/Makefile.sub
-#
-# Copyright (C) 2014
-#   Free Software Foundation, Inc.
-#
-# Last update: 2 Sep 2014
-#
-# This file is part of `font utf8' which is part of `groff'.
-#
-# `groff' is free software; you can redistribute it and/or modify it
-# under the terms of the GNU General Public License as published by
-# the Free Software Foundation, either version 2 of the License, or
-# (at your option) any later version.
-#
-# `groff' is distributed in the hope that it will be useful, but
-# WITHOUT ANY WARRANTY; without even the implied warranty of
-# MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the GNU
-# General Public License for more details.
-#
-# You should have received a copy of the GNU General Public License
-# along with this program. If not, see
-# <http://www.gnu.org/licenses/gpl-2.0.html>.
-#
-########################################################################
-
-DEV=X100-12
-DEVFILES=DESC TR TI TB TBI CR CI CB CBI HR HI HB HBI NR NI NB NBI S
-
-########################################################################
-# Emacs settings
-########################################################################
-#
-# Local Variables:
-# mode: makefile
-# End:
diff -Nuar groff-1.22.3.old/font/devX75/devX75.am groff-1.22.3/font/devX75/devX75.am
--- groff-1.22.3.old/font/devX75/devX75.am	1970-01-01 02:00:00.000000000 +0200
+++ groff-1.22.3/font/devX75/devX75.am	2015-04-23 20:57:03.000000000 +0300
@@ -0,0 +1,44 @@
+# Copyright (C) 2014
+#   Free Software Foundation, Inc.
+#
+# This file is part of `groff'
+#
+# `groff' is free software; you can redistribute it and/or modify it
+# under the terms of the GNU General Public License as published by
+# the Free Software Foundation, either version 3 of the License, or
+# (at your option) any later version.
+#
+# `groff' is distributed in the hope that it will be useful, but
+# WITHOUT ANY WARRANTY; without even the implied warranty of
+# MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the GNU
+# General Public License for more details.
+#
+# You should have received a copy of the GNU General Public License
+# along with this program. If not, see <http://www.gnu.org/licenses/>.
+
+DEVX75FONTS = \
+  font/devX75/DESC \
+  font/devX75/TR \
+  font/devX75/TI \
+  font/devX75/TB \
+  font/devX75/TBI \
+  font/devX75/CR \
+  font/devX75/CI \
+  font/devX75/CB \
+  font/devX75/CBI \
+  font/devX75/HR \
+  font/devX75/HI \
+  font/devX75/HB \
+  font/devX75/HBI \
+  font/devX75/NR \
+  font/devX75/NI \
+  font/devX75/NB \
+  font/devX75/NBI \
+  font/devX75/S
+
+if !WITHOUT_X11
+devX75fontdir = $(fontdir)/devX75
+devX75font_DATA = $(DEVX75FONTS)
+endif
+
+EXTRA_DIST += $(DEVX75FONTS)
diff -Nuar groff-1.22.3.old/font/devX75/Makefile.sub groff-1.22.3/font/devX75/Makefile.sub
--- groff-1.22.3.old/font/devX75/Makefile.sub	2014-11-04 10:38:35.361522297 +0200
+++ groff-1.22.3/font/devX75/Makefile.sub	1970-01-01 02:00:00.000000000 +0200
@@ -1,37 +0,0 @@
-# Makefile.sub for `font devX75'
-#
-# File position: <groff-source>/font/devX75/Makefile.sub
-#
-# Copyright (C) 2014
-#   Free Software Foundation, Inc.
-#
-# Last update: 2 Sep 2014
-#
-# This file is part of `font utf8' which is part of `groff'.
-#
-# `groff' is free software; you can redistribute it and/or modify it
-# under the terms of the GNU General Public License as published by
-# the Free Software Foundation, either version 2 of the License, or
-# (at your option) any later version.
-#
-# `groff' is distributed in the hope that it will be useful, but
-# WITHOUT ANY WARRANTY; without even the implied warranty of
-# MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the GNU
-# General Public License for more details.
-#
-# You should have received a copy of the GNU General Public License
-# along with this program. If not, see
-# <http://www.gnu.org/licenses/gpl-2.0.html>.
-#
-########################################################################
-
-DEV=X75
-DEVFILES=DESC TR TI TB TBI CR CI CB CBI HR HI HB HBI NR NI NB NBI S
-
-########################################################################
-# Emacs settings
-########################################################################
-#
-# Local Variables:
-# mode: makefile
-# End:
diff -Nuar groff-1.22.3.old/font/devX75-12/devX75-12.am groff-1.22.3/font/devX75-12/devX75-12.am
--- groff-1.22.3.old/font/devX75-12/devX75-12.am	1970-01-01 02:00:00.000000000 +0200
+++ groff-1.22.3/font/devX75-12/devX75-12.am	2015-04-23 20:57:03.000000000 +0300
@@ -0,0 +1,42 @@
+# Copyright (C) 2014
+#   Free Software Foundation, Inc.
+#
+# This file is part of `groff'
+#
+# `groff' is free software; you can redistribute it and/or modify it
+# under the terms of the GNU General Public License as published by
+# the Free Software Foundation, either version 3 of the License, or
+# (at your option) any later version.
+#
+# `groff' is distributed in the hope that it will be useful, but
+# WITHOUT ANY WARRANTY; without even the implied warranty of
+# MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the GNU
+# General Public License for more details.
+#
+# You should have received a copy of the GNU General Public License
+# along with this program. If not, see <http://www.gnu.org/licenses/>.
+
+DEVX7512FONTS = \
+  font/devX75-12/DESC \
+  font/devX75-12/TR \
+  font/devX75-12/TI \
+  font/devX75-12/TB \
+  font/devX75-12/TBI \
+  font/devX75-12/CR \
+  font/devX75-12/CI \
+  font/devX75-12/CB \
+  font/devX75-12/CBI \
+  font/devX75-12/HR \
+  font/devX75-12/HI \
+  font/devX75-12/HB \
+  font/devX75-12/HBI \
+  font/devX75-12/NR \
+  font/devX75-12/NI \
+  font/devX75-12/NB \
+  font/devX75-12/NBI \
+  font/devX75-12/S
+if !WITHOUT_X11
+devX7512fontdir = $(fontdir)/devX75-12
+devX7512font_DATA = $(DEVX7512FONTS)
+endif
+EXTRA_DIST += $(DEVX7512FONTS)
diff -Nuar groff-1.22.3.old/font/devX75-12/Makefile.sub groff-1.22.3/font/devX75-12/Makefile.sub
--- groff-1.22.3.old/font/devX75-12/Makefile.sub	2014-11-04 10:38:35.367522222 +0200
+++ groff-1.22.3/font/devX75-12/Makefile.sub	1970-01-01 02:00:00.000000000 +0200
@@ -1,37 +0,0 @@
-# Makefile.sub for `font devX75-12'
-#
-# File position: <groff-source>/font/devX75-12/Makefile.sub
-#
-# Copyright (C) 2014
-#   Free Software Foundation, Inc.
-#
-# Last update: 2 Sep 2014
-#
-# This file is part of `font utf8' which is part of `groff'.
-#
-# `groff' is free software; you can redistribute it and/or modify it
-# under the terms of the GNU General Public License as published by
-# the Free Software Foundation, either version 2 of the License, or
-# (at your option) any later version.
-#
-# `groff' is distributed in the hope that it will be useful, but
-# WITHOUT ANY WARRANTY; without even the implied warranty of
-# MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the GNU
-# General Public License for more details.
-#
-# You should have received a copy of the GNU General Public License
-# along with this program. If not, see
-# <http://www.gnu.org/licenses/gpl-2.0.html>.
-#
-########################################################################
-
-DEV=X75-12
-DEVFILES=DESC TR TI TB TBI CR CI CB CBI HR HI HB HBI NR NI NB NBI S
-
-########################################################################
-# Emacs settings
-########################################################################
-#
-# Local Variables:
-# mode: makefile
-# End:
diff -Nuar groff-1.22.3.old/font/scripts/gendesc.sh groff-1.22.3/font/scripts/gendesc.sh
--- groff-1.22.3.old/font/scripts/gendesc.sh	1970-01-01 02:00:00.000000000 +0200
+++ groff-1.22.3/font/scripts/gendesc.sh	2015-04-23 20:57:03.000000000 +0300
@@ -0,0 +1,18 @@
+#!/bin/sh
+# Usage: gendesc.sh <input .proto> <RES> <CPI> <LPI> <list of fonts>
+if test -z "$1" || test -z "$2" || test -z "$3" || test -z "$4" || \
+    test -z "$5"; then
+    echo "genfonts.sh: missing parameter"; exit 255;
+fi
+INPUT=$1
+RES=$2
+CPI=$3
+LPI=$4
+shift 4
+NBFONTS=`echo $#`
+FONTS=`echo $*`
+sed -e "s/^res .*$/res $RES/" \
+    -e "s/^hor .*$/hor `expr $RES / $CPI`/" \
+    -e "s/^vert .*$/vert `expr $RES / $LPI`/" \
+    -e "s/^fonts .*$/fonts $NBFONTS $FONTS/" \
+    $INPUT
diff -Nuar groff-1.22.3.old/font/scripts/genfonts.sh groff-1.22.3/font/scripts/genfonts.sh
--- groff-1.22.3.old/font/scripts/genfonts.sh	1970-01-01 02:00:00.000000000 +0200
+++ groff-1.22.3/font/scripts/genfonts.sh	2015-04-23 20:57:03.000000000 +0300
@@ -0,0 +1,23 @@
+#!/bin/sh -xv
+# Usage:
+# genfonts.sh <input .proto file> <RES> <CPI> <FONT name>
+if test -z "$1" || test -z "$2" || test -z "$3" || test -z "$4"; then
+    echo "genfonts.sh: missing parameter"; exit 255;
+fi
+
+INPUT=$1
+RES=$2
+CPI=$3
+FONT=$4
+charwidth=`expr $RES / $CPI` ;
+sed -e "s|^name [A-Z]*$|name $FONT|" \
+    -e \
+    "s/^\\([^	]*\\)	[0-9][0-9]*	/\\1	$charwidth	/" \
+    -e "s/^spacewidth [0-9][0-9]*$/spacewidth $charwidth/" \
+    -e "s|^internalname .*$|internalname $FONT|" \
+    -e "/^internalname/s/CR/4/" \
+    -e "/^internalname/s/BI/3/" \
+    -e "/^internalname/s/B/2/" \
+    -e "/^internalname/s/I/1/" \
+    -e "/^internalname .*[^ 0-9]/d" \
+    $INPUT
diff -Nuar groff-1.22.3.old/font/scripts/scripts.am groff-1.22.3/font/scripts/scripts.am
--- groff-1.22.3.old/font/scripts/scripts.am	1970-01-01 02:00:00.000000000 +0200
+++ groff-1.22.3/font/scripts/scripts.am	2015-04-23 20:57:03.000000000 +0300
@@ -0,0 +1,4 @@
+# Scripts for font files generation
+GENFONTSSH=$(top_srcdir)/font/scripts/genfonts.sh
+GENDESCSH = $(top_srcdir)/font/scripts/gendesc.sh
+EXTRA_DIST += $(GENFONTSSH) $(GENDESCSH)
diff -Nuar groff-1.22.3.old/.gitignore groff-1.22.3/.gitignore
--- groff-1.22.3.old/.gitignore	1970-01-01 02:00:00.000000000 +0200
+++ groff-1.22.3/.gitignore	2015-04-23 20:57:03.000000000 +0300
@@ -0,0 +1,95 @@
+*.[oan]
+*.hpp
+*.output
+*.pdf
+*-s
+.dirstamp
+.deps
+/Makefile
+/Makefile.in
+stamp-*
+/aclocal.m4
+/autom4te.cache
+/build-aux
+/configure
+/config.log
+/src/include/stamp-h1
+/font/devpdf/[A-Z]*
+/gnulib_m4
+/INSTALL
+/lib
+/maint.mk
+/src/include/config.hin
+/GNUmakefile
+/README-release
+/addftinfo
+/afmtodit
+/charset.alias
+/chem
+/contrib/hdtbl/hdmisc.tmac
+/contrib/hdtbl/hdtbl.tmac
+/contrib/mom/om.tmac
+/defs.h
+/eqn
+/eqn2graph
+/font/devpdf/build_font_files
+/font/devpdf/download
+/font/devpdf/enc/
+/font/devpdf/map/
+/font/devpdf/util/BuildFoundries
+/gdiffmk
+/gideal
+/glilypond
+/gnu.eps
+/gperl
+/gpinyin
+/grap2graph
+/grn
+/grodvi
+/groff
+/groff_opts.tmp
+/groff_opts_no_arg.txt
+/groff_opts_with_arg.txt
+/groffer
+/grog
+/grolbp
+/grolj4
+/gropdf
+/grops
+/grotty
+/gxditview
+/hpftodit
+/indxbib
+/lkbib
+/lookbib
+/mmroff
+/neqn
+/nroff
+/pdfmom
+/pdfroff
+/pdfroff-*/
+/penguin.ps
+/pfbtops
+/pic
+/pic2graph
+/post-grohtml
+/pre-grohtml
+/preconv
+/ref-add.sed
+/ref-del.sed
+/refer
+/roff2dvi
+/roff2html
+/roff2pdf
+/roff2ps
+/roff2text
+/roff2x
+/shdeps.sed
+/soelim
+/tbl
+/test-groff
+/test-suite.log
+/tfmtodit
+/troff
+/xtotroff
+/gendef.sh
diff -Nuar groff-1.22.3.old/.gitmodules groff-1.22.3/.gitmodules
--- groff-1.22.3.old/.gitmodules	1970-01-01 02:00:00.000000000 +0200
+++ groff-1.22.3/.gitmodules	2015-04-23 20:57:03.000000000 +0300
@@ -0,0 +1,3 @@
+[submodule "gnulib"]
+	path = gnulib
+	url = git://git.sv.gnu.org/gnulib.git
diff -Nuar groff-1.22.3.old/INSTALL groff-1.22.3/INSTALL
--- groff-1.22.3.old/INSTALL	2014-11-04 10:38:35.144525010 +0200
+++ groff-1.22.3/INSTALL	1970-01-01 02:00:00.000000000 +0200
@@ -1,140 +0,0 @@
-    Copyright 1997-2014 Free Software Foundation, Inc.
-
-    Copying and distribution of this file, with or without modification,
-    are permitted in any medium without royalty provided the copyright
-    notice and this notice are preserved.
-
-This file contains information that supplements the generic
-installation instructions in file `INSTALL.gen'.
-
-
-Normal Installation
-===================
-
-The simplest way to compile groff is:
-
-  1. `cd' to the directory containing groff's source code and type
-     `./configure' to configure groff for your system.  If you are
-     using `csh' on an old version of System V, you might need to type
-     `sh ./configure' instead to prevent `csh' from trying to execute
-     `configure' itself.
-
-     Running `configure' takes awhile.  While running, it prints some
-     messages telling which features it is checking for.
-
-  2. Type `make' to compile groff.
-
-  3. Type `sudo make install' to install the groff programs and any
-     data files and documentation.  `make install' is the only step for
-     which you need `root' access; this is done by `sudo'.
-
-  4. You can remove the groff binaries and object files from the
-     source code directory by typing `make clean'.  To also remove the
-     files that `configure' created (so you can compile groff for
-     a different kind of computer), type `make distclean'.
-
-
-External Installation
-=====================
-
-It is also possible to perform the whole installation process outside
-of the source code directory.  In this case a whole external build
-directory structure is created without changing any parts of the source
-code tree.  This is useful if the source code is read-only or if
-several different installations, such as for multiple architectures,
-should be constructed.
-
-As an example we assume that the source code of the `groff' code is in
-`/usr/local/src/groff', and that the build process should be done
-within the directory `/home/my/groff.compile'.
-
-  0. Create `/home/my/groff.compile' and change to that directory.
-
-  1. Call `/usr/local/src/groff/configure' in that directory to
-     configure groff for your system.  If you are using `csh' on an old
-     version of System V, you might need to type `sh
-     /usr/local/src/groff/configure' instead.
-
-  2. Type `make' to compile groff in that directory.
-
-  3. Type `sudo make install' to install the groff programs and any
-     data files and documentation.
-
-  4. You can remove the groff binaries and object files from the
-     build directory by typing `make clean'.  To also remove the
-     files that `configure' created (so you can compile the package for
-     a different kind of computer), type `make distclean'.
-
-
-Special Platforms
-=================
-
-For instructions how to build groff with DJGPP tools for MS-DOS and
-MS-Windows, see the file arch/djgpp/README.
-
-For instructions how to build groff with the MinGW tools for
-MS-Windows, see the file README.MinGW.
-
-
-Miscellaneous
-=============
-
-groff is written in C++, so you need a C++ compiler.  The C++ source
-files use a suffix of `.cpp', so your C++ compiler must be able to
-handle this.  If you don't already have a C++ compiler, we suggest gcc
-2.7.1 or later (gcc version 2 includes GNU C++ as well as GNU C).  From
-gcc 2.5, it is no longer necessary to install libg++: the C++ header
-files needed by groff are created by the gcc installation process.  To
-override configure's choice of C++ compiler, you can set the CXX
-environment variable.
-
-If you have a library that provides a faster malloc than your system's
-usual malloc, it is good idea to include it in LIBS.  For example,
-using the malloc that comes with GNU Emacs version 20 can give a
-worthwhile (and sometimes spectacular) performance improvement.
-
-Many programs within the `groff' system are written in the Perl
-language.  So you need a `perl' program with the least version of
-`v5.6.1'.
-
-
-If you want A4 or letter paper format and the configure script produces
-an incorrect guess, say
-
-  PAGE=xxx ./configure
-
-where `xxx' should be either `A4' or `letter'.  Note that this only
-affects the paper selection of some device drivers like grops (which
-can be still overridden on the command line).  For compatibility with
-ditroff, the default page length in gtroff is always 11 inches.  The
-page length can be changed with the `pl' request.
-
-When you have built groff but not installed yet, you can use the
-test-groff script to try groff out on one of the man pages.  (Use the
-.n files not the .man files.)  The test-groff script sets up environment
-variables to allow groff to run without being installed.  For example,
-you could do
-
-  ./test-groff -man -Tascii src/roff/groff/groff.n | less
-
-to display the groff(1) man page with the `less' pager.
-
-To get a DVI, PDF, or HTML version of the groff texinfo manual, say
-`make groff.dvi', `make groff.pdf', or `make groff.html', respectively,
-in the `doc' subdirectory (after configuring the groff package).  Note
-that you need texinfo version 4.8 as a prerequisite.
-
-If you have problems, read the PROBLEMS file.  If this doesn't help
-and you need support, please contact the `groff' mailing list.  If you
-think that you have found a bug, please submit a report in our bug
-tracker at
-
-  https://savannah.gnu.org/projects/groff
-
-Alternative, but less preferable, you may send a bug report using the
-form in the file BUG-REPORT.
-
-##### Emacs settings
-Local Variables:
-mode: text
-End:
diff -Nuar groff-1.22.3.old/INSTALL.extra groff-1.22.3/INSTALL.extra
--- groff-1.22.3.old/INSTALL.extra	1970-01-01 02:00:00.000000000 +0200
+++ groff-1.22.3/INSTALL.extra	2015-04-23 20:57:03.000000000 +0300
@@ -0,0 +1,140 @@
+    Copyright 1997-2014 Free Software Foundation, Inc.
+
+    Copying and distribution of this file, with or without modification,
+    are permitted in any medium without royalty provided the copyright
+    notice and this notice are preserved.
+
+This file contains information that supplements the generic
+installation instructions in file `INSTALL'.
+
+
+Normal Installation
+===================
+
+The simplest way to compile groff is:
+
+  1. `cd' to the directory containing groff's source code and type
+     `./configure' to configure groff for your system.  If you are
+     using `csh' on an old version of System V, you might need to type
+     `sh ./configure' instead to prevent `csh' from trying to execute
+     `configure' itself.
+
+     Running `configure' takes awhile.  While running, it prints some
+     messages telling which features it is checking for.
+
+  2. Type `make' to compile groff.
+
+  3. Type `sudo make install' to install the groff programs and any
+     data files and documentation.  `make install' is the only step for
+     which you need `root' access; this is done by `sudo'.
+
+  4. You can remove the groff binaries and object files from the
+     source code directory by typing `make clean'.  To also remove the
+     files that `configure' created (so you can compile groff for
+     a different kind of computer), type `make distclean'.
+
+
+External Installation
+=====================
+
+It is also possible to perform the whole installation process outside
+of the source code directory.  In this case a whole external build
+directory structure is created without changing any parts of the source
+code tree.  This is useful if the source code is read-only or if
+several different installations, such as for multiple architectures,
+should be constructed.
+
+As an example we assume that the source code of the `groff' code is in
+`/usr/local/src/groff', and that the build process should be done
+within the directory `/home/my/groff.compile'.
+
+  0. Create `/home/my/groff.compile' and change to that directory.
+
+  1. Call `/usr/local/src/groff/configure' in that directory to
+     configure groff for your system.  If you are using `csh' on an old
+     version of System V, you might need to type `sh
+     /usr/local/src/groff/configure' instead.
+
+  2. Type `make' to compile groff in that directory.
+
+  3. Type `sudo make install' to install the groff programs and any
+     data files and documentation.
+
+  4. You can remove the groff binaries and object files from the
+     build directory by typing `make clean'.  To also remove the
+     files that `configure' created (so you can compile the package for
+     a different kind of computer), type `make distclean'.
+
+
+Special Platforms
+=================
+
+For instructions how to build groff with DJGPP tools for MS-DOS and
+MS-Windows, see the file arch/djgpp/README.
+
+For instructions how to build groff with the MinGW tools for
+MS-Windows, see the file README.MinGW.
+
+
+Miscellaneous
+=============
+
+groff is written in C++, so you need a C++ compiler.  The C++ source
+files use a suffix of `.cpp', so your C++ compiler must be able to
+handle this.  If you don't already have a C++ compiler, we suggest gcc
+2.7.1 or later (gcc version 2 includes GNU C++ as well as GNU C).  From
+gcc 2.5, it is no longer necessary to install libg++: the C++ header
+files needed by groff are created by the gcc installation process.  To
+override configure's choice of C++ compiler, you can set the CXX
+environment variable.
+
+If you have a library that provides a faster malloc than your system's
+usual malloc, it is good idea to include it in LIBS.  For example,
+using the malloc that comes with GNU Emacs version 20 can give a
+worthwhile (and sometimes spectacular) performance improvement.
+
+Many programs within the `groff' system are written in the Perl
+language.  So you need a `perl' program with the least version of
+`v5.6.1'.
+
+
+If you want A4 or letter paper format and the configure script produces
+an incorrect guess, say
+
+  PAGE=xxx ./configure
+
+where `xxx' should be either `A4' or `letter'.  Note that this only
+affects the paper selection of some device drivers like grops (which
+can be still overridden on the command line).  For compatibility with
+ditroff, the default page length in gtroff is always 11 inches.  The
+page length can be changed with the `pl' request.
+
+When you have built groff but not installed yet, you can use the
+test-groff script to try groff out on one of the man pages.  (Use the
+.n files not the .man files.)  The test-groff script sets up environment
+variables to allow groff to run without being installed.  For example,
+you could do
+
+  ./test-groff -man -Tascii src/roff/groff/groff.n | less
+
+to display the groff(1) man page with the `less' pager.
+
+To get a DVI, PDF, or HTML version of the groff texinfo manual, say
+`make groff.dvi', `make groff.pdf', or `make groff.html', respectively,
+in the `doc' subdirectory (after configuring the groff package).  Note
+that you need texinfo version 4.8 as a prerequisite.
+
+If you have problems, read the PROBLEMS file.  If this doesn't help
+and you need support, please contact the `groff' mailing list.  If you
+think that you have found a bug, please submit a report in our bug
+tracker at
+
+  https://savannah.gnu.org/projects/groff
+
+Alternative, but less preferable, you may send a bug report using the
+form in the file BUG-REPORT.
+
+##### Emacs settings
+Local Variables:
+mode: text
+End:
diff -Nuar groff-1.22.3.old/INSTALL.REPO groff-1.22.3/INSTALL.REPO
--- groff-1.22.3.old/INSTALL.REPO	2014-11-04 10:38:35.144525010 +0200
+++ groff-1.22.3/INSTALL.REPO	2015-04-23 20:57:03.000000000 +0300
@@ -5,31 +5,71 @@
     the copyright notice and this notice are preserved.
 
 This file contains information that supplements the generic
-installation instructions in file `INSTALL.gen'.  It is meant for
+installation instructions in file `INSTALL'.  It is meant for
 people building directly from the development repository, rather than
 a release or snapshot tarball.
 
 If you want to start compiling the `groff' system with an existing
-script `configure' you won't need the information in this file.
+script `configure' you won't need the information in this file. You
+need them only if you want to build groff from the git repository.
 
-But if you want to use the `GNU autotools' (`aclocal', `autoreconf')
-for creating the following and some more files:
+1. Initial build
+----------------
 
-    aclocal.m4
-    configure
-    Makefile
+You will need autoconf version and 2.65 or higher and automake version
+1.12.2 or higher. These minimal versions are set in the bootstrap.conf
+file.
+
+On operating systems supporting concurrent installation of multiple
+versions of the autotools, set the following environment variables:
+
+  export AUTOMAKE_VERSION=1.12
+  export AUTOCONF_VERSION=2.65
+
+First invoke the bootstrap script:
+
+    $ ./bootstrap
+
+This will:
+  
+  - clone the gnulib repository as a git submodule in 'gnulib', add
+    the needed gnulib sources files in 'lib', add the needed gnulib m4
+    macros in 'gnulib_m4'
+
+  - Invoke autoreconf that will call all the `GNU autotools'
+    (`aclocal', `autoconf', `automake') in the right order for
+    creating the following files:
+
+    -- INSTALL (a symlink to gnulib's INSTALL file)
+    -- Makefile.in
+    -- aclocal.m4
+    -- autom4te.cache/
+    -- build-aux/ (that contains all the helper scripts) 
+    -- configure
+    -- src/include/config.hin
+
+Note that aclocal.m4 is generated and the groff m4 macros are included
+via the acinclude.m4 file.
+  
+At this point you can invoke the `configure' script (that generates
+the `config.status' script; it is the `config.status' script generates
+the Makefile) and call 'make' to build the groff project. You can do
+it in the source tree:
+
+    $ ./configure
+    $ make
+
+You can also build groff in an out of source build tree, which is cleaner:
+
+    $ mkdir build
+    $ cd build
+    $ ../configure
+    $ make
 
-To update file `aclocal.m4', run the shell command
+Note that parallel build is also supported and make can be invoked
+with the -j option, which will greatly speed up the build.
 
-    $ aclocal -I m4
-
-To recreate the files `configure' and `Makefile', use the shell
-command
-
-    $ autoreconf -I m4
-
-The option `-I m4' is necessary.  It refers to the subdirectory `m4'
-that has files with m4 macro definitions needed by the `autotools'.
+Notes:
 
 If you use an old `autoreconf' version < 2.69, there might be an error
 warning like:
@@ -44,23 +84,28 @@
 Just ignore this.  It doesn't occur in the actual versions of
 `autoreconf'.
 
-You may even use the shell command
 
-    $ autoconf -I m4
 
-instead of `autoreconf', but that will ignore some features.  So
-`autoreconf' is better.
+2. Modification of autotools files
+----------------------------------
+
+Previously, when groff used `autoconf' only and not `automake', you
+had to invoke manually the autotools, depending on what you
+modified. For example, to change the file `aclocal.m4', you had to run
+the shell command 'aclocal -I m4', to recreate the files `configure'
+and `Makefile', you had to use the command 'autoreconf -I m4'.
+
+Now, as groff uses `automake', you don't need to run `autoreconf'. If
+you make some changes in Makefile.am or configure.ac, all the files
+that need to be updated will be regenerated when you execute `make'.
+
+
+
+3. Quick start on the usage of `automake' in groff
+--------------------------------------------------
+
+A little document explaining the basics of automake and its usage in
+groff is available in doc/automake.mom. It is currently not
+automatically generated, to build it:
 
-`automake' is not used currently, however, we plan to convert the
-build system accordingly.  If you have experience in creating
-`Makefile.am' files we would be glad if you could help us in the
-conversion process.  Please contact the groff mailing list.
-
-After the use of the `GNU autotools', the usual compilation should
-work.  If the run of `configure' produces error reports you have
-produced errors in the `autotools' modification.
-
-##### Emacs settings
-Local Variables:
-mode: text
-End:
+pdfmom automake.mom > automake.pdf
diff -Nuar groff-1.22.3.old/install-sh groff-1.22.3/install-sh
--- groff-1.22.3.old/install-sh	2014-11-04 10:38:35.144525010 +0200
+++ groff-1.22.3/install-sh	1970-01-01 02:00:00.000000000 +0200
@@ -1,501 +0,0 @@
-#!/bin/sh
-# install - install a program, script, or datafile
-
-scriptversion=2013-12-25.23; # UTC
-
-# This originates from X11R5 (mit/util/scripts/install.sh), which was
-# later released in X11R6 (xc/config/util/install.sh) with the
-# following copyright and license.
-#
-# Copyright (C) 1994 X Consortium
-#
-# Permission is hereby granted, free of charge, to any person obtaining a copy
-# of this software and associated documentation files (the "Software"), to
-# deal in the Software without restriction, including without limitation the
-# rights to use, copy, modify, merge, publish, distribute, sublicense, and/or
-# sell copies of the Software, and to permit persons to whom the Software is
-# furnished to do so, subject to the following conditions:
-#
-# The above copyright notice and this permission notice shall be included in
-# all copies or substantial portions of the Software.
-#
-# THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR
-# IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,
-# FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT.  IN NO EVENT SHALL THE
-# X CONSORTIUM BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER LIABILITY, WHETHER IN
-# AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, OUT OF OR IN CONNEC-
-# TION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE.
-#
-# Except as contained in this notice, the name of the X Consortium shall not
-# be used in advertising or otherwise to promote the sale, use or other deal-
-# ings in this Software without prior written authorization from the X Consor-
-# tium.
-#
-#
-# FSF changes to this file are in the public domain.
-#
-# Calling this script install-sh is preferred over install.sh, to prevent
-# 'make' implicit rules from creating a file called install from it
-# when there is no Makefile.
-#
-# This script is compatible with the BSD install script, but was written
-# from scratch.
-
-tab='	'
-nl='
-'
-IFS=" $tab$nl"
-
-# Set DOITPROG to "echo" to test this script.
-
-doit=${DOITPROG-}
-doit_exec=${doit:-exec}
-
-# Put in absolute file names if you don't have them in your path;
-# or use environment vars.
-
-chgrpprog=${CHGRPPROG-chgrp}
-chmodprog=${CHMODPROG-chmod}
-chownprog=${CHOWNPROG-chown}
-cmpprog=${CMPPROG-cmp}
-cpprog=${CPPROG-cp}
-mkdirprog=${MKDIRPROG-mkdir}
-mvprog=${MVPROG-mv}
-rmprog=${RMPROG-rm}
-stripprog=${STRIPPROG-strip}
-
-posix_mkdir=
-
-# Desired mode of installed file.
-mode=0755
-
-chgrpcmd=
-chmodcmd=$chmodprog
-chowncmd=
-mvcmd=$mvprog
-rmcmd="$rmprog -f"
-stripcmd=
-
-src=
-dst=
-dir_arg=
-dst_arg=
-
-copy_on_change=false
-is_target_a_directory=possibly
-
-usage="\
-Usage: $0 [OPTION]... [-T] SRCFILE DSTFILE
-   or: $0 [OPTION]... SRCFILES... DIRECTORY
-   or: $0 [OPTION]... -t DIRECTORY SRCFILES...
-   or: $0 [OPTION]... -d DIRECTORIES...
-
-In the 1st form, copy SRCFILE to DSTFILE.
-In the 2nd and 3rd, copy all SRCFILES to DIRECTORY.
-In the 4th, create DIRECTORIES.
-
-Options:
-     --help     display this help and exit.
-     --version  display version info and exit.
-
-  -c            (ignored)
-  -C            install only if different (preserve the last data modification time)
-  -d            create directories instead of installing files.
-  -g GROUP      $chgrpprog installed files to GROUP.
-  -m MODE       $chmodprog installed files to MODE.
-  -o USER       $chownprog installed files to USER.
-  -s            $stripprog installed files.
-  -t DIRECTORY  install into DIRECTORY.
-  -T            report an error if DSTFILE is a directory.
-
-Environment variables override the default commands:
-  CHGRPPROG CHMODPROG CHOWNPROG CMPPROG CPPROG MKDIRPROG MVPROG
-  RMPROG STRIPPROG
-"
-
-while test $# -ne 0; do
-  case $1 in
-    -c) ;;
-
-    -C) copy_on_change=true;;
-
-    -d) dir_arg=true;;
-
-    -g) chgrpcmd="$chgrpprog $2"
-        shift;;
-
-    --help) echo "$usage"; exit $?;;
-
-    -m) mode=$2
-        case $mode in
-          *' '* | *"$tab"* | *"$nl"* | *'*'* | *'?'* | *'['*)
-            echo "$0: invalid mode: $mode" >&2
-            exit 1;;
-        esac
-        shift;;
-
-    -o) chowncmd="$chownprog $2"
-        shift;;
-
-    -s) stripcmd=$stripprog;;
-
-    -t)
-        is_target_a_directory=always
-        dst_arg=$2
-        # Protect names problematic for 'test' and other utilities.
-        case $dst_arg in
-          -* | [=\(\)!]) dst_arg=./$dst_arg;;
-        esac
-        shift;;
-
-    -T) is_target_a_directory=never;;
-
-    --version) echo "$0 $scriptversion"; exit $?;;
-
-    --) shift
-        break;;
-
-    -*) echo "$0: invalid option: $1" >&2
-        exit 1;;
-
-    *)  break;;
-  esac
-  shift
-done
-
-# We allow the use of options -d and -T together, by making -d
-# take the precedence; this is for compatibility with GNU install.
-
-if test -n "$dir_arg"; then
-  if test -n "$dst_arg"; then
-    echo "$0: target directory not allowed when installing a directory." >&2
-    exit 1
-  fi
-fi
-
-if test $# -ne 0 && test -z "$dir_arg$dst_arg"; then
-  # When -d is used, all remaining arguments are directories to create.
-  # When -t is used, the destination is already specified.
-  # Otherwise, the last argument is the destination.  Remove it from $@.
-  for arg
-  do
-    if test -n "$dst_arg"; then
-      # $@ is not empty: it contains at least $arg.
-      set fnord "$@" "$dst_arg"
-      shift # fnord
-    fi
-    shift # arg
-    dst_arg=$arg
-    # Protect names problematic for 'test' and other utilities.
-    case $dst_arg in
-      -* | [=\(\)!]) dst_arg=./$dst_arg;;
-    esac
-  done
-fi
-
-if test $# -eq 0; then
-  if test -z "$dir_arg"; then
-    echo "$0: no input file specified." >&2
-    exit 1
-  fi
-  # It's OK to call 'install-sh -d' without argument.
-  # This can happen when creating conditional directories.
-  exit 0
-fi
-
-if test -z "$dir_arg"; then
-  if test $# -gt 1 || test "$is_target_a_directory" = always; then
-    if test ! -d "$dst_arg"; then
-      echo "$0: $dst_arg: Is not a directory." >&2
-      exit 1
-    fi
-  fi
-fi
-
-if test -z "$dir_arg"; then
-  do_exit='(exit $ret); exit $ret'
-  trap "ret=129; $do_exit" 1
-  trap "ret=130; $do_exit" 2
-  trap "ret=141; $do_exit" 13
-  trap "ret=143; $do_exit" 15
-
-  # Set umask so as not to create temps with too-generous modes.
-  # However, 'strip' requires both read and write access to temps.
-  case $mode in
-    # Optimize common cases.
-    *644) cp_umask=133;;
-    *755) cp_umask=22;;
-
-    *[0-7])
-      if test -z "$stripcmd"; then
-        u_plus_rw=
-      else
-        u_plus_rw='% 200'
-      fi
-      cp_umask=`expr '(' 777 - $mode % 1000 ')' $u_plus_rw`;;
-    *)
-      if test -z "$stripcmd"; then
-        u_plus_rw=
-      else
-        u_plus_rw=,u+rw
-      fi
-      cp_umask=$mode$u_plus_rw;;
-  esac
-fi
-
-for src
-do
-  # Protect names problematic for 'test' and other utilities.
-  case $src in
-    -* | [=\(\)!]) src=./$src;;
-  esac
-
-  if test -n "$dir_arg"; then
-    dst=$src
-    dstdir=$dst
-    test -d "$dstdir"
-    dstdir_status=$?
-  else
-
-    # Waiting for this to be detected by the "$cpprog $src $dsttmp" command
-    # might cause directories to be created, which would be especially bad
-    # if $src (and thus $dsttmp) contains '*'.
-    if test ! -f "$src" && test ! -d "$src"; then
-      echo "$0: $src does not exist." >&2
-      exit 1
-    fi
-
-    if test -z "$dst_arg"; then
-      echo "$0: no destination specified." >&2
-      exit 1
-    fi
-    dst=$dst_arg
-
-    # If destination is a directory, append the input filename; won't work
-    # if double slashes aren't ignored.
-    if test -d "$dst"; then
-      if test "$is_target_a_directory" = never; then
-        echo "$0: $dst_arg: Is a directory" >&2
-        exit 1
-      fi
-      dstdir=$dst
-      dst=$dstdir/`basename "$src"`
-      dstdir_status=0
-    else
-      dstdir=`dirname "$dst"`
-      test -d "$dstdir"
-      dstdir_status=$?
-    fi
-  fi
-
-  obsolete_mkdir_used=false
-
-  if test $dstdir_status != 0; then
-    case $posix_mkdir in
-      '')
-        # Create intermediate dirs using mode 755 as modified by the umask.
-        # This is like FreeBSD 'install' as of 1997-10-28.
-        umask=`umask`
-        case $stripcmd.$umask in
-          # Optimize common cases.
-          *[2367][2367]) mkdir_umask=$umask;;
-          .*0[02][02] | .[02][02] | .[02]) mkdir_umask=22;;
-
-          *[0-7])
-            mkdir_umask=`expr $umask + 22 \
-              - $umask % 100 % 40 + $umask % 20 \
-              - $umask % 10 % 4 + $umask % 2
-            `;;
-          *) mkdir_umask=$umask,go-w;;
-        esac
-
-        # With -d, create the new directory with the user-specified mode.
-        # Otherwise, rely on $mkdir_umask.
-        if test -n "$dir_arg"; then
-          mkdir_mode=-m$mode
-        else
-          mkdir_mode=
-        fi
-
-        posix_mkdir=false
-        case $umask in
-          *[123567][0-7][0-7])
-            # POSIX mkdir -p sets u+wx bits regardless of umask, which
-            # is incompatible with FreeBSD 'install' when (umask & 300) != 0.
-            ;;
-          *)
-            tmpdir=${TMPDIR-/tmp}/ins$RANDOM-$$
-            trap 'ret=$?; rmdir "$tmpdir/d" "$tmpdir" 2>/dev/null; exit $ret' 0
-
-            if (umask $mkdir_umask &&
-                exec $mkdirprog $mkdir_mode -p -- "$tmpdir/d") >/dev/null 2>&1
-            then
-              if test -z "$dir_arg" || {
-                   # Check for POSIX incompatibilities with -m.
-                   # HP-UX 11.23 and IRIX 6.5 mkdir -m -p sets group- or
-                   # other-writable bit of parent directory when it shouldn't.
-                   # FreeBSD 6.1 mkdir -m -p sets mode of existing directory.
-                   ls_ld_tmpdir=`ls -ld "$tmpdir"`
-                   case $ls_ld_tmpdir in
-                     d????-?r-*) different_mode=700;;
-                     d????-?--*) different_mode=755;;
-                     *) false;;
-                   esac &&
-                   $mkdirprog -m$different_mode -p -- "$tmpdir" && {
-                     ls_ld_tmpdir_1=`ls -ld "$tmpdir"`
-                     test "$ls_ld_tmpdir" = "$ls_ld_tmpdir_1"
-                   }
-                 }
-              then posix_mkdir=:
-              fi
-              rmdir "$tmpdir/d" "$tmpdir"
-            else
-              # Remove any dirs left behind by ancient mkdir implementations.
-              rmdir ./$mkdir_mode ./-p ./-- 2>/dev/null
-            fi
-            trap '' 0;;
-        esac;;
-    esac
-
-    if
-      $posix_mkdir && (
-        umask $mkdir_umask &&
-        $doit_exec $mkdirprog $mkdir_mode -p -- "$dstdir"
-      )
-    then :
-    else
-
-      # The umask is ridiculous, or mkdir does not conform to POSIX,
-      # or it failed possibly due to a race condition.  Create the
-      # directory the slow way, step by step, checking for races as we go.
-
-      case $dstdir in
-        /*) prefix='/';;
-        [-=\(\)!]*) prefix='./';;
-        *)  prefix='';;
-      esac
-
-      oIFS=$IFS
-      IFS=/
-      set -f
-      set fnord $dstdir
-      shift
-      set +f
-      IFS=$oIFS
-
-      prefixes=
-
-      for d
-      do
-        test X"$d" = X && continue
-
-        prefix=$prefix$d
-        if test -d "$prefix"; then
-          prefixes=
-        else
-          if $posix_mkdir; then
-            (umask=$mkdir_umask &&
-             $doit_exec $mkdirprog $mkdir_mode -p -- "$dstdir") && break
-            # Don't fail if two instances are running concurrently.
-            test -d "$prefix" || exit 1
-          else
-            case $prefix in
-              *\'*) qprefix=`echo "$prefix" | sed "s/'/'\\\\\\\\''/g"`;;
-              *) qprefix=$prefix;;
-            esac
-            prefixes="$prefixes '$qprefix'"
-          fi
-        fi
-        prefix=$prefix/
-      done
-
-      if test -n "$prefixes"; then
-        # Don't fail if two instances are running concurrently.
-        (umask $mkdir_umask &&
-         eval "\$doit_exec \$mkdirprog $prefixes") ||
-          test -d "$dstdir" || exit 1
-        obsolete_mkdir_used=true
-      fi
-    fi
-  fi
-
-  if test -n "$dir_arg"; then
-    { test -z "$chowncmd" || $doit $chowncmd "$dst"; } &&
-    { test -z "$chgrpcmd" || $doit $chgrpcmd "$dst"; } &&
-    { test "$obsolete_mkdir_used$chowncmd$chgrpcmd" = false ||
-      test -z "$chmodcmd" || $doit $chmodcmd $mode "$dst"; } || exit 1
-  else
-
-    # Make a couple of temp file names in the proper directory.
-    dsttmp=$dstdir/_inst.$$_
-    rmtmp=$dstdir/_rm.$$_
-
-    # Trap to clean up those temp files at exit.
-    trap 'ret=$?; rm -f "$dsttmp" "$rmtmp" && exit $ret' 0
-
-    # Copy the file name to the temp name.
-    (umask $cp_umask && $doit_exec $cpprog "$src" "$dsttmp") &&
-
-    # and set any options; do chmod last to preserve setuid bits.
-    #
-    # If any of these fail, we abort the whole thing.  If we want to
-    # ignore errors from any of these, just make sure not to ignore
-    # errors from the above "$doit $cpprog $src $dsttmp" command.
-    #
-    { test -z "$chowncmd" || $doit $chowncmd "$dsttmp"; } &&
-    { test -z "$chgrpcmd" || $doit $chgrpcmd "$dsttmp"; } &&
-    { test -z "$stripcmd" || $doit $stripcmd "$dsttmp"; } &&
-    { test -z "$chmodcmd" || $doit $chmodcmd $mode "$dsttmp"; } &&
-
-    # If -C, don't bother to copy if it wouldn't change the file.
-    if $copy_on_change &&
-       old=`LC_ALL=C ls -dlL "$dst"     2>/dev/null` &&
-       new=`LC_ALL=C ls -dlL "$dsttmp"  2>/dev/null` &&
-       set -f &&
-       set X $old && old=:$2:$4:$5:$6 &&
-       set X $new && new=:$2:$4:$5:$6 &&
-       set +f &&
-       test "$old" = "$new" &&
-       $cmpprog "$dst" "$dsttmp" >/dev/null 2>&1
-    then
-      rm -f "$dsttmp"
-    else
-      # Rename the file to the real destination.
-      $doit $mvcmd -f "$dsttmp" "$dst" 2>/dev/null ||
-
-      # The rename failed, perhaps because mv can't rename something else
-      # to itself, or perhaps because mv is so ancient that it does not
-      # support -f.
-      {
-        # Now remove or move aside any old file at destination location.
-        # We try this two ways since rm can't unlink itself on some
-        # systems and the destination file might be busy for other
-        # reasons.  In this case, the final cleanup might fail but the new
-        # file should still install successfully.
-        {
-          test ! -f "$dst" ||
-          $doit $rmcmd -f "$dst" 2>/dev/null ||
-          { $doit $mvcmd -f "$dst" "$rmtmp" 2>/dev/null &&
-            { $doit $rmcmd -f "$rmtmp" 2>/dev/null; :; }
-          } ||
-          { echo "$0: cannot unlink or rename $dst" >&2
-            (exit 1); exit 1
-          }
-        } &&
-
-        # Now rename the file to the real destination.
-        $doit $mvcmd "$dsttmp" "$dst"
-      }
-    fi || exit 1
-
-    trap '' 0
-  fi
-done
-
-# Local variables:
-# eval: (add-hook 'write-file-hooks 'time-stamp)
-# time-stamp-start: "scriptversion="
-# time-stamp-format: "%:y-%02m-%02d.%02H"
-# time-stamp-time-zone: "UTC"
-# time-stamp-end: "; # UTC"
-# End:
diff -Nuar groff-1.22.3.old/m4/groff.m4 groff-1.22.3/m4/groff.m4
--- groff-1.22.3.old/m4/groff.m4	2014-11-04 10:38:35.568519709 +0200
+++ groff-1.22.3/m4/groff.m4	2015-04-23 20:57:03.000000000 +0300
@@ -148,7 +148,11 @@
 # We need makeinfo 4.8 or newer.
 
 AC_DEFUN([GROFF_MAKEINFO],
-  [if test $docadd_info = yes; then
+  # By default automake will set MAKEINFO to MAKEINFO = ${SHELL} <top
+  # src dir>/build-aux/missing makeinfo.As we need a more precise
+  # check of makeinfo version, we don't use it.
+  [MAKEINFO=
+   if test $docadd_info = yes; then
      missing=
      AC_CHECK_PROG([MAKEINFO], [makeinfo], [makeinfo])
      if test -z "$MAKEINFO"; then
@@ -173,13 +177,13 @@
        infofile=doc/groff.info
        test -f ${infofile} || infofile=${srcdir}/${infofile}
        if test ! -f ${infofile} \
-	|| test ${srcdir}/doc/groff.texinfo -nt ${infofile}; then
+	|| test ${srcdir}/doc/groff.texi -nt ${infofile}; then
 	 AC_MSG_ERROR($missing
 [Get the `texinfo' package version 4.8 or newer.])
        else
 	 AC_MSG_WARN($missing
 [Get the `texinfo' package version 4.8 or newer if you want to convert
-`groff.texinfo' into a PDF or HTML document.])
+`groff.texi' into a PDF or HTML document.])
        fi
      fi
 
@@ -195,8 +199,8 @@
    AC_SUBST([MAKEINFO])
    AC_SUBST([make_infodoc])
    AC_SUBST([make_install_infodoc])
-   AC_SUBST([make_uninstall_infodoc])])
-
+   AC_SUBST([make_uninstall_infodoc])
+   AC_SUBST([makeinfo_version_numeric])])
 
 # The following programs are needed for grohtml.
 
@@ -902,6 +906,8 @@
    AC_SUBST([tmac_wrap])])
 
 
+# Searching if a non-GNU Troff is installed.  The built-in register
+# \n[.g] is always 1 in GNU Troff.
 AC_DEFUN([GROFF_G],
   [AC_MSG_CHECKING([for existing troff installation])
    if test "x`(echo .tm '|n(.g' | tr '|' '\\\\' | troff -z -i 2>&1) 2>/dev/null`" = x0; then
@@ -998,18 +1004,12 @@
    case "$host_os" in
    *mingw*)
      make_winscripts=winscripts
-     make_install_winscripts=install_winscripts
-     make_uninstall_winscripts=uninstall_winscripts
      AC_MSG_RESULT([yes]) ;;
    *)
      make_winscripts=
-     make_install_winscripts=
-     make_uninstall_winscripts=
      AC_MSG_RESULT([no]) ;;
    esac
-   AC_SUBST([make_winscripts])
-   AC_SUBST([make_install_winscripts])
-   AC_SUBST([make_uninstall_winscripts])])
+   AC_SUBST([make_winscripts])])
 
 
 # Check whether we need a declaration for a function.
@@ -1353,3 +1353,22 @@
 AC_DEFUN([GROFF_REFERDIR_DEFAULT],
   referdir=$libprogramdir/refer
   AC_SUBST([referdir]))
+
+# Check for xpmtoppm, for gnu.eps generation
+AC_DEFUN([GROFF_PROG_XPMTOPPM],
+  [AC_CHECK_PROG([XPMTOPPM], [xpmtoppm], [found], [missing])])
+
+# Check for make builtin variable RM
+AC_DEFUN([GROFF_MAKE_RM],
+  [AC_MSG_CHECKING(whether make has builtin variable RM)
+cat <<EOF > test_make_rm.mk
+all:
+	@if test -n "\$(RM)"; then \
+	   echo "yes"; \
+	else \
+	   echo "no"; \
+	fi
+EOF
+  groff_is_rm_defined=`make -sf test_make_rm.mk`
+  AC_MSG_RESULT([$groff_is_rm_defined])
+  rm -f test_make_rm.mk])
diff -Nuar groff-1.22.3.old/Makefile groff-1.22.3/Makefile
--- groff-1.22.3.old/Makefile	2014-11-04 10:39:21.025951413 +0200
+++ groff-1.22.3/Makefile	1970-01-01 02:00:00.000000000 +0200
@@ -1,34 +0,0 @@
-# Copyright (C) 1989-2014 Free Software Foundation, Inc.
-#      Written by James Clark (jjc@jclark.com)
-#
-# This file is part of groff.
-#
-# groff is free software; you can redistribute it and/or modify it under
-# the terms of the GNU General Public License as published by the Free
-# Software Foundation, either version 3 of the License, or
-# (at your option) any later version.
-#
-# groff is distributed in the hope that it will be useful, but WITHOUT ANY
-# WARRANTY; without even the implied warranty of MERCHANTABILITY or
-# FITNESS FOR A PARTICULAR PURPOSE.  See the GNU General Public License
-# for more details.
-#
-# You should have received a copy of the GNU General Public License
-# along with this program. If not, see <http://www.gnu.org/licenses/>.
-#
-# Makefile.init
-#
-SHELL=/bin/sh
-
-.PHONY: all
-all:
-	$(SHELL) configure
-	$(MAKE) all
-
-########################################################################
-# Emacs settings
-########################################################################
-#
-# Local Variables:
-# mode: makefile
-# End:
diff -Nuar groff-1.22.3.old/Makefile.am groff-1.22.3/Makefile.am
--- groff-1.22.3.old/Makefile.am	1970-01-01 02:00:00.000000000 +0200
+++ groff-1.22.3/Makefile.am	2015-04-23 20:57:03.000000000 +0300
@@ -0,0 +1,857 @@
+# # Copyright (C) 1989-2014 Free Software Foundation, Inc.
+#   Free Software Foundation, Inc.
+#      Original Makefile.in written by James Clark (jjc@jclark.com)
+#      Migrated to Automake by Bertrand Garrigues
+#
+# This file is part of groff.
+#
+# groff is free software; you can redistribute it and/or modify it under
+# the terms of the GNU General Public License as published by the Free
+# Software Foundation, either version 3 of the License, or
+# (at your option) any later version.
+#
+# groff is distributed in the hope that it will be useful, but WITHOUT ANY
+# WARRANTY; without even the implied warranty of MERCHANTABILITY or
+# FITNESS FOR A PARTICULAR PURPOSE.  See the GNU General Public License
+# for more details.
+#
+# You should have received a copy of the GNU General Public License
+# along with this program. If not, see <http://www.gnu.org/licenses/>.
+#
+# Makefile.am
+#
+
+# The variables that are listed in the following comments will be
+# automatically set by automake in the generated Makefile.in
+
+# SHELL 
+
+# PACKAGE_TARNAME
+
+# srcdir
+
+# top_srcdir
+
+# VPATH
+
+# top_builddir
+
+# HOST
+# `HOST' is the canonical host specification,
+#    CPU_TYPE-MANUFACTURER-OPERATING_SYSTEM
+# or
+#    CPU_TYPE-MANUFACTURER-KERNEL-OPERATING_SYSTEM
+
+# `RT_SEP' is the operating system's native PATH SEPARATOR CHAR, which
+# is to be used in runtime PATHs compiled into groff executables.
+RT_SEP=@GROFF_PATH_SEPARATOR@
+
+# `SH_SEP' is a alternative PATH SEPARATOR CHAR, to be used in shell
+# scripts and makefile rules; it may be the same as `RT_SEP', but,
+# particularly in some Microsoft environments, it may differ.
+SH_SEP=@PATH_SEPARATOR@
+
+# GLIBC2
+# `GLIBC21' is yes if the host operating system uses GNU libc 2.1 or newer,
+# otherwise no.
+
+
+# VERSION is set by automake, based on what is passed to AC_INIT.  We
+# pass GROFF_VERSION_STRING to it, which skips the revision if set to
+# 0.
+
+# PAGE
+# Define `page' to be letter if your PostScript printer uses 8.5x11
+# paper (USA) and define it to be A4, if it uses A4 paper (rest of the
+# world).
+
+# GHOSTSCRIPT
+# The name of the ghostscript program. Normally, gs, on GNU/Linux
+# but it might be different on MS-DOS/MS-WIN32 systems.
+
+# ALT_GHOSTSCRIPT_PROGS
+# `ALT_GHOSTSCRIPT_PROGS' specifies a list alternative names,
+# which can be tried if `GHOSTSCRIPT' cannot be found at run time.
+
+# ALT_AWK_PROGS
+# Similarly, `ALT_AWK_PROGS' specifies a list of alternative names,
+# which can be tried at run time, to identify the awk program.
+
+# BROKEN_SPOOLER_FLAGS
+# Normally the Postscript driver, grops, produces output that conforms
+# to version 3.0 of the Adobe Document Structuring Conventions.
+# Unfortunately some spoolers and previewers can't handle such output.
+# The BROKEN_SPOOLER_FLAGS variable tells grops what it should do to
+# make its output acceptable to such programs.  This variable controls
+# only the default behaviour of grops; the behaviour can be changed at
+# runtime by the grops -b option (and so by groff -P-b).
+# Use a value of 0 if your spoolers and previewers are able to handle
+# conforming PostScript correctly.
+# Add 1 if no %%{Begin,End}DocumentSetup comments should be generated;
+# this is needed for early versions of TranScript that get confused by
+# anything between the %%EndProlog line and the first %%Page: comment.
+# Add 2 if lines in included files beginning with %! should be
+# stripped out; this is needed for the OpenWindows 2.0 pageview previewer.
+# Add 4 if %%Page, %%Trailer and %%EndProlog comments should be
+# stripped out of included files; this is needed for spoolers that
+# don't understand the %%{Begin,End}Document comments. I suspect this
+# includes early versions of TranScript.
+# Add 8 if the first line of the PostScript output should be %!PS-Adobe-2.0
+# rather than %!PS-Adobe-3.0; this is needed when using Sun's Newsprint
+# with a printer that requires page reversal.
+
+
+# `DEVICE' is the default device.
+DEVICE=ps
+
+# XDEVIDIRS
+# `XDEVDIRS' is either `font/devX{75,100}{,-12}' or empty.
+
+# XPROGDIRS
+# `XPROGDIRS' is either `src/devices/xditview src/utils/xtotroff' or empty.
+
+# XLIBDIRS
+# `XLIBDIRS' is either `src/libs/libxutil' or empty.
+
+# `TTYDEVDIRS' is either `font/devascii font/devlatin1' (for
+# ASCII) or `font/devcp1047' (for EBCDIC) plus font/devutf8.
+TTYDEVDIRS=@TTYDEVDIRS@ font/devutf8
+
+# OTHERDEVDIRS
+# `OTHERDEVDIRS' is either `font/devlj4 font/devlbp' (for ASCII) or
+# empty (for EBCDIC).
+
+# PSPRINT
+# `PSPRINT' is the command to use for printing a PostScript file,
+# for example `lpr'.
+
+# DVIPRINT
+# `DVIPRINT' is the command to use for printing a TeX dvi file,
+# for example `lpr -d'.
+
+# g
+# Prefix for names of programs that have Unix counterparts.
+# For example, if `g' is `g' then troff will be installed as
+# gtroff.  This doesn't affect programs like grops or groff that have
+# no Unix counterparts.  Note that the groff versions of eqn and tbl
+# will not work with Unix troff.
+
+# prefix
+# exec_prefix
+# Common prefix for installation directories.
+# Used in definitions of exec_prefix, datasubdir, fontpath, manroot.
+# This must already exist when you do make install.
+
+# bindir
+# `bindir' says where to install executables.
+
+# libdir
+# `libdir' says where to install platform-dependent data.
+
+# libprogramdir
+# `libprogramdir' is $(libdir)/groff
+
+# `datasubdir' says where to install platform-independent data files.
+# datadir
+# datarootdir
+dataprogramdir=$(datadir)/groff
+datasubdir=$(dataprogramdir)/$(VERSION)
+
+# infodir
+# `infodir' says where to install info files.
+
+# docdir
+# `docdir' says where to install documentation files.  The default
+# location is ${datarootdir}/doc/${PACKAGE}, but we add the version
+docdir=$(datarootdir)/doc/${PACKAGE}-$(VERSION)
+
+# `exampledir' says where to install example files.
+exampledir=$(docdir)/examples
+
+# `htmldocdir' says where to install documentation in HTML format.
+htmldocdir=$(docdir)/html
+
+# `pdfdocdir' says where to install documentation in PDF format.
+pdfdocdir=$(docdir)/pdf
+
+# `fontdir' says where to install dev*/*.
+fontdir=$(datasubdir)/font
+
+# `oldfontdir' says where to install old font sets (as dev*/*).
+oldfontdir=$(datasubdir)/oldfont
+
+# `localfontdir' says where local fonts will be installed (as dev*/*).
+localfontdir=$(dataprogramdir)/site-font
+
+# `legacyfontdir' is for compatibility with non-GNU troff.
+legacyfontdir=/usr/lib/font
+
+# `fontpath' says where to look for dev*/*.
+fontpath=$(localfontdir)$(RT_SEP)$(fontdir)$(RT_SEP)$(legacyfontdir)
+
+# `tmacdir' says where to install macros.
+tmacdir=$(datasubdir)/tmac
+
+# `systemtmacdir' says where to install platform-dependent macros.
+systemtmacdir=$(libprogramdir)/site-tmac
+
+# `localtmacdir' says where local files will be installed.
+localtmacdir=$(dataprogramdir)/site-tmac
+
+# appresdir
+# `appresdir' says where to install the application resource file for
+# gxditview.
+
+# groffer_dir
+# glilypond_dir
+# grog_dir
+# gpinyin_dir
+
+# `tmacpath' says where to look for macro files.
+# The current directory will be prepended in unsafe mode only; the home
+# directory will be always added.
+# `troffrc' and `troffrc-end' (and `eqnrc') are searched neither in the
+# current nor in the home directory.
+tmacpath=$(systemtmacdir)$(RT_SEP)$(localtmacdir)$(RT_SEP)$(tmacdir)
+
+# sys_tmac_prefix
+# `sys_tmac_prefix' is prefix (if any) for system macro packages.
+
+# pnmtops_nosetpage
+# `pnmtops_nosetpage' is the command to be run to generate an eps
+# file.  Some versions of pnmtops provide the -nosetpage option.
+# We detect this and use it if present.
+
+# tmac_wrap
+# `tmac_wrap' is list of system macro packages that should be made
+# available to groff by creating a corresponding macro package
+# in the groff macro directory that references the system macro
+# package.
+
+# If there is a groff version of a macro package listed in $(tmac_wrap),
+# then the groff version will be installed with a prefix of this.
+# Don't make this empty.
+tmac_prefix=g
+
+# The groff -mm macros will be available as -m$(tmac_m_prefix)m.
+tmac_m_prefix=\
+ `for i in $(tmac_wrap) ""; do case "$$i" in m) echo $(tmac_prefix);; esac; done`
+# The groff -ms macros will be available as -m$(tmac_s_prefix)s.
+tmac_s_prefix=\
+ `for i in $(tmac_wrap) ""; do case "$$i" in s) echo $(tmac_prefix);; esac; done`
+# The groff -man macros will be available as -m$(tmac_an_prefix)an.
+tmac_an_prefix=\
+ `for i in $(tmac_wrap) ""; do case "$$i" in an) echo $(tmac_prefix);; esac; done`
+
+# Extension to be used for refer index files.  Index files are not
+# sharable between different architectures, so you might want to use
+# different suffixes for different architectures.  Choose an extension
+# that doesn't conflict with refer or any other indexing program.
+indexext=.i
+
+# Directory containing the default index for refer.
+indexdir=/usr/dict/papers
+
+# The filename (without suffix) of the default index for refer.
+indexname=Ind
+
+# common_words_file is a file containing a list of common words.
+# If your system provides /usr/lib/eign it will be copied onto this,
+# otherwise the supplied eign file will be used.
+common_words_file=$(datasubdir)/eign
+
+# mandir
+# `manroot' is the root of the man page directory tree.
+manroot=$(mandir)
+
+# `man1ext' is the man section for user commands.
+man1ext=1
+man1dir=$(manroot)/man$(man1ext)
+
+# `man5ext' is the man section for file formats.
+man5ext=5
+man5dir=$(manroot)/man$(man5ext)
+
+# `man7ext' is the man section for macros.
+man7ext=7
+man7dir=$(manroot)/man$(man7ext)
+
+# doc_dist_target_ok
+# `dist' target is disallowed in some `configure' combinations.
+
+# The configure script checks whether the user wants the info documentation.
+# For the repo version this mechanism also suppresses building via `makeinfo'.
+# make_infodoc
+# make_install_infodoc
+# make_uninstall_infodoc
+
+# The configure script checks whether all necessary utility programs for
+# grohtml are available -- only then we can build the HTML documentation.
+# make_htmldoc
+# make_install_htmldoc
+# make_uninstall_htmldoc
+
+# make_htmlexamples
+# make_install_htmlexamples
+# make_uninstall_htmlexamples
+
+# The configure script also checks whether all necessary utility programs
+# for pdfroff are available -- only then we can build PDF documentation.
+# make_pdfdoc
+# make_install_pdfdoc
+# make_uninstall_pdfdoc
+
+# make_pdfexamples
+# make_install_pdfexamples
+# make_uninstall_pdfexamples
+
+# `other' documentation, e.g., `meref.me' and `pic.ms', as well as their
+# generated counterparts..
+# make_otherdoc
+# make_install_otherdoc
+# make_uninstall_otherdoc
+
+# `examples' -- a generic switch, but the generated examples are furtherly
+# subdivided to catch HTML and PDF production availability.
+# make_examples
+# make_install_examples
+# make_uninstall_examples
+
+# Windows `.cmd' files
+# make_winscripts
+# make_install_winscripts
+# make_uninstall_winscripts
+
+# All the previous installation directories, when used, are prefixed with
+# $(DESTDIR) during install and uninstall, to support staged installations.
+
+# config.h might set the following defines:
+#
+# WORDS_BIGENDIAN		if your target platform is big-endian
+# IS_EBCDIC_HOST		if the host's encoding is EBCDIC
+#
+# HAVE_DIRECT_H		if you have <direct.h>
+# HAVE_DIRENT_H		if you have <dirent.h>
+# HAVE_CC_INTTYPES_H		if you have a C++ <inttypes.h>
+# HAVE_PROCESS_H		if you have <process.h>
+# HAVE_LIMITS_H		if you have <limits.h>
+# HAVE_CC_LIMITS_H		if you have a C++ <limits.h>
+# HAVE_MATH_H			if you have <math.h>
+# HAVE_CC_OSFCN_H		if you have a C++ <osfcn.h>
+# HAVE_STDDEF_H		if you have <stddef.h>
+# HAVE_STDLIB_H		if you have <stdlib.h>
+# HAVE_STRING_H		if you have <string.h>
+# HAVE_STRINGS_H		if you have <strings.h>
+# HAVE_SYS_DIR_H		if you have <sys/dir.h>
+# HAVE_SYS_PARAM_H		if you have <sys/param.h>
+# HAVE_SYS_STAT_H		if you have <sys/stat.h>
+# HAVE_SYS_TIME_H		if you have <sys/time.h>
+# HAVE_SYS_TYPES_H		if you have <sys/types.h>
+# HAVE_UNISTD_H		if you have <unistd.h>
+#
+# HAVE_FMOD			if you have fmod()
+# HAVE_GETCWD			if you have getcwd()
+# HAVE_GETTIMEOFDAY		if you have gettimeofday()
+# HAVE_ICONV			if you have iconv()
+# HAVE_ISATTY			if you have isatty()
+# HAVE_KILL			if you have kill()
+# HAVE_LANGINFO_CODESET	if you have nl_langinfo()
+# HAVE_MKSTEMP		if you have mkstemp()
+# HAVE_MMAP			if you have mmap()
+# HAVE_PUTENV			if you have putenv()
+# HAVE_RENAME			if you have rename()
+# HAVE_SETLOCALE		if you have setlocale()
+# HAVE_SNPRINTF		if you have snprintf()
+# HAVE_STRCASECMP		if you have strcasecmp()
+# HAVE_STRNCASECMP		if you have strncasecmp()
+# HAVE_STRERROR		if you have strerror()
+# HAVE_STRSEP			if you have strsep()
+# HAVE_STRTOL			if you have strtol()
+# HAVE_SYMLINK		if you have symlink()
+# HAVE_VSNPRINTF		if you have vsnprintf()
+#
+# NEED_DECLARATION_GETTIMEOFTODAY
+#				if your C++ <sys/time.h> doesn't declare
+#				gettimeofday()
+# NEED_DECLARATION_HYPOT	if your C++ <math.h> doesn't declare hypot()
+# NEED_DECLARATION_PCLOSE	if your C++ <stdio.h> doesn't declare pclose()
+# NEED_DECLARATION_POPEN	if your C++ <stdio.h> doesn't declare popen()
+# NEED_DECLARATION_PUTENV	if your C++ <stdlib.h> doesn't declare
+#				putenv()
+# NEED_DECLARATION_RAND	if your C++ <stdlib.h> doesn't declare rand()
+# NEED_DECLARATION_SNPRINTF	if your C++ <stdio.h> doesn't declare
+# 				snprintf()
+# NEED_DECLARATION_SRAND	if your C++ <stdlib.h> doesn't declare srand()
+# NEED_DECLARATION_STRCASECMP	if your C++ <string.h> doesn't declare
+#				strcasecmp()
+# NEED_DECLARATION_STRNCASECMP
+#				if your C++ <string.h> doesn't declare
+#				strncasecmp()
+# NEED_DECLARATION_VFPRINTF	if your C++ <stdio.h> doesn't declare
+#				vfprintf()
+# NEED_DECLARATION_VSNPRINTF	if your C++ <stdio.h> doesn't declare
+#				vsnprintf()
+#
+# HAVE_DECL_GETC_UNLOCKED	if you have getc_unlocked()
+# HAVE_DECL_SYS_SIGLIST	if you have sys_siglist[]
+#
+# HAVE_STRUCT_EXCEPTION	if <math.h> defines struct exception
+# HAVE_SYS_NERR		if you have sysnerr in <errno.h> or <stdio.h>
+# HAVE_SYS_ERRLIST		if you have sys_errlist in <errno.h> or
+#				<stdio.h>
+# ICONV_CONST=const		if declaration of iconv() needs const
+# LONG_FOR_TIME_T		if localtime() takes a long * not a time_t *
+# RETSIGTYPE=int		if signal handlers return int not void
+# RET_TYPE_SRAND_IS_VOID	if srand() returns void not int
+#
+# WCOREFLAG=0200		if the 0200 bit of the status returned by
+#				wait() indicates whether a core image was
+#				produced for a process that was terminated
+#				by a signal
+#
+# HAVE_WORKING_O_NOATIME      define if <fcntl.h>'s O_NOATIME flag works
+# HAVE_WORKING_O_NOFOLLOW     define if <fcntl.h>'s O_NOFOLLOW flag works
+#
+# uintmax_t=<value>		define to `unsigned long' or `unsigned long
+#				long' if <inttypes.h> does not exist
+#
+# TRADITIONAL_CPP		if your C++ compiler uses a traditional
+#				(Reiser) preprocessor
+# ARRAY_DELETE_NEEDS_SIZE	if your C++ doesn't understand `delete []'
+#
+# PAGE=A4			if the the printer's page size is A4
+# GHOSTSCRIPT=gs		the name (and directory if required) of the
+#				ghostscript program
+
+# Include
+#
+#   {fmod,getcwd,mkstemp,putenv,snprintf,strcasecmp,
+#    strerror,strncasecmp,strtol}.$(OBJEXT)
+#
+# LIBOBJS
+# in LIBOBJS if your C library is missing the corresponding function.
+# vsnprintf is defined in the snprintf.$(OBJEXT) module.
+
+# `CCC' is the compiler for C++ (.cpp) files.
+CCC=@CXX@
+# CC
+# CFLAGS
+# CPPFLAGS
+# LDFLAGS
+
+# X_CFLAGS
+# X_LIBS
+# X_EXTRA_LIBS
+# X_PRE_LIBS
+
+# YACC
+
+# GREP
+# EGREP
+
+# MAKEINFO
+
+# EXEEXT
+# OBJEXT
+# LIBEXT
+# LIBS
+# LIBM
+# LIBICONV
+# RANLIB
+# INSTALL
+# INSTALL_PROGRAM
+# INSTALL_SCRIPT
+# INSTALL_DATA
+# INSTALL_INFO
+# LN_S
+
+AR=ar
+ETAGS=etags
+ETAGSFLAGS=
+# Flag that tells etags to assume C++.
+ETAGSCCFLAG=-C
+# Full path to perl.
+# PERL
+# PERLVERSION
+# Sed command with which to edit sh scripts.
+# SH_SCRIPT_SED_CMD
+# Sed script to deal with OS dependencies in sh scripts.
+SH_DEPS_SED_SCRIPT=$(top_builddir)/shdeps.sed
+
+# The program to create directory hierarchies.
+# mkinstalldirs is now in gnulib/build-aux
+
+PURIFY=purify
+PURIFYCCFLAGS=
+#PURIFYCCFLAGS=-g++=yes \
+#  -collector=`dirname \`$(CCC) -print-libgcc-file-name\``/ld
+
+# Add groff and gnulib m4 macros
+ACLOCAL_AMFLAGS = -I m4 -I gnulib_m4
+
+# Common preprocessor flags: gnulib includes, common includes in
+# src/include, and config.h that is generated in the build tree
+AM_CPPFLAGS = \
+  -I$(top_srcdir)/src/include \
+  -I$(top_srcdir)/lib \
+  -I$(top_builddir)/src/include \
+  -I$(top_builddir)/lib
+
+# The following Automake variables will be overloaded by the various
+# .am files
+bin_PROGRAMS =
+nobase_bin_PROGRAMS =
+bin_SCRIPTS = 
+dist_bin_SCRIPTS = 
+MOSTLYCLEANFILES =
+MOSTLYCLEANADD =
+noinst_LIBRARIES =
+BUILT_SOURCES =
+CLEANFILES =
+# gnulib asks to include this file
+EXTRA_DIST = gnulib_m4/gnulib-cache.m4
+FONTFILES =
+PREFIXMAN1 =
+PREFIXMAN5 =
+PREFIXMAN7 =
+man1_MANS =
+man5_MANS =
+man7_MANS =
+
+# for lex/yacc
+AM_YFLAGS = -d -v
+
+SUFFIXES =
+
+# tests launched by make check
+check_SCRIPTS =
+check_PROGRAMS =
+TESTS =
+AM_TESTS_ENVIRONMENT = \
+  abs_top_srcdir=$(abs_top_srcdir) \
+  abs_top_builddir=$(abs_top_builddir) \
+  export abs_top_srcdir abs_top_builddir;
+
+# We use Automake's Uniform Naming Scheme.
+#
+# prefixexecbin_PROGRAMS is the list of programs that may have a
+# NAMEPREFIX if an existing non-GNU troff system was detected. 
+#
+# This is done by the m4 macro GROFF_G that checks for the presence of
+# GNU Troff built-in \n[.g] macro. If a Unix Troff binary was
+# detected, the following programs and scripts names will have a 'g'
+# prefix: chem, tbl, eqn, neqn, pic, soleimm grn, refer, lookbib,
+# troff, nroff. Also, PROG_PREFIX will be set to 'g' in the generated
+# header defs.h so that these programs could be called correctly.
+#
+# prefixexecbindir is used to temporary install these programs. They
+# are then moved to bindir during the install-exec-hook.  Same thing
+# for the scripts.
+NAMEPREFIX=$(g)
+prefixexecbin_PROGRAMS =
+prefixexecbin_SCRIPTS = 
+if USEPROGRAMPREFIX
+# We use datadir because the uninstall rule for the PROGRAMS attempt
+# to cd into prefixexecbindir, and thus if prefixexecbindir is removed
+# two consecutive uninstall would fail
+prefixexecbindir = $(datadir)
+else
+prefixexecbindir = $(bindir)
+endif
+
+# Path to binaries and flags used by contribs and doc to generated doc.
+# These may be overridden if cross-compiling.
+GROFFBIN = $(abs_top_builddir)/groff
+GROFF_BIN_PATH = $(abs_top_builddir)
+PDFMOMBIN = $(abs_top_builddir)/pdfmom
+FFLAG=-F$(abs_top_builddir)/font -F$(abs_top_srcdir)/font
+TFLAG=-M$(abs_top_builddir)/tmac -M$(abs_top_srcdir)/tmac
+
+# make builtin variable RM
+if MAKE_DONT_HAVE_RM
+RM = rm -f
+endif
+
+# Non-recursive makefile system. See Automake manual '7.3 An
+# Alternative Approach to Subdirectories'. We use a single Makefile.am
+# that includes other .am files, rather than using SUBDIRS.  Note that
+# relative paths in the following .am files are relative to the top
+# source directory.
+
+include $(top_srcdir)/lib/gnulib.mk
+include $(top_srcdir)/arch/mingw/mingw.am
+include $(top_srcdir)/arch/misc/misc.am
+include $(top_srcdir)/contrib/chem/chem.am
+include $(top_srcdir)/contrib/eqn2graph/eqn2graph.am
+include $(top_srcdir)/contrib/gdiffmk/gdiffmk.am
+include $(top_srcdir)/contrib/glilypond/glilypond.am
+include $(top_srcdir)/contrib/gperl/gperl.am
+include $(top_srcdir)/contrib/gpinyin/gpinyin.am
+include $(top_srcdir)/contrib/grap2graph/grap2graph.am
+include $(top_srcdir)/contrib/groff_filenames/groff_filenames.am
+include $(top_srcdir)/contrib/groffer/groffer.am
+include $(top_srcdir)/contrib/hdtbl/hdtbl.am
+include $(top_srcdir)/contrib/mm/mm.am
+include $(top_srcdir)/contrib/mom/mom.am
+include $(top_srcdir)/contrib/pdfmark/pdfmark.am
+include $(top_srcdir)/contrib/pic2graph/pic2graph.am
+include $(top_srcdir)/doc/doc.am
+include $(top_srcdir)/font/devX100/devX100.am
+include $(top_srcdir)/font/devX100-12/devX100-12.am
+include $(top_srcdir)/font/devX75/devX75.am
+include $(top_srcdir)/font/devX75-12/devX75-12.am
+include $(top_srcdir)/font/devascii/devascii.am
+include $(top_srcdir)/font/devcp1047/devcp1047.am
+include $(top_srcdir)/font/devdvi/devdvi.am
+include $(top_srcdir)/font/devhtml/devhtml.am
+include $(top_srcdir)/font/devlatin1/devlatin1.am
+include $(top_srcdir)/font/devlbp/devlbp.am
+include $(top_srcdir)/font/devlj4/devlj4.am
+include $(top_srcdir)/font/devpdf/devpdf.am
+include $(top_srcdir)/font/devps/devps.am
+include $(top_srcdir)/font/devutf8/devutf8.am
+include $(top_srcdir)/font/scripts/scripts.am
+include $(top_srcdir)/man/man.am
+include $(top_srcdir)/src/include/include.am
+include $(top_srcdir)/src/libs/libbib/libbib.am
+include $(top_srcdir)/src/libs/libdriver/libdriver.am
+include $(top_srcdir)/src/libs/libgroff/libgroff.am
+include $(top_srcdir)/src/libs/libxutil/libxutil.am
+include $(top_srcdir)/src/devices/grodvi/grodvi.am
+include $(top_srcdir)/src/devices/grohtml/grohtml.am
+include $(top_srcdir)/src/devices/grolbp/grolbp.am
+include $(top_srcdir)/src/devices/grolj4/grolj4.am
+include $(top_srcdir)/src/devices/gropdf/gropdf.am
+include $(top_srcdir)/src/devices/grops/grops.am
+include $(top_srcdir)/src/devices/grotty/grotty.am
+include $(top_srcdir)/src/devices/xditview/xditview.am
+include $(top_srcdir)/src/preproc/eqn/eqn.am
+include $(top_srcdir)/src/preproc/grn/grn.am
+include $(top_srcdir)/src/preproc/html/html.am
+include $(top_srcdir)/src/preproc/pic/pic.am
+include $(top_srcdir)/src/preproc/preconv/preconv.am
+include $(top_srcdir)/src/preproc/refer/refer.am
+include $(top_srcdir)/src/preproc/soelim/soelim.am
+include $(top_srcdir)/src/preproc/tbl/tbl.am
+include $(top_srcdir)/src/roff/groff/groff.am
+include $(top_srcdir)/src/roff/grog/grog.am
+include $(top_srcdir)/src/roff/nroff/nroff.am
+include $(top_srcdir)/src/roff/troff/troff.am
+include $(top_srcdir)/src/utils/addftinfo/addftinfo.am
+include $(top_srcdir)/src/utils/afmtodit/afmtodit.am
+include $(top_srcdir)/src/utils/hpftodit/hpftodit.am
+include $(top_srcdir)/src/utils/indxbib/indxbib.am
+include $(top_srcdir)/src/utils/lkbib/lkbib.am
+include $(top_srcdir)/src/utils/lookbib/lookbib.am
+include $(top_srcdir)/src/utils/pfbtops/pfbtops.am
+include $(top_srcdir)/src/utils/tfmtodit/tfmtodit.am
+include $(top_srcdir)/src/utils/xtotroff/xtotroff.am
+include $(top_srcdir)/tmac/tmac.am
+
+# Adding defs.h to BUILT_SOURCES will ensure that it will be built on
+# make all or make check before all other targets. However, if another
+# target is built from a clean build tree, (for example make groff)
+# the files in BUILT_SOURCES will not be built first. That is why
+# additional dependencies where added in the .am files that lists
+# objects that use defs (for exmaple in groff.am:
+# src/roff/groff/groff.$(OBJEXT): defs.h)
+BUILT_SOURCES += defs.h
+
+# Same thing for gnulib's localcharset.c and configmake.h: gnulib uses
+# BUILT_SOURCES only, adding the following makes 'make lib/libgnu.a'
+# possible
+lib/localcharset.$(OBJEXT): lib/configmake.h
+
+# if there is a name prefix we install the man pages by hand
+all: generate_man_files
+install-data-hook: install-prefix-man
+uninstall-hook: uninstall-prefix-man
+if USEPROGRAMPREFIX
+generate_man_files: $(PREFIXMAN1)
+install-prefix-man:
+	for f in $(PREFIXMAN1); do \
+	  manfile_final_name=`basename $$f | sed 's/n$$/1/'`; \
+	  cp -f $$f $(DESTDIR)$(man1dir)/$(NAMEPREFIX)$$manfile_final_name; \
+	done
+	for f in $(PREFIXMAN5); do \
+	  manfile_final_name=`basename $$f | sed 's/n$$/5/'`; \
+	  cp -f $$f $(DESTDIR)$(man5dir)/$(NAMEPREFIX)$$manfile_final_name; \
+	done
+	for f in $(PREFIXMAN7); do \
+	  manfile_final_name=`basename $$f | sed 's/n$$/7/'`; \
+	  cp -f $$f $(DESTDIR)$(man7dir)/$(NAMEPREFIX)$$manfile_final_name; \
+	done
+uninstall-prefix-man:
+	for f in $(PREFIXMAN1); do \
+	  manfile_final_name=`basename $$f | sed 's/n$$/1/'`; \
+	  rm -f $(DESTDIR)$(man1dir)/$(NAMEPREFIX)$$manfile_final_name; \
+	done
+	for f in $(PREFIXMAN5); do \
+	  manfile_final_name=`basename $$f | sed 's/n$$/5/'`; \
+	  rm -f $(DESTDIR)$(man5dir)/$(NAMEPREFIX)$$manfile_final_name; \
+	done
+	for f in $(PREFIXMAN7); do \
+	  manfile_final_name=`basename $$f | sed 's/n$$/7/'`; \
+	  rm -f $(DESTDIR)$(man7dir)/$(NAMEPREFIX)$$manfile_final_name; \
+	done
+else
+man1_MANS += $(PREFIXMAN1)
+man1_MANS += $(PREFIXMAN5)
+man1_MANS += $(PREFIXMAN7)
+install-prefix-man:
+uninstall-prefix-man:
+generate_man_files:
+endif
+
+# Hook to create the 'current' symlink
+install-data-hook: create_current_symlink
+create_current_symlink:
+	cd $(DESTDIR)$(dataprogramdir); \
+	  rm -f current; \
+	  $(LN_S) $(VERSION) current
+
+# Hook to move the binaries that potentially have a prefix from
+# prefixexecbindir to bindir.
+install-exec-hook: move_binaries_with_prefix
+move_binaries_with_prefix:
+if USEPROGRAMPREFIX
+	if test -n "$(NAMEPREFIX)"; then \
+	   for f in $(prefixexecbin_PROGRAMS) $(prefixexecbin_SCRIPTS); do \
+	      mv -f $(DESTDIR)$(prefixexecbindir)/$$f$(EXEEXT) \
+	         $(DESTDIR)$(bindir)/$(NAMEPREFIX)$$f$(EXEEXT); \
+	   done \
+	fi
+endif
+
+# Always create the site-font directory as a guide to the user.
+install-data-hook: install_site_font
+install_site_font:
+	-test -d $(DESTDIR)$(localfontdir) \
+	  || $(mkinstalldirs) $(DESTDIR)$(localfontdir)
+
+# Create systemtmacdir if not present
+install-data-hook: install_tmacdir
+install_tmacdir:
+	-test -d $(DESTDIR)$(systemtmacdir) \
+	  || $(mkinstalldirs) $(DESTDIR)$(systemtmacdir)
+
+# directories specific to groff
+uninstall-hook: uninstall_groffdirs
+uninstall_groffdirs:
+	if test -d $(DESTDIR)$(datasubdir); then \
+	  rm -rf $(DESTDIR)$(fontdir); \
+	  rm -rf $(DESTDIR)$(oldfontdir); \
+	  rmdir $(DESTDIR)$(datasubdir); \
+	fi
+	if test -d $(DESTDIR)$(dataprogramdir); then \
+	  if test -h $(DESTDIR)$(dataprogramdir)/current; then \
+	    rm -f $(DESTDIR)$(dataprogramdir)/current; \
+	  fi; \
+	  if test -d $(DESTDIR)$(localfontdir); then \
+	    rm -f $(DESTDIR)$(localfontdir)/*; \
+	    rmdir $(DESTDIR)$(localfontdir); \
+	  fi; \
+	  rmdir $(DESTDIR)$(dataprogramdir); \
+	fi
+	if test -d $(DESTDIR)$(grog_dir); then \
+	  rmdir $(DESTDIR)$(grog_dir); \
+	fi
+	if test -d $(DESTDIR)$(libprogramdir); then \
+	  if test -d $(DESTDIR)$(systemtmacdir); then \
+	    rm -f $(DESTDIR)$(systemtmacdir)/*; \
+	    rmdir $(DESTDIR)$(systemtmacdir); \
+	  fi; \
+	  rmdir $(DESTDIR)$(libprogramdir); \
+	fi
+	if test -d $(DESTDIR)$(docdir); then \
+	  if test -d $(DESTDIR)$(exampledir); then \
+	    rmdir $(DESTDIR)$(exampledir); \
+	  fi; \
+	  if test -d $(DESTDIR)$(htmldocdir); then \
+	    rmdir $(DESTDIR)$(htmldocdir); \
+	  fi; \
+	  rmdir $(DESTDIR)$(docdir); \
+	fi
+
+# Uninstall program that have a 'g' prefix
+uninstall-hook: uninstall_binaries_with_prefix 
+uninstall_binaries_with_prefix:
+if USEPROGRAMPREFIX
+	if test -n "$(NAMEPREFIX)"; then \
+	   for f in $(prefixexecbin_PROGRAMS) $(prefixexecbin_SCRIPTS); do \
+	      rm -f $(DESTDIR)$(bindir)/$(NAMEPREFIX)$$f$(EXEEXT); \
+	   done; \
+	fi
+endif
+
+# Other files that should be present in the distribution tarball.
+EXTRA_DIST += \
+  BUG-REPORT \
+  ChangeLog.115 \
+  ChangeLog.116 \
+  ChangeLog.117 \
+  ChangeLog.118 \
+  ChangeLog.119 \
+  ChangeLog.120 \
+  ChangeLog.121 \
+  FDL \
+  FOR-RELEASE \
+  gendef.sh \
+  INSTALL.REPO \
+  INSTALL.extra \
+  INSTALL.gen \
+  LICENSES \
+  MANIFEST \
+  mdate.sh \
+  MORE.STUFF \
+  PROBLEMS \
+  PROJECTS \
+  README.MinGW \
+  TESTS \
+  arch/djgpp \
+  font/util/make-Rproto
+
+MOSTLYCLEANFILES += $(prefixexecbin_SCRIPTS) $(bin_SCRIPTS) \
+  $(man1_MANS) $(man5_MANS) $(man7_MANS) \
+  $(PREFIXMAN1) $(PREFIXMAN5) $(PREFIXMAN7) \
+  test-groff
+
+# Rule to build .man files. The brackets around the @ are used to prevent the 
+# substitution of the variable by automake. 
+.man.n:
+	@echo Making $@ from $<
+	rm -f $@
+	$(MKDIR_P) `dirname $@`
+	@LC_ALL=C \
+	 sed -e "s|[@]APPRESDIR[@]|$(appresdir)|g" \
+	     -e "s|[@]BINDIR[@]|$(bindir)|g" \
+	     -e "s|[@]BROKEN_SPOOLER_FLAGS[@]|$(BROKEN_SPOOLER_FLAGS)|g" \
+	     -e "s|[@]COMMON_WORDS_FILE[@]|$(common_words_file)|g" \
+	     -e "s|[@]DATASUBDIR[@]|$(datasubdir)|g" \
+	     -e "s|[@]DEFAULT_INDEX[@]|$(indexdir)/$(indexname)|g" \
+	     -e "s|[@]DEFAULT_INDEX_NAME[@]|$(indexname)|g" \
+	     -e "s|[@]DEVICE[@]|$(DEVICE)|g" \
+	     -e "s|[@]DOCDIR[@]|$(docdir)|g" \
+	     -e "s|[@]EXAMPLEDIR[@]|$(exampledir)|g" \
+	     -e "s|[@]FONTDIR[@]|$(fontdir)|g" \
+	     -e "s|[@]g[@]|$(g)|g" \
+	     -e "s![@]G[@]!`echo $(g) | tr [a-z] [A-Z]`!g" \
+	     -e "s|[@]HTMLDOCDIR[@]|$(htmldocdir)|g" \
+	     -e "s|[@]INDEX_SUFFIX[@]|$(indexext)|g" \
+	     -e "s|[@]LEGACYFONTDIR[@]|$(legacyfontdir)|g" \
+	     -e "s|[@]LOCALFONTDIR[@]|$(localfontdir)|g" \
+	     -e "s|[@]LOCALMACRODIR[@]|$(localtmacdir)|g" \
+	     -e "s|[@]MACRODIR[@]|$(tmacdir)|g" \
+	     -e "s|[@]MAN1EXT[@]|$(man1ext)|g" \
+	     -e "s|[@]MAN5EXT[@]|$(man5ext)|g" \
+	     -e "s|[@]MAN7EXT[@]|$(man7ext)|g" \
+	     -e "s|[@]MDATE[@]|`$(SHELL) $(top_srcdir)/mdate.sh $<`|g" \
+	     -e "s|[@]OLDFONTDIR[@]|$(oldfontdir)|g" \
+	     -e "s|[@]PDFDOCDIR[@]|$(pdfdocdir)|g" \
+	     -e "s|[@]SYSTEMMACRODIR[@]|$(systemtmacdir)|g" \
+	     -e "s|[@]TMAC_AN_PREFIX[@]|$(tmac_an_prefix)|g" \
+	     -e "s|[@]TMAC_M_PREFIX[@]|$(tmac_m_prefix)|g" \
+	     -e "s|[@]TMAC_MDIR[@]|$(tmacdir)/mm|g" \
+	     -e "s|[@]TMAC_S_PREFIX[@]|$(tmac_s_prefix)|g" \
+	     -e "s|[@]VERSION[@]|$(VERSION)|g" \
+	 $< >$@
diff -Nuar groff-1.22.3.old/Makefile.ccpg groff-1.22.3/Makefile.ccpg
--- groff-1.22.3.old/Makefile.ccpg	2014-11-04 10:38:35.145524997 +0200
+++ groff-1.22.3/Makefile.ccpg	1970-01-01 02:00:00.000000000 +0200
@@ -1,61 +0,0 @@
-# Copyright (C) 1992-2014 Free Software Foundation, Inc.
-#      Written by James Clark (jjc@jclark.com)
-#
-# This file is part of groff.
-#
-# groff is free software; you can redistribute it and/or modify it under
-# the terms of the GNU General Public License as published by the Free
-# Software Foundation, either version 3 of the License, or
-# (at your option) any later version.
-#
-# groff is distributed in the hope that it will be useful, but WITHOUT ANY
-# WARRANTY; without even the implied warranty of MERCHANTABILITY or
-# FITNESS FOR A PARTICULAR PURPOSE.  See the GNU General Public License
-# for more details.
-#
-# You should have received a copy of the GNU General Public License
-# along with this program. If not, see <http://www.gnu.org/licenses/>.
-#
-# Makefile.ccpg
-#
-MAKEFILEPARTS=\
-  $(top_srcdir)/Makefile.comm \
-  $(top_builddir)/Makefile.cfg \
-  $(srcdir)/Makefile.sub \
-  $(top_srcdir)/Makefile.ccpg \
-  Makefile.dep
-
-all: $(PROG) $(MANPAGES)
-
-$(PROG): $(OBJS) $(XLIBS)
-	$(LINK.cpp) -o $@ $(OBJS) $(XLIBS) $(EXTRA_LDFLAGS) $(LIBS) $(MLIB)
-
-install_bin: install_prog
-install_prog: $(PROG)
-install_data: install_man
-install_man: $(MANPAGES)
-uninstall_sub: uninstall_prog uninstall_man
-depend: depend_src
-depend.temp: $(GENSRCS) $(YTABC)
-distfiles: $(YTABC)
-TAGS: TAGS_src
-TAGS_src: $(CCSRCS) $(CSRCS) $(GRAM) $(HDRS)
-Makefile: $(MAKEFILEPARTS)
-Makefile.dep:
-	touch Makefile.dep
-$(top_builddir)/stamp-h $(MANPAGES): $(top_srcdir)/VERSION \
-		$(top_srcdir)/REVISION
-
-pure: $(PROG).pure
-
-$(PROG).pure: $(OBJS) $(XLIBS)
-	$(PURIFY) $(PURIFYCCFLAGS) \
-	  $(LINK.cpp) -o $@ $(OBJS) $(XLIBS) $(LIBS) $(MLIB)
-
-########################################################################
-# Emacs settings
-########################################################################
-#
-# Local Variables:
-# mode: makefile
-# End:
diff -Nuar groff-1.22.3.old/Makefile.comm groff-1.22.3/Makefile.comm
--- groff-1.22.3.old/Makefile.comm	2014-11-04 10:38:35.145524997 +0200
+++ groff-1.22.3/Makefile.comm	1970-01-01 02:00:00.000000000 +0200
@@ -1,354 +0,0 @@
-# Copyright (C) 1989-2014 Free Software Foundation, Inc.
-#      Written by James Clark (jjc@jclark.com)
-#
-# This file is part of groff.
-#
-# groff is free software; you can redistribute it and/or modify it under
-# the terms of the GNU General Public License as published by the Free
-# Software Foundation, either version 3 of the License, or
-# (at your option) any later version.
-#
-# groff is distributed in the hope that it will be useful, but WITHOUT ANY
-# WARRANTY; without even the implied warranty of MERCHANTABILITY or
-# FITNESS FOR A PARTICULAR PURPOSE.  See the GNU General Public License
-# for more details.
-#
-# You should have received a copy of the GNU General Public License
-# along with this program. If not, see <http://www.gnu.org/licenses/>.
-#
-# Makefile.comm
-#
-INCLUDES=-I. -I$(srcdir) \
-  -I$(top_builddir)/src/include -I$(top_srcdir)/src/include \
-  -I$(top_builddir)/src/libs/gnulib/lib
-ALL_CCFLAGS=$(INCLUDES) $(CCDEFINES) $(CCFLAGS) $(CPPFLAGS)
-COMPILE.cpp=$(CCC) $(ALL_CCFLAGS) -c
-ALL_CFLAGS=$(INCLUDES) $(CDEFINES) $(CFLAGS) $(CPPFLAGS)
-COMPILE.c=$(CC) $(ALL_CFLAGS) -c
-LINK.cpp=$(CCC) $(CCFLAGS) $(LDFLAGS)
-LINK.c=$(CC) $(CFLAGS) $(LDFLAGS)
-LIBGROFF=$(top_builddir)/src/libs/libgroff/libgroff.$(LIBEXT)
-LIBBIB=$(top_builddir)/src/libs/libbib/libbib.$(LIBEXT)
-LIBDRIVER=$(top_builddir)/src/libs/libdriver/libdriver.$(LIBEXT)
-LIBXUTIL=$(top_builddir)/src/libs/libxutil/libxutil.$(LIBEXT)
-LIBGNU=$(top_builddir)/src/libs/gnulib/lib/libgnu.$(LIBEXT)
-MLIB=
-XLIBS=
-YTABH=
-YTABC=
-GRAM=
-LIBCLEAN=
-MOSTLYCLEANADD=
-MOSTLYCLEANDIRADD=
-MOSTLYCLEANNOTSRCDIRADD=
-MOSTLYCLEANFILES=$(MANCLEAN) $(PROG) $(OBJS) $(GENSRCS) $(GENHDRS) \
-  depend.temp core y.output $(MOSTLYCLEANADD)
-CLEANFILES=$(LIBCLEAN)
-DISTCLEANFILES=TAGS Makefile Makefile.dep
-REALCLEANFILES=$(YTABC) $(YTABH)
-NAMEPREFIX=
-HDRS=
-MANPAGES=$(MAN1) $(MAN5) $(MAN7)
-MANCLEAN=$(MANPAGES)
-fontsubdir=$(fontdir)/dev$(DEV)
-oldfontsubdir=$(oldfontdir)/dev$(DEV)
-
-all do_install install_bin install_data TAGS depend distfiles uninstall_sub:
-
-do_install: install_bin install_data
-uninstall: uninstall_sub
-pure:
-fonts:
-
-.PHONY: all clean distclean mostlyclean realclean extraclean depend distfiles
-.PHONY: install install_bin install_data
-.PHONY: uninstall uninstall_sub
-.PHONY: pure fonts
-
-mostlyclean:
-	rm -f $(MOSTLYCLEANFILES)
-	-rm -rf $(MOSTLYCLEANDIRADD)
-	-@if test "`cd $(srcdir); pwd`" != "`pwd`"; then \
-	  rm -f $(MOSTLYCLEANNOTSRCDIRADD); \
-	fi
-
-clean: mostlyclean
-	rm -f $(CLEANFILES)
-
-distclean: clean
-	rm -f $(DISTCLEANFILES)
-	-@if test "`cd $(srcdir); pwd`" != "`pwd`"; then \
-	  rm -f $(YTABC) $(YTABH); \
-	fi
-
-realclean: distclean
-	rm -f $(REALCLEANFILES)
-
-extraclean: distclean
-	rm -f \#* *~ =* core junk grot temp tmp tem *.new *.old *.orig
-
-.SUFFIXES:
-.SUFFIXES: .o .obj .cpp .c .y .man .n
-
-.cpp.o:
-	$(COMPILE.cpp) $(EXTRA_CCFLAGS) $<
-
-.c.o:
-	$(COMPILE.c) $(EXTRA_CFLAGS) $<
-
-.cpp.obj:
-	$(COMPILE.cpp) $(EXTRA_CCFLAGS) $<
-
-.c.obj:
-	$(COMPILE.c) $(EXTRA_CFLAGS) $<
-
-.y.cpp:
-	if test -n "$(YTABH)"; then \
-	  $(YACC) $(YACCFLAGS) -d $<; \
-	else \
-	  $(YACC) $(YACCFLAGS) $<; \
-	fi
-	-test -f y.tab.h && mv y.tab.h y_tab.h
-	-test -f y.tab.c && mv y.tab.c y_tab.c
-	sed "s/^#line \(.*\) \"y.tab.c\"/#line \1 \"$(YTABC)\"/" \
-	  < y_tab.c > $(YTABC)
-	rm -f y_tab.c
-	test -z "$(YTABH)" || mv y_tab.h $(YTABH)
-
-# The next rule is needed for make of Solaris 2.5.1 to override its
-# built-in .y.o rule (which takes precedence over the .y.cpp rule above).
-.y.o:
-	if test -n "$(YTABH)"; then \
-	  $(YACC) $(YACCFLAGS) -d $<; \
-	else \
-	  $(YACC) $(YACCFLAGS) $<; \
-	fi
-	-test -f y.tab.h && mv y.tab.h y_tab.h
-	-test -f y.tab.c && mv y.tab.c y_tab.c
-	mv y_tab.c $(YTABC)
-	test -z "$(YTABH)" || mv y_tab.h $(YTABH)
-	$(COMPILE.cpp) $(EXTRA_CCFLAGS) $(YTABC)
-
-.man.n:
-	@echo Making $@ from $<
-	@rm -f $@
-	@LC_ALL=C \
-	 sed -e "s|@APPRESDIR@|$(appresdir)|g" \
-	     -e "s|@BINDIR@|$(bindir)|g" \
-	     -e "s|@BROKEN_SPOOLER_FLAGS@|$(BROKEN_SPOOLER_FLAGS)|g" \
-	     -e "s|@COMMON_WORDS_FILE@|$(common_words_file)|g" \
-	     -e "s|@DATASUBDIR@|$(datasubdir)|g" \
-	     -e "s|@DEFAULT_INDEX@|$(indexdir)/$(indexname)|g" \
-	     -e "s|@DEFAULT_INDEX_NAME@|$(indexname)|g" \
-	     -e "s|@DEVICE@|$(DEVICE)|g" \
-	     -e "s|@DOCDIR@|$(docdir)|g" \
-	     -e "s|@EXAMPLEDIR@|$(exampledir)|g" \
-	     -e "s|@FONTDIR@|$(fontdir)|g" \
-	     -e "s|@g@|$(g)|g" \
-	     -e "s!@G@!`echo $(g) | tr [a-z] [A-Z]`!g" \
-	     -e "s|@HTMLDOCDIR@|$(htmldocdir)|g" \
-	     -e "s|@INDEX_SUFFIX@|$(indexext)|g" \
-	     -e "s|@LEGACYFONTDIR@|$(legacyfontdir)|g" \
-	     -e "s|@LOCALFONTDIR@|$(localfontdir)|g" \
-	     -e "s|@LOCALMACRODIR@|$(localtmacdir)|g" \
-	     -e "s|@MACRODIR@|$(tmacdir)|g" \
-	     -e "s|@MAN1EXT@|$(man1ext)|g" \
-	     -e "s|@MAN5EXT@|$(man5ext)|g" \
-	     -e "s|@MAN7EXT@|$(man7ext)|g" \
-	     -e "s|@MDATE@|`$(SHELL) $(top_srcdir)/mdate.sh $<`|g" \
-	     -e "s|@OLDFONTDIR@|$(oldfontdir)|g" \
-	     -e "s|@PDFDOCDIR@|$(pdfdocdir)|g" \
-	     -e "s|@SYSTEMMACRODIR@|$(systemtmacdir)|g" \
-	     -e "s|@TMAC_AN_PREFIX@|$(tmac_an_prefix)|g" \
-	     -e "s|@TMAC_M_PREFIX@|$(tmac_m_prefix)|g" \
-	     -e "s|@TMAC_MDIR@|$(tmacdir)/mm|g" \
-	     -e "s|@TMAC_S_PREFIX@|$(tmac_s_prefix)|g" \
-	     -e "s|@VERSION@|$(version)$(revision)|g" \
-	 $< >$@
-
-.PHONY: install_man
-install_man:
-	-test -d $(DESTDIR)$(manroot) || $(mkinstalldirs) $(DESTDIR)$(manroot)
-	-test -d $(DESTDIR)$(man1dir) || $(mkinstalldirs) $(DESTDIR)$(man1dir)
-	@-pages="$(MAN1)"; \
-	 for p in $$pages; do \
-	   prog=`basename $$p .n`; \
-	   target=$(DESTDIR)$(man1dir)/$(NAMEPREFIX)$$prog.$(man1ext); \
-	   rm -f $$target; \
-	   echo $(INSTALL_DATA) $$p $$target; \
-	   $(INSTALL_DATA) $$p $$target; \
-	done
-	-test -d $(DESTDIR)$(man5dir) || $(mkinstalldirs) $(DESTDIR)$(man5dir)
-	@-pages="$(MAN5)"; \
-	 for p in $$pages; do \
-	   target=$(DESTDIR)$(man5dir)/`basename $$p .n`.$(man5ext); \
-	   rm -f $$target; \
-	   echo $(INSTALL_DATA) $$p $$target; \
-	   $(INSTALL_DATA) $$p $$target; \
-	done
-	-test -d $(DESTDIR)$(man7dir) || $(mkinstalldirs) $(DESTDIR)$(man7dir)
-	@-pages="$(MAN7)"; \
-	 for p in $$pages; do \
-	   target=$(DESTDIR)$(man7dir)/`basename $$p .n`.$(man7ext); \
-	   rm -f $$target; \
-	   echo $(INSTALL_DATA) $$p $$target; \
-	   $(INSTALL_DATA) $$p $$target; \
-	done
-
-.PHONY: uninstall_man
-uninstall_man:
-	@-pages="$(MAN1)"; \
-	 for p in $$pages; do \
-	   target=$(DESTDIR)$(man1dir)/$(NAMEPREFIX); \
-	   target=$$target`basename $$p .n`.$(man1ext); \
-	   echo rm -f $$target; \
-	   rm -f $$target; \
-	 done
-	@-pages="$(MAN5)"; \
-	 for p in $$pages; do \
-	   target=$(DESTDIR)$(man5dir)/`basename $$p .n`.$(man5ext); \
-	   echo rm -f $$target; \
-	   rm -f $$target; \
-	 done
-	@-pages="$(MAN7)"; \
-	 for p in $$pages; do \
-	   target=$(DESTDIR)$(man7dir)/`basename $$p .n`.$(man7ext); \
-	   echo rm -f $$target; \
-	   rm -f $$target; \
-	done
-
-.PHONY: install_prog
-install_prog:
-	-test -d $(DESTDIR)$(bindir) || $(mkinstalldirs) $(DESTDIR)$(bindir)
-	rm -f $(DESTDIR)$(bindir)/$(NAMEPREFIX)$(PROG)
-	$(INSTALL_PROGRAM) $(PROG) $(DESTDIR)$(bindir)/$(NAMEPREFIX)$(PROG)
-
-.PHONY: uninstall_prog
-uninstall_prog:
-	rm -f $(DESTDIR)$(bindir)/$(NAMEPREFIX)$(PROG)
-
-.PHONY: install_dev
-install_dev:
-	-test -d $(DESTDIR)$(datadir) \
-	  || $(mkinstalldirs) $(DESTDIR)$(datadir)
-	-test -d $(DESTDIR)$(dataprogramdir) \
-	  || $(mkinstalldirs) $(DESTDIR)$(dataprogramdir)
-	-test -d $(DESTDIR)$(datasubdir) \
-	  || $(mkinstalldirs) $(DESTDIR)$(datasubdir)
-	-test -d $(DESTDIR)$(fontdir) \
-	  || $(mkinstalldirs) $(DESTDIR)$(fontdir)
-	-test -d $(DESTDIR)$(fontsubdir) \
-	  || $(mkinstalldirs) $(DESTDIR)$(fontsubdir)
-	-if test -d $(srcdir)/generate; then \
-	  test -d $(DESTDIR)$(fontsubdir)/generate \
-	    || $(mkinstalldirs) $(DESTDIR)$(fontsubdir)/generate; \
-	fi
-	-if test -d $(srcdir)/enc; then \
-	  test -d $(DESTDIR)$(fontsubdir)/enc \
-	    || $(mkinstalldirs) $(DESTDIR)$(fontsubdir)/enc; \
-	fi
-	-if test -d $(srcdir)/map; then \
-	  test -d $(DESTDIR)$(fontsubdir)/map \
-	    || $(mkinstalldirs) $(DESTDIR)$(fontsubdir)/map; \
-	fi
-	-if test -d $(srcdir)/util; then \
-	  test -d $(DESTDIR)$(fontsubdir)/util \
-	    || $(mkinstalldirs) $(DESTDIR)$(fontsubdir)/util; \
-	fi
-	-if test -d $(srcdir)/old; then \
-	  test -d $(DESTDIR)$(oldfontdir) \
-	    || $(mkinstalldirs) $(DESTDIR)$(oldfontdir); \
-	  test -d $(DESTDIR)$(oldfontsubdir) \
-	    || $(mkinstalldirs) $(DESTDIR)$(oldfontsubdir); \
-	fi
-	-test -z "$(DEVFILES)" \
-	  || for f in ""$(DEVFILES); do \
-	       rm -f $(DESTDIR)$(fontsubdir)/$$f; \
-	       if test -f $$f; then \
-	         $(INSTALL_DATA) $$f $(DESTDIR)$(fontsubdir)/$$f; \
-	       else \
-	         $(INSTALL_DATA) $(srcdir)/$$f $(DESTDIR)$(fontsubdir)/$$f; \
-	       fi; \
-	     done
-	-test -z "$(OLDDEVFILES)" \
-	  || for f in ""$(OLDDEVFILES); do \
-	       rm -f $(DESTDIR)$(oldfontsubdir)/$$f; \
-	       $(INSTALL_DATA) $(srcdir)/old/$$f \
-	         $(DESTDIR)$(oldfontsubdir)/$$f; \
-	     done
-	-test -z "$(DEVSCRIPTS)" \
-	  || for f in ""$(DEVSCRIPTS); do \
-	       rm -f $(DESTDIR)$(fontsubdir)/$$f; \
-	       if test -f $$f; then \
-	         $(INSTALL_SCRIPT) $$f $(DESTDIR)$(fontsubdir)/$$f; \
-	       else \
-	         $(INSTALL_SCRIPT) $(srcdir)/$$f $(DESTDIR)$(fontsubdir)/$$f; \
-	       fi; \
-	     done
-
-.PHONY: uninstall_dev
-uninstall_dev:
-	-test -z "$(DEVFILES)$(DEVSCRIPTS)" \
-	  || for f in ""$(DEVFILES) $(DEVSCRIPTS); do \
-	       rm -f $(DESTDIR)$(fontsubdir)/$$f; \
-	     done
-	-test -z "$(OLDDEVFILES)" \
-	  || for f in ""$(OLDDEVFILES); do \
-	       rm -f $(DESTDIR)$(oldfontsubdir)/$$f; \
-	     done
-	-d=$(DESTDIR)$(fontsubdir)/generate;\
-	  if test -d $$d; then rmdir $$d; fi
-	-d=$(DESTDIR)$(fontsubdir)/enc;\
-	  if test -d $$d; then rmdir $$d; fi
-	-d=$(DESTDIR)$(fontsubdir)/map;\
-	  if test -d $$d; then rmdir $$d; fi
-	-d=$(DESTDIR)$(fontsubdir)/util;\
-	  if test -d $$d; then rmdir $$d; fi
-	-test -d $(DESTDIR)$(fontsubdir) $$ \
-	  rmdir $(DESTDIR)$(fontsubdir)
-	-d=$(DESTDIR)$(oldfontsubdir);\
-	  if test -d $$d; then rmdir $$d; fi
-
-.PHONY: depend_src
-depend_src: depend.temp
-	mv depend.temp Makefile.dep
-
-depend.temp: FORCE
-	> depend.temp
-	if test -f "$(srcdir)/$(YTABC)"; then \
-	  ytabc="$(srcdir)/$(YTABC)"; \
-	else \
-	  ytabc="$(YTABC)"; \
-	fi; \
-	test -z "$(CCSRCS)$(YTABC)" \
-	  || $(CCC) $(ALL_CCFLAGS) $(EXTRA_CCFLAGS) -MM $(CCSRCS) $$ytabc \
-	     >>depend.temp
-	test -z "$(CSRCS)" \
-	  || $(CC) $(ALL_CFLAGS) $(EXTRA_CFLAGS) -MM $(CSRCS) >>depend.temp
-	test -z "$(YTABH)" \
-	  || (sed -e 's|$(YTABH)|$(YTABC)|g' depend.temp >depend1.temp; \
-	      mv depend1.temp depend.temp)
-
-.PHONY: TAGS_src
-TAGS_src:
-	$(ETAGS) $(ETAGSFLAGS) $(CCSRCS) $(CSRCS)
-	test -z "$(GRAM)$(HDRS)" \
-	  || $(ETAGS) $(ETAGSFLAGS) -a $(ETAGSCCFLAG) $(GRAM) $(HDRS)
-
-# This rule is only considered for the subdir_Makefile target.
-Makefile:
-	echo srcdir=$(srcdir) >Makefile
-	echo VPATH=$(VPATH) >>Makefile
-	cat $(MAKEFILEPARTS) /dev/null >>Makefile
-
-FORCE:
-
-.NOEXPORT:
-
-########################################################################
-# Emacs settings
-########################################################################
-#
-# Local Variables:
-# mode: makefile
-# End:
diff -Nuar groff-1.22.3.old/Makefile.cpg groff-1.22.3/Makefile.cpg
--- groff-1.22.3.old/Makefile.cpg	2014-11-04 10:38:35.145524997 +0200
+++ groff-1.22.3/Makefile.cpg	1970-01-01 02:00:00.000000000 +0200
@@ -1,55 +0,0 @@
-# Copyright (C) 1992-2014 Free Software Foundation, Inc.
-#      Written by James Clark (jjc@jclark.com)
-#
-# This file is part of groff.
-#
-# groff is free software; you can redistribute it and/or modify it under
-# the terms of the GNU General Public License as published by the Free
-# Software Foundation, either version 3 of the License, or
-# (at your option) any later version.
-#
-# groff is distributed in the hope that it will be useful, but WITHOUT ANY
-# WARRANTY; without even the implied warranty of MERCHANTABILITY or
-# FITNESS FOR A PARTICULAR PURPOSE.  See the GNU General Public License
-# for more details.
-#
-# You should have received a copy of the GNU General Public License
-# along with this program. If not, see <http://www.gnu.org/licenses/>.
-#
-# Makefile.cpg
-#
-MAKEFILEPARTS=\
-  $(top_srcdir)/Makefile.comm \
-  $(top_builddir)/Makefile.cfg \
-  $(srcdir)/Makefile.sub \
-  $(top_srcdir)/Makefile.cpg \
-  Makefile.dep
-
-all: $(PROG) $(MANPAGES)
-
-$(PROG): $(OBJS) $(XLIBS)
-	$(LINK.c) -o $@ $(OBJS) $(XLIBS) $(EXTRA_LDFLAGS) $(LIBS) $(MLIB)
-
-install_bin: install_prog
-install_prog: $(PROG)
-install_data: install_man
-install_man: $(MANPAGES)
-uninstall_sub: uninstall_prog uninstall_man
-depend: depend_src
-depend.temp: $(GENSRCS) $(YTABC)
-distfiles: $(YTABC)
-TAGS: TAGS_src
-TAGS_src: $(CCSRCS) $(CSRCS) $(GRAM) $(HDRS)
-Makefile: $(MAKEFILEPARTS)
-Makefile.dep:
-	touch Makefile.dep
-$(top_builddir)/stamp-h $(MANPAGES): $(top_srcdir)/VERSION \
-		$(top_srcdir)/REVISION
-
-########################################################################
-# Emacs settings
-########################################################################
-#
-# Local Variables:
-# mode: makefile
-# End:
diff -Nuar groff-1.22.3.old/Makefile.dev groff-1.22.3/Makefile.dev
--- groff-1.22.3.old/Makefile.dev	2014-11-04 10:38:35.145524997 +0200
+++ groff-1.22.3/Makefile.dev	1970-01-01 02:00:00.000000000 +0200
@@ -1,32 +0,0 @@
-# Copyright (C) 1989-2014 Free Software Foundation, Inc.
-#   Written by James Clark (jjc@jclark.com)
-#
-# This file is part of groff.
-#
-# groff is free software; you can redistribute it and/or modify it under
-# the terms of the GNU General Public License as published by the Free
-# Software Foundation, either version 3 of the License, or
-# (at your option) any later version.
-#
-# groff is distributed in the hope that it will be useful, but WITHOUT ANY
-# WARRANTY; without even the implied warranty of MERCHANTABILITY or
-# FITNESS FOR A PARTICULAR PURPOSE.  See the GNU General Public License
-# for more details.
-#
-# You should have received a copy of the GNU General Public License
-# along with this program. If not, see <http://www.gnu.org/licenses/>.
-#
-# Makefile.dev
-#
-all: $(DEVFILES) $(DEVSCRIPTS)
-install_data: install_dev
-uninstall_sub: uninstall_dev
-install_dev: $(DEVFILES) $(DEVSCRIPTS)
-
-########################################################################
-# Emacs settings
-########################################################################
-#
-# Local Variables:
-# mode: makefile
-# End:
diff -Nuar groff-1.22.3.old/Makefile.in groff-1.22.3/Makefile.in
--- groff-1.22.3.old/Makefile.in	2014-11-04 10:38:35.145524997 +0200
+++ groff-1.22.3/Makefile.in	1970-01-01 02:00:00.000000000 +0200
@@ -1,1066 +0,0 @@
-# Copyright (C) 1989-2014 Free Software Foundation, Inc.
-#   Written by James Clark (jjc@jclark.com)
-#
-# This file is part of groff.
-#
-# groff is free software; you can redistribute it and/or modify it under
-# the terms of the GNU General Public License as published by the Free
-# Software Foundation, either version 3 of the License, or
-# (at your option) any later version.
-#
-# groff is distributed in the hope that it will be useful, but WITHOUT ANY
-# WARRANTY; without even the implied warranty of MERCHANTABILITY or
-# FITNESS FOR A PARTICULAR PURPOSE.  See the GNU General Public License
-# for more details.
-#
-# You should have received a copy of the GNU General Public License
-# along with this program. If not, see <http://www.gnu.org/licenses/>.
-#
-# Makefile.in
-#
-SHELL=@SHELL@
-
-PACKAGE_TARNAME=@PACKAGE_TARNAME@
-
-srcdir=@srcdir@
-top_srcdir=@abs_top_srcdir@
-VPATH=@srcdir@
-top_builddir=@abs_top_builddir@
-
-# `HOST' is the canonical host specification,
-#    CPU_TYPE-MANUFACTURER-OPERATING_SYSTEM
-# or
-#    CPU_TYPE-MANUFACTURER-KERNEL-OPERATING_SYSTEM
-HOST=@host@
-
-# `RT_SEP' is the operating system's native PATH SEPARATOR CHAR, which
-# is to be used in runtime PATHs compiled into groff executables.
-RT_SEP=@GROFF_PATH_SEPARATOR@
-
-# `SH_SEP' is a alternative PATH SEPARATOR CHAR, to be used in shell
-# scripts and makefile rules; it may be the same as `RT_SEP', but,
-# particularly in some Microsoft environments, it may differ.
-SH_SEP=@PATH_SEPARATOR@
-
-# `GLIBC21' is yes if the host operating system uses GNU libc 2.1 or newer,
-# otherwise no.
-GLIBC21=@GLIBC21@
-
-version=`cat $(top_srcdir)/VERSION`
-# No additional number if revision is zero.
-revision=`sed -e 's/^0$$//' -e 's/^[1-9].*$$/.&/' $(top_srcdir)/REVISION`
-
-# Define `page' to be letter if your PostScript printer uses 8.5x11
-# paper (USA) and define it to be A4, if it uses A4 paper (rest of the
-# world).
-PAGE=@PAGE@
-
-# The name of the ghostscript program. Normally, gs, on GNU/Linux
-# but it might be different on MS-DOS/MS-WIN32 systems.
-GHOSTSCRIPT=@GHOSTSCRIPT@
-
-# `ALT_GHOSTSCRIPT_PROGS' specifies a list alternative names,
-# which can be tried if `GHOSTSCRIPT' cannot be found at run time.
-ALT_GHOSTSCRIPT_PROGS=@ALT_GHOSTSCRIPT_PROGS@
-
-# Similarly, `ALT_AWK_PROGS' specifies a list of alternative names,
-# which can be tried at run time, to identify the awk program.
-ALT_AWK_PROGS=@ALT_AWK_PROGS@
-
-# Normally the Postscript driver, grops, produces output that conforms
-# to version 3.0 of the Adobe Document Structuring Conventions.
-# Unfortunately some spoolers and previewers can't handle such output.
-# The BROKEN_SPOOLER_FLAGS variable tells grops what it should do to
-# make its output acceptable to such programs.  This variable controls
-# only the default behaviour of grops; the behaviour can be changed at
-# runtime by the grops -b option (and so by groff -P-b).
-# Use a value of 0 if your spoolers and previewers are able to handle
-# conforming PostScript correctly.
-# Add 1 if no %%{Begin,End}DocumentSetup comments should be generated;
-# this is needed for early versions of TranScript that get confused by
-# anything between the %%EndProlog line and the first %%Page: comment.
-# Add 2 if lines in included files beginning with %! should be
-# stripped out; this is needed for the OpenWindows 2.0 pageview previewer.
-# Add 4 if %%Page, %%Trailer and %%EndProlog comments should be
-# stripped out of included files; this is needed for spoolers that
-# don't understand the %%{Begin,End}Document comments. I suspect this
-# includes early versions of TranScript.
-# Add 8 if the first line of the PostScript output should be %!PS-Adobe-2.0
-# rather than %!PS-Adobe-3.0; this is needed when using Sun's Newsprint
-# with a printer that requires page reversal.
-BROKEN_SPOOLER_FLAGS=@BROKEN_SPOOLER_FLAGS@
-
-# `DEVICE' is the default device.
-DEVICE=ps
-
-# `XDEVDIRS' is either `font/devX{75,100}{,-12}' or empty.
-XDEVDIRS=@XDEVDIRS@
-
-# `XPROGDIRS' is either `src/devices/xditview src/utils/xtotroff' or empty.
-XPROGDIRS=@XPROGDIRS@
-
-# `XLIBDIRS' is either `src/libs/libxutil' or empty.
-XLIBDIRS=@XLIBDIRS@
-
-# `TTYDEVDIRS' is either `font/devascii font/devlatin1' (for
-# ASCII) or `font/devcp1047' (for EBCDIC) plus font/devutf8.
-TTYDEVDIRS=@TTYDEVDIRS@ font/devutf8
-
-# `OTHERDEVDIRS' is either `font/devlj4 font/devlbp' (for ASCII) or
-# empty (for EBCDIC).
-OTHERDEVDIRS=@OTHERDEVDIRS@
-
-# `PSPRINT' is the command to use for printing a PostScript file,
-# for example `lpr'.
-PSPRINT=@PSPRINT@
-
-# `DVIPRINT' is the command to use for printing a TeX dvi file,
-# for example `lpr -d'.
-DVIPRINT=@DVIPRINT@
-
-# Prefix for names of programs that have Unix counterparts.
-# For example, if `g' is `g' then troff will be installed as
-# gtroff.  This doesn't affect programs like grops or groff that have
-# no Unix counterparts.  Note that the groff versions of eqn and tbl
-# will not work with Unix troff.
-g=@g@
-
-# Common prefix for installation directories.
-# Used in definitions of exec_prefix, datasubdir, fontpath, manroot.
-# This must already exist when you do make install.
-prefix=@prefix@
-exec_prefix=@exec_prefix@
-
-# `bindir' says where to install executables.
-bindir=@bindir@
-
-# `libdir' says where to install platform-dependent data.
-libdir=@libdir@
-libprogramdir=$(libdir)/groff
-
-# `datasubdir' says where to install platform-independent data files.
-datadir=@datadir@
-datarootdir=@datarootdir@
-dataprogramdir=$(datadir)/groff
-datasubdir=$(dataprogramdir)/$(version)$(revision)
-
-# `infodir' says where to install info files.
-infodir=@infodir@
-
-# `docdir' says where to install documentation files.
-docdir=@docdir@
-
-# `exampledir' says where to install example files.
-exampledir=$(docdir)/examples
-
-# `htmldocdir' says where to install documentation in HTML format.
-htmldocdir=$(docdir)/html
-
-# `pdfdocdir' says where to install documentation in PDF format.
-pdfdocdir=$(docdir)/pdf
-
-# `fontdir' says where to install dev*/*.
-fontdir=$(datasubdir)/font
-
-# `oldfontdir' says where to install old font sets (as dev*/*).
-oldfontdir=$(datasubdir)/oldfont
-
-# `localfontdir' says where local fonts will be installed (as dev*/*).
-localfontdir=$(dataprogramdir)/site-font
-
-# `legacyfontdir' is for compatibility with non-GNU troff.
-legacyfontdir=/usr/lib/font
-
-# `fontpath' says where to look for dev*/*.
-fontpath=$(localfontdir)$(RT_SEP)$(fontdir)$(RT_SEP)$(legacyfontdir)
-
-# `tmacdir' says where to install macros.
-tmacdir=$(datasubdir)/tmac
-
-# `systemtmacdir' says where to install platform-dependent macros.
-systemtmacdir=$(libprogramdir)/site-tmac
-
-# `localtmacdir' says where local files will be installed.
-localtmacdir=$(dataprogramdir)/site-tmac
-
-# `appresdir' says where to install the application resource file for
-# gxditview.
-appresdir=@appresdir@
-
-glilypond_dir=@glilypond_dir@
-gpinyin_dir=@gpinyin_dir@
-groffer_dir=@groffer_dir@
-grog_dir=@grog_dir@
-libprogramdir=@libprogramdir@
-referdir=@referdir@
-
-# `tmacpath' says where to look for macro files.
-# The current directory will be prepended in unsafe mode only; the home
-# directory will be always added.
-# `troffrc' and `troffrc-end' (and `eqnrc') are searched neither in the
-# current nor in the home directory.
-tmacpath=$(systemtmacdir)$(RT_SEP)$(localtmacdir)$(RT_SEP)$(tmacdir)
-
-# `sys_tmac_prefix' is prefix (if any) for system macro packages.
-sys_tmac_prefix=@sys_tmac_prefix@
-
-# `pnmtops_nosetpage' is the command to be run to generate an eps
-# file.  Some versions of pnmtops provide the -nosetpage option.
-# We detect this and use it if present.
-pnmtops_nosetpage=@pnmtops_nosetpage@
-
-# `tmac_wrap' is list of system macro packages that should be made
-# available to groff by creating a corresponding macro package
-# in the groff macro directory that references the system macro
-# package.
-tmac_wrap=@tmac_wrap@
-
-# If there is a groff version of a macro package listed in $(tmac_wrap),
-# then the groff version will be installed with a prefix of this.
-# Don't make this empty.
-tmac_prefix=g
-
-# The groff -mm macros will be available as -m$(tmac_m_prefix)m.
-tmac_m_prefix=\
- `for i in $(tmac_wrap) ""; do case "$$i" in m) echo $(tmac_prefix);; esac; done`
-# The groff -ms macros will be available as -m$(tmac_s_prefix)s.
-tmac_s_prefix=\
- `for i in $(tmac_wrap) ""; do case "$$i" in s) echo $(tmac_prefix);; esac; done`
-# The groff -man macros will be available as -m$(tmac_an_prefix)an.
-tmac_an_prefix=\
- `for i in $(tmac_wrap) ""; do case "$$i" in an) echo $(tmac_prefix);; esac; done`
-
-# Extension to be used for refer index files.  Index files are not
-# sharable between different architectures, so you might want to use
-# different suffixes for different architectures.  Choose an extension
-# that doesn't conflict with refer or any other indexing program.
-indexext=.i
-
-# Directory containing the default index for refer.
-indexdir=/usr/dict/papers
-
-# The filename (without suffix) of the default index for refer.
-indexname=Ind
-
-# common_words_file is a file containing a list of common words.
-# If your system provides /usr/lib/eign it will be copied onto this,
-# otherwise the supplied eign file will be used.
-common_words_file=$(datasubdir)/eign
-
-# `manroot' is the root of the man page directory tree.
-mandir=@mandir@
-manroot=$(mandir)
-
-# `man1ext' is the man section for user commands.
-man1ext=1
-man1dir=$(manroot)/man$(man1ext)
-
-# `man5ext' is the man section for file formats.
-man5ext=5
-man5dir=$(manroot)/man$(man5ext)
-
-# `man7ext' is the man section for macros.
-man7ext=7
-man7dir=$(manroot)/man$(man7ext)
-
-# `dist' target is disallowed in some `configure' combinations.
-doc_dist_target_ok=@doc_dist_target_ok@
-
-# The configure script checks whether the user wants the info documentation.
-# For the repo version this mechanism also suppresses building via `makeinfo'.
-make_infodoc=@make_infodoc@
-make_install_infodoc=@make_install_infodoc@
-make_uninstall_infodoc=@make_uninstall_infodoc@
-
-# The configure script checks whether all necessary utility programs for
-# grohtml are available -- only then we can build the HTML documentation.
-make_htmldoc=@make_htmldoc@
-make_install_htmldoc=@make_install_htmldoc@
-make_uninstall_htmldoc=@make_uninstall_htmldoc@
-
-make_htmlexamples=@make_htmlexamples@
-make_install_htmlexamples=@make_install_htmlexamples@
-make_uninstall_htmlexamples=@make_uninstall_htmlexamples@
-
-# However, there may always be some prebuild HTML documentation
-make_install_shipped_htmldoc=@make_install_shipped_htmldoc@
-make_uninstall_shipped_htmldoc=@make_uninstall_shipped_htmldoc@
-
-# The configure script also checks whether all necessary utility programs
-# for pdfroff are available -- only then we can build PDF documentation.
-make_pdfdoc=@make_pdfdoc@
-make_install_pdfdoc=@make_install_pdfdoc@
-make_uninstall_pdfdoc=@make_uninstall_pdfdoc@
-
-make_pdfexamples=@make_pdfexamples@
-make_install_pdfexamples=@make_install_pdfexamples@
-make_uninstall_pdfexamples=@make_uninstall_pdfexamples@
-
-# `other' documentation, e.g., `meref.me' and `pic.ms', as well as their
-# generated counterparts..
-make_otherdoc=@make_otherdoc@
-make_install_otherdoc=@make_install_otherdoc@
-make_uninstall_otherdoc=@make_uninstall_otherdoc@
-
-# `examples' -- a generic switch, but the generated examples are furtherly
-# subdivided to catch HTML and PDF production availability.
-make_examples=@make_examples@
-make_install_examples=@make_install_examples@
-make_uninstall_examples=@make_uninstall_examples@
-
-# Windows `.cmd' files
-make_winscripts=@make_winscripts@
-make_install_winscripts=@make_install_winscripts@
-make_uninstall_winscripts=@make_uninstall_winscripts@
-
-# All the previous installation directories, when used, are prefixed with
-# $(DESTDIR) during install and uninstall, to support staged installations.
-
-# DEFINES should include the following:
-#
-# -DWORDS_BIGENDIAN		if your target platform is big-endian
-# -DIS_EBCDIC_HOST		if the host's encoding is EBCDIC
-#
-# -DHAVE_DIRECT_H		if you have <direct.h>
-# -DHAVE_DIRENT_H		if you have <dirent.h>
-# -DHAVE_CC_INTTYPES_H		if you have a C++ <inttypes.h>
-# -DHAVE_PROCESS_H		if you have <process.h>
-# -DHAVE_LIMITS_H		if you have <limits.h>
-# -DHAVE_CC_LIMITS_H		if you have a C++ <limits.h>
-# -DHAVE_MATH_H			if you have <math.h>
-# -DHAVE_CC_OSFCN_H		if you have a C++ <osfcn.h>
-# -DHAVE_STDDEF_H		if you have <stddef.h>
-# -DHAVE_STDLIB_H		if you have <stdlib.h>
-# -DHAVE_STRING_H		if you have <string.h>
-# -DHAVE_STRINGS_H		if you have <strings.h>
-# -DHAVE_SYS_DIR_H		if you have <sys/dir.h>
-# -DHAVE_SYS_PARAM_H		if you have <sys/param.h>
-# -DHAVE_SYS_STAT_H		if you have <sys/stat.h>
-# -DHAVE_SYS_TIME_H		if you have <sys/time.h>
-# -DHAVE_SYS_TYPES_H		if you have <sys/types.h>
-# -DHAVE_UNISTD_H		if you have <unistd.h>
-#
-# -DHAVE_FMOD			if you have fmod()
-# -DHAVE_GETCWD			if you have getcwd()
-# -DHAVE_GETTIMEOFDAY		if you have gettimeofday()
-# -DHAVE_ICONV			if you have iconv()
-# -DHAVE_ISATTY			if you have isatty()
-# -DHAVE_KILL			if you have kill()
-# -DHAVE_LANGINFO_CODESET	if you have nl_langinfo()
-# -DHAVE_MKSTEMP		if you have mkstemp()
-# -DHAVE_MMAP			if you have mmap()
-# -DHAVE_PUTENV			if you have putenv()
-# -DHAVE_RENAME			if you have rename()
-# -DHAVE_SETLOCALE		if you have setlocale()
-# -DHAVE_SNPRINTF		if you have snprintf()
-# -DHAVE_STRCASECMP		if you have strcasecmp()
-# -DHAVE_STRNCASECMP		if you have strncasecmp()
-# -DHAVE_STRERROR		if you have strerror()
-# -DHAVE_STRSEP			if you have strsep()
-# -DHAVE_STRTOL			if you have strtol()
-# -DHAVE_SYMLINK		if you have symlink()
-# -DHAVE_VSNPRINTF		if you have vsnprintf()
-#
-# -DNEED_DECLARATION_GETTIMEOFTODAY
-#				if your C++ <sys/time.h> doesn't declare
-#				gettimeofday()
-# -DNEED_DECLARATION_HYPOT	if your C++ <math.h> doesn't declare hypot()
-# -DNEED_DECLARATION_PCLOSE	if your C++ <stdio.h> doesn't declare pclose()
-# -DNEED_DECLARATION_POPEN	if your C++ <stdio.h> doesn't declare popen()
-# -DNEED_DECLARATION_PUTENV	if your C++ <stdlib.h> doesn't declare
-#				putenv()
-# -DNEED_DECLARATION_RAND	if your C++ <stdlib.h> doesn't declare rand()
-# -DNEED_DECLARATION_SNPRINTF	if your C++ <stdio.h> doesn't declare
-# 				snprintf()
-# -DNEED_DECLARATION_SRAND	if your C++ <stdlib.h> doesn't declare srand()
-# -DNEED_DECLARATION_STRCASECMP	if your C++ <string.h> doesn't declare
-#				strcasecmp()
-# -DNEED_DECLARATION_STRNCASECMP
-#				if your C++ <string.h> doesn't declare
-#				strncasecmp()
-# -DNEED_DECLARATION_VFPRINTF	if your C++ <stdio.h> doesn't declare
-#				vfprintf()
-# -DNEED_DECLARATION_VSNPRINTF	if your C++ <stdio.h> doesn't declare
-#				vsnprintf()
-#
-# -DHAVE_DECL_GETC_UNLOCKED	if you have getc_unlocked()
-# -DHAVE_DECL_SYS_SIGLIST	if you have sys_siglist[]
-#
-# -DHAVE_STRUCT_EXCEPTION	if <math.h> defines struct exception
-# -DHAVE_SYS_NERR		if you have sysnerr in <errno.h> or <stdio.h>
-# -DHAVE_SYS_ERRLIST		if you have sys_errlist in <errno.h> or
-#				<stdio.h>
-# -DICONV_CONST=const		if declaration of iconv() needs const
-# -DLONG_FOR_TIME_T		if localtime() takes a long * not a time_t *
-# -DRETSIGTYPE=int		if signal handlers return int not void
-# -DRET_TYPE_SRAND_IS_VOID	if srand() returns void not int
-#
-# -DWCOREFLAG=0200		if the 0200 bit of the status returned by
-#				wait() indicates whether a core image was
-#				produced for a process that was terminated
-#				by a signal
-#
-# -DHAVE_WORKING_O_NOATIME      define if <fcntl.h>'s O_NOATIME flag works
-# -DHAVE_WORKING_O_NOFOLLOW     define if <fcntl.h>'s O_NOFOLLOW flag works
-#
-# -Duintmax_t=<value>		define to `unsigned long' or `unsigned long
-#				long' if <inttypes.h> does not exist
-#
-# -DTRADITIONAL_CPP		if your C++ compiler uses a traditional
-#				(Reiser) preprocessor
-# -DARRAY_DELETE_NEEDS_SIZE	if your C++ doesn't understand `delete []'
-#
-# -DPAGE=A4			if the the printer's page size is A4
-# -DGHOSTSCRIPT=gs		the name (and directory if required) of the
-#				ghostscript program
-#
-DEFINES=@DEFS@
-
-# Include
-#
-#   {fmod,getcwd,mkstemp,putenv,snprintf,strcasecmp,
-#    strerror,strncasecmp,strtol}.$(OBJEXT)
-#
-# in LIBOBJS if your C library is missing the corresponding function.
-# vsnprintf is defined in the snprintf.$(OBJEXT) module.
-LIBOBJS=@LIBOBJS@
-
-# `CCC' is the compiler for C++ (.cpp) files.
-CCC=@CXX@
-CC=@CC@
-# CCDEFINES are definitions for C++ compilations.
-CCDEFINES=$(DEFINES)
-# CDEFINES are definitions for C compilations.
-CDEFINES=$(DEFINES)
-
-CCFLAGS=@CXXFLAGS@
-CFLAGS=@CFLAGS@
-CPPFLAGS=@CPPFLAGS@
-LDFLAGS=@LDFLAGS@
-
-X_CFLAGS=@X_CFLAGS@
-X_LIBS=@X_LIBS@
-X_EXTRA_LIBS=@X_EXTRA_LIBS@
-X_PRE_LIBS=@X_PRE_LIBS@
-
-YACC=@YACC@
-YACCFLAGS=-v
-
-GREP=@GREP@
-EGREP=@EGREP@
-
-MAKEINFO=@MAKEINFO@
-
-EXEEXT=@EXEEXT@
-OBJEXT=@OBJEXT@
-LIBEXT=@LIBEXT@
-LIBS=@LIBS@
-LIBM=@LIBM@
-LIBICONV=@LIBICONV@
-RANLIB=@RANLIB@
-INSTALL=@INSTALL@
-INSTALL_PROGRAM=@INSTALL_PROGRAM@
-INSTALL_SCRIPT=@INSTALL_SCRIPT@
-INSTALL_DATA=@INSTALL_DATA@
-INSTALL_INFO=@INSTALL_INFO@
-LN_S=@LN_S@
-AR=ar
-ETAGS=etags
-ETAGSFLAGS=
-# Flag that tells etags to assume C++.
-ETAGSCCFLAG=-C
-# Full path to perl.
-PERL=@PERL@
-PERLVERSION=@PERLVERSION@
-# Sed command with which to edit sh scripts.
-SH_SCRIPT_SED_CMD=@SH_SCRIPT_SED_CMD@
-# Sed script to deal with OS dependencies in sh scripts.
-SH_DEPS_SED_SCRIPT=$(top_builddir)/arch/misc/shdeps.sed
-
-# The program to create directory hierarchies.
-mkinstalldirs= $(SHELL) $(top_srcdir)/mkinstalldirs
-
-PURIFY=purify
-PURIFYCCFLAGS=
-#PURIFYCCFLAGS=-g++=yes \
-#  -collector=`dirname \`$(CCC) -print-libgcc-file-name\``/ld
-
-# Passing down MAKEOVERRIDES prevents $(MAKE) from containing a second
-# copy of $(MDEFINES) when making individual directories; this could
-# cause the argument list to become too long on some systems.
-MDEFINES=\
-  "ALT_AWK_PROGS=$(ALT_AWK_PROGS)" \
-  "ALT_GHOSTSCRIPT_PROGS=$(ALT_GHOSTSCRIPT_PROGS)" \
-  "AR=$(AR)" \
-  "BROKEN_SPOOLER_FLAGS=$(BROKEN_SPOOLER_FLAGS)" \
-  "CC=$(CC)" \
-  "CCC=$(CCC)" \
-  "CCDEFINES=$(CCDEFINES)" \
-  "CCFLAGS=$(CCFLAGS)" \
-  "CDEFINES=$(CDEFINES)" \
-  "CFLAGS=$(CFLAGS)" \
-  "CPPFLAGS=$(CPPFLAGS)" \
-  "DEVICE=$(DEVICE)" \
-  "DVIPRINT=$(DVIPRINT)" \
-  "EGREP=$(EGREP)" \
-  "ETAGS=$(ETAGS)" \
-  "ETAGSCCFLAG=$(ETAGSCCFLAG)" \
-  "ETAGSFLAGS=$(ETAGSFLAGS)" \
-  "EXEEXT=$(EXEEXT)" \
-  "GLIBC21=$(GLIBC21)" \
-  "GREP=$(GREP)" \
-  "HOST=$(HOST)" \
-  "INSTALL_DATA=$(INSTALL_DATA)" \
-  "INSTALL_INFO=$(INSTALL_INFO)" \
-  "INSTALL_PROGRAM=$(INSTALL_PROGRAM)" \
-  "INSTALL_SCRIPT=$(INSTALL_SCRIPT)" \
-  "LDFLAGS=$(LDFLAGS)" \
-  "LIBEXT=$(LIBEXT)" \
-  "LIBICONV=$(LIBICONV)" \
-  "LIBM=$(LIBM)" \
-  "LIBOBJS=$(LIBOBJS)" \
-  "LIBS=$(LIBS)" \
-  "MAKEINFO=$(MAKEINFO)" \
-  "MAKEOVERRIDES=$(MAKEOVERRIDES)" \
-  "OBJEXT=$(OBJEXT)" \
-  "OTHERDEVDIRS=$(OTHERDEVDIRS)" \
-  "PAGE=$(PAGE)" \
-  "PERL=$(PERL)" \
-  "PERLVERSION=$(PERLVERSION)" \
-  "GHOSTSCRIPT=$(GHOSTSCRIPT)" \
-  "PSPRINT=$(PSPRINT)" \
-  "PURIFY=$(PURIFY)" \
-  "PURIFYCCFLAGS=$(PURIFYCCFLAGS)" \
-  "RANLIB=$(RANLIB)" \
-  "RT_SEP=$(RT_SEP)" \
-  "SH_SEP=$(SH_SEP)" \
-  "SHELL=$(SHELL)" \
-  "SH_SCRIPT_SED_CMD=$(SH_SCRIPT_SED_CMD)" \
-  "SH_DEPS_SED_SCRIPT=$(SH_DEPS_SED_SCRIPT)" \
-  "TTYDEVDIRS=$(TTYDEVDIRS)" \
-  "XDEVDIRS=$(XDEVDIRS)" \
-  "XLIBDIRS=$(XLIBDIRS)" \
-  "XPROGDIRS=$(XPROGDIRS)" \
-  "X_CFLAGS=$(X_CFLAGS)" \
-  "X_LIBS=$(X_LIBS)" \
-  "X_EXTRA_LIBS=$(X_EXTRA_LIBS)" \
-  "X_PRE_LIBS=$(X_PRE_LIBS)" \
-  "YACC=$(YACC)" \
-  "YACCFLAGS=$(YACCFLAGS)" \
-  "appresdir=$(appresdir)" \
-  "groffer_dir=$(groffer_dir)" \
-  "gpinyin_dir=$(gpinyin_dir)" \
-  "glilypond_dir=$(glilypond_dir)" \
-  "grog_dir=$(grog_dir)" \
-  "referdir=$(referdir)" \
-  "bindir=$(bindir)" \
-  "common_words_file=$(common_words_file)" \
-  "datadir=$(datadir)" \
-  "dataprogramdir=$(dataprogramdir)" \
-  "datasubdir=$(datasubdir)" \
-  "docdir=$(docdir)" \
-  "exampledir=$(exampledir)" \
-  "exec_prefix=$(exec_prefix)" \
-  "fontdir=$(fontdir)" \
-  "fontpath=$(fontpath)" \
-  "g=$(g)" \
-  "htmldocdir=$(htmldocdir)" \
-  "pdfdocdir=$(pdfdocdir)" \
-  "indexdir=$(indexdir)" \
-  "indexext=$(indexext)" \
-  "indexname=$(indexname)" \
-  "infodir=$(infodir)" \
-  "legacyfontdir=$(legacyfontdir)" \
-  "libdir=$(libdir)" \
-  "libprogramdir=$(libprogramdir)" \
-  "localfontdir=$(localfontdir)" \
-  "localtmacdir=$(localtmacdir)" \
-  "make_infodoc=$(make_infodoc)" \
-  "make_install_infodoc=$(make_install_infodoc)" \
-  "make_uninstall_infodoc=$(make_uninstall_infodoc)" \
-  "make_htmldoc=$(make_htmldoc)" \
-  "make_install_htmldoc=$(make_install_htmldoc)" \
-  "make_uninstall_htmldoc=$(make_uninstall_htmldoc)" \
-  "make_htmlexamples=$(make_htmlexamples)" \
-  "make_install_htmlexamples=$(make_install_htmlexamples)" \
-  "make_uninstall_htmlexamples=$(make_uninstall_htmlexamples)" \
-  "make_install_shipped_htmldoc=$(make_install_shipped_htmldoc)" \
-  "make_uninstall_shipped_htmldoc=$(make_uninstall_shipped_htmldoc)" \
-  "make_pdfdoc=$(make_pdfdoc)" \
-  "make_install_pdfdoc=$(make_install_pdfdoc)" \
-  "make_uninstall_pdfdoc=$(make_uninstall_pdfdoc)" \
-  "make_pdfexamples=$(make_pdfexamples)" \
-  "make_install_pdfexamples=$(make_install_pdfexamples)" \
-  "make_uninstall_pdfexamples=$(make_uninstall_pdfexamples)" \
-  "make_otherdoc=$(make_otherdoc)" \
-  "make_install_otherdoc=$(make_install_otherdoc)" \
-  "make_uninstall_otherdoc=$(make_uninstall_otherdoc)" \
-  "make_examples=$(make_examples)" \
-  "make_install_examples=$(make_install_examples)" \
-  "make_uninstall_examples=$(make_uninstall_examples)" \
-  "make_winscripts=$(make_winscripts)" \
-  "make_install_winscripts=$(make_install_winscripts)" \
-  "make_uninstall_winscripts=$(make_uninstall_winscripts)" \
-  "man1dir=$(man1dir)" \
-  "man1ext=$(man1ext)" \
-  "man5dir=$(man5dir)" \
-  "man5ext=$(man5ext)" \
-  "man7dir=$(man7dir)" \
-  "man7ext=$(man7ext)" \
-  "manroot=$(manroot)" \
-  "mkinstalldirs=$(mkinstalldirs)" \
-  "oldfontdir=$(oldfontdir)" \
-  "pnmtops_nosetpage=$(pnmtops_nosetpage)" \
-  "prefix=$(prefix)" \
-  "revision=$(revision)" \
-  "sys_tmac_prefix=$(sys_tmac_prefix)" \
-  "systemtmacdir=$(systemtmacdir)" \
-  "tmac_an_prefix=$(tmac_an_prefix)" \
-  "tmac_m_prefix=$(tmac_m_prefix)" \
-  "tmac_s_prefix=$(tmac_s_prefix)" \
-  "tmac_wrap=$(tmac_wrap)" \
-  "tmacdir=$(tmacdir)" \
-  "tmacpath=$(tmacpath)" \
-  "top_builddir=$(top_builddir)" \
-  "top_srcdir=$(top_srcdir)" \
-  "version=$(version)"
-
-MAKE_K_FLAG=`for f in x $(MAKEFLAGS); do \
-               case $$f in \
-                 *=* | --[!k]*);; \
-                 *k*) echo ' -k ';; \
-               esac; \
-             done`
-
-INCDIRS=\
-  src/include
-LIBDIRS=\
-  src/libs/libgroff \
-  src/libs/libdriver \
-  src/libs/libbib \
-  $(XLIBDIRS)
-ALLLIBDIRS=\
-  src/libs/libgroff \
-  src/libs/libdriver \
-  src/libs/libbib \
-  src/libs/libxutil
-CCPROGDIRS=\
-  src/roff/groff \
-  src/roff/troff \
-  src/preproc/preconv \
-  src/preproc/tbl \
-  src/preproc/pic \
-  src/preproc/eqn \
-  src/preproc/grn \
-  src/preproc/refer \
-  src/preproc/soelim \
-  src/preproc/html \
-  src/devices/grops \
-  src/devices/grotty \
-  src/devices/grodvi \
-  src/devices/grolj4 \
-  src/devices/grohtml \
-  src/devices/grolbp \
-  src/utils/tfmtodit \
-  src/utils/hpftodit \
-  src/utils/lookbib \
-  src/utils/indxbib \
-  src/utils/lkbib \
-  src/utils/addftinfo
-CPROGDIRS=\
-  src/utils/pfbtops
-SHPROGDIRS=\
-  src/devices/gropdf
-PROGDEPDIRS=\
-  arch/misc
-PROGDIRS=\
-  $(PROGDEPDIRS) \
-  $(CCPROGDIRS) \
-  $(CPROGDIRS) \
-  $(SHPROGDIRS) \
-  $(XPROGDIRS)
-ALLPROGDIRS=\
-  $(PROGDEPDIRS) \
-  $(CCPROGDIRS) \
-  $(CPROGDIRS) \
-  $(SHPROGDIRS) \
-  src/devices/xditview \
-  src/utils/xtotroff
-DEVDIRS=\
-  font/devps \
-  font/devdvi \
-  font/devhtml
-ALLTTYDEVDIRS=\
-  font/devascii \
-  font/devlatin1 \
-  font/devutf8 \
-  font/devcp1047
-# `doc' must be processed before `contrib/pdfmark',
-# pdf stuff must be processed before `contrib/mom',
-# devpdf fonts depends on `afmtodit'
-OTHERDIRS=\
-  src/utils/afmtodit \
-  font/devpdf \
-  arch/mingw \
-  contrib/chem \
-  contrib/eqn2graph \
-  contrib/gdiffmk \
-  contrib/glilypond \
-  contrib/gperl \
-  contrib/gpinyin \
-  contrib/grap2graph \
-  contrib/groff_filenames \
-  contrib/groffer \
-  contrib/hdtbl \
-  contrib/mm \
-  contrib/pdfmark \
-  contrib/pic2graph \
-  contrib/mom \
-  doc \
-  man \
-  src/roff/grog \
-  src/roff/nroff \
-  tmac
-
-# OTHERDIRS is handled specially in the `$(TARGETS)' rule to avoid
-# dependency problems with parallel builds.
-ALLDIRS=\
-  $(INCDIRS) \
-  $(LIBDIRS) \
-  $(PROGDIRS) \
-  $(DEVDIRS) \
-  $(XDEVDIRS) \
-  $(OTHERDEVDIRS) \
-  $(TTYDEVDIRS)
-# $(OTHERDIRS)
-EXTRADIRS=\
-  font/devps/generate \
-  font/devdvi/generate \
-  font/devlj4/generate \
-  doc
-NOMAKEDIRS=\
-  m4 \
-  arch/djgpp \
-  contrib/chem/examples \
-  contrib/chem/examples/122 \
-  contrib/hdtbl/examples \
-  contrib/mm/examples \
-  contrib/mm/mm \
-  contrib/mom/examples \
-  contrib/mom/momdoc \
-  contrib/gdiffmk/tests \
-  src/libs/snprintf \
-  src/libs/gnulib/lib \
-  src/libs/gnulib/lib/uniwidth \
-  src/libs/gnulib/m4 \
-  src/libs/gnulib/build-aux \
-  src/libs/gnulib/build-aux/snippet \
-  src/libs/gnulib \
-  font/devps/old \
-  font/devpdf/util \
-  font/util
-GNULIBDIRS=\
-  src/libs/gnulib
-DISTDIRS=\
-  $(INCDIRS) \
-  $(ALLLIBDIRS) \
-  $(ALLPROGDIRS) \
-  $(DEVDIRS) \
-  $(XDEVDIRS) \
-  $(OTHERDEVDIRS) \
-  $(ALLTTYDEVDIRS) \
-  $(OTHERDIRS) \
-  $(EXTRADIRS) \
-  $(NOMAKEDIRS) \
-  $(GNULIBDIRS)
-TARGETS=\
-  all \
-  install_bin install_data \
-  clean distclean mostlyclean realclean extraclean \
-  distfiles \
-  TAGS \
-  depend \
-  uninstall_sub \
-  fonts
-
-# This ENVSETUP gork is required by the DJGPP build on Windows 9X,
-# where Make needs to be case-sensitive to find files like BI and VERSION.
-ENVSETUP=\
-	if test -f $(srcdir)/makefile.ccpg* && \
-	   test -f $(srcdir)/Makefile.ccpg*; then \
-	  FNCASE=y; export FNCASE; \
-	else :; \
-	fi
-
-do=all
-dodirs=$(ALLDIRS) $(OTHERDIRS) dot
-# Default target for subdir_Makefile
-subdir=src/roff/troff
-
-$(TARGETS):
-	@$(ENVSETUP); $(MAKE) $(MAKE_K_FLAG) do=$@ $(ALLDIRS)
-	@$(ENVSETUP); $(MAKE) $(MAKE_K_FLAG) do=$@ $(OTHERDIRS) dot
-
-clean: clean-gnulib
-clean-gnulib:
-	@$(ENVSETUP); cd src/libs/gnulib; $(MAKE) $(MAKE_K_FLAG) clean
-
-distclean: distclean-gnulib
-distclean-gnulib:
-	@$(ENVSETUP); cd src/libs/gnulib; $(MAKE) $(MAKE_K_FLAG) distclean
-	rm -rf src/libs/gnulib/autom4te.cache
-
-dot: FORCE
-	@$(ENVSETUP); \
-	$(MAKE) $(MAKE_K_FLAG) $(MDEFINES) srcdir=$(srcdir) VPATH=$(srcdir) \
-	  -f $(top_srcdir)/Makefile.comm \
-	  -f $(top_srcdir)/Makefile.sub $(do)
-
-$(LIBDIRS): FORCE $(INCDIRS) $(PROGDEPDIRS) $(GNULIBDIRS)
-	@$(ENVSETUP); \
-	if test $(srcdir) = .; then \
-	  srcdir=.; \
-	else \
-	  srcdir=$(top_srcdir)/$@; \
-	fi; \
-	test -d $@ || $(mkinstalldirs) $@; \
-	cd $@; \
-	test -f Makefile.dep || touch Makefile.dep; \
-	$(MAKE) $(MAKE_K_FLAG) $(MDEFINES) srcdir=$$srcdir VPATH=$$srcdir \
-	  -f $(top_srcdir)/Makefile.comm \
-	  -f $$srcdir/Makefile.sub \
-	  -f $(top_srcdir)/Makefile.lib \
-	  -f Makefile.dep $(do)
-
-$(CPROGDIRS) $(XPROGDIRS): FORCE $(LIBDIRS)
-	@$(ENVSETUP); \
-	if test $(srcdir) = .; then \
-	  srcdir=.; \
-	else \
-	  srcdir=$(top_srcdir)/$@; \
-	fi; \
-	test -d $@ || $(mkinstalldirs) $@; \
-	cd $@; \
-	test -f Makefile.dep || touch Makefile.dep; \
-	$(MAKE) $(MAKE_K_FLAG) $(MDEFINES) srcdir=$$srcdir VPATH=$$srcdir \
-	  -f $(top_srcdir)/Makefile.comm \
-	  -f $$srcdir/Makefile.sub \
-	  -f $(top_srcdir)/Makefile.cpg \
-	  -f Makefile.dep $(do)
-
-$(CCPROGDIRS): FORCE $(LIBDIRS)
-	@$(ENVSETUP); \
-	if test $(srcdir) = .; then \
-	  srcdir=.; \
-	else \
-	  srcdir=$(top_srcdir)/$@; \
-	fi; \
-	test -d $@ || $(mkinstalldirs) $@; \
-	cd $@; \
-	test -f Makefile.dep || touch Makefile.dep; \
-	$(MAKE) $(MAKE_K_FLAG) $(MDEFINES) srcdir=$$srcdir VPATH=$$srcdir \
-	  -f $(top_srcdir)/Makefile.comm \
-	  -f $$srcdir/Makefile.sub \
-	  -f $(top_srcdir)/Makefile.ccpg \
-	  -f Makefile.dep $(do)
-
-$(DEVDIRS) $(XDEVDIRS) $(OTHERDEVDIRS) $(TTYDEVDIRS): FORCE \
-		$(PROGDEPDIRS) $(CCPROGDIRS) $(CPROGDIRS)
-	@$(ENVSETUP); \
-	if test $(srcdir) = .; then \
-	  srcdir=.; \
-	else \
-	  srcdir=$(top_srcdir)/$@; \
-	fi; \
-	test -d $@ || $(mkinstalldirs) $@; \
-	cd $@; \
-	$(MAKE) $(MAKE_K_FLAG) $(MDEFINES) srcdir=$$srcdir VPATH=$$srcdir \
-	  -f $(top_srcdir)/Makefile.comm \
-	  -f $$srcdir/Makefile.sub \
-	  -f $(top_srcdir)/Makefile.dev $(do)
-
-$(GNULIBDIRS): FORCE
-	@$(ENVSETUP); \
-	if test $(srcdir) = .; then \
-	  srcdir=.; \
-	else \
-	  srcdir=$(top_srcdir)/$@; \
-	fi; \
-	test -d $@ || $(mkinstalldirs) $@; \
-	case $(do) in \
-	all) \
-	  cd $@; \
-	  args=`$(top_builddir)/config.status --config`; \
-	  test -f Makefile \
-	    || eval $$srcdir/configure "$$args" --srcdir=$$srcdir; \
-	  $(MAKE) ACLOCAL=: AUTOCONF=: AUTOHEADER=: AUTOMAKE=: $(do) ;; \
-	esac
-
-$(OTHERDIRS): $(PROGDEPDIRS) $(CCPROGDIRS) $(CPROGDIRS) $(SHPROGDIRS)
-
-$(INCDIRS) $(PROGDEPDIRS) $(SHPROGDIRS) $(OTHERDIRS): FORCE
-	@$(ENVSETUP); \
-	if test $(srcdir) = .; then \
-	  srcdir=.; \
-	else \
-	  srcdir=$(top_srcdir)/$@; \
-	fi; \
-	test -d $@ || $(mkinstalldirs) $@; \
-	cd $@; \
-	$(MAKE) $(MAKE_K_FLAG) $(MDEFINES) srcdir=$$srcdir VPATH=$$srcdir \
-	  -f $(top_srcdir)/Makefile.comm \
-	  -f $$srcdir/Makefile.sub \
-	  -f $(top_srcdir)/Makefile.man $(do)
-
-.PHONY: dist
-dist:
-	if test "${doc_dist_target_ok}" != yes; then \
-	  echo "The \`dist' target is not applicable to this configuration"; \
-	  exit 1; \
-	fi
-	-rm -fr tmp
-	rm -f groff-$(version)$(revision).tar.gz
-	mkdir tmp
-	for d in $(DISTDIRS); do \
-	  $(mkinstalldirs) tmp/$$d; \
-	done
-	cp Makefile tmp
-	-cp * tmp 2>/dev/null
-	-for d in $(DISTDIRS); do \
-	  (cd tmp/$$d; \
-	   cp $(top_srcdir)/$$d/* . 2>/dev/null;); \
-	done
-	cd tmp; $(MAKE) srcdir=. VPATH=. distfiles
-	cd tmp; $(MAKE) srcdir=. VPATH=. extraclean
-	for d in $(EXTRADIRS); do \
-	  (cd tmp/$$d; \
-	   if test -f Makefile; then \
-	     $(MAKE) extraclean; \
-	   else \
-	     $(MAKE) -f $(top_builddir)/$$d/Makefile extraclean; \
-	   fi); \
-	done
-	for d in $(GNULIBDIRS); do \
-	  (cd tmp/$$d; \
-	   if test -f config.status; then \
-	     ./config.status; \
-	   fi; \
-	   if test -f Makefile; then \
-	     $(MAKE) distclean; \
-	   else \
-	     $(MAKE) -f $(top_builddir)/$$d/Makefile distclean; \
-	   fi; \
-	   rm -rf autom4te.cache); \
-	done
-	rm -f tmp/Makefile
-	cp Makefile.init tmp/Makefile
-	mv tmp groff-$(version)$(revision)
-	tar cfh - groff-$(version)$(revision) \
-	  | gzip -c >groff-$(version)$(revision).tar.gz
-	rm -fr groff-$(version)$(revision)
-
-# $(PROGDIRS): libgroff
-# grops grotty grodvi: libdriver
-# refer lookbib indxbib lkbib: libbib
-# $(LIBDIRS) $(PROGDIRS): include
-
-.PHONY: $(ALLDIRS) dot $(TARGETS) FORCE
-
-# Create a Makefile in $(subdir).  This is useful for development since it
-# avoids running make recursively.
-subdir_Makefile: Makefile.cfg
-	$(MAKE) do=Makefile $(subdir)
-
-Makefile.cfg: Makefile
-	>Makefile.cfg
-	for var in $(MDEFINES); do \
-	  echo "$$var" >>Makefile.cfg; \
-	done
-
-Makefile: Makefile.in
-	$(SHELL) config.status
-
-.PHONY: install
-install:
-	-test -d $(DESTDIR)$(prefix) \
-	  || $(mkinstalldirs) $(DESTDIR)$(prefix)
-	@$(ENVSETUP); $(MAKE) $(MAKE_K_FLAG) $(MDEFINES) \
-	  do=do_install $(dodirs)
-	cd $(DESTDIR)$(dataprogramdir); \
-	  rm -f current; \
-	  $(LN_S) $(version)$(revision) current
-
-.PHONY: uninstall
-uninstall: uninstall_sub uninstall_dirs
-
-.PHONY: uninstall_dirs
-# Use `rmdir' here so that the directories are only removed if they are empty.
-uninstall_dirs:
-	rm -f $(DESTDIR)$(dataprogramdir)/current
-	-rmdir \
-	  $(DESTDIR)$(man1dir) \
-	  $(DESTDIR)$(man5dir) \
-	  $(DESTDIR)$(man7dir) \
-	  $(DESTDIR)$(manroot) \
-	  $(DESTDIR)$(tmacdir) \
-	  $(DESTDIR)$(systemtmacdir) \
-	  $(DESTDIR)$(localtmacdir) \
-	  $(DESTDIR)$(fontdir) \
-	  $(DESTDIR)$(localfontdir) \
-	  $(DESTDIR)$(oldfontdir) \
-	  $(DESTDIR)$(bindir) \
-	  $(DESTDIR)$(datasubdir) \
-	  $(DESTDIR)$(dataprogramdir) \
-	  $(DESTDIR)$(libprogramdir) \
-	  $(DESTDIR)$(libdir) \
-	  $(DESTDIR)$(infodir) \
-	  $(DESTDIR)$(exampledir) \
-	  $(DESTDIR)$(htmldocdir) \
-	  $(DESTDIR)$(pdfdocdir) \
-	  $(DESTDIR)$(docdir) \
-	  $(DESTDIR)$(datadir)/doc/groff \
-	  $(DESTDIR)$(datadir)/doc \
-	  $(DESTDIR)$(datadir) 2>/dev/null || :
-
-.PHONY: check
-check:
-	@echo There is no validation suite for this package.
-
-#check: site.exp docheck
-#.PHONY: docheck
-
-#docheck:
-#	if $(SHELL) -c "runtest --version" > /dev/null 2>&1; then \
-#	  runtest; \
-#	else \
-#	  echo "WARNING: could not find \`runtest'" 1>&2; \
-#	fi
-
-# This snippet has been taken from the automake package.
-
-#site.exp:
-#	@echo "Making a new site.exp file..."
-#	@echo "## these variables are automatically generated by make ##" >site.tmp
-#	@echo "# Do not edit here.  If you wish to override these values" >>site.tmp
-#	@echo "# edit the last section" >>site.tmp
-#	@echo "set tool groff" >>site.tmp
-#	@echo "set srcdir $(srcdir)/testsuite" >>site.tmp
-#	@echo "set objdir `pwd`" >> site.tmp
-#	@echo "## All variables above are generated by configure.  Do not edit! ##" >> site.tmp
-#	@test ! -f site.exp \
-#	  || sed '1,/^## All variables above are.*##/ d' site.exp >> site.tmp
-#	@rm -f site.bak
-#	@test ! -f site.exp || mv site.exp site.bak
-#	@mv site.tmp site.exp
-
-FORCE:
-
-.NOEXPORT:
-
-########################################################################
-# Emacs settings
-########################################################################
-#
-# Local Variables:
-# mode: makefile
-# End:
diff -Nuar groff-1.22.3.old/Makefile.init groff-1.22.3/Makefile.init
--- groff-1.22.3.old/Makefile.init	2014-11-04 10:38:35.145524997 +0200
+++ groff-1.22.3/Makefile.init	1970-01-01 02:00:00.000000000 +0200
@@ -1,34 +0,0 @@
-# Copyright (C) 1989-2014 Free Software Foundation, Inc.
-#      Written by James Clark (jjc@jclark.com)
-#
-# This file is part of groff.
-#
-# groff is free software; you can redistribute it and/or modify it under
-# the terms of the GNU General Public License as published by the Free
-# Software Foundation, either version 3 of the License, or
-# (at your option) any later version.
-#
-# groff is distributed in the hope that it will be useful, but WITHOUT ANY
-# WARRANTY; without even the implied warranty of MERCHANTABILITY or
-# FITNESS FOR A PARTICULAR PURPOSE.  See the GNU General Public License
-# for more details.
-#
-# You should have received a copy of the GNU General Public License
-# along with this program. If not, see <http://www.gnu.org/licenses/>.
-#
-# Makefile.init
-#
-SHELL=/bin/sh
-
-.PHONY: all
-all:
-	$(SHELL) configure
-	$(MAKE) all
-
-########################################################################
-# Emacs settings
-########################################################################
-#
-# Local Variables:
-# mode: makefile
-# End:
diff -Nuar groff-1.22.3.old/Makefile.lib groff-1.22.3/Makefile.lib
--- groff-1.22.3.old/Makefile.lib	2014-11-04 10:38:35.145524997 +0200
+++ groff-1.22.3/Makefile.lib	1970-01-01 02:00:00.000000000 +0200
@@ -1,48 +0,0 @@
-# Copyright (C) 1989-2014 Free Software Foundation, Inc.
-#      Written by James Clark (jjc@jclark.com)
-#
-# This file is part of groff.
-#
-# groff is free software; you can redistribute it and/or modify it under
-# the terms of the GNU General Public License as published by the Free
-# Software Foundation, either version 3 of the License, or
-# (at your option) any later version.
-#
-# groff is distributed in the hope that it will be useful, but WITHOUT ANY
-# WARRANTY; without even the implied warranty of MERCHANTABILITY or
-# FITNESS FOR A PARTICULAR PURPOSE.  See the GNU General Public License
-# for more details.
-#
-# You should have received a copy of the GNU General Public License
-# along with this program. If not, see <http://www.gnu.org/licenses/>.
-#
-# Makefile.lib
-#
-LIBCLEAN=lib$(LIB).$(LIBEXT)
-MAKEFILEPARTS=\
-  $(top_srcdir)/Makefile.comm \
-  $(top_builddir)/Makefile.cfg \
-  $(srcdir)/Makefile.sub \
-  $(top_srcdir)/Makefile.lib \
-  Makefile.dep
-
-all: lib$(LIB).$(LIBEXT)
-
-lib$(LIB).$(LIBEXT): $(OBJS)
-	$(AR) r $@ $?
-	$(RANLIB) $@
-
-depend: depend_src
-depend.temp: $(GENSRCS)
-TAGS: $(CCSRCS) $(CSRCS)
-Makefile: $(MAKEFILEPARTS)
-Makefile.dep:
-	touch Makefile.dep
-
-########################################################################
-# Emacs settings
-########################################################################
-#
-# Local Variables:
-# mode: makefile
-# End:
diff -Nuar groff-1.22.3.old/Makefile.man groff-1.22.3/Makefile.man
--- groff-1.22.3.old/Makefile.man	2014-11-04 10:38:35.145524997 +0200
+++ groff-1.22.3/Makefile.man	1970-01-01 02:00:00.000000000 +0200
@@ -1,34 +0,0 @@
-# Copyright (C) 1992-2014 Free Software Foundation, Inc.
-#      Written by James Clark (jjc@jclark.com)
-#
-# This file is part of groff.
-#
-# groff is free software; you can redistribute it and/or modify it under
-# the terms of the GNU General Public License as published by the Free
-# Software Foundation, either version 3 of the License, or
-# (at your option) any later version.
-#
-# groff is distributed in the hope that it will be useful, but WITHOUT ANY
-# WARRANTY; without even the implied warranty of MERCHANTABILITY or
-# FITNESS FOR A PARTICULAR PURPOSE.  See the GNU General Public License
-# for more details.
-#
-# You should have received a copy of the GNU General Public License
-# along with this program. If not, see <http://www.gnu.org/licenses/>.
-#
-# Makefile.man
-#
-all: $(MANPAGES)
-install_data: install_man
-install_man: $(MANPAGES)
-uninstall_sub: uninstall_man
-$(top_builddir)/stamp-h $(MANPAGES): $(top_srcdir)/VERSION \
-		$(top_srcdir)/REVISION
-
-########################################################################
-# Emacs settings
-########################################################################
-#
-# Local Variables:
-# mode: makefile
-# End:
diff -Nuar groff-1.22.3.old/Makefile.sub groff-1.22.3/Makefile.sub
--- groff-1.22.3.old/Makefile.sub	2014-11-04 10:38:35.145524997 +0200
+++ groff-1.22.3/Makefile.sub	1970-01-01 02:00:00.000000000 +0200
@@ -1,83 +0,0 @@
-# Copyright (C) 1989-2014 Free Software Foundation, Inc.
-#      Written by James Clark (jjc@jclark.com)
-#
-# This file is part of groff.
-#
-# groff is free software; you can redistribute it and/or modify it under
-# the terms of the GNU General Public License as published by the Free
-# Software Foundation, either version 3 of the License, or
-# (at your option) any later version.
-#
-# groff is distributed in the hope that it will be useful, but WITHOUT ANY
-# WARRANTY; without even the implied warranty of MERCHANTABILITY or
-# FITNESS FOR A PARTICULAR PURPOSE.  See the GNU General Public License
-# for more details.
-#
-# You should have received a copy of the GNU General Public License
-# along with this program. If not, see <http://www.gnu.org/licenses/>.
-#
-# Makefile.sub
-#
-DISTCLEANFILES=\
-  Makefile \
-  config.cache \
-  config.log \
-  config.status \
-  groff.log \
-  groff.sum \
-  src/include/config.h \
-  site.bak \
-  site.exp \
-  stamp-h \
-  test-groff
-
-MOSTLYCLEANADD=\
-  Makefile.cfg \
-  conftest*
-
-M4MACROS=\
-  $(srcdir)/m4/ax_compare_version.m4 \
-  $(srcdir)/m4/ax_prog_perl_version.m4 \
-  $(srcdir)/m4/codeset.m4 \
-  $(srcdir)/m4/fcntl-o.m4 \
-  $(srcdir)/m4/glibc21.m4 \
-  $(srcdir)/m4/groff.m4 \
-  $(srcdir)/m4/iconv.m4 \
-  $(srcdir)/m4/lib-ld.m4 \
-  $(srcdir)/m4/lib-link.m4 \
-  $(srcdir)/m4/lib-prefix.m4 \
-  $(srcdir)/m4/localcharset.m4
-
-distfiles: configure
-
-$(srcdir)/configure: configure.ac $(srcdir)/aclocal.m4
-	cd $(srcdir) && autoconf && rm -rf autom4te.cache
-
-$(srcdir)/aclocal.m4: $(M4MACROS)
-	cd $(srcdir) && aclocal -I m4
-
-config.status: configure
-	$(SHELL) config.status --recheck
-
-# autoheader might not change config.hin, so touch a stamp file.
-$(srcdir)/config.hin: stamp-h.in
-$(srcdir)/stamp-h.in: configure.ac $(srcdir)/aclocal.m4
-	cd $(srcdir) && autoheader
-	echo timestamp > $(srcdir)/stamp-h.in
-
-config.h: stamp-h
-stamp-h: config.hin config.status
-	$(SHELL) config.status
-
-# Always create the site-font directory as a guide to the user.
-install_data:
-	-test -d $(DESTDIR)$(localfontdir) \
-	  || $(mkinstalldirs) $(DESTDIR)$(localfontdir)
-
-########################################################################
-# Emacs settings
-########################################################################
-#
-# Local Variables:
-# mode: makefile
-# End:
diff -Nuar groff-1.22.3.old/man/ditroff.man groff-1.22.3/man/ditroff.man
--- groff-1.22.3.old/man/ditroff.man	2014-11-04 10:38:35.517520346 +0200
+++ groff-1.22.3/man/ditroff.man	2015-04-23 20:57:03.000000000 +0300
@@ -7,7 +7,7 @@
 .
 .
 .de co
-Copyright \[co] 2001-2014 Free Software Foundation, Inc.
+Copyright \(co 2001-2014 Free Software Foundation, Inc.
 
 This file is part of groff, the GNU roff type-setting system.
 
@@ -68,27 +68,27 @@
 creating an intermediate output format for troff that can be fed into
 postprocessor programs which actually do the printout on the device.
 .
-Kernighan\[aq]s version marks what is known as
+Kernighan\(aqs version marks what is known as
 .I classical troff
 today.
 .
-In order to distinguish it from Ossanna\[aq]s original mono-device
+In order to distinguish it from Ossanna\(aqs original mono-device
 version, it was called
 .I ditroff
 .RI ( d "evice " i "ndependent " troff )
-on some systems, though this naming isn\[aq]t mentioned in the
+on some systems, though this naming isn\(aqt mentioned in the
 classical documentation.
 .
 .
 .P
-Today, any existing roff system is based on Kernighan\[aq]s
+Today, any existing roff system is based on Kernighan\(aqs
 multi-device troff.
 .
 The distinction between
 .I troff
 and
 .I ditroff
-isn\[aq]t necessary any longer, for each modern
+isn\(aqt necessary any longer, for each modern
 .I troff
 provides already the complete functionality of
 .IR ditroff .
@@ -116,7 +116,7 @@
 .TP
 .I [CSTR\~#54]
 The 1992 revision of the
-.I Nroff/Troff User\[aq]s Manual
+.I Nroff/Troff User\(aqs Manual
 by
 .I J.\& F.\& Ossanna
 and
diff -Nuar groff-1.22.3.old/man/.gitignore groff-1.22.3/man/.gitignore
--- groff-1.22.3.old/man/.gitignore	1970-01-01 02:00:00.000000000 +0200
+++ groff-1.22.3/man/.gitignore	2015-04-23 20:57:03.000000000 +0300
@@ -0,0 +1,8 @@
+ditroff.n
+groff.n
+groff_char.n
+groff_diff.n
+groff_font.n
+groff_out.n
+groff_tmac.n
+roff.n
diff -Nuar groff-1.22.3.old/man/groff_char.man groff-1.22.3/man/groff_char.man
--- groff-1.22.3.old/man/groff_char.man	2014-11-04 10:38:35.517520346 +0200
+++ groff-1.22.3/man/groff_char.man	2015-04-23 20:57:03.000000000 +0300
@@ -808,7 +808,7 @@
 glyphs.
 .
 For this reason, the four glyphs \[oq]lf\[cq], \[oq]rf\[cq],
-\[o]lc\[cq], and \[oq]rc\[cq] are not unified with similarly looking
+\[oq]lc\[cq], and \[oq]rc\[cq] are not unified with similarly looking
 bracket pieces.
 .
 In
diff -Nuar groff-1.22.3.old/man/groff_diff.man groff-1.22.3/man/groff_diff.man
--- groff-1.22.3.old/man/groff_diff.man	2014-11-04 10:38:35.517520346 +0200
+++ groff-1.22.3/man/groff_diff.man	2015-04-23 20:57:03.000000000 +0300
@@ -9,6 +9,10 @@
 .\" Installed position: <prefix>/share/man/man7/groff_diff.7
 .
 .
+.do nr groff_C \n[.C]
+.cp 0
+.
+.
 .de co
 Copyright \[co] 1989-2014 Free Software Foundation, Inc.
 .
@@ -3964,6 +3968,9 @@
 .au
 .
 .
+.cp \n[groff_C]
+.
+.
 .\" --------------------------------------------------------------------
 .\" Emacs variables
 .\" --------------------------------------------------------------------
diff -Nuar groff-1.22.3.old/man/groff.man groff-1.22.3/man/groff.man
--- groff-1.22.3.old/man/groff.man	2014-11-04 10:38:35.518520334 +0200
+++ groff-1.22.3/man/groff.man	2015-04-23 20:57:03.000000000 +0300
@@ -13,7 +13,7 @@
 .de co
 This file is part of groff, the GNU roff type-setting system.
 
-Copyright \[co] 2000-2014 Free Software Foundation, Inc.
+Copyright \(co 2000-2014 Free Software Foundation, Inc.
 
 Permission is granted to copy, distribute and/or modify this document
 under the terms of the GNU Free Documentation License, Version 1.3 or
diff -Nuar groff-1.22.3.old/man/groff_out.man groff-1.22.3/man/groff_out.man
--- groff-1.22.3.old/man/groff_out.man	2014-11-04 10:38:35.518520334 +0200
+++ groff-1.22.3/man/groff_out.man	2015-04-23 20:57:03.000000000 +0300
@@ -9,6 +9,10 @@
 .\" Installed position: <prefix>/share/man/man5/groff_out.5
 .
 .
+.do nr groff_C \n[.C]
+.cp 0
+.
+.
 .\" --------------------------------------------------------------------
 .\" License and authors
 .\" --------------------------------------------------------------------
@@ -2002,6 +2006,9 @@
 .au
 .
 .
+.cp \n[groff_C]
+.
+.
 .\" --------------------------------------------------------------------
 .\" Emacs settings
 .\" --------------------------------------------------------------------
diff -Nuar groff-1.22.3.old/man/groff_tmac.man groff-1.22.3/man/groff_tmac.man
--- groff-1.22.3.old/man/groff_tmac.man	2014-11-04 10:38:35.518520334 +0200
+++ groff-1.22.3/man/groff_tmac.man	2015-04-23 20:57:03.000000000 +0300
@@ -7,6 +7,10 @@
 .\" Source file position: <groff_source>/man/groff_tmac.man
 .\" Installed position: <prefix>/share/man/man5/groff_tmac.5
 .
+.do nr groff_C \n[.C]
+.cp 0
+.
+.
 .\" --------------------------------------------------------------------
 .\" Legalese
 .\" --------------------------------------------------------------------
@@ -1269,3 +1273,14 @@
 .SH AUTHOR
 .\" --------------------------------------------------------------------
 .au
+.
+..cp \n[groff_C]
+.
+.
+.\" --------------------------------------------------------------------
+.\" Emacs settings
+.\" --------------------------------------------------------------------
+.
+.\" Local Variables:
+.\" mode: nroff
+.\" End:
diff -Nuar groff-1.22.3.old/man/Makefile.sub groff-1.22.3/man/Makefile.sub
--- groff-1.22.3.old/man/Makefile.sub	2014-11-04 10:38:35.518520334 +0200
+++ groff-1.22.3/man/Makefile.sub	1970-01-01 02:00:00.000000000 +0200
@@ -1,45 +0,0 @@
-# Makefile.sub for `man'
-#
-# File position: <groff-source>/man/Makefile.sub
-#
-# Copyright (C) 2014
-#   Free Software Foundation, Inc.
-#
-# Last update: 2 Sep 2014
-#
-# This file is part of `font utf8' which is part of `groff'.
-#
-# `groff' is free software; you can redistribute it and/or modify it
-# under the terms of the GNU General Public License as published by
-# the Free Software Foundation, either version 2 of the License, or
-# (at your option) any later version.
-#
-# `groff' is distributed in the hope that it will be useful, but
-# WITHOUT ANY WARRANTY; without even the implied warranty of
-# MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the GNU
-# General Public License for more details.
-#
-# You should have received a copy of the GNU General Public License
-# along with this program. If not, see
-# <http://www.gnu.org/licenses/gpl-2.0.html>.
-#
-########################################################################
-
-MAN5=\
-  groff_font.n \
-  groff_out.n \
-  groff_tmac.n
-MAN7=\
-  ditroff.n \
-  groff_char.n \
-  groff_diff.n \
-  groff.n \
-  roff.n
-
-########################################################################
-# Emacs settings
-########################################################################
-#
-# Local Variables:
-# mode: makefile
-# End:
diff -Nuar groff-1.22.3.old/man/man.am groff-1.22.3/man/man.am
--- groff-1.22.3.old/man/man.am	1970-01-01 02:00:00.000000000 +0200
+++ groff-1.22.3/man/man.am	2015-04-23 20:57:03.000000000 +0300
@@ -0,0 +1,42 @@
+# Copyright (C) 2014
+#   Free Software Foundation, Inc.
+#
+# This file is part of `groff'
+#
+# `groff' is free software; you can redistribute it and/or modify it
+# under the terms of the GNU General Public License as published by
+# the Free Software Foundation, either version 3 of the License, or
+# (at your option) any later version.
+#
+# `groff' is distributed in the hope that it will be useful, but
+# WITHOUT ANY WARRANTY; without even the implied warranty of
+# MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the GNU
+# General Public License for more details.
+#
+# You should have received a copy of the GNU General Public License
+# along with this program. If not, see <http://www.gnu.org/licenses/>.
+
+man5_MANS += \
+  man/groff_font.n \
+  man/groff_out.n \
+  man/groff_tmac.n
+man7_MANS += \
+  man/ditroff.n \
+  man/groff_char.n \
+  man/groff_diff.n \
+  man/groff.n \
+  man/roff.n
+EXTRA_DIST += \
+  man/groff_font.man \
+  man/groff_out.man \
+  man/groff_tmac.man \
+  man/ditroff.man \
+  man/groff_char.man \
+  man/groff_diff.man \
+  man/groff.man \
+  man/roff.man
+
+# Case of out-of-source build: we must create the 'man' directory.
+BUILT_SOURCES += man
+man:
+	$(MKDIR_P) $(top_builddir)/man
diff -Nuar groff-1.22.3.old/man/roff.man groff-1.22.3/man/roff.man
--- groff-1.22.3.old/man/roff.man	2014-11-04 10:38:35.518520334 +0200
+++ groff-1.22.3/man/roff.man	2015-04-23 20:57:03.000000000 +0300
@@ -5,6 +5,11 @@
 .
 .\" this is man-page roff.7
 .
+.
+.do nr groff_C \n[.C]
+.cp 0
+.
+.
 .\" --------------------------------------------------------------------
 .\" Legalese
 .\" --------------------------------------------------------------------
@@ -1359,6 +1364,9 @@
 .au
 .
 .
+.cp \n[groff_C]
+.
+.
 .\" --------------------------------------------------------------------
 .\" Emacs setup
 .\" --------------------------------------------------------------------
diff -Nuar groff-1.22.3.old/mkinstalldirs groff-1.22.3/mkinstalldirs
--- groff-1.22.3.old/mkinstalldirs	2014-11-04 10:38:35.145524997 +0200
+++ groff-1.22.3/mkinstalldirs	1970-01-01 02:00:00.000000000 +0200
@@ -1,162 +0,0 @@
-#! /bin/sh
-# mkinstalldirs --- make directory hierarchy
-
-scriptversion=2009-04-28.21; # UTC
-
-# Original author: Noah Friedman <friedman@prep.ai.mit.edu>
-# Created: 1993-05-16
-# Public domain.
-#
-# This file is maintained in Automake, please report
-# bugs to <bug-automake@gnu.org> or send patches to
-# <automake-patches@gnu.org>.
-
-nl='
-'
-IFS=" ""	$nl"
-errstatus=0
-dirmode=
-
-usage="\
-Usage: mkinstalldirs [-h] [--help] [--version] [-m MODE] DIR ...
-
-Create each directory DIR (with mode MODE, if specified), including all
-leading file name components.
-
-Report bugs to <bug-automake@gnu.org>."
-
-# process command line arguments
-while test $# -gt 0 ; do
-  case $1 in
-    -h | --help | --h*)         # -h for help
-      echo "$usage"
-      exit $?
-      ;;
-    -m)                         # -m PERM arg
-      shift
-      test $# -eq 0 && { echo "$usage" 1>&2; exit 1; }
-      dirmode=$1
-      shift
-      ;;
-    --version)
-      echo "$0 $scriptversion"
-      exit $?
-      ;;
-    --)                         # stop option processing
-      shift
-      break
-      ;;
-    -*)                         # unknown option
-      echo "$usage" 1>&2
-      exit 1
-      ;;
-    *)                          # first non-opt arg
-      break
-      ;;
-  esac
-done
-
-for file
-do
-  if test -d "$file"; then
-    shift
-  else
-    break
-  fi
-done
-
-case $# in
-  0) exit 0 ;;
-esac
-
-# Solaris 8's mkdir -p isn't thread-safe.  If you mkdir -p a/b and
-# mkdir -p a/c at the same time, both will detect that a is missing,
-# one will create a, then the other will try to create a and die with
-# a "File exists" error.  This is a problem when calling mkinstalldirs
-# from a parallel make.  We use --version in the probe to restrict
-# ourselves to GNU mkdir, which is thread-safe.
-case $dirmode in
-  '')
-    if mkdir -p --version . >/dev/null 2>&1 && test ! -d ./--version; then
-      echo "mkdir -p -- $*"
-      exec mkdir -p -- "$@"
-    else
-      # On NextStep and OpenStep, the 'mkdir' command does not
-      # recognize any option.  It will interpret all options as
-      # directories to create, and then abort because '.' already
-      # exists.
-      test -d ./-p && rmdir ./-p
-      test -d ./--version && rmdir ./--version
-    fi
-    ;;
-  *)
-    if mkdir -m "$dirmode" -p --version . >/dev/null 2>&1 &&
-       test ! -d ./--version; then
-      echo "mkdir -m $dirmode -p -- $*"
-      exec mkdir -m "$dirmode" -p -- "$@"
-    else
-      # Clean up after NextStep and OpenStep mkdir.
-      for d in ./-m ./-p ./--version "./$dirmode";
-      do
-        test -d $d && rmdir $d
-      done
-    fi
-    ;;
-esac
-
-for file
-do
-  case $file in
-    /*) pathcomp=/ ;;
-    *)  pathcomp= ;;
-  esac
-  oIFS=$IFS
-  IFS=/
-  set fnord $file
-  shift
-  IFS=$oIFS
-
-  for d
-  do
-    test "x$d" = x && continue
-
-    pathcomp=$pathcomp$d
-    case $pathcomp in
-      -*) pathcomp=./$pathcomp ;;
-    esac
-
-    if test ! -d "$pathcomp"; then
-      echo "mkdir $pathcomp"
-
-      mkdir "$pathcomp" || lasterr=$?
-
-      if test ! -d "$pathcomp"; then
-	errstatus=$lasterr
-      else
-	if test ! -z "$dirmode"; then
-	  echo "chmod $dirmode $pathcomp"
-	  lasterr=
-	  chmod "$dirmode" "$pathcomp" || lasterr=$?
-
-	  if test ! -z "$lasterr"; then
-	    errstatus=$lasterr
-	  fi
-	fi
-      fi
-    fi
-
-    pathcomp=$pathcomp/
-  done
-done
-
-exit $errstatus
-
-# Local Variables:
-# mode: shell-script
-# sh-indentation: 2
-# eval: (add-hook 'write-file-hooks 'time-stamp)
-# time-stamp-start: "scriptversion="
-# time-stamp-format: "%:y-%02m-%02d.%02H"
-# time-stamp-time-zone: "UTC"
-# time-stamp-end: "; # UTC"
-# End:
diff -Nuar groff-1.22.3.old/README.git groff-1.22.3/README.git
--- groff-1.22.3.old/README.git	1970-01-01 02:00:00.000000000 +0200
+++ groff-1.22.3/README.git	2015-04-23 20:57:03.000000000 +0300
@@ -0,0 +1,3 @@
+This file is not distributed and is given to the bootstrap script to
+be sure that this script is invoked on a source tree checked out from
+the git repository and not from a tarball.
diff -Nuar groff-1.22.3.old/src/devices/grodvi/.gitignore groff-1.22.3/src/devices/grodvi/.gitignore
--- groff-1.22.3.old/src/devices/grodvi/.gitignore	1970-01-01 02:00:00.000000000 +0200
+++ groff-1.22.3/src/devices/grodvi/.gitignore	2015-04-23 20:57:03.000000000 +0300
@@ -0,0 +1,3 @@
+Makefile.dep
+grodvi
+grodvi.n
diff -Nuar groff-1.22.3.old/src/devices/grodvi/grodvi.am groff-1.22.3/src/devices/grodvi/grodvi.am
--- groff-1.22.3.old/src/devices/grodvi/grodvi.am	1970-01-01 02:00:00.000000000 +0200
+++ groff-1.22.3/src/devices/grodvi/grodvi.am	2015-04-23 20:57:03.000000000 +0300
@@ -0,0 +1,28 @@
+# Copyright (C) 2014
+#      Free Software Foundation, Inc.
+# 
+# This file is part of groff.
+#
+# groff is free software; you can redistribute it and/or modify it under
+# the terms of the GNU General Public License as published by the Free
+# Software Foundation, either version 3 of the License, or
+# (at your option) any later version.
+#
+# groff is distributed in the hope that it will be useful, but WITHOUT ANY
+# WARRANTY; without even the implied warranty of MERCHANTABILITY or
+# FITNESS FOR A PARTICULAR PURPOSE.  See the GNU General Public License
+# for more details.
+#
+# You should have received a copy of the GNU General Public License
+# along with this program. If not, see <http://www.gnu.org/licenses/>.
+
+bin_PROGRAMS += grodvi
+grodvi_SOURCES = src/devices/grodvi/dvi.cpp
+grodvi_LDADD = \
+  libdriver.a \
+  libgroff.a \
+  lib/libgnu.a $(LIBM)
+man1_MANS += src/devices/grodvi/grodvi.n
+EXTRA_DIST += src/devices/grodvi/grodvi.man
+
+
diff -Nuar groff-1.22.3.old/src/devices/grodvi/grodvi.man groff-1.22.3/src/devices/grodvi/grodvi.man
--- groff-1.22.3.old/src/devices/grodvi/grodvi.man	2014-11-04 10:38:35.270523434 +0200
+++ groff-1.22.3/src/devices/grodvi/grodvi.man	2015-04-23 20:57:03.000000000 +0300
@@ -5,7 +5,7 @@
 .
 .\" copying (license)
 .de co
-Copyright \[co] 1989-2014 Free Software Foundation, Inc.
+Copyright \(co 1989-2014 Free Software Foundation, Inc.
 
 Permission is granted to make and distribute verbatim copies of
 this manual provided the copyright notice and this permission notice
diff -Nuar groff-1.22.3.old/src/devices/grodvi/Makefile.sub groff-1.22.3/src/devices/grodvi/Makefile.sub
--- groff-1.22.3.old/src/devices/grodvi/Makefile.sub	2014-11-04 10:38:35.270523434 +0200
+++ groff-1.22.3/src/devices/grodvi/Makefile.sub	1970-01-01 02:00:00.000000000 +0200
@@ -1,41 +0,0 @@
-# Makefile.sub for `grodvi'
-#
-# File position: <groff-source>/src/devices/grodvi/Makefile.sub
-#
-# Copyright (C) 2014
-#   Free Software Foundation, Inc.
-#
-# Last update: 2 Sep 2014
-#
-# This file is part of `font utf8' which is part of `groff'.
-#
-# `groff' is free software; you can redistribute it and/or modify it
-# under the terms of the GNU General Public License as published by
-# the Free Software Foundation, either version 2 of the License, or
-# (at your option) any later version.
-#
-# `groff' is distributed in the hope that it will be useful, but
-# WITHOUT ANY WARRANTY; without even the implied warranty of
-# MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the GNU
-# General Public License for more details.
-#
-# You should have received a copy of the GNU General Public License
-# along with this program. If not, see
-# <http://www.gnu.org/licenses/gpl-2.0.html>.
-#
-########################################################################
-
-PROG=grodvi$(EXEEXT)
-MAN1=grodvi.n
-XLIBS=$(LIBDRIVER) $(LIBGROFF) $(LIBGNU)
-MLIB=$(LIBM)
-OBJS=dvi.$(OBJEXT)
-CCSRCS=$(srcdir)/dvi.cpp
-
-########################################################################
-# Emacs settings
-########################################################################
-#
-# Local Variables:
-# mode: makefile
-# End:
diff -Nuar groff-1.22.3.old/src/devices/grohtml/.gitignore groff-1.22.3/src/devices/grohtml/.gitignore
--- groff-1.22.3.old/src/devices/grohtml/.gitignore	1970-01-01 02:00:00.000000000 +0200
+++ groff-1.22.3/src/devices/grohtml/.gitignore	2015-04-23 20:57:03.000000000 +0300
@@ -0,0 +1,3 @@
+Makefile.dep
+grohtml.n
+post-grohtml
diff -Nuar groff-1.22.3.old/src/devices/grohtml/grohtml.am groff-1.22.3/src/devices/grohtml/grohtml.am
--- groff-1.22.3.old/src/devices/grohtml/grohtml.am	1970-01-01 02:00:00.000000000 +0200
+++ groff-1.22.3/src/devices/grohtml/grohtml.am	2015-04-23 20:57:03.000000000 +0300
@@ -0,0 +1,34 @@
+# Copyright (C) 2014
+#      Free Software Foundation, Inc.
+# 
+# This file is part of groff.
+#
+# groff is free software; you can redistribute it and/or modify it under
+# the terms of the GNU General Public License as published by the Free
+# Software Foundation, either version 3 of the License, or
+# (at your option) any later version.
+#
+# groff is distributed in the hope that it will be useful, but WITHOUT ANY
+# WARRANTY; without even the implied warranty of MERCHANTABILITY or
+# FITNESS FOR A PARTICULAR PURPOSE.  See the GNU General Public License
+# for more details.
+#
+# You should have received a copy of the GNU General Public License
+# along with this program. If not, see <http://www.gnu.org/licenses/>.
+
+bin_PROGRAMS += post-grohtml
+post_grohtml_SOURCES = \
+  src/devices/grohtml/post-html.cpp \
+  src/devices/grohtml/html-table.cpp \
+  src/devices/grohtml/html-text.cpp \
+  src/devices/grohtml/output.cpp \
+  src/devices/grohtml/html.h \
+  src/devices/grohtml/html-text.h \
+  src/devices/grohtml/html-table.h
+
+post_grohtml_LDADD = $(LIBM) \
+  libdriver.a \
+  libgroff.a \
+  lib/libgnu.a 
+man1_MANS += src/devices/grohtml/grohtml.n
+EXTRA_DIST += src/devices/grohtml/grohtml.man
diff -Nuar groff-1.22.3.old/src/devices/grohtml/grohtml.man groff-1.22.3/src/devices/grohtml/grohtml.man
--- groff-1.22.3.old/src/devices/grohtml/grohtml.man	2014-11-04 10:38:35.279523322 +0200
+++ groff-1.22.3/src/devices/grohtml/grohtml.man	2015-04-23 20:57:03.000000000 +0300
@@ -5,7 +5,7 @@
 .
 .\" license
 .de co
-Copyright \[co] 1999-2014 Free Software Foundation, Inc.
+Copyright \(co 1999-2014 Free Software Foundation, Inc.
 
 Permission is granted to make and distribute verbatim copies of this
 manual provided the copyright notice and this permission notice are
@@ -102,7 +102,7 @@
 options can be passed to
 .B grohtml
 using
-.BR groff \[aq]s
+.BR groff \(aqs
 .B \-P
 option.
 .
@@ -126,7 +126,7 @@
 all non-composite unicode characters.
 .
 In spite of this, groff may issue warnings about unknown special
-characters if they can\[aq]t be found during the first pass.
+characters if they can\(aqt be found during the first pass.
 .
 Such warnings can be safely ignored unless the special characters
 appear inside a table or equation.
@@ -269,7 +269,7 @@
 .
 Without the option the anchor value is the textual heading.
 .
-This can cause problems when a heading contains a \[oq]?\[cq] on older
+This can cause problems when a heading contains a \(oq?\(cqa on older
 versions of some browsers (Netscape).
 .
 This flag is automatically turned on if a heading contains an image.
diff -Nuar groff-1.22.3.old/src/devices/grohtml/Makefile.sub groff-1.22.3/src/devices/grohtml/Makefile.sub
--- groff-1.22.3.old/src/devices/grohtml/Makefile.sub	2014-11-04 10:38:35.279523322 +0200
+++ groff-1.22.3/src/devices/grohtml/Makefile.sub	1970-01-01 02:00:00.000000000 +0200
@@ -1,50 +0,0 @@
-# Makefile.sub for `grohtml'
-#
-# File position: <groff-source>/src/devices/grohtml/Makefile.sub
-#
-# Copyright (C) 2014  Free Software Foundation, Inc.
-#
-# This file is part of `font utf8' which is part of `groff'.
-#
-# `groff' is free software; you can redistribute it and/or modify it
-# under the terms of the GNU General Public License as published by
-# the Free Software Foundation, either version 2 of the License, or
-# (at your option) any later version.
-#
-# `groff' is distributed in the hope that it will be useful, but
-# WITHOUT ANY WARRANTY; without even the implied warranty of
-# MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the GNU
-# General Public License for more details.
-#
-# You should have received a copy of the GNU General Public License
-# along with this program. If not, see
-# <http://www.gnu.org/licenses/gpl-2.0.html>.
-#
-########################################################################
-
-PROG=post-grohtml$(EXEEXT)
-MAN1=grohtml.n
-XLIBS=$(LIBDRIVER) $(LIBGROFF) $(LIBGNU)
-MLIB=$(LIBM)
-OBJS=\
-  post-html.$(OBJEXT) \
-  html-table.$(OBJEXT) \
-  html-text.$(OBJEXT) \
-  output.$(OBJEXT)
-CCSRCS=\
-  $(srcdir)/post-html.cpp \
-  $(srcdir)/html-table.cpp \
-  $(srcdir)/html-text.cpp \
-  $(srcdir)/output.cpp
-HDRS=\
-  $(srcdir)/html.h \
-  $(srcdir)/html-table.h \
-  $(srcdir)/html-text.h
-
-########################################################################
-# Emacs settings
-########################################################################
-#
-# Local Variables:
-# mode: makefile
-# End:
diff -Nuar groff-1.22.3.old/src/devices/grolbp/.gitignore groff-1.22.3/src/devices/grolbp/.gitignore
--- groff-1.22.3.old/src/devices/grolbp/.gitignore	1970-01-01 02:00:00.000000000 +0200
+++ groff-1.22.3/src/devices/grolbp/.gitignore	2015-04-23 20:57:03.000000000 +0300
@@ -0,0 +1,3 @@
+Makefile.dep
+grolbp
+grolbp.n
diff -Nuar groff-1.22.3.old/src/devices/grolbp/grolbp.am groff-1.22.3/src/devices/grolbp/grolbp.am
--- groff-1.22.3.old/src/devices/grolbp/grolbp.am	1970-01-01 02:00:00.000000000 +0200
+++ groff-1.22.3/src/devices/grolbp/grolbp.am	2015-04-23 20:57:03.000000000 +0300
@@ -0,0 +1,30 @@
+# Copyright (C) 2014
+#      Free Software Foundation, Inc.
+# 
+# This file is part of groff.
+#
+# groff is free software; you can redistribute it and/or modify it under
+# the terms of the GNU General Public License as published by the Free
+# Software Foundation, either version 3 of the License, or
+# (at your option) any later version.
+#
+# groff is distributed in the hope that it will be useful, but WITHOUT ANY
+# WARRANTY; without even the implied warranty of MERCHANTABILITY or
+# FITNESS FOR A PARTICULAR PURPOSE.  See the GNU General Public License
+# for more details.
+#
+# You should have received a copy of the GNU General Public License
+# along with this program. If not, see <http://www.gnu.org/licenses/>.
+
+bin_PROGRAMS += grolbp
+grolbp_SOURCES = \
+  src/devices/grolbp/lbp.cpp \
+  src/devices/grolbp/lbp.h \
+  src/devices/grolbp/charset.h
+
+grolbp_LDADD = $(LIBM) \
+  libdriver.a \
+  libgroff.a \
+  lib/libgnu.a
+man1_MANS += src/devices/grolbp/grolbp.n
+EXTRA_DIST += src/devices/grolbp/grolbp.man
diff -Nuar groff-1.22.3.old/src/devices/grolbp/grolbp.man groff-1.22.3/src/devices/grolbp/grolbp.man
--- groff-1.22.3.old/src/devices/grolbp/grolbp.man	2014-11-04 10:38:35.284523259 +0200
+++ groff-1.22.3/src/devices/grolbp/grolbp.man	2015-04-23 20:57:03.000000000 +0300
@@ -10,7 +10,7 @@
 .
 .\" license
 .de co
-Copyright \[co] 1994-2014 Free Software Foundation, Inc.
+Copyright \(co 1994-2014 Free Software Foundation, Inc.
 
 Permission is granted to make and distribute verbatim copies of
 this manual provided the copyright notice and this permission notice
@@ -112,7 +112,7 @@
 .
 Note that there can be whitespace between a one-letter option and its
 argument; on the other hand, there must be whitespace and/or an equal sign
-(\[oq]=\[cq]) between a long-name option and its argument.
+(\(oq=\(cq) between a long-name option and its argument.
 .
 .TP
 .BI \-c numcopies
@@ -143,7 +143,7 @@
 .BI \-\-orientation= orientation
 Print the document with
 .I orientation
-orientation, which must be \[oq]portrait\[cq] or \[oq]landscape\[cq].
+orientation, which must be \(oqportrait\(cq or \(oqlandscape\(cq.
 .
 .TP
 .BI \-w width
@@ -153,7 +153,7 @@
 .I width
 thousandths of an em.
 .
-If this option isn\[aq]t specified, the line thickness defaults to 0.04\~em.
+If this option isn\(aqt specified, the line thickness defaults to 0.04\~em.
 .
 .TP
 .B \-v
@@ -348,9 +348,9 @@
 indicating the font styles Roman, Italic and Bold respectively.
 .
 .IP
-For instance, if the printer\[aq]s
+For instance, if the printer\(aqs
 .I font listing A
-shows font \[oq]Nelite12I.ISO_USA\[cq], the corresponding entry in the
+shows font \(oqNelite12I.ISO_USA\(cq, the corresponding entry in the
 font description file is
 .sp 1
 .in +2m
@@ -367,14 +367,14 @@
 .IP \(bu
 For scalable fonts,
 .I printer_font_name
-is identical to the font name as it appears in the printer\[aq]s
+is identical to the font name as it appears in the printer\(aqs
 .IR "font listing A" .
 .
 .IP
-For instance, to select the \[oq]Swiss\[cq] font in bold style, which
-appears in the printer\[aq]s
+For instance, to select the \(oqSwiss\(cq font in bold style, which
+appears in the printer\(aqs
 .I font listing A
-as \[oq]Swiss-Bold\[cq], the required
+as \(oqSwiss-Bold\(cq, the required
 .B lbpname
 command line is
 .sp 1
diff -Nuar groff-1.22.3.old/src/devices/grolbp/Makefile.sub groff-1.22.3/src/devices/grolbp/Makefile.sub
--- groff-1.22.3.old/src/devices/grolbp/Makefile.sub	2014-11-04 10:38:35.284523259 +0200
+++ groff-1.22.3/src/devices/grolbp/Makefile.sub	1970-01-01 02:00:00.000000000 +0200
@@ -1,38 +0,0 @@
-# Makefile.sub for `grolbp'
-#
-# File position: <groff-source>/src/devices/grolbp/Makefile.sub
-#
-# Copyright (C) 2014  Free Software Foundation, Inc.
-#
-# This file is part of `font utf8' which is part of `groff'.
-#
-# `groff' is free software; you can redistribute it and/or modify it
-# under the terms of the GNU General Public License as published by
-# the Free Software Foundation, either version 2 of the License, or
-# (at your option) any later version.
-#
-# `groff' is distributed in the hope that it will be useful, but
-# WITHOUT ANY WARRANTY; without even the implied warranty of
-# MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the GNU
-# General Public License for more details.
-#
-# You should have received a copy of the GNU General Public License
-# along with this program. If not, see
-# <http://www.gnu.org/licenses/gpl-2.0.html>.
-#
-########################################################################
-
-PROG=grolbp$(EXEEXT)
-MAN1=grolbp.n
-XLIBS=$(LIBDRIVER) $(LIBGROFF) $(LIBGNU)
-MLIB=$(LIBM)
-OBJS=lbp.$(OBJEXT)
-CCSRCS=$(srcdir)/lbp.cpp
-
-########################################################################
-# Emacs settings
-########################################################################
-#
-# Local Variables:
-# mode: makefile
-# End:
diff -Nuar groff-1.22.3.old/src/devices/grolj4/.gitignore groff-1.22.3/src/devices/grolj4/.gitignore
--- groff-1.22.3.old/src/devices/grolj4/.gitignore	1970-01-01 02:00:00.000000000 +0200
+++ groff-1.22.3/src/devices/grolj4/.gitignore	2015-04-23 20:57:03.000000000 +0300
@@ -0,0 +1,4 @@
+Makefile.dep
+grolj4
+grolj4.n
+lj4_font.n
diff -Nuar groff-1.22.3.old/src/devices/grolj4/grolj4.am groff-1.22.3/src/devices/grolj4/grolj4.am
--- groff-1.22.3.old/src/devices/grolj4/grolj4.am	1970-01-01 02:00:00.000000000 +0200
+++ groff-1.22.3/src/devices/grolj4/grolj4.am	2015-04-23 20:57:03.000000000 +0300
@@ -0,0 +1,30 @@
+# Copyright (C) 2014
+#      Free Software Foundation, Inc.
+# 
+# This file is part of groff.
+#
+# groff is free software; you can redistribute it and/or modify it under
+# the terms of the GNU General Public License as published by the Free
+# Software Foundation, either version 3 of the License, or
+# (at your option) any later version.
+#
+# groff is distributed in the hope that it will be useful, but WITHOUT ANY
+# WARRANTY; without even the implied warranty of MERCHANTABILITY or
+# FITNESS FOR A PARTICULAR PURPOSE.  See the GNU General Public License
+# for more details.
+#
+# You should have received a copy of the GNU General Public License
+# along with this program. If not, see <http://www.gnu.org/licenses/>.
+
+bin_PROGRAMS += grolj4
+grolj4_SOURCES = src/devices/grolj4/lj4.cpp
+grolj4_LDADD = $(LIBM) \
+  libdriver.a \
+  libgroff.a \
+  lib/libgnu.a
+man1_MANS += src/devices/grolj4/grolj4.n
+man5_MANS += src/devices/grolj4/lj4_font.n
+EXTRA_DIST += \
+  src/devices/grolj4/grolj4.man \
+  src/devices/grolj4/lj4_font.man
+
diff -Nuar groff-1.22.3.old/src/devices/grolj4/grolj4.man groff-1.22.3/src/devices/grolj4/grolj4.man
--- groff-1.22.3.old/src/devices/grolj4/grolj4.man	2014-11-04 10:38:35.274523384 +0200
+++ groff-1.22.3/src/devices/grolj4/grolj4.man	2015-04-23 20:57:03.000000000 +0300
@@ -6,7 +6,7 @@
 .
 .\" license
 .de co
-Copyright \[co] 1994-2014 Free Software Foundation, Inc.
+Copyright \(co 1994-2014 Free Software Foundation, Inc.
 
 Permission is granted to make and distribute verbatim copies of
 this manual provided the copyright notice and this permission notice
@@ -127,7 +127,7 @@
 .I n
 thousandths of an em.
 .
-If this option isn\[aq]t specified, the line thickness defaults to
+If this option isn\(aqt specified, the line thickness defaults to
 0.04\~em.
 .
 .TP
diff -Nuar groff-1.22.3.old/src/devices/grolj4/lj4_font.man groff-1.22.3/src/devices/grolj4/lj4_font.man
--- groff-1.22.3.old/src/devices/grolj4/lj4_font.man	2014-11-04 10:38:35.274523384 +0200
+++ groff-1.22.3/src/devices/grolj4/lj4_font.man	2015-04-23 20:57:03.000000000 +0300
@@ -6,7 +6,7 @@
 .
 .\" license
 .de co
-Copyright \[co] 2004-2014 Free Software Foundation, Inc.
+Copyright \(co 2004-2014 Free Software Foundation, Inc.
 
 Permission is granted to make and distribute verbatim copies of
 this manual provided the copyright notice and this permission notice
diff -Nuar groff-1.22.3.old/src/devices/grolj4/Makefile.sub groff-1.22.3/src/devices/grolj4/Makefile.sub
--- groff-1.22.3.old/src/devices/grolj4/Makefile.sub	2014-11-04 10:38:35.274523384 +0200
+++ groff-1.22.3/src/devices/grolj4/Makefile.sub	1970-01-01 02:00:00.000000000 +0200
@@ -1,39 +0,0 @@
-# Makefile.sub for `grolj4'
-#
-# File position: <groff-source>/src/devices/grolj4/Makefile.sub
-#
-# Copyright (C) 2014  Free Software Foundation, Inc.
-#
-# This file is part of `font utf8' which is part of `groff'.
-#
-# `groff' is free software; you can redistribute it and/or modify it
-# under the terms of the GNU General Public License as published by
-# the Free Software Foundation, either version 2 of the License, or
-# (at your option) any later version.
-#
-# `groff' is distributed in the hope that it will be useful, but
-# WITHOUT ANY WARRANTY; without even the implied warranty of
-# MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the GNU
-# General Public License for more details.
-#
-# You should have received a copy of the GNU General Public License
-# along with this program. If not, see
-# <http://www.gnu.org/licenses/gpl-2.0.html>.
-#
-########################################################################
-
-PROG=grolj4$(EXEEXT)
-MAN1=grolj4.n
-MAN5=lj4_font.n
-XLIBS=$(LIBDRIVER) $(LIBGROFF) $(LIBGNU)
-MLIB=$(LIBM)
-OBJS=lj4.$(OBJEXT)
-CCSRCS=$(srcdir)/lj4.cpp
-
-########################################################################
-# Emacs settings
-########################################################################
-#
-# Local Variables:
-# mode: makefile
-# End:
diff -Nuar groff-1.22.3.old/src/devices/gropdf/gropdf.am groff-1.22.3/src/devices/gropdf/gropdf.am
--- groff-1.22.3.old/src/devices/gropdf/gropdf.am	1970-01-01 02:00:00.000000000 +0200
+++ groff-1.22.3/src/devices/gropdf/gropdf.am	2015-04-23 20:57:03.000000000 +0300
@@ -0,0 +1,49 @@
+# Copyright (C) 2011-2014
+#      Free Software Foundation, Inc.
+#  Original Makefile.sub written by Deri James <deri@chuzzlewit.demon.co.uk>.
+#  Automake migration by Bertrand Garrigues
+# 
+# This file is part of groff.
+#
+# groff is free software; you can redistribute it and/or modify it under
+# the terms of the GNU General Public License as published by the Free
+# Software Foundation, either version 3 of the License, or
+# (at your option) any later version.
+#
+# groff is distributed in the hope that it will be useful, but WITHOUT ANY
+# WARRANTY; without even the implied warranty of MERCHANTABILITY or
+# FITNESS FOR A PARTICULAR PURPOSE.  See the GNU General Public License
+# for more details.
+#
+# You should have received a copy of the GNU General Public License
+# along with this program. If not, see <http://www.gnu.org/licenses/>.
+
+gropdf_dir = $(top_srcdir)/src/devices/gropdf
+
+bin_SCRIPTS += gropdf pdfmom
+EXTRA_DIST += \
+  src/devices/gropdf/TODO \
+  src/devices/gropdf/gropdf.pl \
+  src/devices/gropdf/pdfmom.pl \
+  src/devices/gropdf/gropdf.man \
+  src/devices/gropdf/pdfmom.man
+
+man1_MANS += \
+  src/devices/gropdf/gropdf.n \
+  src/devices/gropdf/pdfmom.n
+
+gropdf: $(gropdf_dir)/gropdf.pl $(SH_DEPS_SED_SCRIPT)
+	$(RM) $@
+	sed -f $(SH_DEPS_SED_SCRIPT) \
+	    -e "s|[@]VERSION[@]|$(VERSION)|" \
+	    -e "s|[@]PERL[@]|$(PERL)|" \
+	    -e "s|[@]GROFF_FONT_DIR[@]|$(fontpath)|" \
+	    -e "s|[@]RT_SEP[@]|$(RT_SEP)|" $(gropdf_dir)/gropdf.pl >$@
+	chmod +x $@
+
+pdfmom: $(gropdf_dir)/pdfmom.pl $(SH_DEPS_SED_SCRIPT)
+	$(RM) $@
+	sed -f $(SH_DEPS_SED_SCRIPT) \
+	    -e "s|[@]VERSION[@]|$(VERSION)|" \
+	    -e "s|[@]PERL[@]|$(PERL)|" $(gropdf_dir)/pdfmom.pl >$@
+	chmod +x $@
diff -Nuar groff-1.22.3.old/src/devices/gropdf/gropdf.man groff-1.22.3/src/devices/gropdf/gropdf.man
--- groff-1.22.3.old/src/devices/gropdf/gropdf.man	2014-11-04 10:38:35.319522822 +0200
+++ groff-1.22.3/src/devices/gropdf/gropdf.man	2015-04-23 20:57:03.000000000 +0300
@@ -4,6 +4,10 @@
 gropdf \- PDF driver for groff
 .
 .
+.do nr groff_C \n[.C]
+.cp 0
+.
+.
 .\" license
 .de co
 Copyright \[co] 2011-2014 Free Software Foundation, Inc.
@@ -994,7 +998,7 @@
 Foo-Bar-Bold.pfa is \[oq]XY-Foo-Bar-Bold\[cq] (the PS font name is
 stored in the
 .B internalname
-field in the \[oq]FBB\[cq] file) and belongs to foundry \[oq]F\[]cq]
+field in the \[oq]FBB\[cq] file) and belongs to foundry \[oq]F\[cq]
 thus the following line should be added to \[oq]download\[cq]:
 .
 .RS
@@ -1103,6 +1107,9 @@
 .co
 .
 .
+.cp \n[groff_C]
+.
+.
 .\" Local Variables:
 .\" mode: nroff
 .\" End:
diff -Nuar groff-1.22.3.old/src/devices/gropdf/gropdf.pl groff-1.22.3/src/devices/gropdf/gropdf.pl
--- groff-1.22.3.old/src/devices/gropdf/gropdf.pl	2014-11-04 10:38:35.319522822 +0200
+++ groff-1.22.3/src/devices/gropdf/gropdf.pl	2015-04-23 20:57:03.000000000 +0300
@@ -2,8 +2,8 @@
 #
 #	gropdf		: PDF post processor for groff
 #
-# Copyright (C) 2011-2014  Free Software Foundation, Inc.
-#      Written by Deri James <deri@chuzzlewit.demon.co.uk>
+# Copyright (C) 2011-2015 Free Software Foundation, Inc.
+#      Written by Deri James <deri@chuzzlewit.myzen.co.uk>
 #
 # This file is part of groff.
 #
@@ -22,7 +22,24 @@
 
 use strict;
 use Getopt::Long qw(:config bundling);
-use Compress::Zlib;
+
+my $gotzlib=0;
+
+my $rc = eval
+{
+  require Compress::Zlib;
+  Compress::Zlib->import();
+  1;
+};
+
+if($rc)
+{
+  $gotzlib=1;
+}
+else
+{
+    Msg(0,"Perl module Compress::Zlib not available - cannot compress this pdf");
+}
 
 my %cfg;
 
@@ -465,7 +482,7 @@
 sub PDFDate
 {
     my $dt=shift;
-    return(sprintf("D:%04d%02d%02d%02d%02d%02d% +02d'00'",$dt->[5]+1900,$dt->[4]+1,$dt->[3],$dt->[2],$dt->[1],$dt->[0],( localtime time() + 3600*( 12 - (gmtime)[2] ) )[2] - 12));
+    return(sprintf("D:%04d%02d%02d%02d%02d%02d%+03d'00'",$dt->[5]+1900,$dt->[4]+1,$dt->[3],$dt->[2],$dt->[1],$dt->[0],( localtime time() + 3600*( 12 - (gmtime)[2] ) )[2] - 12));
 }
 
 sub ToPoints
@@ -767,7 +784,10 @@
 		}
 		elsif ($pdfmark=~m/(.+) \/OUT/)
 		{
-		    my @xwds=split(' ',"<< $1 >>");
+		    my $t=$1;
+		    $t=~s/\\\) /\\\\\) /g;
+		    $t=~s/\\e/\\\\/g;
+		    my @xwds=split(' ',"<< $t >>");
 		    my $out=ParsePDFValue(\@xwds);
 
 		    my $this=[$out,[]];
@@ -1404,7 +1424,7 @@
 	    sysseek(PD,$o->{STREAMPOS}->[0],0);
 	    Msg(0,'Failed to read all the stream') if $l != sysread(PD,$o->{STREAM},$l);
 
-	    if (exists($o->{OBJ}->{'Filter'}) and $o->{OBJ}->{'Filter'} eq '/FlateDecode')
+	    if ($gotzlib and exists($o->{OBJ}->{'Filter'}) and $o->{OBJ}->{'Filter'} eq '/FlateDecode')
 	    {
 		$o->{STREAM}=Compress::Zlib::uncompress($o->{STREAM});
 		delete($o->{OBJ }->{'Filter'});
@@ -1889,7 +1909,7 @@
     $obj[$ono]->{XREF}=$fct;
     if (exists($obj[$ono]->{STREAM}))
     {
-	if (!$debug && !exists($obj[$ono]->{DATA}->{'Filter'}))
+	if ($gotzlib && !$debug && !exists($obj[$ono]->{DATA}->{'Filter'}))
 	{
 	    $obj[$ono]->{STREAM}=Compress::Zlib::compress($obj[$ono]->{STREAM});
 	    $obj[$ono]->{DATA}->{'Filter'}=['/FlateDecode'];
@@ -2121,14 +2141,31 @@
 			{'Type' => '/Font',
 			'Subtype' => '/Type1',
 			'BaseFont' => '/'.$fnt{internalname},
+			'Widths' => $fnt{WID},
+			'FirstChar' => 0,
+			'LastChar' => $lastchr,
 			'Encoding' => BuildObj($objct+1,
 				    {'Type' => '/Encoding',
 				    'Differences' => $fnt{GNO}
 				    }
-				    )
+				    ),
+			'FontDescriptor' => BuildObj($objct+2,
+					{'Type' => '/FontDescriptor',
+					'FontName' => '/'.$fnt{internalname},
+					'Flags' => $t1flags,
+					'FontBBox' => \@fntbbox,
+					'ItalicAngle' => $slant,
+					'Ascent' => $ascent,
+					'Descent' => $fntbbox[1],
+					'CapHeight' => $capheight,
+					'StemV' => 0,
+					'CharSet' => "($charset)",
+					}
+					)
 			}
 			);
-	$objct+=1;
+
+	$objct+=2;
 	$fontlst{$fontno}->{NM}='/F'.$fontno;
 	$pages->{'Resources'}->{'Font'}->{'F'.$fontno}=$fontlst{$fontno}->{OBJ};
 	$fontlst{$fontno}->{FNT}=\%fnt;
@@ -3029,6 +3066,7 @@
     my $txt=shift;
     my $w=0;
     my $ck=0;
+    $txt=~s/^\\(\d\d\d)/chr($1)/e;
 
     foreach my $c (split('',$txt))
     {
@@ -3223,7 +3261,7 @@
     {
 	$fnt->{GNM}->{$chnm}=$unused++;
 	$fnt->{GNO}->[$unused]=$fnt->{GNO}->[$ch+1];
-	$fnt->{WID}->[$unused]=$fnt->{WID}->[$ch+1];
+	$fnt->{WID}->[$unused]=$fnt->{WID}->[$ch];
 	$ch=$unused-1;
 	return($ch);
     }
diff -Nuar groff-1.22.3.old/src/devices/gropdf/Makefile.sub groff-1.22.3/src/devices/gropdf/Makefile.sub
--- groff-1.22.3.old/src/devices/gropdf/Makefile.sub	2014-11-04 10:38:35.319522822 +0200
+++ groff-1.22.3/src/devices/gropdf/Makefile.sub	1970-01-01 02:00:00.000000000 +0200
@@ -1,75 +0,0 @@
-# Makefile.sub for `gropdf'
-#
-# File position: <groff-source>/src/devices/gropbf/Makefile.sub
-#
-# Copyright (C) 2011-2014  Free Software Foundation, Inc.
-#      Written by Deri James <deri@chuzzlewit.demon.co.uk>
-#
-# This file is part of groff.
-#
-# groff is free software; you can redistribute it and/or modify it under
-# the terms of the GNU General Public License as published by the Free
-# Software Foundation, either version 3 of the License, or
-# (at your option) any later version.
-#
-# groff is distributed in the hope that it will be useful, but WITHOUT ANY
-# WARRANTY; without even the implied warranty of MERCHANTABILITY or
-# FITNESS FOR A PARTICULAR PURPOSE.  See the GNU General Public License
-# for more details.
-#
-# You should have received a copy of the GNU General Public License
-# along with this program. If not, see <http://www.gnu.org/licenses/>.
-#
-########################################################################
-
-MAN1=\
-  gropdf.n \
-  pdfmom.n
-
-CMDFILES=\
-  gropdf \
-  pdfmom
-
-MOSTLYCLEANADD=\
-  gropdf \
-  pdfmom \
-  $(MAN1)
-
-RM=rm -f
-
-all: gropdf pdfmom
-
-
-gropdf: gropdf.pl $(SH_DEPS_SED_SCRIPT)
-	$(RM) $@
-	sed -f $(SH_DEPS_SED_SCRIPT) \
-	    -e "s|@VERSION@|$(version)$(revision)|" \
-	    -e "s|@PERL@|$(PERL)|" \
-	    -e "s|@GROFF_FONT_DIR@|$(fontpath)|" \
-	    -e "s|@RT_SEP@|$(RT_SEP)|" $(srcdir)/gropdf.pl >$@
-	chmod +x $@
-
-pdfmom: pdfmom.pl $(SH_DEPS_SED_SCRIPT)
-	$(RM) $@
-	sed -f $(SH_DEPS_SED_SCRIPT) \
-	    -e "s|@VERSION@|$(version)$(revision)|" \
-	    -e "s|@PERL@|$(PERL)|" $(srcdir)/pdfmom.pl >$@
-	chmod +x $@
-
-install_data:
-	-test -d $(DESTDIR)$(bindir) || $(mkinstalldirs) $(DESTDIR)$(bindir)
-	for f in $(CMDFILES); do \
-	  $(RM) $(DESTDIR)$(bindir)/$$f; \
-	  $(INSTALL_SCRIPT) $$f $(DESTDIR)$(bindir)/$$f; \
-	done
-
-uninstall_sub:
-	-for f in $(CMDFILES); do $(RM) $(DESTDIR)$(bindir)/$$f; done
-
-########################################################################
-# Emacs settings
-########################################################################
-#
-# Local Variables:
-# mode: makefile
-# End:
diff -Nuar groff-1.22.3.old/src/devices/gropdf/pdfmom.man groff-1.22.3/src/devices/gropdf/pdfmom.man
--- groff-1.22.3.old/src/devices/gropdf/pdfmom.man	2014-11-04 10:38:35.319522822 +0200
+++ groff-1.22.3/src/devices/gropdf/pdfmom.man	2015-04-23 20:57:03.000000000 +0300
@@ -8,7 +8,7 @@
 .\" --------------------------------------------------------------------
 .
 .de co
-Copyright \[co] 2012-2014 Free Software Foundation, Inc.
+Copyright \(co 2012-2014 Free Software Foundation, Inc.
 
 Permission is granted to make and distribute verbatim copies of
 this manual provided the copyright notice and this permission notice
@@ -77,7 +77,7 @@
 .B \-Tpdf
 option (which is the default),
 .B pdfmom
-processes files using groff\[aq]s native PDF driver,
+processes files using groff\(aqs native PDF driver,
 .BR gropdf .
 .
 If
@@ -85,7 +85,7 @@
 is given, processing is passed over to
 .BR pdfroff ,
 which uses
-.BR groff \[aq]s
+.BR groff \(aqs
 PostScript driver.
 .
 In either case, multiple runs of the source file are peformed in
@@ -144,7 +144,7 @@
 .P
 .RS 2
 \&.\|.\|.:
-.B can\[aq]t transparently output node at top level
+.B can\(aqt transparently output node at top level
 .RE
 .
 .P
diff -Nuar groff-1.22.3.old/src/devices/grops/.gitignore groff-1.22.3/src/devices/grops/.gitignore
--- groff-1.22.3.old/src/devices/grops/.gitignore	1970-01-01 02:00:00.000000000 +0200
+++ groff-1.22.3/src/devices/grops/.gitignore	2015-04-23 20:57:03.000000000 +0300
@@ -0,0 +1,3 @@
+Makefile.dep
+grops
+grops.n
diff -Nuar groff-1.22.3.old/src/devices/grops/grops.am groff-1.22.3/src/devices/grops/grops.am
--- groff-1.22.3.old/src/devices/grops/grops.am	1970-01-01 02:00:00.000000000 +0200
+++ groff-1.22.3/src/devices/grops/grops.am	2015-04-23 20:57:03.000000000 +0300
@@ -0,0 +1,32 @@
+# Copyright (C) 2014
+#      Free Software Foundation, Inc.
+# 
+# This file is part of groff.
+#
+# groff is free software; you can redistribute it and/or modify it under
+# the terms of the GNU General Public License as published by the Free
+# Software Foundation, either version 3 of the License, or
+# (at your option) any later version.
+#
+# groff is distributed in the hope that it will be useful, but WITHOUT ANY
+# WARRANTY; without even the implied warranty of MERCHANTABILITY or
+# FITNESS FOR A PARTICULAR PURPOSE.  See the GNU General Public License
+# for more details.
+#
+# You should have received a copy of the GNU General Public License
+# along with this program. If not, see <http://www.gnu.org/licenses/>.
+
+bin_PROGRAMS += grops
+grops_SOURCES = \
+  src/devices/grops/ps.cpp \
+  src/devices/grops/psrm.cpp \
+  src/devices/grops/ps.h
+grops_LDADD = $(LIBM) \
+  libdriver.a \
+  libgroff.a \
+  lib/libgnu.a
+man1_MANS += src/devices/grops/grops.n
+EXTRA_DIST += \
+  src/devices/grops/grops.man \
+  src/devices/grops/psfig.diff \
+  src/devices/grops/TODO
diff -Nuar groff-1.22.3.old/src/devices/grops/grops.man groff-1.22.3/src/devices/grops/grops.man
--- groff-1.22.3.old/src/devices/grops/grops.man	2014-11-04 10:38:35.259523572 +0200
+++ groff-1.22.3/src/devices/grops/grops.man	2015-04-23 20:57:03.000000000 +0300
@@ -3,6 +3,10 @@
 grops \- PostScript driver for groff
 .
 .
+.do nr groff_C \n[.C]
+.cp 0
+.
+.
 .\" license
 .de co
 Copyright \[co] 1989-2014 Free Software Foundation, Inc.
@@ -1494,6 +1498,9 @@
 .co
 .
 .
+.cp \n[groff_C]
+.
+.
 .\" Local Variables:
 .\" mode: nroff
 .\" End:
diff -Nuar groff-1.22.3.old/src/devices/grops/Makefile.sub groff-1.22.3/src/devices/grops/Makefile.sub
--- groff-1.22.3.old/src/devices/grops/Makefile.sub	2014-11-04 10:38:35.260523559 +0200
+++ groff-1.22.3/src/devices/grops/Makefile.sub	1970-01-01 02:00:00.000000000 +0200
@@ -1,44 +0,0 @@
-# Makefile.sub for `grops'
-#
-# File position: <groff-source>/src/devices/grops/Makefile.sub
-#
-# Copyright (C) 2014  Free Software Foundation, Inc.
-#
-# This file is part of `font utf8' which is part of `groff'.
-#
-# `groff' is free software; you can redistribute it and/or modify it
-# under the terms of the GNU General Public License as published by
-# the Free Software Foundation, either version 2 of the License, or
-# (at your option) any later version.
-#
-# `groff' is distributed in the hope that it will be useful, but
-# WITHOUT ANY WARRANTY; without even the implied warranty of
-# MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the GNU
-# General Public License for more details.
-#
-# You should have received a copy of the GNU General Public License
-# along with this program. If not, see
-# <http://www.gnu.org/licenses/gpl-2.0.html>.
-#
-########################################################################
-
-PROG=grops$(EXEEXT)
-MAN1=grops.n
-XLIBS=$(LIBDRIVER) $(LIBGROFF) $(LIBGNU)
-MLIB=$(LIBM)
-OBJS=\
-  ps.$(OBJEXT) \
-  psrm.$(OBJEXT)
-CCSRCS=\
-  $(srcdir)/ps.cpp \
-  $(srcdir)/psrm.cpp
-HDRS=\
-  $(srcdir)/ps.h
-
-########################################################################
-# Emacs settings
-########################################################################
-#
-# Local Variables:
-# mode: makefile
-# End:
diff -Nuar groff-1.22.3.old/src/devices/grotty/.gitignore groff-1.22.3/src/devices/grotty/.gitignore
--- groff-1.22.3.old/src/devices/grotty/.gitignore	1970-01-01 02:00:00.000000000 +0200
+++ groff-1.22.3/src/devices/grotty/.gitignore	2015-04-23 20:57:03.000000000 +0300
@@ -0,0 +1,3 @@
+Makefile.dep
+grotty
+grotty.n
diff -Nuar groff-1.22.3.old/src/devices/grotty/grotty.am groff-1.22.3/src/devices/grotty/grotty.am
--- groff-1.22.3.old/src/devices/grotty/grotty.am	1970-01-01 02:00:00.000000000 +0200
+++ groff-1.22.3/src/devices/grotty/grotty.am	2015-04-23 20:57:03.000000000 +0300
@@ -0,0 +1,28 @@
+# Copyright (C) 2014
+#      Free Software Foundation, Inc.
+# 
+# This file is part of groff.
+#
+# groff is free software; you can redistribute it and/or modify it under
+# the terms of the GNU General Public License as published by the Free
+# Software Foundation, either version 3 of the License, or
+# (at your option) any later version.
+#
+# groff is distributed in the hope that it will be useful, but WITHOUT ANY
+# WARRANTY; without even the implied warranty of MERCHANTABILITY or
+# FITNESS FOR A PARTICULAR PURPOSE.  See the GNU General Public License
+# for more details.
+#
+# You should have received a copy of the GNU General Public License
+# along with this program. If not, see <http://www.gnu.org/licenses/>.
+
+bin_PROGRAMS += grotty
+grotty_SOURCES = src/devices/grotty/tty.cpp
+grotty_LDADD = $(LIBM) \
+  libdriver.a \
+  libgroff.a \
+  lib/libgnu.a
+man1_MANS += src/devices/grotty/grotty.n
+EXTRA_DIST += \
+  src/devices/grotty/grotty.man \
+  src/devices/grotty/TODO
diff -Nuar groff-1.22.3.old/src/devices/grotty/grotty.man groff-1.22.3/src/devices/grotty/grotty.man
--- groff-1.22.3.old/src/devices/grotty/grotty.man	2014-11-04 10:38:35.264523509 +0200
+++ groff-1.22.3/src/devices/grotty/grotty.man	2015-04-23 20:57:03.000000000 +0300
@@ -6,7 +6,7 @@
 .
 .\" license
 .de co
-Copyright \[co] 1989-2014 Free Software Foundation, Inc.
+Copyright \(co 1989-2014 Free Software Foundation, Inc.
 
 Permission is granted to make and distribute verbatim copies of
 this manual provided the copyright notice and this permission notice
diff -Nuar groff-1.22.3.old/src/devices/grotty/Makefile.sub groff-1.22.3/src/devices/grotty/Makefile.sub
--- groff-1.22.3.old/src/devices/grotty/Makefile.sub	2014-11-04 10:38:35.265523497 +0200
+++ groff-1.22.3/src/devices/grotty/Makefile.sub	1970-01-01 02:00:00.000000000 +0200
@@ -1,38 +0,0 @@
-# Makefile.sub for `grotty'
-#
-# File position: <groff-source>/src/devices/grotty/Makefile.sub
-#
-# Copyright (C) 2014  Free Software Foundation, Inc.
-#
-# This file is part of `font utf8' which is part of `groff'.
-#
-# `groff' is free software; you can redistribute it and/or modify it
-# under the terms of the GNU General Public License as published by
-# the Free Software Foundation, either version 2 of the License, or
-# (at your option) any later version.
-#
-# `groff' is distributed in the hope that it will be useful, but
-# WITHOUT ANY WARRANTY; without even the implied warranty of
-# MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the GNU
-# General Public License for more details.
-#
-# You should have received a copy of the GNU General Public License
-# along with this program. If not, see
-# <http://www.gnu.org/licenses/gpl-2.0.html>.
-#
-########################################################################
-
-PROG=grotty$(EXEEXT)
-MAN1=grotty.n
-XLIBS=$(LIBDRIVER) $(LIBGROFF) $(LIBGNU)
-MLIB=$(LIBM)
-OBJS=tty.$(OBJEXT)
-CCSRCS=$(srcdir)/tty.cpp
-
-########################################################################
-# Emacs settings
-########################################################################
-#
-# Local Variables:
-# mode: makefile
-# End:
diff -Nuar groff-1.22.3.old/src/devices/xditview/.gitignore groff-1.22.3/src/devices/xditview/.gitignore
--- groff-1.22.3.old/src/devices/xditview/.gitignore	1970-01-01 02:00:00.000000000 +0200
+++ groff-1.22.3/src/devices/xditview/.gitignore	2015-04-23 20:57:03.000000000 +0300
@@ -0,0 +1,4 @@
+Makefile.dep
+GXditview-ad.h
+gxditview.n
+gxditview
diff -Nuar groff-1.22.3.old/src/devices/xditview/gxditview.man groff-1.22.3/src/devices/xditview/gxditview.man
--- groff-1.22.3.old/src/devices/xditview/gxditview.man	2014-11-04 10:38:35.326522734 +0200
+++ groff-1.22.3/src/devices/xditview/gxditview.man	2015-04-23 20:57:03.000000000 +0300
@@ -8,7 +8,7 @@
 .\" --------------------------------------------------------------------
 .
 .de co
-Copyright \[co] 1989, Massachusetts Institute of Technology.
+Copyright \(co 1989, Massachusetts Institute of Technology.
 .br
 See
 .BR X (7)
diff -Nuar groff-1.22.3.old/src/devices/xditview/Makefile.sub groff-1.22.3/src/devices/xditview/Makefile.sub
--- groff-1.22.3.old/src/devices/xditview/Makefile.sub	2014-11-04 10:38:35.326522734 +0200
+++ groff-1.22.3/src/devices/xditview/Makefile.sub	1970-01-01 02:00:00.000000000 +0200
@@ -1,89 +0,0 @@
-# Makefile.sub for `xditview'
-#
-# File position: <groff-source>/src/devices/xditview/Makefile.sub
-#
-# Copyright (C) 2014 Free Software Foundation, Inc.
-#
-# This file is part of `font utf8' which is part of `groff'.
-#
-# `groff' is free software; you can redistribute it and/or modify it
-# under the terms of the GNU General Public License as published by
-# the Free Software Foundation, either version 2 of the License, or
-# (at your option) any later version.
-#
-# `groff' is distributed in the hope that it will be useful, but
-# WITHOUT ANY WARRANTY; without even the implied warranty of
-# MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the GNU
-# General Public License for more details.
-#
-# You should have received a copy of the GNU General Public License
-# along with this program. If not, see
-# <http://www.gnu.org/licenses/gpl-2.0.html>.
-#
-########################################################################
-
-PROG=gxditview$(EXEEXT)
-MAN1=gxditview.n
-MLIB=$(LIBM)
-XLIBS=$(LIBXUTIL)
-EXTRA_CFLAGS=$(X_CFLAGS) -Dlint
-EXTRA_LDFLAGS=$(X_LIBS) $(X_PRE_LIBS) -lXaw -lXmu -lXt -lX11 $(X_EXTRA_LIBS)
-OBJS=\
-  device.$(OBJEXT) \
-  draw.$(OBJEXT) \
-  Dvi.$(OBJEXT) \
-  font.$(OBJEXT) \
-  lex.$(OBJEXT) \
-  page.$(OBJEXT) \
-  parse.$(OBJEXT) \
-  xditview.$(OBJEXT)
-CSRCS=\
-  $(srcdir)/device.c \
-  $(srcdir)/draw.c \
-  $(srcdir)/Dvi.c \
-  $(srcdir)/font.c \
-  $(srcdir)/lex.c \
-  $(srcdir)/page.c \
-  $(srcdir)/parse.c \
-  $(srcdir)/xditview.c
-HDRS=\
-  $(srcdir)/device.h \
-  $(srcdir)/Dvi.h \
-  $(srcdir)/DviP.h \
-  $(srcdir)/Menu.h
-GENHDRS=GXditview-ad.h
-RM=rm -f
-
-all depend: $(GENHDRS)
-
-GXditview-ad.h: $(srcdir)/GXditview.ad
-	@echo Making $@
-	$(SHELL) $(srcdir)/ad2c $(srcdir)/GXditview.ad > $@
-
-install_data: $(srcdir)/GXditview.ad $(srcdir)/GXditview-color.ad
-	-test -d $(DESTDIR)$(appresdir) \
-	  || $(mkinstalldirs) $(DESTDIR)$(appresdir)
-	if test -f $(DESTDIR)$(appresdir)/GXditview; then \
-	  mv $(DESTDIR)$(appresdir)/GXditview \
-	    $(DESTDIR)$(appresdir)/GXditview.old; \
-	fi
-	if test -f $(DESTDIR)$(appresdir)/GXditview-color; then \
-	  mv $(DESTDIR)$(appresdir)/GXditview-color \
-	    $(DESTDIR)$(appresdir)/GXditview-color.old; \
-	fi
-	$(INSTALL_DATA) $(srcdir)/GXditview.ad \
-	  $(DESTDIR)$(appresdir)/GXditview
-	$(INSTALL_DATA) $(srcdir)/GXditview-color.ad \
-	  $(DESTDIR)$(appresdir)/GXditview-color
-
-uninstall_sub:
-	$(RM) $(DESTDIR)$(appresdir)/GXditview
-	$(RM) $(DESTDIR)$(appresdir)/GXditview-color
-
-########################################################################
-# Emacs settings
-########################################################################
-#
-# Local Variables:
-# mode: makefile
-# End:
diff -Nuar groff-1.22.3.old/src/devices/xditview/xditview.am groff-1.22.3/src/devices/xditview/xditview.am
--- groff-1.22.3.old/src/devices/xditview/xditview.am	1970-01-01 02:00:00.000000000 +0200
+++ groff-1.22.3/src/devices/xditview/xditview.am	2015-04-23 20:57:03.000000000 +0300
@@ -0,0 +1,108 @@
+# Copyright (C) 2014
+#      Free Software Foundation, Inc.
+# 
+# This file is part of groff.
+#
+# groff is free software; you can redistribute it and/or modify it under
+# the terms of the GNU General Public License as published by the Free
+# Software Foundation, either version 3 of the License, or
+# (at your option) any later version.
+#
+# groff is distributed in the hope that it will be useful, but WITHOUT ANY
+# WARRANTY; without even the implied warranty of MERCHANTABILITY or
+# FITNESS FOR A PARTICULAR PURPOSE.  See the GNU General Public License
+# for more details.
+#
+# You should have received a copy of the GNU General Public License
+# along with this program. If not, see <http://www.gnu.org/licenses/>.
+
+GXDITVIEWSOURCES = \
+  src/devices/xditview/device.c \
+  src/devices/xditview/draw.c \
+  src/devices/xditview/Dvi.c \
+  src/devices/xditview/font.c \
+  src/devices/xditview/lex.c \
+  src/devices/xditview/page.c \
+  src/devices/xditview/parse.c \
+  src/devices/xditview/xditview.c \
+  src/devices/xditview/device.h \
+  src/devices/xditview/DviP.h \
+  src/devices/xditview/Menu.h \
+  src/devices/xditview/Dvi.h
+
+if WITHOUT_X11
+EXTRA_DIST += $(GXDITVIEWSOURCES)
+else
+xditview_srcdir = $(top_srcdir)/src/devices/xditview
+bin_PROGRAMS += gxditview
+gxditview_CPPFLAGS = $(AM_CPPFLAGS) $(X_CFLAGS) -Dlint \
+  -I$(top_builddir)/src/devices/xditview
+gxditview_LDADD = $(X_LIBS) $(X_PRE_LIBS) -lXaw -lXmu -lXt -lX11 \
+  $(X_EXTRA_LIBS) $(LIBM) libxutil.a
+XDITVIEW_GENHDRS = src/devices/xditview/GXditview-ad.h
+gxditview_SOURCES = $(GXDITVIEWSOURCES)
+nodist_gxditview_SOURCES = $(XDITVIEW_GENHDRS)
+CLEANFILES += $(XDITVIEW_GENHDRS)
+
+man1_MANS += src/devices/xditview/gxditview.n
+
+# Because we defined gxditview_CPPFLAGS, automake renames all the xditview's 
+# objects, adding an "gxditview-" prefix. 
+src/devices/xditview/gxditview-device.$(OBJEXT): defs.h
+src/devices/xditview/gxditview-xditview.$(OBJEXT): $(XDITVIEW_GENHDRS)
+
+src/devices/xditview/GXditview-ad.h: $(xditview_srcdir)/GXditview.ad
+	@echo Making $@
+	$(SHELL) $(xditview_srcdir)/ad2c $(xditview_srcdir)/GXditview.ad > $@
+endif
+
+EXTRA_DIST += \
+  src/devices/xditview/ad2c \
+  src/devices/xditview/ChangeLog \
+  src/devices/xditview/DESC.in \
+  src/devices/xditview/FontMap \
+  src/devices/xditview/GXditview-color.ad \
+  src/devices/xditview/GXditview.ad \
+  src/devices/xditview/README \
+  src/devices/xditview/TODO \
+  src/devices/xditview/gray1.bm \
+  src/devices/xditview/gray2.bm \
+  src/devices/xditview/gray3.bm \
+  src/devices/xditview/gray4.bm \
+  src/devices/xditview/gray5.bm \
+  src/devices/xditview/gray6.bm \
+  src/devices/xditview/gray7.bm \
+  src/devices/xditview/gray8.bm \
+  src/devices/xditview/xdit.bm \
+  src/devices/xditview/xdit_mask.bm \
+  src/devices/xditview/gxditview.man
+
+# Custom installation of GXditview.ad and GXditview-color.ad
+install-data-local: install_xditview
+uninstall-local: uninstall_xditview
+
+if WITHOUT_X11
+install_xditview:
+uninstall_xditview:
+else
+install_xditview: $(xditview_srcdir)/GXditview.ad $(xditview_srcdir)/GXditview-color.ad
+	-test -d $(DESTDIR)$(appresdir) \
+	  || $(mkinstalldirs) $(DESTDIR)$(appresdir)
+	if test -f $(DESTDIR)$(appresdir)/GXditview; then \
+	  mv $(DESTDIR)$(appresdir)/GXditview \
+	    $(DESTDIR)$(appresdir)/GXditview.old; \
+	fi
+	if test -f $(DESTDIR)$(appresdir)/GXditview-color; then \
+	  mv $(DESTDIR)$(appresdir)/GXditview-color \
+	    $(DESTDIR)$(appresdir)/GXditview-color.old; \
+	fi
+	$(INSTALL_DATA) $(xditview_srcdir)/GXditview.ad \
+	  $(DESTDIR)$(appresdir)/GXditview
+	$(INSTALL_DATA) $(xditview_srcdir)/GXditview-color.ad \
+	  $(DESTDIR)$(appresdir)/GXditview-color
+
+uninstall_xditview:
+	rm -f $(DESTDIR)$(appresdir)/GXditview
+	rm -f $(DESTDIR)$(appresdir)/GXditview-color
+
+endif
diff -Nuar groff-1.22.3.old/src/include/config.hin groff-1.22.3/src/include/config.hin
--- groff-1.22.3.old/src/include/config.hin	2014-11-04 10:38:35.160524810 +0200
+++ groff-1.22.3/src/include/config.hin	1970-01-01 02:00:00.000000000 +0200
@@ -1,292 +0,0 @@
-/* src/include/config.hin.  Generated from configure.ac by autoheader.  */
-
-/* Define if building universal (internal helper macro) */
-#undef AC_APPLE_UNIVERSAL_BUILD
-
-/* Define if your C++ doesn't understand `delete []'. */
-#undef ARRAY_DELETE_NEEDS_SIZE
-
-/* Define if you have a C++ <inttypes.h>. */
-#undef HAVE_CC_INTTYPES_H
-
-/* Define if you have a C++ <limits.h>. */
-#undef HAVE_CC_LIMITS_H
-
-/* Define if you have a C++ <osfcn.h>. */
-#undef HAVE_CC_OSFCN_H
-
-/* Define to 1 if you have the declaration of `getc_unlocked', and to 0 if you
-   don't. */
-#undef HAVE_DECL_GETC_UNLOCKED
-
-/* Define to 1 if you have the declaration of `sys_siglist', and to 0 if you
-   don't. */
-#undef HAVE_DECL_SYS_SIGLIST
-
-/* Define to 1 if you have the <direct.h> header file. */
-#undef HAVE_DIRECT_H
-
-/* Define to 1 if you have the <dirent.h> header file. */
-#undef HAVE_DIRENT_H
-
-/* Define to 1 if you have the `fmod' function. */
-#undef HAVE_FMOD
-
-/* Define to 1 if you have the `getcwd' function. */
-#undef HAVE_GETCWD
-
-/* Define to 1 if you have the `getpagesize' function. */
-#undef HAVE_GETPAGESIZE
-
-/* Define to 1 if you have the `gettimeofday' function. */
-#undef HAVE_GETTIMEOFDAY
-
-/* Define if you have the iconv() function and it works. */
-#undef HAVE_ICONV
-
-/* Define to 1 if you have the <inttypes.h> header file. */
-#undef HAVE_INTTYPES_H
-
-/* Define to 1 if you have the `isatty' function. */
-#undef HAVE_ISATTY
-
-/* Define to 1 if you have the `kill' function. */
-#undef HAVE_KILL
-
-/* Define if you have <langinfo.h> and nl_langinfo(CODESET). */
-#undef HAVE_LANGINFO_CODESET
-
-/* Define to 1 if you have the <limits.h> header file. */
-#undef HAVE_LIMITS_H
-
-/* Define to 1 if you have the <math.h> header file. */
-#undef HAVE_MATH_H
-
-/* Define to 1 if you have the <memory.h> header file. */
-#undef HAVE_MEMORY_H
-
-/* Define if you have mkstemp(). */
-#undef HAVE_MKSTEMP
-
-/* Define to 1 if you have a working `mmap' system call. */
-#undef HAVE_MMAP
-
-/* Define to 1 if you have the <process.h> header file. */
-#undef HAVE_PROCESS_H
-
-/* Define to 1 if you have the `putenv' function. */
-#undef HAVE_PUTENV
-
-/* Define to 1 if you have the `rename' function. */
-#undef HAVE_RENAME
-
-/* Define to 1 if you have the `setlocale' function. */
-#undef HAVE_SETLOCALE
-
-/* Define to 1 if you have the `snprintf' function. */
-#undef HAVE_SNPRINTF
-
-/* Define to 1 if you have the <stddef.h> header file. */
-#undef HAVE_STDDEF_H
-
-/* Define to 1 if you have the <stdint.h> header file. */
-#undef HAVE_STDINT_H
-
-/* Define to 1 if you have the <stdlib.h> header file. */
-#undef HAVE_STDLIB_H
-
-/* Define to 1 if you have the `strcasecmp' function. */
-#undef HAVE_STRCASECMP
-
-/* Define to 1 if you have the `strerror' function. */
-#undef HAVE_STRERROR
-
-/* Define to 1 if you have the <strings.h> header file. */
-#undef HAVE_STRINGS_H
-
-/* Define to 1 if you have the <string.h> header file. */
-#undef HAVE_STRING_H
-
-/* Define to 1 if you have the `strncasecmp' function. */
-#undef HAVE_STRNCASECMP
-
-/* Define to 1 if you have the `strsep' function. */
-#undef HAVE_STRSEP
-
-/* Define to 1 if you have the `strtol' function. */
-#undef HAVE_STRTOL
-
-/* Define if <math.h> defines struct exception. */
-#undef HAVE_STRUCT_EXCEPTION
-
-/* Define to 1 if you have the `symlink' function. */
-#undef HAVE_SYMLINK
-
-/* Define to 1 if you have the <sys/dir.h> header file. */
-#undef HAVE_SYS_DIR_H
-
-/* Define if you have sys_errlist in <errno.h>, <stdio.h>, or <stdlib.h>. */
-#undef HAVE_SYS_ERRLIST
-
-/* Define if you have sys_nerr in <errno.h>, <stdio.h>, or <stdio.h>. */
-#undef HAVE_SYS_NERR
-
-/* Define to 1 if you have the <sys/param.h> header file. */
-#undef HAVE_SYS_PARAM_H
-
-/* Define to 1 if you have the <sys/stat.h> header file. */
-#undef HAVE_SYS_STAT_H
-
-/* Define to 1 if you have the <sys/time.h> header file. */
-#undef HAVE_SYS_TIME_H
-
-/* Define to 1 if you have the <sys/types.h> header file. */
-#undef HAVE_SYS_TYPES_H
-
-/* Define to 1 if you have the <unistd.h> header file. */
-#undef HAVE_UNISTD_H
-
-/* Define to 1 if you have the `vsnprintf' function. */
-#undef HAVE_VSNPRINTF
-
-/* Define to 1 if O_NOATIME works. */
-#undef HAVE_WORKING_O_NOATIME
-
-/* Define to 1 if O_NOFOLLOW works. */
-#undef HAVE_WORKING_O_NOFOLLOW
-
-/* Define as const if the declaration of iconv() needs const. */
-#undef ICONV_CONST
-
-/* Define if the host's encoding is EBCDIC. */
-#undef IS_EBCDIC_HOST
-
-/* Define if localtime() takes a long * not a time_t *. */
-#undef LONG_FOR_TIME_T
-
-/* Define if your C++ doesn't declare gettimeofday(). */
-#undef NEED_DECLARATION_GETTIMEOFDAY
-
-/* Define if your C++ doesn't declare hypot(). */
-#undef NEED_DECLARATION_HYPOT
-
-/* Define if your C++ doesn't declare pclose(). */
-#undef NEED_DECLARATION_PCLOSE
-
-/* Define if your C++ doesn't declare popen(). */
-#undef NEED_DECLARATION_POPEN
-
-/* Define if your C++ doesn't declare putenv(). */
-#undef NEED_DECLARATION_PUTENV
-
-/* Define if your C++ doesn't declare rand(). */
-#undef NEED_DECLARATION_RAND
-
-/* Define if your C++ doesn't declare snprintf(). */
-#undef NEED_DECLARATION_SNPRINTF
-
-/* Define if your C++ doesn't declare srand(). */
-#undef NEED_DECLARATION_SRAND
-
-/* Define if your C++ doesn't declare strcasecmp(). */
-#undef NEED_DECLARATION_STRCASECMP
-
-/* Define if your C++ doesn't declare strncasecmp(). */
-#undef NEED_DECLARATION_STRNCASECMP
-
-/* Define if your C++ doesn't declare vfprintf(). */
-#undef NEED_DECLARATION_VFPRINTF
-
-/* Define if your C++ doesn't declare vsnprintf(). */
-#undef NEED_DECLARATION_VSNPRINTF
-
-/* Define to the address where bug reports for this package should be sent. */
-#undef PACKAGE_BUGREPORT
-
-/* Define to the full name of this package. */
-#undef PACKAGE_NAME
-
-/* Define to the full name and version of this package. */
-#undef PACKAGE_STRING
-
-/* Define to the one symbol short name of this package. */
-#undef PACKAGE_TARNAME
-
-/* Define to the home page for this package. */
-#undef PACKAGE_URL
-
-/* Define to the version of this package. */
-#undef PACKAGE_VERSION
-
-/* Define if the printer's page size is A4. */
-#undef PAGEA4
-
-/* Define as the return type of signal handlers (`int' or `void'). */
-#undef RETSIGTYPE
-
-/* Define if srand() returns void not int. */
-#undef RET_TYPE_SRAND_IS_VOID
-
-/* Define to 1 if you have the ANSI C header files. */
-#undef STDC_HEADERS
-
-/* Define if your C++ compiler uses a traditional (Reiser) preprocessor. */
-#undef TRADITIONAL_CPP
-
-/* Enable extensions on AIX 3, Interix.  */
-#ifndef _ALL_SOURCE
-# undef _ALL_SOURCE
-#endif
-/* Enable GNU extensions on systems that have them.  */
-#ifndef _GNU_SOURCE
-# undef _GNU_SOURCE
-#endif
-/* Enable threading extensions on Solaris.  */
-#ifndef _POSIX_PTHREAD_SEMANTICS
-# undef _POSIX_PTHREAD_SEMANTICS
-#endif
-/* Enable extensions on HP NonStop.  */
-#ifndef _TANDEM_SOURCE
-# undef _TANDEM_SOURCE
-#endif
-/* Enable general extensions on Solaris.  */
-#ifndef __EXTENSIONS__
-# undef __EXTENSIONS__
-#endif
-
-
-/* Define if the 0200 bit of the status returned by wait() indicates whether a
-   core image was produced for a process that was terminated by a signal. */
-#undef WCOREFLAG
-
-/* Define WORDS_BIGENDIAN to 1 if your processor stores words with the most
-   significant byte first (like Motorola and SPARC, unlike Intel). */
-#if defined AC_APPLE_UNIVERSAL_BUILD
-# if defined __BIG_ENDIAN__
-#  define WORDS_BIGENDIAN 1
-# endif
-#else
-# ifndef WORDS_BIGENDIAN
-#  undef WORDS_BIGENDIAN
-# endif
-#endif
-
-/* Define to 1 if the X Window System is missing or not being used. */
-#undef X_DISPLAY_MISSING
-
-/* Define to 1 if on MINIX. */
-#undef _MINIX
-
-/* Define to 2 if the system does not provide POSIX.1 features except with
-   this defined. */
-#undef _POSIX_1_SOURCE
-
-/* Define if -D_POSIX_SOURCE is necessary. */
-#undef _POSIX_SOURCE
-
-/* Define if you have ISC 3.x or 4.x. */
-#undef _SYSV3
-
-/* Define uintmax_t to `unsigned long' or `unsigned long long' if <inttypes.h>
-   does not exist. */
-#undef uintmax_t
diff -Nuar groff-1.22.3.old/src/include/.gitignore groff-1.22.3/src/include/.gitignore
--- groff-1.22.3.old/src/include/.gitignore	1970-01-01 02:00:00.000000000 +0200
+++ groff-1.22.3/src/include/.gitignore	2015-04-23 20:57:03.000000000 +0300
@@ -0,0 +1,2 @@
+config.h
+defs.h
diff -Nuar groff-1.22.3.old/src/include/include.am groff-1.22.3/src/include/include.am
--- groff-1.22.3.old/src/include/include.am	1970-01-01 02:00:00.000000000 +0200
+++ groff-1.22.3/src/include/include.am	2015-04-23 20:57:03.000000000 +0300
@@ -0,0 +1,42 @@
+# Automake rules for `include'
+#
+# File position: <groff-source>/src/include/include.am
+#
+# Copyright (C) 2014  Free Software Foundation, Inc.
+#
+# `groff' is free software; you can redistribute it and/or modify it
+# under the terms of the GNU General Public License as published by
+# the Free Software Foundation, either version 2 of the License, or
+# (at your option) any later version.
+#
+# `groff' is distributed in the hope that it will be useful, but
+# WITHOUT ANY WARRANTY; without even the implied warranty of
+# MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the GNU
+# General Public License for more details.
+#
+# You should have received a copy of the GNU General Public License
+# along with this program. If not, see
+# <http://www.gnu.org/licenses/gpl-2.0.html>.
+#
+########################################################################
+
+nodist_noinst_HEADERS = defs.h
+CLEANFILES += defs.h
+defs.h: config.status
+	@$(SHELL) $(top_srcdir)/gendef.sh defs.h \
+	"PROG_PREFIX=\"$(g)\"" \
+	"DEVICE=\"$(DEVICE)\"" \
+	"INSTALLPATH=\"$(prefix)\"" \
+	"BINPATH=\"$(bindir)\"" \
+	"FONTPATH=\"$(fontpath)\"" \
+	"MACROPATH=\"$(tmacpath)\"" \
+	"INDEX_SUFFIX=\"$(indexext)\"" \
+	"COMMON_WORDS_FILE=\"$(common_words_file)\"" \
+	"DEFAULT_INDEX_DIR=\"$(indexdir)\"" \
+	"DEFAULT_INDEX_NAME=\"$(indexname)\"" \
+	"DEFAULT_INDEX=\"$(indexdir)/$(indexname)\""
+
+dist-hook: dist_include
+dist_include:
+	chmod u+w $(distdir)/src/include
+	cp -f $(top_srcdir)/src/include/*.h $(distdir)/src/include
diff -Nuar groff-1.22.3.old/src/include/lf.h groff-1.22.3/src/include/lf.h
--- groff-1.22.3.old/src/include/lf.h	1970-01-01 02:00:00.000000000 +0200
+++ groff-1.22.3/src/include/lf.h	2015-04-23 20:57:03.000000000 +0300
@@ -0,0 +1,21 @@
+// -*- C++ -*-
+/* Copyright (C) 2014  Free Software Foundation, Inc.
+     Written by Werner Lemberg (wl@gnu.org)
+
+This file is part of groff.
+
+groff is free software; you can redistribute it and/or modify it under
+the terms of the GNU General Public License as published by the Free
+Software Foundation, either version 3 of the License, or
+(at your option) any later version.
+
+groff is distributed in the hope that it will be useful, but WITHOUT ANY
+WARRANTY; without even the implied warranty of MERCHANTABILITY or
+FITNESS FOR A PARTICULAR PURPOSE.  See the GNU General Public License
+for more details.
+
+You should have received a copy of the GNU General Public License
+along with this program. If not, see <http://www.gnu.org/licenses/>. */
+
+int interpret_lf_args(const char *p);
+void normalize_for_lf (string &fn);
diff -Nuar groff-1.22.3.old/src/include/lib.h groff-1.22.3/src/include/lib.h
--- groff-1.22.3.old/src/include/lib.h	2014-11-04 10:38:35.161524797 +0200
+++ groff-1.22.3/src/include/lib.h	2015-04-23 20:57:03.000000000 +0300
@@ -98,8 +98,6 @@
 size_t file_name_max(const char *fname);
 size_t path_name_max();
 
-int interpret_lf_args(const char *p);
-
 extern char invalid_char_table[];
 
 inline int invalid_input_char(int c)
diff -Nuar groff-1.22.3.old/src/include/Makefile.sub groff-1.22.3/src/include/Makefile.sub
--- groff-1.22.3.old/src/include/Makefile.sub	2014-11-04 10:38:35.161524797 +0200
+++ groff-1.22.3/src/include/Makefile.sub	1970-01-01 02:00:00.000000000 +0200
@@ -1,82 +0,0 @@
-# Makefile.sub for `include'
-#
-# File position: <groff-source>/src/include/Makefile.sub
-#
-# Copyright (C) 2014  Free Software Foundation, Inc.
-#
-# This file is part of `font utf8' which is part of `groff'.
-#
-# `groff' is free software; you can redistribute it and/or modify it
-# under the terms of the GNU General Public License as published by
-# the Free Software Foundation, either version 2 of the License, or
-# (at your option) any later version.
-#
-# `groff' is distributed in the hope that it will be useful, but
-# WITHOUT ANY WARRANTY; without even the implied warranty of
-# MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the GNU
-# General Public License for more details.
-#
-# You should have received a copy of the GNU General Public License
-# along with this program. If not, see
-# <http://www.gnu.org/licenses/gpl-2.0.html>.
-#
-########################################################################
-
-HDRS=\
-  assert.h \
-  cmap.h \
-  cset.h \
-  color.h \
-  device.h \
-  driver.h \
-  DviChar.h \
-  errarg.h \
-  error.h \
-  font.h \
-  geometry.h \
-  getopt.h \
-  getopt_int.h \
-  gettext.h \
-  htmlhint.h \
-  index.h \
-  lib.h \
-  macropath.h \
-  nonposix.h \
-  posix.h \
-  printer.h \
-  ptable.h \
-  refid.h \
-  relocate.h \
-  search.h \
-  searchpath.h \
-  stringclass.h \
-  symbol.h \
-  unicode.h \
-  XFontName.h
-GENHDRS=defs.h
-
-all depend: $(GENHDRS)
-
-defs.h: FORCE
-	@$(SHELL) $(top_srcdir)/gendef.sh defs.h \
-	"PROG_PREFIX=\"$(g)\"" \
-	"DEVICE=\"$(DEVICE)\"" \
-	"INSTALLPATH=\"$(prefix)\"" \
-	"BINPATH=\"$(bindir)\"" \
-	"FONTPATH=\"$(fontpath)\"" \
-	"MACROPATH=\"$(tmacpath)\"" \
-	"INDEX_SUFFIX=\"$(indexext)\"" \
-	"COMMON_WORDS_FILE=\"$(common_words_file)\"" \
-	"DEFAULT_INDEX_DIR=\"$(indexdir)\"" \
-	"DEFAULT_INDEX_NAME=\"$(indexname)\"" \
-	"DEFAULT_INDEX=\"$(indexdir)/$(indexname)\""
-
-FORCE:
-
-########################################################################
-# Emacs settings
-########################################################################
-#
-# Local Variables:
-# mode: makefile
-# End:
diff -Nuar groff-1.22.3.old/src/libs/gnulib/aclocal.m4 groff-1.22.3/src/libs/gnulib/aclocal.m4
--- groff-1.22.3.old/src/libs/gnulib/aclocal.m4	2014-11-04 10:38:35.674518384 +0200
+++ groff-1.22.3/src/libs/gnulib/aclocal.m4	1970-01-01 02:00:00.000000000 +0200
@@ -1,1174 +0,0 @@
-# generated automatically by aclocal 1.14 -*- Autoconf -*-
-
-# Copyright (C) 1996-2013 Free Software Foundation, Inc.
-
-# This file is free software; the Free Software Foundation
-# gives unlimited permission to copy and/or distribute it,
-# with or without modifications, as long as this notice is preserved.
-
-# This program is distributed in the hope that it will be useful,
-# but WITHOUT ANY WARRANTY, to the extent permitted by law; without
-# even the implied warranty of MERCHANTABILITY or FITNESS FOR A
-# PARTICULAR PURPOSE.
-
-m4_ifndef([AC_CONFIG_MACRO_DIRS], [m4_defun([_AM_CONFIG_MACRO_DIRS], [])m4_defun([AC_CONFIG_MACRO_DIRS], [_AM_CONFIG_MACRO_DIRS($@)])])
-m4_ifndef([AC_AUTOCONF_VERSION],
-  [m4_copy([m4_PACKAGE_VERSION], [AC_AUTOCONF_VERSION])])dnl
-m4_if(m4_defn([AC_AUTOCONF_VERSION]), [2.69],,
-[m4_warning([this file was generated for autoconf 2.69.
-You have another version of autoconf.  It may work, but is not guaranteed to.
-If you have problems, you may need to regenerate the build system entirely.
-To do so, use the procedure documented by the package, typically 'autoreconf'.])])
-
-# Copyright (C) 2002-2013 Free Software Foundation, Inc.
-#
-# This file is free software; the Free Software Foundation
-# gives unlimited permission to copy and/or distribute it,
-# with or without modifications, as long as this notice is preserved.
-
-# AM_AUTOMAKE_VERSION(VERSION)
-# ----------------------------
-# Automake X.Y traces this macro to ensure aclocal.m4 has been
-# generated from the m4 files accompanying Automake X.Y.
-# (This private macro should not be called outside this file.)
-AC_DEFUN([AM_AUTOMAKE_VERSION],
-[am__api_version='1.14'
-dnl Some users find AM_AUTOMAKE_VERSION and mistake it for a way to
-dnl require some minimum version.  Point them to the right macro.
-m4_if([$1], [1.14], [],
-      [AC_FATAL([Do not call $0, use AM_INIT_AUTOMAKE([$1]).])])dnl
-])
-
-# _AM_AUTOCONF_VERSION(VERSION)
-# -----------------------------
-# aclocal traces this macro to find the Autoconf version.
-# This is a private macro too.  Using m4_define simplifies
-# the logic in aclocal, which can simply ignore this definition.
-m4_define([_AM_AUTOCONF_VERSION], [])
-
-# AM_SET_CURRENT_AUTOMAKE_VERSION
-# -------------------------------
-# Call AM_AUTOMAKE_VERSION and AM_AUTOMAKE_VERSION so they can be traced.
-# This function is AC_REQUIREd by AM_INIT_AUTOMAKE.
-AC_DEFUN([AM_SET_CURRENT_AUTOMAKE_VERSION],
-[AM_AUTOMAKE_VERSION([1.14])dnl
-m4_ifndef([AC_AUTOCONF_VERSION],
-  [m4_copy([m4_PACKAGE_VERSION], [AC_AUTOCONF_VERSION])])dnl
-_AM_AUTOCONF_VERSION(m4_defn([AC_AUTOCONF_VERSION]))])
-
-# AM_AUX_DIR_EXPAND                                         -*- Autoconf -*-
-
-# Copyright (C) 2001-2013 Free Software Foundation, Inc.
-#
-# This file is free software; the Free Software Foundation
-# gives unlimited permission to copy and/or distribute it,
-# with or without modifications, as long as this notice is preserved.
-
-# For projects using AC_CONFIG_AUX_DIR([foo]), Autoconf sets
-# $ac_aux_dir to '$srcdir/foo'.  In other projects, it is set to
-# '$srcdir', '$srcdir/..', or '$srcdir/../..'.
-#
-# Of course, Automake must honor this variable whenever it calls a
-# tool from the auxiliary directory.  The problem is that $srcdir (and
-# therefore $ac_aux_dir as well) can be either absolute or relative,
-# depending on how configure is run.  This is pretty annoying, since
-# it makes $ac_aux_dir quite unusable in subdirectories: in the top
-# source directory, any form will work fine, but in subdirectories a
-# relative path needs to be adjusted first.
-#
-# $ac_aux_dir/missing
-#    fails when called from a subdirectory if $ac_aux_dir is relative
-# $top_srcdir/$ac_aux_dir/missing
-#    fails if $ac_aux_dir is absolute,
-#    fails when called from a subdirectory in a VPATH build with
-#          a relative $ac_aux_dir
-#
-# The reason of the latter failure is that $top_srcdir and $ac_aux_dir
-# are both prefixed by $srcdir.  In an in-source build this is usually
-# harmless because $srcdir is '.', but things will broke when you
-# start a VPATH build or use an absolute $srcdir.
-#
-# So we could use something similar to $top_srcdir/$ac_aux_dir/missing,
-# iff we strip the leading $srcdir from $ac_aux_dir.  That would be:
-#   am_aux_dir='\$(top_srcdir)/'`expr "$ac_aux_dir" : "$srcdir//*\(.*\)"`
-# and then we would define $MISSING as
-#   MISSING="\${SHELL} $am_aux_dir/missing"
-# This will work as long as MISSING is not called from configure, because
-# unfortunately $(top_srcdir) has no meaning in configure.
-# However there are other variables, like CC, which are often used in
-# configure, and could therefore not use this "fixed" $ac_aux_dir.
-#
-# Another solution, used here, is to always expand $ac_aux_dir to an
-# absolute PATH.  The drawback is that using absolute paths prevent a
-# configured tree to be moved without reconfiguration.
-
-AC_DEFUN([AM_AUX_DIR_EXPAND],
-[dnl Rely on autoconf to set up CDPATH properly.
-AC_PREREQ([2.50])dnl
-# expand $ac_aux_dir to an absolute path
-am_aux_dir=`cd $ac_aux_dir && pwd`
-])
-
-# AM_CONDITIONAL                                            -*- Autoconf -*-
-
-# Copyright (C) 1997-2013 Free Software Foundation, Inc.
-#
-# This file is free software; the Free Software Foundation
-# gives unlimited permission to copy and/or distribute it,
-# with or without modifications, as long as this notice is preserved.
-
-# AM_CONDITIONAL(NAME, SHELL-CONDITION)
-# -------------------------------------
-# Define a conditional.
-AC_DEFUN([AM_CONDITIONAL],
-[AC_PREREQ([2.52])dnl
- m4_if([$1], [TRUE],  [AC_FATAL([$0: invalid condition: $1])],
-       [$1], [FALSE], [AC_FATAL([$0: invalid condition: $1])])dnl
-AC_SUBST([$1_TRUE])dnl
-AC_SUBST([$1_FALSE])dnl
-_AM_SUBST_NOTMAKE([$1_TRUE])dnl
-_AM_SUBST_NOTMAKE([$1_FALSE])dnl
-m4_define([_AM_COND_VALUE_$1], [$2])dnl
-if $2; then
-  $1_TRUE=
-  $1_FALSE='#'
-else
-  $1_TRUE='#'
-  $1_FALSE=
-fi
-AC_CONFIG_COMMANDS_PRE(
-[if test -z "${$1_TRUE}" && test -z "${$1_FALSE}"; then
-  AC_MSG_ERROR([[conditional "$1" was never defined.
-Usually this means the macro was only invoked conditionally.]])
-fi])])
-
-# Copyright (C) 1999-2013 Free Software Foundation, Inc.
-#
-# This file is free software; the Free Software Foundation
-# gives unlimited permission to copy and/or distribute it,
-# with or without modifications, as long as this notice is preserved.
-
-
-# There are a few dirty hacks below to avoid letting 'AC_PROG_CC' be
-# written in clear, in which case automake, when reading aclocal.m4,
-# will think it sees a *use*, and therefore will trigger all it's
-# C support machinery.  Also note that it means that autoscan, seeing
-# CC etc. in the Makefile, will ask for an AC_PROG_CC use...
-
-
-# _AM_DEPENDENCIES(NAME)
-# ----------------------
-# See how the compiler implements dependency checking.
-# NAME is "CC", "CXX", "OBJC", "OBJCXX", "UPC", or "GJC".
-# We try a few techniques and use that to set a single cache variable.
-#
-# We don't AC_REQUIRE the corresponding AC_PROG_CC since the latter was
-# modified to invoke _AM_DEPENDENCIES(CC); we would have a circular
-# dependency, and given that the user is not expected to run this macro,
-# just rely on AC_PROG_CC.
-AC_DEFUN([_AM_DEPENDENCIES],
-[AC_REQUIRE([AM_SET_DEPDIR])dnl
-AC_REQUIRE([AM_OUTPUT_DEPENDENCY_COMMANDS])dnl
-AC_REQUIRE([AM_MAKE_INCLUDE])dnl
-AC_REQUIRE([AM_DEP_TRACK])dnl
-
-m4_if([$1], [CC],   [depcc="$CC"   am_compiler_list=],
-      [$1], [CXX],  [depcc="$CXX"  am_compiler_list=],
-      [$1], [OBJC], [depcc="$OBJC" am_compiler_list='gcc3 gcc'],
-      [$1], [OBJCXX], [depcc="$OBJCXX" am_compiler_list='gcc3 gcc'],
-      [$1], [UPC],  [depcc="$UPC"  am_compiler_list=],
-      [$1], [GCJ],  [depcc="$GCJ"  am_compiler_list='gcc3 gcc'],
-                    [depcc="$$1"   am_compiler_list=])
-
-AC_CACHE_CHECK([dependency style of $depcc],
-               [am_cv_$1_dependencies_compiler_type],
-[if test -z "$AMDEP_TRUE" && test -f "$am_depcomp"; then
-  # We make a subdir and do the tests there.  Otherwise we can end up
-  # making bogus files that we don't know about and never remove.  For
-  # instance it was reported that on HP-UX the gcc test will end up
-  # making a dummy file named 'D' -- because '-MD' means "put the output
-  # in D".
-  rm -rf conftest.dir
-  mkdir conftest.dir
-  # Copy depcomp to subdir because otherwise we won't find it if we're
-  # using a relative directory.
-  cp "$am_depcomp" conftest.dir
-  cd conftest.dir
-  # We will build objects and dependencies in a subdirectory because
-  # it helps to detect inapplicable dependency modes.  For instance
-  # both Tru64's cc and ICC support -MD to output dependencies as a
-  # side effect of compilation, but ICC will put the dependencies in
-  # the current directory while Tru64 will put them in the object
-  # directory.
-  mkdir sub
-
-  am_cv_$1_dependencies_compiler_type=none
-  if test "$am_compiler_list" = ""; then
-     am_compiler_list=`sed -n ['s/^#*\([a-zA-Z0-9]*\))$/\1/p'] < ./depcomp`
-  fi
-  am__universal=false
-  m4_case([$1], [CC],
-    [case " $depcc " in #(
-     *\ -arch\ *\ -arch\ *) am__universal=true ;;
-     esac],
-    [CXX],
-    [case " $depcc " in #(
-     *\ -arch\ *\ -arch\ *) am__universal=true ;;
-     esac])
-
-  for depmode in $am_compiler_list; do
-    # Setup a source with many dependencies, because some compilers
-    # like to wrap large dependency lists on column 80 (with \), and
-    # we should not choose a depcomp mode which is confused by this.
-    #
-    # We need to recreate these files for each test, as the compiler may
-    # overwrite some of them when testing with obscure command lines.
-    # This happens at least with the AIX C compiler.
-    : > sub/conftest.c
-    for i in 1 2 3 4 5 6; do
-      echo '#include "conftst'$i'.h"' >> sub/conftest.c
-      # Using ": > sub/conftst$i.h" creates only sub/conftst1.h with
-      # Solaris 10 /bin/sh.
-      echo '/* dummy */' > sub/conftst$i.h
-    done
-    echo "${am__include} ${am__quote}sub/conftest.Po${am__quote}" > confmf
-
-    # We check with '-c' and '-o' for the sake of the "dashmstdout"
-    # mode.  It turns out that the SunPro C++ compiler does not properly
-    # handle '-M -o', and we need to detect this.  Also, some Intel
-    # versions had trouble with output in subdirs.
-    am__obj=sub/conftest.${OBJEXT-o}
-    am__minus_obj="-o $am__obj"
-    case $depmode in
-    gcc)
-      # This depmode causes a compiler race in universal mode.
-      test "$am__universal" = false || continue
-      ;;
-    nosideeffect)
-      # After this tag, mechanisms are not by side-effect, so they'll
-      # only be used when explicitly requested.
-      if test "x$enable_dependency_tracking" = xyes; then
-	continue
-      else
-	break
-      fi
-      ;;
-    msvc7 | msvc7msys | msvisualcpp | msvcmsys)
-      # This compiler won't grok '-c -o', but also, the minuso test has
-      # not run yet.  These depmodes are late enough in the game, and
-      # so weak that their functioning should not be impacted.
-      am__obj=conftest.${OBJEXT-o}
-      am__minus_obj=
-      ;;
-    none) break ;;
-    esac
-    if depmode=$depmode \
-       source=sub/conftest.c object=$am__obj \
-       depfile=sub/conftest.Po tmpdepfile=sub/conftest.TPo \
-       $SHELL ./depcomp $depcc -c $am__minus_obj sub/conftest.c \
-         >/dev/null 2>conftest.err &&
-       grep sub/conftst1.h sub/conftest.Po > /dev/null 2>&1 &&
-       grep sub/conftst6.h sub/conftest.Po > /dev/null 2>&1 &&
-       grep $am__obj sub/conftest.Po > /dev/null 2>&1 &&
-       ${MAKE-make} -s -f confmf > /dev/null 2>&1; then
-      # icc doesn't choke on unknown options, it will just issue warnings
-      # or remarks (even with -Werror).  So we grep stderr for any message
-      # that says an option was ignored or not supported.
-      # When given -MP, icc 7.0 and 7.1 complain thusly:
-      #   icc: Command line warning: ignoring option '-M'; no argument required
-      # The diagnosis changed in icc 8.0:
-      #   icc: Command line remark: option '-MP' not supported
-      if (grep 'ignoring option' conftest.err ||
-          grep 'not supported' conftest.err) >/dev/null 2>&1; then :; else
-        am_cv_$1_dependencies_compiler_type=$depmode
-        break
-      fi
-    fi
-  done
-
-  cd ..
-  rm -rf conftest.dir
-else
-  am_cv_$1_dependencies_compiler_type=none
-fi
-])
-AC_SUBST([$1DEPMODE], [depmode=$am_cv_$1_dependencies_compiler_type])
-AM_CONDITIONAL([am__fastdep$1], [
-  test "x$enable_dependency_tracking" != xno \
-  && test "$am_cv_$1_dependencies_compiler_type" = gcc3])
-])
-
-
-# AM_SET_DEPDIR
-# -------------
-# Choose a directory name for dependency files.
-# This macro is AC_REQUIREd in _AM_DEPENDENCIES.
-AC_DEFUN([AM_SET_DEPDIR],
-[AC_REQUIRE([AM_SET_LEADING_DOT])dnl
-AC_SUBST([DEPDIR], ["${am__leading_dot}deps"])dnl
-])
-
-
-# AM_DEP_TRACK
-# ------------
-AC_DEFUN([AM_DEP_TRACK],
-[AC_ARG_ENABLE([dependency-tracking], [dnl
-AS_HELP_STRING(
-  [--enable-dependency-tracking],
-  [do not reject slow dependency extractors])
-AS_HELP_STRING(
-  [--disable-dependency-tracking],
-  [speeds up one-time build])])
-if test "x$enable_dependency_tracking" != xno; then
-  am_depcomp="$ac_aux_dir/depcomp"
-  AMDEPBACKSLASH='\'
-  am__nodep='_no'
-fi
-AM_CONDITIONAL([AMDEP], [test "x$enable_dependency_tracking" != xno])
-AC_SUBST([AMDEPBACKSLASH])dnl
-_AM_SUBST_NOTMAKE([AMDEPBACKSLASH])dnl
-AC_SUBST([am__nodep])dnl
-_AM_SUBST_NOTMAKE([am__nodep])dnl
-])
-
-# Generate code to set up dependency tracking.              -*- Autoconf -*-
-
-# Copyright (C) 1999-2013 Free Software Foundation, Inc.
-#
-# This file is free software; the Free Software Foundation
-# gives unlimited permission to copy and/or distribute it,
-# with or without modifications, as long as this notice is preserved.
-
-
-# _AM_OUTPUT_DEPENDENCY_COMMANDS
-# ------------------------------
-AC_DEFUN([_AM_OUTPUT_DEPENDENCY_COMMANDS],
-[{
-  # Older Autoconf quotes --file arguments for eval, but not when files
-  # are listed without --file.  Let's play safe and only enable the eval
-  # if we detect the quoting.
-  case $CONFIG_FILES in
-  *\'*) eval set x "$CONFIG_FILES" ;;
-  *)   set x $CONFIG_FILES ;;
-  esac
-  shift
-  for mf
-  do
-    # Strip MF so we end up with the name of the file.
-    mf=`echo "$mf" | sed -e 's/:.*$//'`
-    # Check whether this is an Automake generated Makefile or not.
-    # We used to match only the files named 'Makefile.in', but
-    # some people rename them; so instead we look at the file content.
-    # Grep'ing the first line is not enough: some people post-process
-    # each Makefile.in and add a new line on top of each file to say so.
-    # Grep'ing the whole file is not good either: AIX grep has a line
-    # limit of 2048, but all sed's we know have understand at least 4000.
-    if sed -n 's,^#.*generated by automake.*,X,p' "$mf" | grep X >/dev/null 2>&1; then
-      dirpart=`AS_DIRNAME("$mf")`
-    else
-      continue
-    fi
-    # Extract the definition of DEPDIR, am__include, and am__quote
-    # from the Makefile without running 'make'.
-    DEPDIR=`sed -n 's/^DEPDIR = //p' < "$mf"`
-    test -z "$DEPDIR" && continue
-    am__include=`sed -n 's/^am__include = //p' < "$mf"`
-    test -z "$am__include" && continue
-    am__quote=`sed -n 's/^am__quote = //p' < "$mf"`
-    # Find all dependency output files, they are included files with
-    # $(DEPDIR) in their names.  We invoke sed twice because it is the
-    # simplest approach to changing $(DEPDIR) to its actual value in the
-    # expansion.
-    for file in `sed -n "
-      s/^$am__include $am__quote\(.*(DEPDIR).*\)$am__quote"'$/\1/p' <"$mf" | \
-	 sed -e 's/\$(DEPDIR)/'"$DEPDIR"'/g'`; do
-      # Make sure the directory exists.
-      test -f "$dirpart/$file" && continue
-      fdir=`AS_DIRNAME(["$file"])`
-      AS_MKDIR_P([$dirpart/$fdir])
-      # echo "creating $dirpart/$file"
-      echo '# dummy' > "$dirpart/$file"
-    done
-  done
-}
-])# _AM_OUTPUT_DEPENDENCY_COMMANDS
-
-
-# AM_OUTPUT_DEPENDENCY_COMMANDS
-# -----------------------------
-# This macro should only be invoked once -- use via AC_REQUIRE.
-#
-# This code is only required when automatic dependency tracking
-# is enabled.  FIXME.  This creates each '.P' file that we will
-# need in order to bootstrap the dependency handling code.
-AC_DEFUN([AM_OUTPUT_DEPENDENCY_COMMANDS],
-[AC_CONFIG_COMMANDS([depfiles],
-     [test x"$AMDEP_TRUE" != x"" || _AM_OUTPUT_DEPENDENCY_COMMANDS],
-     [AMDEP_TRUE="$AMDEP_TRUE" ac_aux_dir="$ac_aux_dir"])
-])
-
-# Do all the work for Automake.                             -*- Autoconf -*-
-
-# Copyright (C) 1996-2013 Free Software Foundation, Inc.
-#
-# This file is free software; the Free Software Foundation
-# gives unlimited permission to copy and/or distribute it,
-# with or without modifications, as long as this notice is preserved.
-
-# This macro actually does too much.  Some checks are only needed if
-# your package does certain things.  But this isn't really a big deal.
-
-dnl Redefine AC_PROG_CC to automatically invoke _AM_PROG_CC_C_O.
-m4_define([AC_PROG_CC],
-m4_defn([AC_PROG_CC])
-[_AM_PROG_CC_C_O
-])
-
-# AM_INIT_AUTOMAKE(PACKAGE, VERSION, [NO-DEFINE])
-# AM_INIT_AUTOMAKE([OPTIONS])
-# -----------------------------------------------
-# The call with PACKAGE and VERSION arguments is the old style
-# call (pre autoconf-2.50), which is being phased out.  PACKAGE
-# and VERSION should now be passed to AC_INIT and removed from
-# the call to AM_INIT_AUTOMAKE.
-# We support both call styles for the transition.  After
-# the next Automake release, Autoconf can make the AC_INIT
-# arguments mandatory, and then we can depend on a new Autoconf
-# release and drop the old call support.
-AC_DEFUN([AM_INIT_AUTOMAKE],
-[AC_PREREQ([2.65])dnl
-dnl Autoconf wants to disallow AM_ names.  We explicitly allow
-dnl the ones we care about.
-m4_pattern_allow([^AM_[A-Z]+FLAGS$])dnl
-AC_REQUIRE([AM_SET_CURRENT_AUTOMAKE_VERSION])dnl
-AC_REQUIRE([AC_PROG_INSTALL])dnl
-if test "`cd $srcdir && pwd`" != "`pwd`"; then
-  # Use -I$(srcdir) only when $(srcdir) != ., so that make's output
-  # is not polluted with repeated "-I."
-  AC_SUBST([am__isrc], [' -I$(srcdir)'])_AM_SUBST_NOTMAKE([am__isrc])dnl
-  # test to see if srcdir already configured
-  if test -f $srcdir/config.status; then
-    AC_MSG_ERROR([source directory already configured; run "make distclean" there first])
-  fi
-fi
-
-# test whether we have cygpath
-if test -z "$CYGPATH_W"; then
-  if (cygpath --version) >/dev/null 2>/dev/null; then
-    CYGPATH_W='cygpath -w'
-  else
-    CYGPATH_W=echo
-  fi
-fi
-AC_SUBST([CYGPATH_W])
-
-# Define the identity of the package.
-dnl Distinguish between old-style and new-style calls.
-m4_ifval([$2],
-[AC_DIAGNOSE([obsolete],
-             [$0: two- and three-arguments forms are deprecated.])
-m4_ifval([$3], [_AM_SET_OPTION([no-define])])dnl
- AC_SUBST([PACKAGE], [$1])dnl
- AC_SUBST([VERSION], [$2])],
-[_AM_SET_OPTIONS([$1])dnl
-dnl Diagnose old-style AC_INIT with new-style AM_AUTOMAKE_INIT.
-m4_if(
-  m4_ifdef([AC_PACKAGE_NAME], [ok]):m4_ifdef([AC_PACKAGE_VERSION], [ok]),
-  [ok:ok],,
-  [m4_fatal([AC_INIT should be called with package and version arguments])])dnl
- AC_SUBST([PACKAGE], ['AC_PACKAGE_TARNAME'])dnl
- AC_SUBST([VERSION], ['AC_PACKAGE_VERSION'])])dnl
-
-_AM_IF_OPTION([no-define],,
-[AC_DEFINE_UNQUOTED([PACKAGE], ["$PACKAGE"], [Name of package])
- AC_DEFINE_UNQUOTED([VERSION], ["$VERSION"], [Version number of package])])dnl
-
-# Some tools Automake needs.
-AC_REQUIRE([AM_SANITY_CHECK])dnl
-AC_REQUIRE([AC_ARG_PROGRAM])dnl
-AM_MISSING_PROG([ACLOCAL], [aclocal-${am__api_version}])
-AM_MISSING_PROG([AUTOCONF], [autoconf])
-AM_MISSING_PROG([AUTOMAKE], [automake-${am__api_version}])
-AM_MISSING_PROG([AUTOHEADER], [autoheader])
-AM_MISSING_PROG([MAKEINFO], [makeinfo])
-AC_REQUIRE([AM_PROG_INSTALL_SH])dnl
-AC_REQUIRE([AM_PROG_INSTALL_STRIP])dnl
-AC_REQUIRE([AC_PROG_MKDIR_P])dnl
-# For better backward compatibility.  To be removed once Automake 1.9.x
-# dies out for good.  For more background, see:
-# <http://lists.gnu.org/archive/html/automake/2012-07/msg00001.html>
-# <http://lists.gnu.org/archive/html/automake/2012-07/msg00014.html>
-AC_SUBST([mkdir_p], ['$(MKDIR_P)'])
-# We need awk for the "check" target.  The system "awk" is bad on
-# some platforms.
-AC_REQUIRE([AC_PROG_AWK])dnl
-AC_REQUIRE([AC_PROG_MAKE_SET])dnl
-AC_REQUIRE([AM_SET_LEADING_DOT])dnl
-_AM_IF_OPTION([tar-ustar], [_AM_PROG_TAR([ustar])],
-	      [_AM_IF_OPTION([tar-pax], [_AM_PROG_TAR([pax])],
-			     [_AM_PROG_TAR([v7])])])
-_AM_IF_OPTION([no-dependencies],,
-[AC_PROVIDE_IFELSE([AC_PROG_CC],
-		  [_AM_DEPENDENCIES([CC])],
-		  [m4_define([AC_PROG_CC],
-			     m4_defn([AC_PROG_CC])[_AM_DEPENDENCIES([CC])])])dnl
-AC_PROVIDE_IFELSE([AC_PROG_CXX],
-		  [_AM_DEPENDENCIES([CXX])],
-		  [m4_define([AC_PROG_CXX],
-			     m4_defn([AC_PROG_CXX])[_AM_DEPENDENCIES([CXX])])])dnl
-AC_PROVIDE_IFELSE([AC_PROG_OBJC],
-		  [_AM_DEPENDENCIES([OBJC])],
-		  [m4_define([AC_PROG_OBJC],
-			     m4_defn([AC_PROG_OBJC])[_AM_DEPENDENCIES([OBJC])])])dnl
-AC_PROVIDE_IFELSE([AC_PROG_OBJCXX],
-		  [_AM_DEPENDENCIES([OBJCXX])],
-		  [m4_define([AC_PROG_OBJCXX],
-			     m4_defn([AC_PROG_OBJCXX])[_AM_DEPENDENCIES([OBJCXX])])])dnl
-])
-AC_REQUIRE([AM_SILENT_RULES])dnl
-dnl The testsuite driver may need to know about EXEEXT, so add the
-dnl 'am__EXEEXT' conditional if _AM_COMPILER_EXEEXT was seen.  This
-dnl macro is hooked onto _AC_COMPILER_EXEEXT early, see below.
-AC_CONFIG_COMMANDS_PRE(dnl
-[m4_provide_if([_AM_COMPILER_EXEEXT],
-  [AM_CONDITIONAL([am__EXEEXT], [test -n "$EXEEXT"])])])dnl
-
-# POSIX will say in a future version that running "rm -f" with no argument
-# is OK; and we want to be able to make that assumption in our Makefile
-# recipes.  So use an aggressive probe to check that the usage we want is
-# actually supported "in the wild" to an acceptable degree.
-# See automake bug#10828.
-# To make any issue more visible, cause the running configure to be aborted
-# by default if the 'rm' program in use doesn't match our expectations; the
-# user can still override this though.
-if rm -f && rm -fr && rm -rf; then : OK; else
-  cat >&2 <<'END'
-Oops!
-
-Your 'rm' program seems unable to run without file operands specified
-on the command line, even when the '-f' option is present.  This is contrary
-to the behaviour of most rm programs out there, and not conforming with
-the upcoming POSIX standard: <http://austingroupbugs.net/view.php?id=542>
-
-Please tell bug-automake@gnu.org about your system, including the value
-of your $PATH and any error possibly output before this message.  This
-can help us improve future automake versions.
-
-END
-  if test x"$ACCEPT_INFERIOR_RM_PROGRAM" = x"yes"; then
-    echo 'Configuration will proceed anyway, since you have set the' >&2
-    echo 'ACCEPT_INFERIOR_RM_PROGRAM variable to "yes"' >&2
-    echo >&2
-  else
-    cat >&2 <<'END'
-Aborting the configuration process, to ensure you take notice of the issue.
-
-You can download and install GNU coreutils to get an 'rm' implementation
-that behaves properly: <http://www.gnu.org/software/coreutils/>.
-
-If you want to complete the configuration process using your problematic
-'rm' anyway, export the environment variable ACCEPT_INFERIOR_RM_PROGRAM
-to "yes", and re-run configure.
-
-END
-    AC_MSG_ERROR([Your 'rm' program is bad, sorry.])
-  fi
-fi])
-
-dnl Hook into '_AC_COMPILER_EXEEXT' early to learn its expansion.  Do not
-dnl add the conditional right here, as _AC_COMPILER_EXEEXT may be further
-dnl mangled by Autoconf and run in a shell conditional statement.
-m4_define([_AC_COMPILER_EXEEXT],
-m4_defn([_AC_COMPILER_EXEEXT])[m4_provide([_AM_COMPILER_EXEEXT])])
-
-# When config.status generates a header, we must update the stamp-h file.
-# This file resides in the same directory as the config header
-# that is generated.  The stamp files are numbered to have different names.
-
-# Autoconf calls _AC_AM_CONFIG_HEADER_HOOK (when defined) in the
-# loop where config.status creates the headers, so we can generate
-# our stamp files there.
-AC_DEFUN([_AC_AM_CONFIG_HEADER_HOOK],
-[# Compute $1's index in $config_headers.
-_am_arg=$1
-_am_stamp_count=1
-for _am_header in $config_headers :; do
-  case $_am_header in
-    $_am_arg | $_am_arg:* )
-      break ;;
-    * )
-      _am_stamp_count=`expr $_am_stamp_count + 1` ;;
-  esac
-done
-echo "timestamp for $_am_arg" >`AS_DIRNAME(["$_am_arg"])`/stamp-h[]$_am_stamp_count])
-
-# Copyright (C) 2001-2013 Free Software Foundation, Inc.
-#
-# This file is free software; the Free Software Foundation
-# gives unlimited permission to copy and/or distribute it,
-# with or without modifications, as long as this notice is preserved.
-
-# AM_PROG_INSTALL_SH
-# ------------------
-# Define $install_sh.
-AC_DEFUN([AM_PROG_INSTALL_SH],
-[AC_REQUIRE([AM_AUX_DIR_EXPAND])dnl
-if test x"${install_sh}" != xset; then
-  case $am_aux_dir in
-  *\ * | *\	*)
-    install_sh="\${SHELL} '$am_aux_dir/install-sh'" ;;
-  *)
-    install_sh="\${SHELL} $am_aux_dir/install-sh"
-  esac
-fi
-AC_SUBST([install_sh])])
-
-# Copyright (C) 2003-2013 Free Software Foundation, Inc.
-#
-# This file is free software; the Free Software Foundation
-# gives unlimited permission to copy and/or distribute it,
-# with or without modifications, as long as this notice is preserved.
-
-# Check whether the underlying file-system supports filenames
-# with a leading dot.  For instance MS-DOS doesn't.
-AC_DEFUN([AM_SET_LEADING_DOT],
-[rm -rf .tst 2>/dev/null
-mkdir .tst 2>/dev/null
-if test -d .tst; then
-  am__leading_dot=.
-else
-  am__leading_dot=_
-fi
-rmdir .tst 2>/dev/null
-AC_SUBST([am__leading_dot])])
-
-# Check to see how 'make' treats includes.	            -*- Autoconf -*-
-
-# Copyright (C) 2001-2013 Free Software Foundation, Inc.
-#
-# This file is free software; the Free Software Foundation
-# gives unlimited permission to copy and/or distribute it,
-# with or without modifications, as long as this notice is preserved.
-
-# AM_MAKE_INCLUDE()
-# -----------------
-# Check to see how make treats includes.
-AC_DEFUN([AM_MAKE_INCLUDE],
-[am_make=${MAKE-make}
-cat > confinc << 'END'
-am__doit:
-	@echo this is the am__doit target
-.PHONY: am__doit
-END
-# If we don't find an include directive, just comment out the code.
-AC_MSG_CHECKING([for style of include used by $am_make])
-am__include="#"
-am__quote=
-_am_result=none
-# First try GNU make style include.
-echo "include confinc" > confmf
-# Ignore all kinds of additional output from 'make'.
-case `$am_make -s -f confmf 2> /dev/null` in #(
-*the\ am__doit\ target*)
-  am__include=include
-  am__quote=
-  _am_result=GNU
-  ;;
-esac
-# Now try BSD make style include.
-if test "$am__include" = "#"; then
-   echo '.include "confinc"' > confmf
-   case `$am_make -s -f confmf 2> /dev/null` in #(
-   *the\ am__doit\ target*)
-     am__include=.include
-     am__quote="\""
-     _am_result=BSD
-     ;;
-   esac
-fi
-AC_SUBST([am__include])
-AC_SUBST([am__quote])
-AC_MSG_RESULT([$_am_result])
-rm -f confinc confmf
-])
-
-# Fake the existence of programs that GNU maintainers use.  -*- Autoconf -*-
-
-# Copyright (C) 1997-2013 Free Software Foundation, Inc.
-#
-# This file is free software; the Free Software Foundation
-# gives unlimited permission to copy and/or distribute it,
-# with or without modifications, as long as this notice is preserved.
-
-# AM_MISSING_PROG(NAME, PROGRAM)
-# ------------------------------
-AC_DEFUN([AM_MISSING_PROG],
-[AC_REQUIRE([AM_MISSING_HAS_RUN])
-$1=${$1-"${am_missing_run}$2"}
-AC_SUBST($1)])
-
-# AM_MISSING_HAS_RUN
-# ------------------
-# Define MISSING if not defined so far and test if it is modern enough.
-# If it is, set am_missing_run to use it, otherwise, to nothing.
-AC_DEFUN([AM_MISSING_HAS_RUN],
-[AC_REQUIRE([AM_AUX_DIR_EXPAND])dnl
-AC_REQUIRE_AUX_FILE([missing])dnl
-if test x"${MISSING+set}" != xset; then
-  case $am_aux_dir in
-  *\ * | *\	*)
-    MISSING="\${SHELL} \"$am_aux_dir/missing\"" ;;
-  *)
-    MISSING="\${SHELL} $am_aux_dir/missing" ;;
-  esac
-fi
-# Use eval to expand $SHELL
-if eval "$MISSING --is-lightweight"; then
-  am_missing_run="$MISSING "
-else
-  am_missing_run=
-  AC_MSG_WARN(['missing' script is too old or missing])
-fi
-])
-
-# Helper functions for option handling.                     -*- Autoconf -*-
-
-# Copyright (C) 2001-2013 Free Software Foundation, Inc.
-#
-# This file is free software; the Free Software Foundation
-# gives unlimited permission to copy and/or distribute it,
-# with or without modifications, as long as this notice is preserved.
-
-# _AM_MANGLE_OPTION(NAME)
-# -----------------------
-AC_DEFUN([_AM_MANGLE_OPTION],
-[[_AM_OPTION_]m4_bpatsubst($1, [[^a-zA-Z0-9_]], [_])])
-
-# _AM_SET_OPTION(NAME)
-# --------------------
-# Set option NAME.  Presently that only means defining a flag for this option.
-AC_DEFUN([_AM_SET_OPTION],
-[m4_define(_AM_MANGLE_OPTION([$1]), [1])])
-
-# _AM_SET_OPTIONS(OPTIONS)
-# ------------------------
-# OPTIONS is a space-separated list of Automake options.
-AC_DEFUN([_AM_SET_OPTIONS],
-[m4_foreach_w([_AM_Option], [$1], [_AM_SET_OPTION(_AM_Option)])])
-
-# _AM_IF_OPTION(OPTION, IF-SET, [IF-NOT-SET])
-# -------------------------------------------
-# Execute IF-SET if OPTION is set, IF-NOT-SET otherwise.
-AC_DEFUN([_AM_IF_OPTION],
-[m4_ifset(_AM_MANGLE_OPTION([$1]), [$2], [$3])])
-
-# Copyright (C) 1999-2013 Free Software Foundation, Inc.
-#
-# This file is free software; the Free Software Foundation
-# gives unlimited permission to copy and/or distribute it,
-# with or without modifications, as long as this notice is preserved.
-
-# _AM_PROG_CC_C_O
-# ---------------
-# Like AC_PROG_CC_C_O, but changed for automake.  We rewrite AC_PROG_CC
-# to automatically call this.
-AC_DEFUN([_AM_PROG_CC_C_O],
-[AC_REQUIRE([AM_AUX_DIR_EXPAND])dnl
-AC_REQUIRE_AUX_FILE([compile])dnl
-AC_LANG_PUSH([C])dnl
-AC_CACHE_CHECK(
-  [whether $CC understands -c and -o together],
-  [am_cv_prog_cc_c_o],
-  [AC_LANG_CONFTEST([AC_LANG_PROGRAM([])])
-  # Make sure it works both with $CC and with simple cc.
-  # Following AC_PROG_CC_C_O, we do the test twice because some
-  # compilers refuse to overwrite an existing .o file with -o,
-  # though they will create one.
-  am_cv_prog_cc_c_o=yes
-  for am_i in 1 2; do
-    if AM_RUN_LOG([$CC -c conftest.$ac_ext -o conftest2.$ac_objext]) \
-         && test -f conftest2.$ac_objext; then
-      : OK
-    else
-      am_cv_prog_cc_c_o=no
-      break
-    fi
-  done
-  rm -f core conftest*
-  unset am_i])
-if test "$am_cv_prog_cc_c_o" != yes; then
-   # Losing compiler, so override with the script.
-   # FIXME: It is wrong to rewrite CC.
-   # But if we don't then we get into trouble of one sort or another.
-   # A longer-term fix would be to have automake use am__CC in this case,
-   # and then we could set am__CC="\$(top_srcdir)/compile \$(CC)"
-   CC="$am_aux_dir/compile $CC"
-fi
-AC_LANG_POP([C])])
-
-# For backward compatibility.
-AC_DEFUN_ONCE([AM_PROG_CC_C_O], [AC_REQUIRE([AC_PROG_CC])])
-
-# Copyright (C) 2001-2013 Free Software Foundation, Inc.
-#
-# This file is free software; the Free Software Foundation
-# gives unlimited permission to copy and/or distribute it,
-# with or without modifications, as long as this notice is preserved.
-
-# AM_RUN_LOG(COMMAND)
-# -------------------
-# Run COMMAND, save the exit status in ac_status, and log it.
-# (This has been adapted from Autoconf's _AC_RUN_LOG macro.)
-AC_DEFUN([AM_RUN_LOG],
-[{ echo "$as_me:$LINENO: $1" >&AS_MESSAGE_LOG_FD
-   ($1) >&AS_MESSAGE_LOG_FD 2>&AS_MESSAGE_LOG_FD
-   ac_status=$?
-   echo "$as_me:$LINENO: \$? = $ac_status" >&AS_MESSAGE_LOG_FD
-   (exit $ac_status); }])
-
-# Check to make sure that the build environment is sane.    -*- Autoconf -*-
-
-# Copyright (C) 1996-2013 Free Software Foundation, Inc.
-#
-# This file is free software; the Free Software Foundation
-# gives unlimited permission to copy and/or distribute it,
-# with or without modifications, as long as this notice is preserved.
-
-# AM_SANITY_CHECK
-# ---------------
-AC_DEFUN([AM_SANITY_CHECK],
-[AC_MSG_CHECKING([whether build environment is sane])
-# Reject unsafe characters in $srcdir or the absolute working directory
-# name.  Accept space and tab only in the latter.
-am_lf='
-'
-case `pwd` in
-  *[[\\\"\#\$\&\'\`$am_lf]]*)
-    AC_MSG_ERROR([unsafe absolute working directory name]);;
-esac
-case $srcdir in
-  *[[\\\"\#\$\&\'\`$am_lf\ \	]]*)
-    AC_MSG_ERROR([unsafe srcdir value: '$srcdir']);;
-esac
-
-# Do 'set' in a subshell so we don't clobber the current shell's
-# arguments.  Must try -L first in case configure is actually a
-# symlink; some systems play weird games with the mod time of symlinks
-# (eg FreeBSD returns the mod time of the symlink's containing
-# directory).
-if (
-   am_has_slept=no
-   for am_try in 1 2; do
-     echo "timestamp, slept: $am_has_slept" > conftest.file
-     set X `ls -Lt "$srcdir/configure" conftest.file 2> /dev/null`
-     if test "$[*]" = "X"; then
-	# -L didn't work.
-	set X `ls -t "$srcdir/configure" conftest.file`
-     fi
-     if test "$[*]" != "X $srcdir/configure conftest.file" \
-	&& test "$[*]" != "X conftest.file $srcdir/configure"; then
-
-	# If neither matched, then we have a broken ls.  This can happen
-	# if, for instance, CONFIG_SHELL is bash and it inherits a
-	# broken ls alias from the environment.  This has actually
-	# happened.  Such a system could not be considered "sane".
-	AC_MSG_ERROR([ls -t appears to fail.  Make sure there is not a broken
-  alias in your environment])
-     fi
-     if test "$[2]" = conftest.file || test $am_try -eq 2; then
-       break
-     fi
-     # Just in case.
-     sleep 1
-     am_has_slept=yes
-   done
-   test "$[2]" = conftest.file
-   )
-then
-   # Ok.
-   :
-else
-   AC_MSG_ERROR([newly created file is older than distributed files!
-Check your system clock])
-fi
-AC_MSG_RESULT([yes])
-# If we didn't sleep, we still need to ensure time stamps of config.status and
-# generated files are strictly newer.
-am_sleep_pid=
-if grep 'slept: no' conftest.file >/dev/null 2>&1; then
-  ( sleep 1 ) &
-  am_sleep_pid=$!
-fi
-AC_CONFIG_COMMANDS_PRE(
-  [AC_MSG_CHECKING([that generated files are newer than configure])
-   if test -n "$am_sleep_pid"; then
-     # Hide warnings about reused PIDs.
-     wait $am_sleep_pid 2>/dev/null
-   fi
-   AC_MSG_RESULT([done])])
-rm -f conftest.file
-])
-
-# Copyright (C) 2009-2013 Free Software Foundation, Inc.
-#
-# This file is free software; the Free Software Foundation
-# gives unlimited permission to copy and/or distribute it,
-# with or without modifications, as long as this notice is preserved.
-
-# AM_SILENT_RULES([DEFAULT])
-# --------------------------
-# Enable less verbose build rules; with the default set to DEFAULT
-# ("yes" being less verbose, "no" or empty being verbose).
-AC_DEFUN([AM_SILENT_RULES],
-[AC_ARG_ENABLE([silent-rules], [dnl
-AS_HELP_STRING(
-  [--enable-silent-rules],
-  [less verbose build output (undo: "make V=1")])
-AS_HELP_STRING(
-  [--disable-silent-rules],
-  [verbose build output (undo: "make V=0")])dnl
-])
-case $enable_silent_rules in @%:@ (((
-  yes) AM_DEFAULT_VERBOSITY=0;;
-   no) AM_DEFAULT_VERBOSITY=1;;
-    *) AM_DEFAULT_VERBOSITY=m4_if([$1], [yes], [0], [1]);;
-esac
-dnl
-dnl A few 'make' implementations (e.g., NonStop OS and NextStep)
-dnl do not support nested variable expansions.
-dnl See automake bug#9928 and bug#10237.
-am_make=${MAKE-make}
-AC_CACHE_CHECK([whether $am_make supports nested variables],
-   [am_cv_make_support_nested_variables],
-   [if AS_ECHO([['TRUE=$(BAR$(V))
-BAR0=false
-BAR1=true
-V=1
-am__doit:
-	@$(TRUE)
-.PHONY: am__doit']]) | $am_make -f - >/dev/null 2>&1; then
-  am_cv_make_support_nested_variables=yes
-else
-  am_cv_make_support_nested_variables=no
-fi])
-if test $am_cv_make_support_nested_variables = yes; then
-  dnl Using '$V' instead of '$(V)' breaks IRIX make.
-  AM_V='$(V)'
-  AM_DEFAULT_V='$(AM_DEFAULT_VERBOSITY)'
-else
-  AM_V=$AM_DEFAULT_VERBOSITY
-  AM_DEFAULT_V=$AM_DEFAULT_VERBOSITY
-fi
-AC_SUBST([AM_V])dnl
-AM_SUBST_NOTMAKE([AM_V])dnl
-AC_SUBST([AM_DEFAULT_V])dnl
-AM_SUBST_NOTMAKE([AM_DEFAULT_V])dnl
-AC_SUBST([AM_DEFAULT_VERBOSITY])dnl
-AM_BACKSLASH='\'
-AC_SUBST([AM_BACKSLASH])dnl
-_AM_SUBST_NOTMAKE([AM_BACKSLASH])dnl
-])
-
-# Copyright (C) 2001-2013 Free Software Foundation, Inc.
-#
-# This file is free software; the Free Software Foundation
-# gives unlimited permission to copy and/or distribute it,
-# with or without modifications, as long as this notice is preserved.
-
-# AM_PROG_INSTALL_STRIP
-# ---------------------
-# One issue with vendor 'install' (even GNU) is that you can't
-# specify the program used to strip binaries.  This is especially
-# annoying in cross-compiling environments, where the build's strip
-# is unlikely to handle the host's binaries.
-# Fortunately install-sh will honor a STRIPPROG variable, so we
-# always use install-sh in "make install-strip", and initialize
-# STRIPPROG with the value of the STRIP variable (set by the user).
-AC_DEFUN([AM_PROG_INSTALL_STRIP],
-[AC_REQUIRE([AM_PROG_INSTALL_SH])dnl
-# Installed binaries are usually stripped using 'strip' when the user
-# run "make install-strip".  However 'strip' might not be the right
-# tool to use in cross-compilation environments, therefore Automake
-# will honor the 'STRIP' environment variable to overrule this program.
-dnl Don't test for $cross_compiling = yes, because it might be 'maybe'.
-if test "$cross_compiling" != no; then
-  AC_CHECK_TOOL([STRIP], [strip], :)
-fi
-INSTALL_STRIP_PROGRAM="\$(install_sh) -c -s"
-AC_SUBST([INSTALL_STRIP_PROGRAM])])
-
-# Copyright (C) 2006-2013 Free Software Foundation, Inc.
-#
-# This file is free software; the Free Software Foundation
-# gives unlimited permission to copy and/or distribute it,
-# with or without modifications, as long as this notice is preserved.
-
-# _AM_SUBST_NOTMAKE(VARIABLE)
-# ---------------------------
-# Prevent Automake from outputting VARIABLE = @VARIABLE@ in Makefile.in.
-# This macro is traced by Automake.
-AC_DEFUN([_AM_SUBST_NOTMAKE])
-
-# AM_SUBST_NOTMAKE(VARIABLE)
-# --------------------------
-# Public sister of _AM_SUBST_NOTMAKE.
-AC_DEFUN([AM_SUBST_NOTMAKE], [_AM_SUBST_NOTMAKE($@)])
-
-# Check how to create a tarball.                            -*- Autoconf -*-
-
-# Copyright (C) 2004-2013 Free Software Foundation, Inc.
-#
-# This file is free software; the Free Software Foundation
-# gives unlimited permission to copy and/or distribute it,
-# with or without modifications, as long as this notice is preserved.
-
-# _AM_PROG_TAR(FORMAT)
-# --------------------
-# Check how to create a tarball in format FORMAT.
-# FORMAT should be one of 'v7', 'ustar', or 'pax'.
-#
-# Substitute a variable $(am__tar) that is a command
-# writing to stdout a FORMAT-tarball containing the directory
-# $tardir.
-#     tardir=directory && $(am__tar) > result.tar
-#
-# Substitute a variable $(am__untar) that extract such
-# a tarball read from stdin.
-#     $(am__untar) < result.tar
-#
-AC_DEFUN([_AM_PROG_TAR],
-[# Always define AMTAR for backward compatibility.  Yes, it's still used
-# in the wild :-(  We should find a proper way to deprecate it ...
-AC_SUBST([AMTAR], ['$${TAR-tar}'])
-
-# We'll loop over all known methods to create a tar archive until one works.
-_am_tools='gnutar m4_if([$1], [ustar], [plaintar]) pax cpio none'
-
-m4_if([$1], [v7],
-  [am__tar='$${TAR-tar} chof - "$$tardir"' am__untar='$${TAR-tar} xf -'],
-
-  [m4_case([$1],
-    [ustar],
-     [# The POSIX 1988 'ustar' format is defined with fixed-size fields.
-      # There is notably a 21 bits limit for the UID and the GID.  In fact,
-      # the 'pax' utility can hang on bigger UID/GID (see automake bug#8343
-      # and bug#13588).
-      am_max_uid=2097151 # 2^21 - 1
-      am_max_gid=$am_max_uid
-      # The $UID and $GID variables are not portable, so we need to resort
-      # to the POSIX-mandated id(1) utility.  Errors in the 'id' calls
-      # below are definitely unexpected, so allow the users to see them
-      # (that is, avoid stderr redirection).
-      am_uid=`id -u || echo unknown`
-      am_gid=`id -g || echo unknown`
-      AC_MSG_CHECKING([whether UID '$am_uid' is supported by ustar format])
-      if test $am_uid -le $am_max_uid; then
-         AC_MSG_RESULT([yes])
-      else
-         AC_MSG_RESULT([no])
-         _am_tools=none
-      fi
-      AC_MSG_CHECKING([whether GID '$am_gid' is supported by ustar format])
-      if test $am_gid -le $am_max_gid; then
-         AC_MSG_RESULT([yes])
-      else
-        AC_MSG_RESULT([no])
-        _am_tools=none
-      fi],
-
-  [pax],
-    [],
-
-  [m4_fatal([Unknown tar format])])
-
-  AC_MSG_CHECKING([how to create a $1 tar archive])
-
-  # Go ahead even if we have the value already cached.  We do so because we
-  # need to set the values for the 'am__tar' and 'am__untar' variables.
-  _am_tools=${am_cv_prog_tar_$1-$_am_tools}
-
-  for _am_tool in $_am_tools; do
-    case $_am_tool in
-    gnutar)
-      for _am_tar in tar gnutar gtar; do
-        AM_RUN_LOG([$_am_tar --version]) && break
-      done
-      am__tar="$_am_tar --format=m4_if([$1], [pax], [posix], [$1]) -chf - "'"$$tardir"'
-      am__tar_="$_am_tar --format=m4_if([$1], [pax], [posix], [$1]) -chf - "'"$tardir"'
-      am__untar="$_am_tar -xf -"
-      ;;
-    plaintar)
-      # Must skip GNU tar: if it does not support --format= it doesn't create
-      # ustar tarball either.
-      (tar --version) >/dev/null 2>&1 && continue
-      am__tar='tar chf - "$$tardir"'
-      am__tar_='tar chf - "$tardir"'
-      am__untar='tar xf -'
-      ;;
-    pax)
-      am__tar='pax -L -x $1 -w "$$tardir"'
-      am__tar_='pax -L -x $1 -w "$tardir"'
-      am__untar='pax -r'
-      ;;
-    cpio)
-      am__tar='find "$$tardir" -print | cpio -o -H $1 -L'
-      am__tar_='find "$tardir" -print | cpio -o -H $1 -L'
-      am__untar='cpio -i -H $1 -d'
-      ;;
-    none)
-      am__tar=false
-      am__tar_=false
-      am__untar=false
-      ;;
-    esac
-
-    # If the value was cached, stop now.  We just wanted to have am__tar
-    # and am__untar set.
-    test -n "${am_cv_prog_tar_$1}" && break
-
-    # tar/untar a dummy directory, and stop if the command works.
-    rm -rf conftest.dir
-    mkdir conftest.dir
-    echo GrepMe > conftest.dir/file
-    AM_RUN_LOG([tardir=conftest.dir && eval $am__tar_ >conftest.tar])
-    rm -rf conftest.dir
-    if test -s conftest.tar; then
-      AM_RUN_LOG([$am__untar <conftest.tar])
-      AM_RUN_LOG([cat conftest.dir/file])
-      grep GrepMe conftest.dir/file >/dev/null 2>&1 && break
-    fi
-  done
-  rm -rf conftest.dir
-
-  AC_CACHE_VAL([am_cv_prog_tar_$1], [am_cv_prog_tar_$1=$_am_tool])
-  AC_MSG_RESULT([$am_cv_prog_tar_$1])])
-
-AC_SUBST([am__tar])
-AC_SUBST([am__untar])
-]) # _AM_PROG_TAR
-
-m4_include([m4/00gnulib.m4])
-m4_include([m4/codeset.m4])
-m4_include([m4/configmake.m4])
-m4_include([m4/extensions.m4])
-m4_include([m4/extern-inline.m4])
-m4_include([m4/fcntl-o.m4])
-m4_include([m4/glibc21.m4])
-m4_include([m4/gnulib-common.m4])
-m4_include([m4/include_next.m4])
-m4_include([m4/inttypes-pri.m4])
-m4_include([m4/inttypes.m4])
-m4_include([m4/libunistring-base.m4])
-m4_include([m4/localcharset.m4])
-m4_include([m4/longlong.m4])
-m4_include([m4/multiarch.m4])
-m4_include([m4/onceonly.m4])
-m4_include([m4/stdbool.m4])
-m4_include([m4/stddef_h.m4])
-m4_include([m4/stdint.m4])
-m4_include([m4/warn-on-use.m4])
-m4_include([m4/wchar_h.m4])
-m4_include([m4/wchar_t.m4])
-m4_include([m4/wctype_h.m4])
-m4_include([m4/wcwidth.m4])
-m4_include([m4/wint_t.m4])
diff -Nuar groff-1.22.3.old/src/libs/gnulib/build-aux/compile groff-1.22.3/src/libs/gnulib/build-aux/compile
--- groff-1.22.3.old/src/libs/gnulib/build-aux/compile	2014-11-04 10:38:35.646518734 +0200
+++ groff-1.22.3/src/libs/gnulib/build-aux/compile	1970-01-01 02:00:00.000000000 +0200
@@ -1,347 +0,0 @@
-#! /bin/sh
-# Wrapper for compilers which do not understand '-c -o'.
-
-scriptversion=2012-10-14.11; # UTC
-
-# Copyright (C) 1999-2013 Free Software Foundation, Inc.
-# Written by Tom Tromey <tromey@cygnus.com>.
-#
-# This program is free software; you can redistribute it and/or modify
-# it under the terms of the GNU General Public License as published by
-# the Free Software Foundation; either version 2, or (at your option)
-# any later version.
-#
-# This program is distributed in the hope that it will be useful,
-# but WITHOUT ANY WARRANTY; without even the implied warranty of
-# MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
-# GNU General Public License for more details.
-#
-# You should have received a copy of the GNU General Public License
-# along with this program.  If not, see <http://www.gnu.org/licenses/>.
-
-# As a special exception to the GNU General Public License, if you
-# distribute this file as part of a program that contains a
-# configuration script generated by Autoconf, you may include it under
-# the same distribution terms that you use for the rest of that program.
-
-# This file is maintained in Automake, please report
-# bugs to <bug-automake@gnu.org> or send patches to
-# <automake-patches@gnu.org>.
-
-nl='
-'
-
-# We need space, tab and new line, in precisely that order.  Quoting is
-# there to prevent tools from complaining about whitespace usage.
-IFS=" ""	$nl"
-
-file_conv=
-
-# func_file_conv build_file lazy
-# Convert a $build file to $host form and store it in $file
-# Currently only supports Windows hosts. If the determined conversion
-# type is listed in (the comma separated) LAZY, no conversion will
-# take place.
-func_file_conv ()
-{
-  file=$1
-  case $file in
-    / | /[!/]*) # absolute file, and not a UNC file
-      if test -z "$file_conv"; then
-	# lazily determine how to convert abs files
-	case `uname -s` in
-	  MINGW*)
-	    file_conv=mingw
-	    ;;
-	  CYGWIN*)
-	    file_conv=cygwin
-	    ;;
-	  *)
-	    file_conv=wine
-	    ;;
-	esac
-      fi
-      case $file_conv/,$2, in
-	*,$file_conv,*)
-	  ;;
-	mingw/*)
-	  file=`cmd //C echo "$file " | sed -e 's/"\(.*\) " *$/\1/'`
-	  ;;
-	cygwin/*)
-	  file=`cygpath -m "$file" || echo "$file"`
-	  ;;
-	wine/*)
-	  file=`winepath -w "$file" || echo "$file"`
-	  ;;
-      esac
-      ;;
-  esac
-}
-
-# func_cl_dashL linkdir
-# Make cl look for libraries in LINKDIR
-func_cl_dashL ()
-{
-  func_file_conv "$1"
-  if test -z "$lib_path"; then
-    lib_path=$file
-  else
-    lib_path="$lib_path;$file"
-  fi
-  linker_opts="$linker_opts -LIBPATH:$file"
-}
-
-# func_cl_dashl library
-# Do a library search-path lookup for cl
-func_cl_dashl ()
-{
-  lib=$1
-  found=no
-  save_IFS=$IFS
-  IFS=';'
-  for dir in $lib_path $LIB
-  do
-    IFS=$save_IFS
-    if $shared && test -f "$dir/$lib.dll.lib"; then
-      found=yes
-      lib=$dir/$lib.dll.lib
-      break
-    fi
-    if test -f "$dir/$lib.lib"; then
-      found=yes
-      lib=$dir/$lib.lib
-      break
-    fi
-    if test -f "$dir/lib$lib.a"; then
-      found=yes
-      lib=$dir/lib$lib.a
-      break
-    fi
-  done
-  IFS=$save_IFS
-
-  if test "$found" != yes; then
-    lib=$lib.lib
-  fi
-}
-
-# func_cl_wrapper cl arg...
-# Adjust compile command to suit cl
-func_cl_wrapper ()
-{
-  # Assume a capable shell
-  lib_path=
-  shared=:
-  linker_opts=
-  for arg
-  do
-    if test -n "$eat"; then
-      eat=
-    else
-      case $1 in
-	-o)
-	  # configure might choose to run compile as 'compile cc -o foo foo.c'.
-	  eat=1
-	  case $2 in
-	    *.o | *.[oO][bB][jJ])
-	      func_file_conv "$2"
-	      set x "$@" -Fo"$file"
-	      shift
-	      ;;
-	    *)
-	      func_file_conv "$2"
-	      set x "$@" -Fe"$file"
-	      shift
-	      ;;
-	  esac
-	  ;;
-	-I)
-	  eat=1
-	  func_file_conv "$2" mingw
-	  set x "$@" -I"$file"
-	  shift
-	  ;;
-	-I*)
-	  func_file_conv "${1#-I}" mingw
-	  set x "$@" -I"$file"
-	  shift
-	  ;;
-	-l)
-	  eat=1
-	  func_cl_dashl "$2"
-	  set x "$@" "$lib"
-	  shift
-	  ;;
-	-l*)
-	  func_cl_dashl "${1#-l}"
-	  set x "$@" "$lib"
-	  shift
-	  ;;
-	-L)
-	  eat=1
-	  func_cl_dashL "$2"
-	  ;;
-	-L*)
-	  func_cl_dashL "${1#-L}"
-	  ;;
-	-static)
-	  shared=false
-	  ;;
-	-Wl,*)
-	  arg=${1#-Wl,}
-	  save_ifs="$IFS"; IFS=','
-	  for flag in $arg; do
-	    IFS="$save_ifs"
-	    linker_opts="$linker_opts $flag"
-	  done
-	  IFS="$save_ifs"
-	  ;;
-	-Xlinker)
-	  eat=1
-	  linker_opts="$linker_opts $2"
-	  ;;
-	-*)
-	  set x "$@" "$1"
-	  shift
-	  ;;
-	*.cc | *.CC | *.cxx | *.CXX | *.[cC]++)
-	  func_file_conv "$1"
-	  set x "$@" -Tp"$file"
-	  shift
-	  ;;
-	*.c | *.cpp | *.CPP | *.lib | *.LIB | *.Lib | *.OBJ | *.obj | *.[oO])
-	  func_file_conv "$1" mingw
-	  set x "$@" "$file"
-	  shift
-	  ;;
-	*)
-	  set x "$@" "$1"
-	  shift
-	  ;;
-      esac
-    fi
-    shift
-  done
-  if test -n "$linker_opts"; then
-    linker_opts="-link$linker_opts"
-  fi
-  exec "$@" $linker_opts
-  exit 1
-}
-
-eat=
-
-case $1 in
-  '')
-     echo "$0: No command.  Try '$0 --help' for more information." 1>&2
-     exit 1;
-     ;;
-  -h | --h*)
-    cat <<\EOF
-Usage: compile [--help] [--version] PROGRAM [ARGS]
-
-Wrapper for compilers which do not understand '-c -o'.
-Remove '-o dest.o' from ARGS, run PROGRAM with the remaining
-arguments, and rename the output as expected.
-
-If you are trying to build a whole package this is not the
-right script to run: please start by reading the file 'INSTALL'.
-
-Report bugs to <bug-automake@gnu.org>.
-EOF
-    exit $?
-    ;;
-  -v | --v*)
-    echo "compile $scriptversion"
-    exit $?
-    ;;
-  cl | *[/\\]cl | cl.exe | *[/\\]cl.exe )
-    func_cl_wrapper "$@"      # Doesn't return...
-    ;;
-esac
-
-ofile=
-cfile=
-
-for arg
-do
-  if test -n "$eat"; then
-    eat=
-  else
-    case $1 in
-      -o)
-	# configure might choose to run compile as 'compile cc -o foo foo.c'.
-	# So we strip '-o arg' only if arg is an object.
-	eat=1
-	case $2 in
-	  *.o | *.obj)
-	    ofile=$2
-	    ;;
-	  *)
-	    set x "$@" -o "$2"
-	    shift
-	    ;;
-	esac
-	;;
-      *.c)
-	cfile=$1
-	set x "$@" "$1"
-	shift
-	;;
-      *)
-	set x "$@" "$1"
-	shift
-	;;
-    esac
-  fi
-  shift
-done
-
-if test -z "$ofile" || test -z "$cfile"; then
-  # If no '-o' option was seen then we might have been invoked from a
-  # pattern rule where we don't need one.  That is ok -- this is a
-  # normal compilation that the losing compiler can handle.  If no
-  # '.c' file was seen then we are probably linking.  That is also
-  # ok.
-  exec "$@"
-fi
-
-# Name of file we expect compiler to create.
-cofile=`echo "$cfile" | sed 's|^.*[\\/]||; s|^[a-zA-Z]:||; s/\.c$/.o/'`
-
-# Create the lock directory.
-# Note: use '[/\\:.-]' here to ensure that we don't use the same name
-# that we are using for the .o file.  Also, base the name on the expected
-# object file name, since that is what matters with a parallel build.
-lockdir=`echo "$cofile" | sed -e 's|[/\\:.-]|_|g'`.d
-while true; do
-  if mkdir "$lockdir" >/dev/null 2>&1; then
-    break
-  fi
-  sleep 1
-done
-# FIXME: race condition here if user kills between mkdir and trap.
-trap "rmdir '$lockdir'; exit 1" 1 2 15
-
-# Run the compile.
-"$@"
-ret=$?
-
-if test -f "$cofile"; then
-  test "$cofile" = "$ofile" || mv "$cofile" "$ofile"
-elif test -f "${cofile}bj"; then
-  test "${cofile}bj" = "$ofile" || mv "${cofile}bj" "$ofile"
-fi
-
-rmdir "$lockdir"
-exit $ret
-
-# Local Variables:
-# mode: shell-script
-# sh-indentation: 2
-# eval: (add-hook 'write-file-hooks 'time-stamp)
-# time-stamp-start: "scriptversion="
-# time-stamp-format: "%:y-%02m-%02d.%02H"
-# time-stamp-time-zone: "UTC"
-# time-stamp-end: "; # UTC"
-# End:
diff -Nuar groff-1.22.3.old/src/libs/gnulib/build-aux/config.guess groff-1.22.3/src/libs/gnulib/build-aux/config.guess
--- groff-1.22.3.old/src/libs/gnulib/build-aux/config.guess	2014-11-04 10:38:35.646518734 +0200
+++ groff-1.22.3/src/libs/gnulib/build-aux/config.guess	1970-01-01 02:00:00.000000000 +0200
@@ -1,1420 +0,0 @@
-#! /bin/sh
-# Attempt to guess a canonical system name.
-#   Copyright 1992-2014 Free Software Foundation, Inc.
-
-timestamp='2014-03-23'
-
-# This file is free software; you can redistribute it and/or modify it
-# under the terms of the GNU General Public License as published by
-# the Free Software Foundation; either version 3 of the License, or
-# (at your option) any later version.
-#
-# This program is distributed in the hope that it will be useful, but
-# WITHOUT ANY WARRANTY; without even the implied warranty of
-# MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the GNU
-# General Public License for more details.
-#
-# You should have received a copy of the GNU General Public License
-# along with this program; if not, see <http://www.gnu.org/licenses/>.
-#
-# As a special exception to the GNU General Public License, if you
-# distribute this file as part of a program that contains a
-# configuration script generated by Autoconf, you may include it under
-# the same distribution terms that you use for the rest of that
-# program.  This Exception is an additional permission under section 7
-# of the GNU General Public License, version 3 ("GPLv3").
-#
-# Originally written by Per Bothner.
-#
-# You can get the latest version of this script from:
-# http://git.savannah.gnu.org/gitweb/?p=config.git;a=blob_plain;f=config.guess;hb=HEAD
-#
-# Please send patches with a ChangeLog entry to config-patches@gnu.org.
-
-
-me=`echo "$0" | sed -e 's,.*/,,'`
-
-usage="\
-Usage: $0 [OPTION]
-
-Output the configuration name of the system \`$me' is run on.
-
-Operation modes:
-  -h, --help         print this help, then exit
-  -t, --time-stamp   print date of last modification, then exit
-  -v, --version      print version number, then exit
-
-Report bugs and patches to <config-patches@gnu.org>."
-
-version="\
-GNU config.guess ($timestamp)
-
-Originally written by Per Bothner.
-Copyright 1992-2014 Free Software Foundation, Inc.
-
-This is free software; see the source for copying conditions.  There is NO
-warranty; not even for MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE."
-
-help="
-Try \`$me --help' for more information."
-
-# Parse command line
-while test $# -gt 0 ; do
-  case $1 in
-    --time-stamp | --time* | -t )
-       echo "$timestamp" ; exit ;;
-    --version | -v )
-       echo "$version" ; exit ;;
-    --help | --h* | -h )
-       echo "$usage"; exit ;;
-    -- )     # Stop option processing
-       shift; break ;;
-    - )	# Use stdin as input.
-       break ;;
-    -* )
-       echo "$me: invalid option $1$help" >&2
-       exit 1 ;;
-    * )
-       break ;;
-  esac
-done
-
-if test $# != 0; then
-  echo "$me: too many arguments$help" >&2
-  exit 1
-fi
-
-trap 'exit 1' 1 2 15
-
-# CC_FOR_BUILD -- compiler used by this script. Note that the use of a
-# compiler to aid in system detection is discouraged as it requires
-# temporary files to be created and, as you can see below, it is a
-# headache to deal with in a portable fashion.
-
-# Historically, `CC_FOR_BUILD' used to be named `HOST_CC'. We still
-# use `HOST_CC' if defined, but it is deprecated.
-
-# Portable tmp directory creation inspired by the Autoconf team.
-
-set_cc_for_build='
-trap "exitcode=\$?; (rm -f \$tmpfiles 2>/dev/null; rmdir \$tmp 2>/dev/null) && exit \$exitcode" 0 ;
-trap "rm -f \$tmpfiles 2>/dev/null; rmdir \$tmp 2>/dev/null; exit 1" 1 2 13 15 ;
-: ${TMPDIR=/tmp} ;
- { tmp=`(umask 077 && mktemp -d "$TMPDIR/cgXXXXXX") 2>/dev/null` && test -n "$tmp" && test -d "$tmp" ; } ||
- { test -n "$RANDOM" && tmp=$TMPDIR/cg$$-$RANDOM && (umask 077 && mkdir $tmp) ; } ||
- { tmp=$TMPDIR/cg-$$ && (umask 077 && mkdir $tmp) && echo "Warning: creating insecure temp directory" >&2 ; } ||
- { echo "$me: cannot create a temporary directory in $TMPDIR" >&2 ; exit 1 ; } ;
-dummy=$tmp/dummy ;
-tmpfiles="$dummy.c $dummy.o $dummy.rel $dummy" ;
-case $CC_FOR_BUILD,$HOST_CC,$CC in
- ,,)    echo "int x;" > $dummy.c ;
-	for c in cc gcc c89 c99 ; do
-	  if ($c -c -o $dummy.o $dummy.c) >/dev/null 2>&1 ; then
-	     CC_FOR_BUILD="$c"; break ;
-	  fi ;
-	done ;
-	if test x"$CC_FOR_BUILD" = x ; then
-	  CC_FOR_BUILD=no_compiler_found ;
-	fi
-	;;
- ,,*)   CC_FOR_BUILD=$CC ;;
- ,*,*)  CC_FOR_BUILD=$HOST_CC ;;
-esac ; set_cc_for_build= ;'
-
-# This is needed to find uname on a Pyramid OSx when run in the BSD universe.
-# (ghazi@noc.rutgers.edu 1994-08-24)
-if (test -f /.attbin/uname) >/dev/null 2>&1 ; then
-	PATH=$PATH:/.attbin ; export PATH
-fi
-
-UNAME_MACHINE=`(uname -m) 2>/dev/null` || UNAME_MACHINE=unknown
-UNAME_RELEASE=`(uname -r) 2>/dev/null` || UNAME_RELEASE=unknown
-UNAME_SYSTEM=`(uname -s) 2>/dev/null`  || UNAME_SYSTEM=unknown
-UNAME_VERSION=`(uname -v) 2>/dev/null` || UNAME_VERSION=unknown
-
-case "${UNAME_SYSTEM}" in
-Linux|GNU|GNU/*)
-	# If the system lacks a compiler, then just pick glibc.
-	# We could probably try harder.
-	LIBC=gnu
-
-	eval $set_cc_for_build
-	cat <<-EOF > $dummy.c
-	#include <features.h>
-	#if defined(__UCLIBC__)
-	LIBC=uclibc
-	#elif defined(__dietlibc__)
-	LIBC=dietlibc
-	#else
-	LIBC=gnu
-	#endif
-	EOF
-	eval `$CC_FOR_BUILD -E $dummy.c 2>/dev/null | grep '^LIBC' | sed 's, ,,g'`
-	;;
-esac
-
-# Note: order is significant - the case branches are not exclusive.
-
-case "${UNAME_MACHINE}:${UNAME_SYSTEM}:${UNAME_RELEASE}:${UNAME_VERSION}" in
-    *:NetBSD:*:*)
-	# NetBSD (nbsd) targets should (where applicable) match one or
-	# more of the tuples: *-*-netbsdelf*, *-*-netbsdaout*,
-	# *-*-netbsdecoff* and *-*-netbsd*.  For targets that recently
-	# switched to ELF, *-*-netbsd* would select the old
-	# object file format.  This provides both forward
-	# compatibility and a consistent mechanism for selecting the
-	# object file format.
-	#
-	# Note: NetBSD doesn't particularly care about the vendor
-	# portion of the name.  We always set it to "unknown".
-	sysctl="sysctl -n hw.machine_arch"
-	UNAME_MACHINE_ARCH=`(/sbin/$sysctl 2>/dev/null || \
-	    /usr/sbin/$sysctl 2>/dev/null || echo unknown)`
-	case "${UNAME_MACHINE_ARCH}" in
-	    armeb) machine=armeb-unknown ;;
-	    arm*) machine=arm-unknown ;;
-	    sh3el) machine=shl-unknown ;;
-	    sh3eb) machine=sh-unknown ;;
-	    sh5el) machine=sh5le-unknown ;;
-	    *) machine=${UNAME_MACHINE_ARCH}-unknown ;;
-	esac
-	# The Operating System including object format, if it has switched
-	# to ELF recently, or will in the future.
-	case "${UNAME_MACHINE_ARCH}" in
-	    arm*|i386|m68k|ns32k|sh3*|sparc|vax)
-		eval $set_cc_for_build
-		if echo __ELF__ | $CC_FOR_BUILD -E - 2>/dev/null \
-			| grep -q __ELF__
-		then
-		    # Once all utilities can be ECOFF (netbsdecoff) or a.out (netbsdaout).
-		    # Return netbsd for either.  FIX?
-		    os=netbsd
-		else
-		    os=netbsdelf
-		fi
-		;;
-	    *)
-		os=netbsd
-		;;
-	esac
-	# The OS release
-	# Debian GNU/NetBSD machines have a different userland, and
-	# thus, need a distinct triplet. However, they do not need
-	# kernel version information, so it can be replaced with a
-	# suitable tag, in the style of linux-gnu.
-	case "${UNAME_VERSION}" in
-	    Debian*)
-		release='-gnu'
-		;;
-	    *)
-		release=`echo ${UNAME_RELEASE}|sed -e 's/[-_].*/\./'`
-		;;
-	esac
-	# Since CPU_TYPE-MANUFACTURER-KERNEL-OPERATING_SYSTEM:
-	# contains redundant information, the shorter form:
-	# CPU_TYPE-MANUFACTURER-OPERATING_SYSTEM is used.
-	echo "${machine}-${os}${release}"
-	exit ;;
-    *:Bitrig:*:*)
-	UNAME_MACHINE_ARCH=`arch | sed 's/Bitrig.//'`
-	echo ${UNAME_MACHINE_ARCH}-unknown-bitrig${UNAME_RELEASE}
-	exit ;;
-    *:OpenBSD:*:*)
-	UNAME_MACHINE_ARCH=`arch | sed 's/OpenBSD.//'`
-	echo ${UNAME_MACHINE_ARCH}-unknown-openbsd${UNAME_RELEASE}
-	exit ;;
-    *:ekkoBSD:*:*)
-	echo ${UNAME_MACHINE}-unknown-ekkobsd${UNAME_RELEASE}
-	exit ;;
-    *:SolidBSD:*:*)
-	echo ${UNAME_MACHINE}-unknown-solidbsd${UNAME_RELEASE}
-	exit ;;
-    macppc:MirBSD:*:*)
-	echo powerpc-unknown-mirbsd${UNAME_RELEASE}
-	exit ;;
-    *:MirBSD:*:*)
-	echo ${UNAME_MACHINE}-unknown-mirbsd${UNAME_RELEASE}
-	exit ;;
-    alpha:OSF1:*:*)
-	case $UNAME_RELEASE in
-	*4.0)
-		UNAME_RELEASE=`/usr/sbin/sizer -v | awk '{print $3}'`
-		;;
-	*5.*)
-		UNAME_RELEASE=`/usr/sbin/sizer -v | awk '{print $4}'`
-		;;
-	esac
-	# According to Compaq, /usr/sbin/psrinfo has been available on
-	# OSF/1 and Tru64 systems produced since 1995.  I hope that
-	# covers most systems running today.  This code pipes the CPU
-	# types through head -n 1, so we only detect the type of CPU 0.
-	ALPHA_CPU_TYPE=`/usr/sbin/psrinfo -v | sed -n -e 's/^  The alpha \(.*\) processor.*$/\1/p' | head -n 1`
-	case "$ALPHA_CPU_TYPE" in
-	    "EV4 (21064)")
-		UNAME_MACHINE="alpha" ;;
-	    "EV4.5 (21064)")
-		UNAME_MACHINE="alpha" ;;
-	    "LCA4 (21066/21068)")
-		UNAME_MACHINE="alpha" ;;
-	    "EV5 (21164)")
-		UNAME_MACHINE="alphaev5" ;;
-	    "EV5.6 (21164A)")
-		UNAME_MACHINE="alphaev56" ;;
-	    "EV5.6 (21164PC)")
-		UNAME_MACHINE="alphapca56" ;;
-	    "EV5.7 (21164PC)")
-		UNAME_MACHINE="alphapca57" ;;
-	    "EV6 (21264)")
-		UNAME_MACHINE="alphaev6" ;;
-	    "EV6.7 (21264A)")
-		UNAME_MACHINE="alphaev67" ;;
-	    "EV6.8CB (21264C)")
-		UNAME_MACHINE="alphaev68" ;;
-	    "EV6.8AL (21264B)")
-		UNAME_MACHINE="alphaev68" ;;
-	    "EV6.8CX (21264D)")
-		UNAME_MACHINE="alphaev68" ;;
-	    "EV6.9A (21264/EV69A)")
-		UNAME_MACHINE="alphaev69" ;;
-	    "EV7 (21364)")
-		UNAME_MACHINE="alphaev7" ;;
-	    "EV7.9 (21364A)")
-		UNAME_MACHINE="alphaev79" ;;
-	esac
-	# A Pn.n version is a patched version.
-	# A Vn.n version is a released version.
-	# A Tn.n version is a released field test version.
-	# A Xn.n version is an unreleased experimental baselevel.
-	# 1.2 uses "1.2" for uname -r.
-	echo ${UNAME_MACHINE}-dec-osf`echo ${UNAME_RELEASE} | sed -e 's/^[PVTX]//' | tr 'ABCDEFGHIJKLMNOPQRSTUVWXYZ' 'abcdefghijklmnopqrstuvwxyz'`
-	# Reset EXIT trap before exiting to avoid spurious non-zero exit code.
-	exitcode=$?
-	trap '' 0
-	exit $exitcode ;;
-    Alpha\ *:Windows_NT*:*)
-	# How do we know it's Interix rather than the generic POSIX subsystem?
-	# Should we change UNAME_MACHINE based on the output of uname instead
-	# of the specific Alpha model?
-	echo alpha-pc-interix
-	exit ;;
-    21064:Windows_NT:50:3)
-	echo alpha-dec-winnt3.5
-	exit ;;
-    Amiga*:UNIX_System_V:4.0:*)
-	echo m68k-unknown-sysv4
-	exit ;;
-    *:[Aa]miga[Oo][Ss]:*:*)
-	echo ${UNAME_MACHINE}-unknown-amigaos
-	exit ;;
-    *:[Mm]orph[Oo][Ss]:*:*)
-	echo ${UNAME_MACHINE}-unknown-morphos
-	exit ;;
-    *:OS/390:*:*)
-	echo i370-ibm-openedition
-	exit ;;
-    *:z/VM:*:*)
-	echo s390-ibm-zvmoe
-	exit ;;
-    *:OS400:*:*)
-	echo powerpc-ibm-os400
-	exit ;;
-    arm:RISC*:1.[012]*:*|arm:riscix:1.[012]*:*)
-	echo arm-acorn-riscix${UNAME_RELEASE}
-	exit ;;
-    arm*:riscos:*:*|arm*:RISCOS:*:*)
-	echo arm-unknown-riscos
-	exit ;;
-    SR2?01:HI-UX/MPP:*:* | SR8000:HI-UX/MPP:*:*)
-	echo hppa1.1-hitachi-hiuxmpp
-	exit ;;
-    Pyramid*:OSx*:*:* | MIS*:OSx*:*:* | MIS*:SMP_DC-OSx*:*:*)
-	# akee@wpdis03.wpafb.af.mil (Earle F. Ake) contributed MIS and NILE.
-	if test "`(/bin/universe) 2>/dev/null`" = att ; then
-		echo pyramid-pyramid-sysv3
-	else
-		echo pyramid-pyramid-bsd
-	fi
-	exit ;;
-    NILE*:*:*:dcosx)
-	echo pyramid-pyramid-svr4
-	exit ;;
-    DRS?6000:unix:4.0:6*)
-	echo sparc-icl-nx6
-	exit ;;
-    DRS?6000:UNIX_SV:4.2*:7* | DRS?6000:isis:4.2*:7*)
-	case `/usr/bin/uname -p` in
-	    sparc) echo sparc-icl-nx7; exit ;;
-	esac ;;
-    s390x:SunOS:*:*)
-	echo ${UNAME_MACHINE}-ibm-solaris2`echo ${UNAME_RELEASE}|sed -e 's/[^.]*//'`
-	exit ;;
-    sun4H:SunOS:5.*:*)
-	echo sparc-hal-solaris2`echo ${UNAME_RELEASE}|sed -e 's/[^.]*//'`
-	exit ;;
-    sun4*:SunOS:5.*:* | tadpole*:SunOS:5.*:*)
-	echo sparc-sun-solaris2`echo ${UNAME_RELEASE}|sed -e 's/[^.]*//'`
-	exit ;;
-    i86pc:AuroraUX:5.*:* | i86xen:AuroraUX:5.*:*)
-	echo i386-pc-auroraux${UNAME_RELEASE}
-	exit ;;
-    i86pc:SunOS:5.*:* | i86xen:SunOS:5.*:*)
-	eval $set_cc_for_build
-	SUN_ARCH="i386"
-	# If there is a compiler, see if it is configured for 64-bit objects.
-	# Note that the Sun cc does not turn __LP64__ into 1 like gcc does.
-	# This test works for both compilers.
-	if [ "$CC_FOR_BUILD" != 'no_compiler_found' ]; then
-	    if (echo '#ifdef __amd64'; echo IS_64BIT_ARCH; echo '#endif') | \
-		(CCOPTS= $CC_FOR_BUILD -E - 2>/dev/null) | \
-		grep IS_64BIT_ARCH >/dev/null
-	    then
-		SUN_ARCH="x86_64"
-	    fi
-	fi
-	echo ${SUN_ARCH}-pc-solaris2`echo ${UNAME_RELEASE}|sed -e 's/[^.]*//'`
-	exit ;;
-    sun4*:SunOS:6*:*)
-	# According to config.sub, this is the proper way to canonicalize
-	# SunOS6.  Hard to guess exactly what SunOS6 will be like, but
-	# it's likely to be more like Solaris than SunOS4.
-	echo sparc-sun-solaris3`echo ${UNAME_RELEASE}|sed -e 's/[^.]*//'`
-	exit ;;
-    sun4*:SunOS:*:*)
-	case "`/usr/bin/arch -k`" in
-	    Series*|S4*)
-		UNAME_RELEASE=`uname -v`
-		;;
-	esac
-	# Japanese Language versions have a version number like `4.1.3-JL'.
-	echo sparc-sun-sunos`echo ${UNAME_RELEASE}|sed -e 's/-/_/'`
-	exit ;;
-    sun3*:SunOS:*:*)
-	echo m68k-sun-sunos${UNAME_RELEASE}
-	exit ;;
-    sun*:*:4.2BSD:*)
-	UNAME_RELEASE=`(sed 1q /etc/motd | awk '{print substr($5,1,3)}') 2>/dev/null`
-	test "x${UNAME_RELEASE}" = "x" && UNAME_RELEASE=3
-	case "`/bin/arch`" in
-	    sun3)
-		echo m68k-sun-sunos${UNAME_RELEASE}
-		;;
-	    sun4)
-		echo sparc-sun-sunos${UNAME_RELEASE}
-		;;
-	esac
-	exit ;;
-    aushp:SunOS:*:*)
-	echo sparc-auspex-sunos${UNAME_RELEASE}
-	exit ;;
-    # The situation for MiNT is a little confusing.  The machine name
-    # can be virtually everything (everything which is not
-    # "atarist" or "atariste" at least should have a processor
-    # > m68000).  The system name ranges from "MiNT" over "FreeMiNT"
-    # to the lowercase version "mint" (or "freemint").  Finally
-    # the system name "TOS" denotes a system which is actually not
-    # MiNT.  But MiNT is downward compatible to TOS, so this should
-    # be no problem.
-    atarist[e]:*MiNT:*:* | atarist[e]:*mint:*:* | atarist[e]:*TOS:*:*)
-	echo m68k-atari-mint${UNAME_RELEASE}
-	exit ;;
-    atari*:*MiNT:*:* | atari*:*mint:*:* | atarist[e]:*TOS:*:*)
-	echo m68k-atari-mint${UNAME_RELEASE}
-	exit ;;
-    *falcon*:*MiNT:*:* | *falcon*:*mint:*:* | *falcon*:*TOS:*:*)
-	echo m68k-atari-mint${UNAME_RELEASE}
-	exit ;;
-    milan*:*MiNT:*:* | milan*:*mint:*:* | *milan*:*TOS:*:*)
-	echo m68k-milan-mint${UNAME_RELEASE}
-	exit ;;
-    hades*:*MiNT:*:* | hades*:*mint:*:* | *hades*:*TOS:*:*)
-	echo m68k-hades-mint${UNAME_RELEASE}
-	exit ;;
-    *:*MiNT:*:* | *:*mint:*:* | *:*TOS:*:*)
-	echo m68k-unknown-mint${UNAME_RELEASE}
-	exit ;;
-    m68k:machten:*:*)
-	echo m68k-apple-machten${UNAME_RELEASE}
-	exit ;;
-    powerpc:machten:*:*)
-	echo powerpc-apple-machten${UNAME_RELEASE}
-	exit ;;
-    RISC*:Mach:*:*)
-	echo mips-dec-mach_bsd4.3
-	exit ;;
-    RISC*:ULTRIX:*:*)
-	echo mips-dec-ultrix${UNAME_RELEASE}
-	exit ;;
-    VAX*:ULTRIX*:*:*)
-	echo vax-dec-ultrix${UNAME_RELEASE}
-	exit ;;
-    2020:CLIX:*:* | 2430:CLIX:*:*)
-	echo clipper-intergraph-clix${UNAME_RELEASE}
-	exit ;;
-    mips:*:*:UMIPS | mips:*:*:RISCos)
-	eval $set_cc_for_build
-	sed 's/^	//' << EOF >$dummy.c
-#ifdef __cplusplus
-#include <stdio.h>  /* for printf() prototype */
-	int main (int argc, char *argv[]) {
-#else
-	int main (argc, argv) int argc; char *argv[]; {
-#endif
-	#if defined (host_mips) && defined (MIPSEB)
-	#if defined (SYSTYPE_SYSV)
-	  printf ("mips-mips-riscos%ssysv\n", argv[1]); exit (0);
-	#endif
-	#if defined (SYSTYPE_SVR4)
-	  printf ("mips-mips-riscos%ssvr4\n", argv[1]); exit (0);
-	#endif
-	#if defined (SYSTYPE_BSD43) || defined(SYSTYPE_BSD)
-	  printf ("mips-mips-riscos%sbsd\n", argv[1]); exit (0);
-	#endif
-	#endif
-	  exit (-1);
-	}
-EOF
-	$CC_FOR_BUILD -o $dummy $dummy.c &&
-	  dummyarg=`echo "${UNAME_RELEASE}" | sed -n 's/\([0-9]*\).*/\1/p'` &&
-	  SYSTEM_NAME=`$dummy $dummyarg` &&
-	    { echo "$SYSTEM_NAME"; exit; }
-	echo mips-mips-riscos${UNAME_RELEASE}
-	exit ;;
-    Motorola:PowerMAX_OS:*:*)
-	echo powerpc-motorola-powermax
-	exit ;;
-    Motorola:*:4.3:PL8-*)
-	echo powerpc-harris-powermax
-	exit ;;
-    Night_Hawk:*:*:PowerMAX_OS | Synergy:PowerMAX_OS:*:*)
-	echo powerpc-harris-powermax
-	exit ;;
-    Night_Hawk:Power_UNIX:*:*)
-	echo powerpc-harris-powerunix
-	exit ;;
-    m88k:CX/UX:7*:*)
-	echo m88k-harris-cxux7
-	exit ;;
-    m88k:*:4*:R4*)
-	echo m88k-motorola-sysv4
-	exit ;;
-    m88k:*:3*:R3*)
-	echo m88k-motorola-sysv3
-	exit ;;
-    AViiON:dgux:*:*)
-	# DG/UX returns AViiON for all architectures
-	UNAME_PROCESSOR=`/usr/bin/uname -p`
-	if [ $UNAME_PROCESSOR = mc88100 ] || [ $UNAME_PROCESSOR = mc88110 ]
-	then
-	    if [ ${TARGET_BINARY_INTERFACE}x = m88kdguxelfx ] || \
-	       [ ${TARGET_BINARY_INTERFACE}x = x ]
-	    then
-		echo m88k-dg-dgux${UNAME_RELEASE}
-	    else
-		echo m88k-dg-dguxbcs${UNAME_RELEASE}
-	    fi
-	else
-	    echo i586-dg-dgux${UNAME_RELEASE}
-	fi
-	exit ;;
-    M88*:DolphinOS:*:*)	# DolphinOS (SVR3)
-	echo m88k-dolphin-sysv3
-	exit ;;
-    M88*:*:R3*:*)
-	# Delta 88k system running SVR3
-	echo m88k-motorola-sysv3
-	exit ;;
-    XD88*:*:*:*) # Tektronix XD88 system running UTekV (SVR3)
-	echo m88k-tektronix-sysv3
-	exit ;;
-    Tek43[0-9][0-9]:UTek:*:*) # Tektronix 4300 system running UTek (BSD)
-	echo m68k-tektronix-bsd
-	exit ;;
-    *:IRIX*:*:*)
-	echo mips-sgi-irix`echo ${UNAME_RELEASE}|sed -e 's/-/_/g'`
-	exit ;;
-    ????????:AIX?:[12].1:2)   # AIX 2.2.1 or AIX 2.1.1 is RT/PC AIX.
-	echo romp-ibm-aix     # uname -m gives an 8 hex-code CPU id
-	exit ;;               # Note that: echo "'`uname -s`'" gives 'AIX '
-    i*86:AIX:*:*)
-	echo i386-ibm-aix
-	exit ;;
-    ia64:AIX:*:*)
-	if [ -x /usr/bin/oslevel ] ; then
-		IBM_REV=`/usr/bin/oslevel`
-	else
-		IBM_REV=${UNAME_VERSION}.${UNAME_RELEASE}
-	fi
-	echo ${UNAME_MACHINE}-ibm-aix${IBM_REV}
-	exit ;;
-    *:AIX:2:3)
-	if grep bos325 /usr/include/stdio.h >/dev/null 2>&1; then
-		eval $set_cc_for_build
-		sed 's/^		//' << EOF >$dummy.c
-		#include <sys/systemcfg.h>
-
-		main()
-			{
-			if (!__power_pc())
-				exit(1);
-			puts("powerpc-ibm-aix3.2.5");
-			exit(0);
-			}
-EOF
-		if $CC_FOR_BUILD -o $dummy $dummy.c && SYSTEM_NAME=`$dummy`
-		then
-			echo "$SYSTEM_NAME"
-		else
-			echo rs6000-ibm-aix3.2.5
-		fi
-	elif grep bos324 /usr/include/stdio.h >/dev/null 2>&1; then
-		echo rs6000-ibm-aix3.2.4
-	else
-		echo rs6000-ibm-aix3.2
-	fi
-	exit ;;
-    *:AIX:*:[4567])
-	IBM_CPU_ID=`/usr/sbin/lsdev -C -c processor -S available | sed 1q | awk '{ print $1 }'`
-	if /usr/sbin/lsattr -El ${IBM_CPU_ID} | grep ' POWER' >/dev/null 2>&1; then
-		IBM_ARCH=rs6000
-	else
-		IBM_ARCH=powerpc
-	fi
-	if [ -x /usr/bin/oslevel ] ; then
-		IBM_REV=`/usr/bin/oslevel`
-	else
-		IBM_REV=${UNAME_VERSION}.${UNAME_RELEASE}
-	fi
-	echo ${IBM_ARCH}-ibm-aix${IBM_REV}
-	exit ;;
-    *:AIX:*:*)
-	echo rs6000-ibm-aix
-	exit ;;
-    ibmrt:4.4BSD:*|romp-ibm:BSD:*)
-	echo romp-ibm-bsd4.4
-	exit ;;
-    ibmrt:*BSD:*|romp-ibm:BSD:*)            # covers RT/PC BSD and
-	echo romp-ibm-bsd${UNAME_RELEASE}   # 4.3 with uname added to
-	exit ;;                             # report: romp-ibm BSD 4.3
-    *:BOSX:*:*)
-	echo rs6000-bull-bosx
-	exit ;;
-    DPX/2?00:B.O.S.:*:*)
-	echo m68k-bull-sysv3
-	exit ;;
-    9000/[34]??:4.3bsd:1.*:*)
-	echo m68k-hp-bsd
-	exit ;;
-    hp300:4.4BSD:*:* | 9000/[34]??:4.3bsd:2.*:*)
-	echo m68k-hp-bsd4.4
-	exit ;;
-    9000/[34678]??:HP-UX:*:*)
-	HPUX_REV=`echo ${UNAME_RELEASE}|sed -e 's/[^.]*.[0B]*//'`
-	case "${UNAME_MACHINE}" in
-	    9000/31? )            HP_ARCH=m68000 ;;
-	    9000/[34]?? )         HP_ARCH=m68k ;;
-	    9000/[678][0-9][0-9])
-		if [ -x /usr/bin/getconf ]; then
-		    sc_cpu_version=`/usr/bin/getconf SC_CPU_VERSION 2>/dev/null`
-		    sc_kernel_bits=`/usr/bin/getconf SC_KERNEL_BITS 2>/dev/null`
-		    case "${sc_cpu_version}" in
-		      523) HP_ARCH="hppa1.0" ;; # CPU_PA_RISC1_0
-		      528) HP_ARCH="hppa1.1" ;; # CPU_PA_RISC1_1
-		      532)                      # CPU_PA_RISC2_0
-			case "${sc_kernel_bits}" in
-			  32) HP_ARCH="hppa2.0n" ;;
-			  64) HP_ARCH="hppa2.0w" ;;
-			  '') HP_ARCH="hppa2.0" ;;   # HP-UX 10.20
-			esac ;;
-		    esac
-		fi
-		if [ "${HP_ARCH}" = "" ]; then
-		    eval $set_cc_for_build
-		    sed 's/^		//' << EOF >$dummy.c
-
-		#define _HPUX_SOURCE
-		#include <stdlib.h>
-		#include <unistd.h>
-
-		int main ()
-		{
-		#if defined(_SC_KERNEL_BITS)
-		    long bits = sysconf(_SC_KERNEL_BITS);
-		#endif
-		    long cpu  = sysconf (_SC_CPU_VERSION);
-
-		    switch (cpu)
-			{
-			case CPU_PA_RISC1_0: puts ("hppa1.0"); break;
-			case CPU_PA_RISC1_1: puts ("hppa1.1"); break;
-			case CPU_PA_RISC2_0:
-		#if defined(_SC_KERNEL_BITS)
-			    switch (bits)
-				{
-				case 64: puts ("hppa2.0w"); break;
-				case 32: puts ("hppa2.0n"); break;
-				default: puts ("hppa2.0"); break;
-				} break;
-		#else  /* !defined(_SC_KERNEL_BITS) */
-			    puts ("hppa2.0"); break;
-		#endif
-			default: puts ("hppa1.0"); break;
-			}
-		    exit (0);
-		}
-EOF
-		    (CCOPTS= $CC_FOR_BUILD -o $dummy $dummy.c 2>/dev/null) && HP_ARCH=`$dummy`
-		    test -z "$HP_ARCH" && HP_ARCH=hppa
-		fi ;;
-	esac
-	if [ ${HP_ARCH} = "hppa2.0w" ]
-	then
-	    eval $set_cc_for_build
-
-	    # hppa2.0w-hp-hpux* has a 64-bit kernel and a compiler generating
-	    # 32-bit code.  hppa64-hp-hpux* has the same kernel and a compiler
-	    # generating 64-bit code.  GNU and HP use different nomenclature:
-	    #
-	    # $ CC_FOR_BUILD=cc ./config.guess
-	    # => hppa2.0w-hp-hpux11.23
-	    # $ CC_FOR_BUILD="cc +DA2.0w" ./config.guess
-	    # => hppa64-hp-hpux11.23
-
-	    if echo __LP64__ | (CCOPTS= $CC_FOR_BUILD -E - 2>/dev/null) |
-		grep -q __LP64__
-	    then
-		HP_ARCH="hppa2.0w"
-	    else
-		HP_ARCH="hppa64"
-	    fi
-	fi
-	echo ${HP_ARCH}-hp-hpux${HPUX_REV}
-	exit ;;
-    ia64:HP-UX:*:*)
-	HPUX_REV=`echo ${UNAME_RELEASE}|sed -e 's/[^.]*.[0B]*//'`
-	echo ia64-hp-hpux${HPUX_REV}
-	exit ;;
-    3050*:HI-UX:*:*)
-	eval $set_cc_for_build
-	sed 's/^	//' << EOF >$dummy.c
-	#include <unistd.h>
-	int
-	main ()
-	{
-	  long cpu = sysconf (_SC_CPU_VERSION);
-	  /* The order matters, because CPU_IS_HP_MC68K erroneously returns
-	     true for CPU_PA_RISC1_0.  CPU_IS_PA_RISC returns correct
-	     results, however.  */
-	  if (CPU_IS_PA_RISC (cpu))
-	    {
-	      switch (cpu)
-		{
-		  case CPU_PA_RISC1_0: puts ("hppa1.0-hitachi-hiuxwe2"); break;
-		  case CPU_PA_RISC1_1: puts ("hppa1.1-hitachi-hiuxwe2"); break;
-		  case CPU_PA_RISC2_0: puts ("hppa2.0-hitachi-hiuxwe2"); break;
-		  default: puts ("hppa-hitachi-hiuxwe2"); break;
-		}
-	    }
-	  else if (CPU_IS_HP_MC68K (cpu))
-	    puts ("m68k-hitachi-hiuxwe2");
-	  else puts ("unknown-hitachi-hiuxwe2");
-	  exit (0);
-	}
-EOF
-	$CC_FOR_BUILD -o $dummy $dummy.c && SYSTEM_NAME=`$dummy` &&
-		{ echo "$SYSTEM_NAME"; exit; }
-	echo unknown-hitachi-hiuxwe2
-	exit ;;
-    9000/7??:4.3bsd:*:* | 9000/8?[79]:4.3bsd:*:* )
-	echo hppa1.1-hp-bsd
-	exit ;;
-    9000/8??:4.3bsd:*:*)
-	echo hppa1.0-hp-bsd
-	exit ;;
-    *9??*:MPE/iX:*:* | *3000*:MPE/iX:*:*)
-	echo hppa1.0-hp-mpeix
-	exit ;;
-    hp7??:OSF1:*:* | hp8?[79]:OSF1:*:* )
-	echo hppa1.1-hp-osf
-	exit ;;
-    hp8??:OSF1:*:*)
-	echo hppa1.0-hp-osf
-	exit ;;
-    i*86:OSF1:*:*)
-	if [ -x /usr/sbin/sysversion ] ; then
-	    echo ${UNAME_MACHINE}-unknown-osf1mk
-	else
-	    echo ${UNAME_MACHINE}-unknown-osf1
-	fi
-	exit ;;
-    parisc*:Lites*:*:*)
-	echo hppa1.1-hp-lites
-	exit ;;
-    C1*:ConvexOS:*:* | convex:ConvexOS:C1*:*)
-	echo c1-convex-bsd
-	exit ;;
-    C2*:ConvexOS:*:* | convex:ConvexOS:C2*:*)
-	if getsysinfo -f scalar_acc
-	then echo c32-convex-bsd
-	else echo c2-convex-bsd
-	fi
-	exit ;;
-    C34*:ConvexOS:*:* | convex:ConvexOS:C34*:*)
-	echo c34-convex-bsd
-	exit ;;
-    C38*:ConvexOS:*:* | convex:ConvexOS:C38*:*)
-	echo c38-convex-bsd
-	exit ;;
-    C4*:ConvexOS:*:* | convex:ConvexOS:C4*:*)
-	echo c4-convex-bsd
-	exit ;;
-    CRAY*Y-MP:*:*:*)
-	echo ymp-cray-unicos${UNAME_RELEASE} | sed -e 's/\.[^.]*$/.X/'
-	exit ;;
-    CRAY*[A-Z]90:*:*:*)
-	echo ${UNAME_MACHINE}-cray-unicos${UNAME_RELEASE} \
-	| sed -e 's/CRAY.*\([A-Z]90\)/\1/' \
-	      -e y/ABCDEFGHIJKLMNOPQRSTUVWXYZ/abcdefghijklmnopqrstuvwxyz/ \
-	      -e 's/\.[^.]*$/.X/'
-	exit ;;
-    CRAY*TS:*:*:*)
-	echo t90-cray-unicos${UNAME_RELEASE} | sed -e 's/\.[^.]*$/.X/'
-	exit ;;
-    CRAY*T3E:*:*:*)
-	echo alphaev5-cray-unicosmk${UNAME_RELEASE} | sed -e 's/\.[^.]*$/.X/'
-	exit ;;
-    CRAY*SV1:*:*:*)
-	echo sv1-cray-unicos${UNAME_RELEASE} | sed -e 's/\.[^.]*$/.X/'
-	exit ;;
-    *:UNICOS/mp:*:*)
-	echo craynv-cray-unicosmp${UNAME_RELEASE} | sed -e 's/\.[^.]*$/.X/'
-	exit ;;
-    F30[01]:UNIX_System_V:*:* | F700:UNIX_System_V:*:*)
-	FUJITSU_PROC=`uname -m | tr 'ABCDEFGHIJKLMNOPQRSTUVWXYZ' 'abcdefghijklmnopqrstuvwxyz'`
-	FUJITSU_SYS=`uname -p | tr 'ABCDEFGHIJKLMNOPQRSTUVWXYZ' 'abcdefghijklmnopqrstuvwxyz' | sed -e 's/\///'`
-	FUJITSU_REL=`echo ${UNAME_RELEASE} | sed -e 's/ /_/'`
-	echo "${FUJITSU_PROC}-fujitsu-${FUJITSU_SYS}${FUJITSU_REL}"
-	exit ;;
-    5000:UNIX_System_V:4.*:*)
-	FUJITSU_SYS=`uname -p | tr 'ABCDEFGHIJKLMNOPQRSTUVWXYZ' 'abcdefghijklmnopqrstuvwxyz' | sed -e 's/\///'`
-	FUJITSU_REL=`echo ${UNAME_RELEASE} | tr 'ABCDEFGHIJKLMNOPQRSTUVWXYZ' 'abcdefghijklmnopqrstuvwxyz' | sed -e 's/ /_/'`
-	echo "sparc-fujitsu-${FUJITSU_SYS}${FUJITSU_REL}"
-	exit ;;
-    i*86:BSD/386:*:* | i*86:BSD/OS:*:* | *:Ascend\ Embedded/OS:*:*)
-	echo ${UNAME_MACHINE}-pc-bsdi${UNAME_RELEASE}
-	exit ;;
-    sparc*:BSD/OS:*:*)
-	echo sparc-unknown-bsdi${UNAME_RELEASE}
-	exit ;;
-    *:BSD/OS:*:*)
-	echo ${UNAME_MACHINE}-unknown-bsdi${UNAME_RELEASE}
-	exit ;;
-    *:FreeBSD:*:*)
-	UNAME_PROCESSOR=`/usr/bin/uname -p`
-	case ${UNAME_PROCESSOR} in
-	    amd64)
-		echo x86_64-unknown-freebsd`echo ${UNAME_RELEASE}|sed -e 's/[-(].*//'` ;;
-	    *)
-		echo ${UNAME_PROCESSOR}-unknown-freebsd`echo ${UNAME_RELEASE}|sed -e 's/[-(].*//'` ;;
-	esac
-	exit ;;
-    i*:CYGWIN*:*)
-	echo ${UNAME_MACHINE}-pc-cygwin
-	exit ;;
-    *:MINGW64*:*)
-	echo ${UNAME_MACHINE}-pc-mingw64
-	exit ;;
-    *:MINGW*:*)
-	echo ${UNAME_MACHINE}-pc-mingw32
-	exit ;;
-    *:MSYS*:*)
-	echo ${UNAME_MACHINE}-pc-msys
-	exit ;;
-    i*:windows32*:*)
-	# uname -m includes "-pc" on this system.
-	echo ${UNAME_MACHINE}-mingw32
-	exit ;;
-    i*:PW*:*)
-	echo ${UNAME_MACHINE}-pc-pw32
-	exit ;;
-    *:Interix*:*)
-	case ${UNAME_MACHINE} in
-	    x86)
-		echo i586-pc-interix${UNAME_RELEASE}
-		exit ;;
-	    authenticamd | genuineintel | EM64T)
-		echo x86_64-unknown-interix${UNAME_RELEASE}
-		exit ;;
-	    IA64)
-		echo ia64-unknown-interix${UNAME_RELEASE}
-		exit ;;
-	esac ;;
-    [345]86:Windows_95:* | [345]86:Windows_98:* | [345]86:Windows_NT:*)
-	echo i${UNAME_MACHINE}-pc-mks
-	exit ;;
-    8664:Windows_NT:*)
-	echo x86_64-pc-mks
-	exit ;;
-    i*:Windows_NT*:* | Pentium*:Windows_NT*:*)
-	# How do we know it's Interix rather than the generic POSIX subsystem?
-	# It also conflicts with pre-2.0 versions of AT&T UWIN. Should we
-	# UNAME_MACHINE based on the output of uname instead of i386?
-	echo i586-pc-interix
-	exit ;;
-    i*:UWIN*:*)
-	echo ${UNAME_MACHINE}-pc-uwin
-	exit ;;
-    amd64:CYGWIN*:*:* | x86_64:CYGWIN*:*:*)
-	echo x86_64-unknown-cygwin
-	exit ;;
-    p*:CYGWIN*:*)
-	echo powerpcle-unknown-cygwin
-	exit ;;
-    prep*:SunOS:5.*:*)
-	echo powerpcle-unknown-solaris2`echo ${UNAME_RELEASE}|sed -e 's/[^.]*//'`
-	exit ;;
-    *:GNU:*:*)
-	# the GNU system
-	echo `echo ${UNAME_MACHINE}|sed -e 's,[-/].*$,,'`-unknown-${LIBC}`echo ${UNAME_RELEASE}|sed -e 's,/.*$,,'`
-	exit ;;
-    *:GNU/*:*:*)
-	# other systems with GNU libc and userland
-	echo ${UNAME_MACHINE}-unknown-`echo ${UNAME_SYSTEM} | sed 's,^[^/]*/,,' | tr '[A-Z]' '[a-z]'``echo ${UNAME_RELEASE}|sed -e 's/[-(].*//'`-${LIBC}
-	exit ;;
-    i*86:Minix:*:*)
-	echo ${UNAME_MACHINE}-pc-minix
-	exit ;;
-    aarch64:Linux:*:*)
-	echo ${UNAME_MACHINE}-unknown-linux-${LIBC}
-	exit ;;
-    aarch64_be:Linux:*:*)
-	UNAME_MACHINE=aarch64_be
-	echo ${UNAME_MACHINE}-unknown-linux-${LIBC}
-	exit ;;
-    alpha:Linux:*:*)
-	case `sed -n '/^cpu model/s/^.*: \(.*\)/\1/p' < /proc/cpuinfo` in
-	  EV5)   UNAME_MACHINE=alphaev5 ;;
-	  EV56)  UNAME_MACHINE=alphaev56 ;;
-	  PCA56) UNAME_MACHINE=alphapca56 ;;
-	  PCA57) UNAME_MACHINE=alphapca56 ;;
-	  EV6)   UNAME_MACHINE=alphaev6 ;;
-	  EV67)  UNAME_MACHINE=alphaev67 ;;
-	  EV68*) UNAME_MACHINE=alphaev68 ;;
-	esac
-	objdump --private-headers /bin/sh | grep -q ld.so.1
-	if test "$?" = 0 ; then LIBC="gnulibc1" ; fi
-	echo ${UNAME_MACHINE}-unknown-linux-${LIBC}
-	exit ;;
-    arc:Linux:*:* | arceb:Linux:*:*)
-	echo ${UNAME_MACHINE}-unknown-linux-${LIBC}
-	exit ;;
-    arm*:Linux:*:*)
-	eval $set_cc_for_build
-	if echo __ARM_EABI__ | $CC_FOR_BUILD -E - 2>/dev/null \
-	    | grep -q __ARM_EABI__
-	then
-	    echo ${UNAME_MACHINE}-unknown-linux-${LIBC}
-	else
-	    if echo __ARM_PCS_VFP | $CC_FOR_BUILD -E - 2>/dev/null \
-		| grep -q __ARM_PCS_VFP
-	    then
-		echo ${UNAME_MACHINE}-unknown-linux-${LIBC}eabi
-	    else
-		echo ${UNAME_MACHINE}-unknown-linux-${LIBC}eabihf
-	    fi
-	fi
-	exit ;;
-    avr32*:Linux:*:*)
-	echo ${UNAME_MACHINE}-unknown-linux-${LIBC}
-	exit ;;
-    cris:Linux:*:*)
-	echo ${UNAME_MACHINE}-axis-linux-${LIBC}
-	exit ;;
-    crisv32:Linux:*:*)
-	echo ${UNAME_MACHINE}-axis-linux-${LIBC}
-	exit ;;
-    frv:Linux:*:*)
-	echo ${UNAME_MACHINE}-unknown-linux-${LIBC}
-	exit ;;
-    hexagon:Linux:*:*)
-	echo ${UNAME_MACHINE}-unknown-linux-${LIBC}
-	exit ;;
-    i*86:Linux:*:*)
-	echo ${UNAME_MACHINE}-pc-linux-${LIBC}
-	exit ;;
-    ia64:Linux:*:*)
-	echo ${UNAME_MACHINE}-unknown-linux-${LIBC}
-	exit ;;
-    m32r*:Linux:*:*)
-	echo ${UNAME_MACHINE}-unknown-linux-${LIBC}
-	exit ;;
-    m68*:Linux:*:*)
-	echo ${UNAME_MACHINE}-unknown-linux-${LIBC}
-	exit ;;
-    mips:Linux:*:* | mips64:Linux:*:*)
-	eval $set_cc_for_build
-	sed 's/^	//' << EOF >$dummy.c
-	#undef CPU
-	#undef ${UNAME_MACHINE}
-	#undef ${UNAME_MACHINE}el
-	#if defined(__MIPSEL__) || defined(__MIPSEL) || defined(_MIPSEL) || defined(MIPSEL)
-	CPU=${UNAME_MACHINE}el
-	#else
-	#if defined(__MIPSEB__) || defined(__MIPSEB) || defined(_MIPSEB) || defined(MIPSEB)
-	CPU=${UNAME_MACHINE}
-	#else
-	CPU=
-	#endif
-	#endif
-EOF
-	eval `$CC_FOR_BUILD -E $dummy.c 2>/dev/null | grep '^CPU'`
-	test x"${CPU}" != x && { echo "${CPU}-unknown-linux-${LIBC}"; exit; }
-	;;
-    openrisc*:Linux:*:*)
-	echo or1k-unknown-linux-${LIBC}
-	exit ;;
-    or32:Linux:*:* | or1k*:Linux:*:*)
-	echo ${UNAME_MACHINE}-unknown-linux-${LIBC}
-	exit ;;
-    padre:Linux:*:*)
-	echo sparc-unknown-linux-${LIBC}
-	exit ;;
-    parisc64:Linux:*:* | hppa64:Linux:*:*)
-	echo hppa64-unknown-linux-${LIBC}
-	exit ;;
-    parisc:Linux:*:* | hppa:Linux:*:*)
-	# Look for CPU level
-	case `grep '^cpu[^a-z]*:' /proc/cpuinfo 2>/dev/null | cut -d' ' -f2` in
-	  PA7*) echo hppa1.1-unknown-linux-${LIBC} ;;
-	  PA8*) echo hppa2.0-unknown-linux-${LIBC} ;;
-	  *)    echo hppa-unknown-linux-${LIBC} ;;
-	esac
-	exit ;;
-    ppc64:Linux:*:*)
-	echo powerpc64-unknown-linux-${LIBC}
-	exit ;;
-    ppc:Linux:*:*)
-	echo powerpc-unknown-linux-${LIBC}
-	exit ;;
-    ppc64le:Linux:*:*)
-	echo powerpc64le-unknown-linux-${LIBC}
-	exit ;;
-    ppcle:Linux:*:*)
-	echo powerpcle-unknown-linux-${LIBC}
-	exit ;;
-    s390:Linux:*:* | s390x:Linux:*:*)
-	echo ${UNAME_MACHINE}-ibm-linux-${LIBC}
-	exit ;;
-    sh64*:Linux:*:*)
-	echo ${UNAME_MACHINE}-unknown-linux-${LIBC}
-	exit ;;
-    sh*:Linux:*:*)
-	echo ${UNAME_MACHINE}-unknown-linux-${LIBC}
-	exit ;;
-    sparc:Linux:*:* | sparc64:Linux:*:*)
-	echo ${UNAME_MACHINE}-unknown-linux-${LIBC}
-	exit ;;
-    tile*:Linux:*:*)
-	echo ${UNAME_MACHINE}-unknown-linux-${LIBC}
-	exit ;;
-    vax:Linux:*:*)
-	echo ${UNAME_MACHINE}-dec-linux-${LIBC}
-	exit ;;
-    x86_64:Linux:*:*)
-	echo ${UNAME_MACHINE}-unknown-linux-${LIBC}
-	exit ;;
-    xtensa*:Linux:*:*)
-	echo ${UNAME_MACHINE}-unknown-linux-${LIBC}
-	exit ;;
-    i*86:DYNIX/ptx:4*:*)
-	# ptx 4.0 does uname -s correctly, with DYNIX/ptx in there.
-	# earlier versions are messed up and put the nodename in both
-	# sysname and nodename.
-	echo i386-sequent-sysv4
-	exit ;;
-    i*86:UNIX_SV:4.2MP:2.*)
-	# Unixware is an offshoot of SVR4, but it has its own version
-	# number series starting with 2...
-	# I am not positive that other SVR4 systems won't match this,
-	# I just have to hope.  -- rms.
-	# Use sysv4.2uw... so that sysv4* matches it.
-	echo ${UNAME_MACHINE}-pc-sysv4.2uw${UNAME_VERSION}
-	exit ;;
-    i*86:OS/2:*:*)
-	# If we were able to find `uname', then EMX Unix compatibility
-	# is probably installed.
-	echo ${UNAME_MACHINE}-pc-os2-emx
-	exit ;;
-    i*86:XTS-300:*:STOP)
-	echo ${UNAME_MACHINE}-unknown-stop
-	exit ;;
-    i*86:atheos:*:*)
-	echo ${UNAME_MACHINE}-unknown-atheos
-	exit ;;
-    i*86:syllable:*:*)
-	echo ${UNAME_MACHINE}-pc-syllable
-	exit ;;
-    i*86:LynxOS:2.*:* | i*86:LynxOS:3.[01]*:* | i*86:LynxOS:4.[02]*:*)
-	echo i386-unknown-lynxos${UNAME_RELEASE}
-	exit ;;
-    i*86:*DOS:*:*)
-	echo ${UNAME_MACHINE}-pc-msdosdjgpp
-	exit ;;
-    i*86:*:4.*:* | i*86:SYSTEM_V:4.*:*)
-	UNAME_REL=`echo ${UNAME_RELEASE} | sed 's/\/MP$//'`
-	if grep Novell /usr/include/link.h >/dev/null 2>/dev/null; then
-		echo ${UNAME_MACHINE}-univel-sysv${UNAME_REL}
-	else
-		echo ${UNAME_MACHINE}-pc-sysv${UNAME_REL}
-	fi
-	exit ;;
-    i*86:*:5:[678]*)
-	# UnixWare 7.x, OpenUNIX and OpenServer 6.
-	case `/bin/uname -X | grep "^Machine"` in
-	    *486*)	     UNAME_MACHINE=i486 ;;
-	    *Pentium)	     UNAME_MACHINE=i586 ;;
-	    *Pent*|*Celeron) UNAME_MACHINE=i686 ;;
-	esac
-	echo ${UNAME_MACHINE}-unknown-sysv${UNAME_RELEASE}${UNAME_SYSTEM}${UNAME_VERSION}
-	exit ;;
-    i*86:*:3.2:*)
-	if test -f /usr/options/cb.name; then
-		UNAME_REL=`sed -n 's/.*Version //p' </usr/options/cb.name`
-		echo ${UNAME_MACHINE}-pc-isc$UNAME_REL
-	elif /bin/uname -X 2>/dev/null >/dev/null ; then
-		UNAME_REL=`(/bin/uname -X|grep Release|sed -e 's/.*= //')`
-		(/bin/uname -X|grep i80486 >/dev/null) && UNAME_MACHINE=i486
-		(/bin/uname -X|grep '^Machine.*Pentium' >/dev/null) \
-			&& UNAME_MACHINE=i586
-		(/bin/uname -X|grep '^Machine.*Pent *II' >/dev/null) \
-			&& UNAME_MACHINE=i686
-		(/bin/uname -X|grep '^Machine.*Pentium Pro' >/dev/null) \
-			&& UNAME_MACHINE=i686
-		echo ${UNAME_MACHINE}-pc-sco$UNAME_REL
-	else
-		echo ${UNAME_MACHINE}-pc-sysv32
-	fi
-	exit ;;
-    pc:*:*:*)
-	# Left here for compatibility:
-	# uname -m prints for DJGPP always 'pc', but it prints nothing about
-	# the processor, so we play safe by assuming i586.
-	# Note: whatever this is, it MUST be the same as what config.sub
-	# prints for the "djgpp" host, or else GDB configury will decide that
-	# this is a cross-build.
-	echo i586-pc-msdosdjgpp
-	exit ;;
-    Intel:Mach:3*:*)
-	echo i386-pc-mach3
-	exit ;;
-    paragon:*:*:*)
-	echo i860-intel-osf1
-	exit ;;
-    i860:*:4.*:*) # i860-SVR4
-	if grep Stardent /usr/include/sys/uadmin.h >/dev/null 2>&1 ; then
-	  echo i860-stardent-sysv${UNAME_RELEASE} # Stardent Vistra i860-SVR4
-	else # Add other i860-SVR4 vendors below as they are discovered.
-	  echo i860-unknown-sysv${UNAME_RELEASE}  # Unknown i860-SVR4
-	fi
-	exit ;;
-    mini*:CTIX:SYS*5:*)
-	# "miniframe"
-	echo m68010-convergent-sysv
-	exit ;;
-    mc68k:UNIX:SYSTEM5:3.51m)
-	echo m68k-convergent-sysv
-	exit ;;
-    M680?0:D-NIX:5.3:*)
-	echo m68k-diab-dnix
-	exit ;;
-    M68*:*:R3V[5678]*:*)
-	test -r /sysV68 && { echo 'm68k-motorola-sysv'; exit; } ;;
-    3[345]??:*:4.0:3.0 | 3[34]??A:*:4.0:3.0 | 3[34]??,*:*:4.0:3.0 | 3[34]??/*:*:4.0:3.0 | 4400:*:4.0:3.0 | 4850:*:4.0:3.0 | SKA40:*:4.0:3.0 | SDS2:*:4.0:3.0 | SHG2:*:4.0:3.0 | S7501*:*:4.0:3.0)
-	OS_REL=''
-	test -r /etc/.relid \
-	&& OS_REL=.`sed -n 's/[^ ]* [^ ]* \([0-9][0-9]\).*/\1/p' < /etc/.relid`
-	/bin/uname -p 2>/dev/null | grep 86 >/dev/null \
-	  && { echo i486-ncr-sysv4.3${OS_REL}; exit; }
-	/bin/uname -p 2>/dev/null | /bin/grep entium >/dev/null \
-	  && { echo i586-ncr-sysv4.3${OS_REL}; exit; } ;;
-    3[34]??:*:4.0:* | 3[34]??,*:*:4.0:*)
-	/bin/uname -p 2>/dev/null | grep 86 >/dev/null \
-	  && { echo i486-ncr-sysv4; exit; } ;;
-    NCR*:*:4.2:* | MPRAS*:*:4.2:*)
-	OS_REL='.3'
-	test -r /etc/.relid \
-	    && OS_REL=.`sed -n 's/[^ ]* [^ ]* \([0-9][0-9]\).*/\1/p' < /etc/.relid`
-	/bin/uname -p 2>/dev/null | grep 86 >/dev/null \
-	    && { echo i486-ncr-sysv4.3${OS_REL}; exit; }
-	/bin/uname -p 2>/dev/null | /bin/grep entium >/dev/null \
-	    && { echo i586-ncr-sysv4.3${OS_REL}; exit; }
-	/bin/uname -p 2>/dev/null | /bin/grep pteron >/dev/null \
-	    && { echo i586-ncr-sysv4.3${OS_REL}; exit; } ;;
-    m68*:LynxOS:2.*:* | m68*:LynxOS:3.0*:*)
-	echo m68k-unknown-lynxos${UNAME_RELEASE}
-	exit ;;
-    mc68030:UNIX_System_V:4.*:*)
-	echo m68k-atari-sysv4
-	exit ;;
-    TSUNAMI:LynxOS:2.*:*)
-	echo sparc-unknown-lynxos${UNAME_RELEASE}
-	exit ;;
-    rs6000:LynxOS:2.*:*)
-	echo rs6000-unknown-lynxos${UNAME_RELEASE}
-	exit ;;
-    PowerPC:LynxOS:2.*:* | PowerPC:LynxOS:3.[01]*:* | PowerPC:LynxOS:4.[02]*:*)
-	echo powerpc-unknown-lynxos${UNAME_RELEASE}
-	exit ;;
-    SM[BE]S:UNIX_SV:*:*)
-	echo mips-dde-sysv${UNAME_RELEASE}
-	exit ;;
-    RM*:ReliantUNIX-*:*:*)
-	echo mips-sni-sysv4
-	exit ;;
-    RM*:SINIX-*:*:*)
-	echo mips-sni-sysv4
-	exit ;;
-    *:SINIX-*:*:*)
-	if uname -p 2>/dev/null >/dev/null ; then
-		UNAME_MACHINE=`(uname -p) 2>/dev/null`
-		echo ${UNAME_MACHINE}-sni-sysv4
-	else
-		echo ns32k-sni-sysv
-	fi
-	exit ;;
-    PENTIUM:*:4.0*:*)	# Unisys `ClearPath HMP IX 4000' SVR4/MP effort
-			# says <Richard.M.Bartel@ccMail.Census.GOV>
-	echo i586-unisys-sysv4
-	exit ;;
-    *:UNIX_System_V:4*:FTX*)
-	# From Gerald Hewes <hewes@openmarket.com>.
-	# How about differentiating between stratus architectures? -djm
-	echo hppa1.1-stratus-sysv4
-	exit ;;
-    *:*:*:FTX*)
-	# From seanf@swdc.stratus.com.
-	echo i860-stratus-sysv4
-	exit ;;
-    i*86:VOS:*:*)
-	# From Paul.Green@stratus.com.
-	echo ${UNAME_MACHINE}-stratus-vos
-	exit ;;
-    *:VOS:*:*)
-	# From Paul.Green@stratus.com.
-	echo hppa1.1-stratus-vos
-	exit ;;
-    mc68*:A/UX:*:*)
-	echo m68k-apple-aux${UNAME_RELEASE}
-	exit ;;
-    news*:NEWS-OS:6*:*)
-	echo mips-sony-newsos6
-	exit ;;
-    R[34]000:*System_V*:*:* | R4000:UNIX_SYSV:*:* | R*000:UNIX_SV:*:*)
-	if [ -d /usr/nec ]; then
-		echo mips-nec-sysv${UNAME_RELEASE}
-	else
-		echo mips-unknown-sysv${UNAME_RELEASE}
-	fi
-	exit ;;
-    BeBox:BeOS:*:*)	# BeOS running on hardware made by Be, PPC only.
-	echo powerpc-be-beos
-	exit ;;
-    BeMac:BeOS:*:*)	# BeOS running on Mac or Mac clone, PPC only.
-	echo powerpc-apple-beos
-	exit ;;
-    BePC:BeOS:*:*)	# BeOS running on Intel PC compatible.
-	echo i586-pc-beos
-	exit ;;
-    BePC:Haiku:*:*)	# Haiku running on Intel PC compatible.
-	echo i586-pc-haiku
-	exit ;;
-    x86_64:Haiku:*:*)
-	echo x86_64-unknown-haiku
-	exit ;;
-    SX-4:SUPER-UX:*:*)
-	echo sx4-nec-superux${UNAME_RELEASE}
-	exit ;;
-    SX-5:SUPER-UX:*:*)
-	echo sx5-nec-superux${UNAME_RELEASE}
-	exit ;;
-    SX-6:SUPER-UX:*:*)
-	echo sx6-nec-superux${UNAME_RELEASE}
-	exit ;;
-    SX-7:SUPER-UX:*:*)
-	echo sx7-nec-superux${UNAME_RELEASE}
-	exit ;;
-    SX-8:SUPER-UX:*:*)
-	echo sx8-nec-superux${UNAME_RELEASE}
-	exit ;;
-    SX-8R:SUPER-UX:*:*)
-	echo sx8r-nec-superux${UNAME_RELEASE}
-	exit ;;
-    Power*:Rhapsody:*:*)
-	echo powerpc-apple-rhapsody${UNAME_RELEASE}
-	exit ;;
-    *:Rhapsody:*:*)
-	echo ${UNAME_MACHINE}-apple-rhapsody${UNAME_RELEASE}
-	exit ;;
-    *:Darwin:*:*)
-	UNAME_PROCESSOR=`uname -p` || UNAME_PROCESSOR=unknown
-	eval $set_cc_for_build
-	if test "$UNAME_PROCESSOR" = unknown ; then
-	    UNAME_PROCESSOR=powerpc
-	fi
-	if test `echo "$UNAME_RELEASE" | sed -e 's/\..*//'` -le 10 ; then
-	    if [ "$CC_FOR_BUILD" != 'no_compiler_found' ]; then
-		if (echo '#ifdef __LP64__'; echo IS_64BIT_ARCH; echo '#endif') | \
-		    (CCOPTS= $CC_FOR_BUILD -E - 2>/dev/null) | \
-		    grep IS_64BIT_ARCH >/dev/null
-		then
-		    case $UNAME_PROCESSOR in
-			i386) UNAME_PROCESSOR=x86_64 ;;
-			powerpc) UNAME_PROCESSOR=powerpc64 ;;
-		    esac
-		fi
-	    fi
-	elif test "$UNAME_PROCESSOR" = i386 ; then
-	    # Avoid executing cc on OS X 10.9, as it ships with a stub
-	    # that puts up a graphical alert prompting to install
-	    # developer tools.  Any system running Mac OS X 10.7 or
-	    # later (Darwin 11 and later) is required to have a 64-bit
-	    # processor. This is not true of the ARM version of Darwin
-	    # that Apple uses in portable devices.
-	    UNAME_PROCESSOR=x86_64
-	fi
-	echo ${UNAME_PROCESSOR}-apple-darwin${UNAME_RELEASE}
-	exit ;;
-    *:procnto*:*:* | *:QNX:[0123456789]*:*)
-	UNAME_PROCESSOR=`uname -p`
-	if test "$UNAME_PROCESSOR" = "x86"; then
-		UNAME_PROCESSOR=i386
-		UNAME_MACHINE=pc
-	fi
-	echo ${UNAME_PROCESSOR}-${UNAME_MACHINE}-nto-qnx${UNAME_RELEASE}
-	exit ;;
-    *:QNX:*:4*)
-	echo i386-pc-qnx
-	exit ;;
-    NEO-?:NONSTOP_KERNEL:*:*)
-	echo neo-tandem-nsk${UNAME_RELEASE}
-	exit ;;
-    NSE-*:NONSTOP_KERNEL:*:*)
-	echo nse-tandem-nsk${UNAME_RELEASE}
-	exit ;;
-    NSR-?:NONSTOP_KERNEL:*:*)
-	echo nsr-tandem-nsk${UNAME_RELEASE}
-	exit ;;
-    *:NonStop-UX:*:*)
-	echo mips-compaq-nonstopux
-	exit ;;
-    BS2000:POSIX*:*:*)
-	echo bs2000-siemens-sysv
-	exit ;;
-    DS/*:UNIX_System_V:*:*)
-	echo ${UNAME_MACHINE}-${UNAME_SYSTEM}-${UNAME_RELEASE}
-	exit ;;
-    *:Plan9:*:*)
-	# "uname -m" is not consistent, so use $cputype instead. 386
-	# is converted to i386 for consistency with other x86
-	# operating systems.
-	if test "$cputype" = "386"; then
-	    UNAME_MACHINE=i386
-	else
-	    UNAME_MACHINE="$cputype"
-	fi
-	echo ${UNAME_MACHINE}-unknown-plan9
-	exit ;;
-    *:TOPS-10:*:*)
-	echo pdp10-unknown-tops10
-	exit ;;
-    *:TENEX:*:*)
-	echo pdp10-unknown-tenex
-	exit ;;
-    KS10:TOPS-20:*:* | KL10:TOPS-20:*:* | TYPE4:TOPS-20:*:*)
-	echo pdp10-dec-tops20
-	exit ;;
-    XKL-1:TOPS-20:*:* | TYPE5:TOPS-20:*:*)
-	echo pdp10-xkl-tops20
-	exit ;;
-    *:TOPS-20:*:*)
-	echo pdp10-unknown-tops20
-	exit ;;
-    *:ITS:*:*)
-	echo pdp10-unknown-its
-	exit ;;
-    SEI:*:*:SEIUX)
-	echo mips-sei-seiux${UNAME_RELEASE}
-	exit ;;
-    *:DragonFly:*:*)
-	echo ${UNAME_MACHINE}-unknown-dragonfly`echo ${UNAME_RELEASE}|sed -e 's/[-(].*//'`
-	exit ;;
-    *:*VMS:*:*)
-	UNAME_MACHINE=`(uname -p) 2>/dev/null`
-	case "${UNAME_MACHINE}" in
-	    A*) echo alpha-dec-vms ; exit ;;
-	    I*) echo ia64-dec-vms ; exit ;;
-	    V*) echo vax-dec-vms ; exit ;;
-	esac ;;
-    *:XENIX:*:SysV)
-	echo i386-pc-xenix
-	exit ;;
-    i*86:skyos:*:*)
-	echo ${UNAME_MACHINE}-pc-skyos`echo ${UNAME_RELEASE}` | sed -e 's/ .*$//'
-	exit ;;
-    i*86:rdos:*:*)
-	echo ${UNAME_MACHINE}-pc-rdos
-	exit ;;
-    i*86:AROS:*:*)
-	echo ${UNAME_MACHINE}-pc-aros
-	exit ;;
-    x86_64:VMkernel:*:*)
-	echo ${UNAME_MACHINE}-unknown-esx
-	exit ;;
-esac
-
-cat >&2 <<EOF
-$0: unable to guess system type
-
-This script, last modified $timestamp, has failed to recognize
-the operating system you are using. It is advised that you
-download the most up to date version of the config scripts from
-
-  http://git.savannah.gnu.org/gitweb/?p=config.git;a=blob_plain;f=config.guess;hb=HEAD
-and
-  http://git.savannah.gnu.org/gitweb/?p=config.git;a=blob_plain;f=config.sub;hb=HEAD
-
-If the version you run ($0) is already up to date, please
-send the following data and any information you think might be
-pertinent to <config-patches@gnu.org> in order to provide the needed
-information to handle your system.
-
-config.guess timestamp = $timestamp
-
-uname -m = `(uname -m) 2>/dev/null || echo unknown`
-uname -r = `(uname -r) 2>/dev/null || echo unknown`
-uname -s = `(uname -s) 2>/dev/null || echo unknown`
-uname -v = `(uname -v) 2>/dev/null || echo unknown`
-
-/usr/bin/uname -p = `(/usr/bin/uname -p) 2>/dev/null`
-/bin/uname -X     = `(/bin/uname -X) 2>/dev/null`
-
-hostinfo               = `(hostinfo) 2>/dev/null`
-/bin/universe          = `(/bin/universe) 2>/dev/null`
-/usr/bin/arch -k       = `(/usr/bin/arch -k) 2>/dev/null`
-/bin/arch              = `(/bin/arch) 2>/dev/null`
-/usr/bin/oslevel       = `(/usr/bin/oslevel) 2>/dev/null`
-/usr/convex/getsysinfo = `(/usr/convex/getsysinfo) 2>/dev/null`
-
-UNAME_MACHINE = ${UNAME_MACHINE}
-UNAME_RELEASE = ${UNAME_RELEASE}
-UNAME_SYSTEM  = ${UNAME_SYSTEM}
-UNAME_VERSION = ${UNAME_VERSION}
-EOF
-
-exit 1
-
-# Local variables:
-# eval: (add-hook 'write-file-hooks 'time-stamp)
-# time-stamp-start: "timestamp='"
-# time-stamp-format: "%:y-%02m-%02d"
-# time-stamp-end: "'"
-# End:
diff -Nuar groff-1.22.3.old/src/libs/gnulib/build-aux/config.sub groff-1.22.3/src/libs/gnulib/build-aux/config.sub
--- groff-1.22.3.old/src/libs/gnulib/build-aux/config.sub	2014-11-04 10:38:35.646518734 +0200
+++ groff-1.22.3/src/libs/gnulib/build-aux/config.sub	1970-01-01 02:00:00.000000000 +0200
@@ -1,1805 +0,0 @@
-#! /bin/sh
-# Configuration validation subroutine script.
-#   Copyright 1992-2014 Free Software Foundation, Inc.
-
-timestamp='2014-09-26'
-
-# This file is free software; you can redistribute it and/or modify it
-# under the terms of the GNU General Public License as published by
-# the Free Software Foundation; either version 3 of the License, or
-# (at your option) any later version.
-#
-# This program is distributed in the hope that it will be useful, but
-# WITHOUT ANY WARRANTY; without even the implied warranty of
-# MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the GNU
-# General Public License for more details.
-#
-# You should have received a copy of the GNU General Public License
-# along with this program; if not, see <http://www.gnu.org/licenses/>.
-#
-# As a special exception to the GNU General Public License, if you
-# distribute this file as part of a program that contains a
-# configuration script generated by Autoconf, you may include it under
-# the same distribution terms that you use for the rest of that
-# program.  This Exception is an additional permission under section 7
-# of the GNU General Public License, version 3 ("GPLv3").
-
-
-# Please send patches with a ChangeLog entry to config-patches@gnu.org.
-#
-# Configuration subroutine to validate and canonicalize a configuration type.
-# Supply the specified configuration type as an argument.
-# If it is invalid, we print an error message on stderr and exit with code 1.
-# Otherwise, we print the canonical config type on stdout and succeed.
-
-# You can get the latest version of this script from:
-# http://git.savannah.gnu.org/gitweb/?p=config.git;a=blob_plain;f=config.sub;hb=HEAD
-
-# This file is supposed to be the same for all GNU packages
-# and recognize all the CPU types, system types and aliases
-# that are meaningful with *any* GNU software.
-# Each package is responsible for reporting which valid configurations
-# it does not support.  The user should be able to distinguish
-# a failure to support a valid configuration from a meaningless
-# configuration.
-
-# The goal of this file is to map all the various variations of a given
-# machine specification into a single specification in the form:
-#	CPU_TYPE-MANUFACTURER-OPERATING_SYSTEM
-# or in some cases, the newer four-part form:
-#	CPU_TYPE-MANUFACTURER-KERNEL-OPERATING_SYSTEM
-# It is wrong to echo any other type of specification.
-
-me=`echo "$0" | sed -e 's,.*/,,'`
-
-usage="\
-Usage: $0 [OPTION] CPU-MFR-OPSYS
-       $0 [OPTION] ALIAS
-
-Canonicalize a configuration name.
-
-Operation modes:
-  -h, --help         print this help, then exit
-  -t, --time-stamp   print date of last modification, then exit
-  -v, --version      print version number, then exit
-
-Report bugs and patches to <config-patches@gnu.org>."
-
-version="\
-GNU config.sub ($timestamp)
-
-Copyright 1992-2014 Free Software Foundation, Inc.
-
-This is free software; see the source for copying conditions.  There is NO
-warranty; not even for MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE."
-
-help="
-Try \`$me --help' for more information."
-
-# Parse command line
-while test $# -gt 0 ; do
-  case $1 in
-    --time-stamp | --time* | -t )
-       echo "$timestamp" ; exit ;;
-    --version | -v )
-       echo "$version" ; exit ;;
-    --help | --h* | -h )
-       echo "$usage"; exit ;;
-    -- )     # Stop option processing
-       shift; break ;;
-    - )	# Use stdin as input.
-       break ;;
-    -* )
-       echo "$me: invalid option $1$help"
-       exit 1 ;;
-
-    *local*)
-       # First pass through any local machine types.
-       echo $1
-       exit ;;
-
-    * )
-       break ;;
-  esac
-done
-
-case $# in
- 0) echo "$me: missing argument$help" >&2
-    exit 1;;
- 1) ;;
- *) echo "$me: too many arguments$help" >&2
-    exit 1;;
-esac
-
-# Separate what the user gave into CPU-COMPANY and OS or KERNEL-OS (if any).
-# Here we must recognize all the valid KERNEL-OS combinations.
-maybe_os=`echo $1 | sed 's/^\(.*\)-\([^-]*-[^-]*\)$/\2/'`
-case $maybe_os in
-  nto-qnx* | linux-gnu* | linux-android* | linux-dietlibc | linux-newlib* | \
-  linux-musl* | linux-uclibc* | uclinux-uclibc* | uclinux-gnu* | kfreebsd*-gnu* | \
-  knetbsd*-gnu* | netbsd*-gnu* | \
-  kopensolaris*-gnu* | \
-  storm-chaos* | os2-emx* | rtmk-nova*)
-    os=-$maybe_os
-    basic_machine=`echo $1 | sed 's/^\(.*\)-\([^-]*-[^-]*\)$/\1/'`
-    ;;
-  android-linux)
-    os=-linux-android
-    basic_machine=`echo $1 | sed 's/^\(.*\)-\([^-]*-[^-]*\)$/\1/'`-unknown
-    ;;
-  *)
-    basic_machine=`echo $1 | sed 's/-[^-]*$//'`
-    if [ $basic_machine != $1 ]
-    then os=`echo $1 | sed 's/.*-/-/'`
-    else os=; fi
-    ;;
-esac
-
-### Let's recognize common machines as not being operating systems so
-### that things like config.sub decstation-3100 work.  We also
-### recognize some manufacturers as not being operating systems, so we
-### can provide default operating systems below.
-case $os in
-	-sun*os*)
-		# Prevent following clause from handling this invalid input.
-		;;
-	-dec* | -mips* | -sequent* | -encore* | -pc532* | -sgi* | -sony* | \
-	-att* | -7300* | -3300* | -delta* | -motorola* | -sun[234]* | \
-	-unicom* | -ibm* | -next | -hp | -isi* | -apollo | -altos* | \
-	-convergent* | -ncr* | -news | -32* | -3600* | -3100* | -hitachi* |\
-	-c[123]* | -convex* | -sun | -crds | -omron* | -dg | -ultra | -tti* | \
-	-harris | -dolphin | -highlevel | -gould | -cbm | -ns | -masscomp | \
-	-apple | -axis | -knuth | -cray | -microblaze*)
-		os=
-		basic_machine=$1
-		;;
-	-bluegene*)
-		os=-cnk
-		;;
-	-sim | -cisco | -oki | -wec | -winbond)
-		os=
-		basic_machine=$1
-		;;
-	-scout)
-		;;
-	-wrs)
-		os=-vxworks
-		basic_machine=$1
-		;;
-	-chorusos*)
-		os=-chorusos
-		basic_machine=$1
-		;;
-	-chorusrdb)
-		os=-chorusrdb
-		basic_machine=$1
-		;;
-	-hiux*)
-		os=-hiuxwe2
-		;;
-	-sco6)
-		os=-sco5v6
-		basic_machine=`echo $1 | sed -e 's/86-.*/86-pc/'`
-		;;
-	-sco5)
-		os=-sco3.2v5
-		basic_machine=`echo $1 | sed -e 's/86-.*/86-pc/'`
-		;;
-	-sco4)
-		os=-sco3.2v4
-		basic_machine=`echo $1 | sed -e 's/86-.*/86-pc/'`
-		;;
-	-sco3.2.[4-9]*)
-		os=`echo $os | sed -e 's/sco3.2./sco3.2v/'`
-		basic_machine=`echo $1 | sed -e 's/86-.*/86-pc/'`
-		;;
-	-sco3.2v[4-9]*)
-		# Don't forget version if it is 3.2v4 or newer.
-		basic_machine=`echo $1 | sed -e 's/86-.*/86-pc/'`
-		;;
-	-sco5v6*)
-		# Don't forget version if it is 3.2v4 or newer.
-		basic_machine=`echo $1 | sed -e 's/86-.*/86-pc/'`
-		;;
-	-sco*)
-		os=-sco3.2v2
-		basic_machine=`echo $1 | sed -e 's/86-.*/86-pc/'`
-		;;
-	-udk*)
-		basic_machine=`echo $1 | sed -e 's/86-.*/86-pc/'`
-		;;
-	-isc)
-		os=-isc2.2
-		basic_machine=`echo $1 | sed -e 's/86-.*/86-pc/'`
-		;;
-	-clix*)
-		basic_machine=clipper-intergraph
-		;;
-	-isc*)
-		basic_machine=`echo $1 | sed -e 's/86-.*/86-pc/'`
-		;;
-	-lynx*178)
-		os=-lynxos178
-		;;
-	-lynx*5)
-		os=-lynxos5
-		;;
-	-lynx*)
-		os=-lynxos
-		;;
-	-ptx*)
-		basic_machine=`echo $1 | sed -e 's/86-.*/86-sequent/'`
-		;;
-	-windowsnt*)
-		os=`echo $os | sed -e 's/windowsnt/winnt/'`
-		;;
-	-psos*)
-		os=-psos
-		;;
-	-mint | -mint[0-9]*)
-		basic_machine=m68k-atari
-		os=-mint
-		;;
-esac
-
-# Decode aliases for certain CPU-COMPANY combinations.
-case $basic_machine in
-	# Recognize the basic CPU types without company name.
-	# Some are omitted here because they have special meanings below.
-	1750a | 580 \
-	| a29k \
-	| aarch64 | aarch64_be \
-	| alpha | alphaev[4-8] | alphaev56 | alphaev6[78] | alphapca5[67] \
-	| alpha64 | alpha64ev[4-8] | alpha64ev56 | alpha64ev6[78] | alpha64pca5[67] \
-	| am33_2.0 \
-	| arc | arceb \
-	| arm | arm[bl]e | arme[lb] | armv[2-8] | armv[3-8][lb] | armv7[arm] \
-	| avr | avr32 \
-	| be32 | be64 \
-	| bfin \
-	| c4x | c8051 | clipper \
-	| d10v | d30v | dlx | dsp16xx \
-	| epiphany \
-	| fido | fr30 | frv \
-	| h8300 | h8500 | hppa | hppa1.[01] | hppa2.0 | hppa2.0[nw] | hppa64 \
-	| hexagon \
-	| i370 | i860 | i960 | ia64 \
-	| ip2k | iq2000 \
-	| k1om \
-	| le32 | le64 \
-	| lm32 \
-	| m32c | m32r | m32rle | m68000 | m68k | m88k \
-	| maxq | mb | microblaze | microblazeel | mcore | mep | metag \
-	| mips | mipsbe | mipseb | mipsel | mipsle \
-	| mips16 \
-	| mips64 | mips64el \
-	| mips64octeon | mips64octeonel \
-	| mips64orion | mips64orionel \
-	| mips64r5900 | mips64r5900el \
-	| mips64vr | mips64vrel \
-	| mips64vr4100 | mips64vr4100el \
-	| mips64vr4300 | mips64vr4300el \
-	| mips64vr5000 | mips64vr5000el \
-	| mips64vr5900 | mips64vr5900el \
-	| mipsisa32 | mipsisa32el \
-	| mipsisa32r2 | mipsisa32r2el \
-	| mipsisa32r6 | mipsisa32r6el \
-	| mipsisa64 | mipsisa64el \
-	| mipsisa64r2 | mipsisa64r2el \
-	| mipsisa64r6 | mipsisa64r6el \
-	| mipsisa64sb1 | mipsisa64sb1el \
-	| mipsisa64sr71k | mipsisa64sr71kel \
-	| mipsr5900 | mipsr5900el \
-	| mipstx39 | mipstx39el \
-	| mn10200 | mn10300 \
-	| moxie \
-	| mt \
-	| msp430 \
-	| nds32 | nds32le | nds32be \
-	| nios | nios2 | nios2eb | nios2el \
-	| ns16k | ns32k \
-	| open8 | or1k | or1knd | or32 \
-	| pdp10 | pdp11 | pj | pjl \
-	| powerpc | powerpc64 | powerpc64le | powerpcle \
-	| pyramid \
-	| riscv32 | riscv64 \
-	| rl78 | rx \
-	| score \
-	| sh | sh[1234] | sh[24]a | sh[24]aeb | sh[23]e | sh[34]eb | sheb | shbe | shle | sh[1234]le | sh3ele \
-	| sh64 | sh64le \
-	| sparc | sparc64 | sparc64b | sparc64v | sparc86x | sparclet | sparclite \
-	| sparcv8 | sparcv9 | sparcv9b | sparcv9v \
-	| spu \
-	| tahoe | tic4x | tic54x | tic55x | tic6x | tic80 | tron \
-	| ubicom32 \
-	| v850 | v850e | v850e1 | v850e2 | v850es | v850e2v3 \
-	| we32k \
-	| x86 | xc16x | xstormy16 | xtensa \
-	| z8k | z80)
-		basic_machine=$basic_machine-unknown
-		;;
-	c54x)
-		basic_machine=tic54x-unknown
-		;;
-	c55x)
-		basic_machine=tic55x-unknown
-		;;
-	c6x)
-		basic_machine=tic6x-unknown
-		;;
-	leon|leon[3-9])
-		basic_machine=sparc-$basic_machine
-		;;
-	m6811 | m68hc11 | m6812 | m68hc12 | m68hcs12x | nvptx | picochip)
-		basic_machine=$basic_machine-unknown
-		os=-none
-		;;
-	m88110 | m680[12346]0 | m683?2 | m68360 | m5200 | v70 | w65 | z8k)
-		;;
-	ms1)
-		basic_machine=mt-unknown
-		;;
-
-	strongarm | thumb | xscale)
-		basic_machine=arm-unknown
-		;;
-	xgate)
-		basic_machine=$basic_machine-unknown
-		os=-none
-		;;
-	xscaleeb)
-		basic_machine=armeb-unknown
-		;;
-
-	xscaleel)
-		basic_machine=armel-unknown
-		;;
-
-	# We use `pc' rather than `unknown'
-	# because (1) that's what they normally are, and
-	# (2) the word "unknown" tends to confuse beginning users.
-	i*86 | x86_64)
-	  basic_machine=$basic_machine-pc
-	  ;;
-	# Object if more than one company name word.
-	*-*-*)
-		echo Invalid configuration \`$1\': machine \`$basic_machine\' not recognized 1>&2
-		exit 1
-		;;
-	# Recognize the basic CPU types with company name.
-	580-* \
-	| a29k-* \
-	| aarch64-* | aarch64_be-* \
-	| alpha-* | alphaev[4-8]-* | alphaev56-* | alphaev6[78]-* \
-	| alpha64-* | alpha64ev[4-8]-* | alpha64ev56-* | alpha64ev6[78]-* \
-	| alphapca5[67]-* | alpha64pca5[67]-* | arc-* | arceb-* \
-	| arm-*  | armbe-* | armle-* | armeb-* | armv*-* \
-	| avr-* | avr32-* \
-	| be32-* | be64-* \
-	| bfin-* | bs2000-* \
-	| c[123]* | c30-* | [cjt]90-* | c4x-* \
-	| c8051-* | clipper-* | craynv-* | cydra-* \
-	| d10v-* | d30v-* | dlx-* \
-	| elxsi-* \
-	| f30[01]-* | f700-* | fido-* | fr30-* | frv-* | fx80-* \
-	| h8300-* | h8500-* \
-	| hppa-* | hppa1.[01]-* | hppa2.0-* | hppa2.0[nw]-* | hppa64-* \
-	| hexagon-* \
-	| i*86-* | i860-* | i960-* | ia64-* \
-	| ip2k-* | iq2000-* \
-	| k1om-* \
-	| le32-* | le64-* \
-	| lm32-* \
-	| m32c-* | m32r-* | m32rle-* \
-	| m68000-* | m680[012346]0-* | m68360-* | m683?2-* | m68k-* \
-	| m88110-* | m88k-* | maxq-* | mcore-* | metag-* \
-	| microblaze-* | microblazeel-* \
-	| mips-* | mipsbe-* | mipseb-* | mipsel-* | mipsle-* \
-	| mips16-* \
-	| mips64-* | mips64el-* \
-	| mips64octeon-* | mips64octeonel-* \
-	| mips64orion-* | mips64orionel-* \
-	| mips64r5900-* | mips64r5900el-* \
-	| mips64vr-* | mips64vrel-* \
-	| mips64vr4100-* | mips64vr4100el-* \
-	| mips64vr4300-* | mips64vr4300el-* \
-	| mips64vr5000-* | mips64vr5000el-* \
-	| mips64vr5900-* | mips64vr5900el-* \
-	| mipsisa32-* | mipsisa32el-* \
-	| mipsisa32r2-* | mipsisa32r2el-* \
-	| mipsisa32r6-* | mipsisa32r6el-* \
-	| mipsisa64-* | mipsisa64el-* \
-	| mipsisa64r2-* | mipsisa64r2el-* \
-	| mipsisa64r6-* | mipsisa64r6el-* \
-	| mipsisa64sb1-* | mipsisa64sb1el-* \
-	| mipsisa64sr71k-* | mipsisa64sr71kel-* \
-	| mipsr5900-* | mipsr5900el-* \
-	| mipstx39-* | mipstx39el-* \
-	| mmix-* \
-	| mt-* \
-	| msp430-* \
-	| nds32-* | nds32le-* | nds32be-* \
-	| nios-* | nios2-* | nios2eb-* | nios2el-* \
-	| none-* | np1-* | ns16k-* | ns32k-* \
-	| open8-* \
-	| or1k*-* \
-	| orion-* \
-	| pdp10-* | pdp11-* | pj-* | pjl-* | pn-* | power-* \
-	| powerpc-* | powerpc64-* | powerpc64le-* | powerpcle-* \
-	| pyramid-* \
-	| rl78-* | romp-* | rs6000-* | rx-* \
-	| sh-* | sh[1234]-* | sh[24]a-* | sh[24]aeb-* | sh[23]e-* | sh[34]eb-* | sheb-* | shbe-* \
-	| shle-* | sh[1234]le-* | sh3ele-* | sh64-* | sh64le-* \
-	| sparc-* | sparc64-* | sparc64b-* | sparc64v-* | sparc86x-* | sparclet-* \
-	| sparclite-* \
-	| sparcv8-* | sparcv9-* | sparcv9b-* | sparcv9v-* | sv1-* | sx?-* \
-	| tahoe-* \
-	| tic30-* | tic4x-* | tic54x-* | tic55x-* | tic6x-* | tic80-* \
-	| tile*-* \
-	| tron-* \
-	| ubicom32-* \
-	| v850-* | v850e-* | v850e1-* | v850es-* | v850e2-* | v850e2v3-* \
-	| vax-* \
-	| we32k-* \
-	| x86-* | x86_64-* | xc16x-* | xps100-* \
-	| xstormy16-* | xtensa*-* \
-	| ymp-* \
-	| z8k-* | z80-*)
-		;;
-	# Recognize the basic CPU types without company name, with glob match.
-	xtensa*)
-		basic_machine=$basic_machine-unknown
-		;;
-	# Recognize the various machine names and aliases which stand
-	# for a CPU type and a company and sometimes even an OS.
-	386bsd)
-		basic_machine=i386-unknown
-		os=-bsd
-		;;
-	3b1 | 7300 | 7300-att | att-7300 | pc7300 | safari | unixpc)
-		basic_machine=m68000-att
-		;;
-	3b*)
-		basic_machine=we32k-att
-		;;
-	a29khif)
-		basic_machine=a29k-amd
-		os=-udi
-		;;
-	abacus)
-		basic_machine=abacus-unknown
-		;;
-	adobe68k)
-		basic_machine=m68010-adobe
-		os=-scout
-		;;
-	alliant | fx80)
-		basic_machine=fx80-alliant
-		;;
-	altos | altos3068)
-		basic_machine=m68k-altos
-		;;
-	am29k)
-		basic_machine=a29k-none
-		os=-bsd
-		;;
-	amd64)
-		basic_machine=x86_64-pc
-		;;
-	amd64-*)
-		basic_machine=x86_64-`echo $basic_machine | sed 's/^[^-]*-//'`
-		;;
-	amdahl)
-		basic_machine=580-amdahl
-		os=-sysv
-		;;
-	amiga | amiga-*)
-		basic_machine=m68k-unknown
-		;;
-	amigaos | amigados)
-		basic_machine=m68k-unknown
-		os=-amigaos
-		;;
-	amigaunix | amix)
-		basic_machine=m68k-unknown
-		os=-sysv4
-		;;
-	apollo68)
-		basic_machine=m68k-apollo
-		os=-sysv
-		;;
-	apollo68bsd)
-		basic_machine=m68k-apollo
-		os=-bsd
-		;;
-	aros)
-		basic_machine=i386-pc
-		os=-aros
-		;;
-	aux)
-		basic_machine=m68k-apple
-		os=-aux
-		;;
-	balance)
-		basic_machine=ns32k-sequent
-		os=-dynix
-		;;
-	blackfin)
-		basic_machine=bfin-unknown
-		os=-linux
-		;;
-	blackfin-*)
-		basic_machine=bfin-`echo $basic_machine | sed 's/^[^-]*-//'`
-		os=-linux
-		;;
-	bluegene*)
-		basic_machine=powerpc-ibm
-		os=-cnk
-		;;
-	c54x-*)
-		basic_machine=tic54x-`echo $basic_machine | sed 's/^[^-]*-//'`
-		;;
-	c55x-*)
-		basic_machine=tic55x-`echo $basic_machine | sed 's/^[^-]*-//'`
-		;;
-	c6x-*)
-		basic_machine=tic6x-`echo $basic_machine | sed 's/^[^-]*-//'`
-		;;
-	c90)
-		basic_machine=c90-cray
-		os=-unicos
-		;;
-	cegcc)
-		basic_machine=arm-unknown
-		os=-cegcc
-		;;
-	convex-c1)
-		basic_machine=c1-convex
-		os=-bsd
-		;;
-	convex-c2)
-		basic_machine=c2-convex
-		os=-bsd
-		;;
-	convex-c32)
-		basic_machine=c32-convex
-		os=-bsd
-		;;
-	convex-c34)
-		basic_machine=c34-convex
-		os=-bsd
-		;;
-	convex-c38)
-		basic_machine=c38-convex
-		os=-bsd
-		;;
-	cray | j90)
-		basic_machine=j90-cray
-		os=-unicos
-		;;
-	craynv)
-		basic_machine=craynv-cray
-		os=-unicosmp
-		;;
-	cr16 | cr16-*)
-		basic_machine=cr16-unknown
-		os=-elf
-		;;
-	crds | unos)
-		basic_machine=m68k-crds
-		;;
-	crisv32 | crisv32-* | etraxfs*)
-		basic_machine=crisv32-axis
-		;;
-	cris | cris-* | etrax*)
-		basic_machine=cris-axis
-		;;
-	crx)
-		basic_machine=crx-unknown
-		os=-elf
-		;;
-	da30 | da30-*)
-		basic_machine=m68k-da30
-		;;
-	decstation | decstation-3100 | pmax | pmax-* | pmin | dec3100 | decstatn)
-		basic_machine=mips-dec
-		;;
-	decsystem10* | dec10*)
-		basic_machine=pdp10-dec
-		os=-tops10
-		;;
-	decsystem20* | dec20*)
-		basic_machine=pdp10-dec
-		os=-tops20
-		;;
-	delta | 3300 | motorola-3300 | motorola-delta \
-	      | 3300-motorola | delta-motorola)
-		basic_machine=m68k-motorola
-		;;
-	delta88)
-		basic_machine=m88k-motorola
-		os=-sysv3
-		;;
-	dicos)
-		basic_machine=i686-pc
-		os=-dicos
-		;;
-	djgpp)
-		basic_machine=i586-pc
-		os=-msdosdjgpp
-		;;
-	dpx20 | dpx20-*)
-		basic_machine=rs6000-bull
-		os=-bosx
-		;;
-	dpx2* | dpx2*-bull)
-		basic_machine=m68k-bull
-		os=-sysv3
-		;;
-	ebmon29k)
-		basic_machine=a29k-amd
-		os=-ebmon
-		;;
-	elxsi)
-		basic_machine=elxsi-elxsi
-		os=-bsd
-		;;
-	encore | umax | mmax)
-		basic_machine=ns32k-encore
-		;;
-	es1800 | OSE68k | ose68k | ose | OSE)
-		basic_machine=m68k-ericsson
-		os=-ose
-		;;
-	fx2800)
-		basic_machine=i860-alliant
-		;;
-	genix)
-		basic_machine=ns32k-ns
-		;;
-	gmicro)
-		basic_machine=tron-gmicro
-		os=-sysv
-		;;
-	go32)
-		basic_machine=i386-pc
-		os=-go32
-		;;
-	h3050r* | hiux*)
-		basic_machine=hppa1.1-hitachi
-		os=-hiuxwe2
-		;;
-	h8300hms)
-		basic_machine=h8300-hitachi
-		os=-hms
-		;;
-	h8300xray)
-		basic_machine=h8300-hitachi
-		os=-xray
-		;;
-	h8500hms)
-		basic_machine=h8500-hitachi
-		os=-hms
-		;;
-	harris)
-		basic_machine=m88k-harris
-		os=-sysv3
-		;;
-	hp300-*)
-		basic_machine=m68k-hp
-		;;
-	hp300bsd)
-		basic_machine=m68k-hp
-		os=-bsd
-		;;
-	hp300hpux)
-		basic_machine=m68k-hp
-		os=-hpux
-		;;
-	hp3k9[0-9][0-9] | hp9[0-9][0-9])
-		basic_machine=hppa1.0-hp
-		;;
-	hp9k2[0-9][0-9] | hp9k31[0-9])
-		basic_machine=m68000-hp
-		;;
-	hp9k3[2-9][0-9])
-		basic_machine=m68k-hp
-		;;
-	hp9k6[0-9][0-9] | hp6[0-9][0-9])
-		basic_machine=hppa1.0-hp
-		;;
-	hp9k7[0-79][0-9] | hp7[0-79][0-9])
-		basic_machine=hppa1.1-hp
-		;;
-	hp9k78[0-9] | hp78[0-9])
-		# FIXME: really hppa2.0-hp
-		basic_machine=hppa1.1-hp
-		;;
-	hp9k8[67]1 | hp8[67]1 | hp9k80[24] | hp80[24] | hp9k8[78]9 | hp8[78]9 | hp9k893 | hp893)
-		# FIXME: really hppa2.0-hp
-		basic_machine=hppa1.1-hp
-		;;
-	hp9k8[0-9][13679] | hp8[0-9][13679])
-		basic_machine=hppa1.1-hp
-		;;
-	hp9k8[0-9][0-9] | hp8[0-9][0-9])
-		basic_machine=hppa1.0-hp
-		;;
-	hppa-next)
-		os=-nextstep3
-		;;
-	hppaosf)
-		basic_machine=hppa1.1-hp
-		os=-osf
-		;;
-	hppro)
-		basic_machine=hppa1.1-hp
-		os=-proelf
-		;;
-	i370-ibm* | ibm*)
-		basic_machine=i370-ibm
-		;;
-	i*86v32)
-		basic_machine=`echo $1 | sed -e 's/86.*/86-pc/'`
-		os=-sysv32
-		;;
-	i*86v4*)
-		basic_machine=`echo $1 | sed -e 's/86.*/86-pc/'`
-		os=-sysv4
-		;;
-	i*86v)
-		basic_machine=`echo $1 | sed -e 's/86.*/86-pc/'`
-		os=-sysv
-		;;
-	i*86sol2)
-		basic_machine=`echo $1 | sed -e 's/86.*/86-pc/'`
-		os=-solaris2
-		;;
-	i386mach)
-		basic_machine=i386-mach
-		os=-mach
-		;;
-	i386-vsta | vsta)
-		basic_machine=i386-unknown
-		os=-vsta
-		;;
-	iris | iris4d)
-		basic_machine=mips-sgi
-		case $os in
-		    -irix*)
-			;;
-		    *)
-			os=-irix4
-			;;
-		esac
-		;;
-	isi68 | isi)
-		basic_machine=m68k-isi
-		os=-sysv
-		;;
-	leon-*|leon[3-9]-*)
-		basic_machine=sparc-`echo $basic_machine | sed 's/-.*//'`
-		;;
-	m68knommu)
-		basic_machine=m68k-unknown
-		os=-linux
-		;;
-	m68knommu-*)
-		basic_machine=m68k-`echo $basic_machine | sed 's/^[^-]*-//'`
-		os=-linux
-		;;
-	m88k-omron*)
-		basic_machine=m88k-omron
-		;;
-	magnum | m3230)
-		basic_machine=mips-mips
-		os=-sysv
-		;;
-	merlin)
-		basic_machine=ns32k-utek
-		os=-sysv
-		;;
-	microblaze*)
-		basic_machine=microblaze-xilinx
-		;;
-	mingw64)
-		basic_machine=x86_64-pc
-		os=-mingw64
-		;;
-	mingw32)
-		basic_machine=i686-pc
-		os=-mingw32
-		;;
-	mingw32ce)
-		basic_machine=arm-unknown
-		os=-mingw32ce
-		;;
-	miniframe)
-		basic_machine=m68000-convergent
-		;;
-	*mint | -mint[0-9]* | *MiNT | *MiNT[0-9]*)
-		basic_machine=m68k-atari
-		os=-mint
-		;;
-	mips3*-*)
-		basic_machine=`echo $basic_machine | sed -e 's/mips3/mips64/'`
-		;;
-	mips3*)
-		basic_machine=`echo $basic_machine | sed -e 's/mips3/mips64/'`-unknown
-		;;
-	monitor)
-		basic_machine=m68k-rom68k
-		os=-coff
-		;;
-	morphos)
-		basic_machine=powerpc-unknown
-		os=-morphos
-		;;
-	moxiebox)
-		basic_machine=moxie-unknown
-		os=-moxiebox
-		;;
-	msdos)
-		basic_machine=i386-pc
-		os=-msdos
-		;;
-	ms1-*)
-		basic_machine=`echo $basic_machine | sed -e 's/ms1-/mt-/'`
-		;;
-	msys)
-		basic_machine=i686-pc
-		os=-msys
-		;;
-	mvs)
-		basic_machine=i370-ibm
-		os=-mvs
-		;;
-	nacl)
-		basic_machine=le32-unknown
-		os=-nacl
-		;;
-	ncr3000)
-		basic_machine=i486-ncr
-		os=-sysv4
-		;;
-	netbsd386)
-		basic_machine=i386-unknown
-		os=-netbsd
-		;;
-	netwinder)
-		basic_machine=armv4l-rebel
-		os=-linux
-		;;
-	news | news700 | news800 | news900)
-		basic_machine=m68k-sony
-		os=-newsos
-		;;
-	news1000)
-		basic_machine=m68030-sony
-		os=-newsos
-		;;
-	news-3600 | risc-news)
-		basic_machine=mips-sony
-		os=-newsos
-		;;
-	necv70)
-		basic_machine=v70-nec
-		os=-sysv
-		;;
-	next | m*-next )
-		basic_machine=m68k-next
-		case $os in
-		    -nextstep* )
-			;;
-		    -ns2*)
-		      os=-nextstep2
-			;;
-		    *)
-		      os=-nextstep3
-			;;
-		esac
-		;;
-	nh3000)
-		basic_machine=m68k-harris
-		os=-cxux
-		;;
-	nh[45]000)
-		basic_machine=m88k-harris
-		os=-cxux
-		;;
-	nindy960)
-		basic_machine=i960-intel
-		os=-nindy
-		;;
-	mon960)
-		basic_machine=i960-intel
-		os=-mon960
-		;;
-	nonstopux)
-		basic_machine=mips-compaq
-		os=-nonstopux
-		;;
-	np1)
-		basic_machine=np1-gould
-		;;
-	neo-tandem)
-		basic_machine=neo-tandem
-		;;
-	nse-tandem)
-		basic_machine=nse-tandem
-		;;
-	nsr-tandem)
-		basic_machine=nsr-tandem
-		;;
-	op50n-* | op60c-*)
-		basic_machine=hppa1.1-oki
-		os=-proelf
-		;;
-	openrisc | openrisc-*)
-		basic_machine=or32-unknown
-		;;
-	os400)
-		basic_machine=powerpc-ibm
-		os=-os400
-		;;
-	OSE68000 | ose68000)
-		basic_machine=m68000-ericsson
-		os=-ose
-		;;
-	os68k)
-		basic_machine=m68k-none
-		os=-os68k
-		;;
-	pa-hitachi)
-		basic_machine=hppa1.1-hitachi
-		os=-hiuxwe2
-		;;
-	paragon)
-		basic_machine=i860-intel
-		os=-osf
-		;;
-	parisc)
-		basic_machine=hppa-unknown
-		os=-linux
-		;;
-	parisc-*)
-		basic_machine=hppa-`echo $basic_machine | sed 's/^[^-]*-//'`
-		os=-linux
-		;;
-	pbd)
-		basic_machine=sparc-tti
-		;;
-	pbb)
-		basic_machine=m68k-tti
-		;;
-	pc532 | pc532-*)
-		basic_machine=ns32k-pc532
-		;;
-	pc98)
-		basic_machine=i386-pc
-		;;
-	pc98-*)
-		basic_machine=i386-`echo $basic_machine | sed 's/^[^-]*-//'`
-		;;
-	pentium | p5 | k5 | k6 | nexgen | viac3)
-		basic_machine=i586-pc
-		;;
-	pentiumpro | p6 | 6x86 | athlon | athlon_*)
-		basic_machine=i686-pc
-		;;
-	pentiumii | pentium2 | pentiumiii | pentium3)
-		basic_machine=i686-pc
-		;;
-	pentium4)
-		basic_machine=i786-pc
-		;;
-	pentium-* | p5-* | k5-* | k6-* | nexgen-* | viac3-*)
-		basic_machine=i586-`echo $basic_machine | sed 's/^[^-]*-//'`
-		;;
-	pentiumpro-* | p6-* | 6x86-* | athlon-*)
-		basic_machine=i686-`echo $basic_machine | sed 's/^[^-]*-//'`
-		;;
-	pentiumii-* | pentium2-* | pentiumiii-* | pentium3-*)
-		basic_machine=i686-`echo $basic_machine | sed 's/^[^-]*-//'`
-		;;
-	pentium4-*)
-		basic_machine=i786-`echo $basic_machine | sed 's/^[^-]*-//'`
-		;;
-	pn)
-		basic_machine=pn-gould
-		;;
-	power)	basic_machine=power-ibm
-		;;
-	ppc | ppcbe)	basic_machine=powerpc-unknown
-		;;
-	ppc-* | ppcbe-*)
-		basic_machine=powerpc-`echo $basic_machine | sed 's/^[^-]*-//'`
-		;;
-	ppcle | powerpclittle | ppc-le | powerpc-little)
-		basic_machine=powerpcle-unknown
-		;;
-	ppcle-* | powerpclittle-*)
-		basic_machine=powerpcle-`echo $basic_machine | sed 's/^[^-]*-//'`
-		;;
-	ppc64)	basic_machine=powerpc64-unknown
-		;;
-	ppc64-*) basic_machine=powerpc64-`echo $basic_machine | sed 's/^[^-]*-//'`
-		;;
-	ppc64le | powerpc64little | ppc64-le | powerpc64-little)
-		basic_machine=powerpc64le-unknown
-		;;
-	ppc64le-* | powerpc64little-*)
-		basic_machine=powerpc64le-`echo $basic_machine | sed 's/^[^-]*-//'`
-		;;
-	ps2)
-		basic_machine=i386-ibm
-		;;
-	pw32)
-		basic_machine=i586-unknown
-		os=-pw32
-		;;
-	rdos | rdos64)
-		basic_machine=x86_64-pc
-		os=-rdos
-		;;
-	rdos32)
-		basic_machine=i386-pc
-		os=-rdos
-		;;
-	rom68k)
-		basic_machine=m68k-rom68k
-		os=-coff
-		;;
-	rm[46]00)
-		basic_machine=mips-siemens
-		;;
-	rtpc | rtpc-*)
-		basic_machine=romp-ibm
-		;;
-	s390 | s390-*)
-		basic_machine=s390-ibm
-		;;
-	s390x | s390x-*)
-		basic_machine=s390x-ibm
-		;;
-	sa29200)
-		basic_machine=a29k-amd
-		os=-udi
-		;;
-	sb1)
-		basic_machine=mipsisa64sb1-unknown
-		;;
-	sb1el)
-		basic_machine=mipsisa64sb1el-unknown
-		;;
-	sde)
-		basic_machine=mipsisa32-sde
-		os=-elf
-		;;
-	sei)
-		basic_machine=mips-sei
-		os=-seiux
-		;;
-	sequent)
-		basic_machine=i386-sequent
-		;;
-	sh)
-		basic_machine=sh-hitachi
-		os=-hms
-		;;
-	sh5el)
-		basic_machine=sh5le-unknown
-		;;
-	sh64)
-		basic_machine=sh64-unknown
-		;;
-	sparclite-wrs | simso-wrs)
-		basic_machine=sparclite-wrs
-		os=-vxworks
-		;;
-	sps7)
-		basic_machine=m68k-bull
-		os=-sysv2
-		;;
-	spur)
-		basic_machine=spur-unknown
-		;;
-	st2000)
-		basic_machine=m68k-tandem
-		;;
-	stratus)
-		basic_machine=i860-stratus
-		os=-sysv4
-		;;
-	strongarm-* | thumb-*)
-		basic_machine=arm-`echo $basic_machine | sed 's/^[^-]*-//'`
-		;;
-	sun2)
-		basic_machine=m68000-sun
-		;;
-	sun2os3)
-		basic_machine=m68000-sun
-		os=-sunos3
-		;;
-	sun2os4)
-		basic_machine=m68000-sun
-		os=-sunos4
-		;;
-	sun3os3)
-		basic_machine=m68k-sun
-		os=-sunos3
-		;;
-	sun3os4)
-		basic_machine=m68k-sun
-		os=-sunos4
-		;;
-	sun4os3)
-		basic_machine=sparc-sun
-		os=-sunos3
-		;;
-	sun4os4)
-		basic_machine=sparc-sun
-		os=-sunos4
-		;;
-	sun4sol2)
-		basic_machine=sparc-sun
-		os=-solaris2
-		;;
-	sun3 | sun3-*)
-		basic_machine=m68k-sun
-		;;
-	sun4)
-		basic_machine=sparc-sun
-		;;
-	sun386 | sun386i | roadrunner)
-		basic_machine=i386-sun
-		;;
-	sv1)
-		basic_machine=sv1-cray
-		os=-unicos
-		;;
-	symmetry)
-		basic_machine=i386-sequent
-		os=-dynix
-		;;
-	t3e)
-		basic_machine=alphaev5-cray
-		os=-unicos
-		;;
-	t90)
-		basic_machine=t90-cray
-		os=-unicos
-		;;
-	tile*)
-		basic_machine=$basic_machine-unknown
-		os=-linux-gnu
-		;;
-	tx39)
-		basic_machine=mipstx39-unknown
-		;;
-	tx39el)
-		basic_machine=mipstx39el-unknown
-		;;
-	toad1)
-		basic_machine=pdp10-xkl
-		os=-tops20
-		;;
-	tower | tower-32)
-		basic_machine=m68k-ncr
-		;;
-	tpf)
-		basic_machine=s390x-ibm
-		os=-tpf
-		;;
-	udi29k)
-		basic_machine=a29k-amd
-		os=-udi
-		;;
-	ultra3)
-		basic_machine=a29k-nyu
-		os=-sym1
-		;;
-	v810 | necv810)
-		basic_machine=v810-nec
-		os=-none
-		;;
-	vaxv)
-		basic_machine=vax-dec
-		os=-sysv
-		;;
-	vms)
-		basic_machine=vax-dec
-		os=-vms
-		;;
-	vpp*|vx|vx-*)
-		basic_machine=f301-fujitsu
-		;;
-	vxworks960)
-		basic_machine=i960-wrs
-		os=-vxworks
-		;;
-	vxworks68)
-		basic_machine=m68k-wrs
-		os=-vxworks
-		;;
-	vxworks29k)
-		basic_machine=a29k-wrs
-		os=-vxworks
-		;;
-	w65*)
-		basic_machine=w65-wdc
-		os=-none
-		;;
-	w89k-*)
-		basic_machine=hppa1.1-winbond
-		os=-proelf
-		;;
-	xbox)
-		basic_machine=i686-pc
-		os=-mingw32
-		;;
-	xps | xps100)
-		basic_machine=xps100-honeywell
-		;;
-	xscale-* | xscalee[bl]-*)
-		basic_machine=`echo $basic_machine | sed 's/^xscale/arm/'`
-		;;
-	ymp)
-		basic_machine=ymp-cray
-		os=-unicos
-		;;
-	z8k-*-coff)
-		basic_machine=z8k-unknown
-		os=-sim
-		;;
-	z80-*-coff)
-		basic_machine=z80-unknown
-		os=-sim
-		;;
-	none)
-		basic_machine=none-none
-		os=-none
-		;;
-
-# Here we handle the default manufacturer of certain CPU types.  It is in
-# some cases the only manufacturer, in others, it is the most popular.
-	w89k)
-		basic_machine=hppa1.1-winbond
-		;;
-	op50n)
-		basic_machine=hppa1.1-oki
-		;;
-	op60c)
-		basic_machine=hppa1.1-oki
-		;;
-	romp)
-		basic_machine=romp-ibm
-		;;
-	mmix)
-		basic_machine=mmix-knuth
-		;;
-	rs6000)
-		basic_machine=rs6000-ibm
-		;;
-	vax)
-		basic_machine=vax-dec
-		;;
-	pdp10)
-		# there are many clones, so DEC is not a safe bet
-		basic_machine=pdp10-unknown
-		;;
-	pdp11)
-		basic_machine=pdp11-dec
-		;;
-	we32k)
-		basic_machine=we32k-att
-		;;
-	sh[1234] | sh[24]a | sh[24]aeb | sh[34]eb | sh[1234]le | sh[23]ele)
-		basic_machine=sh-unknown
-		;;
-	sparc | sparcv8 | sparcv9 | sparcv9b | sparcv9v)
-		basic_machine=sparc-sun
-		;;
-	cydra)
-		basic_machine=cydra-cydrome
-		;;
-	orion)
-		basic_machine=orion-highlevel
-		;;
-	orion105)
-		basic_machine=clipper-highlevel
-		;;
-	mac | mpw | mac-mpw)
-		basic_machine=m68k-apple
-		;;
-	pmac | pmac-mpw)
-		basic_machine=powerpc-apple
-		;;
-	*-unknown)
-		# Make sure to match an already-canonicalized machine name.
-		;;
-	*)
-		echo Invalid configuration \`$1\': machine \`$basic_machine\' not recognized 1>&2
-		exit 1
-		;;
-esac
-
-# Here we canonicalize certain aliases for manufacturers.
-case $basic_machine in
-	*-digital*)
-		basic_machine=`echo $basic_machine | sed 's/digital.*/dec/'`
-		;;
-	*-commodore*)
-		basic_machine=`echo $basic_machine | sed 's/commodore.*/cbm/'`
-		;;
-	*)
-		;;
-esac
-
-# Decode manufacturer-specific aliases for certain operating systems.
-
-if [ x"$os" != x"" ]
-then
-case $os in
-	# First match some system type aliases
-	# that might get confused with valid system types.
-	# -solaris* is a basic system type, with this one exception.
-	-auroraux)
-		os=-auroraux
-		;;
-	-solaris1 | -solaris1.*)
-		os=`echo $os | sed -e 's|solaris1|sunos4|'`
-		;;
-	-solaris)
-		os=-solaris2
-		;;
-	-svr4*)
-		os=-sysv4
-		;;
-	-unixware*)
-		os=-sysv4.2uw
-		;;
-	-gnu/linux*)
-		os=`echo $os | sed -e 's|gnu/linux|linux-gnu|'`
-		;;
-	# First accept the basic system types.
-	# The portable systems comes first.
-	# Each alternative MUST END IN A *, to match a version number.
-	# -sysv* is not here because it comes later, after sysvr4.
-	-gnu* | -bsd* | -mach* | -minix* | -genix* | -ultrix* | -irix* \
-	      | -*vms* | -sco* | -esix* | -isc* | -aix* | -cnk* | -sunos | -sunos[34]*\
-	      | -hpux* | -unos* | -osf* | -luna* | -dgux* | -auroraux* | -solaris* \
-	      | -sym* | -kopensolaris* | -plan9* \
-	      | -amigaos* | -amigados* | -msdos* | -newsos* | -unicos* | -aof* \
-	      | -aos* | -aros* \
-	      | -nindy* | -vxsim* | -vxworks* | -ebmon* | -hms* | -mvs* \
-	      | -clix* | -riscos* | -uniplus* | -iris* | -rtu* | -xenix* \
-	      | -hiux* | -386bsd* | -knetbsd* | -mirbsd* | -netbsd* \
-	      | -bitrig* | -openbsd* | -solidbsd* \
-	      | -ekkobsd* | -kfreebsd* | -freebsd* | -riscix* | -lynxos* \
-	      | -bosx* | -nextstep* | -cxux* | -aout* | -elf* | -oabi* \
-	      | -ptx* | -coff* | -ecoff* | -winnt* | -domain* | -vsta* \
-	      | -udi* | -eabi* | -lites* | -ieee* | -go32* | -aux* \
-	      | -chorusos* | -chorusrdb* | -cegcc* \
-	      | -cygwin* | -msys* | -pe* | -psos* | -moss* | -proelf* | -rtems* \
-	      | -mingw32* | -mingw64* | -linux-gnu* | -linux-android* \
-	      | -linux-newlib* | -linux-musl* | -linux-uclibc* \
-	      | -uxpv* | -beos* | -mpeix* | -udk* | -moxiebox* \
-	      | -interix* | -uwin* | -mks* | -rhapsody* | -darwin* | -opened* \
-	      | -openstep* | -oskit* | -conix* | -pw32* | -nonstopux* \
-	      | -storm-chaos* | -tops10* | -tenex* | -tops20* | -its* \
-	      | -os2* | -vos* | -palmos* | -uclinux* | -nucleus* \
-	      | -morphos* | -superux* | -rtmk* | -rtmk-nova* | -windiss* \
-	      | -powermax* | -dnix* | -nx6 | -nx7 | -sei* | -dragonfly* \
-	      | -skyos* | -haiku* | -rdos* | -toppers* | -drops* | -es* | -tirtos*)
-	# Remember, each alternative MUST END IN *, to match a version number.
-		;;
-	-qnx*)
-		case $basic_machine in
-		    x86-* | i*86-*)
-			;;
-		    *)
-			os=-nto$os
-			;;
-		esac
-		;;
-	-nto-qnx*)
-		;;
-	-nto*)
-		os=`echo $os | sed -e 's|nto|nto-qnx|'`
-		;;
-	-sim | -es1800* | -hms* | -xray | -os68k* | -none* | -v88r* \
-	      | -windows* | -osx | -abug | -netware* | -os9* | -beos* | -haiku* \
-	      | -macos* | -mpw* | -magic* | -mmixware* | -mon960* | -lnews*)
-		;;
-	-mac*)
-		os=`echo $os | sed -e 's|mac|macos|'`
-		;;
-	-linux-dietlibc)
-		os=-linux-dietlibc
-		;;
-	-linux*)
-		os=`echo $os | sed -e 's|linux|linux-gnu|'`
-		;;
-	-sunos5*)
-		os=`echo $os | sed -e 's|sunos5|solaris2|'`
-		;;
-	-sunos6*)
-		os=`echo $os | sed -e 's|sunos6|solaris3|'`
-		;;
-	-opened*)
-		os=-openedition
-		;;
-	-os400*)
-		os=-os400
-		;;
-	-wince*)
-		os=-wince
-		;;
-	-osfrose*)
-		os=-osfrose
-		;;
-	-osf*)
-		os=-osf
-		;;
-	-utek*)
-		os=-bsd
-		;;
-	-dynix*)
-		os=-bsd
-		;;
-	-acis*)
-		os=-aos
-		;;
-	-atheos*)
-		os=-atheos
-		;;
-	-syllable*)
-		os=-syllable
-		;;
-	-386bsd)
-		os=-bsd
-		;;
-	-ctix* | -uts*)
-		os=-sysv
-		;;
-	-nova*)
-		os=-rtmk-nova
-		;;
-	-ns2 )
-		os=-nextstep2
-		;;
-	-nsk*)
-		os=-nsk
-		;;
-	# Preserve the version number of sinix5.
-	-sinix5.*)
-		os=`echo $os | sed -e 's|sinix|sysv|'`
-		;;
-	-sinix*)
-		os=-sysv4
-		;;
-	-tpf*)
-		os=-tpf
-		;;
-	-triton*)
-		os=-sysv3
-		;;
-	-oss*)
-		os=-sysv3
-		;;
-	-svr4)
-		os=-sysv4
-		;;
-	-svr3)
-		os=-sysv3
-		;;
-	-sysvr4)
-		os=-sysv4
-		;;
-	# This must come after -sysvr4.
-	-sysv*)
-		;;
-	-ose*)
-		os=-ose
-		;;
-	-es1800*)
-		os=-ose
-		;;
-	-xenix)
-		os=-xenix
-		;;
-	-*mint | -mint[0-9]* | -*MiNT | -MiNT[0-9]*)
-		os=-mint
-		;;
-	-aros*)
-		os=-aros
-		;;
-	-zvmoe)
-		os=-zvmoe
-		;;
-	-dicos*)
-		os=-dicos
-		;;
-	-nacl*)
-		;;
-	-none)
-		;;
-	*)
-		# Get rid of the `-' at the beginning of $os.
-		os=`echo $os | sed 's/[^-]*-//'`
-		echo Invalid configuration \`$1\': system \`$os\' not recognized 1>&2
-		exit 1
-		;;
-esac
-else
-
-# Here we handle the default operating systems that come with various machines.
-# The value should be what the vendor currently ships out the door with their
-# machine or put another way, the most popular os provided with the machine.
-
-# Note that if you're going to try to match "-MANUFACTURER" here (say,
-# "-sun"), then you have to tell the case statement up towards the top
-# that MANUFACTURER isn't an operating system.  Otherwise, code above
-# will signal an error saying that MANUFACTURER isn't an operating
-# system, and we'll never get to this point.
-
-case $basic_machine in
-	score-*)
-		os=-elf
-		;;
-	spu-*)
-		os=-elf
-		;;
-	*-acorn)
-		os=-riscix1.2
-		;;
-	arm*-rebel)
-		os=-linux
-		;;
-	arm*-semi)
-		os=-aout
-		;;
-	c4x-* | tic4x-*)
-		os=-coff
-		;;
-	c8051-*)
-		os=-elf
-		;;
-	hexagon-*)
-		os=-elf
-		;;
-	tic54x-*)
-		os=-coff
-		;;
-	tic55x-*)
-		os=-coff
-		;;
-	tic6x-*)
-		os=-coff
-		;;
-	# This must come before the *-dec entry.
-	pdp10-*)
-		os=-tops20
-		;;
-	pdp11-*)
-		os=-none
-		;;
-	*-dec | vax-*)
-		os=-ultrix4.2
-		;;
-	m68*-apollo)
-		os=-domain
-		;;
-	i386-sun)
-		os=-sunos4.0.2
-		;;
-	m68000-sun)
-		os=-sunos3
-		;;
-	m68*-cisco)
-		os=-aout
-		;;
-	mep-*)
-		os=-elf
-		;;
-	mips*-cisco)
-		os=-elf
-		;;
-	mips*-*)
-		os=-elf
-		;;
-	or32-*)
-		os=-coff
-		;;
-	*-tti)	# must be before sparc entry or we get the wrong os.
-		os=-sysv3
-		;;
-	sparc-* | *-sun)
-		os=-sunos4.1.1
-		;;
-	*-be)
-		os=-beos
-		;;
-	*-haiku)
-		os=-haiku
-		;;
-	*-ibm)
-		os=-aix
-		;;
-	*-knuth)
-		os=-mmixware
-		;;
-	*-wec)
-		os=-proelf
-		;;
-	*-winbond)
-		os=-proelf
-		;;
-	*-oki)
-		os=-proelf
-		;;
-	*-hp)
-		os=-hpux
-		;;
-	*-hitachi)
-		os=-hiux
-		;;
-	i860-* | *-att | *-ncr | *-altos | *-motorola | *-convergent)
-		os=-sysv
-		;;
-	*-cbm)
-		os=-amigaos
-		;;
-	*-dg)
-		os=-dgux
-		;;
-	*-dolphin)
-		os=-sysv3
-		;;
-	m68k-ccur)
-		os=-rtu
-		;;
-	m88k-omron*)
-		os=-luna
-		;;
-	*-next )
-		os=-nextstep
-		;;
-	*-sequent)
-		os=-ptx
-		;;
-	*-crds)
-		os=-unos
-		;;
-	*-ns)
-		os=-genix
-		;;
-	i370-*)
-		os=-mvs
-		;;
-	*-next)
-		os=-nextstep3
-		;;
-	*-gould)
-		os=-sysv
-		;;
-	*-highlevel)
-		os=-bsd
-		;;
-	*-encore)
-		os=-bsd
-		;;
-	*-sgi)
-		os=-irix
-		;;
-	*-siemens)
-		os=-sysv4
-		;;
-	*-masscomp)
-		os=-rtu
-		;;
-	f30[01]-fujitsu | f700-fujitsu)
-		os=-uxpv
-		;;
-	*-rom68k)
-		os=-coff
-		;;
-	*-*bug)
-		os=-coff
-		;;
-	*-apple)
-		os=-macos
-		;;
-	*-atari*)
-		os=-mint
-		;;
-	*)
-		os=-none
-		;;
-esac
-fi
-
-# Here we handle the case where we know the os, and the CPU type, but not the
-# manufacturer.  We pick the logical manufacturer.
-vendor=unknown
-case $basic_machine in
-	*-unknown)
-		case $os in
-			-riscix*)
-				vendor=acorn
-				;;
-			-sunos*)
-				vendor=sun
-				;;
-			-cnk*|-aix*)
-				vendor=ibm
-				;;
-			-beos*)
-				vendor=be
-				;;
-			-hpux*)
-				vendor=hp
-				;;
-			-mpeix*)
-				vendor=hp
-				;;
-			-hiux*)
-				vendor=hitachi
-				;;
-			-unos*)
-				vendor=crds
-				;;
-			-dgux*)
-				vendor=dg
-				;;
-			-luna*)
-				vendor=omron
-				;;
-			-genix*)
-				vendor=ns
-				;;
-			-mvs* | -opened*)
-				vendor=ibm
-				;;
-			-os400*)
-				vendor=ibm
-				;;
-			-ptx*)
-				vendor=sequent
-				;;
-			-tpf*)
-				vendor=ibm
-				;;
-			-vxsim* | -vxworks* | -windiss*)
-				vendor=wrs
-				;;
-			-aux*)
-				vendor=apple
-				;;
-			-hms*)
-				vendor=hitachi
-				;;
-			-mpw* | -macos*)
-				vendor=apple
-				;;
-			-*mint | -mint[0-9]* | -*MiNT | -MiNT[0-9]*)
-				vendor=atari
-				;;
-			-vos*)
-				vendor=stratus
-				;;
-		esac
-		basic_machine=`echo $basic_machine | sed "s/unknown/$vendor/"`
-		;;
-esac
-
-echo $basic_machine$os
-exit
-
-# Local variables:
-# eval: (add-hook 'write-file-hooks 'time-stamp)
-# time-stamp-start: "timestamp='"
-# time-stamp-format: "%:y-%02m-%02d"
-# time-stamp-end: "'"
-# End:
diff -Nuar groff-1.22.3.old/src/libs/gnulib/build-aux/depcomp groff-1.22.3/src/libs/gnulib/build-aux/depcomp
--- groff-1.22.3.old/src/libs/gnulib/build-aux/depcomp	2014-11-04 10:38:35.646518734 +0200
+++ groff-1.22.3/src/libs/gnulib/build-aux/depcomp	1970-01-01 02:00:00.000000000 +0200
@@ -1,756 +0,0 @@
-#! /bin/sh
-# depcomp - compile a program generating dependencies as side-effects
-
-scriptversion=2013-05-30.07; # UTC
-
-# Copyright (C) 1999-2013 Free Software Foundation, Inc.
-
-# This program is free software; you can redistribute it and/or modify
-# it under the terms of the GNU General Public License as published by
-# the Free Software Foundation; either version 2, or (at your option)
-# any later version.
-
-# This program is distributed in the hope that it will be useful,
-# but WITHOUT ANY WARRANTY; without even the implied warranty of
-# MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
-# GNU General Public License for more details.
-
-# You should have received a copy of the GNU General Public License
-# along with this program.  If not, see <http://www.gnu.org/licenses/>.
-
-# As a special exception to the GNU General Public License, if you
-# distribute this file as part of a program that contains a
-# configuration script generated by Autoconf, you may include it under
-# the same distribution terms that you use for the rest of that program.
-
-# Originally written by Alexandre Oliva <oliva@dcc.unicamp.br>.
-
-case $1 in
-  '')
-    echo "$0: No command.  Try '$0 --help' for more information." 1>&2
-    exit 1;
-    ;;
-  -h | --h*)
-    cat <<\EOF
-Usage: depcomp [--help] [--version] PROGRAM [ARGS]
-
-Run PROGRAMS ARGS to compile a file, generating dependencies
-as side-effects.
-
-Environment variables:
-  depmode     Dependency tracking mode.
-  source      Source file read by 'PROGRAMS ARGS'.
-  object      Object file output by 'PROGRAMS ARGS'.
-  DEPDIR      directory where to store dependencies.
-  depfile     Dependency file to output.
-  tmpdepfile  Temporary file to use when outputting dependencies.
-  libtool     Whether libtool is used (yes/no).
-
-Report bugs to <bug-automake@gnu.org>.
-EOF
-    exit $?
-    ;;
-  -v | --v*)
-    echo "depcomp $scriptversion"
-    exit $?
-    ;;
-esac
-
-# Get the directory component of the given path, and save it in the
-# global variables '$dir'.  Note that this directory component will
-# be either empty or ending with a '/' character.  This is deliberate.
-set_dir_from ()
-{
-  case $1 in
-    */*) dir=`echo "$1" | sed -e 's|/[^/]*$|/|'`;;
-      *) dir=;;
-  esac
-}
-
-# Get the suffix-stripped basename of the given path, and save it the
-# global variable '$base'.
-set_base_from ()
-{
-  base=`echo "$1" | sed -e 's|^.*/||' -e 's/\.[^.]*$//'`
-}
-
-# If no dependency file was actually created by the compiler invocation,
-# we still have to create a dummy depfile, to avoid errors with the
-# Makefile "include basename.Plo" scheme.
-make_dummy_depfile ()
-{
-  echo "#dummy" > "$depfile"
-}
-
-# Factor out some common post-processing of the generated depfile.
-# Requires the auxiliary global variable '$tmpdepfile' to be set.
-aix_post_process_depfile ()
-{
-  # If the compiler actually managed to produce a dependency file,
-  # post-process it.
-  if test -f "$tmpdepfile"; then
-    # Each line is of the form 'foo.o: dependency.h'.
-    # Do two passes, one to just change these to
-    #   $object: dependency.h
-    # and one to simply output
-    #   dependency.h:
-    # which is needed to avoid the deleted-header problem.
-    { sed -e "s,^.*\.[$lower]*:,$object:," < "$tmpdepfile"
-      sed -e "s,^.*\.[$lower]*:[$tab ]*,," -e 's,$,:,' < "$tmpdepfile"
-    } > "$depfile"
-    rm -f "$tmpdepfile"
-  else
-    make_dummy_depfile
-  fi
-}
-
-# A tabulation character.
-tab='	'
-# A newline character.
-nl='
-'
-# Character ranges might be problematic outside the C locale.
-# These definitions help.
-upper=ABCDEFGHIJKLMNOPQRSTUVWXYZ
-lower=abcdefghijklmnopqrstuvwxyz
-digits=0123456789
-alpha=${upper}${lower}
-
-if test -z "$depmode" || test -z "$source" || test -z "$object"; then
-  echo "depcomp: Variables source, object and depmode must be set" 1>&2
-  exit 1
-fi
-
-# Dependencies for sub/bar.o or sub/bar.obj go into sub/.deps/bar.Po.
-depfile=${depfile-`echo "$object" |
-  sed 's|[^\\/]*$|'${DEPDIR-.deps}'/&|;s|\.\([^.]*\)$|.P\1|;s|Pobj$|Po|'`}
-tmpdepfile=${tmpdepfile-`echo "$depfile" | sed 's/\.\([^.]*\)$/.T\1/'`}
-
-rm -f "$tmpdepfile"
-
-# Avoid interferences from the environment.
-gccflag= dashmflag=
-
-# Some modes work just like other modes, but use different flags.  We
-# parameterize here, but still list the modes in the big case below,
-# to make depend.m4 easier to write.  Note that we *cannot* use a case
-# here, because this file can only contain one case statement.
-if test "$depmode" = hp; then
-  # HP compiler uses -M and no extra arg.
-  gccflag=-M
-  depmode=gcc
-fi
-
-if test "$depmode" = dashXmstdout; then
-  # This is just like dashmstdout with a different argument.
-  dashmflag=-xM
-  depmode=dashmstdout
-fi
-
-cygpath_u="cygpath -u -f -"
-if test "$depmode" = msvcmsys; then
-  # This is just like msvisualcpp but w/o cygpath translation.
-  # Just convert the backslash-escaped backslashes to single forward
-  # slashes to satisfy depend.m4
-  cygpath_u='sed s,\\\\,/,g'
-  depmode=msvisualcpp
-fi
-
-if test "$depmode" = msvc7msys; then
-  # This is just like msvc7 but w/o cygpath translation.
-  # Just convert the backslash-escaped backslashes to single forward
-  # slashes to satisfy depend.m4
-  cygpath_u='sed s,\\\\,/,g'
-  depmode=msvc7
-fi
-
-if test "$depmode" = xlc; then
-  # IBM C/C++ Compilers xlc/xlC can output gcc-like dependency information.
-  gccflag=-qmakedep=gcc,-MF
-  depmode=gcc
-fi
-
-case "$depmode" in
-gcc3)
-## gcc 3 implements dependency tracking that does exactly what
-## we want.  Yay!  Note: for some reason libtool 1.4 doesn't like
-## it if -MD -MP comes after the -MF stuff.  Hmm.
-## Unfortunately, FreeBSD c89 acceptance of flags depends upon
-## the command line argument order; so add the flags where they
-## appear in depend2.am.  Note that the slowdown incurred here
-## affects only configure: in makefiles, %FASTDEP% shortcuts this.
-  for arg
-  do
-    case $arg in
-    -c) set fnord "$@" -MT "$object" -MD -MP -MF "$tmpdepfile" "$arg" ;;
-    *)  set fnord "$@" "$arg" ;;
-    esac
-    shift # fnord
-    shift # $arg
-  done
-  "$@"
-  stat=$?
-  if test $stat -ne 0; then
-    rm -f "$tmpdepfile"
-    exit $stat
-  fi
-  mv "$tmpdepfile" "$depfile"
-  ;;
-
-gcc)
-## Note that this doesn't just cater to obsosete pre-3.x GCC compilers.
-## but also to in-use compilers like IMB xlc/xlC and the HP C compiler.
-## (see the conditional assignment to $gccflag above).
-## There are various ways to get dependency output from gcc.  Here's
-## why we pick this rather obscure method:
-## - Don't want to use -MD because we'd like the dependencies to end
-##   up in a subdir.  Having to rename by hand is ugly.
-##   (We might end up doing this anyway to support other compilers.)
-## - The DEPENDENCIES_OUTPUT environment variable makes gcc act like
-##   -MM, not -M (despite what the docs say).  Also, it might not be
-##   supported by the other compilers which use the 'gcc' depmode.
-## - Using -M directly means running the compiler twice (even worse
-##   than renaming).
-  if test -z "$gccflag"; then
-    gccflag=-MD,
-  fi
-  "$@" -Wp,"$gccflag$tmpdepfile"
-  stat=$?
-  if test $stat -ne 0; then
-    rm -f "$tmpdepfile"
-    exit $stat
-  fi
-  rm -f "$depfile"
-  echo "$object : \\" > "$depfile"
-  # The second -e expression handles DOS-style file names with drive
-  # letters.
-  sed -e 's/^[^:]*: / /' \
-      -e 's/^['$alpha']:\/[^:]*: / /' < "$tmpdepfile" >> "$depfile"
-## This next piece of magic avoids the "deleted header file" problem.
-## The problem is that when a header file which appears in a .P file
-## is deleted, the dependency causes make to die (because there is
-## typically no way to rebuild the header).  We avoid this by adding
-## dummy dependencies for each header file.  Too bad gcc doesn't do
-## this for us directly.
-## Some versions of gcc put a space before the ':'.  On the theory
-## that the space means something, we add a space to the output as
-## well.  hp depmode also adds that space, but also prefixes the VPATH
-## to the object.  Take care to not repeat it in the output.
-## Some versions of the HPUX 10.20 sed can't process this invocation
-## correctly.  Breaking it into two sed invocations is a workaround.
-  tr ' ' "$nl" < "$tmpdepfile" \
-    | sed -e 's/^\\$//' -e '/^$/d' -e "s|.*$object$||" -e '/:$/d' \
-    | sed -e 's/$/ :/' >> "$depfile"
-  rm -f "$tmpdepfile"
-  ;;
-
-hp)
-  # This case exists only to let depend.m4 do its work.  It works by
-  # looking at the text of this script.  This case will never be run,
-  # since it is checked for above.
-  exit 1
-  ;;
-
-xlc)
-  # This case exists only to let depend.m4 do its work.  It works by
-  # looking at the text of this script.  This case will never be run,
-  # since it is checked for above.
-  exit 1
-  ;;
-
-aix)
-  # The C for AIX Compiler uses -M and outputs the dependencies
-  # in a .u file.  In older versions, this file always lives in the
-  # current directory.  Also, the AIX compiler puts '$object:' at the
-  # start of each line; $object doesn't have directory information.
-  # Version 6 uses the directory in both cases.
-  set_dir_from "$object"
-  set_base_from "$object"
-  if test "$libtool" = yes; then
-    tmpdepfile1=$dir$base.u
-    tmpdepfile2=$base.u
-    tmpdepfile3=$dir.libs/$base.u
-    "$@" -Wc,-M
-  else
-    tmpdepfile1=$dir$base.u
-    tmpdepfile2=$dir$base.u
-    tmpdepfile3=$dir$base.u
-    "$@" -M
-  fi
-  stat=$?
-  if test $stat -ne 0; then
-    rm -f "$tmpdepfile1" "$tmpdepfile2" "$tmpdepfile3"
-    exit $stat
-  fi
-
-  for tmpdepfile in "$tmpdepfile1" "$tmpdepfile2" "$tmpdepfile3"
-  do
-    test -f "$tmpdepfile" && break
-  done
-  aix_post_process_depfile
-  ;;
-
-tcc)
-  # tcc (Tiny C Compiler) understand '-MD -MF file' since version 0.9.26
-  # FIXME: That version still under development at the moment of writing.
-  #        Make that this statement remains true also for stable, released
-  #        versions.
-  # It will wrap lines (doesn't matter whether long or short) with a
-  # trailing '\', as in:
-  #
-  #   foo.o : \
-  #    foo.c \
-  #    foo.h \
-  #
-  # It will put a trailing '\' even on the last line, and will use leading
-  # spaces rather than leading tabs (at least since its commit 0394caf7
-  # "Emit spaces for -MD").
-  "$@" -MD -MF "$tmpdepfile"
-  stat=$?
-  if test $stat -ne 0; then
-    rm -f "$tmpdepfile"
-    exit $stat
-  fi
-  rm -f "$depfile"
-  # Each non-empty line is of the form 'foo.o : \' or ' dep.h \'.
-  # We have to change lines of the first kind to '$object: \'.
-  sed -e "s|.*:|$object :|" < "$tmpdepfile" > "$depfile"
-  # And for each line of the second kind, we have to emit a 'dep.h:'
-  # dummy dependency, to avoid the deleted-header problem.
-  sed -n -e 's|^  *\(.*\) *\\$|\1:|p' < "$tmpdepfile" >> "$depfile"
-  rm -f "$tmpdepfile"
-  ;;
-
-## The order of this option in the case statement is important, since the
-## shell code in configure will try each of these formats in the order
-## listed in this file.  A plain '-MD' option would be understood by many
-## compilers, so we must ensure this comes after the gcc and icc options.
-pgcc)
-  # Portland's C compiler understands '-MD'.
-  # Will always output deps to 'file.d' where file is the root name of the
-  # source file under compilation, even if file resides in a subdirectory.
-  # The object file name does not affect the name of the '.d' file.
-  # pgcc 10.2 will output
-  #    foo.o: sub/foo.c sub/foo.h
-  # and will wrap long lines using '\' :
-  #    foo.o: sub/foo.c ... \
-  #     sub/foo.h ... \
-  #     ...
-  set_dir_from "$object"
-  # Use the source, not the object, to determine the base name, since
-  # that's sadly what pgcc will do too.
-  set_base_from "$source"
-  tmpdepfile=$base.d
-
-  # For projects that build the same source file twice into different object
-  # files, the pgcc approach of using the *source* file root name can cause
-  # problems in parallel builds.  Use a locking strategy to avoid stomping on
-  # the same $tmpdepfile.
-  lockdir=$base.d-lock
-  trap "
-    echo '$0: caught signal, cleaning up...' >&2
-    rmdir '$lockdir'
-    exit 1
-  " 1 2 13 15
-  numtries=100
-  i=$numtries
-  while test $i -gt 0; do
-    # mkdir is a portable test-and-set.
-    if mkdir "$lockdir" 2>/dev/null; then
-      # This process acquired the lock.
-      "$@" -MD
-      stat=$?
-      # Release the lock.
-      rmdir "$lockdir"
-      break
-    else
-      # If the lock is being held by a different process, wait
-      # until the winning process is done or we timeout.
-      while test -d "$lockdir" && test $i -gt 0; do
-        sleep 1
-        i=`expr $i - 1`
-      done
-    fi
-    i=`expr $i - 1`
-  done
-  trap - 1 2 13 15
-  if test $i -le 0; then
-    echo "$0: failed to acquire lock after $numtries attempts" >&2
-    echo "$0: check lockdir '$lockdir'" >&2
-    exit 1
-  fi
-
-  if test $stat -ne 0; then
-    rm -f "$tmpdepfile"
-    exit $stat
-  fi
-  rm -f "$depfile"
-  # Each line is of the form `foo.o: dependent.h',
-  # or `foo.o: dep1.h dep2.h \', or ` dep3.h dep4.h \'.
-  # Do two passes, one to just change these to
-  # `$object: dependent.h' and one to simply `dependent.h:'.
-  sed "s,^[^:]*:,$object :," < "$tmpdepfile" > "$depfile"
-  # Some versions of the HPUX 10.20 sed can't process this invocation
-  # correctly.  Breaking it into two sed invocations is a workaround.
-  sed 's,^[^:]*: \(.*\)$,\1,;s/^\\$//;/^$/d;/:$/d' < "$tmpdepfile" \
-    | sed -e 's/$/ :/' >> "$depfile"
-  rm -f "$tmpdepfile"
-  ;;
-
-hp2)
-  # The "hp" stanza above does not work with aCC (C++) and HP's ia64
-  # compilers, which have integrated preprocessors.  The correct option
-  # to use with these is +Maked; it writes dependencies to a file named
-  # 'foo.d', which lands next to the object file, wherever that
-  # happens to be.
-  # Much of this is similar to the tru64 case; see comments there.
-  set_dir_from  "$object"
-  set_base_from "$object"
-  if test "$libtool" = yes; then
-    tmpdepfile1=$dir$base.d
-    tmpdepfile2=$dir.libs/$base.d
-    "$@" -Wc,+Maked
-  else
-    tmpdepfile1=$dir$base.d
-    tmpdepfile2=$dir$base.d
-    "$@" +Maked
-  fi
-  stat=$?
-  if test $stat -ne 0; then
-     rm -f "$tmpdepfile1" "$tmpdepfile2"
-     exit $stat
-  fi
-
-  for tmpdepfile in "$tmpdepfile1" "$tmpdepfile2"
-  do
-    test -f "$tmpdepfile" && break
-  done
-  if test -f "$tmpdepfile"; then
-    sed -e "s,^.*\.[$lower]*:,$object:," "$tmpdepfile" > "$depfile"
-    # Add 'dependent.h:' lines.
-    sed -ne '2,${
-               s/^ *//
-               s/ \\*$//
-               s/$/:/
-               p
-             }' "$tmpdepfile" >> "$depfile"
-  else
-    make_dummy_depfile
-  fi
-  rm -f "$tmpdepfile" "$tmpdepfile2"
-  ;;
-
-tru64)
-  # The Tru64 compiler uses -MD to generate dependencies as a side
-  # effect.  'cc -MD -o foo.o ...' puts the dependencies into 'foo.o.d'.
-  # At least on Alpha/Redhat 6.1, Compaq CCC V6.2-504 seems to put
-  # dependencies in 'foo.d' instead, so we check for that too.
-  # Subdirectories are respected.
-  set_dir_from  "$object"
-  set_base_from "$object"
-
-  if test "$libtool" = yes; then
-    # Libtool generates 2 separate objects for the 2 libraries.  These
-    # two compilations output dependencies in $dir.libs/$base.o.d and
-    # in $dir$base.o.d.  We have to check for both files, because
-    # one of the two compilations can be disabled.  We should prefer
-    # $dir$base.o.d over $dir.libs/$base.o.d because the latter is
-    # automatically cleaned when .libs/ is deleted, while ignoring
-    # the former would cause a distcleancheck panic.
-    tmpdepfile1=$dir$base.o.d          # libtool 1.5
-    tmpdepfile2=$dir.libs/$base.o.d    # Likewise.
-    tmpdepfile3=$dir.libs/$base.d      # Compaq CCC V6.2-504
-    "$@" -Wc,-MD
-  else
-    tmpdepfile1=$dir$base.d
-    tmpdepfile2=$dir$base.d
-    tmpdepfile3=$dir$base.d
-    "$@" -MD
-  fi
-
-  stat=$?
-  if test $stat -ne 0; then
-    rm -f "$tmpdepfile1" "$tmpdepfile2" "$tmpdepfile3"
-    exit $stat
-  fi
-
-  for tmpdepfile in "$tmpdepfile1" "$tmpdepfile2" "$tmpdepfile3"
-  do
-    test -f "$tmpdepfile" && break
-  done
-  # Same post-processing that is required for AIX mode.
-  aix_post_process_depfile
-  ;;
-
-msvc7)
-  if test "$libtool" = yes; then
-    showIncludes=-Wc,-showIncludes
-  else
-    showIncludes=-showIncludes
-  fi
-  "$@" $showIncludes > "$tmpdepfile"
-  stat=$?
-  grep -v '^Note: including file: ' "$tmpdepfile"
-  if test $stat -ne 0; then
-    rm -f "$tmpdepfile"
-    exit $stat
-  fi
-  rm -f "$depfile"
-  echo "$object : \\" > "$depfile"
-  # The first sed program below extracts the file names and escapes
-  # backslashes for cygpath.  The second sed program outputs the file
-  # name when reading, but also accumulates all include files in the
-  # hold buffer in order to output them again at the end.  This only
-  # works with sed implementations that can handle large buffers.
-  sed < "$tmpdepfile" -n '
-/^Note: including file:  *\(.*\)/ {
-  s//\1/
-  s/\\/\\\\/g
-  p
-}' | $cygpath_u | sort -u | sed -n '
-s/ /\\ /g
-s/\(.*\)/'"$tab"'\1 \\/p
-s/.\(.*\) \\/\1:/
-H
-$ {
-  s/.*/'"$tab"'/
-  G
-  p
-}' >> "$depfile"
-  echo >> "$depfile" # make sure the fragment doesn't end with a backslash
-  rm -f "$tmpdepfile"
-  ;;
-
-msvc7msys)
-  # This case exists only to let depend.m4 do its work.  It works by
-  # looking at the text of this script.  This case will never be run,
-  # since it is checked for above.
-  exit 1
-  ;;
-
-#nosideeffect)
-  # This comment above is used by automake to tell side-effect
-  # dependency tracking mechanisms from slower ones.
-
-dashmstdout)
-  # Important note: in order to support this mode, a compiler *must*
-  # always write the preprocessed file to stdout, regardless of -o.
-  "$@" || exit $?
-
-  # Remove the call to Libtool.
-  if test "$libtool" = yes; then
-    while test "X$1" != 'X--mode=compile'; do
-      shift
-    done
-    shift
-  fi
-
-  # Remove '-o $object'.
-  IFS=" "
-  for arg
-  do
-    case $arg in
-    -o)
-      shift
-      ;;
-    $object)
-      shift
-      ;;
-    *)
-      set fnord "$@" "$arg"
-      shift # fnord
-      shift # $arg
-      ;;
-    esac
-  done
-
-  test -z "$dashmflag" && dashmflag=-M
-  # Require at least two characters before searching for ':'
-  # in the target name.  This is to cope with DOS-style filenames:
-  # a dependency such as 'c:/foo/bar' could be seen as target 'c' otherwise.
-  "$@" $dashmflag |
-    sed "s|^[$tab ]*[^:$tab ][^:][^:]*:[$tab ]*|$object: |" > "$tmpdepfile"
-  rm -f "$depfile"
-  cat < "$tmpdepfile" > "$depfile"
-  # Some versions of the HPUX 10.20 sed can't process this sed invocation
-  # correctly.  Breaking it into two sed invocations is a workaround.
-  tr ' ' "$nl" < "$tmpdepfile" \
-    | sed -e 's/^\\$//' -e '/^$/d' -e '/:$/d' \
-    | sed -e 's/$/ :/' >> "$depfile"
-  rm -f "$tmpdepfile"
-  ;;
-
-dashXmstdout)
-  # This case only exists to satisfy depend.m4.  It is never actually
-  # run, as this mode is specially recognized in the preamble.
-  exit 1
-  ;;
-
-makedepend)
-  "$@" || exit $?
-  # Remove any Libtool call
-  if test "$libtool" = yes; then
-    while test "X$1" != 'X--mode=compile'; do
-      shift
-    done
-    shift
-  fi
-  # X makedepend
-  shift
-  cleared=no eat=no
-  for arg
-  do
-    case $cleared in
-    no)
-      set ""; shift
-      cleared=yes ;;
-    esac
-    if test $eat = yes; then
-      eat=no
-      continue
-    fi
-    case "$arg" in
-    -D*|-I*)
-      set fnord "$@" "$arg"; shift ;;
-    # Strip any option that makedepend may not understand.  Remove
-    # the object too, otherwise makedepend will parse it as a source file.
-    -arch)
-      eat=yes ;;
-    -*|$object)
-      ;;
-    *)
-      set fnord "$@" "$arg"; shift ;;
-    esac
-  done
-  obj_suffix=`echo "$object" | sed 's/^.*\././'`
-  touch "$tmpdepfile"
-  ${MAKEDEPEND-makedepend} -o"$obj_suffix" -f"$tmpdepfile" "$@"
-  rm -f "$depfile"
-  # makedepend may prepend the VPATH from the source file name to the object.
-  # No need to regex-escape $object, excess matching of '.' is harmless.
-  sed "s|^.*\($object *:\)|\1|" "$tmpdepfile" > "$depfile"
-  # Some versions of the HPUX 10.20 sed can't process the last invocation
-  # correctly.  Breaking it into two sed invocations is a workaround.
-  sed '1,2d' "$tmpdepfile" \
-    | tr ' ' "$nl" \
-    | sed -e 's/^\\$//' -e '/^$/d' -e '/:$/d' \
-    | sed -e 's/$/ :/' >> "$depfile"
-  rm -f "$tmpdepfile" "$tmpdepfile".bak
-  ;;
-
-cpp)
-  # Important note: in order to support this mode, a compiler *must*
-  # always write the preprocessed file to stdout.
-  "$@" || exit $?
-
-  # Remove the call to Libtool.
-  if test "$libtool" = yes; then
-    while test "X$1" != 'X--mode=compile'; do
-      shift
-    done
-    shift
-  fi
-
-  # Remove '-o $object'.
-  IFS=" "
-  for arg
-  do
-    case $arg in
-    -o)
-      shift
-      ;;
-    $object)
-      shift
-      ;;
-    *)
-      set fnord "$@" "$arg"
-      shift # fnord
-      shift # $arg
-      ;;
-    esac
-  done
-
-  "$@" -E \
-    | sed -n -e '/^# [0-9][0-9]* "\([^"]*\)".*/ s:: \1 \\:p' \
-             -e '/^#line [0-9][0-9]* "\([^"]*\)".*/ s:: \1 \\:p' \
-    | sed '$ s: \\$::' > "$tmpdepfile"
-  rm -f "$depfile"
-  echo "$object : \\" > "$depfile"
-  cat < "$tmpdepfile" >> "$depfile"
-  sed < "$tmpdepfile" '/^$/d;s/^ //;s/ \\$//;s/$/ :/' >> "$depfile"
-  rm -f "$tmpdepfile"
-  ;;
-
-msvisualcpp)
-  # Important note: in order to support this mode, a compiler *must*
-  # always write the preprocessed file to stdout.
-  "$@" || exit $?
-
-  # Remove the call to Libtool.
-  if test "$libtool" = yes; then
-    while test "X$1" != 'X--mode=compile'; do
-      shift
-    done
-    shift
-  fi
-
-  IFS=" "
-  for arg
-  do
-    case "$arg" in
-    -o)
-      shift
-      ;;
-    $object)
-      shift
-      ;;
-    "-Gm"|"/Gm"|"-Gi"|"/Gi"|"-ZI"|"/ZI")
-        set fnord "$@"
-        shift
-        shift
-        ;;
-    *)
-        set fnord "$@" "$arg"
-        shift
-        shift
-        ;;
-    esac
-  done
-  "$@" -E 2>/dev/null |
-  sed -n '/^#line [0-9][0-9]* "\([^"]*\)"/ s::\1:p' | $cygpath_u | sort -u > "$tmpdepfile"
-  rm -f "$depfile"
-  echo "$object : \\" > "$depfile"
-  sed < "$tmpdepfile" -n -e 's% %\\ %g' -e '/^\(.*\)$/ s::'"$tab"'\1 \\:p' >> "$depfile"
-  echo "$tab" >> "$depfile"
-  sed < "$tmpdepfile" -n -e 's% %\\ %g' -e '/^\(.*\)$/ s::\1\::p' >> "$depfile"
-  rm -f "$tmpdepfile"
-  ;;
-
-msvcmsys)
-  # This case exists only to let depend.m4 do its work.  It works by
-  # looking at the text of this script.  This case will never be run,
-  # since it is checked for above.
-  exit 1
-  ;;
-
-none)
-  exec "$@"
-  ;;
-
-*)
-  echo "Unknown depmode $depmode" 1>&2
-  exit 1
-  ;;
-esac
-
-exit 0
-
-# Local Variables:
-# mode: shell-script
-# sh-indentation: 2
-# eval: (add-hook 'write-file-hooks 'time-stamp)
-# time-stamp-start: "scriptversion="
-# time-stamp-format: "%:y-%02m-%02d.%02H"
-# time-stamp-time-zone: "UTC"
-# time-stamp-end: "; # UTC"
-# End:
diff -Nuar groff-1.22.3.old/src/libs/gnulib/build-aux/install-sh groff-1.22.3/src/libs/gnulib/build-aux/install-sh
--- groff-1.22.3.old/src/libs/gnulib/build-aux/install-sh	2014-11-04 10:38:35.646518734 +0200
+++ groff-1.22.3/src/libs/gnulib/build-aux/install-sh	1970-01-01 02:00:00.000000000 +0200
@@ -1,501 +0,0 @@
-#!/bin/sh
-# install - install a program, script, or datafile
-
-scriptversion=2013-12-25.23; # UTC
-
-# This originates from X11R5 (mit/util/scripts/install.sh), which was
-# later released in X11R6 (xc/config/util/install.sh) with the
-# following copyright and license.
-#
-# Copyright (C) 1994 X Consortium
-#
-# Permission is hereby granted, free of charge, to any person obtaining a copy
-# of this software and associated documentation files (the "Software"), to
-# deal in the Software without restriction, including without limitation the
-# rights to use, copy, modify, merge, publish, distribute, sublicense, and/or
-# sell copies of the Software, and to permit persons to whom the Software is
-# furnished to do so, subject to the following conditions:
-#
-# The above copyright notice and this permission notice shall be included in
-# all copies or substantial portions of the Software.
-#
-# THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR
-# IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,
-# FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT.  IN NO EVENT SHALL THE
-# X CONSORTIUM BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER LIABILITY, WHETHER IN
-# AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, OUT OF OR IN CONNEC-
-# TION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE.
-#
-# Except as contained in this notice, the name of the X Consortium shall not
-# be used in advertising or otherwise to promote the sale, use or other deal-
-# ings in this Software without prior written authorization from the X Consor-
-# tium.
-#
-#
-# FSF changes to this file are in the public domain.
-#
-# Calling this script install-sh is preferred over install.sh, to prevent
-# 'make' implicit rules from creating a file called install from it
-# when there is no Makefile.
-#
-# This script is compatible with the BSD install script, but was written
-# from scratch.
-
-tab='	'
-nl='
-'
-IFS=" $tab$nl"
-
-# Set DOITPROG to "echo" to test this script.
-
-doit=${DOITPROG-}
-doit_exec=${doit:-exec}
-
-# Put in absolute file names if you don't have them in your path;
-# or use environment vars.
-
-chgrpprog=${CHGRPPROG-chgrp}
-chmodprog=${CHMODPROG-chmod}
-chownprog=${CHOWNPROG-chown}
-cmpprog=${CMPPROG-cmp}
-cpprog=${CPPROG-cp}
-mkdirprog=${MKDIRPROG-mkdir}
-mvprog=${MVPROG-mv}
-rmprog=${RMPROG-rm}
-stripprog=${STRIPPROG-strip}
-
-posix_mkdir=
-
-# Desired mode of installed file.
-mode=0755
-
-chgrpcmd=
-chmodcmd=$chmodprog
-chowncmd=
-mvcmd=$mvprog
-rmcmd="$rmprog -f"
-stripcmd=
-
-src=
-dst=
-dir_arg=
-dst_arg=
-
-copy_on_change=false
-is_target_a_directory=possibly
-
-usage="\
-Usage: $0 [OPTION]... [-T] SRCFILE DSTFILE
-   or: $0 [OPTION]... SRCFILES... DIRECTORY
-   or: $0 [OPTION]... -t DIRECTORY SRCFILES...
-   or: $0 [OPTION]... -d DIRECTORIES...
-
-In the 1st form, copy SRCFILE to DSTFILE.
-In the 2nd and 3rd, copy all SRCFILES to DIRECTORY.
-In the 4th, create DIRECTORIES.
-
-Options:
-     --help     display this help and exit.
-     --version  display version info and exit.
-
-  -c            (ignored)
-  -C            install only if different (preserve the last data modification time)
-  -d            create directories instead of installing files.
-  -g GROUP      $chgrpprog installed files to GROUP.
-  -m MODE       $chmodprog installed files to MODE.
-  -o USER       $chownprog installed files to USER.
-  -s            $stripprog installed files.
-  -t DIRECTORY  install into DIRECTORY.
-  -T            report an error if DSTFILE is a directory.
-
-Environment variables override the default commands:
-  CHGRPPROG CHMODPROG CHOWNPROG CMPPROG CPPROG MKDIRPROG MVPROG
-  RMPROG STRIPPROG
-"
-
-while test $# -ne 0; do
-  case $1 in
-    -c) ;;
-
-    -C) copy_on_change=true;;
-
-    -d) dir_arg=true;;
-
-    -g) chgrpcmd="$chgrpprog $2"
-        shift;;
-
-    --help) echo "$usage"; exit $?;;
-
-    -m) mode=$2
-        case $mode in
-          *' '* | *"$tab"* | *"$nl"* | *'*'* | *'?'* | *'['*)
-            echo "$0: invalid mode: $mode" >&2
-            exit 1;;
-        esac
-        shift;;
-
-    -o) chowncmd="$chownprog $2"
-        shift;;
-
-    -s) stripcmd=$stripprog;;
-
-    -t)
-        is_target_a_directory=always
-        dst_arg=$2
-        # Protect names problematic for 'test' and other utilities.
-        case $dst_arg in
-          -* | [=\(\)!]) dst_arg=./$dst_arg;;
-        esac
-        shift;;
-
-    -T) is_target_a_directory=never;;
-
-    --version) echo "$0 $scriptversion"; exit $?;;
-
-    --) shift
-        break;;
-
-    -*) echo "$0: invalid option: $1" >&2
-        exit 1;;
-
-    *)  break;;
-  esac
-  shift
-done
-
-# We allow the use of options -d and -T together, by making -d
-# take the precedence; this is for compatibility with GNU install.
-
-if test -n "$dir_arg"; then
-  if test -n "$dst_arg"; then
-    echo "$0: target directory not allowed when installing a directory." >&2
-    exit 1
-  fi
-fi
-
-if test $# -ne 0 && test -z "$dir_arg$dst_arg"; then
-  # When -d is used, all remaining arguments are directories to create.
-  # When -t is used, the destination is already specified.
-  # Otherwise, the last argument is the destination.  Remove it from $@.
-  for arg
-  do
-    if test -n "$dst_arg"; then
-      # $@ is not empty: it contains at least $arg.
-      set fnord "$@" "$dst_arg"
-      shift # fnord
-    fi
-    shift # arg
-    dst_arg=$arg
-    # Protect names problematic for 'test' and other utilities.
-    case $dst_arg in
-      -* | [=\(\)!]) dst_arg=./$dst_arg;;
-    esac
-  done
-fi
-
-if test $# -eq 0; then
-  if test -z "$dir_arg"; then
-    echo "$0: no input file specified." >&2
-    exit 1
-  fi
-  # It's OK to call 'install-sh -d' without argument.
-  # This can happen when creating conditional directories.
-  exit 0
-fi
-
-if test -z "$dir_arg"; then
-  if test $# -gt 1 || test "$is_target_a_directory" = always; then
-    if test ! -d "$dst_arg"; then
-      echo "$0: $dst_arg: Is not a directory." >&2
-      exit 1
-    fi
-  fi
-fi
-
-if test -z "$dir_arg"; then
-  do_exit='(exit $ret); exit $ret'
-  trap "ret=129; $do_exit" 1
-  trap "ret=130; $do_exit" 2
-  trap "ret=141; $do_exit" 13
-  trap "ret=143; $do_exit" 15
-
-  # Set umask so as not to create temps with too-generous modes.
-  # However, 'strip' requires both read and write access to temps.
-  case $mode in
-    # Optimize common cases.
-    *644) cp_umask=133;;
-    *755) cp_umask=22;;
-
-    *[0-7])
-      if test -z "$stripcmd"; then
-        u_plus_rw=
-      else
-        u_plus_rw='% 200'
-      fi
-      cp_umask=`expr '(' 777 - $mode % 1000 ')' $u_plus_rw`;;
-    *)
-      if test -z "$stripcmd"; then
-        u_plus_rw=
-      else
-        u_plus_rw=,u+rw
-      fi
-      cp_umask=$mode$u_plus_rw;;
-  esac
-fi
-
-for src
-do
-  # Protect names problematic for 'test' and other utilities.
-  case $src in
-    -* | [=\(\)!]) src=./$src;;
-  esac
-
-  if test -n "$dir_arg"; then
-    dst=$src
-    dstdir=$dst
-    test -d "$dstdir"
-    dstdir_status=$?
-  else
-
-    # Waiting for this to be detected by the "$cpprog $src $dsttmp" command
-    # might cause directories to be created, which would be especially bad
-    # if $src (and thus $dsttmp) contains '*'.
-    if test ! -f "$src" && test ! -d "$src"; then
-      echo "$0: $src does not exist." >&2
-      exit 1
-    fi
-
-    if test -z "$dst_arg"; then
-      echo "$0: no destination specified." >&2
-      exit 1
-    fi
-    dst=$dst_arg
-
-    # If destination is a directory, append the input filename; won't work
-    # if double slashes aren't ignored.
-    if test -d "$dst"; then
-      if test "$is_target_a_directory" = never; then
-        echo "$0: $dst_arg: Is a directory" >&2
-        exit 1
-      fi
-      dstdir=$dst
-      dst=$dstdir/`basename "$src"`
-      dstdir_status=0
-    else
-      dstdir=`dirname "$dst"`
-      test -d "$dstdir"
-      dstdir_status=$?
-    fi
-  fi
-
-  obsolete_mkdir_used=false
-
-  if test $dstdir_status != 0; then
-    case $posix_mkdir in
-      '')
-        # Create intermediate dirs using mode 755 as modified by the umask.
-        # This is like FreeBSD 'install' as of 1997-10-28.
-        umask=`umask`
-        case $stripcmd.$umask in
-          # Optimize common cases.
-          *[2367][2367]) mkdir_umask=$umask;;
-          .*0[02][02] | .[02][02] | .[02]) mkdir_umask=22;;
-
-          *[0-7])
-            mkdir_umask=`expr $umask + 22 \
-              - $umask % 100 % 40 + $umask % 20 \
-              - $umask % 10 % 4 + $umask % 2
-            `;;
-          *) mkdir_umask=$umask,go-w;;
-        esac
-
-        # With -d, create the new directory with the user-specified mode.
-        # Otherwise, rely on $mkdir_umask.
-        if test -n "$dir_arg"; then
-          mkdir_mode=-m$mode
-        else
-          mkdir_mode=
-        fi
-
-        posix_mkdir=false
-        case $umask in
-          *[123567][0-7][0-7])
-            # POSIX mkdir -p sets u+wx bits regardless of umask, which
-            # is incompatible with FreeBSD 'install' when (umask & 300) != 0.
-            ;;
-          *)
-            tmpdir=${TMPDIR-/tmp}/ins$RANDOM-$$
-            trap 'ret=$?; rmdir "$tmpdir/d" "$tmpdir" 2>/dev/null; exit $ret' 0
-
-            if (umask $mkdir_umask &&
-                exec $mkdirprog $mkdir_mode -p -- "$tmpdir/d") >/dev/null 2>&1
-            then
-              if test -z "$dir_arg" || {
-                   # Check for POSIX incompatibilities with -m.
-                   # HP-UX 11.23 and IRIX 6.5 mkdir -m -p sets group- or
-                   # other-writable bit of parent directory when it shouldn't.
-                   # FreeBSD 6.1 mkdir -m -p sets mode of existing directory.
-                   ls_ld_tmpdir=`ls -ld "$tmpdir"`
-                   case $ls_ld_tmpdir in
-                     d????-?r-*) different_mode=700;;
-                     d????-?--*) different_mode=755;;
-                     *) false;;
-                   esac &&
-                   $mkdirprog -m$different_mode -p -- "$tmpdir" && {
-                     ls_ld_tmpdir_1=`ls -ld "$tmpdir"`
-                     test "$ls_ld_tmpdir" = "$ls_ld_tmpdir_1"
-                   }
-                 }
-              then posix_mkdir=:
-              fi
-              rmdir "$tmpdir/d" "$tmpdir"
-            else
-              # Remove any dirs left behind by ancient mkdir implementations.
-              rmdir ./$mkdir_mode ./-p ./-- 2>/dev/null
-            fi
-            trap '' 0;;
-        esac;;
-    esac
-
-    if
-      $posix_mkdir && (
-        umask $mkdir_umask &&
-        $doit_exec $mkdirprog $mkdir_mode -p -- "$dstdir"
-      )
-    then :
-    else
-
-      # The umask is ridiculous, or mkdir does not conform to POSIX,
-      # or it failed possibly due to a race condition.  Create the
-      # directory the slow way, step by step, checking for races as we go.
-
-      case $dstdir in
-        /*) prefix='/';;
-        [-=\(\)!]*) prefix='./';;
-        *)  prefix='';;
-      esac
-
-      oIFS=$IFS
-      IFS=/
-      set -f
-      set fnord $dstdir
-      shift
-      set +f
-      IFS=$oIFS
-
-      prefixes=
-
-      for d
-      do
-        test X"$d" = X && continue
-
-        prefix=$prefix$d
-        if test -d "$prefix"; then
-          prefixes=
-        else
-          if $posix_mkdir; then
-            (umask=$mkdir_umask &&
-             $doit_exec $mkdirprog $mkdir_mode -p -- "$dstdir") && break
-            # Don't fail if two instances are running concurrently.
-            test -d "$prefix" || exit 1
-          else
-            case $prefix in
-              *\'*) qprefix=`echo "$prefix" | sed "s/'/'\\\\\\\\''/g"`;;
-              *) qprefix=$prefix;;
-            esac
-            prefixes="$prefixes '$qprefix'"
-          fi
-        fi
-        prefix=$prefix/
-      done
-
-      if test -n "$prefixes"; then
-        # Don't fail if two instances are running concurrently.
-        (umask $mkdir_umask &&
-         eval "\$doit_exec \$mkdirprog $prefixes") ||
-          test -d "$dstdir" || exit 1
-        obsolete_mkdir_used=true
-      fi
-    fi
-  fi
-
-  if test -n "$dir_arg"; then
-    { test -z "$chowncmd" || $doit $chowncmd "$dst"; } &&
-    { test -z "$chgrpcmd" || $doit $chgrpcmd "$dst"; } &&
-    { test "$obsolete_mkdir_used$chowncmd$chgrpcmd" = false ||
-      test -z "$chmodcmd" || $doit $chmodcmd $mode "$dst"; } || exit 1
-  else
-
-    # Make a couple of temp file names in the proper directory.
-    dsttmp=$dstdir/_inst.$$_
-    rmtmp=$dstdir/_rm.$$_
-
-    # Trap to clean up those temp files at exit.
-    trap 'ret=$?; rm -f "$dsttmp" "$rmtmp" && exit $ret' 0
-
-    # Copy the file name to the temp name.
-    (umask $cp_umask && $doit_exec $cpprog "$src" "$dsttmp") &&
-
-    # and set any options; do chmod last to preserve setuid bits.
-    #
-    # If any of these fail, we abort the whole thing.  If we want to
-    # ignore errors from any of these, just make sure not to ignore
-    # errors from the above "$doit $cpprog $src $dsttmp" command.
-    #
-    { test -z "$chowncmd" || $doit $chowncmd "$dsttmp"; } &&
-    { test -z "$chgrpcmd" || $doit $chgrpcmd "$dsttmp"; } &&
-    { test -z "$stripcmd" || $doit $stripcmd "$dsttmp"; } &&
-    { test -z "$chmodcmd" || $doit $chmodcmd $mode "$dsttmp"; } &&
-
-    # If -C, don't bother to copy if it wouldn't change the file.
-    if $copy_on_change &&
-       old=`LC_ALL=C ls -dlL "$dst"     2>/dev/null` &&
-       new=`LC_ALL=C ls -dlL "$dsttmp"  2>/dev/null` &&
-       set -f &&
-       set X $old && old=:$2:$4:$5:$6 &&
-       set X $new && new=:$2:$4:$5:$6 &&
-       set +f &&
-       test "$old" = "$new" &&
-       $cmpprog "$dst" "$dsttmp" >/dev/null 2>&1
-    then
-      rm -f "$dsttmp"
-    else
-      # Rename the file to the real destination.
-      $doit $mvcmd -f "$dsttmp" "$dst" 2>/dev/null ||
-
-      # The rename failed, perhaps because mv can't rename something else
-      # to itself, or perhaps because mv is so ancient that it does not
-      # support -f.
-      {
-        # Now remove or move aside any old file at destination location.
-        # We try this two ways since rm can't unlink itself on some
-        # systems and the destination file might be busy for other
-        # reasons.  In this case, the final cleanup might fail but the new
-        # file should still install successfully.
-        {
-          test ! -f "$dst" ||
-          $doit $rmcmd -f "$dst" 2>/dev/null ||
-          { $doit $mvcmd -f "$dst" "$rmtmp" 2>/dev/null &&
-            { $doit $rmcmd -f "$rmtmp" 2>/dev/null; :; }
-          } ||
-          { echo "$0: cannot unlink or rename $dst" >&2
-            (exit 1); exit 1
-          }
-        } &&
-
-        # Now rename the file to the real destination.
-        $doit $mvcmd "$dsttmp" "$dst"
-      }
-    fi || exit 1
-
-    trap '' 0
-  fi
-done
-
-# Local variables:
-# eval: (add-hook 'write-file-hooks 'time-stamp)
-# time-stamp-start: "scriptversion="
-# time-stamp-format: "%:y-%02m-%02d.%02H"
-# time-stamp-time-zone: "UTC"
-# time-stamp-end: "; # UTC"
-# End:
diff -Nuar groff-1.22.3.old/src/libs/gnulib/build-aux/missing groff-1.22.3/src/libs/gnulib/build-aux/missing
--- groff-1.22.3.old/src/libs/gnulib/build-aux/missing	2014-11-04 10:38:35.646518734 +0200
+++ groff-1.22.3/src/libs/gnulib/build-aux/missing	1970-01-01 02:00:00.000000000 +0200
@@ -1,330 +0,0 @@
-#! /bin/sh
-# Common stub for a few missing GNU programs while installing.
-
-scriptversion=2014-09-17.17; # UTC
-
-# Copyright (C) 1996-2014 Free Software Foundation, Inc.
-# Originally by Fran,cois Pinard <pinard@iro.umontreal.ca>, 1996.
-
-# This program is free software; you can redistribute it and/or modify
-# it under the terms of the GNU General Public License as published by
-# the Free Software Foundation; either version 2, or (at your option)
-# any later version.
-
-# This program is distributed in the hope that it will be useful,
-# but WITHOUT ANY WARRANTY; without even the implied warranty of
-# MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
-# GNU General Public License for more details.
-
-# You should have received a copy of the GNU General Public License
-# along with this program.  If not, see <http://www.gnu.org/licenses/>.
-
-# As a special exception to the GNU General Public License, if you
-# distribute this file as part of a program that contains a
-# configuration script generated by Autoconf, you may include it under
-# the same distribution terms that you use for the rest of that program.
-
-if test $# -eq 0; then
-  echo 1>&2 "Try '$0 --help' for more information"
-  exit 1
-fi
-
-run=:
-sed_output='s/.* --output[ =]\([^ ]*\).*/\1/p'
-sed_minuso='s/.* -o \([^ ]*\).*/\1/p'
-
-# In the cases where this matters, 'missing' is being run in the
-# srcdir already.
-if test -f configure.ac; then
-  configure_ac=configure.ac
-else
-  configure_ac=configure.in
-fi
-
-msg="missing on your system"
-
-case $1 in
---run)
-  # Try to run requested program, and just exit if it succeeds.
-  run=
-  shift
-  "$@" && exit 0
-  # Exit code 63 means version mismatch.  This often happens
-  # when the user try to use an ancient version of a tool on
-  # a file that requires a minimum version.  In this case we
-  # we should proceed has if the program had been absent, or
-  # if --run hadn't been passed.
-  if test $? = 63; then
-    run=:
-    msg="probably too old"
-  fi
-  ;;
-
-  -h|--h|--he|--hel|--help)
-    echo "\
-$0 [OPTION]... PROGRAM [ARGUMENT]...
-
-Handle 'PROGRAM [ARGUMENT]...' for when PROGRAM is missing, or return an
-error status if there is no known handling for PROGRAM.
-
-Options:
-  -h, --help      display this help and exit
-  -v, --version   output version information and exit
-  --run           try to run the given command, and emulate it if it fails
-
-Supported PROGRAM values:
-  aclocal      touch file 'aclocal.m4'
-  autoconf     touch file 'configure'
-  autoheader   touch file 'config.h.in'
-  autom4te     touch the output file, or create a stub one
-  automake     touch all 'Makefile.in' files
-  bison        create 'y.tab.[ch]', if possible, from existing .[ch]
-  flex         create 'lex.yy.c', if possible, from existing .c
-  help2man     touch the output file
-  lex          create 'lex.yy.c', if possible, from existing .c
-  makeinfo     touch the output file
-  yacc         create 'y.tab.[ch]', if possible, from existing .[ch]
-
-Version suffixes to PROGRAM as well as the prefixes 'gnu-', 'gnu', and
-'g' are ignored when checking the name.
-
-Send bug reports to <bug-automake@gnu.org>."
-    exit $?
-    ;;
-
-  -v|--v|--ve|--ver|--vers|--versi|--versio|--version)
-    echo "missing $scriptversion (GNU Automake)"
-    exit $?
-    ;;
-
-  -*)
-    echo 1>&2 "$0: Unknown '$1' option"
-    echo 1>&2 "Try '$0 --help' for more information"
-    exit 1
-    ;;
-
-esac
-
-# normalize program name to check for.
-program=`echo "$1" | sed '
-  s/^gnu-//; t
-  s/^gnu//; t
-  s/^g//; t'`
-
-# Now exit if we have it, but it failed.  Also exit now if we
-# don't have it and --version was passed (most likely to detect
-# the program).  This is about non-GNU programs, so use $1 not
-# $program.
-case $1 in
-  lex*|yacc*)
-    # Not GNU programs, they don't have --version.
-    ;;
-
-  *)
-    if test -z "$run" && ($1 --version) > /dev/null 2>&1; then
-       # We have it, but it failed.
-       exit 1
-    elif test "x$2" = "x--version" || test "x$2" = "x--help"; then
-       # Could not run --version or --help.  This is probably someone
-       # running '$TOOL --version' or '$TOOL --help' to check whether
-       # $TOOL exists and not knowing $TOOL uses missing.
-       exit 1
-    fi
-    ;;
-esac
-
-# If it does not exist, or fails to run (possibly an outdated version),
-# try to emulate it.
-case $program in
-  aclocal*)
-    echo 1>&2 "\
-WARNING: '$1' is $msg.  You should only need it if
-         you modified 'acinclude.m4' or '${configure_ac}'.  You might want
-         to install the Automake and Perl packages.  Grab them from
-         any GNU archive site."
-    touch aclocal.m4
-    ;;
-
-  autoconf*)
-    echo 1>&2 "\
-WARNING: '$1' is $msg.  You should only need it if
-         you modified '${configure_ac}'.  You might want to install the
-         Autoconf and GNU m4 packages.  Grab them from any GNU
-         archive site."
-    touch configure
-    ;;
-
-  autoheader*)
-    echo 1>&2 "\
-WARNING: '$1' is $msg.  You should only need it if
-         you modified 'acconfig.h' or '${configure_ac}'.  You might want
-         to install the Autoconf and GNU m4 packages.  Grab them
-         from any GNU archive site."
-    files=`sed -n 's/^[ ]*A[CM]_CONFIG_HEADER(\([^)]*\)).*/\1/p' ${configure_ac}`
-    test -z "$files" && files="config.h"
-    touch_files=
-    for f in $files; do
-      case $f in
-      *:*) touch_files="$touch_files "`echo "$f" |
-				       sed -e 's/^[^:]*://' -e 's/:.*//'`;;
-      *) touch_files="$touch_files $f.in";;
-      esac
-    done
-    touch $touch_files
-    ;;
-
-  automake*)
-    echo 1>&2 "\
-WARNING: '$1' is $msg.  You should only need it if
-         you modified 'Makefile.am', 'acinclude.m4' or '${configure_ac}'.
-         You might want to install the Automake and Perl packages.
-         Grab them from any GNU archive site."
-    find . -type f -name Makefile.am -print |
-	   sed 's/\.am$/.in/' |
-	   while read f; do touch "$f"; done
-    ;;
-
-  autom4te*)
-    echo 1>&2 "\
-WARNING: '$1' is needed, but is $msg.
-         You might have modified some files without having the
-         proper tools for further handling them.
-         You can get '$1' as part of Autoconf from any GNU
-         archive site."
-
-    file=`echo "$*" | sed -n "$sed_output"`
-    test -z "$file" && file=`echo "$*" | sed -n "$sed_minuso"`
-    if test -f "$file"; then
-	touch $file
-    else
-	test -z "$file" || exec >$file
-	echo "#! /bin/sh"
-	echo "# Created by GNU Automake missing as a replacement of"
-	echo "#  $ $@"
-	echo "exit 0"
-	chmod +x $file
-	exit 1
-    fi
-    ;;
-
-  bison*|yacc*)
-    echo 1>&2 "\
-WARNING: '$1' $msg.  You should only need it if
-         you modified a '.y' file.  You may need the Bison package
-         in order for those modifications to take effect.  You can get
-         Bison from any GNU archive site."
-    rm -f y.tab.c y.tab.h
-    if test $# -ne 1; then
-        eval LASTARG=\${$#}
-	case $LASTARG in
-	*.y)
-	    SRCFILE=`echo "$LASTARG" | sed 's/y$/c/'`
-	    if test -f "$SRCFILE"; then
-	         cp "$SRCFILE" y.tab.c
-	    fi
-	    SRCFILE=`echo "$LASTARG" | sed 's/y$/h/'`
-	    if test -f "$SRCFILE"; then
-	         cp "$SRCFILE" y.tab.h
-	    fi
-	  ;;
-	esac
-    fi
-    if test ! -f y.tab.h; then
-	echo >y.tab.h
-    fi
-    if test ! -f y.tab.c; then
-	echo 'main() { return 0; }' >y.tab.c
-    fi
-    ;;
-
-  lex*|flex*)
-    echo 1>&2 "\
-WARNING: '$1' is $msg.  You should only need it if
-         you modified a '.l' file.  You may need the Flex package
-         in order for those modifications to take effect.  You can get
-         Flex from any GNU archive site."
-    rm -f lex.yy.c
-    if test $# -ne 1; then
-        eval LASTARG=\${$#}
-	case $LASTARG in
-	*.l)
-	    SRCFILE=`echo "$LASTARG" | sed 's/l$/c/'`
-	    if test -f "$SRCFILE"; then
-	         cp "$SRCFILE" lex.yy.c
-	    fi
-	  ;;
-	esac
-    fi
-    if test ! -f lex.yy.c; then
-	echo 'main() { return 0; }' >lex.yy.c
-    fi
-    ;;
-
-  help2man*)
-    echo 1>&2 "\
-WARNING: '$1' is $msg.  You should only need it if
-	 you modified a dependency of a manual page.  You may need the
-	 Help2man package in order for those modifications to take
-	 effect.  You can get Help2man from any GNU archive site."
-
-    file=`echo "$*" | sed -n "$sed_output"`
-    test -z "$file" && file=`echo "$*" | sed -n "$sed_minuso"`
-    if test -f "$file"; then
-	touch $file
-    else
-	test -z "$file" || exec >$file
-	echo ".ab help2man is required to generate this page"
-	exit $?
-    fi
-    ;;
-
-  makeinfo*)
-    echo 1>&2 "\
-WARNING: '$1' is $msg.  You should only need it if
-         you modified a '.texi' or '.texinfo' file, or any other file
-         indirectly affecting the aspect of the manual.  The spurious
-         call might also be the consequence of using a buggy 'make' (AIX,
-         DU, IRIX).  You might want to install the Texinfo package or
-         the GNU make package.  Grab either from any GNU archive site."
-    # The file to touch is that specified with -o ...
-    file=`echo "$*" | sed -n "$sed_output"`
-    test -z "$file" && file=`echo "$*" | sed -n "$sed_minuso"`
-    if test -z "$file"; then
-      # ... or it is the one specified with @setfilename ...
-      infile=`echo "$*" | sed 's/.* \([^ ]*\) *$/\1/'`
-      file=`sed -n '
-	/^@setfilename/{
-	  s/.* \([^ ]*\) *$/\1/
-	  p
-	  q
-	}' $infile`
-      # ... or it is derived from the source name (dir/f.texi becomes f.info)
-      test -z "$file" && file=`echo "$infile" | sed 's,.*/,,;s,.[^.]*$,,'`.info
-    fi
-    # If the file does not exist, the user really needs makeinfo;
-    # let's fail without touching anything.
-    test -f $file || exit 1
-    touch $file
-    ;;
-
-  *)
-    echo 1>&2 "\
-WARNING: '$1' is needed, and is $msg.
-         You might have modified some files without having the
-         proper tools for further handling them.  Check the 'README' file,
-         it often tells you about the needed prerequisites for installing
-         this package.  You may also peek at any GNU archive site, in case
-         some other package would contain this missing '$1' program."
-    exit 1
-    ;;
-esac
-
-exit 0
-
-# Local variables:
-# eval: (add-hook 'write-file-hooks 'time-stamp)
-# time-stamp-start: "scriptversion="
-# time-stamp-format: "%:y-%02m-%02d.%02H"
-# time-stamp-time-zone: "UTC"
-# time-stamp-end: "; # UTC"
-# End:
diff -Nuar groff-1.22.3.old/src/libs/gnulib/build-aux/snippet/arg-nonnull.h groff-1.22.3/src/libs/gnulib/build-aux/snippet/arg-nonnull.h
--- groff-1.22.3.old/src/libs/gnulib/build-aux/snippet/arg-nonnull.h	2014-11-04 10:38:35.650518684 +0200
+++ groff-1.22.3/src/libs/gnulib/build-aux/snippet/arg-nonnull.h	1970-01-01 02:00:00.000000000 +0200
@@ -1,26 +0,0 @@
-/* A C macro for declaring that specific arguments must not be NULL.
-   Copyright (C) 2009-2014 Free Software Foundation, Inc.
-
-   This program is free software: you can redistribute it and/or modify it
-   under the terms of the GNU Lesser General Public License as published
-   by the Free Software Foundation; either version 2 of the License, or
-   (at your option) any later version.
-
-   This program is distributed in the hope that it will be useful,
-   but WITHOUT ANY WARRANTY; without even the implied warranty of
-   MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the GNU
-   Lesser General Public License for more details.
-
-   You should have received a copy of the GNU Lesser General Public License
-   along with this program.  If not, see <http://www.gnu.org/licenses/>.  */
-
-/* _GL_ARG_NONNULL((n,...,m)) tells the compiler and static analyzer tools
-   that the values passed as arguments n, ..., m must be non-NULL pointers.
-   n = 1 stands for the first argument, n = 2 for the second argument etc.  */
-#ifndef _GL_ARG_NONNULL
-# if (__GNUC__ == 3 && __GNUC_MINOR__ >= 3) || __GNUC__ > 3
-#  define _GL_ARG_NONNULL(params) __attribute__ ((__nonnull__ params))
-# else
-#  define _GL_ARG_NONNULL(params)
-# endif
-#endif
diff -Nuar groff-1.22.3.old/src/libs/gnulib/build-aux/snippet/c++defs.h groff-1.22.3/src/libs/gnulib/build-aux/snippet/c++defs.h
--- groff-1.22.3.old/src/libs/gnulib/build-aux/snippet/c++defs.h	2014-11-04 10:38:35.650518684 +0200
+++ groff-1.22.3/src/libs/gnulib/build-aux/snippet/c++defs.h	1970-01-01 02:00:00.000000000 +0200
@@ -1,271 +0,0 @@
-/* C++ compatible function declaration macros.
-   Copyright (C) 2010-2014 Free Software Foundation, Inc.
-
-   This program is free software: you can redistribute it and/or modify it
-   under the terms of the GNU Lesser General Public License as published
-   by the Free Software Foundation; either version 2 of the License, or
-   (at your option) any later version.
-
-   This program is distributed in the hope that it will be useful,
-   but WITHOUT ANY WARRANTY; without even the implied warranty of
-   MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the GNU
-   Lesser General Public License for more details.
-
-   You should have received a copy of the GNU Lesser General Public License
-   along with this program.  If not, see <http://www.gnu.org/licenses/>.  */
-
-#ifndef _GL_CXXDEFS_H
-#define _GL_CXXDEFS_H
-
-/* The three most frequent use cases of these macros are:
-
-   * For providing a substitute for a function that is missing on some
-     platforms, but is declared and works fine on the platforms on which
-     it exists:
-
-       #if @GNULIB_FOO@
-       # if !@HAVE_FOO@
-       _GL_FUNCDECL_SYS (foo, ...);
-       # endif
-       _GL_CXXALIAS_SYS (foo, ...);
-       _GL_CXXALIASWARN (foo);
-       #elif defined GNULIB_POSIXCHECK
-       ...
-       #endif
-
-   * For providing a replacement for a function that exists on all platforms,
-     but is broken/insufficient and needs to be replaced on some platforms:
-
-       #if @GNULIB_FOO@
-       # if @REPLACE_FOO@
-       #  if !(defined __cplusplus && defined GNULIB_NAMESPACE)
-       #   undef foo
-       #   define foo rpl_foo
-       #  endif
-       _GL_FUNCDECL_RPL (foo, ...);
-       _GL_CXXALIAS_RPL (foo, ...);
-       # else
-       _GL_CXXALIAS_SYS (foo, ...);
-       # endif
-       _GL_CXXALIASWARN (foo);
-       #elif defined GNULIB_POSIXCHECK
-       ...
-       #endif
-
-   * For providing a replacement for a function that exists on some platforms
-     but is broken/insufficient and needs to be replaced on some of them and
-     is additionally either missing or undeclared on some other platforms:
-
-       #if @GNULIB_FOO@
-       # if @REPLACE_FOO@
-       #  if !(defined __cplusplus && defined GNULIB_NAMESPACE)
-       #   undef foo
-       #   define foo rpl_foo
-       #  endif
-       _GL_FUNCDECL_RPL (foo, ...);
-       _GL_CXXALIAS_RPL (foo, ...);
-       # else
-       #  if !@HAVE_FOO@   or   if !@HAVE_DECL_FOO@
-       _GL_FUNCDECL_SYS (foo, ...);
-       #  endif
-       _GL_CXXALIAS_SYS (foo, ...);
-       # endif
-       _GL_CXXALIASWARN (foo);
-       #elif defined GNULIB_POSIXCHECK
-       ...
-       #endif
-*/
-
-/* _GL_EXTERN_C declaration;
-   performs the declaration with C linkage.  */
-#if defined __cplusplus
-# define _GL_EXTERN_C extern "C"
-#else
-# define _GL_EXTERN_C extern
-#endif
-
-/* _GL_FUNCDECL_RPL (func, rettype, parameters_and_attributes);
-   declares a replacement function, named rpl_func, with the given prototype,
-   consisting of return type, parameters, and attributes.
-   Example:
-     _GL_FUNCDECL_RPL (open, int, (const char *filename, int flags, ...)
-                                  _GL_ARG_NONNULL ((1)));
- */
-#define _GL_FUNCDECL_RPL(func,rettype,parameters_and_attributes) \
-  _GL_FUNCDECL_RPL_1 (rpl_##func, rettype, parameters_and_attributes)
-#define _GL_FUNCDECL_RPL_1(rpl_func,rettype,parameters_and_attributes) \
-  _GL_EXTERN_C rettype rpl_func parameters_and_attributes
-
-/* _GL_FUNCDECL_SYS (func, rettype, parameters_and_attributes);
-   declares the system function, named func, with the given prototype,
-   consisting of return type, parameters, and attributes.
-   Example:
-     _GL_FUNCDECL_SYS (open, int, (const char *filename, int flags, ...)
-                                  _GL_ARG_NONNULL ((1)));
- */
-#define _GL_FUNCDECL_SYS(func,rettype,parameters_and_attributes) \
-  _GL_EXTERN_C rettype func parameters_and_attributes
-
-/* _GL_CXXALIAS_RPL (func, rettype, parameters);
-   declares a C++ alias called GNULIB_NAMESPACE::func
-   that redirects to rpl_func, if GNULIB_NAMESPACE is defined.
-   Example:
-     _GL_CXXALIAS_RPL (open, int, (const char *filename, int flags, ...));
- */
-#define _GL_CXXALIAS_RPL(func,rettype,parameters) \
-  _GL_CXXALIAS_RPL_1 (func, rpl_##func, rettype, parameters)
-#if defined __cplusplus && defined GNULIB_NAMESPACE
-# define _GL_CXXALIAS_RPL_1(func,rpl_func,rettype,parameters) \
-    namespace GNULIB_NAMESPACE                                \
-    {                                                         \
-      rettype (*const func) parameters = ::rpl_func;          \
-    }                                                         \
-    _GL_EXTERN_C int _gl_cxxalias_dummy
-#else
-# define _GL_CXXALIAS_RPL_1(func,rpl_func,rettype,parameters) \
-    _GL_EXTERN_C int _gl_cxxalias_dummy
-#endif
-
-/* _GL_CXXALIAS_RPL_CAST_1 (func, rpl_func, rettype, parameters);
-   is like  _GL_CXXALIAS_RPL_1 (func, rpl_func, rettype, parameters);
-   except that the C function rpl_func may have a slightly different
-   declaration.  A cast is used to silence the "invalid conversion" error
-   that would otherwise occur.  */
-#if defined __cplusplus && defined GNULIB_NAMESPACE
-# define _GL_CXXALIAS_RPL_CAST_1(func,rpl_func,rettype,parameters) \
-    namespace GNULIB_NAMESPACE                                     \
-    {                                                              \
-      rettype (*const func) parameters =                           \
-        reinterpret_cast<rettype(*)parameters>(::rpl_func);        \
-    }                                                              \
-    _GL_EXTERN_C int _gl_cxxalias_dummy
-#else
-# define _GL_CXXALIAS_RPL_CAST_1(func,rpl_func,rettype,parameters) \
-    _GL_EXTERN_C int _gl_cxxalias_dummy
-#endif
-
-/* _GL_CXXALIAS_SYS (func, rettype, parameters);
-   declares a C++ alias called GNULIB_NAMESPACE::func
-   that redirects to the system provided function func, if GNULIB_NAMESPACE
-   is defined.
-   Example:
-     _GL_CXXALIAS_SYS (open, int, (const char *filename, int flags, ...));
- */
-#if defined __cplusplus && defined GNULIB_NAMESPACE
-  /* If we were to write
-       rettype (*const func) parameters = ::func;
-     like above in _GL_CXXALIAS_RPL_1, the compiler could optimize calls
-     better (remove an indirection through a 'static' pointer variable),
-     but then the _GL_CXXALIASWARN macro below would cause a warning not only
-     for uses of ::func but also for uses of GNULIB_NAMESPACE::func.  */
-# define _GL_CXXALIAS_SYS(func,rettype,parameters) \
-    namespace GNULIB_NAMESPACE                     \
-    {                                              \
-      static rettype (*func) parameters = ::func;  \
-    }                                              \
-    _GL_EXTERN_C int _gl_cxxalias_dummy
-#else
-# define _GL_CXXALIAS_SYS(func,rettype,parameters) \
-    _GL_EXTERN_C int _gl_cxxalias_dummy
-#endif
-
-/* _GL_CXXALIAS_SYS_CAST (func, rettype, parameters);
-   is like  _GL_CXXALIAS_SYS (func, rettype, parameters);
-   except that the C function func may have a slightly different declaration.
-   A cast is used to silence the "invalid conversion" error that would
-   otherwise occur.  */
-#if defined __cplusplus && defined GNULIB_NAMESPACE
-# define _GL_CXXALIAS_SYS_CAST(func,rettype,parameters) \
-    namespace GNULIB_NAMESPACE                          \
-    {                                                   \
-      static rettype (*func) parameters =               \
-        reinterpret_cast<rettype(*)parameters>(::func); \
-    }                                                   \
-    _GL_EXTERN_C int _gl_cxxalias_dummy
-#else
-# define _GL_CXXALIAS_SYS_CAST(func,rettype,parameters) \
-    _GL_EXTERN_C int _gl_cxxalias_dummy
-#endif
-
-/* _GL_CXXALIAS_SYS_CAST2 (func, rettype, parameters, rettype2, parameters2);
-   is like  _GL_CXXALIAS_SYS (func, rettype, parameters);
-   except that the C function is picked among a set of overloaded functions,
-   namely the one with rettype2 and parameters2.  Two consecutive casts
-   are used to silence the "cannot find a match" and "invalid conversion"
-   errors that would otherwise occur.  */
-#if defined __cplusplus && defined GNULIB_NAMESPACE
-  /* The outer cast must be a reinterpret_cast.
-     The inner cast: When the function is defined as a set of overloaded
-     functions, it works as a static_cast<>, choosing the designated variant.
-     When the function is defined as a single variant, it works as a
-     reinterpret_cast<>. The parenthesized cast syntax works both ways.  */
-# define _GL_CXXALIAS_SYS_CAST2(func,rettype,parameters,rettype2,parameters2) \
-    namespace GNULIB_NAMESPACE                                                \
-    {                                                                         \
-      static rettype (*func) parameters =                                     \
-        reinterpret_cast<rettype(*)parameters>(                               \
-          (rettype2(*)parameters2)(::func));                                  \
-    }                                                                         \
-    _GL_EXTERN_C int _gl_cxxalias_dummy
-#else
-# define _GL_CXXALIAS_SYS_CAST2(func,rettype,parameters,rettype2,parameters2) \
-    _GL_EXTERN_C int _gl_cxxalias_dummy
-#endif
-
-/* _GL_CXXALIASWARN (func);
-   causes a warning to be emitted when ::func is used but not when
-   GNULIB_NAMESPACE::func is used.  func must be defined without overloaded
-   variants.  */
-#if defined __cplusplus && defined GNULIB_NAMESPACE
-# define _GL_CXXALIASWARN(func) \
-   _GL_CXXALIASWARN_1 (func, GNULIB_NAMESPACE)
-# define _GL_CXXALIASWARN_1(func,namespace) \
-   _GL_CXXALIASWARN_2 (func, namespace)
-/* To work around GCC bug <http://gcc.gnu.org/bugzilla/show_bug.cgi?id=43881>,
-   we enable the warning only when not optimizing.  */
-# if !__OPTIMIZE__
-#  define _GL_CXXALIASWARN_2(func,namespace) \
-    _GL_WARN_ON_USE (func, \
-                     "The symbol ::" #func " refers to the system function. " \
-                     "Use " #namespace "::" #func " instead.")
-# elif __GNUC__ >= 3 && GNULIB_STRICT_CHECKING
-#  define _GL_CXXALIASWARN_2(func,namespace) \
-     extern __typeof__ (func) func
-# else
-#  define _GL_CXXALIASWARN_2(func,namespace) \
-     _GL_EXTERN_C int _gl_cxxalias_dummy
-# endif
-#else
-# define _GL_CXXALIASWARN(func) \
-    _GL_EXTERN_C int _gl_cxxalias_dummy
-#endif
-
-/* _GL_CXXALIASWARN1 (func, rettype, parameters_and_attributes);
-   causes a warning to be emitted when the given overloaded variant of ::func
-   is used but not when GNULIB_NAMESPACE::func is used.  */
-#if defined __cplusplus && defined GNULIB_NAMESPACE
-# define _GL_CXXALIASWARN1(func,rettype,parameters_and_attributes) \
-   _GL_CXXALIASWARN1_1 (func, rettype, parameters_and_attributes, \
-                        GNULIB_NAMESPACE)
-# define _GL_CXXALIASWARN1_1(func,rettype,parameters_and_attributes,namespace) \
-   _GL_CXXALIASWARN1_2 (func, rettype, parameters_and_attributes, namespace)
-/* To work around GCC bug <http://gcc.gnu.org/bugzilla/show_bug.cgi?id=43881>,
-   we enable the warning only when not optimizing.  */
-# if !__OPTIMIZE__
-#  define _GL_CXXALIASWARN1_2(func,rettype,parameters_and_attributes,namespace) \
-    _GL_WARN_ON_USE_CXX (func, rettype, parameters_and_attributes, \
-                         "The symbol ::" #func " refers to the system function. " \
-                         "Use " #namespace "::" #func " instead.")
-# elif __GNUC__ >= 3 && GNULIB_STRICT_CHECKING
-#  define _GL_CXXALIASWARN1_2(func,rettype,parameters_and_attributes,namespace) \
-     extern __typeof__ (func) func
-# else
-#  define _GL_CXXALIASWARN1_2(func,rettype,parameters_and_attributes,namespace) \
-     _GL_EXTERN_C int _gl_cxxalias_dummy
-# endif
-#else
-# define _GL_CXXALIASWARN1(func,rettype,parameters_and_attributes) \
-    _GL_EXTERN_C int _gl_cxxalias_dummy
-#endif
-
-#endif /* _GL_CXXDEFS_H */
diff -Nuar groff-1.22.3.old/src/libs/gnulib/build-aux/snippet/warn-on-use.h groff-1.22.3/src/libs/gnulib/build-aux/snippet/warn-on-use.h
--- groff-1.22.3.old/src/libs/gnulib/build-aux/snippet/warn-on-use.h	2014-11-04 10:38:35.651518671 +0200
+++ groff-1.22.3/src/libs/gnulib/build-aux/snippet/warn-on-use.h	1970-01-01 02:00:00.000000000 +0200
@@ -1,109 +0,0 @@
-/* A C macro for emitting warnings if a function is used.
-   Copyright (C) 2010-2014 Free Software Foundation, Inc.
-
-   This program is free software: you can redistribute it and/or modify it
-   under the terms of the GNU Lesser General Public License as published
-   by the Free Software Foundation; either version 2 of the License, or
-   (at your option) any later version.
-
-   This program is distributed in the hope that it will be useful,
-   but WITHOUT ANY WARRANTY; without even the implied warranty of
-   MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the GNU
-   Lesser General Public License for more details.
-
-   You should have received a copy of the GNU Lesser General Public License
-   along with this program.  If not, see <http://www.gnu.org/licenses/>.  */
-
-/* _GL_WARN_ON_USE (function, "literal string") issues a declaration
-   for FUNCTION which will then trigger a compiler warning containing
-   the text of "literal string" anywhere that function is called, if
-   supported by the compiler.  If the compiler does not support this
-   feature, the macro expands to an unused extern declaration.
-
-   This macro is useful for marking a function as a potential
-   portability trap, with the intent that "literal string" include
-   instructions on the replacement function that should be used
-   instead.  However, one of the reasons that a function is a
-   portability trap is if it has the wrong signature.  Declaring
-   FUNCTION with a different signature in C is a compilation error, so
-   this macro must use the same type as any existing declaration so
-   that programs that avoid the problematic FUNCTION do not fail to
-   compile merely because they included a header that poisoned the
-   function.  But this implies that _GL_WARN_ON_USE is only safe to
-   use if FUNCTION is known to already have a declaration.  Use of
-   this macro implies that there must not be any other macro hiding
-   the declaration of FUNCTION; but undefining FUNCTION first is part
-   of the poisoning process anyway (although for symbols that are
-   provided only via a macro, the result is a compilation error rather
-   than a warning containing "literal string").  Also note that in
-   C++, it is only safe to use if FUNCTION has no overloads.
-
-   For an example, it is possible to poison 'getline' by:
-   - adding a call to gl_WARN_ON_USE_PREPARE([[#include <stdio.h>]],
-     [getline]) in configure.ac, which potentially defines
-     HAVE_RAW_DECL_GETLINE
-   - adding this code to a header that wraps the system <stdio.h>:
-     #undef getline
-     #if HAVE_RAW_DECL_GETLINE
-     _GL_WARN_ON_USE (getline, "getline is required by POSIX 2008, but"
-       "not universally present; use the gnulib module getline");
-     #endif
-
-   It is not possible to directly poison global variables.  But it is
-   possible to write a wrapper accessor function, and poison that
-   (less common usage, like &environ, will cause a compilation error
-   rather than issue the nice warning, but the end result of informing
-   the developer about their portability problem is still achieved):
-   #if HAVE_RAW_DECL_ENVIRON
-   static char ***rpl_environ (void) { return &environ; }
-   _GL_WARN_ON_USE (rpl_environ, "environ is not always properly declared");
-   # undef environ
-   # define environ (*rpl_environ ())
-   #endif
-   */
-#ifndef _GL_WARN_ON_USE
-
-# if 4 < __GNUC__ || (__GNUC__ == 4 && 3 <= __GNUC_MINOR__)
-/* A compiler attribute is available in gcc versions 4.3.0 and later.  */
-#  define _GL_WARN_ON_USE(function, message) \
-extern __typeof__ (function) function __attribute__ ((__warning__ (message)))
-# elif __GNUC__ >= 3 && GNULIB_STRICT_CHECKING
-/* Verify the existence of the function.  */
-#  define _GL_WARN_ON_USE(function, message) \
-extern __typeof__ (function) function
-# else /* Unsupported.  */
-#  define _GL_WARN_ON_USE(function, message) \
-_GL_WARN_EXTERN_C int _gl_warn_on_use
-# endif
-#endif
-
-/* _GL_WARN_ON_USE_CXX (function, rettype, parameters_and_attributes, "string")
-   is like _GL_WARN_ON_USE (function, "string"), except that the function is
-   declared with the given prototype, consisting of return type, parameters,
-   and attributes.
-   This variant is useful for overloaded functions in C++. _GL_WARN_ON_USE does
-   not work in this case.  */
-#ifndef _GL_WARN_ON_USE_CXX
-# if 4 < __GNUC__ || (__GNUC__ == 4 && 3 <= __GNUC_MINOR__)
-#  define _GL_WARN_ON_USE_CXX(function,rettype,parameters_and_attributes,msg) \
-extern rettype function parameters_and_attributes \
-     __attribute__ ((__warning__ (msg)))
-# elif __GNUC__ >= 3 && GNULIB_STRICT_CHECKING
-/* Verify the existence of the function.  */
-#  define _GL_WARN_ON_USE_CXX(function,rettype,parameters_and_attributes,msg) \
-extern rettype function parameters_and_attributes
-# else /* Unsupported.  */
-#  define _GL_WARN_ON_USE_CXX(function,rettype,parameters_and_attributes,msg) \
-_GL_WARN_EXTERN_C int _gl_warn_on_use
-# endif
-#endif
-
-/* _GL_WARN_EXTERN_C declaration;
-   performs the declaration with C linkage.  */
-#ifndef _GL_WARN_EXTERN_C
-# if defined __cplusplus
-#  define _GL_WARN_EXTERN_C extern "C"
-# else
-#  define _GL_WARN_EXTERN_C extern
-# endif
-#endif
diff -Nuar groff-1.22.3.old/src/libs/gnulib/config.h.in groff-1.22.3/src/libs/gnulib/config.h.in
--- groff-1.22.3.old/src/libs/gnulib/config.h.in	2014-11-04 10:38:35.675518371 +0200
+++ groff-1.22.3/src/libs/gnulib/config.h.in	1970-01-01 02:00:00.000000000 +0200
@@ -1,457 +0,0 @@
-/* config.h.in.  Generated from configure.ac by autoheader.  */
-
-/* Define to the number of bits in type 'ptrdiff_t'. */
-#undef BITSIZEOF_PTRDIFF_T
-
-/* Define to the number of bits in type 'sig_atomic_t'. */
-#undef BITSIZEOF_SIG_ATOMIC_T
-
-/* Define to the number of bits in type 'size_t'. */
-#undef BITSIZEOF_SIZE_T
-
-/* Define to the number of bits in type 'wchar_t'. */
-#undef BITSIZEOF_WCHAR_T
-
-/* Define to the number of bits in type 'wint_t'. */
-#undef BITSIZEOF_WINT_T
-
-/* Define to 1 when the gnulib module wcwidth should be tested. */
-#undef GNULIB_TEST_WCWIDTH
-
-/* Define to 1 if you have the declaration of `getc_unlocked', and to 0 if you
-   don't. */
-#undef HAVE_DECL_GETC_UNLOCKED
-
-/* Define to 1 if you have the declaration of `towlower', and to 0 if you
-   don't. */
-#undef HAVE_DECL_TOWLOWER
-
-/* Define to 1 if you have the declaration of `wcwidth', and to 0 if you
-   don't. */
-#undef HAVE_DECL_WCWIDTH
-
-/* Define to 1 if you have the <features.h> header file. */
-#undef HAVE_FEATURES_H
-
-/* Define to 1 if you have the <inttypes.h> header file. */
-#undef HAVE_INTTYPES_H
-
-/* Define to 1 if you have the 'iswcntrl' function. */
-#undef HAVE_ISWCNTRL
-
-/* Define if you have <langinfo.h> and nl_langinfo(CODESET). */
-#undef HAVE_LANGINFO_CODESET
-
-/* Define to 1 if the system has the type 'long long int'. */
-#undef HAVE_LONG_LONG_INT
-
-/* Define to 1 if you have the <memory.h> header file. */
-#undef HAVE_MEMORY_H
-
-/* Define to 1 if btowc is declared even after undefining macros. */
-#undef HAVE_RAW_DECL_BTOWC
-
-/* Define to 1 if imaxabs is declared even after undefining macros. */
-#undef HAVE_RAW_DECL_IMAXABS
-
-/* Define to 1 if imaxdiv is declared even after undefining macros. */
-#undef HAVE_RAW_DECL_IMAXDIV
-
-/* Define to 1 if iswctype is declared even after undefining macros. */
-#undef HAVE_RAW_DECL_ISWCTYPE
-
-/* Define to 1 if mbrlen is declared even after undefining macros. */
-#undef HAVE_RAW_DECL_MBRLEN
-
-/* Define to 1 if mbrtowc is declared even after undefining macros. */
-#undef HAVE_RAW_DECL_MBRTOWC
-
-/* Define to 1 if mbsinit is declared even after undefining macros. */
-#undef HAVE_RAW_DECL_MBSINIT
-
-/* Define to 1 if mbsnrtowcs is declared even after undefining macros. */
-#undef HAVE_RAW_DECL_MBSNRTOWCS
-
-/* Define to 1 if mbsrtowcs is declared even after undefining macros. */
-#undef HAVE_RAW_DECL_MBSRTOWCS
-
-/* Define to 1 if strtoimax is declared even after undefining macros. */
-#undef HAVE_RAW_DECL_STRTOIMAX
-
-/* Define to 1 if strtoumax is declared even after undefining macros. */
-#undef HAVE_RAW_DECL_STRTOUMAX
-
-/* Define to 1 if towctrans is declared even after undefining macros. */
-#undef HAVE_RAW_DECL_TOWCTRANS
-
-/* Define to 1 if wcpcpy is declared even after undefining macros. */
-#undef HAVE_RAW_DECL_WCPCPY
-
-/* Define to 1 if wcpncpy is declared even after undefining macros. */
-#undef HAVE_RAW_DECL_WCPNCPY
-
-/* Define to 1 if wcrtomb is declared even after undefining macros. */
-#undef HAVE_RAW_DECL_WCRTOMB
-
-/* Define to 1 if wcscasecmp is declared even after undefining macros. */
-#undef HAVE_RAW_DECL_WCSCASECMP
-
-/* Define to 1 if wcscat is declared even after undefining macros. */
-#undef HAVE_RAW_DECL_WCSCAT
-
-/* Define to 1 if wcschr is declared even after undefining macros. */
-#undef HAVE_RAW_DECL_WCSCHR
-
-/* Define to 1 if wcscmp is declared even after undefining macros. */
-#undef HAVE_RAW_DECL_WCSCMP
-
-/* Define to 1 if wcscoll is declared even after undefining macros. */
-#undef HAVE_RAW_DECL_WCSCOLL
-
-/* Define to 1 if wcscpy is declared even after undefining macros. */
-#undef HAVE_RAW_DECL_WCSCPY
-
-/* Define to 1 if wcscspn is declared even after undefining macros. */
-#undef HAVE_RAW_DECL_WCSCSPN
-
-/* Define to 1 if wcsdup is declared even after undefining macros. */
-#undef HAVE_RAW_DECL_WCSDUP
-
-/* Define to 1 if wcslen is declared even after undefining macros. */
-#undef HAVE_RAW_DECL_WCSLEN
-
-/* Define to 1 if wcsncasecmp is declared even after undefining macros. */
-#undef HAVE_RAW_DECL_WCSNCASECMP
-
-/* Define to 1 if wcsncat is declared even after undefining macros. */
-#undef HAVE_RAW_DECL_WCSNCAT
-
-/* Define to 1 if wcsncmp is declared even after undefining macros. */
-#undef HAVE_RAW_DECL_WCSNCMP
-
-/* Define to 1 if wcsncpy is declared even after undefining macros. */
-#undef HAVE_RAW_DECL_WCSNCPY
-
-/* Define to 1 if wcsnlen is declared even after undefining macros. */
-#undef HAVE_RAW_DECL_WCSNLEN
-
-/* Define to 1 if wcsnrtombs is declared even after undefining macros. */
-#undef HAVE_RAW_DECL_WCSNRTOMBS
-
-/* Define to 1 if wcspbrk is declared even after undefining macros. */
-#undef HAVE_RAW_DECL_WCSPBRK
-
-/* Define to 1 if wcsrchr is declared even after undefining macros. */
-#undef HAVE_RAW_DECL_WCSRCHR
-
-/* Define to 1 if wcsrtombs is declared even after undefining macros. */
-#undef HAVE_RAW_DECL_WCSRTOMBS
-
-/* Define to 1 if wcsspn is declared even after undefining macros. */
-#undef HAVE_RAW_DECL_WCSSPN
-
-/* Define to 1 if wcsstr is declared even after undefining macros. */
-#undef HAVE_RAW_DECL_WCSSTR
-
-/* Define to 1 if wcstok is declared even after undefining macros. */
-#undef HAVE_RAW_DECL_WCSTOK
-
-/* Define to 1 if wcswidth is declared even after undefining macros. */
-#undef HAVE_RAW_DECL_WCSWIDTH
-
-/* Define to 1 if wcsxfrm is declared even after undefining macros. */
-#undef HAVE_RAW_DECL_WCSXFRM
-
-/* Define to 1 if wctob is declared even after undefining macros. */
-#undef HAVE_RAW_DECL_WCTOB
-
-/* Define to 1 if wctrans is declared even after undefining macros. */
-#undef HAVE_RAW_DECL_WCTRANS
-
-/* Define to 1 if wctype is declared even after undefining macros. */
-#undef HAVE_RAW_DECL_WCTYPE
-
-/* Define to 1 if wcwidth is declared even after undefining macros. */
-#undef HAVE_RAW_DECL_WCWIDTH
-
-/* Define to 1 if wmemchr is declared even after undefining macros. */
-#undef HAVE_RAW_DECL_WMEMCHR
-
-/* Define to 1 if wmemcmp is declared even after undefining macros. */
-#undef HAVE_RAW_DECL_WMEMCMP
-
-/* Define to 1 if wmemcpy is declared even after undefining macros. */
-#undef HAVE_RAW_DECL_WMEMCPY
-
-/* Define to 1 if wmemmove is declared even after undefining macros. */
-#undef HAVE_RAW_DECL_WMEMMOVE
-
-/* Define to 1 if wmemset is declared even after undefining macros. */
-#undef HAVE_RAW_DECL_WMEMSET
-
-/* Define to 1 if 'sig_atomic_t' is a signed integer type. */
-#undef HAVE_SIGNED_SIG_ATOMIC_T
-
-/* Define to 1 if 'wchar_t' is a signed integer type. */
-#undef HAVE_SIGNED_WCHAR_T
-
-/* Define to 1 if 'wint_t' is a signed integer type. */
-#undef HAVE_SIGNED_WINT_T
-
-/* Define to 1 if you have the <stdint.h> header file. */
-#undef HAVE_STDINT_H
-
-/* Define to 1 if you have the <stdlib.h> header file. */
-#undef HAVE_STDLIB_H
-
-/* Define to 1 if you have the <strings.h> header file. */
-#undef HAVE_STRINGS_H
-
-/* Define to 1 if you have the <string.h> header file. */
-#undef HAVE_STRING_H
-
-/* Define to 1 if you have the 'symlink' function. */
-#undef HAVE_SYMLINK
-
-/* Define to 1 if you have the <sys/bitypes.h> header file. */
-#undef HAVE_SYS_BITYPES_H
-
-/* Define to 1 if you have the <sys/inttypes.h> header file. */
-#undef HAVE_SYS_INTTYPES_H
-
-/* Define to 1 if you have the <sys/stat.h> header file. */
-#undef HAVE_SYS_STAT_H
-
-/* Define to 1 if you have the <sys/types.h> header file. */
-#undef HAVE_SYS_TYPES_H
-
-/* Define to 1 if you have the `towlower' function. */
-#undef HAVE_TOWLOWER
-
-/* Define to 1 if you have the <unistd.h> header file. */
-#undef HAVE_UNISTD_H
-
-/* Define to 1 if the system has the type 'unsigned long long int'. */
-#undef HAVE_UNSIGNED_LONG_LONG_INT
-
-/* Define to 1 if you have the <wchar.h> header file. */
-#undef HAVE_WCHAR_H
-
-/* Define if you have the 'wchar_t' type. */
-#undef HAVE_WCHAR_T
-
-/* Define to 1 if you have the <wctype.h> header file. */
-#undef HAVE_WCTYPE_H
-
-/* Define to 1 if you have the 'wcwidth' function. */
-#undef HAVE_WCWIDTH
-
-/* Define if you have the 'wint_t' type. */
-#undef HAVE_WINT_T
-
-/* Define to 1 if O_NOATIME works. */
-#undef HAVE_WORKING_O_NOATIME
-
-/* Define to 1 if O_NOFOLLOW works. */
-#undef HAVE_WORKING_O_NOFOLLOW
-
-/* Define to 1 if the system has the type `_Bool'. */
-#undef HAVE__BOOL
-
-/* Name of package */
-#undef PACKAGE
-
-/* Define to the address where bug reports for this package should be sent. */
-#undef PACKAGE_BUGREPORT
-
-/* Define to the full name of this package. */
-#undef PACKAGE_NAME
-
-/* Define to the full name and version of this package. */
-#undef PACKAGE_STRING
-
-/* Define to the one symbol short name of this package. */
-#undef PACKAGE_TARNAME
-
-/* Define to the home page for this package. */
-#undef PACKAGE_URL
-
-/* Define to the version of this package. */
-#undef PACKAGE_VERSION
-
-/* Define if <inttypes.h> exists and defines unusable PRI* macros. */
-#undef PRI_MACROS_BROKEN
-
-/* Define to l, ll, u, ul, ull, etc., as suitable for constants of type
-   'ptrdiff_t'. */
-#undef PTRDIFF_T_SUFFIX
-
-/* Define to l, ll, u, ul, ull, etc., as suitable for constants of type
-   'sig_atomic_t'. */
-#undef SIG_ATOMIC_T_SUFFIX
-
-/* Define to l, ll, u, ul, ull, etc., as suitable for constants of type
-   'size_t'. */
-#undef SIZE_T_SUFFIX
-
-/* Define to 1 if you have the ANSI C header files. */
-#undef STDC_HEADERS
-
-/* Enable extensions on AIX 3, Interix.  */
-#ifndef _ALL_SOURCE
-# undef _ALL_SOURCE
-#endif
-/* Enable general extensions on OS X.  */
-#ifndef _DARWIN_C_SOURCE
-# undef _DARWIN_C_SOURCE
-#endif
-/* Enable GNU extensions on systems that have them.  */
-#ifndef _GNU_SOURCE
-# undef _GNU_SOURCE
-#endif
-/* Enable threading extensions on Solaris.  */
-#ifndef _POSIX_PTHREAD_SEMANTICS
-# undef _POSIX_PTHREAD_SEMANTICS
-#endif
-/* Enable extensions on HP NonStop.  */
-#ifndef _TANDEM_SOURCE
-# undef _TANDEM_SOURCE
-#endif
-/* Enable X/Open extensions if necessary.  HP-UX 11.11 defines
-   mbstate_t only if _XOPEN_SOURCE is defined to 500, regardless of
-   whether compiling with -Ae or -D_HPUX_SOURCE=1.  */
-#ifndef _XOPEN_SOURCE
-# undef _XOPEN_SOURCE
-#endif
-/* Enable general extensions on Solaris.  */
-#ifndef __EXTENSIONS__
-# undef __EXTENSIONS__
-#endif
-
-
-/* Version number of package */
-#undef VERSION
-
-/* Define to l, ll, u, ul, ull, etc., as suitable for constants of type
-   'wchar_t'. */
-#undef WCHAR_T_SUFFIX
-
-/* Define to l, ll, u, ul, ull, etc., as suitable for constants of type
-   'wint_t'. */
-#undef WINT_T_SUFFIX
-
-/* Define to 1 if on MINIX. */
-#undef _MINIX
-
-/* Define to 1 to make NetBSD features available. MINIX 3 needs this. */
-#undef _NETBSD_SOURCE
-
-/* The _Noreturn keyword of C11.  */
-#if ! (defined _Noreturn \
-       || (defined __STDC_VERSION__ && 201112 <= __STDC_VERSION__))
-# if (3 <= __GNUC__ || (__GNUC__ == 2 && 8 <= __GNUC_MINOR__) \
-      || 0x5110 <= __SUNPRO_C)
-#  define _Noreturn __attribute__ ((__noreturn__))
-# elif defined _MSC_VER && 1200 <= _MSC_VER
-#  define _Noreturn __declspec (noreturn)
-# else
-#  define _Noreturn
-# endif
-#endif
-
-
-/* Define to 2 if the system does not provide POSIX.1 features except with
-   this defined. */
-#undef _POSIX_1_SOURCE
-
-/* Define to 1 if you need to in order for 'stat' and other things to work. */
-#undef _POSIX_SOURCE
-
-/* _GL_INLINE is a portable alternative to ISO C99 plain 'inline'.
-   _GL_EXTERN_INLINE is a portable alternative to 'extern inline'.
-   _GL_INLINE_HEADER_BEGIN contains useful stuff to put
-     in an include file, before uses of _GL_INLINE.
-     It suppresses GCC's bogus "no previous prototype for 'FOO'" diagnostic,
-     when FOO is an inline function in the header; see
-     <http://gcc.gnu.org/bugzilla/show_bug.cgi?id=54113>.
-   _GL_INLINE_HEADER_END contains useful stuff to put
-     in the same include file, after uses of _GL_INLINE.
-
-   Suppress the use of extern inline on Apple's platforms,
-   as Libc-825.25 (2012-09-19) is incompatible with it; see
-   <http://lists.gnu.org/archive/html/bug-gnulib/2012-12/msg00023.html>.
-   Perhaps Apple will fix this some day.  */
-#if ((__GNUC__ \
-      ? defined __GNUC_STDC_INLINE__ && __GNUC_STDC_INLINE__ \
-      : 199901L <= __STDC_VERSION__) \
-     && !defined __APPLE__)
-# define _GL_INLINE inline
-# define _GL_EXTERN_INLINE extern inline
-#elif 2 < __GNUC__ + (7 <= __GNUC_MINOR__) && !defined __APPLE__
-# if __GNUC_GNU_INLINE__
-   /* __gnu_inline__ suppresses a GCC 4.2 diagnostic.  */
-#  define _GL_INLINE extern inline __attribute__ ((__gnu_inline__))
-# else
-#  define _GL_INLINE extern inline
-# endif
-# define _GL_EXTERN_INLINE extern
-#else
-# define _GL_INLINE static _GL_UNUSED
-# define _GL_EXTERN_INLINE static _GL_UNUSED
-#endif
-
-#if 4 < __GNUC__ + (6 <= __GNUC_MINOR__)
-# if defined __GNUC_STDC_INLINE__ && __GNUC_STDC_INLINE__
-#  define _GL_INLINE_HEADER_CONST_PRAGMA
-# else
-#  define _GL_INLINE_HEADER_CONST_PRAGMA \
-     _Pragma ("GCC diagnostic ignored \"-Wsuggest-attribute=const\"")
-# endif
-# define _GL_INLINE_HEADER_BEGIN \
-    _Pragma ("GCC diagnostic push") \
-    _Pragma ("GCC diagnostic ignored \"-Wmissing-prototypes\"") \
-    _Pragma ("GCC diagnostic ignored \"-Wmissing-declarations\"") \
-    _GL_INLINE_HEADER_CONST_PRAGMA
-# define _GL_INLINE_HEADER_END \
-    _Pragma ("GCC diagnostic pop")
-#else
-# define _GL_INLINE_HEADER_BEGIN
-# define _GL_INLINE_HEADER_END
-#endif
-
-/* Work around a bug in Apple GCC 4.0.1 build 5465: In C99 mode, it supports
-   the ISO C 99 semantics of 'extern inline' (unlike the GNU C semantics of
-   earlier versions), but does not display it by setting __GNUC_STDC_INLINE__.
-   __APPLE__ && __MACH__ test for Mac OS X.
-   __APPLE_CC__ tests for the Apple compiler and its version.
-   __STDC_VERSION__ tests for the C99 mode.  */
-#if defined __APPLE__ && defined __MACH__ && __APPLE_CC__ >= 5465 && !defined __cplusplus && __STDC_VERSION__ >= 199901L && !defined __GNUC_STDC_INLINE__
-# define __GNUC_STDC_INLINE__ 1
-#endif
-
-/* Define as a marker that can be attached to declarations that might not
-    be used.  This helps to reduce warnings, such as from
-    GCC -Wunused-parameter.  */
-#if __GNUC__ >= 3 || (__GNUC__ == 2 && __GNUC_MINOR__ >= 7)
-# define _GL_UNUSED __attribute__ ((__unused__))
-#else
-# define _GL_UNUSED
-#endif
-/* The name _UNUSED_PARAMETER_ is an earlier spelling, although the name
-   is a misnomer outside of parameter lists.  */
-#define _UNUSED_PARAMETER_ _GL_UNUSED
-
-/* The __pure__ attribute was added in gcc 2.96.  */
-#if __GNUC__ > 2 || (__GNUC__ == 2 && __GNUC_MINOR__ >= 96)
-# define _GL_ATTRIBUTE_PURE __attribute__ ((__pure__))
-#else
-# define _GL_ATTRIBUTE_PURE /* empty */
-#endif
-
-/* The __const__ attribute was added in gcc 2.95.  */
-#if __GNUC__ > 2 || (__GNUC__ == 2 && __GNUC_MINOR__ >= 95)
-# define _GL_ATTRIBUTE_CONST __attribute__ ((__const__))
-#else
-# define _GL_ATTRIBUTE_CONST /* empty */
-#endif
-
diff -Nuar groff-1.22.3.old/src/libs/gnulib/configure groff-1.22.3/src/libs/gnulib/configure
--- groff-1.22.3.old/src/libs/gnulib/configure	2014-11-04 10:38:35.676518359 +0200
+++ groff-1.22.3/src/libs/gnulib/configure	1970-01-01 02:00:00.000000000 +0200
@@ -1,9840 +0,0 @@
-#! /bin/sh
-# Guess values for system-dependent variables and create Makefiles.
-# Generated by GNU Autoconf 2.69 for dummy 0.
-#
-#
-# Copyright (C) 1992-1996, 1998-2012 Free Software Foundation, Inc.
-#
-#
-# This configure script is free software; the Free Software Foundation
-# gives unlimited permission to copy, distribute and modify it.
-## -------------------- ##
-## M4sh Initialization. ##
-## -------------------- ##
-
-# Be more Bourne compatible
-DUALCASE=1; export DUALCASE # for MKS sh
-if test -n "${ZSH_VERSION+set}" && (emulate sh) >/dev/null 2>&1; then :
-  emulate sh
-  NULLCMD=:
-  # Pre-4.2 versions of Zsh do word splitting on ${1+"$@"}, which
-  # is contrary to our usage.  Disable this feature.
-  alias -g '${1+"$@"}'='"$@"'
-  setopt NO_GLOB_SUBST
-else
-  case `(set -o) 2>/dev/null` in #(
-  *posix*) :
-    set -o posix ;; #(
-  *) :
-     ;;
-esac
-fi
-
-
-as_nl='
-'
-export as_nl
-# Printing a long string crashes Solaris 7 /usr/bin/printf.
-as_echo='\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\'
-as_echo=$as_echo$as_echo$as_echo$as_echo$as_echo
-as_echo=$as_echo$as_echo$as_echo$as_echo$as_echo$as_echo
-# Prefer a ksh shell builtin over an external printf program on Solaris,
-# but without wasting forks for bash or zsh.
-if test -z "$BASH_VERSION$ZSH_VERSION" \
-    && (test "X`print -r -- $as_echo`" = "X$as_echo") 2>/dev/null; then
-  as_echo='print -r --'
-  as_echo_n='print -rn --'
-elif (test "X`printf %s $as_echo`" = "X$as_echo") 2>/dev/null; then
-  as_echo='printf %s\n'
-  as_echo_n='printf %s'
-else
-  if test "X`(/usr/ucb/echo -n -n $as_echo) 2>/dev/null`" = "X-n $as_echo"; then
-    as_echo_body='eval /usr/ucb/echo -n "$1$as_nl"'
-    as_echo_n='/usr/ucb/echo -n'
-  else
-    as_echo_body='eval expr "X$1" : "X\\(.*\\)"'
-    as_echo_n_body='eval
-      arg=$1;
-      case $arg in #(
-      *"$as_nl"*)
-	expr "X$arg" : "X\\(.*\\)$as_nl";
-	arg=`expr "X$arg" : ".*$as_nl\\(.*\\)"`;;
-      esac;
-      expr "X$arg" : "X\\(.*\\)" | tr -d "$as_nl"
-    '
-    export as_echo_n_body
-    as_echo_n='sh -c $as_echo_n_body as_echo'
-  fi
-  export as_echo_body
-  as_echo='sh -c $as_echo_body as_echo'
-fi
-
-# The user is always right.
-if test "${PATH_SEPARATOR+set}" != set; then
-  PATH_SEPARATOR=:
-  (PATH='/bin;/bin'; FPATH=$PATH; sh -c :) >/dev/null 2>&1 && {
-    (PATH='/bin:/bin'; FPATH=$PATH; sh -c :) >/dev/null 2>&1 ||
-      PATH_SEPARATOR=';'
-  }
-fi
-
-
-# IFS
-# We need space, tab and new line, in precisely that order.  Quoting is
-# there to prevent editors from complaining about space-tab.
-# (If _AS_PATH_WALK were called with IFS unset, it would disable word
-# splitting by setting IFS to empty value.)
-IFS=" ""	$as_nl"
-
-# Find who we are.  Look in the path if we contain no directory separator.
-as_myself=
-case $0 in #((
-  *[\\/]* ) as_myself=$0 ;;
-  *) as_save_IFS=$IFS; IFS=$PATH_SEPARATOR
-for as_dir in $PATH
-do
-  IFS=$as_save_IFS
-  test -z "$as_dir" && as_dir=.
-    test -r "$as_dir/$0" && as_myself=$as_dir/$0 && break
-  done
-IFS=$as_save_IFS
-
-     ;;
-esac
-# We did not find ourselves, most probably we were run as `sh COMMAND'
-# in which case we are not to be found in the path.
-if test "x$as_myself" = x; then
-  as_myself=$0
-fi
-if test ! -f "$as_myself"; then
-  $as_echo "$as_myself: error: cannot find myself; rerun with an absolute file name" >&2
-  exit 1
-fi
-
-# Unset variables that we do not need and which cause bugs (e.g. in
-# pre-3.0 UWIN ksh).  But do not cause bugs in bash 2.01; the "|| exit 1"
-# suppresses any "Segmentation fault" message there.  '((' could
-# trigger a bug in pdksh 5.2.14.
-for as_var in BASH_ENV ENV MAIL MAILPATH
-do eval test x\${$as_var+set} = xset \
-  && ( (unset $as_var) || exit 1) >/dev/null 2>&1 && unset $as_var || :
-done
-PS1='$ '
-PS2='> '
-PS4='+ '
-
-# NLS nuisances.
-LC_ALL=C
-export LC_ALL
-LANGUAGE=C
-export LANGUAGE
-
-# CDPATH.
-(unset CDPATH) >/dev/null 2>&1 && unset CDPATH
-
-# Use a proper internal environment variable to ensure we don't fall
-  # into an infinite loop, continuously re-executing ourselves.
-  if test x"${_as_can_reexec}" != xno && test "x$CONFIG_SHELL" != x; then
-    _as_can_reexec=no; export _as_can_reexec;
-    # We cannot yet assume a decent shell, so we have to provide a
-# neutralization value for shells without unset; and this also
-# works around shells that cannot unset nonexistent variables.
-# Preserve -v and -x to the replacement shell.
-BASH_ENV=/dev/null
-ENV=/dev/null
-(unset BASH_ENV) >/dev/null 2>&1 && unset BASH_ENV ENV
-case $- in # ((((
-  *v*x* | *x*v* ) as_opts=-vx ;;
-  *v* ) as_opts=-v ;;
-  *x* ) as_opts=-x ;;
-  * ) as_opts= ;;
-esac
-exec $CONFIG_SHELL $as_opts "$as_myself" ${1+"$@"}
-# Admittedly, this is quite paranoid, since all the known shells bail
-# out after a failed `exec'.
-$as_echo "$0: could not re-execute with $CONFIG_SHELL" >&2
-as_fn_exit 255
-  fi
-  # We don't want this to propagate to other subprocesses.
-          { _as_can_reexec=; unset _as_can_reexec;}
-if test "x$CONFIG_SHELL" = x; then
-  as_bourne_compatible="if test -n \"\${ZSH_VERSION+set}\" && (emulate sh) >/dev/null 2>&1; then :
-  emulate sh
-  NULLCMD=:
-  # Pre-4.2 versions of Zsh do word splitting on \${1+\"\$@\"}, which
-  # is contrary to our usage.  Disable this feature.
-  alias -g '\${1+\"\$@\"}'='\"\$@\"'
-  setopt NO_GLOB_SUBST
-else
-  case \`(set -o) 2>/dev/null\` in #(
-  *posix*) :
-    set -o posix ;; #(
-  *) :
-     ;;
-esac
-fi
-"
-  as_required="as_fn_return () { (exit \$1); }
-as_fn_success () { as_fn_return 0; }
-as_fn_failure () { as_fn_return 1; }
-as_fn_ret_success () { return 0; }
-as_fn_ret_failure () { return 1; }
-
-exitcode=0
-as_fn_success || { exitcode=1; echo as_fn_success failed.; }
-as_fn_failure && { exitcode=1; echo as_fn_failure succeeded.; }
-as_fn_ret_success || { exitcode=1; echo as_fn_ret_success failed.; }
-as_fn_ret_failure && { exitcode=1; echo as_fn_ret_failure succeeded.; }
-if ( set x; as_fn_ret_success y && test x = \"\$1\" ); then :
-
-else
-  exitcode=1; echo positional parameters were not saved.
-fi
-test x\$exitcode = x0 || exit 1
-test -x / || exit 1"
-  as_suggested="  as_lineno_1=";as_suggested=$as_suggested$LINENO;as_suggested=$as_suggested" as_lineno_1a=\$LINENO
-  as_lineno_2=";as_suggested=$as_suggested$LINENO;as_suggested=$as_suggested" as_lineno_2a=\$LINENO
-  eval 'test \"x\$as_lineno_1'\$as_run'\" != \"x\$as_lineno_2'\$as_run'\" &&
-  test \"x\`expr \$as_lineno_1'\$as_run' + 1\`\" = \"x\$as_lineno_2'\$as_run'\"' || exit 1
-test \$(( 1 + 1 )) = 2 || exit 1"
-  if (eval "$as_required") 2>/dev/null; then :
-  as_have_required=yes
-else
-  as_have_required=no
-fi
-  if test x$as_have_required = xyes && (eval "$as_suggested") 2>/dev/null; then :
-
-else
-  as_save_IFS=$IFS; IFS=$PATH_SEPARATOR
-as_found=false
-for as_dir in /bin$PATH_SEPARATOR/usr/bin$PATH_SEPARATOR$PATH
-do
-  IFS=$as_save_IFS
-  test -z "$as_dir" && as_dir=.
-  as_found=:
-  case $as_dir in #(
-	 /*)
-	   for as_base in sh bash ksh sh5; do
-	     # Try only shells that exist, to save several forks.
-	     as_shell=$as_dir/$as_base
-	     if { test -f "$as_shell" || test -f "$as_shell.exe"; } &&
-		    { $as_echo "$as_bourne_compatible""$as_required" | as_run=a "$as_shell"; } 2>/dev/null; then :
-  CONFIG_SHELL=$as_shell as_have_required=yes
-		   if { $as_echo "$as_bourne_compatible""$as_suggested" | as_run=a "$as_shell"; } 2>/dev/null; then :
-  break 2
-fi
-fi
-	   done;;
-       esac
-  as_found=false
-done
-$as_found || { if { test -f "$SHELL" || test -f "$SHELL.exe"; } &&
-	      { $as_echo "$as_bourne_compatible""$as_required" | as_run=a "$SHELL"; } 2>/dev/null; then :
-  CONFIG_SHELL=$SHELL as_have_required=yes
-fi; }
-IFS=$as_save_IFS
-
-
-      if test "x$CONFIG_SHELL" != x; then :
-  export CONFIG_SHELL
-             # We cannot yet assume a decent shell, so we have to provide a
-# neutralization value for shells without unset; and this also
-# works around shells that cannot unset nonexistent variables.
-# Preserve -v and -x to the replacement shell.
-BASH_ENV=/dev/null
-ENV=/dev/null
-(unset BASH_ENV) >/dev/null 2>&1 && unset BASH_ENV ENV
-case $- in # ((((
-  *v*x* | *x*v* ) as_opts=-vx ;;
-  *v* ) as_opts=-v ;;
-  *x* ) as_opts=-x ;;
-  * ) as_opts= ;;
-esac
-exec $CONFIG_SHELL $as_opts "$as_myself" ${1+"$@"}
-# Admittedly, this is quite paranoid, since all the known shells bail
-# out after a failed `exec'.
-$as_echo "$0: could not re-execute with $CONFIG_SHELL" >&2
-exit 255
-fi
-
-    if test x$as_have_required = xno; then :
-  $as_echo "$0: This script requires a shell more modern than all"
-  $as_echo "$0: the shells that I found on your system."
-  if test x${ZSH_VERSION+set} = xset ; then
-    $as_echo "$0: In particular, zsh $ZSH_VERSION has bugs and should"
-    $as_echo "$0: be upgraded to zsh 4.3.4 or later."
-  else
-    $as_echo "$0: Please tell bug-autoconf@gnu.org about your system,
-$0: including any error possibly output before this
-$0: message. Then install a modern shell, or manually run
-$0: the script under such a shell if you do have one."
-  fi
-  exit 1
-fi
-fi
-fi
-SHELL=${CONFIG_SHELL-/bin/sh}
-export SHELL
-# Unset more variables known to interfere with behavior of common tools.
-CLICOLOR_FORCE= GREP_OPTIONS=
-unset CLICOLOR_FORCE GREP_OPTIONS
-
-## --------------------- ##
-## M4sh Shell Functions. ##
-## --------------------- ##
-# as_fn_unset VAR
-# ---------------
-# Portably unset VAR.
-as_fn_unset ()
-{
-  { eval $1=; unset $1;}
-}
-as_unset=as_fn_unset
-
-# as_fn_set_status STATUS
-# -----------------------
-# Set $? to STATUS, without forking.
-as_fn_set_status ()
-{
-  return $1
-} # as_fn_set_status
-
-# as_fn_exit STATUS
-# -----------------
-# Exit the shell with STATUS, even in a "trap 0" or "set -e" context.
-as_fn_exit ()
-{
-  set +e
-  as_fn_set_status $1
-  exit $1
-} # as_fn_exit
-
-# as_fn_mkdir_p
-# -------------
-# Create "$as_dir" as a directory, including parents if necessary.
-as_fn_mkdir_p ()
-{
-
-  case $as_dir in #(
-  -*) as_dir=./$as_dir;;
-  esac
-  test -d "$as_dir" || eval $as_mkdir_p || {
-    as_dirs=
-    while :; do
-      case $as_dir in #(
-      *\'*) as_qdir=`$as_echo "$as_dir" | sed "s/'/'\\\\\\\\''/g"`;; #'(
-      *) as_qdir=$as_dir;;
-      esac
-      as_dirs="'$as_qdir' $as_dirs"
-      as_dir=`$as_dirname -- "$as_dir" ||
-$as_expr X"$as_dir" : 'X\(.*[^/]\)//*[^/][^/]*/*$' \| \
-	 X"$as_dir" : 'X\(//\)[^/]' \| \
-	 X"$as_dir" : 'X\(//\)$' \| \
-	 X"$as_dir" : 'X\(/\)' \| . 2>/dev/null ||
-$as_echo X"$as_dir" |
-    sed '/^X\(.*[^/]\)\/\/*[^/][^/]*\/*$/{
-	    s//\1/
-	    q
-	  }
-	  /^X\(\/\/\)[^/].*/{
-	    s//\1/
-	    q
-	  }
-	  /^X\(\/\/\)$/{
-	    s//\1/
-	    q
-	  }
-	  /^X\(\/\).*/{
-	    s//\1/
-	    q
-	  }
-	  s/.*/./; q'`
-      test -d "$as_dir" && break
-    done
-    test -z "$as_dirs" || eval "mkdir $as_dirs"
-  } || test -d "$as_dir" || as_fn_error $? "cannot create directory $as_dir"
-
-
-} # as_fn_mkdir_p
-
-# as_fn_executable_p FILE
-# -----------------------
-# Test if FILE is an executable regular file.
-as_fn_executable_p ()
-{
-  test -f "$1" && test -x "$1"
-} # as_fn_executable_p
-# as_fn_append VAR VALUE
-# ----------------------
-# Append the text in VALUE to the end of the definition contained in VAR. Take
-# advantage of any shell optimizations that allow amortized linear growth over
-# repeated appends, instead of the typical quadratic growth present in naive
-# implementations.
-if (eval "as_var=1; as_var+=2; test x\$as_var = x12") 2>/dev/null; then :
-  eval 'as_fn_append ()
-  {
-    eval $1+=\$2
-  }'
-else
-  as_fn_append ()
-  {
-    eval $1=\$$1\$2
-  }
-fi # as_fn_append
-
-# as_fn_arith ARG...
-# ------------------
-# Perform arithmetic evaluation on the ARGs, and store the result in the
-# global $as_val. Take advantage of shells that can avoid forks. The arguments
-# must be portable across $(()) and expr.
-if (eval "test \$(( 1 + 1 )) = 2") 2>/dev/null; then :
-  eval 'as_fn_arith ()
-  {
-    as_val=$(( $* ))
-  }'
-else
-  as_fn_arith ()
-  {
-    as_val=`expr "$@" || test $? -eq 1`
-  }
-fi # as_fn_arith
-
-
-# as_fn_error STATUS ERROR [LINENO LOG_FD]
-# ----------------------------------------
-# Output "`basename $0`: error: ERROR" to stderr. If LINENO and LOG_FD are
-# provided, also output the error to LOG_FD, referencing LINENO. Then exit the
-# script with STATUS, using 1 if that was 0.
-as_fn_error ()
-{
-  as_status=$1; test $as_status -eq 0 && as_status=1
-  if test "$4"; then
-    as_lineno=${as_lineno-"$3"} as_lineno_stack=as_lineno_stack=$as_lineno_stack
-    $as_echo "$as_me:${as_lineno-$LINENO}: error: $2" >&$4
-  fi
-  $as_echo "$as_me: error: $2" >&2
-  as_fn_exit $as_status
-} # as_fn_error
-
-if expr a : '\(a\)' >/dev/null 2>&1 &&
-   test "X`expr 00001 : '.*\(...\)'`" = X001; then
-  as_expr=expr
-else
-  as_expr=false
-fi
-
-if (basename -- /) >/dev/null 2>&1 && test "X`basename -- / 2>&1`" = "X/"; then
-  as_basename=basename
-else
-  as_basename=false
-fi
-
-if (as_dir=`dirname -- /` && test "X$as_dir" = X/) >/dev/null 2>&1; then
-  as_dirname=dirname
-else
-  as_dirname=false
-fi
-
-as_me=`$as_basename -- "$0" ||
-$as_expr X/"$0" : '.*/\([^/][^/]*\)/*$' \| \
-	 X"$0" : 'X\(//\)$' \| \
-	 X"$0" : 'X\(/\)' \| . 2>/dev/null ||
-$as_echo X/"$0" |
-    sed '/^.*\/\([^/][^/]*\)\/*$/{
-	    s//\1/
-	    q
-	  }
-	  /^X\/\(\/\/\)$/{
-	    s//\1/
-	    q
-	  }
-	  /^X\/\(\/\).*/{
-	    s//\1/
-	    q
-	  }
-	  s/.*/./; q'`
-
-# Avoid depending upon Character Ranges.
-as_cr_letters='abcdefghijklmnopqrstuvwxyz'
-as_cr_LETTERS='ABCDEFGHIJKLMNOPQRSTUVWXYZ'
-as_cr_Letters=$as_cr_letters$as_cr_LETTERS
-as_cr_digits='0123456789'
-as_cr_alnum=$as_cr_Letters$as_cr_digits
-
-
-  as_lineno_1=$LINENO as_lineno_1a=$LINENO
-  as_lineno_2=$LINENO as_lineno_2a=$LINENO
-  eval 'test "x$as_lineno_1'$as_run'" != "x$as_lineno_2'$as_run'" &&
-  test "x`expr $as_lineno_1'$as_run' + 1`" = "x$as_lineno_2'$as_run'"' || {
-  # Blame Lee E. McMahon (1931-1989) for sed's syntax.  :-)
-  sed -n '
-    p
-    /[$]LINENO/=
-  ' <$as_myself |
-    sed '
-      s/[$]LINENO.*/&-/
-      t lineno
-      b
-      :lineno
-      N
-      :loop
-      s/[$]LINENO\([^'$as_cr_alnum'_].*\n\)\(.*\)/\2\1\2/
-      t loop
-      s/-\n.*//
-    ' >$as_me.lineno &&
-  chmod +x "$as_me.lineno" ||
-    { $as_echo "$as_me: error: cannot create $as_me.lineno; rerun with a POSIX shell" >&2; as_fn_exit 1; }
-
-  # If we had to re-execute with $CONFIG_SHELL, we're ensured to have
-  # already done that, so ensure we don't try to do so again and fall
-  # in an infinite loop.  This has already happened in practice.
-  _as_can_reexec=no; export _as_can_reexec
-  # Don't try to exec as it changes $[0], causing all sort of problems
-  # (the dirname of $[0] is not the place where we might find the
-  # original and so on.  Autoconf is especially sensitive to this).
-  . "./$as_me.lineno"
-  # Exit status is that of the last command.
-  exit
-}
-
-ECHO_C= ECHO_N= ECHO_T=
-case `echo -n x` in #(((((
--n*)
-  case `echo 'xy\c'` in
-  *c*) ECHO_T='	';;	# ECHO_T is single tab character.
-  xy)  ECHO_C='\c';;
-  *)   echo `echo ksh88 bug on AIX 6.1` > /dev/null
-       ECHO_T='	';;
-  esac;;
-*)
-  ECHO_N='-n';;
-esac
-
-rm -f conf$$ conf$$.exe conf$$.file
-if test -d conf$$.dir; then
-  rm -f conf$$.dir/conf$$.file
-else
-  rm -f conf$$.dir
-  mkdir conf$$.dir 2>/dev/null
-fi
-if (echo >conf$$.file) 2>/dev/null; then
-  if ln -s conf$$.file conf$$ 2>/dev/null; then
-    as_ln_s='ln -s'
-    # ... but there are two gotchas:
-    # 1) On MSYS, both `ln -s file dir' and `ln file dir' fail.
-    # 2) DJGPP < 2.04 has no symlinks; `ln -s' creates a wrapper executable.
-    # In both cases, we have to default to `cp -pR'.
-    ln -s conf$$.file conf$$.dir 2>/dev/null && test ! -f conf$$.exe ||
-      as_ln_s='cp -pR'
-  elif ln conf$$.file conf$$ 2>/dev/null; then
-    as_ln_s=ln
-  else
-    as_ln_s='cp -pR'
-  fi
-else
-  as_ln_s='cp -pR'
-fi
-rm -f conf$$ conf$$.exe conf$$.dir/conf$$.file conf$$.file
-rmdir conf$$.dir 2>/dev/null
-
-if mkdir -p . 2>/dev/null; then
-  as_mkdir_p='mkdir -p "$as_dir"'
-else
-  test -d ./-p && rmdir ./-p
-  as_mkdir_p=false
-fi
-
-as_test_x='test -x'
-as_executable_p=as_fn_executable_p
-
-# Sed expression to map a string onto a valid CPP name.
-as_tr_cpp="eval sed 'y%*$as_cr_letters%P$as_cr_LETTERS%;s%[^_$as_cr_alnum]%_%g'"
-
-# Sed expression to map a string onto a valid variable name.
-as_tr_sh="eval sed 'y%*+%pp%;s%[^_$as_cr_alnum]%_%g'"
-
-
-test -n "$DJDIR" || exec 7<&0 </dev/null
-exec 6>&1
-
-# Name of the host.
-# hostname on some systems (SVR3.2, old GNU/Linux) returns a bogus exit status,
-# so uname gets run too.
-ac_hostname=`(hostname || uname -n) 2>/dev/null | sed 1q`
-
-#
-# Initializations.
-#
-ac_default_prefix=/usr/local
-ac_clean_files=
-ac_config_libobj_dir=.
-LIBOBJS=
-cross_compiling=no
-subdirs=
-MFLAGS=
-MAKEFLAGS=
-
-# Identity of this package.
-PACKAGE_NAME='dummy'
-PACKAGE_TARNAME='dummy'
-PACKAGE_VERSION='0'
-PACKAGE_STRING='dummy 0'
-PACKAGE_BUGREPORT=''
-PACKAGE_URL=''
-
-# Factoring default headers for most tests.
-ac_includes_default="\
-#include <stdio.h>
-#ifdef HAVE_SYS_TYPES_H
-# include <sys/types.h>
-#endif
-#ifdef HAVE_SYS_STAT_H
-# include <sys/stat.h>
-#endif
-#ifdef STDC_HEADERS
-# include <stdlib.h>
-# include <stddef.h>
-#else
-# ifdef HAVE_STDLIB_H
-#  include <stdlib.h>
-# endif
-#endif
-#ifdef HAVE_STRING_H
-# if !defined STDC_HEADERS && defined HAVE_MEMORY_H
-#  include <memory.h>
-# endif
-# include <string.h>
-#endif
-#ifdef HAVE_STRINGS_H
-# include <strings.h>
-#endif
-#ifdef HAVE_INTTYPES_H
-# include <inttypes.h>
-#endif
-#ifdef HAVE_STDINT_H
-# include <stdint.h>
-#endif
-#ifdef HAVE_UNISTD_H
-# include <unistd.h>
-#endif"
-
-gl_header_list=
-gl_func_list=
-ac_subst_vars='gl_LTLIBOBJS
-gl_LIBOBJS
-am__EXEEXT_FALSE
-am__EXEEXT_TRUE
-LTLIBOBJS
-LIBOBJS
-LIBGNU_LTLIBDEPS
-LIBGNU_LIBDEPS
-REPLACE_TOWLOWER
-REPLACE_ISWCNTRL
-HAVE_WCTYPE_H
-NEXT_AS_FIRST_DIRECTIVE_WCTYPE_H
-NEXT_WCTYPE_H
-HAVE_ISWCNTRL
-REPLACE_ISWBLANK
-HAVE_WCTRANS_T
-HAVE_WCTYPE_T
-HAVE_ISWBLANK
-GNULIB_TOWCTRANS
-GNULIB_WCTRANS
-GNULIB_ISWCTYPE
-GNULIB_WCTYPE
-GNULIB_ISWBLANK
-HAVE_WINT_T
-HAVE_FEATURES_H
-NEXT_AS_FIRST_DIRECTIVE_WCHAR_H
-NEXT_WCHAR_H
-REPLACE_WCSWIDTH
-REPLACE_WCWIDTH
-REPLACE_WCSNRTOMBS
-REPLACE_WCSRTOMBS
-REPLACE_WCRTOMB
-REPLACE_MBSNRTOWCS
-REPLACE_MBSRTOWCS
-REPLACE_MBRLEN
-REPLACE_MBRTOWC
-REPLACE_MBSINIT
-REPLACE_WCTOB
-REPLACE_BTOWC
-REPLACE_MBSTATE_T
-HAVE_DECL_WCWIDTH
-HAVE_DECL_WCTOB
-HAVE_WCSWIDTH
-HAVE_WCSTOK
-HAVE_WCSSTR
-HAVE_WCSPBRK
-HAVE_WCSSPN
-HAVE_WCSCSPN
-HAVE_WCSRCHR
-HAVE_WCSCHR
-HAVE_WCSDUP
-HAVE_WCSXFRM
-HAVE_WCSCOLL
-HAVE_WCSNCASECMP
-HAVE_WCSCASECMP
-HAVE_WCSNCMP
-HAVE_WCSCMP
-HAVE_WCSNCAT
-HAVE_WCSCAT
-HAVE_WCPNCPY
-HAVE_WCSNCPY
-HAVE_WCPCPY
-HAVE_WCSCPY
-HAVE_WCSNLEN
-HAVE_WCSLEN
-HAVE_WMEMSET
-HAVE_WMEMMOVE
-HAVE_WMEMCPY
-HAVE_WMEMCMP
-HAVE_WMEMCHR
-HAVE_WCSNRTOMBS
-HAVE_WCSRTOMBS
-HAVE_WCRTOMB
-HAVE_MBSNRTOWCS
-HAVE_MBSRTOWCS
-HAVE_MBRLEN
-HAVE_MBRTOWC
-HAVE_MBSINIT
-HAVE_BTOWC
-GNULIB_WCSWIDTH
-GNULIB_WCSTOK
-GNULIB_WCSSTR
-GNULIB_WCSPBRK
-GNULIB_WCSSPN
-GNULIB_WCSCSPN
-GNULIB_WCSRCHR
-GNULIB_WCSCHR
-GNULIB_WCSDUP
-GNULIB_WCSXFRM
-GNULIB_WCSCOLL
-GNULIB_WCSNCASECMP
-GNULIB_WCSCASECMP
-GNULIB_WCSNCMP
-GNULIB_WCSCMP
-GNULIB_WCSNCAT
-GNULIB_WCSCAT
-GNULIB_WCPNCPY
-GNULIB_WCSNCPY
-GNULIB_WCPCPY
-GNULIB_WCSCPY
-GNULIB_WCSNLEN
-GNULIB_WCSLEN
-GNULIB_WMEMSET
-GNULIB_WMEMMOVE
-GNULIB_WMEMCPY
-GNULIB_WMEMCMP
-GNULIB_WMEMCHR
-GNULIB_WCWIDTH
-GNULIB_WCSNRTOMBS
-GNULIB_WCSRTOMBS
-GNULIB_WCRTOMB
-GNULIB_MBSNRTOWCS
-GNULIB_MBSRTOWCS
-GNULIB_MBRLEN
-GNULIB_MBRTOWC
-GNULIB_MBSINIT
-GNULIB_WCTOB
-GNULIB_BTOWC
-LIBUNISTRING_COMPILE_UNIWIDTH_WIDTH_FALSE
-LIBUNISTRING_COMPILE_UNIWIDTH_WIDTH_TRUE
-LIBUNISTRING_UNIWIDTH_H
-LIBUNISTRING_UNITYPES_H
-NEXT_AS_FIRST_DIRECTIVE_STDDEF_H
-NEXT_STDDEF_H
-GL_GENERATE_STDDEF_H_FALSE
-GL_GENERATE_STDDEF_H_TRUE
-STDDEF_H
-HAVE_WCHAR_T
-REPLACE_NULL
-HAVE__BOOL
-GL_GENERATE_STDBOOL_H_FALSE
-GL_GENERATE_STDBOOL_H_TRUE
-STDBOOL_H
-LOCALCHARSET_TESTS_ENVIRONMENT
-GLIBC21
-NEXT_AS_FIRST_DIRECTIVE_INTTYPES_H
-NEXT_INTTYPES_H
-UINT64_MAX_EQ_ULONG_MAX
-UINT32_MAX_LT_UINTMAX_MAX
-PRIPTR_PREFIX
-PRI_MACROS_BROKEN
-INT64_MAX_EQ_LONG_MAX
-INT32_MAX_LT_INTMAX_MAX
-REPLACE_STRTOIMAX
-HAVE_DECL_STRTOUMAX
-HAVE_DECL_STRTOIMAX
-HAVE_DECL_IMAXDIV
-HAVE_DECL_IMAXABS
-GNULIB_STRTOUMAX
-GNULIB_STRTOIMAX
-GNULIB_IMAXDIV
-GNULIB_IMAXABS
-GL_GENERATE_STDINT_H_FALSE
-GL_GENERATE_STDINT_H_TRUE
-STDINT_H
-WINT_T_SUFFIX
-WCHAR_T_SUFFIX
-SIG_ATOMIC_T_SUFFIX
-SIZE_T_SUFFIX
-PTRDIFF_T_SUFFIX
-HAVE_SIGNED_WINT_T
-HAVE_SIGNED_WCHAR_T
-HAVE_SIGNED_SIG_ATOMIC_T
-BITSIZEOF_WINT_T
-BITSIZEOF_WCHAR_T
-BITSIZEOF_SIG_ATOMIC_T
-BITSIZEOF_SIZE_T
-BITSIZEOF_PTRDIFF_T
-APPLE_UNIVERSAL_BUILD
-HAVE_SYS_BITYPES_H
-HAVE_SYS_INTTYPES_H
-HAVE_STDINT_H
-NEXT_AS_FIRST_DIRECTIVE_STDINT_H
-NEXT_STDINT_H
-PRAGMA_COLUMNS
-PRAGMA_SYSTEM_HEADER
-INCLUDE_NEXT_AS_FIRST_DIRECTIVE
-INCLUDE_NEXT
-HAVE_SYS_TYPES_H
-HAVE_INTTYPES_H
-HAVE_WCHAR_H
-HAVE_UNSIGNED_LONG_LONG_INT
-HAVE_LONG_LONG_INT
-pkglibexecdir
-runstatedir
-lispdir
-GL_COND_LIBTOOL_FALSE
-GL_COND_LIBTOOL_TRUE
-RANLIB
-ARFLAGS
-AR
-EGREP
-GREP
-CPP
-host_os
-host_vendor
-host_cpu
-host
-build_os
-build_vendor
-build_cpu
-build
-am__fastdepCC_FALSE
-am__fastdepCC_TRUE
-CCDEPMODE
-am__nodep
-AMDEPBACKSLASH
-AMDEP_FALSE
-AMDEP_TRUE
-am__quote
-am__include
-DEPDIR
-OBJEXT
-EXEEXT
-ac_ct_CC
-CPPFLAGS
-LDFLAGS
-CFLAGS
-CC
-AM_BACKSLASH
-AM_DEFAULT_VERBOSITY
-AM_DEFAULT_V
-AM_V
-am__untar
-am__tar
-AMTAR
-am__leading_dot
-SET_MAKE
-AWK
-mkdir_p
-MKDIR_P
-INSTALL_STRIP_PROGRAM
-STRIP
-install_sh
-MAKEINFO
-AUTOHEADER
-AUTOMAKE
-AUTOCONF
-ACLOCAL
-VERSION
-PACKAGE
-CYGPATH_W
-am__isrc
-INSTALL_DATA
-INSTALL_SCRIPT
-INSTALL_PROGRAM
-target_alias
-host_alias
-build_alias
-LIBS
-ECHO_T
-ECHO_N
-ECHO_C
-DEFS
-mandir
-localedir
-libdir
-psdir
-pdfdir
-dvidir
-htmldir
-infodir
-docdir
-oldincludedir
-includedir
-localstatedir
-sharedstatedir
-sysconfdir
-datadir
-datarootdir
-libexecdir
-sbindir
-bindir
-program_transform_name
-prefix
-exec_prefix
-PACKAGE_URL
-PACKAGE_BUGREPORT
-PACKAGE_STRING
-PACKAGE_VERSION
-PACKAGE_TARNAME
-PACKAGE_NAME
-PATH_SEPARATOR
-SHELL'
-ac_subst_files=''
-ac_user_opts='
-enable_option_checking
-enable_silent_rules
-enable_dependency_tracking
-'
-      ac_precious_vars='build_alias
-host_alias
-target_alias
-CC
-CFLAGS
-LDFLAGS
-LIBS
-CPPFLAGS
-CPP'
-
-
-# Initialize some variables set by options.
-ac_init_help=
-ac_init_version=false
-ac_unrecognized_opts=
-ac_unrecognized_sep=
-# The variables have the same names as the options, with
-# dashes changed to underlines.
-cache_file=/dev/null
-exec_prefix=NONE
-no_create=
-no_recursion=
-prefix=NONE
-program_prefix=NONE
-program_suffix=NONE
-program_transform_name=s,x,x,
-silent=
-site=
-srcdir=
-verbose=
-x_includes=NONE
-x_libraries=NONE
-
-# Installation directory options.
-# These are left unexpanded so users can "make install exec_prefix=/foo"
-# and all the variables that are supposed to be based on exec_prefix
-# by default will actually change.
-# Use braces instead of parens because sh, perl, etc. also accept them.
-# (The list follows the same order as the GNU Coding Standards.)
-bindir='${exec_prefix}/bin'
-sbindir='${exec_prefix}/sbin'
-libexecdir='${exec_prefix}/libexec'
-datarootdir='${prefix}/share'
-datadir='${datarootdir}'
-sysconfdir='${prefix}/etc'
-sharedstatedir='${prefix}/com'
-localstatedir='${prefix}/var'
-includedir='${prefix}/include'
-oldincludedir='/usr/include'
-docdir='${datarootdir}/doc/${PACKAGE_TARNAME}'
-infodir='${datarootdir}/info'
-htmldir='${docdir}'
-dvidir='${docdir}'
-pdfdir='${docdir}'
-psdir='${docdir}'
-libdir='${exec_prefix}/lib'
-localedir='${datarootdir}/locale'
-mandir='${datarootdir}/man'
-
-ac_prev=
-ac_dashdash=
-for ac_option
-do
-  # If the previous option needs an argument, assign it.
-  if test -n "$ac_prev"; then
-    eval $ac_prev=\$ac_option
-    ac_prev=
-    continue
-  fi
-
-  case $ac_option in
-  *=?*) ac_optarg=`expr "X$ac_option" : '[^=]*=\(.*\)'` ;;
-  *=)   ac_optarg= ;;
-  *)    ac_optarg=yes ;;
-  esac
-
-  # Accept the important Cygnus configure options, so we can diagnose typos.
-
-  case $ac_dashdash$ac_option in
-  --)
-    ac_dashdash=yes ;;
-
-  -bindir | --bindir | --bindi | --bind | --bin | --bi)
-    ac_prev=bindir ;;
-  -bindir=* | --bindir=* | --bindi=* | --bind=* | --bin=* | --bi=*)
-    bindir=$ac_optarg ;;
-
-  -build | --build | --buil | --bui | --bu)
-    ac_prev=build_alias ;;
-  -build=* | --build=* | --buil=* | --bui=* | --bu=*)
-    build_alias=$ac_optarg ;;
-
-  -cache-file | --cache-file | --cache-fil | --cache-fi \
-  | --cache-f | --cache- | --cache | --cach | --cac | --ca | --c)
-    ac_prev=cache_file ;;
-  -cache-file=* | --cache-file=* | --cache-fil=* | --cache-fi=* \
-  | --cache-f=* | --cache-=* | --cache=* | --cach=* | --cac=* | --ca=* | --c=*)
-    cache_file=$ac_optarg ;;
-
-  --config-cache | -C)
-    cache_file=config.cache ;;
-
-  -datadir | --datadir | --datadi | --datad)
-    ac_prev=datadir ;;
-  -datadir=* | --datadir=* | --datadi=* | --datad=*)
-    datadir=$ac_optarg ;;
-
-  -datarootdir | --datarootdir | --datarootdi | --datarootd | --dataroot \
-  | --dataroo | --dataro | --datar)
-    ac_prev=datarootdir ;;
-  -datarootdir=* | --datarootdir=* | --datarootdi=* | --datarootd=* \
-  | --dataroot=* | --dataroo=* | --dataro=* | --datar=*)
-    datarootdir=$ac_optarg ;;
-
-  -disable-* | --disable-*)
-    ac_useropt=`expr "x$ac_option" : 'x-*disable-\(.*\)'`
-    # Reject names that are not valid shell variable names.
-    expr "x$ac_useropt" : ".*[^-+._$as_cr_alnum]" >/dev/null &&
-      as_fn_error $? "invalid feature name: $ac_useropt"
-    ac_useropt_orig=$ac_useropt
-    ac_useropt=`$as_echo "$ac_useropt" | sed 's/[-+.]/_/g'`
-    case $ac_user_opts in
-      *"
-"enable_$ac_useropt"
-"*) ;;
-      *) ac_unrecognized_opts="$ac_unrecognized_opts$ac_unrecognized_sep--disable-$ac_useropt_orig"
-	 ac_unrecognized_sep=', ';;
-    esac
-    eval enable_$ac_useropt=no ;;
-
-  -docdir | --docdir | --docdi | --doc | --do)
-    ac_prev=docdir ;;
-  -docdir=* | --docdir=* | --docdi=* | --doc=* | --do=*)
-    docdir=$ac_optarg ;;
-
-  -dvidir | --dvidir | --dvidi | --dvid | --dvi | --dv)
-    ac_prev=dvidir ;;
-  -dvidir=* | --dvidir=* | --dvidi=* | --dvid=* | --dvi=* | --dv=*)
-    dvidir=$ac_optarg ;;
-
-  -enable-* | --enable-*)
-    ac_useropt=`expr "x$ac_option" : 'x-*enable-\([^=]*\)'`
-    # Reject names that are not valid shell variable names.
-    expr "x$ac_useropt" : ".*[^-+._$as_cr_alnum]" >/dev/null &&
-      as_fn_error $? "invalid feature name: $ac_useropt"
-    ac_useropt_orig=$ac_useropt
-    ac_useropt=`$as_echo "$ac_useropt" | sed 's/[-+.]/_/g'`
-    case $ac_user_opts in
-      *"
-"enable_$ac_useropt"
-"*) ;;
-      *) ac_unrecognized_opts="$ac_unrecognized_opts$ac_unrecognized_sep--enable-$ac_useropt_orig"
-	 ac_unrecognized_sep=', ';;
-    esac
-    eval enable_$ac_useropt=\$ac_optarg ;;
-
-  -exec-prefix | --exec_prefix | --exec-prefix | --exec-prefi \
-  | --exec-pref | --exec-pre | --exec-pr | --exec-p | --exec- \
-  | --exec | --exe | --ex)
-    ac_prev=exec_prefix ;;
-  -exec-prefix=* | --exec_prefix=* | --exec-prefix=* | --exec-prefi=* \
-  | --exec-pref=* | --exec-pre=* | --exec-pr=* | --exec-p=* | --exec-=* \
-  | --exec=* | --exe=* | --ex=*)
-    exec_prefix=$ac_optarg ;;
-
-  -gas | --gas | --ga | --g)
-    # Obsolete; use --with-gas.
-    with_gas=yes ;;
-
-  -help | --help | --hel | --he | -h)
-    ac_init_help=long ;;
-  -help=r* | --help=r* | --hel=r* | --he=r* | -hr*)
-    ac_init_help=recursive ;;
-  -help=s* | --help=s* | --hel=s* | --he=s* | -hs*)
-    ac_init_help=short ;;
-
-  -host | --host | --hos | --ho)
-    ac_prev=host_alias ;;
-  -host=* | --host=* | --hos=* | --ho=*)
-    host_alias=$ac_optarg ;;
-
-  -htmldir | --htmldir | --htmldi | --htmld | --html | --htm | --ht)
-    ac_prev=htmldir ;;
-  -htmldir=* | --htmldir=* | --htmldi=* | --htmld=* | --html=* | --htm=* \
-  | --ht=*)
-    htmldir=$ac_optarg ;;
-
-  -includedir | --includedir | --includedi | --included | --include \
-  | --includ | --inclu | --incl | --inc)
-    ac_prev=includedir ;;
-  -includedir=* | --includedir=* | --includedi=* | --included=* | --include=* \
-  | --includ=* | --inclu=* | --incl=* | --inc=*)
-    includedir=$ac_optarg ;;
-
-  -infodir | --infodir | --infodi | --infod | --info | --inf)
-    ac_prev=infodir ;;
-  -infodir=* | --infodir=* | --infodi=* | --infod=* | --info=* | --inf=*)
-    infodir=$ac_optarg ;;
-
-  -libdir | --libdir | --libdi | --libd)
-    ac_prev=libdir ;;
-  -libdir=* | --libdir=* | --libdi=* | --libd=*)
-    libdir=$ac_optarg ;;
-
-  -libexecdir | --libexecdir | --libexecdi | --libexecd | --libexec \
-  | --libexe | --libex | --libe)
-    ac_prev=libexecdir ;;
-  -libexecdir=* | --libexecdir=* | --libexecdi=* | --libexecd=* | --libexec=* \
-  | --libexe=* | --libex=* | --libe=*)
-    libexecdir=$ac_optarg ;;
-
-  -localedir | --localedir | --localedi | --localed | --locale)
-    ac_prev=localedir ;;
-  -localedir=* | --localedir=* | --localedi=* | --localed=* | --locale=*)
-    localedir=$ac_optarg ;;
-
-  -localstatedir | --localstatedir | --localstatedi | --localstated \
-  | --localstate | --localstat | --localsta | --localst | --locals)
-    ac_prev=localstatedir ;;
-  -localstatedir=* | --localstatedir=* | --localstatedi=* | --localstated=* \
-  | --localstate=* | --localstat=* | --localsta=* | --localst=* | --locals=*)
-    localstatedir=$ac_optarg ;;
-
-  -mandir | --mandir | --mandi | --mand | --man | --ma | --m)
-    ac_prev=mandir ;;
-  -mandir=* | --mandir=* | --mandi=* | --mand=* | --man=* | --ma=* | --m=*)
-    mandir=$ac_optarg ;;
-
-  -nfp | --nfp | --nf)
-    # Obsolete; use --without-fp.
-    with_fp=no ;;
-
-  -no-create | --no-create | --no-creat | --no-crea | --no-cre \
-  | --no-cr | --no-c | -n)
-    no_create=yes ;;
-
-  -no-recursion | --no-recursion | --no-recursio | --no-recursi \
-  | --no-recurs | --no-recur | --no-recu | --no-rec | --no-re | --no-r)
-    no_recursion=yes ;;
-
-  -oldincludedir | --oldincludedir | --oldincludedi | --oldincluded \
-  | --oldinclude | --oldinclud | --oldinclu | --oldincl | --oldinc \
-  | --oldin | --oldi | --old | --ol | --o)
-    ac_prev=oldincludedir ;;
-  -oldincludedir=* | --oldincludedir=* | --oldincludedi=* | --oldincluded=* \
-  | --oldinclude=* | --oldinclud=* | --oldinclu=* | --oldincl=* | --oldinc=* \
-  | --oldin=* | --oldi=* | --old=* | --ol=* | --o=*)
-    oldincludedir=$ac_optarg ;;
-
-  -prefix | --prefix | --prefi | --pref | --pre | --pr | --p)
-    ac_prev=prefix ;;
-  -prefix=* | --prefix=* | --prefi=* | --pref=* | --pre=* | --pr=* | --p=*)
-    prefix=$ac_optarg ;;
-
-  -program-prefix | --program-prefix | --program-prefi | --program-pref \
-  | --program-pre | --program-pr | --program-p)
-    ac_prev=program_prefix ;;
-  -program-prefix=* | --program-prefix=* | --program-prefi=* \
-  | --program-pref=* | --program-pre=* | --program-pr=* | --program-p=*)
-    program_prefix=$ac_optarg ;;
-
-  -program-suffix | --program-suffix | --program-suffi | --program-suff \
-  | --program-suf | --program-su | --program-s)
-    ac_prev=program_suffix ;;
-  -program-suffix=* | --program-suffix=* | --program-suffi=* \
-  | --program-suff=* | --program-suf=* | --program-su=* | --program-s=*)
-    program_suffix=$ac_optarg ;;
-
-  -program-transform-name | --program-transform-name \
-  | --program-transform-nam | --program-transform-na \
-  | --program-transform-n | --program-transform- \
-  | --program-transform | --program-transfor \
-  | --program-transfo | --program-transf \
-  | --program-trans | --program-tran \
-  | --progr-tra | --program-tr | --program-t)
-    ac_prev=program_transform_name ;;
-  -program-transform-name=* | --program-transform-name=* \
-  | --program-transform-nam=* | --program-transform-na=* \
-  | --program-transform-n=* | --program-transform-=* \
-  | --program-transform=* | --program-transfor=* \
-  | --program-transfo=* | --program-transf=* \
-  | --program-trans=* | --program-tran=* \
-  | --progr-tra=* | --program-tr=* | --program-t=*)
-    program_transform_name=$ac_optarg ;;
-
-  -pdfdir | --pdfdir | --pdfdi | --pdfd | --pdf | --pd)
-    ac_prev=pdfdir ;;
-  -pdfdir=* | --pdfdir=* | --pdfdi=* | --pdfd=* | --pdf=* | --pd=*)
-    pdfdir=$ac_optarg ;;
-
-  -psdir | --psdir | --psdi | --psd | --ps)
-    ac_prev=psdir ;;
-  -psdir=* | --psdir=* | --psdi=* | --psd=* | --ps=*)
-    psdir=$ac_optarg ;;
-
-  -q | -quiet | --quiet | --quie | --qui | --qu | --q \
-  | -silent | --silent | --silen | --sile | --sil)
-    silent=yes ;;
-
-  -sbindir | --sbindir | --sbindi | --sbind | --sbin | --sbi | --sb)
-    ac_prev=sbindir ;;
-  -sbindir=* | --sbindir=* | --sbindi=* | --sbind=* | --sbin=* \
-  | --sbi=* | --sb=*)
-    sbindir=$ac_optarg ;;
-
-  -sharedstatedir | --sharedstatedir | --sharedstatedi \
-  | --sharedstated | --sharedstate | --sharedstat | --sharedsta \
-  | --sharedst | --shareds | --shared | --share | --shar \
-  | --sha | --sh)
-    ac_prev=sharedstatedir ;;
-  -sharedstatedir=* | --sharedstatedir=* | --sharedstatedi=* \
-  | --sharedstated=* | --sharedstate=* | --sharedstat=* | --sharedsta=* \
-  | --sharedst=* | --shareds=* | --shared=* | --share=* | --shar=* \
-  | --sha=* | --sh=*)
-    sharedstatedir=$ac_optarg ;;
-
-  -site | --site | --sit)
-    ac_prev=site ;;
-  -site=* | --site=* | --sit=*)
-    site=$ac_optarg ;;
-
-  -srcdir | --srcdir | --srcdi | --srcd | --src | --sr)
-    ac_prev=srcdir ;;
-  -srcdir=* | --srcdir=* | --srcdi=* | --srcd=* | --src=* | --sr=*)
-    srcdir=$ac_optarg ;;
-
-  -sysconfdir | --sysconfdir | --sysconfdi | --sysconfd | --sysconf \
-  | --syscon | --sysco | --sysc | --sys | --sy)
-    ac_prev=sysconfdir ;;
-  -sysconfdir=* | --sysconfdir=* | --sysconfdi=* | --sysconfd=* | --sysconf=* \
-  | --syscon=* | --sysco=* | --sysc=* | --sys=* | --sy=*)
-    sysconfdir=$ac_optarg ;;
-
-  -target | --target | --targe | --targ | --tar | --ta | --t)
-    ac_prev=target_alias ;;
-  -target=* | --target=* | --targe=* | --targ=* | --tar=* | --ta=* | --t=*)
-    target_alias=$ac_optarg ;;
-
-  -v | -verbose | --verbose | --verbos | --verbo | --verb)
-    verbose=yes ;;
-
-  -version | --version | --versio | --versi | --vers | -V)
-    ac_init_version=: ;;
-
-  -with-* | --with-*)
-    ac_useropt=`expr "x$ac_option" : 'x-*with-\([^=]*\)'`
-    # Reject names that are not valid shell variable names.
-    expr "x$ac_useropt" : ".*[^-+._$as_cr_alnum]" >/dev/null &&
-      as_fn_error $? "invalid package name: $ac_useropt"
-    ac_useropt_orig=$ac_useropt
-    ac_useropt=`$as_echo "$ac_useropt" | sed 's/[-+.]/_/g'`
-    case $ac_user_opts in
-      *"
-"with_$ac_useropt"
-"*) ;;
-      *) ac_unrecognized_opts="$ac_unrecognized_opts$ac_unrecognized_sep--with-$ac_useropt_orig"
-	 ac_unrecognized_sep=', ';;
-    esac
-    eval with_$ac_useropt=\$ac_optarg ;;
-
-  -without-* | --without-*)
-    ac_useropt=`expr "x$ac_option" : 'x-*without-\(.*\)'`
-    # Reject names that are not valid shell variable names.
-    expr "x$ac_useropt" : ".*[^-+._$as_cr_alnum]" >/dev/null &&
-      as_fn_error $? "invalid package name: $ac_useropt"
-    ac_useropt_orig=$ac_useropt
-    ac_useropt=`$as_echo "$ac_useropt" | sed 's/[-+.]/_/g'`
-    case $ac_user_opts in
-      *"
-"with_$ac_useropt"
-"*) ;;
-      *) ac_unrecognized_opts="$ac_unrecognized_opts$ac_unrecognized_sep--without-$ac_useropt_orig"
-	 ac_unrecognized_sep=', ';;
-    esac
-    eval with_$ac_useropt=no ;;
-
-  --x)
-    # Obsolete; use --with-x.
-    with_x=yes ;;
-
-  -x-includes | --x-includes | --x-include | --x-includ | --x-inclu \
-  | --x-incl | --x-inc | --x-in | --x-i)
-    ac_prev=x_includes ;;
-  -x-includes=* | --x-includes=* | --x-include=* | --x-includ=* | --x-inclu=* \
-  | --x-incl=* | --x-inc=* | --x-in=* | --x-i=*)
-    x_includes=$ac_optarg ;;
-
-  -x-libraries | --x-libraries | --x-librarie | --x-librari \
-  | --x-librar | --x-libra | --x-libr | --x-lib | --x-li | --x-l)
-    ac_prev=x_libraries ;;
-  -x-libraries=* | --x-libraries=* | --x-librarie=* | --x-librari=* \
-  | --x-librar=* | --x-libra=* | --x-libr=* | --x-lib=* | --x-li=* | --x-l=*)
-    x_libraries=$ac_optarg ;;
-
-  -*) as_fn_error $? "unrecognized option: \`$ac_option'
-Try \`$0 --help' for more information"
-    ;;
-
-  *=*)
-    ac_envvar=`expr "x$ac_option" : 'x\([^=]*\)='`
-    # Reject names that are not valid shell variable names.
-    case $ac_envvar in #(
-      '' | [0-9]* | *[!_$as_cr_alnum]* )
-      as_fn_error $? "invalid variable name: \`$ac_envvar'" ;;
-    esac
-    eval $ac_envvar=\$ac_optarg
-    export $ac_envvar ;;
-
-  *)
-    # FIXME: should be removed in autoconf 3.0.
-    $as_echo "$as_me: WARNING: you should use --build, --host, --target" >&2
-    expr "x$ac_option" : ".*[^-._$as_cr_alnum]" >/dev/null &&
-      $as_echo "$as_me: WARNING: invalid host type: $ac_option" >&2
-    : "${build_alias=$ac_option} ${host_alias=$ac_option} ${target_alias=$ac_option}"
-    ;;
-
-  esac
-done
-
-if test -n "$ac_prev"; then
-  ac_option=--`echo $ac_prev | sed 's/_/-/g'`
-  as_fn_error $? "missing argument to $ac_option"
-fi
-
-if test -n "$ac_unrecognized_opts"; then
-  case $enable_option_checking in
-    no) ;;
-    fatal) as_fn_error $? "unrecognized options: $ac_unrecognized_opts" ;;
-    *)     $as_echo "$as_me: WARNING: unrecognized options: $ac_unrecognized_opts" >&2 ;;
-  esac
-fi
-
-# Check all directory arguments for consistency.
-for ac_var in	exec_prefix prefix bindir sbindir libexecdir datarootdir \
-		datadir sysconfdir sharedstatedir localstatedir includedir \
-		oldincludedir docdir infodir htmldir dvidir pdfdir psdir \
-		libdir localedir mandir
-do
-  eval ac_val=\$$ac_var
-  # Remove trailing slashes.
-  case $ac_val in
-    */ )
-      ac_val=`expr "X$ac_val" : 'X\(.*[^/]\)' \| "X$ac_val" : 'X\(.*\)'`
-      eval $ac_var=\$ac_val;;
-  esac
-  # Be sure to have absolute directory names.
-  case $ac_val in
-    [\\/$]* | ?:[\\/]* )  continue;;
-    NONE | '' ) case $ac_var in *prefix ) continue;; esac;;
-  esac
-  as_fn_error $? "expected an absolute directory name for --$ac_var: $ac_val"
-done
-
-# There might be people who depend on the old broken behavior: `$host'
-# used to hold the argument of --host etc.
-# FIXME: To remove some day.
-build=$build_alias
-host=$host_alias
-target=$target_alias
-
-# FIXME: To remove some day.
-if test "x$host_alias" != x; then
-  if test "x$build_alias" = x; then
-    cross_compiling=maybe
-  elif test "x$build_alias" != "x$host_alias"; then
-    cross_compiling=yes
-  fi
-fi
-
-ac_tool_prefix=
-test -n "$host_alias" && ac_tool_prefix=$host_alias-
-
-test "$silent" = yes && exec 6>/dev/null
-
-
-ac_pwd=`pwd` && test -n "$ac_pwd" &&
-ac_ls_di=`ls -di .` &&
-ac_pwd_ls_di=`cd "$ac_pwd" && ls -di .` ||
-  as_fn_error $? "working directory cannot be determined"
-test "X$ac_ls_di" = "X$ac_pwd_ls_di" ||
-  as_fn_error $? "pwd does not report name of working directory"
-
-
-# Find the source files, if location was not specified.
-if test -z "$srcdir"; then
-  ac_srcdir_defaulted=yes
-  # Try the directory containing this script, then the parent directory.
-  ac_confdir=`$as_dirname -- "$as_myself" ||
-$as_expr X"$as_myself" : 'X\(.*[^/]\)//*[^/][^/]*/*$' \| \
-	 X"$as_myself" : 'X\(//\)[^/]' \| \
-	 X"$as_myself" : 'X\(//\)$' \| \
-	 X"$as_myself" : 'X\(/\)' \| . 2>/dev/null ||
-$as_echo X"$as_myself" |
-    sed '/^X\(.*[^/]\)\/\/*[^/][^/]*\/*$/{
-	    s//\1/
-	    q
-	  }
-	  /^X\(\/\/\)[^/].*/{
-	    s//\1/
-	    q
-	  }
-	  /^X\(\/\/\)$/{
-	    s//\1/
-	    q
-	  }
-	  /^X\(\/\).*/{
-	    s//\1/
-	    q
-	  }
-	  s/.*/./; q'`
-  srcdir=$ac_confdir
-  if test ! -r "$srcdir/$ac_unique_file"; then
-    srcdir=..
-  fi
-else
-  ac_srcdir_defaulted=no
-fi
-if test ! -r "$srcdir/$ac_unique_file"; then
-  test "$ac_srcdir_defaulted" = yes && srcdir="$ac_confdir or .."
-  as_fn_error $? "cannot find sources ($ac_unique_file) in $srcdir"
-fi
-ac_msg="sources are in $srcdir, but \`cd $srcdir' does not work"
-ac_abs_confdir=`(
-	cd "$srcdir" && test -r "./$ac_unique_file" || as_fn_error $? "$ac_msg"
-	pwd)`
-# When building in place, set srcdir=.
-if test "$ac_abs_confdir" = "$ac_pwd"; then
-  srcdir=.
-fi
-# Remove unnecessary trailing slashes from srcdir.
-# Double slashes in file names in object file debugging info
-# mess up M-x gdb in Emacs.
-case $srcdir in
-*/) srcdir=`expr "X$srcdir" : 'X\(.*[^/]\)' \| "X$srcdir" : 'X\(.*\)'`;;
-esac
-for ac_var in $ac_precious_vars; do
-  eval ac_env_${ac_var}_set=\${${ac_var}+set}
-  eval ac_env_${ac_var}_value=\$${ac_var}
-  eval ac_cv_env_${ac_var}_set=\${${ac_var}+set}
-  eval ac_cv_env_${ac_var}_value=\$${ac_var}
-done
-
-#
-# Report the --help message.
-#
-if test "$ac_init_help" = "long"; then
-  # Omit some internal or obsolete options to make the list less imposing.
-  # This message is too long to be a string in the A/UX 3.1 sh.
-  cat <<_ACEOF
-\`configure' configures dummy 0 to adapt to many kinds of systems.
-
-Usage: $0 [OPTION]... [VAR=VALUE]...
-
-To assign environment variables (e.g., CC, CFLAGS...), specify them as
-VAR=VALUE.  See below for descriptions of some of the useful variables.
-
-Defaults for the options are specified in brackets.
-
-Configuration:
-  -h, --help              display this help and exit
-      --help=short        display options specific to this package
-      --help=recursive    display the short help of all the included packages
-  -V, --version           display version information and exit
-  -q, --quiet, --silent   do not print \`checking ...' messages
-      --cache-file=FILE   cache test results in FILE [disabled]
-  -C, --config-cache      alias for \`--cache-file=config.cache'
-  -n, --no-create         do not create output files
-      --srcdir=DIR        find the sources in DIR [configure dir or \`..']
-
-Installation directories:
-  --prefix=PREFIX         install architecture-independent files in PREFIX
-                          [$ac_default_prefix]
-  --exec-prefix=EPREFIX   install architecture-dependent files in EPREFIX
-                          [PREFIX]
-
-By default, \`make install' will install all the files in
-\`$ac_default_prefix/bin', \`$ac_default_prefix/lib' etc.  You can specify
-an installation prefix other than \`$ac_default_prefix' using \`--prefix',
-for instance \`--prefix=\$HOME'.
-
-For better control, use the options below.
-
-Fine tuning of the installation directories:
-  --bindir=DIR            user executables [EPREFIX/bin]
-  --sbindir=DIR           system admin executables [EPREFIX/sbin]
-  --libexecdir=DIR        program executables [EPREFIX/libexec]
-  --sysconfdir=DIR        read-only single-machine data [PREFIX/etc]
-  --sharedstatedir=DIR    modifiable architecture-independent data [PREFIX/com]
-  --localstatedir=DIR     modifiable single-machine data [PREFIX/var]
-  --libdir=DIR            object code libraries [EPREFIX/lib]
-  --includedir=DIR        C header files [PREFIX/include]
-  --oldincludedir=DIR     C header files for non-gcc [/usr/include]
-  --datarootdir=DIR       read-only arch.-independent data root [PREFIX/share]
-  --datadir=DIR           read-only architecture-independent data [DATAROOTDIR]
-  --infodir=DIR           info documentation [DATAROOTDIR/info]
-  --localedir=DIR         locale-dependent data [DATAROOTDIR/locale]
-  --mandir=DIR            man documentation [DATAROOTDIR/man]
-  --docdir=DIR            documentation root [DATAROOTDIR/doc/dummy]
-  --htmldir=DIR           html documentation [DOCDIR]
-  --dvidir=DIR            dvi documentation [DOCDIR]
-  --pdfdir=DIR            pdf documentation [DOCDIR]
-  --psdir=DIR             ps documentation [DOCDIR]
-_ACEOF
-
-  cat <<\_ACEOF
-
-Program names:
-  --program-prefix=PREFIX            prepend PREFIX to installed program names
-  --program-suffix=SUFFIX            append SUFFIX to installed program names
-  --program-transform-name=PROGRAM   run sed PROGRAM on installed program names
-
-System types:
-  --build=BUILD     configure for building on BUILD [guessed]
-  --host=HOST       cross-compile to build programs to run on HOST [BUILD]
-_ACEOF
-fi
-
-if test -n "$ac_init_help"; then
-  case $ac_init_help in
-     short | recursive ) echo "Configuration of dummy 0:";;
-   esac
-  cat <<\_ACEOF
-
-Optional Features:
-  --disable-option-checking  ignore unrecognized --enable/--with options
-  --disable-FEATURE       do not include FEATURE (same as --enable-FEATURE=no)
-  --enable-FEATURE[=ARG]  include FEATURE [ARG=yes]
-  --enable-silent-rules   less verbose build output (undo: "make V=1")
-  --disable-silent-rules  verbose build output (undo: "make V=0")
-  --enable-dependency-tracking
-                          do not reject slow dependency extractors
-  --disable-dependency-tracking
-                          speeds up one-time build
-
-Some influential environment variables:
-  CC          C compiler command
-  CFLAGS      C compiler flags
-  LDFLAGS     linker flags, e.g. -L<lib dir> if you have libraries in a
-              nonstandard directory <lib dir>
-  LIBS        libraries to pass to the linker, e.g. -l<library>
-  CPPFLAGS    (Objective) C/C++ preprocessor flags, e.g. -I<include dir> if
-              you have headers in a nonstandard directory <include dir>
-  CPP         C preprocessor
-
-Use these variables to override the choices made by `configure' or to help
-it to find libraries and programs with nonstandard names/locations.
-
-Report bugs to the package provider.
-_ACEOF
-ac_status=$?
-fi
-
-if test "$ac_init_help" = "recursive"; then
-  # If there are subdirs, report their specific --help.
-  for ac_dir in : $ac_subdirs_all; do test "x$ac_dir" = x: && continue
-    test -d "$ac_dir" ||
-      { cd "$srcdir" && ac_pwd=`pwd` && srcdir=. && test -d "$ac_dir"; } ||
-      continue
-    ac_builddir=.
-
-case "$ac_dir" in
-.) ac_dir_suffix= ac_top_builddir_sub=. ac_top_build_prefix= ;;
-*)
-  ac_dir_suffix=/`$as_echo "$ac_dir" | sed 's|^\.[\\/]||'`
-  # A ".." for each directory in $ac_dir_suffix.
-  ac_top_builddir_sub=`$as_echo "$ac_dir_suffix" | sed 's|/[^\\/]*|/..|g;s|/||'`
-  case $ac_top_builddir_sub in
-  "") ac_top_builddir_sub=. ac_top_build_prefix= ;;
-  *)  ac_top_build_prefix=$ac_top_builddir_sub/ ;;
-  esac ;;
-esac
-ac_abs_top_builddir=$ac_pwd
-ac_abs_builddir=$ac_pwd$ac_dir_suffix
-# for backward compatibility:
-ac_top_builddir=$ac_top_build_prefix
-
-case $srcdir in
-  .)  # We are building in place.
-    ac_srcdir=.
-    ac_top_srcdir=$ac_top_builddir_sub
-    ac_abs_top_srcdir=$ac_pwd ;;
-  [\\/]* | ?:[\\/]* )  # Absolute name.
-    ac_srcdir=$srcdir$ac_dir_suffix;
-    ac_top_srcdir=$srcdir
-    ac_abs_top_srcdir=$srcdir ;;
-  *) # Relative name.
-    ac_srcdir=$ac_top_build_prefix$srcdir$ac_dir_suffix
-    ac_top_srcdir=$ac_top_build_prefix$srcdir
-    ac_abs_top_srcdir=$ac_pwd/$srcdir ;;
-esac
-ac_abs_srcdir=$ac_abs_top_srcdir$ac_dir_suffix
-
-    cd "$ac_dir" || { ac_status=$?; continue; }
-    # Check for guested configure.
-    if test -f "$ac_srcdir/configure.gnu"; then
-      echo &&
-      $SHELL "$ac_srcdir/configure.gnu" --help=recursive
-    elif test -f "$ac_srcdir/configure"; then
-      echo &&
-      $SHELL "$ac_srcdir/configure" --help=recursive
-    else
-      $as_echo "$as_me: WARNING: no configuration information is in $ac_dir" >&2
-    fi || ac_status=$?
-    cd "$ac_pwd" || { ac_status=$?; break; }
-  done
-fi
-
-test -n "$ac_init_help" && exit $ac_status
-if $ac_init_version; then
-  cat <<\_ACEOF
-dummy configure 0
-generated by GNU Autoconf 2.69
-
-Copyright (C) 2012 Free Software Foundation, Inc.
-This configure script is free software; the Free Software Foundation
-gives unlimited permission to copy, distribute and modify it.
-_ACEOF
-  exit
-fi
-
-## ------------------------ ##
-## Autoconf initialization. ##
-## ------------------------ ##
-
-# ac_fn_c_try_compile LINENO
-# --------------------------
-# Try to compile conftest.$ac_ext, and return whether this succeeded.
-ac_fn_c_try_compile ()
-{
-  as_lineno=${as_lineno-"$1"} as_lineno_stack=as_lineno_stack=$as_lineno_stack
-  rm -f conftest.$ac_objext
-  if { { ac_try="$ac_compile"
-case "(($ac_try" in
-  *\"* | *\`* | *\\*) ac_try_echo=\$ac_try;;
-  *) ac_try_echo=$ac_try;;
-esac
-eval ac_try_echo="\"\$as_me:${as_lineno-$LINENO}: $ac_try_echo\""
-$as_echo "$ac_try_echo"; } >&5
-  (eval "$ac_compile") 2>conftest.err
-  ac_status=$?
-  if test -s conftest.err; then
-    grep -v '^ *+' conftest.err >conftest.er1
-    cat conftest.er1 >&5
-    mv -f conftest.er1 conftest.err
-  fi
-  $as_echo "$as_me:${as_lineno-$LINENO}: \$? = $ac_status" >&5
-  test $ac_status = 0; } && {
-	 test -z "$ac_c_werror_flag" ||
-	 test ! -s conftest.err
-       } && test -s conftest.$ac_objext; then :
-  ac_retval=0
-else
-  $as_echo "$as_me: failed program was:" >&5
-sed 's/^/| /' conftest.$ac_ext >&5
-
-	ac_retval=1
-fi
-  eval $as_lineno_stack; ${as_lineno_stack:+:} unset as_lineno
-  as_fn_set_status $ac_retval
-
-} # ac_fn_c_try_compile
-
-# ac_fn_c_try_cpp LINENO
-# ----------------------
-# Try to preprocess conftest.$ac_ext, and return whether this succeeded.
-ac_fn_c_try_cpp ()
-{
-  as_lineno=${as_lineno-"$1"} as_lineno_stack=as_lineno_stack=$as_lineno_stack
-  if { { ac_try="$ac_cpp conftest.$ac_ext"
-case "(($ac_try" in
-  *\"* | *\`* | *\\*) ac_try_echo=\$ac_try;;
-  *) ac_try_echo=$ac_try;;
-esac
-eval ac_try_echo="\"\$as_me:${as_lineno-$LINENO}: $ac_try_echo\""
-$as_echo "$ac_try_echo"; } >&5
-  (eval "$ac_cpp conftest.$ac_ext") 2>conftest.err
-  ac_status=$?
-  if test -s conftest.err; then
-    grep -v '^ *+' conftest.err >conftest.er1
-    cat conftest.er1 >&5
-    mv -f conftest.er1 conftest.err
-  fi
-  $as_echo "$as_me:${as_lineno-$LINENO}: \$? = $ac_status" >&5
-  test $ac_status = 0; } > conftest.i && {
-	 test -z "$ac_c_preproc_warn_flag$ac_c_werror_flag" ||
-	 test ! -s conftest.err
-       }; then :
-  ac_retval=0
-else
-  $as_echo "$as_me: failed program was:" >&5
-sed 's/^/| /' conftest.$ac_ext >&5
-
-    ac_retval=1
-fi
-  eval $as_lineno_stack; ${as_lineno_stack:+:} unset as_lineno
-  as_fn_set_status $ac_retval
-
-} # ac_fn_c_try_cpp
-
-# ac_fn_c_check_header_mongrel LINENO HEADER VAR INCLUDES
-# -------------------------------------------------------
-# Tests whether HEADER exists, giving a warning if it cannot be compiled using
-# the include files in INCLUDES and setting the cache variable VAR
-# accordingly.
-ac_fn_c_check_header_mongrel ()
-{
-  as_lineno=${as_lineno-"$1"} as_lineno_stack=as_lineno_stack=$as_lineno_stack
-  if eval \${$3+:} false; then :
-  { $as_echo "$as_me:${as_lineno-$LINENO}: checking for $2" >&5
-$as_echo_n "checking for $2... " >&6; }
-if eval \${$3+:} false; then :
-  $as_echo_n "(cached) " >&6
-fi
-eval ac_res=\$$3
-	       { $as_echo "$as_me:${as_lineno-$LINENO}: result: $ac_res" >&5
-$as_echo "$ac_res" >&6; }
-else
-  # Is the header compilable?
-{ $as_echo "$as_me:${as_lineno-$LINENO}: checking $2 usability" >&5
-$as_echo_n "checking $2 usability... " >&6; }
-cat confdefs.h - <<_ACEOF >conftest.$ac_ext
-/* end confdefs.h.  */
-$4
-#include <$2>
-_ACEOF
-if ac_fn_c_try_compile "$LINENO"; then :
-  ac_header_compiler=yes
-else
-  ac_header_compiler=no
-fi
-rm -f core conftest.err conftest.$ac_objext conftest.$ac_ext
-{ $as_echo "$as_me:${as_lineno-$LINENO}: result: $ac_header_compiler" >&5
-$as_echo "$ac_header_compiler" >&6; }
-
-# Is the header present?
-{ $as_echo "$as_me:${as_lineno-$LINENO}: checking $2 presence" >&5
-$as_echo_n "checking $2 presence... " >&6; }
-cat confdefs.h - <<_ACEOF >conftest.$ac_ext
-/* end confdefs.h.  */
-#include <$2>
-_ACEOF
-if ac_fn_c_try_cpp "$LINENO"; then :
-  ac_header_preproc=yes
-else
-  ac_header_preproc=no
-fi
-rm -f conftest.err conftest.i conftest.$ac_ext
-{ $as_echo "$as_me:${as_lineno-$LINENO}: result: $ac_header_preproc" >&5
-$as_echo "$ac_header_preproc" >&6; }
-
-# So?  What about this header?
-case $ac_header_compiler:$ac_header_preproc:$ac_c_preproc_warn_flag in #((
-  yes:no: )
-    { $as_echo "$as_me:${as_lineno-$LINENO}: WARNING: $2: accepted by the compiler, rejected by the preprocessor!" >&5
-$as_echo "$as_me: WARNING: $2: accepted by the compiler, rejected by the preprocessor!" >&2;}
-    { $as_echo "$as_me:${as_lineno-$LINENO}: WARNING: $2: proceeding with the compiler's result" >&5
-$as_echo "$as_me: WARNING: $2: proceeding with the compiler's result" >&2;}
-    ;;
-  no:yes:* )
-    { $as_echo "$as_me:${as_lineno-$LINENO}: WARNING: $2: present but cannot be compiled" >&5
-$as_echo "$as_me: WARNING: $2: present but cannot be compiled" >&2;}
-    { $as_echo "$as_me:${as_lineno-$LINENO}: WARNING: $2:     check for missing prerequisite headers?" >&5
-$as_echo "$as_me: WARNING: $2:     check for missing prerequisite headers?" >&2;}
-    { $as_echo "$as_me:${as_lineno-$LINENO}: WARNING: $2: see the Autoconf documentation" >&5
-$as_echo "$as_me: WARNING: $2: see the Autoconf documentation" >&2;}
-    { $as_echo "$as_me:${as_lineno-$LINENO}: WARNING: $2:     section \"Present But Cannot Be Compiled\"" >&5
-$as_echo "$as_me: WARNING: $2:     section \"Present But Cannot Be Compiled\"" >&2;}
-    { $as_echo "$as_me:${as_lineno-$LINENO}: WARNING: $2: proceeding with the compiler's result" >&5
-$as_echo "$as_me: WARNING: $2: proceeding with the compiler's result" >&2;}
-    ;;
-esac
-  { $as_echo "$as_me:${as_lineno-$LINENO}: checking for $2" >&5
-$as_echo_n "checking for $2... " >&6; }
-if eval \${$3+:} false; then :
-  $as_echo_n "(cached) " >&6
-else
-  eval "$3=\$ac_header_compiler"
-fi
-eval ac_res=\$$3
-	       { $as_echo "$as_me:${as_lineno-$LINENO}: result: $ac_res" >&5
-$as_echo "$ac_res" >&6; }
-fi
-  eval $as_lineno_stack; ${as_lineno_stack:+:} unset as_lineno
-
-} # ac_fn_c_check_header_mongrel
-
-# ac_fn_c_try_run LINENO
-# ----------------------
-# Try to link conftest.$ac_ext, and return whether this succeeded. Assumes
-# that executables *can* be run.
-ac_fn_c_try_run ()
-{
-  as_lineno=${as_lineno-"$1"} as_lineno_stack=as_lineno_stack=$as_lineno_stack
-  if { { ac_try="$ac_link"
-case "(($ac_try" in
-  *\"* | *\`* | *\\*) ac_try_echo=\$ac_try;;
-  *) ac_try_echo=$ac_try;;
-esac
-eval ac_try_echo="\"\$as_me:${as_lineno-$LINENO}: $ac_try_echo\""
-$as_echo "$ac_try_echo"; } >&5
-  (eval "$ac_link") 2>&5
-  ac_status=$?
-  $as_echo "$as_me:${as_lineno-$LINENO}: \$? = $ac_status" >&5
-  test $ac_status = 0; } && { ac_try='./conftest$ac_exeext'
-  { { case "(($ac_try" in
-  *\"* | *\`* | *\\*) ac_try_echo=\$ac_try;;
-  *) ac_try_echo=$ac_try;;
-esac
-eval ac_try_echo="\"\$as_me:${as_lineno-$LINENO}: $ac_try_echo\""
-$as_echo "$ac_try_echo"; } >&5
-  (eval "$ac_try") 2>&5
-  ac_status=$?
-  $as_echo "$as_me:${as_lineno-$LINENO}: \$? = $ac_status" >&5
-  test $ac_status = 0; }; }; then :
-  ac_retval=0
-else
-  $as_echo "$as_me: program exited with status $ac_status" >&5
-       $as_echo "$as_me: failed program was:" >&5
-sed 's/^/| /' conftest.$ac_ext >&5
-
-       ac_retval=$ac_status
-fi
-  rm -rf conftest.dSYM conftest_ipa8_conftest.oo
-  eval $as_lineno_stack; ${as_lineno_stack:+:} unset as_lineno
-  as_fn_set_status $ac_retval
-
-} # ac_fn_c_try_run
-
-# ac_fn_c_check_header_compile LINENO HEADER VAR INCLUDES
-# -------------------------------------------------------
-# Tests whether HEADER exists and can be compiled using the include files in
-# INCLUDES, setting the cache variable VAR accordingly.
-ac_fn_c_check_header_compile ()
-{
-  as_lineno=${as_lineno-"$1"} as_lineno_stack=as_lineno_stack=$as_lineno_stack
-  { $as_echo "$as_me:${as_lineno-$LINENO}: checking for $2" >&5
-$as_echo_n "checking for $2... " >&6; }
-if eval \${$3+:} false; then :
-  $as_echo_n "(cached) " >&6
-else
-  cat confdefs.h - <<_ACEOF >conftest.$ac_ext
-/* end confdefs.h.  */
-$4
-#include <$2>
-_ACEOF
-if ac_fn_c_try_compile "$LINENO"; then :
-  eval "$3=yes"
-else
-  eval "$3=no"
-fi
-rm -f core conftest.err conftest.$ac_objext conftest.$ac_ext
-fi
-eval ac_res=\$$3
-	       { $as_echo "$as_me:${as_lineno-$LINENO}: result: $ac_res" >&5
-$as_echo "$ac_res" >&6; }
-  eval $as_lineno_stack; ${as_lineno_stack:+:} unset as_lineno
-
-} # ac_fn_c_check_header_compile
-
-# ac_fn_c_try_link LINENO
-# -----------------------
-# Try to link conftest.$ac_ext, and return whether this succeeded.
-ac_fn_c_try_link ()
-{
-  as_lineno=${as_lineno-"$1"} as_lineno_stack=as_lineno_stack=$as_lineno_stack
-  rm -f conftest.$ac_objext conftest$ac_exeext
-  if { { ac_try="$ac_link"
-case "(($ac_try" in
-  *\"* | *\`* | *\\*) ac_try_echo=\$ac_try;;
-  *) ac_try_echo=$ac_try;;
-esac
-eval ac_try_echo="\"\$as_me:${as_lineno-$LINENO}: $ac_try_echo\""
-$as_echo "$ac_try_echo"; } >&5
-  (eval "$ac_link") 2>conftest.err
-  ac_status=$?
-  if test -s conftest.err; then
-    grep -v '^ *+' conftest.err >conftest.er1
-    cat conftest.er1 >&5
-    mv -f conftest.er1 conftest.err
-  fi
-  $as_echo "$as_me:${as_lineno-$LINENO}: \$? = $ac_status" >&5
-  test $ac_status = 0; } && {
-	 test -z "$ac_c_werror_flag" ||
-	 test ! -s conftest.err
-       } && test -s conftest$ac_exeext && {
-	 test "$cross_compiling" = yes ||
-	 test -x conftest$ac_exeext
-       }; then :
-  ac_retval=0
-else
-  $as_echo "$as_me: failed program was:" >&5
-sed 's/^/| /' conftest.$ac_ext >&5
-
-	ac_retval=1
-fi
-  # Delete the IPA/IPO (Inter Procedural Analysis/Optimization) information
-  # created by the PGI compiler (conftest_ipa8_conftest.oo), as it would
-  # interfere with the next link command; also delete a directory that is
-  # left behind by Apple's compiler.  We do this before executing the actions.
-  rm -rf conftest.dSYM conftest_ipa8_conftest.oo
-  eval $as_lineno_stack; ${as_lineno_stack:+:} unset as_lineno
-  as_fn_set_status $ac_retval
-
-} # ac_fn_c_try_link
-
-# ac_fn_c_compute_int LINENO EXPR VAR INCLUDES
-# --------------------------------------------
-# Tries to find the compile-time value of EXPR in a program that includes
-# INCLUDES, setting VAR accordingly. Returns whether the value could be
-# computed
-ac_fn_c_compute_int ()
-{
-  as_lineno=${as_lineno-"$1"} as_lineno_stack=as_lineno_stack=$as_lineno_stack
-  if test "$cross_compiling" = yes; then
-    # Depending upon the size, compute the lo and hi bounds.
-cat confdefs.h - <<_ACEOF >conftest.$ac_ext
-/* end confdefs.h.  */
-$4
-int
-main ()
-{
-static int test_array [1 - 2 * !(($2) >= 0)];
-test_array [0] = 0;
-return test_array [0];
-
-  ;
-  return 0;
-}
-_ACEOF
-if ac_fn_c_try_compile "$LINENO"; then :
-  ac_lo=0 ac_mid=0
-  while :; do
-    cat confdefs.h - <<_ACEOF >conftest.$ac_ext
-/* end confdefs.h.  */
-$4
-int
-main ()
-{
-static int test_array [1 - 2 * !(($2) <= $ac_mid)];
-test_array [0] = 0;
-return test_array [0];
-
-  ;
-  return 0;
-}
-_ACEOF
-if ac_fn_c_try_compile "$LINENO"; then :
-  ac_hi=$ac_mid; break
-else
-  as_fn_arith $ac_mid + 1 && ac_lo=$as_val
-			if test $ac_lo -le $ac_mid; then
-			  ac_lo= ac_hi=
-			  break
-			fi
-			as_fn_arith 2 '*' $ac_mid + 1 && ac_mid=$as_val
-fi
-rm -f core conftest.err conftest.$ac_objext conftest.$ac_ext
-  done
-else
-  cat confdefs.h - <<_ACEOF >conftest.$ac_ext
-/* end confdefs.h.  */
-$4
-int
-main ()
-{
-static int test_array [1 - 2 * !(($2) < 0)];
-test_array [0] = 0;
-return test_array [0];
-
-  ;
-  return 0;
-}
-_ACEOF
-if ac_fn_c_try_compile "$LINENO"; then :
-  ac_hi=-1 ac_mid=-1
-  while :; do
-    cat confdefs.h - <<_ACEOF >conftest.$ac_ext
-/* end confdefs.h.  */
-$4
-int
-main ()
-{
-static int test_array [1 - 2 * !(($2) >= $ac_mid)];
-test_array [0] = 0;
-return test_array [0];
-
-  ;
-  return 0;
-}
-_ACEOF
-if ac_fn_c_try_compile "$LINENO"; then :
-  ac_lo=$ac_mid; break
-else
-  as_fn_arith '(' $ac_mid ')' - 1 && ac_hi=$as_val
-			if test $ac_mid -le $ac_hi; then
-			  ac_lo= ac_hi=
-			  break
-			fi
-			as_fn_arith 2 '*' $ac_mid && ac_mid=$as_val
-fi
-rm -f core conftest.err conftest.$ac_objext conftest.$ac_ext
-  done
-else
-  ac_lo= ac_hi=
-fi
-rm -f core conftest.err conftest.$ac_objext conftest.$ac_ext
-fi
-rm -f core conftest.err conftest.$ac_objext conftest.$ac_ext
-# Binary search between lo and hi bounds.
-while test "x$ac_lo" != "x$ac_hi"; do
-  as_fn_arith '(' $ac_hi - $ac_lo ')' / 2 + $ac_lo && ac_mid=$as_val
-  cat confdefs.h - <<_ACEOF >conftest.$ac_ext
-/* end confdefs.h.  */
-$4
-int
-main ()
-{
-static int test_array [1 - 2 * !(($2) <= $ac_mid)];
-test_array [0] = 0;
-return test_array [0];
-
-  ;
-  return 0;
-}
-_ACEOF
-if ac_fn_c_try_compile "$LINENO"; then :
-  ac_hi=$ac_mid
-else
-  as_fn_arith '(' $ac_mid ')' + 1 && ac_lo=$as_val
-fi
-rm -f core conftest.err conftest.$ac_objext conftest.$ac_ext
-done
-case $ac_lo in #((
-?*) eval "$3=\$ac_lo"; ac_retval=0 ;;
-'') ac_retval=1 ;;
-esac
-  else
-    cat confdefs.h - <<_ACEOF >conftest.$ac_ext
-/* end confdefs.h.  */
-$4
-static long int longval () { return $2; }
-static unsigned long int ulongval () { return $2; }
-#include <stdio.h>
-#include <stdlib.h>
-int
-main ()
-{
-
-  FILE *f = fopen ("conftest.val", "w");
-  if (! f)
-    return 1;
-  if (($2) < 0)
-    {
-      long int i = longval ();
-      if (i != ($2))
-	return 1;
-      fprintf (f, "%ld", i);
-    }
-  else
-    {
-      unsigned long int i = ulongval ();
-      if (i != ($2))
-	return 1;
-      fprintf (f, "%lu", i);
-    }
-  /* Do not output a trailing newline, as this causes \r\n confusion
-     on some platforms.  */
-  return ferror (f) || fclose (f) != 0;
-
-  ;
-  return 0;
-}
-_ACEOF
-if ac_fn_c_try_run "$LINENO"; then :
-  echo >>conftest.val; read $3 <conftest.val; ac_retval=0
-else
-  ac_retval=1
-fi
-rm -f core *.core core.conftest.* gmon.out bb.out conftest$ac_exeext \
-  conftest.$ac_objext conftest.beam conftest.$ac_ext
-rm -f conftest.val
-
-  fi
-  eval $as_lineno_stack; ${as_lineno_stack:+:} unset as_lineno
-  as_fn_set_status $ac_retval
-
-} # ac_fn_c_compute_int
-
-# ac_fn_c_check_func LINENO FUNC VAR
-# ----------------------------------
-# Tests whether FUNC exists, setting the cache variable VAR accordingly
-ac_fn_c_check_func ()
-{
-  as_lineno=${as_lineno-"$1"} as_lineno_stack=as_lineno_stack=$as_lineno_stack
-  { $as_echo "$as_me:${as_lineno-$LINENO}: checking for $2" >&5
-$as_echo_n "checking for $2... " >&6; }
-if eval \${$3+:} false; then :
-  $as_echo_n "(cached) " >&6
-else
-  cat confdefs.h - <<_ACEOF >conftest.$ac_ext
-/* end confdefs.h.  */
-/* Define $2 to an innocuous variant, in case <limits.h> declares $2.
-   For example, HP-UX 11i <limits.h> declares gettimeofday.  */
-#define $2 innocuous_$2
-
-/* System header to define __stub macros and hopefully few prototypes,
-    which can conflict with char $2 (); below.
-    Prefer <limits.h> to <assert.h> if __STDC__ is defined, since
-    <limits.h> exists even on freestanding compilers.  */
-
-#ifdef __STDC__
-# include <limits.h>
-#else
-# include <assert.h>
-#endif
-
-#undef $2
-
-/* Override any GCC internal prototype to avoid an error.
-   Use char because int might match the return type of a GCC
-   builtin and then its argument prototype would still apply.  */
-#ifdef __cplusplus
-extern "C"
-#endif
-char $2 ();
-/* The GNU C library defines this for functions which it implements
-    to always fail with ENOSYS.  Some functions are actually named
-    something starting with __ and the normal name is an alias.  */
-#if defined __stub_$2 || defined __stub___$2
-choke me
-#endif
-
-int
-main ()
-{
-return $2 ();
-  ;
-  return 0;
-}
-_ACEOF
-if ac_fn_c_try_link "$LINENO"; then :
-  eval "$3=yes"
-else
-  eval "$3=no"
-fi
-rm -f core conftest.err conftest.$ac_objext \
-    conftest$ac_exeext conftest.$ac_ext
-fi
-eval ac_res=\$$3
-	       { $as_echo "$as_me:${as_lineno-$LINENO}: result: $ac_res" >&5
-$as_echo "$ac_res" >&6; }
-  eval $as_lineno_stack; ${as_lineno_stack:+:} unset as_lineno
-
-} # ac_fn_c_check_func
-
-# ac_fn_c_check_decl LINENO SYMBOL VAR INCLUDES
-# ---------------------------------------------
-# Tests whether SYMBOL is declared in INCLUDES, setting cache variable VAR
-# accordingly.
-ac_fn_c_check_decl ()
-{
-  as_lineno=${as_lineno-"$1"} as_lineno_stack=as_lineno_stack=$as_lineno_stack
-  as_decl_name=`echo $2|sed 's/ *(.*//'`
-  as_decl_use=`echo $2|sed -e 's/(/((/' -e 's/)/) 0&/' -e 's/,/) 0& (/g'`
-  { $as_echo "$as_me:${as_lineno-$LINENO}: checking whether $as_decl_name is declared" >&5
-$as_echo_n "checking whether $as_decl_name is declared... " >&6; }
-if eval \${$3+:} false; then :
-  $as_echo_n "(cached) " >&6
-else
-  cat confdefs.h - <<_ACEOF >conftest.$ac_ext
-/* end confdefs.h.  */
-$4
-int
-main ()
-{
-#ifndef $as_decl_name
-#ifdef __cplusplus
-  (void) $as_decl_use;
-#else
-  (void) $as_decl_name;
-#endif
-#endif
-
-  ;
-  return 0;
-}
-_ACEOF
-if ac_fn_c_try_compile "$LINENO"; then :
-  eval "$3=yes"
-else
-  eval "$3=no"
-fi
-rm -f core conftest.err conftest.$ac_objext conftest.$ac_ext
-fi
-eval ac_res=\$$3
-	       { $as_echo "$as_me:${as_lineno-$LINENO}: result: $ac_res" >&5
-$as_echo "$ac_res" >&6; }
-  eval $as_lineno_stack; ${as_lineno_stack:+:} unset as_lineno
-
-} # ac_fn_c_check_decl
-
-# ac_fn_c_check_type LINENO TYPE VAR INCLUDES
-# -------------------------------------------
-# Tests whether TYPE exists after having included INCLUDES, setting cache
-# variable VAR accordingly.
-ac_fn_c_check_type ()
-{
-  as_lineno=${as_lineno-"$1"} as_lineno_stack=as_lineno_stack=$as_lineno_stack
-  { $as_echo "$as_me:${as_lineno-$LINENO}: checking for $2" >&5
-$as_echo_n "checking for $2... " >&6; }
-if eval \${$3+:} false; then :
-  $as_echo_n "(cached) " >&6
-else
-  eval "$3=no"
-  cat confdefs.h - <<_ACEOF >conftest.$ac_ext
-/* end confdefs.h.  */
-$4
-int
-main ()
-{
-if (sizeof ($2))
-	 return 0;
-  ;
-  return 0;
-}
-_ACEOF
-if ac_fn_c_try_compile "$LINENO"; then :
-  cat confdefs.h - <<_ACEOF >conftest.$ac_ext
-/* end confdefs.h.  */
-$4
-int
-main ()
-{
-if (sizeof (($2)))
-	    return 0;
-  ;
-  return 0;
-}
-_ACEOF
-if ac_fn_c_try_compile "$LINENO"; then :
-
-else
-  eval "$3=yes"
-fi
-rm -f core conftest.err conftest.$ac_objext conftest.$ac_ext
-fi
-rm -f core conftest.err conftest.$ac_objext conftest.$ac_ext
-fi
-eval ac_res=\$$3
-	       { $as_echo "$as_me:${as_lineno-$LINENO}: result: $ac_res" >&5
-$as_echo "$ac_res" >&6; }
-  eval $as_lineno_stack; ${as_lineno_stack:+:} unset as_lineno
-
-} # ac_fn_c_check_type
-cat >config.log <<_ACEOF
-This file contains any messages produced by compilers while
-running configure, to aid debugging if configure makes a mistake.
-
-It was created by dummy $as_me 0, which was
-generated by GNU Autoconf 2.69.  Invocation command line was
-
-  $ $0 $@
-
-_ACEOF
-exec 5>>config.log
-{
-cat <<_ASUNAME
-## --------- ##
-## Platform. ##
-## --------- ##
-
-hostname = `(hostname || uname -n) 2>/dev/null | sed 1q`
-uname -m = `(uname -m) 2>/dev/null || echo unknown`
-uname -r = `(uname -r) 2>/dev/null || echo unknown`
-uname -s = `(uname -s) 2>/dev/null || echo unknown`
-uname -v = `(uname -v) 2>/dev/null || echo unknown`
-
-/usr/bin/uname -p = `(/usr/bin/uname -p) 2>/dev/null || echo unknown`
-/bin/uname -X     = `(/bin/uname -X) 2>/dev/null     || echo unknown`
-
-/bin/arch              = `(/bin/arch) 2>/dev/null              || echo unknown`
-/usr/bin/arch -k       = `(/usr/bin/arch -k) 2>/dev/null       || echo unknown`
-/usr/convex/getsysinfo = `(/usr/convex/getsysinfo) 2>/dev/null || echo unknown`
-/usr/bin/hostinfo      = `(/usr/bin/hostinfo) 2>/dev/null      || echo unknown`
-/bin/machine           = `(/bin/machine) 2>/dev/null           || echo unknown`
-/usr/bin/oslevel       = `(/usr/bin/oslevel) 2>/dev/null       || echo unknown`
-/bin/universe          = `(/bin/universe) 2>/dev/null          || echo unknown`
-
-_ASUNAME
-
-as_save_IFS=$IFS; IFS=$PATH_SEPARATOR
-for as_dir in $PATH
-do
-  IFS=$as_save_IFS
-  test -z "$as_dir" && as_dir=.
-    $as_echo "PATH: $as_dir"
-  done
-IFS=$as_save_IFS
-
-} >&5
-
-cat >&5 <<_ACEOF
-
-
-## ----------- ##
-## Core tests. ##
-## ----------- ##
-
-_ACEOF
-
-
-# Keep a trace of the command line.
-# Strip out --no-create and --no-recursion so they do not pile up.
-# Strip out --silent because we don't want to record it for future runs.
-# Also quote any args containing shell meta-characters.
-# Make two passes to allow for proper duplicate-argument suppression.
-ac_configure_args=
-ac_configure_args0=
-ac_configure_args1=
-ac_must_keep_next=false
-for ac_pass in 1 2
-do
-  for ac_arg
-  do
-    case $ac_arg in
-    -no-create | --no-c* | -n | -no-recursion | --no-r*) continue ;;
-    -q | -quiet | --quiet | --quie | --qui | --qu | --q \
-    | -silent | --silent | --silen | --sile | --sil)
-      continue ;;
-    *\'*)
-      ac_arg=`$as_echo "$ac_arg" | sed "s/'/'\\\\\\\\''/g"` ;;
-    esac
-    case $ac_pass in
-    1) as_fn_append ac_configure_args0 " '$ac_arg'" ;;
-    2)
-      as_fn_append ac_configure_args1 " '$ac_arg'"
-      if test $ac_must_keep_next = true; then
-	ac_must_keep_next=false # Got value, back to normal.
-      else
-	case $ac_arg in
-	  *=* | --config-cache | -C | -disable-* | --disable-* \
-	  | -enable-* | --enable-* | -gas | --g* | -nfp | --nf* \
-	  | -q | -quiet | --q* | -silent | --sil* | -v | -verb* \
-	  | -with-* | --with-* | -without-* | --without-* | --x)
-	    case "$ac_configure_args0 " in
-	      "$ac_configure_args1"*" '$ac_arg' "* ) continue ;;
-	    esac
-	    ;;
-	  -* ) ac_must_keep_next=true ;;
-	esac
-      fi
-      as_fn_append ac_configure_args " '$ac_arg'"
-      ;;
-    esac
-  done
-done
-{ ac_configure_args0=; unset ac_configure_args0;}
-{ ac_configure_args1=; unset ac_configure_args1;}
-
-# When interrupted or exit'd, cleanup temporary files, and complete
-# config.log.  We remove comments because anyway the quotes in there
-# would cause problems or look ugly.
-# WARNING: Use '\'' to represent an apostrophe within the trap.
-# WARNING: Do not start the trap code with a newline, due to a FreeBSD 4.0 bug.
-trap 'exit_status=$?
-  # Save into config.log some information that might help in debugging.
-  {
-    echo
-
-    $as_echo "## ---------------- ##
-## Cache variables. ##
-## ---------------- ##"
-    echo
-    # The following way of writing the cache mishandles newlines in values,
-(
-  for ac_var in `(set) 2>&1 | sed -n '\''s/^\([a-zA-Z_][a-zA-Z0-9_]*\)=.*/\1/p'\''`; do
-    eval ac_val=\$$ac_var
-    case $ac_val in #(
-    *${as_nl}*)
-      case $ac_var in #(
-      *_cv_*) { $as_echo "$as_me:${as_lineno-$LINENO}: WARNING: cache variable $ac_var contains a newline" >&5
-$as_echo "$as_me: WARNING: cache variable $ac_var contains a newline" >&2;} ;;
-      esac
-      case $ac_var in #(
-      _ | IFS | as_nl) ;; #(
-      BASH_ARGV | BASH_SOURCE) eval $ac_var= ;; #(
-      *) { eval $ac_var=; unset $ac_var;} ;;
-      esac ;;
-    esac
-  done
-  (set) 2>&1 |
-    case $as_nl`(ac_space='\'' '\''; set) 2>&1` in #(
-    *${as_nl}ac_space=\ *)
-      sed -n \
-	"s/'\''/'\''\\\\'\'''\''/g;
-	  s/^\\([_$as_cr_alnum]*_cv_[_$as_cr_alnum]*\\)=\\(.*\\)/\\1='\''\\2'\''/p"
-      ;; #(
-    *)
-      sed -n "/^[_$as_cr_alnum]*_cv_[_$as_cr_alnum]*=/p"
-      ;;
-    esac |
-    sort
-)
-    echo
-
-    $as_echo "## ----------------- ##
-## Output variables. ##
-## ----------------- ##"
-    echo
-    for ac_var in $ac_subst_vars
-    do
-      eval ac_val=\$$ac_var
-      case $ac_val in
-      *\'\''*) ac_val=`$as_echo "$ac_val" | sed "s/'\''/'\''\\\\\\\\'\'''\''/g"`;;
-      esac
-      $as_echo "$ac_var='\''$ac_val'\''"
-    done | sort
-    echo
-
-    if test -n "$ac_subst_files"; then
-      $as_echo "## ------------------- ##
-## File substitutions. ##
-## ------------------- ##"
-      echo
-      for ac_var in $ac_subst_files
-      do
-	eval ac_val=\$$ac_var
-	case $ac_val in
-	*\'\''*) ac_val=`$as_echo "$ac_val" | sed "s/'\''/'\''\\\\\\\\'\'''\''/g"`;;
-	esac
-	$as_echo "$ac_var='\''$ac_val'\''"
-      done | sort
-      echo
-    fi
-
-    if test -s confdefs.h; then
-      $as_echo "## ----------- ##
-## confdefs.h. ##
-## ----------- ##"
-      echo
-      cat confdefs.h
-      echo
-    fi
-    test "$ac_signal" != 0 &&
-      $as_echo "$as_me: caught signal $ac_signal"
-    $as_echo "$as_me: exit $exit_status"
-  } >&5
-  rm -f core *.core core.conftest.* &&
-    rm -f -r conftest* confdefs* conf$$* $ac_clean_files &&
-    exit $exit_status
-' 0
-for ac_signal in 1 2 13 15; do
-  trap 'ac_signal='$ac_signal'; as_fn_exit 1' $ac_signal
-done
-ac_signal=0
-
-# confdefs.h avoids OS command line length limits that DEFS can exceed.
-rm -f -r conftest* confdefs.h
-
-$as_echo "/* confdefs.h */" > confdefs.h
-
-# Predefined preprocessor variables.
-
-cat >>confdefs.h <<_ACEOF
-#define PACKAGE_NAME "$PACKAGE_NAME"
-_ACEOF
-
-cat >>confdefs.h <<_ACEOF
-#define PACKAGE_TARNAME "$PACKAGE_TARNAME"
-_ACEOF
-
-cat >>confdefs.h <<_ACEOF
-#define PACKAGE_VERSION "$PACKAGE_VERSION"
-_ACEOF
-
-cat >>confdefs.h <<_ACEOF
-#define PACKAGE_STRING "$PACKAGE_STRING"
-_ACEOF
-
-cat >>confdefs.h <<_ACEOF
-#define PACKAGE_BUGREPORT "$PACKAGE_BUGREPORT"
-_ACEOF
-
-cat >>confdefs.h <<_ACEOF
-#define PACKAGE_URL "$PACKAGE_URL"
-_ACEOF
-
-
-# Let the site file select an alternate cache file if it wants to.
-# Prefer an explicitly selected file to automatically selected ones.
-ac_site_file1=NONE
-ac_site_file2=NONE
-if test -n "$CONFIG_SITE"; then
-  # We do not want a PATH search for config.site.
-  case $CONFIG_SITE in #((
-    -*)  ac_site_file1=./$CONFIG_SITE;;
-    */*) ac_site_file1=$CONFIG_SITE;;
-    *)   ac_site_file1=./$CONFIG_SITE;;
-  esac
-elif test "x$prefix" != xNONE; then
-  ac_site_file1=$prefix/share/config.site
-  ac_site_file2=$prefix/etc/config.site
-else
-  ac_site_file1=$ac_default_prefix/share/config.site
-  ac_site_file2=$ac_default_prefix/etc/config.site
-fi
-for ac_site_file in "$ac_site_file1" "$ac_site_file2"
-do
-  test "x$ac_site_file" = xNONE && continue
-  if test /dev/null != "$ac_site_file" && test -r "$ac_site_file"; then
-    { $as_echo "$as_me:${as_lineno-$LINENO}: loading site script $ac_site_file" >&5
-$as_echo "$as_me: loading site script $ac_site_file" >&6;}
-    sed 's/^/| /' "$ac_site_file" >&5
-    . "$ac_site_file" \
-      || { { $as_echo "$as_me:${as_lineno-$LINENO}: error: in \`$ac_pwd':" >&5
-$as_echo "$as_me: error: in \`$ac_pwd':" >&2;}
-as_fn_error $? "failed to load site script $ac_site_file
-See \`config.log' for more details" "$LINENO" 5; }
-  fi
-done
-
-if test -r "$cache_file"; then
-  # Some versions of bash will fail to source /dev/null (special files
-  # actually), so we avoid doing that.  DJGPP emulates it as a regular file.
-  if test /dev/null != "$cache_file" && test -f "$cache_file"; then
-    { $as_echo "$as_me:${as_lineno-$LINENO}: loading cache $cache_file" >&5
-$as_echo "$as_me: loading cache $cache_file" >&6;}
-    case $cache_file in
-      [\\/]* | ?:[\\/]* ) . "$cache_file";;
-      *)                      . "./$cache_file";;
-    esac
-  fi
-else
-  { $as_echo "$as_me:${as_lineno-$LINENO}: creating cache $cache_file" >&5
-$as_echo "$as_me: creating cache $cache_file" >&6;}
-  >$cache_file
-fi
-
-gl_header_list="$gl_header_list wchar.h"
-gl_header_list="$gl_header_list stdint.h"
-gl_header_list="$gl_header_list inttypes.h"
-gl_header_list="$gl_header_list unistd.h"
-gl_func_list="$gl_func_list symlink"
-gl_header_list="$gl_header_list features.h"
-gl_func_list="$gl_func_list iswcntrl"
-gl_header_list="$gl_header_list wctype.h"
-gl_func_list="$gl_func_list wcwidth"
-# Check that the precious variables saved in the cache have kept the same
-# value.
-ac_cache_corrupted=false
-for ac_var in $ac_precious_vars; do
-  eval ac_old_set=\$ac_cv_env_${ac_var}_set
-  eval ac_new_set=\$ac_env_${ac_var}_set
-  eval ac_old_val=\$ac_cv_env_${ac_var}_value
-  eval ac_new_val=\$ac_env_${ac_var}_value
-  case $ac_old_set,$ac_new_set in
-    set,)
-      { $as_echo "$as_me:${as_lineno-$LINENO}: error: \`$ac_var' was set to \`$ac_old_val' in the previous run" >&5
-$as_echo "$as_me: error: \`$ac_var' was set to \`$ac_old_val' in the previous run" >&2;}
-      ac_cache_corrupted=: ;;
-    ,set)
-      { $as_echo "$as_me:${as_lineno-$LINENO}: error: \`$ac_var' was not set in the previous run" >&5
-$as_echo "$as_me: error: \`$ac_var' was not set in the previous run" >&2;}
-      ac_cache_corrupted=: ;;
-    ,);;
-    *)
-      if test "x$ac_old_val" != "x$ac_new_val"; then
-	# differences in whitespace do not lead to failure.
-	ac_old_val_w=`echo x $ac_old_val`
-	ac_new_val_w=`echo x $ac_new_val`
-	if test "$ac_old_val_w" != "$ac_new_val_w"; then
-	  { $as_echo "$as_me:${as_lineno-$LINENO}: error: \`$ac_var' has changed since the previous run:" >&5
-$as_echo "$as_me: error: \`$ac_var' has changed since the previous run:" >&2;}
-	  ac_cache_corrupted=:
-	else
-	  { $as_echo "$as_me:${as_lineno-$LINENO}: warning: ignoring whitespace changes in \`$ac_var' since the previous run:" >&5
-$as_echo "$as_me: warning: ignoring whitespace changes in \`$ac_var' since the previous run:" >&2;}
-	  eval $ac_var=\$ac_old_val
-	fi
-	{ $as_echo "$as_me:${as_lineno-$LINENO}:   former value:  \`$ac_old_val'" >&5
-$as_echo "$as_me:   former value:  \`$ac_old_val'" >&2;}
-	{ $as_echo "$as_me:${as_lineno-$LINENO}:   current value: \`$ac_new_val'" >&5
-$as_echo "$as_me:   current value: \`$ac_new_val'" >&2;}
-      fi;;
-  esac
-  # Pass precious variables to config.status.
-  if test "$ac_new_set" = set; then
-    case $ac_new_val in
-    *\'*) ac_arg=$ac_var=`$as_echo "$ac_new_val" | sed "s/'/'\\\\\\\\''/g"` ;;
-    *) ac_arg=$ac_var=$ac_new_val ;;
-    esac
-    case " $ac_configure_args " in
-      *" '$ac_arg' "*) ;; # Avoid dups.  Use of quotes ensures accuracy.
-      *) as_fn_append ac_configure_args " '$ac_arg'" ;;
-    esac
-  fi
-done
-if $ac_cache_corrupted; then
-  { $as_echo "$as_me:${as_lineno-$LINENO}: error: in \`$ac_pwd':" >&5
-$as_echo "$as_me: error: in \`$ac_pwd':" >&2;}
-  { $as_echo "$as_me:${as_lineno-$LINENO}: error: changes in the environment can compromise the build" >&5
-$as_echo "$as_me: error: changes in the environment can compromise the build" >&2;}
-  as_fn_error $? "run \`make distclean' and/or \`rm $cache_file' and start over" "$LINENO" 5
-fi
-## -------------------- ##
-## Main body of script. ##
-## -------------------- ##
-
-ac_ext=c
-ac_cpp='$CPP $CPPFLAGS'
-ac_compile='$CC -c $CFLAGS $CPPFLAGS conftest.$ac_ext >&5'
-ac_link='$CC -o conftest$ac_exeext $CFLAGS $CPPFLAGS $LDFLAGS conftest.$ac_ext $LIBS >&5'
-ac_compiler_gnu=$ac_cv_c_compiler_gnu
-
-
-ac_aux_dir=
-for ac_dir in build-aux "$srcdir"/build-aux; do
-  if test -f "$ac_dir/install-sh"; then
-    ac_aux_dir=$ac_dir
-    ac_install_sh="$ac_aux_dir/install-sh -c"
-    break
-  elif test -f "$ac_dir/install.sh"; then
-    ac_aux_dir=$ac_dir
-    ac_install_sh="$ac_aux_dir/install.sh -c"
-    break
-  elif test -f "$ac_dir/shtool"; then
-    ac_aux_dir=$ac_dir
-    ac_install_sh="$ac_aux_dir/shtool install -c"
-    break
-  fi
-done
-if test -z "$ac_aux_dir"; then
-  as_fn_error $? "cannot find install-sh, install.sh, or shtool in build-aux \"$srcdir\"/build-aux" "$LINENO" 5
-fi
-
-# These three variables are undocumented and unsupported,
-# and are intended to be withdrawn in a future Autoconf release.
-# They can cause serious problems if a builder's source tree is in a directory
-# whose full name contains unusual characters.
-ac_config_guess="$SHELL $ac_aux_dir/config.guess"  # Please don't use this var.
-ac_config_sub="$SHELL $ac_aux_dir/config.sub"  # Please don't use this var.
-ac_configure="$SHELL $ac_aux_dir/configure"  # Please don't use this var.
-
-
-am__api_version='1.14'
-
-# Find a good install program.  We prefer a C program (faster),
-# so one script is as good as another.  But avoid the broken or
-# incompatible versions:
-# SysV /etc/install, /usr/sbin/install
-# SunOS /usr/etc/install
-# IRIX /sbin/install
-# AIX /bin/install
-# AmigaOS /C/install, which installs bootblocks on floppy discs
-# AIX 4 /usr/bin/installbsd, which doesn't work without a -g flag
-# AFS /usr/afsws/bin/install, which mishandles nonexistent args
-# SVR4 /usr/ucb/install, which tries to use the nonexistent group "staff"
-# OS/2's system install, which has a completely different semantic
-# ./install, which can be erroneously created by make from ./install.sh.
-# Reject install programs that cannot install multiple files.
-{ $as_echo "$as_me:${as_lineno-$LINENO}: checking for a BSD-compatible install" >&5
-$as_echo_n "checking for a BSD-compatible install... " >&6; }
-if test -z "$INSTALL"; then
-if ${ac_cv_path_install+:} false; then :
-  $as_echo_n "(cached) " >&6
-else
-  as_save_IFS=$IFS; IFS=$PATH_SEPARATOR
-for as_dir in $PATH
-do
-  IFS=$as_save_IFS
-  test -z "$as_dir" && as_dir=.
-    # Account for people who put trailing slashes in PATH elements.
-case $as_dir/ in #((
-  ./ | .// | /[cC]/* | \
-  /etc/* | /usr/sbin/* | /usr/etc/* | /sbin/* | /usr/afsws/bin/* | \
-  ?:[\\/]os2[\\/]install[\\/]* | ?:[\\/]OS2[\\/]INSTALL[\\/]* | \
-  /usr/ucb/* ) ;;
-  *)
-    # OSF1 and SCO ODT 3.0 have their own names for install.
-    # Don't use installbsd from OSF since it installs stuff as root
-    # by default.
-    for ac_prog in ginstall scoinst install; do
-      for ac_exec_ext in '' $ac_executable_extensions; do
-	if as_fn_executable_p "$as_dir/$ac_prog$ac_exec_ext"; then
-	  if test $ac_prog = install &&
-	    grep dspmsg "$as_dir/$ac_prog$ac_exec_ext" >/dev/null 2>&1; then
-	    # AIX install.  It has an incompatible calling convention.
-	    :
-	  elif test $ac_prog = install &&
-	    grep pwplus "$as_dir/$ac_prog$ac_exec_ext" >/dev/null 2>&1; then
-	    # program-specific install script used by HP pwplus--don't use.
-	    :
-	  else
-	    rm -rf conftest.one conftest.two conftest.dir
-	    echo one > conftest.one
-	    echo two > conftest.two
-	    mkdir conftest.dir
-	    if "$as_dir/$ac_prog$ac_exec_ext" -c conftest.one conftest.two "`pwd`/conftest.dir" &&
-	      test -s conftest.one && test -s conftest.two &&
-	      test -s conftest.dir/conftest.one &&
-	      test -s conftest.dir/conftest.two
-	    then
-	      ac_cv_path_install="$as_dir/$ac_prog$ac_exec_ext -c"
-	      break 3
-	    fi
-	  fi
-	fi
-      done
-    done
-    ;;
-esac
-
-  done
-IFS=$as_save_IFS
-
-rm -rf conftest.one conftest.two conftest.dir
-
-fi
-  if test "${ac_cv_path_install+set}" = set; then
-    INSTALL=$ac_cv_path_install
-  else
-    # As a last resort, use the slow shell script.  Don't cache a
-    # value for INSTALL within a source directory, because that will
-    # break other packages using the cache if that directory is
-    # removed, or if the value is a relative name.
-    INSTALL=$ac_install_sh
-  fi
-fi
-{ $as_echo "$as_me:${as_lineno-$LINENO}: result: $INSTALL" >&5
-$as_echo "$INSTALL" >&6; }
-
-# Use test -z because SunOS4 sh mishandles braces in ${var-val}.
-# It thinks the first close brace ends the variable substitution.
-test -z "$INSTALL_PROGRAM" && INSTALL_PROGRAM='${INSTALL}'
-
-test -z "$INSTALL_SCRIPT" && INSTALL_SCRIPT='${INSTALL}'
-
-test -z "$INSTALL_DATA" && INSTALL_DATA='${INSTALL} -m 644'
-
-{ $as_echo "$as_me:${as_lineno-$LINENO}: checking whether build environment is sane" >&5
-$as_echo_n "checking whether build environment is sane... " >&6; }
-# Reject unsafe characters in $srcdir or the absolute working directory
-# name.  Accept space and tab only in the latter.
-am_lf='
-'
-case `pwd` in
-  *[\\\"\#\$\&\'\`$am_lf]*)
-    as_fn_error $? "unsafe absolute working directory name" "$LINENO" 5;;
-esac
-case $srcdir in
-  *[\\\"\#\$\&\'\`$am_lf\ \	]*)
-    as_fn_error $? "unsafe srcdir value: '$srcdir'" "$LINENO" 5;;
-esac
-
-# Do 'set' in a subshell so we don't clobber the current shell's
-# arguments.  Must try -L first in case configure is actually a
-# symlink; some systems play weird games with the mod time of symlinks
-# (eg FreeBSD returns the mod time of the symlink's containing
-# directory).
-if (
-   am_has_slept=no
-   for am_try in 1 2; do
-     echo "timestamp, slept: $am_has_slept" > conftest.file
-     set X `ls -Lt "$srcdir/configure" conftest.file 2> /dev/null`
-     if test "$*" = "X"; then
-	# -L didn't work.
-	set X `ls -t "$srcdir/configure" conftest.file`
-     fi
-     if test "$*" != "X $srcdir/configure conftest.file" \
-	&& test "$*" != "X conftest.file $srcdir/configure"; then
-
-	# If neither matched, then we have a broken ls.  This can happen
-	# if, for instance, CONFIG_SHELL is bash and it inherits a
-	# broken ls alias from the environment.  This has actually
-	# happened.  Such a system could not be considered "sane".
-	as_fn_error $? "ls -t appears to fail.  Make sure there is not a broken
-  alias in your environment" "$LINENO" 5
-     fi
-     if test "$2" = conftest.file || test $am_try -eq 2; then
-       break
-     fi
-     # Just in case.
-     sleep 1
-     am_has_slept=yes
-   done
-   test "$2" = conftest.file
-   )
-then
-   # Ok.
-   :
-else
-   as_fn_error $? "newly created file is older than distributed files!
-Check your system clock" "$LINENO" 5
-fi
-{ $as_echo "$as_me:${as_lineno-$LINENO}: result: yes" >&5
-$as_echo "yes" >&6; }
-# If we didn't sleep, we still need to ensure time stamps of config.status and
-# generated files are strictly newer.
-am_sleep_pid=
-if grep 'slept: no' conftest.file >/dev/null 2>&1; then
-  ( sleep 1 ) &
-  am_sleep_pid=$!
-fi
-
-rm -f conftest.file
-
-test "$program_prefix" != NONE &&
-  program_transform_name="s&^&$program_prefix&;$program_transform_name"
-# Use a double $ so make ignores it.
-test "$program_suffix" != NONE &&
-  program_transform_name="s&\$&$program_suffix&;$program_transform_name"
-# Double any \ or $.
-# By default was `s,x,x', remove it if useless.
-ac_script='s/[\\$]/&&/g;s/;s,x,x,$//'
-program_transform_name=`$as_echo "$program_transform_name" | sed "$ac_script"`
-
-# expand $ac_aux_dir to an absolute path
-am_aux_dir=`cd $ac_aux_dir && pwd`
-
-if test x"${MISSING+set}" != xset; then
-  case $am_aux_dir in
-  *\ * | *\	*)
-    MISSING="\${SHELL} \"$am_aux_dir/missing\"" ;;
-  *)
-    MISSING="\${SHELL} $am_aux_dir/missing" ;;
-  esac
-fi
-# Use eval to expand $SHELL
-if eval "$MISSING --is-lightweight"; then
-  am_missing_run="$MISSING "
-else
-  am_missing_run=
-  { $as_echo "$as_me:${as_lineno-$LINENO}: WARNING: 'missing' script is too old or missing" >&5
-$as_echo "$as_me: WARNING: 'missing' script is too old or missing" >&2;}
-fi
-
-if test x"${install_sh}" != xset; then
-  case $am_aux_dir in
-  *\ * | *\	*)
-    install_sh="\${SHELL} '$am_aux_dir/install-sh'" ;;
-  *)
-    install_sh="\${SHELL} $am_aux_dir/install-sh"
-  esac
-fi
-
-# Installed binaries are usually stripped using 'strip' when the user
-# run "make install-strip".  However 'strip' might not be the right
-# tool to use in cross-compilation environments, therefore Automake
-# will honor the 'STRIP' environment variable to overrule this program.
-if test "$cross_compiling" != no; then
-  if test -n "$ac_tool_prefix"; then
-  # Extract the first word of "${ac_tool_prefix}strip", so it can be a program name with args.
-set dummy ${ac_tool_prefix}strip; ac_word=$2
-{ $as_echo "$as_me:${as_lineno-$LINENO}: checking for $ac_word" >&5
-$as_echo_n "checking for $ac_word... " >&6; }
-if ${ac_cv_prog_STRIP+:} false; then :
-  $as_echo_n "(cached) " >&6
-else
-  if test -n "$STRIP"; then
-  ac_cv_prog_STRIP="$STRIP" # Let the user override the test.
-else
-as_save_IFS=$IFS; IFS=$PATH_SEPARATOR
-for as_dir in $PATH
-do
-  IFS=$as_save_IFS
-  test -z "$as_dir" && as_dir=.
-    for ac_exec_ext in '' $ac_executable_extensions; do
-  if as_fn_executable_p "$as_dir/$ac_word$ac_exec_ext"; then
-    ac_cv_prog_STRIP="${ac_tool_prefix}strip"
-    $as_echo "$as_me:${as_lineno-$LINENO}: found $as_dir/$ac_word$ac_exec_ext" >&5
-    break 2
-  fi
-done
-  done
-IFS=$as_save_IFS
-
-fi
-fi
-STRIP=$ac_cv_prog_STRIP
-if test -n "$STRIP"; then
-  { $as_echo "$as_me:${as_lineno-$LINENO}: result: $STRIP" >&5
-$as_echo "$STRIP" >&6; }
-else
-  { $as_echo "$as_me:${as_lineno-$LINENO}: result: no" >&5
-$as_echo "no" >&6; }
-fi
-
-
-fi
-if test -z "$ac_cv_prog_STRIP"; then
-  ac_ct_STRIP=$STRIP
-  # Extract the first word of "strip", so it can be a program name with args.
-set dummy strip; ac_word=$2
-{ $as_echo "$as_me:${as_lineno-$LINENO}: checking for $ac_word" >&5
-$as_echo_n "checking for $ac_word... " >&6; }
-if ${ac_cv_prog_ac_ct_STRIP+:} false; then :
-  $as_echo_n "(cached) " >&6
-else
-  if test -n "$ac_ct_STRIP"; then
-  ac_cv_prog_ac_ct_STRIP="$ac_ct_STRIP" # Let the user override the test.
-else
-as_save_IFS=$IFS; IFS=$PATH_SEPARATOR
-for as_dir in $PATH
-do
-  IFS=$as_save_IFS
-  test -z "$as_dir" && as_dir=.
-    for ac_exec_ext in '' $ac_executable_extensions; do
-  if as_fn_executable_p "$as_dir/$ac_word$ac_exec_ext"; then
-    ac_cv_prog_ac_ct_STRIP="strip"
-    $as_echo "$as_me:${as_lineno-$LINENO}: found $as_dir/$ac_word$ac_exec_ext" >&5
-    break 2
-  fi
-done
-  done
-IFS=$as_save_IFS
-
-fi
-fi
-ac_ct_STRIP=$ac_cv_prog_ac_ct_STRIP
-if test -n "$ac_ct_STRIP"; then
-  { $as_echo "$as_me:${as_lineno-$LINENO}: result: $ac_ct_STRIP" >&5
-$as_echo "$ac_ct_STRIP" >&6; }
-else
-  { $as_echo "$as_me:${as_lineno-$LINENO}: result: no" >&5
-$as_echo "no" >&6; }
-fi
-
-  if test "x$ac_ct_STRIP" = x; then
-    STRIP=":"
-  else
-    case $cross_compiling:$ac_tool_warned in
-yes:)
-{ $as_echo "$as_me:${as_lineno-$LINENO}: WARNING: using cross tools not prefixed with host triplet" >&5
-$as_echo "$as_me: WARNING: using cross tools not prefixed with host triplet" >&2;}
-ac_tool_warned=yes ;;
-esac
-    STRIP=$ac_ct_STRIP
-  fi
-else
-  STRIP="$ac_cv_prog_STRIP"
-fi
-
-fi
-INSTALL_STRIP_PROGRAM="\$(install_sh) -c -s"
-
-{ $as_echo "$as_me:${as_lineno-$LINENO}: checking for a thread-safe mkdir -p" >&5
-$as_echo_n "checking for a thread-safe mkdir -p... " >&6; }
-if test -z "$MKDIR_P"; then
-  if ${ac_cv_path_mkdir+:} false; then :
-  $as_echo_n "(cached) " >&6
-else
-  as_save_IFS=$IFS; IFS=$PATH_SEPARATOR
-for as_dir in $PATH$PATH_SEPARATOR/opt/sfw/bin
-do
-  IFS=$as_save_IFS
-  test -z "$as_dir" && as_dir=.
-    for ac_prog in mkdir gmkdir; do
-	 for ac_exec_ext in '' $ac_executable_extensions; do
-	   as_fn_executable_p "$as_dir/$ac_prog$ac_exec_ext" || continue
-	   case `"$as_dir/$ac_prog$ac_exec_ext" --version 2>&1` in #(
-	     'mkdir (GNU coreutils) '* | \
-	     'mkdir (coreutils) '* | \
-	     'mkdir (fileutils) '4.1*)
-	       ac_cv_path_mkdir=$as_dir/$ac_prog$ac_exec_ext
-	       break 3;;
-	   esac
-	 done
-       done
-  done
-IFS=$as_save_IFS
-
-fi
-
-  test -d ./--version && rmdir ./--version
-  if test "${ac_cv_path_mkdir+set}" = set; then
-    MKDIR_P="$ac_cv_path_mkdir -p"
-  else
-    # As a last resort, use the slow shell script.  Don't cache a
-    # value for MKDIR_P within a source directory, because that will
-    # break other packages using the cache if that directory is
-    # removed, or if the value is a relative name.
-    MKDIR_P="$ac_install_sh -d"
-  fi
-fi
-{ $as_echo "$as_me:${as_lineno-$LINENO}: result: $MKDIR_P" >&5
-$as_echo "$MKDIR_P" >&6; }
-
-for ac_prog in gawk mawk nawk awk
-do
-  # Extract the first word of "$ac_prog", so it can be a program name with args.
-set dummy $ac_prog; ac_word=$2
-{ $as_echo "$as_me:${as_lineno-$LINENO}: checking for $ac_word" >&5
-$as_echo_n "checking for $ac_word... " >&6; }
-if ${ac_cv_prog_AWK+:} false; then :
-  $as_echo_n "(cached) " >&6
-else
-  if test -n "$AWK"; then
-  ac_cv_prog_AWK="$AWK" # Let the user override the test.
-else
-as_save_IFS=$IFS; IFS=$PATH_SEPARATOR
-for as_dir in $PATH
-do
-  IFS=$as_save_IFS
-  test -z "$as_dir" && as_dir=.
-    for ac_exec_ext in '' $ac_executable_extensions; do
-  if as_fn_executable_p "$as_dir/$ac_word$ac_exec_ext"; then
-    ac_cv_prog_AWK="$ac_prog"
-    $as_echo "$as_me:${as_lineno-$LINENO}: found $as_dir/$ac_word$ac_exec_ext" >&5
-    break 2
-  fi
-done
-  done
-IFS=$as_save_IFS
-
-fi
-fi
-AWK=$ac_cv_prog_AWK
-if test -n "$AWK"; then
-  { $as_echo "$as_me:${as_lineno-$LINENO}: result: $AWK" >&5
-$as_echo "$AWK" >&6; }
-else
-  { $as_echo "$as_me:${as_lineno-$LINENO}: result: no" >&5
-$as_echo "no" >&6; }
-fi
-
-
-  test -n "$AWK" && break
-done
-
-{ $as_echo "$as_me:${as_lineno-$LINENO}: checking whether ${MAKE-make} sets \$(MAKE)" >&5
-$as_echo_n "checking whether ${MAKE-make} sets \$(MAKE)... " >&6; }
-set x ${MAKE-make}
-ac_make=`$as_echo "$2" | sed 's/+/p/g; s/[^a-zA-Z0-9_]/_/g'`
-if eval \${ac_cv_prog_make_${ac_make}_set+:} false; then :
-  $as_echo_n "(cached) " >&6
-else
-  cat >conftest.make <<\_ACEOF
-SHELL = /bin/sh
-all:
-	@echo '@@@%%%=$(MAKE)=@@@%%%'
-_ACEOF
-# GNU make sometimes prints "make[1]: Entering ...", which would confuse us.
-case `${MAKE-make} -f conftest.make 2>/dev/null` in
-  *@@@%%%=?*=@@@%%%*)
-    eval ac_cv_prog_make_${ac_make}_set=yes;;
-  *)
-    eval ac_cv_prog_make_${ac_make}_set=no;;
-esac
-rm -f conftest.make
-fi
-if eval test \$ac_cv_prog_make_${ac_make}_set = yes; then
-  { $as_echo "$as_me:${as_lineno-$LINENO}: result: yes" >&5
-$as_echo "yes" >&6; }
-  SET_MAKE=
-else
-  { $as_echo "$as_me:${as_lineno-$LINENO}: result: no" >&5
-$as_echo "no" >&6; }
-  SET_MAKE="MAKE=${MAKE-make}"
-fi
-
-rm -rf .tst 2>/dev/null
-mkdir .tst 2>/dev/null
-if test -d .tst; then
-  am__leading_dot=.
-else
-  am__leading_dot=_
-fi
-rmdir .tst 2>/dev/null
-
-# Check whether --enable-silent-rules was given.
-if test "${enable_silent_rules+set}" = set; then :
-  enableval=$enable_silent_rules;
-fi
-
-case $enable_silent_rules in # (((
-  yes) AM_DEFAULT_VERBOSITY=0;;
-   no) AM_DEFAULT_VERBOSITY=1;;
-    *) AM_DEFAULT_VERBOSITY=1;;
-esac
-am_make=${MAKE-make}
-{ $as_echo "$as_me:${as_lineno-$LINENO}: checking whether $am_make supports nested variables" >&5
-$as_echo_n "checking whether $am_make supports nested variables... " >&6; }
-if ${am_cv_make_support_nested_variables+:} false; then :
-  $as_echo_n "(cached) " >&6
-else
-  if $as_echo 'TRUE=$(BAR$(V))
-BAR0=false
-BAR1=true
-V=1
-am__doit:
-	@$(TRUE)
-.PHONY: am__doit' | $am_make -f - >/dev/null 2>&1; then
-  am_cv_make_support_nested_variables=yes
-else
-  am_cv_make_support_nested_variables=no
-fi
-fi
-{ $as_echo "$as_me:${as_lineno-$LINENO}: result: $am_cv_make_support_nested_variables" >&5
-$as_echo "$am_cv_make_support_nested_variables" >&6; }
-if test $am_cv_make_support_nested_variables = yes; then
-    AM_V='$(V)'
-  AM_DEFAULT_V='$(AM_DEFAULT_VERBOSITY)'
-else
-  AM_V=$AM_DEFAULT_VERBOSITY
-  AM_DEFAULT_V=$AM_DEFAULT_VERBOSITY
-fi
-AM_BACKSLASH='\'
-
-if test "`cd $srcdir && pwd`" != "`pwd`"; then
-  # Use -I$(srcdir) only when $(srcdir) != ., so that make's output
-  # is not polluted with repeated "-I."
-  am__isrc=' -I$(srcdir)'
-  # test to see if srcdir already configured
-  if test -f $srcdir/config.status; then
-    as_fn_error $? "source directory already configured; run \"make distclean\" there first" "$LINENO" 5
-  fi
-fi
-
-# test whether we have cygpath
-if test -z "$CYGPATH_W"; then
-  if (cygpath --version) >/dev/null 2>/dev/null; then
-    CYGPATH_W='cygpath -w'
-  else
-    CYGPATH_W=echo
-  fi
-fi
-
-
-# Define the identity of the package.
- PACKAGE='dummy'
- VERSION='0'
-
-
-cat >>confdefs.h <<_ACEOF
-#define PACKAGE "$PACKAGE"
-_ACEOF
-
-
-cat >>confdefs.h <<_ACEOF
-#define VERSION "$VERSION"
-_ACEOF
-
-# Some tools Automake needs.
-
-ACLOCAL=${ACLOCAL-"${am_missing_run}aclocal-${am__api_version}"}
-
-
-AUTOCONF=${AUTOCONF-"${am_missing_run}autoconf"}
-
-
-AUTOMAKE=${AUTOMAKE-"${am_missing_run}automake-${am__api_version}"}
-
-
-AUTOHEADER=${AUTOHEADER-"${am_missing_run}autoheader"}
-
-
-MAKEINFO=${MAKEINFO-"${am_missing_run}makeinfo"}
-
-# For better backward compatibility.  To be removed once Automake 1.9.x
-# dies out for good.  For more background, see:
-# <http://lists.gnu.org/archive/html/automake/2012-07/msg00001.html>
-# <http://lists.gnu.org/archive/html/automake/2012-07/msg00014.html>
-mkdir_p='$(MKDIR_P)'
-
-# We need awk for the "check" target.  The system "awk" is bad on
-# some platforms.
-# Always define AMTAR for backward compatibility.  Yes, it's still used
-# in the wild :-(  We should find a proper way to deprecate it ...
-AMTAR='$${TAR-tar}'
-
-
-# We'll loop over all known methods to create a tar archive until one works.
-_am_tools='gnutar  pax cpio none'
-
-am__tar='$${TAR-tar} chof - "$$tardir"' am__untar='$${TAR-tar} xf -'
-
-
-
-
-
-
-# POSIX will say in a future version that running "rm -f" with no argument
-# is OK; and we want to be able to make that assumption in our Makefile
-# recipes.  So use an aggressive probe to check that the usage we want is
-# actually supported "in the wild" to an acceptable degree.
-# See automake bug#10828.
-# To make any issue more visible, cause the running configure to be aborted
-# by default if the 'rm' program in use doesn't match our expectations; the
-# user can still override this though.
-if rm -f && rm -fr && rm -rf; then : OK; else
-  cat >&2 <<'END'
-Oops!
-
-Your 'rm' program seems unable to run without file operands specified
-on the command line, even when the '-f' option is present.  This is contrary
-to the behaviour of most rm programs out there, and not conforming with
-the upcoming POSIX standard: <http://austingroupbugs.net/view.php?id=542>
-
-Please tell bug-automake@gnu.org about your system, including the value
-of your $PATH and any error possibly output before this message.  This
-can help us improve future automake versions.
-
-END
-  if test x"$ACCEPT_INFERIOR_RM_PROGRAM" = x"yes"; then
-    echo 'Configuration will proceed anyway, since you have set the' >&2
-    echo 'ACCEPT_INFERIOR_RM_PROGRAM variable to "yes"' >&2
-    echo >&2
-  else
-    cat >&2 <<'END'
-Aborting the configuration process, to ensure you take notice of the issue.
-
-You can download and install GNU coreutils to get an 'rm' implementation
-that behaves properly: <http://www.gnu.org/software/coreutils/>.
-
-If you want to complete the configuration process using your problematic
-'rm' anyway, export the environment variable ACCEPT_INFERIOR_RM_PROGRAM
-to "yes", and re-run configure.
-
-END
-    as_fn_error $? "Your 'rm' program is bad, sorry." "$LINENO" 5
-  fi
-fi
-
-ac_config_headers="$ac_config_headers config.h"
-
-
-ac_ext=c
-ac_cpp='$CPP $CPPFLAGS'
-ac_compile='$CC -c $CFLAGS $CPPFLAGS conftest.$ac_ext >&5'
-ac_link='$CC -o conftest$ac_exeext $CFLAGS $CPPFLAGS $LDFLAGS conftest.$ac_ext $LIBS >&5'
-ac_compiler_gnu=$ac_cv_c_compiler_gnu
-if test -n "$ac_tool_prefix"; then
-  # Extract the first word of "${ac_tool_prefix}gcc", so it can be a program name with args.
-set dummy ${ac_tool_prefix}gcc; ac_word=$2
-{ $as_echo "$as_me:${as_lineno-$LINENO}: checking for $ac_word" >&5
-$as_echo_n "checking for $ac_word... " >&6; }
-if ${ac_cv_prog_CC+:} false; then :
-  $as_echo_n "(cached) " >&6
-else
-  if test -n "$CC"; then
-  ac_cv_prog_CC="$CC" # Let the user override the test.
-else
-as_save_IFS=$IFS; IFS=$PATH_SEPARATOR
-for as_dir in $PATH
-do
-  IFS=$as_save_IFS
-  test -z "$as_dir" && as_dir=.
-    for ac_exec_ext in '' $ac_executable_extensions; do
-  if as_fn_executable_p "$as_dir/$ac_word$ac_exec_ext"; then
-    ac_cv_prog_CC="${ac_tool_prefix}gcc"
-    $as_echo "$as_me:${as_lineno-$LINENO}: found $as_dir/$ac_word$ac_exec_ext" >&5
-    break 2
-  fi
-done
-  done
-IFS=$as_save_IFS
-
-fi
-fi
-CC=$ac_cv_prog_CC
-if test -n "$CC"; then
-  { $as_echo "$as_me:${as_lineno-$LINENO}: result: $CC" >&5
-$as_echo "$CC" >&6; }
-else
-  { $as_echo "$as_me:${as_lineno-$LINENO}: result: no" >&5
-$as_echo "no" >&6; }
-fi
-
-
-fi
-if test -z "$ac_cv_prog_CC"; then
-  ac_ct_CC=$CC
-  # Extract the first word of "gcc", so it can be a program name with args.
-set dummy gcc; ac_word=$2
-{ $as_echo "$as_me:${as_lineno-$LINENO}: checking for $ac_word" >&5
-$as_echo_n "checking for $ac_word... " >&6; }
-if ${ac_cv_prog_ac_ct_CC+:} false; then :
-  $as_echo_n "(cached) " >&6
-else
-  if test -n "$ac_ct_CC"; then
-  ac_cv_prog_ac_ct_CC="$ac_ct_CC" # Let the user override the test.
-else
-as_save_IFS=$IFS; IFS=$PATH_SEPARATOR
-for as_dir in $PATH
-do
-  IFS=$as_save_IFS
-  test -z "$as_dir" && as_dir=.
-    for ac_exec_ext in '' $ac_executable_extensions; do
-  if as_fn_executable_p "$as_dir/$ac_word$ac_exec_ext"; then
-    ac_cv_prog_ac_ct_CC="gcc"
-    $as_echo "$as_me:${as_lineno-$LINENO}: found $as_dir/$ac_word$ac_exec_ext" >&5
-    break 2
-  fi
-done
-  done
-IFS=$as_save_IFS
-
-fi
-fi
-ac_ct_CC=$ac_cv_prog_ac_ct_CC
-if test -n "$ac_ct_CC"; then
-  { $as_echo "$as_me:${as_lineno-$LINENO}: result: $ac_ct_CC" >&5
-$as_echo "$ac_ct_CC" >&6; }
-else
-  { $as_echo "$as_me:${as_lineno-$LINENO}: result: no" >&5
-$as_echo "no" >&6; }
-fi
-
-  if test "x$ac_ct_CC" = x; then
-    CC=""
-  else
-    case $cross_compiling:$ac_tool_warned in
-yes:)
-{ $as_echo "$as_me:${as_lineno-$LINENO}: WARNING: using cross tools not prefixed with host triplet" >&5
-$as_echo "$as_me: WARNING: using cross tools not prefixed with host triplet" >&2;}
-ac_tool_warned=yes ;;
-esac
-    CC=$ac_ct_CC
-  fi
-else
-  CC="$ac_cv_prog_CC"
-fi
-
-if test -z "$CC"; then
-          if test -n "$ac_tool_prefix"; then
-    # Extract the first word of "${ac_tool_prefix}cc", so it can be a program name with args.
-set dummy ${ac_tool_prefix}cc; ac_word=$2
-{ $as_echo "$as_me:${as_lineno-$LINENO}: checking for $ac_word" >&5
-$as_echo_n "checking for $ac_word... " >&6; }
-if ${ac_cv_prog_CC+:} false; then :
-  $as_echo_n "(cached) " >&6
-else
-  if test -n "$CC"; then
-  ac_cv_prog_CC="$CC" # Let the user override the test.
-else
-as_save_IFS=$IFS; IFS=$PATH_SEPARATOR
-for as_dir in $PATH
-do
-  IFS=$as_save_IFS
-  test -z "$as_dir" && as_dir=.
-    for ac_exec_ext in '' $ac_executable_extensions; do
-  if as_fn_executable_p "$as_dir/$ac_word$ac_exec_ext"; then
-    ac_cv_prog_CC="${ac_tool_prefix}cc"
-    $as_echo "$as_me:${as_lineno-$LINENO}: found $as_dir/$ac_word$ac_exec_ext" >&5
-    break 2
-  fi
-done
-  done
-IFS=$as_save_IFS
-
-fi
-fi
-CC=$ac_cv_prog_CC
-if test -n "$CC"; then
-  { $as_echo "$as_me:${as_lineno-$LINENO}: result: $CC" >&5
-$as_echo "$CC" >&6; }
-else
-  { $as_echo "$as_me:${as_lineno-$LINENO}: result: no" >&5
-$as_echo "no" >&6; }
-fi
-
-
-  fi
-fi
-if test -z "$CC"; then
-  # Extract the first word of "cc", so it can be a program name with args.
-set dummy cc; ac_word=$2
-{ $as_echo "$as_me:${as_lineno-$LINENO}: checking for $ac_word" >&5
-$as_echo_n "checking for $ac_word... " >&6; }
-if ${ac_cv_prog_CC+:} false; then :
-  $as_echo_n "(cached) " >&6
-else
-  if test -n "$CC"; then
-  ac_cv_prog_CC="$CC" # Let the user override the test.
-else
-  ac_prog_rejected=no
-as_save_IFS=$IFS; IFS=$PATH_SEPARATOR
-for as_dir in $PATH
-do
-  IFS=$as_save_IFS
-  test -z "$as_dir" && as_dir=.
-    for ac_exec_ext in '' $ac_executable_extensions; do
-  if as_fn_executable_p "$as_dir/$ac_word$ac_exec_ext"; then
-    if test "$as_dir/$ac_word$ac_exec_ext" = "/usr/ucb/cc"; then
-       ac_prog_rejected=yes
-       continue
-     fi
-    ac_cv_prog_CC="cc"
-    $as_echo "$as_me:${as_lineno-$LINENO}: found $as_dir/$ac_word$ac_exec_ext" >&5
-    break 2
-  fi
-done
-  done
-IFS=$as_save_IFS
-
-if test $ac_prog_rejected = yes; then
-  # We found a bogon in the path, so make sure we never use it.
-  set dummy $ac_cv_prog_CC
-  shift
-  if test $# != 0; then
-    # We chose a different compiler from the bogus one.
-    # However, it has the same basename, so the bogon will be chosen
-    # first if we set CC to just the basename; use the full file name.
-    shift
-    ac_cv_prog_CC="$as_dir/$ac_word${1+' '}$@"
-  fi
-fi
-fi
-fi
-CC=$ac_cv_prog_CC
-if test -n "$CC"; then
-  { $as_echo "$as_me:${as_lineno-$LINENO}: result: $CC" >&5
-$as_echo "$CC" >&6; }
-else
-  { $as_echo "$as_me:${as_lineno-$LINENO}: result: no" >&5
-$as_echo "no" >&6; }
-fi
-
-
-fi
-if test -z "$CC"; then
-  if test -n "$ac_tool_prefix"; then
-  for ac_prog in cl.exe
-  do
-    # Extract the first word of "$ac_tool_prefix$ac_prog", so it can be a program name with args.
-set dummy $ac_tool_prefix$ac_prog; ac_word=$2
-{ $as_echo "$as_me:${as_lineno-$LINENO}: checking for $ac_word" >&5
-$as_echo_n "checking for $ac_word... " >&6; }
-if ${ac_cv_prog_CC+:} false; then :
-  $as_echo_n "(cached) " >&6
-else
-  if test -n "$CC"; then
-  ac_cv_prog_CC="$CC" # Let the user override the test.
-else
-as_save_IFS=$IFS; IFS=$PATH_SEPARATOR
-for as_dir in $PATH
-do
-  IFS=$as_save_IFS
-  test -z "$as_dir" && as_dir=.
-    for ac_exec_ext in '' $ac_executable_extensions; do
-  if as_fn_executable_p "$as_dir/$ac_word$ac_exec_ext"; then
-    ac_cv_prog_CC="$ac_tool_prefix$ac_prog"
-    $as_echo "$as_me:${as_lineno-$LINENO}: found $as_dir/$ac_word$ac_exec_ext" >&5
-    break 2
-  fi
-done
-  done
-IFS=$as_save_IFS
-
-fi
-fi
-CC=$ac_cv_prog_CC
-if test -n "$CC"; then
-  { $as_echo "$as_me:${as_lineno-$LINENO}: result: $CC" >&5
-$as_echo "$CC" >&6; }
-else
-  { $as_echo "$as_me:${as_lineno-$LINENO}: result: no" >&5
-$as_echo "no" >&6; }
-fi
-
-
-    test -n "$CC" && break
-  done
-fi
-if test -z "$CC"; then
-  ac_ct_CC=$CC
-  for ac_prog in cl.exe
-do
-  # Extract the first word of "$ac_prog", so it can be a program name with args.
-set dummy $ac_prog; ac_word=$2
-{ $as_echo "$as_me:${as_lineno-$LINENO}: checking for $ac_word" >&5
-$as_echo_n "checking for $ac_word... " >&6; }
-if ${ac_cv_prog_ac_ct_CC+:} false; then :
-  $as_echo_n "(cached) " >&6
-else
-  if test -n "$ac_ct_CC"; then
-  ac_cv_prog_ac_ct_CC="$ac_ct_CC" # Let the user override the test.
-else
-as_save_IFS=$IFS; IFS=$PATH_SEPARATOR
-for as_dir in $PATH
-do
-  IFS=$as_save_IFS
-  test -z "$as_dir" && as_dir=.
-    for ac_exec_ext in '' $ac_executable_extensions; do
-  if as_fn_executable_p "$as_dir/$ac_word$ac_exec_ext"; then
-    ac_cv_prog_ac_ct_CC="$ac_prog"
-    $as_echo "$as_me:${as_lineno-$LINENO}: found $as_dir/$ac_word$ac_exec_ext" >&5
-    break 2
-  fi
-done
-  done
-IFS=$as_save_IFS
-
-fi
-fi
-ac_ct_CC=$ac_cv_prog_ac_ct_CC
-if test -n "$ac_ct_CC"; then
-  { $as_echo "$as_me:${as_lineno-$LINENO}: result: $ac_ct_CC" >&5
-$as_echo "$ac_ct_CC" >&6; }
-else
-  { $as_echo "$as_me:${as_lineno-$LINENO}: result: no" >&5
-$as_echo "no" >&6; }
-fi
-
-
-  test -n "$ac_ct_CC" && break
-done
-
-  if test "x$ac_ct_CC" = x; then
-    CC=""
-  else
-    case $cross_compiling:$ac_tool_warned in
-yes:)
-{ $as_echo "$as_me:${as_lineno-$LINENO}: WARNING: using cross tools not prefixed with host triplet" >&5
-$as_echo "$as_me: WARNING: using cross tools not prefixed with host triplet" >&2;}
-ac_tool_warned=yes ;;
-esac
-    CC=$ac_ct_CC
-  fi
-fi
-
-fi
-
-
-test -z "$CC" && { { $as_echo "$as_me:${as_lineno-$LINENO}: error: in \`$ac_pwd':" >&5
-$as_echo "$as_me: error: in \`$ac_pwd':" >&2;}
-as_fn_error $? "no acceptable C compiler found in \$PATH
-See \`config.log' for more details" "$LINENO" 5; }
-
-# Provide some information about the compiler.
-$as_echo "$as_me:${as_lineno-$LINENO}: checking for C compiler version" >&5
-set X $ac_compile
-ac_compiler=$2
-for ac_option in --version -v -V -qversion; do
-  { { ac_try="$ac_compiler $ac_option >&5"
-case "(($ac_try" in
-  *\"* | *\`* | *\\*) ac_try_echo=\$ac_try;;
-  *) ac_try_echo=$ac_try;;
-esac
-eval ac_try_echo="\"\$as_me:${as_lineno-$LINENO}: $ac_try_echo\""
-$as_echo "$ac_try_echo"; } >&5
-  (eval "$ac_compiler $ac_option >&5") 2>conftest.err
-  ac_status=$?
-  if test -s conftest.err; then
-    sed '10a\
-... rest of stderr output deleted ...
-         10q' conftest.err >conftest.er1
-    cat conftest.er1 >&5
-  fi
-  rm -f conftest.er1 conftest.err
-  $as_echo "$as_me:${as_lineno-$LINENO}: \$? = $ac_status" >&5
-  test $ac_status = 0; }
-done
-
-cat confdefs.h - <<_ACEOF >conftest.$ac_ext
-/* end confdefs.h.  */
-
-int
-main ()
-{
-
-  ;
-  return 0;
-}
-_ACEOF
-ac_clean_files_save=$ac_clean_files
-ac_clean_files="$ac_clean_files a.out a.out.dSYM a.exe b.out"
-# Try to create an executable without -o first, disregard a.out.
-# It will help us diagnose broken compilers, and finding out an intuition
-# of exeext.
-{ $as_echo "$as_me:${as_lineno-$LINENO}: checking whether the C compiler works" >&5
-$as_echo_n "checking whether the C compiler works... " >&6; }
-ac_link_default=`$as_echo "$ac_link" | sed 's/ -o *conftest[^ ]*//'`
-
-# The possible output files:
-ac_files="a.out conftest.exe conftest a.exe a_out.exe b.out conftest.*"
-
-ac_rmfiles=
-for ac_file in $ac_files
-do
-  case $ac_file in
-    *.$ac_ext | *.xcoff | *.tds | *.d | *.pdb | *.xSYM | *.bb | *.bbg | *.map | *.inf | *.dSYM | *.o | *.obj ) ;;
-    * ) ac_rmfiles="$ac_rmfiles $ac_file";;
-  esac
-done
-rm -f $ac_rmfiles
-
-if { { ac_try="$ac_link_default"
-case "(($ac_try" in
-  *\"* | *\`* | *\\*) ac_try_echo=\$ac_try;;
-  *) ac_try_echo=$ac_try;;
-esac
-eval ac_try_echo="\"\$as_me:${as_lineno-$LINENO}: $ac_try_echo\""
-$as_echo "$ac_try_echo"; } >&5
-  (eval "$ac_link_default") 2>&5
-  ac_status=$?
-  $as_echo "$as_me:${as_lineno-$LINENO}: \$? = $ac_status" >&5
-  test $ac_status = 0; }; then :
-  # Autoconf-2.13 could set the ac_cv_exeext variable to `no'.
-# So ignore a value of `no', otherwise this would lead to `EXEEXT = no'
-# in a Makefile.  We should not override ac_cv_exeext if it was cached,
-# so that the user can short-circuit this test for compilers unknown to
-# Autoconf.
-for ac_file in $ac_files ''
-do
-  test -f "$ac_file" || continue
-  case $ac_file in
-    *.$ac_ext | *.xcoff | *.tds | *.d | *.pdb | *.xSYM | *.bb | *.bbg | *.map | *.inf | *.dSYM | *.o | *.obj )
-	;;
-    [ab].out )
-	# We found the default executable, but exeext='' is most
-	# certainly right.
-	break;;
-    *.* )
-	if test "${ac_cv_exeext+set}" = set && test "$ac_cv_exeext" != no;
-	then :; else
-	   ac_cv_exeext=`expr "$ac_file" : '[^.]*\(\..*\)'`
-	fi
-	# We set ac_cv_exeext here because the later test for it is not
-	# safe: cross compilers may not add the suffix if given an `-o'
-	# argument, so we may need to know it at that point already.
-	# Even if this section looks crufty: it has the advantage of
-	# actually working.
-	break;;
-    * )
-	break;;
-  esac
-done
-test "$ac_cv_exeext" = no && ac_cv_exeext=
-
-else
-  ac_file=''
-fi
-if test -z "$ac_file"; then :
-  { $as_echo "$as_me:${as_lineno-$LINENO}: result: no" >&5
-$as_echo "no" >&6; }
-$as_echo "$as_me: failed program was:" >&5
-sed 's/^/| /' conftest.$ac_ext >&5
-
-{ { $as_echo "$as_me:${as_lineno-$LINENO}: error: in \`$ac_pwd':" >&5
-$as_echo "$as_me: error: in \`$ac_pwd':" >&2;}
-as_fn_error 77 "C compiler cannot create executables
-See \`config.log' for more details" "$LINENO" 5; }
-else
-  { $as_echo "$as_me:${as_lineno-$LINENO}: result: yes" >&5
-$as_echo "yes" >&6; }
-fi
-{ $as_echo "$as_me:${as_lineno-$LINENO}: checking for C compiler default output file name" >&5
-$as_echo_n "checking for C compiler default output file name... " >&6; }
-{ $as_echo "$as_me:${as_lineno-$LINENO}: result: $ac_file" >&5
-$as_echo "$ac_file" >&6; }
-ac_exeext=$ac_cv_exeext
-
-rm -f -r a.out a.out.dSYM a.exe conftest$ac_cv_exeext b.out
-ac_clean_files=$ac_clean_files_save
-{ $as_echo "$as_me:${as_lineno-$LINENO}: checking for suffix of executables" >&5
-$as_echo_n "checking for suffix of executables... " >&6; }
-if { { ac_try="$ac_link"
-case "(($ac_try" in
-  *\"* | *\`* | *\\*) ac_try_echo=\$ac_try;;
-  *) ac_try_echo=$ac_try;;
-esac
-eval ac_try_echo="\"\$as_me:${as_lineno-$LINENO}: $ac_try_echo\""
-$as_echo "$ac_try_echo"; } >&5
-  (eval "$ac_link") 2>&5
-  ac_status=$?
-  $as_echo "$as_me:${as_lineno-$LINENO}: \$? = $ac_status" >&5
-  test $ac_status = 0; }; then :
-  # If both `conftest.exe' and `conftest' are `present' (well, observable)
-# catch `conftest.exe'.  For instance with Cygwin, `ls conftest' will
-# work properly (i.e., refer to `conftest.exe'), while it won't with
-# `rm'.
-for ac_file in conftest.exe conftest conftest.*; do
-  test -f "$ac_file" || continue
-  case $ac_file in
-    *.$ac_ext | *.xcoff | *.tds | *.d | *.pdb | *.xSYM | *.bb | *.bbg | *.map | *.inf | *.dSYM | *.o | *.obj ) ;;
-    *.* ) ac_cv_exeext=`expr "$ac_file" : '[^.]*\(\..*\)'`
-	  break;;
-    * ) break;;
-  esac
-done
-else
-  { { $as_echo "$as_me:${as_lineno-$LINENO}: error: in \`$ac_pwd':" >&5
-$as_echo "$as_me: error: in \`$ac_pwd':" >&2;}
-as_fn_error $? "cannot compute suffix of executables: cannot compile and link
-See \`config.log' for more details" "$LINENO" 5; }
-fi
-rm -f conftest conftest$ac_cv_exeext
-{ $as_echo "$as_me:${as_lineno-$LINENO}: result: $ac_cv_exeext" >&5
-$as_echo "$ac_cv_exeext" >&6; }
-
-rm -f conftest.$ac_ext
-EXEEXT=$ac_cv_exeext
-ac_exeext=$EXEEXT
-cat confdefs.h - <<_ACEOF >conftest.$ac_ext
-/* end confdefs.h.  */
-#include <stdio.h>
-int
-main ()
-{
-FILE *f = fopen ("conftest.out", "w");
- return ferror (f) || fclose (f) != 0;
-
-  ;
-  return 0;
-}
-_ACEOF
-ac_clean_files="$ac_clean_files conftest.out"
-# Check that the compiler produces executables we can run.  If not, either
-# the compiler is broken, or we cross compile.
-{ $as_echo "$as_me:${as_lineno-$LINENO}: checking whether we are cross compiling" >&5
-$as_echo_n "checking whether we are cross compiling... " >&6; }
-if test "$cross_compiling" != yes; then
-  { { ac_try="$ac_link"
-case "(($ac_try" in
-  *\"* | *\`* | *\\*) ac_try_echo=\$ac_try;;
-  *) ac_try_echo=$ac_try;;
-esac
-eval ac_try_echo="\"\$as_me:${as_lineno-$LINENO}: $ac_try_echo\""
-$as_echo "$ac_try_echo"; } >&5
-  (eval "$ac_link") 2>&5
-  ac_status=$?
-  $as_echo "$as_me:${as_lineno-$LINENO}: \$? = $ac_status" >&5
-  test $ac_status = 0; }
-  if { ac_try='./conftest$ac_cv_exeext'
-  { { case "(($ac_try" in
-  *\"* | *\`* | *\\*) ac_try_echo=\$ac_try;;
-  *) ac_try_echo=$ac_try;;
-esac
-eval ac_try_echo="\"\$as_me:${as_lineno-$LINENO}: $ac_try_echo\""
-$as_echo "$ac_try_echo"; } >&5
-  (eval "$ac_try") 2>&5
-  ac_status=$?
-  $as_echo "$as_me:${as_lineno-$LINENO}: \$? = $ac_status" >&5
-  test $ac_status = 0; }; }; then
-    cross_compiling=no
-  else
-    if test "$cross_compiling" = maybe; then
-	cross_compiling=yes
-    else
-	{ { $as_echo "$as_me:${as_lineno-$LINENO}: error: in \`$ac_pwd':" >&5
-$as_echo "$as_me: error: in \`$ac_pwd':" >&2;}
-as_fn_error $? "cannot run C compiled programs.
-If you meant to cross compile, use \`--host'.
-See \`config.log' for more details" "$LINENO" 5; }
-    fi
-  fi
-fi
-{ $as_echo "$as_me:${as_lineno-$LINENO}: result: $cross_compiling" >&5
-$as_echo "$cross_compiling" >&6; }
-
-rm -f conftest.$ac_ext conftest$ac_cv_exeext conftest.out
-ac_clean_files=$ac_clean_files_save
-{ $as_echo "$as_me:${as_lineno-$LINENO}: checking for suffix of object files" >&5
-$as_echo_n "checking for suffix of object files... " >&6; }
-if ${ac_cv_objext+:} false; then :
-  $as_echo_n "(cached) " >&6
-else
-  cat confdefs.h - <<_ACEOF >conftest.$ac_ext
-/* end confdefs.h.  */
-
-int
-main ()
-{
-
-  ;
-  return 0;
-}
-_ACEOF
-rm -f conftest.o conftest.obj
-if { { ac_try="$ac_compile"
-case "(($ac_try" in
-  *\"* | *\`* | *\\*) ac_try_echo=\$ac_try;;
-  *) ac_try_echo=$ac_try;;
-esac
-eval ac_try_echo="\"\$as_me:${as_lineno-$LINENO}: $ac_try_echo\""
-$as_echo "$ac_try_echo"; } >&5
-  (eval "$ac_compile") 2>&5
-  ac_status=$?
-  $as_echo "$as_me:${as_lineno-$LINENO}: \$? = $ac_status" >&5
-  test $ac_status = 0; }; then :
-  for ac_file in conftest.o conftest.obj conftest.*; do
-  test -f "$ac_file" || continue;
-  case $ac_file in
-    *.$ac_ext | *.xcoff | *.tds | *.d | *.pdb | *.xSYM | *.bb | *.bbg | *.map | *.inf | *.dSYM ) ;;
-    *) ac_cv_objext=`expr "$ac_file" : '.*\.\(.*\)'`
-       break;;
-  esac
-done
-else
-  $as_echo "$as_me: failed program was:" >&5
-sed 's/^/| /' conftest.$ac_ext >&5
-
-{ { $as_echo "$as_me:${as_lineno-$LINENO}: error: in \`$ac_pwd':" >&5
-$as_echo "$as_me: error: in \`$ac_pwd':" >&2;}
-as_fn_error $? "cannot compute suffix of object files: cannot compile
-See \`config.log' for more details" "$LINENO" 5; }
-fi
-rm -f conftest.$ac_cv_objext conftest.$ac_ext
-fi
-{ $as_echo "$as_me:${as_lineno-$LINENO}: result: $ac_cv_objext" >&5
-$as_echo "$ac_cv_objext" >&6; }
-OBJEXT=$ac_cv_objext
-ac_objext=$OBJEXT
-{ $as_echo "$as_me:${as_lineno-$LINENO}: checking whether we are using the GNU C compiler" >&5
-$as_echo_n "checking whether we are using the GNU C compiler... " >&6; }
-if ${ac_cv_c_compiler_gnu+:} false; then :
-  $as_echo_n "(cached) " >&6
-else
-  cat confdefs.h - <<_ACEOF >conftest.$ac_ext
-/* end confdefs.h.  */
-
-int
-main ()
-{
-#ifndef __GNUC__
-       choke me
-#endif
-
-  ;
-  return 0;
-}
-_ACEOF
-if ac_fn_c_try_compile "$LINENO"; then :
-  ac_compiler_gnu=yes
-else
-  ac_compiler_gnu=no
-fi
-rm -f core conftest.err conftest.$ac_objext conftest.$ac_ext
-ac_cv_c_compiler_gnu=$ac_compiler_gnu
-
-fi
-{ $as_echo "$as_me:${as_lineno-$LINENO}: result: $ac_cv_c_compiler_gnu" >&5
-$as_echo "$ac_cv_c_compiler_gnu" >&6; }
-if test $ac_compiler_gnu = yes; then
-  GCC=yes
-else
-  GCC=
-fi
-ac_test_CFLAGS=${CFLAGS+set}
-ac_save_CFLAGS=$CFLAGS
-{ $as_echo "$as_me:${as_lineno-$LINENO}: checking whether $CC accepts -g" >&5
-$as_echo_n "checking whether $CC accepts -g... " >&6; }
-if ${ac_cv_prog_cc_g+:} false; then :
-  $as_echo_n "(cached) " >&6
-else
-  ac_save_c_werror_flag=$ac_c_werror_flag
-   ac_c_werror_flag=yes
-   ac_cv_prog_cc_g=no
-   CFLAGS="-g"
-   cat confdefs.h - <<_ACEOF >conftest.$ac_ext
-/* end confdefs.h.  */
-
-int
-main ()
-{
-
-  ;
-  return 0;
-}
-_ACEOF
-if ac_fn_c_try_compile "$LINENO"; then :
-  ac_cv_prog_cc_g=yes
-else
-  CFLAGS=""
-      cat confdefs.h - <<_ACEOF >conftest.$ac_ext
-/* end confdefs.h.  */
-
-int
-main ()
-{
-
-  ;
-  return 0;
-}
-_ACEOF
-if ac_fn_c_try_compile "$LINENO"; then :
-
-else
-  ac_c_werror_flag=$ac_save_c_werror_flag
-	 CFLAGS="-g"
-	 cat confdefs.h - <<_ACEOF >conftest.$ac_ext
-/* end confdefs.h.  */
-
-int
-main ()
-{
-
-  ;
-  return 0;
-}
-_ACEOF
-if ac_fn_c_try_compile "$LINENO"; then :
-  ac_cv_prog_cc_g=yes
-fi
-rm -f core conftest.err conftest.$ac_objext conftest.$ac_ext
-fi
-rm -f core conftest.err conftest.$ac_objext conftest.$ac_ext
-fi
-rm -f core conftest.err conftest.$ac_objext conftest.$ac_ext
-   ac_c_werror_flag=$ac_save_c_werror_flag
-fi
-{ $as_echo "$as_me:${as_lineno-$LINENO}: result: $ac_cv_prog_cc_g" >&5
-$as_echo "$ac_cv_prog_cc_g" >&6; }
-if test "$ac_test_CFLAGS" = set; then
-  CFLAGS=$ac_save_CFLAGS
-elif test $ac_cv_prog_cc_g = yes; then
-  if test "$GCC" = yes; then
-    CFLAGS="-g -O2"
-  else
-    CFLAGS="-g"
-  fi
-else
-  if test "$GCC" = yes; then
-    CFLAGS="-O2"
-  else
-    CFLAGS=
-  fi
-fi
-{ $as_echo "$as_me:${as_lineno-$LINENO}: checking for $CC option to accept ISO C89" >&5
-$as_echo_n "checking for $CC option to accept ISO C89... " >&6; }
-if ${ac_cv_prog_cc_c89+:} false; then :
-  $as_echo_n "(cached) " >&6
-else
-  ac_cv_prog_cc_c89=no
-ac_save_CC=$CC
-cat confdefs.h - <<_ACEOF >conftest.$ac_ext
-/* end confdefs.h.  */
-#include <stdarg.h>
-#include <stdio.h>
-struct stat;
-/* Most of the following tests are stolen from RCS 5.7's src/conf.sh.  */
-struct buf { int x; };
-FILE * (*rcsopen) (struct buf *, struct stat *, int);
-static char *e (p, i)
-     char **p;
-     int i;
-{
-  return p[i];
-}
-static char *f (char * (*g) (char **, int), char **p, ...)
-{
-  char *s;
-  va_list v;
-  va_start (v,p);
-  s = g (p, va_arg (v,int));
-  va_end (v);
-  return s;
-}
-
-/* OSF 4.0 Compaq cc is some sort of almost-ANSI by default.  It has
-   function prototypes and stuff, but not '\xHH' hex character constants.
-   These don't provoke an error unfortunately, instead are silently treated
-   as 'x'.  The following induces an error, until -std is added to get
-   proper ANSI mode.  Curiously '\x00'!='x' always comes out true, for an
-   array size at least.  It's necessary to write '\x00'==0 to get something
-   that's true only with -std.  */
-int osf4_cc_array ['\x00' == 0 ? 1 : -1];
-
-/* IBM C 6 for AIX is almost-ANSI by default, but it replaces macro parameters
-   inside strings and character constants.  */
-#define FOO(x) 'x'
-int xlc6_cc_array[FOO(a) == 'x' ? 1 : -1];
-
-int test (int i, double x);
-struct s1 {int (*f) (int a);};
-struct s2 {int (*f) (double a);};
-int pairnames (int, char **, FILE *(*)(struct buf *, struct stat *, int), int, int);
-int argc;
-char **argv;
-int
-main ()
-{
-return f (e, argv, 0) != argv[0]  ||  f (e, argv, 1) != argv[1];
-  ;
-  return 0;
-}
-_ACEOF
-for ac_arg in '' -qlanglvl=extc89 -qlanglvl=ansi -std \
-	-Ae "-Aa -D_HPUX_SOURCE" "-Xc -D__EXTENSIONS__"
-do
-  CC="$ac_save_CC $ac_arg"
-  if ac_fn_c_try_compile "$LINENO"; then :
-  ac_cv_prog_cc_c89=$ac_arg
-fi
-rm -f core conftest.err conftest.$ac_objext
-  test "x$ac_cv_prog_cc_c89" != "xno" && break
-done
-rm -f conftest.$ac_ext
-CC=$ac_save_CC
-
-fi
-# AC_CACHE_VAL
-case "x$ac_cv_prog_cc_c89" in
-  x)
-    { $as_echo "$as_me:${as_lineno-$LINENO}: result: none needed" >&5
-$as_echo "none needed" >&6; } ;;
-  xno)
-    { $as_echo "$as_me:${as_lineno-$LINENO}: result: unsupported" >&5
-$as_echo "unsupported" >&6; } ;;
-  *)
-    CC="$CC $ac_cv_prog_cc_c89"
-    { $as_echo "$as_me:${as_lineno-$LINENO}: result: $ac_cv_prog_cc_c89" >&5
-$as_echo "$ac_cv_prog_cc_c89" >&6; } ;;
-esac
-if test "x$ac_cv_prog_cc_c89" != xno; then :
-
-fi
-
-ac_ext=c
-ac_cpp='$CPP $CPPFLAGS'
-ac_compile='$CC -c $CFLAGS $CPPFLAGS conftest.$ac_ext >&5'
-ac_link='$CC -o conftest$ac_exeext $CFLAGS $CPPFLAGS $LDFLAGS conftest.$ac_ext $LIBS >&5'
-ac_compiler_gnu=$ac_cv_c_compiler_gnu
-
-ac_ext=c
-ac_cpp='$CPP $CPPFLAGS'
-ac_compile='$CC -c $CFLAGS $CPPFLAGS conftest.$ac_ext >&5'
-ac_link='$CC -o conftest$ac_exeext $CFLAGS $CPPFLAGS $LDFLAGS conftest.$ac_ext $LIBS >&5'
-ac_compiler_gnu=$ac_cv_c_compiler_gnu
-{ $as_echo "$as_me:${as_lineno-$LINENO}: checking whether $CC understands -c and -o together" >&5
-$as_echo_n "checking whether $CC understands -c and -o together... " >&6; }
-if ${am_cv_prog_cc_c_o+:} false; then :
-  $as_echo_n "(cached) " >&6
-else
-  cat confdefs.h - <<_ACEOF >conftest.$ac_ext
-/* end confdefs.h.  */
-
-int
-main ()
-{
-
-  ;
-  return 0;
-}
-_ACEOF
-  # Make sure it works both with $CC and with simple cc.
-  # Following AC_PROG_CC_C_O, we do the test twice because some
-  # compilers refuse to overwrite an existing .o file with -o,
-  # though they will create one.
-  am_cv_prog_cc_c_o=yes
-  for am_i in 1 2; do
-    if { echo "$as_me:$LINENO: $CC -c conftest.$ac_ext -o conftest2.$ac_objext" >&5
-   ($CC -c conftest.$ac_ext -o conftest2.$ac_objext) >&5 2>&5
-   ac_status=$?
-   echo "$as_me:$LINENO: \$? = $ac_status" >&5
-   (exit $ac_status); } \
-         && test -f conftest2.$ac_objext; then
-      : OK
-    else
-      am_cv_prog_cc_c_o=no
-      break
-    fi
-  done
-  rm -f core conftest*
-  unset am_i
-fi
-{ $as_echo "$as_me:${as_lineno-$LINENO}: result: $am_cv_prog_cc_c_o" >&5
-$as_echo "$am_cv_prog_cc_c_o" >&6; }
-if test "$am_cv_prog_cc_c_o" != yes; then
-   # Losing compiler, so override with the script.
-   # FIXME: It is wrong to rewrite CC.
-   # But if we don't then we get into trouble of one sort or another.
-   # A longer-term fix would be to have automake use am__CC in this case,
-   # and then we could set am__CC="\$(top_srcdir)/compile \$(CC)"
-   CC="$am_aux_dir/compile $CC"
-fi
-ac_ext=c
-ac_cpp='$CPP $CPPFLAGS'
-ac_compile='$CC -c $CFLAGS $CPPFLAGS conftest.$ac_ext >&5'
-ac_link='$CC -o conftest$ac_exeext $CFLAGS $CPPFLAGS $LDFLAGS conftest.$ac_ext $LIBS >&5'
-ac_compiler_gnu=$ac_cv_c_compiler_gnu
-
-DEPDIR="${am__leading_dot}deps"
-
-ac_config_commands="$ac_config_commands depfiles"
-
-
-am_make=${MAKE-make}
-cat > confinc << 'END'
-am__doit:
-	@echo this is the am__doit target
-.PHONY: am__doit
-END
-# If we don't find an include directive, just comment out the code.
-{ $as_echo "$as_me:${as_lineno-$LINENO}: checking for style of include used by $am_make" >&5
-$as_echo_n "checking for style of include used by $am_make... " >&6; }
-am__include="#"
-am__quote=
-_am_result=none
-# First try GNU make style include.
-echo "include confinc" > confmf
-# Ignore all kinds of additional output from 'make'.
-case `$am_make -s -f confmf 2> /dev/null` in #(
-*the\ am__doit\ target*)
-  am__include=include
-  am__quote=
-  _am_result=GNU
-  ;;
-esac
-# Now try BSD make style include.
-if test "$am__include" = "#"; then
-   echo '.include "confinc"' > confmf
-   case `$am_make -s -f confmf 2> /dev/null` in #(
-   *the\ am__doit\ target*)
-     am__include=.include
-     am__quote="\""
-     _am_result=BSD
-     ;;
-   esac
-fi
-
-
-{ $as_echo "$as_me:${as_lineno-$LINENO}: result: $_am_result" >&5
-$as_echo "$_am_result" >&6; }
-rm -f confinc confmf
-
-# Check whether --enable-dependency-tracking was given.
-if test "${enable_dependency_tracking+set}" = set; then :
-  enableval=$enable_dependency_tracking;
-fi
-
-if test "x$enable_dependency_tracking" != xno; then
-  am_depcomp="$ac_aux_dir/depcomp"
-  AMDEPBACKSLASH='\'
-  am__nodep='_no'
-fi
- if test "x$enable_dependency_tracking" != xno; then
-  AMDEP_TRUE=
-  AMDEP_FALSE='#'
-else
-  AMDEP_TRUE='#'
-  AMDEP_FALSE=
-fi
-
-
-
-depcc="$CC"   am_compiler_list=
-
-{ $as_echo "$as_me:${as_lineno-$LINENO}: checking dependency style of $depcc" >&5
-$as_echo_n "checking dependency style of $depcc... " >&6; }
-if ${am_cv_CC_dependencies_compiler_type+:} false; then :
-  $as_echo_n "(cached) " >&6
-else
-  if test -z "$AMDEP_TRUE" && test -f "$am_depcomp"; then
-  # We make a subdir and do the tests there.  Otherwise we can end up
-  # making bogus files that we don't know about and never remove.  For
-  # instance it was reported that on HP-UX the gcc test will end up
-  # making a dummy file named 'D' -- because '-MD' means "put the output
-  # in D".
-  rm -rf conftest.dir
-  mkdir conftest.dir
-  # Copy depcomp to subdir because otherwise we won't find it if we're
-  # using a relative directory.
-  cp "$am_depcomp" conftest.dir
-  cd conftest.dir
-  # We will build objects and dependencies in a subdirectory because
-  # it helps to detect inapplicable dependency modes.  For instance
-  # both Tru64's cc and ICC support -MD to output dependencies as a
-  # side effect of compilation, but ICC will put the dependencies in
-  # the current directory while Tru64 will put them in the object
-  # directory.
-  mkdir sub
-
-  am_cv_CC_dependencies_compiler_type=none
-  if test "$am_compiler_list" = ""; then
-     am_compiler_list=`sed -n 's/^#*\([a-zA-Z0-9]*\))$/\1/p' < ./depcomp`
-  fi
-  am__universal=false
-  case " $depcc " in #(
-     *\ -arch\ *\ -arch\ *) am__universal=true ;;
-     esac
-
-  for depmode in $am_compiler_list; do
-    # Setup a source with many dependencies, because some compilers
-    # like to wrap large dependency lists on column 80 (with \), and
-    # we should not choose a depcomp mode which is confused by this.
-    #
-    # We need to recreate these files for each test, as the compiler may
-    # overwrite some of them when testing with obscure command lines.
-    # This happens at least with the AIX C compiler.
-    : > sub/conftest.c
-    for i in 1 2 3 4 5 6; do
-      echo '#include "conftst'$i'.h"' >> sub/conftest.c
-      # Using ": > sub/conftst$i.h" creates only sub/conftst1.h with
-      # Solaris 10 /bin/sh.
-      echo '/* dummy */' > sub/conftst$i.h
-    done
-    echo "${am__include} ${am__quote}sub/conftest.Po${am__quote}" > confmf
-
-    # We check with '-c' and '-o' for the sake of the "dashmstdout"
-    # mode.  It turns out that the SunPro C++ compiler does not properly
-    # handle '-M -o', and we need to detect this.  Also, some Intel
-    # versions had trouble with output in subdirs.
-    am__obj=sub/conftest.${OBJEXT-o}
-    am__minus_obj="-o $am__obj"
-    case $depmode in
-    gcc)
-      # This depmode causes a compiler race in universal mode.
-      test "$am__universal" = false || continue
-      ;;
-    nosideeffect)
-      # After this tag, mechanisms are not by side-effect, so they'll
-      # only be used when explicitly requested.
-      if test "x$enable_dependency_tracking" = xyes; then
-	continue
-      else
-	break
-      fi
-      ;;
-    msvc7 | msvc7msys | msvisualcpp | msvcmsys)
-      # This compiler won't grok '-c -o', but also, the minuso test has
-      # not run yet.  These depmodes are late enough in the game, and
-      # so weak that their functioning should not be impacted.
-      am__obj=conftest.${OBJEXT-o}
-      am__minus_obj=
-      ;;
-    none) break ;;
-    esac
-    if depmode=$depmode \
-       source=sub/conftest.c object=$am__obj \
-       depfile=sub/conftest.Po tmpdepfile=sub/conftest.TPo \
-       $SHELL ./depcomp $depcc -c $am__minus_obj sub/conftest.c \
-         >/dev/null 2>conftest.err &&
-       grep sub/conftst1.h sub/conftest.Po > /dev/null 2>&1 &&
-       grep sub/conftst6.h sub/conftest.Po > /dev/null 2>&1 &&
-       grep $am__obj sub/conftest.Po > /dev/null 2>&1 &&
-       ${MAKE-make} -s -f confmf > /dev/null 2>&1; then
-      # icc doesn't choke on unknown options, it will just issue warnings
-      # or remarks (even with -Werror).  So we grep stderr for any message
-      # that says an option was ignored or not supported.
-      # When given -MP, icc 7.0 and 7.1 complain thusly:
-      #   icc: Command line warning: ignoring option '-M'; no argument required
-      # The diagnosis changed in icc 8.0:
-      #   icc: Command line remark: option '-MP' not supported
-      if (grep 'ignoring option' conftest.err ||
-          grep 'not supported' conftest.err) >/dev/null 2>&1; then :; else
-        am_cv_CC_dependencies_compiler_type=$depmode
-        break
-      fi
-    fi
-  done
-
-  cd ..
-  rm -rf conftest.dir
-else
-  am_cv_CC_dependencies_compiler_type=none
-fi
-
-fi
-{ $as_echo "$as_me:${as_lineno-$LINENO}: result: $am_cv_CC_dependencies_compiler_type" >&5
-$as_echo "$am_cv_CC_dependencies_compiler_type" >&6; }
-CCDEPMODE=depmode=$am_cv_CC_dependencies_compiler_type
-
- if
-  test "x$enable_dependency_tracking" != xno \
-  && test "$am_cv_CC_dependencies_compiler_type" = gcc3; then
-  am__fastdepCC_TRUE=
-  am__fastdepCC_FALSE='#'
-else
-  am__fastdepCC_TRUE='#'
-  am__fastdepCC_FALSE=
-fi
-
-
-
-{ $as_echo "$as_me:${as_lineno-$LINENO}: checking whether ${MAKE-make} sets \$(MAKE)" >&5
-$as_echo_n "checking whether ${MAKE-make} sets \$(MAKE)... " >&6; }
-set x ${MAKE-make}
-ac_make=`$as_echo "$2" | sed 's/+/p/g; s/[^a-zA-Z0-9_]/_/g'`
-if eval \${ac_cv_prog_make_${ac_make}_set+:} false; then :
-  $as_echo_n "(cached) " >&6
-else
-  cat >conftest.make <<\_ACEOF
-SHELL = /bin/sh
-all:
-	@echo '@@@%%%=$(MAKE)=@@@%%%'
-_ACEOF
-# GNU make sometimes prints "make[1]: Entering ...", which would confuse us.
-case `${MAKE-make} -f conftest.make 2>/dev/null` in
-  *@@@%%%=?*=@@@%%%*)
-    eval ac_cv_prog_make_${ac_make}_set=yes;;
-  *)
-    eval ac_cv_prog_make_${ac_make}_set=no;;
-esac
-rm -f conftest.make
-fi
-if eval test \$ac_cv_prog_make_${ac_make}_set = yes; then
-  { $as_echo "$as_me:${as_lineno-$LINENO}: result: yes" >&5
-$as_echo "yes" >&6; }
-  SET_MAKE=
-else
-  { $as_echo "$as_me:${as_lineno-$LINENO}: result: no" >&5
-$as_echo "no" >&6; }
-  SET_MAKE="MAKE=${MAKE-make}"
-fi
-
-
-# For autobuild.
-# Make sure we can run config.sub.
-$SHELL "$ac_aux_dir/config.sub" sun4 >/dev/null 2>&1 ||
-  as_fn_error $? "cannot run $SHELL $ac_aux_dir/config.sub" "$LINENO" 5
-
-{ $as_echo "$as_me:${as_lineno-$LINENO}: checking build system type" >&5
-$as_echo_n "checking build system type... " >&6; }
-if ${ac_cv_build+:} false; then :
-  $as_echo_n "(cached) " >&6
-else
-  ac_build_alias=$build_alias
-test "x$ac_build_alias" = x &&
-  ac_build_alias=`$SHELL "$ac_aux_dir/config.guess"`
-test "x$ac_build_alias" = x &&
-  as_fn_error $? "cannot guess build type; you must specify one" "$LINENO" 5
-ac_cv_build=`$SHELL "$ac_aux_dir/config.sub" $ac_build_alias` ||
-  as_fn_error $? "$SHELL $ac_aux_dir/config.sub $ac_build_alias failed" "$LINENO" 5
-
-fi
-{ $as_echo "$as_me:${as_lineno-$LINENO}: result: $ac_cv_build" >&5
-$as_echo "$ac_cv_build" >&6; }
-case $ac_cv_build in
-*-*-*) ;;
-*) as_fn_error $? "invalid value of canonical build" "$LINENO" 5;;
-esac
-build=$ac_cv_build
-ac_save_IFS=$IFS; IFS='-'
-set x $ac_cv_build
-shift
-build_cpu=$1
-build_vendor=$2
-shift; shift
-# Remember, the first character of IFS is used to create $*,
-# except with old shells:
-build_os=$*
-IFS=$ac_save_IFS
-case $build_os in *\ *) build_os=`echo "$build_os" | sed 's/ /-/g'`;; esac
-
-
-{ $as_echo "$as_me:${as_lineno-$LINENO}: checking host system type" >&5
-$as_echo_n "checking host system type... " >&6; }
-if ${ac_cv_host+:} false; then :
-  $as_echo_n "(cached) " >&6
-else
-  if test "x$host_alias" = x; then
-  ac_cv_host=$ac_cv_build
-else
-  ac_cv_host=`$SHELL "$ac_aux_dir/config.sub" $host_alias` ||
-    as_fn_error $? "$SHELL $ac_aux_dir/config.sub $host_alias failed" "$LINENO" 5
-fi
-
-fi
-{ $as_echo "$as_me:${as_lineno-$LINENO}: result: $ac_cv_host" >&5
-$as_echo "$ac_cv_host" >&6; }
-case $ac_cv_host in
-*-*-*) ;;
-*) as_fn_error $? "invalid value of canonical host" "$LINENO" 5;;
-esac
-host=$ac_cv_host
-ac_save_IFS=$IFS; IFS='-'
-set x $ac_cv_host
-shift
-host_cpu=$1
-host_vendor=$2
-shift; shift
-# Remember, the first character of IFS is used to create $*,
-# except with old shells:
-host_os=$*
-IFS=$ac_save_IFS
-case $host_os in *\ *) host_os=`echo "$host_os" | sed 's/ /-/g'`;; esac
-
-
-
-
-
-ac_ext=c
-ac_cpp='$CPP $CPPFLAGS'
-ac_compile='$CC -c $CFLAGS $CPPFLAGS conftest.$ac_ext >&5'
-ac_link='$CC -o conftest$ac_exeext $CFLAGS $CPPFLAGS $LDFLAGS conftest.$ac_ext $LIBS >&5'
-ac_compiler_gnu=$ac_cv_c_compiler_gnu
-{ $as_echo "$as_me:${as_lineno-$LINENO}: checking how to run the C preprocessor" >&5
-$as_echo_n "checking how to run the C preprocessor... " >&6; }
-# On Suns, sometimes $CPP names a directory.
-if test -n "$CPP" && test -d "$CPP"; then
-  CPP=
-fi
-if test -z "$CPP"; then
-  if ${ac_cv_prog_CPP+:} false; then :
-  $as_echo_n "(cached) " >&6
-else
-      # Double quotes because CPP needs to be expanded
-    for CPP in "$CC -E" "$CC -E -traditional-cpp" "/lib/cpp"
-    do
-      ac_preproc_ok=false
-for ac_c_preproc_warn_flag in '' yes
-do
-  # Use a header file that comes with gcc, so configuring glibc
-  # with a fresh cross-compiler works.
-  # Prefer <limits.h> to <assert.h> if __STDC__ is defined, since
-  # <limits.h> exists even on freestanding compilers.
-  # On the NeXT, cc -E runs the code through the compiler's parser,
-  # not just through cpp. "Syntax error" is here to catch this case.
-  cat confdefs.h - <<_ACEOF >conftest.$ac_ext
-/* end confdefs.h.  */
-#ifdef __STDC__
-# include <limits.h>
-#else
-# include <assert.h>
-#endif
-		     Syntax error
-_ACEOF
-if ac_fn_c_try_cpp "$LINENO"; then :
-
-else
-  # Broken: fails on valid input.
-continue
-fi
-rm -f conftest.err conftest.i conftest.$ac_ext
-
-  # OK, works on sane cases.  Now check whether nonexistent headers
-  # can be detected and how.
-  cat confdefs.h - <<_ACEOF >conftest.$ac_ext
-/* end confdefs.h.  */
-#include <ac_nonexistent.h>
-_ACEOF
-if ac_fn_c_try_cpp "$LINENO"; then :
-  # Broken: success on invalid input.
-continue
-else
-  # Passes both tests.
-ac_preproc_ok=:
-break
-fi
-rm -f conftest.err conftest.i conftest.$ac_ext
-
-done
-# Because of `break', _AC_PREPROC_IFELSE's cleaning code was skipped.
-rm -f conftest.i conftest.err conftest.$ac_ext
-if $ac_preproc_ok; then :
-  break
-fi
-
-    done
-    ac_cv_prog_CPP=$CPP
-
-fi
-  CPP=$ac_cv_prog_CPP
-else
-  ac_cv_prog_CPP=$CPP
-fi
-{ $as_echo "$as_me:${as_lineno-$LINENO}: result: $CPP" >&5
-$as_echo "$CPP" >&6; }
-ac_preproc_ok=false
-for ac_c_preproc_warn_flag in '' yes
-do
-  # Use a header file that comes with gcc, so configuring glibc
-  # with a fresh cross-compiler works.
-  # Prefer <limits.h> to <assert.h> if __STDC__ is defined, since
-  # <limits.h> exists even on freestanding compilers.
-  # On the NeXT, cc -E runs the code through the compiler's parser,
-  # not just through cpp. "Syntax error" is here to catch this case.
-  cat confdefs.h - <<_ACEOF >conftest.$ac_ext
-/* end confdefs.h.  */
-#ifdef __STDC__
-# include <limits.h>
-#else
-# include <assert.h>
-#endif
-		     Syntax error
-_ACEOF
-if ac_fn_c_try_cpp "$LINENO"; then :
-
-else
-  # Broken: fails on valid input.
-continue
-fi
-rm -f conftest.err conftest.i conftest.$ac_ext
-
-  # OK, works on sane cases.  Now check whether nonexistent headers
-  # can be detected and how.
-  cat confdefs.h - <<_ACEOF >conftest.$ac_ext
-/* end confdefs.h.  */
-#include <ac_nonexistent.h>
-_ACEOF
-if ac_fn_c_try_cpp "$LINENO"; then :
-  # Broken: success on invalid input.
-continue
-else
-  # Passes both tests.
-ac_preproc_ok=:
-break
-fi
-rm -f conftest.err conftest.i conftest.$ac_ext
-
-done
-# Because of `break', _AC_PREPROC_IFELSE's cleaning code was skipped.
-rm -f conftest.i conftest.err conftest.$ac_ext
-if $ac_preproc_ok; then :
-
-else
-  { { $as_echo "$as_me:${as_lineno-$LINENO}: error: in \`$ac_pwd':" >&5
-$as_echo "$as_me: error: in \`$ac_pwd':" >&2;}
-as_fn_error $? "C preprocessor \"$CPP\" fails sanity check
-See \`config.log' for more details" "$LINENO" 5; }
-fi
-
-ac_ext=c
-ac_cpp='$CPP $CPPFLAGS'
-ac_compile='$CC -c $CFLAGS $CPPFLAGS conftest.$ac_ext >&5'
-ac_link='$CC -o conftest$ac_exeext $CFLAGS $CPPFLAGS $LDFLAGS conftest.$ac_ext $LIBS >&5'
-ac_compiler_gnu=$ac_cv_c_compiler_gnu
-
-
-{ $as_echo "$as_me:${as_lineno-$LINENO}: checking for grep that handles long lines and -e" >&5
-$as_echo_n "checking for grep that handles long lines and -e... " >&6; }
-if ${ac_cv_path_GREP+:} false; then :
-  $as_echo_n "(cached) " >&6
-else
-  if test -z "$GREP"; then
-  ac_path_GREP_found=false
-  # Loop through the user's path and test for each of PROGNAME-LIST
-  as_save_IFS=$IFS; IFS=$PATH_SEPARATOR
-for as_dir in $PATH$PATH_SEPARATOR/usr/xpg4/bin
-do
-  IFS=$as_save_IFS
-  test -z "$as_dir" && as_dir=.
-    for ac_prog in grep ggrep; do
-    for ac_exec_ext in '' $ac_executable_extensions; do
-      ac_path_GREP="$as_dir/$ac_prog$ac_exec_ext"
-      as_fn_executable_p "$ac_path_GREP" || continue
-# Check for GNU ac_path_GREP and select it if it is found.
-  # Check for GNU $ac_path_GREP
-case `"$ac_path_GREP" --version 2>&1` in
-*GNU*)
-  ac_cv_path_GREP="$ac_path_GREP" ac_path_GREP_found=:;;
-*)
-  ac_count=0
-  $as_echo_n 0123456789 >"conftest.in"
-  while :
-  do
-    cat "conftest.in" "conftest.in" >"conftest.tmp"
-    mv "conftest.tmp" "conftest.in"
-    cp "conftest.in" "conftest.nl"
-    $as_echo 'GREP' >> "conftest.nl"
-    "$ac_path_GREP" -e 'GREP$' -e '-(cannot match)-' < "conftest.nl" >"conftest.out" 2>/dev/null || break
-    diff "conftest.out" "conftest.nl" >/dev/null 2>&1 || break
-    as_fn_arith $ac_count + 1 && ac_count=$as_val
-    if test $ac_count -gt ${ac_path_GREP_max-0}; then
-      # Best one so far, save it but keep looking for a better one
-      ac_cv_path_GREP="$ac_path_GREP"
-      ac_path_GREP_max=$ac_count
-    fi
-    # 10*(2^10) chars as input seems more than enough
-    test $ac_count -gt 10 && break
-  done
-  rm -f conftest.in conftest.tmp conftest.nl conftest.out;;
-esac
-
-      $ac_path_GREP_found && break 3
-    done
-  done
-  done
-IFS=$as_save_IFS
-  if test -z "$ac_cv_path_GREP"; then
-    as_fn_error $? "no acceptable grep could be found in $PATH$PATH_SEPARATOR/usr/xpg4/bin" "$LINENO" 5
-  fi
-else
-  ac_cv_path_GREP=$GREP
-fi
-
-fi
-{ $as_echo "$as_me:${as_lineno-$LINENO}: result: $ac_cv_path_GREP" >&5
-$as_echo "$ac_cv_path_GREP" >&6; }
- GREP="$ac_cv_path_GREP"
-
-
-{ $as_echo "$as_me:${as_lineno-$LINENO}: checking for egrep" >&5
-$as_echo_n "checking for egrep... " >&6; }
-if ${ac_cv_path_EGREP+:} false; then :
-  $as_echo_n "(cached) " >&6
-else
-  if echo a | $GREP -E '(a|b)' >/dev/null 2>&1
-   then ac_cv_path_EGREP="$GREP -E"
-   else
-     if test -z "$EGREP"; then
-  ac_path_EGREP_found=false
-  # Loop through the user's path and test for each of PROGNAME-LIST
-  as_save_IFS=$IFS; IFS=$PATH_SEPARATOR
-for as_dir in $PATH$PATH_SEPARATOR/usr/xpg4/bin
-do
-  IFS=$as_save_IFS
-  test -z "$as_dir" && as_dir=.
-    for ac_prog in egrep; do
-    for ac_exec_ext in '' $ac_executable_extensions; do
-      ac_path_EGREP="$as_dir/$ac_prog$ac_exec_ext"
-      as_fn_executable_p "$ac_path_EGREP" || continue
-# Check for GNU ac_path_EGREP and select it if it is found.
-  # Check for GNU $ac_path_EGREP
-case `"$ac_path_EGREP" --version 2>&1` in
-*GNU*)
-  ac_cv_path_EGREP="$ac_path_EGREP" ac_path_EGREP_found=:;;
-*)
-  ac_count=0
-  $as_echo_n 0123456789 >"conftest.in"
-  while :
-  do
-    cat "conftest.in" "conftest.in" >"conftest.tmp"
-    mv "conftest.tmp" "conftest.in"
-    cp "conftest.in" "conftest.nl"
-    $as_echo 'EGREP' >> "conftest.nl"
-    "$ac_path_EGREP" 'EGREP$' < "conftest.nl" >"conftest.out" 2>/dev/null || break
-    diff "conftest.out" "conftest.nl" >/dev/null 2>&1 || break
-    as_fn_arith $ac_count + 1 && ac_count=$as_val
-    if test $ac_count -gt ${ac_path_EGREP_max-0}; then
-      # Best one so far, save it but keep looking for a better one
-      ac_cv_path_EGREP="$ac_path_EGREP"
-      ac_path_EGREP_max=$ac_count
-    fi
-    # 10*(2^10) chars as input seems more than enough
-    test $ac_count -gt 10 && break
-  done
-  rm -f conftest.in conftest.tmp conftest.nl conftest.out;;
-esac
-
-      $ac_path_EGREP_found && break 3
-    done
-  done
-  done
-IFS=$as_save_IFS
-  if test -z "$ac_cv_path_EGREP"; then
-    as_fn_error $? "no acceptable egrep could be found in $PATH$PATH_SEPARATOR/usr/xpg4/bin" "$LINENO" 5
-  fi
-else
-  ac_cv_path_EGREP=$EGREP
-fi
-
-   fi
-fi
-{ $as_echo "$as_me:${as_lineno-$LINENO}: result: $ac_cv_path_EGREP" >&5
-$as_echo "$ac_cv_path_EGREP" >&6; }
- EGREP="$ac_cv_path_EGREP"
-
-
-
-
-  { $as_echo "$as_me:${as_lineno-$LINENO}: checking for Minix Amsterdam compiler" >&5
-$as_echo_n "checking for Minix Amsterdam compiler... " >&6; }
-if ${gl_cv_c_amsterdam_compiler+:} false; then :
-  $as_echo_n "(cached) " >&6
-else
-
-      cat confdefs.h - <<_ACEOF >conftest.$ac_ext
-/* end confdefs.h.  */
-
-#ifdef __ACK__
-Amsterdam
-#endif
-
-_ACEOF
-if (eval "$ac_cpp conftest.$ac_ext") 2>&5 |
-  $EGREP "Amsterdam" >/dev/null 2>&1; then :
-  gl_cv_c_amsterdam_compiler=yes
-else
-  gl_cv_c_amsterdam_compiler=no
-fi
-rm -f conftest*
-
-
-fi
-{ $as_echo "$as_me:${as_lineno-$LINENO}: result: $gl_cv_c_amsterdam_compiler" >&5
-$as_echo "$gl_cv_c_amsterdam_compiler" >&6; }
-  if test -z "$AR"; then
-    if test $gl_cv_c_amsterdam_compiler = yes; then
-      AR='cc -c.a'
-      if test -z "$ARFLAGS"; then
-        ARFLAGS='-o'
-      fi
-    else
-                  if test -n "$ac_tool_prefix"; then
-  # Extract the first word of "${ac_tool_prefix}ar", so it can be a program name with args.
-set dummy ${ac_tool_prefix}ar; ac_word=$2
-{ $as_echo "$as_me:${as_lineno-$LINENO}: checking for $ac_word" >&5
-$as_echo_n "checking for $ac_word... " >&6; }
-if ${ac_cv_prog_AR+:} false; then :
-  $as_echo_n "(cached) " >&6
-else
-  if test -n "$AR"; then
-  ac_cv_prog_AR="$AR" # Let the user override the test.
-else
-as_save_IFS=$IFS; IFS=$PATH_SEPARATOR
-for as_dir in $PATH
-do
-  IFS=$as_save_IFS
-  test -z "$as_dir" && as_dir=.
-    for ac_exec_ext in '' $ac_executable_extensions; do
-  if as_fn_executable_p "$as_dir/$ac_word$ac_exec_ext"; then
-    ac_cv_prog_AR="${ac_tool_prefix}ar"
-    $as_echo "$as_me:${as_lineno-$LINENO}: found $as_dir/$ac_word$ac_exec_ext" >&5
-    break 2
-  fi
-done
-  done
-IFS=$as_save_IFS
-
-fi
-fi
-AR=$ac_cv_prog_AR
-if test -n "$AR"; then
-  { $as_echo "$as_me:${as_lineno-$LINENO}: result: $AR" >&5
-$as_echo "$AR" >&6; }
-else
-  { $as_echo "$as_me:${as_lineno-$LINENO}: result: no" >&5
-$as_echo "no" >&6; }
-fi
-
-
-fi
-if test -z "$ac_cv_prog_AR"; then
-  ac_ct_AR=$AR
-  # Extract the first word of "ar", so it can be a program name with args.
-set dummy ar; ac_word=$2
-{ $as_echo "$as_me:${as_lineno-$LINENO}: checking for $ac_word" >&5
-$as_echo_n "checking for $ac_word... " >&6; }
-if ${ac_cv_prog_ac_ct_AR+:} false; then :
-  $as_echo_n "(cached) " >&6
-else
-  if test -n "$ac_ct_AR"; then
-  ac_cv_prog_ac_ct_AR="$ac_ct_AR" # Let the user override the test.
-else
-as_save_IFS=$IFS; IFS=$PATH_SEPARATOR
-for as_dir in $PATH
-do
-  IFS=$as_save_IFS
-  test -z "$as_dir" && as_dir=.
-    for ac_exec_ext in '' $ac_executable_extensions; do
-  if as_fn_executable_p "$as_dir/$ac_word$ac_exec_ext"; then
-    ac_cv_prog_ac_ct_AR="ar"
-    $as_echo "$as_me:${as_lineno-$LINENO}: found $as_dir/$ac_word$ac_exec_ext" >&5
-    break 2
-  fi
-done
-  done
-IFS=$as_save_IFS
-
-fi
-fi
-ac_ct_AR=$ac_cv_prog_ac_ct_AR
-if test -n "$ac_ct_AR"; then
-  { $as_echo "$as_me:${as_lineno-$LINENO}: result: $ac_ct_AR" >&5
-$as_echo "$ac_ct_AR" >&6; }
-else
-  { $as_echo "$as_me:${as_lineno-$LINENO}: result: no" >&5
-$as_echo "no" >&6; }
-fi
-
-  if test "x$ac_ct_AR" = x; then
-    AR="ar"
-  else
-    case $cross_compiling:$ac_tool_warned in
-yes:)
-{ $as_echo "$as_me:${as_lineno-$LINENO}: WARNING: using cross tools not prefixed with host triplet" >&5
-$as_echo "$as_me: WARNING: using cross tools not prefixed with host triplet" >&2;}
-ac_tool_warned=yes ;;
-esac
-    AR=$ac_ct_AR
-  fi
-else
-  AR="$ac_cv_prog_AR"
-fi
-
-      if test -z "$ARFLAGS"; then
-        ARFLAGS='cru'
-      fi
-    fi
-  else
-    if test -z "$ARFLAGS"; then
-      ARFLAGS='cru'
-    fi
-  fi
-
-
-  if test -z "$RANLIB"; then
-    if test $gl_cv_c_amsterdam_compiler = yes; then
-      RANLIB=':'
-    else
-            if test -n "$ac_tool_prefix"; then
-  # Extract the first word of "${ac_tool_prefix}ranlib", so it can be a program name with args.
-set dummy ${ac_tool_prefix}ranlib; ac_word=$2
-{ $as_echo "$as_me:${as_lineno-$LINENO}: checking for $ac_word" >&5
-$as_echo_n "checking for $ac_word... " >&6; }
-if ${ac_cv_prog_RANLIB+:} false; then :
-  $as_echo_n "(cached) " >&6
-else
-  if test -n "$RANLIB"; then
-  ac_cv_prog_RANLIB="$RANLIB" # Let the user override the test.
-else
-as_save_IFS=$IFS; IFS=$PATH_SEPARATOR
-for as_dir in $PATH
-do
-  IFS=$as_save_IFS
-  test -z "$as_dir" && as_dir=.
-    for ac_exec_ext in '' $ac_executable_extensions; do
-  if as_fn_executable_p "$as_dir/$ac_word$ac_exec_ext"; then
-    ac_cv_prog_RANLIB="${ac_tool_prefix}ranlib"
-    $as_echo "$as_me:${as_lineno-$LINENO}: found $as_dir/$ac_word$ac_exec_ext" >&5
-    break 2
-  fi
-done
-  done
-IFS=$as_save_IFS
-
-fi
-fi
-RANLIB=$ac_cv_prog_RANLIB
-if test -n "$RANLIB"; then
-  { $as_echo "$as_me:${as_lineno-$LINENO}: result: $RANLIB" >&5
-$as_echo "$RANLIB" >&6; }
-else
-  { $as_echo "$as_me:${as_lineno-$LINENO}: result: no" >&5
-$as_echo "no" >&6; }
-fi
-
-
-fi
-if test -z "$ac_cv_prog_RANLIB"; then
-  ac_ct_RANLIB=$RANLIB
-  # Extract the first word of "ranlib", so it can be a program name with args.
-set dummy ranlib; ac_word=$2
-{ $as_echo "$as_me:${as_lineno-$LINENO}: checking for $ac_word" >&5
-$as_echo_n "checking for $ac_word... " >&6; }
-if ${ac_cv_prog_ac_ct_RANLIB+:} false; then :
-  $as_echo_n "(cached) " >&6
-else
-  if test -n "$ac_ct_RANLIB"; then
-  ac_cv_prog_ac_ct_RANLIB="$ac_ct_RANLIB" # Let the user override the test.
-else
-as_save_IFS=$IFS; IFS=$PATH_SEPARATOR
-for as_dir in $PATH
-do
-  IFS=$as_save_IFS
-  test -z "$as_dir" && as_dir=.
-    for ac_exec_ext in '' $ac_executable_extensions; do
-  if as_fn_executable_p "$as_dir/$ac_word$ac_exec_ext"; then
-    ac_cv_prog_ac_ct_RANLIB="ranlib"
-    $as_echo "$as_me:${as_lineno-$LINENO}: found $as_dir/$ac_word$ac_exec_ext" >&5
-    break 2
-  fi
-done
-  done
-IFS=$as_save_IFS
-
-fi
-fi
-ac_ct_RANLIB=$ac_cv_prog_ac_ct_RANLIB
-if test -n "$ac_ct_RANLIB"; then
-  { $as_echo "$as_me:${as_lineno-$LINENO}: result: $ac_ct_RANLIB" >&5
-$as_echo "$ac_ct_RANLIB" >&6; }
-else
-  { $as_echo "$as_me:${as_lineno-$LINENO}: result: no" >&5
-$as_echo "no" >&6; }
-fi
-
-  if test "x$ac_ct_RANLIB" = x; then
-    RANLIB=":"
-  else
-    case $cross_compiling:$ac_tool_warned in
-yes:)
-{ $as_echo "$as_me:${as_lineno-$LINENO}: WARNING: using cross tools not prefixed with host triplet" >&5
-$as_echo "$as_me: WARNING: using cross tools not prefixed with host triplet" >&2;}
-ac_tool_warned=yes ;;
-esac
-    RANLIB=$ac_ct_RANLIB
-  fi
-else
-  RANLIB="$ac_cv_prog_RANLIB"
-fi
-
-    fi
-  fi
-
-
-
-
-
-{ $as_echo "$as_me:${as_lineno-$LINENO}: checking for ANSI C header files" >&5
-$as_echo_n "checking for ANSI C header files... " >&6; }
-if ${ac_cv_header_stdc+:} false; then :
-  $as_echo_n "(cached) " >&6
-else
-  cat confdefs.h - <<_ACEOF >conftest.$ac_ext
-/* end confdefs.h.  */
-#include <stdlib.h>
-#include <stdarg.h>
-#include <string.h>
-#include <float.h>
-
-int
-main ()
-{
-
-  ;
-  return 0;
-}
-_ACEOF
-if ac_fn_c_try_compile "$LINENO"; then :
-  ac_cv_header_stdc=yes
-else
-  ac_cv_header_stdc=no
-fi
-rm -f core conftest.err conftest.$ac_objext conftest.$ac_ext
-
-if test $ac_cv_header_stdc = yes; then
-  # SunOS 4.x string.h does not declare mem*, contrary to ANSI.
-  cat confdefs.h - <<_ACEOF >conftest.$ac_ext
-/* end confdefs.h.  */
-#include <string.h>
-
-_ACEOF
-if (eval "$ac_cpp conftest.$ac_ext") 2>&5 |
-  $EGREP "memchr" >/dev/null 2>&1; then :
-
-else
-  ac_cv_header_stdc=no
-fi
-rm -f conftest*
-
-fi
-
-if test $ac_cv_header_stdc = yes; then
-  # ISC 2.0.2 stdlib.h does not declare free, contrary to ANSI.
-  cat confdefs.h - <<_ACEOF >conftest.$ac_ext
-/* end confdefs.h.  */
-#include <stdlib.h>
-
-_ACEOF
-if (eval "$ac_cpp conftest.$ac_ext") 2>&5 |
-  $EGREP "free" >/dev/null 2>&1; then :
-
-else
-  ac_cv_header_stdc=no
-fi
-rm -f conftest*
-
-fi
-
-if test $ac_cv_header_stdc = yes; then
-  # /bin/cc in Irix-4.0.5 gets non-ANSI ctype macros unless using -ansi.
-  if test "$cross_compiling" = yes; then :
-  :
-else
-  cat confdefs.h - <<_ACEOF >conftest.$ac_ext
-/* end confdefs.h.  */
-#include <ctype.h>
-#include <stdlib.h>
-#if ((' ' & 0x0FF) == 0x020)
-# define ISLOWER(c) ('a' <= (c) && (c) <= 'z')
-# define TOUPPER(c) (ISLOWER(c) ? 'A' + ((c) - 'a') : (c))
-#else
-# define ISLOWER(c) \
-		   (('a' <= (c) && (c) <= 'i') \
-		     || ('j' <= (c) && (c) <= 'r') \
-		     || ('s' <= (c) && (c) <= 'z'))
-# define TOUPPER(c) (ISLOWER(c) ? ((c) | 0x40) : (c))
-#endif
-
-#define XOR(e, f) (((e) && !(f)) || (!(e) && (f)))
-int
-main ()
-{
-  int i;
-  for (i = 0; i < 256; i++)
-    if (XOR (islower (i), ISLOWER (i))
-	|| toupper (i) != TOUPPER (i))
-      return 2;
-  return 0;
-}
-_ACEOF
-if ac_fn_c_try_run "$LINENO"; then :
-
-else
-  ac_cv_header_stdc=no
-fi
-rm -f core *.core core.conftest.* gmon.out bb.out conftest$ac_exeext \
-  conftest.$ac_objext conftest.beam conftest.$ac_ext
-fi
-
-fi
-fi
-{ $as_echo "$as_me:${as_lineno-$LINENO}: result: $ac_cv_header_stdc" >&5
-$as_echo "$ac_cv_header_stdc" >&6; }
-if test $ac_cv_header_stdc = yes; then
-
-$as_echo "#define STDC_HEADERS 1" >>confdefs.h
-
-fi
-
-# On IRIX 5.3, sys/types and inttypes.h are conflicting.
-for ac_header in sys/types.h sys/stat.h stdlib.h string.h memory.h strings.h \
-		  inttypes.h stdint.h unistd.h
-do :
-  as_ac_Header=`$as_echo "ac_cv_header_$ac_header" | $as_tr_sh`
-ac_fn_c_check_header_compile "$LINENO" "$ac_header" "$as_ac_Header" "$ac_includes_default
-"
-if eval test \"x\$"$as_ac_Header"\" = x"yes"; then :
-  cat >>confdefs.h <<_ACEOF
-#define `$as_echo "HAVE_$ac_header" | $as_tr_cpp` 1
-_ACEOF
-
-fi
-
-done
-
-
-
-  ac_fn_c_check_header_mongrel "$LINENO" "minix/config.h" "ac_cv_header_minix_config_h" "$ac_includes_default"
-if test "x$ac_cv_header_minix_config_h" = xyes; then :
-  MINIX=yes
-else
-  MINIX=
-fi
-
-
-  if test "$MINIX" = yes; then
-
-$as_echo "#define _POSIX_SOURCE 1" >>confdefs.h
-
-
-$as_echo "#define _POSIX_1_SOURCE 2" >>confdefs.h
-
-
-$as_echo "#define _MINIX 1" >>confdefs.h
-
-
-$as_echo "#define _NETBSD_SOURCE 1" >>confdefs.h
-
-  fi
-
-
-  { $as_echo "$as_me:${as_lineno-$LINENO}: checking whether it is safe to define __EXTENSIONS__" >&5
-$as_echo_n "checking whether it is safe to define __EXTENSIONS__... " >&6; }
-if ${ac_cv_safe_to_define___extensions__+:} false; then :
-  $as_echo_n "(cached) " >&6
-else
-  cat confdefs.h - <<_ACEOF >conftest.$ac_ext
-/* end confdefs.h.  */
-
-#         define __EXTENSIONS__ 1
-          $ac_includes_default
-int
-main ()
-{
-
-  ;
-  return 0;
-}
-_ACEOF
-if ac_fn_c_try_compile "$LINENO"; then :
-  ac_cv_safe_to_define___extensions__=yes
-else
-  ac_cv_safe_to_define___extensions__=no
-fi
-rm -f core conftest.err conftest.$ac_objext conftest.$ac_ext
-fi
-{ $as_echo "$as_me:${as_lineno-$LINENO}: result: $ac_cv_safe_to_define___extensions__" >&5
-$as_echo "$ac_cv_safe_to_define___extensions__" >&6; }
-  test $ac_cv_safe_to_define___extensions__ = yes &&
-    $as_echo "#define __EXTENSIONS__ 1" >>confdefs.h
-
-  $as_echo "#define _ALL_SOURCE 1" >>confdefs.h
-
-  $as_echo "#define _DARWIN_C_SOURCE 1" >>confdefs.h
-
-  $as_echo "#define _GNU_SOURCE 1" >>confdefs.h
-
-  $as_echo "#define _POSIX_PTHREAD_SEMANTICS 1" >>confdefs.h
-
-  $as_echo "#define _TANDEM_SOURCE 1" >>confdefs.h
-
-  { $as_echo "$as_me:${as_lineno-$LINENO}: checking whether _XOPEN_SOURCE should be defined" >&5
-$as_echo_n "checking whether _XOPEN_SOURCE should be defined... " >&6; }
-if ${ac_cv_should_define__xopen_source+:} false; then :
-  $as_echo_n "(cached) " >&6
-else
-  ac_cv_should_define__xopen_source=no
-     cat confdefs.h - <<_ACEOF >conftest.$ac_ext
-/* end confdefs.h.  */
-
-          #include <wchar.h>
-          mbstate_t x;
-int
-main ()
-{
-
-  ;
-  return 0;
-}
-_ACEOF
-if ac_fn_c_try_compile "$LINENO"; then :
-
-else
-  cat confdefs.h - <<_ACEOF >conftest.$ac_ext
-/* end confdefs.h.  */
-
-             #define _XOPEN_SOURCE 500
-             #include <wchar.h>
-             mbstate_t x;
-int
-main ()
-{
-
-  ;
-  return 0;
-}
-_ACEOF
-if ac_fn_c_try_compile "$LINENO"; then :
-  ac_cv_should_define__xopen_source=yes
-fi
-rm -f core conftest.err conftest.$ac_objext conftest.$ac_ext
-fi
-rm -f core conftest.err conftest.$ac_objext conftest.$ac_ext
-fi
-{ $as_echo "$as_me:${as_lineno-$LINENO}: result: $ac_cv_should_define__xopen_source" >&5
-$as_echo "$ac_cv_should_define__xopen_source" >&6; }
-  test $ac_cv_should_define__xopen_source = yes &&
-    $as_echo "#define _XOPEN_SOURCE 500" >>confdefs.h
-
-
-
-
-
-
-
-
- if false; then
-  GL_COND_LIBTOOL_TRUE=
-  GL_COND_LIBTOOL_FALSE='#'
-else
-  GL_COND_LIBTOOL_TRUE='#'
-  GL_COND_LIBTOOL_FALSE=
-fi
-
-gl_cond_libtool=false
-gl_libdeps=
-gl_ltlibdeps=
-
-
-# Like AC_LIBOBJ, except that the module name goes
-# into gl_LIBOBJS instead of into LIBOBJS.
-
-
-# Like AC_REPLACE_FUNCS, except that the module name goes
-# into gl_LIBOBJS instead of into LIBOBJS.
-
-
-# Like AC_LIBSOURCES, except the directory where the source file is
-# expected is derived from the gnulib-tool parameterization,
-# and alloca is special cased (for the alloca-opt module).
-# We could also entirely rely on EXTRA_lib..._SOURCES.
-
-
-
-
-
-
-
-          LIBC_FATAL_STDERR_=1
-  export LIBC_FATAL_STDERR_
-
-
-
-
-
-  { $as_echo "$as_me:${as_lineno-$LINENO}: checking for unsigned long long int" >&5
-$as_echo_n "checking for unsigned long long int... " >&6; }
-if ${ac_cv_type_unsigned_long_long_int+:} false; then :
-  $as_echo_n "(cached) " >&6
-else
-  ac_cv_type_unsigned_long_long_int=yes
-     if test "x${ac_cv_prog_cc_c99-no}" = xno; then
-       cat confdefs.h - <<_ACEOF >conftest.$ac_ext
-/* end confdefs.h.  */
-
-  /* For now, do not test the preprocessor; as of 2007 there are too many
-         implementations with broken preprocessors.  Perhaps this can
-         be revisited in 2012.  In the meantime, code should not expect
-         #if to work with literals wider than 32 bits.  */
-      /* Test literals.  */
-      long long int ll = 9223372036854775807ll;
-      long long int nll = -9223372036854775807LL;
-      unsigned long long int ull = 18446744073709551615ULL;
-      /* Test constant expressions.   */
-      typedef int a[((-9223372036854775807LL < 0 && 0 < 9223372036854775807ll)
-                     ? 1 : -1)];
-      typedef int b[(18446744073709551615ULL <= (unsigned long long int) -1
-                     ? 1 : -1)];
-      int i = 63;
-int
-main ()
-{
-/* Test availability of runtime routines for shift and division.  */
-      long long int llmax = 9223372036854775807ll;
-      unsigned long long int ullmax = 18446744073709551615ull;
-      return ((ll << 63) | (ll >> 63) | (ll < i) | (ll > i)
-              | (llmax / ll) | (llmax % ll)
-              | (ull << 63) | (ull >> 63) | (ull << i) | (ull >> i)
-              | (ullmax / ull) | (ullmax % ull));
-  ;
-  return 0;
-}
-
-_ACEOF
-if ac_fn_c_try_link "$LINENO"; then :
-
-else
-  ac_cv_type_unsigned_long_long_int=no
-fi
-rm -f core conftest.err conftest.$ac_objext \
-    conftest$ac_exeext conftest.$ac_ext
-     fi
-fi
-{ $as_echo "$as_me:${as_lineno-$LINENO}: result: $ac_cv_type_unsigned_long_long_int" >&5
-$as_echo "$ac_cv_type_unsigned_long_long_int" >&6; }
-  if test $ac_cv_type_unsigned_long_long_int = yes; then
-
-$as_echo "#define HAVE_UNSIGNED_LONG_LONG_INT 1" >>confdefs.h
-
-  fi
-
-
-
-  { $as_echo "$as_me:${as_lineno-$LINENO}: checking for long long int" >&5
-$as_echo_n "checking for long long int... " >&6; }
-if ${ac_cv_type_long_long_int+:} false; then :
-  $as_echo_n "(cached) " >&6
-else
-  ac_cv_type_long_long_int=yes
-      if test "x${ac_cv_prog_cc_c99-no}" = xno; then
-        ac_cv_type_long_long_int=$ac_cv_type_unsigned_long_long_int
-        if test $ac_cv_type_long_long_int = yes; then
-                                        if test "$cross_compiling" = yes; then :
-  :
-else
-  cat confdefs.h - <<_ACEOF >conftest.$ac_ext
-/* end confdefs.h.  */
-#include <limits.h>
-                 #ifndef LLONG_MAX
-                 # define HALF \
-                          (1LL << (sizeof (long long int) * CHAR_BIT - 2))
-                 # define LLONG_MAX (HALF - 1 + HALF)
-                 #endif
-int
-main ()
-{
-long long int n = 1;
-                 int i;
-                 for (i = 0; ; i++)
-                   {
-                     long long int m = n << i;
-                     if (m >> i != n)
-                       return 1;
-                     if (LLONG_MAX / 2 < m)
-                       break;
-                   }
-                 return 0;
-  ;
-  return 0;
-}
-_ACEOF
-if ac_fn_c_try_run "$LINENO"; then :
-
-else
-  ac_cv_type_long_long_int=no
-fi
-rm -f core *.core core.conftest.* gmon.out bb.out conftest$ac_exeext \
-  conftest.$ac_objext conftest.beam conftest.$ac_ext
-fi
-
-        fi
-      fi
-fi
-{ $as_echo "$as_me:${as_lineno-$LINENO}: result: $ac_cv_type_long_long_int" >&5
-$as_echo "$ac_cv_type_long_long_int" >&6; }
-  if test $ac_cv_type_long_long_int = yes; then
-
-$as_echo "#define HAVE_LONG_LONG_INT 1" >>confdefs.h
-
-  fi
-
-
-
-
-
-  for ac_header in $gl_header_list
-do :
-  as_ac_Header=`$as_echo "ac_cv_header_$ac_header" | $as_tr_sh`
-ac_fn_c_check_header_mongrel "$LINENO" "$ac_header" "$as_ac_Header" "$ac_includes_default"
-if eval test \"x\$"$as_ac_Header"\" = x"yes"; then :
-  cat >>confdefs.h <<_ACEOF
-#define `$as_echo "HAVE_$ac_header" | $as_tr_cpp` 1
-_ACEOF
-
-fi
-
-done
-
-
-
-
-
-
-
-  { $as_echo "$as_me:${as_lineno-$LINENO}: checking whether the preprocessor supports include_next" >&5
-$as_echo_n "checking whether the preprocessor supports include_next... " >&6; }
-if ${gl_cv_have_include_next+:} false; then :
-  $as_echo_n "(cached) " >&6
-else
-  rm -rf conftestd1a conftestd1b conftestd2
-     mkdir conftestd1a conftestd1b conftestd2
-                                                  cat <<EOF > conftestd1a/conftest.h
-#define DEFINED_IN_CONFTESTD1
-#include_next <conftest.h>
-#ifdef DEFINED_IN_CONFTESTD2
-int foo;
-#else
-#error "include_next doesn't work"
-#endif
-EOF
-     cat <<EOF > conftestd1b/conftest.h
-#define DEFINED_IN_CONFTESTD1
-#include <stdio.h>
-#include_next <conftest.h>
-#ifdef DEFINED_IN_CONFTESTD2
-int foo;
-#else
-#error "include_next doesn't work"
-#endif
-EOF
-     cat <<EOF > conftestd2/conftest.h
-#ifndef DEFINED_IN_CONFTESTD1
-#error "include_next test doesn't work"
-#endif
-#define DEFINED_IN_CONFTESTD2
-EOF
-     gl_save_CPPFLAGS="$CPPFLAGS"
-     CPPFLAGS="$gl_save_CPPFLAGS -Iconftestd1b -Iconftestd2"
-     cat confdefs.h - <<_ACEOF >conftest.$ac_ext
-/* end confdefs.h.  */
-#include <conftest.h>
-_ACEOF
-if ac_fn_c_try_compile "$LINENO"; then :
-  gl_cv_have_include_next=yes
-else
-  CPPFLAGS="$gl_save_CPPFLAGS -Iconftestd1a -Iconftestd2"
-        cat confdefs.h - <<_ACEOF >conftest.$ac_ext
-/* end confdefs.h.  */
-#include <conftest.h>
-_ACEOF
-if ac_fn_c_try_compile "$LINENO"; then :
-  gl_cv_have_include_next=buggy
-else
-  gl_cv_have_include_next=no
-fi
-rm -f core conftest.err conftest.$ac_objext conftest.$ac_ext
-
-fi
-rm -f core conftest.err conftest.$ac_objext conftest.$ac_ext
-     CPPFLAGS="$gl_save_CPPFLAGS"
-     rm -rf conftestd1a conftestd1b conftestd2
-
-fi
-{ $as_echo "$as_me:${as_lineno-$LINENO}: result: $gl_cv_have_include_next" >&5
-$as_echo "$gl_cv_have_include_next" >&6; }
-  PRAGMA_SYSTEM_HEADER=
-  if test $gl_cv_have_include_next = yes; then
-    INCLUDE_NEXT=include_next
-    INCLUDE_NEXT_AS_FIRST_DIRECTIVE=include_next
-    if test -n "$GCC"; then
-      PRAGMA_SYSTEM_HEADER='#pragma GCC system_header'
-    fi
-  else
-    if test $gl_cv_have_include_next = buggy; then
-      INCLUDE_NEXT=include
-      INCLUDE_NEXT_AS_FIRST_DIRECTIVE=include_next
-    else
-      INCLUDE_NEXT=include
-      INCLUDE_NEXT_AS_FIRST_DIRECTIVE=include
-    fi
-  fi
-
-
-
-  { $as_echo "$as_me:${as_lineno-$LINENO}: checking whether system header files limit the line length" >&5
-$as_echo_n "checking whether system header files limit the line length... " >&6; }
-if ${gl_cv_pragma_columns+:} false; then :
-  $as_echo_n "(cached) " >&6
-else
-       cat confdefs.h - <<_ACEOF >conftest.$ac_ext
-/* end confdefs.h.  */
-
-#ifdef __TANDEM
-choke me
-#endif
-
-_ACEOF
-if (eval "$ac_cpp conftest.$ac_ext") 2>&5 |
-  $EGREP "choke me" >/dev/null 2>&1; then :
-  gl_cv_pragma_columns=yes
-else
-  gl_cv_pragma_columns=no
-fi
-rm -f conftest*
-
-
-fi
-{ $as_echo "$as_me:${as_lineno-$LINENO}: result: $gl_cv_pragma_columns" >&5
-$as_echo "$gl_cv_pragma_columns" >&6; }
-  if test $gl_cv_pragma_columns = yes; then
-    PRAGMA_COLUMNS="#pragma COLUMNS 10000"
-  else
-    PRAGMA_COLUMNS=
-  fi
-
-
-
-
-
-
-
-
-    gl_cv_c_multiarch=no
-  cat confdefs.h - <<_ACEOF >conftest.$ac_ext
-/* end confdefs.h.  */
-#ifndef __APPLE_CC__
-         not a universal capable compiler
-        #endif
-        typedef int dummy;
-
-_ACEOF
-if ac_fn_c_try_compile "$LINENO"; then :
-
-               arch=
-     prev=
-     for word in ${CC} ${CFLAGS} ${CPPFLAGS} ${LDFLAGS}; do
-       if test -n "$prev"; then
-         case $word in
-           i?86 | x86_64 | ppc | ppc64)
-             if test -z "$arch" || test "$arch" = "$word"; then
-               arch="$word"
-             else
-               gl_cv_c_multiarch=yes
-             fi
-             ;;
-         esac
-         prev=
-       else
-         if test "x$word" = "x-arch"; then
-           prev=arch
-         fi
-       fi
-     done
-
-fi
-rm -f core conftest.err conftest.$ac_objext conftest.$ac_ext
-  if test $gl_cv_c_multiarch = yes; then
-    APPLE_UNIVERSAL_BUILD=1
-  else
-    APPLE_UNIVERSAL_BUILD=0
-  fi
-
-
-
-
-
-  if test $ac_cv_type_long_long_int = yes; then
-    HAVE_LONG_LONG_INT=1
-  else
-    HAVE_LONG_LONG_INT=0
-  fi
-
-
-  if test $ac_cv_type_unsigned_long_long_int = yes; then
-    HAVE_UNSIGNED_LONG_LONG_INT=1
-  else
-    HAVE_UNSIGNED_LONG_LONG_INT=0
-  fi
-
-
-
-  :
-
-
-
-
-
-  if test $ac_cv_header_wchar_h = yes; then
-    HAVE_WCHAR_H=1
-  else
-    HAVE_WCHAR_H=0
-  fi
-
-
-      if test $ac_cv_header_inttypes_h = yes; then
-    HAVE_INTTYPES_H=1
-  else
-    HAVE_INTTYPES_H=0
-  fi
-
-
-      if test $ac_cv_header_sys_types_h = yes; then
-    HAVE_SYS_TYPES_H=1
-  else
-    HAVE_SYS_TYPES_H=0
-  fi
-
-
-
-
-
-
-
-
-  :
-
-
-
-
-
-
-
-
-     if test $gl_cv_have_include_next = yes; then
-       gl_cv_next_stdint_h='<'stdint.h'>'
-     else
-       { $as_echo "$as_me:${as_lineno-$LINENO}: checking absolute name of <stdint.h>" >&5
-$as_echo_n "checking absolute name of <stdint.h>... " >&6; }
-if ${gl_cv_next_stdint_h+:} false; then :
-  $as_echo_n "(cached) " >&6
-else
-
-             if test $ac_cv_header_stdint_h = yes; then
-
-
-               cat confdefs.h - <<_ACEOF >conftest.$ac_ext
-/* end confdefs.h.  */
-#include <stdint.h>
-
-_ACEOF
-                                                                                                                        case "$host_os" in
-                 aix*) gl_absname_cpp="$ac_cpp -C" ;;
-                 *)    gl_absname_cpp="$ac_cpp" ;;
-               esac
-
-               case "$host_os" in
-                 mingw*)
-                                                                                                                                     gl_dirsep_regex='[/\\]'
-                   ;;
-                 *)
-                   gl_dirsep_regex='\/'
-                   ;;
-               esac
-                                             gl_make_literal_regex_sed='s,[]$^\\.*/[],\\&,g'
-
-               gl_header_literal_regex=`echo 'stdint.h' \
-                                        | sed -e "$gl_make_literal_regex_sed"`
-               gl_absolute_header_sed="/${gl_dirsep_regex}${gl_header_literal_regex}/"'{
-                   s/.*"\(.*'"${gl_dirsep_regex}${gl_header_literal_regex}"'\)".*/\1/
-                   s|^/[^/]|//&|
-                   p
-                   q
-                 }'
-                                                            gl_cv_next_stdint_h='"'`(eval "$gl_absname_cpp conftest.$ac_ext") 2>&5 |
-                      sed -n "$gl_absolute_header_sed"`'"'
-          else
-               gl_cv_next_stdint_h='<'stdint.h'>'
-             fi
-
-
-fi
-{ $as_echo "$as_me:${as_lineno-$LINENO}: result: $gl_cv_next_stdint_h" >&5
-$as_echo "$gl_cv_next_stdint_h" >&6; }
-     fi
-     NEXT_STDINT_H=$gl_cv_next_stdint_h
-
-     if test $gl_cv_have_include_next = yes || test $gl_cv_have_include_next = buggy; then
-       # INCLUDE_NEXT_AS_FIRST_DIRECTIVE='include_next'
-       gl_next_as_first_directive='<'stdint.h'>'
-     else
-       # INCLUDE_NEXT_AS_FIRST_DIRECTIVE='include'
-       gl_next_as_first_directive=$gl_cv_next_stdint_h
-     fi
-     NEXT_AS_FIRST_DIRECTIVE_STDINT_H=$gl_next_as_first_directive
-
-
-
-
-  if test $ac_cv_header_stdint_h = yes; then
-    HAVE_STDINT_H=1
-  else
-    HAVE_STDINT_H=0
-  fi
-
-
-    if test $ac_cv_header_stdint_h = yes; then
-    { $as_echo "$as_me:${as_lineno-$LINENO}: checking whether stdint.h conforms to C99" >&5
-$as_echo_n "checking whether stdint.h conforms to C99... " >&6; }
-if ${gl_cv_header_working_stdint_h+:} false; then :
-  $as_echo_n "(cached) " >&6
-else
-  gl_cv_header_working_stdint_h=no
-       cat confdefs.h - <<_ACEOF >conftest.$ac_ext
-/* end confdefs.h.  */
-
-
-#define _GL_JUST_INCLUDE_SYSTEM_STDINT_H 1 /* work if build isn't clean */
-#include <stdint.h>
-/* Dragonfly defines WCHAR_MIN, WCHAR_MAX only in <wchar.h>.  */
-#if !(defined WCHAR_MIN && defined WCHAR_MAX)
-#error "WCHAR_MIN, WCHAR_MAX not defined in <stdint.h>"
-#endif
-
-
-  /* BSD/OS 4.0.1 has a bug: <stddef.h>, <stdio.h> and <time.h> must be
-     included before <wchar.h>.  */
-  #include <stddef.h>
-  #include <signal.h>
-  #if HAVE_WCHAR_H
-  # include <stdio.h>
-  # include <time.h>
-  # include <wchar.h>
-  #endif
-
-
-#ifdef INT8_MAX
-int8_t a1 = INT8_MAX;
-int8_t a1min = INT8_MIN;
-#endif
-#ifdef INT16_MAX
-int16_t a2 = INT16_MAX;
-int16_t a2min = INT16_MIN;
-#endif
-#ifdef INT32_MAX
-int32_t a3 = INT32_MAX;
-int32_t a3min = INT32_MIN;
-#endif
-#ifdef INT64_MAX
-int64_t a4 = INT64_MAX;
-int64_t a4min = INT64_MIN;
-#endif
-#ifdef UINT8_MAX
-uint8_t b1 = UINT8_MAX;
-#else
-typedef int b1[(unsigned char) -1 != 255 ? 1 : -1];
-#endif
-#ifdef UINT16_MAX
-uint16_t b2 = UINT16_MAX;
-#endif
-#ifdef UINT32_MAX
-uint32_t b3 = UINT32_MAX;
-#endif
-#ifdef UINT64_MAX
-uint64_t b4 = UINT64_MAX;
-#endif
-int_least8_t c1 = INT8_C (0x7f);
-int_least8_t c1max = INT_LEAST8_MAX;
-int_least8_t c1min = INT_LEAST8_MIN;
-int_least16_t c2 = INT16_C (0x7fff);
-int_least16_t c2max = INT_LEAST16_MAX;
-int_least16_t c2min = INT_LEAST16_MIN;
-int_least32_t c3 = INT32_C (0x7fffffff);
-int_least32_t c3max = INT_LEAST32_MAX;
-int_least32_t c3min = INT_LEAST32_MIN;
-int_least64_t c4 = INT64_C (0x7fffffffffffffff);
-int_least64_t c4max = INT_LEAST64_MAX;
-int_least64_t c4min = INT_LEAST64_MIN;
-uint_least8_t d1 = UINT8_C (0xff);
-uint_least8_t d1max = UINT_LEAST8_MAX;
-uint_least16_t d2 = UINT16_C (0xffff);
-uint_least16_t d2max = UINT_LEAST16_MAX;
-uint_least32_t d3 = UINT32_C (0xffffffff);
-uint_least32_t d3max = UINT_LEAST32_MAX;
-uint_least64_t d4 = UINT64_C (0xffffffffffffffff);
-uint_least64_t d4max = UINT_LEAST64_MAX;
-int_fast8_t e1 = INT_FAST8_MAX;
-int_fast8_t e1min = INT_FAST8_MIN;
-int_fast16_t e2 = INT_FAST16_MAX;
-int_fast16_t e2min = INT_FAST16_MIN;
-int_fast32_t e3 = INT_FAST32_MAX;
-int_fast32_t e3min = INT_FAST32_MIN;
-int_fast64_t e4 = INT_FAST64_MAX;
-int_fast64_t e4min = INT_FAST64_MIN;
-uint_fast8_t f1 = UINT_FAST8_MAX;
-uint_fast16_t f2 = UINT_FAST16_MAX;
-uint_fast32_t f3 = UINT_FAST32_MAX;
-uint_fast64_t f4 = UINT_FAST64_MAX;
-#ifdef INTPTR_MAX
-intptr_t g = INTPTR_MAX;
-intptr_t gmin = INTPTR_MIN;
-#endif
-#ifdef UINTPTR_MAX
-uintptr_t h = UINTPTR_MAX;
-#endif
-intmax_t i = INTMAX_MAX;
-uintmax_t j = UINTMAX_MAX;
-
-#include <limits.h> /* for CHAR_BIT */
-#define TYPE_MINIMUM(t) \
-  ((t) ((t) 0 < (t) -1 ? (t) 0 : ~ TYPE_MAXIMUM (t)))
-#define TYPE_MAXIMUM(t) \
-  ((t) ((t) 0 < (t) -1 \
-        ? (t) -1 \
-        : ((((t) 1 << (sizeof (t) * CHAR_BIT - 2)) - 1) * 2 + 1)))
-struct s {
-  int check_PTRDIFF:
-      PTRDIFF_MIN == TYPE_MINIMUM (ptrdiff_t)
-      && PTRDIFF_MAX == TYPE_MAXIMUM (ptrdiff_t)
-      ? 1 : -1;
-  /* Detect bug in FreeBSD 6.0 / ia64.  */
-  int check_SIG_ATOMIC:
-      SIG_ATOMIC_MIN == TYPE_MINIMUM (sig_atomic_t)
-      && SIG_ATOMIC_MAX == TYPE_MAXIMUM (sig_atomic_t)
-      ? 1 : -1;
-  int check_SIZE: SIZE_MAX == TYPE_MAXIMUM (size_t) ? 1 : -1;
-  int check_WCHAR:
-      WCHAR_MIN == TYPE_MINIMUM (wchar_t)
-      && WCHAR_MAX == TYPE_MAXIMUM (wchar_t)
-      ? 1 : -1;
-  /* Detect bug in mingw.  */
-  int check_WINT:
-      WINT_MIN == TYPE_MINIMUM (wint_t)
-      && WINT_MAX == TYPE_MAXIMUM (wint_t)
-      ? 1 : -1;
-
-  /* Detect bugs in glibc 2.4 and Solaris 10 stdint.h, among others.  */
-  int check_UINT8_C:
-        (-1 < UINT8_C (0)) == (-1 < (uint_least8_t) 0) ? 1 : -1;
-  int check_UINT16_C:
-        (-1 < UINT16_C (0)) == (-1 < (uint_least16_t) 0) ? 1 : -1;
-
-  /* Detect bugs in OpenBSD 3.9 stdint.h.  */
-#ifdef UINT8_MAX
-  int check_uint8: (uint8_t) -1 == UINT8_MAX ? 1 : -1;
-#endif
-#ifdef UINT16_MAX
-  int check_uint16: (uint16_t) -1 == UINT16_MAX ? 1 : -1;
-#endif
-#ifdef UINT32_MAX
-  int check_uint32: (uint32_t) -1 == UINT32_MAX ? 1 : -1;
-#endif
-#ifdef UINT64_MAX
-  int check_uint64: (uint64_t) -1 == UINT64_MAX ? 1 : -1;
-#endif
-  int check_uint_least8: (uint_least8_t) -1 == UINT_LEAST8_MAX ? 1 : -1;
-  int check_uint_least16: (uint_least16_t) -1 == UINT_LEAST16_MAX ? 1 : -1;
-  int check_uint_least32: (uint_least32_t) -1 == UINT_LEAST32_MAX ? 1 : -1;
-  int check_uint_least64: (uint_least64_t) -1 == UINT_LEAST64_MAX ? 1 : -1;
-  int check_uint_fast8: (uint_fast8_t) -1 == UINT_FAST8_MAX ? 1 : -1;
-  int check_uint_fast16: (uint_fast16_t) -1 == UINT_FAST16_MAX ? 1 : -1;
-  int check_uint_fast32: (uint_fast32_t) -1 == UINT_FAST32_MAX ? 1 : -1;
-  int check_uint_fast64: (uint_fast64_t) -1 == UINT_FAST64_MAX ? 1 : -1;
-  int check_uintptr: (uintptr_t) -1 == UINTPTR_MAX ? 1 : -1;
-  int check_uintmax: (uintmax_t) -1 == UINTMAX_MAX ? 1 : -1;
-  int check_size: (size_t) -1 == SIZE_MAX ? 1 : -1;
-};
-
-int
-main ()
-{
-
-  ;
-  return 0;
-}
-_ACEOF
-if ac_fn_c_try_compile "$LINENO"; then :
-                                                    if test "$cross_compiling" = yes; then :
-                 gl_cv_header_working_stdint_h=yes
-
-else
-  cat confdefs.h - <<_ACEOF >conftest.$ac_ext
-/* end confdefs.h.  */
-
-
-#define _GL_JUST_INCLUDE_SYSTEM_STDINT_H 1 /* work if build isn't clean */
-#include <stdint.h>
-
-
-  /* BSD/OS 4.0.1 has a bug: <stddef.h>, <stdio.h> and <time.h> must be
-     included before <wchar.h>.  */
-  #include <stddef.h>
-  #include <signal.h>
-  #if HAVE_WCHAR_H
-  # include <stdio.h>
-  # include <time.h>
-  # include <wchar.h>
-  #endif
-
-
-#include <stdio.h>
-#include <string.h>
-#define MVAL(macro) MVAL1(macro)
-#define MVAL1(expression) #expression
-static const char *macro_values[] =
-  {
-#ifdef INT8_MAX
-    MVAL (INT8_MAX),
-#endif
-#ifdef INT16_MAX
-    MVAL (INT16_MAX),
-#endif
-#ifdef INT32_MAX
-    MVAL (INT32_MAX),
-#endif
-#ifdef INT64_MAX
-    MVAL (INT64_MAX),
-#endif
-#ifdef UINT8_MAX
-    MVAL (UINT8_MAX),
-#endif
-#ifdef UINT16_MAX
-    MVAL (UINT16_MAX),
-#endif
-#ifdef UINT32_MAX
-    MVAL (UINT32_MAX),
-#endif
-#ifdef UINT64_MAX
-    MVAL (UINT64_MAX),
-#endif
-    NULL
-  };
-
-int
-main ()
-{
-
-  const char **mv;
-  for (mv = macro_values; *mv != NULL; mv++)
-    {
-      const char *value = *mv;
-      /* Test whether it looks like a cast expression.  */
-      if (strncmp (value, "((unsigned int)"/*)*/, 15) == 0
-          || strncmp (value, "((unsigned short)"/*)*/, 17) == 0
-          || strncmp (value, "((unsigned char)"/*)*/, 16) == 0
-          || strncmp (value, "((int)"/*)*/, 6) == 0
-          || strncmp (value, "((signed short)"/*)*/, 15) == 0
-          || strncmp (value, "((signed char)"/*)*/, 14) == 0)
-        return mv - macro_values + 1;
-    }
-  return 0;
-
-  ;
-  return 0;
-}
-_ACEOF
-if ac_fn_c_try_run "$LINENO"; then :
-  gl_cv_header_working_stdint_h=yes
-fi
-rm -f core *.core core.conftest.* gmon.out bb.out conftest$ac_exeext \
-  conftest.$ac_objext conftest.beam conftest.$ac_ext
-fi
-
-
-fi
-rm -f core conftest.err conftest.$ac_objext conftest.$ac_ext
-
-fi
-{ $as_echo "$as_me:${as_lineno-$LINENO}: result: $gl_cv_header_working_stdint_h" >&5
-$as_echo "$gl_cv_header_working_stdint_h" >&6; }
-  fi
-  if test "$gl_cv_header_working_stdint_h" = yes; then
-    STDINT_H=
-  else
-            for ac_header in sys/inttypes.h sys/bitypes.h
-do :
-  as_ac_Header=`$as_echo "ac_cv_header_$ac_header" | $as_tr_sh`
-ac_fn_c_check_header_mongrel "$LINENO" "$ac_header" "$as_ac_Header" "$ac_includes_default"
-if eval test \"x\$"$as_ac_Header"\" = x"yes"; then :
-  cat >>confdefs.h <<_ACEOF
-#define `$as_echo "HAVE_$ac_header" | $as_tr_cpp` 1
-_ACEOF
-
-fi
-
-done
-
-    if test $ac_cv_header_sys_inttypes_h = yes; then
-      HAVE_SYS_INTTYPES_H=1
-    else
-      HAVE_SYS_INTTYPES_H=0
-    fi
-
-    if test $ac_cv_header_sys_bitypes_h = yes; then
-      HAVE_SYS_BITYPES_H=1
-    else
-      HAVE_SYS_BITYPES_H=0
-    fi
-
-
-
-
-  if test $APPLE_UNIVERSAL_BUILD = 0; then
-
-
-  for gltype in ptrdiff_t size_t ; do
-    { $as_echo "$as_me:${as_lineno-$LINENO}: checking for bit size of $gltype" >&5
-$as_echo_n "checking for bit size of $gltype... " >&6; }
-if eval \${gl_cv_bitsizeof_${gltype}+:} false; then :
-  $as_echo_n "(cached) " >&6
-else
-  if ac_fn_c_compute_int "$LINENO" "sizeof ($gltype) * CHAR_BIT" "result"        "
-  /* BSD/OS 4.0.1 has a bug: <stddef.h>, <stdio.h> and <time.h> must be
-     included before <wchar.h>.  */
-  #include <stddef.h>
-  #include <signal.h>
-  #if HAVE_WCHAR_H
-  # include <stdio.h>
-  # include <time.h>
-  # include <wchar.h>
-  #endif
-
-#include <limits.h>"; then :
-
-else
-  result=unknown
-fi
-
-       eval gl_cv_bitsizeof_${gltype}=\$result
-
-fi
-eval ac_res=\$gl_cv_bitsizeof_${gltype}
-	       { $as_echo "$as_me:${as_lineno-$LINENO}: result: $ac_res" >&5
-$as_echo "$ac_res" >&6; }
-    eval result=\$gl_cv_bitsizeof_${gltype}
-    if test $result = unknown; then
-                                                result=0
-    fi
-    GLTYPE=`echo "$gltype" | tr 'abcdefghijklmnopqrstuvwxyz ' 'ABCDEFGHIJKLMNOPQRSTUVWXYZ_'`
-    cat >>confdefs.h <<_ACEOF
-#define BITSIZEOF_${GLTYPE} $result
-_ACEOF
-
-    eval BITSIZEOF_${GLTYPE}=\$result
-  done
-
-
-  fi
-
-
-  for gltype in sig_atomic_t wchar_t wint_t ; do
-    { $as_echo "$as_me:${as_lineno-$LINENO}: checking for bit size of $gltype" >&5
-$as_echo_n "checking for bit size of $gltype... " >&6; }
-if eval \${gl_cv_bitsizeof_${gltype}+:} false; then :
-  $as_echo_n "(cached) " >&6
-else
-  if ac_fn_c_compute_int "$LINENO" "sizeof ($gltype) * CHAR_BIT" "result"        "
-  /* BSD/OS 4.0.1 has a bug: <stddef.h>, <stdio.h> and <time.h> must be
-     included before <wchar.h>.  */
-  #include <stddef.h>
-  #include <signal.h>
-  #if HAVE_WCHAR_H
-  # include <stdio.h>
-  # include <time.h>
-  # include <wchar.h>
-  #endif
-
-#include <limits.h>"; then :
-
-else
-  result=unknown
-fi
-
-       eval gl_cv_bitsizeof_${gltype}=\$result
-
-fi
-eval ac_res=\$gl_cv_bitsizeof_${gltype}
-	       { $as_echo "$as_me:${as_lineno-$LINENO}: result: $ac_res" >&5
-$as_echo "$ac_res" >&6; }
-    eval result=\$gl_cv_bitsizeof_${gltype}
-    if test $result = unknown; then
-                                                result=0
-    fi
-    GLTYPE=`echo "$gltype" | tr 'abcdefghijklmnopqrstuvwxyz ' 'ABCDEFGHIJKLMNOPQRSTUVWXYZ_'`
-    cat >>confdefs.h <<_ACEOF
-#define BITSIZEOF_${GLTYPE} $result
-_ACEOF
-
-    eval BITSIZEOF_${GLTYPE}=\$result
-  done
-
-
-
-
-  for gltype in sig_atomic_t wchar_t wint_t ; do
-    { $as_echo "$as_me:${as_lineno-$LINENO}: checking whether $gltype is signed" >&5
-$as_echo_n "checking whether $gltype is signed... " >&6; }
-if eval \${gl_cv_type_${gltype}_signed+:} false; then :
-  $as_echo_n "(cached) " >&6
-else
-  cat confdefs.h - <<_ACEOF >conftest.$ac_ext
-/* end confdefs.h.  */
-
-  /* BSD/OS 4.0.1 has a bug: <stddef.h>, <stdio.h> and <time.h> must be
-     included before <wchar.h>.  */
-  #include <stddef.h>
-  #include <signal.h>
-  #if HAVE_WCHAR_H
-  # include <stdio.h>
-  # include <time.h>
-  # include <wchar.h>
-  #endif
-
-            int verify[2 * (($gltype) -1 < ($gltype) 0) - 1];
-int
-main ()
-{
-
-  ;
-  return 0;
-}
-_ACEOF
-if ac_fn_c_try_compile "$LINENO"; then :
-  result=yes
-else
-  result=no
-fi
-rm -f core conftest.err conftest.$ac_objext conftest.$ac_ext
-       eval gl_cv_type_${gltype}_signed=\$result
-
-fi
-eval ac_res=\$gl_cv_type_${gltype}_signed
-	       { $as_echo "$as_me:${as_lineno-$LINENO}: result: $ac_res" >&5
-$as_echo "$ac_res" >&6; }
-    eval result=\$gl_cv_type_${gltype}_signed
-    GLTYPE=`echo $gltype | tr 'abcdefghijklmnopqrstuvwxyz ' 'ABCDEFGHIJKLMNOPQRSTUVWXYZ_'`
-    if test "$result" = yes; then
-      cat >>confdefs.h <<_ACEOF
-#define HAVE_SIGNED_${GLTYPE} 1
-_ACEOF
-
-      eval HAVE_SIGNED_${GLTYPE}=1
-    else
-      eval HAVE_SIGNED_${GLTYPE}=0
-    fi
-  done
-
-
-  gl_cv_type_ptrdiff_t_signed=yes
-  gl_cv_type_size_t_signed=no
-  if test $APPLE_UNIVERSAL_BUILD = 0; then
-
-
-  for gltype in ptrdiff_t size_t ; do
-    { $as_echo "$as_me:${as_lineno-$LINENO}: checking for $gltype integer literal suffix" >&5
-$as_echo_n "checking for $gltype integer literal suffix... " >&6; }
-if eval \${gl_cv_type_${gltype}_suffix+:} false; then :
-  $as_echo_n "(cached) " >&6
-else
-  eval gl_cv_type_${gltype}_suffix=no
-       eval result=\$gl_cv_type_${gltype}_signed
-       if test "$result" = yes; then
-         glsufu=
-       else
-         glsufu=u
-       fi
-       for glsuf in "$glsufu" ${glsufu}l ${glsufu}ll ${glsufu}i64; do
-         case $glsuf in
-           '')  gltype1='int';;
-           l)   gltype1='long int';;
-           ll)  gltype1='long long int';;
-           i64) gltype1='__int64';;
-           u)   gltype1='unsigned int';;
-           ul)  gltype1='unsigned long int';;
-           ull) gltype1='unsigned long long int';;
-           ui64)gltype1='unsigned __int64';;
-         esac
-         cat confdefs.h - <<_ACEOF >conftest.$ac_ext
-/* end confdefs.h.  */
-
-  /* BSD/OS 4.0.1 has a bug: <stddef.h>, <stdio.h> and <time.h> must be
-     included before <wchar.h>.  */
-  #include <stddef.h>
-  #include <signal.h>
-  #if HAVE_WCHAR_H
-  # include <stdio.h>
-  # include <time.h>
-  # include <wchar.h>
-  #endif
-
-              extern $gltype foo;
-              extern $gltype1 foo;
-int
-main ()
-{
-
-  ;
-  return 0;
-}
-_ACEOF
-if ac_fn_c_try_compile "$LINENO"; then :
-  eval gl_cv_type_${gltype}_suffix=\$glsuf
-fi
-rm -f core conftest.err conftest.$ac_objext conftest.$ac_ext
-         eval result=\$gl_cv_type_${gltype}_suffix
-         test "$result" != no && break
-       done
-fi
-eval ac_res=\$gl_cv_type_${gltype}_suffix
-	       { $as_echo "$as_me:${as_lineno-$LINENO}: result: $ac_res" >&5
-$as_echo "$ac_res" >&6; }
-    GLTYPE=`echo $gltype | tr 'abcdefghijklmnopqrstuvwxyz ' 'ABCDEFGHIJKLMNOPQRSTUVWXYZ_'`
-    eval result=\$gl_cv_type_${gltype}_suffix
-    test "$result" = no && result=
-    eval ${GLTYPE}_SUFFIX=\$result
-    cat >>confdefs.h <<_ACEOF
-#define ${GLTYPE}_SUFFIX $result
-_ACEOF
-
-  done
-
-
-  fi
-
-
-  for gltype in sig_atomic_t wchar_t wint_t ; do
-    { $as_echo "$as_me:${as_lineno-$LINENO}: checking for $gltype integer literal suffix" >&5
-$as_echo_n "checking for $gltype integer literal suffix... " >&6; }
-if eval \${gl_cv_type_${gltype}_suffix+:} false; then :
-  $as_echo_n "(cached) " >&6
-else
-  eval gl_cv_type_${gltype}_suffix=no
-       eval result=\$gl_cv_type_${gltype}_signed
-       if test "$result" = yes; then
-         glsufu=
-       else
-         glsufu=u
-       fi
-       for glsuf in "$glsufu" ${glsufu}l ${glsufu}ll ${glsufu}i64; do
-         case $glsuf in
-           '')  gltype1='int';;
-           l)   gltype1='long int';;
-           ll)  gltype1='long long int';;
-           i64) gltype1='__int64';;
-           u)   gltype1='unsigned int';;
-           ul)  gltype1='unsigned long int';;
-           ull) gltype1='unsigned long long int';;
-           ui64)gltype1='unsigned __int64';;
-         esac
-         cat confdefs.h - <<_ACEOF >conftest.$ac_ext
-/* end confdefs.h.  */
-
-  /* BSD/OS 4.0.1 has a bug: <stddef.h>, <stdio.h> and <time.h> must be
-     included before <wchar.h>.  */
-  #include <stddef.h>
-  #include <signal.h>
-  #if HAVE_WCHAR_H
-  # include <stdio.h>
-  # include <time.h>
-  # include <wchar.h>
-  #endif
-
-              extern $gltype foo;
-              extern $gltype1 foo;
-int
-main ()
-{
-
-  ;
-  return 0;
-}
-_ACEOF
-if ac_fn_c_try_compile "$LINENO"; then :
-  eval gl_cv_type_${gltype}_suffix=\$glsuf
-fi
-rm -f core conftest.err conftest.$ac_objext conftest.$ac_ext
-         eval result=\$gl_cv_type_${gltype}_suffix
-         test "$result" != no && break
-       done
-fi
-eval ac_res=\$gl_cv_type_${gltype}_suffix
-	       { $as_echo "$as_me:${as_lineno-$LINENO}: result: $ac_res" >&5
-$as_echo "$ac_res" >&6; }
-    GLTYPE=`echo $gltype | tr 'abcdefghijklmnopqrstuvwxyz ' 'ABCDEFGHIJKLMNOPQRSTUVWXYZ_'`
-    eval result=\$gl_cv_type_${gltype}_suffix
-    test "$result" = no && result=
-    eval ${GLTYPE}_SUFFIX=\$result
-    cat >>confdefs.h <<_ACEOF
-#define ${GLTYPE}_SUFFIX $result
-_ACEOF
-
-  done
-
-
-
-          if test $BITSIZEOF_WINT_T -lt 32; then
-    BITSIZEOF_WINT_T=32
-  fi
-
-    STDINT_H=stdint.h
-  fi
-
-   if test -n "$STDINT_H"; then
-  GL_GENERATE_STDINT_H_TRUE=
-  GL_GENERATE_STDINT_H_FALSE='#'
-else
-  GL_GENERATE_STDINT_H_TRUE='#'
-  GL_GENERATE_STDINT_H_FALSE=
-fi
-
-
-
-
-
-
-
-
-  GNULIB_IMAXABS=0;
-  GNULIB_IMAXDIV=0;
-  GNULIB_STRTOIMAX=0;
-  GNULIB_STRTOUMAX=0;
-    HAVE_DECL_IMAXABS=1;
-  HAVE_DECL_IMAXDIV=1;
-  HAVE_DECL_STRTOIMAX=1;
-  HAVE_DECL_STRTOUMAX=1;
-  REPLACE_STRTOIMAX=0;
-  INT32_MAX_LT_INTMAX_MAX=1;
-  INT64_MAX_EQ_LONG_MAX='defined _LP64';
-  PRI_MACROS_BROKEN=0;
-  PRIPTR_PREFIX=__PRIPTR_PREFIX;
-  UINT32_MAX_LT_UINTMAX_MAX=1;
-  UINT64_MAX_EQ_ULONG_MAX='defined _LP64';
-
-
-
-
-  :
-
-
-
-
-
-
-
-
-
-
-
-
-
-  :
-
-
-
-
-
-
-
-
-     if test $gl_cv_have_include_next = yes; then
-       gl_cv_next_inttypes_h='<'inttypes.h'>'
-     else
-       { $as_echo "$as_me:${as_lineno-$LINENO}: checking absolute name of <inttypes.h>" >&5
-$as_echo_n "checking absolute name of <inttypes.h>... " >&6; }
-if ${gl_cv_next_inttypes_h+:} false; then :
-  $as_echo_n "(cached) " >&6
-else
-
-             if test $ac_cv_header_inttypes_h = yes; then
-
-
-               cat confdefs.h - <<_ACEOF >conftest.$ac_ext
-/* end confdefs.h.  */
-#include <inttypes.h>
-
-_ACEOF
-                                                                                                                        case "$host_os" in
-                 aix*) gl_absname_cpp="$ac_cpp -C" ;;
-                 *)    gl_absname_cpp="$ac_cpp" ;;
-               esac
-
-               case "$host_os" in
-                 mingw*)
-                                                                                                                                     gl_dirsep_regex='[/\\]'
-                   ;;
-                 *)
-                   gl_dirsep_regex='\/'
-                   ;;
-               esac
-                                             gl_make_literal_regex_sed='s,[]$^\\.*/[],\\&,g'
-
-               gl_header_literal_regex=`echo 'inttypes.h' \
-                                        | sed -e "$gl_make_literal_regex_sed"`
-               gl_absolute_header_sed="/${gl_dirsep_regex}${gl_header_literal_regex}/"'{
-                   s/.*"\(.*'"${gl_dirsep_regex}${gl_header_literal_regex}"'\)".*/\1/
-                   s|^/[^/]|//&|
-                   p
-                   q
-                 }'
-                                                            gl_cv_next_inttypes_h='"'`(eval "$gl_absname_cpp conftest.$ac_ext") 2>&5 |
-                      sed -n "$gl_absolute_header_sed"`'"'
-          else
-               gl_cv_next_inttypes_h='<'inttypes.h'>'
-             fi
-
-
-fi
-{ $as_echo "$as_me:${as_lineno-$LINENO}: result: $gl_cv_next_inttypes_h" >&5
-$as_echo "$gl_cv_next_inttypes_h" >&6; }
-     fi
-     NEXT_INTTYPES_H=$gl_cv_next_inttypes_h
-
-     if test $gl_cv_have_include_next = yes || test $gl_cv_have_include_next = buggy; then
-       # INCLUDE_NEXT_AS_FIRST_DIRECTIVE='include_next'
-       gl_next_as_first_directive='<'inttypes.h'>'
-     else
-       # INCLUDE_NEXT_AS_FIRST_DIRECTIVE='include'
-       gl_next_as_first_directive=$gl_cv_next_inttypes_h
-     fi
-     NEXT_AS_FIRST_DIRECTIVE_INTTYPES_H=$gl_next_as_first_directive
-
-
-
-
-
-
-
-
-    for gl_func in imaxabs imaxdiv strtoimax strtoumax; do
-    as_gl_Symbol=`$as_echo "gl_cv_have_raw_decl_$gl_func" | $as_tr_sh`
-    { $as_echo "$as_me:${as_lineno-$LINENO}: checking whether $gl_func is declared without a macro" >&5
-$as_echo_n "checking whether $gl_func is declared without a macro... " >&6; }
-if eval \${$as_gl_Symbol+:} false; then :
-  $as_echo_n "(cached) " >&6
-else
-  cat confdefs.h - <<_ACEOF >conftest.$ac_ext
-/* end confdefs.h.  */
-#include <inttypes.h>
-
-int
-main ()
-{
-#undef $gl_func
-  (void) $gl_func;
-  ;
-  return 0;
-}
-_ACEOF
-if ac_fn_c_try_compile "$LINENO"; then :
-  eval "$as_gl_Symbol=yes"
-else
-  eval "$as_gl_Symbol=no"
-fi
-rm -f core conftest.err conftest.$ac_objext conftest.$ac_ext
-fi
-eval ac_res=\$$as_gl_Symbol
-	       { $as_echo "$as_me:${as_lineno-$LINENO}: result: $ac_res" >&5
-$as_echo "$ac_res" >&6; }
-    if eval test \"x\$"$as_gl_Symbol"\" = x"yes"; then :
-  cat >>confdefs.h <<_ACEOF
-#define `$as_echo "HAVE_RAW_DECL_$gl_func" | $as_tr_cpp` 1
-_ACEOF
-
-                     eval ac_cv_have_decl_$gl_func=yes
-fi
-      done
-
-
-
-  for ac_header in inttypes.h
-do :
-  ac_fn_c_check_header_mongrel "$LINENO" "inttypes.h" "ac_cv_header_inttypes_h" "$ac_includes_default"
-if test "x$ac_cv_header_inttypes_h" = xyes; then :
-  cat >>confdefs.h <<_ACEOF
-#define HAVE_INTTYPES_H 1
-_ACEOF
-
-fi
-
-done
-
-  if test $ac_cv_header_inttypes_h = yes; then
-    { $as_echo "$as_me:${as_lineno-$LINENO}: checking whether the inttypes.h PRIxNN macros are broken" >&5
-$as_echo_n "checking whether the inttypes.h PRIxNN macros are broken... " >&6; }
-if ${gt_cv_inttypes_pri_broken+:} false; then :
-  $as_echo_n "(cached) " >&6
-else
-
-        cat confdefs.h - <<_ACEOF >conftest.$ac_ext
-/* end confdefs.h.  */
-
-#include <inttypes.h>
-#ifdef PRId32
-char *p = PRId32;
-#endif
-
-int
-main ()
-{
-
-  ;
-  return 0;
-}
-_ACEOF
-if ac_fn_c_try_compile "$LINENO"; then :
-  gt_cv_inttypes_pri_broken=no
-else
-  gt_cv_inttypes_pri_broken=yes
-fi
-rm -f core conftest.err conftest.$ac_objext conftest.$ac_ext
-
-fi
-{ $as_echo "$as_me:${as_lineno-$LINENO}: result: $gt_cv_inttypes_pri_broken" >&5
-$as_echo "$gt_cv_inttypes_pri_broken" >&6; }
-  fi
-  if test "$gt_cv_inttypes_pri_broken" = yes; then
-
-cat >>confdefs.h <<_ACEOF
-#define PRI_MACROS_BROKEN 1
-_ACEOF
-
-    PRI_MACROS_BROKEN=1
-  else
-    PRI_MACROS_BROKEN=0
-  fi
-
-
-
-  { $as_echo "$as_me:${as_lineno-$LINENO}: checking for nl_langinfo and CODESET" >&5
-$as_echo_n "checking for nl_langinfo and CODESET... " >&6; }
-if ${am_cv_langinfo_codeset+:} false; then :
-  $as_echo_n "(cached) " >&6
-else
-  cat confdefs.h - <<_ACEOF >conftest.$ac_ext
-/* end confdefs.h.  */
-#include <langinfo.h>
-int
-main ()
-{
-char* cs = nl_langinfo(CODESET); return !cs;
-  ;
-  return 0;
-}
-_ACEOF
-if ac_fn_c_try_link "$LINENO"; then :
-  am_cv_langinfo_codeset=yes
-else
-  am_cv_langinfo_codeset=no
-fi
-rm -f core conftest.err conftest.$ac_objext \
-    conftest$ac_exeext conftest.$ac_ext
-
-fi
-{ $as_echo "$as_me:${as_lineno-$LINENO}: result: $am_cv_langinfo_codeset" >&5
-$as_echo "$am_cv_langinfo_codeset" >&6; }
-  if test $am_cv_langinfo_codeset = yes; then
-
-$as_echo "#define HAVE_LANGINFO_CODESET 1" >>confdefs.h
-
-  fi
-
-
-
-
-
-
-
-
-
-
-  for ac_func in $gl_func_list
-do :
-  as_ac_var=`$as_echo "ac_cv_func_$ac_func" | $as_tr_sh`
-ac_fn_c_check_func "$LINENO" "$ac_func" "$as_ac_var"
-if eval test \"x\$"$as_ac_var"\" = x"yes"; then :
-  cat >>confdefs.h <<_ACEOF
-#define `$as_echo "HAVE_$ac_func" | $as_tr_cpp` 1
-_ACEOF
-
-fi
-done
-
-
-
-
-
-
-
-
-
-  :
-
-
-
-
-
-
-  :
-
-
-
-
-
-  { $as_echo "$as_me:${as_lineno-$LINENO}: checking for working fcntl.h" >&5
-$as_echo_n "checking for working fcntl.h... " >&6; }
-if ${gl_cv_header_working_fcntl_h+:} false; then :
-  $as_echo_n "(cached) " >&6
-else
-  if test "$cross_compiling" = yes; then :
-  gl_cv_header_working_fcntl_h=cross-compiling
-else
-  cat confdefs.h - <<_ACEOF >conftest.$ac_ext
-/* end confdefs.h.  */
-#include <sys/types.h>
-           #include <sys/stat.h>
-           #if HAVE_UNISTD_H
-           # include <unistd.h>
-           #else /* on Windows with MSVC */
-           # include <io.h>
-           # include <stdlib.h>
-           # defined sleep(n) _sleep ((n) * 1000)
-           #endif
-           #include <fcntl.h>
-           #ifndef O_NOATIME
-            #define O_NOATIME 0
-           #endif
-           #ifndef O_NOFOLLOW
-            #define O_NOFOLLOW 0
-           #endif
-           static int const constants[] =
-            {
-              O_CREAT, O_EXCL, O_NOCTTY, O_TRUNC, O_APPEND,
-              O_NONBLOCK, O_SYNC, O_ACCMODE, O_RDONLY, O_RDWR, O_WRONLY
-            };
-
-int
-main ()
-{
-
-            int result = !constants;
-            #if HAVE_SYMLINK
-            {
-              static char const sym[] = "conftest.sym";
-              if (symlink ("/dev/null", sym) != 0)
-                result |= 2;
-              else
-                {
-                  int fd = open (sym, O_WRONLY | O_NOFOLLOW | O_CREAT, 0);
-                  if (fd >= 0)
-                    {
-                      close (fd);
-                      result |= 4;
-                    }
-                }
-              if (unlink (sym) != 0 || symlink (".", sym) != 0)
-                result |= 2;
-              else
-                {
-                  int fd = open (sym, O_RDONLY | O_NOFOLLOW);
-                  if (fd >= 0)
-                    {
-                      close (fd);
-                      result |= 4;
-                    }
-                }
-              unlink (sym);
-            }
-            #endif
-            {
-              static char const file[] = "confdefs.h";
-              int fd = open (file, O_RDONLY | O_NOATIME);
-              if (fd < 0)
-                result |= 8;
-              else
-                {
-                  struct stat st0;
-                  if (fstat (fd, &st0) != 0)
-                    result |= 16;
-                  else
-                    {
-                      char c;
-                      sleep (1);
-                      if (read (fd, &c, 1) != 1)
-                        result |= 24;
-                      else
-                        {
-                          if (close (fd) != 0)
-                            result |= 32;
-                          else
-                            {
-                              struct stat st1;
-                              if (stat (file, &st1) != 0)
-                                result |= 40;
-                              else
-                                if (st0.st_atime != st1.st_atime)
-                                  result |= 64;
-                            }
-                        }
-                    }
-                }
-            }
-            return result;
-  ;
-  return 0;
-}
-_ACEOF
-if ac_fn_c_try_run "$LINENO"; then :
-  gl_cv_header_working_fcntl_h=yes
-else
-  case $? in #(
-        4) gl_cv_header_working_fcntl_h='no (bad O_NOFOLLOW)';; #(
-        64) gl_cv_header_working_fcntl_h='no (bad O_NOATIME)';; #(
-        68) gl_cv_header_working_fcntl_h='no (bad O_NOATIME, O_NOFOLLOW)';; #(
-         *) gl_cv_header_working_fcntl_h='no';;
-        esac
-fi
-rm -f core *.core core.conftest.* gmon.out bb.out conftest$ac_exeext \
-  conftest.$ac_objext conftest.beam conftest.$ac_ext
-fi
-
-fi
-{ $as_echo "$as_me:${as_lineno-$LINENO}: result: $gl_cv_header_working_fcntl_h" >&5
-$as_echo "$gl_cv_header_working_fcntl_h" >&6; }
-
-  case $gl_cv_header_working_fcntl_h in #(
-  *O_NOATIME* | no | cross-compiling) ac_val=0;; #(
-  *) ac_val=1;;
-  esac
-
-cat >>confdefs.h <<_ACEOF
-#define HAVE_WORKING_O_NOATIME $ac_val
-_ACEOF
-
-
-  case $gl_cv_header_working_fcntl_h in #(
-  *O_NOFOLLOW* | no | cross-compiling) ac_val=0;; #(
-  *) ac_val=1;;
-  esac
-
-cat >>confdefs.h <<_ACEOF
-#define HAVE_WORKING_O_NOFOLLOW $ac_val
-_ACEOF
-
-
-
-      ac_fn_c_check_decl "$LINENO" "getc_unlocked" "ac_cv_have_decl_getc_unlocked" "$ac_includes_default"
-if test "x$ac_cv_have_decl_getc_unlocked" = xyes; then :
-  ac_have_decl=1
-else
-  ac_have_decl=0
-fi
-
-cat >>confdefs.h <<_ACEOF
-#define HAVE_DECL_GETC_UNLOCKED $ac_have_decl
-_ACEOF
-
-
-
-    { $as_echo "$as_me:${as_lineno-$LINENO}: checking whether we are using the GNU C Library >= 2.1 or uClibc" >&5
-$as_echo_n "checking whether we are using the GNU C Library >= 2.1 or uClibc... " >&6; }
-if ${ac_cv_gnu_library_2_1+:} false; then :
-  $as_echo_n "(cached) " >&6
-else
-  cat confdefs.h - <<_ACEOF >conftest.$ac_ext
-/* end confdefs.h.  */
-
-#include <features.h>
-#ifdef __GNU_LIBRARY__
- #if (__GLIBC__ == 2 && __GLIBC_MINOR__ >= 1) || (__GLIBC__ > 2)
-  Lucky GNU user
- #endif
-#endif
-#ifdef __UCLIBC__
- Lucky user
-#endif
-
-_ACEOF
-if (eval "$ac_cpp conftest.$ac_ext") 2>&5 |
-  $EGREP "Lucky" >/dev/null 2>&1; then :
-  ac_cv_gnu_library_2_1=yes
-else
-  ac_cv_gnu_library_2_1=no
-fi
-rm -f conftest*
-
-
-
-fi
-{ $as_echo "$as_me:${as_lineno-$LINENO}: result: $ac_cv_gnu_library_2_1" >&5
-$as_echo "$ac_cv_gnu_library_2_1" >&6; }
-
-    GLIBC21="$ac_cv_gnu_library_2_1"
-
-
-{ $as_echo "$as_me:${as_lineno-$LINENO}: checking for stdbool.h that conforms to C99" >&5
-$as_echo_n "checking for stdbool.h that conforms to C99... " >&6; }
-if ${ac_cv_header_stdbool_h+:} false; then :
-  $as_echo_n "(cached) " >&6
-else
-  cat confdefs.h - <<_ACEOF >conftest.$ac_ext
-/* end confdefs.h.  */
-
-             #include <stdbool.h>
-             #ifndef bool
-              "error: bool is not defined"
-             #endif
-             #ifndef false
-              "error: false is not defined"
-             #endif
-             #if false
-              "error: false is not 0"
-             #endif
-             #ifndef true
-              "error: true is not defined"
-             #endif
-             #if true != 1
-              "error: true is not 1"
-             #endif
-             #ifndef __bool_true_false_are_defined
-              "error: __bool_true_false_are_defined is not defined"
-             #endif
-
-             struct s { _Bool s: 1; _Bool t; } s;
-
-             char a[true == 1 ? 1 : -1];
-             char b[false == 0 ? 1 : -1];
-             char c[__bool_true_false_are_defined == 1 ? 1 : -1];
-             char d[(bool) 0.5 == true ? 1 : -1];
-             /* See body of main program for 'e'.  */
-             char f[(_Bool) 0.0 == false ? 1 : -1];
-             char g[true];
-             char h[sizeof (_Bool)];
-             char i[sizeof s.t];
-             enum { j = false, k = true, l = false * true, m = true * 256 };
-             /* The following fails for
-                HP aC++/ANSI C B3910B A.05.55 [Dec 04 2003]. */
-             _Bool n[m];
-             char o[sizeof n == m * sizeof n[0] ? 1 : -1];
-             char p[-1 - (_Bool) 0 < 0 && -1 - (bool) 0 < 0 ? 1 : -1];
-             /* Catch a bug in an HP-UX C compiler.  See
-                http://gcc.gnu.org/ml/gcc-patches/2003-12/msg02303.html
-                http://lists.gnu.org/archive/html/bug-coreutils/2005-11/msg00161.html
-              */
-             _Bool q = true;
-             _Bool *pq = &q;
-
-int
-main ()
-{
-
-             bool e = &s;
-             *pq |= q;
-             *pq |= ! q;
-             /* Refer to every declared value, to avoid compiler optimizations.  */
-             return (!a + !b + !c + !d + !e + !f + !g + !h + !i + !!j + !k + !!l
-                     + !m + !n + !o + !p + !q + !pq);
-
-  ;
-  return 0;
-}
-_ACEOF
-if ac_fn_c_try_compile "$LINENO"; then :
-  ac_cv_header_stdbool_h=yes
-else
-  ac_cv_header_stdbool_h=no
-fi
-rm -f core conftest.err conftest.$ac_objext conftest.$ac_ext
-fi
-{ $as_echo "$as_me:${as_lineno-$LINENO}: result: $ac_cv_header_stdbool_h" >&5
-$as_echo "$ac_cv_header_stdbool_h" >&6; }
-   ac_fn_c_check_type "$LINENO" "_Bool" "ac_cv_type__Bool" "$ac_includes_default"
-if test "x$ac_cv_type__Bool" = xyes; then :
-
-cat >>confdefs.h <<_ACEOF
-#define HAVE__BOOL 1
-_ACEOF
-
-
-fi
-
-
-
-    REPLACE_NULL=0;
-  HAVE_WCHAR_T=1;
-
-
-  { $as_echo "$as_me:${as_lineno-$LINENO}: checking for wchar_t" >&5
-$as_echo_n "checking for wchar_t... " >&6; }
-if ${gt_cv_c_wchar_t+:} false; then :
-  $as_echo_n "(cached) " >&6
-else
-  cat confdefs.h - <<_ACEOF >conftest.$ac_ext
-/* end confdefs.h.  */
-#include <stddef.h>
-            wchar_t foo = (wchar_t)'\0';
-int
-main ()
-{
-
-  ;
-  return 0;
-}
-_ACEOF
-if ac_fn_c_try_compile "$LINENO"; then :
-  gt_cv_c_wchar_t=yes
-else
-  gt_cv_c_wchar_t=no
-fi
-rm -f core conftest.err conftest.$ac_objext conftest.$ac_ext
-fi
-{ $as_echo "$as_me:${as_lineno-$LINENO}: result: $gt_cv_c_wchar_t" >&5
-$as_echo "$gt_cv_c_wchar_t" >&6; }
-  if test $gt_cv_c_wchar_t = yes; then
-
-$as_echo "#define HAVE_WCHAR_T 1" >>confdefs.h
-
-  fi
-
-
-
-
-
-
-
-gl_libunistring_sed_extract_major='/^[0-9]/{s/^\([0-9]*\).*/\1/p;q;}
-i\
-0
-q
-'
-gl_libunistring_sed_extract_minor='/^[0-9][0-9]*[.][0-9]/{s/^[0-9]*[.]\([0-9]*\).*/\1/p;q;}
-i\
-0
-q
-'
-gl_libunistring_sed_extract_subminor='/^[0-9][0-9]*[.][0-9][0-9]*[.][0-9]/{s/^[0-9]*[.][0-9]*[.]\([0-9]*\).*/\1/p;q;}
-i\
-0
-q
-'
-
-
-  if test "$HAVE_LIBUNISTRING" = yes; then
-    LIBUNISTRING_VERSION_MAJOR=`echo "$LIBUNISTRING_VERSION" | sed -n -e "$gl_libunistring_sed_extract_major"`
-    LIBUNISTRING_VERSION_MINOR=`echo "$LIBUNISTRING_VERSION" | sed -n -e "$gl_libunistring_sed_extract_minor"`
-    LIBUNISTRING_VERSION_SUBMINOR=`echo "$LIBUNISTRING_VERSION" | sed -n -e "$gl_libunistring_sed_extract_subminor"`
-  fi
-
-
-  GNULIB_BTOWC=0;
-  GNULIB_WCTOB=0;
-  GNULIB_MBSINIT=0;
-  GNULIB_MBRTOWC=0;
-  GNULIB_MBRLEN=0;
-  GNULIB_MBSRTOWCS=0;
-  GNULIB_MBSNRTOWCS=0;
-  GNULIB_WCRTOMB=0;
-  GNULIB_WCSRTOMBS=0;
-  GNULIB_WCSNRTOMBS=0;
-  GNULIB_WCWIDTH=0;
-  GNULIB_WMEMCHR=0;
-  GNULIB_WMEMCMP=0;
-  GNULIB_WMEMCPY=0;
-  GNULIB_WMEMMOVE=0;
-  GNULIB_WMEMSET=0;
-  GNULIB_WCSLEN=0;
-  GNULIB_WCSNLEN=0;
-  GNULIB_WCSCPY=0;
-  GNULIB_WCPCPY=0;
-  GNULIB_WCSNCPY=0;
-  GNULIB_WCPNCPY=0;
-  GNULIB_WCSCAT=0;
-  GNULIB_WCSNCAT=0;
-  GNULIB_WCSCMP=0;
-  GNULIB_WCSNCMP=0;
-  GNULIB_WCSCASECMP=0;
-  GNULIB_WCSNCASECMP=0;
-  GNULIB_WCSCOLL=0;
-  GNULIB_WCSXFRM=0;
-  GNULIB_WCSDUP=0;
-  GNULIB_WCSCHR=0;
-  GNULIB_WCSRCHR=0;
-  GNULIB_WCSCSPN=0;
-  GNULIB_WCSSPN=0;
-  GNULIB_WCSPBRK=0;
-  GNULIB_WCSSTR=0;
-  GNULIB_WCSTOK=0;
-  GNULIB_WCSWIDTH=0;
-    HAVE_BTOWC=1;
-  HAVE_MBSINIT=1;
-  HAVE_MBRTOWC=1;
-  HAVE_MBRLEN=1;
-  HAVE_MBSRTOWCS=1;
-  HAVE_MBSNRTOWCS=1;
-  HAVE_WCRTOMB=1;
-  HAVE_WCSRTOMBS=1;
-  HAVE_WCSNRTOMBS=1;
-  HAVE_WMEMCHR=1;
-  HAVE_WMEMCMP=1;
-  HAVE_WMEMCPY=1;
-  HAVE_WMEMMOVE=1;
-  HAVE_WMEMSET=1;
-  HAVE_WCSLEN=1;
-  HAVE_WCSNLEN=1;
-  HAVE_WCSCPY=1;
-  HAVE_WCPCPY=1;
-  HAVE_WCSNCPY=1;
-  HAVE_WCPNCPY=1;
-  HAVE_WCSCAT=1;
-  HAVE_WCSNCAT=1;
-  HAVE_WCSCMP=1;
-  HAVE_WCSNCMP=1;
-  HAVE_WCSCASECMP=1;
-  HAVE_WCSNCASECMP=1;
-  HAVE_WCSCOLL=1;
-  HAVE_WCSXFRM=1;
-  HAVE_WCSDUP=1;
-  HAVE_WCSCHR=1;
-  HAVE_WCSRCHR=1;
-  HAVE_WCSCSPN=1;
-  HAVE_WCSSPN=1;
-  HAVE_WCSPBRK=1;
-  HAVE_WCSSTR=1;
-  HAVE_WCSTOK=1;
-  HAVE_WCSWIDTH=1;
-  HAVE_DECL_WCTOB=1;
-  HAVE_DECL_WCWIDTH=1;
-  REPLACE_MBSTATE_T=0;
-  REPLACE_BTOWC=0;
-  REPLACE_WCTOB=0;
-  REPLACE_MBSINIT=0;
-  REPLACE_MBRTOWC=0;
-  REPLACE_MBRLEN=0;
-  REPLACE_MBSRTOWCS=0;
-  REPLACE_MBSNRTOWCS=0;
-  REPLACE_WCRTOMB=0;
-  REPLACE_WCSRTOMBS=0;
-  REPLACE_WCSNRTOMBS=0;
-  REPLACE_WCWIDTH=0;
-  REPLACE_WCSWIDTH=0;
-
-
-            { $as_echo "$as_me:${as_lineno-$LINENO}: checking whether <wchar.h> uses 'inline' correctly" >&5
-$as_echo_n "checking whether <wchar.h> uses 'inline' correctly... " >&6; }
-if ${gl_cv_header_wchar_h_correct_inline+:} false; then :
-  $as_echo_n "(cached) " >&6
-else
-  gl_cv_header_wchar_h_correct_inline=yes
-     cat confdefs.h - <<_ACEOF >conftest.$ac_ext
-/* end confdefs.h.  */
-
-       #define wcstod renamed_wcstod
-/* Tru64 with Desktop Toolkit C has a bug: <stdio.h> must be included before
-   <wchar.h>.
-   BSD/OS 4.0.1 has a bug: <stddef.h>, <stdio.h> and <time.h> must be
-   included before <wchar.h>.  */
-#include <stddef.h>
-#include <stdio.h>
-#include <time.h>
-#include <wchar.h>
-extern int zero (void);
-int main () { return zero(); }
-
-_ACEOF
-     if { { eval echo "\"\$as_me\":${as_lineno-$LINENO}: \"$ac_compile\""; } >&5
-  (eval $ac_compile) 2>&5
-  ac_status=$?
-  $as_echo "$as_me:${as_lineno-$LINENO}: \$? = $ac_status" >&5
-  test $ac_status = 0; }; then
-       mv conftest.$ac_objext conftest1.$ac_objext
-       cat confdefs.h - <<_ACEOF >conftest.$ac_ext
-/* end confdefs.h.  */
-
-         #define wcstod renamed_wcstod
-/* Tru64 with Desktop Toolkit C has a bug: <stdio.h> must be included before
-   <wchar.h>.
-   BSD/OS 4.0.1 has a bug: <stddef.h>, <stdio.h> and <time.h> must be
-   included before <wchar.h>.  */
-#include <stddef.h>
-#include <stdio.h>
-#include <time.h>
-#include <wchar.h>
-int zero (void) { return 0; }
-
-_ACEOF
-       if { { eval echo "\"\$as_me\":${as_lineno-$LINENO}: \"$ac_compile\""; } >&5
-  (eval $ac_compile) 2>&5
-  ac_status=$?
-  $as_echo "$as_me:${as_lineno-$LINENO}: \$? = $ac_status" >&5
-  test $ac_status = 0; }; then
-         mv conftest.$ac_objext conftest2.$ac_objext
-         if $CC -o conftest$ac_exeext $CFLAGS $LDFLAGS conftest1.$ac_objext conftest2.$ac_objext $LIBS >&5 2>&1; then
-           :
-         else
-           gl_cv_header_wchar_h_correct_inline=no
-         fi
-       fi
-     fi
-     rm -f conftest1.$ac_objext conftest2.$ac_objext conftest$ac_exeext
-
-fi
-{ $as_echo "$as_me:${as_lineno-$LINENO}: result: $gl_cv_header_wchar_h_correct_inline" >&5
-$as_echo "$gl_cv_header_wchar_h_correct_inline" >&6; }
-  if test $gl_cv_header_wchar_h_correct_inline = no; then
-    as_fn_error $? "<wchar.h> cannot be used with this compiler ($CC $CFLAGS $CPPFLAGS).
-This is a known interoperability problem of glibc <= 2.5 with gcc >= 4.3 in
-C99 mode. You have four options:
-  - Add the flag -fgnu89-inline to CC and reconfigure, or
-  - Fix your include files, using parts of
-    <http://sourceware.org/git/?p=glibc.git;a=commitdiff;h=b037a293a48718af30d706c2e18c929d0e69a621>, or
-  - Use a gcc version older than 4.3, or
-  - Don't use the flags -std=c99 or -std=gnu99.
-Configuration aborted." "$LINENO" 5
-  fi
-
-
-
-
-
-
-
-
-  :
-
-
-
-
-
-  if test $ac_cv_header_features_h = yes; then
-    HAVE_FEATURES_H=1
-  else
-    HAVE_FEATURES_H=0
-  fi
-
-
-
-  { $as_echo "$as_me:${as_lineno-$LINENO}: checking for wint_t" >&5
-$as_echo_n "checking for wint_t... " >&6; }
-if ${gt_cv_c_wint_t+:} false; then :
-  $as_echo_n "(cached) " >&6
-else
-  cat confdefs.h - <<_ACEOF >conftest.$ac_ext
-/* end confdefs.h.  */
-
-/* Tru64 with Desktop Toolkit C has a bug: <stdio.h> must be included before
-   <wchar.h>.
-   BSD/OS 4.0.1 has a bug: <stddef.h>, <stdio.h> and <time.h> must be included
-   before <wchar.h>.  */
-#include <stddef.h>
-#include <stdio.h>
-#include <time.h>
-#include <wchar.h>
-            wint_t foo = (wchar_t)'\0';
-int
-main ()
-{
-
-  ;
-  return 0;
-}
-_ACEOF
-if ac_fn_c_try_compile "$LINENO"; then :
-  gt_cv_c_wint_t=yes
-else
-  gt_cv_c_wint_t=no
-fi
-rm -f core conftest.err conftest.$ac_objext conftest.$ac_ext
-fi
-{ $as_echo "$as_me:${as_lineno-$LINENO}: result: $gt_cv_c_wint_t" >&5
-$as_echo "$gt_cv_c_wint_t" >&6; }
-  if test $gt_cv_c_wint_t = yes; then
-
-$as_echo "#define HAVE_WINT_T 1" >>confdefs.h
-
-  fi
-
-
-  GNULIB_ISWBLANK=0;
-  GNULIB_WCTYPE=0;
-  GNULIB_ISWCTYPE=0;
-  GNULIB_WCTRANS=0;
-  GNULIB_TOWCTRANS=0;
-    HAVE_ISWBLANK=1;
-  HAVE_WCTYPE_T=1;
-  HAVE_WCTRANS_T=1;
-  REPLACE_ISWBLANK=0;
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-gl_m4_base='m4'
-
-
-
-
-
-
-
-
-
-gl_source_base='lib'
-
-          if test "x$datarootdir" = x; then
-    datarootdir='${datadir}'
-
-  fi
-    if test "x$docdir" = x; then
-    docdir='${datarootdir}/doc/${PACKAGE_TARNAME}'
-
-  fi
-    if test "x$htmldir" = x; then
-    htmldir='${docdir}'
-
-  fi
-  if test "x$dvidir" = x; then
-    dvidir='${docdir}'
-
-  fi
-  if test "x$pdfdir" = x; then
-    pdfdir='${docdir}'
-
-  fi
-  if test "x$psdir" = x; then
-    psdir='${docdir}'
-
-  fi
-  if test "x$lispdir" = x; then
-    lispdir='${datarootdir}/emacs/site-lisp'
-
-  fi
-  if test "x$localedir" = x; then
-    localedir='${datarootdir}/locale'
-
-  fi
-    if test "x$runstatedir" = x; then
-    runstatedir='${localstatedir}/run'
-
-  fi
-
-      pkglibexecdir='${libexecdir}/${PACKAGE}'
-
-
-
-
-
-
-
-
-  PRIPTR_PREFIX=
-  if test -n "$STDINT_H"; then
-        PRIPTR_PREFIX='"l"'
-  else
-        for glpfx in '' l ll I64; do
-      case $glpfx in
-        '')  gltype1='int';;
-        l)   gltype1='long int';;
-        ll)  gltype1='long long int';;
-        I64) gltype1='__int64';;
-      esac
-      cat confdefs.h - <<_ACEOF >conftest.$ac_ext
-/* end confdefs.h.  */
-#include <stdint.h>
-           extern intptr_t foo;
-           extern $gltype1 foo;
-int
-main ()
-{
-
-  ;
-  return 0;
-}
-_ACEOF
-if ac_fn_c_try_compile "$LINENO"; then :
-  PRIPTR_PREFIX='"'$glpfx'"'
-fi
-rm -f core conftest.err conftest.$ac_objext conftest.$ac_ext
-      test -n "$PRIPTR_PREFIX" && break
-    done
-  fi
-
-
-
-  { $as_echo "$as_me:${as_lineno-$LINENO}: checking whether INT32_MAX < INTMAX_MAX" >&5
-$as_echo_n "checking whether INT32_MAX < INTMAX_MAX... " >&6; }
-if ${gl_cv_test_INT32_MAX_LT_INTMAX_MAX+:} false; then :
-  $as_echo_n "(cached) " >&6
-else
-  cat confdefs.h - <<_ACEOF >conftest.$ac_ext
-/* end confdefs.h.  */
-/* Work also in C++ mode.  */
-            #define __STDC_LIMIT_MACROS 1
-
-            /* Work if build is not clean.  */
-            #define _GL_JUST_INCLUDE_SYSTEM_STDINT_H
-
-            #include <limits.h>
-            #if HAVE_STDINT_H
-             #include <stdint.h>
-            #endif
-
-            #if defined INT32_MAX && defined INTMAX_MAX
-             #define CONDITION (INT32_MAX < INTMAX_MAX)
-            #elif HAVE_LONG_LONG_INT
-             #define CONDITION (sizeof (int) < sizeof (long long int))
-            #else
-             #define CONDITION 0
-            #endif
-            int test[CONDITION ? 1 : -1];
-int
-main ()
-{
-
-  ;
-  return 0;
-}
-_ACEOF
-if ac_fn_c_try_compile "$LINENO"; then :
-  gl_cv_test_INT32_MAX_LT_INTMAX_MAX=yes
-else
-  gl_cv_test_INT32_MAX_LT_INTMAX_MAX=no
-fi
-rm -f core conftest.err conftest.$ac_objext conftest.$ac_ext
-fi
-{ $as_echo "$as_me:${as_lineno-$LINENO}: result: $gl_cv_test_INT32_MAX_LT_INTMAX_MAX" >&5
-$as_echo "$gl_cv_test_INT32_MAX_LT_INTMAX_MAX" >&6; }
-  if test $gl_cv_test_INT32_MAX_LT_INTMAX_MAX = yes; then
-    INT32_MAX_LT_INTMAX_MAX=1;
-  else
-    INT32_MAX_LT_INTMAX_MAX=0;
-  fi
-
-
-  if test $APPLE_UNIVERSAL_BUILD = 0; then
-
-  { $as_echo "$as_me:${as_lineno-$LINENO}: checking whether INT64_MAX == LONG_MAX" >&5
-$as_echo_n "checking whether INT64_MAX == LONG_MAX... " >&6; }
-if ${gl_cv_test_INT64_MAX_EQ_LONG_MAX+:} false; then :
-  $as_echo_n "(cached) " >&6
-else
-  cat confdefs.h - <<_ACEOF >conftest.$ac_ext
-/* end confdefs.h.  */
-/* Work also in C++ mode.  */
-            #define __STDC_LIMIT_MACROS 1
-
-            /* Work if build is not clean.  */
-            #define _GL_JUST_INCLUDE_SYSTEM_STDINT_H
-
-            #include <limits.h>
-            #if HAVE_STDINT_H
-             #include <stdint.h>
-            #endif
-
-            #if defined INT64_MAX
-             #define CONDITION (INT64_MAX == LONG_MAX)
-            #elif HAVE_LONG_LONG_INT
-             #define CONDITION (sizeof (long long int) == sizeof (long int))
-            #else
-             #define CONDITION 0
-            #endif
-            int test[CONDITION ? 1 : -1];
-int
-main ()
-{
-
-  ;
-  return 0;
-}
-_ACEOF
-if ac_fn_c_try_compile "$LINENO"; then :
-  gl_cv_test_INT64_MAX_EQ_LONG_MAX=yes
-else
-  gl_cv_test_INT64_MAX_EQ_LONG_MAX=no
-fi
-rm -f core conftest.err conftest.$ac_objext conftest.$ac_ext
-fi
-{ $as_echo "$as_me:${as_lineno-$LINENO}: result: $gl_cv_test_INT64_MAX_EQ_LONG_MAX" >&5
-$as_echo "$gl_cv_test_INT64_MAX_EQ_LONG_MAX" >&6; }
-  if test $gl_cv_test_INT64_MAX_EQ_LONG_MAX = yes; then
-    INT64_MAX_EQ_LONG_MAX=1;
-  else
-    INT64_MAX_EQ_LONG_MAX=0;
-  fi
-
-
-  else
-    INT64_MAX_EQ_LONG_MAX=-1
-  fi
-
-  { $as_echo "$as_me:${as_lineno-$LINENO}: checking whether UINT32_MAX < UINTMAX_MAX" >&5
-$as_echo_n "checking whether UINT32_MAX < UINTMAX_MAX... " >&6; }
-if ${gl_cv_test_UINT32_MAX_LT_UINTMAX_MAX+:} false; then :
-  $as_echo_n "(cached) " >&6
-else
-  cat confdefs.h - <<_ACEOF >conftest.$ac_ext
-/* end confdefs.h.  */
-/* Work also in C++ mode.  */
-            #define __STDC_LIMIT_MACROS 1
-
-            /* Work if build is not clean.  */
-            #define _GL_JUST_INCLUDE_SYSTEM_STDINT_H
-
-            #include <limits.h>
-            #if HAVE_STDINT_H
-             #include <stdint.h>
-            #endif
-
-            #if defined UINT32_MAX && defined UINTMAX_MAX
-             #define CONDITION (UINT32_MAX < UINTMAX_MAX)
-            #elif HAVE_LONG_LONG_INT
-             #define CONDITION (sizeof (unsigned int) < sizeof (unsigned long long int))
-            #else
-             #define CONDITION 0
-            #endif
-            int test[CONDITION ? 1 : -1];
-int
-main ()
-{
-
-  ;
-  return 0;
-}
-_ACEOF
-if ac_fn_c_try_compile "$LINENO"; then :
-  gl_cv_test_UINT32_MAX_LT_UINTMAX_MAX=yes
-else
-  gl_cv_test_UINT32_MAX_LT_UINTMAX_MAX=no
-fi
-rm -f core conftest.err conftest.$ac_objext conftest.$ac_ext
-fi
-{ $as_echo "$as_me:${as_lineno-$LINENO}: result: $gl_cv_test_UINT32_MAX_LT_UINTMAX_MAX" >&5
-$as_echo "$gl_cv_test_UINT32_MAX_LT_UINTMAX_MAX" >&6; }
-  if test $gl_cv_test_UINT32_MAX_LT_UINTMAX_MAX = yes; then
-    UINT32_MAX_LT_UINTMAX_MAX=1;
-  else
-    UINT32_MAX_LT_UINTMAX_MAX=0;
-  fi
-
-
-  if test $APPLE_UNIVERSAL_BUILD = 0; then
-
-  { $as_echo "$as_me:${as_lineno-$LINENO}: checking whether UINT64_MAX == ULONG_MAX" >&5
-$as_echo_n "checking whether UINT64_MAX == ULONG_MAX... " >&6; }
-if ${gl_cv_test_UINT64_MAX_EQ_ULONG_MAX+:} false; then :
-  $as_echo_n "(cached) " >&6
-else
-  cat confdefs.h - <<_ACEOF >conftest.$ac_ext
-/* end confdefs.h.  */
-/* Work also in C++ mode.  */
-            #define __STDC_LIMIT_MACROS 1
-
-            /* Work if build is not clean.  */
-            #define _GL_JUST_INCLUDE_SYSTEM_STDINT_H
-
-            #include <limits.h>
-            #if HAVE_STDINT_H
-             #include <stdint.h>
-            #endif
-
-            #if defined UINT64_MAX
-             #define CONDITION (UINT64_MAX == ULONG_MAX)
-            #elif HAVE_LONG_LONG_INT
-             #define CONDITION (sizeof (unsigned long long int) == sizeof (unsigned long int))
-            #else
-             #define CONDITION 0
-            #endif
-            int test[CONDITION ? 1 : -1];
-int
-main ()
-{
-
-  ;
-  return 0;
-}
-_ACEOF
-if ac_fn_c_try_compile "$LINENO"; then :
-  gl_cv_test_UINT64_MAX_EQ_ULONG_MAX=yes
-else
-  gl_cv_test_UINT64_MAX_EQ_ULONG_MAX=no
-fi
-rm -f core conftest.err conftest.$ac_objext conftest.$ac_ext
-fi
-{ $as_echo "$as_me:${as_lineno-$LINENO}: result: $gl_cv_test_UINT64_MAX_EQ_ULONG_MAX" >&5
-$as_echo "$gl_cv_test_UINT64_MAX_EQ_ULONG_MAX" >&6; }
-  if test $gl_cv_test_UINT64_MAX_EQ_ULONG_MAX = yes; then
-    UINT64_MAX_EQ_ULONG_MAX=1;
-  else
-    UINT64_MAX_EQ_ULONG_MAX=0;
-  fi
-
-
-  else
-    UINT64_MAX_EQ_ULONG_MAX=-1
-  fi
-
-
-
-
-
-
-
-  :
-
-
-
-
-
-
-
-
-
-  LOCALCHARSET_TESTS_ENVIRONMENT="CHARSETALIASDIR=\"\$(abs_top_builddir)/$gl_source_base\""
-
-
-
-
-
-  # Define two additional variables used in the Makefile substitution.
-
-  if test "$ac_cv_header_stdbool_h" = yes; then
-    STDBOOL_H=''
-  else
-    STDBOOL_H='stdbool.h'
-  fi
-
-   if test -n "$STDBOOL_H"; then
-  GL_GENERATE_STDBOOL_H_TRUE=
-  GL_GENERATE_STDBOOL_H_FALSE='#'
-else
-  GL_GENERATE_STDBOOL_H_TRUE='#'
-  GL_GENERATE_STDBOOL_H_FALSE=
-fi
-
-
-  if test "$ac_cv_type__Bool" = yes; then
-    HAVE__BOOL=1
-  else
-    HAVE__BOOL=0
-  fi
-
-
-
-
-
-  STDDEF_H=
-  if test $gt_cv_c_wchar_t = no; then
-    HAVE_WCHAR_T=0
-    STDDEF_H=stddef.h
-  fi
-  { $as_echo "$as_me:${as_lineno-$LINENO}: checking whether NULL can be used in arbitrary expressions" >&5
-$as_echo_n "checking whether NULL can be used in arbitrary expressions... " >&6; }
-if ${gl_cv_decl_null_works+:} false; then :
-  $as_echo_n "(cached) " >&6
-else
-  cat confdefs.h - <<_ACEOF >conftest.$ac_ext
-/* end confdefs.h.  */
-#include <stddef.h>
-      int test[2 * (sizeof NULL == sizeof (void *)) -1];
-
-int
-main ()
-{
-
-  ;
-  return 0;
-}
-_ACEOF
-if ac_fn_c_try_compile "$LINENO"; then :
-  gl_cv_decl_null_works=yes
-else
-  gl_cv_decl_null_works=no
-fi
-rm -f core conftest.err conftest.$ac_objext conftest.$ac_ext
-fi
-{ $as_echo "$as_me:${as_lineno-$LINENO}: result: $gl_cv_decl_null_works" >&5
-$as_echo "$gl_cv_decl_null_works" >&6; }
-  if test $gl_cv_decl_null_works = no; then
-    REPLACE_NULL=1
-    STDDEF_H=stddef.h
-  fi
-
-   if test -n "$STDDEF_H"; then
-  GL_GENERATE_STDDEF_H_TRUE=
-  GL_GENERATE_STDDEF_H_FALSE='#'
-else
-  GL_GENERATE_STDDEF_H_TRUE='#'
-  GL_GENERATE_STDDEF_H_FALSE=
-fi
-
-  if test -n "$STDDEF_H"; then
-
-
-
-
-
-
-
-
-     if test $gl_cv_have_include_next = yes; then
-       gl_cv_next_stddef_h='<'stddef.h'>'
-     else
-       { $as_echo "$as_me:${as_lineno-$LINENO}: checking absolute name of <stddef.h>" >&5
-$as_echo_n "checking absolute name of <stddef.h>... " >&6; }
-if ${gl_cv_next_stddef_h+:} false; then :
-  $as_echo_n "(cached) " >&6
-else
-
-               cat confdefs.h - <<_ACEOF >conftest.$ac_ext
-/* end confdefs.h.  */
-#include <stddef.h>
-
-_ACEOF
-                                                                                                                        case "$host_os" in
-                 aix*) gl_absname_cpp="$ac_cpp -C" ;;
-                 *)    gl_absname_cpp="$ac_cpp" ;;
-               esac
-
-               case "$host_os" in
-                 mingw*)
-                                                                                                                                     gl_dirsep_regex='[/\\]'
-                   ;;
-                 *)
-                   gl_dirsep_regex='\/'
-                   ;;
-               esac
-                                             gl_make_literal_regex_sed='s,[]$^\\.*/[],\\&,g'
-
-               gl_header_literal_regex=`echo 'stddef.h' \
-                                        | sed -e "$gl_make_literal_regex_sed"`
-               gl_absolute_header_sed="/${gl_dirsep_regex}${gl_header_literal_regex}/"'{
-                   s/.*"\(.*'"${gl_dirsep_regex}${gl_header_literal_regex}"'\)".*/\1/
-                   s|^/[^/]|//&|
-                   p
-                   q
-                 }'
-                                                            gl_cv_next_stddef_h='"'`(eval "$gl_absname_cpp conftest.$ac_ext") 2>&5 |
-                      sed -n "$gl_absolute_header_sed"`'"'
-
-
-fi
-{ $as_echo "$as_me:${as_lineno-$LINENO}: result: $gl_cv_next_stddef_h" >&5
-$as_echo "$gl_cv_next_stddef_h" >&6; }
-     fi
-     NEXT_STDDEF_H=$gl_cv_next_stddef_h
-
-     if test $gl_cv_have_include_next = yes || test $gl_cv_have_include_next = buggy; then
-       # INCLUDE_NEXT_AS_FIRST_DIRECTIVE='include_next'
-       gl_next_as_first_directive='<'stddef.h'>'
-     else
-       # INCLUDE_NEXT_AS_FIRST_DIRECTIVE='include'
-       gl_next_as_first_directive=$gl_cv_next_stddef_h
-     fi
-     NEXT_AS_FIRST_DIRECTIVE_STDDEF_H=$gl_next_as_first_directive
-
-
-
-
-  fi
-
-
-
-
-      if  { test "$HAVE_LIBUNISTRING" != yes \
-    || {
-
-
-
-            test $LIBUNISTRING_VERSION_MAJOR -lt 0 \
-            || { test $LIBUNISTRING_VERSION_MAJOR -eq 0 \
-                 && { test $LIBUNISTRING_VERSION_MINOR -lt 9 \
-                      || { test $LIBUNISTRING_VERSION_MINOR -eq 9 \
-                           && test $LIBUNISTRING_VERSION_SUBMINOR -lt 0
-                         }
-                    }
-               }
-
-
-
-
-       }
-  }; then
-    LIBUNISTRING_UNITYPES_H='unitypes.h'
-  else
-    LIBUNISTRING_UNITYPES_H=
-  fi
-
-
-
-
-      if  { test "$HAVE_LIBUNISTRING" != yes \
-    || {
-
-
-
-            test $LIBUNISTRING_VERSION_MAJOR -lt 0 \
-            || { test $LIBUNISTRING_VERSION_MAJOR -eq 0 \
-                 && { test $LIBUNISTRING_VERSION_MINOR -lt 9 \
-                      || { test $LIBUNISTRING_VERSION_MINOR -eq 9 \
-                           && test $LIBUNISTRING_VERSION_SUBMINOR -lt 0
-                         }
-                    }
-               }
-
-
-
-
-       }
-  }; then
-    LIBUNISTRING_UNIWIDTH_H='uniwidth.h'
-  else
-    LIBUNISTRING_UNIWIDTH_H=
-  fi
-
-
-
-
-       if  { test "$HAVE_LIBUNISTRING" != yes \
-    || {
-
-
-
-            test $LIBUNISTRING_VERSION_MAJOR -lt 0 \
-            || { test $LIBUNISTRING_VERSION_MAJOR -eq 0 \
-                 && { test $LIBUNISTRING_VERSION_MINOR -lt 9 \
-                      || { test $LIBUNISTRING_VERSION_MINOR -eq 9 \
-                           && test $LIBUNISTRING_VERSION_SUBMINOR -lt 4
-                         }
-                    }
-               }
-
-
-
-
-       }
-  }; then
-  LIBUNISTRING_COMPILE_UNIWIDTH_WIDTH_TRUE=
-  LIBUNISTRING_COMPILE_UNIWIDTH_WIDTH_FALSE='#'
-else
-  LIBUNISTRING_COMPILE_UNIWIDTH_WIDTH_TRUE='#'
-  LIBUNISTRING_COMPILE_UNIWIDTH_WIDTH_FALSE=
-fi
-
-
-
-
-
-
-
-
-
-
-
-  :
-
-
-
-
-
-
-
-
-     if test $gl_cv_have_include_next = yes; then
-       gl_cv_next_wchar_h='<'wchar.h'>'
-     else
-       { $as_echo "$as_me:${as_lineno-$LINENO}: checking absolute name of <wchar.h>" >&5
-$as_echo_n "checking absolute name of <wchar.h>... " >&6; }
-if ${gl_cv_next_wchar_h+:} false; then :
-  $as_echo_n "(cached) " >&6
-else
-
-             if test $ac_cv_header_wchar_h = yes; then
-
-
-               cat confdefs.h - <<_ACEOF >conftest.$ac_ext
-/* end confdefs.h.  */
-#include <wchar.h>
-
-_ACEOF
-                                                                                                                        case "$host_os" in
-                 aix*) gl_absname_cpp="$ac_cpp -C" ;;
-                 *)    gl_absname_cpp="$ac_cpp" ;;
-               esac
-
-               case "$host_os" in
-                 mingw*)
-                                                                                                                                     gl_dirsep_regex='[/\\]'
-                   ;;
-                 *)
-                   gl_dirsep_regex='\/'
-                   ;;
-               esac
-                                             gl_make_literal_regex_sed='s,[]$^\\.*/[],\\&,g'
-
-               gl_header_literal_regex=`echo 'wchar.h' \
-                                        | sed -e "$gl_make_literal_regex_sed"`
-               gl_absolute_header_sed="/${gl_dirsep_regex}${gl_header_literal_regex}/"'{
-                   s/.*"\(.*'"${gl_dirsep_regex}${gl_header_literal_regex}"'\)".*/\1/
-                   s|^/[^/]|//&|
-                   p
-                   q
-                 }'
-                                                            gl_cv_next_wchar_h='"'`(eval "$gl_absname_cpp conftest.$ac_ext") 2>&5 |
-                      sed -n "$gl_absolute_header_sed"`'"'
-          else
-               gl_cv_next_wchar_h='<'wchar.h'>'
-             fi
-
-
-fi
-{ $as_echo "$as_me:${as_lineno-$LINENO}: result: $gl_cv_next_wchar_h" >&5
-$as_echo "$gl_cv_next_wchar_h" >&6; }
-     fi
-     NEXT_WCHAR_H=$gl_cv_next_wchar_h
-
-     if test $gl_cv_have_include_next = yes || test $gl_cv_have_include_next = buggy; then
-       # INCLUDE_NEXT_AS_FIRST_DIRECTIVE='include_next'
-       gl_next_as_first_directive='<'wchar.h'>'
-     else
-       # INCLUDE_NEXT_AS_FIRST_DIRECTIVE='include'
-       gl_next_as_first_directive=$gl_cv_next_wchar_h
-     fi
-     NEXT_AS_FIRST_DIRECTIVE_WCHAR_H=$gl_next_as_first_directive
-
-
-
-
-  if test $ac_cv_header_wchar_h = yes; then
-    HAVE_WCHAR_H=1
-  else
-    HAVE_WCHAR_H=0
-  fi
-
-
-
-
-
-  if test $gt_cv_c_wint_t = yes; then
-    HAVE_WINT_T=1
-  else
-    HAVE_WINT_T=0
-  fi
-
-
-
-    for gl_func in btowc wctob mbsinit mbrtowc mbrlen mbsrtowcs mbsnrtowcs wcrtomb      wcsrtombs wcsnrtombs wcwidth wmemchr wmemcmp wmemcpy wmemmove wmemset      wcslen wcsnlen wcscpy wcpcpy wcsncpy wcpncpy wcscat wcsncat wcscmp      wcsncmp wcscasecmp wcsncasecmp wcscoll wcsxfrm wcsdup wcschr wcsrchr      wcscspn wcsspn wcspbrk wcsstr wcstok wcswidth     ; do
-    as_gl_Symbol=`$as_echo "gl_cv_have_raw_decl_$gl_func" | $as_tr_sh`
-    { $as_echo "$as_me:${as_lineno-$LINENO}: checking whether $gl_func is declared without a macro" >&5
-$as_echo_n "checking whether $gl_func is declared without a macro... " >&6; }
-if eval \${$as_gl_Symbol+:} false; then :
-  $as_echo_n "(cached) " >&6
-else
-  cat confdefs.h - <<_ACEOF >conftest.$ac_ext
-/* end confdefs.h.  */
-
-/* Tru64 with Desktop Toolkit C has a bug: <stdio.h> must be included before
-   <wchar.h>.
-   BSD/OS 4.0.1 has a bug: <stddef.h>, <stdio.h> and <time.h> must be
-   included before <wchar.h>.  */
-#if !(defined __GLIBC__ && !defined __UCLIBC__)
-# include <stddef.h>
-# include <stdio.h>
-# include <time.h>
-#endif
-#include <wchar.h>
-
-int
-main ()
-{
-#undef $gl_func
-  (void) $gl_func;
-  ;
-  return 0;
-}
-_ACEOF
-if ac_fn_c_try_compile "$LINENO"; then :
-  eval "$as_gl_Symbol=yes"
-else
-  eval "$as_gl_Symbol=no"
-fi
-rm -f core conftest.err conftest.$ac_objext conftest.$ac_ext
-fi
-eval ac_res=\$$as_gl_Symbol
-	       { $as_echo "$as_me:${as_lineno-$LINENO}: result: $ac_res" >&5
-$as_echo "$ac_res" >&6; }
-    if eval test \"x\$"$as_gl_Symbol"\" = x"yes"; then :
-  cat >>confdefs.h <<_ACEOF
-#define `$as_echo "HAVE_RAW_DECL_$gl_func" | $as_tr_cpp` 1
-_ACEOF
-
-                     eval ac_cv_have_decl_$gl_func=yes
-fi
-      done
-
-
-
-
-
-
-
-  :
-
-
-
-
-
-  if test $ac_cv_func_iswcntrl = yes; then
-    HAVE_ISWCNTRL=1
-  else
-    HAVE_ISWCNTRL=0
-  fi
-
-
-
-  if test $gt_cv_c_wint_t = yes; then
-    HAVE_WINT_T=1
-  else
-    HAVE_WINT_T=0
-  fi
-
-
-
-
-
-
-
-
-  :
-
-
-
-
-
-
-
-
-     if test $gl_cv_have_include_next = yes; then
-       gl_cv_next_wctype_h='<'wctype.h'>'
-     else
-       { $as_echo "$as_me:${as_lineno-$LINENO}: checking absolute name of <wctype.h>" >&5
-$as_echo_n "checking absolute name of <wctype.h>... " >&6; }
-if ${gl_cv_next_wctype_h+:} false; then :
-  $as_echo_n "(cached) " >&6
-else
-
-             if test $ac_cv_header_wctype_h = yes; then
-
-
-               cat confdefs.h - <<_ACEOF >conftest.$ac_ext
-/* end confdefs.h.  */
-#include <wctype.h>
-
-_ACEOF
-                                                                                                                        case "$host_os" in
-                 aix*) gl_absname_cpp="$ac_cpp -C" ;;
-                 *)    gl_absname_cpp="$ac_cpp" ;;
-               esac
-
-               case "$host_os" in
-                 mingw*)
-                                                                                                                                     gl_dirsep_regex='[/\\]'
-                   ;;
-                 *)
-                   gl_dirsep_regex='\/'
-                   ;;
-               esac
-                                             gl_make_literal_regex_sed='s,[]$^\\.*/[],\\&,g'
-
-               gl_header_literal_regex=`echo 'wctype.h' \
-                                        | sed -e "$gl_make_literal_regex_sed"`
-               gl_absolute_header_sed="/${gl_dirsep_regex}${gl_header_literal_regex}/"'{
-                   s/.*"\(.*'"${gl_dirsep_regex}${gl_header_literal_regex}"'\)".*/\1/
-                   s|^/[^/]|//&|
-                   p
-                   q
-                 }'
-                                                            gl_cv_next_wctype_h='"'`(eval "$gl_absname_cpp conftest.$ac_ext") 2>&5 |
-                      sed -n "$gl_absolute_header_sed"`'"'
-          else
-               gl_cv_next_wctype_h='<'wctype.h'>'
-             fi
-
-
-fi
-{ $as_echo "$as_me:${as_lineno-$LINENO}: result: $gl_cv_next_wctype_h" >&5
-$as_echo "$gl_cv_next_wctype_h" >&6; }
-     fi
-     NEXT_WCTYPE_H=$gl_cv_next_wctype_h
-
-     if test $gl_cv_have_include_next = yes || test $gl_cv_have_include_next = buggy; then
-       # INCLUDE_NEXT_AS_FIRST_DIRECTIVE='include_next'
-       gl_next_as_first_directive='<'wctype.h'>'
-     else
-       # INCLUDE_NEXT_AS_FIRST_DIRECTIVE='include'
-       gl_next_as_first_directive=$gl_cv_next_wctype_h
-     fi
-     NEXT_AS_FIRST_DIRECTIVE_WCTYPE_H=$gl_next_as_first_directive
-
-
-
-
-  if test $ac_cv_header_wctype_h = yes; then
-    if test $ac_cv_func_iswcntrl = yes; then
-                  { $as_echo "$as_me:${as_lineno-$LINENO}: checking whether iswcntrl works" >&5
-$as_echo_n "checking whether iswcntrl works... " >&6; }
-if ${gl_cv_func_iswcntrl_works+:} false; then :
-  $as_echo_n "(cached) " >&6
-else
-
-          if test "$cross_compiling" = yes; then :
-  cat confdefs.h - <<_ACEOF >conftest.$ac_ext
-/* end confdefs.h.  */
-#include <stdlib.h>
-                          #if __GNU_LIBRARY__ == 1
-                          Linux libc5 i18n is broken.
-                          #endif
-int
-main ()
-{
-
-  ;
-  return 0;
-}
-_ACEOF
-if ac_fn_c_try_compile "$LINENO"; then :
-  gl_cv_func_iswcntrl_works="guessing yes"
-else
-  gl_cv_func_iswcntrl_works="guessing no"
-fi
-rm -f core conftest.err conftest.$ac_objext conftest.$ac_ext
-
-else
-  cat confdefs.h - <<_ACEOF >conftest.$ac_ext
-/* end confdefs.h.  */
-
-               /* Tru64 with Desktop Toolkit C has a bug: <stdio.h> must be
-                  included before <wchar.h>.
-                  BSD/OS 4.0.1 has a bug: <stddef.h>, <stdio.h> and <time.h>
-                  must be included before <wchar.h>.  */
-               #include <stddef.h>
-               #include <stdio.h>
-               #include <time.h>
-               #include <wchar.h>
-               #include <wctype.h>
-               int main () { return iswprint ('x') == 0; }
-
-_ACEOF
-if ac_fn_c_try_run "$LINENO"; then :
-  gl_cv_func_iswcntrl_works=yes
-else
-  gl_cv_func_iswcntrl_works=no
-fi
-rm -f core *.core core.conftest.* gmon.out bb.out conftest$ac_exeext \
-  conftest.$ac_objext conftest.beam conftest.$ac_ext
-fi
-
-
-fi
-{ $as_echo "$as_me:${as_lineno-$LINENO}: result: $gl_cv_func_iswcntrl_works" >&5
-$as_echo "$gl_cv_func_iswcntrl_works" >&6; }
-    fi
-    HAVE_WCTYPE_H=1
-  else
-    HAVE_WCTYPE_H=0
-  fi
-
-
-  case "$gl_cv_func_iswcntrl_works" in
-    *yes) REPLACE_ISWCNTRL=0 ;;
-    *)    REPLACE_ISWCNTRL=1 ;;
-  esac
-
-
-  if test $HAVE_ISWCNTRL = 0 || test $REPLACE_ISWCNTRL = 1; then
-        :
-  fi
-
-  if test $REPLACE_ISWCNTRL = 1; then
-    REPLACE_TOWLOWER=1
-  else
-    for ac_func in towlower
-do :
-  ac_fn_c_check_func "$LINENO" "towlower" "ac_cv_func_towlower"
-if test "x$ac_cv_func_towlower" = xyes; then :
-  cat >>confdefs.h <<_ACEOF
-#define HAVE_TOWLOWER 1
-_ACEOF
-
-fi
-done
-
-    if test $ac_cv_func_towlower = yes; then
-      REPLACE_TOWLOWER=0
-    else
-      ac_fn_c_check_decl "$LINENO" "towlower" "ac_cv_have_decl_towlower" "/* Tru64 with Desktop Toolkit C has a bug: <stdio.h> must be
-             included before <wchar.h>.
-             BSD/OS 4.0.1 has a bug: <stddef.h>, <stdio.h> and <time.h>
-             must be included before <wchar.h>.  */
-          #include <stddef.h>
-          #include <stdio.h>
-          #include <time.h>
-          #include <wchar.h>
-          #if HAVE_WCTYPE_H
-          # include <wctype.h>
-          #endif
-
-"
-if test "x$ac_cv_have_decl_towlower" = xyes; then :
-  ac_have_decl=1
-else
-  ac_have_decl=0
-fi
-
-cat >>confdefs.h <<_ACEOF
-#define HAVE_DECL_TOWLOWER $ac_have_decl
-_ACEOF
-
-      if test $ac_cv_have_decl_towlower = yes; then
-                                REPLACE_TOWLOWER=1
-      else
-        REPLACE_TOWLOWER=0
-      fi
-    fi
-  fi
-
-
-  if test $HAVE_ISWCNTRL = 0 || test $REPLACE_TOWLOWER = 1; then
-        :
-  fi
-
-          { $as_echo "$as_me:${as_lineno-$LINENO}: checking for wctype_t" >&5
-$as_echo_n "checking for wctype_t... " >&6; }
-if ${gl_cv_type_wctype_t+:} false; then :
-  $as_echo_n "(cached) " >&6
-else
-  cat confdefs.h - <<_ACEOF >conftest.$ac_ext
-/* end confdefs.h.  */
-/* Tru64 with Desktop Toolkit C has a bug: <stdio.h> must be
-               included before <wchar.h>.
-               BSD/OS 4.0.1 has a bug: <stddef.h>, <stdio.h> and <time.h>
-               must be included before <wchar.h>.  */
-            #include <stddef.h>
-            #include <stdio.h>
-            #include <time.h>
-            #include <wchar.h>
-            #if HAVE_WCTYPE_H
-            # include <wctype.h>
-            #endif
-            wctype_t a;
-
-int
-main ()
-{
-
-  ;
-  return 0;
-}
-_ACEOF
-if ac_fn_c_try_compile "$LINENO"; then :
-  gl_cv_type_wctype_t=yes
-else
-  gl_cv_type_wctype_t=no
-fi
-rm -f core conftest.err conftest.$ac_objext conftest.$ac_ext
-
-fi
-{ $as_echo "$as_me:${as_lineno-$LINENO}: result: $gl_cv_type_wctype_t" >&5
-$as_echo "$gl_cv_type_wctype_t" >&6; }
-  if test $gl_cv_type_wctype_t = no; then
-    HAVE_WCTYPE_T=0
-  fi
-
-      { $as_echo "$as_me:${as_lineno-$LINENO}: checking for wctrans_t" >&5
-$as_echo_n "checking for wctrans_t... " >&6; }
-if ${gl_cv_type_wctrans_t+:} false; then :
-  $as_echo_n "(cached) " >&6
-else
-  cat confdefs.h - <<_ACEOF >conftest.$ac_ext
-/* end confdefs.h.  */
-/* Tru64 with Desktop Toolkit C has a bug: <stdio.h> must be
-               included before <wchar.h>.
-               BSD/OS 4.0.1 has a bug: <stddef.h>, <stdio.h> and <time.h>
-               must be included before <wchar.h>.  */
-            #include <stddef.h>
-            #include <stdio.h>
-            #include <time.h>
-            #include <wchar.h>
-            #include <wctype.h>
-            wctrans_t a;
-
-int
-main ()
-{
-
-  ;
-  return 0;
-}
-_ACEOF
-if ac_fn_c_try_compile "$LINENO"; then :
-  gl_cv_type_wctrans_t=yes
-else
-  gl_cv_type_wctrans_t=no
-fi
-rm -f core conftest.err conftest.$ac_objext conftest.$ac_ext
-
-fi
-{ $as_echo "$as_me:${as_lineno-$LINENO}: result: $gl_cv_type_wctrans_t" >&5
-$as_echo "$gl_cv_type_wctrans_t" >&6; }
-  if test $gl_cv_type_wctrans_t = no; then
-    HAVE_WCTRANS_T=0
-  fi
-
-
-    for gl_func in wctype iswctype wctrans towctrans     ; do
-    as_gl_Symbol=`$as_echo "gl_cv_have_raw_decl_$gl_func" | $as_tr_sh`
-    { $as_echo "$as_me:${as_lineno-$LINENO}: checking whether $gl_func is declared without a macro" >&5
-$as_echo_n "checking whether $gl_func is declared without a macro... " >&6; }
-if eval \${$as_gl_Symbol+:} false; then :
-  $as_echo_n "(cached) " >&6
-else
-  cat confdefs.h - <<_ACEOF >conftest.$ac_ext
-/* end confdefs.h.  */
-
-/* Tru64 with Desktop Toolkit C has a bug: <stdio.h> must be included before
-   <wchar.h>.
-   BSD/OS 4.0.1 has a bug: <stddef.h>, <stdio.h> and <time.h> must be
-   included before <wchar.h>.  */
-#if !(defined __GLIBC__ && !defined __UCLIBC__)
-# include <stddef.h>
-# include <stdio.h>
-# include <time.h>
-# include <wchar.h>
-#endif
-#include <wctype.h>
-
-int
-main ()
-{
-#undef $gl_func
-  (void) $gl_func;
-  ;
-  return 0;
-}
-_ACEOF
-if ac_fn_c_try_compile "$LINENO"; then :
-  eval "$as_gl_Symbol=yes"
-else
-  eval "$as_gl_Symbol=no"
-fi
-rm -f core conftest.err conftest.$ac_objext conftest.$ac_ext
-fi
-eval ac_res=\$$as_gl_Symbol
-	       { $as_echo "$as_me:${as_lineno-$LINENO}: result: $ac_res" >&5
-$as_echo "$ac_res" >&6; }
-    if eval test \"x\$"$as_gl_Symbol"\" = x"yes"; then :
-  cat >>confdefs.h <<_ACEOF
-#define `$as_echo "HAVE_RAW_DECL_$gl_func" | $as_tr_cpp` 1
-_ACEOF
-
-                     eval ac_cv_have_decl_$gl_func=yes
-fi
-      done
-
-
-
-
-
-
-
-
-
-
-
-  :
-
-
-
-
-
-
-  :
-
-
-
-
-
-
-  ac_fn_c_check_decl "$LINENO" "wcwidth" "ac_cv_have_decl_wcwidth" "
-/* AIX 3.2.5 declares wcwidth in <string.h>. */
-#include <string.h>
-/* Tru64 with Desktop Toolkit C has a bug: <stdio.h> must be included before
-   <wchar.h>.
-   BSD/OS 4.0.1 has a bug: <stddef.h>, <stdio.h> and <time.h> must be included
-   before <wchar.h>.  */
-#include <stddef.h>
-#include <stdio.h>
-#include <time.h>
-#include <wchar.h>
-
-"
-if test "x$ac_cv_have_decl_wcwidth" = xyes; then :
-  ac_have_decl=1
-else
-  ac_have_decl=0
-fi
-
-cat >>confdefs.h <<_ACEOF
-#define HAVE_DECL_WCWIDTH $ac_have_decl
-_ACEOF
-
-  if test $ac_cv_have_decl_wcwidth != yes; then
-    HAVE_DECL_WCWIDTH=0
-  fi
-
-  if test $ac_cv_func_wcwidth = yes; then
-    HAVE_WCWIDTH=1
-                    { $as_echo "$as_me:${as_lineno-$LINENO}: checking whether wcwidth works reasonably in UTF-8 locales" >&5
-$as_echo_n "checking whether wcwidth works reasonably in UTF-8 locales... " >&6; }
-if ${gl_cv_func_wcwidth_works+:} false; then :
-  $as_echo_n "(cached) " >&6
-else
-
-        if test "$cross_compiling" = yes; then :
-
-           case "$host_os" in
-                     # Guess yes on glibc and AIX 7 systems.
-             *-gnu* | aix[7-9]*) gl_cv_func_wcwidth_works="guessing yes";;
-             *)                  gl_cv_func_wcwidth_works="guessing no";;
-           esac
-
-else
-  cat confdefs.h - <<_ACEOF >conftest.$ac_ext
-/* end confdefs.h.  */
-
-#include <locale.h>
-/* AIX 3.2.5 declares wcwidth in <string.h>. */
-#include <string.h>
-/* Tru64 with Desktop Toolkit C has a bug: <stdio.h> must be included before
-   <wchar.h>.
-   BSD/OS 4.0.1 has a bug: <stddef.h>, <stdio.h> and <time.h> must be included
-   before <wchar.h>.  */
-#include <stddef.h>
-#include <stdio.h>
-#include <time.h>
-#include <wchar.h>
-#if !HAVE_DECL_WCWIDTH
-extern
-# ifdef __cplusplus
-"C"
-# endif
-int wcwidth (int);
-#endif
-int main ()
-{
-  int result = 0;
-  if (setlocale (LC_ALL, "fr_FR.UTF-8") != NULL)
-    {
-      if (wcwidth (0x0301) > 0)
-        result |= 1;
-      if (wcwidth (0x05B0) > 0)
-        result |= 2;
-      if (wcwidth (0x200B) > 0)
-        result |= 4;
-    }
-  return result;
-}
-_ACEOF
-if ac_fn_c_try_run "$LINENO"; then :
-  gl_cv_func_wcwidth_works=yes
-else
-  gl_cv_func_wcwidth_works=no
-fi
-rm -f core *.core core.conftest.* gmon.out bb.out conftest$ac_exeext \
-  conftest.$ac_objext conftest.beam conftest.$ac_ext
-fi
-
-
-fi
-{ $as_echo "$as_me:${as_lineno-$LINENO}: result: $gl_cv_func_wcwidth_works" >&5
-$as_echo "$gl_cv_func_wcwidth_works" >&6; }
-    case "$gl_cv_func_wcwidth_works" in
-      *yes) ;;
-      *no) REPLACE_WCWIDTH=1 ;;
-    esac
-  else
-    HAVE_WCWIDTH=0
-  fi
-
-  if test $HAVE_WCWIDTH = 0 || test $REPLACE_WCWIDTH = 1; then
-
-
-
-
-
-
-
-
-  gl_LIBOBJS="$gl_LIBOBJS wcwidth.$ac_objext"
-
-  fi
-
-
-
-
-
-          GNULIB_WCWIDTH=1
-
-
-
-
-
-$as_echo "#define GNULIB_TEST_WCWIDTH 1" >>confdefs.h
-
-
-
-
-
-
-
-
-
-
-
-
-  LIBGNU_LIBDEPS="$gl_libdeps"
-
-  LIBGNU_LTLIBDEPS="$gl_ltlibdeps"
-
-
-
-ac_config_files="$ac_config_files Makefile lib/Makefile m4/Makefile"
-
-cat >confcache <<\_ACEOF
-# This file is a shell script that caches the results of configure
-# tests run on this system so they can be shared between configure
-# scripts and configure runs, see configure's option --config-cache.
-# It is not useful on other systems.  If it contains results you don't
-# want to keep, you may remove or edit it.
-#
-# config.status only pays attention to the cache file if you give it
-# the --recheck option to rerun configure.
-#
-# `ac_cv_env_foo' variables (set or unset) will be overridden when
-# loading this file, other *unset* `ac_cv_foo' will be assigned the
-# following values.
-
-_ACEOF
-
-# The following way of writing the cache mishandles newlines in values,
-# but we know of no workaround that is simple, portable, and efficient.
-# So, we kill variables containing newlines.
-# Ultrix sh set writes to stderr and can't be redirected directly,
-# and sets the high bit in the cache file unless we assign to the vars.
-(
-  for ac_var in `(set) 2>&1 | sed -n 's/^\([a-zA-Z_][a-zA-Z0-9_]*\)=.*/\1/p'`; do
-    eval ac_val=\$$ac_var
-    case $ac_val in #(
-    *${as_nl}*)
-      case $ac_var in #(
-      *_cv_*) { $as_echo "$as_me:${as_lineno-$LINENO}: WARNING: cache variable $ac_var contains a newline" >&5
-$as_echo "$as_me: WARNING: cache variable $ac_var contains a newline" >&2;} ;;
-      esac
-      case $ac_var in #(
-      _ | IFS | as_nl) ;; #(
-      BASH_ARGV | BASH_SOURCE) eval $ac_var= ;; #(
-      *) { eval $ac_var=; unset $ac_var;} ;;
-      esac ;;
-    esac
-  done
-
-  (set) 2>&1 |
-    case $as_nl`(ac_space=' '; set) 2>&1` in #(
-    *${as_nl}ac_space=\ *)
-      # `set' does not quote correctly, so add quotes: double-quote
-      # substitution turns \\\\ into \\, and sed turns \\ into \.
-      sed -n \
-	"s/'/'\\\\''/g;
-	  s/^\\([_$as_cr_alnum]*_cv_[_$as_cr_alnum]*\\)=\\(.*\\)/\\1='\\2'/p"
-      ;; #(
-    *)
-      # `set' quotes correctly as required by POSIX, so do not add quotes.
-      sed -n "/^[_$as_cr_alnum]*_cv_[_$as_cr_alnum]*=/p"
-      ;;
-    esac |
-    sort
-) |
-  sed '
-     /^ac_cv_env_/b end
-     t clear
-     :clear
-     s/^\([^=]*\)=\(.*[{}].*\)$/test "${\1+set}" = set || &/
-     t end
-     s/^\([^=]*\)=\(.*\)$/\1=${\1=\2}/
-     :end' >>confcache
-if diff "$cache_file" confcache >/dev/null 2>&1; then :; else
-  if test -w "$cache_file"; then
-    if test "x$cache_file" != "x/dev/null"; then
-      { $as_echo "$as_me:${as_lineno-$LINENO}: updating cache $cache_file" >&5
-$as_echo "$as_me: updating cache $cache_file" >&6;}
-      if test ! -f "$cache_file" || test -h "$cache_file"; then
-	cat confcache >"$cache_file"
-      else
-        case $cache_file in #(
-        */* | ?:*)
-	  mv -f confcache "$cache_file"$$ &&
-	  mv -f "$cache_file"$$ "$cache_file" ;; #(
-        *)
-	  mv -f confcache "$cache_file" ;;
-	esac
-      fi
-    fi
-  else
-    { $as_echo "$as_me:${as_lineno-$LINENO}: not updating unwritable cache $cache_file" >&5
-$as_echo "$as_me: not updating unwritable cache $cache_file" >&6;}
-  fi
-fi
-rm -f confcache
-
-test "x$prefix" = xNONE && prefix=$ac_default_prefix
-# Let make expand exec_prefix.
-test "x$exec_prefix" = xNONE && exec_prefix='${prefix}'
-
-DEFS=-DHAVE_CONFIG_H
-
-ac_libobjs=
-ac_ltlibobjs=
-U=
-for ac_i in : $LIBOBJS; do test "x$ac_i" = x: && continue
-  # 1. Remove the extension, and $U if already installed.
-  ac_script='s/\$U\././;s/\.o$//;s/\.obj$//'
-  ac_i=`$as_echo "$ac_i" | sed "$ac_script"`
-  # 2. Prepend LIBOBJDIR.  When used with automake>=1.10 LIBOBJDIR
-  #    will be set to the directory where LIBOBJS objects are built.
-  as_fn_append ac_libobjs " \${LIBOBJDIR}$ac_i\$U.$ac_objext"
-  as_fn_append ac_ltlibobjs " \${LIBOBJDIR}$ac_i"'$U.lo'
-done
-LIBOBJS=$ac_libobjs
-
-LTLIBOBJS=$ac_ltlibobjs
-
-
-{ $as_echo "$as_me:${as_lineno-$LINENO}: checking that generated files are newer than configure" >&5
-$as_echo_n "checking that generated files are newer than configure... " >&6; }
-   if test -n "$am_sleep_pid"; then
-     # Hide warnings about reused PIDs.
-     wait $am_sleep_pid 2>/dev/null
-   fi
-   { $as_echo "$as_me:${as_lineno-$LINENO}: result: done" >&5
-$as_echo "done" >&6; }
- if test -n "$EXEEXT"; then
-  am__EXEEXT_TRUE=
-  am__EXEEXT_FALSE='#'
-else
-  am__EXEEXT_TRUE='#'
-  am__EXEEXT_FALSE=
-fi
-
-if test -z "${AMDEP_TRUE}" && test -z "${AMDEP_FALSE}"; then
-  as_fn_error $? "conditional \"AMDEP\" was never defined.
-Usually this means the macro was only invoked conditionally." "$LINENO" 5
-fi
-if test -z "${am__fastdepCC_TRUE}" && test -z "${am__fastdepCC_FALSE}"; then
-  as_fn_error $? "conditional \"am__fastdepCC\" was never defined.
-Usually this means the macro was only invoked conditionally." "$LINENO" 5
-fi
-if test -z "${GL_COND_LIBTOOL_TRUE}" && test -z "${GL_COND_LIBTOOL_FALSE}"; then
-  as_fn_error $? "conditional \"GL_COND_LIBTOOL\" was never defined.
-Usually this means the macro was only invoked conditionally." "$LINENO" 5
-fi
-if test -z "${GL_GENERATE_STDINT_H_TRUE}" && test -z "${GL_GENERATE_STDINT_H_FALSE}"; then
-  as_fn_error $? "conditional \"GL_GENERATE_STDINT_H\" was never defined.
-Usually this means the macro was only invoked conditionally." "$LINENO" 5
-fi
-if test -z "${GL_GENERATE_STDBOOL_H_TRUE}" && test -z "${GL_GENERATE_STDBOOL_H_FALSE}"; then
-  as_fn_error $? "conditional \"GL_GENERATE_STDBOOL_H\" was never defined.
-Usually this means the macro was only invoked conditionally." "$LINENO" 5
-fi
-if test -z "${GL_GENERATE_STDDEF_H_TRUE}" && test -z "${GL_GENERATE_STDDEF_H_FALSE}"; then
-  as_fn_error $? "conditional \"GL_GENERATE_STDDEF_H\" was never defined.
-Usually this means the macro was only invoked conditionally." "$LINENO" 5
-fi
-if test -z "${LIBUNISTRING_COMPILE_UNIWIDTH_WIDTH_TRUE}" && test -z "${LIBUNISTRING_COMPILE_UNIWIDTH_WIDTH_FALSE}"; then
-  as_fn_error $? "conditional \"LIBUNISTRING_COMPILE_UNIWIDTH_WIDTH\" was never defined.
-Usually this means the macro was only invoked conditionally." "$LINENO" 5
-fi
-
-    gl_libobjs=
-    gl_ltlibobjs=
-    if test -n "$gl_LIBOBJS"; then
-      # Remove the extension.
-      sed_drop_objext='s/\.o$//;s/\.obj$//'
-      for i in `for i in $gl_LIBOBJS; do echo "$i"; done | sed -e "$sed_drop_objext" | sort | uniq`; do
-        gl_libobjs="$gl_libobjs $i.$ac_objext"
-        gl_ltlibobjs="$gl_ltlibobjs $i.lo"
-      done
-    fi
-    gl_LIBOBJS=$gl_libobjs
-
-    gl_LTLIBOBJS=$gl_ltlibobjs
-
-
-
-: "${CONFIG_STATUS=./config.status}"
-ac_write_fail=0
-ac_clean_files_save=$ac_clean_files
-ac_clean_files="$ac_clean_files $CONFIG_STATUS"
-{ $as_echo "$as_me:${as_lineno-$LINENO}: creating $CONFIG_STATUS" >&5
-$as_echo "$as_me: creating $CONFIG_STATUS" >&6;}
-as_write_fail=0
-cat >$CONFIG_STATUS <<_ASEOF || as_write_fail=1
-#! $SHELL
-# Generated by $as_me.
-# Run this file to recreate the current configuration.
-# Compiler output produced by configure, useful for debugging
-# configure, is in config.log if it exists.
-
-debug=false
-ac_cs_recheck=false
-ac_cs_silent=false
-
-SHELL=\${CONFIG_SHELL-$SHELL}
-export SHELL
-_ASEOF
-cat >>$CONFIG_STATUS <<\_ASEOF || as_write_fail=1
-## -------------------- ##
-## M4sh Initialization. ##
-## -------------------- ##
-
-# Be more Bourne compatible
-DUALCASE=1; export DUALCASE # for MKS sh
-if test -n "${ZSH_VERSION+set}" && (emulate sh) >/dev/null 2>&1; then :
-  emulate sh
-  NULLCMD=:
-  # Pre-4.2 versions of Zsh do word splitting on ${1+"$@"}, which
-  # is contrary to our usage.  Disable this feature.
-  alias -g '${1+"$@"}'='"$@"'
-  setopt NO_GLOB_SUBST
-else
-  case `(set -o) 2>/dev/null` in #(
-  *posix*) :
-    set -o posix ;; #(
-  *) :
-     ;;
-esac
-fi
-
-
-as_nl='
-'
-export as_nl
-# Printing a long string crashes Solaris 7 /usr/bin/printf.
-as_echo='\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\'
-as_echo=$as_echo$as_echo$as_echo$as_echo$as_echo
-as_echo=$as_echo$as_echo$as_echo$as_echo$as_echo$as_echo
-# Prefer a ksh shell builtin over an external printf program on Solaris,
-# but without wasting forks for bash or zsh.
-if test -z "$BASH_VERSION$ZSH_VERSION" \
-    && (test "X`print -r -- $as_echo`" = "X$as_echo") 2>/dev/null; then
-  as_echo='print -r --'
-  as_echo_n='print -rn --'
-elif (test "X`printf %s $as_echo`" = "X$as_echo") 2>/dev/null; then
-  as_echo='printf %s\n'
-  as_echo_n='printf %s'
-else
-  if test "X`(/usr/ucb/echo -n -n $as_echo) 2>/dev/null`" = "X-n $as_echo"; then
-    as_echo_body='eval /usr/ucb/echo -n "$1$as_nl"'
-    as_echo_n='/usr/ucb/echo -n'
-  else
-    as_echo_body='eval expr "X$1" : "X\\(.*\\)"'
-    as_echo_n_body='eval
-      arg=$1;
-      case $arg in #(
-      *"$as_nl"*)
-	expr "X$arg" : "X\\(.*\\)$as_nl";
-	arg=`expr "X$arg" : ".*$as_nl\\(.*\\)"`;;
-      esac;
-      expr "X$arg" : "X\\(.*\\)" | tr -d "$as_nl"
-    '
-    export as_echo_n_body
-    as_echo_n='sh -c $as_echo_n_body as_echo'
-  fi
-  export as_echo_body
-  as_echo='sh -c $as_echo_body as_echo'
-fi
-
-# The user is always right.
-if test "${PATH_SEPARATOR+set}" != set; then
-  PATH_SEPARATOR=:
-  (PATH='/bin;/bin'; FPATH=$PATH; sh -c :) >/dev/null 2>&1 && {
-    (PATH='/bin:/bin'; FPATH=$PATH; sh -c :) >/dev/null 2>&1 ||
-      PATH_SEPARATOR=';'
-  }
-fi
-
-
-# IFS
-# We need space, tab and new line, in precisely that order.  Quoting is
-# there to prevent editors from complaining about space-tab.
-# (If _AS_PATH_WALK were called with IFS unset, it would disable word
-# splitting by setting IFS to empty value.)
-IFS=" ""	$as_nl"
-
-# Find who we are.  Look in the path if we contain no directory separator.
-as_myself=
-case $0 in #((
-  *[\\/]* ) as_myself=$0 ;;
-  *) as_save_IFS=$IFS; IFS=$PATH_SEPARATOR
-for as_dir in $PATH
-do
-  IFS=$as_save_IFS
-  test -z "$as_dir" && as_dir=.
-    test -r "$as_dir/$0" && as_myself=$as_dir/$0 && break
-  done
-IFS=$as_save_IFS
-
-     ;;
-esac
-# We did not find ourselves, most probably we were run as `sh COMMAND'
-# in which case we are not to be found in the path.
-if test "x$as_myself" = x; then
-  as_myself=$0
-fi
-if test ! -f "$as_myself"; then
-  $as_echo "$as_myself: error: cannot find myself; rerun with an absolute file name" >&2
-  exit 1
-fi
-
-# Unset variables that we do not need and which cause bugs (e.g. in
-# pre-3.0 UWIN ksh).  But do not cause bugs in bash 2.01; the "|| exit 1"
-# suppresses any "Segmentation fault" message there.  '((' could
-# trigger a bug in pdksh 5.2.14.
-for as_var in BASH_ENV ENV MAIL MAILPATH
-do eval test x\${$as_var+set} = xset \
-  && ( (unset $as_var) || exit 1) >/dev/null 2>&1 && unset $as_var || :
-done
-PS1='$ '
-PS2='> '
-PS4='+ '
-
-# NLS nuisances.
-LC_ALL=C
-export LC_ALL
-LANGUAGE=C
-export LANGUAGE
-
-# CDPATH.
-(unset CDPATH) >/dev/null 2>&1 && unset CDPATH
-
-
-# as_fn_error STATUS ERROR [LINENO LOG_FD]
-# ----------------------------------------
-# Output "`basename $0`: error: ERROR" to stderr. If LINENO and LOG_FD are
-# provided, also output the error to LOG_FD, referencing LINENO. Then exit the
-# script with STATUS, using 1 if that was 0.
-as_fn_error ()
-{
-  as_status=$1; test $as_status -eq 0 && as_status=1
-  if test "$4"; then
-    as_lineno=${as_lineno-"$3"} as_lineno_stack=as_lineno_stack=$as_lineno_stack
-    $as_echo "$as_me:${as_lineno-$LINENO}: error: $2" >&$4
-  fi
-  $as_echo "$as_me: error: $2" >&2
-  as_fn_exit $as_status
-} # as_fn_error
-
-
-# as_fn_set_status STATUS
-# -----------------------
-# Set $? to STATUS, without forking.
-as_fn_set_status ()
-{
-  return $1
-} # as_fn_set_status
-
-# as_fn_exit STATUS
-# -----------------
-# Exit the shell with STATUS, even in a "trap 0" or "set -e" context.
-as_fn_exit ()
-{
-  set +e
-  as_fn_set_status $1
-  exit $1
-} # as_fn_exit
-
-# as_fn_unset VAR
-# ---------------
-# Portably unset VAR.
-as_fn_unset ()
-{
-  { eval $1=; unset $1;}
-}
-as_unset=as_fn_unset
-# as_fn_append VAR VALUE
-# ----------------------
-# Append the text in VALUE to the end of the definition contained in VAR. Take
-# advantage of any shell optimizations that allow amortized linear growth over
-# repeated appends, instead of the typical quadratic growth present in naive
-# implementations.
-if (eval "as_var=1; as_var+=2; test x\$as_var = x12") 2>/dev/null; then :
-  eval 'as_fn_append ()
-  {
-    eval $1+=\$2
-  }'
-else
-  as_fn_append ()
-  {
-    eval $1=\$$1\$2
-  }
-fi # as_fn_append
-
-# as_fn_arith ARG...
-# ------------------
-# Perform arithmetic evaluation on the ARGs, and store the result in the
-# global $as_val. Take advantage of shells that can avoid forks. The arguments
-# must be portable across $(()) and expr.
-if (eval "test \$(( 1 + 1 )) = 2") 2>/dev/null; then :
-  eval 'as_fn_arith ()
-  {
-    as_val=$(( $* ))
-  }'
-else
-  as_fn_arith ()
-  {
-    as_val=`expr "$@" || test $? -eq 1`
-  }
-fi # as_fn_arith
-
-
-if expr a : '\(a\)' >/dev/null 2>&1 &&
-   test "X`expr 00001 : '.*\(...\)'`" = X001; then
-  as_expr=expr
-else
-  as_expr=false
-fi
-
-if (basename -- /) >/dev/null 2>&1 && test "X`basename -- / 2>&1`" = "X/"; then
-  as_basename=basename
-else
-  as_basename=false
-fi
-
-if (as_dir=`dirname -- /` && test "X$as_dir" = X/) >/dev/null 2>&1; then
-  as_dirname=dirname
-else
-  as_dirname=false
-fi
-
-as_me=`$as_basename -- "$0" ||
-$as_expr X/"$0" : '.*/\([^/][^/]*\)/*$' \| \
-	 X"$0" : 'X\(//\)$' \| \
-	 X"$0" : 'X\(/\)' \| . 2>/dev/null ||
-$as_echo X/"$0" |
-    sed '/^.*\/\([^/][^/]*\)\/*$/{
-	    s//\1/
-	    q
-	  }
-	  /^X\/\(\/\/\)$/{
-	    s//\1/
-	    q
-	  }
-	  /^X\/\(\/\).*/{
-	    s//\1/
-	    q
-	  }
-	  s/.*/./; q'`
-
-# Avoid depending upon Character Ranges.
-as_cr_letters='abcdefghijklmnopqrstuvwxyz'
-as_cr_LETTERS='ABCDEFGHIJKLMNOPQRSTUVWXYZ'
-as_cr_Letters=$as_cr_letters$as_cr_LETTERS
-as_cr_digits='0123456789'
-as_cr_alnum=$as_cr_Letters$as_cr_digits
-
-ECHO_C= ECHO_N= ECHO_T=
-case `echo -n x` in #(((((
--n*)
-  case `echo 'xy\c'` in
-  *c*) ECHO_T='	';;	# ECHO_T is single tab character.
-  xy)  ECHO_C='\c';;
-  *)   echo `echo ksh88 bug on AIX 6.1` > /dev/null
-       ECHO_T='	';;
-  esac;;
-*)
-  ECHO_N='-n';;
-esac
-
-rm -f conf$$ conf$$.exe conf$$.file
-if test -d conf$$.dir; then
-  rm -f conf$$.dir/conf$$.file
-else
-  rm -f conf$$.dir
-  mkdir conf$$.dir 2>/dev/null
-fi
-if (echo >conf$$.file) 2>/dev/null; then
-  if ln -s conf$$.file conf$$ 2>/dev/null; then
-    as_ln_s='ln -s'
-    # ... but there are two gotchas:
-    # 1) On MSYS, both `ln -s file dir' and `ln file dir' fail.
-    # 2) DJGPP < 2.04 has no symlinks; `ln -s' creates a wrapper executable.
-    # In both cases, we have to default to `cp -pR'.
-    ln -s conf$$.file conf$$.dir 2>/dev/null && test ! -f conf$$.exe ||
-      as_ln_s='cp -pR'
-  elif ln conf$$.file conf$$ 2>/dev/null; then
-    as_ln_s=ln
-  else
-    as_ln_s='cp -pR'
-  fi
-else
-  as_ln_s='cp -pR'
-fi
-rm -f conf$$ conf$$.exe conf$$.dir/conf$$.file conf$$.file
-rmdir conf$$.dir 2>/dev/null
-
-
-# as_fn_mkdir_p
-# -------------
-# Create "$as_dir" as a directory, including parents if necessary.
-as_fn_mkdir_p ()
-{
-
-  case $as_dir in #(
-  -*) as_dir=./$as_dir;;
-  esac
-  test -d "$as_dir" || eval $as_mkdir_p || {
-    as_dirs=
-    while :; do
-      case $as_dir in #(
-      *\'*) as_qdir=`$as_echo "$as_dir" | sed "s/'/'\\\\\\\\''/g"`;; #'(
-      *) as_qdir=$as_dir;;
-      esac
-      as_dirs="'$as_qdir' $as_dirs"
-      as_dir=`$as_dirname -- "$as_dir" ||
-$as_expr X"$as_dir" : 'X\(.*[^/]\)//*[^/][^/]*/*$' \| \
-	 X"$as_dir" : 'X\(//\)[^/]' \| \
-	 X"$as_dir" : 'X\(//\)$' \| \
-	 X"$as_dir" : 'X\(/\)' \| . 2>/dev/null ||
-$as_echo X"$as_dir" |
-    sed '/^X\(.*[^/]\)\/\/*[^/][^/]*\/*$/{
-	    s//\1/
-	    q
-	  }
-	  /^X\(\/\/\)[^/].*/{
-	    s//\1/
-	    q
-	  }
-	  /^X\(\/\/\)$/{
-	    s//\1/
-	    q
-	  }
-	  /^X\(\/\).*/{
-	    s//\1/
-	    q
-	  }
-	  s/.*/./; q'`
-      test -d "$as_dir" && break
-    done
-    test -z "$as_dirs" || eval "mkdir $as_dirs"
-  } || test -d "$as_dir" || as_fn_error $? "cannot create directory $as_dir"
-
-
-} # as_fn_mkdir_p
-if mkdir -p . 2>/dev/null; then
-  as_mkdir_p='mkdir -p "$as_dir"'
-else
-  test -d ./-p && rmdir ./-p
-  as_mkdir_p=false
-fi
-
-
-# as_fn_executable_p FILE
-# -----------------------
-# Test if FILE is an executable regular file.
-as_fn_executable_p ()
-{
-  test -f "$1" && test -x "$1"
-} # as_fn_executable_p
-as_test_x='test -x'
-as_executable_p=as_fn_executable_p
-
-# Sed expression to map a string onto a valid CPP name.
-as_tr_cpp="eval sed 'y%*$as_cr_letters%P$as_cr_LETTERS%;s%[^_$as_cr_alnum]%_%g'"
-
-# Sed expression to map a string onto a valid variable name.
-as_tr_sh="eval sed 'y%*+%pp%;s%[^_$as_cr_alnum]%_%g'"
-
-
-exec 6>&1
-## ----------------------------------- ##
-## Main body of $CONFIG_STATUS script. ##
-## ----------------------------------- ##
-_ASEOF
-test $as_write_fail = 0 && chmod +x $CONFIG_STATUS || ac_write_fail=1
-
-cat >>$CONFIG_STATUS <<\_ACEOF || ac_write_fail=1
-# Save the log message, to keep $0 and so on meaningful, and to
-# report actual input values of CONFIG_FILES etc. instead of their
-# values after options handling.
-ac_log="
-This file was extended by dummy $as_me 0, which was
-generated by GNU Autoconf 2.69.  Invocation command line was
-
-  CONFIG_FILES    = $CONFIG_FILES
-  CONFIG_HEADERS  = $CONFIG_HEADERS
-  CONFIG_LINKS    = $CONFIG_LINKS
-  CONFIG_COMMANDS = $CONFIG_COMMANDS
-  $ $0 $@
-
-on `(hostname || uname -n) 2>/dev/null | sed 1q`
-"
-
-_ACEOF
-
-case $ac_config_files in *"
-"*) set x $ac_config_files; shift; ac_config_files=$*;;
-esac
-
-case $ac_config_headers in *"
-"*) set x $ac_config_headers; shift; ac_config_headers=$*;;
-esac
-
-
-cat >>$CONFIG_STATUS <<_ACEOF || ac_write_fail=1
-# Files that config.status was made for.
-config_files="$ac_config_files"
-config_headers="$ac_config_headers"
-config_commands="$ac_config_commands"
-
-_ACEOF
-
-cat >>$CONFIG_STATUS <<\_ACEOF || ac_write_fail=1
-ac_cs_usage="\
-\`$as_me' instantiates files and other configuration actions
-from templates according to the current configuration.  Unless the files
-and actions are specified as TAGs, all are instantiated by default.
-
-Usage: $0 [OPTION]... [TAG]...
-
-  -h, --help       print this help, then exit
-  -V, --version    print version number and configuration settings, then exit
-      --config     print configuration, then exit
-  -q, --quiet, --silent
-                   do not print progress messages
-  -d, --debug      don't remove temporary files
-      --recheck    update $as_me by reconfiguring in the same conditions
-      --file=FILE[:TEMPLATE]
-                   instantiate the configuration file FILE
-      --header=FILE[:TEMPLATE]
-                   instantiate the configuration header FILE
-
-Configuration files:
-$config_files
-
-Configuration headers:
-$config_headers
-
-Configuration commands:
-$config_commands
-
-Report bugs to the package provider."
-
-_ACEOF
-cat >>$CONFIG_STATUS <<_ACEOF || ac_write_fail=1
-ac_cs_config="`$as_echo "$ac_configure_args" | sed 's/^ //; s/[\\""\`\$]/\\\\&/g'`"
-ac_cs_version="\\
-dummy config.status 0
-configured by $0, generated by GNU Autoconf 2.69,
-  with options \\"\$ac_cs_config\\"
-
-Copyright (C) 2012 Free Software Foundation, Inc.
-This config.status script is free software; the Free Software Foundation
-gives unlimited permission to copy, distribute and modify it."
-
-ac_pwd='$ac_pwd'
-srcdir='$srcdir'
-INSTALL='$INSTALL'
-MKDIR_P='$MKDIR_P'
-AWK='$AWK'
-test -n "\$AWK" || AWK=awk
-_ACEOF
-
-cat >>$CONFIG_STATUS <<\_ACEOF || ac_write_fail=1
-# The default lists apply if the user does not specify any file.
-ac_need_defaults=:
-while test $# != 0
-do
-  case $1 in
-  --*=?*)
-    ac_option=`expr "X$1" : 'X\([^=]*\)='`
-    ac_optarg=`expr "X$1" : 'X[^=]*=\(.*\)'`
-    ac_shift=:
-    ;;
-  --*=)
-    ac_option=`expr "X$1" : 'X\([^=]*\)='`
-    ac_optarg=
-    ac_shift=:
-    ;;
-  *)
-    ac_option=$1
-    ac_optarg=$2
-    ac_shift=shift
-    ;;
-  esac
-
-  case $ac_option in
-  # Handling of the options.
-  -recheck | --recheck | --rechec | --reche | --rech | --rec | --re | --r)
-    ac_cs_recheck=: ;;
-  --version | --versio | --versi | --vers | --ver | --ve | --v | -V )
-    $as_echo "$ac_cs_version"; exit ;;
-  --config | --confi | --conf | --con | --co | --c )
-    $as_echo "$ac_cs_config"; exit ;;
-  --debug | --debu | --deb | --de | --d | -d )
-    debug=: ;;
-  --file | --fil | --fi | --f )
-    $ac_shift
-    case $ac_optarg in
-    *\'*) ac_optarg=`$as_echo "$ac_optarg" | sed "s/'/'\\\\\\\\''/g"` ;;
-    '') as_fn_error $? "missing file argument" ;;
-    esac
-    as_fn_append CONFIG_FILES " '$ac_optarg'"
-    ac_need_defaults=false;;
-  --header | --heade | --head | --hea )
-    $ac_shift
-    case $ac_optarg in
-    *\'*) ac_optarg=`$as_echo "$ac_optarg" | sed "s/'/'\\\\\\\\''/g"` ;;
-    esac
-    as_fn_append CONFIG_HEADERS " '$ac_optarg'"
-    ac_need_defaults=false;;
-  --he | --h)
-    # Conflict between --help and --header
-    as_fn_error $? "ambiguous option: \`$1'
-Try \`$0 --help' for more information.";;
-  --help | --hel | -h )
-    $as_echo "$ac_cs_usage"; exit ;;
-  -q | -quiet | --quiet | --quie | --qui | --qu | --q \
-  | -silent | --silent | --silen | --sile | --sil | --si | --s)
-    ac_cs_silent=: ;;
-
-  # This is an error.
-  -*) as_fn_error $? "unrecognized option: \`$1'
-Try \`$0 --help' for more information." ;;
-
-  *) as_fn_append ac_config_targets " $1"
-     ac_need_defaults=false ;;
-
-  esac
-  shift
-done
-
-ac_configure_extra_args=
-
-if $ac_cs_silent; then
-  exec 6>/dev/null
-  ac_configure_extra_args="$ac_configure_extra_args --silent"
-fi
-
-_ACEOF
-cat >>$CONFIG_STATUS <<_ACEOF || ac_write_fail=1
-if \$ac_cs_recheck; then
-  set X $SHELL '$0' $ac_configure_args \$ac_configure_extra_args --no-create --no-recursion
-  shift
-  \$as_echo "running CONFIG_SHELL=$SHELL \$*" >&6
-  CONFIG_SHELL='$SHELL'
-  export CONFIG_SHELL
-  exec "\$@"
-fi
-
-_ACEOF
-cat >>$CONFIG_STATUS <<\_ACEOF || ac_write_fail=1
-exec 5>>config.log
-{
-  echo
-  sed 'h;s/./-/g;s/^.../## /;s/...$/ ##/;p;x;p;x' <<_ASBOX
-## Running $as_me. ##
-_ASBOX
-  $as_echo "$ac_log"
-} >&5
-
-_ACEOF
-cat >>$CONFIG_STATUS <<_ACEOF || ac_write_fail=1
-#
-# INIT-COMMANDS
-#
-AMDEP_TRUE="$AMDEP_TRUE" ac_aux_dir="$ac_aux_dir"
-
-_ACEOF
-
-cat >>$CONFIG_STATUS <<\_ACEOF || ac_write_fail=1
-
-# Handling of arguments.
-for ac_config_target in $ac_config_targets
-do
-  case $ac_config_target in
-    "config.h") CONFIG_HEADERS="$CONFIG_HEADERS config.h" ;;
-    "depfiles") CONFIG_COMMANDS="$CONFIG_COMMANDS depfiles" ;;
-    "Makefile") CONFIG_FILES="$CONFIG_FILES Makefile" ;;
-    "lib/Makefile") CONFIG_FILES="$CONFIG_FILES lib/Makefile" ;;
-    "m4/Makefile") CONFIG_FILES="$CONFIG_FILES m4/Makefile" ;;
-
-  *) as_fn_error $? "invalid argument: \`$ac_config_target'" "$LINENO" 5;;
-  esac
-done
-
-
-# If the user did not use the arguments to specify the items to instantiate,
-# then the envvar interface is used.  Set only those that are not.
-# We use the long form for the default assignment because of an extremely
-# bizarre bug on SunOS 4.1.3.
-if $ac_need_defaults; then
-  test "${CONFIG_FILES+set}" = set || CONFIG_FILES=$config_files
-  test "${CONFIG_HEADERS+set}" = set || CONFIG_HEADERS=$config_headers
-  test "${CONFIG_COMMANDS+set}" = set || CONFIG_COMMANDS=$config_commands
-fi
-
-# Have a temporary directory for convenience.  Make it in the build tree
-# simply because there is no reason against having it here, and in addition,
-# creating and moving files from /tmp can sometimes cause problems.
-# Hook for its removal unless debugging.
-# Note that there is a small window in which the directory will not be cleaned:
-# after its creation but before its name has been assigned to `$tmp'.
-$debug ||
-{
-  tmp= ac_tmp=
-  trap 'exit_status=$?
-  : "${ac_tmp:=$tmp}"
-  { test ! -d "$ac_tmp" || rm -fr "$ac_tmp"; } && exit $exit_status
-' 0
-  trap 'as_fn_exit 1' 1 2 13 15
-}
-# Create a (secure) tmp directory for tmp files.
-
-{
-  tmp=`(umask 077 && mktemp -d "./confXXXXXX") 2>/dev/null` &&
-  test -d "$tmp"
-}  ||
-{
-  tmp=./conf$$-$RANDOM
-  (umask 077 && mkdir "$tmp")
-} || as_fn_error $? "cannot create a temporary directory in ." "$LINENO" 5
-ac_tmp=$tmp
-
-# Set up the scripts for CONFIG_FILES section.
-# No need to generate them if there are no CONFIG_FILES.
-# This happens for instance with `./config.status config.h'.
-if test -n "$CONFIG_FILES"; then
-
-
-ac_cr=`echo X | tr X '\015'`
-# On cygwin, bash can eat \r inside `` if the user requested igncr.
-# But we know of no other shell where ac_cr would be empty at this
-# point, so we can use a bashism as a fallback.
-if test "x$ac_cr" = x; then
-  eval ac_cr=\$\'\\r\'
-fi
-ac_cs_awk_cr=`$AWK 'BEGIN { print "a\rb" }' </dev/null 2>/dev/null`
-if test "$ac_cs_awk_cr" = "a${ac_cr}b"; then
-  ac_cs_awk_cr='\\r'
-else
-  ac_cs_awk_cr=$ac_cr
-fi
-
-echo 'BEGIN {' >"$ac_tmp/subs1.awk" &&
-_ACEOF
-
-
-{
-  echo "cat >conf$$subs.awk <<_ACEOF" &&
-  echo "$ac_subst_vars" | sed 's/.*/&!$&$ac_delim/' &&
-  echo "_ACEOF"
-} >conf$$subs.sh ||
-  as_fn_error $? "could not make $CONFIG_STATUS" "$LINENO" 5
-ac_delim_num=`echo "$ac_subst_vars" | grep -c '^'`
-ac_delim='%!_!# '
-for ac_last_try in false false false false false :; do
-  . ./conf$$subs.sh ||
-    as_fn_error $? "could not make $CONFIG_STATUS" "$LINENO" 5
-
-  ac_delim_n=`sed -n "s/.*$ac_delim\$/X/p" conf$$subs.awk | grep -c X`
-  if test $ac_delim_n = $ac_delim_num; then
-    break
-  elif $ac_last_try; then
-    as_fn_error $? "could not make $CONFIG_STATUS" "$LINENO" 5
-  else
-    ac_delim="$ac_delim!$ac_delim _$ac_delim!! "
-  fi
-done
-rm -f conf$$subs.sh
-
-cat >>$CONFIG_STATUS <<_ACEOF || ac_write_fail=1
-cat >>"\$ac_tmp/subs1.awk" <<\\_ACAWK &&
-_ACEOF
-sed -n '
-h
-s/^/S["/; s/!.*/"]=/
-p
-g
-s/^[^!]*!//
-:repl
-t repl
-s/'"$ac_delim"'$//
-t delim
-:nl
-h
-s/\(.\{148\}\)..*/\1/
-t more1
-s/["\\]/\\&/g; s/^/"/; s/$/\\n"\\/
-p
-n
-b repl
-:more1
-s/["\\]/\\&/g; s/^/"/; s/$/"\\/
-p
-g
-s/.\{148\}//
-t nl
-:delim
-h
-s/\(.\{148\}\)..*/\1/
-t more2
-s/["\\]/\\&/g; s/^/"/; s/$/"/
-p
-b
-:more2
-s/["\\]/\\&/g; s/^/"/; s/$/"\\/
-p
-g
-s/.\{148\}//
-t delim
-' <conf$$subs.awk | sed '
-/^[^""]/{
-  N
-  s/\n//
-}
-' >>$CONFIG_STATUS || ac_write_fail=1
-rm -f conf$$subs.awk
-cat >>$CONFIG_STATUS <<_ACEOF || ac_write_fail=1
-_ACAWK
-cat >>"\$ac_tmp/subs1.awk" <<_ACAWK &&
-  for (key in S) S_is_set[key] = 1
-  FS = ""
-
-}
-{
-  line = $ 0
-  nfields = split(line, field, "@")
-  substed = 0
-  len = length(field[1])
-  for (i = 2; i < nfields; i++) {
-    key = field[i]
-    keylen = length(key)
-    if (S_is_set[key]) {
-      value = S[key]
-      line = substr(line, 1, len) "" value "" substr(line, len + keylen + 3)
-      len += length(value) + length(field[++i])
-      substed = 1
-    } else
-      len += 1 + keylen
-  }
-
-  print line
-}
-
-_ACAWK
-_ACEOF
-cat >>$CONFIG_STATUS <<\_ACEOF || ac_write_fail=1
-if sed "s/$ac_cr//" < /dev/null > /dev/null 2>&1; then
-  sed "s/$ac_cr\$//; s/$ac_cr/$ac_cs_awk_cr/g"
-else
-  cat
-fi < "$ac_tmp/subs1.awk" > "$ac_tmp/subs.awk" \
-  || as_fn_error $? "could not setup config files machinery" "$LINENO" 5
-_ACEOF
-
-# VPATH may cause trouble with some makes, so we remove sole $(srcdir),
-# ${srcdir} and @srcdir@ entries from VPATH if srcdir is ".", strip leading and
-# trailing colons and then remove the whole line if VPATH becomes empty
-# (actually we leave an empty line to preserve line numbers).
-if test "x$srcdir" = x.; then
-  ac_vpsub='/^[	 ]*VPATH[	 ]*=[	 ]*/{
-h
-s///
-s/^/:/
-s/[	 ]*$/:/
-s/:\$(srcdir):/:/g
-s/:\${srcdir}:/:/g
-s/:@srcdir@:/:/g
-s/^:*//
-s/:*$//
-x
-s/\(=[	 ]*\).*/\1/
-G
-s/\n//
-s/^[^=]*=[	 ]*$//
-}'
-fi
-
-cat >>$CONFIG_STATUS <<\_ACEOF || ac_write_fail=1
-fi # test -n "$CONFIG_FILES"
-
-# Set up the scripts for CONFIG_HEADERS section.
-# No need to generate them if there are no CONFIG_HEADERS.
-# This happens for instance with `./config.status Makefile'.
-if test -n "$CONFIG_HEADERS"; then
-cat >"$ac_tmp/defines.awk" <<\_ACAWK ||
-BEGIN {
-_ACEOF
-
-# Transform confdefs.h into an awk script `defines.awk', embedded as
-# here-document in config.status, that substitutes the proper values into
-# config.h.in to produce config.h.
-
-# Create a delimiter string that does not exist in confdefs.h, to ease
-# handling of long lines.
-ac_delim='%!_!# '
-for ac_last_try in false false :; do
-  ac_tt=`sed -n "/$ac_delim/p" confdefs.h`
-  if test -z "$ac_tt"; then
-    break
-  elif $ac_last_try; then
-    as_fn_error $? "could not make $CONFIG_HEADERS" "$LINENO" 5
-  else
-    ac_delim="$ac_delim!$ac_delim _$ac_delim!! "
-  fi
-done
-
-# For the awk script, D is an array of macro values keyed by name,
-# likewise P contains macro parameters if any.  Preserve backslash
-# newline sequences.
-
-ac_word_re=[_$as_cr_Letters][_$as_cr_alnum]*
-sed -n '
-s/.\{148\}/&'"$ac_delim"'/g
-t rset
-:rset
-s/^[	 ]*#[	 ]*define[	 ][	 ]*/ /
-t def
-d
-:def
-s/\\$//
-t bsnl
-s/["\\]/\\&/g
-s/^ \('"$ac_word_re"'\)\(([^()]*)\)[	 ]*\(.*\)/P["\1"]="\2"\
-D["\1"]=" \3"/p
-s/^ \('"$ac_word_re"'\)[	 ]*\(.*\)/D["\1"]=" \2"/p
-d
-:bsnl
-s/["\\]/\\&/g
-s/^ \('"$ac_word_re"'\)\(([^()]*)\)[	 ]*\(.*\)/P["\1"]="\2"\
-D["\1"]=" \3\\\\\\n"\\/p
-t cont
-s/^ \('"$ac_word_re"'\)[	 ]*\(.*\)/D["\1"]=" \2\\\\\\n"\\/p
-t cont
-d
-:cont
-n
-s/.\{148\}/&'"$ac_delim"'/g
-t clear
-:clear
-s/\\$//
-t bsnlc
-s/["\\]/\\&/g; s/^/"/; s/$/"/p
-d
-:bsnlc
-s/["\\]/\\&/g; s/^/"/; s/$/\\\\\\n"\\/p
-b cont
-' <confdefs.h | sed '
-s/'"$ac_delim"'/"\\\
-"/g' >>$CONFIG_STATUS || ac_write_fail=1
-
-cat >>$CONFIG_STATUS <<_ACEOF || ac_write_fail=1
-  for (key in D) D_is_set[key] = 1
-  FS = ""
-}
-/^[\t ]*#[\t ]*(define|undef)[\t ]+$ac_word_re([\t (]|\$)/ {
-  line = \$ 0
-  split(line, arg, " ")
-  if (arg[1] == "#") {
-    defundef = arg[2]
-    mac1 = arg[3]
-  } else {
-    defundef = substr(arg[1], 2)
-    mac1 = arg[2]
-  }
-  split(mac1, mac2, "(") #)
-  macro = mac2[1]
-  prefix = substr(line, 1, index(line, defundef) - 1)
-  if (D_is_set[macro]) {
-    # Preserve the white space surrounding the "#".
-    print prefix "define", macro P[macro] D[macro]
-    next
-  } else {
-    # Replace #undef with comments.  This is necessary, for example,
-    # in the case of _POSIX_SOURCE, which is predefined and required
-    # on some systems where configure will not decide to define it.
-    if (defundef == "undef") {
-      print "/*", prefix defundef, macro, "*/"
-      next
-    }
-  }
-}
-{ print }
-_ACAWK
-_ACEOF
-cat >>$CONFIG_STATUS <<\_ACEOF || ac_write_fail=1
-  as_fn_error $? "could not setup config headers machinery" "$LINENO" 5
-fi # test -n "$CONFIG_HEADERS"
-
-
-eval set X "  :F $CONFIG_FILES  :H $CONFIG_HEADERS    :C $CONFIG_COMMANDS"
-shift
-for ac_tag
-do
-  case $ac_tag in
-  :[FHLC]) ac_mode=$ac_tag; continue;;
-  esac
-  case $ac_mode$ac_tag in
-  :[FHL]*:*);;
-  :L* | :C*:*) as_fn_error $? "invalid tag \`$ac_tag'" "$LINENO" 5;;
-  :[FH]-) ac_tag=-:-;;
-  :[FH]*) ac_tag=$ac_tag:$ac_tag.in;;
-  esac
-  ac_save_IFS=$IFS
-  IFS=:
-  set x $ac_tag
-  IFS=$ac_save_IFS
-  shift
-  ac_file=$1
-  shift
-
-  case $ac_mode in
-  :L) ac_source=$1;;
-  :[FH])
-    ac_file_inputs=
-    for ac_f
-    do
-      case $ac_f in
-      -) ac_f="$ac_tmp/stdin";;
-      *) # Look for the file first in the build tree, then in the source tree
-	 # (if the path is not absolute).  The absolute path cannot be DOS-style,
-	 # because $ac_f cannot contain `:'.
-	 test -f "$ac_f" ||
-	   case $ac_f in
-	   [\\/$]*) false;;
-	   *) test -f "$srcdir/$ac_f" && ac_f="$srcdir/$ac_f";;
-	   esac ||
-	   as_fn_error 1 "cannot find input file: \`$ac_f'" "$LINENO" 5;;
-      esac
-      case $ac_f in *\'*) ac_f=`$as_echo "$ac_f" | sed "s/'/'\\\\\\\\''/g"`;; esac
-      as_fn_append ac_file_inputs " '$ac_f'"
-    done
-
-    # Let's still pretend it is `configure' which instantiates (i.e., don't
-    # use $as_me), people would be surprised to read:
-    #    /* config.h.  Generated by config.status.  */
-    configure_input='Generated from '`
-	  $as_echo "$*" | sed 's|^[^:]*/||;s|:[^:]*/|, |g'
-	`' by configure.'
-    if test x"$ac_file" != x-; then
-      configure_input="$ac_file.  $configure_input"
-      { $as_echo "$as_me:${as_lineno-$LINENO}: creating $ac_file" >&5
-$as_echo "$as_me: creating $ac_file" >&6;}
-    fi
-    # Neutralize special characters interpreted by sed in replacement strings.
-    case $configure_input in #(
-    *\&* | *\|* | *\\* )
-       ac_sed_conf_input=`$as_echo "$configure_input" |
-       sed 's/[\\\\&|]/\\\\&/g'`;; #(
-    *) ac_sed_conf_input=$configure_input;;
-    esac
-
-    case $ac_tag in
-    *:-:* | *:-) cat >"$ac_tmp/stdin" \
-      || as_fn_error $? "could not create $ac_file" "$LINENO" 5 ;;
-    esac
-    ;;
-  esac
-
-  ac_dir=`$as_dirname -- "$ac_file" ||
-$as_expr X"$ac_file" : 'X\(.*[^/]\)//*[^/][^/]*/*$' \| \
-	 X"$ac_file" : 'X\(//\)[^/]' \| \
-	 X"$ac_file" : 'X\(//\)$' \| \
-	 X"$ac_file" : 'X\(/\)' \| . 2>/dev/null ||
-$as_echo X"$ac_file" |
-    sed '/^X\(.*[^/]\)\/\/*[^/][^/]*\/*$/{
-	    s//\1/
-	    q
-	  }
-	  /^X\(\/\/\)[^/].*/{
-	    s//\1/
-	    q
-	  }
-	  /^X\(\/\/\)$/{
-	    s//\1/
-	    q
-	  }
-	  /^X\(\/\).*/{
-	    s//\1/
-	    q
-	  }
-	  s/.*/./; q'`
-  as_dir="$ac_dir"; as_fn_mkdir_p
-  ac_builddir=.
-
-case "$ac_dir" in
-.) ac_dir_suffix= ac_top_builddir_sub=. ac_top_build_prefix= ;;
-*)
-  ac_dir_suffix=/`$as_echo "$ac_dir" | sed 's|^\.[\\/]||'`
-  # A ".." for each directory in $ac_dir_suffix.
-  ac_top_builddir_sub=`$as_echo "$ac_dir_suffix" | sed 's|/[^\\/]*|/..|g;s|/||'`
-  case $ac_top_builddir_sub in
-  "") ac_top_builddir_sub=. ac_top_build_prefix= ;;
-  *)  ac_top_build_prefix=$ac_top_builddir_sub/ ;;
-  esac ;;
-esac
-ac_abs_top_builddir=$ac_pwd
-ac_abs_builddir=$ac_pwd$ac_dir_suffix
-# for backward compatibility:
-ac_top_builddir=$ac_top_build_prefix
-
-case $srcdir in
-  .)  # We are building in place.
-    ac_srcdir=.
-    ac_top_srcdir=$ac_top_builddir_sub
-    ac_abs_top_srcdir=$ac_pwd ;;
-  [\\/]* | ?:[\\/]* )  # Absolute name.
-    ac_srcdir=$srcdir$ac_dir_suffix;
-    ac_top_srcdir=$srcdir
-    ac_abs_top_srcdir=$srcdir ;;
-  *) # Relative name.
-    ac_srcdir=$ac_top_build_prefix$srcdir$ac_dir_suffix
-    ac_top_srcdir=$ac_top_build_prefix$srcdir
-    ac_abs_top_srcdir=$ac_pwd/$srcdir ;;
-esac
-ac_abs_srcdir=$ac_abs_top_srcdir$ac_dir_suffix
-
-
-  case $ac_mode in
-  :F)
-  #
-  # CONFIG_FILE
-  #
-
-  case $INSTALL in
-  [\\/$]* | ?:[\\/]* ) ac_INSTALL=$INSTALL ;;
-  *) ac_INSTALL=$ac_top_build_prefix$INSTALL ;;
-  esac
-  ac_MKDIR_P=$MKDIR_P
-  case $MKDIR_P in
-  [\\/$]* | ?:[\\/]* ) ;;
-  */*) ac_MKDIR_P=$ac_top_build_prefix$MKDIR_P ;;
-  esac
-_ACEOF
-
-cat >>$CONFIG_STATUS <<\_ACEOF || ac_write_fail=1
-# If the template does not know about datarootdir, expand it.
-# FIXME: This hack should be removed a few years after 2.60.
-ac_datarootdir_hack=; ac_datarootdir_seen=
-ac_sed_dataroot='
-/datarootdir/ {
-  p
-  q
-}
-/@datadir@/p
-/@docdir@/p
-/@infodir@/p
-/@localedir@/p
-/@mandir@/p'
-case `eval "sed -n \"\$ac_sed_dataroot\" $ac_file_inputs"` in
-*datarootdir*) ac_datarootdir_seen=yes;;
-*@datadir@*|*@docdir@*|*@infodir@*|*@localedir@*|*@mandir@*)
-  { $as_echo "$as_me:${as_lineno-$LINENO}: WARNING: $ac_file_inputs seems to ignore the --datarootdir setting" >&5
-$as_echo "$as_me: WARNING: $ac_file_inputs seems to ignore the --datarootdir setting" >&2;}
-_ACEOF
-cat >>$CONFIG_STATUS <<_ACEOF || ac_write_fail=1
-  ac_datarootdir_hack='
-  s&@datadir@&$datadir&g
-  s&@docdir@&$docdir&g
-  s&@infodir@&$infodir&g
-  s&@localedir@&$localedir&g
-  s&@mandir@&$mandir&g
-  s&\\\${datarootdir}&$datarootdir&g' ;;
-esac
-_ACEOF
-
-# Neutralize VPATH when `$srcdir' = `.'.
-# Shell code in configure.ac might set extrasub.
-# FIXME: do we really want to maintain this feature?
-cat >>$CONFIG_STATUS <<_ACEOF || ac_write_fail=1
-ac_sed_extra="$ac_vpsub
-$extrasub
-_ACEOF
-cat >>$CONFIG_STATUS <<\_ACEOF || ac_write_fail=1
-:t
-/@[a-zA-Z_][a-zA-Z_0-9]*@/!b
-s|@configure_input@|$ac_sed_conf_input|;t t
-s&@top_builddir@&$ac_top_builddir_sub&;t t
-s&@top_build_prefix@&$ac_top_build_prefix&;t t
-s&@srcdir@&$ac_srcdir&;t t
-s&@abs_srcdir@&$ac_abs_srcdir&;t t
-s&@top_srcdir@&$ac_top_srcdir&;t t
-s&@abs_top_srcdir@&$ac_abs_top_srcdir&;t t
-s&@builddir@&$ac_builddir&;t t
-s&@abs_builddir@&$ac_abs_builddir&;t t
-s&@abs_top_builddir@&$ac_abs_top_builddir&;t t
-s&@INSTALL@&$ac_INSTALL&;t t
-s&@MKDIR_P@&$ac_MKDIR_P&;t t
-$ac_datarootdir_hack
-"
-eval sed \"\$ac_sed_extra\" "$ac_file_inputs" | $AWK -f "$ac_tmp/subs.awk" \
-  >$ac_tmp/out || as_fn_error $? "could not create $ac_file" "$LINENO" 5
-
-test -z "$ac_datarootdir_hack$ac_datarootdir_seen" &&
-  { ac_out=`sed -n '/\${datarootdir}/p' "$ac_tmp/out"`; test -n "$ac_out"; } &&
-  { ac_out=`sed -n '/^[	 ]*datarootdir[	 ]*:*=/p' \
-      "$ac_tmp/out"`; test -z "$ac_out"; } &&
-  { $as_echo "$as_me:${as_lineno-$LINENO}: WARNING: $ac_file contains a reference to the variable \`datarootdir'
-which seems to be undefined.  Please make sure it is defined" >&5
-$as_echo "$as_me: WARNING: $ac_file contains a reference to the variable \`datarootdir'
-which seems to be undefined.  Please make sure it is defined" >&2;}
-
-  rm -f "$ac_tmp/stdin"
-  case $ac_file in
-  -) cat "$ac_tmp/out" && rm -f "$ac_tmp/out";;
-  *) rm -f "$ac_file" && mv "$ac_tmp/out" "$ac_file";;
-  esac \
-  || as_fn_error $? "could not create $ac_file" "$LINENO" 5
- ;;
-  :H)
-  #
-  # CONFIG_HEADER
-  #
-  if test x"$ac_file" != x-; then
-    {
-      $as_echo "/* $configure_input  */" \
-      && eval '$AWK -f "$ac_tmp/defines.awk"' "$ac_file_inputs"
-    } >"$ac_tmp/config.h" \
-      || as_fn_error $? "could not create $ac_file" "$LINENO" 5
-    if diff "$ac_file" "$ac_tmp/config.h" >/dev/null 2>&1; then
-      { $as_echo "$as_me:${as_lineno-$LINENO}: $ac_file is unchanged" >&5
-$as_echo "$as_me: $ac_file is unchanged" >&6;}
-    else
-      rm -f "$ac_file"
-      mv "$ac_tmp/config.h" "$ac_file" \
-	|| as_fn_error $? "could not create $ac_file" "$LINENO" 5
-    fi
-  else
-    $as_echo "/* $configure_input  */" \
-      && eval '$AWK -f "$ac_tmp/defines.awk"' "$ac_file_inputs" \
-      || as_fn_error $? "could not create -" "$LINENO" 5
-  fi
-# Compute "$ac_file"'s index in $config_headers.
-_am_arg="$ac_file"
-_am_stamp_count=1
-for _am_header in $config_headers :; do
-  case $_am_header in
-    $_am_arg | $_am_arg:* )
-      break ;;
-    * )
-      _am_stamp_count=`expr $_am_stamp_count + 1` ;;
-  esac
-done
-echo "timestamp for $_am_arg" >`$as_dirname -- "$_am_arg" ||
-$as_expr X"$_am_arg" : 'X\(.*[^/]\)//*[^/][^/]*/*$' \| \
-	 X"$_am_arg" : 'X\(//\)[^/]' \| \
-	 X"$_am_arg" : 'X\(//\)$' \| \
-	 X"$_am_arg" : 'X\(/\)' \| . 2>/dev/null ||
-$as_echo X"$_am_arg" |
-    sed '/^X\(.*[^/]\)\/\/*[^/][^/]*\/*$/{
-	    s//\1/
-	    q
-	  }
-	  /^X\(\/\/\)[^/].*/{
-	    s//\1/
-	    q
-	  }
-	  /^X\(\/\/\)$/{
-	    s//\1/
-	    q
-	  }
-	  /^X\(\/\).*/{
-	    s//\1/
-	    q
-	  }
-	  s/.*/./; q'`/stamp-h$_am_stamp_count
- ;;
-
-  :C)  { $as_echo "$as_me:${as_lineno-$LINENO}: executing $ac_file commands" >&5
-$as_echo "$as_me: executing $ac_file commands" >&6;}
- ;;
-  esac
-
-
-  case $ac_file$ac_mode in
-    "depfiles":C) test x"$AMDEP_TRUE" != x"" || {
-  # Older Autoconf quotes --file arguments for eval, but not when files
-  # are listed without --file.  Let's play safe and only enable the eval
-  # if we detect the quoting.
-  case $CONFIG_FILES in
-  *\'*) eval set x "$CONFIG_FILES" ;;
-  *)   set x $CONFIG_FILES ;;
-  esac
-  shift
-  for mf
-  do
-    # Strip MF so we end up with the name of the file.
-    mf=`echo "$mf" | sed -e 's/:.*$//'`
-    # Check whether this is an Automake generated Makefile or not.
-    # We used to match only the files named 'Makefile.in', but
-    # some people rename them; so instead we look at the file content.
-    # Grep'ing the first line is not enough: some people post-process
-    # each Makefile.in and add a new line on top of each file to say so.
-    # Grep'ing the whole file is not good either: AIX grep has a line
-    # limit of 2048, but all sed's we know have understand at least 4000.
-    if sed -n 's,^#.*generated by automake.*,X,p' "$mf" | grep X >/dev/null 2>&1; then
-      dirpart=`$as_dirname -- "$mf" ||
-$as_expr X"$mf" : 'X\(.*[^/]\)//*[^/][^/]*/*$' \| \
-	 X"$mf" : 'X\(//\)[^/]' \| \
-	 X"$mf" : 'X\(//\)$' \| \
-	 X"$mf" : 'X\(/\)' \| . 2>/dev/null ||
-$as_echo X"$mf" |
-    sed '/^X\(.*[^/]\)\/\/*[^/][^/]*\/*$/{
-	    s//\1/
-	    q
-	  }
-	  /^X\(\/\/\)[^/].*/{
-	    s//\1/
-	    q
-	  }
-	  /^X\(\/\/\)$/{
-	    s//\1/
-	    q
-	  }
-	  /^X\(\/\).*/{
-	    s//\1/
-	    q
-	  }
-	  s/.*/./; q'`
-    else
-      continue
-    fi
-    # Extract the definition of DEPDIR, am__include, and am__quote
-    # from the Makefile without running 'make'.
-    DEPDIR=`sed -n 's/^DEPDIR = //p' < "$mf"`
-    test -z "$DEPDIR" && continue
-    am__include=`sed -n 's/^am__include = //p' < "$mf"`
-    test -z "$am__include" && continue
-    am__quote=`sed -n 's/^am__quote = //p' < "$mf"`
-    # Find all dependency output files, they are included files with
-    # $(DEPDIR) in their names.  We invoke sed twice because it is the
-    # simplest approach to changing $(DEPDIR) to its actual value in the
-    # expansion.
-    for file in `sed -n "
-      s/^$am__include $am__quote\(.*(DEPDIR).*\)$am__quote"'$/\1/p' <"$mf" | \
-	 sed -e 's/\$(DEPDIR)/'"$DEPDIR"'/g'`; do
-      # Make sure the directory exists.
-      test -f "$dirpart/$file" && continue
-      fdir=`$as_dirname -- "$file" ||
-$as_expr X"$file" : 'X\(.*[^/]\)//*[^/][^/]*/*$' \| \
-	 X"$file" : 'X\(//\)[^/]' \| \
-	 X"$file" : 'X\(//\)$' \| \
-	 X"$file" : 'X\(/\)' \| . 2>/dev/null ||
-$as_echo X"$file" |
-    sed '/^X\(.*[^/]\)\/\/*[^/][^/]*\/*$/{
-	    s//\1/
-	    q
-	  }
-	  /^X\(\/\/\)[^/].*/{
-	    s//\1/
-	    q
-	  }
-	  /^X\(\/\/\)$/{
-	    s//\1/
-	    q
-	  }
-	  /^X\(\/\).*/{
-	    s//\1/
-	    q
-	  }
-	  s/.*/./; q'`
-      as_dir=$dirpart/$fdir; as_fn_mkdir_p
-      # echo "creating $dirpart/$file"
-      echo '# dummy' > "$dirpart/$file"
-    done
-  done
-}
- ;;
-
-  esac
-done # for ac_tag
-
-
-as_fn_exit 0
-_ACEOF
-ac_clean_files=$ac_clean_files_save
-
-test $ac_write_fail = 0 ||
-  as_fn_error $? "write failure creating $CONFIG_STATUS" "$LINENO" 5
-
-
-# configure is writing to config.log, and then calls config.status.
-# config.status does its own redirection, appending to config.log.
-# Unfortunately, on DOS this fails, as config.log is still kept open
-# by configure, so config.status won't be able to write to it; its
-# output is simply discarded.  So we exec the FD to /dev/null,
-# effectively closing config.log, so it can be properly (re)opened and
-# appended to by config.status.  When coming back to configure, we
-# need to make the FD available again.
-if test "$no_create" != yes; then
-  ac_cs_success=:
-  ac_config_status_args=
-  test "$silent" = yes &&
-    ac_config_status_args="$ac_config_status_args --quiet"
-  exec 5>/dev/null
-  $SHELL $CONFIG_STATUS $ac_config_status_args || ac_cs_success=false
-  exec 5>>config.log
-  # Use ||, not &&, to avoid exiting from the if with $? = 1, which
-  # would make configure fail if this is the last instruction.
-  $ac_cs_success || as_fn_exit 1
-fi
-if test -n "$ac_unrecognized_opts" && test "$enable_option_checking" != no; then
-  { $as_echo "$as_me:${as_lineno-$LINENO}: WARNING: unrecognized options: $ac_unrecognized_opts" >&5
-$as_echo "$as_me: WARNING: unrecognized options: $ac_unrecognized_opts" >&2;}
-fi
-
diff -Nuar groff-1.22.3.old/src/libs/gnulib/configure.ac groff-1.22.3/src/libs/gnulib/configure.ac
--- groff-1.22.3.old/src/libs/gnulib/configure.ac	2014-11-04 10:38:35.676518359 +0200
+++ groff-1.22.3/src/libs/gnulib/configure.ac	1970-01-01 02:00:00.000000000 +0200
@@ -1,143 +0,0 @@
-# Process this file with autoconf to produce a configure script.
-#
-# Copyright (C) 1989-2014 Free Software Foundation, Inc.
-#
-# This file is part of groff.
-#
-# groff is free software; you can redistribute it and/or modify it
-# under the terms of the GNU General Public License as published by
-# the Free Software Foundation, either version 2 of the License.
-#
-# groff is distributed in the hope that it will be useful, but WITHOUT ANY
-# WARRANTY; without even the implied warranty of MERCHANTABILITY or
-# FITNESS FOR A PARTICULAR PURPOSE.  See the GNU General Public License
-# for more details.
-#
-# You can find the license text of GPL2 in the internet at
-# <http://www.gnu.org/licenses/gpl-2.0.txt>.
-
-AC_INIT([dummy], [0])
-AC_CONFIG_AUX_DIR([build-aux])
-AM_INIT_AUTOMAKE
-
-AC_CONFIG_HEADERS([config.h])
-
-AC_PROG_CC
-AC_PROG_INSTALL
-AC_PROG_MAKE_SET
-
-# For autobuild.
-AC_CANONICAL_BUILD
-AC_CANONICAL_HOST
-
-m4_pattern_forbid([^gl_[A-Z]])dnl the gnulib macro namespace
-m4_pattern_allow([^gl_ES$])dnl a valid locale name
-m4_pattern_allow([^gl_LIBOBJS$])dnl a variable
-m4_pattern_allow([^gl_LTLIBOBJS$])dnl a variable
-
-gl_PROG_AR_RANLIB
-
-AM_PROG_CC_C_O
-
-gl_USE_SYSTEM_EXTENSIONS
-AM_CONDITIONAL([GL_COND_LIBTOOL], [false])
-gl_cond_libtool=false
-gl_libdeps=
-gl_ltlibdeps=
-AC_DEFUN([gl_INIT], [
-gl_m4_base='m4'
-  m4_pushdef([AC_LIBOBJ], m4_defn([gl_LIBOBJ]))
-  m4_pushdef([AC_REPLACE_FUNCS], m4_defn([gl_REPLACE_FUNCS]))
-  m4_pushdef([AC_LIBSOURCES], m4_defn([gl_LIBSOURCES]))
-  m4_pushdef([gl_LIBSOURCES_LIST], [])
-  m4_pushdef([gl_LIBSOURCES_DIR], [])
-  gl_COMMON
-gl_source_base='lib'
-  gl_CONFIGMAKE_PREP
-  AC_REQUIRE([gl_EXTERN_INLINE])
-  gl_INTTYPES_H
-  gl_INTTYPES_INCOMPLETE
-  gl_LOCALCHARSET
-  LOCALCHARSET_TESTS_ENVIRONMENT="CHARSETALIASDIR=\"\$(abs_top_builddir)/$gl_source_base\""
-  AC_SUBST([LOCALCHARSET_TESTS_ENVIRONMENT])
-  gl_MULTIARCH
-  AM_STDBOOL_H
-  gl_STDDEF_H
-  gl_STDINT_H
-  gl_LIBUNISTRING_LIBHEADER([0.9], [unitypes.h])
-  gl_LIBUNISTRING_LIBHEADER([0.9], [uniwidth.h])
-  gl_LIBUNISTRING_MODULE([0.9.4], [uniwidth/width])
-  gl_WCHAR_H
-  gl_WCTYPE_H
-  gl_FUNC_WCWIDTH
-  if test $HAVE_WCWIDTH = 0 || test $REPLACE_WCWIDTH = 1; then
-    AC_LIBOBJ([wcwidth])
-  fi
-  gl_WCHAR_MODULE_INDICATOR([wcwidth])
-  m4_ifval(gl_LIBSOURCES_LIST, [
-    m4_syscmd([test ! -d ]m4_defn([gl_LIBSOURCES_DIR])[ ||
-      for gl_file in ]gl_LIBSOURCES_LIST[ ; do
-        if test ! -r ]m4_defn([gl_LIBSOURCES_DIR])[/$gl_file ; then
-          echo "missing file ]m4_defn([gl_LIBSOURCES_DIR])[/$gl_file" >&2
-          exit 1
-        fi
-      done])dnl
-      m4_if(m4_sysval, [0], [],
-        [AC_FATAL([expected source file, required through AC_LIBSOURCES, not found])])
-  ])
-  m4_popdef([gl_LIBSOURCES_DIR])
-  m4_popdef([gl_LIBSOURCES_LIST])
-  m4_popdef([AC_LIBSOURCES])
-  m4_popdef([AC_REPLACE_FUNCS])
-  m4_popdef([AC_LIBOBJ])
-  AC_CONFIG_COMMANDS_PRE([
-    gl_libobjs=
-    gl_ltlibobjs=
-    if test -n "$gl_LIBOBJS"; then
-      # Remove the extension.
-      sed_drop_objext='s/\.o$//;s/\.obj$//'
-      for i in `for i in $gl_LIBOBJS; do echo "$i"; done | sed -e "$sed_drop_objext" | sort | uniq`; do
-        gl_libobjs="$gl_libobjs $i.$ac_objext"
-        gl_ltlibobjs="$gl_ltlibobjs $i.lo"
-      done
-    fi
-    AC_SUBST([gl_LIBOBJS], [$gl_libobjs])
-    AC_SUBST([gl_LTLIBOBJS], [$gl_ltlibobjs])
-  ])
-  LIBGNU_LIBDEPS="$gl_libdeps"
-  AC_SUBST([LIBGNU_LIBDEPS])
-  LIBGNU_LTLIBDEPS="$gl_ltlibdeps"
-  AC_SUBST([LIBGNU_LTLIBDEPS])
-])
-
-# Like AC_LIBOBJ, except that the module name goes
-# into gl_LIBOBJS instead of into LIBOBJS.
-AC_DEFUN([gl_LIBOBJ], [
-  AS_LITERAL_IF([$1], [gl_LIBSOURCES([$1.c])])dnl
-  gl_LIBOBJS="$gl_LIBOBJS $1.$ac_objext"
-])
-
-# Like AC_REPLACE_FUNCS, except that the module name goes
-# into gl_LIBOBJS instead of into LIBOBJS.
-AC_DEFUN([gl_REPLACE_FUNCS], [
-  m4_foreach_w([gl_NAME], [$1], [AC_LIBSOURCES(gl_NAME[.c])])dnl
-  AC_CHECK_FUNCS([$1], , [gl_LIBOBJ($ac_func)])
-])
-
-# Like AC_LIBSOURCES, except the directory where the source file is
-# expected is derived from the gnulib-tool parameterization,
-# and alloca is special cased (for the alloca-opt module).
-# We could also entirely rely on EXTRA_lib..._SOURCES.
-AC_DEFUN([gl_LIBSOURCES], [
-  m4_foreach([_gl_NAME], [$1], [
-    m4_if(_gl_NAME, [alloca.c], [], [
-      m4_define([gl_LIBSOURCES_DIR], [lib])
-      m4_append([gl_LIBSOURCES_LIST], _gl_NAME, [ ])
-    ])
-  ])
-])
-
-gl_INIT
-
-AC_CONFIG_FILES([Makefile lib/Makefile m4/Makefile])
-AC_OUTPUT
diff -Nuar groff-1.22.3.old/src/libs/gnulib/lib/config.charset groff-1.22.3/src/libs/gnulib/lib/config.charset
--- groff-1.22.3.old/src/libs/gnulib/lib/config.charset	2014-11-04 10:38:35.629518946 +0200
+++ groff-1.22.3/src/libs/gnulib/lib/config.charset	1970-01-01 02:00:00.000000000 +0200
@@ -1,684 +0,0 @@
-#! /bin/sh
-# Output a system dependent table of character encoding aliases.
-#
-#   Copyright (C) 2000-2004, 2006-2014 Free Software Foundation, Inc.
-#
-#   This program is free software; you can redistribute it and/or modify
-#   it under the terms of the GNU General Public License as published by
-#   the Free Software Foundation; either version 2, or (at your option)
-#   any later version.
-#
-#   This program is distributed in the hope that it will be useful,
-#   but WITHOUT ANY WARRANTY; without even the implied warranty of
-#   MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
-#   GNU General Public License for more details.
-#
-#   You should have received a copy of the GNU General Public License along
-#   with this program; if not, see <http://www.gnu.org/licenses/>.
-#
-# The table consists of lines of the form
-#    ALIAS  CANONICAL
-#
-# ALIAS is the (system dependent) result of "nl_langinfo (CODESET)".
-# ALIAS is compared in a case sensitive way.
-#
-# CANONICAL is the GNU canonical name for this character encoding.
-# It must be an encoding supported by libiconv. Support by GNU libc is
-# also desirable. CANONICAL is case insensitive. Usually an upper case
-# MIME charset name is preferred.
-# The current list of GNU canonical charset names is as follows.
-#
-#       name              MIME?             used by which systems
-#                                    (darwin = Mac OS X, woe32 = native Windows)
-#
-#   ASCII, ANSI_X3.4-1968       glibc solaris freebsd netbsd darwin cygwin
-#   ISO-8859-1              Y   glibc aix hpux irix osf solaris freebsd netbsd openbsd darwin cygwin
-#   ISO-8859-2              Y   glibc aix hpux irix osf solaris freebsd netbsd openbsd darwin cygwin
-#   ISO-8859-3              Y   glibc solaris cygwin
-#   ISO-8859-4              Y   osf solaris freebsd netbsd openbsd darwin
-#   ISO-8859-5              Y   glibc aix hpux irix osf solaris freebsd netbsd openbsd darwin cygwin
-#   ISO-8859-6              Y   glibc aix hpux solaris cygwin
-#   ISO-8859-7              Y   glibc aix hpux irix osf solaris netbsd openbsd darwin cygwin
-#   ISO-8859-8              Y   glibc aix hpux osf solaris cygwin
-#   ISO-8859-9              Y   glibc aix hpux irix osf solaris darwin cygwin
-#   ISO-8859-13                 glibc netbsd openbsd darwin cygwin
-#   ISO-8859-14                 glibc cygwin
-#   ISO-8859-15                 glibc aix osf solaris freebsd netbsd openbsd darwin cygwin
-#   KOI8-R                  Y   glibc solaris freebsd netbsd openbsd darwin
-#   KOI8-U                  Y   glibc freebsd netbsd openbsd darwin cygwin
-#   KOI8-T                      glibc
-#   CP437                       dos
-#   CP775                       dos
-#   CP850                       aix osf dos
-#   CP852                       dos
-#   CP855                       dos
-#   CP856                       aix
-#   CP857                       dos
-#   CP861                       dos
-#   CP862                       dos
-#   CP864                       dos
-#   CP865                       dos
-#   CP866                       freebsd netbsd openbsd darwin dos
-#   CP869                       dos
-#   CP874                       woe32 dos
-#   CP922                       aix
-#   CP932                       aix cygwin woe32 dos
-#   CP943                       aix
-#   CP949                       osf darwin woe32 dos
-#   CP950                       woe32 dos
-#   CP1046                      aix
-#   CP1124                      aix
-#   CP1125                      dos
-#   CP1129                      aix
-#   CP1131                      darwin
-#   CP1250                      woe32
-#   CP1251                      glibc solaris netbsd openbsd darwin cygwin woe32
-#   CP1252                      aix woe32
-#   CP1253                      woe32
-#   CP1254                      woe32
-#   CP1255                      glibc woe32
-#   CP1256                      woe32
-#   CP1257                      woe32
-#   GB2312                  Y   glibc aix hpux irix solaris freebsd netbsd darwin
-#   EUC-JP                  Y   glibc aix hpux irix osf solaris freebsd netbsd darwin
-#   EUC-KR                  Y   glibc aix hpux irix osf solaris freebsd netbsd darwin cygwin
-#   EUC-TW                      glibc aix hpux irix osf solaris netbsd
-#   BIG5                    Y   glibc aix hpux osf solaris freebsd netbsd darwin cygwin
-#   BIG5-HKSCS                  glibc solaris darwin
-#   GBK                         glibc aix osf solaris darwin cygwin woe32 dos
-#   GB18030                     glibc solaris netbsd darwin
-#   SHIFT_JIS               Y   hpux osf solaris freebsd netbsd darwin
-#   JOHAB                       glibc solaris woe32
-#   TIS-620                     glibc aix hpux osf solaris cygwin
-#   VISCII                  Y   glibc
-#   TCVN5712-1                  glibc
-#   ARMSCII-8                   glibc darwin
-#   GEORGIAN-PS                 glibc cygwin
-#   PT154                       glibc
-#   HP-ROMAN8                   hpux
-#   HP-ARABIC8                  hpux
-#   HP-GREEK8                   hpux
-#   HP-HEBREW8                  hpux
-#   HP-TURKISH8                 hpux
-#   HP-KANA8                    hpux
-#   DEC-KANJI                   osf
-#   DEC-HANYU                   osf
-#   UTF-8                   Y   glibc aix hpux osf solaris netbsd darwin cygwin
-#
-# Note: Names which are not marked as being a MIME name should not be used in
-# Internet protocols for information interchange (mail, news, etc.).
-#
-# Note: ASCII and ANSI_X3.4-1968 are synonymous canonical names. Applications
-# must understand both names and treat them as equivalent.
-#
-# The first argument passed to this file is the canonical host specification,
-#    CPU_TYPE-MANUFACTURER-OPERATING_SYSTEM
-# or
-#    CPU_TYPE-MANUFACTURER-KERNEL-OPERATING_SYSTEM
-
-host="$1"
-os=`echo "$host" | sed -e 's/^[^-]*-[^-]*-\(.*\)$/\1/'`
-echo "# This file contains a table of character encoding aliases,"
-echo "# suitable for operating system '${os}'."
-echo "# It was automatically generated from config.charset."
-# List of references, updated during installation:
-echo "# Packages using this file: "
-case "$os" in
-  linux-gnulibc1*)
-    # Linux libc5 doesn't have nl_langinfo(CODESET); therefore
-    # localcharset.c falls back to using the full locale name
-    # from the environment variables.
-    echo "C ASCII"
-    echo "POSIX ASCII"
-    for l in af af_ZA ca ca_ES da da_DK de de_AT de_BE de_CH de_DE de_LU \
-             en en_AU en_BW en_CA en_DK en_GB en_IE en_NZ en_US en_ZA \
-             en_ZW es es_AR es_BO es_CL es_CO es_DO es_EC es_ES es_GT \
-             es_HN es_MX es_PA es_PE es_PY es_SV es_US es_UY es_VE et \
-             et_EE eu eu_ES fi fi_FI fo fo_FO fr fr_BE fr_CA fr_CH fr_FR \
-             fr_LU ga ga_IE gl gl_ES id id_ID in in_ID is is_IS it it_CH \
-             it_IT kl kl_GL nl nl_BE nl_NL no no_NO pt pt_BR pt_PT sv \
-             sv_FI sv_SE; do
-      echo "$l ISO-8859-1"
-      echo "$l.iso-8859-1 ISO-8859-1"
-      echo "$l.iso-8859-15 ISO-8859-15"
-      echo "$l.iso-8859-15@euro ISO-8859-15"
-      echo "$l@euro ISO-8859-15"
-      echo "$l.cp-437 CP437"
-      echo "$l.cp-850 CP850"
-      echo "$l.cp-1252 CP1252"
-      echo "$l.cp-1252@euro CP1252"
-      #echo "$l.atari-st ATARI-ST" # not a commonly used encoding
-      echo "$l.utf-8 UTF-8"
-      echo "$l.utf-8@euro UTF-8"
-    done
-    for l in cs cs_CZ hr hr_HR hu hu_HU pl pl_PL ro ro_RO sk sk_SK sl \
-             sl_SI sr sr_CS sr_YU; do
-      echo "$l ISO-8859-2"
-      echo "$l.iso-8859-2 ISO-8859-2"
-      echo "$l.cp-852 CP852"
-      echo "$l.cp-1250 CP1250"
-      echo "$l.utf-8 UTF-8"
-    done
-    for l in mk mk_MK ru ru_RU; do
-      echo "$l ISO-8859-5"
-      echo "$l.iso-8859-5 ISO-8859-5"
-      echo "$l.koi8-r KOI8-R"
-      echo "$l.cp-866 CP866"
-      echo "$l.cp-1251 CP1251"
-      echo "$l.utf-8 UTF-8"
-    done
-    for l in ar ar_SA; do
-      echo "$l ISO-8859-6"
-      echo "$l.iso-8859-6 ISO-8859-6"
-      echo "$l.cp-864 CP864"
-      #echo "$l.cp-868 CP868" # not a commonly used encoding
-      echo "$l.cp-1256 CP1256"
-      echo "$l.utf-8 UTF-8"
-    done
-    for l in el el_GR gr gr_GR; do
-      echo "$l ISO-8859-7"
-      echo "$l.iso-8859-7 ISO-8859-7"
-      echo "$l.cp-869 CP869"
-      echo "$l.cp-1253 CP1253"
-      echo "$l.cp-1253@euro CP1253"
-      echo "$l.utf-8 UTF-8"
-      echo "$l.utf-8@euro UTF-8"
-    done
-    for l in he he_IL iw iw_IL; do
-      echo "$l ISO-8859-8"
-      echo "$l.iso-8859-8 ISO-8859-8"
-      echo "$l.cp-862 CP862"
-      echo "$l.cp-1255 CP1255"
-      echo "$l.utf-8 UTF-8"
-    done
-    for l in tr tr_TR; do
-      echo "$l ISO-8859-9"
-      echo "$l.iso-8859-9 ISO-8859-9"
-      echo "$l.cp-857 CP857"
-      echo "$l.cp-1254 CP1254"
-      echo "$l.utf-8 UTF-8"
-    done
-    for l in lt lt_LT lv lv_LV; do
-      #echo "$l BALTIC" # not a commonly used encoding, wrong encoding name
-      echo "$l ISO-8859-13"
-    done
-    for l in ru_UA uk uk_UA; do
-      echo "$l KOI8-U"
-    done
-    for l in zh zh_CN; do
-      #echo "$l GB_2312-80" # not a commonly used encoding, wrong encoding name
-      echo "$l GB2312"
-    done
-    for l in ja ja_JP ja_JP.EUC; do
-      echo "$l EUC-JP"
-    done
-    for l in ko ko_KR; do
-      echo "$l EUC-KR"
-    done
-    for l in th th_TH; do
-      echo "$l TIS-620"
-    done
-    for l in fa fa_IR; do
-      #echo "$l ISIRI-3342" # a broken encoding
-      echo "$l.utf-8 UTF-8"
-    done
-    ;;
-  linux* | *-gnu*)
-    # With glibc-2.1 or newer, we don't need any canonicalization,
-    # because glibc has iconv and both glibc and libiconv support all
-    # GNU canonical names directly. Therefore, the Makefile does not
-    # need to install the alias file at all.
-    # The following applies only to glibc-2.0.x and older libcs.
-    echo "ISO_646.IRV:1983 ASCII"
-    ;;
-  aix*)
-    echo "ISO8859-1 ISO-8859-1"
-    echo "ISO8859-2 ISO-8859-2"
-    echo "ISO8859-5 ISO-8859-5"
-    echo "ISO8859-6 ISO-8859-6"
-    echo "ISO8859-7 ISO-8859-7"
-    echo "ISO8859-8 ISO-8859-8"
-    echo "ISO8859-9 ISO-8859-9"
-    echo "ISO8859-15 ISO-8859-15"
-    echo "IBM-850 CP850"
-    echo "IBM-856 CP856"
-    echo "IBM-921 ISO-8859-13"
-    echo "IBM-922 CP922"
-    echo "IBM-932 CP932"
-    echo "IBM-943 CP943"
-    echo "IBM-1046 CP1046"
-    echo "IBM-1124 CP1124"
-    echo "IBM-1129 CP1129"
-    echo "IBM-1252 CP1252"
-    echo "IBM-eucCN GB2312"
-    echo "IBM-eucJP EUC-JP"
-    echo "IBM-eucKR EUC-KR"
-    echo "IBM-eucTW EUC-TW"
-    echo "big5 BIG5"
-    echo "GBK GBK"
-    echo "TIS-620 TIS-620"
-    echo "UTF-8 UTF-8"
-    ;;
-  hpux*)
-    echo "iso88591 ISO-8859-1"
-    echo "iso88592 ISO-8859-2"
-    echo "iso88595 ISO-8859-5"
-    echo "iso88596 ISO-8859-6"
-    echo "iso88597 ISO-8859-7"
-    echo "iso88598 ISO-8859-8"
-    echo "iso88599 ISO-8859-9"
-    echo "iso885915 ISO-8859-15"
-    echo "roman8 HP-ROMAN8"
-    echo "arabic8 HP-ARABIC8"
-    echo "greek8 HP-GREEK8"
-    echo "hebrew8 HP-HEBREW8"
-    echo "turkish8 HP-TURKISH8"
-    echo "kana8 HP-KANA8"
-    echo "tis620 TIS-620"
-    echo "big5 BIG5"
-    echo "eucJP EUC-JP"
-    echo "eucKR EUC-KR"
-    echo "eucTW EUC-TW"
-    echo "hp15CN GB2312"
-    #echo "ccdc ?" # what is this?
-    echo "SJIS SHIFT_JIS"
-    echo "utf8 UTF-8"
-    ;;
-  irix*)
-    echo "ISO8859-1 ISO-8859-1"
-    echo "ISO8859-2 ISO-8859-2"
-    echo "ISO8859-5 ISO-8859-5"
-    echo "ISO8859-7 ISO-8859-7"
-    echo "ISO8859-9 ISO-8859-9"
-    echo "eucCN GB2312"
-    echo "eucJP EUC-JP"
-    echo "eucKR EUC-KR"
-    echo "eucTW EUC-TW"
-    ;;
-  osf*)
-    echo "ISO8859-1 ISO-8859-1"
-    echo "ISO8859-2 ISO-8859-2"
-    echo "ISO8859-4 ISO-8859-4"
-    echo "ISO8859-5 ISO-8859-5"
-    echo "ISO8859-7 ISO-8859-7"
-    echo "ISO8859-8 ISO-8859-8"
-    echo "ISO8859-9 ISO-8859-9"
-    echo "ISO8859-15 ISO-8859-15"
-    echo "cp850 CP850"
-    echo "big5 BIG5"
-    echo "dechanyu DEC-HANYU"
-    echo "dechanzi GB2312"
-    echo "deckanji DEC-KANJI"
-    echo "deckorean EUC-KR"
-    echo "eucJP EUC-JP"
-    echo "eucKR EUC-KR"
-    echo "eucTW EUC-TW"
-    echo "GBK GBK"
-    echo "KSC5601 CP949"
-    echo "sdeckanji EUC-JP"
-    echo "SJIS SHIFT_JIS"
-    echo "TACTIS TIS-620"
-    echo "UTF-8 UTF-8"
-    ;;
-  solaris*)
-    echo "646 ASCII"
-    echo "ISO8859-1 ISO-8859-1"
-    echo "ISO8859-2 ISO-8859-2"
-    echo "ISO8859-3 ISO-8859-3"
-    echo "ISO8859-4 ISO-8859-4"
-    echo "ISO8859-5 ISO-8859-5"
-    echo "ISO8859-6 ISO-8859-6"
-    echo "ISO8859-7 ISO-8859-7"
-    echo "ISO8859-8 ISO-8859-8"
-    echo "ISO8859-9 ISO-8859-9"
-    echo "ISO8859-15 ISO-8859-15"
-    echo "koi8-r KOI8-R"
-    echo "ansi-1251 CP1251"
-    echo "BIG5 BIG5"
-    echo "Big5-HKSCS BIG5-HKSCS"
-    echo "gb2312 GB2312"
-    echo "GBK GBK"
-    echo "GB18030 GB18030"
-    echo "cns11643 EUC-TW"
-    echo "5601 EUC-KR"
-    echo "ko_KR.johap92 JOHAB"
-    echo "eucJP EUC-JP"
-    echo "PCK SHIFT_JIS"
-    echo "TIS620.2533 TIS-620"
-    #echo "sun_eu_greek ?" # what is this?
-    echo "UTF-8 UTF-8"
-    ;;
-  freebsd* | os2*)
-    # FreeBSD 4.2 doesn't have nl_langinfo(CODESET); therefore
-    # localcharset.c falls back to using the full locale name
-    # from the environment variables.
-    # Likewise for OS/2. OS/2 has XFree86 just like FreeBSD. Just
-    # reuse FreeBSD's locale data for OS/2.
-    echo "C ASCII"
-    echo "US-ASCII ASCII"
-    for l in la_LN lt_LN; do
-      echo "$l.ASCII ASCII"
-    done
-    for l in da_DK de_AT de_CH de_DE en_AU en_CA en_GB en_US es_ES \
-             fi_FI fr_BE fr_CA fr_CH fr_FR is_IS it_CH it_IT la_LN \
-             lt_LN nl_BE nl_NL no_NO pt_PT sv_SE; do
-      echo "$l.ISO_8859-1 ISO-8859-1"
-      echo "$l.DIS_8859-15 ISO-8859-15"
-    done
-    for l in cs_CZ hr_HR hu_HU la_LN lt_LN pl_PL sl_SI; do
-      echo "$l.ISO_8859-2 ISO-8859-2"
-    done
-    for l in la_LN lt_LT; do
-      echo "$l.ISO_8859-4 ISO-8859-4"
-    done
-    for l in ru_RU ru_SU; do
-      echo "$l.KOI8-R KOI8-R"
-      echo "$l.ISO_8859-5 ISO-8859-5"
-      echo "$l.CP866 CP866"
-    done
-    echo "uk_UA.KOI8-U KOI8-U"
-    echo "zh_TW.BIG5 BIG5"
-    echo "zh_TW.Big5 BIG5"
-    echo "zh_CN.EUC GB2312"
-    echo "ja_JP.EUC EUC-JP"
-    echo "ja_JP.SJIS SHIFT_JIS"
-    echo "ja_JP.Shift_JIS SHIFT_JIS"
-    echo "ko_KR.EUC EUC-KR"
-    ;;
-  netbsd*)
-    echo "646 ASCII"
-    echo "ISO8859-1 ISO-8859-1"
-    echo "ISO8859-2 ISO-8859-2"
-    echo "ISO8859-4 ISO-8859-4"
-    echo "ISO8859-5 ISO-8859-5"
-    echo "ISO8859-7 ISO-8859-7"
-    echo "ISO8859-13 ISO-8859-13"
-    echo "ISO8859-15 ISO-8859-15"
-    echo "eucCN GB2312"
-    echo "eucJP EUC-JP"
-    echo "eucKR EUC-KR"
-    echo "eucTW EUC-TW"
-    echo "BIG5 BIG5"
-    echo "SJIS SHIFT_JIS"
-    ;;
-  openbsd*)
-    echo "646 ASCII"
-    echo "ISO8859-1 ISO-8859-1"
-    echo "ISO8859-2 ISO-8859-2"
-    echo "ISO8859-4 ISO-8859-4"
-    echo "ISO8859-5 ISO-8859-5"
-    echo "ISO8859-7 ISO-8859-7"
-    echo "ISO8859-13 ISO-8859-13"
-    echo "ISO8859-15 ISO-8859-15"
-    ;;
-  darwin[56]*)
-    # Darwin 6.8 doesn't have nl_langinfo(CODESET); therefore
-    # localcharset.c falls back to using the full locale name
-    # from the environment variables.
-    echo "C ASCII"
-    for l in en_AU en_CA en_GB en_US la_LN; do
-      echo "$l.US-ASCII ASCII"
-    done
-    for l in da_DK de_AT de_CH de_DE en_AU en_CA en_GB en_US es_ES \
-             fi_FI fr_BE fr_CA fr_CH fr_FR is_IS it_CH it_IT nl_BE \
-             nl_NL no_NO pt_PT sv_SE; do
-      echo "$l ISO-8859-1"
-      echo "$l.ISO8859-1 ISO-8859-1"
-      echo "$l.ISO8859-15 ISO-8859-15"
-    done
-    for l in la_LN; do
-      echo "$l.ISO8859-1 ISO-8859-1"
-      echo "$l.ISO8859-15 ISO-8859-15"
-    done
-    for l in cs_CZ hr_HR hu_HU la_LN pl_PL sl_SI; do
-      echo "$l.ISO8859-2 ISO-8859-2"
-    done
-    for l in la_LN lt_LT; do
-      echo "$l.ISO8859-4 ISO-8859-4"
-    done
-    for l in ru_RU; do
-      echo "$l.KOI8-R KOI8-R"
-      echo "$l.ISO8859-5 ISO-8859-5"
-      echo "$l.CP866 CP866"
-    done
-    for l in bg_BG; do
-      echo "$l.CP1251 CP1251"
-    done
-    echo "uk_UA.KOI8-U KOI8-U"
-    echo "zh_TW.BIG5 BIG5"
-    echo "zh_TW.Big5 BIG5"
-    echo "zh_CN.EUC GB2312"
-    echo "ja_JP.EUC EUC-JP"
-    echo "ja_JP.SJIS SHIFT_JIS"
-    echo "ko_KR.EUC EUC-KR"
-    ;;
-  darwin*)
-    # Darwin 7.5 has nl_langinfo(CODESET), but sometimes its value is
-    # useless:
-    # - It returns the empty string when LANG is set to a locale of the
-    #   form ll_CC, although ll_CC/LC_CTYPE is a symlink to an UTF-8
-    #   LC_CTYPE file.
-    # - The environment variables LANG, LC_CTYPE, LC_ALL are not set by
-    #   the system; nl_langinfo(CODESET) returns "US-ASCII" in this case.
-    # - The documentation says:
-    #     "... all code that calls BSD system routines should ensure
-    #      that the const *char parameters of these routines are in UTF-8
-    #      encoding. All BSD system functions expect their string
-    #      parameters to be in UTF-8 encoding and nothing else."
-    #   It also says
-    #     "An additional caveat is that string parameters for files,
-    #      paths, and other file-system entities must be in canonical
-    #      UTF-8. In a canonical UTF-8 Unicode string, all decomposable
-    #      characters are decomposed ..."
-    #   but this is not true: You can pass non-decomposed UTF-8 strings
-    #   to file system functions, and it is the OS which will convert
-    #   them to decomposed UTF-8 before accessing the file system.
-    # - The Apple Terminal application displays UTF-8 by default.
-    # - However, other applications are free to use different encodings:
-    #   - xterm uses ISO-8859-1 by default.
-    #   - TextEdit uses MacRoman by default.
-    # We prefer UTF-8 over decomposed UTF-8-MAC because one should
-    # minimize the use of decomposed Unicode. Unfortunately, through the
-    # Darwin file system, decomposed UTF-8 strings are leaked into user
-    # space nevertheless.
-    # Then there are also the locales with encodings other than US-ASCII
-    # and UTF-8. These locales can be occasionally useful to users (e.g.
-    # when grepping through ISO-8859-1 encoded text files), when all their
-    # file names are in US-ASCII.
-    echo "ISO8859-1 ISO-8859-1"
-    echo "ISO8859-2 ISO-8859-2"
-    echo "ISO8859-4 ISO-8859-4"
-    echo "ISO8859-5 ISO-8859-5"
-    echo "ISO8859-7 ISO-8859-7"
-    echo "ISO8859-9 ISO-8859-9"
-    echo "ISO8859-13 ISO-8859-13"
-    echo "ISO8859-15 ISO-8859-15"
-    echo "KOI8-R KOI8-R"
-    echo "KOI8-U KOI8-U"
-    echo "CP866 CP866"
-    echo "CP949 CP949"
-    echo "CP1131 CP1131"
-    echo "CP1251 CP1251"
-    echo "eucCN GB2312"
-    echo "GB2312 GB2312"
-    echo "eucJP EUC-JP"
-    echo "eucKR EUC-KR"
-    echo "Big5 BIG5"
-    echo "Big5HKSCS BIG5-HKSCS"
-    echo "GBK GBK"
-    echo "GB18030 GB18030"
-    echo "SJIS SHIFT_JIS"
-    echo "ARMSCII-8 ARMSCII-8"
-    echo "PT154 PT154"
-    #echo "ISCII-DEV ?"
-    echo "* UTF-8"
-    ;;
-  beos* | haiku*)
-    # BeOS and Haiku have a single locale, and it has UTF-8 encoding.
-    echo "* UTF-8"
-    ;;
-  msdosdjgpp*)
-    # DJGPP 2.03 doesn't have nl_langinfo(CODESET); therefore
-    # localcharset.c falls back to using the full locale name
-    # from the environment variables.
-    echo "#"
-    echo "# The encodings given here may not all be correct."
-    echo "# If you find that the encoding given for your language and"
-    echo "# country is not the one your DOS machine actually uses, just"
-    echo "# correct it in this file, and send a mail to"
-    echo "# Juan Manuel Guerrero <juan.guerrero@gmx.de>"
-    echo "# and Bruno Haible <bruno@clisp.org>."
-    echo "#"
-    echo "C ASCII"
-    # ISO-8859-1 languages
-    echo "ca CP850"
-    echo "ca_ES CP850"
-    echo "da CP865"    # not CP850 ??
-    echo "da_DK CP865" # not CP850 ??
-    echo "de CP850"
-    echo "de_AT CP850"
-    echo "de_CH CP850"
-    echo "de_DE CP850"
-    echo "en CP850"
-    echo "en_AU CP850" # not CP437 ??
-    echo "en_CA CP850"
-    echo "en_GB CP850"
-    echo "en_NZ CP437"
-    echo "en_US CP437"
-    echo "en_ZA CP850" # not CP437 ??
-    echo "es CP850"
-    echo "es_AR CP850"
-    echo "es_BO CP850"
-    echo "es_CL CP850"
-    echo "es_CO CP850"
-    echo "es_CR CP850"
-    echo "es_CU CP850"
-    echo "es_DO CP850"
-    echo "es_EC CP850"
-    echo "es_ES CP850"
-    echo "es_GT CP850"
-    echo "es_HN CP850"
-    echo "es_MX CP850"
-    echo "es_NI CP850"
-    echo "es_PA CP850"
-    echo "es_PY CP850"
-    echo "es_PE CP850"
-    echo "es_SV CP850"
-    echo "es_UY CP850"
-    echo "es_VE CP850"
-    echo "et CP850"
-    echo "et_EE CP850"
-    echo "eu CP850"
-    echo "eu_ES CP850"
-    echo "fi CP850"
-    echo "fi_FI CP850"
-    echo "fr CP850"
-    echo "fr_BE CP850"
-    echo "fr_CA CP850"
-    echo "fr_CH CP850"
-    echo "fr_FR CP850"
-    echo "ga CP850"
-    echo "ga_IE CP850"
-    echo "gd CP850"
-    echo "gd_GB CP850"
-    echo "gl CP850"
-    echo "gl_ES CP850"
-    echo "id CP850"    # not CP437 ??
-    echo "id_ID CP850" # not CP437 ??
-    echo "is CP861"    # not CP850 ??
-    echo "is_IS CP861" # not CP850 ??
-    echo "it CP850"
-    echo "it_CH CP850"
-    echo "it_IT CP850"
-    echo "lt CP775"
-    echo "lt_LT CP775"
-    echo "lv CP775"
-    echo "lv_LV CP775"
-    echo "nb CP865"    # not CP850 ??
-    echo "nb_NO CP865" # not CP850 ??
-    echo "nl CP850"
-    echo "nl_BE CP850"
-    echo "nl_NL CP850"
-    echo "nn CP865"    # not CP850 ??
-    echo "nn_NO CP865" # not CP850 ??
-    echo "no CP865"    # not CP850 ??
-    echo "no_NO CP865" # not CP850 ??
-    echo "pt CP850"
-    echo "pt_BR CP850"
-    echo "pt_PT CP850"
-    echo "sv CP850"
-    echo "sv_SE CP850"
-    # ISO-8859-2 languages
-    echo "cs CP852"
-    echo "cs_CZ CP852"
-    echo "hr CP852"
-    echo "hr_HR CP852"
-    echo "hu CP852"
-    echo "hu_HU CP852"
-    echo "pl CP852"
-    echo "pl_PL CP852"
-    echo "ro CP852"
-    echo "ro_RO CP852"
-    echo "sk CP852"
-    echo "sk_SK CP852"
-    echo "sl CP852"
-    echo "sl_SI CP852"
-    echo "sq CP852"
-    echo "sq_AL CP852"
-    echo "sr CP852"    # CP852 or CP866 or CP855 ??
-    echo "sr_CS CP852" # CP852 or CP866 or CP855 ??
-    echo "sr_YU CP852" # CP852 or CP866 or CP855 ??
-    # ISO-8859-3 languages
-    echo "mt CP850"
-    echo "mt_MT CP850"
-    # ISO-8859-5 languages
-    echo "be CP866"
-    echo "be_BE CP866"
-    echo "bg CP866"    # not CP855 ??
-    echo "bg_BG CP866" # not CP855 ??
-    echo "mk CP866"    # not CP855 ??
-    echo "mk_MK CP866" # not CP855 ??
-    echo "ru CP866"
-    echo "ru_RU CP866"
-    echo "uk CP1125"
-    echo "uk_UA CP1125"
-    # ISO-8859-6 languages
-    echo "ar CP864"
-    echo "ar_AE CP864"
-    echo "ar_DZ CP864"
-    echo "ar_EG CP864"
-    echo "ar_IQ CP864"
-    echo "ar_IR CP864"
-    echo "ar_JO CP864"
-    echo "ar_KW CP864"
-    echo "ar_MA CP864"
-    echo "ar_OM CP864"
-    echo "ar_QA CP864"
-    echo "ar_SA CP864"
-    echo "ar_SY CP864"
-    # ISO-8859-7 languages
-    echo "el CP869"
-    echo "el_GR CP869"
-    # ISO-8859-8 languages
-    echo "he CP862"
-    echo "he_IL CP862"
-    # ISO-8859-9 languages
-    echo "tr CP857"
-    echo "tr_TR CP857"
-    # Japanese
-    echo "ja CP932"
-    echo "ja_JP CP932"
-    # Chinese
-    echo "zh_CN GBK"
-    echo "zh_TW CP950" # not CP938 ??
-    # Korean
-    echo "kr CP949"    # not CP934 ??
-    echo "kr_KR CP949" # not CP934 ??
-    # Thai
-    echo "th CP874"
-    echo "th_TH CP874"
-    # Other
-    echo "eo CP850"
-    echo "eo_EO CP850"
-    ;;
-esac
diff -Nuar groff-1.22.3.old/src/libs/gnulib/lib/intprops.h groff-1.22.3/src/libs/gnulib/lib/intprops.h
--- groff-1.22.3.old/src/libs/gnulib/lib/intprops.h	2014-11-04 10:38:35.629518946 +0200
+++ groff-1.22.3/src/libs/gnulib/lib/intprops.h	1970-01-01 02:00:00.000000000 +0200
@@ -1,320 +0,0 @@
-/* intprops.h -- properties of integer types
-
-   Copyright (C) 2001-2005, 2009-2014 Free Software Foundation, Inc.
-
-   This program is free software: you can redistribute it and/or modify
-   it under the terms of the GNU General Public License as published by
-   the Free Software Foundation; either version 3 of the License, or
-   (at your option) any later version.
-
-   This program is distributed in the hope that it will be useful,
-   but WITHOUT ANY WARRANTY; without even the implied warranty of
-   MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
-   GNU General Public License for more details.
-
-   You should have received a copy of the GNU General Public License
-   along with this program.  If not, see <http://www.gnu.org/licenses/>.  */
-
-/* Written by Paul Eggert.  */
-
-#ifndef _GL_INTPROPS_H
-#define _GL_INTPROPS_H
-
-#include <limits.h>
-
-/* Return an integer value, converted to the same type as the integer
-   expression E after integer type promotion.  V is the unconverted value.  */
-#define _GL_INT_CONVERT(e, v) (0 * (e) + (v))
-
-/* Act like _GL_INT_CONVERT (E, -V) but work around a bug in IRIX 6.5 cc; see
-   <http://lists.gnu.org/archive/html/bug-gnulib/2011-05/msg00406.html>.  */
-#define _GL_INT_NEGATE_CONVERT(e, v) (0 * (e) - (v))
-
-/* The extra casts in the following macros work around compiler bugs,
-   e.g., in Cray C 5.0.3.0.  */
-
-/* True if the arithmetic type T is an integer type.  bool counts as
-   an integer.  */
-#define TYPE_IS_INTEGER(t) ((t) 1.5 == 1)
-
-/* True if negative values of the signed integer type T use two's
-   complement, ones' complement, or signed magnitude representation,
-   respectively.  Much GNU code assumes two's complement, but some
-   people like to be portable to all possible C hosts.  */
-#define TYPE_TWOS_COMPLEMENT(t) ((t) ~ (t) 0 == (t) -1)
-#define TYPE_ONES_COMPLEMENT(t) ((t) ~ (t) 0 == 0)
-#define TYPE_SIGNED_MAGNITUDE(t) ((t) ~ (t) 0 < (t) -1)
-
-/* True if the signed integer expression E uses two's complement.  */
-#define _GL_INT_TWOS_COMPLEMENT(e) (~ _GL_INT_CONVERT (e, 0) == -1)
-
-/* True if the arithmetic type T is signed.  */
-#define TYPE_SIGNED(t) (! ((t) 0 < (t) -1))
-
-/* Return 1 if the integer expression E, after integer promotion, has
-   a signed type.  */
-#define _GL_INT_SIGNED(e) (_GL_INT_NEGATE_CONVERT (e, 1) < 0)
-
-
-/* Minimum and maximum values for integer types and expressions.  These
-   macros have undefined behavior if T is signed and has padding bits.
-   If this is a problem for you, please let us know how to fix it for
-   your host.  */
-
-/* The maximum and minimum values for the integer type T.  */
-#define TYPE_MINIMUM(t)                                                 \
-  ((t) (! TYPE_SIGNED (t)                                               \
-        ? (t) 0                                                         \
-        : TYPE_SIGNED_MAGNITUDE (t)                                     \
-        ? ~ (t) 0                                                       \
-        : ~ TYPE_MAXIMUM (t)))
-#define TYPE_MAXIMUM(t)                                                 \
-  ((t) (! TYPE_SIGNED (t)                                               \
-        ? (t) -1                                                        \
-        : ((((t) 1 << (sizeof (t) * CHAR_BIT - 2)) - 1) * 2 + 1)))
-
-/* The maximum and minimum values for the type of the expression E,
-   after integer promotion.  E should not have side effects.  */
-#define _GL_INT_MINIMUM(e)                                              \
-  (_GL_INT_SIGNED (e)                                                   \
-   ? - _GL_INT_TWOS_COMPLEMENT (e) - _GL_SIGNED_INT_MAXIMUM (e)         \
-   : _GL_INT_CONVERT (e, 0))
-#define _GL_INT_MAXIMUM(e)                                              \
-  (_GL_INT_SIGNED (e)                                                   \
-   ? _GL_SIGNED_INT_MAXIMUM (e)                                         \
-   : _GL_INT_NEGATE_CONVERT (e, 1))
-#define _GL_SIGNED_INT_MAXIMUM(e)                                       \
-  (((_GL_INT_CONVERT (e, 1) << (sizeof ((e) + 0) * CHAR_BIT - 2)) - 1) * 2 + 1)
-
-
-/* Return 1 if the __typeof__ keyword works.  This could be done by
-   'configure', but for now it's easier to do it by hand.  */
-#if (2 <= __GNUC__ || defined __IBM__TYPEOF__ \
-     || (0x5110 <= __SUNPRO_C && !__STDC__))
-# define _GL_HAVE___TYPEOF__ 1
-#else
-# define _GL_HAVE___TYPEOF__ 0
-#endif
-
-/* Return 1 if the integer type or expression T might be signed.  Return 0
-   if it is definitely unsigned.  This macro does not evaluate its argument,
-   and expands to an integer constant expression.  */
-#if _GL_HAVE___TYPEOF__
-# define _GL_SIGNED_TYPE_OR_EXPR(t) TYPE_SIGNED (__typeof__ (t))
-#else
-# define _GL_SIGNED_TYPE_OR_EXPR(t) 1
-#endif
-
-/* Bound on length of the string representing an unsigned integer
-   value representable in B bits.  log10 (2.0) < 146/485.  The
-   smallest value of B where this bound is not tight is 2621.  */
-#define INT_BITS_STRLEN_BOUND(b) (((b) * 146 + 484) / 485)
-
-/* Bound on length of the string representing an integer type or expression T.
-   Subtract 1 for the sign bit if T is signed, and then add 1 more for
-   a minus sign if needed.
-
-   Because _GL_SIGNED_TYPE_OR_EXPR sometimes returns 0 when its argument is
-   signed, this macro may overestimate the true bound by one byte when
-   applied to unsigned types of size 2, 4, 16, ... bytes.  */
-#define INT_STRLEN_BOUND(t)                                     \
-  (INT_BITS_STRLEN_BOUND (sizeof (t) * CHAR_BIT                 \
-                          - _GL_SIGNED_TYPE_OR_EXPR (t))        \
-   + _GL_SIGNED_TYPE_OR_EXPR (t))
-
-/* Bound on buffer size needed to represent an integer type or expression T,
-   including the terminating null.  */
-#define INT_BUFSIZE_BOUND(t) (INT_STRLEN_BOUND (t) + 1)
-
-
-/* Range overflow checks.
-
-   The INT_<op>_RANGE_OVERFLOW macros return 1 if the corresponding C
-   operators might not yield numerically correct answers due to
-   arithmetic overflow.  They do not rely on undefined or
-   implementation-defined behavior.  Their implementations are simple
-   and straightforward, but they are a bit harder to use than the
-   INT_<op>_OVERFLOW macros described below.
-
-   Example usage:
-
-     long int i = ...;
-     long int j = ...;
-     if (INT_MULTIPLY_RANGE_OVERFLOW (i, j, LONG_MIN, LONG_MAX))
-       printf ("multiply would overflow");
-     else
-       printf ("product is %ld", i * j);
-
-   Restrictions on *_RANGE_OVERFLOW macros:
-
-   These macros do not check for all possible numerical problems or
-   undefined or unspecified behavior: they do not check for division
-   by zero, for bad shift counts, or for shifting negative numbers.
-
-   These macros may evaluate their arguments zero or multiple times,
-   so the arguments should not have side effects.  The arithmetic
-   arguments (including the MIN and MAX arguments) must be of the same
-   integer type after the usual arithmetic conversions, and the type
-   must have minimum value MIN and maximum MAX.  Unsigned types should
-   use a zero MIN of the proper type.
-
-   These macros are tuned for constant MIN and MAX.  For commutative
-   operations such as A + B, they are also tuned for constant B.  */
-
-/* Return 1 if A + B would overflow in [MIN,MAX] arithmetic.
-   See above for restrictions.  */
-#define INT_ADD_RANGE_OVERFLOW(a, b, min, max)          \
-  ((b) < 0                                              \
-   ? (a) < (min) - (b)                                  \
-   : (max) - (b) < (a))
-
-/* Return 1 if A - B would overflow in [MIN,MAX] arithmetic.
-   See above for restrictions.  */
-#define INT_SUBTRACT_RANGE_OVERFLOW(a, b, min, max)     \
-  ((b) < 0                                              \
-   ? (max) + (b) < (a)                                  \
-   : (a) < (min) + (b))
-
-/* Return 1 if - A would overflow in [MIN,MAX] arithmetic.
-   See above for restrictions.  */
-#define INT_NEGATE_RANGE_OVERFLOW(a, min, max)          \
-  ((min) < 0                                            \
-   ? (a) < - (max)                                      \
-   : 0 < (a))
-
-/* Return 1 if A * B would overflow in [MIN,MAX] arithmetic.
-   See above for restrictions.  Avoid && and || as they tickle
-   bugs in Sun C 5.11 2010/08/13 and other compilers; see
-   <http://lists.gnu.org/archive/html/bug-gnulib/2011-05/msg00401.html>.  */
-#define INT_MULTIPLY_RANGE_OVERFLOW(a, b, min, max)     \
-  ((b) < 0                                              \
-   ? ((a) < 0                                           \
-      ? (a) < (max) / (b)                               \
-      : (b) == -1                                       \
-      ? 0                                               \
-      : (min) / (b) < (a))                              \
-   : (b) == 0                                           \
-   ? 0                                                  \
-   : ((a) < 0                                           \
-      ? (a) < (min) / (b)                               \
-      : (max) / (b) < (a)))
-
-/* Return 1 if A / B would overflow in [MIN,MAX] arithmetic.
-   See above for restrictions.  Do not check for division by zero.  */
-#define INT_DIVIDE_RANGE_OVERFLOW(a, b, min, max)       \
-  ((min) < 0 && (b) == -1 && (a) < - (max))
-
-/* Return 1 if A % B would overflow in [MIN,MAX] arithmetic.
-   See above for restrictions.  Do not check for division by zero.
-   Mathematically, % should never overflow, but on x86-like hosts
-   INT_MIN % -1 traps, and the C standard permits this, so treat this
-   as an overflow too.  */
-#define INT_REMAINDER_RANGE_OVERFLOW(a, b, min, max)    \
-  INT_DIVIDE_RANGE_OVERFLOW (a, b, min, max)
-
-/* Return 1 if A << B would overflow in [MIN,MAX] arithmetic.
-   See above for restrictions.  Here, MIN and MAX are for A only, and B need
-   not be of the same type as the other arguments.  The C standard says that
-   behavior is undefined for shifts unless 0 <= B < wordwidth, and that when
-   A is negative then A << B has undefined behavior and A >> B has
-   implementation-defined behavior, but do not check these other
-   restrictions.  */
-#define INT_LEFT_SHIFT_RANGE_OVERFLOW(a, b, min, max)   \
-  ((a) < 0                                              \
-   ? (a) < (min) >> (b)                                 \
-   : (max) >> (b) < (a))
-
-
-/* The _GL*_OVERFLOW macros have the same restrictions as the
-   *_RANGE_OVERFLOW macros, except that they do not assume that operands
-   (e.g., A and B) have the same type as MIN and MAX.  Instead, they assume
-   that the result (e.g., A + B) has that type.  */
-#define _GL_ADD_OVERFLOW(a, b, min, max)                                \
-  ((min) < 0 ? INT_ADD_RANGE_OVERFLOW (a, b, min, max)                  \
-   : (a) < 0 ? (b) <= (a) + (b)                                         \
-   : (b) < 0 ? (a) <= (a) + (b)                                         \
-   : (a) + (b) < (b))
-#define _GL_SUBTRACT_OVERFLOW(a, b, min, max)                           \
-  ((min) < 0 ? INT_SUBTRACT_RANGE_OVERFLOW (a, b, min, max)             \
-   : (a) < 0 ? 1                                                        \
-   : (b) < 0 ? (a) - (b) <= (a)                                         \
-   : (a) < (b))
-#define _GL_MULTIPLY_OVERFLOW(a, b, min, max)                           \
-  (((min) == 0 && (((a) < 0 && 0 < (b)) || ((b) < 0 && 0 < (a))))       \
-   || INT_MULTIPLY_RANGE_OVERFLOW (a, b, min, max))
-#define _GL_DIVIDE_OVERFLOW(a, b, min, max)                             \
-  ((min) < 0 ? (b) == _GL_INT_NEGATE_CONVERT (min, 1) && (a) < - (max)  \
-   : (a) < 0 ? (b) <= (a) + (b) - 1                                     \
-   : (b) < 0 && (a) + (b) <= (a))
-#define _GL_REMAINDER_OVERFLOW(a, b, min, max)                          \
-  ((min) < 0 ? (b) == _GL_INT_NEGATE_CONVERT (min, 1) && (a) < - (max)  \
-   : (a) < 0 ? (a) % (b) != ((max) - (b) + 1) % (b)                     \
-   : (b) < 0 && ! _GL_UNSIGNED_NEG_MULTIPLE (a, b, max))
-
-/* Return a nonzero value if A is a mathematical multiple of B, where
-   A is unsigned, B is negative, and MAX is the maximum value of A's
-   type.  A's type must be the same as (A % B)'s type.  Normally (A %
-   -B == 0) suffices, but things get tricky if -B would overflow.  */
-#define _GL_UNSIGNED_NEG_MULTIPLE(a, b, max)                            \
-  (((b) < -_GL_SIGNED_INT_MAXIMUM (b)                                   \
-    ? (_GL_SIGNED_INT_MAXIMUM (b) == (max)                              \
-       ? (a)                                                            \
-       : (a) % (_GL_INT_CONVERT (a, _GL_SIGNED_INT_MAXIMUM (b)) + 1))   \
-    : (a) % - (b))                                                      \
-   == 0)
-
-
-/* Integer overflow checks.
-
-   The INT_<op>_OVERFLOW macros return 1 if the corresponding C operators
-   might not yield numerically correct answers due to arithmetic overflow.
-   They work correctly on all known practical hosts, and do not rely
-   on undefined behavior due to signed arithmetic overflow.
-
-   Example usage:
-
-     long int i = ...;
-     long int j = ...;
-     if (INT_MULTIPLY_OVERFLOW (i, j))
-       printf ("multiply would overflow");
-     else
-       printf ("product is %ld", i * j);
-
-   These macros do not check for all possible numerical problems or
-   undefined or unspecified behavior: they do not check for division
-   by zero, for bad shift counts, or for shifting negative numbers.
-
-   These macros may evaluate their arguments zero or multiple times, so the
-   arguments should not have side effects.
-
-   These macros are tuned for their last argument being a constant.
-
-   Return 1 if the integer expressions A * B, A - B, -A, A * B, A / B,
-   A % B, and A << B would overflow, respectively.  */
-
-#define INT_ADD_OVERFLOW(a, b) \
-  _GL_BINARY_OP_OVERFLOW (a, b, _GL_ADD_OVERFLOW)
-#define INT_SUBTRACT_OVERFLOW(a, b) \
-  _GL_BINARY_OP_OVERFLOW (a, b, _GL_SUBTRACT_OVERFLOW)
-#define INT_NEGATE_OVERFLOW(a) \
-  INT_NEGATE_RANGE_OVERFLOW (a, _GL_INT_MINIMUM (a), _GL_INT_MAXIMUM (a))
-#define INT_MULTIPLY_OVERFLOW(a, b) \
-  _GL_BINARY_OP_OVERFLOW (a, b, _GL_MULTIPLY_OVERFLOW)
-#define INT_DIVIDE_OVERFLOW(a, b) \
-  _GL_BINARY_OP_OVERFLOW (a, b, _GL_DIVIDE_OVERFLOW)
-#define INT_REMAINDER_OVERFLOW(a, b) \
-  _GL_BINARY_OP_OVERFLOW (a, b, _GL_REMAINDER_OVERFLOW)
-#define INT_LEFT_SHIFT_OVERFLOW(a, b) \
-  INT_LEFT_SHIFT_RANGE_OVERFLOW (a, b, \
-                                 _GL_INT_MINIMUM (a), _GL_INT_MAXIMUM (a))
-
-/* Return 1 if the expression A <op> B would overflow,
-   where OP_RESULT_OVERFLOW (A, B, MIN, MAX) does the actual test,
-   assuming MIN and MAX are the minimum and maximum for the result type.
-   Arguments should be free of side effects.  */
-#define _GL_BINARY_OP_OVERFLOW(a, b, op_result_overflow)        \
-  op_result_overflow (a, b,                                     \
-                      _GL_INT_MINIMUM (0 * (b) + (a)),          \
-                      _GL_INT_MAXIMUM (0 * (b) + (a)))
-
-#endif /* _GL_INTPROPS_H */
diff -Nuar groff-1.22.3.old/src/libs/gnulib/lib/inttypes.in.h groff-1.22.3/src/libs/gnulib/lib/inttypes.in.h
--- groff-1.22.3.old/src/libs/gnulib/lib/inttypes.in.h	2014-11-04 10:38:35.629518946 +0200
+++ groff-1.22.3/src/libs/gnulib/lib/inttypes.in.h	1970-01-01 02:00:00.000000000 +0200
@@ -1,1130 +0,0 @@
-/* Copyright (C) 2006-2014 Free Software Foundation, Inc.
-   Written by Paul Eggert, Bruno Haible, Derek Price.
-   This file is part of gnulib.
-
-   This program is free software: you can redistribute it and/or modify
-   it under the terms of the GNU General Public License as published by
-   the Free Software Foundation; either version 3 of the License, or
-   (at your option) any later version.
-
-   This program is distributed in the hope that it will be useful,
-   but WITHOUT ANY WARRANTY; without even the implied warranty of
-   MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
-   GNU General Public License for more details.
-
-   You should have received a copy of the GNU General Public License
-   along with this program.  If not, see <http://www.gnu.org/licenses/>.  */
-
-/*
- * ISO C 99 <inttypes.h> for platforms that lack it.
- * <http://www.opengroup.org/susv3xbd/inttypes.h.html>
- */
-
-#if __GNUC__ >= 3
-@PRAGMA_SYSTEM_HEADER@
-#endif
-@PRAGMA_COLUMNS@
-
-/* Include the original <inttypes.h> if it exists, and if this file
-   has not been included yet or if this file includes gnulib stdint.h
-   which in turn includes this file.
-   The include_next requires a split double-inclusion guard.  */
-#if ! defined INTTYPES_H || defined _GL_JUST_INCLUDE_SYSTEM_INTTYPES_H
-# if @HAVE_INTTYPES_H@
-
-   /* Some pre-C++11 <stdint.h> implementations need this.  */
-#  if defined __cplusplus && ! defined __STDC_FORMAT_MACROS
-#   define __STDC_FORMAT_MACROS 1
-#  endif
-
-#  @INCLUDE_NEXT@ @NEXT_INTTYPES_H@
-# endif
-#endif
-
-#if ! defined INTTYPES_H && ! defined _GL_JUST_INCLUDE_SYSTEM_INTTYPES_H
-#define INTTYPES_H
-
-/* Include <stdint.h> or the gnulib replacement.
-   But avoid namespace pollution on glibc systems.  */
-#ifndef __GLIBC__
-# include <stdint.h>
-#endif
-/* Get CHAR_BIT.  */
-#include <limits.h>
-
-#if !(INT_MIN == INT32_MIN && INT_MAX == INT32_MAX)
-# error "This file assumes that 'int' has exactly 32 bits. Please report your platform and compiler to <bug-gnulib@gnu.org>."
-#endif
-
-/* The definitions of _GL_FUNCDECL_RPL etc. are copied here.  */
-
-/* The definition of _GL_ARG_NONNULL is copied here.  */
-
-/* The definition of _GL_WARN_ON_USE is copied here.  */
-
-/* 7.8.1 Macros for format specifiers */
-
-#if defined _TNS_R_TARGET
-   /* Tandem NonStop R series and compatible platforms released before
-      July 2005 support %Ld but not %lld.  */
-# define _LONG_LONG_FORMAT_PREFIX "L"
-#else
-# define _LONG_LONG_FORMAT_PREFIX "ll"
-#endif
-
-#if !defined PRId8 || @PRI_MACROS_BROKEN@
-# undef PRId8
-# ifdef INT8_MAX
-#  define PRId8 "d"
-# endif
-#endif
-#if !defined PRIi8 || @PRI_MACROS_BROKEN@
-# undef PRIi8
-# ifdef INT8_MAX
-#  define PRIi8 "i"
-# endif
-#endif
-#if !defined PRIo8 || @PRI_MACROS_BROKEN@
-# undef PRIo8
-# ifdef UINT8_MAX
-#  define PRIo8 "o"
-# endif
-#endif
-#if !defined PRIu8 || @PRI_MACROS_BROKEN@
-# undef PRIu8
-# ifdef UINT8_MAX
-#  define PRIu8 "u"
-# endif
-#endif
-#if !defined PRIx8 || @PRI_MACROS_BROKEN@
-# undef PRIx8
-# ifdef UINT8_MAX
-#  define PRIx8 "x"
-# endif
-#endif
-#if !defined PRIX8 || @PRI_MACROS_BROKEN@
-# undef PRIX8
-# ifdef UINT8_MAX
-#  define PRIX8 "X"
-# endif
-#endif
-#if !defined PRId16 || @PRI_MACROS_BROKEN@
-# undef PRId16
-# ifdef INT16_MAX
-#  define PRId16 "d"
-# endif
-#endif
-#if !defined PRIi16 || @PRI_MACROS_BROKEN@
-# undef PRIi16
-# ifdef INT16_MAX
-#  define PRIi16 "i"
-# endif
-#endif
-#if !defined PRIo16 || @PRI_MACROS_BROKEN@
-# undef PRIo16
-# ifdef UINT16_MAX
-#  define PRIo16 "o"
-# endif
-#endif
-#if !defined PRIu16 || @PRI_MACROS_BROKEN@
-# undef PRIu16
-# ifdef UINT16_MAX
-#  define PRIu16 "u"
-# endif
-#endif
-#if !defined PRIx16 || @PRI_MACROS_BROKEN@
-# undef PRIx16
-# ifdef UINT16_MAX
-#  define PRIx16 "x"
-# endif
-#endif
-#if !defined PRIX16 || @PRI_MACROS_BROKEN@
-# undef PRIX16
-# ifdef UINT16_MAX
-#  define PRIX16 "X"
-# endif
-#endif
-#if !defined PRId32 || @PRI_MACROS_BROKEN@
-# undef PRId32
-# ifdef INT32_MAX
-#  define PRId32 "d"
-# endif
-#endif
-#if !defined PRIi32 || @PRI_MACROS_BROKEN@
-# undef PRIi32
-# ifdef INT32_MAX
-#  define PRIi32 "i"
-# endif
-#endif
-#if !defined PRIo32 || @PRI_MACROS_BROKEN@
-# undef PRIo32
-# ifdef UINT32_MAX
-#  define PRIo32 "o"
-# endif
-#endif
-#if !defined PRIu32 || @PRI_MACROS_BROKEN@
-# undef PRIu32
-# ifdef UINT32_MAX
-#  define PRIu32 "u"
-# endif
-#endif
-#if !defined PRIx32 || @PRI_MACROS_BROKEN@
-# undef PRIx32
-# ifdef UINT32_MAX
-#  define PRIx32 "x"
-# endif
-#endif
-#if !defined PRIX32 || @PRI_MACROS_BROKEN@
-# undef PRIX32
-# ifdef UINT32_MAX
-#  define PRIX32 "X"
-# endif
-#endif
-#ifdef INT64_MAX
-# if (@APPLE_UNIVERSAL_BUILD@ ? defined _LP64 : @INT64_MAX_EQ_LONG_MAX@)
-#  define _PRI64_PREFIX "l"
-# elif defined _MSC_VER || defined __MINGW32__
-#  define _PRI64_PREFIX "I64"
-# elif @HAVE_LONG_LONG_INT@ && LONG_MAX >> 30 == 1
-#  define _PRI64_PREFIX _LONG_LONG_FORMAT_PREFIX
-# endif
-# if !defined PRId64 || @PRI_MACROS_BROKEN@
-#  undef PRId64
-#  define PRId64 _PRI64_PREFIX "d"
-# endif
-# if !defined PRIi64 || @PRI_MACROS_BROKEN@
-#  undef PRIi64
-#  define PRIi64 _PRI64_PREFIX "i"
-# endif
-#endif
-#ifdef UINT64_MAX
-# if (@APPLE_UNIVERSAL_BUILD@ ? defined _LP64 : @UINT64_MAX_EQ_ULONG_MAX@)
-#  define _PRIu64_PREFIX "l"
-# elif defined _MSC_VER || defined __MINGW32__
-#  define _PRIu64_PREFIX "I64"
-# elif @HAVE_UNSIGNED_LONG_LONG_INT@ && ULONG_MAX >> 31 == 1
-#  define _PRIu64_PREFIX _LONG_LONG_FORMAT_PREFIX
-# endif
-# if !defined PRIo64 || @PRI_MACROS_BROKEN@
-#  undef PRIo64
-#  define PRIo64 _PRIu64_PREFIX "o"
-# endif
-# if !defined PRIu64 || @PRI_MACROS_BROKEN@
-#  undef PRIu64
-#  define PRIu64 _PRIu64_PREFIX "u"
-# endif
-# if !defined PRIx64 || @PRI_MACROS_BROKEN@
-#  undef PRIx64
-#  define PRIx64 _PRIu64_PREFIX "x"
-# endif
-# if !defined PRIX64 || @PRI_MACROS_BROKEN@
-#  undef PRIX64
-#  define PRIX64 _PRIu64_PREFIX "X"
-# endif
-#endif
-
-#if !defined PRIdLEAST8 || @PRI_MACROS_BROKEN@
-# undef PRIdLEAST8
-# define PRIdLEAST8 "d"
-#endif
-#if !defined PRIiLEAST8 || @PRI_MACROS_BROKEN@
-# undef PRIiLEAST8
-# define PRIiLEAST8 "i"
-#endif
-#if !defined PRIoLEAST8 || @PRI_MACROS_BROKEN@
-# undef PRIoLEAST8
-# define PRIoLEAST8 "o"
-#endif
-#if !defined PRIuLEAST8 || @PRI_MACROS_BROKEN@
-# undef PRIuLEAST8
-# define PRIuLEAST8 "u"
-#endif
-#if !defined PRIxLEAST8 || @PRI_MACROS_BROKEN@
-# undef PRIxLEAST8
-# define PRIxLEAST8 "x"
-#endif
-#if !defined PRIXLEAST8 || @PRI_MACROS_BROKEN@
-# undef PRIXLEAST8
-# define PRIXLEAST8 "X"
-#endif
-#if !defined PRIdLEAST16 || @PRI_MACROS_BROKEN@
-# undef PRIdLEAST16
-# define PRIdLEAST16 "d"
-#endif
-#if !defined PRIiLEAST16 || @PRI_MACROS_BROKEN@
-# undef PRIiLEAST16
-# define PRIiLEAST16 "i"
-#endif
-#if !defined PRIoLEAST16 || @PRI_MACROS_BROKEN@
-# undef PRIoLEAST16
-# define PRIoLEAST16 "o"
-#endif
-#if !defined PRIuLEAST16 || @PRI_MACROS_BROKEN@
-# undef PRIuLEAST16
-# define PRIuLEAST16 "u"
-#endif
-#if !defined PRIxLEAST16 || @PRI_MACROS_BROKEN@
-# undef PRIxLEAST16
-# define PRIxLEAST16 "x"
-#endif
-#if !defined PRIXLEAST16 || @PRI_MACROS_BROKEN@
-# undef PRIXLEAST16
-# define PRIXLEAST16 "X"
-#endif
-#if !defined PRIdLEAST32 || @PRI_MACROS_BROKEN@
-# undef PRIdLEAST32
-# define PRIdLEAST32 "d"
-#endif
-#if !defined PRIiLEAST32 || @PRI_MACROS_BROKEN@
-# undef PRIiLEAST32
-# define PRIiLEAST32 "i"
-#endif
-#if !defined PRIoLEAST32 || @PRI_MACROS_BROKEN@
-# undef PRIoLEAST32
-# define PRIoLEAST32 "o"
-#endif
-#if !defined PRIuLEAST32 || @PRI_MACROS_BROKEN@
-# undef PRIuLEAST32
-# define PRIuLEAST32 "u"
-#endif
-#if !defined PRIxLEAST32 || @PRI_MACROS_BROKEN@
-# undef PRIxLEAST32
-# define PRIxLEAST32 "x"
-#endif
-#if !defined PRIXLEAST32 || @PRI_MACROS_BROKEN@
-# undef PRIXLEAST32
-# define PRIXLEAST32 "X"
-#endif
-#ifdef INT64_MAX
-# if !defined PRIdLEAST64 || @PRI_MACROS_BROKEN@
-#  undef PRIdLEAST64
-#  define PRIdLEAST64 PRId64
-# endif
-# if !defined PRIiLEAST64 || @PRI_MACROS_BROKEN@
-#  undef PRIiLEAST64
-#  define PRIiLEAST64 PRIi64
-# endif
-#endif
-#ifdef UINT64_MAX
-# if !defined PRIoLEAST64 || @PRI_MACROS_BROKEN@
-#  undef PRIoLEAST64
-#  define PRIoLEAST64 PRIo64
-# endif
-# if !defined PRIuLEAST64 || @PRI_MACROS_BROKEN@
-#  undef PRIuLEAST64
-#  define PRIuLEAST64 PRIu64
-# endif
-# if !defined PRIxLEAST64 || @PRI_MACROS_BROKEN@
-#  undef PRIxLEAST64
-#  define PRIxLEAST64 PRIx64
-# endif
-# if !defined PRIXLEAST64 || @PRI_MACROS_BROKEN@
-#  undef PRIXLEAST64
-#  define PRIXLEAST64 PRIX64
-# endif
-#endif
-
-#if !defined PRIdFAST8 || @PRI_MACROS_BROKEN@
-# undef PRIdFAST8
-# if INT_FAST8_MAX > INT32_MAX
-#  define PRIdFAST8 PRId64
-# else
-#  define PRIdFAST8 "d"
-# endif
-#endif
-#if !defined PRIiFAST8 || @PRI_MACROS_BROKEN@
-# undef PRIiFAST8
-# if INT_FAST8_MAX > INT32_MAX
-#  define PRIiFAST8 PRIi64
-# else
-#  define PRIiFAST8 "i"
-# endif
-#endif
-#if !defined PRIoFAST8 || @PRI_MACROS_BROKEN@
-# undef PRIoFAST8
-# if UINT_FAST8_MAX > UINT32_MAX
-#  define PRIoFAST8 PRIo64
-# else
-#  define PRIoFAST8 "o"
-# endif
-#endif
-#if !defined PRIuFAST8 || @PRI_MACROS_BROKEN@
-# undef PRIuFAST8
-# if UINT_FAST8_MAX > UINT32_MAX
-#  define PRIuFAST8 PRIu64
-# else
-#  define PRIuFAST8 "u"
-# endif
-#endif
-#if !defined PRIxFAST8 || @PRI_MACROS_BROKEN@
-# undef PRIxFAST8
-# if UINT_FAST8_MAX > UINT32_MAX
-#  define PRIxFAST8 PRIx64
-# else
-#  define PRIxFAST8 "x"
-# endif
-#endif
-#if !defined PRIXFAST8 || @PRI_MACROS_BROKEN@
-# undef PRIXFAST8
-# if UINT_FAST8_MAX > UINT32_MAX
-#  define PRIXFAST8 PRIX64
-# else
-#  define PRIXFAST8 "X"
-# endif
-#endif
-#if !defined PRIdFAST16 || @PRI_MACROS_BROKEN@
-# undef PRIdFAST16
-# if INT_FAST16_MAX > INT32_MAX
-#  define PRIdFAST16 PRId64
-# else
-#  define PRIdFAST16 "d"
-# endif
-#endif
-#if !defined PRIiFAST16 || @PRI_MACROS_BROKEN@
-# undef PRIiFAST16
-# if INT_FAST16_MAX > INT32_MAX
-#  define PRIiFAST16 PRIi64
-# else
-#  define PRIiFAST16 "i"
-# endif
-#endif
-#if !defined PRIoFAST16 || @PRI_MACROS_BROKEN@
-# undef PRIoFAST16
-# if UINT_FAST16_MAX > UINT32_MAX
-#  define PRIoFAST16 PRIo64
-# else
-#  define PRIoFAST16 "o"
-# endif
-#endif
-#if !defined PRIuFAST16 || @PRI_MACROS_BROKEN@
-# undef PRIuFAST16
-# if UINT_FAST16_MAX > UINT32_MAX
-#  define PRIuFAST16 PRIu64
-# else
-#  define PRIuFAST16 "u"
-# endif
-#endif
-#if !defined PRIxFAST16 || @PRI_MACROS_BROKEN@
-# undef PRIxFAST16
-# if UINT_FAST16_MAX > UINT32_MAX
-#  define PRIxFAST16 PRIx64
-# else
-#  define PRIxFAST16 "x"
-# endif
-#endif
-#if !defined PRIXFAST16 || @PRI_MACROS_BROKEN@
-# undef PRIXFAST16
-# if UINT_FAST16_MAX > UINT32_MAX
-#  define PRIXFAST16 PRIX64
-# else
-#  define PRIXFAST16 "X"
-# endif
-#endif
-#if !defined PRIdFAST32 || @PRI_MACROS_BROKEN@
-# undef PRIdFAST32
-# if INT_FAST32_MAX > INT32_MAX
-#  define PRIdFAST32 PRId64
-# else
-#  define PRIdFAST32 "d"
-# endif
-#endif
-#if !defined PRIiFAST32 || @PRI_MACROS_BROKEN@
-# undef PRIiFAST32
-# if INT_FAST32_MAX > INT32_MAX
-#  define PRIiFAST32 PRIi64
-# else
-#  define PRIiFAST32 "i"
-# endif
-#endif
-#if !defined PRIoFAST32 || @PRI_MACROS_BROKEN@
-# undef PRIoFAST32
-# if UINT_FAST32_MAX > UINT32_MAX
-#  define PRIoFAST32 PRIo64
-# else
-#  define PRIoFAST32 "o"
-# endif
-#endif
-#if !defined PRIuFAST32 || @PRI_MACROS_BROKEN@
-# undef PRIuFAST32
-# if UINT_FAST32_MAX > UINT32_MAX
-#  define PRIuFAST32 PRIu64
-# else
-#  define PRIuFAST32 "u"
-# endif
-#endif
-#if !defined PRIxFAST32 || @PRI_MACROS_BROKEN@
-# undef PRIxFAST32
-# if UINT_FAST32_MAX > UINT32_MAX
-#  define PRIxFAST32 PRIx64
-# else
-#  define PRIxFAST32 "x"
-# endif
-#endif
-#if !defined PRIXFAST32 || @PRI_MACROS_BROKEN@
-# undef PRIXFAST32
-# if UINT_FAST32_MAX > UINT32_MAX
-#  define PRIXFAST32 PRIX64
-# else
-#  define PRIXFAST32 "X"
-# endif
-#endif
-#ifdef INT64_MAX
-# if !defined PRIdFAST64 || @PRI_MACROS_BROKEN@
-#  undef PRIdFAST64
-#  define PRIdFAST64 PRId64
-# endif
-# if !defined PRIiFAST64 || @PRI_MACROS_BROKEN@
-#  undef PRIiFAST64
-#  define PRIiFAST64 PRIi64
-# endif
-#endif
-#ifdef UINT64_MAX
-# if !defined PRIoFAST64 || @PRI_MACROS_BROKEN@
-#  undef PRIoFAST64
-#  define PRIoFAST64 PRIo64
-# endif
-# if !defined PRIuFAST64 || @PRI_MACROS_BROKEN@
-#  undef PRIuFAST64
-#  define PRIuFAST64 PRIu64
-# endif
-# if !defined PRIxFAST64 || @PRI_MACROS_BROKEN@
-#  undef PRIxFAST64
-#  define PRIxFAST64 PRIx64
-# endif
-# if !defined PRIXFAST64 || @PRI_MACROS_BROKEN@
-#  undef PRIXFAST64
-#  define PRIXFAST64 PRIX64
-# endif
-#endif
-
-#if !defined PRIdMAX || @PRI_MACROS_BROKEN@
-# undef PRIdMAX
-# if @INT32_MAX_LT_INTMAX_MAX@
-#  define PRIdMAX PRId64
-# else
-#  define PRIdMAX "ld"
-# endif
-#endif
-#if !defined PRIiMAX || @PRI_MACROS_BROKEN@
-# undef PRIiMAX
-# if @INT32_MAX_LT_INTMAX_MAX@
-#  define PRIiMAX PRIi64
-# else
-#  define PRIiMAX "li"
-# endif
-#endif
-#if !defined PRIoMAX || @PRI_MACROS_BROKEN@
-# undef PRIoMAX
-# if @UINT32_MAX_LT_UINTMAX_MAX@
-#  define PRIoMAX PRIo64
-# else
-#  define PRIoMAX "lo"
-# endif
-#endif
-#if !defined PRIuMAX || @PRI_MACROS_BROKEN@
-# undef PRIuMAX
-# if @UINT32_MAX_LT_UINTMAX_MAX@
-#  define PRIuMAX PRIu64
-# else
-#  define PRIuMAX "lu"
-# endif
-#endif
-#if !defined PRIxMAX || @PRI_MACROS_BROKEN@
-# undef PRIxMAX
-# if @UINT32_MAX_LT_UINTMAX_MAX@
-#  define PRIxMAX PRIx64
-# else
-#  define PRIxMAX "lx"
-# endif
-#endif
-#if !defined PRIXMAX || @PRI_MACROS_BROKEN@
-# undef PRIXMAX
-# if @UINT32_MAX_LT_UINTMAX_MAX@
-#  define PRIXMAX PRIX64
-# else
-#  define PRIXMAX "lX"
-# endif
-#endif
-
-#if !defined PRIdPTR || @PRI_MACROS_BROKEN@
-# undef PRIdPTR
-# ifdef INTPTR_MAX
-#  define PRIdPTR @PRIPTR_PREFIX@ "d"
-# endif
-#endif
-#if !defined PRIiPTR || @PRI_MACROS_BROKEN@
-# undef PRIiPTR
-# ifdef INTPTR_MAX
-#  define PRIiPTR @PRIPTR_PREFIX@ "i"
-# endif
-#endif
-#if !defined PRIoPTR || @PRI_MACROS_BROKEN@
-# undef PRIoPTR
-# ifdef UINTPTR_MAX
-#  define PRIoPTR @PRIPTR_PREFIX@ "o"
-# endif
-#endif
-#if !defined PRIuPTR || @PRI_MACROS_BROKEN@
-# undef PRIuPTR
-# ifdef UINTPTR_MAX
-#  define PRIuPTR @PRIPTR_PREFIX@ "u"
-# endif
-#endif
-#if !defined PRIxPTR || @PRI_MACROS_BROKEN@
-# undef PRIxPTR
-# ifdef UINTPTR_MAX
-#  define PRIxPTR @PRIPTR_PREFIX@ "x"
-# endif
-#endif
-#if !defined PRIXPTR || @PRI_MACROS_BROKEN@
-# undef PRIXPTR
-# ifdef UINTPTR_MAX
-#  define PRIXPTR @PRIPTR_PREFIX@ "X"
-# endif
-#endif
-
-#if !defined SCNd8 || @PRI_MACROS_BROKEN@
-# undef SCNd8
-# ifdef INT8_MAX
-#  define SCNd8 "hhd"
-# endif
-#endif
-#if !defined SCNi8 || @PRI_MACROS_BROKEN@
-# undef SCNi8
-# ifdef INT8_MAX
-#  define SCNi8 "hhi"
-# endif
-#endif
-#if !defined SCNo8 || @PRI_MACROS_BROKEN@
-# undef SCNo8
-# ifdef UINT8_MAX
-#  define SCNo8 "hho"
-# endif
-#endif
-#if !defined SCNu8 || @PRI_MACROS_BROKEN@
-# undef SCNu8
-# ifdef UINT8_MAX
-#  define SCNu8 "hhu"
-# endif
-#endif
-#if !defined SCNx8 || @PRI_MACROS_BROKEN@
-# undef SCNx8
-# ifdef UINT8_MAX
-#  define SCNx8 "hhx"
-# endif
-#endif
-#if !defined SCNd16 || @PRI_MACROS_BROKEN@
-# undef SCNd16
-# ifdef INT16_MAX
-#  define SCNd16 "hd"
-# endif
-#endif
-#if !defined SCNi16 || @PRI_MACROS_BROKEN@
-# undef SCNi16
-# ifdef INT16_MAX
-#  define SCNi16 "hi"
-# endif
-#endif
-#if !defined SCNo16 || @PRI_MACROS_BROKEN@
-# undef SCNo16
-# ifdef UINT16_MAX
-#  define SCNo16 "ho"
-# endif
-#endif
-#if !defined SCNu16 || @PRI_MACROS_BROKEN@
-# undef SCNu16
-# ifdef UINT16_MAX
-#  define SCNu16 "hu"
-# endif
-#endif
-#if !defined SCNx16 || @PRI_MACROS_BROKEN@
-# undef SCNx16
-# ifdef UINT16_MAX
-#  define SCNx16 "hx"
-# endif
-#endif
-#if !defined SCNd32 || @PRI_MACROS_BROKEN@
-# undef SCNd32
-# ifdef INT32_MAX
-#  define SCNd32 "d"
-# endif
-#endif
-#if !defined SCNi32 || @PRI_MACROS_BROKEN@
-# undef SCNi32
-# ifdef INT32_MAX
-#  define SCNi32 "i"
-# endif
-#endif
-#if !defined SCNo32 || @PRI_MACROS_BROKEN@
-# undef SCNo32
-# ifdef UINT32_MAX
-#  define SCNo32 "o"
-# endif
-#endif
-#if !defined SCNu32 || @PRI_MACROS_BROKEN@
-# undef SCNu32
-# ifdef UINT32_MAX
-#  define SCNu32 "u"
-# endif
-#endif
-#if !defined SCNx32 || @PRI_MACROS_BROKEN@
-# undef SCNx32
-# ifdef UINT32_MAX
-#  define SCNx32 "x"
-# endif
-#endif
-#ifdef INT64_MAX
-# if (@APPLE_UNIVERSAL_BUILD@ ? defined _LP64 : @INT64_MAX_EQ_LONG_MAX@)
-#  define _SCN64_PREFIX "l"
-# elif defined _MSC_VER || defined __MINGW32__
-#  define _SCN64_PREFIX "I64"
-# elif @HAVE_LONG_LONG_INT@ && LONG_MAX >> 30 == 1
-#  define _SCN64_PREFIX _LONG_LONG_FORMAT_PREFIX
-# endif
-# if !defined SCNd64 || @PRI_MACROS_BROKEN@
-#  undef SCNd64
-#  define SCNd64 _SCN64_PREFIX "d"
-# endif
-# if !defined SCNi64 || @PRI_MACROS_BROKEN@
-#  undef SCNi64
-#  define SCNi64 _SCN64_PREFIX "i"
-# endif
-#endif
-#ifdef UINT64_MAX
-# if (@APPLE_UNIVERSAL_BUILD@ ? defined _LP64 : @UINT64_MAX_EQ_ULONG_MAX@)
-#  define _SCNu64_PREFIX "l"
-# elif defined _MSC_VER || defined __MINGW32__
-#  define _SCNu64_PREFIX "I64"
-# elif @HAVE_UNSIGNED_LONG_LONG_INT@ && ULONG_MAX >> 31 == 1
-#  define _SCNu64_PREFIX _LONG_LONG_FORMAT_PREFIX
-# endif
-# if !defined SCNo64 || @PRI_MACROS_BROKEN@
-#  undef SCNo64
-#  define SCNo64 _SCNu64_PREFIX "o"
-# endif
-# if !defined SCNu64 || @PRI_MACROS_BROKEN@
-#  undef SCNu64
-#  define SCNu64 _SCNu64_PREFIX "u"
-# endif
-# if !defined SCNx64 || @PRI_MACROS_BROKEN@
-#  undef SCNx64
-#  define SCNx64 _SCNu64_PREFIX "x"
-# endif
-#endif
-
-#if !defined SCNdLEAST8 || @PRI_MACROS_BROKEN@
-# undef SCNdLEAST8
-# define SCNdLEAST8 "hhd"
-#endif
-#if !defined SCNiLEAST8 || @PRI_MACROS_BROKEN@
-# undef SCNiLEAST8
-# define SCNiLEAST8 "hhi"
-#endif
-#if !defined SCNoLEAST8 || @PRI_MACROS_BROKEN@
-# undef SCNoLEAST8
-# define SCNoLEAST8 "hho"
-#endif
-#if !defined SCNuLEAST8 || @PRI_MACROS_BROKEN@
-# undef SCNuLEAST8
-# define SCNuLEAST8 "hhu"
-#endif
-#if !defined SCNxLEAST8 || @PRI_MACROS_BROKEN@
-# undef SCNxLEAST8
-# define SCNxLEAST8 "hhx"
-#endif
-#if !defined SCNdLEAST16 || @PRI_MACROS_BROKEN@
-# undef SCNdLEAST16
-# define SCNdLEAST16 "hd"
-#endif
-#if !defined SCNiLEAST16 || @PRI_MACROS_BROKEN@
-# undef SCNiLEAST16
-# define SCNiLEAST16 "hi"
-#endif
-#if !defined SCNoLEAST16 || @PRI_MACROS_BROKEN@
-# undef SCNoLEAST16
-# define SCNoLEAST16 "ho"
-#endif
-#if !defined SCNuLEAST16 || @PRI_MACROS_BROKEN@
-# undef SCNuLEAST16
-# define SCNuLEAST16 "hu"
-#endif
-#if !defined SCNxLEAST16 || @PRI_MACROS_BROKEN@
-# undef SCNxLEAST16
-# define SCNxLEAST16 "hx"
-#endif
-#if !defined SCNdLEAST32 || @PRI_MACROS_BROKEN@
-# undef SCNdLEAST32
-# define SCNdLEAST32 "d"
-#endif
-#if !defined SCNiLEAST32 || @PRI_MACROS_BROKEN@
-# undef SCNiLEAST32
-# define SCNiLEAST32 "i"
-#endif
-#if !defined SCNoLEAST32 || @PRI_MACROS_BROKEN@
-# undef SCNoLEAST32
-# define SCNoLEAST32 "o"
-#endif
-#if !defined SCNuLEAST32 || @PRI_MACROS_BROKEN@
-# undef SCNuLEAST32
-# define SCNuLEAST32 "u"
-#endif
-#if !defined SCNxLEAST32 || @PRI_MACROS_BROKEN@
-# undef SCNxLEAST32
-# define SCNxLEAST32 "x"
-#endif
-#ifdef INT64_MAX
-# if !defined SCNdLEAST64 || @PRI_MACROS_BROKEN@
-#  undef SCNdLEAST64
-#  define SCNdLEAST64 SCNd64
-# endif
-# if !defined SCNiLEAST64 || @PRI_MACROS_BROKEN@
-#  undef SCNiLEAST64
-#  define SCNiLEAST64 SCNi64
-# endif
-#endif
-#ifdef UINT64_MAX
-# if !defined SCNoLEAST64 || @PRI_MACROS_BROKEN@
-#  undef SCNoLEAST64
-#  define SCNoLEAST64 SCNo64
-# endif
-# if !defined SCNuLEAST64 || @PRI_MACROS_BROKEN@
-#  undef SCNuLEAST64
-#  define SCNuLEAST64 SCNu64
-# endif
-# if !defined SCNxLEAST64 || @PRI_MACROS_BROKEN@
-#  undef SCNxLEAST64
-#  define SCNxLEAST64 SCNx64
-# endif
-#endif
-
-#if !defined SCNdFAST8 || @PRI_MACROS_BROKEN@
-# undef SCNdFAST8
-# if INT_FAST8_MAX > INT32_MAX
-#  define SCNdFAST8 SCNd64
-# elif INT_FAST8_MAX == 0x7fff
-#  define SCNdFAST8 "hd"
-# elif INT_FAST8_MAX == 0x7f
-#  define SCNdFAST8 "hhd"
-# else
-#  define SCNdFAST8 "d"
-# endif
-#endif
-#if !defined SCNiFAST8 || @PRI_MACROS_BROKEN@
-# undef SCNiFAST8
-# if INT_FAST8_MAX > INT32_MAX
-#  define SCNiFAST8 SCNi64
-# elif INT_FAST8_MAX == 0x7fff
-#  define SCNiFAST8 "hi"
-# elif INT_FAST8_MAX == 0x7f
-#  define SCNiFAST8 "hhi"
-# else
-#  define SCNiFAST8 "i"
-# endif
-#endif
-#if !defined SCNoFAST8 || @PRI_MACROS_BROKEN@
-# undef SCNoFAST8
-# if UINT_FAST8_MAX > UINT32_MAX
-#  define SCNoFAST8 SCNo64
-# elif UINT_FAST8_MAX == 0xffff
-#  define SCNoFAST8 "ho"
-# elif UINT_FAST8_MAX == 0xff
-#  define SCNoFAST8 "hho"
-# else
-#  define SCNoFAST8 "o"
-# endif
-#endif
-#if !defined SCNuFAST8 || @PRI_MACROS_BROKEN@
-# undef SCNuFAST8
-# if UINT_FAST8_MAX > UINT32_MAX
-#  define SCNuFAST8 SCNu64
-# elif UINT_FAST8_MAX == 0xffff
-#  define SCNuFAST8 "hu"
-# elif UINT_FAST8_MAX == 0xff
-#  define SCNuFAST8 "hhu"
-# else
-#  define SCNuFAST8 "u"
-# endif
-#endif
-#if !defined SCNxFAST8 || @PRI_MACROS_BROKEN@
-# undef SCNxFAST8
-# if UINT_FAST8_MAX > UINT32_MAX
-#  define SCNxFAST8 SCNx64
-# elif UINT_FAST8_MAX == 0xffff
-#  define SCNxFAST8 "hx"
-# elif UINT_FAST8_MAX == 0xff
-#  define SCNxFAST8 "hhx"
-# else
-#  define SCNxFAST8 "x"
-# endif
-#endif
-#if !defined SCNdFAST16 || @PRI_MACROS_BROKEN@
-# undef SCNdFAST16
-# if INT_FAST16_MAX > INT32_MAX
-#  define SCNdFAST16 SCNd64
-# elif INT_FAST16_MAX == 0x7fff
-#  define SCNdFAST16 "hd"
-# else
-#  define SCNdFAST16 "d"
-# endif
-#endif
-#if !defined SCNiFAST16 || @PRI_MACROS_BROKEN@
-# undef SCNiFAST16
-# if INT_FAST16_MAX > INT32_MAX
-#  define SCNiFAST16 SCNi64
-# elif INT_FAST16_MAX == 0x7fff
-#  define SCNiFAST16 "hi"
-# else
-#  define SCNiFAST16 "i"
-# endif
-#endif
-#if !defined SCNoFAST16 || @PRI_MACROS_BROKEN@
-# undef SCNoFAST16
-# if UINT_FAST16_MAX > UINT32_MAX
-#  define SCNoFAST16 SCNo64
-# elif UINT_FAST16_MAX == 0xffff
-#  define SCNoFAST16 "ho"
-# else
-#  define SCNoFAST16 "o"
-# endif
-#endif
-#if !defined SCNuFAST16 || @PRI_MACROS_BROKEN@
-# undef SCNuFAST16
-# if UINT_FAST16_MAX > UINT32_MAX
-#  define SCNuFAST16 SCNu64
-# elif UINT_FAST16_MAX == 0xffff
-#  define SCNuFAST16 "hu"
-# else
-#  define SCNuFAST16 "u"
-# endif
-#endif
-#if !defined SCNxFAST16 || @PRI_MACROS_BROKEN@
-# undef SCNxFAST16
-# if UINT_FAST16_MAX > UINT32_MAX
-#  define SCNxFAST16 SCNx64
-# elif UINT_FAST16_MAX == 0xffff
-#  define SCNxFAST16 "hx"
-# else
-#  define SCNxFAST16 "x"
-# endif
-#endif
-#if !defined SCNdFAST32 || @PRI_MACROS_BROKEN@
-# undef SCNdFAST32
-# if INT_FAST32_MAX > INT32_MAX
-#  define SCNdFAST32 SCNd64
-# else
-#  define SCNdFAST32 "d"
-# endif
-#endif
-#if !defined SCNiFAST32 || @PRI_MACROS_BROKEN@
-# undef SCNiFAST32
-# if INT_FAST32_MAX > INT32_MAX
-#  define SCNiFAST32 SCNi64
-# else
-#  define SCNiFAST32 "i"
-# endif
-#endif
-#if !defined SCNoFAST32 || @PRI_MACROS_BROKEN@
-# undef SCNoFAST32
-# if UINT_FAST32_MAX > UINT32_MAX
-#  define SCNoFAST32 SCNo64
-# else
-#  define SCNoFAST32 "o"
-# endif
-#endif
-#if !defined SCNuFAST32 || @PRI_MACROS_BROKEN@
-# undef SCNuFAST32
-# if UINT_FAST32_MAX > UINT32_MAX
-#  define SCNuFAST32 SCNu64
-# else
-#  define SCNuFAST32 "u"
-# endif
-#endif
-#if !defined SCNxFAST32 || @PRI_MACROS_BROKEN@
-# undef SCNxFAST32
-# if UINT_FAST32_MAX > UINT32_MAX
-#  define SCNxFAST32 SCNx64
-# else
-#  define SCNxFAST32 "x"
-# endif
-#endif
-#ifdef INT64_MAX
-# if !defined SCNdFAST64 || @PRI_MACROS_BROKEN@
-#  undef SCNdFAST64
-#  define SCNdFAST64 SCNd64
-# endif
-# if !defined SCNiFAST64 || @PRI_MACROS_BROKEN@
-#  undef SCNiFAST64
-#  define SCNiFAST64 SCNi64
-# endif
-#endif
-#ifdef UINT64_MAX
-# if !defined SCNoFAST64 || @PRI_MACROS_BROKEN@
-#  undef SCNoFAST64
-#  define SCNoFAST64 SCNo64
-# endif
-# if !defined SCNuFAST64 || @PRI_MACROS_BROKEN@
-#  undef SCNuFAST64
-#  define SCNuFAST64 SCNu64
-# endif
-# if !defined SCNxFAST64 || @PRI_MACROS_BROKEN@
-#  undef SCNxFAST64
-#  define SCNxFAST64 SCNx64
-# endif
-#endif
-
-#if !defined SCNdMAX || @PRI_MACROS_BROKEN@
-# undef SCNdMAX
-# if @INT32_MAX_LT_INTMAX_MAX@
-#  define SCNdMAX SCNd64
-# else
-#  define SCNdMAX "ld"
-# endif
-#endif
-#if !defined SCNiMAX || @PRI_MACROS_BROKEN@
-# undef SCNiMAX
-# if @INT32_MAX_LT_INTMAX_MAX@
-#  define SCNiMAX SCNi64
-# else
-#  define SCNiMAX "li"
-# endif
-#endif
-#if !defined SCNoMAX || @PRI_MACROS_BROKEN@
-# undef SCNoMAX
-# if @UINT32_MAX_LT_UINTMAX_MAX@
-#  define SCNoMAX SCNo64
-# else
-#  define SCNoMAX "lo"
-# endif
-#endif
-#if !defined SCNuMAX || @PRI_MACROS_BROKEN@
-# undef SCNuMAX
-# if @UINT32_MAX_LT_UINTMAX_MAX@
-#  define SCNuMAX SCNu64
-# else
-#  define SCNuMAX "lu"
-# endif
-#endif
-#if !defined SCNxMAX || @PRI_MACROS_BROKEN@
-# undef SCNxMAX
-# if @UINT32_MAX_LT_UINTMAX_MAX@
-#  define SCNxMAX SCNx64
-# else
-#  define SCNxMAX "lx"
-# endif
-#endif
-
-#if !defined SCNdPTR || @PRI_MACROS_BROKEN@
-# undef SCNdPTR
-# ifdef INTPTR_MAX
-#  define SCNdPTR @PRIPTR_PREFIX@ "d"
-# endif
-#endif
-#if !defined SCNiPTR || @PRI_MACROS_BROKEN@
-# undef SCNiPTR
-# ifdef INTPTR_MAX
-#  define SCNiPTR @PRIPTR_PREFIX@ "i"
-# endif
-#endif
-#if !defined SCNoPTR || @PRI_MACROS_BROKEN@
-# undef SCNoPTR
-# ifdef UINTPTR_MAX
-#  define SCNoPTR @PRIPTR_PREFIX@ "o"
-# endif
-#endif
-#if !defined SCNuPTR || @PRI_MACROS_BROKEN@
-# undef SCNuPTR
-# ifdef UINTPTR_MAX
-#  define SCNuPTR @PRIPTR_PREFIX@ "u"
-# endif
-#endif
-#if !defined SCNxPTR || @PRI_MACROS_BROKEN@
-# undef SCNxPTR
-# ifdef UINTPTR_MAX
-#  define SCNxPTR @PRIPTR_PREFIX@ "x"
-# endif
-#endif
-
-/* 7.8.2 Functions for greatest-width integer types */
-
-#ifdef __cplusplus
-extern "C" {
-#endif
-
-#if @GNULIB_IMAXABS@
-# if !@HAVE_DECL_IMAXABS@
-extern intmax_t imaxabs (intmax_t);
-# endif
-#elif defined GNULIB_POSIXCHECK
-# undef imaxabs
-# if HAVE_RAW_DECL_IMAXABS
-_GL_WARN_ON_USE (imaxabs, "imaxabs is unportable - "
-                 "use gnulib module imaxabs for portability");
-# endif
-#endif
-
-#if @GNULIB_IMAXDIV@
-# if !@HAVE_DECL_IMAXDIV@
-#  if !GNULIB_defined_imaxdiv_t
-typedef struct { intmax_t quot; intmax_t rem; } imaxdiv_t;
-#   define GNULIB_defined_imaxdiv_t 1
-#  endif
-extern imaxdiv_t imaxdiv (intmax_t, intmax_t);
-# endif
-#elif defined GNULIB_POSIXCHECK
-# undef imaxdiv
-# if HAVE_RAW_DECL_IMAXDIV
-_GL_WARN_ON_USE (imaxdiv, "imaxdiv is unportable - "
-                 "use gnulib module imaxdiv for portability");
-# endif
-#endif
-
-#if @GNULIB_STRTOIMAX@
-# if @REPLACE_STRTOIMAX@
-#  if !(defined __cplusplus && defined GNULIB_NAMESPACE)
-#   undef strtoimax
-#   define strtoimax rpl_strtoimax
-#  endif
-_GL_FUNCDECL_RPL (strtoimax, intmax_t,
-                  (const char *, char **, int) _GL_ARG_NONNULL ((1)));
-_GL_CXXALIAS_RPL (strtoimax, intmax_t, (const char *, char **, int));
-# else
-#  if !@HAVE_DECL_STRTOIMAX@
-#   undef strtoimax
-_GL_FUNCDECL_SYS (strtoimax, intmax_t,
-                  (const char *, char **, int) _GL_ARG_NONNULL ((1)));
-#  endif
-_GL_CXXALIAS_SYS (strtoimax, intmax_t, (const char *, char **, int));
-# endif
-_GL_CXXALIASWARN (strtoimax);
-#elif defined GNULIB_POSIXCHECK
-# undef strtoimax
-# if HAVE_RAW_DECL_STRTOIMAX
-_GL_WARN_ON_USE (strtoimax, "strtoimax is unportable - "
-                 "use gnulib module strtoimax for portability");
-# endif
-#endif
-
-#if @GNULIB_STRTOUMAX@
-# if !@HAVE_DECL_STRTOUMAX@
-#  undef strtoumax
-_GL_FUNCDECL_SYS (strtoumax, uintmax_t,
-                  (const char *, char **, int) _GL_ARG_NONNULL ((1)));
-# endif
-_GL_CXXALIAS_SYS (strtoumax, uintmax_t, (const char *, char **, int));
-_GL_CXXALIASWARN (strtoumax);
-#elif defined GNULIB_POSIXCHECK
-# undef strtoumax
-# if HAVE_RAW_DECL_STRTOUMAX
-_GL_WARN_ON_USE (strtoumax, "strtoumax is unportable - "
-                 "use gnulib module strtoumax for portability");
-# endif
-#endif
-
-/* Don't bother defining or declaring wcstoimax and wcstoumax, since
-   wide-character functions like this are hardly ever useful.  */
-
-#ifdef __cplusplus
-}
-#endif
-
-#endif /* !defined INTTYPES_H && !defined _GL_JUST_INCLUDE_SYSTEM_INTTYPES_H */
diff -Nuar groff-1.22.3.old/src/libs/gnulib/lib/localcharset.c groff-1.22.3/src/libs/gnulib/lib/localcharset.c
--- groff-1.22.3.old/src/libs/gnulib/lib/localcharset.c	2014-11-04 10:38:35.629518946 +0200
+++ groff-1.22.3/src/libs/gnulib/lib/localcharset.c	1970-01-01 02:00:00.000000000 +0200
@@ -1,579 +0,0 @@
-/* Determine a canonical name for the current locale's character encoding.
-
-   Copyright (C) 2000-2006, 2008-2014 Free Software Foundation, Inc.
-
-   This program is free software; you can redistribute it and/or modify
-   it under the terms of the GNU General Public License as published by
-   the Free Software Foundation; either version 2, or (at your option)
-   any later version.
-
-   This program is distributed in the hope that it will be useful,
-   but WITHOUT ANY WARRANTY; without even the implied warranty of
-   MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
-   GNU General Public License for more details.
-
-   You should have received a copy of the GNU General Public License along
-   with this program; if not, see <http://www.gnu.org/licenses/>.  */
-
-/* Written by Bruno Haible <bruno@clisp.org>.  */
-
-#include <config.h>
-
-/* Specification.  */
-#include "localcharset.h"
-
-#include <fcntl.h>
-#include <stddef.h>
-#include <stdio.h>
-#include <string.h>
-#include <stdlib.h>
-
-#if defined __APPLE__ && defined __MACH__ && HAVE_LANGINFO_CODESET
-# define DARWIN7 /* Darwin 7 or newer, i.e. Mac OS X 10.3 or newer */
-#endif
-
-#if defined _WIN32 || defined __WIN32__
-# define WINDOWS_NATIVE
-# include <locale.h>
-#endif
-
-#if defined __EMX__
-/* Assume EMX program runs on OS/2, even if compiled under DOS.  */
-# ifndef OS2
-#  define OS2
-# endif
-#endif
-
-#if !defined WINDOWS_NATIVE
-# include <unistd.h>
-# if HAVE_LANGINFO_CODESET
-#  include <langinfo.h>
-# else
-#  if 0 /* see comment below */
-#   include <locale.h>
-#  endif
-# endif
-# ifdef __CYGWIN__
-#  define WIN32_LEAN_AND_MEAN
-#  include <windows.h>
-# endif
-#elif defined WINDOWS_NATIVE
-# define WIN32_LEAN_AND_MEAN
-# include <windows.h>
-#endif
-#if defined OS2
-# define INCL_DOS
-# include <os2.h>
-#endif
-
-/* For MB_CUR_MAX_L */
-#if defined DARWIN7
-# include <xlocale.h>
-#endif
-
-#if ENABLE_RELOCATABLE
-# include "relocatable.h"
-#else
-# define relocate(pathname) (pathname)
-#endif
-
-/* Get LIBDIR.  */
-#ifndef LIBDIR
-# include "configmake.h"
-#endif
-
-/* Define O_NOFOLLOW to 0 on platforms where it does not exist.  */
-#ifndef O_NOFOLLOW
-# define O_NOFOLLOW 0
-#endif
-
-#if defined _WIN32 || defined __WIN32__ || defined __CYGWIN__ || defined __EMX__ || defined __DJGPP__
-  /* Native Windows, Cygwin, OS/2, DOS */
-# define ISSLASH(C) ((C) == '/' || (C) == '\\')
-#endif
-
-#ifndef DIRECTORY_SEPARATOR
-# define DIRECTORY_SEPARATOR '/'
-#endif
-
-#ifndef ISSLASH
-# define ISSLASH(C) ((C) == DIRECTORY_SEPARATOR)
-#endif
-
-#if HAVE_DECL_GETC_UNLOCKED
-# undef getc
-# define getc getc_unlocked
-#endif
-
-/* The following static variable is declared 'volatile' to avoid a
-   possible multithread problem in the function get_charset_aliases. If we
-   are running in a threaded environment, and if two threads initialize
-   'charset_aliases' simultaneously, both will produce the same value,
-   and everything will be ok if the two assignments to 'charset_aliases'
-   are atomic. But I don't know what will happen if the two assignments mix.  */
-#if __STDC__ != 1
-# define volatile /* empty */
-#endif
-/* Pointer to the contents of the charset.alias file, if it has already been
-   read, else NULL.  Its format is:
-   ALIAS_1 '\0' CANONICAL_1 '\0' ... ALIAS_n '\0' CANONICAL_n '\0' '\0'  */
-static const char * volatile charset_aliases;
-
-/* Return a pointer to the contents of the charset.alias file.  */
-static const char *
-get_charset_aliases (void)
-{
-  const char *cp;
-
-  cp = charset_aliases;
-  if (cp == NULL)
-    {
-#if !(defined DARWIN7 || defined VMS || defined WINDOWS_NATIVE || defined __CYGWIN__)
-      const char *dir;
-      const char *base = "charset.alias";
-      char *file_name;
-
-      /* Make it possible to override the charset.alias location.  This is
-         necessary for running the testsuite before "make install".  */
-      dir = getenv ("CHARSETALIASDIR");
-      if (dir == NULL || dir[0] == '\0')
-        dir = relocate (LIBDIR);
-
-      /* Concatenate dir and base into freshly allocated file_name.  */
-      {
-        size_t dir_len = strlen (dir);
-        size_t base_len = strlen (base);
-        int add_slash = (dir_len > 0 && !ISSLASH (dir[dir_len - 1]));
-        file_name = (char *) malloc (dir_len + add_slash + base_len + 1);
-        if (file_name != NULL)
-          {
-            memcpy (file_name, dir, dir_len);
-            if (add_slash)
-              file_name[dir_len] = DIRECTORY_SEPARATOR;
-            memcpy (file_name + dir_len + add_slash, base, base_len + 1);
-          }
-      }
-
-      if (file_name == NULL)
-        /* Out of memory.  Treat the file as empty.  */
-        cp = "";
-      else
-        {
-          int fd;
-
-          /* Open the file.  Reject symbolic links on platforms that support
-             O_NOFOLLOW.  This is a security feature.  Without it, an attacker
-             could retrieve parts of the contents (namely, the tail of the
-             first line that starts with "* ") of an arbitrary file by placing
-             a symbolic link to that file under the name "charset.alias" in
-             some writable directory and defining the environment variable
-             CHARSETALIASDIR to point to that directory.  */
-          fd = open (file_name,
-                     O_RDONLY | (HAVE_WORKING_O_NOFOLLOW ? O_NOFOLLOW : 0));
-          if (fd < 0)
-            /* File not found.  Treat it as empty.  */
-            cp = "";
-          else
-            {
-              FILE *fp;
-
-              fp = fdopen (fd, "r");
-              if (fp == NULL)
-                {
-                  /* Out of memory.  Treat the file as empty.  */
-                  close (fd);
-                  cp = "";
-                }
-              else
-                {
-                  /* Parse the file's contents.  */
-                  char *res_ptr = NULL;
-                  size_t res_size = 0;
-
-                  for (;;)
-                    {
-                      int c;
-                      char buf1[50+1];
-                      char buf2[50+1];
-                      size_t l1, l2;
-                      char *old_res_ptr;
-
-                      c = getc (fp);
-                      if (c == EOF)
-                        break;
-                      if (c == '\n' || c == ' ' || c == '\t')
-                        continue;
-                      if (c == '#')
-                        {
-                          /* Skip comment, to end of line.  */
-                          do
-                            c = getc (fp);
-                          while (!(c == EOF || c == '\n'));
-                          if (c == EOF)
-                            break;
-                          continue;
-                        }
-                      ungetc (c, fp);
-                      if (fscanf (fp, "%50s %50s", buf1, buf2) < 2)
-                        break;
-                      l1 = strlen (buf1);
-                      l2 = strlen (buf2);
-                      old_res_ptr = res_ptr;
-                      if (res_size == 0)
-                        {
-                          res_size = l1 + 1 + l2 + 1;
-                          res_ptr = (char *) malloc (res_size + 1);
-                        }
-                      else
-                        {
-                          res_size += l1 + 1 + l2 + 1;
-                          res_ptr = (char *) realloc (res_ptr, res_size + 1);
-                        }
-                      if (res_ptr == NULL)
-                        {
-                          /* Out of memory. */
-                          res_size = 0;
-                          free (old_res_ptr);
-                          break;
-                        }
-                      strcpy (res_ptr + res_size - (l2 + 1) - (l1 + 1), buf1);
-                      strcpy (res_ptr + res_size - (l2 + 1), buf2);
-                    }
-                  fclose (fp);
-                  if (res_size == 0)
-                    cp = "";
-                  else
-                    {
-                      *(res_ptr + res_size) = '\0';
-                      cp = res_ptr;
-                    }
-                }
-            }
-
-          free (file_name);
-        }
-
-#else
-
-# if defined DARWIN7
-      /* To avoid the trouble of installing a file that is shared by many
-         GNU packages -- many packaging systems have problems with this --,
-         simply inline the aliases here.  */
-      cp = "ISO8859-1" "\0" "ISO-8859-1" "\0"
-           "ISO8859-2" "\0" "ISO-8859-2" "\0"
-           "ISO8859-4" "\0" "ISO-8859-4" "\0"
-           "ISO8859-5" "\0" "ISO-8859-5" "\0"
-           "ISO8859-7" "\0" "ISO-8859-7" "\0"
-           "ISO8859-9" "\0" "ISO-8859-9" "\0"
-           "ISO8859-13" "\0" "ISO-8859-13" "\0"
-           "ISO8859-15" "\0" "ISO-8859-15" "\0"
-           "KOI8-R" "\0" "KOI8-R" "\0"
-           "KOI8-U" "\0" "KOI8-U" "\0"
-           "CP866" "\0" "CP866" "\0"
-           "CP949" "\0" "CP949" "\0"
-           "CP1131" "\0" "CP1131" "\0"
-           "CP1251" "\0" "CP1251" "\0"
-           "eucCN" "\0" "GB2312" "\0"
-           "GB2312" "\0" "GB2312" "\0"
-           "eucJP" "\0" "EUC-JP" "\0"
-           "eucKR" "\0" "EUC-KR" "\0"
-           "Big5" "\0" "BIG5" "\0"
-           "Big5HKSCS" "\0" "BIG5-HKSCS" "\0"
-           "GBK" "\0" "GBK" "\0"
-           "GB18030" "\0" "GB18030" "\0"
-           "SJIS" "\0" "SHIFT_JIS" "\0"
-           "ARMSCII-8" "\0" "ARMSCII-8" "\0"
-           "PT154" "\0" "PT154" "\0"
-         /*"ISCII-DEV" "\0" "?" "\0"*/
-           "*" "\0" "UTF-8" "\0";
-# endif
-
-# if defined VMS
-      /* To avoid the troubles of an extra file charset.alias_vms in the
-         sources of many GNU packages, simply inline the aliases here.  */
-      /* The list of encodings is taken from the OpenVMS 7.3-1 documentation
-         "Compaq C Run-Time Library Reference Manual for OpenVMS systems"
-         section 10.7 "Handling Different Character Sets".  */
-      cp = "ISO8859-1" "\0" "ISO-8859-1" "\0"
-           "ISO8859-2" "\0" "ISO-8859-2" "\0"
-           "ISO8859-5" "\0" "ISO-8859-5" "\0"
-           "ISO8859-7" "\0" "ISO-8859-7" "\0"
-           "ISO8859-8" "\0" "ISO-8859-8" "\0"
-           "ISO8859-9" "\0" "ISO-8859-9" "\0"
-           /* Japanese */
-           "eucJP" "\0" "EUC-JP" "\0"
-           "SJIS" "\0" "SHIFT_JIS" "\0"
-           "DECKANJI" "\0" "DEC-KANJI" "\0"
-           "SDECKANJI" "\0" "EUC-JP" "\0"
-           /* Chinese */
-           "eucTW" "\0" "EUC-TW" "\0"
-           "DECHANYU" "\0" "DEC-HANYU" "\0"
-           "DECHANZI" "\0" "GB2312" "\0"
-           /* Korean */
-           "DECKOREAN" "\0" "EUC-KR" "\0";
-# endif
-
-# if defined WINDOWS_NATIVE || defined __CYGWIN__
-      /* To avoid the troubles of installing a separate file in the same
-         directory as the DLL and of retrieving the DLL's directory at
-         runtime, simply inline the aliases here.  */
-
-      cp = "CP936" "\0" "GBK" "\0"
-           "CP1361" "\0" "JOHAB" "\0"
-           "CP20127" "\0" "ASCII" "\0"
-           "CP20866" "\0" "KOI8-R" "\0"
-           "CP20936" "\0" "GB2312" "\0"
-           "CP21866" "\0" "KOI8-RU" "\0"
-           "CP28591" "\0" "ISO-8859-1" "\0"
-           "CP28592" "\0" "ISO-8859-2" "\0"
-           "CP28593" "\0" "ISO-8859-3" "\0"
-           "CP28594" "\0" "ISO-8859-4" "\0"
-           "CP28595" "\0" "ISO-8859-5" "\0"
-           "CP28596" "\0" "ISO-8859-6" "\0"
-           "CP28597" "\0" "ISO-8859-7" "\0"
-           "CP28598" "\0" "ISO-8859-8" "\0"
-           "CP28599" "\0" "ISO-8859-9" "\0"
-           "CP28605" "\0" "ISO-8859-15" "\0"
-           "CP38598" "\0" "ISO-8859-8" "\0"
-           "CP51932" "\0" "EUC-JP" "\0"
-           "CP51936" "\0" "GB2312" "\0"
-           "CP51949" "\0" "EUC-KR" "\0"
-           "CP51950" "\0" "EUC-TW" "\0"
-           "CP54936" "\0" "GB18030" "\0"
-           "CP65001" "\0" "UTF-8" "\0";
-# endif
-#endif
-
-      charset_aliases = cp;
-    }
-
-  return cp;
-}
-
-/* Determine the current locale's character encoding, and canonicalize it
-   into one of the canonical names listed in config.charset.
-   The result must not be freed; it is statically allocated.
-   If the canonical name cannot be determined, the result is a non-canonical
-   name.  */
-
-#ifdef STATIC
-STATIC
-#endif
-const char *
-locale_charset (void)
-{
-  const char *codeset;
-  const char *aliases;
-
-#if !(defined WINDOWS_NATIVE || defined OS2)
-
-# if HAVE_LANGINFO_CODESET
-
-  /* Most systems support nl_langinfo (CODESET) nowadays.  */
-  codeset = nl_langinfo (CODESET);
-
-#  ifdef __CYGWIN__
-  /* Cygwin < 1.7 does not have locales.  nl_langinfo (CODESET) always
-     returns "US-ASCII".  Return the suffix of the locale name from the
-     environment variables (if present) or the codepage as a number.  */
-  if (codeset != NULL && strcmp (codeset, "US-ASCII") == 0)
-    {
-      const char *locale;
-      static char buf[2 + 10 + 1];
-
-      locale = getenv ("LC_ALL");
-      if (locale == NULL || locale[0] == '\0')
-        {
-          locale = getenv ("LC_CTYPE");
-          if (locale == NULL || locale[0] == '\0')
-            locale = getenv ("LANG");
-        }
-      if (locale != NULL && locale[0] != '\0')
-        {
-          /* If the locale name contains an encoding after the dot, return
-             it.  */
-          const char *dot = strchr (locale, '.');
-
-          if (dot != NULL)
-            {
-              const char *modifier;
-
-              dot++;
-              /* Look for the possible @... trailer and remove it, if any.  */
-              modifier = strchr (dot, '@');
-              if (modifier == NULL)
-                return dot;
-              if (modifier - dot < sizeof (buf))
-                {
-                  memcpy (buf, dot, modifier - dot);
-                  buf [modifier - dot] = '\0';
-                  return buf;
-                }
-            }
-        }
-
-      /* The Windows API has a function returning the locale's codepage as a
-         number: GetACP().  This encoding is used by Cygwin, unless the user
-         has set the environment variable CYGWIN=codepage:oem (which very few
-         people do).
-         Output directed to console windows needs to be converted (to
-         GetOEMCP() if the console is using a raster font, or to
-         GetConsoleOutputCP() if it is using a TrueType font).  Cygwin does
-         this conversion transparently (see winsup/cygwin/fhandler_console.cc),
-         converting to GetConsoleOutputCP().  This leads to correct results,
-         except when SetConsoleOutputCP has been called and a raster font is
-         in use.  */
-      sprintf (buf, "CP%u", GetACP ());
-      codeset = buf;
-    }
-#  endif
-
-# else
-
-  /* On old systems which lack it, use setlocale or getenv.  */
-  const char *locale = NULL;
-
-  /* But most old systems don't have a complete set of locales.  Some
-     (like SunOS 4 or DJGPP) have only the C locale.  Therefore we don't
-     use setlocale here; it would return "C" when it doesn't support the
-     locale name the user has set.  */
-#  if 0
-  locale = setlocale (LC_CTYPE, NULL);
-#  endif
-  if (locale == NULL || locale[0] == '\0')
-    {
-      locale = getenv ("LC_ALL");
-      if (locale == NULL || locale[0] == '\0')
-        {
-          locale = getenv ("LC_CTYPE");
-          if (locale == NULL || locale[0] == '\0')
-            locale = getenv ("LANG");
-        }
-    }
-
-  /* On some old systems, one used to set locale = "iso8859_1". On others,
-     you set it to "language_COUNTRY.charset". In any case, we resolve it
-     through the charset.alias file.  */
-  codeset = locale;
-
-# endif
-
-#elif defined WINDOWS_NATIVE
-
-  static char buf[2 + 10 + 1];
-
-  /* The Windows API has a function returning the locale's codepage as
-     a number, but the value doesn't change according to what the
-     'setlocale' call specified.  So we use it as a last resort, in
-     case the string returned by 'setlocale' doesn't specify the
-     codepage.  */
-  char *current_locale = setlocale (LC_ALL, NULL);
-  char *pdot;
-
-  /* If they set different locales for different categories,
-     'setlocale' will return a semi-colon separated list of locale
-     values.  To make sure we use the correct one, we choose LC_CTYPE.  */
-  if (strchr (current_locale, ';'))
-    current_locale = setlocale (LC_CTYPE, NULL);
-
-  pdot = strrchr (current_locale, '.');
-  if (pdot)
-    sprintf (buf, "CP%s", pdot + 1);
-  else
-    {
-      /* The Windows API has a function returning the locale's codepage as a
-        number: GetACP().
-        When the output goes to a console window, it needs to be provided in
-        GetOEMCP() encoding if the console is using a raster font, or in
-        GetConsoleOutputCP() encoding if it is using a TrueType font.
-        But in GUI programs and for output sent to files and pipes, GetACP()
-        encoding is the best bet.  */
-      sprintf (buf, "CP%u", GetACP ());
-    }
-  codeset = buf;
-
-#elif defined OS2
-
-  const char *locale;
-  static char buf[2 + 10 + 1];
-  ULONG cp[3];
-  ULONG cplen;
-
-  /* Allow user to override the codeset, as set in the operating system,
-     with standard language environment variables.  */
-  locale = getenv ("LC_ALL");
-  if (locale == NULL || locale[0] == '\0')
-    {
-      locale = getenv ("LC_CTYPE");
-      if (locale == NULL || locale[0] == '\0')
-        locale = getenv ("LANG");
-    }
-  if (locale != NULL && locale[0] != '\0')
-    {
-      /* If the locale name contains an encoding after the dot, return it.  */
-      const char *dot = strchr (locale, '.');
-
-      if (dot != NULL)
-        {
-          const char *modifier;
-
-          dot++;
-          /* Look for the possible @... trailer and remove it, if any.  */
-          modifier = strchr (dot, '@');
-          if (modifier == NULL)
-            return dot;
-          if (modifier - dot < sizeof (buf))
-            {
-              memcpy (buf, dot, modifier - dot);
-              buf [modifier - dot] = '\0';
-              return buf;
-            }
-        }
-
-      /* Resolve through the charset.alias file.  */
-      codeset = locale;
-    }
-  else
-    {
-      /* OS/2 has a function returning the locale's codepage as a number.  */
-      if (DosQueryCp (sizeof (cp), cp, &cplen))
-        codeset = "";
-      else
-        {
-          sprintf (buf, "CP%u", cp[0]);
-          codeset = buf;
-        }
-    }
-
-#endif
-
-  if (codeset == NULL)
-    /* The canonical name cannot be determined.  */
-    codeset = "";
-
-  /* Resolve alias. */
-  for (aliases = get_charset_aliases ();
-       *aliases != '\0';
-       aliases += strlen (aliases) + 1, aliases += strlen (aliases) + 1)
-    if (strcmp (codeset, aliases) == 0
-        || (aliases[0] == '*' && aliases[1] == '\0'))
-      {
-        codeset = aliases + strlen (aliases) + 1;
-        break;
-      }
-
-  /* Don't return an empty string.  GNU libc and GNU libiconv interpret
-     the empty string as denoting "the locale's character encoding",
-     thus GNU libiconv would call this function a second time.  */
-  if (codeset[0] == '\0')
-    codeset = "ASCII";
-
-#ifdef DARWIN7
-  /* Mac OS X sets MB_CUR_MAX to 1 when LC_ALL=C, and "UTF-8"
-     (the default codeset) does not work when MB_CUR_MAX is 1.  */
-  if (strcmp (codeset, "UTF-8") == 0 && MB_CUR_MAX_L (uselocale (NULL)) <= 1)
-    codeset = "ASCII";
-#endif
-
-  return codeset;
-}
diff -Nuar groff-1.22.3.old/src/libs/gnulib/lib/localcharset.h groff-1.22.3/src/libs/gnulib/lib/localcharset.h
--- groff-1.22.3.old/src/libs/gnulib/lib/localcharset.h	2014-11-04 10:38:35.629518946 +0200
+++ groff-1.22.3/src/libs/gnulib/lib/localcharset.h	1970-01-01 02:00:00.000000000 +0200
@@ -1,40 +0,0 @@
-/* Determine a canonical name for the current locale's character encoding.
-   Copyright (C) 2000-2003, 2009-2014 Free Software Foundation, Inc.
-   This file is part of the GNU CHARSET Library.
-
-   This program is free software; you can redistribute it and/or modify
-   it under the terms of the GNU General Public License as published by
-   the Free Software Foundation; either version 2, or (at your option)
-   any later version.
-
-   This program is distributed in the hope that it will be useful,
-   but WITHOUT ANY WARRANTY; without even the implied warranty of
-   MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
-   GNU General Public License for more details.
-
-   You should have received a copy of the GNU General Public License along
-   with this program; if not, see <http://www.gnu.org/licenses/>.  */
-
-#ifndef _LOCALCHARSET_H
-#define _LOCALCHARSET_H
-
-
-#ifdef __cplusplus
-extern "C" {
-#endif
-
-
-/* Determine the current locale's character encoding, and canonicalize it
-   into one of the canonical names listed in config.charset.
-   The result must not be freed; it is statically allocated.
-   If the canonical name cannot be determined, the result is a non-canonical
-   name.  */
-extern const char * locale_charset (void);
-
-
-#ifdef __cplusplus
-}
-#endif
-
-
-#endif /* _LOCALCHARSET_H */
diff -Nuar groff-1.22.3.old/src/libs/gnulib/lib/Makefile.am groff-1.22.3/src/libs/gnulib/lib/Makefile.am
--- groff-1.22.3.old/src/libs/gnulib/lib/Makefile.am	2014-11-04 10:38:35.629518946 +0200
+++ groff-1.22.3/src/libs/gnulib/lib/Makefile.am	1970-01-01 02:00:00.000000000 +0200
@@ -1,544 +0,0 @@
-## DO NOT EDIT! GENERATED AUTOMATICALLY!
-## Process this file with automake to produce Makefile.in.
-# Copyright (C) 2002-2014 Free Software Foundation, Inc.
-#
-# This file is free software; you can redistribute it and/or modify
-# it under the terms of the GNU General Public License as published by
-# the Free Software Foundation; either version 3 of the License, or
-# (at your option) any later version.
-#
-# This file is distributed in the hope that it will be useful,
-# but WITHOUT ANY WARRANTY; without even the implied warranty of
-# MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
-# GNU General Public License for more details.
-#
-# You should have received a copy of the GNU General Public License
-# along with this file.  If not, see <http://www.gnu.org/licenses/>.
-#
-# As a special exception to the GNU General Public License,
-# this file may be distributed as part of a program that
-# contains a configuration script generated by Autoconf, under
-# the same distribution terms as the rest of that program.
-#
-# Generated by gnulib-tool.
-# Reproduce by: gnulib-tool --import --dir=src/libs/gnulib --lib=libgnu --source-base=lib --m4-base=m4 --doc-base=doc --tests-base=tests --aux-dir=build-aux --no-conditional-dependencies --no-libtool --macro-prefix=gl wcwidth
-
-AUTOMAKE_OPTIONS = 1.5 gnits subdir-objects
-
-SUBDIRS =
-noinst_HEADERS =
-noinst_LIBRARIES =
-noinst_LTLIBRARIES =
-EXTRA_DIST =
-BUILT_SOURCES =
-SUFFIXES =
-MOSTLYCLEANFILES = core *.stackdump
-MOSTLYCLEANDIRS =
-CLEANFILES =
-DISTCLEANFILES =
-MAINTAINERCLEANFILES =
-
-AM_CPPFLAGS =
-AM_CFLAGS =
-
-noinst_LIBRARIES += libgnu.a
-
-libgnu_a_SOURCES =
-libgnu_a_LIBADD = $(gl_LIBOBJS)
-libgnu_a_DEPENDENCIES = $(gl_LIBOBJS)
-EXTRA_libgnu_a_SOURCES =
-
-## begin gnulib module configmake
-
-# Listed in the same order as the GNU makefile conventions, and
-# provided by autoconf 2.59c+.
-# The Automake-defined pkg* macros are appended, in the order
-# listed in the Automake 1.10a+ documentation.
-configmake.h: Makefile
-	$(AM_V_GEN)rm -f $@-t && \
-	{ echo '/* DO NOT EDIT! GENERATED AUTOMATICALLY! */'; \
-	  echo '#define PREFIX "$(prefix)"'; \
-	  echo '#define EXEC_PREFIX "$(exec_prefix)"'; \
-	  echo '#define BINDIR "$(bindir)"'; \
-	  echo '#define SBINDIR "$(sbindir)"'; \
-	  echo '#define LIBEXECDIR "$(libexecdir)"'; \
-	  echo '#define DATAROOTDIR "$(datarootdir)"'; \
-	  echo '#define DATADIR "$(datadir)"'; \
-	  echo '#define SYSCONFDIR "$(sysconfdir)"'; \
-	  echo '#define SHAREDSTATEDIR "$(sharedstatedir)"'; \
-	  echo '#define LOCALSTATEDIR "$(localstatedir)"'; \
-	  echo '#define INCLUDEDIR "$(includedir)"'; \
-	  echo '#define OLDINCLUDEDIR "$(oldincludedir)"'; \
-	  echo '#define DOCDIR "$(docdir)"'; \
-	  echo '#define INFODIR "$(infodir)"'; \
-	  echo '#define HTMLDIR "$(htmldir)"'; \
-	  echo '#define DVIDIR "$(dvidir)"'; \
-	  echo '#define PDFDIR "$(pdfdir)"'; \
-	  echo '#define PSDIR "$(psdir)"'; \
-	  echo '#define LIBDIR "$(libdir)"'; \
-	  echo '#define LISPDIR "$(lispdir)"'; \
-	  echo '#define LOCALEDIR "$(localedir)"'; \
-	  echo '#define MANDIR "$(mandir)"'; \
-	  echo '#define MANEXT "$(manext)"'; \
-	  echo '#define PKGDATADIR "$(pkgdatadir)"'; \
-	  echo '#define PKGINCLUDEDIR "$(pkgincludedir)"'; \
-	  echo '#define PKGLIBDIR "$(pkglibdir)"'; \
-	  echo '#define PKGLIBEXECDIR "$(pkglibexecdir)"'; \
-	} | sed '/""/d' > $@-t && \
-	mv -f $@-t $@
-
-BUILT_SOURCES += configmake.h
-CLEANFILES += configmake.h configmake.h-t
-
-## end   gnulib module configmake
-
-## begin gnulib module localcharset
-
-libgnu_a_SOURCES += localcharset.h localcharset.c
-
-# We need the following in order to install a simple file in $(libdir)
-# which is shared with other installed packages. We use a list of referencing
-# packages so that "make uninstall" will remove the file if and only if it
-# is not used by another installed package.
-# On systems with glibc-2.1 or newer, the file is redundant, therefore we
-# avoid installing it.
-
-all-local: charset.alias ref-add.sed ref-del.sed
-
-charset_alias = $(DESTDIR)$(libdir)/charset.alias
-charset_tmp = $(DESTDIR)$(libdir)/charset.tmp
-install-exec-local: install-exec-localcharset
-install-exec-localcharset: all-local
-	if test $(GLIBC21) = no; then \
-	  case '$(host_os)' in \
-	    darwin[56]*) \
-	      need_charset_alias=true ;; \
-	    darwin* | cygwin* | mingw* | pw32* | cegcc*) \
-	      need_charset_alias=false ;; \
-	    *) \
-	      need_charset_alias=true ;; \
-	  esac ; \
-	else \
-	  need_charset_alias=false ; \
-	fi ; \
-	if $$need_charset_alias; then \
-	  $(mkinstalldirs) $(DESTDIR)$(libdir) ; \
-	fi ; \
-	if test -f $(charset_alias); then \
-	  sed -f ref-add.sed $(charset_alias) > $(charset_tmp) ; \
-	  $(INSTALL_DATA) $(charset_tmp) $(charset_alias) ; \
-	  rm -f $(charset_tmp) ; \
-	else \
-	  if $$need_charset_alias; then \
-	    sed -f ref-add.sed charset.alias > $(charset_tmp) ; \
-	    $(INSTALL_DATA) $(charset_tmp) $(charset_alias) ; \
-	    rm -f $(charset_tmp) ; \
-	  fi ; \
-	fi
-
-uninstall-local: uninstall-localcharset
-uninstall-localcharset: all-local
-	if test -f $(charset_alias); then \
-	  sed -f ref-del.sed $(charset_alias) > $(charset_tmp); \
-	  if grep '^# Packages using this file: $$' $(charset_tmp) \
-	      > /dev/null; then \
-	    rm -f $(charset_alias); \
-	  else \
-	    $(INSTALL_DATA) $(charset_tmp) $(charset_alias); \
-	  fi; \
-	  rm -f $(charset_tmp); \
-	fi
-
-charset.alias: config.charset
-	$(AM_V_GEN)rm -f t-$@ $@ && \
-	$(SHELL) $(srcdir)/config.charset '$(host)' > t-$@ && \
-	mv t-$@ $@
-
-SUFFIXES += .sed .sin
-.sin.sed:
-	$(AM_V_GEN)rm -f t-$@ $@ && \
-	sed -e '/^#/d' -e 's/@''PACKAGE''@/$(PACKAGE)/g' $< > t-$@ && \
-	mv t-$@ $@
-
-CLEANFILES += charset.alias ref-add.sed ref-del.sed
-
-EXTRA_DIST += config.charset ref-add.sin ref-del.sin
-
-## end   gnulib module localcharset
-
-## begin gnulib module snippet/arg-nonnull
-
-# The BUILT_SOURCES created by this Makefile snippet are not used via #include
-# statements but through direct file reference. Therefore this snippet must be
-# present in all Makefile.am that need it. This is ensured by the applicability
-# 'all' defined above.
-
-BUILT_SOURCES += arg-nonnull.h
-# The arg-nonnull.h that gets inserted into generated .h files is the same as
-# build-aux/snippet/arg-nonnull.h, except that it has the copyright header cut
-# off.
-arg-nonnull.h: $(top_srcdir)/build-aux/snippet/arg-nonnull.h
-	$(AM_V_GEN)rm -f $@-t $@ && \
-	sed -n -e '/GL_ARG_NONNULL/,$$p' \
-	  < $(top_srcdir)/build-aux/snippet/arg-nonnull.h \
-	  > $@-t && \
-	mv $@-t $@
-MOSTLYCLEANFILES += arg-nonnull.h arg-nonnull.h-t
-
-ARG_NONNULL_H=arg-nonnull.h
-
-EXTRA_DIST += $(top_srcdir)/build-aux/snippet/arg-nonnull.h
-
-## end   gnulib module snippet/arg-nonnull
-
-## begin gnulib module snippet/c++defs
-
-# The BUILT_SOURCES created by this Makefile snippet are not used via #include
-# statements but through direct file reference. Therefore this snippet must be
-# present in all Makefile.am that need it. This is ensured by the applicability
-# 'all' defined above.
-
-BUILT_SOURCES += c++defs.h
-# The c++defs.h that gets inserted into generated .h files is the same as
-# build-aux/snippet/c++defs.h, except that it has the copyright header cut off.
-c++defs.h: $(top_srcdir)/build-aux/snippet/c++defs.h
-	$(AM_V_GEN)rm -f $@-t $@ && \
-	sed -n -e '/_GL_CXXDEFS/,$$p' \
-	  < $(top_srcdir)/build-aux/snippet/c++defs.h \
-	  > $@-t && \
-	mv $@-t $@
-MOSTLYCLEANFILES += c++defs.h c++defs.h-t
-
-CXXDEFS_H=c++defs.h
-
-EXTRA_DIST += $(top_srcdir)/build-aux/snippet/c++defs.h
-
-## end   gnulib module snippet/c++defs
-
-## begin gnulib module snippet/warn-on-use
-
-BUILT_SOURCES += warn-on-use.h
-# The warn-on-use.h that gets inserted into generated .h files is the same as
-# build-aux/snippet/warn-on-use.h, except that it has the copyright header cut
-# off.
-warn-on-use.h: $(top_srcdir)/build-aux/snippet/warn-on-use.h
-	$(AM_V_GEN)rm -f $@-t $@ && \
-	sed -n -e '/^.ifndef/,$$p' \
-	  < $(top_srcdir)/build-aux/snippet/warn-on-use.h \
-	  > $@-t && \
-	mv $@-t $@
-MOSTLYCLEANFILES += warn-on-use.h warn-on-use.h-t
-
-WARN_ON_USE_H=warn-on-use.h
-
-EXTRA_DIST += $(top_srcdir)/build-aux/snippet/warn-on-use.h
-
-## end   gnulib module snippet/warn-on-use
-
-## begin gnulib module stddef
-
-BUILT_SOURCES += $(STDDEF_H)
-
-# We need the following in order to create <stddef.h> when the system
-# doesn't have one that works with the given compiler.
-if GL_GENERATE_STDDEF_H
-stddef.h: stddef.in.h $(top_builddir)/config.status
-	$(AM_V_GEN)rm -f $@-t $@ && \
-	{ echo '/* DO NOT EDIT! GENERATED AUTOMATICALLY! */' && \
-	  sed -e 's|@''GUARD_PREFIX''@|GL|g' \
-	      -e 's|@''INCLUDE_NEXT''@|$(INCLUDE_NEXT)|g' \
-	      -e 's|@''PRAGMA_SYSTEM_HEADER''@|@PRAGMA_SYSTEM_HEADER@|g' \
-	      -e 's|@''PRAGMA_COLUMNS''@|@PRAGMA_COLUMNS@|g' \
-	      -e 's|@''NEXT_STDDEF_H''@|$(NEXT_STDDEF_H)|g' \
-	      -e 's|@''HAVE_WCHAR_T''@|$(HAVE_WCHAR_T)|g' \
-	      -e 's|@''REPLACE_NULL''@|$(REPLACE_NULL)|g' \
-	      < $(srcdir)/stddef.in.h; \
-	} > $@-t && \
-	mv $@-t $@
-else
-stddef.h: $(top_builddir)/config.status
-	rm -f $@
-endif
-MOSTLYCLEANFILES += stddef.h stddef.h-t
-
-EXTRA_DIST += stddef.in.h
-
-## end   gnulib module stddef
-
-## begin gnulib module stdint
-
-BUILT_SOURCES += $(STDINT_H)
-
-# We need the following in order to create <stdint.h> when the system
-# doesn't have one that works with the given compiler.
-if GL_GENERATE_STDINT_H
-stdint.h: stdint.in.h $(top_builddir)/config.status
-	$(AM_V_GEN)rm -f $@-t $@ && \
-	{ echo '/* DO NOT EDIT! GENERATED AUTOMATICALLY! */'; \
-	  sed -e 's|@''GUARD_PREFIX''@|GL|g' \
-	      -e 's/@''HAVE_STDINT_H''@/$(HAVE_STDINT_H)/g' \
-	      -e 's|@''INCLUDE_NEXT''@|$(INCLUDE_NEXT)|g' \
-	      -e 's|@''PRAGMA_SYSTEM_HEADER''@|@PRAGMA_SYSTEM_HEADER@|g' \
-	      -e 's|@''PRAGMA_COLUMNS''@|@PRAGMA_COLUMNS@|g' \
-	      -e 's|@''NEXT_STDINT_H''@|$(NEXT_STDINT_H)|g' \
-	      -e 's/@''HAVE_SYS_TYPES_H''@/$(HAVE_SYS_TYPES_H)/g' \
-	      -e 's/@''HAVE_INTTYPES_H''@/$(HAVE_INTTYPES_H)/g' \
-	      -e 's/@''HAVE_SYS_INTTYPES_H''@/$(HAVE_SYS_INTTYPES_H)/g' \
-	      -e 's/@''HAVE_SYS_BITYPES_H''@/$(HAVE_SYS_BITYPES_H)/g' \
-	      -e 's/@''HAVE_WCHAR_H''@/$(HAVE_WCHAR_H)/g' \
-	      -e 's/@''HAVE_LONG_LONG_INT''@/$(HAVE_LONG_LONG_INT)/g' \
-	      -e 's/@''HAVE_UNSIGNED_LONG_LONG_INT''@/$(HAVE_UNSIGNED_LONG_LONG_INT)/g' \
-	      -e 's/@''APPLE_UNIVERSAL_BUILD''@/$(APPLE_UNIVERSAL_BUILD)/g' \
-	      -e 's/@''BITSIZEOF_PTRDIFF_T''@/$(BITSIZEOF_PTRDIFF_T)/g' \
-	      -e 's/@''PTRDIFF_T_SUFFIX''@/$(PTRDIFF_T_SUFFIX)/g' \
-	      -e 's/@''BITSIZEOF_SIG_ATOMIC_T''@/$(BITSIZEOF_SIG_ATOMIC_T)/g' \
-	      -e 's/@''HAVE_SIGNED_SIG_ATOMIC_T''@/$(HAVE_SIGNED_SIG_ATOMIC_T)/g' \
-	      -e 's/@''SIG_ATOMIC_T_SUFFIX''@/$(SIG_ATOMIC_T_SUFFIX)/g' \
-	      -e 's/@''BITSIZEOF_SIZE_T''@/$(BITSIZEOF_SIZE_T)/g' \
-	      -e 's/@''SIZE_T_SUFFIX''@/$(SIZE_T_SUFFIX)/g' \
-	      -e 's/@''BITSIZEOF_WCHAR_T''@/$(BITSIZEOF_WCHAR_T)/g' \
-	      -e 's/@''HAVE_SIGNED_WCHAR_T''@/$(HAVE_SIGNED_WCHAR_T)/g' \
-	      -e 's/@''WCHAR_T_SUFFIX''@/$(WCHAR_T_SUFFIX)/g' \
-	      -e 's/@''BITSIZEOF_WINT_T''@/$(BITSIZEOF_WINT_T)/g' \
-	      -e 's/@''HAVE_SIGNED_WINT_T''@/$(HAVE_SIGNED_WINT_T)/g' \
-	      -e 's/@''WINT_T_SUFFIX''@/$(WINT_T_SUFFIX)/g' \
-	      < $(srcdir)/stdint.in.h; \
-	} > $@-t && \
-	mv $@-t $@
-else
-stdint.h: $(top_builddir)/config.status
-	rm -f $@
-endif
-MOSTLYCLEANFILES += stdint.h stdint.h-t
-
-EXTRA_DIST += stdint.in.h
-
-## end   gnulib module stdint
-
-## begin gnulib module streq
-
-
-EXTRA_DIST += streq.h
-
-## end   gnulib module streq
-
-## begin gnulib module unitypes
-
-BUILT_SOURCES += $(LIBUNISTRING_UNITYPES_H)
-
-unitypes.h: unitypes.in.h
-	$(AM_V_GEN)rm -f $@-t $@ && \
-	{ echo '/* DO NOT EDIT! GENERATED AUTOMATICALLY! */'; \
-	  cat $(srcdir)/unitypes.in.h; \
-	} > $@-t && \
-	mv -f $@-t $@
-MOSTLYCLEANFILES += unitypes.h unitypes.h-t
-
-EXTRA_DIST += unitypes.in.h
-
-## end   gnulib module unitypes
-
-## begin gnulib module uniwidth/base
-
-BUILT_SOURCES += $(LIBUNISTRING_UNIWIDTH_H)
-
-uniwidth.h: uniwidth.in.h
-	$(AM_V_GEN)rm -f $@-t $@ && \
-	{ echo '/* DO NOT EDIT! GENERATED AUTOMATICALLY! */'; \
-	  cat $(srcdir)/uniwidth.in.h; \
-	} > $@-t && \
-	mv -f $@-t $@
-MOSTLYCLEANFILES += uniwidth.h uniwidth.h-t
-
-EXTRA_DIST += localcharset.h uniwidth.in.h
-
-## end   gnulib module uniwidth/base
-
-## begin gnulib module uniwidth/width
-
-if LIBUNISTRING_COMPILE_UNIWIDTH_WIDTH
-libgnu_a_SOURCES += uniwidth/width.c
-endif
-
-EXTRA_DIST += uniwidth/cjk.h
-
-## end   gnulib module uniwidth/width
-
-## begin gnulib module wchar
-
-BUILT_SOURCES += wchar.h
-
-# We need the following in order to create <wchar.h> when the system
-# version does not work standalone.
-wchar.h: wchar.in.h $(top_builddir)/config.status $(CXXDEFS_H) $(ARG_NONNULL_H) $(WARN_ON_USE_H)
-	$(AM_V_GEN)rm -f $@-t $@ && \
-	{ echo '/* DO NOT EDIT! GENERATED AUTOMATICALLY! */'; \
-	  sed -e 's|@''GUARD_PREFIX''@|GL|g' \
-	      -e 's|@''INCLUDE_NEXT''@|$(INCLUDE_NEXT)|g' \
-	      -e 's|@''PRAGMA_SYSTEM_HEADER''@|@PRAGMA_SYSTEM_HEADER@|g' \
-	      -e 's|@''PRAGMA_COLUMNS''@|@PRAGMA_COLUMNS@|g' \
-	      -e 's|@''HAVE_FEATURES_H''@|$(HAVE_FEATURES_H)|g' \
-	      -e 's|@''NEXT_WCHAR_H''@|$(NEXT_WCHAR_H)|g' \
-	      -e 's|@''HAVE_WCHAR_H''@|$(HAVE_WCHAR_H)|g' \
-	      -e 's/@''GNULIB_BTOWC''@/$(GNULIB_BTOWC)/g' \
-	      -e 's/@''GNULIB_WCTOB''@/$(GNULIB_WCTOB)/g' \
-	      -e 's/@''GNULIB_MBSINIT''@/$(GNULIB_MBSINIT)/g' \
-	      -e 's/@''GNULIB_MBRTOWC''@/$(GNULIB_MBRTOWC)/g' \
-	      -e 's/@''GNULIB_MBRLEN''@/$(GNULIB_MBRLEN)/g' \
-	      -e 's/@''GNULIB_MBSRTOWCS''@/$(GNULIB_MBSRTOWCS)/g' \
-	      -e 's/@''GNULIB_MBSNRTOWCS''@/$(GNULIB_MBSNRTOWCS)/g' \
-	      -e 's/@''GNULIB_WCRTOMB''@/$(GNULIB_WCRTOMB)/g' \
-	      -e 's/@''GNULIB_WCSRTOMBS''@/$(GNULIB_WCSRTOMBS)/g' \
-	      -e 's/@''GNULIB_WCSNRTOMBS''@/$(GNULIB_WCSNRTOMBS)/g' \
-	      -e 's/@''GNULIB_WCWIDTH''@/$(GNULIB_WCWIDTH)/g' \
-	      -e 's/@''GNULIB_WMEMCHR''@/$(GNULIB_WMEMCHR)/g' \
-	      -e 's/@''GNULIB_WMEMCMP''@/$(GNULIB_WMEMCMP)/g' \
-	      -e 's/@''GNULIB_WMEMCPY''@/$(GNULIB_WMEMCPY)/g' \
-	      -e 's/@''GNULIB_WMEMMOVE''@/$(GNULIB_WMEMMOVE)/g' \
-	      -e 's/@''GNULIB_WMEMSET''@/$(GNULIB_WMEMSET)/g' \
-	      -e 's/@''GNULIB_WCSLEN''@/$(GNULIB_WCSLEN)/g' \
-	      -e 's/@''GNULIB_WCSNLEN''@/$(GNULIB_WCSNLEN)/g' \
-	      -e 's/@''GNULIB_WCSCPY''@/$(GNULIB_WCSCPY)/g' \
-	      -e 's/@''GNULIB_WCPCPY''@/$(GNULIB_WCPCPY)/g' \
-	      -e 's/@''GNULIB_WCSNCPY''@/$(GNULIB_WCSNCPY)/g' \
-	      -e 's/@''GNULIB_WCPNCPY''@/$(GNULIB_WCPNCPY)/g' \
-	      -e 's/@''GNULIB_WCSCAT''@/$(GNULIB_WCSCAT)/g' \
-	      -e 's/@''GNULIB_WCSNCAT''@/$(GNULIB_WCSNCAT)/g' \
-	      -e 's/@''GNULIB_WCSCMP''@/$(GNULIB_WCSCMP)/g' \
-	      -e 's/@''GNULIB_WCSNCMP''@/$(GNULIB_WCSNCMP)/g' \
-	      -e 's/@''GNULIB_WCSCASECMP''@/$(GNULIB_WCSCASECMP)/g' \
-	      -e 's/@''GNULIB_WCSNCASECMP''@/$(GNULIB_WCSNCASECMP)/g' \
-	      -e 's/@''GNULIB_WCSCOLL''@/$(GNULIB_WCSCOLL)/g' \
-	      -e 's/@''GNULIB_WCSXFRM''@/$(GNULIB_WCSXFRM)/g' \
-	      -e 's/@''GNULIB_WCSDUP''@/$(GNULIB_WCSDUP)/g' \
-	      -e 's/@''GNULIB_WCSCHR''@/$(GNULIB_WCSCHR)/g' \
-	      -e 's/@''GNULIB_WCSRCHR''@/$(GNULIB_WCSRCHR)/g' \
-	      -e 's/@''GNULIB_WCSCSPN''@/$(GNULIB_WCSCSPN)/g' \
-	      -e 's/@''GNULIB_WCSSPN''@/$(GNULIB_WCSSPN)/g' \
-	      -e 's/@''GNULIB_WCSPBRK''@/$(GNULIB_WCSPBRK)/g' \
-	      -e 's/@''GNULIB_WCSSTR''@/$(GNULIB_WCSSTR)/g' \
-	      -e 's/@''GNULIB_WCSTOK''@/$(GNULIB_WCSTOK)/g' \
-	      -e 's/@''GNULIB_WCSWIDTH''@/$(GNULIB_WCSWIDTH)/g' \
-	      < $(srcdir)/wchar.in.h | \
-	  sed -e 's|@''HAVE_WINT_T''@|$(HAVE_WINT_T)|g' \
-	      -e 's|@''HAVE_BTOWC''@|$(HAVE_BTOWC)|g' \
-	      -e 's|@''HAVE_MBSINIT''@|$(HAVE_MBSINIT)|g' \
-	      -e 's|@''HAVE_MBRTOWC''@|$(HAVE_MBRTOWC)|g' \
-	      -e 's|@''HAVE_MBRLEN''@|$(HAVE_MBRLEN)|g' \
-	      -e 's|@''HAVE_MBSRTOWCS''@|$(HAVE_MBSRTOWCS)|g' \
-	      -e 's|@''HAVE_MBSNRTOWCS''@|$(HAVE_MBSNRTOWCS)|g' \
-	      -e 's|@''HAVE_WCRTOMB''@|$(HAVE_WCRTOMB)|g' \
-	      -e 's|@''HAVE_WCSRTOMBS''@|$(HAVE_WCSRTOMBS)|g' \
-	      -e 's|@''HAVE_WCSNRTOMBS''@|$(HAVE_WCSNRTOMBS)|g' \
-	      -e 's|@''HAVE_WMEMCHR''@|$(HAVE_WMEMCHR)|g' \
-	      -e 's|@''HAVE_WMEMCMP''@|$(HAVE_WMEMCMP)|g' \
-	      -e 's|@''HAVE_WMEMCPY''@|$(HAVE_WMEMCPY)|g' \
-	      -e 's|@''HAVE_WMEMMOVE''@|$(HAVE_WMEMMOVE)|g' \
-	      -e 's|@''HAVE_WMEMSET''@|$(HAVE_WMEMSET)|g' \
-	      -e 's|@''HAVE_WCSLEN''@|$(HAVE_WCSLEN)|g' \
-	      -e 's|@''HAVE_WCSNLEN''@|$(HAVE_WCSNLEN)|g' \
-	      -e 's|@''HAVE_WCSCPY''@|$(HAVE_WCSCPY)|g' \
-	      -e 's|@''HAVE_WCPCPY''@|$(HAVE_WCPCPY)|g' \
-	      -e 's|@''HAVE_WCSNCPY''@|$(HAVE_WCSNCPY)|g' \
-	      -e 's|@''HAVE_WCPNCPY''@|$(HAVE_WCPNCPY)|g' \
-	      -e 's|@''HAVE_WCSCAT''@|$(HAVE_WCSCAT)|g' \
-	      -e 's|@''HAVE_WCSNCAT''@|$(HAVE_WCSNCAT)|g' \
-	      -e 's|@''HAVE_WCSCMP''@|$(HAVE_WCSCMP)|g' \
-	      -e 's|@''HAVE_WCSNCMP''@|$(HAVE_WCSNCMP)|g' \
-	      -e 's|@''HAVE_WCSCASECMP''@|$(HAVE_WCSCASECMP)|g' \
-	      -e 's|@''HAVE_WCSNCASECMP''@|$(HAVE_WCSNCASECMP)|g' \
-	      -e 's|@''HAVE_WCSCOLL''@|$(HAVE_WCSCOLL)|g' \
-	      -e 's|@''HAVE_WCSXFRM''@|$(HAVE_WCSXFRM)|g' \
-	      -e 's|@''HAVE_WCSDUP''@|$(HAVE_WCSDUP)|g' \
-	      -e 's|@''HAVE_WCSCHR''@|$(HAVE_WCSCHR)|g' \
-	      -e 's|@''HAVE_WCSRCHR''@|$(HAVE_WCSRCHR)|g' \
-	      -e 's|@''HAVE_WCSCSPN''@|$(HAVE_WCSCSPN)|g' \
-	      -e 's|@''HAVE_WCSSPN''@|$(HAVE_WCSSPN)|g' \
-	      -e 's|@''HAVE_WCSPBRK''@|$(HAVE_WCSPBRK)|g' \
-	      -e 's|@''HAVE_WCSSTR''@|$(HAVE_WCSSTR)|g' \
-	      -e 's|@''HAVE_WCSTOK''@|$(HAVE_WCSTOK)|g' \
-	      -e 's|@''HAVE_WCSWIDTH''@|$(HAVE_WCSWIDTH)|g' \
-	      -e 's|@''HAVE_DECL_WCTOB''@|$(HAVE_DECL_WCTOB)|g' \
-	      -e 's|@''HAVE_DECL_WCWIDTH''@|$(HAVE_DECL_WCWIDTH)|g' \
-	  | \
-	  sed -e 's|@''REPLACE_MBSTATE_T''@|$(REPLACE_MBSTATE_T)|g' \
-	      -e 's|@''REPLACE_BTOWC''@|$(REPLACE_BTOWC)|g' \
-	      -e 's|@''REPLACE_WCTOB''@|$(REPLACE_WCTOB)|g' \
-	      -e 's|@''REPLACE_MBSINIT''@|$(REPLACE_MBSINIT)|g' \
-	      -e 's|@''REPLACE_MBRTOWC''@|$(REPLACE_MBRTOWC)|g' \
-	      -e 's|@''REPLACE_MBRLEN''@|$(REPLACE_MBRLEN)|g' \
-	      -e 's|@''REPLACE_MBSRTOWCS''@|$(REPLACE_MBSRTOWCS)|g' \
-	      -e 's|@''REPLACE_MBSNRTOWCS''@|$(REPLACE_MBSNRTOWCS)|g' \
-	      -e 's|@''REPLACE_WCRTOMB''@|$(REPLACE_WCRTOMB)|g' \
-	      -e 's|@''REPLACE_WCSRTOMBS''@|$(REPLACE_WCSRTOMBS)|g' \
-	      -e 's|@''REPLACE_WCSNRTOMBS''@|$(REPLACE_WCSNRTOMBS)|g' \
-	      -e 's|@''REPLACE_WCWIDTH''@|$(REPLACE_WCWIDTH)|g' \
-	      -e 's|@''REPLACE_WCSWIDTH''@|$(REPLACE_WCSWIDTH)|g' \
-	      -e '/definitions of _GL_FUNCDECL_RPL/r $(CXXDEFS_H)' \
-	      -e '/definition of _GL_ARG_NONNULL/r $(ARG_NONNULL_H)' \
-	      -e '/definition of _GL_WARN_ON_USE/r $(WARN_ON_USE_H)'; \
-	} > $@-t && \
-	mv $@-t $@
-MOSTLYCLEANFILES += wchar.h wchar.h-t
-
-EXTRA_DIST += wchar.in.h
-
-## end   gnulib module wchar
-
-## begin gnulib module wctype-h
-
-BUILT_SOURCES += wctype.h
-libgnu_a_SOURCES += wctype-h.c
-
-# We need the following in order to create <wctype.h> when the system
-# doesn't have one that works with the given compiler.
-wctype.h: wctype.in.h $(top_builddir)/config.status $(CXXDEFS_H) $(WARN_ON_USE_H)
-	$(AM_V_GEN)rm -f $@-t $@ && \
-	{ echo '/* DO NOT EDIT! GENERATED AUTOMATICALLY! */'; \
-	  sed -e 's|@''GUARD_PREFIX''@|GL|g' \
-	      -e 's/@''HAVE_WCTYPE_H''@/$(HAVE_WCTYPE_H)/g' \
-	      -e 's|@''INCLUDE_NEXT''@|$(INCLUDE_NEXT)|g' \
-	      -e 's|@''PRAGMA_SYSTEM_HEADER''@|@PRAGMA_SYSTEM_HEADER@|g' \
-	      -e 's|@''PRAGMA_COLUMNS''@|@PRAGMA_COLUMNS@|g' \
-	      -e 's|@''NEXT_WCTYPE_H''@|$(NEXT_WCTYPE_H)|g' \
-	      -e 's/@''GNULIB_ISWBLANK''@/$(GNULIB_ISWBLANK)/g' \
-	      -e 's/@''GNULIB_WCTYPE''@/$(GNULIB_WCTYPE)/g' \
-	      -e 's/@''GNULIB_ISWCTYPE''@/$(GNULIB_ISWCTYPE)/g' \
-	      -e 's/@''GNULIB_WCTRANS''@/$(GNULIB_WCTRANS)/g' \
-	      -e 's/@''GNULIB_TOWCTRANS''@/$(GNULIB_TOWCTRANS)/g' \
-	      -e 's/@''HAVE_ISWBLANK''@/$(HAVE_ISWBLANK)/g' \
-	      -e 's/@''HAVE_ISWCNTRL''@/$(HAVE_ISWCNTRL)/g' \
-	      -e 's/@''HAVE_WCTYPE_T''@/$(HAVE_WCTYPE_T)/g' \
-	      -e 's/@''HAVE_WCTRANS_T''@/$(HAVE_WCTRANS_T)/g' \
-	      -e 's/@''HAVE_WINT_T''@/$(HAVE_WINT_T)/g' \
-	      -e 's/@''REPLACE_ISWBLANK''@/$(REPLACE_ISWBLANK)/g' \
-	      -e 's/@''REPLACE_ISWCNTRL''@/$(REPLACE_ISWCNTRL)/g' \
-	      -e 's/@''REPLACE_TOWLOWER''@/$(REPLACE_TOWLOWER)/g' \
-	      -e '/definitions of _GL_FUNCDECL_RPL/r $(CXXDEFS_H)' \
-	      -e '/definition of _GL_WARN_ON_USE/r $(WARN_ON_USE_H)' \
-	      < $(srcdir)/wctype.in.h; \
-	} > $@-t && \
-	mv $@-t $@
-MOSTLYCLEANFILES += wctype.h wctype.h-t
-
-EXTRA_DIST += wctype.in.h
-
-## end   gnulib module wctype-h
-
-## begin gnulib module wcwidth
-
-
-EXTRA_DIST += wcwidth.c
-
-EXTRA_libgnu_a_SOURCES += wcwidth.c
-
-## end   gnulib module wcwidth
-
-
-mostlyclean-local: mostlyclean-generic
-	@for dir in '' $(MOSTLYCLEANDIRS); do \
-	  if test -n "$$dir" && test -d $$dir; then \
-	    echo "rmdir $$dir"; rmdir $$dir; \
-	  fi; \
-	done; \
-	:
diff -Nuar groff-1.22.3.old/src/libs/gnulib/lib/Makefile.in groff-1.22.3/src/libs/gnulib/lib/Makefile.in
--- groff-1.22.3.old/src/libs/gnulib/lib/Makefile.in	2014-11-04 10:38:35.629518946 +0200
+++ groff-1.22.3/src/libs/gnulib/lib/Makefile.in	1970-01-01 02:00:00.000000000 +0200
@@ -1,1285 +0,0 @@
-# Makefile.in generated by automake 1.14 from Makefile.am.
-# @configure_input@
-
-# Copyright (C) 1994-2013 Free Software Foundation, Inc.
-
-# This Makefile.in is free software; the Free Software Foundation
-# gives unlimited permission to copy and/or distribute it,
-# with or without modifications, as long as this notice is preserved.
-
-# This program is distributed in the hope that it will be useful,
-# but WITHOUT ANY WARRANTY, to the extent permitted by law; without
-# even the implied warranty of MERCHANTABILITY or FITNESS FOR A
-# PARTICULAR PURPOSE.
-
-@SET_MAKE@
-
-# Copyright (C) 2002-2014 Free Software Foundation, Inc.
-#
-# This file is free software; you can redistribute it and/or modify
-# it under the terms of the GNU General Public License as published by
-# the Free Software Foundation; either version 3 of the License, or
-# (at your option) any later version.
-#
-# This file is distributed in the hope that it will be useful,
-# but WITHOUT ANY WARRANTY; without even the implied warranty of
-# MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
-# GNU General Public License for more details.
-#
-# You should have received a copy of the GNU General Public License
-# along with this file.  If not, see <http://www.gnu.org/licenses/>.
-#
-# As a special exception to the GNU General Public License,
-# this file may be distributed as part of a program that
-# contains a configuration script generated by Autoconf, under
-# the same distribution terms as the rest of that program.
-#
-# Generated by gnulib-tool.
-# Reproduce by: gnulib-tool --import --dir=src/libs/gnulib --lib=libgnu --source-base=lib --m4-base=m4 --doc-base=doc --tests-base=tests --aux-dir=build-aux --no-conditional-dependencies --no-libtool --macro-prefix=gl wcwidth
-
-
-
-VPATH = @srcdir@
-am__is_gnu_make = test -n '$(MAKEFILE_LIST)' && test -n '$(MAKELEVEL)'
-am__make_running_with_option = \
-  case $${target_option-} in \
-      ?) ;; \
-      *) echo "am__make_running_with_option: internal error: invalid" \
-              "target option '$${target_option-}' specified" >&2; \
-         exit 1;; \
-  esac; \
-  has_opt=no; \
-  sane_makeflags=$$MAKEFLAGS; \
-  if $(am__is_gnu_make); then \
-    sane_makeflags=$$MFLAGS; \
-  else \
-    case $$MAKEFLAGS in \
-      *\\[\ \	]*) \
-        bs=\\; \
-        sane_makeflags=`printf '%s\n' "$$MAKEFLAGS" \
-          | sed "s/$$bs$$bs[$$bs $$bs	]*//g"`;; \
-    esac; \
-  fi; \
-  skip_next=no; \
-  strip_trailopt () \
-  { \
-    flg=`printf '%s\n' "$$flg" | sed "s/$$1.*$$//"`; \
-  }; \
-  for flg in $$sane_makeflags; do \
-    test $$skip_next = yes && { skip_next=no; continue; }; \
-    case $$flg in \
-      *=*|--*) continue;; \
-        -*I) strip_trailopt 'I'; skip_next=yes;; \
-      -*I?*) strip_trailopt 'I';; \
-        -*O) strip_trailopt 'O'; skip_next=yes;; \
-      -*O?*) strip_trailopt 'O';; \
-        -*l) strip_trailopt 'l'; skip_next=yes;; \
-      -*l?*) strip_trailopt 'l';; \
-      -[dEDm]) skip_next=yes;; \
-      -[JT]) skip_next=yes;; \
-    esac; \
-    case $$flg in \
-      *$$target_option*) has_opt=yes; break;; \
-    esac; \
-  done; \
-  test $$has_opt = yes
-am__make_dryrun = (target_option=n; $(am__make_running_with_option))
-am__make_keepgoing = (target_option=k; $(am__make_running_with_option))
-pkgdatadir = $(datadir)/@PACKAGE@
-pkgincludedir = $(includedir)/@PACKAGE@
-pkglibdir = $(libdir)/@PACKAGE@
-am__cd = CDPATH="$${ZSH_VERSION+.}$(PATH_SEPARATOR)" && cd
-install_sh_DATA = $(install_sh) -c -m 644
-install_sh_PROGRAM = $(install_sh) -c
-install_sh_SCRIPT = $(install_sh) -c
-INSTALL_HEADER = $(INSTALL_DATA)
-transform = $(program_transform_name)
-NORMAL_INSTALL = :
-PRE_INSTALL = :
-POST_INSTALL = :
-NORMAL_UNINSTALL = :
-PRE_UNINSTALL = :
-POST_UNINSTALL = :
-build_triplet = @build@
-host_triplet = @host@
-@LIBUNISTRING_COMPILE_UNIWIDTH_WIDTH_TRUE@am__append_1 = uniwidth/width.c
-subdir = lib
-DIST_COMMON = $(srcdir)/Makefile.in $(srcdir)/Makefile.am \
-	$(top_srcdir)/build-aux/depcomp $(noinst_HEADERS)
-ACLOCAL_M4 = $(top_srcdir)/aclocal.m4
-am__aclocal_m4_deps = $(top_srcdir)/m4/00gnulib.m4 \
-	$(top_srcdir)/m4/codeset.m4 $(top_srcdir)/m4/configmake.m4 \
-	$(top_srcdir)/m4/extensions.m4 \
-	$(top_srcdir)/m4/extern-inline.m4 $(top_srcdir)/m4/fcntl-o.m4 \
-	$(top_srcdir)/m4/glibc21.m4 $(top_srcdir)/m4/gnulib-common.m4 \
-	$(top_srcdir)/m4/include_next.m4 \
-	$(top_srcdir)/m4/inttypes-pri.m4 $(top_srcdir)/m4/inttypes.m4 \
-	$(top_srcdir)/m4/libunistring-base.m4 \
-	$(top_srcdir)/m4/localcharset.m4 $(top_srcdir)/m4/longlong.m4 \
-	$(top_srcdir)/m4/multiarch.m4 $(top_srcdir)/m4/onceonly.m4 \
-	$(top_srcdir)/m4/stdbool.m4 $(top_srcdir)/m4/stddef_h.m4 \
-	$(top_srcdir)/m4/stdint.m4 $(top_srcdir)/m4/warn-on-use.m4 \
-	$(top_srcdir)/m4/wchar_h.m4 $(top_srcdir)/m4/wchar_t.m4 \
-	$(top_srcdir)/m4/wctype_h.m4 $(top_srcdir)/m4/wcwidth.m4 \
-	$(top_srcdir)/m4/wint_t.m4 $(top_srcdir)/configure.ac
-am__configure_deps = $(am__aclocal_m4_deps) $(CONFIGURE_DEPENDENCIES) \
-	$(ACLOCAL_M4)
-mkinstalldirs = $(install_sh) -d
-CONFIG_HEADER = $(top_builddir)/config.h
-CONFIG_CLEAN_FILES =
-CONFIG_CLEAN_VPATH_FILES =
-LIBRARIES = $(noinst_LIBRARIES)
-AM_V_AR = $(am__v_AR_@AM_V@)
-am__v_AR_ = $(am__v_AR_@AM_DEFAULT_V@)
-am__v_AR_0 = @echo "  AR      " $@;
-am__v_AR_1 = 
-libgnu_a_AR = $(AR) $(ARFLAGS)
-am__DEPENDENCIES_1 =
-am__libgnu_a_SOURCES_DIST = localcharset.h localcharset.c \
-	uniwidth/width.c wctype-h.c
-am__dirstamp = $(am__leading_dot)dirstamp
-@LIBUNISTRING_COMPILE_UNIWIDTH_WIDTH_TRUE@am__objects_1 = uniwidth/width.$(OBJEXT)
-am_libgnu_a_OBJECTS = localcharset.$(OBJEXT) $(am__objects_1) \
-	wctype-h.$(OBJEXT)
-libgnu_a_OBJECTS = $(am_libgnu_a_OBJECTS)
-LTLIBRARIES = $(noinst_LTLIBRARIES)
-AM_V_P = $(am__v_P_@AM_V@)
-am__v_P_ = $(am__v_P_@AM_DEFAULT_V@)
-am__v_P_0 = false
-am__v_P_1 = :
-AM_V_GEN = $(am__v_GEN_@AM_V@)
-am__v_GEN_ = $(am__v_GEN_@AM_DEFAULT_V@)
-am__v_GEN_0 = @echo "  GEN     " $@;
-am__v_GEN_1 = 
-AM_V_at = $(am__v_at_@AM_V@)
-am__v_at_ = $(am__v_at_@AM_DEFAULT_V@)
-am__v_at_0 = @
-am__v_at_1 = 
-DEFAULT_INCLUDES = -I.@am__isrc@ -I$(top_builddir)
-depcomp = $(SHELL) $(top_srcdir)/build-aux/depcomp
-am__depfiles_maybe = depfiles
-am__mv = mv -f
-COMPILE = $(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) \
-	$(CPPFLAGS) $(AM_CFLAGS) $(CFLAGS)
-AM_V_CC = $(am__v_CC_@AM_V@)
-am__v_CC_ = $(am__v_CC_@AM_DEFAULT_V@)
-am__v_CC_0 = @echo "  CC      " $@;
-am__v_CC_1 = 
-CCLD = $(CC)
-LINK = $(CCLD) $(AM_CFLAGS) $(CFLAGS) $(AM_LDFLAGS) $(LDFLAGS) -o $@
-AM_V_CCLD = $(am__v_CCLD_@AM_V@)
-am__v_CCLD_ = $(am__v_CCLD_@AM_DEFAULT_V@)
-am__v_CCLD_0 = @echo "  CCLD    " $@;
-am__v_CCLD_1 = 
-SOURCES = $(libgnu_a_SOURCES) $(EXTRA_libgnu_a_SOURCES)
-DIST_SOURCES = $(am__libgnu_a_SOURCES_DIST) $(EXTRA_libgnu_a_SOURCES)
-RECURSIVE_TARGETS = all-recursive check-recursive cscopelist-recursive \
-	ctags-recursive dvi-recursive html-recursive info-recursive \
-	install-data-recursive install-dvi-recursive \
-	install-exec-recursive install-html-recursive \
-	install-info-recursive install-pdf-recursive \
-	install-ps-recursive install-recursive installcheck-recursive \
-	installdirs-recursive pdf-recursive ps-recursive \
-	tags-recursive uninstall-recursive
-am__can_run_installinfo = \
-  case $$AM_UPDATE_INFO_DIR in \
-    n|no|NO) false;; \
-    *) (install-info --version) >/dev/null 2>&1;; \
-  esac
-HEADERS = $(noinst_HEADERS)
-RECURSIVE_CLEAN_TARGETS = mostlyclean-recursive clean-recursive	\
-  distclean-recursive maintainer-clean-recursive
-am__recursive_targets = \
-  $(RECURSIVE_TARGETS) \
-  $(RECURSIVE_CLEAN_TARGETS) \
-  $(am__extra_recursive_targets)
-AM_RECURSIVE_TARGETS = $(am__recursive_targets:-recursive=) TAGS CTAGS \
-	distdir
-am__tagged_files = $(HEADERS) $(SOURCES) $(TAGS_FILES) $(LISP)
-# Read a list of newline-separated strings from the standard input,
-# and print each of them once, without duplicates.  Input order is
-# *not* preserved.
-am__uniquify_input = $(AWK) '\
-  BEGIN { nonempty = 0; } \
-  { items[$$0] = 1; nonempty = 1; } \
-  END { if (nonempty) { for (i in items) print i; }; } \
-'
-# Make sure the list of sources is unique.  This is necessary because,
-# e.g., the same source file might be shared among _SOURCES variables
-# for different programs/libraries.
-am__define_uniq_tagged_files = \
-  list='$(am__tagged_files)'; \
-  unique=`for i in $$list; do \
-    if test -f "$$i"; then echo $$i; else echo $(srcdir)/$$i; fi; \
-  done | $(am__uniquify_input)`
-ETAGS = etags
-CTAGS = ctags
-DIST_SUBDIRS = $(SUBDIRS)
-DISTFILES = $(DIST_COMMON) $(DIST_SOURCES) $(TEXINFOS) $(EXTRA_DIST)
-am__relativize = \
-  dir0=`pwd`; \
-  sed_first='s,^\([^/]*\)/.*$$,\1,'; \
-  sed_rest='s,^[^/]*/*,,'; \
-  sed_last='s,^.*/\([^/]*\)$$,\1,'; \
-  sed_butlast='s,/*[^/]*$$,,'; \
-  while test -n "$$dir1"; do \
-    first=`echo "$$dir1" | sed -e "$$sed_first"`; \
-    if test "$$first" != "."; then \
-      if test "$$first" = ".."; then \
-        dir2=`echo "$$dir0" | sed -e "$$sed_last"`/"$$dir2"; \
-        dir0=`echo "$$dir0" | sed -e "$$sed_butlast"`; \
-      else \
-        first2=`echo "$$dir2" | sed -e "$$sed_first"`; \
-        if test "$$first2" = "$$first"; then \
-          dir2=`echo "$$dir2" | sed -e "$$sed_rest"`; \
-        else \
-          dir2="../$$dir2"; \
-        fi; \
-        dir0="$$dir0"/"$$first"; \
-      fi; \
-    fi; \
-    dir1=`echo "$$dir1" | sed -e "$$sed_rest"`; \
-  done; \
-  reldir="$$dir2"
-pkglibexecdir = @pkglibexecdir@
-ACLOCAL = @ACLOCAL@
-AMTAR = @AMTAR@
-AM_DEFAULT_VERBOSITY = @AM_DEFAULT_VERBOSITY@
-APPLE_UNIVERSAL_BUILD = @APPLE_UNIVERSAL_BUILD@
-AR = @AR@
-ARFLAGS = @ARFLAGS@
-AUTOCONF = @AUTOCONF@
-AUTOHEADER = @AUTOHEADER@
-AUTOMAKE = @AUTOMAKE@
-AWK = @AWK@
-BITSIZEOF_PTRDIFF_T = @BITSIZEOF_PTRDIFF_T@
-BITSIZEOF_SIG_ATOMIC_T = @BITSIZEOF_SIG_ATOMIC_T@
-BITSIZEOF_SIZE_T = @BITSIZEOF_SIZE_T@
-BITSIZEOF_WCHAR_T = @BITSIZEOF_WCHAR_T@
-BITSIZEOF_WINT_T = @BITSIZEOF_WINT_T@
-CC = @CC@
-CCDEPMODE = @CCDEPMODE@
-CFLAGS = @CFLAGS@
-CPP = @CPP@
-CPPFLAGS = @CPPFLAGS@
-CYGPATH_W = @CYGPATH_W@
-DEFS = @DEFS@
-DEPDIR = @DEPDIR@
-ECHO_C = @ECHO_C@
-ECHO_N = @ECHO_N@
-ECHO_T = @ECHO_T@
-EGREP = @EGREP@
-EXEEXT = @EXEEXT@
-GLIBC21 = @GLIBC21@
-GNULIB_BTOWC = @GNULIB_BTOWC@
-GNULIB_IMAXABS = @GNULIB_IMAXABS@
-GNULIB_IMAXDIV = @GNULIB_IMAXDIV@
-GNULIB_ISWBLANK = @GNULIB_ISWBLANK@
-GNULIB_ISWCTYPE = @GNULIB_ISWCTYPE@
-GNULIB_MBRLEN = @GNULIB_MBRLEN@
-GNULIB_MBRTOWC = @GNULIB_MBRTOWC@
-GNULIB_MBSINIT = @GNULIB_MBSINIT@
-GNULIB_MBSNRTOWCS = @GNULIB_MBSNRTOWCS@
-GNULIB_MBSRTOWCS = @GNULIB_MBSRTOWCS@
-GNULIB_STRTOIMAX = @GNULIB_STRTOIMAX@
-GNULIB_STRTOUMAX = @GNULIB_STRTOUMAX@
-GNULIB_TOWCTRANS = @GNULIB_TOWCTRANS@
-GNULIB_WCPCPY = @GNULIB_WCPCPY@
-GNULIB_WCPNCPY = @GNULIB_WCPNCPY@
-GNULIB_WCRTOMB = @GNULIB_WCRTOMB@
-GNULIB_WCSCASECMP = @GNULIB_WCSCASECMP@
-GNULIB_WCSCAT = @GNULIB_WCSCAT@
-GNULIB_WCSCHR = @GNULIB_WCSCHR@
-GNULIB_WCSCMP = @GNULIB_WCSCMP@
-GNULIB_WCSCOLL = @GNULIB_WCSCOLL@
-GNULIB_WCSCPY = @GNULIB_WCSCPY@
-GNULIB_WCSCSPN = @GNULIB_WCSCSPN@
-GNULIB_WCSDUP = @GNULIB_WCSDUP@
-GNULIB_WCSLEN = @GNULIB_WCSLEN@
-GNULIB_WCSNCASECMP = @GNULIB_WCSNCASECMP@
-GNULIB_WCSNCAT = @GNULIB_WCSNCAT@
-GNULIB_WCSNCMP = @GNULIB_WCSNCMP@
-GNULIB_WCSNCPY = @GNULIB_WCSNCPY@
-GNULIB_WCSNLEN = @GNULIB_WCSNLEN@
-GNULIB_WCSNRTOMBS = @GNULIB_WCSNRTOMBS@
-GNULIB_WCSPBRK = @GNULIB_WCSPBRK@
-GNULIB_WCSRCHR = @GNULIB_WCSRCHR@
-GNULIB_WCSRTOMBS = @GNULIB_WCSRTOMBS@
-GNULIB_WCSSPN = @GNULIB_WCSSPN@
-GNULIB_WCSSTR = @GNULIB_WCSSTR@
-GNULIB_WCSTOK = @GNULIB_WCSTOK@
-GNULIB_WCSWIDTH = @GNULIB_WCSWIDTH@
-GNULIB_WCSXFRM = @GNULIB_WCSXFRM@
-GNULIB_WCTOB = @GNULIB_WCTOB@
-GNULIB_WCTRANS = @GNULIB_WCTRANS@
-GNULIB_WCTYPE = @GNULIB_WCTYPE@
-GNULIB_WCWIDTH = @GNULIB_WCWIDTH@
-GNULIB_WMEMCHR = @GNULIB_WMEMCHR@
-GNULIB_WMEMCMP = @GNULIB_WMEMCMP@
-GNULIB_WMEMCPY = @GNULIB_WMEMCPY@
-GNULIB_WMEMMOVE = @GNULIB_WMEMMOVE@
-GNULIB_WMEMSET = @GNULIB_WMEMSET@
-GREP = @GREP@
-HAVE_BTOWC = @HAVE_BTOWC@
-HAVE_DECL_IMAXABS = @HAVE_DECL_IMAXABS@
-HAVE_DECL_IMAXDIV = @HAVE_DECL_IMAXDIV@
-HAVE_DECL_STRTOIMAX = @HAVE_DECL_STRTOIMAX@
-HAVE_DECL_STRTOUMAX = @HAVE_DECL_STRTOUMAX@
-HAVE_DECL_WCTOB = @HAVE_DECL_WCTOB@
-HAVE_DECL_WCWIDTH = @HAVE_DECL_WCWIDTH@
-HAVE_FEATURES_H = @HAVE_FEATURES_H@
-HAVE_INTTYPES_H = @HAVE_INTTYPES_H@
-HAVE_ISWBLANK = @HAVE_ISWBLANK@
-HAVE_ISWCNTRL = @HAVE_ISWCNTRL@
-HAVE_LONG_LONG_INT = @HAVE_LONG_LONG_INT@
-HAVE_MBRLEN = @HAVE_MBRLEN@
-HAVE_MBRTOWC = @HAVE_MBRTOWC@
-HAVE_MBSINIT = @HAVE_MBSINIT@
-HAVE_MBSNRTOWCS = @HAVE_MBSNRTOWCS@
-HAVE_MBSRTOWCS = @HAVE_MBSRTOWCS@
-HAVE_SIGNED_SIG_ATOMIC_T = @HAVE_SIGNED_SIG_ATOMIC_T@
-HAVE_SIGNED_WCHAR_T = @HAVE_SIGNED_WCHAR_T@
-HAVE_SIGNED_WINT_T = @HAVE_SIGNED_WINT_T@
-HAVE_STDINT_H = @HAVE_STDINT_H@
-HAVE_SYS_BITYPES_H = @HAVE_SYS_BITYPES_H@
-HAVE_SYS_INTTYPES_H = @HAVE_SYS_INTTYPES_H@
-HAVE_SYS_TYPES_H = @HAVE_SYS_TYPES_H@
-HAVE_UNSIGNED_LONG_LONG_INT = @HAVE_UNSIGNED_LONG_LONG_INT@
-HAVE_WCHAR_H = @HAVE_WCHAR_H@
-HAVE_WCHAR_T = @HAVE_WCHAR_T@
-HAVE_WCPCPY = @HAVE_WCPCPY@
-HAVE_WCPNCPY = @HAVE_WCPNCPY@
-HAVE_WCRTOMB = @HAVE_WCRTOMB@
-HAVE_WCSCASECMP = @HAVE_WCSCASECMP@
-HAVE_WCSCAT = @HAVE_WCSCAT@
-HAVE_WCSCHR = @HAVE_WCSCHR@
-HAVE_WCSCMP = @HAVE_WCSCMP@
-HAVE_WCSCOLL = @HAVE_WCSCOLL@
-HAVE_WCSCPY = @HAVE_WCSCPY@
-HAVE_WCSCSPN = @HAVE_WCSCSPN@
-HAVE_WCSDUP = @HAVE_WCSDUP@
-HAVE_WCSLEN = @HAVE_WCSLEN@
-HAVE_WCSNCASECMP = @HAVE_WCSNCASECMP@
-HAVE_WCSNCAT = @HAVE_WCSNCAT@
-HAVE_WCSNCMP = @HAVE_WCSNCMP@
-HAVE_WCSNCPY = @HAVE_WCSNCPY@
-HAVE_WCSNLEN = @HAVE_WCSNLEN@
-HAVE_WCSNRTOMBS = @HAVE_WCSNRTOMBS@
-HAVE_WCSPBRK = @HAVE_WCSPBRK@
-HAVE_WCSRCHR = @HAVE_WCSRCHR@
-HAVE_WCSRTOMBS = @HAVE_WCSRTOMBS@
-HAVE_WCSSPN = @HAVE_WCSSPN@
-HAVE_WCSSTR = @HAVE_WCSSTR@
-HAVE_WCSTOK = @HAVE_WCSTOK@
-HAVE_WCSWIDTH = @HAVE_WCSWIDTH@
-HAVE_WCSXFRM = @HAVE_WCSXFRM@
-HAVE_WCTRANS_T = @HAVE_WCTRANS_T@
-HAVE_WCTYPE_H = @HAVE_WCTYPE_H@
-HAVE_WCTYPE_T = @HAVE_WCTYPE_T@
-HAVE_WINT_T = @HAVE_WINT_T@
-HAVE_WMEMCHR = @HAVE_WMEMCHR@
-HAVE_WMEMCMP = @HAVE_WMEMCMP@
-HAVE_WMEMCPY = @HAVE_WMEMCPY@
-HAVE_WMEMMOVE = @HAVE_WMEMMOVE@
-HAVE_WMEMSET = @HAVE_WMEMSET@
-HAVE__BOOL = @HAVE__BOOL@
-INCLUDE_NEXT = @INCLUDE_NEXT@
-INCLUDE_NEXT_AS_FIRST_DIRECTIVE = @INCLUDE_NEXT_AS_FIRST_DIRECTIVE@
-INSTALL = @INSTALL@
-INSTALL_DATA = @INSTALL_DATA@
-INSTALL_PROGRAM = @INSTALL_PROGRAM@
-INSTALL_SCRIPT = @INSTALL_SCRIPT@
-INSTALL_STRIP_PROGRAM = @INSTALL_STRIP_PROGRAM@
-INT32_MAX_LT_INTMAX_MAX = @INT32_MAX_LT_INTMAX_MAX@
-INT64_MAX_EQ_LONG_MAX = @INT64_MAX_EQ_LONG_MAX@
-LDFLAGS = @LDFLAGS@
-LIBGNU_LIBDEPS = @LIBGNU_LIBDEPS@
-LIBGNU_LTLIBDEPS = @LIBGNU_LTLIBDEPS@
-LIBOBJS = @LIBOBJS@
-LIBS = @LIBS@
-LIBUNISTRING_UNITYPES_H = @LIBUNISTRING_UNITYPES_H@
-LIBUNISTRING_UNIWIDTH_H = @LIBUNISTRING_UNIWIDTH_H@
-LOCALCHARSET_TESTS_ENVIRONMENT = @LOCALCHARSET_TESTS_ENVIRONMENT@
-LTLIBOBJS = @LTLIBOBJS@
-MAKEINFO = @MAKEINFO@
-MKDIR_P = @MKDIR_P@
-NEXT_AS_FIRST_DIRECTIVE_INTTYPES_H = @NEXT_AS_FIRST_DIRECTIVE_INTTYPES_H@
-NEXT_AS_FIRST_DIRECTIVE_STDDEF_H = @NEXT_AS_FIRST_DIRECTIVE_STDDEF_H@
-NEXT_AS_FIRST_DIRECTIVE_STDINT_H = @NEXT_AS_FIRST_DIRECTIVE_STDINT_H@
-NEXT_AS_FIRST_DIRECTIVE_WCHAR_H = @NEXT_AS_FIRST_DIRECTIVE_WCHAR_H@
-NEXT_AS_FIRST_DIRECTIVE_WCTYPE_H = @NEXT_AS_FIRST_DIRECTIVE_WCTYPE_H@
-NEXT_INTTYPES_H = @NEXT_INTTYPES_H@
-NEXT_STDDEF_H = @NEXT_STDDEF_H@
-NEXT_STDINT_H = @NEXT_STDINT_H@
-NEXT_WCHAR_H = @NEXT_WCHAR_H@
-NEXT_WCTYPE_H = @NEXT_WCTYPE_H@
-OBJEXT = @OBJEXT@
-PACKAGE = @PACKAGE@
-PACKAGE_BUGREPORT = @PACKAGE_BUGREPORT@
-PACKAGE_NAME = @PACKAGE_NAME@
-PACKAGE_STRING = @PACKAGE_STRING@
-PACKAGE_TARNAME = @PACKAGE_TARNAME@
-PACKAGE_URL = @PACKAGE_URL@
-PACKAGE_VERSION = @PACKAGE_VERSION@
-PATH_SEPARATOR = @PATH_SEPARATOR@
-PRAGMA_COLUMNS = @PRAGMA_COLUMNS@
-PRAGMA_SYSTEM_HEADER = @PRAGMA_SYSTEM_HEADER@
-PRIPTR_PREFIX = @PRIPTR_PREFIX@
-PRI_MACROS_BROKEN = @PRI_MACROS_BROKEN@
-PTRDIFF_T_SUFFIX = @PTRDIFF_T_SUFFIX@
-RANLIB = @RANLIB@
-REPLACE_BTOWC = @REPLACE_BTOWC@
-REPLACE_ISWBLANK = @REPLACE_ISWBLANK@
-REPLACE_ISWCNTRL = @REPLACE_ISWCNTRL@
-REPLACE_MBRLEN = @REPLACE_MBRLEN@
-REPLACE_MBRTOWC = @REPLACE_MBRTOWC@
-REPLACE_MBSINIT = @REPLACE_MBSINIT@
-REPLACE_MBSNRTOWCS = @REPLACE_MBSNRTOWCS@
-REPLACE_MBSRTOWCS = @REPLACE_MBSRTOWCS@
-REPLACE_MBSTATE_T = @REPLACE_MBSTATE_T@
-REPLACE_NULL = @REPLACE_NULL@
-REPLACE_STRTOIMAX = @REPLACE_STRTOIMAX@
-REPLACE_TOWLOWER = @REPLACE_TOWLOWER@
-REPLACE_WCRTOMB = @REPLACE_WCRTOMB@
-REPLACE_WCSNRTOMBS = @REPLACE_WCSNRTOMBS@
-REPLACE_WCSRTOMBS = @REPLACE_WCSRTOMBS@
-REPLACE_WCSWIDTH = @REPLACE_WCSWIDTH@
-REPLACE_WCTOB = @REPLACE_WCTOB@
-REPLACE_WCWIDTH = @REPLACE_WCWIDTH@
-SET_MAKE = @SET_MAKE@
-SHELL = @SHELL@
-SIG_ATOMIC_T_SUFFIX = @SIG_ATOMIC_T_SUFFIX@
-SIZE_T_SUFFIX = @SIZE_T_SUFFIX@
-STDBOOL_H = @STDBOOL_H@
-STDDEF_H = @STDDEF_H@
-STDINT_H = @STDINT_H@
-STRIP = @STRIP@
-UINT32_MAX_LT_UINTMAX_MAX = @UINT32_MAX_LT_UINTMAX_MAX@
-UINT64_MAX_EQ_ULONG_MAX = @UINT64_MAX_EQ_ULONG_MAX@
-VERSION = @VERSION@
-WCHAR_T_SUFFIX = @WCHAR_T_SUFFIX@
-WINT_T_SUFFIX = @WINT_T_SUFFIX@
-abs_builddir = @abs_builddir@
-abs_srcdir = @abs_srcdir@
-abs_top_builddir = @abs_top_builddir@
-abs_top_srcdir = @abs_top_srcdir@
-ac_ct_CC = @ac_ct_CC@
-am__include = @am__include@
-am__leading_dot = @am__leading_dot@
-am__quote = @am__quote@
-am__tar = @am__tar@
-am__untar = @am__untar@
-bindir = @bindir@
-build = @build@
-build_alias = @build_alias@
-build_cpu = @build_cpu@
-build_os = @build_os@
-build_vendor = @build_vendor@
-builddir = @builddir@
-datadir = @datadir@
-datarootdir = @datarootdir@
-docdir = @docdir@
-dvidir = @dvidir@
-exec_prefix = @exec_prefix@
-gl_LIBOBJS = @gl_LIBOBJS@
-gl_LTLIBOBJS = @gl_LTLIBOBJS@
-host = @host@
-host_alias = @host_alias@
-host_cpu = @host_cpu@
-host_os = @host_os@
-host_vendor = @host_vendor@
-htmldir = @htmldir@
-includedir = @includedir@
-infodir = @infodir@
-install_sh = @install_sh@
-libdir = @libdir@
-libexecdir = @libexecdir@
-lispdir = @lispdir@
-localedir = @localedir@
-localstatedir = @localstatedir@
-mandir = @mandir@
-mkdir_p = @mkdir_p@
-oldincludedir = @oldincludedir@
-pdfdir = @pdfdir@
-prefix = @prefix@
-program_transform_name = @program_transform_name@
-psdir = @psdir@
-runstatedir = @runstatedir@
-sbindir = @sbindir@
-sharedstatedir = @sharedstatedir@
-srcdir = @srcdir@
-sysconfdir = @sysconfdir@
-target_alias = @target_alias@
-top_build_prefix = @top_build_prefix@
-top_builddir = @top_builddir@
-top_srcdir = @top_srcdir@
-AUTOMAKE_OPTIONS = 1.5 gnits subdir-objects
-SUBDIRS = 
-noinst_HEADERS = 
-noinst_LIBRARIES = libgnu.a
-noinst_LTLIBRARIES = 
-EXTRA_DIST = config.charset ref-add.sin ref-del.sin \
-	$(top_srcdir)/build-aux/snippet/arg-nonnull.h \
-	$(top_srcdir)/build-aux/snippet/c++defs.h \
-	$(top_srcdir)/build-aux/snippet/warn-on-use.h stddef.in.h \
-	stdint.in.h streq.h unitypes.in.h localcharset.h uniwidth.in.h \
-	uniwidth/cjk.h wchar.in.h wctype.in.h wcwidth.c
-
-# The BUILT_SOURCES created by this Makefile snippet are not used via #include
-# statements but through direct file reference. Therefore this snippet must be
-# present in all Makefile.am that need it. This is ensured by the applicability
-# 'all' defined above.
-
-# The BUILT_SOURCES created by this Makefile snippet are not used via #include
-# statements but through direct file reference. Therefore this snippet must be
-# present in all Makefile.am that need it. This is ensured by the applicability
-# 'all' defined above.
-BUILT_SOURCES = configmake.h arg-nonnull.h c++defs.h warn-on-use.h \
-	$(STDDEF_H) $(STDINT_H) $(LIBUNISTRING_UNITYPES_H) \
-	$(LIBUNISTRING_UNIWIDTH_H) wchar.h wctype.h
-SUFFIXES = .sed .sin
-MOSTLYCLEANFILES = core *.stackdump arg-nonnull.h arg-nonnull.h-t \
-	c++defs.h c++defs.h-t warn-on-use.h warn-on-use.h-t stddef.h \
-	stddef.h-t stdint.h stdint.h-t unitypes.h unitypes.h-t \
-	uniwidth.h uniwidth.h-t wchar.h wchar.h-t wctype.h wctype.h-t
-MOSTLYCLEANDIRS = 
-CLEANFILES = configmake.h configmake.h-t charset.alias ref-add.sed \
-	ref-del.sed
-DISTCLEANFILES = 
-MAINTAINERCLEANFILES = 
-AM_CPPFLAGS = 
-AM_CFLAGS = 
-libgnu_a_SOURCES = localcharset.h localcharset.c $(am__append_1) \
-	wctype-h.c
-libgnu_a_LIBADD = $(gl_LIBOBJS)
-libgnu_a_DEPENDENCIES = $(gl_LIBOBJS)
-EXTRA_libgnu_a_SOURCES = wcwidth.c
-charset_alias = $(DESTDIR)$(libdir)/charset.alias
-charset_tmp = $(DESTDIR)$(libdir)/charset.tmp
-ARG_NONNULL_H = arg-nonnull.h
-CXXDEFS_H = c++defs.h
-WARN_ON_USE_H = warn-on-use.h
-all: $(BUILT_SOURCES)
-	$(MAKE) $(AM_MAKEFLAGS) all-recursive
-
-.SUFFIXES:
-.SUFFIXES: .sed .sin .c .o .obj
-$(srcdir)/Makefile.in:  $(srcdir)/Makefile.am  $(am__configure_deps)
-	@for dep in $?; do \
-	  case '$(am__configure_deps)' in \
-	    *$$dep*) \
-	      ( cd $(top_builddir) && $(MAKE) $(AM_MAKEFLAGS) am--refresh ) \
-	        && { if test -f $@; then exit 0; else break; fi; }; \
-	      exit 1;; \
-	  esac; \
-	done; \
-	echo ' cd $(top_srcdir) && $(AUTOMAKE) --gnits lib/Makefile'; \
-	$(am__cd) $(top_srcdir) && \
-	  $(AUTOMAKE) --gnits lib/Makefile
-.PRECIOUS: Makefile
-Makefile: $(srcdir)/Makefile.in $(top_builddir)/config.status
-	@case '$?' in \
-	  *config.status*) \
-	    cd $(top_builddir) && $(MAKE) $(AM_MAKEFLAGS) am--refresh;; \
-	  *) \
-	    echo ' cd $(top_builddir) && $(SHELL) ./config.status $(subdir)/$@ $(am__depfiles_maybe)'; \
-	    cd $(top_builddir) && $(SHELL) ./config.status $(subdir)/$@ $(am__depfiles_maybe);; \
-	esac;
-
-$(top_builddir)/config.status: $(top_srcdir)/configure $(CONFIG_STATUS_DEPENDENCIES)
-	cd $(top_builddir) && $(MAKE) $(AM_MAKEFLAGS) am--refresh
-
-$(top_srcdir)/configure:  $(am__configure_deps)
-	cd $(top_builddir) && $(MAKE) $(AM_MAKEFLAGS) am--refresh
-$(ACLOCAL_M4):  $(am__aclocal_m4_deps)
-	cd $(top_builddir) && $(MAKE) $(AM_MAKEFLAGS) am--refresh
-$(am__aclocal_m4_deps):
-
-clean-noinstLIBRARIES:
-	-test -z "$(noinst_LIBRARIES)" || rm -f $(noinst_LIBRARIES)
-uniwidth/$(am__dirstamp):
-	@$(MKDIR_P) uniwidth
-	@: > uniwidth/$(am__dirstamp)
-uniwidth/$(DEPDIR)/$(am__dirstamp):
-	@$(MKDIR_P) uniwidth/$(DEPDIR)
-	@: > uniwidth/$(DEPDIR)/$(am__dirstamp)
-uniwidth/width.$(OBJEXT): uniwidth/$(am__dirstamp) \
-	uniwidth/$(DEPDIR)/$(am__dirstamp)
-
-libgnu.a: $(libgnu_a_OBJECTS) $(libgnu_a_DEPENDENCIES) $(EXTRA_libgnu_a_DEPENDENCIES) 
-	$(AM_V_at)-rm -f libgnu.a
-	$(AM_V_AR)$(libgnu_a_AR) libgnu.a $(libgnu_a_OBJECTS) $(libgnu_a_LIBADD)
-	$(AM_V_at)$(RANLIB) libgnu.a
-
-clean-noinstLTLIBRARIES:
-	-test -z "$(noinst_LTLIBRARIES)" || rm -f $(noinst_LTLIBRARIES)
-	@list='$(noinst_LTLIBRARIES)'; \
-	locs=`for p in $$list; do echo $$p; done | \
-	      sed 's|^[^/]*$$|.|; s|/[^/]*$$||; s|$$|/so_locations|' | \
-	      sort -u`; \
-	test -z "$$locs" || { \
-	  echo rm -f $${locs}; \
-	  rm -f $${locs}; \
-	}
-
-mostlyclean-compile:
-	-rm -f *.$(OBJEXT)
-	-rm -f uniwidth/*.$(OBJEXT)
-
-distclean-compile:
-	-rm -f *.tab.c
-
-@AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/localcharset.Po@am__quote@
-@AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/wctype-h.Po@am__quote@
-@AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/wcwidth.Po@am__quote@
-@AMDEP_TRUE@@am__include@ @am__quote@uniwidth/$(DEPDIR)/width.Po@am__quote@
-
-.c.o:
-@am__fastdepCC_TRUE@	$(AM_V_CC)depbase=`echo $@ | sed 's|[^/]*$$|$(DEPDIR)/&|;s|\.o$$||'`;\
-@am__fastdepCC_TRUE@	$(COMPILE) -MT $@ -MD -MP -MF $$depbase.Tpo -c -o $@ $< &&\
-@am__fastdepCC_TRUE@	$(am__mv) $$depbase.Tpo $$depbase.Po
-@AMDEP_TRUE@@am__fastdepCC_FALSE@	$(AM_V_CC)source='$<' object='$@' libtool=no @AMDEPBACKSLASH@
-@AMDEP_TRUE@@am__fastdepCC_FALSE@	DEPDIR=$(DEPDIR) $(CCDEPMODE) $(depcomp) @AMDEPBACKSLASH@
-@am__fastdepCC_FALSE@	$(AM_V_CC@am__nodep@)$(COMPILE) -c -o $@ $<
-
-.c.obj:
-@am__fastdepCC_TRUE@	$(AM_V_CC)depbase=`echo $@ | sed 's|[^/]*$$|$(DEPDIR)/&|;s|\.obj$$||'`;\
-@am__fastdepCC_TRUE@	$(COMPILE) -MT $@ -MD -MP -MF $$depbase.Tpo -c -o $@ `$(CYGPATH_W) '$<'` &&\
-@am__fastdepCC_TRUE@	$(am__mv) $$depbase.Tpo $$depbase.Po
-@AMDEP_TRUE@@am__fastdepCC_FALSE@	$(AM_V_CC)source='$<' object='$@' libtool=no @AMDEPBACKSLASH@
-@AMDEP_TRUE@@am__fastdepCC_FALSE@	DEPDIR=$(DEPDIR) $(CCDEPMODE) $(depcomp) @AMDEPBACKSLASH@
-@am__fastdepCC_FALSE@	$(AM_V_CC@am__nodep@)$(COMPILE) -c -o $@ `$(CYGPATH_W) '$<'`
-
-# This directory's subdirectories are mostly independent; you can cd
-# into them and run 'make' without going through this Makefile.
-# To change the values of 'make' variables: instead of editing Makefiles,
-# (1) if the variable is set in 'config.status', edit 'config.status'
-#     (which will cause the Makefiles to be regenerated when you run 'make');
-# (2) otherwise, pass the desired values on the 'make' command line.
-$(am__recursive_targets):
-	@fail=; \
-	if $(am__make_keepgoing); then \
-	  failcom='fail=yes'; \
-	else \
-	  failcom='exit 1'; \
-	fi; \
-	dot_seen=no; \
-	target=`echo $@ | sed s/-recursive//`; \
-	case "$@" in \
-	  distclean-* | maintainer-clean-*) list='$(DIST_SUBDIRS)' ;; \
-	  *) list='$(SUBDIRS)' ;; \
-	esac; \
-	for subdir in $$list; do \
-	  echo "Making $$target in $$subdir"; \
-	  if test "$$subdir" = "."; then \
-	    dot_seen=yes; \
-	    local_target="$$target-am"; \
-	  else \
-	    local_target="$$target"; \
-	  fi; \
-	  ($(am__cd) $$subdir && $(MAKE) $(AM_MAKEFLAGS) $$local_target) \
-	  || eval $$failcom; \
-	done; \
-	if test "$$dot_seen" = "no"; then \
-	  $(MAKE) $(AM_MAKEFLAGS) "$$target-am" || exit 1; \
-	fi; test -z "$$fail"
-
-ID: $(am__tagged_files)
-	$(am__define_uniq_tagged_files); mkid -fID $$unique
-tags: tags-recursive
-TAGS: tags
-
-tags-am: $(TAGS_DEPENDENCIES) $(am__tagged_files)
-	set x; \
-	here=`pwd`; \
-	if ($(ETAGS) --etags-include --version) >/dev/null 2>&1; then \
-	  include_option=--etags-include; \
-	  empty_fix=.; \
-	else \
-	  include_option=--include; \
-	  empty_fix=; \
-	fi; \
-	list='$(SUBDIRS)'; for subdir in $$list; do \
-	  if test "$$subdir" = .; then :; else \
-	    test ! -f $$subdir/TAGS || \
-	      set "$$@" "$$include_option=$$here/$$subdir/TAGS"; \
-	  fi; \
-	done; \
-	$(am__define_uniq_tagged_files); \
-	shift; \
-	if test -z "$(ETAGS_ARGS)$$*$$unique"; then :; else \
-	  test -n "$$unique" || unique=$$empty_fix; \
-	  if test $$# -gt 0; then \
-	    $(ETAGS) $(ETAGSFLAGS) $(AM_ETAGSFLAGS) $(ETAGS_ARGS) \
-	      "$$@" $$unique; \
-	  else \
-	    $(ETAGS) $(ETAGSFLAGS) $(AM_ETAGSFLAGS) $(ETAGS_ARGS) \
-	      $$unique; \
-	  fi; \
-	fi
-ctags: ctags-recursive
-
-CTAGS: ctags
-ctags-am: $(TAGS_DEPENDENCIES) $(am__tagged_files)
-	$(am__define_uniq_tagged_files); \
-	test -z "$(CTAGS_ARGS)$$unique" \
-	  || $(CTAGS) $(CTAGSFLAGS) $(AM_CTAGSFLAGS) $(CTAGS_ARGS) \
-	     $$unique
-
-GTAGS:
-	here=`$(am__cd) $(top_builddir) && pwd` \
-	  && $(am__cd) $(top_srcdir) \
-	  && gtags -i $(GTAGS_ARGS) "$$here"
-cscopelist: cscopelist-recursive
-
-cscopelist-am: $(am__tagged_files)
-	list='$(am__tagged_files)'; \
-	case "$(srcdir)" in \
-	  [\\/]* | ?:[\\/]*) sdir="$(srcdir)" ;; \
-	  *) sdir=$(subdir)/$(srcdir) ;; \
-	esac; \
-	for i in $$list; do \
-	  if test -f "$$i"; then \
-	    echo "$(subdir)/$$i"; \
-	  else \
-	    echo "$$sdir/$$i"; \
-	  fi; \
-	done >> $(top_builddir)/cscope.files
-
-distclean-tags:
-	-rm -f TAGS ID GTAGS GRTAGS GSYMS GPATH tags
-
-distdir: $(DISTFILES)
-	@srcdirstrip=`echo "$(srcdir)" | sed 's/[].[^$$\\*]/\\\\&/g'`; \
-	topsrcdirstrip=`echo "$(top_srcdir)" | sed 's/[].[^$$\\*]/\\\\&/g'`; \
-	list='$(DISTFILES)'; \
-	  dist_files=`for file in $$list; do echo $$file; done | \
-	  sed -e "s|^$$srcdirstrip/||;t" \
-	      -e "s|^$$topsrcdirstrip/|$(top_builddir)/|;t"`; \
-	case $$dist_files in \
-	  */*) $(MKDIR_P) `echo "$$dist_files" | \
-			   sed '/\//!d;s|^|$(distdir)/|;s,/[^/]*$$,,' | \
-			   sort -u` ;; \
-	esac; \
-	for file in $$dist_files; do \
-	  if test -f $$file || test -d $$file; then d=.; else d=$(srcdir); fi; \
-	  if test -d $$d/$$file; then \
-	    dir=`echo "/$$file" | sed -e 's,/[^/]*$$,,'`; \
-	    if test -d "$(distdir)/$$file"; then \
-	      find "$(distdir)/$$file" -type d ! -perm -700 -exec chmod u+rwx {} \;; \
-	    fi; \
-	    if test -d $(srcdir)/$$file && test $$d != $(srcdir); then \
-	      cp -fpR $(srcdir)/$$file "$(distdir)$$dir" || exit 1; \
-	      find "$(distdir)/$$file" -type d ! -perm -700 -exec chmod u+rwx {} \;; \
-	    fi; \
-	    cp -fpR $$d/$$file "$(distdir)$$dir" || exit 1; \
-	  else \
-	    test -f "$(distdir)/$$file" \
-	    || cp -p $$d/$$file "$(distdir)/$$file" \
-	    || exit 1; \
-	  fi; \
-	done
-	@list='$(DIST_SUBDIRS)'; for subdir in $$list; do \
-	  if test "$$subdir" = .; then :; else \
-	    $(am__make_dryrun) \
-	      || test -d "$(distdir)/$$subdir" \
-	      || $(MKDIR_P) "$(distdir)/$$subdir" \
-	      || exit 1; \
-	    dir1=$$subdir; dir2="$(distdir)/$$subdir"; \
-	    $(am__relativize); \
-	    new_distdir=$$reldir; \
-	    dir1=$$subdir; dir2="$(top_distdir)"; \
-	    $(am__relativize); \
-	    new_top_distdir=$$reldir; \
-	    echo " (cd $$subdir && $(MAKE) $(AM_MAKEFLAGS) top_distdir="$$new_top_distdir" distdir="$$new_distdir" \\"; \
-	    echo "     am__remove_distdir=: am__skip_length_check=: am__skip_mode_fix=: distdir)"; \
-	    ($(am__cd) $$subdir && \
-	      $(MAKE) $(AM_MAKEFLAGS) \
-	        top_distdir="$$new_top_distdir" \
-	        distdir="$$new_distdir" \
-		am__remove_distdir=: \
-		am__skip_length_check=: \
-		am__skip_mode_fix=: \
-	        distdir) \
-	      || exit 1; \
-	  fi; \
-	done
-check-am: all-am
-check: $(BUILT_SOURCES)
-	$(MAKE) $(AM_MAKEFLAGS) check-recursive
-all-am: Makefile $(LIBRARIES) $(LTLIBRARIES) $(HEADERS) all-local
-installdirs: installdirs-recursive
-installdirs-am:
-install: $(BUILT_SOURCES)
-	$(MAKE) $(AM_MAKEFLAGS) install-recursive
-install-exec: install-exec-recursive
-install-data: install-data-recursive
-uninstall: uninstall-recursive
-
-install-am: all-am
-	@$(MAKE) $(AM_MAKEFLAGS) install-exec-am install-data-am
-
-installcheck: installcheck-recursive
-install-strip:
-	if test -z '$(STRIP)'; then \
-	  $(MAKE) $(AM_MAKEFLAGS) INSTALL_PROGRAM="$(INSTALL_STRIP_PROGRAM)" \
-	    install_sh_PROGRAM="$(INSTALL_STRIP_PROGRAM)" INSTALL_STRIP_FLAG=-s \
-	      install; \
-	else \
-	  $(MAKE) $(AM_MAKEFLAGS) INSTALL_PROGRAM="$(INSTALL_STRIP_PROGRAM)" \
-	    install_sh_PROGRAM="$(INSTALL_STRIP_PROGRAM)" INSTALL_STRIP_FLAG=-s \
-	    "INSTALL_PROGRAM_ENV=STRIPPROG='$(STRIP)'" install; \
-	fi
-mostlyclean-generic:
-	-test -z "$(MOSTLYCLEANFILES)" || rm -f $(MOSTLYCLEANFILES)
-
-clean-generic:
-	-test -z "$(CLEANFILES)" || rm -f $(CLEANFILES)
-
-distclean-generic:
-	-test -z "$(CONFIG_CLEAN_FILES)" || rm -f $(CONFIG_CLEAN_FILES)
-	-test . = "$(srcdir)" || test -z "$(CONFIG_CLEAN_VPATH_FILES)" || rm -f $(CONFIG_CLEAN_VPATH_FILES)
-	-rm -f uniwidth/$(DEPDIR)/$(am__dirstamp)
-	-rm -f uniwidth/$(am__dirstamp)
-	-test -z "$(DISTCLEANFILES)" || rm -f $(DISTCLEANFILES)
-
-maintainer-clean-generic:
-	@echo "This command is intended for maintainers to use"
-	@echo "it deletes files that may require special tools to rebuild."
-	-test -z "$(BUILT_SOURCES)" || rm -f $(BUILT_SOURCES)
-	-test -z "$(MAINTAINERCLEANFILES)" || rm -f $(MAINTAINERCLEANFILES)
-clean: clean-recursive
-
-clean-am: clean-generic clean-noinstLIBRARIES clean-noinstLTLIBRARIES \
-	mostlyclean-am
-
-distclean: distclean-recursive
-	-rm -rf ./$(DEPDIR) uniwidth/$(DEPDIR)
-	-rm -f Makefile
-distclean-am: clean-am distclean-compile distclean-generic \
-	distclean-tags
-
-dvi: dvi-recursive
-
-dvi-am:
-
-html: html-recursive
-
-html-am:
-
-info: info-recursive
-
-info-am:
-
-install-data-am:
-
-install-dvi: install-dvi-recursive
-
-install-dvi-am:
-
-install-exec-am: install-exec-local
-
-install-html: install-html-recursive
-
-install-html-am:
-
-install-info: install-info-recursive
-
-install-info-am:
-
-install-man:
-
-install-pdf: install-pdf-recursive
-
-install-pdf-am:
-
-install-ps: install-ps-recursive
-
-install-ps-am:
-
-installcheck-am:
-
-maintainer-clean: maintainer-clean-recursive
-	-rm -rf ./$(DEPDIR) uniwidth/$(DEPDIR)
-	-rm -f Makefile
-maintainer-clean-am: distclean-am maintainer-clean-generic
-
-mostlyclean: mostlyclean-recursive
-
-mostlyclean-am: mostlyclean-compile mostlyclean-generic \
-	mostlyclean-local
-
-pdf: pdf-recursive
-
-pdf-am:
-
-ps: ps-recursive
-
-ps-am:
-
-uninstall-am: uninstall-local
-
-.MAKE: $(am__recursive_targets) all check install install-am \
-	install-strip
-
-.PHONY: $(am__recursive_targets) CTAGS GTAGS TAGS all all-am all-local \
-	check check-am clean clean-generic clean-noinstLIBRARIES \
-	clean-noinstLTLIBRARIES cscopelist-am ctags ctags-am distclean \
-	distclean-compile distclean-generic distclean-tags distdir dvi \
-	dvi-am html html-am info info-am install install-am \
-	install-data install-data-am install-dvi install-dvi-am \
-	install-exec install-exec-am install-exec-local install-html \
-	install-html-am install-info install-info-am install-man \
-	install-pdf install-pdf-am install-ps install-ps-am \
-	install-strip installcheck installcheck-am installdirs \
-	installdirs-am maintainer-clean maintainer-clean-generic \
-	mostlyclean mostlyclean-compile mostlyclean-generic \
-	mostlyclean-local pdf pdf-am ps ps-am tags tags-am uninstall \
-	uninstall-am uninstall-local
-
-
-# Listed in the same order as the GNU makefile conventions, and
-# provided by autoconf 2.59c+.
-# The Automake-defined pkg* macros are appended, in the order
-# listed in the Automake 1.10a+ documentation.
-configmake.h: Makefile
-	$(AM_V_GEN)rm -f $@-t && \
-	{ echo '/* DO NOT EDIT! GENERATED AUTOMATICALLY! */'; \
-	  echo '#define PREFIX "$(prefix)"'; \
-	  echo '#define EXEC_PREFIX "$(exec_prefix)"'; \
-	  echo '#define BINDIR "$(bindir)"'; \
-	  echo '#define SBINDIR "$(sbindir)"'; \
-	  echo '#define LIBEXECDIR "$(libexecdir)"'; \
-	  echo '#define DATAROOTDIR "$(datarootdir)"'; \
-	  echo '#define DATADIR "$(datadir)"'; \
-	  echo '#define SYSCONFDIR "$(sysconfdir)"'; \
-	  echo '#define SHAREDSTATEDIR "$(sharedstatedir)"'; \
-	  echo '#define LOCALSTATEDIR "$(localstatedir)"'; \
-	  echo '#define INCLUDEDIR "$(includedir)"'; \
-	  echo '#define OLDINCLUDEDIR "$(oldincludedir)"'; \
-	  echo '#define DOCDIR "$(docdir)"'; \
-	  echo '#define INFODIR "$(infodir)"'; \
-	  echo '#define HTMLDIR "$(htmldir)"'; \
-	  echo '#define DVIDIR "$(dvidir)"'; \
-	  echo '#define PDFDIR "$(pdfdir)"'; \
-	  echo '#define PSDIR "$(psdir)"'; \
-	  echo '#define LIBDIR "$(libdir)"'; \
-	  echo '#define LISPDIR "$(lispdir)"'; \
-	  echo '#define LOCALEDIR "$(localedir)"'; \
-	  echo '#define MANDIR "$(mandir)"'; \
-	  echo '#define MANEXT "$(manext)"'; \
-	  echo '#define PKGDATADIR "$(pkgdatadir)"'; \
-	  echo '#define PKGINCLUDEDIR "$(pkgincludedir)"'; \
-	  echo '#define PKGLIBDIR "$(pkglibdir)"'; \
-	  echo '#define PKGLIBEXECDIR "$(pkglibexecdir)"'; \
-	} | sed '/""/d' > $@-t && \
-	mv -f $@-t $@
-
-# We need the following in order to install a simple file in $(libdir)
-# which is shared with other installed packages. We use a list of referencing
-# packages so that "make uninstall" will remove the file if and only if it
-# is not used by another installed package.
-# On systems with glibc-2.1 or newer, the file is redundant, therefore we
-# avoid installing it.
-
-all-local: charset.alias ref-add.sed ref-del.sed
-install-exec-local: install-exec-localcharset
-install-exec-localcharset: all-local
-	if test $(GLIBC21) = no; then \
-	  case '$(host_os)' in \
-	    darwin[56]*) \
-	      need_charset_alias=true ;; \
-	    darwin* | cygwin* | mingw* | pw32* | cegcc*) \
-	      need_charset_alias=false ;; \
-	    *) \
-	      need_charset_alias=true ;; \
-	  esac ; \
-	else \
-	  need_charset_alias=false ; \
-	fi ; \
-	if $$need_charset_alias; then \
-	  $(mkinstalldirs) $(DESTDIR)$(libdir) ; \
-	fi ; \
-	if test -f $(charset_alias); then \
-	  sed -f ref-add.sed $(charset_alias) > $(charset_tmp) ; \
-	  $(INSTALL_DATA) $(charset_tmp) $(charset_alias) ; \
-	  rm -f $(charset_tmp) ; \
-	else \
-	  if $$need_charset_alias; then \
-	    sed -f ref-add.sed charset.alias > $(charset_tmp) ; \
-	    $(INSTALL_DATA) $(charset_tmp) $(charset_alias) ; \
-	    rm -f $(charset_tmp) ; \
-	  fi ; \
-	fi
-
-uninstall-local: uninstall-localcharset
-uninstall-localcharset: all-local
-	if test -f $(charset_alias); then \
-	  sed -f ref-del.sed $(charset_alias) > $(charset_tmp); \
-	  if grep '^# Packages using this file: $$' $(charset_tmp) \
-	      > /dev/null; then \
-	    rm -f $(charset_alias); \
-	  else \
-	    $(INSTALL_DATA) $(charset_tmp) $(charset_alias); \
-	  fi; \
-	  rm -f $(charset_tmp); \
-	fi
-
-charset.alias: config.charset
-	$(AM_V_GEN)rm -f t-$@ $@ && \
-	$(SHELL) $(srcdir)/config.charset '$(host)' > t-$@ && \
-	mv t-$@ $@
-.sin.sed:
-	$(AM_V_GEN)rm -f t-$@ $@ && \
-	sed -e '/^#/d' -e 's/@''PACKAGE''@/$(PACKAGE)/g' $< > t-$@ && \
-	mv t-$@ $@
-# The arg-nonnull.h that gets inserted into generated .h files is the same as
-# build-aux/snippet/arg-nonnull.h, except that it has the copyright header cut
-# off.
-arg-nonnull.h: $(top_srcdir)/build-aux/snippet/arg-nonnull.h
-	$(AM_V_GEN)rm -f $@-t $@ && \
-	sed -n -e '/GL_ARG_NONNULL/,$$p' \
-	  < $(top_srcdir)/build-aux/snippet/arg-nonnull.h \
-	  > $@-t && \
-	mv $@-t $@
-# The c++defs.h that gets inserted into generated .h files is the same as
-# build-aux/snippet/c++defs.h, except that it has the copyright header cut off.
-c++defs.h: $(top_srcdir)/build-aux/snippet/c++defs.h
-	$(AM_V_GEN)rm -f $@-t $@ && \
-	sed -n -e '/_GL_CXXDEFS/,$$p' \
-	  < $(top_srcdir)/build-aux/snippet/c++defs.h \
-	  > $@-t && \
-	mv $@-t $@
-# The warn-on-use.h that gets inserted into generated .h files is the same as
-# build-aux/snippet/warn-on-use.h, except that it has the copyright header cut
-# off.
-warn-on-use.h: $(top_srcdir)/build-aux/snippet/warn-on-use.h
-	$(AM_V_GEN)rm -f $@-t $@ && \
-	sed -n -e '/^.ifndef/,$$p' \
-	  < $(top_srcdir)/build-aux/snippet/warn-on-use.h \
-	  > $@-t && \
-	mv $@-t $@
-
-# We need the following in order to create <stddef.h> when the system
-# doesn't have one that works with the given compiler.
-@GL_GENERATE_STDDEF_H_TRUE@stddef.h: stddef.in.h $(top_builddir)/config.status
-@GL_GENERATE_STDDEF_H_TRUE@	$(AM_V_GEN)rm -f $@-t $@ && \
-@GL_GENERATE_STDDEF_H_TRUE@	{ echo '/* DO NOT EDIT! GENERATED AUTOMATICALLY! */' && \
-@GL_GENERATE_STDDEF_H_TRUE@	  sed -e 's|@''GUARD_PREFIX''@|GL|g' \
-@GL_GENERATE_STDDEF_H_TRUE@	      -e 's|@''INCLUDE_NEXT''@|$(INCLUDE_NEXT)|g' \
-@GL_GENERATE_STDDEF_H_TRUE@	      -e 's|@''PRAGMA_SYSTEM_HEADER''@|@PRAGMA_SYSTEM_HEADER@|g' \
-@GL_GENERATE_STDDEF_H_TRUE@	      -e 's|@''PRAGMA_COLUMNS''@|@PRAGMA_COLUMNS@|g' \
-@GL_GENERATE_STDDEF_H_TRUE@	      -e 's|@''NEXT_STDDEF_H''@|$(NEXT_STDDEF_H)|g' \
-@GL_GENERATE_STDDEF_H_TRUE@	      -e 's|@''HAVE_WCHAR_T''@|$(HAVE_WCHAR_T)|g' \
-@GL_GENERATE_STDDEF_H_TRUE@	      -e 's|@''REPLACE_NULL''@|$(REPLACE_NULL)|g' \
-@GL_GENERATE_STDDEF_H_TRUE@	      < $(srcdir)/stddef.in.h; \
-@GL_GENERATE_STDDEF_H_TRUE@	} > $@-t && \
-@GL_GENERATE_STDDEF_H_TRUE@	mv $@-t $@
-@GL_GENERATE_STDDEF_H_FALSE@stddef.h: $(top_builddir)/config.status
-@GL_GENERATE_STDDEF_H_FALSE@	rm -f $@
-
-# We need the following in order to create <stdint.h> when the system
-# doesn't have one that works with the given compiler.
-@GL_GENERATE_STDINT_H_TRUE@stdint.h: stdint.in.h $(top_builddir)/config.status
-@GL_GENERATE_STDINT_H_TRUE@	$(AM_V_GEN)rm -f $@-t $@ && \
-@GL_GENERATE_STDINT_H_TRUE@	{ echo '/* DO NOT EDIT! GENERATED AUTOMATICALLY! */'; \
-@GL_GENERATE_STDINT_H_TRUE@	  sed -e 's|@''GUARD_PREFIX''@|GL|g' \
-@GL_GENERATE_STDINT_H_TRUE@	      -e 's/@''HAVE_STDINT_H''@/$(HAVE_STDINT_H)/g' \
-@GL_GENERATE_STDINT_H_TRUE@	      -e 's|@''INCLUDE_NEXT''@|$(INCLUDE_NEXT)|g' \
-@GL_GENERATE_STDINT_H_TRUE@	      -e 's|@''PRAGMA_SYSTEM_HEADER''@|@PRAGMA_SYSTEM_HEADER@|g' \
-@GL_GENERATE_STDINT_H_TRUE@	      -e 's|@''PRAGMA_COLUMNS''@|@PRAGMA_COLUMNS@|g' \
-@GL_GENERATE_STDINT_H_TRUE@	      -e 's|@''NEXT_STDINT_H''@|$(NEXT_STDINT_H)|g' \
-@GL_GENERATE_STDINT_H_TRUE@	      -e 's/@''HAVE_SYS_TYPES_H''@/$(HAVE_SYS_TYPES_H)/g' \
-@GL_GENERATE_STDINT_H_TRUE@	      -e 's/@''HAVE_INTTYPES_H''@/$(HAVE_INTTYPES_H)/g' \
-@GL_GENERATE_STDINT_H_TRUE@	      -e 's/@''HAVE_SYS_INTTYPES_H''@/$(HAVE_SYS_INTTYPES_H)/g' \
-@GL_GENERATE_STDINT_H_TRUE@	      -e 's/@''HAVE_SYS_BITYPES_H''@/$(HAVE_SYS_BITYPES_H)/g' \
-@GL_GENERATE_STDINT_H_TRUE@	      -e 's/@''HAVE_WCHAR_H''@/$(HAVE_WCHAR_H)/g' \
-@GL_GENERATE_STDINT_H_TRUE@	      -e 's/@''HAVE_LONG_LONG_INT''@/$(HAVE_LONG_LONG_INT)/g' \
-@GL_GENERATE_STDINT_H_TRUE@	      -e 's/@''HAVE_UNSIGNED_LONG_LONG_INT''@/$(HAVE_UNSIGNED_LONG_LONG_INT)/g' \
-@GL_GENERATE_STDINT_H_TRUE@	      -e 's/@''APPLE_UNIVERSAL_BUILD''@/$(APPLE_UNIVERSAL_BUILD)/g' \
-@GL_GENERATE_STDINT_H_TRUE@	      -e 's/@''BITSIZEOF_PTRDIFF_T''@/$(BITSIZEOF_PTRDIFF_T)/g' \
-@GL_GENERATE_STDINT_H_TRUE@	      -e 's/@''PTRDIFF_T_SUFFIX''@/$(PTRDIFF_T_SUFFIX)/g' \
-@GL_GENERATE_STDINT_H_TRUE@	      -e 's/@''BITSIZEOF_SIG_ATOMIC_T''@/$(BITSIZEOF_SIG_ATOMIC_T)/g' \
-@GL_GENERATE_STDINT_H_TRUE@	      -e 's/@''HAVE_SIGNED_SIG_ATOMIC_T''@/$(HAVE_SIGNED_SIG_ATOMIC_T)/g' \
-@GL_GENERATE_STDINT_H_TRUE@	      -e 's/@''SIG_ATOMIC_T_SUFFIX''@/$(SIG_ATOMIC_T_SUFFIX)/g' \
-@GL_GENERATE_STDINT_H_TRUE@	      -e 's/@''BITSIZEOF_SIZE_T''@/$(BITSIZEOF_SIZE_T)/g' \
-@GL_GENERATE_STDINT_H_TRUE@	      -e 's/@''SIZE_T_SUFFIX''@/$(SIZE_T_SUFFIX)/g' \
-@GL_GENERATE_STDINT_H_TRUE@	      -e 's/@''BITSIZEOF_WCHAR_T''@/$(BITSIZEOF_WCHAR_T)/g' \
-@GL_GENERATE_STDINT_H_TRUE@	      -e 's/@''HAVE_SIGNED_WCHAR_T''@/$(HAVE_SIGNED_WCHAR_T)/g' \
-@GL_GENERATE_STDINT_H_TRUE@	      -e 's/@''WCHAR_T_SUFFIX''@/$(WCHAR_T_SUFFIX)/g' \
-@GL_GENERATE_STDINT_H_TRUE@	      -e 's/@''BITSIZEOF_WINT_T''@/$(BITSIZEOF_WINT_T)/g' \
-@GL_GENERATE_STDINT_H_TRUE@	      -e 's/@''HAVE_SIGNED_WINT_T''@/$(HAVE_SIGNED_WINT_T)/g' \
-@GL_GENERATE_STDINT_H_TRUE@	      -e 's/@''WINT_T_SUFFIX''@/$(WINT_T_SUFFIX)/g' \
-@GL_GENERATE_STDINT_H_TRUE@	      < $(srcdir)/stdint.in.h; \
-@GL_GENERATE_STDINT_H_TRUE@	} > $@-t && \
-@GL_GENERATE_STDINT_H_TRUE@	mv $@-t $@
-@GL_GENERATE_STDINT_H_FALSE@stdint.h: $(top_builddir)/config.status
-@GL_GENERATE_STDINT_H_FALSE@	rm -f $@
-
-unitypes.h: unitypes.in.h
-	$(AM_V_GEN)rm -f $@-t $@ && \
-	{ echo '/* DO NOT EDIT! GENERATED AUTOMATICALLY! */'; \
-	  cat $(srcdir)/unitypes.in.h; \
-	} > $@-t && \
-	mv -f $@-t $@
-
-uniwidth.h: uniwidth.in.h
-	$(AM_V_GEN)rm -f $@-t $@ && \
-	{ echo '/* DO NOT EDIT! GENERATED AUTOMATICALLY! */'; \
-	  cat $(srcdir)/uniwidth.in.h; \
-	} > $@-t && \
-	mv -f $@-t $@
-
-# We need the following in order to create <wchar.h> when the system
-# version does not work standalone.
-wchar.h: wchar.in.h $(top_builddir)/config.status $(CXXDEFS_H) $(ARG_NONNULL_H) $(WARN_ON_USE_H)
-	$(AM_V_GEN)rm -f $@-t $@ && \
-	{ echo '/* DO NOT EDIT! GENERATED AUTOMATICALLY! */'; \
-	  sed -e 's|@''GUARD_PREFIX''@|GL|g' \
-	      -e 's|@''INCLUDE_NEXT''@|$(INCLUDE_NEXT)|g' \
-	      -e 's|@''PRAGMA_SYSTEM_HEADER''@|@PRAGMA_SYSTEM_HEADER@|g' \
-	      -e 's|@''PRAGMA_COLUMNS''@|@PRAGMA_COLUMNS@|g' \
-	      -e 's|@''HAVE_FEATURES_H''@|$(HAVE_FEATURES_H)|g' \
-	      -e 's|@''NEXT_WCHAR_H''@|$(NEXT_WCHAR_H)|g' \
-	      -e 's|@''HAVE_WCHAR_H''@|$(HAVE_WCHAR_H)|g' \
-	      -e 's/@''GNULIB_BTOWC''@/$(GNULIB_BTOWC)/g' \
-	      -e 's/@''GNULIB_WCTOB''@/$(GNULIB_WCTOB)/g' \
-	      -e 's/@''GNULIB_MBSINIT''@/$(GNULIB_MBSINIT)/g' \
-	      -e 's/@''GNULIB_MBRTOWC''@/$(GNULIB_MBRTOWC)/g' \
-	      -e 's/@''GNULIB_MBRLEN''@/$(GNULIB_MBRLEN)/g' \
-	      -e 's/@''GNULIB_MBSRTOWCS''@/$(GNULIB_MBSRTOWCS)/g' \
-	      -e 's/@''GNULIB_MBSNRTOWCS''@/$(GNULIB_MBSNRTOWCS)/g' \
-	      -e 's/@''GNULIB_WCRTOMB''@/$(GNULIB_WCRTOMB)/g' \
-	      -e 's/@''GNULIB_WCSRTOMBS''@/$(GNULIB_WCSRTOMBS)/g' \
-	      -e 's/@''GNULIB_WCSNRTOMBS''@/$(GNULIB_WCSNRTOMBS)/g' \
-	      -e 's/@''GNULIB_WCWIDTH''@/$(GNULIB_WCWIDTH)/g' \
-	      -e 's/@''GNULIB_WMEMCHR''@/$(GNULIB_WMEMCHR)/g' \
-	      -e 's/@''GNULIB_WMEMCMP''@/$(GNULIB_WMEMCMP)/g' \
-	      -e 's/@''GNULIB_WMEMCPY''@/$(GNULIB_WMEMCPY)/g' \
-	      -e 's/@''GNULIB_WMEMMOVE''@/$(GNULIB_WMEMMOVE)/g' \
-	      -e 's/@''GNULIB_WMEMSET''@/$(GNULIB_WMEMSET)/g' \
-	      -e 's/@''GNULIB_WCSLEN''@/$(GNULIB_WCSLEN)/g' \
-	      -e 's/@''GNULIB_WCSNLEN''@/$(GNULIB_WCSNLEN)/g' \
-	      -e 's/@''GNULIB_WCSCPY''@/$(GNULIB_WCSCPY)/g' \
-	      -e 's/@''GNULIB_WCPCPY''@/$(GNULIB_WCPCPY)/g' \
-	      -e 's/@''GNULIB_WCSNCPY''@/$(GNULIB_WCSNCPY)/g' \
-	      -e 's/@''GNULIB_WCPNCPY''@/$(GNULIB_WCPNCPY)/g' \
-	      -e 's/@''GNULIB_WCSCAT''@/$(GNULIB_WCSCAT)/g' \
-	      -e 's/@''GNULIB_WCSNCAT''@/$(GNULIB_WCSNCAT)/g' \
-	      -e 's/@''GNULIB_WCSCMP''@/$(GNULIB_WCSCMP)/g' \
-	      -e 's/@''GNULIB_WCSNCMP''@/$(GNULIB_WCSNCMP)/g' \
-	      -e 's/@''GNULIB_WCSCASECMP''@/$(GNULIB_WCSCASECMP)/g' \
-	      -e 's/@''GNULIB_WCSNCASECMP''@/$(GNULIB_WCSNCASECMP)/g' \
-	      -e 's/@''GNULIB_WCSCOLL''@/$(GNULIB_WCSCOLL)/g' \
-	      -e 's/@''GNULIB_WCSXFRM''@/$(GNULIB_WCSXFRM)/g' \
-	      -e 's/@''GNULIB_WCSDUP''@/$(GNULIB_WCSDUP)/g' \
-	      -e 's/@''GNULIB_WCSCHR''@/$(GNULIB_WCSCHR)/g' \
-	      -e 's/@''GNULIB_WCSRCHR''@/$(GNULIB_WCSRCHR)/g' \
-	      -e 's/@''GNULIB_WCSCSPN''@/$(GNULIB_WCSCSPN)/g' \
-	      -e 's/@''GNULIB_WCSSPN''@/$(GNULIB_WCSSPN)/g' \
-	      -e 's/@''GNULIB_WCSPBRK''@/$(GNULIB_WCSPBRK)/g' \
-	      -e 's/@''GNULIB_WCSSTR''@/$(GNULIB_WCSSTR)/g' \
-	      -e 's/@''GNULIB_WCSTOK''@/$(GNULIB_WCSTOK)/g' \
-	      -e 's/@''GNULIB_WCSWIDTH''@/$(GNULIB_WCSWIDTH)/g' \
-	      < $(srcdir)/wchar.in.h | \
-	  sed -e 's|@''HAVE_WINT_T''@|$(HAVE_WINT_T)|g' \
-	      -e 's|@''HAVE_BTOWC''@|$(HAVE_BTOWC)|g' \
-	      -e 's|@''HAVE_MBSINIT''@|$(HAVE_MBSINIT)|g' \
-	      -e 's|@''HAVE_MBRTOWC''@|$(HAVE_MBRTOWC)|g' \
-	      -e 's|@''HAVE_MBRLEN''@|$(HAVE_MBRLEN)|g' \
-	      -e 's|@''HAVE_MBSRTOWCS''@|$(HAVE_MBSRTOWCS)|g' \
-	      -e 's|@''HAVE_MBSNRTOWCS''@|$(HAVE_MBSNRTOWCS)|g' \
-	      -e 's|@''HAVE_WCRTOMB''@|$(HAVE_WCRTOMB)|g' \
-	      -e 's|@''HAVE_WCSRTOMBS''@|$(HAVE_WCSRTOMBS)|g' \
-	      -e 's|@''HAVE_WCSNRTOMBS''@|$(HAVE_WCSNRTOMBS)|g' \
-	      -e 's|@''HAVE_WMEMCHR''@|$(HAVE_WMEMCHR)|g' \
-	      -e 's|@''HAVE_WMEMCMP''@|$(HAVE_WMEMCMP)|g' \
-	      -e 's|@''HAVE_WMEMCPY''@|$(HAVE_WMEMCPY)|g' \
-	      -e 's|@''HAVE_WMEMMOVE''@|$(HAVE_WMEMMOVE)|g' \
-	      -e 's|@''HAVE_WMEMSET''@|$(HAVE_WMEMSET)|g' \
-	      -e 's|@''HAVE_WCSLEN''@|$(HAVE_WCSLEN)|g' \
-	      -e 's|@''HAVE_WCSNLEN''@|$(HAVE_WCSNLEN)|g' \
-	      -e 's|@''HAVE_WCSCPY''@|$(HAVE_WCSCPY)|g' \
-	      -e 's|@''HAVE_WCPCPY''@|$(HAVE_WCPCPY)|g' \
-	      -e 's|@''HAVE_WCSNCPY''@|$(HAVE_WCSNCPY)|g' \
-	      -e 's|@''HAVE_WCPNCPY''@|$(HAVE_WCPNCPY)|g' \
-	      -e 's|@''HAVE_WCSCAT''@|$(HAVE_WCSCAT)|g' \
-	      -e 's|@''HAVE_WCSNCAT''@|$(HAVE_WCSNCAT)|g' \
-	      -e 's|@''HAVE_WCSCMP''@|$(HAVE_WCSCMP)|g' \
-	      -e 's|@''HAVE_WCSNCMP''@|$(HAVE_WCSNCMP)|g' \
-	      -e 's|@''HAVE_WCSCASECMP''@|$(HAVE_WCSCASECMP)|g' \
-	      -e 's|@''HAVE_WCSNCASECMP''@|$(HAVE_WCSNCASECMP)|g' \
-	      -e 's|@''HAVE_WCSCOLL''@|$(HAVE_WCSCOLL)|g' \
-	      -e 's|@''HAVE_WCSXFRM''@|$(HAVE_WCSXFRM)|g' \
-	      -e 's|@''HAVE_WCSDUP''@|$(HAVE_WCSDUP)|g' \
-	      -e 's|@''HAVE_WCSCHR''@|$(HAVE_WCSCHR)|g' \
-	      -e 's|@''HAVE_WCSRCHR''@|$(HAVE_WCSRCHR)|g' \
-	      -e 's|@''HAVE_WCSCSPN''@|$(HAVE_WCSCSPN)|g' \
-	      -e 's|@''HAVE_WCSSPN''@|$(HAVE_WCSSPN)|g' \
-	      -e 's|@''HAVE_WCSPBRK''@|$(HAVE_WCSPBRK)|g' \
-	      -e 's|@''HAVE_WCSSTR''@|$(HAVE_WCSSTR)|g' \
-	      -e 's|@''HAVE_WCSTOK''@|$(HAVE_WCSTOK)|g' \
-	      -e 's|@''HAVE_WCSWIDTH''@|$(HAVE_WCSWIDTH)|g' \
-	      -e 's|@''HAVE_DECL_WCTOB''@|$(HAVE_DECL_WCTOB)|g' \
-	      -e 's|@''HAVE_DECL_WCWIDTH''@|$(HAVE_DECL_WCWIDTH)|g' \
-	  | \
-	  sed -e 's|@''REPLACE_MBSTATE_T''@|$(REPLACE_MBSTATE_T)|g' \
-	      -e 's|@''REPLACE_BTOWC''@|$(REPLACE_BTOWC)|g' \
-	      -e 's|@''REPLACE_WCTOB''@|$(REPLACE_WCTOB)|g' \
-	      -e 's|@''REPLACE_MBSINIT''@|$(REPLACE_MBSINIT)|g' \
-	      -e 's|@''REPLACE_MBRTOWC''@|$(REPLACE_MBRTOWC)|g' \
-	      -e 's|@''REPLACE_MBRLEN''@|$(REPLACE_MBRLEN)|g' \
-	      -e 's|@''REPLACE_MBSRTOWCS''@|$(REPLACE_MBSRTOWCS)|g' \
-	      -e 's|@''REPLACE_MBSNRTOWCS''@|$(REPLACE_MBSNRTOWCS)|g' \
-	      -e 's|@''REPLACE_WCRTOMB''@|$(REPLACE_WCRTOMB)|g' \
-	      -e 's|@''REPLACE_WCSRTOMBS''@|$(REPLACE_WCSRTOMBS)|g' \
-	      -e 's|@''REPLACE_WCSNRTOMBS''@|$(REPLACE_WCSNRTOMBS)|g' \
-	      -e 's|@''REPLACE_WCWIDTH''@|$(REPLACE_WCWIDTH)|g' \
-	      -e 's|@''REPLACE_WCSWIDTH''@|$(REPLACE_WCSWIDTH)|g' \
-	      -e '/definitions of _GL_FUNCDECL_RPL/r $(CXXDEFS_H)' \
-	      -e '/definition of _GL_ARG_NONNULL/r $(ARG_NONNULL_H)' \
-	      -e '/definition of _GL_WARN_ON_USE/r $(WARN_ON_USE_H)'; \
-	} > $@-t && \
-	mv $@-t $@
-
-# We need the following in order to create <wctype.h> when the system
-# doesn't have one that works with the given compiler.
-wctype.h: wctype.in.h $(top_builddir)/config.status $(CXXDEFS_H) $(WARN_ON_USE_H)
-	$(AM_V_GEN)rm -f $@-t $@ && \
-	{ echo '/* DO NOT EDIT! GENERATED AUTOMATICALLY! */'; \
-	  sed -e 's|@''GUARD_PREFIX''@|GL|g' \
-	      -e 's/@''HAVE_WCTYPE_H''@/$(HAVE_WCTYPE_H)/g' \
-	      -e 's|@''INCLUDE_NEXT''@|$(INCLUDE_NEXT)|g' \
-	      -e 's|@''PRAGMA_SYSTEM_HEADER''@|@PRAGMA_SYSTEM_HEADER@|g' \
-	      -e 's|@''PRAGMA_COLUMNS''@|@PRAGMA_COLUMNS@|g' \
-	      -e 's|@''NEXT_WCTYPE_H''@|$(NEXT_WCTYPE_H)|g' \
-	      -e 's/@''GNULIB_ISWBLANK''@/$(GNULIB_ISWBLANK)/g' \
-	      -e 's/@''GNULIB_WCTYPE''@/$(GNULIB_WCTYPE)/g' \
-	      -e 's/@''GNULIB_ISWCTYPE''@/$(GNULIB_ISWCTYPE)/g' \
-	      -e 's/@''GNULIB_WCTRANS''@/$(GNULIB_WCTRANS)/g' \
-	      -e 's/@''GNULIB_TOWCTRANS''@/$(GNULIB_TOWCTRANS)/g' \
-	      -e 's/@''HAVE_ISWBLANK''@/$(HAVE_ISWBLANK)/g' \
-	      -e 's/@''HAVE_ISWCNTRL''@/$(HAVE_ISWCNTRL)/g' \
-	      -e 's/@''HAVE_WCTYPE_T''@/$(HAVE_WCTYPE_T)/g' \
-	      -e 's/@''HAVE_WCTRANS_T''@/$(HAVE_WCTRANS_T)/g' \
-	      -e 's/@''HAVE_WINT_T''@/$(HAVE_WINT_T)/g' \
-	      -e 's/@''REPLACE_ISWBLANK''@/$(REPLACE_ISWBLANK)/g' \
-	      -e 's/@''REPLACE_ISWCNTRL''@/$(REPLACE_ISWCNTRL)/g' \
-	      -e 's/@''REPLACE_TOWLOWER''@/$(REPLACE_TOWLOWER)/g' \
-	      -e '/definitions of _GL_FUNCDECL_RPL/r $(CXXDEFS_H)' \
-	      -e '/definition of _GL_WARN_ON_USE/r $(WARN_ON_USE_H)' \
-	      < $(srcdir)/wctype.in.h; \
-	} > $@-t && \
-	mv $@-t $@
-
-mostlyclean-local: mostlyclean-generic
-	@for dir in '' $(MOSTLYCLEANDIRS); do \
-	  if test -n "$$dir" && test -d $$dir; then \
-	    echo "rmdir $$dir"; rmdir $$dir; \
-	  fi; \
-	done; \
-	:
-
-# Tell versions [3.59,3.63) of GNU make to not export all variables.
-# Otherwise a system limit (for SysV at least) may be exceeded.
-.NOEXPORT:
diff -Nuar groff-1.22.3.old/src/libs/gnulib/lib/ref-add.sin groff-1.22.3/src/libs/gnulib/lib/ref-add.sin
--- groff-1.22.3.old/src/libs/gnulib/lib/ref-add.sin	2014-11-04 10:38:35.630518934 +0200
+++ groff-1.22.3/src/libs/gnulib/lib/ref-add.sin	1970-01-01 02:00:00.000000000 +0200
@@ -1,29 +0,0 @@
-# Add this package to a list of references stored in a text file.
-#
-#   Copyright (C) 2000, 2009-2014 Free Software Foundation, Inc.
-#
-#   This program is free software; you can redistribute it and/or modify
-#   it under the terms of the GNU General Public License as published by
-#   the Free Software Foundation; either version 2, or (at your option)
-#   any later version.
-#
-#   This program is distributed in the hope that it will be useful,
-#   but WITHOUT ANY WARRANTY; without even the implied warranty of
-#   MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
-#   GNU General Public License for more details.
-#
-#   You should have received a copy of the GNU General Public License along
-#   with this program; if not, see <http://www.gnu.org/licenses/>.
-#
-# Written by Bruno Haible <haible@clisp.cons.org>.
-#
-/^# Packages using this file: / {
-  s/# Packages using this file://
-  ta
-  :a
-  s/ @PACKAGE@ / @PACKAGE@ /
-  tb
-  s/ $/ @PACKAGE@ /
-  :b
-  s/^/# Packages using this file:/
-}
diff -Nuar groff-1.22.3.old/src/libs/gnulib/lib/ref-del.sin groff-1.22.3/src/libs/gnulib/lib/ref-del.sin
--- groff-1.22.3.old/src/libs/gnulib/lib/ref-del.sin	2014-11-04 10:38:35.630518934 +0200
+++ groff-1.22.3/src/libs/gnulib/lib/ref-del.sin	1970-01-01 02:00:00.000000000 +0200
@@ -1,24 +0,0 @@
-# Remove this package from a list of references stored in a text file.
-#
-#   Copyright (C) 2000, 2009-2014 Free Software Foundation, Inc.
-#
-#   This program is free software; you can redistribute it and/or modify
-#   it under the terms of the GNU General Public License as published by
-#   the Free Software Foundation; either version 2, or (at your option)
-#   any later version.
-#
-#   This program is distributed in the hope that it will be useful,
-#   but WITHOUT ANY WARRANTY; without even the implied warranty of
-#   MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
-#   GNU General Public License for more details.
-#
-#   You should have received a copy of the GNU General Public License along
-#   with this program; if not, see <http://www.gnu.org/licenses/>.
-#
-# Written by Bruno Haible <haible@clisp.cons.org>.
-#
-/^# Packages using this file: / {
-  s/# Packages using this file://
-  s/ @PACKAGE@ / /
-  s/^/# Packages using this file:/
-}
diff -Nuar groff-1.22.3.old/src/libs/gnulib/lib/stdbool.in.h groff-1.22.3/src/libs/gnulib/lib/stdbool.in.h
--- groff-1.22.3.old/src/libs/gnulib/lib/stdbool.in.h	2014-11-04 10:38:35.630518934 +0200
+++ groff-1.22.3/src/libs/gnulib/lib/stdbool.in.h	1970-01-01 02:00:00.000000000 +0200
@@ -1,132 +0,0 @@
-/* Copyright (C) 2001-2003, 2006-2014 Free Software Foundation, Inc.
-   Written by Bruno Haible <haible@clisp.cons.org>, 2001.
-
-   This program is free software; you can redistribute it and/or modify
-   it under the terms of the GNU General Public License as published by
-   the Free Software Foundation; either version 2, or (at your option)
-   any later version.
-
-   This program is distributed in the hope that it will be useful,
-   but WITHOUT ANY WARRANTY; without even the implied warranty of
-   MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
-   GNU General Public License for more details.
-
-   You should have received a copy of the GNU General Public License
-   along with this program; if not, see <http://www.gnu.org/licenses/>.  */
-
-#ifndef _GL_STDBOOL_H
-#define _GL_STDBOOL_H
-
-/* ISO C 99 <stdbool.h> for platforms that lack it.  */
-
-/* Usage suggestions:
-
-   Programs that use <stdbool.h> should be aware of some limitations
-   and standards compliance issues.
-
-   Standards compliance:
-
-       - <stdbool.h> must be #included before 'bool', 'false', 'true'
-         can be used.
-
-       - You cannot assume that sizeof (bool) == 1.
-
-       - Programs should not undefine the macros bool, true, and false,
-         as C99 lists that as an "obsolescent feature".
-
-   Limitations of this substitute, when used in a C89 environment:
-
-       - <stdbool.h> must be #included before the '_Bool' type can be used.
-
-       - You cannot assume that _Bool is a typedef; it might be a macro.
-
-       - Bit-fields of type 'bool' are not supported.  Portable code
-         should use 'unsigned int foo : 1;' rather than 'bool foo : 1;'.
-
-       - In C99, casts and automatic conversions to '_Bool' or 'bool' are
-         performed in such a way that every nonzero value gets converted
-         to 'true', and zero gets converted to 'false'.  This doesn't work
-         with this substitute.  With this substitute, only the values 0 and 1
-         give the expected result when converted to _Bool' or 'bool'.
-
-       - C99 allows the use of (_Bool)0.0 in constant expressions, but
-         this substitute cannot always provide this property.
-
-   Also, it is suggested that programs use 'bool' rather than '_Bool';
-   this isn't required, but 'bool' is more common.  */
-
-
-/* 7.16. Boolean type and values */
-
-/* BeOS <sys/socket.h> already #defines false 0, true 1.  We use the same
-   definitions below, but temporarily we have to #undef them.  */
-#if defined __BEOS__ && !defined __HAIKU__
-# include <OS.h> /* defines bool but not _Bool */
-# undef false
-# undef true
-#endif
-
-#ifdef __cplusplus
-# define _Bool bool
-# define bool bool
-#else
-# if defined __BEOS__ && !defined __HAIKU__
-  /* A compiler known to have 'bool'.  */
-  /* If the compiler already has both 'bool' and '_Bool', we can assume they
-     are the same types.  */
-#  if !@HAVE__BOOL@
-typedef bool _Bool;
-#  endif
-# else
-#  if !defined __GNUC__
-   /* If @HAVE__BOOL@:
-        Some HP-UX cc and AIX IBM C compiler versions have compiler bugs when
-        the built-in _Bool type is used.  See
-          http://gcc.gnu.org/ml/gcc-patches/2003-12/msg02303.html
-          http://lists.gnu.org/archive/html/bug-coreutils/2005-11/msg00161.html
-          http://lists.gnu.org/archive/html/bug-coreutils/2005-10/msg00086.html
-        Similar bugs are likely with other compilers as well; this file
-        wouldn't be used if <stdbool.h> was working.
-        So we override the _Bool type.
-      If !@HAVE__BOOL@:
-        Need to define _Bool ourselves. As 'signed char' or as an enum type?
-        Use of a typedef, with SunPRO C, leads to a stupid
-          "warning: _Bool is a keyword in ISO C99".
-        Use of an enum type, with IRIX cc, leads to a stupid
-          "warning(1185): enumerated type mixed with another type".
-        Even the existence of an enum type, without a typedef,
-          "Invalid enumerator. (badenum)" with HP-UX cc on Tru64.
-        The only benefit of the enum, debuggability, is not important
-        with these compilers.  So use 'signed char' and no enum.  */
-#   define _Bool signed char
-#  else
-   /* With this compiler, trust the _Bool type if the compiler has it.  */
-#   if !@HAVE__BOOL@
-   /* For the sake of symbolic names in gdb, define true and false as
-      enum constants, not only as macros.
-      It is tempting to write
-         typedef enum { false = 0, true = 1 } _Bool;
-      so that gdb prints values of type 'bool' symbolically.  But then
-      values of type '_Bool' might promote to 'int' or 'unsigned int'
-      (see ISO C 99 6.7.2.2.(4)); however, '_Bool' must promote to 'int'
-      (see ISO C 99 6.3.1.1.(2)).  So add a negative value to the
-      enum; this ensures that '_Bool' promotes to 'int'.  */
-typedef enum { _Bool_must_promote_to_int = -1, false = 0, true = 1 } _Bool;
-#   endif
-#  endif
-# endif
-# define bool _Bool
-#endif
-
-/* The other macros must be usable in preprocessor directives.  */
-#ifdef __cplusplus
-# define false false
-# define true true
-#else
-# define false 0
-# define true 1
-#endif
-
-#define __bool_true_false_are_defined 1
-
-#endif /* _GL_STDBOOL_H */
diff -Nuar groff-1.22.3.old/src/libs/gnulib/lib/stddef.in.h groff-1.22.3/src/libs/gnulib/lib/stddef.in.h
--- groff-1.22.3.old/src/libs/gnulib/lib/stddef.in.h	2014-11-04 10:38:35.630518934 +0200
+++ groff-1.22.3/src/libs/gnulib/lib/stddef.in.h	1970-01-01 02:00:00.000000000 +0200
@@ -1,86 +0,0 @@
-/* A substitute for POSIX 2008 <stddef.h>, for platforms that have issues.
-
-   Copyright (C) 2009-2014 Free Software Foundation, Inc.
-
-   This program is free software; you can redistribute it and/or modify
-   it under the terms of the GNU General Public License as published by
-   the Free Software Foundation; either version 2, or (at your option)
-   any later version.
-
-   This program is distributed in the hope that it will be useful,
-   but WITHOUT ANY WARRANTY; without even the implied warranty of
-   MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
-   GNU General Public License for more details.
-
-   You should have received a copy of the GNU General Public License
-   along with this program; if not, see <http://www.gnu.org/licenses/>.  */
-
-/* Written by Eric Blake.  */
-
-/*
- * POSIX 2008 <stddef.h> for platforms that have issues.
- * <http://www.opengroup.org/susv3xbd/stddef.h.html>
- */
-
-#if __GNUC__ >= 3
-@PRAGMA_SYSTEM_HEADER@
-#endif
-@PRAGMA_COLUMNS@
-
-#if defined __need_wchar_t || defined __need_size_t  \
-  || defined __need_ptrdiff_t || defined __need_NULL \
-  || defined __need_wint_t
-/* Special invocation convention inside gcc header files.  In
-   particular, gcc provides a version of <stddef.h> that blindly
-   redefines NULL even when __need_wint_t was defined, even though
-   wint_t is not normally provided by <stddef.h>.  Hence, we must
-   remember if special invocation has ever been used to obtain wint_t,
-   in which case we need to clean up NULL yet again.  */
-
-# if !(defined _@GUARD_PREFIX@_STDDEF_H && defined _GL_STDDEF_WINT_T)
-#  ifdef __need_wint_t
-#   undef _@GUARD_PREFIX@_STDDEF_H
-#   define _GL_STDDEF_WINT_T
-#  endif
-#  @INCLUDE_NEXT@ @NEXT_STDDEF_H@
-# endif
-
-#else
-/* Normal invocation convention.  */
-
-# ifndef _@GUARD_PREFIX@_STDDEF_H
-
-/* The include_next requires a split double-inclusion guard.  */
-
-#  @INCLUDE_NEXT@ @NEXT_STDDEF_H@
-
-#  ifndef _@GUARD_PREFIX@_STDDEF_H
-#   define _@GUARD_PREFIX@_STDDEF_H
-
-/* On NetBSD 5.0, the definition of NULL lacks proper parentheses.  */
-#if @REPLACE_NULL@
-# undef NULL
-# ifdef __cplusplus
-   /* ISO C++ says that the macro NULL must expand to an integer constant
-      expression, hence '((void *) 0)' is not allowed in C++.  */
-#  if __GNUG__ >= 3
-    /* GNU C++ has a __null macro that behaves like an integer ('int' or
-       'long') but has the same size as a pointer.  Use that, to avoid
-       warnings.  */
-#   define NULL __null
-#  else
-#   define NULL 0L
-#  endif
-# else
-#  define NULL ((void *) 0)
-# endif
-#endif
-
-/* Some platforms lack wchar_t.  */
-#if !@HAVE_WCHAR_T@
-# define wchar_t int
-#endif
-
-#  endif /* _@GUARD_PREFIX@_STDDEF_H */
-# endif /* _@GUARD_PREFIX@_STDDEF_H */
-#endif /* __need_XXX */
diff -Nuar groff-1.22.3.old/src/libs/gnulib/lib/stdint.in.h groff-1.22.3/src/libs/gnulib/lib/stdint.in.h
--- groff-1.22.3.old/src/libs/gnulib/lib/stdint.in.h	2014-11-04 10:38:35.630518934 +0200
+++ groff-1.22.3/src/libs/gnulib/lib/stdint.in.h	1970-01-01 02:00:00.000000000 +0200
@@ -1,636 +0,0 @@
-/* Copyright (C) 2001-2014  Free Software Foundation, Inc.
-   Written by Paul Eggert, Bruno Haible, Sam Steingold, Peter Burwood.
-   This file is part of gnulib.
-
-   This program is free software; you can redistribute it and/or modify
-   it under the terms of the GNU General Public License as published by
-   the Free Software Foundation; either version 3, or (at your option)
-   any later version.
-
-   This program is distributed in the hope that it will be useful,
-   but WITHOUT ANY WARRANTY; without even the implied warranty of
-   MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
-   GNU General Public License for more details.
-
-   You should have received a copy of the GNU General Public License
-   along with this program; if not, see <http://www.gnu.org/licenses/>.  */
-
-/*
- * ISO C 99 <stdint.h> for platforms that lack it.
- * <http://www.opengroup.org/susv3xbd/stdint.h.html>
- */
-
-#ifndef _@GUARD_PREFIX@_STDINT_H
-
-#if __GNUC__ >= 3
-@PRAGMA_SYSTEM_HEADER@
-#endif
-@PRAGMA_COLUMNS@
-
-/* When including a system file that in turn includes <inttypes.h>,
-   use the system <inttypes.h>, not our substitute.  This avoids
-   problems with (for example) VMS, whose <sys/bitypes.h> includes
-   <inttypes.h>.  */
-#define _GL_JUST_INCLUDE_SYSTEM_INTTYPES_H
-
-/* On Android (Bionic libc), <sys/types.h> includes this file before
-   having defined 'time_t'.  Therefore in this case avoid including
-   other system header files; just include the system's <stdint.h>.
-   Ideally we should test __BIONIC__ here, but it is only defined after
-   <sys/cdefs.h> has been included; hence test __ANDROID__ instead.  */
-#if defined __ANDROID__ \
-    && defined _SYS_TYPES_H_ && !defined __need_size_t
-# @INCLUDE_NEXT@ @NEXT_STDINT_H@
-#else
-
-/* Get those types that are already defined in other system include
-   files, so that we can "#define int8_t signed char" below without
-   worrying about a later system include file containing a "typedef
-   signed char int8_t;" that will get messed up by our macro.  Our
-   macros should all be consistent with the system versions, except
-   for the "fast" types and macros, which we recommend against using
-   in public interfaces due to compiler differences.  */
-
-#if @HAVE_STDINT_H@
-# if defined __sgi && ! defined __c99
-   /* Bypass IRIX's <stdint.h> if in C89 mode, since it merely annoys users
-      with "This header file is to be used only for c99 mode compilations"
-      diagnostics.  */
-#  define __STDINT_H__
-# endif
-
-  /* Some pre-C++11 <stdint.h> implementations need this.  */
-# ifdef __cplusplus
-#  ifndef __STDC_CONSTANT_MACROS
-#   define __STDC_CONSTANT_MACROS 1
-#  endif
-#  ifndef __STDC_LIMIT_MACROS
-#   define __STDC_LIMIT_MACROS 1
-#  endif
-# endif
-
-  /* Other systems may have an incomplete or buggy <stdint.h>.
-     Include it before <inttypes.h>, since any "#include <stdint.h>"
-     in <inttypes.h> would reinclude us, skipping our contents because
-     _@GUARD_PREFIX@_STDINT_H is defined.
-     The include_next requires a split double-inclusion guard.  */
-# @INCLUDE_NEXT@ @NEXT_STDINT_H@
-#endif
-
-#if ! defined _@GUARD_PREFIX@_STDINT_H && ! defined _GL_JUST_INCLUDE_SYSTEM_STDINT_H
-#define _@GUARD_PREFIX@_STDINT_H
-
-/* <sys/types.h> defines some of the stdint.h types as well, on glibc,
-   IRIX 6.5, and OpenBSD 3.8 (via <machine/types.h>).
-   AIX 5.2 <sys/types.h> isn't needed and causes troubles.
-   Mac OS X 10.4.6 <sys/types.h> includes <stdint.h> (which is us), but
-   relies on the system <stdint.h> definitions, so include
-   <sys/types.h> after @NEXT_STDINT_H@.  */
-#if @HAVE_SYS_TYPES_H@ && ! defined _AIX
-# include <sys/types.h>
-#endif
-
-/* Get SCHAR_MIN, SCHAR_MAX, UCHAR_MAX, INT_MIN, INT_MAX,
-   LONG_MIN, LONG_MAX, ULONG_MAX.  */
-#include <limits.h>
-
-#if @HAVE_INTTYPES_H@
-  /* In OpenBSD 3.8, <inttypes.h> includes <machine/types.h>, which defines
-     int{8,16,32,64}_t, uint{8,16,32,64}_t and __BIT_TYPES_DEFINED__.
-     <inttypes.h> also defines intptr_t and uintptr_t.  */
-# include <inttypes.h>
-#elif @HAVE_SYS_INTTYPES_H@
-  /* Solaris 7 <sys/inttypes.h> has the types except the *_fast*_t types, and
-     the macros except for *_FAST*_*, INTPTR_MIN, PTRDIFF_MIN, PTRDIFF_MAX.  */
-# include <sys/inttypes.h>
-#endif
-
-#if @HAVE_SYS_BITYPES_H@ && ! defined __BIT_TYPES_DEFINED__
-  /* Linux libc4 >= 4.6.7 and libc5 have a <sys/bitypes.h> that defines
-     int{8,16,32,64}_t and __BIT_TYPES_DEFINED__.  In libc5 >= 5.2.2 it is
-     included by <sys/types.h>.  */
-# include <sys/bitypes.h>
-#endif
-
-#undef _GL_JUST_INCLUDE_SYSTEM_INTTYPES_H
-
-/* Minimum and maximum values for an integer type under the usual assumption.
-   Return an unspecified value if BITS == 0, adding a check to pacify
-   picky compilers.  */
-
-#define _STDINT_MIN(signed, bits, zero) \
-  ((signed) ? (- ((zero) + 1) << ((bits) ? (bits) - 1 : 0)) : (zero))
-
-#define _STDINT_MAX(signed, bits, zero) \
-  ((signed) \
-   ? ~ _STDINT_MIN (signed, bits, zero) \
-   : /* The expression for the unsigned case.  The subtraction of (signed) \
-        is a nop in the unsigned case and avoids "signed integer overflow" \
-        warnings in the signed case.  */ \
-     ((((zero) + 1) << ((bits) ? (bits) - 1 - (signed) : 0)) - 1) * 2 + 1)
-
-#if !GNULIB_defined_stdint_types
-
-/* 7.18.1.1. Exact-width integer types */
-
-/* Here we assume a standard architecture where the hardware integer
-   types have 8, 16, 32, optionally 64 bits.  */
-
-#undef int8_t
-#undef uint8_t
-typedef signed char gl_int8_t;
-typedef unsigned char gl_uint8_t;
-#define int8_t gl_int8_t
-#define uint8_t gl_uint8_t
-
-#undef int16_t
-#undef uint16_t
-typedef short int gl_int16_t;
-typedef unsigned short int gl_uint16_t;
-#define int16_t gl_int16_t
-#define uint16_t gl_uint16_t
-
-#undef int32_t
-#undef uint32_t
-typedef int gl_int32_t;
-typedef unsigned int gl_uint32_t;
-#define int32_t gl_int32_t
-#define uint32_t gl_uint32_t
-
-/* If the system defines INT64_MAX, assume int64_t works.  That way,
-   if the underlying platform defines int64_t to be a 64-bit long long
-   int, the code below won't mistakenly define it to be a 64-bit long
-   int, which would mess up C++ name mangling.  We must use #ifdef
-   rather than #if, to avoid an error with HP-UX 10.20 cc.  */
-
-#ifdef INT64_MAX
-# define GL_INT64_T
-#else
-/* Do not undefine int64_t if gnulib is not being used with 64-bit
-   types, since otherwise it breaks platforms like Tandem/NSK.  */
-# if LONG_MAX >> 31 >> 31 == 1
-#  undef int64_t
-typedef long int gl_int64_t;
-#  define int64_t gl_int64_t
-#  define GL_INT64_T
-# elif defined _MSC_VER
-#  undef int64_t
-typedef __int64 gl_int64_t;
-#  define int64_t gl_int64_t
-#  define GL_INT64_T
-# elif @HAVE_LONG_LONG_INT@
-#  undef int64_t
-typedef long long int gl_int64_t;
-#  define int64_t gl_int64_t
-#  define GL_INT64_T
-# endif
-#endif
-
-#ifdef UINT64_MAX
-# define GL_UINT64_T
-#else
-# if ULONG_MAX >> 31 >> 31 >> 1 == 1
-#  undef uint64_t
-typedef unsigned long int gl_uint64_t;
-#  define uint64_t gl_uint64_t
-#  define GL_UINT64_T
-# elif defined _MSC_VER
-#  undef uint64_t
-typedef unsigned __int64 gl_uint64_t;
-#  define uint64_t gl_uint64_t
-#  define GL_UINT64_T
-# elif @HAVE_UNSIGNED_LONG_LONG_INT@
-#  undef uint64_t
-typedef unsigned long long int gl_uint64_t;
-#  define uint64_t gl_uint64_t
-#  define GL_UINT64_T
-# endif
-#endif
-
-/* Avoid collision with Solaris 2.5.1 <pthread.h> etc.  */
-#define _UINT8_T
-#define _UINT32_T
-#define _UINT64_T
-
-
-/* 7.18.1.2. Minimum-width integer types */
-
-/* Here we assume a standard architecture where the hardware integer
-   types have 8, 16, 32, optionally 64 bits. Therefore the leastN_t types
-   are the same as the corresponding N_t types.  */
-
-#undef int_least8_t
-#undef uint_least8_t
-#undef int_least16_t
-#undef uint_least16_t
-#undef int_least32_t
-#undef uint_least32_t
-#undef int_least64_t
-#undef uint_least64_t
-#define int_least8_t int8_t
-#define uint_least8_t uint8_t
-#define int_least16_t int16_t
-#define uint_least16_t uint16_t
-#define int_least32_t int32_t
-#define uint_least32_t uint32_t
-#ifdef GL_INT64_T
-# define int_least64_t int64_t
-#endif
-#ifdef GL_UINT64_T
-# define uint_least64_t uint64_t
-#endif
-
-/* 7.18.1.3. Fastest minimum-width integer types */
-
-/* Note: Other <stdint.h> substitutes may define these types differently.
-   It is not recommended to use these types in public header files. */
-
-/* Here we assume a standard architecture where the hardware integer
-   types have 8, 16, 32, optionally 64 bits. Therefore the fastN_t types
-   are taken from the same list of types.  The following code normally
-   uses types consistent with glibc, as that lessens the chance of
-   incompatibility with older GNU hosts.  */
-
-#undef int_fast8_t
-#undef uint_fast8_t
-#undef int_fast16_t
-#undef uint_fast16_t
-#undef int_fast32_t
-#undef uint_fast32_t
-#undef int_fast64_t
-#undef uint_fast64_t
-typedef signed char gl_int_fast8_t;
-typedef unsigned char gl_uint_fast8_t;
-
-#ifdef __sun
-/* Define types compatible with SunOS 5.10, so that code compiled under
-   earlier SunOS versions works with code compiled under SunOS 5.10.  */
-typedef int gl_int_fast32_t;
-typedef unsigned int gl_uint_fast32_t;
-#else
-typedef long int gl_int_fast32_t;
-typedef unsigned long int gl_uint_fast32_t;
-#endif
-typedef gl_int_fast32_t gl_int_fast16_t;
-typedef gl_uint_fast32_t gl_uint_fast16_t;
-
-#define int_fast8_t gl_int_fast8_t
-#define uint_fast8_t gl_uint_fast8_t
-#define int_fast16_t gl_int_fast16_t
-#define uint_fast16_t gl_uint_fast16_t
-#define int_fast32_t gl_int_fast32_t
-#define uint_fast32_t gl_uint_fast32_t
-#ifdef GL_INT64_T
-# define int_fast64_t int64_t
-#endif
-#ifdef GL_UINT64_T
-# define uint_fast64_t uint64_t
-#endif
-
-/* 7.18.1.4. Integer types capable of holding object pointers */
-
-#undef intptr_t
-#undef uintptr_t
-typedef long int gl_intptr_t;
-typedef unsigned long int gl_uintptr_t;
-#define intptr_t gl_intptr_t
-#define uintptr_t gl_uintptr_t
-
-/* 7.18.1.5. Greatest-width integer types */
-
-/* Note: These types are compiler dependent. It may be unwise to use them in
-   public header files. */
-
-/* If the system defines INTMAX_MAX, assume that intmax_t works, and
-   similarly for UINTMAX_MAX and uintmax_t.  This avoids problems with
-   assuming one type where another is used by the system.  */
-
-#ifndef INTMAX_MAX
-# undef INTMAX_C
-# undef intmax_t
-# if @HAVE_LONG_LONG_INT@ && LONG_MAX >> 30 == 1
-typedef long long int gl_intmax_t;
-#  define intmax_t gl_intmax_t
-# elif defined GL_INT64_T
-#  define intmax_t int64_t
-# else
-typedef long int gl_intmax_t;
-#  define intmax_t gl_intmax_t
-# endif
-#endif
-
-#ifndef UINTMAX_MAX
-# undef UINTMAX_C
-# undef uintmax_t
-# if @HAVE_UNSIGNED_LONG_LONG_INT@ && ULONG_MAX >> 31 == 1
-typedef unsigned long long int gl_uintmax_t;
-#  define uintmax_t gl_uintmax_t
-# elif defined GL_UINT64_T
-#  define uintmax_t uint64_t
-# else
-typedef unsigned long int gl_uintmax_t;
-#  define uintmax_t gl_uintmax_t
-# endif
-#endif
-
-/* Verify that intmax_t and uintmax_t have the same size.  Too much code
-   breaks if this is not the case.  If this check fails, the reason is likely
-   to be found in the autoconf macros.  */
-typedef int _verify_intmax_size[sizeof (intmax_t) == sizeof (uintmax_t)
-                                ? 1 : -1];
-
-#define GNULIB_defined_stdint_types 1
-#endif /* !GNULIB_defined_stdint_types */
-
-/* 7.18.2. Limits of specified-width integer types */
-
-/* 7.18.2.1. Limits of exact-width integer types */
-
-/* Here we assume a standard architecture where the hardware integer
-   types have 8, 16, 32, optionally 64 bits.  */
-
-#undef INT8_MIN
-#undef INT8_MAX
-#undef UINT8_MAX
-#define INT8_MIN  (~ INT8_MAX)
-#define INT8_MAX  127
-#define UINT8_MAX  255
-
-#undef INT16_MIN
-#undef INT16_MAX
-#undef UINT16_MAX
-#define INT16_MIN  (~ INT16_MAX)
-#define INT16_MAX  32767
-#define UINT16_MAX  65535
-
-#undef INT32_MIN
-#undef INT32_MAX
-#undef UINT32_MAX
-#define INT32_MIN  (~ INT32_MAX)
-#define INT32_MAX  2147483647
-#define UINT32_MAX  4294967295U
-
-#if defined GL_INT64_T && ! defined INT64_MAX
-/* Prefer (- INTMAX_C (1) << 63) over (~ INT64_MAX) because SunPRO C 5.0
-   evaluates the latter incorrectly in preprocessor expressions.  */
-# define INT64_MIN  (- INTMAX_C (1) << 63)
-# define INT64_MAX  INTMAX_C (9223372036854775807)
-#endif
-
-#if defined GL_UINT64_T && ! defined UINT64_MAX
-# define UINT64_MAX  UINTMAX_C (18446744073709551615)
-#endif
-
-/* 7.18.2.2. Limits of minimum-width integer types */
-
-/* Here we assume a standard architecture where the hardware integer
-   types have 8, 16, 32, optionally 64 bits. Therefore the leastN_t types
-   are the same as the corresponding N_t types.  */
-
-#undef INT_LEAST8_MIN
-#undef INT_LEAST8_MAX
-#undef UINT_LEAST8_MAX
-#define INT_LEAST8_MIN  INT8_MIN
-#define INT_LEAST8_MAX  INT8_MAX
-#define UINT_LEAST8_MAX  UINT8_MAX
-
-#undef INT_LEAST16_MIN
-#undef INT_LEAST16_MAX
-#undef UINT_LEAST16_MAX
-#define INT_LEAST16_MIN  INT16_MIN
-#define INT_LEAST16_MAX  INT16_MAX
-#define UINT_LEAST16_MAX  UINT16_MAX
-
-#undef INT_LEAST32_MIN
-#undef INT_LEAST32_MAX
-#undef UINT_LEAST32_MAX
-#define INT_LEAST32_MIN  INT32_MIN
-#define INT_LEAST32_MAX  INT32_MAX
-#define UINT_LEAST32_MAX  UINT32_MAX
-
-#undef INT_LEAST64_MIN
-#undef INT_LEAST64_MAX
-#ifdef GL_INT64_T
-# define INT_LEAST64_MIN  INT64_MIN
-# define INT_LEAST64_MAX  INT64_MAX
-#endif
-
-#undef UINT_LEAST64_MAX
-#ifdef GL_UINT64_T
-# define UINT_LEAST64_MAX  UINT64_MAX
-#endif
-
-/* 7.18.2.3. Limits of fastest minimum-width integer types */
-
-/* Here we assume a standard architecture where the hardware integer
-   types have 8, 16, 32, optionally 64 bits. Therefore the fastN_t types
-   are taken from the same list of types.  */
-
-#undef INT_FAST8_MIN
-#undef INT_FAST8_MAX
-#undef UINT_FAST8_MAX
-#define INT_FAST8_MIN  SCHAR_MIN
-#define INT_FAST8_MAX  SCHAR_MAX
-#define UINT_FAST8_MAX  UCHAR_MAX
-
-#undef INT_FAST16_MIN
-#undef INT_FAST16_MAX
-#undef UINT_FAST16_MAX
-#define INT_FAST16_MIN  INT_FAST32_MIN
-#define INT_FAST16_MAX  INT_FAST32_MAX
-#define UINT_FAST16_MAX  UINT_FAST32_MAX
-
-#undef INT_FAST32_MIN
-#undef INT_FAST32_MAX
-#undef UINT_FAST32_MAX
-#ifdef __sun
-# define INT_FAST32_MIN  INT_MIN
-# define INT_FAST32_MAX  INT_MAX
-# define UINT_FAST32_MAX  UINT_MAX
-#else
-# define INT_FAST32_MIN  LONG_MIN
-# define INT_FAST32_MAX  LONG_MAX
-# define UINT_FAST32_MAX  ULONG_MAX
-#endif
-
-#undef INT_FAST64_MIN
-#undef INT_FAST64_MAX
-#ifdef GL_INT64_T
-# define INT_FAST64_MIN  INT64_MIN
-# define INT_FAST64_MAX  INT64_MAX
-#endif
-
-#undef UINT_FAST64_MAX
-#ifdef GL_UINT64_T
-# define UINT_FAST64_MAX  UINT64_MAX
-#endif
-
-/* 7.18.2.4. Limits of integer types capable of holding object pointers */
-
-#undef INTPTR_MIN
-#undef INTPTR_MAX
-#undef UINTPTR_MAX
-#define INTPTR_MIN  LONG_MIN
-#define INTPTR_MAX  LONG_MAX
-#define UINTPTR_MAX  ULONG_MAX
-
-/* 7.18.2.5. Limits of greatest-width integer types */
-
-#ifndef INTMAX_MAX
-# undef INTMAX_MIN
-# ifdef INT64_MAX
-#  define INTMAX_MIN  INT64_MIN
-#  define INTMAX_MAX  INT64_MAX
-# else
-#  define INTMAX_MIN  INT32_MIN
-#  define INTMAX_MAX  INT32_MAX
-# endif
-#endif
-
-#ifndef UINTMAX_MAX
-# ifdef UINT64_MAX
-#  define UINTMAX_MAX  UINT64_MAX
-# else
-#  define UINTMAX_MAX  UINT32_MAX
-# endif
-#endif
-
-/* 7.18.3. Limits of other integer types */
-
-/* ptrdiff_t limits */
-#undef PTRDIFF_MIN
-#undef PTRDIFF_MAX
-#if @APPLE_UNIVERSAL_BUILD@
-# ifdef _LP64
-#  define PTRDIFF_MIN  _STDINT_MIN (1, 64, 0l)
-#  define PTRDIFF_MAX  _STDINT_MAX (1, 64, 0l)
-# else
-#  define PTRDIFF_MIN  _STDINT_MIN (1, 32, 0)
-#  define PTRDIFF_MAX  _STDINT_MAX (1, 32, 0)
-# endif
-#else
-# define PTRDIFF_MIN  \
-    _STDINT_MIN (1, @BITSIZEOF_PTRDIFF_T@, 0@PTRDIFF_T_SUFFIX@)
-# define PTRDIFF_MAX  \
-    _STDINT_MAX (1, @BITSIZEOF_PTRDIFF_T@, 0@PTRDIFF_T_SUFFIX@)
-#endif
-
-/* sig_atomic_t limits */
-#undef SIG_ATOMIC_MIN
-#undef SIG_ATOMIC_MAX
-#define SIG_ATOMIC_MIN  \
-   _STDINT_MIN (@HAVE_SIGNED_SIG_ATOMIC_T@, @BITSIZEOF_SIG_ATOMIC_T@, \
-                0@SIG_ATOMIC_T_SUFFIX@)
-#define SIG_ATOMIC_MAX  \
-   _STDINT_MAX (@HAVE_SIGNED_SIG_ATOMIC_T@, @BITSIZEOF_SIG_ATOMIC_T@, \
-                0@SIG_ATOMIC_T_SUFFIX@)
-
-
-/* size_t limit */
-#undef SIZE_MAX
-#if @APPLE_UNIVERSAL_BUILD@
-# ifdef _LP64
-#  define SIZE_MAX  _STDINT_MAX (0, 64, 0ul)
-# else
-#  define SIZE_MAX  _STDINT_MAX (0, 32, 0ul)
-# endif
-#else
-# define SIZE_MAX  _STDINT_MAX (0, @BITSIZEOF_SIZE_T@, 0@SIZE_T_SUFFIX@)
-#endif
-
-/* wchar_t limits */
-/* Get WCHAR_MIN, WCHAR_MAX.
-   This include is not on the top, above, because on OSF/1 4.0 we have a
-   sequence of nested includes
-   <wchar.h> -> <stdio.h> -> <getopt.h> -> <stdlib.h>, and the latter includes
-   <stdint.h> and assumes its types are already defined.  */
-#if @HAVE_WCHAR_H@ && ! (defined WCHAR_MIN && defined WCHAR_MAX)
-  /* BSD/OS 4.0.1 has a bug: <stddef.h>, <stdio.h> and <time.h> must be
-     included before <wchar.h>.  */
-# include <stddef.h>
-# include <stdio.h>
-# include <time.h>
-# define _GL_JUST_INCLUDE_SYSTEM_WCHAR_H
-# include <wchar.h>
-# undef _GL_JUST_INCLUDE_SYSTEM_WCHAR_H
-#endif
-#undef WCHAR_MIN
-#undef WCHAR_MAX
-#define WCHAR_MIN  \
-   _STDINT_MIN (@HAVE_SIGNED_WCHAR_T@, @BITSIZEOF_WCHAR_T@, 0@WCHAR_T_SUFFIX@)
-#define WCHAR_MAX  \
-   _STDINT_MAX (@HAVE_SIGNED_WCHAR_T@, @BITSIZEOF_WCHAR_T@, 0@WCHAR_T_SUFFIX@)
-
-/* wint_t limits */
-#undef WINT_MIN
-#undef WINT_MAX
-#define WINT_MIN  \
-   _STDINT_MIN (@HAVE_SIGNED_WINT_T@, @BITSIZEOF_WINT_T@, 0@WINT_T_SUFFIX@)
-#define WINT_MAX  \
-   _STDINT_MAX (@HAVE_SIGNED_WINT_T@, @BITSIZEOF_WINT_T@, 0@WINT_T_SUFFIX@)
-
-/* 7.18.4. Macros for integer constants */
-
-/* 7.18.4.1. Macros for minimum-width integer constants */
-/* According to ISO C 99 Technical Corrigendum 1 */
-
-/* Here we assume a standard architecture where the hardware integer
-   types have 8, 16, 32, optionally 64 bits, and int is 32 bits.  */
-
-#undef INT8_C
-#undef UINT8_C
-#define INT8_C(x) x
-#define UINT8_C(x) x
-
-#undef INT16_C
-#undef UINT16_C
-#define INT16_C(x) x
-#define UINT16_C(x) x
-
-#undef INT32_C
-#undef UINT32_C
-#define INT32_C(x) x
-#define UINT32_C(x) x ## U
-
-#undef INT64_C
-#undef UINT64_C
-#if LONG_MAX >> 31 >> 31 == 1
-# define INT64_C(x) x##L
-#elif defined _MSC_VER
-# define INT64_C(x) x##i64
-#elif @HAVE_LONG_LONG_INT@
-# define INT64_C(x) x##LL
-#endif
-#if ULONG_MAX >> 31 >> 31 >> 1 == 1
-# define UINT64_C(x) x##UL
-#elif defined _MSC_VER
-# define UINT64_C(x) x##ui64
-#elif @HAVE_UNSIGNED_LONG_LONG_INT@
-# define UINT64_C(x) x##ULL
-#endif
-
-/* 7.18.4.2. Macros for greatest-width integer constants */
-
-#ifndef INTMAX_C
-# if @HAVE_LONG_LONG_INT@ && LONG_MAX >> 30 == 1
-#  define INTMAX_C(x)   x##LL
-# elif defined GL_INT64_T
-#  define INTMAX_C(x)   INT64_C(x)
-# else
-#  define INTMAX_C(x)   x##L
-# endif
-#endif
-
-#ifndef UINTMAX_C
-# if @HAVE_UNSIGNED_LONG_LONG_INT@ && ULONG_MAX >> 31 == 1
-#  define UINTMAX_C(x)  x##ULL
-# elif defined GL_UINT64_T
-#  define UINTMAX_C(x)  UINT64_C(x)
-# else
-#  define UINTMAX_C(x)  x##UL
-# endif
-#endif
-
-#endif /* _@GUARD_PREFIX@_STDINT_H */
-#endif /* !(defined __ANDROID__ && ...) */
-#endif /* !defined _@GUARD_PREFIX@_STDINT_H && !defined _GL_JUST_INCLUDE_SYSTEM_STDINT_H */
diff -Nuar groff-1.22.3.old/src/libs/gnulib/lib/streq.h groff-1.22.3/src/libs/gnulib/lib/streq.h
--- groff-1.22.3.old/src/libs/gnulib/lib/streq.h	2014-11-04 10:38:35.630518934 +0200
+++ groff-1.22.3/src/libs/gnulib/lib/streq.h	1970-01-01 02:00:00.000000000 +0200
@@ -1,176 +0,0 @@
-/* Optimized string comparison.
-   Copyright (C) 2001-2002, 2007, 2009-2014 Free Software Foundation, Inc.
-
-   This program is free software: you can redistribute it and/or modify it
-   under the terms of the GNU Lesser General Public License as published
-   by the Free Software Foundation; either version 3 of the License, or
-   (at your option) any later version.
-
-   This program is distributed in the hope that it will be useful,
-   but WITHOUT ANY WARRANTY; without even the implied warranty of
-   MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the GNU
-   Lesser General Public License for more details.
-
-   You should have received a copy of the GNU Lesser General Public License
-   along with this program.  If not, see <http://www.gnu.org/licenses/>.  */
-
-/* Written by Bruno Haible <bruno@clisp.org>.  */
-
-#ifndef _GL_STREQ_H
-#define _GL_STREQ_H
-
-#include <string.h>
-
-/* STREQ_OPT allows to optimize string comparison with a small literal string.
-     STREQ_OPT (s, "EUC-KR", 'E', 'U', 'C', '-', 'K', 'R', 0, 0, 0)
-   is semantically equivalent to
-     strcmp (s, "EUC-KR") == 0
-   just faster.  */
-
-/* Help GCC to generate good code for string comparisons with
-   immediate strings. */
-#if defined (__GNUC__) && defined (__OPTIMIZE__)
-
-static inline int
-streq9 (const char *s1, const char *s2)
-{
-  return strcmp (s1 + 9, s2 + 9) == 0;
-}
-
-static inline int
-streq8 (const char *s1, const char *s2, char s28)
-{
-  if (s1[8] == s28)
-    {
-      if (s28 == 0)
-        return 1;
-      else
-        return streq9 (s1, s2);
-    }
-  else
-    return 0;
-}
-
-static inline int
-streq7 (const char *s1, const char *s2, char s27, char s28)
-{
-  if (s1[7] == s27)
-    {
-      if (s27 == 0)
-        return 1;
-      else
-        return streq8 (s1, s2, s28);
-    }
-  else
-    return 0;
-}
-
-static inline int
-streq6 (const char *s1, const char *s2, char s26, char s27, char s28)
-{
-  if (s1[6] == s26)
-    {
-      if (s26 == 0)
-        return 1;
-      else
-        return streq7 (s1, s2, s27, s28);
-    }
-  else
-    return 0;
-}
-
-static inline int
-streq5 (const char *s1, const char *s2, char s25, char s26, char s27, char s28)
-{
-  if (s1[5] == s25)
-    {
-      if (s25 == 0)
-        return 1;
-      else
-        return streq6 (s1, s2, s26, s27, s28);
-    }
-  else
-    return 0;
-}
-
-static inline int
-streq4 (const char *s1, const char *s2, char s24, char s25, char s26, char s27, char s28)
-{
-  if (s1[4] == s24)
-    {
-      if (s24 == 0)
-        return 1;
-      else
-        return streq5 (s1, s2, s25, s26, s27, s28);
-    }
-  else
-    return 0;
-}
-
-static inline int
-streq3 (const char *s1, const char *s2, char s23, char s24, char s25, char s26, char s27, char s28)
-{
-  if (s1[3] == s23)
-    {
-      if (s23 == 0)
-        return 1;
-      else
-        return streq4 (s1, s2, s24, s25, s26, s27, s28);
-    }
-  else
-    return 0;
-}
-
-static inline int
-streq2 (const char *s1, const char *s2, char s22, char s23, char s24, char s25, char s26, char s27, char s28)
-{
-  if (s1[2] == s22)
-    {
-      if (s22 == 0)
-        return 1;
-      else
-        return streq3 (s1, s2, s23, s24, s25, s26, s27, s28);
-    }
-  else
-    return 0;
-}
-
-static inline int
-streq1 (const char *s1, const char *s2, char s21, char s22, char s23, char s24, char s25, char s26, char s27, char s28)
-{
-  if (s1[1] == s21)
-    {
-      if (s21 == 0)
-        return 1;
-      else
-        return streq2 (s1, s2, s22, s23, s24, s25, s26, s27, s28);
-    }
-  else
-    return 0;
-}
-
-static inline int
-streq0 (const char *s1, const char *s2, char s20, char s21, char s22, char s23, char s24, char s25, char s26, char s27, char s28)
-{
-  if (s1[0] == s20)
-    {
-      if (s20 == 0)
-        return 1;
-      else
-        return streq1 (s1, s2, s21, s22, s23, s24, s25, s26, s27, s28);
-    }
-  else
-    return 0;
-}
-
-#define STREQ_OPT(s1,s2,s20,s21,s22,s23,s24,s25,s26,s27,s28) \
-  streq0 (s1, s2, s20, s21, s22, s23, s24, s25, s26, s27, s28)
-
-#else
-
-#define STREQ_OPT(s1,s2,s20,s21,s22,s23,s24,s25,s26,s27,s28) \
-  (strcmp (s1, s2) == 0)
-
-#endif
-
-#endif /* _GL_STREQ_H */
diff -Nuar groff-1.22.3.old/src/libs/gnulib/lib/unitypes.in.h groff-1.22.3/src/libs/gnulib/lib/unitypes.in.h
--- groff-1.22.3.old/src/libs/gnulib/lib/unitypes.in.h	2014-11-04 10:38:35.630518934 +0200
+++ groff-1.22.3/src/libs/gnulib/lib/unitypes.in.h	1970-01-01 02:00:00.000000000 +0200
@@ -1,46 +0,0 @@
-/* Elementary types and macros for the GNU UniString library.
-   Copyright (C) 2002, 2005-2006, 2009-2014 Free Software Foundation, Inc.
-
-   This program is free software: you can redistribute it and/or modify it
-   under the terms of the GNU Lesser General Public License as published
-   by the Free Software Foundation; either version 3 of the License, or
-   (at your option) any later version.
-
-   This program is distributed in the hope that it will be useful,
-   but WITHOUT ANY WARRANTY; without even the implied warranty of
-   MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the GNU
-   Lesser General Public License for more details.
-
-   You should have received a copy of the GNU Lesser General Public License
-   along with this program.  If not, see <http://www.gnu.org/licenses/>.  */
-
-#ifndef _UNITYPES_H
-#define _UNITYPES_H
-
-/* Get uint8_t, uint16_t, uint32_t.  */
-#include <stdint.h>
-
-/* Type representing a Unicode character.  */
-typedef uint32_t ucs4_t;
-
-/* Attribute of a function whose result depends only on the arguments
-   (not pointers!) and which has no side effects.  */
-#ifndef _UC_ATTRIBUTE_CONST
-# if __GNUC__ > 2 || (__GNUC__ == 2 && __GNUC_MINOR__ >= 95)
-#  define _UC_ATTRIBUTE_CONST __attribute__ ((__const__))
-# else
-#  define _UC_ATTRIBUTE_CONST
-# endif
-#endif
-
-/* Attribute of a function whose result depends only on the arguments
-   (possibly pointers) and global memory, and which has no side effects.  */
-#ifndef _UC_ATTRIBUTE_PURE
-# if __GNUC__ > 2 || (__GNUC__ == 2 && __GNUC_MINOR__ >= 96)
-#  define _UC_ATTRIBUTE_PURE __attribute__ ((__pure__))
-# else
-#  define _UC_ATTRIBUTE_PURE
-# endif
-#endif
-
-#endif /* _UNITYPES_H */
diff -Nuar groff-1.22.3.old/src/libs/gnulib/lib/uniwidth/cjk.h groff-1.22.3/src/libs/gnulib/lib/uniwidth/cjk.h
--- groff-1.22.3.old/src/libs/gnulib/lib/uniwidth/cjk.h	2014-11-04 10:38:35.635518871 +0200
+++ groff-1.22.3/src/libs/gnulib/lib/uniwidth/cjk.h	1970-01-01 02:00:00.000000000 +0200
@@ -1,37 +0,0 @@
-/* Test for CJK encoding.
-   Copyright (C) 2001-2002, 2005-2007, 2009-2014 Free Software Foundation, Inc.
-   Written by Bruno Haible <bruno@clisp.org>, 2002.
-
-   This program is free software: you can redistribute it and/or modify it
-   under the terms of the GNU Lesser General Public License as published
-   by the Free Software Foundation; either version 3 of the License, or
-   (at your option) any later version.
-
-   This program is distributed in the hope that it will be useful,
-   but WITHOUT ANY WARRANTY; without even the implied warranty of
-   MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the GNU
-   Lesser General Public License for more details.
-
-   You should have received a copy of the GNU Lesser General Public License
-   along with this program.  If not, see <http://www.gnu.org/licenses/>.  */
-
-#include "streq.h"
-
-static int
-is_cjk_encoding (const char *encoding)
-{
-  if (0
-      /* Legacy Japanese encodings */
-      || STREQ_OPT (encoding, "EUC-JP", 'E', 'U', 'C', '-', 'J', 'P', 0, 0, 0)
-      /* Legacy Chinese encodings */
-      || STREQ_OPT (encoding, "GB2312", 'G', 'B', '2', '3', '1', '2', 0, 0, 0)
-      || STREQ_OPT (encoding, "GBK", 'G', 'B', 'K', 0, 0, 0, 0, 0, 0)
-      || STREQ_OPT (encoding, "EUC-TW", 'E', 'U', 'C', '-', 'T', 'W', 0, 0, 0)
-      || STREQ_OPT (encoding, "BIG5", 'B', 'I', 'G', '5', 0, 0, 0, 0, 0)
-      /* Legacy Korean encodings */
-      || STREQ_OPT (encoding, "EUC-KR", 'E', 'U', 'C', '-', 'K', 'R', 0, 0, 0)
-      || STREQ_OPT (encoding, "CP949", 'C', 'P', '9', '4', '9', 0, 0, 0, 0)
-      || STREQ_OPT (encoding, "JOHAB", 'J', 'O', 'H', 'A', 'B', 0, 0, 0, 0))
-    return 1;
-  return 0;
-}
diff -Nuar groff-1.22.3.old/src/libs/gnulib/lib/uniwidth/width.c groff-1.22.3/src/libs/gnulib/lib/uniwidth/width.c
--- groff-1.22.3.old/src/libs/gnulib/lib/uniwidth/width.c	2014-11-04 10:38:35.635518871 +0200
+++ groff-1.22.3/src/libs/gnulib/lib/uniwidth/width.c	1970-01-01 02:00:00.000000000 +0200
@@ -1,368 +0,0 @@
-/* Determine display width of Unicode character.
-   Copyright (C) 2001-2002, 2006-2014 Free Software Foundation, Inc.
-   Written by Bruno Haible <bruno@clisp.org>, 2002.
-
-   This program is free software: you can redistribute it and/or modify it
-   under the terms of the GNU Lesser General Public License as published
-   by the Free Software Foundation; either version 3 of the License, or
-   (at your option) any later version.
-
-   This program is distributed in the hope that it will be useful,
-   but WITHOUT ANY WARRANTY; without even the implied warranty of
-   MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the GNU
-   Lesser General Public License for more details.
-
-   You should have received a copy of the GNU Lesser General Public License
-   along with this program.  If not, see <http://www.gnu.org/licenses/>.  */
-
-#include <config.h>
-
-/* Specification.  */
-#include "uniwidth.h"
-
-#include "cjk.h"
-
-/*
- * Non-spacing attribute table.
- * Consists of:
- * - Non-spacing characters; generated from PropList.txt or
- *   "grep '^[^;]*;[^;]*;[^;]*;[^;]*;NSM;' UnicodeData.txt"
- * - Format control characters; generated from
- *   "grep '^[^;]*;[^;]*;Cf;' UnicodeData.txt"
- * - Zero width characters; generated from
- *   "grep '^[^;]*;ZERO WIDTH ' UnicodeData.txt"
- */
-static const unsigned char nonspacing_table_data[27*64] = {
-  /* 0x0000-0x01ff */
-  0xff, 0xff, 0xff, 0xff, 0x00, 0x00, 0x00, 0x00, /* 0x0000-0x003f */
-  0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x80, /* 0x0040-0x007f */
-  0xff, 0xff, 0xff, 0xff, 0x00, 0x20, 0x00, 0x00, /* 0x0080-0x00bf */
-  0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, /* 0x00c0-0x00ff */
-  0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, /* 0x0100-0x013f */
-  0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, /* 0x0140-0x017f */
-  0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, /* 0x0180-0x01bf */
-  0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, /* 0x01c0-0x01ff */
-  /* 0x0200-0x03ff */
-  0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, /* 0x0200-0x023f */
-  0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, /* 0x0240-0x027f */
-  0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, /* 0x0280-0x02bf */
-  0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, /* 0x02c0-0x02ff */
-  0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, /* 0x0300-0x033f */
-  0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0x00, 0x00, /* 0x0340-0x037f */
-  0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, /* 0x0380-0x03bf */
-  0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, /* 0x03c0-0x03ff */
-  /* 0x0400-0x05ff */
-  0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, /* 0x0400-0x043f */
-  0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, /* 0x0440-0x047f */
-  0xf8, 0x03, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, /* 0x0480-0x04bf */
-  0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, /* 0x04c0-0x04ff */
-  0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, /* 0x0500-0x053f */
-  0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, /* 0x0540-0x057f */
-  0x00, 0x00, 0xfe, 0xff, 0xff, 0xff, 0xff, 0xbf, /* 0x0580-0x05bf */
-  0xb6, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, /* 0x05c0-0x05ff */
-  /* 0x0600-0x07ff */
-  0x0f, 0x00, 0xff, 0x07, 0x00, 0x00, 0x00, 0x00, /* 0x0600-0x063f */
-  0x00, 0xf8, 0xff, 0xff, 0x00, 0x00, 0x01, 0x00, /* 0x0640-0x067f */
-  0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, /* 0x0680-0x06bf */
-  0x00, 0x00, 0xc0, 0xbf, 0x9f, 0x3d, 0x00, 0x00, /* 0x06c0-0x06ff */
-  0x00, 0x80, 0x02, 0x00, 0x00, 0x00, 0xff, 0xff, /* 0x0700-0x073f */
-  0xff, 0x07, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, /* 0x0740-0x077f */
-  0x00, 0x00, 0x00, 0x00, 0xc0, 0xff, 0x01, 0x00, /* 0x0780-0x07bf */
-  0x00, 0x00, 0x00, 0x00, 0x00, 0xf8, 0x0f, 0x00, /* 0x07c0-0x07ff */
-  /* 0x0800-0x09ff */
-  0x00, 0x00, 0xc0, 0xfb, 0xef, 0x3e, 0x00, 0x00, /* 0x0800-0x083f */
-  0x00, 0x00, 0x00, 0x0e, 0x00, 0x00, 0x00, 0x00, /* 0x0840-0x087f */
-  0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, /* 0x0880-0x08bf */
-  0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, /* 0x08c0-0x08ff */
-  0x07, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x14, /* 0x0900-0x093f */
-  0xfe, 0x21, 0xfe, 0x00, 0x0c, 0x00, 0x00, 0x00, /* 0x0940-0x097f */
-  0x02, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x10, /* 0x0980-0x09bf */
-  0x1e, 0x20, 0x00, 0x00, 0x0c, 0x00, 0x00, 0x00, /* 0x09c0-0x09ff */
-  /* 0x0a00-0x0bff */
-  0x06, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x10, /* 0x0a00-0x0a3f */
-  0x86, 0x39, 0x02, 0x00, 0x00, 0x00, 0x23, 0x00, /* 0x0a40-0x0a7f */
-  0x06, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x10, /* 0x0a80-0x0abf */
-  0xbe, 0x21, 0x00, 0x00, 0x0c, 0x00, 0x00, 0x00, /* 0x0ac0-0x0aff */
-  0x02, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x90, /* 0x0b00-0x0b3f */
-  0x1e, 0x20, 0x40, 0x00, 0x0c, 0x00, 0x00, 0x00, /* 0x0b40-0x0b7f */
-  0x04, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, /* 0x0b80-0x0bbf */
-  0x01, 0x20, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, /* 0x0bc0-0x0bff */
-  /* 0x0c00-0x0dff */
-  0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0xc0, /* 0x0c00-0x0c3f */
-  0xc1, 0x3d, 0x60, 0x00, 0x0c, 0x00, 0x00, 0x00, /* 0x0c40-0x0c7f */
-  0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x10, /* 0x0c80-0x0cbf */
-  0x00, 0x30, 0x00, 0x00, 0x0c, 0x00, 0x00, 0x00, /* 0x0cc0-0x0cff */
-  0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, /* 0x0d00-0x0d3f */
-  0x1e, 0x20, 0x00, 0x00, 0x0c, 0x00, 0x00, 0x00, /* 0x0d40-0x0d7f */
-  0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, /* 0x0d80-0x0dbf */
-  0x00, 0x04, 0x5c, 0x00, 0x00, 0x00, 0x00, 0x00, /* 0x0dc0-0x0dff */
-  /* 0x0e00-0x0fff */
-  0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0xf2, 0x07, /* 0x0e00-0x0e3f */
-  0x80, 0x7f, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, /* 0x0e40-0x0e7f */
-  0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0xf2, 0x1b, /* 0x0e80-0x0ebf */
-  0x00, 0x3f, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, /* 0x0ec0-0x0eff */
-  0x00, 0x00, 0x00, 0x03, 0x00, 0x00, 0xa0, 0x02, /* 0x0f00-0x0f3f */
-  0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0xfe, 0x7f, /* 0x0f40-0x0f7f */
-  0xdf, 0xe0, 0xff, 0xfe, 0xff, 0xff, 0xff, 0x1f, /* 0x0f80-0x0fbf */
-  0x40, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, /* 0x0fc0-0x0fff */
-  /* 0x1000-0x11ff */
-  0x00, 0x00, 0x00, 0x00, 0x00, 0xe0, 0xfd, 0x66, /* 0x1000-0x103f */
-  0x00, 0x00, 0x00, 0xc3, 0x01, 0x00, 0x1e, 0x00, /* 0x1040-0x107f */
-  0x64, 0x20, 0x00, 0x20, 0x00, 0x00, 0x00, 0x00, /* 0x1080-0x10bf */
-  0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, /* 0x10c0-0x10ff */
-  0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, /* 0x1100-0x113f */
-  0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, /* 0x1140-0x117f */
-  0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, /* 0x1180-0x11bf */
-  0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, /* 0x11c0-0x11ff */
-  /* 0x1200-0x13ff */
-  0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, /* 0x1200-0x123f */
-  0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, /* 0x1240-0x127f */
-  0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, /* 0x1280-0x12bf */
-  0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, /* 0x12c0-0x12ff */
-  0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, /* 0x1300-0x133f */
-  0x00, 0x00, 0x00, 0xe0, 0x00, 0x00, 0x00, 0x00, /* 0x1340-0x137f */
-  0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, /* 0x1380-0x13bf */
-  0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, /* 0x13c0-0x13ff */
-  /* 0x1600-0x17ff */
-  0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, /* 0x1600-0x163f */
-  0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, /* 0x1640-0x167f */
-  0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, /* 0x1680-0x16bf */
-  0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, /* 0x16c0-0x16ff */
-  0x00, 0x00, 0x1c, 0x00, 0x00, 0x00, 0x1c, 0x00, /* 0x1700-0x173f */
-  0x00, 0x00, 0x0c, 0x00, 0x00, 0x00, 0x0c, 0x00, /* 0x1740-0x177f */
-  0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0xb0, 0x3f, /* 0x1780-0x17bf */
-  0x40, 0xfe, 0x0f, 0x20, 0x00, 0x00, 0x00, 0x00, /* 0x17c0-0x17ff */
-  /* 0x1800-0x19ff */
-  0x00, 0x38, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, /* 0x1800-0x183f */
-  0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, /* 0x1840-0x187f */
-  0x00, 0x00, 0x00, 0x00, 0x00, 0x02, 0x00, 0x00, /* 0x1880-0x18bf */
-  0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, /* 0x18c0-0x18ff */
-  0x00, 0x00, 0x00, 0x00, 0x87, 0x01, 0x04, 0x0e, /* 0x1900-0x193f */
-  0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, /* 0x1940-0x197f */
-  0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, /* 0x1980-0x19bf */
-  0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, /* 0x19c0-0x19ff */
-  /* 0x1a00-0x1bff */
-  0x00, 0x00, 0x80, 0x01, 0x00, 0x00, 0x00, 0x00, /* 0x1a00-0x1a3f */
-  0x00, 0x00, 0x40, 0x7f, 0xe5, 0x1f, 0xf8, 0x9f, /* 0x1a40-0x1a7f */
-  0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, /* 0x1a80-0x1abf */
-  0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, /* 0x1ac0-0x1aff */
-  0x0f, 0x00, 0x00, 0x00, 0x00, 0x00, 0xd0, 0x17, /* 0x1b00-0x1b3f */
-  0x04, 0x00, 0x00, 0x00, 0x00, 0xf8, 0x0f, 0x00, /* 0x1b40-0x1b7f */
-  0x03, 0x00, 0x00, 0x00, 0x3c, 0x03, 0x00, 0x00, /* 0x1b80-0x1bbf */
-  0x00, 0x00, 0x00, 0x00, 0x40, 0xa3, 0x03, 0x00, /* 0x1bc0-0x1bff */
-  /* 0x1c00-0x1dff */
-  0x00, 0x00, 0x00, 0x00, 0x00, 0xf0, 0xcf, 0x00, /* 0x1c00-0x1c3f */
-  0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, /* 0x1c40-0x1c7f */
-  0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, /* 0x1c80-0x1cbf */
-  0x00, 0x00, 0xf7, 0xff, 0xfd, 0x21, 0x00, 0x00, /* 0x1cc0-0x1cff */
-  0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, /* 0x1d00-0x1d3f */
-  0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, /* 0x1d40-0x1d7f */
-  0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, /* 0x1d80-0x1dbf */
-  0xff, 0xff, 0xff, 0xff, 0x7f, 0x00, 0x00, 0xf0, /* 0x1dc0-0x1dff */
-  /* 0x2000-0x21ff */
-  0x00, 0xf8, 0x00, 0x00, 0x00, 0x7c, 0x00, 0x00, /* 0x2000-0x203f */
-  0x00, 0x00, 0x00, 0x00, 0x1f, 0xfc, 0x00, 0x00, /* 0x2040-0x207f */
-  0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, /* 0x2080-0x20bf */
-  0x00, 0x00, 0xff, 0xff, 0xff, 0xff, 0x01, 0x00, /* 0x20c0-0x20ff */
-  0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, /* 0x2100-0x213f */
-  0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, /* 0x2140-0x217f */
-  0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, /* 0x2180-0x21bf */
-  0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, /* 0x21c0-0x21ff */
-  /* 0x2c00-0x2dff */
-  0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, /* 0x2c00-0x2c3f */
-  0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, /* 0x2c40-0x2c7f */
-  0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, /* 0x2c80-0x2cbf */
-  0x00, 0x00, 0x00, 0x00, 0x00, 0x80, 0x03, 0x00, /* 0x2cc0-0x2cff */
-  0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, /* 0x2d00-0x2d3f */
-  0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x80, /* 0x2d40-0x2d7f */
-  0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, /* 0x2d80-0x2dbf */
-  0x00, 0x00, 0x00, 0x00, 0xff, 0xff, 0xff, 0xff, /* 0x2dc0-0x2dff */
-  /* 0x3000-0x31ff */
-  0x00, 0x00, 0x00, 0x00, 0x00, 0xfc, 0x00, 0x00, /* 0x3000-0x303f */
-  0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, /* 0x3040-0x307f */
-  0x00, 0x00, 0x00, 0x06, 0x00, 0x00, 0x00, 0x00, /* 0x3080-0x30bf */
-  0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, /* 0x30c0-0x30ff */
-  0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, /* 0x3100-0x313f */
-  0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, /* 0x3140-0x317f */
-  0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, /* 0x3180-0x31bf */
-  0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, /* 0x31c0-0x31ff */
-  /* 0xa600-0xa7ff */
-  0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, /* 0xa600-0xa63f */
-  0x00, 0x00, 0x00, 0x00, 0x00, 0x80, 0x07, 0x30, /* 0xa640-0xa67f */
-  0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, /* 0xa680-0xa6bf */
-  0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x03, 0x00, /* 0xa6c0-0xa6ff */
-  0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, /* 0xa700-0xa73f */
-  0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, /* 0xa740-0xa77f */
-  0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, /* 0xa780-0xa7bf */
-  0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, /* 0xa7c0-0xa7ff */
-  /* 0xa800-0xa9ff */
-  0x44, 0x08, 0x00, 0x00, 0x60, 0x00, 0x00, 0x00, /* 0xa800-0xa83f */
-  0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, /* 0xa840-0xa87f */
-  0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, /* 0xa880-0xa8bf */
-  0x10, 0x00, 0x00, 0x00, 0xff, 0xff, 0x03, 0x00, /* 0xa8c0-0xa8ff */
-  0x00, 0x00, 0x00, 0x00, 0xc0, 0x3f, 0x00, 0x00, /* 0xa900-0xa93f */
-  0x80, 0xff, 0x03, 0x00, 0x00, 0x00, 0x00, 0x00, /* 0xa940-0xa97f */
-  0x07, 0x00, 0x00, 0x00, 0x00, 0x00, 0xc8, 0x13, /* 0xa980-0xa9bf */
-  0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, /* 0xa9c0-0xa9ff */
-  /* 0xaa00-0xabff */
-  0x00, 0x00, 0x00, 0x00, 0x00, 0x7e, 0x66, 0x00, /* 0xaa00-0xaa3f */
-  0x08, 0x10, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, /* 0xaa40-0xaa7f */
-  0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x9d, 0xc1, /* 0xaa80-0xaabf */
-  0x02, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, /* 0xaac0-0xaaff */
-  0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, /* 0xab00-0xab3f */
-  0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, /* 0xab40-0xab7f */
-  0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, /* 0xab80-0xabbf */
-  0x00, 0x00, 0x00, 0x00, 0x20, 0x21, 0x00, 0x00, /* 0xabc0-0xabff */
-  /* 0xfa00-0xfbff */
-  0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, /* 0xfa00-0xfa3f */
-  0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, /* 0xfa40-0xfa7f */
-  0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, /* 0xfa80-0xfabf */
-  0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, /* 0xfac0-0xfaff */
-  0x00, 0x00, 0x00, 0x40, 0x00, 0x00, 0x00, 0x00, /* 0xfb00-0xfb3f */
-  0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, /* 0xfb40-0xfb7f */
-  0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, /* 0xfb80-0xfbbf */
-  0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, /* 0xfbc0-0xfbff */
-  /* 0xfe00-0xffff */
-  0xff, 0xff, 0x00, 0x00, 0x7f, 0x00, 0x00, 0x00, /* 0xfe00-0xfe3f */
-  0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, /* 0xfe40-0xfe7f */
-  0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, /* 0xfe80-0xfebf */
-  0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x80, /* 0xfec0-0xfeff */
-  0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, /* 0xff00-0xff3f */
-  0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, /* 0xff40-0xff7f */
-  0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, /* 0xff80-0xffbf */
-  0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x0e, /* 0xffc0-0xffff */
-  /* 0x10000-0x101ff */
-  0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, /* 0x10000-0x1003f */
-  0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, /* 0x10040-0x1007f */
-  0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, /* 0x10080-0x100bf */
-  0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, /* 0x100c0-0x100ff */
-  0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, /* 0x10100-0x1013f */
-  0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, /* 0x10140-0x1017f */
-  0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, /* 0x10180-0x101bf */
-  0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x20, /* 0x101c0-0x101ff */
-  /* 0x10a00-0x10bff */
-  0x6e, 0xf0, 0x00, 0x00, 0x00, 0x00, 0x00, 0x87, /* 0x10a00-0x10a3f */
-  0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, /* 0x10a40-0x10a7f */
-  0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, /* 0x10a80-0x10abf */
-  0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, /* 0x10ac0-0x10aff */
-  0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, /* 0x10b00-0x10b3f */
-  0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, /* 0x10b40-0x10b7f */
-  0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, /* 0x10b80-0x10bbf */
-  0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, /* 0x10bc0-0x10bff */
-  /* 0x11000-0x111ff */
-  0x02, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0xff, /* 0x11000-0x1103f */
-  0x7f, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, /* 0x11040-0x1107f */
-  0x03, 0x00, 0x00, 0x00, 0x00, 0x00, 0x78, 0x26, /* 0x11080-0x110bf */
-  0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, /* 0x110c0-0x110ff */
-  0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, /* 0x11100-0x1113f */
-  0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, /* 0x11140-0x1117f */
-  0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, /* 0x11180-0x111bf */
-  0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, /* 0x111c0-0x111ff */
-  /* 0x1d000-0x1d1ff */
-  0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, /* 0x1d000-0x1d03f */
-  0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, /* 0x1d040-0x1d07f */
-  0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, /* 0x1d080-0x1d0bf */
-  0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, /* 0x1d0c0-0x1d0ff */
-  0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, /* 0x1d100-0x1d13f */
-  0x00, 0x00, 0x00, 0x00, 0x80, 0x03, 0xf8, 0xff, /* 0x1d140-0x1d17f */
-  0xe7, 0x0f, 0x00, 0x00, 0x00, 0x3c, 0x00, 0x00, /* 0x1d180-0x1d1bf */
-  0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, /* 0x1d1c0-0x1d1ff */
-  /* 0x1d200-0x1d3ff */
-  0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, /* 0x1d200-0x1d23f */
-  0x1c, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, /* 0x1d240-0x1d27f */
-  0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, /* 0x1d280-0x1d2bf */
-  0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, /* 0x1d2c0-0x1d2ff */
-  0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, /* 0x1d300-0x1d33f */
-  0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, /* 0x1d340-0x1d37f */
-  0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, /* 0x1d380-0x1d3bf */
-  0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00  /* 0x1d3c0-0x1d3ff */
-};
-static const signed char nonspacing_table_ind[240] = {
-   0,  1,  2,  3,  4,  5,  6,  7, /* 0x0000-0x0fff */
-   8,  9, -1, 10, 11, 12, 13, -1, /* 0x1000-0x1fff */
-  14, -1, -1, -1, -1, -1, 15, -1, /* 0x2000-0x2fff */
-  16, -1, -1, -1, -1, -1, -1, -1, /* 0x3000-0x3fff */
-  -1, -1, -1, -1, -1, -1, -1, -1, /* 0x4000-0x4fff */
-  -1, -1, -1, -1, -1, -1, -1, -1, /* 0x5000-0x5fff */
-  -1, -1, -1, -1, -1, -1, -1, -1, /* 0x6000-0x6fff */
-  -1, -1, -1, -1, -1, -1, -1, -1, /* 0x7000-0x7fff */
-  -1, -1, -1, -1, -1, -1, -1, -1, /* 0x8000-0x8fff */
-  -1, -1, -1, -1, -1, -1, -1, -1, /* 0x9000-0x9fff */
-  -1, -1, -1, 17, 18, 19, -1, -1, /* 0xa000-0xafff */
-  -1, -1, -1, -1, -1, -1, -1, -1, /* 0xb000-0xbfff */
-  -1, -1, -1, -1, -1, -1, -1, -1, /* 0xc000-0xcfff */
-  -1, -1, -1, -1, -1, -1, -1, -1, /* 0xd000-0xdfff */
-  -1, -1, -1, -1, -1, -1, -1, -1, /* 0xe000-0xefff */
-  -1, -1, -1, -1, -1, 20, -1, 21, /* 0xf000-0xffff */
-  22, -1, -1, -1, -1, 23, -1, -1, /* 0x10000-0x10fff */
-  24, -1, -1, -1, -1, -1, -1, -1, /* 0x11000-0x11fff */
-  -1, -1, -1, -1, -1, -1, -1, -1, /* 0x12000-0x12fff */
-  -1, -1, -1, -1, -1, -1, -1, -1, /* 0x13000-0x13fff */
-  -1, -1, -1, -1, -1, -1, -1, -1, /* 0x14000-0x14fff */
-  -1, -1, -1, -1, -1, -1, -1, -1, /* 0x15000-0x15fff */
-  -1, -1, -1, -1, -1, -1, -1, -1, /* 0x16000-0x16fff */
-  -1, -1, -1, -1, -1, -1, -1, -1, /* 0x17000-0x17fff */
-  -1, -1, -1, -1, -1, -1, -1, -1, /* 0x18000-0x18fff */
-  -1, -1, -1, -1, -1, -1, -1, -1, /* 0x19000-0x19fff */
-  -1, -1, -1, -1, -1, -1, -1, -1, /* 0x1a000-0x1afff */
-  -1, -1, -1, -1, -1, -1, -1, -1, /* 0x1b000-0x1bfff */
-  -1, -1, -1, -1, -1, -1, -1, -1, /* 0x1c000-0x1cfff */
-  25, 26, -1, -1, -1, -1, -1, -1  /* 0x1d000-0x1dfff */
-};
-
-/* Determine number of column positions required for UC.  */
-int
-uc_width (ucs4_t uc, const char *encoding)
-{
-  /* Test for non-spacing or control character.  */
-  if ((uc >> 9) < 240)
-    {
-      int ind = nonspacing_table_ind[uc >> 9];
-      if (ind >= 0)
-        if ((nonspacing_table_data[64*ind + ((uc >> 3) & 63)] >> (uc & 7)) & 1)
-          {
-            if (uc > 0 && uc < 0xa0)
-              return -1;
-            else
-              return 0;
-          }
-    }
-  else if ((uc >> 9) == (0xe0000 >> 9))
-    {
-      if (uc >= 0xe0100)
-        {
-          if (uc <= 0xe01ef)
-            return 0;
-        }
-      else
-        {
-          if (uc >= 0xe0020 ? uc <= 0xe007f : uc == 0xe0001)
-            return 0;
-        }
-    }
-  /* Test for double-width character.
-   * Generated from "grep '^[^;]\{4,5\};[WF]' EastAsianWidth.txt"
-   * and            "grep '^[^;]\{4,5\};[^WF]' EastAsianWidth.txt"
-   */
-  if (uc >= 0x1100
-      && ((uc < 0x1160) /* Hangul Jamo */
-          || (uc >= 0x2329 && uc < 0x232b) /* Angle Brackets */
-          || (uc >= 0x2e80 && uc < 0xa4d0  /* CJK ... Yi */
-              && !(uc == 0x303f) && !(uc >= 0x4dc0 && uc < 0x4e00))
-          || (uc >= 0xac00 && uc < 0xd7a4) /* Hangul Syllables */
-          || (uc >= 0xf900 && uc < 0xfb00) /* CJK Compatibility Ideographs */
-          || (uc >= 0xfe10 && uc < 0xfe20) /* Presentation Forms for Vertical */
-          || (uc >= 0xfe30 && uc < 0xfe70) /* CJK Compatibility Forms */
-          || (uc >= 0xff00 && uc < 0xff61) /* Fullwidth Forms */
-          || (uc >= 0xffe0 && uc < 0xffe7) /* Fullwidth Signs */
-          || (uc >= 0x20000 && uc <= 0x2ffff) /* Supplementary Ideographic Plane */
-          || (uc >= 0x30000 && uc <= 0x3ffff) /* Tertiary Ideographic Plane */
-     )   )
-    return 2;
-  /* In ancient CJK encodings, Cyrillic and most other characters are
-     double-width as well.  */
-  if (uc >= 0x00A1 && uc < 0xFF61 && uc != 0x20A9
-      && is_cjk_encoding (encoding))
-    return 2;
-  return 1;
-}
diff -Nuar groff-1.22.3.old/src/libs/gnulib/lib/uniwidth.in.h groff-1.22.3/src/libs/gnulib/lib/uniwidth.in.h
--- groff-1.22.3.old/src/libs/gnulib/lib/uniwidth.in.h	2014-11-04 10:38:35.630518934 +0200
+++ groff-1.22.3/src/libs/gnulib/lib/uniwidth.in.h	1970-01-01 02:00:00.000000000 +0200
@@ -1,72 +0,0 @@
-/* Display width functions.
-   Copyright (C) 2001-2002, 2005, 2007, 2009-2014 Free Software Foundation,
-   Inc.
-
-   This program is free software: you can redistribute it and/or modify it
-   under the terms of the GNU Lesser General Public License as published
-   by the Free Software Foundation; either version 3 of the License, or
-   (at your option) any later version.
-
-   This program is distributed in the hope that it will be useful,
-   but WITHOUT ANY WARRANTY; without even the implied warranty of
-   MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the GNU
-   Lesser General Public License for more details.
-
-   You should have received a copy of the GNU Lesser General Public License
-   along with this program.  If not, see <http://www.gnu.org/licenses/>.  */
-
-#ifndef _UNIWIDTH_H
-#define _UNIWIDTH_H
-
-#include "unitypes.h"
-
-/* Get size_t.  */
-#include <stddef.h>
-
-/* Get locale_charset() declaration.  */
-#include "localcharset.h"
-
-#ifdef __cplusplus
-extern "C" {
-#endif
-
-
-/* Display width.  */
-
-/* These functions are locale dependent.  The encoding argument identifies
-   the encoding (e.g. "ISO-8859-2" for Polish).  */
-
-/* Determine number of column positions required for UC.  */
-extern int
-       uc_width (ucs4_t uc, const char *encoding)
-       _UC_ATTRIBUTE_PURE;
-
-/* Determine number of column positions required for first N units
-   (or fewer if S ends before this) in S.  */
-extern int
-       u8_width (const uint8_t *s, size_t n, const char *encoding)
-       _UC_ATTRIBUTE_PURE;
-extern int
-       u16_width (const uint16_t *s, size_t n, const char *encoding)
-       _UC_ATTRIBUTE_PURE;
-extern int
-       u32_width (const uint32_t *s, size_t n, const char *encoding)
-       _UC_ATTRIBUTE_PURE;
-
-/* Determine number of column positions required for S.  */
-extern int
-       u8_strwidth (const uint8_t *s, const char *encoding)
-       _UC_ATTRIBUTE_PURE;
-extern int
-       u16_strwidth (const uint16_t *s, const char *encoding)
-       _UC_ATTRIBUTE_PURE;
-extern int
-       u32_strwidth (const uint32_t *s, const char *encoding)
-       _UC_ATTRIBUTE_PURE;
-
-
-#ifdef __cplusplus
-}
-#endif
-
-#endif /* _UNIWIDTH_H */
diff -Nuar groff-1.22.3.old/src/libs/gnulib/lib/verify.h groff-1.22.3/src/libs/gnulib/lib/verify.h
--- groff-1.22.3.old/src/libs/gnulib/lib/verify.h	2014-11-04 10:38:35.630518934 +0200
+++ groff-1.22.3/src/libs/gnulib/lib/verify.h	1970-01-01 02:00:00.000000000 +0200
@@ -1,279 +0,0 @@
-/* Compile-time assert-like macros.
-
-   Copyright (C) 2005-2006, 2009-2014 Free Software Foundation, Inc.
-
-   This program is free software: you can redistribute it and/or modify
-   it under the terms of the GNU General Public License as published by
-   the Free Software Foundation; either version 3 of the License, or
-   (at your option) any later version.
-
-   This program is distributed in the hope that it will be useful,
-   but WITHOUT ANY WARRANTY; without even the implied warranty of
-   MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
-   GNU General Public License for more details.
-
-   You should have received a copy of the GNU General Public License
-   along with this program.  If not, see <http://www.gnu.org/licenses/>.  */
-
-/* Written by Paul Eggert, Bruno Haible, and Jim Meyering.  */
-
-#ifndef _GL_VERIFY_H
-#define _GL_VERIFY_H
-
-
-/* Define _GL_HAVE__STATIC_ASSERT to 1 if _Static_assert works as per C11.
-   This is supported by GCC 4.6.0 and later, in C mode, and its use
-   here generates easier-to-read diagnostics when verify (R) fails.
-
-   Define _GL_HAVE_STATIC_ASSERT to 1 if static_assert works as per C++11.
-   This will likely be supported by future GCC versions, in C++ mode.
-
-   Use this only with GCC.  If we were willing to slow 'configure'
-   down we could also use it with other compilers, but since this
-   affects only the quality of diagnostics, why bother?  */
-#if (4 < __GNUC__ + (6 <= __GNUC_MINOR__) \
-     && (201112L <= __STDC_VERSION__  || !defined __STRICT_ANSI__) \
-     && !defined __cplusplus)
-# define _GL_HAVE__STATIC_ASSERT 1
-#endif
-/* The condition (99 < __GNUC__) is temporary, until we know about the
-   first G++ release that supports static_assert.  */
-#if (99 < __GNUC__) && defined __cplusplus
-# define _GL_HAVE_STATIC_ASSERT 1
-#endif
-
-/* FreeBSD 9.1 <sys/cdefs.h>, included by <stddef.h> and lots of other
-   system headers, defines a conflicting _Static_assert that is no
-   better than ours; override it.  */
-#ifndef _GL_HAVE_STATIC_ASSERT
-# include <stddef.h>
-# undef _Static_assert
-#endif
-
-/* Each of these macros verifies that its argument R is nonzero.  To
-   be portable, R should be an integer constant expression.  Unlike
-   assert (R), there is no run-time overhead.
-
-   If _Static_assert works, verify (R) uses it directly.  Similarly,
-   _GL_VERIFY_TRUE works by packaging a _Static_assert inside a struct
-   that is an operand of sizeof.
-
-   The code below uses several ideas for C++ compilers, and for C
-   compilers that do not support _Static_assert:
-
-   * The first step is ((R) ? 1 : -1).  Given an expression R, of
-     integral or boolean or floating-point type, this yields an
-     expression of integral type, whose value is later verified to be
-     constant and nonnegative.
-
-   * Next this expression W is wrapped in a type
-     struct _gl_verify_type {
-       unsigned int _gl_verify_error_if_negative: W;
-     }.
-     If W is negative, this yields a compile-time error.  No compiler can
-     deal with a bit-field of negative size.
-
-     One might think that an array size check would have the same
-     effect, that is, that the type struct { unsigned int dummy[W]; }
-     would work as well.  However, inside a function, some compilers
-     (such as C++ compilers and GNU C) allow local parameters and
-     variables inside array size expressions.  With these compilers,
-     an array size check would not properly diagnose this misuse of
-     the verify macro:
-
-       void function (int n) { verify (n < 0); }
-
-   * For the verify macro, the struct _gl_verify_type will need to
-     somehow be embedded into a declaration.  To be portable, this
-     declaration must declare an object, a constant, a function, or a
-     typedef name.  If the declared entity uses the type directly,
-     such as in
-
-       struct dummy {...};
-       typedef struct {...} dummy;
-       extern struct {...} *dummy;
-       extern void dummy (struct {...} *);
-       extern struct {...} *dummy (void);
-
-     two uses of the verify macro would yield colliding declarations
-     if the entity names are not disambiguated.  A workaround is to
-     attach the current line number to the entity name:
-
-       #define _GL_CONCAT0(x, y) x##y
-       #define _GL_CONCAT(x, y) _GL_CONCAT0 (x, y)
-       extern struct {...} * _GL_CONCAT (dummy, __LINE__);
-
-     But this has the problem that two invocations of verify from
-     within the same macro would collide, since the __LINE__ value
-     would be the same for both invocations.  (The GCC __COUNTER__
-     macro solves this problem, but is not portable.)
-
-     A solution is to use the sizeof operator.  It yields a number,
-     getting rid of the identity of the type.  Declarations like
-
-       extern int dummy [sizeof (struct {...})];
-       extern void dummy (int [sizeof (struct {...})]);
-       extern int (*dummy (void)) [sizeof (struct {...})];
-
-     can be repeated.
-
-   * Should the implementation use a named struct or an unnamed struct?
-     Which of the following alternatives can be used?
-
-       extern int dummy [sizeof (struct {...})];
-       extern int dummy [sizeof (struct _gl_verify_type {...})];
-       extern void dummy (int [sizeof (struct {...})]);
-       extern void dummy (int [sizeof (struct _gl_verify_type {...})]);
-       extern int (*dummy (void)) [sizeof (struct {...})];
-       extern int (*dummy (void)) [sizeof (struct _gl_verify_type {...})];
-
-     In the second and sixth case, the struct type is exported to the
-     outer scope; two such declarations therefore collide.  GCC warns
-     about the first, third, and fourth cases.  So the only remaining
-     possibility is the fifth case:
-
-       extern int (*dummy (void)) [sizeof (struct {...})];
-
-   * GCC warns about duplicate declarations of the dummy function if
-     -Wredundant-decls is used.  GCC 4.3 and later have a builtin
-     __COUNTER__ macro that can let us generate unique identifiers for
-     each dummy function, to suppress this warning.
-
-   * This implementation exploits the fact that older versions of GCC,
-     which do not support _Static_assert, also do not warn about the
-     last declaration mentioned above.
-
-   * GCC warns if -Wnested-externs is enabled and verify() is used
-     within a function body; but inside a function, you can always
-     arrange to use verify_expr() instead.
-
-   * In C++, any struct definition inside sizeof is invalid.
-     Use a template type to work around the problem.  */
-
-/* Concatenate two preprocessor tokens.  */
-#define _GL_CONCAT(x, y) _GL_CONCAT0 (x, y)
-#define _GL_CONCAT0(x, y) x##y
-
-/* _GL_COUNTER is an integer, preferably one that changes each time we
-   use it.  Use __COUNTER__ if it works, falling back on __LINE__
-   otherwise.  __LINE__ isn't perfect, but it's better than a
-   constant.  */
-#if defined __COUNTER__ && __COUNTER__ != __COUNTER__
-# define _GL_COUNTER __COUNTER__
-#else
-# define _GL_COUNTER __LINE__
-#endif
-
-/* Generate a symbol with the given prefix, making it unique if
-   possible.  */
-#define _GL_GENSYM(prefix) _GL_CONCAT (prefix, _GL_COUNTER)
-
-/* Verify requirement R at compile-time, as an integer constant expression
-   that returns 1.  If R is false, fail at compile-time, preferably
-   with a diagnostic that includes the string-literal DIAGNOSTIC.  */
-
-#define _GL_VERIFY_TRUE(R, DIAGNOSTIC) \
-   (!!sizeof (_GL_VERIFY_TYPE (R, DIAGNOSTIC)))
-
-#ifdef __cplusplus
-# if !GNULIB_defined_struct__gl_verify_type
-template <int w>
-  struct _gl_verify_type {
-    unsigned int _gl_verify_error_if_negative: w;
-  };
-#  define GNULIB_defined_struct__gl_verify_type 1
-# endif
-# define _GL_VERIFY_TYPE(R, DIAGNOSTIC) \
-    _gl_verify_type<(R) ? 1 : -1>
-#elif defined _GL_HAVE__STATIC_ASSERT
-# define _GL_VERIFY_TYPE(R, DIAGNOSTIC) \
-    struct {                                   \
-      _Static_assert (R, DIAGNOSTIC);          \
-      int _gl_dummy;                          \
-    }
-#else
-# define _GL_VERIFY_TYPE(R, DIAGNOSTIC) \
-    struct { unsigned int _gl_verify_error_if_negative: (R) ? 1 : -1; }
-#endif
-
-/* Verify requirement R at compile-time, as a declaration without a
-   trailing ';'.  If R is false, fail at compile-time, preferably
-   with a diagnostic that includes the string-literal DIAGNOSTIC.
-
-   Unfortunately, unlike C11, this implementation must appear as an
-   ordinary declaration, and cannot appear inside struct { ... }.  */
-
-#ifdef _GL_HAVE__STATIC_ASSERT
-# define _GL_VERIFY _Static_assert
-#else
-# define _GL_VERIFY(R, DIAGNOSTIC)				       \
-    extern int (*_GL_GENSYM (_gl_verify_function) (void))	       \
-      [_GL_VERIFY_TRUE (R, DIAGNOSTIC)]
-#endif
-
-/* _GL_STATIC_ASSERT_H is defined if this code is copied into assert.h.  */
-#ifdef _GL_STATIC_ASSERT_H
-# if !defined _GL_HAVE__STATIC_ASSERT && !defined _Static_assert
-#  define _Static_assert(R, DIAGNOSTIC) _GL_VERIFY (R, DIAGNOSTIC)
-# endif
-# if !defined _GL_HAVE_STATIC_ASSERT && !defined static_assert
-#  define static_assert _Static_assert /* C11 requires this #define.  */
-# endif
-#endif
-
-/* @assert.h omit start@  */
-
-/* Each of these macros verifies that its argument R is nonzero.  To
-   be portable, R should be an integer constant expression.  Unlike
-   assert (R), there is no run-time overhead.
-
-   There are two macros, since no single macro can be used in all
-   contexts in C.  verify_true (R) is for scalar contexts, including
-   integer constant expression contexts.  verify (R) is for declaration
-   contexts, e.g., the top level.  */
-
-/* Verify requirement R at compile-time, as an integer constant expression.
-   Return 1.  This is equivalent to verify_expr (R, 1).
-
-   verify_true is obsolescent; please use verify_expr instead.  */
-
-#define verify_true(R) _GL_VERIFY_TRUE (R, "verify_true (" #R ")")
-
-/* Verify requirement R at compile-time.  Return the value of the
-   expression E.  */
-
-#define verify_expr(R, E) \
-   (_GL_VERIFY_TRUE (R, "verify_expr (" #R ", " #E ")") ? (E) : (E))
-
-/* Verify requirement R at compile-time, as a declaration without a
-   trailing ';'.  */
-
-#define verify(R) _GL_VERIFY (R, "verify (" #R ")")
-
-#ifndef __has_builtin
-# define __has_builtin(x) 0
-#endif
-
-/* Assume that R always holds.  This lets the compiler optimize
-   accordingly.  R should not have side-effects; it may or may not be
-   evaluated.  Behavior is undefined if R is false.  */
-
-#if (__has_builtin (__builtin_unreachable) \
-     || 4 < __GNUC__ + (5 <= __GNUC_MINOR__))
-# define assume(R) ((R) ? (void) 0 : __builtin_unreachable ())
-#elif 1200 <= _MSC_VER
-# define assume(R) __assume (R)
-#elif (defined lint \
-       && (__has_builtin (__builtin_trap) \
-           || 3 < __GNUC__ + (3 < __GNUC_MINOR__ + (4 <= __GNUC_PATCHLEVEL__))))
-  /* Doing it this way helps various packages when configured with
-     --enable-gcc-warnings, which compiles with -Dlint.  It's nicer
-     when 'assume' silences warnings even with older GCCs.  */
-# define assume(R) ((R) ? (void) 0 : __builtin_trap ())
-#else
-# define assume(R) ((void) (0 && (R)))
-#endif
-
-/* @assert.h omit end@  */
-
-#endif
diff -Nuar groff-1.22.3.old/src/libs/gnulib/lib/wchar.in.h groff-1.22.3/src/libs/gnulib/lib/wchar.in.h
--- groff-1.22.3.old/src/libs/gnulib/lib/wchar.in.h	2014-11-04 10:38:35.631518921 +0200
+++ groff-1.22.3/src/libs/gnulib/lib/wchar.in.h	1970-01-01 02:00:00.000000000 +0200
@@ -1,1028 +0,0 @@
-/* A substitute for ISO C99 <wchar.h>, for platforms that have issues.
-
-   Copyright (C) 2007-2014 Free Software Foundation, Inc.
-
-   This program is free software; you can redistribute it and/or modify
-   it under the terms of the GNU General Public License as published by
-   the Free Software Foundation; either version 2, or (at your option)
-   any later version.
-
-   This program is distributed in the hope that it will be useful,
-   but WITHOUT ANY WARRANTY; without even the implied warranty of
-   MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
-   GNU General Public License for more details.
-
-   You should have received a copy of the GNU General Public License
-   along with this program; if not, see <http://www.gnu.org/licenses/>.  */
-
-/* Written by Eric Blake.  */
-
-/*
- * ISO C 99 <wchar.h> for platforms that have issues.
- * <http://www.opengroup.org/susv3xbd/wchar.h.html>
- *
- * For now, this just ensures proper prerequisite inclusion order and
- * the declaration of wcwidth().
- */
-
-#if __GNUC__ >= 3
-@PRAGMA_SYSTEM_HEADER@
-#endif
-@PRAGMA_COLUMNS@
-
-#if defined __need_mbstate_t || defined __need_wint_t || (defined __hpux && ((defined _INTTYPES_INCLUDED && !defined strtoimax) || defined _GL_JUST_INCLUDE_SYSTEM_WCHAR_H)) || defined _GL_ALREADY_INCLUDING_WCHAR_H
-/* Special invocation convention:
-   - Inside glibc and uClibc header files.
-   - On HP-UX 11.00 we have a sequence of nested includes
-     <wchar.h> -> <stdlib.h> -> <stdint.h>, and the latter includes <wchar.h>,
-     once indirectly <stdint.h> -> <sys/types.h> -> <inttypes.h> -> <wchar.h>
-     and once directly.  In both situations 'wint_t' is not yet defined,
-     therefore we cannot provide the function overrides; instead include only
-     the system's <wchar.h>.
-   - On IRIX 6.5, similarly, we have an include <wchar.h> -> <wctype.h>, and
-     the latter includes <wchar.h>.  But here, we have no way to detect whether
-     <wctype.h> is completely included or is still being included.  */
-
-#@INCLUDE_NEXT@ @NEXT_WCHAR_H@
-
-#else
-/* Normal invocation convention.  */
-
-#ifndef _@GUARD_PREFIX@_WCHAR_H
-
-#define _GL_ALREADY_INCLUDING_WCHAR_H
-
-#if @HAVE_FEATURES_H@
-# include <features.h> /* for __GLIBC__ */
-#endif
-
-/* Tru64 with Desktop Toolkit C has a bug: <stdio.h> must be included before
-   <wchar.h>.
-   BSD/OS 4.0.1 has a bug: <stddef.h>, <stdio.h> and <time.h> must be
-   included before <wchar.h>.
-   In some builds of uClibc, <wchar.h> is nonexistent and wchar_t is defined
-   by <stddef.h>.
-   But avoid namespace pollution on glibc systems.  */
-#if !(defined __GLIBC__ && !defined __UCLIBC__)
-# include <stddef.h>
-#endif
-#ifndef __GLIBC__
-# include <stdio.h>
-# include <time.h>
-#endif
-
-/* Include the original <wchar.h> if it exists.
-   Some builds of uClibc lack it.  */
-/* The include_next requires a split double-inclusion guard.  */
-#if @HAVE_WCHAR_H@
-# @INCLUDE_NEXT@ @NEXT_WCHAR_H@
-#endif
-
-#undef _GL_ALREADY_INCLUDING_WCHAR_H
-
-#ifndef _@GUARD_PREFIX@_WCHAR_H
-#define _@GUARD_PREFIX@_WCHAR_H
-
-/* The __attribute__ feature is available in gcc versions 2.5 and later.
-   The attribute __pure__ was added in gcc 2.96.  */
-#if __GNUC__ > 2 || (__GNUC__ == 2 && __GNUC_MINOR__ >= 96)
-# define _GL_ATTRIBUTE_PURE __attribute__ ((__pure__))
-#else
-# define _GL_ATTRIBUTE_PURE /* empty */
-#endif
-
-/* The definitions of _GL_FUNCDECL_RPL etc. are copied here.  */
-
-/* The definition of _GL_ARG_NONNULL is copied here.  */
-
-/* The definition of _GL_WARN_ON_USE is copied here.  */
-
-
-/* Define wint_t and WEOF.  (Also done in wctype.in.h.)  */
-#if !@HAVE_WINT_T@ && !defined wint_t
-# define wint_t int
-# ifndef WEOF
-#  define WEOF -1
-# endif
-#else
-/* MSVC defines wint_t as 'unsigned short' in <crtdefs.h>.
-   This is too small: ISO C 99 section 7.24.1.(2) says that wint_t must be
-   "unchanged by default argument promotions".  Override it.  */
-# if defined _MSC_VER
-#  if !GNULIB_defined_wint_t
-#   include <crtdefs.h>
-typedef unsigned int rpl_wint_t;
-#   undef wint_t
-#   define wint_t rpl_wint_t
-#   define GNULIB_defined_wint_t 1
-#  endif
-# endif
-# ifndef WEOF
-#  define WEOF ((wint_t) -1)
-# endif
-#endif
-
-
-/* Override mbstate_t if it is too small.
-   On IRIX 6.5, sizeof (mbstate_t) == 1, which is not sufficient for
-   implementing mbrtowc for encodings like UTF-8.  */
-#if !(@HAVE_MBSINIT@ && @HAVE_MBRTOWC@) || @REPLACE_MBSTATE_T@
-# if !GNULIB_defined_mbstate_t
-typedef int rpl_mbstate_t;
-#  undef mbstate_t
-#  define mbstate_t rpl_mbstate_t
-#  define GNULIB_defined_mbstate_t 1
-# endif
-#endif
-
-
-/* Convert a single-byte character to a wide character.  */
-#if @GNULIB_BTOWC@
-# if @REPLACE_BTOWC@
-#  if !(defined __cplusplus && defined GNULIB_NAMESPACE)
-#   undef btowc
-#   define btowc rpl_btowc
-#  endif
-_GL_FUNCDECL_RPL (btowc, wint_t, (int c) _GL_ATTRIBUTE_PURE);
-_GL_CXXALIAS_RPL (btowc, wint_t, (int c));
-# else
-#  if !@HAVE_BTOWC@
-_GL_FUNCDECL_SYS (btowc, wint_t, (int c) _GL_ATTRIBUTE_PURE);
-#  endif
-_GL_CXXALIAS_SYS (btowc, wint_t, (int c));
-# endif
-_GL_CXXALIASWARN (btowc);
-#elif defined GNULIB_POSIXCHECK
-# undef btowc
-# if HAVE_RAW_DECL_BTOWC
-_GL_WARN_ON_USE (btowc, "btowc is unportable - "
-                 "use gnulib module btowc for portability");
-# endif
-#endif
-
-
-/* Convert a wide character to a single-byte character.  */
-#if @GNULIB_WCTOB@
-# if @REPLACE_WCTOB@
-#  if !(defined __cplusplus && defined GNULIB_NAMESPACE)
-#   undef wctob
-#   define wctob rpl_wctob
-#  endif
-_GL_FUNCDECL_RPL (wctob, int, (wint_t wc) _GL_ATTRIBUTE_PURE);
-_GL_CXXALIAS_RPL (wctob, int, (wint_t wc));
-# else
-#  if !defined wctob && !@HAVE_DECL_WCTOB@
-/* wctob is provided by gnulib, or wctob exists but is not declared.  */
-_GL_FUNCDECL_SYS (wctob, int, (wint_t wc) _GL_ATTRIBUTE_PURE);
-#  endif
-_GL_CXXALIAS_SYS (wctob, int, (wint_t wc));
-# endif
-_GL_CXXALIASWARN (wctob);
-#elif defined GNULIB_POSIXCHECK
-# undef wctob
-# if HAVE_RAW_DECL_WCTOB
-_GL_WARN_ON_USE (wctob, "wctob is unportable - "
-                 "use gnulib module wctob for portability");
-# endif
-#endif
-
-
-/* Test whether *PS is in the initial state.  */
-#if @GNULIB_MBSINIT@
-# if @REPLACE_MBSINIT@
-#  if !(defined __cplusplus && defined GNULIB_NAMESPACE)
-#   undef mbsinit
-#   define mbsinit rpl_mbsinit
-#  endif
-_GL_FUNCDECL_RPL (mbsinit, int, (const mbstate_t *ps));
-_GL_CXXALIAS_RPL (mbsinit, int, (const mbstate_t *ps));
-# else
-#  if !@HAVE_MBSINIT@
-_GL_FUNCDECL_SYS (mbsinit, int, (const mbstate_t *ps));
-#  endif
-_GL_CXXALIAS_SYS (mbsinit, int, (const mbstate_t *ps));
-# endif
-_GL_CXXALIASWARN (mbsinit);
-#elif defined GNULIB_POSIXCHECK
-# undef mbsinit
-# if HAVE_RAW_DECL_MBSINIT
-_GL_WARN_ON_USE (mbsinit, "mbsinit is unportable - "
-                 "use gnulib module mbsinit for portability");
-# endif
-#endif
-
-
-/* Convert a multibyte character to a wide character.  */
-#if @GNULIB_MBRTOWC@
-# if @REPLACE_MBRTOWC@
-#  if !(defined __cplusplus && defined GNULIB_NAMESPACE)
-#   undef mbrtowc
-#   define mbrtowc rpl_mbrtowc
-#  endif
-_GL_FUNCDECL_RPL (mbrtowc, size_t,
-                  (wchar_t *pwc, const char *s, size_t n, mbstate_t *ps));
-_GL_CXXALIAS_RPL (mbrtowc, size_t,
-                  (wchar_t *pwc, const char *s, size_t n, mbstate_t *ps));
-# else
-#  if !@HAVE_MBRTOWC@
-_GL_FUNCDECL_SYS (mbrtowc, size_t,
-                  (wchar_t *pwc, const char *s, size_t n, mbstate_t *ps));
-#  endif
-_GL_CXXALIAS_SYS (mbrtowc, size_t,
-                  (wchar_t *pwc, const char *s, size_t n, mbstate_t *ps));
-# endif
-_GL_CXXALIASWARN (mbrtowc);
-#elif defined GNULIB_POSIXCHECK
-# undef mbrtowc
-# if HAVE_RAW_DECL_MBRTOWC
-_GL_WARN_ON_USE (mbrtowc, "mbrtowc is unportable - "
-                 "use gnulib module mbrtowc for portability");
-# endif
-#endif
-
-
-/* Recognize a multibyte character.  */
-#if @GNULIB_MBRLEN@
-# if @REPLACE_MBRLEN@
-#  if !(defined __cplusplus && defined GNULIB_NAMESPACE)
-#   undef mbrlen
-#   define mbrlen rpl_mbrlen
-#  endif
-_GL_FUNCDECL_RPL (mbrlen, size_t, (const char *s, size_t n, mbstate_t *ps));
-_GL_CXXALIAS_RPL (mbrlen, size_t, (const char *s, size_t n, mbstate_t *ps));
-# else
-#  if !@HAVE_MBRLEN@
-_GL_FUNCDECL_SYS (mbrlen, size_t, (const char *s, size_t n, mbstate_t *ps));
-#  endif
-_GL_CXXALIAS_SYS (mbrlen, size_t, (const char *s, size_t n, mbstate_t *ps));
-# endif
-_GL_CXXALIASWARN (mbrlen);
-#elif defined GNULIB_POSIXCHECK
-# undef mbrlen
-# if HAVE_RAW_DECL_MBRLEN
-_GL_WARN_ON_USE (mbrlen, "mbrlen is unportable - "
-                 "use gnulib module mbrlen for portability");
-# endif
-#endif
-
-
-/* Convert a string to a wide string.  */
-#if @GNULIB_MBSRTOWCS@
-# if @REPLACE_MBSRTOWCS@
-#  if !(defined __cplusplus && defined GNULIB_NAMESPACE)
-#   undef mbsrtowcs
-#   define mbsrtowcs rpl_mbsrtowcs
-#  endif
-_GL_FUNCDECL_RPL (mbsrtowcs, size_t,
-                  (wchar_t *dest, const char **srcp, size_t len, mbstate_t *ps)
-                  _GL_ARG_NONNULL ((2)));
-_GL_CXXALIAS_RPL (mbsrtowcs, size_t,
-                  (wchar_t *dest, const char **srcp, size_t len,
-                   mbstate_t *ps));
-# else
-#  if !@HAVE_MBSRTOWCS@
-_GL_FUNCDECL_SYS (mbsrtowcs, size_t,
-                  (wchar_t *dest, const char **srcp, size_t len, mbstate_t *ps)
-                  _GL_ARG_NONNULL ((2)));
-#  endif
-_GL_CXXALIAS_SYS (mbsrtowcs, size_t,
-                  (wchar_t *dest, const char **srcp, size_t len,
-                   mbstate_t *ps));
-# endif
-_GL_CXXALIASWARN (mbsrtowcs);
-#elif defined GNULIB_POSIXCHECK
-# undef mbsrtowcs
-# if HAVE_RAW_DECL_MBSRTOWCS
-_GL_WARN_ON_USE (mbsrtowcs, "mbsrtowcs is unportable - "
-                 "use gnulib module mbsrtowcs for portability");
-# endif
-#endif
-
-
-/* Convert a string to a wide string.  */
-#if @GNULIB_MBSNRTOWCS@
-# if @REPLACE_MBSNRTOWCS@
-#  if !(defined __cplusplus && defined GNULIB_NAMESPACE)
-#   undef mbsnrtowcs
-#   define mbsnrtowcs rpl_mbsnrtowcs
-#  endif
-_GL_FUNCDECL_RPL (mbsnrtowcs, size_t,
-                  (wchar_t *dest, const char **srcp, size_t srclen, size_t len,
-                   mbstate_t *ps)
-                  _GL_ARG_NONNULL ((2)));
-_GL_CXXALIAS_RPL (mbsnrtowcs, size_t,
-                  (wchar_t *dest, const char **srcp, size_t srclen, size_t len,
-                   mbstate_t *ps));
-# else
-#  if !@HAVE_MBSNRTOWCS@
-_GL_FUNCDECL_SYS (mbsnrtowcs, size_t,
-                  (wchar_t *dest, const char **srcp, size_t srclen, size_t len,
-                   mbstate_t *ps)
-                  _GL_ARG_NONNULL ((2)));
-#  endif
-_GL_CXXALIAS_SYS (mbsnrtowcs, size_t,
-                  (wchar_t *dest, const char **srcp, size_t srclen, size_t len,
-                   mbstate_t *ps));
-# endif
-_GL_CXXALIASWARN (mbsnrtowcs);
-#elif defined GNULIB_POSIXCHECK
-# undef mbsnrtowcs
-# if HAVE_RAW_DECL_MBSNRTOWCS
-_GL_WARN_ON_USE (mbsnrtowcs, "mbsnrtowcs is unportable - "
-                 "use gnulib module mbsnrtowcs for portability");
-# endif
-#endif
-
-
-/* Convert a wide character to a multibyte character.  */
-#if @GNULIB_WCRTOMB@
-# if @REPLACE_WCRTOMB@
-#  if !(defined __cplusplus && defined GNULIB_NAMESPACE)
-#   undef wcrtomb
-#   define wcrtomb rpl_wcrtomb
-#  endif
-_GL_FUNCDECL_RPL (wcrtomb, size_t, (char *s, wchar_t wc, mbstate_t *ps));
-_GL_CXXALIAS_RPL (wcrtomb, size_t, (char *s, wchar_t wc, mbstate_t *ps));
-# else
-#  if !@HAVE_WCRTOMB@
-_GL_FUNCDECL_SYS (wcrtomb, size_t, (char *s, wchar_t wc, mbstate_t *ps));
-#  endif
-_GL_CXXALIAS_SYS (wcrtomb, size_t, (char *s, wchar_t wc, mbstate_t *ps));
-# endif
-_GL_CXXALIASWARN (wcrtomb);
-#elif defined GNULIB_POSIXCHECK
-# undef wcrtomb
-# if HAVE_RAW_DECL_WCRTOMB
-_GL_WARN_ON_USE (wcrtomb, "wcrtomb is unportable - "
-                 "use gnulib module wcrtomb for portability");
-# endif
-#endif
-
-
-/* Convert a wide string to a string.  */
-#if @GNULIB_WCSRTOMBS@
-# if @REPLACE_WCSRTOMBS@
-#  if !(defined __cplusplus && defined GNULIB_NAMESPACE)
-#   undef wcsrtombs
-#   define wcsrtombs rpl_wcsrtombs
-#  endif
-_GL_FUNCDECL_RPL (wcsrtombs, size_t,
-                  (char *dest, const wchar_t **srcp, size_t len, mbstate_t *ps)
-                  _GL_ARG_NONNULL ((2)));
-_GL_CXXALIAS_RPL (wcsrtombs, size_t,
-                  (char *dest, const wchar_t **srcp, size_t len,
-                   mbstate_t *ps));
-# else
-#  if !@HAVE_WCSRTOMBS@
-_GL_FUNCDECL_SYS (wcsrtombs, size_t,
-                  (char *dest, const wchar_t **srcp, size_t len, mbstate_t *ps)
-                  _GL_ARG_NONNULL ((2)));
-#  endif
-_GL_CXXALIAS_SYS (wcsrtombs, size_t,
-                  (char *dest, const wchar_t **srcp, size_t len,
-                   mbstate_t *ps));
-# endif
-_GL_CXXALIASWARN (wcsrtombs);
-#elif defined GNULIB_POSIXCHECK
-# undef wcsrtombs
-# if HAVE_RAW_DECL_WCSRTOMBS
-_GL_WARN_ON_USE (wcsrtombs, "wcsrtombs is unportable - "
-                 "use gnulib module wcsrtombs for portability");
-# endif
-#endif
-
-
-/* Convert a wide string to a string.  */
-#if @GNULIB_WCSNRTOMBS@
-# if @REPLACE_WCSNRTOMBS@
-#  if !(defined __cplusplus && defined GNULIB_NAMESPACE)
-#   undef wcsnrtombs
-#   define wcsnrtombs rpl_wcsnrtombs
-#  endif
-_GL_FUNCDECL_RPL (wcsnrtombs, size_t,
-                  (char *dest, const wchar_t **srcp, size_t srclen, size_t len,
-                   mbstate_t *ps)
-                  _GL_ARG_NONNULL ((2)));
-_GL_CXXALIAS_RPL (wcsnrtombs, size_t,
-                  (char *dest, const wchar_t **srcp, size_t srclen, size_t len,
-                   mbstate_t *ps));
-# else
-#  if !@HAVE_WCSNRTOMBS@
-_GL_FUNCDECL_SYS (wcsnrtombs, size_t,
-                  (char *dest, const wchar_t **srcp, size_t srclen, size_t len,
-                   mbstate_t *ps)
-                  _GL_ARG_NONNULL ((2)));
-#  endif
-_GL_CXXALIAS_SYS (wcsnrtombs, size_t,
-                  (char *dest, const wchar_t **srcp, size_t srclen, size_t len,
-                   mbstate_t *ps));
-# endif
-_GL_CXXALIASWARN (wcsnrtombs);
-#elif defined GNULIB_POSIXCHECK
-# undef wcsnrtombs
-# if HAVE_RAW_DECL_WCSNRTOMBS
-_GL_WARN_ON_USE (wcsnrtombs, "wcsnrtombs is unportable - "
-                 "use gnulib module wcsnrtombs for portability");
-# endif
-#endif
-
-
-/* Return the number of screen columns needed for WC.  */
-#if @GNULIB_WCWIDTH@
-# if @REPLACE_WCWIDTH@
-#  if !(defined __cplusplus && defined GNULIB_NAMESPACE)
-#   undef wcwidth
-#   define wcwidth rpl_wcwidth
-#  endif
-_GL_FUNCDECL_RPL (wcwidth, int, (wchar_t) _GL_ATTRIBUTE_PURE);
-_GL_CXXALIAS_RPL (wcwidth, int, (wchar_t));
-# else
-#  if !@HAVE_DECL_WCWIDTH@
-/* wcwidth exists but is not declared.  */
-_GL_FUNCDECL_SYS (wcwidth, int, (wchar_t) _GL_ATTRIBUTE_PURE);
-#  endif
-_GL_CXXALIAS_SYS (wcwidth, int, (wchar_t));
-# endif
-_GL_CXXALIASWARN (wcwidth);
-#elif defined GNULIB_POSIXCHECK
-# undef wcwidth
-# if HAVE_RAW_DECL_WCWIDTH
-_GL_WARN_ON_USE (wcwidth, "wcwidth is unportable - "
-                 "use gnulib module wcwidth for portability");
-# endif
-#endif
-
-
-/* Search N wide characters of S for C.  */
-#if @GNULIB_WMEMCHR@
-# if !@HAVE_WMEMCHR@
-_GL_FUNCDECL_SYS (wmemchr, wchar_t *, (const wchar_t *s, wchar_t c, size_t n)
-                                      _GL_ATTRIBUTE_PURE);
-# endif
-  /* On some systems, this function is defined as an overloaded function:
-       extern "C++" {
-         const wchar_t * std::wmemchr (const wchar_t *, wchar_t, size_t);
-         wchar_t * std::wmemchr (wchar_t *, wchar_t, size_t);
-       }  */
-_GL_CXXALIAS_SYS_CAST2 (wmemchr,
-                        wchar_t *, (const wchar_t *, wchar_t, size_t),
-                        const wchar_t *, (const wchar_t *, wchar_t, size_t));
-# if ((__GLIBC__ == 2 && __GLIBC_MINOR__ >= 10) && !defined __UCLIBC__) \
-     && (__GNUC__ > 4 || (__GNUC__ == 4 && __GNUC_MINOR__ >= 4))
-_GL_CXXALIASWARN1 (wmemchr, wchar_t *, (wchar_t *s, wchar_t c, size_t n));
-_GL_CXXALIASWARN1 (wmemchr, const wchar_t *,
-                   (const wchar_t *s, wchar_t c, size_t n));
-# else
-_GL_CXXALIASWARN (wmemchr);
-# endif
-#elif defined GNULIB_POSIXCHECK
-# undef wmemchr
-# if HAVE_RAW_DECL_WMEMCHR
-_GL_WARN_ON_USE (wmemchr, "wmemchr is unportable - "
-                 "use gnulib module wmemchr for portability");
-# endif
-#endif
-
-
-/* Compare N wide characters of S1 and S2.  */
-#if @GNULIB_WMEMCMP@
-# if !@HAVE_WMEMCMP@
-_GL_FUNCDECL_SYS (wmemcmp, int,
-                  (const wchar_t *s1, const wchar_t *s2, size_t n)
-                  _GL_ATTRIBUTE_PURE);
-# endif
-_GL_CXXALIAS_SYS (wmemcmp, int,
-                  (const wchar_t *s1, const wchar_t *s2, size_t n));
-_GL_CXXALIASWARN (wmemcmp);
-#elif defined GNULIB_POSIXCHECK
-# undef wmemcmp
-# if HAVE_RAW_DECL_WMEMCMP
-_GL_WARN_ON_USE (wmemcmp, "wmemcmp is unportable - "
-                 "use gnulib module wmemcmp for portability");
-# endif
-#endif
-
-
-/* Copy N wide characters of SRC to DEST.  */
-#if @GNULIB_WMEMCPY@
-# if !@HAVE_WMEMCPY@
-_GL_FUNCDECL_SYS (wmemcpy, wchar_t *,
-                  (wchar_t *dest, const wchar_t *src, size_t n));
-# endif
-_GL_CXXALIAS_SYS (wmemcpy, wchar_t *,
-                  (wchar_t *dest, const wchar_t *src, size_t n));
-_GL_CXXALIASWARN (wmemcpy);
-#elif defined GNULIB_POSIXCHECK
-# undef wmemcpy
-# if HAVE_RAW_DECL_WMEMCPY
-_GL_WARN_ON_USE (wmemcpy, "wmemcpy is unportable - "
-                 "use gnulib module wmemcpy for portability");
-# endif
-#endif
-
-
-/* Copy N wide characters of SRC to DEST, guaranteeing correct behavior for
-   overlapping memory areas.  */
-#if @GNULIB_WMEMMOVE@
-# if !@HAVE_WMEMMOVE@
-_GL_FUNCDECL_SYS (wmemmove, wchar_t *,
-                  (wchar_t *dest, const wchar_t *src, size_t n));
-# endif
-_GL_CXXALIAS_SYS (wmemmove, wchar_t *,
-                  (wchar_t *dest, const wchar_t *src, size_t n));
-_GL_CXXALIASWARN (wmemmove);
-#elif defined GNULIB_POSIXCHECK
-# undef wmemmove
-# if HAVE_RAW_DECL_WMEMMOVE
-_GL_WARN_ON_USE (wmemmove, "wmemmove is unportable - "
-                 "use gnulib module wmemmove for portability");
-# endif
-#endif
-
-
-/* Set N wide characters of S to C.  */
-#if @GNULIB_WMEMSET@
-# if !@HAVE_WMEMSET@
-_GL_FUNCDECL_SYS (wmemset, wchar_t *, (wchar_t *s, wchar_t c, size_t n));
-# endif
-_GL_CXXALIAS_SYS (wmemset, wchar_t *, (wchar_t *s, wchar_t c, size_t n));
-_GL_CXXALIASWARN (wmemset);
-#elif defined GNULIB_POSIXCHECK
-# undef wmemset
-# if HAVE_RAW_DECL_WMEMSET
-_GL_WARN_ON_USE (wmemset, "wmemset is unportable - "
-                 "use gnulib module wmemset for portability");
-# endif
-#endif
-
-
-/* Return the number of wide characters in S.  */
-#if @GNULIB_WCSLEN@
-# if !@HAVE_WCSLEN@
-_GL_FUNCDECL_SYS (wcslen, size_t, (const wchar_t *s) _GL_ATTRIBUTE_PURE);
-# endif
-_GL_CXXALIAS_SYS (wcslen, size_t, (const wchar_t *s));
-_GL_CXXALIASWARN (wcslen);
-#elif defined GNULIB_POSIXCHECK
-# undef wcslen
-# if HAVE_RAW_DECL_WCSLEN
-_GL_WARN_ON_USE (wcslen, "wcslen is unportable - "
-                 "use gnulib module wcslen for portability");
-# endif
-#endif
-
-
-/* Return the number of wide characters in S, but at most MAXLEN.  */
-#if @GNULIB_WCSNLEN@
-# if !@HAVE_WCSNLEN@
-_GL_FUNCDECL_SYS (wcsnlen, size_t, (const wchar_t *s, size_t maxlen)
-                                   _GL_ATTRIBUTE_PURE);
-# endif
-_GL_CXXALIAS_SYS (wcsnlen, size_t, (const wchar_t *s, size_t maxlen));
-_GL_CXXALIASWARN (wcsnlen);
-#elif defined GNULIB_POSIXCHECK
-# undef wcsnlen
-# if HAVE_RAW_DECL_WCSNLEN
-_GL_WARN_ON_USE (wcsnlen, "wcsnlen is unportable - "
-                 "use gnulib module wcsnlen for portability");
-# endif
-#endif
-
-
-/* Copy SRC to DEST.  */
-#if @GNULIB_WCSCPY@
-# if !@HAVE_WCSCPY@
-_GL_FUNCDECL_SYS (wcscpy, wchar_t *, (wchar_t *dest, const wchar_t *src));
-# endif
-_GL_CXXALIAS_SYS (wcscpy, wchar_t *, (wchar_t *dest, const wchar_t *src));
-_GL_CXXALIASWARN (wcscpy);
-#elif defined GNULIB_POSIXCHECK
-# undef wcscpy
-# if HAVE_RAW_DECL_WCSCPY
-_GL_WARN_ON_USE (wcscpy, "wcscpy is unportable - "
-                 "use gnulib module wcscpy for portability");
-# endif
-#endif
-
-
-/* Copy SRC to DEST, returning the address of the terminating L'\0' in DEST.  */
-#if @GNULIB_WCPCPY@
-# if !@HAVE_WCPCPY@
-_GL_FUNCDECL_SYS (wcpcpy, wchar_t *, (wchar_t *dest, const wchar_t *src));
-# endif
-_GL_CXXALIAS_SYS (wcpcpy, wchar_t *, (wchar_t *dest, const wchar_t *src));
-_GL_CXXALIASWARN (wcpcpy);
-#elif defined GNULIB_POSIXCHECK
-# undef wcpcpy
-# if HAVE_RAW_DECL_WCPCPY
-_GL_WARN_ON_USE (wcpcpy, "wcpcpy is unportable - "
-                 "use gnulib module wcpcpy for portability");
-# endif
-#endif
-
-
-/* Copy no more than N wide characters of SRC to DEST.  */
-#if @GNULIB_WCSNCPY@
-# if !@HAVE_WCSNCPY@
-_GL_FUNCDECL_SYS (wcsncpy, wchar_t *,
-                  (wchar_t *dest, const wchar_t *src, size_t n));
-# endif
-_GL_CXXALIAS_SYS (wcsncpy, wchar_t *,
-                  (wchar_t *dest, const wchar_t *src, size_t n));
-_GL_CXXALIASWARN (wcsncpy);
-#elif defined GNULIB_POSIXCHECK
-# undef wcsncpy
-# if HAVE_RAW_DECL_WCSNCPY
-_GL_WARN_ON_USE (wcsncpy, "wcsncpy is unportable - "
-                 "use gnulib module wcsncpy for portability");
-# endif
-#endif
-
-
-/* Copy no more than N characters of SRC to DEST, returning the address of
-   the last character written into DEST.  */
-#if @GNULIB_WCPNCPY@
-# if !@HAVE_WCPNCPY@
-_GL_FUNCDECL_SYS (wcpncpy, wchar_t *,
-                  (wchar_t *dest, const wchar_t *src, size_t n));
-# endif
-_GL_CXXALIAS_SYS (wcpncpy, wchar_t *,
-                  (wchar_t *dest, const wchar_t *src, size_t n));
-_GL_CXXALIASWARN (wcpncpy);
-#elif defined GNULIB_POSIXCHECK
-# undef wcpncpy
-# if HAVE_RAW_DECL_WCPNCPY
-_GL_WARN_ON_USE (wcpncpy, "wcpncpy is unportable - "
-                 "use gnulib module wcpncpy for portability");
-# endif
-#endif
-
-
-/* Append SRC onto DEST.  */
-#if @GNULIB_WCSCAT@
-# if !@HAVE_WCSCAT@
-_GL_FUNCDECL_SYS (wcscat, wchar_t *, (wchar_t *dest, const wchar_t *src));
-# endif
-_GL_CXXALIAS_SYS (wcscat, wchar_t *, (wchar_t *dest, const wchar_t *src));
-_GL_CXXALIASWARN (wcscat);
-#elif defined GNULIB_POSIXCHECK
-# undef wcscat
-# if HAVE_RAW_DECL_WCSCAT
-_GL_WARN_ON_USE (wcscat, "wcscat is unportable - "
-                 "use gnulib module wcscat for portability");
-# endif
-#endif
-
-
-/* Append no more than N wide characters of SRC onto DEST.  */
-#if @GNULIB_WCSNCAT@
-# if !@HAVE_WCSNCAT@
-_GL_FUNCDECL_SYS (wcsncat, wchar_t *,
-                  (wchar_t *dest, const wchar_t *src, size_t n));
-# endif
-_GL_CXXALIAS_SYS (wcsncat, wchar_t *,
-                  (wchar_t *dest, const wchar_t *src, size_t n));
-_GL_CXXALIASWARN (wcsncat);
-#elif defined GNULIB_POSIXCHECK
-# undef wcsncat
-# if HAVE_RAW_DECL_WCSNCAT
-_GL_WARN_ON_USE (wcsncat, "wcsncat is unportable - "
-                 "use gnulib module wcsncat for portability");
-# endif
-#endif
-
-
-/* Compare S1 and S2.  */
-#if @GNULIB_WCSCMP@
-# if !@HAVE_WCSCMP@
-_GL_FUNCDECL_SYS (wcscmp, int, (const wchar_t *s1, const wchar_t *s2)
-                               _GL_ATTRIBUTE_PURE);
-# endif
-_GL_CXXALIAS_SYS (wcscmp, int, (const wchar_t *s1, const wchar_t *s2));
-_GL_CXXALIASWARN (wcscmp);
-#elif defined GNULIB_POSIXCHECK
-# undef wcscmp
-# if HAVE_RAW_DECL_WCSCMP
-_GL_WARN_ON_USE (wcscmp, "wcscmp is unportable - "
-                 "use gnulib module wcscmp for portability");
-# endif
-#endif
-
-
-/* Compare no more than N wide characters of S1 and S2.  */
-#if @GNULIB_WCSNCMP@
-# if !@HAVE_WCSNCMP@
-_GL_FUNCDECL_SYS (wcsncmp, int,
-                  (const wchar_t *s1, const wchar_t *s2, size_t n)
-                  _GL_ATTRIBUTE_PURE);
-# endif
-_GL_CXXALIAS_SYS (wcsncmp, int,
-                  (const wchar_t *s1, const wchar_t *s2, size_t n));
-_GL_CXXALIASWARN (wcsncmp);
-#elif defined GNULIB_POSIXCHECK
-# undef wcsncmp
-# if HAVE_RAW_DECL_WCSNCMP
-_GL_WARN_ON_USE (wcsncmp, "wcsncmp is unportable - "
-                 "use gnulib module wcsncmp for portability");
-# endif
-#endif
-
-
-/* Compare S1 and S2, ignoring case.  */
-#if @GNULIB_WCSCASECMP@
-# if !@HAVE_WCSCASECMP@
-_GL_FUNCDECL_SYS (wcscasecmp, int, (const wchar_t *s1, const wchar_t *s2)
-                                   _GL_ATTRIBUTE_PURE);
-# endif
-_GL_CXXALIAS_SYS (wcscasecmp, int, (const wchar_t *s1, const wchar_t *s2));
-_GL_CXXALIASWARN (wcscasecmp);
-#elif defined GNULIB_POSIXCHECK
-# undef wcscasecmp
-# if HAVE_RAW_DECL_WCSCASECMP
-_GL_WARN_ON_USE (wcscasecmp, "wcscasecmp is unportable - "
-                 "use gnulib module wcscasecmp for portability");
-# endif
-#endif
-
-
-/* Compare no more than N chars of S1 and S2, ignoring case.  */
-#if @GNULIB_WCSNCASECMP@
-# if !@HAVE_WCSNCASECMP@
-_GL_FUNCDECL_SYS (wcsncasecmp, int,
-                  (const wchar_t *s1, const wchar_t *s2, size_t n)
-                  _GL_ATTRIBUTE_PURE);
-# endif
-_GL_CXXALIAS_SYS (wcsncasecmp, int,
-                  (const wchar_t *s1, const wchar_t *s2, size_t n));
-_GL_CXXALIASWARN (wcsncasecmp);
-#elif defined GNULIB_POSIXCHECK
-# undef wcsncasecmp
-# if HAVE_RAW_DECL_WCSNCASECMP
-_GL_WARN_ON_USE (wcsncasecmp, "wcsncasecmp is unportable - "
-                 "use gnulib module wcsncasecmp for portability");
-# endif
-#endif
-
-
-/* Compare S1 and S2, both interpreted as appropriate to the LC_COLLATE
-   category of the current locale.  */
-#if @GNULIB_WCSCOLL@
-# if !@HAVE_WCSCOLL@
-_GL_FUNCDECL_SYS (wcscoll, int, (const wchar_t *s1, const wchar_t *s2));
-# endif
-_GL_CXXALIAS_SYS (wcscoll, int, (const wchar_t *s1, const wchar_t *s2));
-_GL_CXXALIASWARN (wcscoll);
-#elif defined GNULIB_POSIXCHECK
-# undef wcscoll
-# if HAVE_RAW_DECL_WCSCOLL
-_GL_WARN_ON_USE (wcscoll, "wcscoll is unportable - "
-                 "use gnulib module wcscoll for portability");
-# endif
-#endif
-
-
-/* Transform S2 into array pointed to by S1 such that if wcscmp is applied
-   to two transformed strings the result is the as applying 'wcscoll' to the
-   original strings.  */
-#if @GNULIB_WCSXFRM@
-# if !@HAVE_WCSXFRM@
-_GL_FUNCDECL_SYS (wcsxfrm, size_t, (wchar_t *s1, const wchar_t *s2, size_t n));
-# endif
-_GL_CXXALIAS_SYS (wcsxfrm, size_t, (wchar_t *s1, const wchar_t *s2, size_t n));
-_GL_CXXALIASWARN (wcsxfrm);
-#elif defined GNULIB_POSIXCHECK
-# undef wcsxfrm
-# if HAVE_RAW_DECL_WCSXFRM
-_GL_WARN_ON_USE (wcsxfrm, "wcsxfrm is unportable - "
-                 "use gnulib module wcsxfrm for portability");
-# endif
-#endif
-
-
-/* Duplicate S, returning an identical malloc'd string.  */
-#if @GNULIB_WCSDUP@
-# if !@HAVE_WCSDUP@
-_GL_FUNCDECL_SYS (wcsdup, wchar_t *, (const wchar_t *s));
-# endif
-_GL_CXXALIAS_SYS (wcsdup, wchar_t *, (const wchar_t *s));
-_GL_CXXALIASWARN (wcsdup);
-#elif defined GNULIB_POSIXCHECK
-# undef wcsdup
-# if HAVE_RAW_DECL_WCSDUP
-_GL_WARN_ON_USE (wcsdup, "wcsdup is unportable - "
-                 "use gnulib module wcsdup for portability");
-# endif
-#endif
-
-
-/* Find the first occurrence of WC in WCS.  */
-#if @GNULIB_WCSCHR@
-# if !@HAVE_WCSCHR@
-_GL_FUNCDECL_SYS (wcschr, wchar_t *, (const wchar_t *wcs, wchar_t wc)
-                                     _GL_ATTRIBUTE_PURE);
-# endif
-  /* On some systems, this function is defined as an overloaded function:
-       extern "C++" {
-         const wchar_t * std::wcschr (const wchar_t *, wchar_t);
-         wchar_t * std::wcschr (wchar_t *, wchar_t);
-       }  */
-_GL_CXXALIAS_SYS_CAST2 (wcschr,
-                        wchar_t *, (const wchar_t *, wchar_t),
-                        const wchar_t *, (const wchar_t *, wchar_t));
-# if ((__GLIBC__ == 2 && __GLIBC_MINOR__ >= 10) && !defined __UCLIBC__) \
-     && (__GNUC__ > 4 || (__GNUC__ == 4 && __GNUC_MINOR__ >= 4))
-_GL_CXXALIASWARN1 (wcschr, wchar_t *, (wchar_t *wcs, wchar_t wc));
-_GL_CXXALIASWARN1 (wcschr, const wchar_t *, (const wchar_t *wcs, wchar_t wc));
-# else
-_GL_CXXALIASWARN (wcschr);
-# endif
-#elif defined GNULIB_POSIXCHECK
-# undef wcschr
-# if HAVE_RAW_DECL_WCSCHR
-_GL_WARN_ON_USE (wcschr, "wcschr is unportable - "
-                 "use gnulib module wcschr for portability");
-# endif
-#endif
-
-
-/* Find the last occurrence of WC in WCS.  */
-#if @GNULIB_WCSRCHR@
-# if !@HAVE_WCSRCHR@
-_GL_FUNCDECL_SYS (wcsrchr, wchar_t *, (const wchar_t *wcs, wchar_t wc)
-                                      _GL_ATTRIBUTE_PURE);
-# endif
-  /* On some systems, this function is defined as an overloaded function:
-       extern "C++" {
-         const wchar_t * std::wcsrchr (const wchar_t *, wchar_t);
-         wchar_t * std::wcsrchr (wchar_t *, wchar_t);
-       }  */
-_GL_CXXALIAS_SYS_CAST2 (wcsrchr,
-                        wchar_t *, (const wchar_t *, wchar_t),
-                        const wchar_t *, (const wchar_t *, wchar_t));
-# if ((__GLIBC__ == 2 && __GLIBC_MINOR__ >= 10) && !defined __UCLIBC__) \
-     && (__GNUC__ > 4 || (__GNUC__ == 4 && __GNUC_MINOR__ >= 4))
-_GL_CXXALIASWARN1 (wcsrchr, wchar_t *, (wchar_t *wcs, wchar_t wc));
-_GL_CXXALIASWARN1 (wcsrchr, const wchar_t *, (const wchar_t *wcs, wchar_t wc));
-# else
-_GL_CXXALIASWARN (wcsrchr);
-# endif
-#elif defined GNULIB_POSIXCHECK
-# undef wcsrchr
-# if HAVE_RAW_DECL_WCSRCHR
-_GL_WARN_ON_USE (wcsrchr, "wcsrchr is unportable - "
-                 "use gnulib module wcsrchr for portability");
-# endif
-#endif
-
-
-/* Return the length of the initial segmet of WCS which consists entirely
-   of wide characters not in REJECT.  */
-#if @GNULIB_WCSCSPN@
-# if !@HAVE_WCSCSPN@
-_GL_FUNCDECL_SYS (wcscspn, size_t, (const wchar_t *wcs, const wchar_t *reject)
-                                   _GL_ATTRIBUTE_PURE);
-# endif
-_GL_CXXALIAS_SYS (wcscspn, size_t, (const wchar_t *wcs, const wchar_t *reject));
-_GL_CXXALIASWARN (wcscspn);
-#elif defined GNULIB_POSIXCHECK
-# undef wcscspn
-# if HAVE_RAW_DECL_WCSCSPN
-_GL_WARN_ON_USE (wcscspn, "wcscspn is unportable - "
-                 "use gnulib module wcscspn for portability");
-# endif
-#endif
-
-
-/* Return the length of the initial segmet of WCS which consists entirely
-   of wide characters in ACCEPT.  */
-#if @GNULIB_WCSSPN@
-# if !@HAVE_WCSSPN@
-_GL_FUNCDECL_SYS (wcsspn, size_t, (const wchar_t *wcs, const wchar_t *accept)
-                                  _GL_ATTRIBUTE_PURE);
-# endif
-_GL_CXXALIAS_SYS (wcsspn, size_t, (const wchar_t *wcs, const wchar_t *accept));
-_GL_CXXALIASWARN (wcsspn);
-#elif defined GNULIB_POSIXCHECK
-# undef wcsspn
-# if HAVE_RAW_DECL_WCSSPN
-_GL_WARN_ON_USE (wcsspn, "wcsspn is unportable - "
-                 "use gnulib module wcsspn for portability");
-# endif
-#endif
-
-
-/* Find the first occurrence in WCS of any character in ACCEPT.  */
-#if @GNULIB_WCSPBRK@
-# if !@HAVE_WCSPBRK@
-_GL_FUNCDECL_SYS (wcspbrk, wchar_t *,
-                  (const wchar_t *wcs, const wchar_t *accept)
-                  _GL_ATTRIBUTE_PURE);
-# endif
-  /* On some systems, this function is defined as an overloaded function:
-       extern "C++" {
-         const wchar_t * std::wcspbrk (const wchar_t *, const wchar_t *);
-         wchar_t * std::wcspbrk (wchar_t *, const wchar_t *);
-       }  */
-_GL_CXXALIAS_SYS_CAST2 (wcspbrk,
-                        wchar_t *, (const wchar_t *, const wchar_t *),
-                        const wchar_t *, (const wchar_t *, const wchar_t *));
-# if ((__GLIBC__ == 2 && __GLIBC_MINOR__ >= 10) && !defined __UCLIBC__) \
-     && (__GNUC__ > 4 || (__GNUC__ == 4 && __GNUC_MINOR__ >= 4))
-_GL_CXXALIASWARN1 (wcspbrk, wchar_t *,
-                   (wchar_t *wcs, const wchar_t *accept));
-_GL_CXXALIASWARN1 (wcspbrk, const wchar_t *,
-                   (const wchar_t *wcs, const wchar_t *accept));
-# else
-_GL_CXXALIASWARN (wcspbrk);
-# endif
-#elif defined GNULIB_POSIXCHECK
-# undef wcspbrk
-# if HAVE_RAW_DECL_WCSPBRK
-_GL_WARN_ON_USE (wcspbrk, "wcspbrk is unportable - "
-                 "use gnulib module wcspbrk for portability");
-# endif
-#endif
-
-
-/* Find the first occurrence of NEEDLE in HAYSTACK.  */
-#if @GNULIB_WCSSTR@
-# if !@HAVE_WCSSTR@
-_GL_FUNCDECL_SYS (wcsstr, wchar_t *,
-                  (const wchar_t *haystack, const wchar_t *needle)
-                  _GL_ATTRIBUTE_PURE);
-# endif
-  /* On some systems, this function is defined as an overloaded function:
-       extern "C++" {
-         const wchar_t * std::wcsstr (const wchar_t *, const wchar_t *);
-         wchar_t * std::wcsstr (wchar_t *, const wchar_t *);
-       }  */
-_GL_CXXALIAS_SYS_CAST2 (wcsstr,
-                        wchar_t *, (const wchar_t *, const wchar_t *),
-                        const wchar_t *, (const wchar_t *, const wchar_t *));
-# if ((__GLIBC__ == 2 && __GLIBC_MINOR__ >= 10) && !defined __UCLIBC__) \
-     && (__GNUC__ > 4 || (__GNUC__ == 4 && __GNUC_MINOR__ >= 4))
-_GL_CXXALIASWARN1 (wcsstr, wchar_t *,
-                   (wchar_t *haystack, const wchar_t *needle));
-_GL_CXXALIASWARN1 (wcsstr, const wchar_t *,
-                   (const wchar_t *haystack, const wchar_t *needle));
-# else
-_GL_CXXALIASWARN (wcsstr);
-# endif
-#elif defined GNULIB_POSIXCHECK
-# undef wcsstr
-# if HAVE_RAW_DECL_WCSSTR
-_GL_WARN_ON_USE (wcsstr, "wcsstr is unportable - "
-                 "use gnulib module wcsstr for portability");
-# endif
-#endif
-
-
-/* Divide WCS into tokens separated by characters in DELIM.  */
-#if @GNULIB_WCSTOK@
-# if !@HAVE_WCSTOK@
-_GL_FUNCDECL_SYS (wcstok, wchar_t *,
-                  (wchar_t *wcs, const wchar_t *delim, wchar_t **ptr));
-# endif
-_GL_CXXALIAS_SYS (wcstok, wchar_t *,
-                  (wchar_t *wcs, const wchar_t *delim, wchar_t **ptr));
-_GL_CXXALIASWARN (wcstok);
-#elif defined GNULIB_POSIXCHECK
-# undef wcstok
-# if HAVE_RAW_DECL_WCSTOK
-_GL_WARN_ON_USE (wcstok, "wcstok is unportable - "
-                 "use gnulib module wcstok for portability");
-# endif
-#endif
-
-
-/* Determine number of column positions required for first N wide
-   characters (or fewer if S ends before this) in S.  */
-#if @GNULIB_WCSWIDTH@
-# if @REPLACE_WCSWIDTH@
-#  if !(defined __cplusplus && defined GNULIB_NAMESPACE)
-#   undef wcswidth
-#   define wcswidth rpl_wcswidth
-#  endif
-_GL_FUNCDECL_RPL (wcswidth, int, (const wchar_t *s, size_t n)
-                                 _GL_ATTRIBUTE_PURE);
-_GL_CXXALIAS_RPL (wcswidth, int, (const wchar_t *s, size_t n));
-# else
-#  if !@HAVE_WCSWIDTH@
-_GL_FUNCDECL_SYS (wcswidth, int, (const wchar_t *s, size_t n)
-                                 _GL_ATTRIBUTE_PURE);
-#  endif
-_GL_CXXALIAS_SYS (wcswidth, int, (const wchar_t *s, size_t n));
-# endif
-_GL_CXXALIASWARN (wcswidth);
-#elif defined GNULIB_POSIXCHECK
-# undef wcswidth
-# if HAVE_RAW_DECL_WCSWIDTH
-_GL_WARN_ON_USE (wcswidth, "wcswidth is unportable - "
-                 "use gnulib module wcswidth for portability");
-# endif
-#endif
-
-
-#endif /* _@GUARD_PREFIX@_WCHAR_H */
-#endif /* _@GUARD_PREFIX@_WCHAR_H */
-#endif
diff -Nuar groff-1.22.3.old/src/libs/gnulib/lib/wctype-h.c groff-1.22.3/src/libs/gnulib/lib/wctype-h.c
--- groff-1.22.3.old/src/libs/gnulib/lib/wctype-h.c	2014-11-04 10:38:35.631518921 +0200
+++ groff-1.22.3/src/libs/gnulib/lib/wctype-h.c	1970-01-01 02:00:00.000000000 +0200
@@ -1,4 +0,0 @@
-/* Normally this would be wctype.c, but that name's already taken.  */
-#include <config.h>
-#define _GL_WCTYPE_INLINE _GL_EXTERN_INLINE
-#include "wctype.h"
diff -Nuar groff-1.22.3.old/src/libs/gnulib/lib/wctype.in.h groff-1.22.3/src/libs/gnulib/lib/wctype.in.h
--- groff-1.22.3.old/src/libs/gnulib/lib/wctype.in.h	2014-11-04 10:38:35.631518921 +0200
+++ groff-1.22.3/src/libs/gnulib/lib/wctype.in.h	1970-01-01 02:00:00.000000000 +0200
@@ -1,523 +0,0 @@
-/* A substitute for ISO C99 <wctype.h>, for platforms that lack it.
-
-   Copyright (C) 2006-2014 Free Software Foundation, Inc.
-
-   This program is free software; you can redistribute it and/or modify
-   it under the terms of the GNU General Public License as published by
-   the Free Software Foundation; either version 2, or (at your option)
-   any later version.
-
-   This program is distributed in the hope that it will be useful,
-   but WITHOUT ANY WARRANTY; without even the implied warranty of
-   MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
-   GNU General Public License for more details.
-
-   You should have received a copy of the GNU General Public License
-   along with this program; if not, see <http://www.gnu.org/licenses/>.  */
-
-/* Written by Bruno Haible and Paul Eggert.  */
-
-/*
- * ISO C 99 <wctype.h> for platforms that lack it.
- * <http://www.opengroup.org/susv3xbd/wctype.h.html>
- *
- * iswctype, towctrans, towlower, towupper, wctrans, wctype,
- * wctrans_t, and wctype_t are not yet implemented.
- */
-
-#ifndef _@GUARD_PREFIX@_WCTYPE_H
-
-#if __GNUC__ >= 3
-@PRAGMA_SYSTEM_HEADER@
-#endif
-@PRAGMA_COLUMNS@
-
-
-/*
- * XXX: As soon as groff uses gnulib in a saner way (i.e., only a single
- *      `config.h' file for the whole package) this file should be replaced
- *      with an unpatched version, not containing the next #include line.
- */
-#include "../config.h"
-
-
-#if @HAVE_WINT_T@
-/* Solaris 2.5 has a bug: <wchar.h> must be included before <wctype.h>.
-   Tru64 with Desktop Toolkit C has a bug: <stdio.h> must be included before
-   <wchar.h>.
-   BSD/OS 4.0.1 has a bug: <stddef.h>, <stdio.h> and <time.h> must be
-   included before <wchar.h>.  */
-# include <stddef.h>
-# include <stdio.h>
-# include <time.h>
-# include <wchar.h>
-#endif
-
-/* mingw has declarations of towupper and towlower in <ctype.h> as
-   well <wctype.h>.  Include <ctype.h> in advance to avoid rpl_ prefix
-   being added to the declarations.  */
-#ifdef __MINGW32__
-# include <ctype.h>
-#endif
-
-/* Include the original <wctype.h> if it exists.
-   BeOS 5 has the functions but no <wctype.h>.  */
-/* The include_next requires a split double-inclusion guard.  */
-#if @HAVE_WCTYPE_H@
-# @INCLUDE_NEXT@ @NEXT_WCTYPE_H@
-#endif
-
-#ifndef _@GUARD_PREFIX@_WCTYPE_H
-#define _@GUARD_PREFIX@_WCTYPE_H
-
-#ifndef _GL_INLINE_HEADER_BEGIN
- #error "Please include config.h first."
-#endif
-_GL_INLINE_HEADER_BEGIN
-#ifndef _GL_WCTYPE_INLINE
-# define _GL_WCTYPE_INLINE _GL_INLINE
-#endif
-
-/* The definitions of _GL_FUNCDECL_RPL etc. are copied here.  */
-
-/* The definition of _GL_WARN_ON_USE is copied here.  */
-
-/* Solaris 2.6 <wctype.h> includes <widec.h> which includes <euc.h> which
-   #defines a number of identifiers in the application namespace.  Revert
-   these #defines.  */
-#ifdef __sun
-# undef multibyte
-# undef eucw1
-# undef eucw2
-# undef eucw3
-# undef scrw1
-# undef scrw2
-# undef scrw3
-#endif
-
-/* Define wint_t and WEOF.  (Also done in wchar.in.h.)  */
-#if !@HAVE_WINT_T@ && !defined wint_t
-# define wint_t int
-# ifndef WEOF
-#  define WEOF -1
-# endif
-#else
-/* MSVC defines wint_t as 'unsigned short' in <crtdefs.h>.
-   This is too small: ISO C 99 section 7.24.1.(2) says that wint_t must be
-   "unchanged by default argument promotions".  Override it.  */
-# if defined _MSC_VER
-#  if !GNULIB_defined_wint_t
-#   include <crtdefs.h>
-typedef unsigned int rpl_wint_t;
-#   undef wint_t
-#   define wint_t rpl_wint_t
-#   define GNULIB_defined_wint_t 1
-#  endif
-# endif
-# ifndef WEOF
-#  define WEOF ((wint_t) -1)
-# endif
-#endif
-
-
-#if !GNULIB_defined_wctype_functions
-
-/* FreeBSD 4.4 to 4.11 has <wctype.h> but lacks the functions.
-   Linux libc5 has <wctype.h> and the functions but they are broken.
-   Assume all 11 functions (all isw* except iswblank) are implemented the
-   same way, or not at all.  */
-# if ! @HAVE_ISWCNTRL@ || @REPLACE_ISWCNTRL@
-
-/* IRIX 5.3 has macros but no functions, its isw* macros refer to an
-   undefined variable _ctmp_ and to <ctype.h> macros like _P, and they
-   refer to system functions like _iswctype that are not in the
-   standard C library.  Rather than try to get ancient buggy
-   implementations like this to work, just disable them.  */
-#  undef iswalnum
-#  undef iswalpha
-#  undef iswblank
-#  undef iswcntrl
-#  undef iswdigit
-#  undef iswgraph
-#  undef iswlower
-#  undef iswprint
-#  undef iswpunct
-#  undef iswspace
-#  undef iswupper
-#  undef iswxdigit
-#  undef towlower
-#  undef towupper
-
-/* Linux libc5 has <wctype.h> and the functions but they are broken.  */
-#  if @REPLACE_ISWCNTRL@
-#   if !(defined __cplusplus && defined GNULIB_NAMESPACE)
-#    define iswalnum rpl_iswalnum
-#    define iswalpha rpl_iswalpha
-#    define iswblank rpl_iswblank
-#    define iswcntrl rpl_iswcntrl
-#    define iswdigit rpl_iswdigit
-#    define iswgraph rpl_iswgraph
-#    define iswlower rpl_iswlower
-#    define iswprint rpl_iswprint
-#    define iswpunct rpl_iswpunct
-#    define iswspace rpl_iswspace
-#    define iswupper rpl_iswupper
-#    define iswxdigit rpl_iswxdigit
-#   endif
-#  endif
-#  if @REPLACE_TOWLOWER@
-#   if !(defined __cplusplus && defined GNULIB_NAMESPACE)
-#    define towlower rpl_towlower
-#    define towupper rpl_towupper
-#   endif
-#  endif
-
-_GL_WCTYPE_INLINE int
-#  if @REPLACE_ISWCNTRL@
-rpl_iswalnum
-#  else
-iswalnum
-#  endif
-         (wint_t wc)
-{
-  return ((wc >= '0' && wc <= '9')
-          || ((wc & ~0x20) >= 'A' && (wc & ~0x20) <= 'Z'));
-}
-
-_GL_WCTYPE_INLINE int
-#  if @REPLACE_ISWCNTRL@
-rpl_iswalpha
-#  else
-iswalpha
-#  endif
-         (wint_t wc)
-{
-  return (wc & ~0x20) >= 'A' && (wc & ~0x20) <= 'Z';
-}
-
-_GL_WCTYPE_INLINE int
-#  if @REPLACE_ISWCNTRL@
-rpl_iswblank
-#  else
-iswblank
-#  endif
-         (wint_t wc)
-{
-  return wc == ' ' || wc == '\t';
-}
-
-_GL_WCTYPE_INLINE int
-#  if @REPLACE_ISWCNTRL@
-rpl_iswcntrl
-#  else
-iswcntrl
-#  endif
-        (wint_t wc)
-{
-  return (wc & ~0x1f) == 0 || wc == 0x7f;
-}
-
-_GL_WCTYPE_INLINE int
-#  if @REPLACE_ISWCNTRL@
-rpl_iswdigit
-#  else
-iswdigit
-#  endif
-         (wint_t wc)
-{
-  return wc >= '0' && wc <= '9';
-}
-
-_GL_WCTYPE_INLINE int
-#  if @REPLACE_ISWCNTRL@
-rpl_iswgraph
-#  else
-iswgraph
-#  endif
-         (wint_t wc)
-{
-  return wc >= '!' && wc <= '~';
-}
-
-_GL_WCTYPE_INLINE int
-#  if @REPLACE_ISWCNTRL@
-rpl_iswlower
-#  else
-iswlower
-#  endif
-         (wint_t wc)
-{
-  return wc >= 'a' && wc <= 'z';
-}
-
-_GL_WCTYPE_INLINE int
-#  if @REPLACE_ISWCNTRL@
-rpl_iswprint
-#  else
-iswprint
-#  endif
-         (wint_t wc)
-{
-  return wc >= ' ' && wc <= '~';
-}
-
-_GL_WCTYPE_INLINE int
-#  if @REPLACE_ISWCNTRL@
-rpl_iswpunct
-#  else
-iswpunct
-#  endif
-         (wint_t wc)
-{
-  return (wc >= '!' && wc <= '~'
-          && !((wc >= '0' && wc <= '9')
-               || ((wc & ~0x20) >= 'A' && (wc & ~0x20) <= 'Z')));
-}
-
-_GL_WCTYPE_INLINE int
-#  if @REPLACE_ISWCNTRL@
-rpl_iswspace
-#  else
-iswspace
-#  endif
-         (wint_t wc)
-{
-  return (wc == ' ' || wc == '\t'
-          || wc == '\n' || wc == '\v' || wc == '\f' || wc == '\r');
-}
-
-_GL_WCTYPE_INLINE int
-#  if @REPLACE_ISWCNTRL@
-rpl_iswupper
-#  else
-iswupper
-#  endif
-         (wint_t wc)
-{
-  return wc >= 'A' && wc <= 'Z';
-}
-
-_GL_WCTYPE_INLINE int
-#  if @REPLACE_ISWCNTRL@
-rpl_iswxdigit
-#  else
-iswxdigit
-#  endif
-          (wint_t wc)
-{
-  return ((wc >= '0' && wc <= '9')
-          || ((wc & ~0x20) >= 'A' && (wc & ~0x20) <= 'F'));
-}
-
-_GL_WCTYPE_INLINE wint_t
-#  if @REPLACE_TOWLOWER@
-rpl_towlower
-#  else
-towlower
-#  endif
-         (wint_t wc)
-{
-  return (wc >= 'A' && wc <= 'Z' ? wc - 'A' + 'a' : wc);
-}
-
-_GL_WCTYPE_INLINE wint_t
-#  if @REPLACE_TOWLOWER@
-rpl_towupper
-#  else
-towupper
-#  endif
-         (wint_t wc)
-{
-  return (wc >= 'a' && wc <= 'z' ? wc - 'a' + 'A' : wc);
-}
-
-# elif @GNULIB_ISWBLANK@ && (! @HAVE_ISWBLANK@ || @REPLACE_ISWBLANK@)
-/* Only the iswblank function is missing.  */
-
-#  if @REPLACE_ISWBLANK@
-#   if !(defined __cplusplus && defined GNULIB_NAMESPACE)
-#    define iswblank rpl_iswblank
-#   endif
-_GL_FUNCDECL_RPL (iswblank, int, (wint_t wc));
-#  else
-_GL_FUNCDECL_SYS (iswblank, int, (wint_t wc));
-#  endif
-
-# endif
-
-# if defined __MINGW32__
-
-/* On native Windows, wchar_t is uint16_t, and wint_t is uint32_t.
-   The functions towlower and towupper are implemented in the MSVCRT library
-   to take a wchar_t argument and return a wchar_t result.  mingw declares
-   these functions to take a wint_t argument and return a wint_t result.
-   This means that:
-   1. When the user passes an argument outside the range 0x0000..0xFFFF, the
-      function will look only at the lower 16 bits.  This is allowed according
-      to POSIX.
-   2. The return value is returned in the lower 16 bits of the result register.
-      The upper 16 bits are random: whatever happened to be in that part of the
-      result register.  We need to fix this by adding a zero-extend from
-      wchar_t to wint_t after the call.  */
-
-_GL_WCTYPE_INLINE wint_t
-rpl_towlower (wint_t wc)
-{
-  return (wint_t) (wchar_t) towlower (wc);
-}
-#  if !(defined __cplusplus && defined GNULIB_NAMESPACE)
-#   define towlower rpl_towlower
-#  endif
-
-_GL_WCTYPE_INLINE wint_t
-rpl_towupper (wint_t wc)
-{
-  return (wint_t) (wchar_t) towupper (wc);
-}
-#  if !(defined __cplusplus && defined GNULIB_NAMESPACE)
-#   define towupper rpl_towupper
-#  endif
-
-# endif /* __MINGW32__ */
-
-# define GNULIB_defined_wctype_functions 1
-#endif
-
-#if @REPLACE_ISWCNTRL@
-_GL_CXXALIAS_RPL (iswalnum, int, (wint_t wc));
-_GL_CXXALIAS_RPL (iswalpha, int, (wint_t wc));
-_GL_CXXALIAS_RPL (iswcntrl, int, (wint_t wc));
-_GL_CXXALIAS_RPL (iswdigit, int, (wint_t wc));
-_GL_CXXALIAS_RPL (iswgraph, int, (wint_t wc));
-_GL_CXXALIAS_RPL (iswlower, int, (wint_t wc));
-_GL_CXXALIAS_RPL (iswprint, int, (wint_t wc));
-_GL_CXXALIAS_RPL (iswpunct, int, (wint_t wc));
-_GL_CXXALIAS_RPL (iswspace, int, (wint_t wc));
-_GL_CXXALIAS_RPL (iswupper, int, (wint_t wc));
-_GL_CXXALIAS_RPL (iswxdigit, int, (wint_t wc));
-#else
-_GL_CXXALIAS_SYS (iswalnum, int, (wint_t wc));
-_GL_CXXALIAS_SYS (iswalpha, int, (wint_t wc));
-_GL_CXXALIAS_SYS (iswcntrl, int, (wint_t wc));
-_GL_CXXALIAS_SYS (iswdigit, int, (wint_t wc));
-_GL_CXXALIAS_SYS (iswgraph, int, (wint_t wc));
-_GL_CXXALIAS_SYS (iswlower, int, (wint_t wc));
-_GL_CXXALIAS_SYS (iswprint, int, (wint_t wc));
-_GL_CXXALIAS_SYS (iswpunct, int, (wint_t wc));
-_GL_CXXALIAS_SYS (iswspace, int, (wint_t wc));
-_GL_CXXALIAS_SYS (iswupper, int, (wint_t wc));
-_GL_CXXALIAS_SYS (iswxdigit, int, (wint_t wc));
-#endif
-_GL_CXXALIASWARN (iswalnum);
-_GL_CXXALIASWARN (iswalpha);
-_GL_CXXALIASWARN (iswcntrl);
-_GL_CXXALIASWARN (iswdigit);
-_GL_CXXALIASWARN (iswgraph);
-_GL_CXXALIASWARN (iswlower);
-_GL_CXXALIASWARN (iswprint);
-_GL_CXXALIASWARN (iswpunct);
-_GL_CXXALIASWARN (iswspace);
-_GL_CXXALIASWARN (iswupper);
-_GL_CXXALIASWARN (iswxdigit);
-
-#if @GNULIB_ISWBLANK@
-# if @REPLACE_ISWCNTRL@ || @REPLACE_ISWBLANK@
-_GL_CXXALIAS_RPL (iswblank, int, (wint_t wc));
-# else
-_GL_CXXALIAS_SYS (iswblank, int, (wint_t wc));
-# endif
-_GL_CXXALIASWARN (iswblank);
-#endif
-
-#if !@HAVE_WCTYPE_T@
-# if !GNULIB_defined_wctype_t
-typedef void * wctype_t;
-#  define GNULIB_defined_wctype_t 1
-# endif
-#endif
-
-/* Get a descriptor for a wide character property.  */
-#if @GNULIB_WCTYPE@
-# if !@HAVE_WCTYPE_T@
-_GL_FUNCDECL_SYS (wctype, wctype_t, (const char *name));
-# endif
-_GL_CXXALIAS_SYS (wctype, wctype_t, (const char *name));
-_GL_CXXALIASWARN (wctype);
-#elif defined GNULIB_POSIXCHECK
-# undef wctype
-# if HAVE_RAW_DECL_WCTYPE
-_GL_WARN_ON_USE (wctype, "wctype is unportable - "
-                 "use gnulib module wctype for portability");
-# endif
-#endif
-
-/* Test whether a wide character has a given property.
-   The argument WC must be either a wchar_t value or WEOF.
-   The argument DESC must have been returned by the wctype() function.  */
-#if @GNULIB_ISWCTYPE@
-# if !@HAVE_WCTYPE_T@
-_GL_FUNCDECL_SYS (iswctype, int, (wint_t wc, wctype_t desc));
-# endif
-_GL_CXXALIAS_SYS (iswctype, int, (wint_t wc, wctype_t desc));
-_GL_CXXALIASWARN (iswctype);
-#elif defined GNULIB_POSIXCHECK
-# undef iswctype
-# if HAVE_RAW_DECL_ISWCTYPE
-_GL_WARN_ON_USE (iswctype, "iswctype is unportable - "
-                 "use gnulib module iswctype for portability");
-# endif
-#endif
-
-#if @REPLACE_TOWLOWER@ || defined __MINGW32__
-_GL_CXXALIAS_RPL (towlower, wint_t, (wint_t wc));
-_GL_CXXALIAS_RPL (towupper, wint_t, (wint_t wc));
-#else
-_GL_CXXALIAS_SYS (towlower, wint_t, (wint_t wc));
-_GL_CXXALIAS_SYS (towupper, wint_t, (wint_t wc));
-#endif
-_GL_CXXALIASWARN (towlower);
-_GL_CXXALIASWARN (towupper);
-
-#if !@HAVE_WCTRANS_T@
-# if !GNULIB_defined_wctrans_t
-typedef void * wctrans_t;
-#  define GNULIB_defined_wctrans_t 1
-# endif
-#endif
-
-/* Get a descriptor for a wide character case conversion.  */
-#if @GNULIB_WCTRANS@
-# if !@HAVE_WCTRANS_T@
-_GL_FUNCDECL_SYS (wctrans, wctrans_t, (const char *name));
-# endif
-_GL_CXXALIAS_SYS (wctrans, wctrans_t, (const char *name));
-_GL_CXXALIASWARN (wctrans);
-#elif defined GNULIB_POSIXCHECK
-# undef wctrans
-# if HAVE_RAW_DECL_WCTRANS
-_GL_WARN_ON_USE (wctrans, "wctrans is unportable - "
-                 "use gnulib module wctrans for portability");
-# endif
-#endif
-
-/* Perform a given case conversion on a wide character.
-   The argument WC must be either a wchar_t value or WEOF.
-   The argument DESC must have been returned by the wctrans() function.  */
-#if @GNULIB_TOWCTRANS@
-# if !@HAVE_WCTRANS_T@
-_GL_FUNCDECL_SYS (towctrans, wint_t, (wint_t wc, wctrans_t desc));
-# endif
-_GL_CXXALIAS_SYS (towctrans, wint_t, (wint_t wc, wctrans_t desc));
-_GL_CXXALIASWARN (towctrans);
-#elif defined GNULIB_POSIXCHECK
-# undef towctrans
-# if HAVE_RAW_DECL_TOWCTRANS
-_GL_WARN_ON_USE (towctrans, "towctrans is unportable - "
-                 "use gnulib module towctrans for portability");
-# endif
-#endif
-
-_GL_INLINE_HEADER_END
-
-#endif /* _@GUARD_PREFIX@_WCTYPE_H */
-#endif /* _@GUARD_PREFIX@_WCTYPE_H */
diff -Nuar groff-1.22.3.old/src/libs/gnulib/lib/wcwidth.c groff-1.22.3/src/libs/gnulib/lib/wcwidth.c
--- groff-1.22.3.old/src/libs/gnulib/lib/wcwidth.c	2014-11-04 10:38:35.631518921 +0200
+++ groff-1.22.3/src/libs/gnulib/lib/wcwidth.c	1970-01-01 02:00:00.000000000 +0200
@@ -1,50 +0,0 @@
-/* Determine the number of screen columns needed for a character.
-   Copyright (C) 2006-2007, 2010-2014 Free Software Foundation, Inc.
-
-   This program is free software: you can redistribute it and/or modify
-   it under the terms of the GNU General Public License as published by
-   the Free Software Foundation; either version 3 of the License, or
-   (at your option) any later version.
-
-   This program is distributed in the hope that it will be useful,
-   but WITHOUT ANY WARRANTY; without even the implied warranty of
-   MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
-   GNU General Public License for more details.
-
-   You should have received a copy of the GNU General Public License
-   along with this program.  If not, see <http://www.gnu.org/licenses/>.  */
-
-#include <config.h>
-
-/* Specification.  */
-#include <wchar.h>
-
-/* Get iswprint.  */
-#include <wctype.h>
-
-#include "localcharset.h"
-#include "streq.h"
-#include "uniwidth.h"
-
-int
-wcwidth (wchar_t wc)
-#undef wcwidth
-{
-  /* In UTF-8 locales, use a Unicode aware width function.  */
-  const char *encoding = locale_charset ();
-  if (STREQ_OPT (encoding, "UTF-8", 'U', 'T', 'F', '-', '8', 0, 0, 0 ,0))
-    {
-      /* We assume that in a UTF-8 locale, a wide character is the same as a
-         Unicode character.  */
-      return uc_width (wc, encoding);
-    }
-  else
-    {
-      /* Otherwise, fall back to the system's wcwidth function.  */
-#if HAVE_WCWIDTH
-      return wcwidth (wc);
-#else
-      return wc == 0 ? 0 : iswprint (wc) ? 1 : -1;
-#endif
-    }
-}
diff -Nuar groff-1.22.3.old/src/libs/gnulib/m4/00gnulib.m4 groff-1.22.3/src/libs/gnulib/m4/00gnulib.m4
--- groff-1.22.3.old/src/libs/gnulib/m4/00gnulib.m4	2014-11-04 10:38:35.640518809 +0200
+++ groff-1.22.3/src/libs/gnulib/m4/00gnulib.m4	1970-01-01 02:00:00.000000000 +0200
@@ -1,46 +0,0 @@
-# 00gnulib.m4 serial 3
-dnl Copyright (C) 2009-2014 Free Software Foundation, Inc.
-dnl This file is free software; the Free Software Foundation
-dnl gives unlimited permission to copy and/or distribute it,
-dnl with or without modifications, as long as this notice is preserved.
-
-dnl This file must be named something that sorts before all other
-dnl gnulib-provided .m4 files.  It is needed until such time as we can
-dnl assume Autoconf 2.64, with its improved AC_DEFUN_ONCE and
-dnl m4_divert semantics.
-
-# Until autoconf 2.63, handling of the diversion stack required m4_init
-# to be called first; but this does not happen with aclocal.  Wrapping
-# the entire execution in another layer of the diversion stack fixes this.
-# Worse, prior to autoconf 2.62, m4_wrap depended on the underlying m4
-# for whether it was FIFO or LIFO; in order to properly balance with
-# m4_init, we need to undo our push just before anything wrapped within
-# the m4_init body.  The way to ensure this is to wrap both sides of
-# m4_init with a one-shot macro that does the pop at the right time.
-m4_ifndef([_m4_divert_diversion],
-[m4_divert_push([KILL])
-m4_define([gl_divert_fixup], [m4_divert_pop()m4_define([$0])])
-m4_define([m4_init],
-  [gl_divert_fixup()]m4_defn([m4_init])[gl_divert_fixup()])])
-
-
-# AC_DEFUN_ONCE([NAME], VALUE)
-# ----------------------------
-# Define NAME to expand to VALUE on the first use (whether by direct
-# expansion, or by AC_REQUIRE), and to nothing on all subsequent uses.
-# Avoid bugs in AC_REQUIRE in Autoconf 2.63 and earlier.  This
-# definition is slower than the version in Autoconf 2.64, because it
-# can only use interfaces that existed since 2.59; but it achieves the
-# same effect.  Quoting is necessary to avoid confusing Automake.
-m4_version_prereq([2.63.263], [],
-[m4_define([AC][_DEFUN_ONCE],
-  [AC][_DEFUN([$1],
-    [AC_REQUIRE([_gl_DEFUN_ONCE([$1])],
-      [m4_indir([_gl_DEFUN_ONCE([$1])])])])]dnl
-[AC][_DEFUN([_gl_DEFUN_ONCE([$1])], [$2])])])
-
-# gl_00GNULIB
-# -----------
-# Witness macro that this file has been included.  Needed to force
-# Automake to include this file prior to all other gnulib .m4 files.
-AC_DEFUN([gl_00GNULIB])
diff -Nuar groff-1.22.3.old/src/libs/gnulib/m4/codeset.m4 groff-1.22.3/src/libs/gnulib/m4/codeset.m4
--- groff-1.22.3.old/src/libs/gnulib/m4/codeset.m4	2014-11-04 10:38:35.640518809 +0200
+++ groff-1.22.3/src/libs/gnulib/m4/codeset.m4	1970-01-01 02:00:00.000000000 +0200
@@ -1,23 +0,0 @@
-# codeset.m4 serial 5 (gettext-0.18.2)
-dnl Copyright (C) 2000-2002, 2006, 2008-2014 Free Software Foundation, Inc.
-dnl This file is free software; the Free Software Foundation
-dnl gives unlimited permission to copy and/or distribute it,
-dnl with or without modifications, as long as this notice is preserved.
-
-dnl From Bruno Haible.
-
-AC_DEFUN([AM_LANGINFO_CODESET],
-[
-  AC_CACHE_CHECK([for nl_langinfo and CODESET], [am_cv_langinfo_codeset],
-    [AC_LINK_IFELSE(
-       [AC_LANG_PROGRAM(
-          [[#include <langinfo.h>]],
-          [[char* cs = nl_langinfo(CODESET); return !cs;]])],
-       [am_cv_langinfo_codeset=yes],
-       [am_cv_langinfo_codeset=no])
-    ])
-  if test $am_cv_langinfo_codeset = yes; then
-    AC_DEFINE([HAVE_LANGINFO_CODESET], [1],
-      [Define if you have <langinfo.h> and nl_langinfo(CODESET).])
-  fi
-])
diff -Nuar groff-1.22.3.old/src/libs/gnulib/m4/configmake.m4 groff-1.22.3/src/libs/gnulib/m4/configmake.m4
--- groff-1.22.3.old/src/libs/gnulib/m4/configmake.m4	2014-11-04 10:38:35.640518809 +0200
+++ groff-1.22.3/src/libs/gnulib/m4/configmake.m4	1970-01-01 02:00:00.000000000 +0200
@@ -1,55 +0,0 @@
-# configmake.m4 serial 2
-dnl Copyright (C) 2010-2014 Free Software Foundation, Inc.
-dnl This file is free software; the Free Software Foundation
-dnl gives unlimited permission to copy and/or distribute it,
-dnl with or without modifications, as long as this notice is preserved.
-
-# gl_CONFIGMAKE_PREP
-# ------------------
-# Guarantee all of the standard directory variables, even when used with
-# autoconf 2.59 (datarootdir wasn't supported until 2.59c, and runstatedir
-# in 2.70) or automake 1.9.6 (pkglibexecdir wasn't supported until 1.10b,
-# and runstatedir in 1.14.1).
-AC_DEFUN([gl_CONFIGMAKE_PREP],
-[
-  dnl Technically, datadir should default to datarootdir.  But if
-  dnl autoconf is too old to provide datarootdir, then reversing the
-  dnl definition is a reasonable compromise.  Only AC_SUBST a variable
-  dnl if it was not already defined earlier by autoconf.
-  if test "x$datarootdir" = x; then
-    AC_SUBST([datarootdir], ['${datadir}'])
-  fi
-  dnl Copy the approach used in autoconf 2.60.
-  if test "x$docdir" = x; then
-    AC_SUBST([docdir], [m4_ifset([AC_PACKAGE_TARNAME],
-      ['${datarootdir}/doc/${PACKAGE_TARNAME}'],
-      ['${datarootdir}/doc/${PACKAGE}'])])
-  fi
-  dnl The remaining variables missing from autoconf 2.59 are easier.
-  if test "x$htmldir" = x; then
-    AC_SUBST([htmldir], ['${docdir}'])
-  fi
-  if test "x$dvidir" = x; then
-    AC_SUBST([dvidir], ['${docdir}'])
-  fi
-  if test "x$pdfdir" = x; then
-    AC_SUBST([pdfdir], ['${docdir}'])
-  fi
-  if test "x$psdir" = x; then
-    AC_SUBST([psdir], ['${docdir}'])
-  fi
-  if test "x$lispdir" = x; then
-    AC_SUBST([lispdir], ['${datarootdir}/emacs/site-lisp'])
-  fi
-  if test "x$localedir" = x; then
-    AC_SUBST([localedir], ['${datarootdir}/locale'])
-  fi
-  dnl Added in autoconf 2.70
-  if test "x$runstatedir" = x; then
-    AC_SUBST([runstatedir], ['${localstatedir}/run'])
-  fi
-
-  dnl Automake 1.9.6 only lacks pkglibexecdir; and since 1.11 merely
-  dnl provides it without AC_SUBST, this blind use of AC_SUBST is safe.
-  AC_SUBST([pkglibexecdir], ['${libexecdir}/${PACKAGE}'])
-])
diff -Nuar groff-1.22.3.old/src/libs/gnulib/m4/extensions.m4 groff-1.22.3/src/libs/gnulib/m4/extensions.m4
--- groff-1.22.3.old/src/libs/gnulib/m4/extensions.m4	2014-11-04 10:38:35.640518809 +0200
+++ groff-1.22.3/src/libs/gnulib/m4/extensions.m4	1970-01-01 02:00:00.000000000 +0200
@@ -1,138 +0,0 @@
-# serial 13  -*- Autoconf -*-
-# Enable extensions on systems that normally disable them.
-
-# Copyright (C) 2003, 2006-2014 Free Software Foundation, Inc.
-# This file is free software; the Free Software Foundation
-# gives unlimited permission to copy and/or distribute it,
-# with or without modifications, as long as this notice is preserved.
-
-# This definition of AC_USE_SYSTEM_EXTENSIONS is stolen from git
-# Autoconf.  Perhaps we can remove this once we can assume Autoconf
-# 2.70 or later everywhere, but since Autoconf mutates rapidly
-# enough in this area it's likely we'll need to redefine
-# AC_USE_SYSTEM_EXTENSIONS for quite some time.
-
-# If autoconf reports a warning
-#     warning: AC_COMPILE_IFELSE was called before AC_USE_SYSTEM_EXTENSIONS
-# or  warning: AC_RUN_IFELSE was called before AC_USE_SYSTEM_EXTENSIONS
-# the fix is
-#   1) to ensure that AC_USE_SYSTEM_EXTENSIONS is never directly invoked
-#      but always AC_REQUIREd,
-#   2) to ensure that for each occurrence of
-#        AC_REQUIRE([AC_USE_SYSTEM_EXTENSIONS])
-#      or
-#        AC_REQUIRE([gl_USE_SYSTEM_EXTENSIONS])
-#      the corresponding gnulib module description has 'extensions' among
-#      its dependencies. This will ensure that the gl_USE_SYSTEM_EXTENSIONS
-#      invocation occurs in gl_EARLY, not in gl_INIT.
-
-# AC_USE_SYSTEM_EXTENSIONS
-# ------------------------
-# Enable extensions on systems that normally disable them,
-# typically due to standards-conformance issues.
-#
-# Remember that #undef in AH_VERBATIM gets replaced with #define by
-# AC_DEFINE.  The goal here is to define all known feature-enabling
-# macros, then, if reports of conflicts are made, disable macros that
-# cause problems on some platforms (such as __EXTENSIONS__).
-AC_DEFUN_ONCE([AC_USE_SYSTEM_EXTENSIONS],
-[AC_BEFORE([$0], [AC_COMPILE_IFELSE])dnl
-AC_BEFORE([$0], [AC_RUN_IFELSE])dnl
-
-  AC_CHECK_HEADER([minix/config.h], [MINIX=yes], [MINIX=])
-  if test "$MINIX" = yes; then
-    AC_DEFINE([_POSIX_SOURCE], [1],
-      [Define to 1 if you need to in order for 'stat' and other
-       things to work.])
-    AC_DEFINE([_POSIX_1_SOURCE], [2],
-      [Define to 2 if the system does not provide POSIX.1 features
-       except with this defined.])
-    AC_DEFINE([_MINIX], [1],
-      [Define to 1 if on MINIX.])
-    AC_DEFINE([_NETBSD_SOURCE], [1],
-      [Define to 1 to make NetBSD features available.  MINIX 3 needs this.])
-  fi
-
-dnl Use a different key than __EXTENSIONS__, as that name broke existing
-dnl configure.ac when using autoheader 2.62.
-  AH_VERBATIM([USE_SYSTEM_EXTENSIONS],
-[/* Enable extensions on AIX 3, Interix.  */
-#ifndef _ALL_SOURCE
-# undef _ALL_SOURCE
-#endif
-/* Enable general extensions on OS X.  */
-#ifndef _DARWIN_C_SOURCE
-# undef _DARWIN_C_SOURCE
-#endif
-/* Enable GNU extensions on systems that have them.  */
-#ifndef _GNU_SOURCE
-# undef _GNU_SOURCE
-#endif
-/* Enable threading extensions on Solaris.  */
-#ifndef _POSIX_PTHREAD_SEMANTICS
-# undef _POSIX_PTHREAD_SEMANTICS
-#endif
-/* Enable extensions on HP NonStop.  */
-#ifndef _TANDEM_SOURCE
-# undef _TANDEM_SOURCE
-#endif
-/* Enable X/Open extensions if necessary.  HP-UX 11.11 defines
-   mbstate_t only if _XOPEN_SOURCE is defined to 500, regardless of
-   whether compiling with -Ae or -D_HPUX_SOURCE=1.  */
-#ifndef _XOPEN_SOURCE
-# undef _XOPEN_SOURCE
-#endif
-/* Enable general extensions on Solaris.  */
-#ifndef __EXTENSIONS__
-# undef __EXTENSIONS__
-#endif
-])
-  AC_CACHE_CHECK([whether it is safe to define __EXTENSIONS__],
-    [ac_cv_safe_to_define___extensions__],
-    [AC_COMPILE_IFELSE(
-       [AC_LANG_PROGRAM([[
-#         define __EXTENSIONS__ 1
-          ]AC_INCLUDES_DEFAULT])],
-       [ac_cv_safe_to_define___extensions__=yes],
-       [ac_cv_safe_to_define___extensions__=no])])
-  test $ac_cv_safe_to_define___extensions__ = yes &&
-    AC_DEFINE([__EXTENSIONS__])
-  AC_DEFINE([_ALL_SOURCE])
-  AC_DEFINE([_DARWIN_C_SOURCE])
-  AC_DEFINE([_GNU_SOURCE])
-  AC_DEFINE([_POSIX_PTHREAD_SEMANTICS])
-  AC_DEFINE([_TANDEM_SOURCE])
-  AC_CACHE_CHECK([whether _XOPEN_SOURCE should be defined],
-    [ac_cv_should_define__xopen_source],
-    [ac_cv_should_define__xopen_source=no
-     AC_COMPILE_IFELSE(
-       [AC_LANG_PROGRAM([[
-          #include <wchar.h>
-          mbstate_t x;]])],
-       [],
-       [AC_COMPILE_IFELSE(
-          [AC_LANG_PROGRAM([[
-             #define _XOPEN_SOURCE 500
-             #include <wchar.h>
-             mbstate_t x;]])],
-          [ac_cv_should_define__xopen_source=yes])])])
-  test $ac_cv_should_define__xopen_source = yes &&
-    AC_DEFINE([_XOPEN_SOURCE], [500])
-])# AC_USE_SYSTEM_EXTENSIONS
-
-# gl_USE_SYSTEM_EXTENSIONS
-# ------------------------
-# Enable extensions on systems that normally disable them,
-# typically due to standards-conformance issues.
-AC_DEFUN_ONCE([gl_USE_SYSTEM_EXTENSIONS],
-[
-  dnl Require this macro before AC_USE_SYSTEM_EXTENSIONS.
-  dnl gnulib does not need it. But if it gets required by third-party macros
-  dnl after AC_USE_SYSTEM_EXTENSIONS is required, autoconf 2.62..2.63 emit a
-  dnl warning: "AC_COMPILE_IFELSE was called before AC_USE_SYSTEM_EXTENSIONS".
-  dnl Note: We can do this only for one of the macros AC_AIX, AC_GNU_SOURCE,
-  dnl AC_MINIX. If people still use AC_AIX or AC_MINIX, they are out of luck.
-  AC_REQUIRE([AC_GNU_SOURCE])
-
-  AC_REQUIRE([AC_USE_SYSTEM_EXTENSIONS])
-])
diff -Nuar groff-1.22.3.old/src/libs/gnulib/m4/extern-inline.m4 groff-1.22.3/src/libs/gnulib/m4/extern-inline.m4
--- groff-1.22.3.old/src/libs/gnulib/m4/extern-inline.m4	2014-11-04 10:38:35.640518809 +0200
+++ groff-1.22.3/src/libs/gnulib/m4/extern-inline.m4	1970-01-01 02:00:00.000000000 +0200
@@ -1,62 +0,0 @@
-dnl 'extern inline' a la ISO C99.
-
-dnl Copyright 2012-2014 Free Software Foundation, Inc.
-dnl This file is free software; the Free Software Foundation
-dnl gives unlimited permission to copy and/or distribute it,
-dnl with or without modifications, as long as this notice is preserved.
-
-AC_DEFUN([gl_EXTERN_INLINE],
-[
-  AH_VERBATIM([extern_inline],
-[/* _GL_INLINE is a portable alternative to ISO C99 plain 'inline'.
-   _GL_EXTERN_INLINE is a portable alternative to 'extern inline'.
-   _GL_INLINE_HEADER_BEGIN contains useful stuff to put
-     in an include file, before uses of _GL_INLINE.
-     It suppresses GCC's bogus "no previous prototype for 'FOO'" diagnostic,
-     when FOO is an inline function in the header; see
-     <http://gcc.gnu.org/bugzilla/show_bug.cgi?id=54113>.
-   _GL_INLINE_HEADER_END contains useful stuff to put
-     in the same include file, after uses of _GL_INLINE.
-
-   Suppress the use of extern inline on Apple's platforms,
-   as Libc-825.25 (2012-09-19) is incompatible with it; see
-   <http://lists.gnu.org/archive/html/bug-gnulib/2012-12/msg00023.html>.
-   Perhaps Apple will fix this some day.  */
-#if ((__GNUC__ \
-      ? defined __GNUC_STDC_INLINE__ && __GNUC_STDC_INLINE__ \
-      : 199901L <= __STDC_VERSION__) \
-     && !defined __APPLE__)
-# define _GL_INLINE inline
-# define _GL_EXTERN_INLINE extern inline
-#elif 2 < __GNUC__ + (7 <= __GNUC_MINOR__) && !defined __APPLE__
-# if __GNUC_GNU_INLINE__
-   /* __gnu_inline__ suppresses a GCC 4.2 diagnostic.  */
-#  define _GL_INLINE extern inline __attribute__ ((__gnu_inline__))
-# else
-#  define _GL_INLINE extern inline
-# endif
-# define _GL_EXTERN_INLINE extern
-#else
-# define _GL_INLINE static _GL_UNUSED
-# define _GL_EXTERN_INLINE static _GL_UNUSED
-#endif
-
-#if 4 < __GNUC__ + (6 <= __GNUC_MINOR__)
-# if defined __GNUC_STDC_INLINE__ && __GNUC_STDC_INLINE__
-#  define _GL_INLINE_HEADER_CONST_PRAGMA
-# else
-#  define _GL_INLINE_HEADER_CONST_PRAGMA \
-     _Pragma ("GCC diagnostic ignored \"-Wsuggest-attribute=const\"")
-# endif
-# define _GL_INLINE_HEADER_BEGIN \
-    _Pragma ("GCC diagnostic push") \
-    _Pragma ("GCC diagnostic ignored \"-Wmissing-prototypes\"") \
-    _Pragma ("GCC diagnostic ignored \"-Wmissing-declarations\"") \
-    _GL_INLINE_HEADER_CONST_PRAGMA
-# define _GL_INLINE_HEADER_END \
-    _Pragma ("GCC diagnostic pop")
-#else
-# define _GL_INLINE_HEADER_BEGIN
-# define _GL_INLINE_HEADER_END
-#endif])
-])
diff -Nuar groff-1.22.3.old/src/libs/gnulib/m4/fcntl-o.m4 groff-1.22.3/src/libs/gnulib/m4/fcntl-o.m4
--- groff-1.22.3.old/src/libs/gnulib/m4/fcntl-o.m4	2014-11-04 10:38:35.640518809 +0200
+++ groff-1.22.3/src/libs/gnulib/m4/fcntl-o.m4	1970-01-01 02:00:00.000000000 +0200
@@ -1,134 +0,0 @@
-# fcntl-o.m4 serial 4
-dnl Copyright (C) 2006, 2009-2014 Free Software Foundation, Inc.
-dnl This file is free software; the Free Software Foundation
-dnl gives unlimited permission to copy and/or distribute it,
-dnl with or without modifications, as long as this notice is preserved.
-
-dnl Written by Paul Eggert.
-
-# Test whether the flags O_NOATIME and O_NOFOLLOW actually work.
-# Define HAVE_WORKING_O_NOATIME to 1 if O_NOATIME works, or to 0 otherwise.
-# Define HAVE_WORKING_O_NOFOLLOW to 1 if O_NOFOLLOW works, or to 0 otherwise.
-AC_DEFUN([gl_FCNTL_O_FLAGS],
-[
-  dnl Persuade glibc <fcntl.h> to define O_NOATIME and O_NOFOLLOW.
-  dnl AC_USE_SYSTEM_EXTENSIONS was introduced in autoconf 2.60 and obsoletes
-  dnl AC_GNU_SOURCE.
-  m4_ifdef([AC_USE_SYSTEM_EXTENSIONS],
-    [AC_REQUIRE([AC_USE_SYSTEM_EXTENSIONS])],
-    [AC_REQUIRE([AC_GNU_SOURCE])])
-
-  AC_CHECK_HEADERS_ONCE([unistd.h])
-  AC_CHECK_FUNCS_ONCE([symlink])
-  AC_CACHE_CHECK([for working fcntl.h], [gl_cv_header_working_fcntl_h],
-    [AC_RUN_IFELSE(
-       [AC_LANG_PROGRAM(
-          [[#include <sys/types.h>
-           #include <sys/stat.h>
-           #if HAVE_UNISTD_H
-           # include <unistd.h>
-           #else /* on Windows with MSVC */
-           # include <io.h>
-           # include <stdlib.h>
-           # defined sleep(n) _sleep ((n) * 1000)
-           #endif
-           #include <fcntl.h>
-           #ifndef O_NOATIME
-            #define O_NOATIME 0
-           #endif
-           #ifndef O_NOFOLLOW
-            #define O_NOFOLLOW 0
-           #endif
-           static int const constants[] =
-            {
-              O_CREAT, O_EXCL, O_NOCTTY, O_TRUNC, O_APPEND,
-              O_NONBLOCK, O_SYNC, O_ACCMODE, O_RDONLY, O_RDWR, O_WRONLY
-            };
-          ]],
-          [[
-            int result = !constants;
-            #if HAVE_SYMLINK
-            {
-              static char const sym[] = "conftest.sym";
-              if (symlink ("/dev/null", sym) != 0)
-                result |= 2;
-              else
-                {
-                  int fd = open (sym, O_WRONLY | O_NOFOLLOW | O_CREAT, 0);
-                  if (fd >= 0)
-                    {
-                      close (fd);
-                      result |= 4;
-                    }
-                }
-              if (unlink (sym) != 0 || symlink (".", sym) != 0)
-                result |= 2;
-              else
-                {
-                  int fd = open (sym, O_RDONLY | O_NOFOLLOW);
-                  if (fd >= 0)
-                    {
-                      close (fd);
-                      result |= 4;
-                    }
-                }
-              unlink (sym);
-            }
-            #endif
-            {
-              static char const file[] = "confdefs.h";
-              int fd = open (file, O_RDONLY | O_NOATIME);
-              if (fd < 0)
-                result |= 8;
-              else
-                {
-                  struct stat st0;
-                  if (fstat (fd, &st0) != 0)
-                    result |= 16;
-                  else
-                    {
-                      char c;
-                      sleep (1);
-                      if (read (fd, &c, 1) != 1)
-                        result |= 24;
-                      else
-                        {
-                          if (close (fd) != 0)
-                            result |= 32;
-                          else
-                            {
-                              struct stat st1;
-                              if (stat (file, &st1) != 0)
-                                result |= 40;
-                              else
-                                if (st0.st_atime != st1.st_atime)
-                                  result |= 64;
-                            }
-                        }
-                    }
-                }
-            }
-            return result;]])],
-       [gl_cv_header_working_fcntl_h=yes],
-       [case $? in #(
-        4) gl_cv_header_working_fcntl_h='no (bad O_NOFOLLOW)';; #(
-        64) gl_cv_header_working_fcntl_h='no (bad O_NOATIME)';; #(
-        68) gl_cv_header_working_fcntl_h='no (bad O_NOATIME, O_NOFOLLOW)';; #(
-         *) gl_cv_header_working_fcntl_h='no';;
-        esac],
-       [gl_cv_header_working_fcntl_h=cross-compiling])])
-
-  case $gl_cv_header_working_fcntl_h in #(
-  *O_NOATIME* | no | cross-compiling) ac_val=0;; #(
-  *) ac_val=1;;
-  esac
-  AC_DEFINE_UNQUOTED([HAVE_WORKING_O_NOATIME], [$ac_val],
-    [Define to 1 if O_NOATIME works.])
-
-  case $gl_cv_header_working_fcntl_h in #(
-  *O_NOFOLLOW* | no | cross-compiling) ac_val=0;; #(
-  *) ac_val=1;;
-  esac
-  AC_DEFINE_UNQUOTED([HAVE_WORKING_O_NOFOLLOW], [$ac_val],
-    [Define to 1 if O_NOFOLLOW works.])
-])
diff -Nuar groff-1.22.3.old/src/libs/gnulib/m4/glibc21.m4 groff-1.22.3/src/libs/gnulib/m4/glibc21.m4
--- groff-1.22.3.old/src/libs/gnulib/m4/glibc21.m4	2014-11-04 10:38:35.640518809 +0200
+++ groff-1.22.3/src/libs/gnulib/m4/glibc21.m4	1970-01-01 02:00:00.000000000 +0200
@@ -1,34 +0,0 @@
-# glibc21.m4 serial 5
-dnl Copyright (C) 2000-2002, 2004, 2008, 2010-2014 Free Software Foundation,
-dnl Inc.
-dnl This file is free software; the Free Software Foundation
-dnl gives unlimited permission to copy and/or distribute it,
-dnl with or without modifications, as long as this notice is preserved.
-
-# Test for the GNU C Library, version 2.1 or newer, or uClibc.
-# From Bruno Haible.
-
-AC_DEFUN([gl_GLIBC21],
-  [
-    AC_CACHE_CHECK([whether we are using the GNU C Library >= 2.1 or uClibc],
-      [ac_cv_gnu_library_2_1],
-      [AC_EGREP_CPP([Lucky],
-        [
-#include <features.h>
-#ifdef __GNU_LIBRARY__
- #if (__GLIBC__ == 2 && __GLIBC_MINOR__ >= 1) || (__GLIBC__ > 2)
-  Lucky GNU user
- #endif
-#endif
-#ifdef __UCLIBC__
- Lucky user
-#endif
-        ],
-        [ac_cv_gnu_library_2_1=yes],
-        [ac_cv_gnu_library_2_1=no])
-      ]
-    )
-    AC_SUBST([GLIBC21])
-    GLIBC21="$ac_cv_gnu_library_2_1"
-  ]
-)
diff -Nuar groff-1.22.3.old/src/libs/gnulib/m4/gnulib-cache.m4 groff-1.22.3/src/libs/gnulib/m4/gnulib-cache.m4
--- groff-1.22.3.old/src/libs/gnulib/m4/gnulib-cache.m4	2014-11-04 10:38:35.640518809 +0200
+++ groff-1.22.3/src/libs/gnulib/m4/gnulib-cache.m4	1970-01-01 02:00:00.000000000 +0200
@@ -1,47 +0,0 @@
-# Copyright (C) 2002-2014 Free Software Foundation, Inc.
-#
-# This file is free software; you can redistribute it and/or modify
-# it under the terms of the GNU General Public License as published by
-# the Free Software Foundation; either version 3 of the License, or
-# (at your option) any later version.
-#
-# This file is distributed in the hope that it will be useful,
-# but WITHOUT ANY WARRANTY; without even the implied warranty of
-# MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
-# GNU General Public License for more details.
-#
-# You should have received a copy of the GNU General Public License
-# along with this file.  If not, see <http://www.gnu.org/licenses/>.
-#
-# As a special exception to the GNU General Public License,
-# this file may be distributed as part of a program that
-# contains a configuration script generated by Autoconf, under
-# the same distribution terms as the rest of that program.
-#
-# Generated by gnulib-tool.
-#
-# This file represents the specification of how gnulib-tool is used.
-# It acts as a cache: It is written and read by gnulib-tool.
-# In projects that use version control, this file is meant to be put under
-# version control, like the configure.ac and various Makefile.am files.
-
-
-# Specification in the form of a command-line invocation:
-#   gnulib-tool --import --dir=src/libs/gnulib --lib=libgnu --source-base=lib --m4-base=m4 --doc-base=doc --tests-base=tests --aux-dir=build-aux --no-conditional-dependencies --no-libtool --macro-prefix=gl wcwidth
-
-# Specification in the form of a few gnulib-tool.m4 macro invocations:
-gl_LOCAL_DIR([])
-gl_MODULES([
-  wcwidth
-])
-gl_AVOID([])
-gl_SOURCE_BASE([lib])
-gl_M4_BASE([m4])
-gl_PO_BASE([])
-gl_DOC_BASE([doc])
-gl_TESTS_BASE([tests])
-gl_LIB([libgnu])
-gl_MAKEFILE_NAME([])
-gl_MACRO_PREFIX([gl])
-gl_PO_DOMAIN([])
-gl_WITNESS_C_MACRO([])
diff -Nuar groff-1.22.3.old/src/libs/gnulib/m4/gnulib-common.m4 groff-1.22.3/src/libs/gnulib/m4/gnulib-common.m4
--- groff-1.22.3.old/src/libs/gnulib/m4/gnulib-common.m4	2014-11-04 10:38:35.640518809 +0200
+++ groff-1.22.3/src/libs/gnulib/m4/gnulib-common.m4	1970-01-01 02:00:00.000000000 +0200
@@ -1,377 +0,0 @@
-# gnulib-common.m4 serial 33
-dnl Copyright (C) 2007-2014 Free Software Foundation, Inc.
-dnl This file is free software; the Free Software Foundation
-dnl gives unlimited permission to copy and/or distribute it,
-dnl with or without modifications, as long as this notice is preserved.
-
-# gl_COMMON
-# is expanded unconditionally through gnulib-tool magic.
-AC_DEFUN([gl_COMMON], [
-  dnl Use AC_REQUIRE here, so that the code is expanded once only.
-  AC_REQUIRE([gl_00GNULIB])
-  AC_REQUIRE([gl_COMMON_BODY])
-])
-AC_DEFUN([gl_COMMON_BODY], [
-  AH_VERBATIM([_Noreturn],
-[/* The _Noreturn keyword of C11.  */
-#if ! (defined _Noreturn \
-       || (defined __STDC_VERSION__ && 201112 <= __STDC_VERSION__))
-# if (3 <= __GNUC__ || (__GNUC__ == 2 && 8 <= __GNUC_MINOR__) \
-      || 0x5110 <= __SUNPRO_C)
-#  define _Noreturn __attribute__ ((__noreturn__))
-# elif defined _MSC_VER && 1200 <= _MSC_VER
-#  define _Noreturn __declspec (noreturn)
-# else
-#  define _Noreturn
-# endif
-#endif
-])
-  AH_VERBATIM([isoc99_inline],
-[/* Work around a bug in Apple GCC 4.0.1 build 5465: In C99 mode, it supports
-   the ISO C 99 semantics of 'extern inline' (unlike the GNU C semantics of
-   earlier versions), but does not display it by setting __GNUC_STDC_INLINE__.
-   __APPLE__ && __MACH__ test for Mac OS X.
-   __APPLE_CC__ tests for the Apple compiler and its version.
-   __STDC_VERSION__ tests for the C99 mode.  */
-#if defined __APPLE__ && defined __MACH__ && __APPLE_CC__ >= 5465 && !defined __cplusplus && __STDC_VERSION__ >= 199901L && !defined __GNUC_STDC_INLINE__
-# define __GNUC_STDC_INLINE__ 1
-#endif])
-  AH_VERBATIM([unused_parameter],
-[/* Define as a marker that can be attached to declarations that might not
-    be used.  This helps to reduce warnings, such as from
-    GCC -Wunused-parameter.  */
-#if __GNUC__ >= 3 || (__GNUC__ == 2 && __GNUC_MINOR__ >= 7)
-# define _GL_UNUSED __attribute__ ((__unused__))
-#else
-# define _GL_UNUSED
-#endif
-/* The name _UNUSED_PARAMETER_ is an earlier spelling, although the name
-   is a misnomer outside of parameter lists.  */
-#define _UNUSED_PARAMETER_ _GL_UNUSED
-
-/* The __pure__ attribute was added in gcc 2.96.  */
-#if __GNUC__ > 2 || (__GNUC__ == 2 && __GNUC_MINOR__ >= 96)
-# define _GL_ATTRIBUTE_PURE __attribute__ ((__pure__))
-#else
-# define _GL_ATTRIBUTE_PURE /* empty */
-#endif
-
-/* The __const__ attribute was added in gcc 2.95.  */
-#if __GNUC__ > 2 || (__GNUC__ == 2 && __GNUC_MINOR__ >= 95)
-# define _GL_ATTRIBUTE_CONST __attribute__ ((__const__))
-#else
-# define _GL_ATTRIBUTE_CONST /* empty */
-#endif
-])
-  dnl Preparation for running test programs:
-  dnl Tell glibc to write diagnostics from -D_FORTIFY_SOURCE=2 to stderr, not
-  dnl to /dev/tty, so they can be redirected to log files.  Such diagnostics
-  dnl arise e.g., in the macros gl_PRINTF_DIRECTIVE_N, gl_SNPRINTF_DIRECTIVE_N.
-  LIBC_FATAL_STDERR_=1
-  export LIBC_FATAL_STDERR_
-])
-
-# gl_MODULE_INDICATOR_CONDITION
-# expands to a C preprocessor expression that evaluates to 1 or 0, depending
-# whether a gnulib module that has been requested shall be considered present
-# or not.
-m4_define([gl_MODULE_INDICATOR_CONDITION], [1])
-
-# gl_MODULE_INDICATOR_SET_VARIABLE([modulename])
-# sets the shell variable that indicates the presence of the given module to
-# a C preprocessor expression that will evaluate to 1.
-AC_DEFUN([gl_MODULE_INDICATOR_SET_VARIABLE],
-[
-  gl_MODULE_INDICATOR_SET_VARIABLE_AUX(
-    [GNULIB_[]m4_translit([[$1]],
-                          [abcdefghijklmnopqrstuvwxyz./-],
-                          [ABCDEFGHIJKLMNOPQRSTUVWXYZ___])],
-    [gl_MODULE_INDICATOR_CONDITION])
-])
-
-# gl_MODULE_INDICATOR_SET_VARIABLE_AUX([variable])
-# modifies the shell variable to include the gl_MODULE_INDICATOR_CONDITION.
-# The shell variable's value is a C preprocessor expression that evaluates
-# to 0 or 1.
-AC_DEFUN([gl_MODULE_INDICATOR_SET_VARIABLE_AUX],
-[
-  m4_if(m4_defn([gl_MODULE_INDICATOR_CONDITION]), [1],
-    [
-     dnl Simplify the expression VALUE || 1 to 1.
-     $1=1
-    ],
-    [gl_MODULE_INDICATOR_SET_VARIABLE_AUX_OR([$1],
-                                             [gl_MODULE_INDICATOR_CONDITION])])
-])
-
-# gl_MODULE_INDICATOR_SET_VARIABLE_AUX_OR([variable], [condition])
-# modifies the shell variable to include the given condition.  The shell
-# variable's value is a C preprocessor expression that evaluates to 0 or 1.
-AC_DEFUN([gl_MODULE_INDICATOR_SET_VARIABLE_AUX_OR],
-[
-  dnl Simplify the expression 1 || CONDITION to 1.
-  if test "$[]$1" != 1; then
-    dnl Simplify the expression 0 || CONDITION to CONDITION.
-    if test "$[]$1" = 0; then
-      $1=$2
-    else
-      $1="($[]$1 || $2)"
-    fi
-  fi
-])
-
-# gl_MODULE_INDICATOR([modulename])
-# defines a C macro indicating the presence of the given module
-# in a location where it can be used.
-#                                             |  Value  |   Value   |
-#                                             | in lib/ | in tests/ |
-# --------------------------------------------+---------+-----------+
-# Module present among main modules:          |    1    |     1     |
-# --------------------------------------------+---------+-----------+
-# Module present among tests-related modules: |    0    |     1     |
-# --------------------------------------------+---------+-----------+
-# Module not present at all:                  |    0    |     0     |
-# --------------------------------------------+---------+-----------+
-AC_DEFUN([gl_MODULE_INDICATOR],
-[
-  AC_DEFINE_UNQUOTED([GNULIB_]m4_translit([[$1]],
-      [abcdefghijklmnopqrstuvwxyz./-],
-      [ABCDEFGHIJKLMNOPQRSTUVWXYZ___]),
-    [gl_MODULE_INDICATOR_CONDITION],
-    [Define to a C preprocessor expression that evaluates to 1 or 0,
-     depending whether the gnulib module $1 shall be considered present.])
-])
-
-# gl_MODULE_INDICATOR_FOR_TESTS([modulename])
-# defines a C macro indicating the presence of the given module
-# in lib or tests. This is useful to determine whether the module
-# should be tested.
-#                                             |  Value  |   Value   |
-#                                             | in lib/ | in tests/ |
-# --------------------------------------------+---------+-----------+
-# Module present among main modules:          |    1    |     1     |
-# --------------------------------------------+---------+-----------+
-# Module present among tests-related modules: |    1    |     1     |
-# --------------------------------------------+---------+-----------+
-# Module not present at all:                  |    0    |     0     |
-# --------------------------------------------+---------+-----------+
-AC_DEFUN([gl_MODULE_INDICATOR_FOR_TESTS],
-[
-  AC_DEFINE([GNULIB_TEST_]m4_translit([[$1]],
-      [abcdefghijklmnopqrstuvwxyz./-],
-      [ABCDEFGHIJKLMNOPQRSTUVWXYZ___]), [1],
-    [Define to 1 when the gnulib module $1 should be tested.])
-])
-
-# gl_ASSERT_NO_GNULIB_POSIXCHECK
-# asserts that there will never be a need to #define GNULIB_POSIXCHECK.
-# and thereby enables an optimization of configure and config.h.
-# Used by Emacs.
-AC_DEFUN([gl_ASSERT_NO_GNULIB_POSIXCHECK],
-[
-  dnl Override gl_WARN_ON_USE_PREPARE.
-  dnl But hide this definition from 'aclocal'.
-  AC_DEFUN([gl_W][ARN_ON_USE_PREPARE], [])
-])
-
-# gl_ASSERT_NO_GNULIB_TESTS
-# asserts that there will be no gnulib tests in the scope of the configure.ac
-# and thereby enables an optimization of config.h.
-# Used by Emacs.
-AC_DEFUN([gl_ASSERT_NO_GNULIB_TESTS],
-[
-  dnl Override gl_MODULE_INDICATOR_FOR_TESTS.
-  AC_DEFUN([gl_MODULE_INDICATOR_FOR_TESTS], [])
-])
-
-# Test whether <features.h> exists.
-# Set HAVE_FEATURES_H.
-AC_DEFUN([gl_FEATURES_H],
-[
-  AC_CHECK_HEADERS_ONCE([features.h])
-  if test $ac_cv_header_features_h = yes; then
-    HAVE_FEATURES_H=1
-  else
-    HAVE_FEATURES_H=0
-  fi
-  AC_SUBST([HAVE_FEATURES_H])
-])
-
-# m4_foreach_w
-# is a backport of autoconf-2.59c's m4_foreach_w.
-# Remove this macro when we can assume autoconf >= 2.60.
-m4_ifndef([m4_foreach_w],
-  [m4_define([m4_foreach_w],
-    [m4_foreach([$1], m4_split(m4_normalize([$2]), [ ]), [$3])])])
-
-# AS_VAR_IF(VAR, VALUE, [IF-MATCH], [IF-NOT-MATCH])
-# ----------------------------------------------------
-# Backport of autoconf-2.63b's macro.
-# Remove this macro when we can assume autoconf >= 2.64.
-m4_ifndef([AS_VAR_IF],
-[m4_define([AS_VAR_IF],
-[AS_IF([test x"AS_VAR_GET([$1])" = x""$2], [$3], [$4])])])
-
-# gl_PROG_CC_C99
-# Modifies the value of the shell variable CC in an attempt to make $CC
-# understand ISO C99 source code.
-# This is like AC_PROG_CC_C99, except that
-# - AC_PROG_CC_C99 did not exist in Autoconf versions < 2.60,
-# - AC_PROG_CC_C99 does not mix well with AC_PROG_CC_STDC
-#   <http://lists.gnu.org/archive/html/bug-gnulib/2011-09/msg00367.html>,
-#   but many more packages use AC_PROG_CC_STDC than AC_PROG_CC_C99
-#   <http://lists.gnu.org/archive/html/bug-gnulib/2011-09/msg00441.html>.
-# Remaining problems:
-# - When AC_PROG_CC_STDC is invoked twice, it adds the C99 enabling options
-#   to CC twice
-#   <http://lists.gnu.org/archive/html/bug-gnulib/2011-09/msg00431.html>.
-# - AC_PROG_CC_STDC is likely to change now that C11 is an ISO standard.
-AC_DEFUN([gl_PROG_CC_C99],
-[
-  dnl Change that version number to the minimum Autoconf version that supports
-  dnl mixing AC_PROG_CC_C99 calls with AC_PROG_CC_STDC calls.
-  m4_version_prereq([9.0],
-    [AC_REQUIRE([AC_PROG_CC_C99])],
-    [AC_REQUIRE([AC_PROG_CC_STDC])])
-])
-
-# gl_PROG_AR_RANLIB
-# Determines the values for AR, ARFLAGS, RANLIB that fit with the compiler.
-# The user can set the variables AR, ARFLAGS, RANLIB if he wants to override
-# the values.
-AC_DEFUN([gl_PROG_AR_RANLIB],
-[
-  dnl Minix 3 comes with two toolchains: The Amsterdam Compiler Kit compiler
-  dnl as "cc", and GCC as "gcc". They have different object file formats and
-  dnl library formats. In particular, the GNU binutils programs ar, ranlib
-  dnl produce libraries that work only with gcc, not with cc.
-  AC_REQUIRE([AC_PROG_CC])
-  AC_CACHE_CHECK([for Minix Amsterdam compiler], [gl_cv_c_amsterdam_compiler],
-    [
-      AC_EGREP_CPP([Amsterdam],
-        [
-#ifdef __ACK__
-Amsterdam
-#endif
-        ],
-        [gl_cv_c_amsterdam_compiler=yes],
-        [gl_cv_c_amsterdam_compiler=no])
-    ])
-  if test -z "$AR"; then
-    if test $gl_cv_c_amsterdam_compiler = yes; then
-      AR='cc -c.a'
-      if test -z "$ARFLAGS"; then
-        ARFLAGS='-o'
-      fi
-    else
-      dnl Use the Automake-documented default values for AR and ARFLAGS,
-      dnl but prefer ${host}-ar over ar (useful for cross-compiling).
-      AC_CHECK_TOOL([AR], [ar], [ar])
-      if test -z "$ARFLAGS"; then
-        ARFLAGS='cru'
-      fi
-    fi
-  else
-    if test -z "$ARFLAGS"; then
-      ARFLAGS='cru'
-    fi
-  fi
-  AC_SUBST([AR])
-  AC_SUBST([ARFLAGS])
-  if test -z "$RANLIB"; then
-    if test $gl_cv_c_amsterdam_compiler = yes; then
-      RANLIB=':'
-    else
-      dnl Use the ranlib program if it is available.
-      AC_PROG_RANLIB
-    fi
-  fi
-  AC_SUBST([RANLIB])
-])
-
-# AC_PROG_MKDIR_P
-# is a backport of autoconf-2.60's AC_PROG_MKDIR_P, with a fix
-# for interoperability with automake-1.9.6 from autoconf-2.62.
-# Remove this macro when we can assume autoconf >= 2.62 or
-# autoconf >= 2.60 && automake >= 1.10.
-# AC_AUTOCONF_VERSION was introduced in 2.62, so use that as the witness.
-m4_ifndef([AC_AUTOCONF_VERSION],[
-m4_ifdef([AC_PROG_MKDIR_P], [
-  dnl For automake-1.9.6 && autoconf < 2.62: Ensure MKDIR_P is AC_SUBSTed.
-  m4_define([AC_PROG_MKDIR_P],
-    m4_defn([AC_PROG_MKDIR_P])[
-    AC_SUBST([MKDIR_P])])], [
-  dnl For autoconf < 2.60: Backport of AC_PROG_MKDIR_P.
-  AC_DEFUN_ONCE([AC_PROG_MKDIR_P],
-    [AC_REQUIRE([AM_PROG_MKDIR_P])dnl defined by automake
-     MKDIR_P='$(mkdir_p)'
-     AC_SUBST([MKDIR_P])])])
-])
-
-# AC_C_RESTRICT
-# This definition overrides the AC_C_RESTRICT macro from autoconf 2.60..2.61,
-# so that mixed use of GNU C and GNU C++ and mixed use of Sun C and Sun C++
-# works.
-# This definition can be removed once autoconf >= 2.62 can be assumed.
-# AC_AUTOCONF_VERSION was introduced in 2.62, so use that as the witness.
-m4_ifndef([AC_AUTOCONF_VERSION],[
-AC_DEFUN([AC_C_RESTRICT],
-[AC_CACHE_CHECK([for C/C++ restrict keyword], [ac_cv_c_restrict],
-  [ac_cv_c_restrict=no
-   # The order here caters to the fact that C++ does not require restrict.
-   for ac_kw in __restrict __restrict__ _Restrict restrict; do
-     AC_COMPILE_IFELSE([AC_LANG_PROGRAM(
-      [[typedef int * int_ptr;
-        int foo (int_ptr $ac_kw ip) {
-        return ip[0];
-       }]],
-      [[int s[1];
-        int * $ac_kw t = s;
-        t[0] = 0;
-        return foo(t)]])],
-      [ac_cv_c_restrict=$ac_kw])
-     test "$ac_cv_c_restrict" != no && break
-   done
-  ])
- AH_VERBATIM([restrict],
-[/* Define to the equivalent of the C99 'restrict' keyword, or to
-   nothing if this is not supported.  Do not define if restrict is
-   supported directly.  */
-#undef restrict
-/* Work around a bug in Sun C++: it does not support _Restrict, even
-   though the corresponding Sun C compiler does, which causes
-   "#define restrict _Restrict" in the previous line.  Perhaps some future
-   version of Sun C++ will work with _Restrict; if so, it'll probably
-   define __RESTRICT, just as Sun C does.  */
-#if defined __SUNPRO_CC && !defined __RESTRICT
-# define _Restrict
-#endif])
- case $ac_cv_c_restrict in
-   restrict) ;;
-   no) AC_DEFINE([restrict], []) ;;
-   *)  AC_DEFINE_UNQUOTED([restrict], [$ac_cv_c_restrict]) ;;
- esac
-])
-])
-
-# gl_BIGENDIAN
-# is like AC_C_BIGENDIAN, except that it can be AC_REQUIREd.
-# Note that AC_REQUIRE([AC_C_BIGENDIAN]) does not work reliably because some
-# macros invoke AC_C_BIGENDIAN with arguments.
-AC_DEFUN([gl_BIGENDIAN],
-[
-  AC_C_BIGENDIAN
-])
-
-# gl_CACHE_VAL_SILENT(cache-id, command-to-set-it)
-# is like AC_CACHE_VAL(cache-id, command-to-set-it), except that it does not
-# output a spurious "(cached)" mark in the midst of other configure output.
-# This macro should be used instead of AC_CACHE_VAL when it is not surrounded
-# by an AC_MSG_CHECKING/AC_MSG_RESULT pair.
-AC_DEFUN([gl_CACHE_VAL_SILENT],
-[
-  saved_as_echo_n="$as_echo_n"
-  as_echo_n=':'
-  AC_CACHE_VAL([$1], [$2])
-  as_echo_n="$saved_as_echo_n"
-])
diff -Nuar groff-1.22.3.old/src/libs/gnulib/m4/gnulib-comp.m4 groff-1.22.3/src/libs/gnulib/m4/gnulib-comp.m4
--- groff-1.22.3.old/src/libs/gnulib/m4/gnulib-comp.m4	2014-11-04 10:38:35.640518809 +0200
+++ groff-1.22.3/src/libs/gnulib/m4/gnulib-comp.m4	1970-01-01 02:00:00.000000000 +0200
@@ -1,278 +0,0 @@
-# DO NOT EDIT! GENERATED AUTOMATICALLY!
-# Copyright (C) 2002-2014  Free Software Foundation, Inc.
-#
-# This file is free software; you can redistribute it and/or modify
-# it under the terms of the GNU General Public License as published by
-# the Free Software Foundation; either version 3 of the License, or
-# (at your option) any later version.
-#
-# This file is distributed in the hope that it will be useful,
-# but WITHOUT ANY WARRANTY; without even the implied warranty of
-# MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
-# GNU General Public License for more details.
-#
-# You should have received a copy of the GNU General Public License
-# along with this file.  If not, see <http://www.gnu.org/licenses/>.
-#
-# As a special exception to the GNU General Public License,
-# this file may be distributed as part of a program that
-# contains a configuration script generated by Autoconf, under
-# the same distribution terms as the rest of that program.
-#
-# Generated by gnulib-tool.
-#
-# This file represents the compiled summary of the specification in
-# gnulib-cache.m4. It lists the computed macro invocations that need
-# to be invoked from configure.ac.
-# In projects that use version control, this file can be treated like
-# other built files.
-
-
-# This macro should be invoked from src/libs/gnulib/configure.ac, in the section
-# "Checks for programs", right after AC_PROG_CC, and certainly before
-# any checks for libraries, header files, types and library functions.
-AC_DEFUN([gl_EARLY],
-[
-  m4_pattern_forbid([^gl_[A-Z]])dnl the gnulib macro namespace
-  m4_pattern_allow([^gl_ES$])dnl a valid locale name
-  m4_pattern_allow([^gl_LIBOBJS$])dnl a variable
-  m4_pattern_allow([^gl_LTLIBOBJS$])dnl a variable
-  AC_REQUIRE([gl_PROG_AR_RANLIB])
-  AC_REQUIRE([AM_PROG_CC_C_O])
-  # Code from module configmake:
-  # Code from module extensions:
-  AC_REQUIRE([gl_USE_SYSTEM_EXTENSIONS])
-  # Code from module extern-inline:
-  # Code from module include_next:
-  # Code from module localcharset:
-  # Code from module multiarch:
-  # Code from module snippet/arg-nonnull:
-  # Code from module snippet/c++defs:
-  # Code from module snippet/warn-on-use:
-  # Code from module stddef:
-  # Code from module stdint:
-  # Code from module streq:
-  # Code from module unitypes:
-  # Code from module uniwidth/base:
-  # Code from module uniwidth/width:
-  # Code from module wchar:
-  # Code from module wctype-h:
-  # Code from module wcwidth:
-])
-
-# This macro should be invoked from src/libs/gnulib/configure.ac, in the section
-# "Check for header files, types and library functions".
-AC_DEFUN([gl_INIT],
-[
-  AM_CONDITIONAL([GL_COND_LIBTOOL], [false])
-  gl_cond_libtool=false
-  gl_libdeps=
-  gl_ltlibdeps=
-  gl_m4_base='m4'
-  m4_pushdef([AC_LIBOBJ], m4_defn([gl_LIBOBJ]))
-  m4_pushdef([AC_REPLACE_FUNCS], m4_defn([gl_REPLACE_FUNCS]))
-  m4_pushdef([AC_LIBSOURCES], m4_defn([gl_LIBSOURCES]))
-  m4_pushdef([gl_LIBSOURCES_LIST], [])
-  m4_pushdef([gl_LIBSOURCES_DIR], [])
-  gl_COMMON
-  gl_source_base='lib'
-  gl_CONFIGMAKE_PREP
-  AC_REQUIRE([gl_EXTERN_INLINE])
-  gl_LOCALCHARSET
-  LOCALCHARSET_TESTS_ENVIRONMENT="CHARSETALIASDIR=\"\$(abs_top_builddir)/$gl_source_base\""
-  AC_SUBST([LOCALCHARSET_TESTS_ENVIRONMENT])
-  gl_MULTIARCH
-  gl_STDDEF_H
-  gl_STDINT_H
-  gl_LIBUNISTRING_LIBHEADER([0.9], [unitypes.h])
-  gl_LIBUNISTRING_LIBHEADER([0.9], [uniwidth.h])
-  gl_LIBUNISTRING_MODULE([0.9.4], [uniwidth/width])
-  gl_WCHAR_H
-  gl_WCTYPE_H
-  gl_FUNC_WCWIDTH
-  if test $HAVE_WCWIDTH = 0 || test $REPLACE_WCWIDTH = 1; then
-    AC_LIBOBJ([wcwidth])
-  fi
-  gl_WCHAR_MODULE_INDICATOR([wcwidth])
-  # End of code from modules
-  m4_ifval(gl_LIBSOURCES_LIST, [
-    m4_syscmd([test ! -d ]m4_defn([gl_LIBSOURCES_DIR])[ ||
-      for gl_file in ]gl_LIBSOURCES_LIST[ ; do
-        if test ! -r ]m4_defn([gl_LIBSOURCES_DIR])[/$gl_file ; then
-          echo "missing file ]m4_defn([gl_LIBSOURCES_DIR])[/$gl_file" >&2
-          exit 1
-        fi
-      done])dnl
-      m4_if(m4_sysval, [0], [],
-        [AC_FATAL([expected source file, required through AC_LIBSOURCES, not found])])
-  ])
-  m4_popdef([gl_LIBSOURCES_DIR])
-  m4_popdef([gl_LIBSOURCES_LIST])
-  m4_popdef([AC_LIBSOURCES])
-  m4_popdef([AC_REPLACE_FUNCS])
-  m4_popdef([AC_LIBOBJ])
-  AC_CONFIG_COMMANDS_PRE([
-    gl_libobjs=
-    gl_ltlibobjs=
-    if test -n "$gl_LIBOBJS"; then
-      # Remove the extension.
-      sed_drop_objext='s/\.o$//;s/\.obj$//'
-      for i in `for i in $gl_LIBOBJS; do echo "$i"; done | sed -e "$sed_drop_objext" | sort | uniq`; do
-        gl_libobjs="$gl_libobjs $i.$ac_objext"
-        gl_ltlibobjs="$gl_ltlibobjs $i.lo"
-      done
-    fi
-    AC_SUBST([gl_LIBOBJS], [$gl_libobjs])
-    AC_SUBST([gl_LTLIBOBJS], [$gl_ltlibobjs])
-  ])
-  gltests_libdeps=
-  gltests_ltlibdeps=
-  m4_pushdef([AC_LIBOBJ], m4_defn([gltests_LIBOBJ]))
-  m4_pushdef([AC_REPLACE_FUNCS], m4_defn([gltests_REPLACE_FUNCS]))
-  m4_pushdef([AC_LIBSOURCES], m4_defn([gltests_LIBSOURCES]))
-  m4_pushdef([gltests_LIBSOURCES_LIST], [])
-  m4_pushdef([gltests_LIBSOURCES_DIR], [])
-  gl_COMMON
-  gl_source_base='tests'
-changequote(,)dnl
-  gltests_WITNESS=IN_`echo "${PACKAGE-$PACKAGE_TARNAME}" | LC_ALL=C tr abcdefghijklmnopqrstuvwxyz ABCDEFGHIJKLMNOPQRSTUVWXYZ | LC_ALL=C sed -e 's/[^A-Z0-9_]/_/g'`_GNULIB_TESTS
-changequote([, ])dnl
-  AC_SUBST([gltests_WITNESS])
-  gl_module_indicator_condition=$gltests_WITNESS
-  m4_pushdef([gl_MODULE_INDICATOR_CONDITION], [$gl_module_indicator_condition])
-  m4_popdef([gl_MODULE_INDICATOR_CONDITION])
-  m4_ifval(gltests_LIBSOURCES_LIST, [
-    m4_syscmd([test ! -d ]m4_defn([gltests_LIBSOURCES_DIR])[ ||
-      for gl_file in ]gltests_LIBSOURCES_LIST[ ; do
-        if test ! -r ]m4_defn([gltests_LIBSOURCES_DIR])[/$gl_file ; then
-          echo "missing file ]m4_defn([gltests_LIBSOURCES_DIR])[/$gl_file" >&2
-          exit 1
-        fi
-      done])dnl
-      m4_if(m4_sysval, [0], [],
-        [AC_FATAL([expected source file, required through AC_LIBSOURCES, not found])])
-  ])
-  m4_popdef([gltests_LIBSOURCES_DIR])
-  m4_popdef([gltests_LIBSOURCES_LIST])
-  m4_popdef([AC_LIBSOURCES])
-  m4_popdef([AC_REPLACE_FUNCS])
-  m4_popdef([AC_LIBOBJ])
-  AC_CONFIG_COMMANDS_PRE([
-    gltests_libobjs=
-    gltests_ltlibobjs=
-    if test -n "$gltests_LIBOBJS"; then
-      # Remove the extension.
-      sed_drop_objext='s/\.o$//;s/\.obj$//'
-      for i in `for i in $gltests_LIBOBJS; do echo "$i"; done | sed -e "$sed_drop_objext" | sort | uniq`; do
-        gltests_libobjs="$gltests_libobjs $i.$ac_objext"
-        gltests_ltlibobjs="$gltests_ltlibobjs $i.lo"
-      done
-    fi
-    AC_SUBST([gltests_LIBOBJS], [$gltests_libobjs])
-    AC_SUBST([gltests_LTLIBOBJS], [$gltests_ltlibobjs])
-  ])
-  LIBGNU_LIBDEPS="$gl_libdeps"
-  AC_SUBST([LIBGNU_LIBDEPS])
-  LIBGNU_LTLIBDEPS="$gl_ltlibdeps"
-  AC_SUBST([LIBGNU_LTLIBDEPS])
-])
-
-# Like AC_LIBOBJ, except that the module name goes
-# into gl_LIBOBJS instead of into LIBOBJS.
-AC_DEFUN([gl_LIBOBJ], [
-  AS_LITERAL_IF([$1], [gl_LIBSOURCES([$1.c])])dnl
-  gl_LIBOBJS="$gl_LIBOBJS $1.$ac_objext"
-])
-
-# Like AC_REPLACE_FUNCS, except that the module name goes
-# into gl_LIBOBJS instead of into LIBOBJS.
-AC_DEFUN([gl_REPLACE_FUNCS], [
-  m4_foreach_w([gl_NAME], [$1], [AC_LIBSOURCES(gl_NAME[.c])])dnl
-  AC_CHECK_FUNCS([$1], , [gl_LIBOBJ($ac_func)])
-])
-
-# Like AC_LIBSOURCES, except the directory where the source file is
-# expected is derived from the gnulib-tool parameterization,
-# and alloca is special cased (for the alloca-opt module).
-# We could also entirely rely on EXTRA_lib..._SOURCES.
-AC_DEFUN([gl_LIBSOURCES], [
-  m4_foreach([_gl_NAME], [$1], [
-    m4_if(_gl_NAME, [alloca.c], [], [
-      m4_define([gl_LIBSOURCES_DIR], [lib])
-      m4_append([gl_LIBSOURCES_LIST], _gl_NAME, [ ])
-    ])
-  ])
-])
-
-# Like AC_LIBOBJ, except that the module name goes
-# into gltests_LIBOBJS instead of into LIBOBJS.
-AC_DEFUN([gltests_LIBOBJ], [
-  AS_LITERAL_IF([$1], [gltests_LIBSOURCES([$1.c])])dnl
-  gltests_LIBOBJS="$gltests_LIBOBJS $1.$ac_objext"
-])
-
-# Like AC_REPLACE_FUNCS, except that the module name goes
-# into gltests_LIBOBJS instead of into LIBOBJS.
-AC_DEFUN([gltests_REPLACE_FUNCS], [
-  m4_foreach_w([gl_NAME], [$1], [AC_LIBSOURCES(gl_NAME[.c])])dnl
-  AC_CHECK_FUNCS([$1], , [gltests_LIBOBJ($ac_func)])
-])
-
-# Like AC_LIBSOURCES, except the directory where the source file is
-# expected is derived from the gnulib-tool parameterization,
-# and alloca is special cased (for the alloca-opt module).
-# We could also entirely rely on EXTRA_lib..._SOURCES.
-AC_DEFUN([gltests_LIBSOURCES], [
-  m4_foreach([_gl_NAME], [$1], [
-    m4_if(_gl_NAME, [alloca.c], [], [
-      m4_define([gltests_LIBSOURCES_DIR], [tests])
-      m4_append([gltests_LIBSOURCES_LIST], _gl_NAME, [ ])
-    ])
-  ])
-])
-
-# This macro records the list of files which have been installed by
-# gnulib-tool and may be removed by future gnulib-tool invocations.
-AC_DEFUN([gl_FILE_LIST], [
-  build-aux/snippet/arg-nonnull.h
-  build-aux/snippet/c++defs.h
-  build-aux/snippet/warn-on-use.h
-  lib/config.charset
-  lib/localcharset.c
-  lib/localcharset.h
-  lib/ref-add.sin
-  lib/ref-del.sin
-  lib/stddef.in.h
-  lib/stdint.in.h
-  lib/streq.h
-  lib/unitypes.in.h
-  lib/uniwidth.in.h
-  lib/uniwidth/cjk.h
-  lib/uniwidth/width.c
-  lib/wchar.in.h
-  lib/wctype-h.c
-  lib/wctype.in.h
-  lib/wcwidth.c
-  m4/00gnulib.m4
-  m4/codeset.m4
-  m4/configmake.m4
-  m4/extensions.m4
-  m4/extern-inline.m4
-  m4/fcntl-o.m4
-  m4/glibc21.m4
-  m4/gnulib-common.m4
-  m4/include_next.m4
-  m4/libunistring-base.m4
-  m4/localcharset.m4
-  m4/longlong.m4
-  m4/multiarch.m4
-  m4/onceonly.m4
-  m4/stddef_h.m4
-  m4/stdint.m4
-  m4/warn-on-use.m4
-  m4/wchar_h.m4
-  m4/wchar_t.m4
-  m4/wctype_h.m4
-  m4/wcwidth.m4
-  m4/wint_t.m4
-])
diff -Nuar groff-1.22.3.old/src/libs/gnulib/m4/gnulib-tool.m4 groff-1.22.3/src/libs/gnulib/m4/gnulib-tool.m4
--- groff-1.22.3.old/src/libs/gnulib/m4/gnulib-tool.m4	2014-11-04 10:38:35.640518809 +0200
+++ groff-1.22.3/src/libs/gnulib/m4/gnulib-tool.m4	1970-01-01 02:00:00.000000000 +0200
@@ -1,57 +0,0 @@
-# gnulib-tool.m4 serial 2
-dnl Copyright (C) 2004-2005, 2009-2014 Free Software Foundation, Inc.
-dnl This file is free software; the Free Software Foundation
-dnl gives unlimited permission to copy and/or distribute it,
-dnl with or without modifications, as long as this notice is preserved.
-
-dnl The following macros need not be invoked explicitly.
-dnl Invoking them does nothing except to declare default arguments
-dnl for "gnulib-tool --import".
-
-dnl Usage: gl_LOCAL_DIR([DIR])
-AC_DEFUN([gl_LOCAL_DIR], [])
-
-dnl Usage: gl_MODULES([module1 module2 ...])
-AC_DEFUN([gl_MODULES], [])
-
-dnl Usage: gl_AVOID([module1 module2 ...])
-AC_DEFUN([gl_AVOID], [])
-
-dnl Usage: gl_SOURCE_BASE([DIR])
-AC_DEFUN([gl_SOURCE_BASE], [])
-
-dnl Usage: gl_M4_BASE([DIR])
-AC_DEFUN([gl_M4_BASE], [])
-
-dnl Usage: gl_PO_BASE([DIR])
-AC_DEFUN([gl_PO_BASE], [])
-
-dnl Usage: gl_DOC_BASE([DIR])
-AC_DEFUN([gl_DOC_BASE], [])
-
-dnl Usage: gl_TESTS_BASE([DIR])
-AC_DEFUN([gl_TESTS_BASE], [])
-
-dnl Usage: gl_WITH_TESTS
-AC_DEFUN([gl_WITH_TESTS], [])
-
-dnl Usage: gl_LIB([LIBNAME])
-AC_DEFUN([gl_LIB], [])
-
-dnl Usage: gl_LGPL or gl_LGPL([VERSION])
-AC_DEFUN([gl_LGPL], [])
-
-dnl Usage: gl_MAKEFILE_NAME([FILENAME])
-AC_DEFUN([gl_MAKEFILE_NAME], [])
-
-dnl Usage: gl_LIBTOOL
-AC_DEFUN([gl_LIBTOOL], [])
-
-dnl Usage: gl_MACRO_PREFIX([PREFIX])
-AC_DEFUN([gl_MACRO_PREFIX], [])
-
-dnl Usage: gl_PO_DOMAIN([DOMAIN])
-AC_DEFUN([gl_PO_DOMAIN], [])
-
-dnl Usage: gl_VC_FILES([BOOLEAN])
-AC_DEFUN([gl_VC_FILES], [])
diff -Nuar groff-1.22.3.old/src/libs/gnulib/m4/include_next.m4 groff-1.22.3/src/libs/gnulib/m4/include_next.m4
--- groff-1.22.3.old/src/libs/gnulib/m4/include_next.m4	2014-11-04 10:38:35.640518809 +0200
+++ groff-1.22.3/src/libs/gnulib/m4/include_next.m4	1970-01-01 02:00:00.000000000 +0200
@@ -1,270 +0,0 @@
-# include_next.m4 serial 23
-dnl Copyright (C) 2006-2014 Free Software Foundation, Inc.
-dnl This file is free software; the Free Software Foundation
-dnl gives unlimited permission to copy and/or distribute it,
-dnl with or without modifications, as long as this notice is preserved.
-
-dnl From Paul Eggert and Derek Price.
-
-dnl Sets INCLUDE_NEXT and PRAGMA_SYSTEM_HEADER.
-dnl
-dnl INCLUDE_NEXT expands to 'include_next' if the compiler supports it, or to
-dnl 'include' otherwise.
-dnl
-dnl INCLUDE_NEXT_AS_FIRST_DIRECTIVE expands to 'include_next' if the compiler
-dnl supports it in the special case that it is the first include directive in
-dnl the given file, or to 'include' otherwise.
-dnl
-dnl PRAGMA_SYSTEM_HEADER can be used in files that contain #include_next,
-dnl so as to avoid GCC warnings when the gcc option -pedantic is used.
-dnl '#pragma GCC system_header' has the same effect as if the file was found
-dnl through the include search path specified with '-isystem' options (as
-dnl opposed to the search path specified with '-I' options). Namely, gcc
-dnl does not warn about some things, and on some systems (Solaris and Interix)
-dnl __STDC__ evaluates to 0 instead of to 1. The latter is an undesired side
-dnl effect; we are therefore careful to use 'defined __STDC__' or '1' instead
-dnl of plain '__STDC__'.
-dnl
-dnl PRAGMA_COLUMNS can be used in files that override system header files, so
-dnl as to avoid compilation errors on HP NonStop systems when the gnulib file
-dnl is included by a system header file that does a "#pragma COLUMNS 80" (which
-dnl has the effect of truncating the lines of that file and all files that it
-dnl includes to 80 columns) and the gnulib file has lines longer than 80
-dnl columns.
-
-AC_DEFUN([gl_INCLUDE_NEXT],
-[
-  AC_LANG_PREPROC_REQUIRE()
-  AC_CACHE_CHECK([whether the preprocessor supports include_next],
-    [gl_cv_have_include_next],
-    [rm -rf conftestd1a conftestd1b conftestd2
-     mkdir conftestd1a conftestd1b conftestd2
-     dnl IBM C 9.0, 10.1 (original versions, prior to the 2009-01 updates) on
-     dnl AIX 6.1 support include_next when used as first preprocessor directive
-     dnl in a file, but not when preceded by another include directive. Check
-     dnl for this bug by including <stdio.h>.
-     dnl Additionally, with this same compiler, include_next is a no-op when
-     dnl used in a header file that was included by specifying its absolute
-     dnl file name. Despite these two bugs, include_next is used in the
-     dnl compiler's <math.h>. By virtue of the second bug, we need to use
-     dnl include_next as well in this case.
-     cat <<EOF > conftestd1a/conftest.h
-#define DEFINED_IN_CONFTESTD1
-#include_next <conftest.h>
-#ifdef DEFINED_IN_CONFTESTD2
-int foo;
-#else
-#error "include_next doesn't work"
-#endif
-EOF
-     cat <<EOF > conftestd1b/conftest.h
-#define DEFINED_IN_CONFTESTD1
-#include <stdio.h>
-#include_next <conftest.h>
-#ifdef DEFINED_IN_CONFTESTD2
-int foo;
-#else
-#error "include_next doesn't work"
-#endif
-EOF
-     cat <<EOF > conftestd2/conftest.h
-#ifndef DEFINED_IN_CONFTESTD1
-#error "include_next test doesn't work"
-#endif
-#define DEFINED_IN_CONFTESTD2
-EOF
-     gl_save_CPPFLAGS="$CPPFLAGS"
-     CPPFLAGS="$gl_save_CPPFLAGS -Iconftestd1b -Iconftestd2"
-dnl We intentionally avoid using AC_LANG_SOURCE here.
-     AC_COMPILE_IFELSE([AC_LANG_DEFINES_PROVIDED[#include <conftest.h>]],
-       [gl_cv_have_include_next=yes],
-       [CPPFLAGS="$gl_save_CPPFLAGS -Iconftestd1a -Iconftestd2"
-        AC_COMPILE_IFELSE([AC_LANG_DEFINES_PROVIDED[#include <conftest.h>]],
-          [gl_cv_have_include_next=buggy],
-          [gl_cv_have_include_next=no])
-       ])
-     CPPFLAGS="$gl_save_CPPFLAGS"
-     rm -rf conftestd1a conftestd1b conftestd2
-    ])
-  PRAGMA_SYSTEM_HEADER=
-  if test $gl_cv_have_include_next = yes; then
-    INCLUDE_NEXT=include_next
-    INCLUDE_NEXT_AS_FIRST_DIRECTIVE=include_next
-    if test -n "$GCC"; then
-      PRAGMA_SYSTEM_HEADER='#pragma GCC system_header'
-    fi
-  else
-    if test $gl_cv_have_include_next = buggy; then
-      INCLUDE_NEXT=include
-      INCLUDE_NEXT_AS_FIRST_DIRECTIVE=include_next
-    else
-      INCLUDE_NEXT=include
-      INCLUDE_NEXT_AS_FIRST_DIRECTIVE=include
-    fi
-  fi
-  AC_SUBST([INCLUDE_NEXT])
-  AC_SUBST([INCLUDE_NEXT_AS_FIRST_DIRECTIVE])
-  AC_SUBST([PRAGMA_SYSTEM_HEADER])
-  AC_CACHE_CHECK([whether system header files limit the line length],
-    [gl_cv_pragma_columns],
-    [dnl HP NonStop systems, which define __TANDEM, have this misfeature.
-     AC_EGREP_CPP([choke me],
-       [
-#ifdef __TANDEM
-choke me
-#endif
-       ],
-       [gl_cv_pragma_columns=yes],
-       [gl_cv_pragma_columns=no])
-    ])
-  if test $gl_cv_pragma_columns = yes; then
-    PRAGMA_COLUMNS="#pragma COLUMNS 10000"
-  else
-    PRAGMA_COLUMNS=
-  fi
-  AC_SUBST([PRAGMA_COLUMNS])
-])
-
-# gl_CHECK_NEXT_HEADERS(HEADER1 HEADER2 ...)
-# ------------------------------------------
-# For each arg foo.h, if #include_next works, define NEXT_FOO_H to be
-# '<foo.h>'; otherwise define it to be
-# '"///usr/include/foo.h"', or whatever other absolute file name is suitable.
-# Also, if #include_next works as first preprocessing directive in a file,
-# define NEXT_AS_FIRST_DIRECTIVE_FOO_H to be '<foo.h>'; otherwise define it to
-# be
-# '"///usr/include/foo.h"', or whatever other absolute file name is suitable.
-# That way, a header file with the following line:
-#       #@INCLUDE_NEXT@ @NEXT_FOO_H@
-# or
-#       #@INCLUDE_NEXT_AS_FIRST_DIRECTIVE@ @NEXT_AS_FIRST_DIRECTIVE_FOO_H@
-# behaves (after sed substitution) as if it contained
-#       #include_next <foo.h>
-# even if the compiler does not support include_next.
-# The three "///" are to pacify Sun C 5.8, which otherwise would say
-# "warning: #include of /usr/include/... may be non-portable".
-# Use '""', not '<>', so that the /// cannot be confused with a C99 comment.
-# Note: This macro assumes that the header file is not empty after
-# preprocessing, i.e. it does not only define preprocessor macros but also
-# provides some type/enum definitions or function/variable declarations.
-#
-# This macro also checks whether each header exists, by invoking
-# AC_CHECK_HEADERS_ONCE or AC_CHECK_HEADERS on each argument.
-AC_DEFUN([gl_CHECK_NEXT_HEADERS],
-[
-  gl_NEXT_HEADERS_INTERNAL([$1], [check])
-])
-
-# gl_NEXT_HEADERS(HEADER1 HEADER2 ...)
-# ------------------------------------
-# Like gl_CHECK_NEXT_HEADERS, except do not check whether the headers exist.
-# This is suitable for headers like <stddef.h> that are standardized by C89
-# and therefore can be assumed to exist.
-AC_DEFUN([gl_NEXT_HEADERS],
-[
-  gl_NEXT_HEADERS_INTERNAL([$1], [assume])
-])
-
-# The guts of gl_CHECK_NEXT_HEADERS and gl_NEXT_HEADERS.
-AC_DEFUN([gl_NEXT_HEADERS_INTERNAL],
-[
-  AC_REQUIRE([gl_INCLUDE_NEXT])
-  AC_REQUIRE([AC_CANONICAL_HOST])
-
-  m4_if([$2], [check],
-    [AC_CHECK_HEADERS_ONCE([$1])
-    ])
-
-dnl FIXME: gl_next_header and gl_header_exists must be used unquoted
-dnl until we can assume autoconf 2.64 or newer.
-  m4_foreach_w([gl_HEADER_NAME], [$1],
-    [AS_VAR_PUSHDEF([gl_next_header],
-                    [gl_cv_next_]m4_defn([gl_HEADER_NAME]))
-     if test $gl_cv_have_include_next = yes; then
-       AS_VAR_SET(gl_next_header, ['<'gl_HEADER_NAME'>'])
-     else
-       AC_CACHE_CHECK(
-         [absolute name of <]m4_defn([gl_HEADER_NAME])[>],
-         m4_defn([gl_next_header]),
-         [m4_if([$2], [check],
-            [AS_VAR_PUSHDEF([gl_header_exists],
-                            [ac_cv_header_]m4_defn([gl_HEADER_NAME]))
-             if test AS_VAR_GET(gl_header_exists) = yes; then
-             AS_VAR_POPDEF([gl_header_exists])
-            ])
-               AC_LANG_CONFTEST(
-                 [AC_LANG_SOURCE(
-                    [[#include <]]m4_dquote(m4_defn([gl_HEADER_NAME]))[[>]]
-                  )])
-               dnl AIX "xlc -E" and "cc -E" omit #line directives for header
-               dnl files that contain only a #include of other header files and
-               dnl no non-comment tokens of their own. This leads to a failure
-               dnl to detect the absolute name of <dirent.h>, <signal.h>,
-               dnl <poll.h> and others. The workaround is to force preservation
-               dnl of comments through option -C. This ensures all necessary
-               dnl #line directives are present. GCC supports option -C as well.
-               case "$host_os" in
-                 aix*) gl_absname_cpp="$ac_cpp -C" ;;
-                 *)    gl_absname_cpp="$ac_cpp" ;;
-               esac
-changequote(,)
-               case "$host_os" in
-                 mingw*)
-                   dnl For the sake of native Windows compilers (excluding gcc),
-                   dnl treat backslash as a directory separator, like /.
-                   dnl Actually, these compilers use a double-backslash as
-                   dnl directory separator, inside the
-                   dnl   # line "filename"
-                   dnl directives.
-                   gl_dirsep_regex='[/\\]'
-                   ;;
-                 *)
-                   gl_dirsep_regex='\/'
-                   ;;
-               esac
-               dnl A sed expression that turns a string into a basic regular
-               dnl expression, for use within "/.../".
-               gl_make_literal_regex_sed='s,[]$^\\.*/[],\\&,g'
-changequote([,])
-               gl_header_literal_regex=`echo ']m4_defn([gl_HEADER_NAME])[' \
-                                        | sed -e "$gl_make_literal_regex_sed"`
-               gl_absolute_header_sed="/${gl_dirsep_regex}${gl_header_literal_regex}/"'{
-                   s/.*"\(.*'"${gl_dirsep_regex}${gl_header_literal_regex}"'\)".*/\1/
-changequote(,)dnl
-                   s|^/[^/]|//&|
-changequote([,])dnl
-                   p
-                   q
-                 }'
-               dnl eval is necessary to expand gl_absname_cpp.
-               dnl Ultrix and Pyramid sh refuse to redirect output of eval,
-               dnl so use subshell.
-               AS_VAR_SET(gl_next_header,
-                 ['"'`(eval "$gl_absname_cpp conftest.$ac_ext") 2>&AS_MESSAGE_LOG_FD |
-                      sed -n "$gl_absolute_header_sed"`'"'])
-          m4_if([$2], [check],
-            [else
-               AS_VAR_SET(gl_next_header, ['<'gl_HEADER_NAME'>'])
-             fi
-            ])
-         ])
-     fi
-     AC_SUBST(
-       AS_TR_CPP([NEXT_]m4_defn([gl_HEADER_NAME])),
-       [AS_VAR_GET(gl_next_header)])
-     if test $gl_cv_have_include_next = yes || test $gl_cv_have_include_next = buggy; then
-       # INCLUDE_NEXT_AS_FIRST_DIRECTIVE='include_next'
-       gl_next_as_first_directive='<'gl_HEADER_NAME'>'
-     else
-       # INCLUDE_NEXT_AS_FIRST_DIRECTIVE='include'
-       gl_next_as_first_directive=AS_VAR_GET(gl_next_header)
-     fi
-     AC_SUBST(
-       AS_TR_CPP([NEXT_AS_FIRST_DIRECTIVE_]m4_defn([gl_HEADER_NAME])),
-       [$gl_next_as_first_directive])
-     AS_VAR_POPDEF([gl_next_header])])
-])
-
-# Autoconf 2.68 added warnings for our use of AC_COMPILE_IFELSE;
-# this fallback is safe for all earlier autoconf versions.
-m4_define_default([AC_LANG_DEFINES_PROVIDED])
diff -Nuar groff-1.22.3.old/src/libs/gnulib/m4/inttypes.m4 groff-1.22.3/src/libs/gnulib/m4/inttypes.m4
--- groff-1.22.3.old/src/libs/gnulib/m4/inttypes.m4	2014-11-04 10:38:35.640518809 +0200
+++ groff-1.22.3/src/libs/gnulib/m4/inttypes.m4	1970-01-01 02:00:00.000000000 +0200
@@ -1,157 +0,0 @@
-# inttypes.m4 serial 26
-dnl Copyright (C) 2006-2014 Free Software Foundation, Inc.
-dnl This file is free software; the Free Software Foundation
-dnl gives unlimited permission to copy and/or distribute it,
-dnl with or without modifications, as long as this notice is preserved.
-
-dnl From Derek Price, Bruno Haible.
-dnl Test whether <inttypes.h> is supported or must be substituted.
-
-AC_DEFUN([gl_INTTYPES_H],
-[
-  AC_REQUIRE([gl_INTTYPES_INCOMPLETE])
-  gl_INTTYPES_PRI_SCN
-])
-
-AC_DEFUN_ONCE([gl_INTTYPES_INCOMPLETE],
-[
-  AC_REQUIRE([gl_STDINT_H])
-  AC_CHECK_HEADERS_ONCE([inttypes.h])
-
-  dnl Override <inttypes.h> always, so that the portability warnings work.
-  AC_REQUIRE([gl_INTTYPES_H_DEFAULTS])
-  gl_CHECK_NEXT_HEADERS([inttypes.h])
-
-  AC_REQUIRE([gl_MULTIARCH])
-
-  dnl Check for declarations of anything we want to poison if the
-  dnl corresponding gnulib module is not in use.
-  gl_WARN_ON_USE_PREPARE([[#include <inttypes.h>
-    ]], [imaxabs imaxdiv strtoimax strtoumax])
-])
-
-# Ensure that the PRI* and SCN* macros are defined appropriately.
-AC_DEFUN([gl_INTTYPES_PRI_SCN],
-[
-  AC_REQUIRE([gt_INTTYPES_PRI])
-
-  PRIPTR_PREFIX=
-  if test -n "$STDINT_H"; then
-    dnl Using the gnulib <stdint.h>. It always defines intptr_t to 'long'.
-    PRIPTR_PREFIX='"l"'
-  else
-    dnl Using the system's <stdint.h>.
-    for glpfx in '' l ll I64; do
-      case $glpfx in
-        '')  gltype1='int';;
-        l)   gltype1='long int';;
-        ll)  gltype1='long long int';;
-        I64) gltype1='__int64';;
-      esac
-      AC_COMPILE_IFELSE(
-        [AC_LANG_PROGRAM([[#include <stdint.h>
-           extern intptr_t foo;
-           extern $gltype1 foo;]])],
-        [PRIPTR_PREFIX='"'$glpfx'"'])
-      test -n "$PRIPTR_PREFIX" && break
-    done
-  fi
-  AC_SUBST([PRIPTR_PREFIX])
-
-  gl_INTTYPES_CHECK_LONG_LONG_INT_CONDITION(
-    [INT32_MAX_LT_INTMAX_MAX],
-    [defined INT32_MAX && defined INTMAX_MAX],
-    [INT32_MAX < INTMAX_MAX],
-    [sizeof (int) < sizeof (long long int)])
-  if test $APPLE_UNIVERSAL_BUILD = 0; then
-    gl_INTTYPES_CHECK_LONG_LONG_INT_CONDITION(
-      [INT64_MAX_EQ_LONG_MAX],
-      [defined INT64_MAX],
-      [INT64_MAX == LONG_MAX],
-      [sizeof (long long int) == sizeof (long int)])
-  else
-    INT64_MAX_EQ_LONG_MAX=-1
-  fi
-  gl_INTTYPES_CHECK_LONG_LONG_INT_CONDITION(
-    [UINT32_MAX_LT_UINTMAX_MAX],
-    [defined UINT32_MAX && defined UINTMAX_MAX],
-    [UINT32_MAX < UINTMAX_MAX],
-    [sizeof (unsigned int) < sizeof (unsigned long long int)])
-  if test $APPLE_UNIVERSAL_BUILD = 0; then
-    gl_INTTYPES_CHECK_LONG_LONG_INT_CONDITION(
-      [UINT64_MAX_EQ_ULONG_MAX],
-      [defined UINT64_MAX],
-      [UINT64_MAX == ULONG_MAX],
-      [sizeof (unsigned long long int) == sizeof (unsigned long int)])
-  else
-    UINT64_MAX_EQ_ULONG_MAX=-1
-  fi
-])
-
-# Define the symbol $1 to be 1 if the condition is true, 0 otherwise.
-# If $2 is true, the condition is $3; otherwise if long long int is supported
-# approximate the condition with $4; otherwise, assume the condition is false.
-# The condition should work on all C99 platforms; the approximations should be
-# good enough to work on all practical pre-C99 platforms.
-# $2 is evaluated by the C preprocessor, $3 and $4 as compile-time constants.
-AC_DEFUN([gl_INTTYPES_CHECK_LONG_LONG_INT_CONDITION],
-[
-  AC_CACHE_CHECK([whether $3],
-    [gl_cv_test_$1],
-    [AC_COMPILE_IFELSE(
-       [AC_LANG_PROGRAM(
-          [[/* Work also in C++ mode.  */
-            #define __STDC_LIMIT_MACROS 1
-
-            /* Work if build is not clean.  */
-            #define _GL_JUST_INCLUDE_SYSTEM_STDINT_H
-
-            #include <limits.h>
-            #if HAVE_STDINT_H
-             #include <stdint.h>
-            #endif
-
-            #if $2
-             #define CONDITION ($3)
-            #elif HAVE_LONG_LONG_INT
-             #define CONDITION ($4)
-            #else
-             #define CONDITION 0
-            #endif
-            int test[CONDITION ? 1 : -1];]])],
-       [gl_cv_test_$1=yes],
-       [gl_cv_test_$1=no])])
-  if test $gl_cv_test_$1 = yes; then
-    $1=1;
-  else
-    $1=0;
-  fi
-  AC_SUBST([$1])
-])
-
-AC_DEFUN([gl_INTTYPES_MODULE_INDICATOR],
-[
-  dnl Use AC_REQUIRE here, so that the default settings are expanded once only.
-  AC_REQUIRE([gl_INTTYPES_H_DEFAULTS])
-  gl_MODULE_INDICATOR_SET_VARIABLE([$1])
-])
-
-AC_DEFUN([gl_INTTYPES_H_DEFAULTS],
-[
-  GNULIB_IMAXABS=0;      AC_SUBST([GNULIB_IMAXABS])
-  GNULIB_IMAXDIV=0;      AC_SUBST([GNULIB_IMAXDIV])
-  GNULIB_STRTOIMAX=0;    AC_SUBST([GNULIB_STRTOIMAX])
-  GNULIB_STRTOUMAX=0;    AC_SUBST([GNULIB_STRTOUMAX])
-  dnl Assume proper GNU behavior unless another module says otherwise.
-  HAVE_DECL_IMAXABS=1;   AC_SUBST([HAVE_DECL_IMAXABS])
-  HAVE_DECL_IMAXDIV=1;   AC_SUBST([HAVE_DECL_IMAXDIV])
-  HAVE_DECL_STRTOIMAX=1; AC_SUBST([HAVE_DECL_STRTOIMAX])
-  HAVE_DECL_STRTOUMAX=1; AC_SUBST([HAVE_DECL_STRTOUMAX])
-  REPLACE_STRTOIMAX=0;   AC_SUBST([REPLACE_STRTOIMAX])
-  INT32_MAX_LT_INTMAX_MAX=1;  AC_SUBST([INT32_MAX_LT_INTMAX_MAX])
-  INT64_MAX_EQ_LONG_MAX='defined _LP64';  AC_SUBST([INT64_MAX_EQ_LONG_MAX])
-  PRI_MACROS_BROKEN=0;   AC_SUBST([PRI_MACROS_BROKEN])
-  PRIPTR_PREFIX=__PRIPTR_PREFIX;  AC_SUBST([PRIPTR_PREFIX])
-  UINT32_MAX_LT_UINTMAX_MAX=1;  AC_SUBST([UINT32_MAX_LT_UINTMAX_MAX])
-  UINT64_MAX_EQ_ULONG_MAX='defined _LP64';  AC_SUBST([UINT64_MAX_EQ_ULONG_MAX])
-])
diff -Nuar groff-1.22.3.old/src/libs/gnulib/m4/inttypes-pri.m4 groff-1.22.3/src/libs/gnulib/m4/inttypes-pri.m4
--- groff-1.22.3.old/src/libs/gnulib/m4/inttypes-pri.m4	2014-11-04 10:38:35.641518796 +0200
+++ groff-1.22.3/src/libs/gnulib/m4/inttypes-pri.m4	1970-01-01 02:00:00.000000000 +0200
@@ -1,42 +0,0 @@
-# inttypes-pri.m4 serial 7 (gettext-0.18.2)
-dnl Copyright (C) 1997-2002, 2006, 2008-2014 Free Software Foundation, Inc.
-dnl This file is free software; the Free Software Foundation
-dnl gives unlimited permission to copy and/or distribute it,
-dnl with or without modifications, as long as this notice is preserved.
-
-dnl From Bruno Haible.
-
-AC_PREREQ([2.53])
-
-# Define PRI_MACROS_BROKEN if <inttypes.h> exists and defines the PRI*
-# macros to non-string values.  This is the case on AIX 4.3.3.
-
-AC_DEFUN([gt_INTTYPES_PRI],
-[
-  AC_CHECK_HEADERS([inttypes.h])
-  if test $ac_cv_header_inttypes_h = yes; then
-    AC_CACHE_CHECK([whether the inttypes.h PRIxNN macros are broken],
-      [gt_cv_inttypes_pri_broken],
-      [
-        AC_COMPILE_IFELSE(
-          [AC_LANG_PROGRAM(
-             [[
-#include <inttypes.h>
-#ifdef PRId32
-char *p = PRId32;
-#endif
-             ]],
-             [[]])],
-          [gt_cv_inttypes_pri_broken=no],
-          [gt_cv_inttypes_pri_broken=yes])
-      ])
-  fi
-  if test "$gt_cv_inttypes_pri_broken" = yes; then
-    AC_DEFINE_UNQUOTED([PRI_MACROS_BROKEN], [1],
-      [Define if <inttypes.h> exists and defines unusable PRI* macros.])
-    PRI_MACROS_BROKEN=1
-  else
-    PRI_MACROS_BROKEN=0
-  fi
-  AC_SUBST([PRI_MACROS_BROKEN])
-])
diff -Nuar groff-1.22.3.old/src/libs/gnulib/m4/libunistring-base.m4 groff-1.22.3/src/libs/gnulib/m4/libunistring-base.m4
--- groff-1.22.3.old/src/libs/gnulib/m4/libunistring-base.m4	2014-11-04 10:38:35.641518796 +0200
+++ groff-1.22.3/src/libs/gnulib/m4/libunistring-base.m4	1970-01-01 02:00:00.000000000 +0200
@@ -1,141 +0,0 @@
-# libunistring-base.m4 serial 5
-dnl Copyright (C) 2010-2014 Free Software Foundation, Inc.
-dnl This file is free software; the Free Software Foundation
-dnl gives unlimited permission to copy and/or distribute it,
-dnl with or without modifications, as long as this notice is preserved.
-
-dnl From Paolo Bonzini and Bruno Haible.
-
-dnl gl_LIBUNISTRING_MODULE([VERSION], [Module])
-dnl Declares that the source files of Module should be compiled, unless we
-dnl are linking with libunistring and its version is >= the given VERSION.
-dnl Defines an automake conditional LIBUNISTRING_COMPILE_$MODULE that is
-dnl true if the source files of Module should be compiled.
-dnl This macro is to be used for public libunistring API, not for
-dnl undocumented API.
-dnl
-dnl You have to bump the VERSION argument to the next projected version
-dnl number each time you make a change that affects the behaviour of the
-dnl functions defined in Module (even if the sources of Module itself do not
-dnl change).
-
-AC_DEFUN([gl_LIBUNISTRING_MODULE],
-[
-  AC_REQUIRE([gl_LIBUNISTRING_LIB_PREPARE])
-  dnl Use the variables HAVE_LIBUNISTRING, LIBUNISTRING_VERSION from
-  dnl gl_LIBUNISTRING_CORE if that macro has been run.
-  AM_CONDITIONAL(AS_TR_CPP([LIBUNISTRING_COMPILE_$2]),
-    [gl_LIBUNISTRING_VERSION_CMP([$1])])
-])
-
-dnl gl_LIBUNISTRING_LIBHEADER([VERSION], [HeaderFile])
-dnl Declares that HeaderFile should be created, unless we are linking
-dnl with libunistring and its version is >= the given VERSION.
-dnl HeaderFile should be relative to the lib directory and end in '.h'.
-dnl Prepares for substituting LIBUNISTRING_HEADERFILE (to HeaderFile or empty).
-dnl
-dnl When we are linking with the already installed libunistring and its version
-dnl is < VERSION, we create HeaderFile here, because we may compile functions
-dnl (via gl_LIBUNISTRING_MODULE above) that are not contained in the installed
-dnl version.
-dnl When we are linking with the already installed libunistring and its version
-dnl is > VERSION, we don't create HeaderFile here: it could cause compilation
-dnl errors in other libunistring header files if some types are missing.
-dnl
-dnl You have to bump the VERSION argument to the next projected version
-dnl number each time you make a non-comment change to the HeaderFile.
-
-AC_DEFUN([gl_LIBUNISTRING_LIBHEADER],
-[
-  AC_REQUIRE([gl_LIBUNISTRING_LIB_PREPARE])
-  dnl Use the variables HAVE_LIBUNISTRING, LIBUNISTRING_VERSION from
-  dnl gl_LIBUNISTRING_CORE if that macro has been run.
-  if gl_LIBUNISTRING_VERSION_CMP([$1]); then
-    LIBUNISTRING_[]AS_TR_CPP([$2])='$2'
-  else
-    LIBUNISTRING_[]AS_TR_CPP([$2])=
-  fi
-  AC_SUBST([LIBUNISTRING_]AS_TR_CPP([$2]))
-])
-
-dnl Miscellaneous preparations/initializations.
-
-AC_DEFUN([gl_LIBUNISTRING_LIB_PREPARE],
-[
-  dnl Ensure that HAVE_LIBUNISTRING is fully determined at this point.
-  m4_ifdef([gl_LIBUNISTRING], [AC_REQUIRE([gl_LIBUNISTRING])])
-
-  AC_REQUIRE([AC_PROG_AWK])
-
-dnl Sed expressions to extract the parts of a version number.
-changequote(,)
-gl_libunistring_sed_extract_major='/^[0-9]/{s/^\([0-9]*\).*/\1/p;q;}
-i\
-0
-q
-'
-gl_libunistring_sed_extract_minor='/^[0-9][0-9]*[.][0-9]/{s/^[0-9]*[.]\([0-9]*\).*/\1/p;q;}
-i\
-0
-q
-'
-gl_libunistring_sed_extract_subminor='/^[0-9][0-9]*[.][0-9][0-9]*[.][0-9]/{s/^[0-9]*[.][0-9]*[.]\([0-9]*\).*/\1/p;q;}
-i\
-0
-q
-'
-changequote([,])
-
-  if test "$HAVE_LIBUNISTRING" = yes; then
-    LIBUNISTRING_VERSION_MAJOR=`echo "$LIBUNISTRING_VERSION" | sed -n -e "$gl_libunistring_sed_extract_major"`
-    LIBUNISTRING_VERSION_MINOR=`echo "$LIBUNISTRING_VERSION" | sed -n -e "$gl_libunistring_sed_extract_minor"`
-    LIBUNISTRING_VERSION_SUBMINOR=`echo "$LIBUNISTRING_VERSION" | sed -n -e "$gl_libunistring_sed_extract_subminor"`
-  fi
-])
-
-dnl gl_LIBUNISTRING_VERSION_CMP([VERSION])
-dnl Expands to a shell statement that evaluates to true if LIBUNISTRING_VERSION
-dnl is less than the VERSION argument.
-AC_DEFUN([gl_LIBUNISTRING_VERSION_CMP],
-[ { test "$HAVE_LIBUNISTRING" != yes \
-    || {
-         dnl AS_LITERAL_IF exists and works fine since autoconf-2.59 at least.
-         AS_LITERAL_IF([$1],
-           [dnl This is the optimized variant, that assumes the argument is a literal:
-            m4_pushdef([requested_version_major],
-              [gl_LIBUNISTRING_ARG_OR_ZERO(m4_bpatsubst([$1], [^\([0-9]*\).*], [\1]), [])])
-            m4_pushdef([requested_version_minor],
-              [gl_LIBUNISTRING_ARG_OR_ZERO(m4_bpatsubst([$1], [^[0-9]*[.]\([0-9]*\).*], [\1]), [$1])])
-            m4_pushdef([requested_version_subminor],
-              [gl_LIBUNISTRING_ARG_OR_ZERO(m4_bpatsubst([$1], [^[0-9]*[.][0-9]*[.]\([0-9]*\).*], [\1]), [$1])])
-            test $LIBUNISTRING_VERSION_MAJOR -lt requested_version_major \
-            || { test $LIBUNISTRING_VERSION_MAJOR -eq requested_version_major \
-                 && { test $LIBUNISTRING_VERSION_MINOR -lt requested_version_minor \
-                      || { test $LIBUNISTRING_VERSION_MINOR -eq requested_version_minor \
-                           && test $LIBUNISTRING_VERSION_SUBMINOR -lt requested_version_subminor
-                         }
-                    }
-               }
-            m4_popdef([requested_version_subminor])
-            m4_popdef([requested_version_minor])
-            m4_popdef([requested_version_major])
-           ],
-           [dnl This is the unoptimized variant:
-            requested_version_major=`echo '$1' | sed -n -e "$gl_libunistring_sed_extract_major"`
-            requested_version_minor=`echo '$1' | sed -n -e "$gl_libunistring_sed_extract_minor"`
-            requested_version_subminor=`echo '$1' | sed -n -e "$gl_libunistring_sed_extract_subminor"`
-            test $LIBUNISTRING_VERSION_MAJOR -lt $requested_version_major \
-            || { test $LIBUNISTRING_VERSION_MAJOR -eq $requested_version_major \
-                 && { test $LIBUNISTRING_VERSION_MINOR -lt $requested_version_minor \
-                      || { test $LIBUNISTRING_VERSION_MINOR -eq $requested_version_minor \
-                           && test $LIBUNISTRING_VERSION_SUBMINOR -lt $requested_version_subminor
-                         }
-                    }
-               }
-           ])
-       }
-  }])
-
-dnl gl_LIBUNISTRING_ARG_OR_ZERO([ARG], [ORIG]) expands to ARG if it is not the
-dnl same as ORIG, otherwise to 0.
-m4_define([gl_LIBUNISTRING_ARG_OR_ZERO], [m4_if([$1], [$2], [0], [$1])])
diff -Nuar groff-1.22.3.old/src/libs/gnulib/m4/localcharset.m4 groff-1.22.3/src/libs/gnulib/m4/localcharset.m4
--- groff-1.22.3.old/src/libs/gnulib/m4/localcharset.m4	2014-11-04 10:38:35.641518796 +0200
+++ groff-1.22.3/src/libs/gnulib/m4/localcharset.m4	1970-01-01 02:00:00.000000000 +0200
@@ -1,17 +0,0 @@
-# localcharset.m4 serial 7
-dnl Copyright (C) 2002, 2004, 2006, 2009-2014 Free Software Foundation, Inc.
-dnl This file is free software; the Free Software Foundation
-dnl gives unlimited permission to copy and/or distribute it,
-dnl with or without modifications, as long as this notice is preserved.
-
-AC_DEFUN([gl_LOCALCHARSET],
-[
-  dnl Prerequisites of lib/localcharset.c.
-  AC_REQUIRE([AM_LANGINFO_CODESET])
-  AC_REQUIRE([gl_FCNTL_O_FLAGS])
-  AC_CHECK_DECLS_ONCE([getc_unlocked])
-
-  dnl Prerequisites of the lib/Makefile.am snippet.
-  AC_REQUIRE([AC_CANONICAL_HOST])
-  AC_REQUIRE([gl_GLIBC21])
-])
diff -Nuar groff-1.22.3.old/src/libs/gnulib/m4/longlong.m4 groff-1.22.3/src/libs/gnulib/m4/longlong.m4
--- groff-1.22.3.old/src/libs/gnulib/m4/longlong.m4	2014-11-04 10:38:35.641518796 +0200
+++ groff-1.22.3/src/libs/gnulib/m4/longlong.m4	1970-01-01 02:00:00.000000000 +0200
@@ -1,113 +0,0 @@
-# longlong.m4 serial 17
-dnl Copyright (C) 1999-2007, 2009-2014 Free Software Foundation, Inc.
-dnl This file is free software; the Free Software Foundation
-dnl gives unlimited permission to copy and/or distribute it,
-dnl with or without modifications, as long as this notice is preserved.
-
-dnl From Paul Eggert.
-
-# Define HAVE_LONG_LONG_INT if 'long long int' works.
-# This fixes a bug in Autoconf 2.61, and can be faster
-# than what's in Autoconf 2.62 through 2.68.
-
-# Note: If the type 'long long int' exists but is only 32 bits large
-# (as on some very old compilers), HAVE_LONG_LONG_INT will not be
-# defined. In this case you can treat 'long long int' like 'long int'.
-
-AC_DEFUN([AC_TYPE_LONG_LONG_INT],
-[
-  AC_REQUIRE([AC_TYPE_UNSIGNED_LONG_LONG_INT])
-  AC_CACHE_CHECK([for long long int], [ac_cv_type_long_long_int],
-     [ac_cv_type_long_long_int=yes
-      if test "x${ac_cv_prog_cc_c99-no}" = xno; then
-        ac_cv_type_long_long_int=$ac_cv_type_unsigned_long_long_int
-        if test $ac_cv_type_long_long_int = yes; then
-          dnl Catch a bug in Tandem NonStop Kernel (OSS) cc -O circa 2004.
-          dnl If cross compiling, assume the bug is not important, since
-          dnl nobody cross compiles for this platform as far as we know.
-          AC_RUN_IFELSE(
-            [AC_LANG_PROGRAM(
-               [[@%:@include <limits.h>
-                 @%:@ifndef LLONG_MAX
-                 @%:@ define HALF \
-                          (1LL << (sizeof (long long int) * CHAR_BIT - 2))
-                 @%:@ define LLONG_MAX (HALF - 1 + HALF)
-                 @%:@endif]],
-               [[long long int n = 1;
-                 int i;
-                 for (i = 0; ; i++)
-                   {
-                     long long int m = n << i;
-                     if (m >> i != n)
-                       return 1;
-                     if (LLONG_MAX / 2 < m)
-                       break;
-                   }
-                 return 0;]])],
-            [],
-            [ac_cv_type_long_long_int=no],
-            [:])
-        fi
-      fi])
-  if test $ac_cv_type_long_long_int = yes; then
-    AC_DEFINE([HAVE_LONG_LONG_INT], [1],
-      [Define to 1 if the system has the type 'long long int'.])
-  fi
-])
-
-# Define HAVE_UNSIGNED_LONG_LONG_INT if 'unsigned long long int' works.
-# This fixes a bug in Autoconf 2.61, and can be faster
-# than what's in Autoconf 2.62 through 2.68.
-
-# Note: If the type 'unsigned long long int' exists but is only 32 bits
-# large (as on some very old compilers), AC_TYPE_UNSIGNED_LONG_LONG_INT
-# will not be defined. In this case you can treat 'unsigned long long int'
-# like 'unsigned long int'.
-
-AC_DEFUN([AC_TYPE_UNSIGNED_LONG_LONG_INT],
-[
-  AC_CACHE_CHECK([for unsigned long long int],
-    [ac_cv_type_unsigned_long_long_int],
-    [ac_cv_type_unsigned_long_long_int=yes
-     if test "x${ac_cv_prog_cc_c99-no}" = xno; then
-       AC_LINK_IFELSE(
-         [_AC_TYPE_LONG_LONG_SNIPPET],
-         [],
-         [ac_cv_type_unsigned_long_long_int=no])
-     fi])
-  if test $ac_cv_type_unsigned_long_long_int = yes; then
-    AC_DEFINE([HAVE_UNSIGNED_LONG_LONG_INT], [1],
-      [Define to 1 if the system has the type 'unsigned long long int'.])
-  fi
-])
-
-# Expands to a C program that can be used to test for simultaneous support
-# of 'long long' and 'unsigned long long'. We don't want to say that
-# 'long long' is available if 'unsigned long long' is not, or vice versa,
-# because too many programs rely on the symmetry between signed and unsigned
-# integer types (excluding 'bool').
-AC_DEFUN([_AC_TYPE_LONG_LONG_SNIPPET],
-[
-  AC_LANG_PROGRAM(
-    [[/* For now, do not test the preprocessor; as of 2007 there are too many
-         implementations with broken preprocessors.  Perhaps this can
-         be revisited in 2012.  In the meantime, code should not expect
-         #if to work with literals wider than 32 bits.  */
-      /* Test literals.  */
-      long long int ll = 9223372036854775807ll;
-      long long int nll = -9223372036854775807LL;
-      unsigned long long int ull = 18446744073709551615ULL;
-      /* Test constant expressions.   */
-      typedef int a[((-9223372036854775807LL < 0 && 0 < 9223372036854775807ll)
-                     ? 1 : -1)];
-      typedef int b[(18446744073709551615ULL <= (unsigned long long int) -1
-                     ? 1 : -1)];
-      int i = 63;]],
-    [[/* Test availability of runtime routines for shift and division.  */
-      long long int llmax = 9223372036854775807ll;
-      unsigned long long int ullmax = 18446744073709551615ull;
-      return ((ll << 63) | (ll >> 63) | (ll < i) | (ll > i)
-              | (llmax / ll) | (llmax % ll)
-              | (ull << 63) | (ull >> 63) | (ull << i) | (ull >> i)
-              | (ullmax / ull) | (ullmax % ull));]])
-])
diff -Nuar groff-1.22.3.old/src/libs/gnulib/m4/Makefile.am groff-1.22.3/src/libs/gnulib/m4/Makefile.am
--- groff-1.22.3.old/src/libs/gnulib/m4/Makefile.am	2014-11-04 10:38:35.641518796 +0200
+++ groff-1.22.3/src/libs/gnulib/m4/Makefile.am	1970-01-01 02:00:00.000000000 +0200
@@ -1,47 +0,0 @@
-## Process this file with automake to produce Makefile.in.
-
-# Copyright (C) 2014  Free Software Foundation, Inc.
-#
-# This program is free software; you can redistribute it and/or modify
-# it under the terms of the GNU General Public License as published by
-# the Free Software Foundation; either version 2, or (at your option)
-# any later version.
-#
-# This program is distributed in the hope that it will be useful,
-# but WITHOUT ANY WARRANTY; without even the implied warranty of
-# MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
-# GNU General Public License for more details.
-#
-# You should have received a copy of the GNU General Public License
-# along with this program.  If not, see <http://www.gnu.org/licenses/>.
-
-# As a special exception to the GNU General Public License, if you
-# distribute this file as part of a program that contains a
-# configuration script generated by Autoconf, you may include it under
-# the same distribution terms that you use for the rest of that program.
-
-EXTRA_DIST =
-EXTRA_DIST += 00gnulib.m4
-EXTRA_DIST += codeset.m4
-EXTRA_DIST += configmake.m4
-EXTRA_DIST += extensions.m4
-EXTRA_DIST += extern-inline.m4
-EXTRA_DIST += fcntl-o.m4
-EXTRA_DIST += glibc21.m4
-EXTRA_DIST += gnulib-common.m4
-EXTRA_DIST += include_next.m4
-EXTRA_DIST += inttypes-pri.m4
-EXTRA_DIST += inttypes.m4
-EXTRA_DIST += libunistring-base.m4
-EXTRA_DIST += localcharset.m4
-EXTRA_DIST += longlong.m4
-EXTRA_DIST += multiarch.m4
-EXTRA_DIST += stdbool.m4
-EXTRA_DIST += stddef_h.m4
-EXTRA_DIST += stdint.m4
-EXTRA_DIST += warn-on-use.m4
-EXTRA_DIST += wchar_h.m4
-EXTRA_DIST += wchar_t.m4
-EXTRA_DIST += wctype_h.m4
-EXTRA_DIST += wcwidth.m4
-EXTRA_DIST += wint_t.m4
diff -Nuar groff-1.22.3.old/src/libs/gnulib/m4/Makefile.in groff-1.22.3/src/libs/gnulib/m4/Makefile.in
--- groff-1.22.3.old/src/libs/gnulib/m4/Makefile.in	2014-11-04 10:38:35.641518796 +0200
+++ groff-1.22.3/src/libs/gnulib/m4/Makefile.in	1970-01-01 02:00:00.000000000 +0200
@@ -1,608 +0,0 @@
-# Makefile.in generated by automake 1.14 from Makefile.am.
-# @configure_input@
-
-# Copyright (C) 1994-2013 Free Software Foundation, Inc.
-
-# This Makefile.in is free software; the Free Software Foundation
-# gives unlimited permission to copy and/or distribute it,
-# with or without modifications, as long as this notice is preserved.
-
-# This program is distributed in the hope that it will be useful,
-# but WITHOUT ANY WARRANTY, to the extent permitted by law; without
-# even the implied warranty of MERCHANTABILITY or FITNESS FOR A
-# PARTICULAR PURPOSE.
-
-@SET_MAKE@
-
-# Copyright (C) 2014  Free Software Foundation, Inc.
-#
-# This program is free software; you can redistribute it and/or modify
-# it under the terms of the GNU General Public License as published by
-# the Free Software Foundation; either version 2, or (at your option)
-# any later version.
-#
-# This program is distributed in the hope that it will be useful,
-# but WITHOUT ANY WARRANTY; without even the implied warranty of
-# MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
-# GNU General Public License for more details.
-#
-# You should have received a copy of the GNU General Public License
-# along with this program.  If not, see <http://www.gnu.org/licenses/>.
-
-# As a special exception to the GNU General Public License, if you
-# distribute this file as part of a program that contains a
-# configuration script generated by Autoconf, you may include it under
-# the same distribution terms that you use for the rest of that program.
-VPATH = @srcdir@
-am__is_gnu_make = test -n '$(MAKEFILE_LIST)' && test -n '$(MAKELEVEL)'
-am__make_running_with_option = \
-  case $${target_option-} in \
-      ?) ;; \
-      *) echo "am__make_running_with_option: internal error: invalid" \
-              "target option '$${target_option-}' specified" >&2; \
-         exit 1;; \
-  esac; \
-  has_opt=no; \
-  sane_makeflags=$$MAKEFLAGS; \
-  if $(am__is_gnu_make); then \
-    sane_makeflags=$$MFLAGS; \
-  else \
-    case $$MAKEFLAGS in \
-      *\\[\ \	]*) \
-        bs=\\; \
-        sane_makeflags=`printf '%s\n' "$$MAKEFLAGS" \
-          | sed "s/$$bs$$bs[$$bs $$bs	]*//g"`;; \
-    esac; \
-  fi; \
-  skip_next=no; \
-  strip_trailopt () \
-  { \
-    flg=`printf '%s\n' "$$flg" | sed "s/$$1.*$$//"`; \
-  }; \
-  for flg in $$sane_makeflags; do \
-    test $$skip_next = yes && { skip_next=no; continue; }; \
-    case $$flg in \
-      *=*|--*) continue;; \
-        -*I) strip_trailopt 'I'; skip_next=yes;; \
-      -*I?*) strip_trailopt 'I';; \
-        -*O) strip_trailopt 'O'; skip_next=yes;; \
-      -*O?*) strip_trailopt 'O';; \
-        -*l) strip_trailopt 'l'; skip_next=yes;; \
-      -*l?*) strip_trailopt 'l';; \
-      -[dEDm]) skip_next=yes;; \
-      -[JT]) skip_next=yes;; \
-    esac; \
-    case $$flg in \
-      *$$target_option*) has_opt=yes; break;; \
-    esac; \
-  done; \
-  test $$has_opt = yes
-am__make_dryrun = (target_option=n; $(am__make_running_with_option))
-am__make_keepgoing = (target_option=k; $(am__make_running_with_option))
-pkgdatadir = $(datadir)/@PACKAGE@
-pkgincludedir = $(includedir)/@PACKAGE@
-pkglibdir = $(libdir)/@PACKAGE@
-am__cd = CDPATH="$${ZSH_VERSION+.}$(PATH_SEPARATOR)" && cd
-install_sh_DATA = $(install_sh) -c -m 644
-install_sh_PROGRAM = $(install_sh) -c
-install_sh_SCRIPT = $(install_sh) -c
-INSTALL_HEADER = $(INSTALL_DATA)
-transform = $(program_transform_name)
-NORMAL_INSTALL = :
-PRE_INSTALL = :
-POST_INSTALL = :
-NORMAL_UNINSTALL = :
-PRE_UNINSTALL = :
-POST_UNINSTALL = :
-build_triplet = @build@
-host_triplet = @host@
-subdir = m4
-DIST_COMMON = $(srcdir)/Makefile.in $(srcdir)/Makefile.am
-ACLOCAL_M4 = $(top_srcdir)/aclocal.m4
-am__aclocal_m4_deps = $(top_srcdir)/m4/00gnulib.m4 \
-	$(top_srcdir)/m4/codeset.m4 $(top_srcdir)/m4/configmake.m4 \
-	$(top_srcdir)/m4/extensions.m4 \
-	$(top_srcdir)/m4/extern-inline.m4 $(top_srcdir)/m4/fcntl-o.m4 \
-	$(top_srcdir)/m4/glibc21.m4 $(top_srcdir)/m4/gnulib-common.m4 \
-	$(top_srcdir)/m4/include_next.m4 \
-	$(top_srcdir)/m4/inttypes-pri.m4 $(top_srcdir)/m4/inttypes.m4 \
-	$(top_srcdir)/m4/libunistring-base.m4 \
-	$(top_srcdir)/m4/localcharset.m4 $(top_srcdir)/m4/longlong.m4 \
-	$(top_srcdir)/m4/multiarch.m4 $(top_srcdir)/m4/onceonly.m4 \
-	$(top_srcdir)/m4/stdbool.m4 $(top_srcdir)/m4/stddef_h.m4 \
-	$(top_srcdir)/m4/stdint.m4 $(top_srcdir)/m4/warn-on-use.m4 \
-	$(top_srcdir)/m4/wchar_h.m4 $(top_srcdir)/m4/wchar_t.m4 \
-	$(top_srcdir)/m4/wctype_h.m4 $(top_srcdir)/m4/wcwidth.m4 \
-	$(top_srcdir)/m4/wint_t.m4 $(top_srcdir)/configure.ac
-am__configure_deps = $(am__aclocal_m4_deps) $(CONFIGURE_DEPENDENCIES) \
-	$(ACLOCAL_M4)
-mkinstalldirs = $(install_sh) -d
-CONFIG_HEADER = $(top_builddir)/config.h
-CONFIG_CLEAN_FILES =
-CONFIG_CLEAN_VPATH_FILES =
-AM_V_P = $(am__v_P_@AM_V@)
-am__v_P_ = $(am__v_P_@AM_DEFAULT_V@)
-am__v_P_0 = false
-am__v_P_1 = :
-AM_V_GEN = $(am__v_GEN_@AM_V@)
-am__v_GEN_ = $(am__v_GEN_@AM_DEFAULT_V@)
-am__v_GEN_0 = @echo "  GEN     " $@;
-am__v_GEN_1 = 
-AM_V_at = $(am__v_at_@AM_V@)
-am__v_at_ = $(am__v_at_@AM_DEFAULT_V@)
-am__v_at_0 = @
-am__v_at_1 = 
-SOURCES =
-DIST_SOURCES =
-am__can_run_installinfo = \
-  case $$AM_UPDATE_INFO_DIR in \
-    n|no|NO) false;; \
-    *) (install-info --version) >/dev/null 2>&1;; \
-  esac
-am__tagged_files = $(HEADERS) $(SOURCES) $(TAGS_FILES) $(LISP)
-DISTFILES = $(DIST_COMMON) $(DIST_SOURCES) $(TEXINFOS) $(EXTRA_DIST)
-pkglibexecdir = @pkglibexecdir@
-ACLOCAL = @ACLOCAL@
-AMTAR = @AMTAR@
-AM_DEFAULT_VERBOSITY = @AM_DEFAULT_VERBOSITY@
-APPLE_UNIVERSAL_BUILD = @APPLE_UNIVERSAL_BUILD@
-AR = @AR@
-ARFLAGS = @ARFLAGS@
-AUTOCONF = @AUTOCONF@
-AUTOHEADER = @AUTOHEADER@
-AUTOMAKE = @AUTOMAKE@
-AWK = @AWK@
-BITSIZEOF_PTRDIFF_T = @BITSIZEOF_PTRDIFF_T@
-BITSIZEOF_SIG_ATOMIC_T = @BITSIZEOF_SIG_ATOMIC_T@
-BITSIZEOF_SIZE_T = @BITSIZEOF_SIZE_T@
-BITSIZEOF_WCHAR_T = @BITSIZEOF_WCHAR_T@
-BITSIZEOF_WINT_T = @BITSIZEOF_WINT_T@
-CC = @CC@
-CCDEPMODE = @CCDEPMODE@
-CFLAGS = @CFLAGS@
-CPP = @CPP@
-CPPFLAGS = @CPPFLAGS@
-CYGPATH_W = @CYGPATH_W@
-DEFS = @DEFS@
-DEPDIR = @DEPDIR@
-ECHO_C = @ECHO_C@
-ECHO_N = @ECHO_N@
-ECHO_T = @ECHO_T@
-EGREP = @EGREP@
-EXEEXT = @EXEEXT@
-GLIBC21 = @GLIBC21@
-GNULIB_BTOWC = @GNULIB_BTOWC@
-GNULIB_IMAXABS = @GNULIB_IMAXABS@
-GNULIB_IMAXDIV = @GNULIB_IMAXDIV@
-GNULIB_ISWBLANK = @GNULIB_ISWBLANK@
-GNULIB_ISWCTYPE = @GNULIB_ISWCTYPE@
-GNULIB_MBRLEN = @GNULIB_MBRLEN@
-GNULIB_MBRTOWC = @GNULIB_MBRTOWC@
-GNULIB_MBSINIT = @GNULIB_MBSINIT@
-GNULIB_MBSNRTOWCS = @GNULIB_MBSNRTOWCS@
-GNULIB_MBSRTOWCS = @GNULIB_MBSRTOWCS@
-GNULIB_STRTOIMAX = @GNULIB_STRTOIMAX@
-GNULIB_STRTOUMAX = @GNULIB_STRTOUMAX@
-GNULIB_TOWCTRANS = @GNULIB_TOWCTRANS@
-GNULIB_WCPCPY = @GNULIB_WCPCPY@
-GNULIB_WCPNCPY = @GNULIB_WCPNCPY@
-GNULIB_WCRTOMB = @GNULIB_WCRTOMB@
-GNULIB_WCSCASECMP = @GNULIB_WCSCASECMP@
-GNULIB_WCSCAT = @GNULIB_WCSCAT@
-GNULIB_WCSCHR = @GNULIB_WCSCHR@
-GNULIB_WCSCMP = @GNULIB_WCSCMP@
-GNULIB_WCSCOLL = @GNULIB_WCSCOLL@
-GNULIB_WCSCPY = @GNULIB_WCSCPY@
-GNULIB_WCSCSPN = @GNULIB_WCSCSPN@
-GNULIB_WCSDUP = @GNULIB_WCSDUP@
-GNULIB_WCSLEN = @GNULIB_WCSLEN@
-GNULIB_WCSNCASECMP = @GNULIB_WCSNCASECMP@
-GNULIB_WCSNCAT = @GNULIB_WCSNCAT@
-GNULIB_WCSNCMP = @GNULIB_WCSNCMP@
-GNULIB_WCSNCPY = @GNULIB_WCSNCPY@
-GNULIB_WCSNLEN = @GNULIB_WCSNLEN@
-GNULIB_WCSNRTOMBS = @GNULIB_WCSNRTOMBS@
-GNULIB_WCSPBRK = @GNULIB_WCSPBRK@
-GNULIB_WCSRCHR = @GNULIB_WCSRCHR@
-GNULIB_WCSRTOMBS = @GNULIB_WCSRTOMBS@
-GNULIB_WCSSPN = @GNULIB_WCSSPN@
-GNULIB_WCSSTR = @GNULIB_WCSSTR@
-GNULIB_WCSTOK = @GNULIB_WCSTOK@
-GNULIB_WCSWIDTH = @GNULIB_WCSWIDTH@
-GNULIB_WCSXFRM = @GNULIB_WCSXFRM@
-GNULIB_WCTOB = @GNULIB_WCTOB@
-GNULIB_WCTRANS = @GNULIB_WCTRANS@
-GNULIB_WCTYPE = @GNULIB_WCTYPE@
-GNULIB_WCWIDTH = @GNULIB_WCWIDTH@
-GNULIB_WMEMCHR = @GNULIB_WMEMCHR@
-GNULIB_WMEMCMP = @GNULIB_WMEMCMP@
-GNULIB_WMEMCPY = @GNULIB_WMEMCPY@
-GNULIB_WMEMMOVE = @GNULIB_WMEMMOVE@
-GNULIB_WMEMSET = @GNULIB_WMEMSET@
-GREP = @GREP@
-HAVE_BTOWC = @HAVE_BTOWC@
-HAVE_DECL_IMAXABS = @HAVE_DECL_IMAXABS@
-HAVE_DECL_IMAXDIV = @HAVE_DECL_IMAXDIV@
-HAVE_DECL_STRTOIMAX = @HAVE_DECL_STRTOIMAX@
-HAVE_DECL_STRTOUMAX = @HAVE_DECL_STRTOUMAX@
-HAVE_DECL_WCTOB = @HAVE_DECL_WCTOB@
-HAVE_DECL_WCWIDTH = @HAVE_DECL_WCWIDTH@
-HAVE_FEATURES_H = @HAVE_FEATURES_H@
-HAVE_INTTYPES_H = @HAVE_INTTYPES_H@
-HAVE_ISWBLANK = @HAVE_ISWBLANK@
-HAVE_ISWCNTRL = @HAVE_ISWCNTRL@
-HAVE_LONG_LONG_INT = @HAVE_LONG_LONG_INT@
-HAVE_MBRLEN = @HAVE_MBRLEN@
-HAVE_MBRTOWC = @HAVE_MBRTOWC@
-HAVE_MBSINIT = @HAVE_MBSINIT@
-HAVE_MBSNRTOWCS = @HAVE_MBSNRTOWCS@
-HAVE_MBSRTOWCS = @HAVE_MBSRTOWCS@
-HAVE_SIGNED_SIG_ATOMIC_T = @HAVE_SIGNED_SIG_ATOMIC_T@
-HAVE_SIGNED_WCHAR_T = @HAVE_SIGNED_WCHAR_T@
-HAVE_SIGNED_WINT_T = @HAVE_SIGNED_WINT_T@
-HAVE_STDINT_H = @HAVE_STDINT_H@
-HAVE_SYS_BITYPES_H = @HAVE_SYS_BITYPES_H@
-HAVE_SYS_INTTYPES_H = @HAVE_SYS_INTTYPES_H@
-HAVE_SYS_TYPES_H = @HAVE_SYS_TYPES_H@
-HAVE_UNSIGNED_LONG_LONG_INT = @HAVE_UNSIGNED_LONG_LONG_INT@
-HAVE_WCHAR_H = @HAVE_WCHAR_H@
-HAVE_WCHAR_T = @HAVE_WCHAR_T@
-HAVE_WCPCPY = @HAVE_WCPCPY@
-HAVE_WCPNCPY = @HAVE_WCPNCPY@
-HAVE_WCRTOMB = @HAVE_WCRTOMB@
-HAVE_WCSCASECMP = @HAVE_WCSCASECMP@
-HAVE_WCSCAT = @HAVE_WCSCAT@
-HAVE_WCSCHR = @HAVE_WCSCHR@
-HAVE_WCSCMP = @HAVE_WCSCMP@
-HAVE_WCSCOLL = @HAVE_WCSCOLL@
-HAVE_WCSCPY = @HAVE_WCSCPY@
-HAVE_WCSCSPN = @HAVE_WCSCSPN@
-HAVE_WCSDUP = @HAVE_WCSDUP@
-HAVE_WCSLEN = @HAVE_WCSLEN@
-HAVE_WCSNCASECMP = @HAVE_WCSNCASECMP@
-HAVE_WCSNCAT = @HAVE_WCSNCAT@
-HAVE_WCSNCMP = @HAVE_WCSNCMP@
-HAVE_WCSNCPY = @HAVE_WCSNCPY@
-HAVE_WCSNLEN = @HAVE_WCSNLEN@
-HAVE_WCSNRTOMBS = @HAVE_WCSNRTOMBS@
-HAVE_WCSPBRK = @HAVE_WCSPBRK@
-HAVE_WCSRCHR = @HAVE_WCSRCHR@
-HAVE_WCSRTOMBS = @HAVE_WCSRTOMBS@
-HAVE_WCSSPN = @HAVE_WCSSPN@
-HAVE_WCSSTR = @HAVE_WCSSTR@
-HAVE_WCSTOK = @HAVE_WCSTOK@
-HAVE_WCSWIDTH = @HAVE_WCSWIDTH@
-HAVE_WCSXFRM = @HAVE_WCSXFRM@
-HAVE_WCTRANS_T = @HAVE_WCTRANS_T@
-HAVE_WCTYPE_H = @HAVE_WCTYPE_H@
-HAVE_WCTYPE_T = @HAVE_WCTYPE_T@
-HAVE_WINT_T = @HAVE_WINT_T@
-HAVE_WMEMCHR = @HAVE_WMEMCHR@
-HAVE_WMEMCMP = @HAVE_WMEMCMP@
-HAVE_WMEMCPY = @HAVE_WMEMCPY@
-HAVE_WMEMMOVE = @HAVE_WMEMMOVE@
-HAVE_WMEMSET = @HAVE_WMEMSET@
-HAVE__BOOL = @HAVE__BOOL@
-INCLUDE_NEXT = @INCLUDE_NEXT@
-INCLUDE_NEXT_AS_FIRST_DIRECTIVE = @INCLUDE_NEXT_AS_FIRST_DIRECTIVE@
-INSTALL = @INSTALL@
-INSTALL_DATA = @INSTALL_DATA@
-INSTALL_PROGRAM = @INSTALL_PROGRAM@
-INSTALL_SCRIPT = @INSTALL_SCRIPT@
-INSTALL_STRIP_PROGRAM = @INSTALL_STRIP_PROGRAM@
-INT32_MAX_LT_INTMAX_MAX = @INT32_MAX_LT_INTMAX_MAX@
-INT64_MAX_EQ_LONG_MAX = @INT64_MAX_EQ_LONG_MAX@
-LDFLAGS = @LDFLAGS@
-LIBGNU_LIBDEPS = @LIBGNU_LIBDEPS@
-LIBGNU_LTLIBDEPS = @LIBGNU_LTLIBDEPS@
-LIBOBJS = @LIBOBJS@
-LIBS = @LIBS@
-LIBUNISTRING_UNITYPES_H = @LIBUNISTRING_UNITYPES_H@
-LIBUNISTRING_UNIWIDTH_H = @LIBUNISTRING_UNIWIDTH_H@
-LOCALCHARSET_TESTS_ENVIRONMENT = @LOCALCHARSET_TESTS_ENVIRONMENT@
-LTLIBOBJS = @LTLIBOBJS@
-MAKEINFO = @MAKEINFO@
-MKDIR_P = @MKDIR_P@
-NEXT_AS_FIRST_DIRECTIVE_INTTYPES_H = @NEXT_AS_FIRST_DIRECTIVE_INTTYPES_H@
-NEXT_AS_FIRST_DIRECTIVE_STDDEF_H = @NEXT_AS_FIRST_DIRECTIVE_STDDEF_H@
-NEXT_AS_FIRST_DIRECTIVE_STDINT_H = @NEXT_AS_FIRST_DIRECTIVE_STDINT_H@
-NEXT_AS_FIRST_DIRECTIVE_WCHAR_H = @NEXT_AS_FIRST_DIRECTIVE_WCHAR_H@
-NEXT_AS_FIRST_DIRECTIVE_WCTYPE_H = @NEXT_AS_FIRST_DIRECTIVE_WCTYPE_H@
-NEXT_INTTYPES_H = @NEXT_INTTYPES_H@
-NEXT_STDDEF_H = @NEXT_STDDEF_H@
-NEXT_STDINT_H = @NEXT_STDINT_H@
-NEXT_WCHAR_H = @NEXT_WCHAR_H@
-NEXT_WCTYPE_H = @NEXT_WCTYPE_H@
-OBJEXT = @OBJEXT@
-PACKAGE = @PACKAGE@
-PACKAGE_BUGREPORT = @PACKAGE_BUGREPORT@
-PACKAGE_NAME = @PACKAGE_NAME@
-PACKAGE_STRING = @PACKAGE_STRING@
-PACKAGE_TARNAME = @PACKAGE_TARNAME@
-PACKAGE_URL = @PACKAGE_URL@
-PACKAGE_VERSION = @PACKAGE_VERSION@
-PATH_SEPARATOR = @PATH_SEPARATOR@
-PRAGMA_COLUMNS = @PRAGMA_COLUMNS@
-PRAGMA_SYSTEM_HEADER = @PRAGMA_SYSTEM_HEADER@
-PRIPTR_PREFIX = @PRIPTR_PREFIX@
-PRI_MACROS_BROKEN = @PRI_MACROS_BROKEN@
-PTRDIFF_T_SUFFIX = @PTRDIFF_T_SUFFIX@
-RANLIB = @RANLIB@
-REPLACE_BTOWC = @REPLACE_BTOWC@
-REPLACE_ISWBLANK = @REPLACE_ISWBLANK@
-REPLACE_ISWCNTRL = @REPLACE_ISWCNTRL@
-REPLACE_MBRLEN = @REPLACE_MBRLEN@
-REPLACE_MBRTOWC = @REPLACE_MBRTOWC@
-REPLACE_MBSINIT = @REPLACE_MBSINIT@
-REPLACE_MBSNRTOWCS = @REPLACE_MBSNRTOWCS@
-REPLACE_MBSRTOWCS = @REPLACE_MBSRTOWCS@
-REPLACE_MBSTATE_T = @REPLACE_MBSTATE_T@
-REPLACE_NULL = @REPLACE_NULL@
-REPLACE_STRTOIMAX = @REPLACE_STRTOIMAX@
-REPLACE_TOWLOWER = @REPLACE_TOWLOWER@
-REPLACE_WCRTOMB = @REPLACE_WCRTOMB@
-REPLACE_WCSNRTOMBS = @REPLACE_WCSNRTOMBS@
-REPLACE_WCSRTOMBS = @REPLACE_WCSRTOMBS@
-REPLACE_WCSWIDTH = @REPLACE_WCSWIDTH@
-REPLACE_WCTOB = @REPLACE_WCTOB@
-REPLACE_WCWIDTH = @REPLACE_WCWIDTH@
-SET_MAKE = @SET_MAKE@
-SHELL = @SHELL@
-SIG_ATOMIC_T_SUFFIX = @SIG_ATOMIC_T_SUFFIX@
-SIZE_T_SUFFIX = @SIZE_T_SUFFIX@
-STDBOOL_H = @STDBOOL_H@
-STDDEF_H = @STDDEF_H@
-STDINT_H = @STDINT_H@
-STRIP = @STRIP@
-UINT32_MAX_LT_UINTMAX_MAX = @UINT32_MAX_LT_UINTMAX_MAX@
-UINT64_MAX_EQ_ULONG_MAX = @UINT64_MAX_EQ_ULONG_MAX@
-VERSION = @VERSION@
-WCHAR_T_SUFFIX = @WCHAR_T_SUFFIX@
-WINT_T_SUFFIX = @WINT_T_SUFFIX@
-abs_builddir = @abs_builddir@
-abs_srcdir = @abs_srcdir@
-abs_top_builddir = @abs_top_builddir@
-abs_top_srcdir = @abs_top_srcdir@
-ac_ct_CC = @ac_ct_CC@
-am__include = @am__include@
-am__leading_dot = @am__leading_dot@
-am__quote = @am__quote@
-am__tar = @am__tar@
-am__untar = @am__untar@
-bindir = @bindir@
-build = @build@
-build_alias = @build_alias@
-build_cpu = @build_cpu@
-build_os = @build_os@
-build_vendor = @build_vendor@
-builddir = @builddir@
-datadir = @datadir@
-datarootdir = @datarootdir@
-docdir = @docdir@
-dvidir = @dvidir@
-exec_prefix = @exec_prefix@
-gl_LIBOBJS = @gl_LIBOBJS@
-gl_LTLIBOBJS = @gl_LTLIBOBJS@
-host = @host@
-host_alias = @host_alias@
-host_cpu = @host_cpu@
-host_os = @host_os@
-host_vendor = @host_vendor@
-htmldir = @htmldir@
-includedir = @includedir@
-infodir = @infodir@
-install_sh = @install_sh@
-libdir = @libdir@
-libexecdir = @libexecdir@
-lispdir = @lispdir@
-localedir = @localedir@
-localstatedir = @localstatedir@
-mandir = @mandir@
-mkdir_p = @mkdir_p@
-oldincludedir = @oldincludedir@
-pdfdir = @pdfdir@
-prefix = @prefix@
-program_transform_name = @program_transform_name@
-psdir = @psdir@
-runstatedir = @runstatedir@
-sbindir = @sbindir@
-sharedstatedir = @sharedstatedir@
-srcdir = @srcdir@
-sysconfdir = @sysconfdir@
-target_alias = @target_alias@
-top_build_prefix = @top_build_prefix@
-top_builddir = @top_builddir@
-top_srcdir = @top_srcdir@
-EXTRA_DIST = 00gnulib.m4 codeset.m4 configmake.m4 extensions.m4 \
-	extern-inline.m4 fcntl-o.m4 glibc21.m4 gnulib-common.m4 \
-	include_next.m4 inttypes-pri.m4 inttypes.m4 \
-	libunistring-base.m4 localcharset.m4 longlong.m4 multiarch.m4 \
-	stdbool.m4 stddef_h.m4 stdint.m4 warn-on-use.m4 wchar_h.m4 \
-	wchar_t.m4 wctype_h.m4 wcwidth.m4 wint_t.m4
-all: all-am
-
-.SUFFIXES:
-$(srcdir)/Makefile.in:  $(srcdir)/Makefile.am  $(am__configure_deps)
-	@for dep in $?; do \
-	  case '$(am__configure_deps)' in \
-	    *$$dep*) \
-	      ( cd $(top_builddir) && $(MAKE) $(AM_MAKEFLAGS) am--refresh ) \
-	        && { if test -f $@; then exit 0; else break; fi; }; \
-	      exit 1;; \
-	  esac; \
-	done; \
-	echo ' cd $(top_srcdir) && $(AUTOMAKE) --gnu m4/Makefile'; \
-	$(am__cd) $(top_srcdir) && \
-	  $(AUTOMAKE) --gnu m4/Makefile
-.PRECIOUS: Makefile
-Makefile: $(srcdir)/Makefile.in $(top_builddir)/config.status
-	@case '$?' in \
-	  *config.status*) \
-	    cd $(top_builddir) && $(MAKE) $(AM_MAKEFLAGS) am--refresh;; \
-	  *) \
-	    echo ' cd $(top_builddir) && $(SHELL) ./config.status $(subdir)/$@ $(am__depfiles_maybe)'; \
-	    cd $(top_builddir) && $(SHELL) ./config.status $(subdir)/$@ $(am__depfiles_maybe);; \
-	esac;
-
-$(top_builddir)/config.status: $(top_srcdir)/configure $(CONFIG_STATUS_DEPENDENCIES)
-	cd $(top_builddir) && $(MAKE) $(AM_MAKEFLAGS) am--refresh
-
-$(top_srcdir)/configure:  $(am__configure_deps)
-	cd $(top_builddir) && $(MAKE) $(AM_MAKEFLAGS) am--refresh
-$(ACLOCAL_M4):  $(am__aclocal_m4_deps)
-	cd $(top_builddir) && $(MAKE) $(AM_MAKEFLAGS) am--refresh
-$(am__aclocal_m4_deps):
-tags TAGS:
-
-ctags CTAGS:
-
-cscope cscopelist:
-
-
-distdir: $(DISTFILES)
-	@srcdirstrip=`echo "$(srcdir)" | sed 's/[].[^$$\\*]/\\\\&/g'`; \
-	topsrcdirstrip=`echo "$(top_srcdir)" | sed 's/[].[^$$\\*]/\\\\&/g'`; \
-	list='$(DISTFILES)'; \
-	  dist_files=`for file in $$list; do echo $$file; done | \
-	  sed -e "s|^$$srcdirstrip/||;t" \
-	      -e "s|^$$topsrcdirstrip/|$(top_builddir)/|;t"`; \
-	case $$dist_files in \
-	  */*) $(MKDIR_P) `echo "$$dist_files" | \
-			   sed '/\//!d;s|^|$(distdir)/|;s,/[^/]*$$,,' | \
-			   sort -u` ;; \
-	esac; \
-	for file in $$dist_files; do \
-	  if test -f $$file || test -d $$file; then d=.; else d=$(srcdir); fi; \
-	  if test -d $$d/$$file; then \
-	    dir=`echo "/$$file" | sed -e 's,/[^/]*$$,,'`; \
-	    if test -d "$(distdir)/$$file"; then \
-	      find "$(distdir)/$$file" -type d ! -perm -700 -exec chmod u+rwx {} \;; \
-	    fi; \
-	    if test -d $(srcdir)/$$file && test $$d != $(srcdir); then \
-	      cp -fpR $(srcdir)/$$file "$(distdir)$$dir" || exit 1; \
-	      find "$(distdir)/$$file" -type d ! -perm -700 -exec chmod u+rwx {} \;; \
-	    fi; \
-	    cp -fpR $$d/$$file "$(distdir)$$dir" || exit 1; \
-	  else \
-	    test -f "$(distdir)/$$file" \
-	    || cp -p $$d/$$file "$(distdir)/$$file" \
-	    || exit 1; \
-	  fi; \
-	done
-check-am: all-am
-check: check-am
-all-am: Makefile
-installdirs:
-install: install-am
-install-exec: install-exec-am
-install-data: install-data-am
-uninstall: uninstall-am
-
-install-am: all-am
-	@$(MAKE) $(AM_MAKEFLAGS) install-exec-am install-data-am
-
-installcheck: installcheck-am
-install-strip:
-	if test -z '$(STRIP)'; then \
-	  $(MAKE) $(AM_MAKEFLAGS) INSTALL_PROGRAM="$(INSTALL_STRIP_PROGRAM)" \
-	    install_sh_PROGRAM="$(INSTALL_STRIP_PROGRAM)" INSTALL_STRIP_FLAG=-s \
-	      install; \
-	else \
-	  $(MAKE) $(AM_MAKEFLAGS) INSTALL_PROGRAM="$(INSTALL_STRIP_PROGRAM)" \
-	    install_sh_PROGRAM="$(INSTALL_STRIP_PROGRAM)" INSTALL_STRIP_FLAG=-s \
-	    "INSTALL_PROGRAM_ENV=STRIPPROG='$(STRIP)'" install; \
-	fi
-mostlyclean-generic:
-
-clean-generic:
-
-distclean-generic:
-	-test -z "$(CONFIG_CLEAN_FILES)" || rm -f $(CONFIG_CLEAN_FILES)
-	-test . = "$(srcdir)" || test -z "$(CONFIG_CLEAN_VPATH_FILES)" || rm -f $(CONFIG_CLEAN_VPATH_FILES)
-
-maintainer-clean-generic:
-	@echo "This command is intended for maintainers to use"
-	@echo "it deletes files that may require special tools to rebuild."
-clean: clean-am
-
-clean-am: clean-generic mostlyclean-am
-
-distclean: distclean-am
-	-rm -f Makefile
-distclean-am: clean-am distclean-generic
-
-dvi: dvi-am
-
-dvi-am:
-
-html: html-am
-
-html-am:
-
-info: info-am
-
-info-am:
-
-install-data-am:
-
-install-dvi: install-dvi-am
-
-install-dvi-am:
-
-install-exec-am:
-
-install-html: install-html-am
-
-install-html-am:
-
-install-info: install-info-am
-
-install-info-am:
-
-install-man:
-
-install-pdf: install-pdf-am
-
-install-pdf-am:
-
-install-ps: install-ps-am
-
-install-ps-am:
-
-installcheck-am:
-
-maintainer-clean: maintainer-clean-am
-	-rm -f Makefile
-maintainer-clean-am: distclean-am maintainer-clean-generic
-
-mostlyclean: mostlyclean-am
-
-mostlyclean-am: mostlyclean-generic
-
-pdf: pdf-am
-
-pdf-am:
-
-ps: ps-am
-
-ps-am:
-
-uninstall-am:
-
-.MAKE: install-am install-strip
-
-.PHONY: all all-am check check-am clean clean-generic cscopelist-am \
-	ctags-am distclean distclean-generic distdir dvi dvi-am html \
-	html-am info info-am install install-am install-data \
-	install-data-am install-dvi install-dvi-am install-exec \
-	install-exec-am install-html install-html-am install-info \
-	install-info-am install-man install-pdf install-pdf-am \
-	install-ps install-ps-am install-strip installcheck \
-	installcheck-am installdirs maintainer-clean \
-	maintainer-clean-generic mostlyclean mostlyclean-generic pdf \
-	pdf-am ps ps-am tags-am uninstall uninstall-am
-
-
-# Tell versions [3.59,3.63) of GNU make to not export all variables.
-# Otherwise a system limit (for SysV at least) may be exceeded.
-.NOEXPORT:
diff -Nuar groff-1.22.3.old/src/libs/gnulib/m4/multiarch.m4 groff-1.22.3/src/libs/gnulib/m4/multiarch.m4
--- groff-1.22.3.old/src/libs/gnulib/m4/multiarch.m4	2014-11-04 10:38:35.641518796 +0200
+++ groff-1.22.3/src/libs/gnulib/m4/multiarch.m4	1970-01-01 02:00:00.000000000 +0200
@@ -1,62 +0,0 @@
-# multiarch.m4 serial 7
-dnl Copyright (C) 2008-2014 Free Software Foundation, Inc.
-dnl This file is free software; the Free Software Foundation
-dnl gives unlimited permission to copy and/or distribute it,
-dnl with or without modifications, as long as this notice is preserved.
-
-# Determine whether the compiler is or may be producing universal binaries.
-#
-# On Mac OS X 10.5 and later systems, the user can create libraries and
-# executables that work on multiple system types--known as "fat" or
-# "universal" binaries--by specifying multiple '-arch' options to the
-# compiler but only a single '-arch' option to the preprocessor.  Like
-# this:
-#
-#     ./configure CC="gcc -arch i386 -arch x86_64 -arch ppc -arch ppc64" \
-#                 CXX="g++ -arch i386 -arch x86_64 -arch ppc -arch ppc64" \
-#                 CPP="gcc -E" CXXCPP="g++ -E"
-#
-# Detect this situation and set APPLE_UNIVERSAL_BUILD accordingly.
-
-AC_DEFUN_ONCE([gl_MULTIARCH],
-[
-  dnl Code similar to autoconf-2.63 AC_C_BIGENDIAN.
-  gl_cv_c_multiarch=no
-  AC_COMPILE_IFELSE(
-    [AC_LANG_SOURCE(
-      [[#ifndef __APPLE_CC__
-         not a universal capable compiler
-        #endif
-        typedef int dummy;
-      ]])],
-    [
-     dnl Check for potential -arch flags.  It is not universal unless
-     dnl there are at least two -arch flags with different values.
-     arch=
-     prev=
-     for word in ${CC} ${CFLAGS} ${CPPFLAGS} ${LDFLAGS}; do
-       if test -n "$prev"; then
-         case $word in
-           i?86 | x86_64 | ppc | ppc64)
-             if test -z "$arch" || test "$arch" = "$word"; then
-               arch="$word"
-             else
-               gl_cv_c_multiarch=yes
-             fi
-             ;;
-         esac
-         prev=
-       else
-         if test "x$word" = "x-arch"; then
-           prev=arch
-         fi
-       fi
-     done
-    ])
-  if test $gl_cv_c_multiarch = yes; then
-    APPLE_UNIVERSAL_BUILD=1
-  else
-    APPLE_UNIVERSAL_BUILD=0
-  fi
-  AC_SUBST([APPLE_UNIVERSAL_BUILD])
-])
diff -Nuar groff-1.22.3.old/src/libs/gnulib/m4/onceonly.m4 groff-1.22.3/src/libs/gnulib/m4/onceonly.m4
--- groff-1.22.3.old/src/libs/gnulib/m4/onceonly.m4	2014-11-04 10:38:35.641518796 +0200
+++ groff-1.22.3/src/libs/gnulib/m4/onceonly.m4	1970-01-01 02:00:00.000000000 +0200
@@ -1,104 +0,0 @@
-# onceonly.m4 serial 9
-dnl Copyright (C) 2002-2003, 2005-2006, 2008-2014 Free Software Foundation,
-dnl Inc.
-dnl
-dnl This file is free software; you can redistribute it and/or modify
-dnl it under the terms of the GNU General Public License as published by
-dnl the Free Software Foundation; either version 3 of the License, or
-dnl (at your option) any later version.
-dnl
-dnl This file is distributed in the hope that it will be useful,
-dnl but WITHOUT ANY WARRANTY; without even the implied warranty of
-dnl MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
-dnl GNU General Public License for more details.
-dnl
-dnl You should have received a copy of the GNU General Public License
-dnl along with this file.  If not, see <http://www.gnu.org/licenses/>.
-dnl
-dnl As a special exception to the GNU General Public License,
-dnl this file may be distributed as part of a program
-dnl that contains a configuration script generated by Autoconf, under
-dnl the same distribution terms as the rest of that program.
-
-dnl This file defines some "once only" variants of standard autoconf macros.
-dnl   AC_CHECK_HEADERS_ONCE          like  AC_CHECK_HEADERS
-dnl   AC_CHECK_FUNCS_ONCE            like  AC_CHECK_FUNCS
-dnl   AC_CHECK_DECLS_ONCE            like  AC_CHECK_DECLS
-dnl   AC_REQUIRE([AC_FUNC_STRCOLL])  like  AC_FUNC_STRCOLL
-dnl The advantage is that the check for each of the headers/functions/decls
-dnl will be put only once into the 'configure' file. It keeps the size of
-dnl the 'configure' file down, and avoids redundant output when 'configure'
-dnl is run.
-dnl The drawback is that the checks cannot be conditionalized. If you write
-dnl   if some_condition; then gl_CHECK_HEADERS(stdlib.h); fi
-dnl inside an AC_DEFUNed function, the gl_CHECK_HEADERS macro call expands to
-dnl empty, and the check will be inserted before the body of the AC_DEFUNed
-dnl function.
-
-dnl The original code implemented AC_CHECK_HEADERS_ONCE and AC_CHECK_FUNCS_ONCE
-dnl in terms of AC_DEFUN and AC_REQUIRE. This implementation uses diversions to
-dnl named sections DEFAULTS and INIT_PREPARE in order to check all requested
-dnl headers at once, thus reducing the size of 'configure'. It is known to work
-dnl with autoconf 2.57..2.62 at least . The size reduction is ca. 9%.
-
-dnl Autoconf version 2.59 plus gnulib is required; this file is not needed
-dnl with Autoconf 2.60 or greater. But note that autoconf's implementation of
-dnl AC_CHECK_DECLS_ONCE expects a comma-separated list of symbols as first
-dnl argument!
-AC_PREREQ([2.59])
-
-# AC_CHECK_HEADERS_ONCE(HEADER1 HEADER2 ...) is a once-only variant of
-# AC_CHECK_HEADERS(HEADER1 HEADER2 ...).
-AC_DEFUN([AC_CHECK_HEADERS_ONCE], [
-  :
-  m4_foreach_w([gl_HEADER_NAME], [$1], [
-    AC_DEFUN([gl_CHECK_HEADER_]m4_quote(m4_translit(gl_HEADER_NAME,
-                                                    [./-], [___])), [
-      m4_divert_text([INIT_PREPARE],
-        [gl_header_list="$gl_header_list gl_HEADER_NAME"])
-      gl_HEADERS_EXPANSION
-      AH_TEMPLATE(AS_TR_CPP([HAVE_]m4_defn([gl_HEADER_NAME])),
-        [Define to 1 if you have the <]m4_defn([gl_HEADER_NAME])[> header file.])
-    ])
-    AC_REQUIRE([gl_CHECK_HEADER_]m4_quote(m4_translit(gl_HEADER_NAME,
-                                                      [./-], [___])))
-  ])
-])
-m4_define([gl_HEADERS_EXPANSION], [
-  m4_divert_text([DEFAULTS], [gl_header_list=])
-  AC_CHECK_HEADERS([$gl_header_list])
-  m4_define([gl_HEADERS_EXPANSION], [])
-])
-
-# AC_CHECK_FUNCS_ONCE(FUNC1 FUNC2 ...) is a once-only variant of
-# AC_CHECK_FUNCS(FUNC1 FUNC2 ...).
-AC_DEFUN([AC_CHECK_FUNCS_ONCE], [
-  :
-  m4_foreach_w([gl_FUNC_NAME], [$1], [
-    AC_DEFUN([gl_CHECK_FUNC_]m4_defn([gl_FUNC_NAME]), [
-      m4_divert_text([INIT_PREPARE],
-        [gl_func_list="$gl_func_list gl_FUNC_NAME"])
-      gl_FUNCS_EXPANSION
-      AH_TEMPLATE(AS_TR_CPP([HAVE_]m4_defn([gl_FUNC_NAME])),
-        [Define to 1 if you have the ']m4_defn([gl_FUNC_NAME])[' function.])
-    ])
-    AC_REQUIRE([gl_CHECK_FUNC_]m4_defn([gl_FUNC_NAME]))
-  ])
-])
-m4_define([gl_FUNCS_EXPANSION], [
-  m4_divert_text([DEFAULTS], [gl_func_list=])
-  AC_CHECK_FUNCS([$gl_func_list])
-  m4_define([gl_FUNCS_EXPANSION], [])
-])
-
-# AC_CHECK_DECLS_ONCE(DECL1 DECL2 ...) is a once-only variant of
-# AC_CHECK_DECLS(DECL1, DECL2, ...).
-AC_DEFUN([AC_CHECK_DECLS_ONCE], [
-  :
-  m4_foreach_w([gl_DECL_NAME], [$1], [
-    AC_DEFUN([gl_CHECK_DECL_]m4_defn([gl_DECL_NAME]), [
-      AC_CHECK_DECLS(m4_defn([gl_DECL_NAME]))
-    ])
-    AC_REQUIRE([gl_CHECK_DECL_]m4_defn([gl_DECL_NAME]))
-  ])
-])
diff -Nuar groff-1.22.3.old/src/libs/gnulib/m4/stdbool.m4 groff-1.22.3/src/libs/gnulib/m4/stdbool.m4
--- groff-1.22.3.old/src/libs/gnulib/m4/stdbool.m4	2014-11-04 10:38:35.641518796 +0200
+++ groff-1.22.3/src/libs/gnulib/m4/stdbool.m4	1970-01-01 02:00:00.000000000 +0200
@@ -1,100 +0,0 @@
-# Check for stdbool.h that conforms to C99.
-
-dnl Copyright (C) 2002-2006, 2009-2014 Free Software Foundation, Inc.
-dnl This file is free software; the Free Software Foundation
-dnl gives unlimited permission to copy and/or distribute it,
-dnl with or without modifications, as long as this notice is preserved.
-
-#serial 5
-
-# Prepare for substituting <stdbool.h> if it is not supported.
-
-AC_DEFUN([AM_STDBOOL_H],
-[
-  AC_REQUIRE([AC_CHECK_HEADER_STDBOOL])
-
-  # Define two additional variables used in the Makefile substitution.
-
-  if test "$ac_cv_header_stdbool_h" = yes; then
-    STDBOOL_H=''
-  else
-    STDBOOL_H='stdbool.h'
-  fi
-  AC_SUBST([STDBOOL_H])
-  AM_CONDITIONAL([GL_GENERATE_STDBOOL_H], [test -n "$STDBOOL_H"])
-
-  if test "$ac_cv_type__Bool" = yes; then
-    HAVE__BOOL=1
-  else
-    HAVE__BOOL=0
-  fi
-  AC_SUBST([HAVE__BOOL])
-])
-
-# AM_STDBOOL_H will be renamed to gl_STDBOOL_H in the future.
-AC_DEFUN([gl_STDBOOL_H], [AM_STDBOOL_H])
-
-# This version of the macro is needed in autoconf <= 2.68.
-
-AC_DEFUN([AC_CHECK_HEADER_STDBOOL],
-  [AC_CACHE_CHECK([for stdbool.h that conforms to C99],
-     [ac_cv_header_stdbool_h],
-     [AC_COMPILE_IFELSE(
-        [AC_LANG_PROGRAM(
-           [[
-             #include <stdbool.h>
-             #ifndef bool
-              "error: bool is not defined"
-             #endif
-             #ifndef false
-              "error: false is not defined"
-             #endif
-             #if false
-              "error: false is not 0"
-             #endif
-             #ifndef true
-              "error: true is not defined"
-             #endif
-             #if true != 1
-              "error: true is not 1"
-             #endif
-             #ifndef __bool_true_false_are_defined
-              "error: __bool_true_false_are_defined is not defined"
-             #endif
-
-             struct s { _Bool s: 1; _Bool t; } s;
-
-             char a[true == 1 ? 1 : -1];
-             char b[false == 0 ? 1 : -1];
-             char c[__bool_true_false_are_defined == 1 ? 1 : -1];
-             char d[(bool) 0.5 == true ? 1 : -1];
-             /* See body of main program for 'e'.  */
-             char f[(_Bool) 0.0 == false ? 1 : -1];
-             char g[true];
-             char h[sizeof (_Bool)];
-             char i[sizeof s.t];
-             enum { j = false, k = true, l = false * true, m = true * 256 };
-             /* The following fails for
-                HP aC++/ANSI C B3910B A.05.55 [Dec 04 2003]. */
-             _Bool n[m];
-             char o[sizeof n == m * sizeof n[0] ? 1 : -1];
-             char p[-1 - (_Bool) 0 < 0 && -1 - (bool) 0 < 0 ? 1 : -1];
-             /* Catch a bug in an HP-UX C compiler.  See
-                http://gcc.gnu.org/ml/gcc-patches/2003-12/msg02303.html
-                http://lists.gnu.org/archive/html/bug-coreutils/2005-11/msg00161.html
-              */
-             _Bool q = true;
-             _Bool *pq = &q;
-           ]],
-           [[
-             bool e = &s;
-             *pq |= q;
-             *pq |= ! q;
-             /* Refer to every declared value, to avoid compiler optimizations.  */
-             return (!a + !b + !c + !d + !e + !f + !g + !h + !i + !!j + !k + !!l
-                     + !m + !n + !o + !p + !q + !pq);
-           ]])],
-        [ac_cv_header_stdbool_h=yes],
-        [ac_cv_header_stdbool_h=no])])
-   AC_CHECK_TYPES([_Bool])
-])
diff -Nuar groff-1.22.3.old/src/libs/gnulib/m4/stddef_h.m4 groff-1.22.3/src/libs/gnulib/m4/stddef_h.m4
--- groff-1.22.3.old/src/libs/gnulib/m4/stddef_h.m4	2014-11-04 10:38:35.641518796 +0200
+++ groff-1.22.3/src/libs/gnulib/m4/stddef_h.m4	1970-01-01 02:00:00.000000000 +0200
@@ -1,47 +0,0 @@
-dnl A placeholder for POSIX 2008 <stddef.h>, for platforms that have issues.
-# stddef_h.m4 serial 4
-dnl Copyright (C) 2009-2014 Free Software Foundation, Inc.
-dnl This file is free software; the Free Software Foundation
-dnl gives unlimited permission to copy and/or distribute it,
-dnl with or without modifications, as long as this notice is preserved.
-
-AC_DEFUN([gl_STDDEF_H],
-[
-  AC_REQUIRE([gl_STDDEF_H_DEFAULTS])
-  AC_REQUIRE([gt_TYPE_WCHAR_T])
-  STDDEF_H=
-  if test $gt_cv_c_wchar_t = no; then
-    HAVE_WCHAR_T=0
-    STDDEF_H=stddef.h
-  fi
-  AC_CACHE_CHECK([whether NULL can be used in arbitrary expressions],
-    [gl_cv_decl_null_works],
-    [AC_COMPILE_IFELSE([AC_LANG_PROGRAM([[#include <stddef.h>
-      int test[2 * (sizeof NULL == sizeof (void *)) -1];
-]])],
-      [gl_cv_decl_null_works=yes],
-      [gl_cv_decl_null_works=no])])
-  if test $gl_cv_decl_null_works = no; then
-    REPLACE_NULL=1
-    STDDEF_H=stddef.h
-  fi
-  AC_SUBST([STDDEF_H])
-  AM_CONDITIONAL([GL_GENERATE_STDDEF_H], [test -n "$STDDEF_H"])
-  if test -n "$STDDEF_H"; then
-    gl_NEXT_HEADERS([stddef.h])
-  fi
-])
-
-AC_DEFUN([gl_STDDEF_MODULE_INDICATOR],
-[
-  dnl Use AC_REQUIRE here, so that the default settings are expanded once only.
-  AC_REQUIRE([gl_STDDEF_H_DEFAULTS])
-  gl_MODULE_INDICATOR_SET_VARIABLE([$1])
-])
-
-AC_DEFUN([gl_STDDEF_H_DEFAULTS],
-[
-  dnl Assume proper GNU behavior unless another module says otherwise.
-  REPLACE_NULL=0;                AC_SUBST([REPLACE_NULL])
-  HAVE_WCHAR_T=1;                AC_SUBST([HAVE_WCHAR_T])
-])
diff -Nuar groff-1.22.3.old/src/libs/gnulib/m4/stdint.m4 groff-1.22.3/src/libs/gnulib/m4/stdint.m4
--- groff-1.22.3.old/src/libs/gnulib/m4/stdint.m4	2014-11-04 10:38:35.641518796 +0200
+++ groff-1.22.3/src/libs/gnulib/m4/stdint.m4	1970-01-01 02:00:00.000000000 +0200
@@ -1,484 +0,0 @@
-# stdint.m4 serial 43
-dnl Copyright (C) 2001-2014 Free Software Foundation, Inc.
-dnl This file is free software; the Free Software Foundation
-dnl gives unlimited permission to copy and/or distribute it,
-dnl with or without modifications, as long as this notice is preserved.
-
-dnl From Paul Eggert and Bruno Haible.
-dnl Test whether <stdint.h> is supported or must be substituted.
-
-AC_DEFUN_ONCE([gl_STDINT_H],
-[
-  AC_PREREQ([2.59])dnl
-
-  dnl Check for long long int and unsigned long long int.
-  AC_REQUIRE([AC_TYPE_LONG_LONG_INT])
-  if test $ac_cv_type_long_long_int = yes; then
-    HAVE_LONG_LONG_INT=1
-  else
-    HAVE_LONG_LONG_INT=0
-  fi
-  AC_SUBST([HAVE_LONG_LONG_INT])
-  AC_REQUIRE([AC_TYPE_UNSIGNED_LONG_LONG_INT])
-  if test $ac_cv_type_unsigned_long_long_int = yes; then
-    HAVE_UNSIGNED_LONG_LONG_INT=1
-  else
-    HAVE_UNSIGNED_LONG_LONG_INT=0
-  fi
-  AC_SUBST([HAVE_UNSIGNED_LONG_LONG_INT])
-
-  dnl Check for <wchar.h>, in the same way as gl_WCHAR_H does.
-  AC_CHECK_HEADERS_ONCE([wchar.h])
-  if test $ac_cv_header_wchar_h = yes; then
-    HAVE_WCHAR_H=1
-  else
-    HAVE_WCHAR_H=0
-  fi
-  AC_SUBST([HAVE_WCHAR_H])
-
-  dnl Check for <inttypes.h>.
-  dnl AC_INCLUDES_DEFAULT defines $ac_cv_header_inttypes_h.
-  if test $ac_cv_header_inttypes_h = yes; then
-    HAVE_INTTYPES_H=1
-  else
-    HAVE_INTTYPES_H=0
-  fi
-  AC_SUBST([HAVE_INTTYPES_H])
-
-  dnl Check for <sys/types.h>.
-  dnl AC_INCLUDES_DEFAULT defines $ac_cv_header_sys_types_h.
-  if test $ac_cv_header_sys_types_h = yes; then
-    HAVE_SYS_TYPES_H=1
-  else
-    HAVE_SYS_TYPES_H=0
-  fi
-  AC_SUBST([HAVE_SYS_TYPES_H])
-
-  gl_CHECK_NEXT_HEADERS([stdint.h])
-  if test $ac_cv_header_stdint_h = yes; then
-    HAVE_STDINT_H=1
-  else
-    HAVE_STDINT_H=0
-  fi
-  AC_SUBST([HAVE_STDINT_H])
-
-  dnl Now see whether we need a substitute <stdint.h>.
-  if test $ac_cv_header_stdint_h = yes; then
-    AC_CACHE_CHECK([whether stdint.h conforms to C99],
-      [gl_cv_header_working_stdint_h],
-      [gl_cv_header_working_stdint_h=no
-       AC_COMPILE_IFELSE([
-         AC_LANG_PROGRAM([[
-#define _GL_JUST_INCLUDE_SYSTEM_STDINT_H 1 /* work if build isn't clean */
-#include <stdint.h>
-/* Dragonfly defines WCHAR_MIN, WCHAR_MAX only in <wchar.h>.  */
-#if !(defined WCHAR_MIN && defined WCHAR_MAX)
-#error "WCHAR_MIN, WCHAR_MAX not defined in <stdint.h>"
-#endif
-]
-gl_STDINT_INCLUDES
-[
-#ifdef INT8_MAX
-int8_t a1 = INT8_MAX;
-int8_t a1min = INT8_MIN;
-#endif
-#ifdef INT16_MAX
-int16_t a2 = INT16_MAX;
-int16_t a2min = INT16_MIN;
-#endif
-#ifdef INT32_MAX
-int32_t a3 = INT32_MAX;
-int32_t a3min = INT32_MIN;
-#endif
-#ifdef INT64_MAX
-int64_t a4 = INT64_MAX;
-int64_t a4min = INT64_MIN;
-#endif
-#ifdef UINT8_MAX
-uint8_t b1 = UINT8_MAX;
-#else
-typedef int b1[(unsigned char) -1 != 255 ? 1 : -1];
-#endif
-#ifdef UINT16_MAX
-uint16_t b2 = UINT16_MAX;
-#endif
-#ifdef UINT32_MAX
-uint32_t b3 = UINT32_MAX;
-#endif
-#ifdef UINT64_MAX
-uint64_t b4 = UINT64_MAX;
-#endif
-int_least8_t c1 = INT8_C (0x7f);
-int_least8_t c1max = INT_LEAST8_MAX;
-int_least8_t c1min = INT_LEAST8_MIN;
-int_least16_t c2 = INT16_C (0x7fff);
-int_least16_t c2max = INT_LEAST16_MAX;
-int_least16_t c2min = INT_LEAST16_MIN;
-int_least32_t c3 = INT32_C (0x7fffffff);
-int_least32_t c3max = INT_LEAST32_MAX;
-int_least32_t c3min = INT_LEAST32_MIN;
-int_least64_t c4 = INT64_C (0x7fffffffffffffff);
-int_least64_t c4max = INT_LEAST64_MAX;
-int_least64_t c4min = INT_LEAST64_MIN;
-uint_least8_t d1 = UINT8_C (0xff);
-uint_least8_t d1max = UINT_LEAST8_MAX;
-uint_least16_t d2 = UINT16_C (0xffff);
-uint_least16_t d2max = UINT_LEAST16_MAX;
-uint_least32_t d3 = UINT32_C (0xffffffff);
-uint_least32_t d3max = UINT_LEAST32_MAX;
-uint_least64_t d4 = UINT64_C (0xffffffffffffffff);
-uint_least64_t d4max = UINT_LEAST64_MAX;
-int_fast8_t e1 = INT_FAST8_MAX;
-int_fast8_t e1min = INT_FAST8_MIN;
-int_fast16_t e2 = INT_FAST16_MAX;
-int_fast16_t e2min = INT_FAST16_MIN;
-int_fast32_t e3 = INT_FAST32_MAX;
-int_fast32_t e3min = INT_FAST32_MIN;
-int_fast64_t e4 = INT_FAST64_MAX;
-int_fast64_t e4min = INT_FAST64_MIN;
-uint_fast8_t f1 = UINT_FAST8_MAX;
-uint_fast16_t f2 = UINT_FAST16_MAX;
-uint_fast32_t f3 = UINT_FAST32_MAX;
-uint_fast64_t f4 = UINT_FAST64_MAX;
-#ifdef INTPTR_MAX
-intptr_t g = INTPTR_MAX;
-intptr_t gmin = INTPTR_MIN;
-#endif
-#ifdef UINTPTR_MAX
-uintptr_t h = UINTPTR_MAX;
-#endif
-intmax_t i = INTMAX_MAX;
-uintmax_t j = UINTMAX_MAX;
-
-#include <limits.h> /* for CHAR_BIT */
-#define TYPE_MINIMUM(t) \
-  ((t) ((t) 0 < (t) -1 ? (t) 0 : ~ TYPE_MAXIMUM (t)))
-#define TYPE_MAXIMUM(t) \
-  ((t) ((t) 0 < (t) -1 \
-        ? (t) -1 \
-        : ((((t) 1 << (sizeof (t) * CHAR_BIT - 2)) - 1) * 2 + 1)))
-struct s {
-  int check_PTRDIFF:
-      PTRDIFF_MIN == TYPE_MINIMUM (ptrdiff_t)
-      && PTRDIFF_MAX == TYPE_MAXIMUM (ptrdiff_t)
-      ? 1 : -1;
-  /* Detect bug in FreeBSD 6.0 / ia64.  */
-  int check_SIG_ATOMIC:
-      SIG_ATOMIC_MIN == TYPE_MINIMUM (sig_atomic_t)
-      && SIG_ATOMIC_MAX == TYPE_MAXIMUM (sig_atomic_t)
-      ? 1 : -1;
-  int check_SIZE: SIZE_MAX == TYPE_MAXIMUM (size_t) ? 1 : -1;
-  int check_WCHAR:
-      WCHAR_MIN == TYPE_MINIMUM (wchar_t)
-      && WCHAR_MAX == TYPE_MAXIMUM (wchar_t)
-      ? 1 : -1;
-  /* Detect bug in mingw.  */
-  int check_WINT:
-      WINT_MIN == TYPE_MINIMUM (wint_t)
-      && WINT_MAX == TYPE_MAXIMUM (wint_t)
-      ? 1 : -1;
-
-  /* Detect bugs in glibc 2.4 and Solaris 10 stdint.h, among others.  */
-  int check_UINT8_C:
-        (-1 < UINT8_C (0)) == (-1 < (uint_least8_t) 0) ? 1 : -1;
-  int check_UINT16_C:
-        (-1 < UINT16_C (0)) == (-1 < (uint_least16_t) 0) ? 1 : -1;
-
-  /* Detect bugs in OpenBSD 3.9 stdint.h.  */
-#ifdef UINT8_MAX
-  int check_uint8: (uint8_t) -1 == UINT8_MAX ? 1 : -1;
-#endif
-#ifdef UINT16_MAX
-  int check_uint16: (uint16_t) -1 == UINT16_MAX ? 1 : -1;
-#endif
-#ifdef UINT32_MAX
-  int check_uint32: (uint32_t) -1 == UINT32_MAX ? 1 : -1;
-#endif
-#ifdef UINT64_MAX
-  int check_uint64: (uint64_t) -1 == UINT64_MAX ? 1 : -1;
-#endif
-  int check_uint_least8: (uint_least8_t) -1 == UINT_LEAST8_MAX ? 1 : -1;
-  int check_uint_least16: (uint_least16_t) -1 == UINT_LEAST16_MAX ? 1 : -1;
-  int check_uint_least32: (uint_least32_t) -1 == UINT_LEAST32_MAX ? 1 : -1;
-  int check_uint_least64: (uint_least64_t) -1 == UINT_LEAST64_MAX ? 1 : -1;
-  int check_uint_fast8: (uint_fast8_t) -1 == UINT_FAST8_MAX ? 1 : -1;
-  int check_uint_fast16: (uint_fast16_t) -1 == UINT_FAST16_MAX ? 1 : -1;
-  int check_uint_fast32: (uint_fast32_t) -1 == UINT_FAST32_MAX ? 1 : -1;
-  int check_uint_fast64: (uint_fast64_t) -1 == UINT_FAST64_MAX ? 1 : -1;
-  int check_uintptr: (uintptr_t) -1 == UINTPTR_MAX ? 1 : -1;
-  int check_uintmax: (uintmax_t) -1 == UINTMAX_MAX ? 1 : -1;
-  int check_size: (size_t) -1 == SIZE_MAX ? 1 : -1;
-};
-         ]])],
-         [dnl Determine whether the various *_MIN, *_MAX macros are usable
-          dnl in preprocessor expression. We could do it by compiling a test
-          dnl program for each of these macros. It is faster to run a program
-          dnl that inspects the macro expansion.
-          dnl This detects a bug on HP-UX 11.23/ia64.
-          AC_RUN_IFELSE([
-            AC_LANG_PROGRAM([[
-#define _GL_JUST_INCLUDE_SYSTEM_STDINT_H 1 /* work if build isn't clean */
-#include <stdint.h>
-]
-gl_STDINT_INCLUDES
-[
-#include <stdio.h>
-#include <string.h>
-#define MVAL(macro) MVAL1(macro)
-#define MVAL1(expression) #expression
-static const char *macro_values[] =
-  {
-#ifdef INT8_MAX
-    MVAL (INT8_MAX),
-#endif
-#ifdef INT16_MAX
-    MVAL (INT16_MAX),
-#endif
-#ifdef INT32_MAX
-    MVAL (INT32_MAX),
-#endif
-#ifdef INT64_MAX
-    MVAL (INT64_MAX),
-#endif
-#ifdef UINT8_MAX
-    MVAL (UINT8_MAX),
-#endif
-#ifdef UINT16_MAX
-    MVAL (UINT16_MAX),
-#endif
-#ifdef UINT32_MAX
-    MVAL (UINT32_MAX),
-#endif
-#ifdef UINT64_MAX
-    MVAL (UINT64_MAX),
-#endif
-    NULL
-  };
-]], [[
-  const char **mv;
-  for (mv = macro_values; *mv != NULL; mv++)
-    {
-      const char *value = *mv;
-      /* Test whether it looks like a cast expression.  */
-      if (strncmp (value, "((unsigned int)"/*)*/, 15) == 0
-          || strncmp (value, "((unsigned short)"/*)*/, 17) == 0
-          || strncmp (value, "((unsigned char)"/*)*/, 16) == 0
-          || strncmp (value, "((int)"/*)*/, 6) == 0
-          || strncmp (value, "((signed short)"/*)*/, 15) == 0
-          || strncmp (value, "((signed char)"/*)*/, 14) == 0)
-        return mv - macro_values + 1;
-    }
-  return 0;
-]])],
-              [gl_cv_header_working_stdint_h=yes],
-              [],
-              [dnl When cross-compiling, assume it works.
-               gl_cv_header_working_stdint_h=yes
-              ])
-         ])
-      ])
-  fi
-  if test "$gl_cv_header_working_stdint_h" = yes; then
-    STDINT_H=
-  else
-    dnl Check for <sys/inttypes.h>, and for
-    dnl <sys/bitypes.h> (used in Linux libc4 >= 4.6.7 and libc5).
-    AC_CHECK_HEADERS([sys/inttypes.h sys/bitypes.h])
-    if test $ac_cv_header_sys_inttypes_h = yes; then
-      HAVE_SYS_INTTYPES_H=1
-    else
-      HAVE_SYS_INTTYPES_H=0
-    fi
-    AC_SUBST([HAVE_SYS_INTTYPES_H])
-    if test $ac_cv_header_sys_bitypes_h = yes; then
-      HAVE_SYS_BITYPES_H=1
-    else
-      HAVE_SYS_BITYPES_H=0
-    fi
-    AC_SUBST([HAVE_SYS_BITYPES_H])
-
-    gl_STDINT_TYPE_PROPERTIES
-    STDINT_H=stdint.h
-  fi
-  AC_SUBST([STDINT_H])
-  AM_CONDITIONAL([GL_GENERATE_STDINT_H], [test -n "$STDINT_H"])
-])
-
-dnl gl_STDINT_BITSIZEOF(TYPES, INCLUDES)
-dnl Determine the size of each of the given types in bits.
-AC_DEFUN([gl_STDINT_BITSIZEOF],
-[
-  dnl Use a shell loop, to avoid bloating configure, and
-  dnl - extra AH_TEMPLATE calls, so that autoheader knows what to put into
-  dnl   config.h.in,
-  dnl - extra AC_SUBST calls, so that the right substitutions are made.
-  m4_foreach_w([gltype], [$1],
-    [AH_TEMPLATE([BITSIZEOF_]m4_translit(gltype,[abcdefghijklmnopqrstuvwxyz ],[ABCDEFGHIJKLMNOPQRSTUVWXYZ_]),
-       [Define to the number of bits in type ']gltype['.])])
-  for gltype in $1 ; do
-    AC_CACHE_CHECK([for bit size of $gltype], [gl_cv_bitsizeof_${gltype}],
-      [AC_COMPUTE_INT([result], [sizeof ($gltype) * CHAR_BIT],
-         [$2
-#include <limits.h>], [result=unknown])
-       eval gl_cv_bitsizeof_${gltype}=\$result
-      ])
-    eval result=\$gl_cv_bitsizeof_${gltype}
-    if test $result = unknown; then
-      dnl Use a nonempty default, because some compilers, such as IRIX 5 cc,
-      dnl do a syntax check even on unused #if conditions and give an error
-      dnl on valid C code like this:
-      dnl   #if 0
-      dnl   # if  > 32
-      dnl   # endif
-      dnl   #endif
-      result=0
-    fi
-    GLTYPE=`echo "$gltype" | tr 'abcdefghijklmnopqrstuvwxyz ' 'ABCDEFGHIJKLMNOPQRSTUVWXYZ_'`
-    AC_DEFINE_UNQUOTED([BITSIZEOF_${GLTYPE}], [$result])
-    eval BITSIZEOF_${GLTYPE}=\$result
-  done
-  m4_foreach_w([gltype], [$1],
-    [AC_SUBST([BITSIZEOF_]m4_translit(gltype,[abcdefghijklmnopqrstuvwxyz ],[ABCDEFGHIJKLMNOPQRSTUVWXYZ_]))])
-])
-
-dnl gl_CHECK_TYPES_SIGNED(TYPES, INCLUDES)
-dnl Determine the signedness of each of the given types.
-dnl Define HAVE_SIGNED_TYPE if type is signed.
-AC_DEFUN([gl_CHECK_TYPES_SIGNED],
-[
-  dnl Use a shell loop, to avoid bloating configure, and
-  dnl - extra AH_TEMPLATE calls, so that autoheader knows what to put into
-  dnl   config.h.in,
-  dnl - extra AC_SUBST calls, so that the right substitutions are made.
-  m4_foreach_w([gltype], [$1],
-    [AH_TEMPLATE([HAVE_SIGNED_]m4_translit(gltype,[abcdefghijklmnopqrstuvwxyz ],[ABCDEFGHIJKLMNOPQRSTUVWXYZ_]),
-       [Define to 1 if ']gltype[' is a signed integer type.])])
-  for gltype in $1 ; do
-    AC_CACHE_CHECK([whether $gltype is signed], [gl_cv_type_${gltype}_signed],
-      [AC_COMPILE_IFELSE(
-         [AC_LANG_PROGRAM([$2[
-            int verify[2 * (($gltype) -1 < ($gltype) 0) - 1];]])],
-         result=yes, result=no)
-       eval gl_cv_type_${gltype}_signed=\$result
-      ])
-    eval result=\$gl_cv_type_${gltype}_signed
-    GLTYPE=`echo $gltype | tr 'abcdefghijklmnopqrstuvwxyz ' 'ABCDEFGHIJKLMNOPQRSTUVWXYZ_'`
-    if test "$result" = yes; then
-      AC_DEFINE_UNQUOTED([HAVE_SIGNED_${GLTYPE}], [1])
-      eval HAVE_SIGNED_${GLTYPE}=1
-    else
-      eval HAVE_SIGNED_${GLTYPE}=0
-    fi
-  done
-  m4_foreach_w([gltype], [$1],
-    [AC_SUBST([HAVE_SIGNED_]m4_translit(gltype,[abcdefghijklmnopqrstuvwxyz ],[ABCDEFGHIJKLMNOPQRSTUVWXYZ_]))])
-])
-
-dnl gl_INTEGER_TYPE_SUFFIX(TYPES, INCLUDES)
-dnl Determine the suffix to use for integer constants of the given types.
-dnl Define t_SUFFIX for each such type.
-AC_DEFUN([gl_INTEGER_TYPE_SUFFIX],
-[
-  dnl Use a shell loop, to avoid bloating configure, and
-  dnl - extra AH_TEMPLATE calls, so that autoheader knows what to put into
-  dnl   config.h.in,
-  dnl - extra AC_SUBST calls, so that the right substitutions are made.
-  m4_foreach_w([gltype], [$1],
-    [AH_TEMPLATE(m4_translit(gltype,[abcdefghijklmnopqrstuvwxyz ],[ABCDEFGHIJKLMNOPQRSTUVWXYZ_])[_SUFFIX],
-       [Define to l, ll, u, ul, ull, etc., as suitable for
-        constants of type ']gltype['.])])
-  for gltype in $1 ; do
-    AC_CACHE_CHECK([for $gltype integer literal suffix],
-      [gl_cv_type_${gltype}_suffix],
-      [eval gl_cv_type_${gltype}_suffix=no
-       eval result=\$gl_cv_type_${gltype}_signed
-       if test "$result" = yes; then
-         glsufu=
-       else
-         glsufu=u
-       fi
-       for glsuf in "$glsufu" ${glsufu}l ${glsufu}ll ${glsufu}i64; do
-         case $glsuf in
-           '')  gltype1='int';;
-           l)   gltype1='long int';;
-           ll)  gltype1='long long int';;
-           i64) gltype1='__int64';;
-           u)   gltype1='unsigned int';;
-           ul)  gltype1='unsigned long int';;
-           ull) gltype1='unsigned long long int';;
-           ui64)gltype1='unsigned __int64';;
-         esac
-         AC_COMPILE_IFELSE(
-           [AC_LANG_PROGRAM([$2[
-              extern $gltype foo;
-              extern $gltype1 foo;]])],
-           [eval gl_cv_type_${gltype}_suffix=\$glsuf])
-         eval result=\$gl_cv_type_${gltype}_suffix
-         test "$result" != no && break
-       done])
-    GLTYPE=`echo $gltype | tr 'abcdefghijklmnopqrstuvwxyz ' 'ABCDEFGHIJKLMNOPQRSTUVWXYZ_'`
-    eval result=\$gl_cv_type_${gltype}_suffix
-    test "$result" = no && result=
-    eval ${GLTYPE}_SUFFIX=\$result
-    AC_DEFINE_UNQUOTED([${GLTYPE}_SUFFIX], [$result])
-  done
-  m4_foreach_w([gltype], [$1],
-    [AC_SUBST(m4_translit(gltype,[abcdefghijklmnopqrstuvwxyz ],[ABCDEFGHIJKLMNOPQRSTUVWXYZ_])[_SUFFIX])])
-])
-
-dnl gl_STDINT_INCLUDES
-AC_DEFUN([gl_STDINT_INCLUDES],
-[[
-  /* BSD/OS 4.0.1 has a bug: <stddef.h>, <stdio.h> and <time.h> must be
-     included before <wchar.h>.  */
-  #include <stddef.h>
-  #include <signal.h>
-  #if HAVE_WCHAR_H
-  # include <stdio.h>
-  # include <time.h>
-  # include <wchar.h>
-  #endif
-]])
-
-dnl gl_STDINT_TYPE_PROPERTIES
-dnl Compute HAVE_SIGNED_t, BITSIZEOF_t and t_SUFFIX, for all the types t
-dnl of interest to stdint.in.h.
-AC_DEFUN([gl_STDINT_TYPE_PROPERTIES],
-[
-  AC_REQUIRE([gl_MULTIARCH])
-  if test $APPLE_UNIVERSAL_BUILD = 0; then
-    gl_STDINT_BITSIZEOF([ptrdiff_t size_t],
-      [gl_STDINT_INCLUDES])
-  fi
-  gl_STDINT_BITSIZEOF([sig_atomic_t wchar_t wint_t],
-    [gl_STDINT_INCLUDES])
-  gl_CHECK_TYPES_SIGNED([sig_atomic_t wchar_t wint_t],
-    [gl_STDINT_INCLUDES])
-  gl_cv_type_ptrdiff_t_signed=yes
-  gl_cv_type_size_t_signed=no
-  if test $APPLE_UNIVERSAL_BUILD = 0; then
-    gl_INTEGER_TYPE_SUFFIX([ptrdiff_t size_t],
-      [gl_STDINT_INCLUDES])
-  fi
-  gl_INTEGER_TYPE_SUFFIX([sig_atomic_t wchar_t wint_t],
-    [gl_STDINT_INCLUDES])
-
-  dnl If wint_t is smaller than 'int', it cannot satisfy the ISO C 99
-  dnl requirement that wint_t is "unchanged by default argument promotions".
-  dnl In this case gnulib's <wchar.h> and <wctype.h> override wint_t.
-  dnl Set the variable BITSIZEOF_WINT_T accordingly.
-  if test $BITSIZEOF_WINT_T -lt 32; then
-    BITSIZEOF_WINT_T=32
-  fi
-])
-
-dnl Autoconf >= 2.61 has AC_COMPUTE_INT built-in.
-dnl Remove this when we can assume autoconf >= 2.61.
-m4_ifdef([AC_COMPUTE_INT], [], [
-  AC_DEFUN([AC_COMPUTE_INT], [_AC_COMPUTE_INT([$2],[$1],[$3],[$4])])
-])
-
-# Hey Emacs!
-# Local Variables:
-# indent-tabs-mode: nil
-# End:
diff -Nuar groff-1.22.3.old/src/libs/gnulib/m4/warn-on-use.m4 groff-1.22.3/src/libs/gnulib/m4/warn-on-use.m4
--- groff-1.22.3.old/src/libs/gnulib/m4/warn-on-use.m4	2014-11-04 10:38:35.641518796 +0200
+++ groff-1.22.3/src/libs/gnulib/m4/warn-on-use.m4	1970-01-01 02:00:00.000000000 +0200
@@ -1,47 +0,0 @@
-# warn-on-use.m4 serial 5
-dnl Copyright (C) 2010-2014 Free Software Foundation, Inc.
-dnl This file is free software; the Free Software Foundation
-dnl gives unlimited permission to copy and/or distribute it,
-dnl with or without modifications, as long as this notice is preserved.
-
-# gl_WARN_ON_USE_PREPARE(INCLUDES, NAMES)
-# ---------------------------------------
-# For each whitespace-separated element in the list of NAMES, define
-# HAVE_RAW_DECL_name if the function has a declaration among INCLUDES
-# even after being undefined as a macro.
-#
-# See warn-on-use.h for some hints on how to poison function names, as
-# well as ideas on poisoning global variables and macros.  NAMES may
-# include global variables, but remember that only functions work with
-# _GL_WARN_ON_USE.  Typically, INCLUDES only needs to list a single
-# header, but if the replacement header pulls in other headers because
-# some systems declare functions in the wrong header, then INCLUDES
-# should do likewise.
-#
-# It is generally safe to assume declarations for functions declared
-# in the intersection of C89 and C11 (such as printf) without
-# needing gl_WARN_ON_USE_PREPARE.
-AC_DEFUN([gl_WARN_ON_USE_PREPARE],
-[
-  m4_foreach_w([gl_decl], [$2],
-    [AH_TEMPLATE([HAVE_RAW_DECL_]AS_TR_CPP(m4_defn([gl_decl])),
-      [Define to 1 if ]m4_defn([gl_decl])[ is declared even after
-       undefining macros.])])dnl
-dnl FIXME: gl_Symbol must be used unquoted until we can assume
-dnl autoconf 2.64 or newer.
-  for gl_func in m4_flatten([$2]); do
-    AS_VAR_PUSHDEF([gl_Symbol], [gl_cv_have_raw_decl_$gl_func])dnl
-    AC_CACHE_CHECK([whether $gl_func is declared without a macro],
-      gl_Symbol,
-      [AC_COMPILE_IFELSE([AC_LANG_PROGRAM([$1],
-[@%:@undef $gl_func
-  (void) $gl_func;])],
-        [AS_VAR_SET(gl_Symbol, [yes])], [AS_VAR_SET(gl_Symbol, [no])])])
-    AS_VAR_IF(gl_Symbol, [yes],
-      [AC_DEFINE_UNQUOTED(AS_TR_CPP([HAVE_RAW_DECL_$gl_func]), [1])
-       dnl shortcut - if the raw declaration exists, then set a cache
-       dnl variable to allow skipping any later AC_CHECK_DECL efforts
-       eval ac_cv_have_decl_$gl_func=yes])
-    AS_VAR_POPDEF([gl_Symbol])dnl
-  done
-])
diff -Nuar groff-1.22.3.old/src/libs/gnulib/m4/wchar_h.m4 groff-1.22.3/src/libs/gnulib/m4/wchar_h.m4
--- groff-1.22.3.old/src/libs/gnulib/m4/wchar_h.m4	2014-11-04 10:38:35.641518796 +0200
+++ groff-1.22.3/src/libs/gnulib/m4/wchar_h.m4	1970-01-01 02:00:00.000000000 +0200
@@ -1,225 +0,0 @@
-dnl A placeholder for ISO C99 <wchar.h>, for platforms that have issues.
-
-dnl Copyright (C) 2007-2014 Free Software Foundation, Inc.
-dnl This file is free software; the Free Software Foundation
-dnl gives unlimited permission to copy and/or distribute it,
-dnl with or without modifications, as long as this notice is preserved.
-
-dnl Written by Eric Blake.
-
-# wchar_h.m4 serial 39
-
-AC_DEFUN([gl_WCHAR_H],
-[
-  AC_REQUIRE([gl_WCHAR_H_DEFAULTS])
-  AC_REQUIRE([gl_WCHAR_H_INLINE_OK])
-  dnl Prepare for creating substitute <wchar.h>.
-  dnl Check for <wchar.h> (missing in Linux uClibc when built without wide
-  dnl character support).
-  dnl <wchar.h> is always overridden, because of GNULIB_POSIXCHECK.
-  gl_CHECK_NEXT_HEADERS([wchar.h])
-  if test $ac_cv_header_wchar_h = yes; then
-    HAVE_WCHAR_H=1
-  else
-    HAVE_WCHAR_H=0
-  fi
-  AC_SUBST([HAVE_WCHAR_H])
-
-  AC_REQUIRE([gl_FEATURES_H])
-
-  AC_REQUIRE([gt_TYPE_WINT_T])
-  if test $gt_cv_c_wint_t = yes; then
-    HAVE_WINT_T=1
-  else
-    HAVE_WINT_T=0
-  fi
-  AC_SUBST([HAVE_WINT_T])
-
-  dnl Check for declarations of anything we want to poison if the
-  dnl corresponding gnulib module is not in use.
-  gl_WARN_ON_USE_PREPARE([[
-/* Tru64 with Desktop Toolkit C has a bug: <stdio.h> must be included before
-   <wchar.h>.
-   BSD/OS 4.0.1 has a bug: <stddef.h>, <stdio.h> and <time.h> must be
-   included before <wchar.h>.  */
-#if !(defined __GLIBC__ && !defined __UCLIBC__)
-# include <stddef.h>
-# include <stdio.h>
-# include <time.h>
-#endif
-#include <wchar.h>
-    ]],
-    [btowc wctob mbsinit mbrtowc mbrlen mbsrtowcs mbsnrtowcs wcrtomb
-     wcsrtombs wcsnrtombs wcwidth wmemchr wmemcmp wmemcpy wmemmove wmemset
-     wcslen wcsnlen wcscpy wcpcpy wcsncpy wcpncpy wcscat wcsncat wcscmp
-     wcsncmp wcscasecmp wcsncasecmp wcscoll wcsxfrm wcsdup wcschr wcsrchr
-     wcscspn wcsspn wcspbrk wcsstr wcstok wcswidth
-    ])
-])
-
-dnl Check whether <wchar.h> is usable at all.
-AC_DEFUN([gl_WCHAR_H_INLINE_OK],
-[
-  dnl Test whether <wchar.h> suffers due to the transition from '__inline' to
-  dnl 'gnu_inline'. See <http://sourceware.org/bugzilla/show_bug.cgi?id=4022>
-  dnl and <http://gcc.gnu.org/bugzilla/show_bug.cgi?id=42440>. In summary,
-  dnl glibc version 2.5 or older, together with gcc version 4.3 or newer and
-  dnl the option -std=c99 or -std=gnu99, leads to a broken <wchar.h>.
-  AC_CACHE_CHECK([whether <wchar.h> uses 'inline' correctly],
-    [gl_cv_header_wchar_h_correct_inline],
-    [gl_cv_header_wchar_h_correct_inline=yes
-     AC_LANG_CONFTEST([
-       AC_LANG_SOURCE([[#define wcstod renamed_wcstod
-/* Tru64 with Desktop Toolkit C has a bug: <stdio.h> must be included before
-   <wchar.h>.
-   BSD/OS 4.0.1 has a bug: <stddef.h>, <stdio.h> and <time.h> must be
-   included before <wchar.h>.  */
-#include <stddef.h>
-#include <stdio.h>
-#include <time.h>
-#include <wchar.h>
-extern int zero (void);
-int main () { return zero(); }
-]])])
-     if AC_TRY_EVAL([ac_compile]); then
-       mv conftest.$ac_objext conftest1.$ac_objext
-       AC_LANG_CONFTEST([
-         AC_LANG_SOURCE([[#define wcstod renamed_wcstod
-/* Tru64 with Desktop Toolkit C has a bug: <stdio.h> must be included before
-   <wchar.h>.
-   BSD/OS 4.0.1 has a bug: <stddef.h>, <stdio.h> and <time.h> must be
-   included before <wchar.h>.  */
-#include <stddef.h>
-#include <stdio.h>
-#include <time.h>
-#include <wchar.h>
-int zero (void) { return 0; }
-]])])
-       if AC_TRY_EVAL([ac_compile]); then
-         mv conftest.$ac_objext conftest2.$ac_objext
-         if $CC -o conftest$ac_exeext $CFLAGS $LDFLAGS conftest1.$ac_objext conftest2.$ac_objext $LIBS >&AS_MESSAGE_LOG_FD 2>&1; then
-           :
-         else
-           gl_cv_header_wchar_h_correct_inline=no
-         fi
-       fi
-     fi
-     rm -f conftest1.$ac_objext conftest2.$ac_objext conftest$ac_exeext
-    ])
-  if test $gl_cv_header_wchar_h_correct_inline = no; then
-    AC_MSG_ERROR([<wchar.h> cannot be used with this compiler ($CC $CFLAGS $CPPFLAGS).
-This is a known interoperability problem of glibc <= 2.5 with gcc >= 4.3 in
-C99 mode. You have four options:
-  - Add the flag -fgnu89-inline to CC and reconfigure, or
-  - Fix your include files, using parts of
-    <http://sourceware.org/git/?p=glibc.git;a=commitdiff;h=b037a293a48718af30d706c2e18c929d0e69a621>, or
-  - Use a gcc version older than 4.3, or
-  - Don't use the flags -std=c99 or -std=gnu99.
-Configuration aborted.])
-  fi
-])
-
-AC_DEFUN([gl_WCHAR_MODULE_INDICATOR],
-[
-  dnl Use AC_REQUIRE here, so that the default settings are expanded once only.
-  AC_REQUIRE([gl_WCHAR_H_DEFAULTS])
-  gl_MODULE_INDICATOR_SET_VARIABLE([$1])
-  dnl Define it also as a C macro, for the benefit of the unit tests.
-  gl_MODULE_INDICATOR_FOR_TESTS([$1])
-])
-
-AC_DEFUN([gl_WCHAR_H_DEFAULTS],
-[
-  GNULIB_BTOWC=0;       AC_SUBST([GNULIB_BTOWC])
-  GNULIB_WCTOB=0;       AC_SUBST([GNULIB_WCTOB])
-  GNULIB_MBSINIT=0;     AC_SUBST([GNULIB_MBSINIT])
-  GNULIB_MBRTOWC=0;     AC_SUBST([GNULIB_MBRTOWC])
-  GNULIB_MBRLEN=0;      AC_SUBST([GNULIB_MBRLEN])
-  GNULIB_MBSRTOWCS=0;   AC_SUBST([GNULIB_MBSRTOWCS])
-  GNULIB_MBSNRTOWCS=0;  AC_SUBST([GNULIB_MBSNRTOWCS])
-  GNULIB_WCRTOMB=0;     AC_SUBST([GNULIB_WCRTOMB])
-  GNULIB_WCSRTOMBS=0;   AC_SUBST([GNULIB_WCSRTOMBS])
-  GNULIB_WCSNRTOMBS=0;  AC_SUBST([GNULIB_WCSNRTOMBS])
-  GNULIB_WCWIDTH=0;     AC_SUBST([GNULIB_WCWIDTH])
-  GNULIB_WMEMCHR=0;     AC_SUBST([GNULIB_WMEMCHR])
-  GNULIB_WMEMCMP=0;     AC_SUBST([GNULIB_WMEMCMP])
-  GNULIB_WMEMCPY=0;     AC_SUBST([GNULIB_WMEMCPY])
-  GNULIB_WMEMMOVE=0;    AC_SUBST([GNULIB_WMEMMOVE])
-  GNULIB_WMEMSET=0;     AC_SUBST([GNULIB_WMEMSET])
-  GNULIB_WCSLEN=0;      AC_SUBST([GNULIB_WCSLEN])
-  GNULIB_WCSNLEN=0;     AC_SUBST([GNULIB_WCSNLEN])
-  GNULIB_WCSCPY=0;      AC_SUBST([GNULIB_WCSCPY])
-  GNULIB_WCPCPY=0;      AC_SUBST([GNULIB_WCPCPY])
-  GNULIB_WCSNCPY=0;     AC_SUBST([GNULIB_WCSNCPY])
-  GNULIB_WCPNCPY=0;     AC_SUBST([GNULIB_WCPNCPY])
-  GNULIB_WCSCAT=0;      AC_SUBST([GNULIB_WCSCAT])
-  GNULIB_WCSNCAT=0;     AC_SUBST([GNULIB_WCSNCAT])
-  GNULIB_WCSCMP=0;      AC_SUBST([GNULIB_WCSCMP])
-  GNULIB_WCSNCMP=0;     AC_SUBST([GNULIB_WCSNCMP])
-  GNULIB_WCSCASECMP=0;  AC_SUBST([GNULIB_WCSCASECMP])
-  GNULIB_WCSNCASECMP=0; AC_SUBST([GNULIB_WCSNCASECMP])
-  GNULIB_WCSCOLL=0;     AC_SUBST([GNULIB_WCSCOLL])
-  GNULIB_WCSXFRM=0;     AC_SUBST([GNULIB_WCSXFRM])
-  GNULIB_WCSDUP=0;      AC_SUBST([GNULIB_WCSDUP])
-  GNULIB_WCSCHR=0;      AC_SUBST([GNULIB_WCSCHR])
-  GNULIB_WCSRCHR=0;     AC_SUBST([GNULIB_WCSRCHR])
-  GNULIB_WCSCSPN=0;     AC_SUBST([GNULIB_WCSCSPN])
-  GNULIB_WCSSPN=0;      AC_SUBST([GNULIB_WCSSPN])
-  GNULIB_WCSPBRK=0;     AC_SUBST([GNULIB_WCSPBRK])
-  GNULIB_WCSSTR=0;      AC_SUBST([GNULIB_WCSSTR])
-  GNULIB_WCSTOK=0;      AC_SUBST([GNULIB_WCSTOK])
-  GNULIB_WCSWIDTH=0;    AC_SUBST([GNULIB_WCSWIDTH])
-  dnl Assume proper GNU behavior unless another module says otherwise.
-  HAVE_BTOWC=1;         AC_SUBST([HAVE_BTOWC])
-  HAVE_MBSINIT=1;       AC_SUBST([HAVE_MBSINIT])
-  HAVE_MBRTOWC=1;       AC_SUBST([HAVE_MBRTOWC])
-  HAVE_MBRLEN=1;        AC_SUBST([HAVE_MBRLEN])
-  HAVE_MBSRTOWCS=1;     AC_SUBST([HAVE_MBSRTOWCS])
-  HAVE_MBSNRTOWCS=1;    AC_SUBST([HAVE_MBSNRTOWCS])
-  HAVE_WCRTOMB=1;       AC_SUBST([HAVE_WCRTOMB])
-  HAVE_WCSRTOMBS=1;     AC_SUBST([HAVE_WCSRTOMBS])
-  HAVE_WCSNRTOMBS=1;    AC_SUBST([HAVE_WCSNRTOMBS])
-  HAVE_WMEMCHR=1;       AC_SUBST([HAVE_WMEMCHR])
-  HAVE_WMEMCMP=1;       AC_SUBST([HAVE_WMEMCMP])
-  HAVE_WMEMCPY=1;       AC_SUBST([HAVE_WMEMCPY])
-  HAVE_WMEMMOVE=1;      AC_SUBST([HAVE_WMEMMOVE])
-  HAVE_WMEMSET=1;       AC_SUBST([HAVE_WMEMSET])
-  HAVE_WCSLEN=1;        AC_SUBST([HAVE_WCSLEN])
-  HAVE_WCSNLEN=1;       AC_SUBST([HAVE_WCSNLEN])
-  HAVE_WCSCPY=1;        AC_SUBST([HAVE_WCSCPY])
-  HAVE_WCPCPY=1;        AC_SUBST([HAVE_WCPCPY])
-  HAVE_WCSNCPY=1;       AC_SUBST([HAVE_WCSNCPY])
-  HAVE_WCPNCPY=1;       AC_SUBST([HAVE_WCPNCPY])
-  HAVE_WCSCAT=1;        AC_SUBST([HAVE_WCSCAT])
-  HAVE_WCSNCAT=1;       AC_SUBST([HAVE_WCSNCAT])
-  HAVE_WCSCMP=1;        AC_SUBST([HAVE_WCSCMP])
-  HAVE_WCSNCMP=1;       AC_SUBST([HAVE_WCSNCMP])
-  HAVE_WCSCASECMP=1;    AC_SUBST([HAVE_WCSCASECMP])
-  HAVE_WCSNCASECMP=1;   AC_SUBST([HAVE_WCSNCASECMP])
-  HAVE_WCSCOLL=1;       AC_SUBST([HAVE_WCSCOLL])
-  HAVE_WCSXFRM=1;       AC_SUBST([HAVE_WCSXFRM])
-  HAVE_WCSDUP=1;        AC_SUBST([HAVE_WCSDUP])
-  HAVE_WCSCHR=1;        AC_SUBST([HAVE_WCSCHR])
-  HAVE_WCSRCHR=1;       AC_SUBST([HAVE_WCSRCHR])
-  HAVE_WCSCSPN=1;       AC_SUBST([HAVE_WCSCSPN])
-  HAVE_WCSSPN=1;        AC_SUBST([HAVE_WCSSPN])
-  HAVE_WCSPBRK=1;       AC_SUBST([HAVE_WCSPBRK])
-  HAVE_WCSSTR=1;        AC_SUBST([HAVE_WCSSTR])
-  HAVE_WCSTOK=1;        AC_SUBST([HAVE_WCSTOK])
-  HAVE_WCSWIDTH=1;      AC_SUBST([HAVE_WCSWIDTH])
-  HAVE_DECL_WCTOB=1;    AC_SUBST([HAVE_DECL_WCTOB])
-  HAVE_DECL_WCWIDTH=1;  AC_SUBST([HAVE_DECL_WCWIDTH])
-  REPLACE_MBSTATE_T=0;  AC_SUBST([REPLACE_MBSTATE_T])
-  REPLACE_BTOWC=0;      AC_SUBST([REPLACE_BTOWC])
-  REPLACE_WCTOB=0;      AC_SUBST([REPLACE_WCTOB])
-  REPLACE_MBSINIT=0;    AC_SUBST([REPLACE_MBSINIT])
-  REPLACE_MBRTOWC=0;    AC_SUBST([REPLACE_MBRTOWC])
-  REPLACE_MBRLEN=0;     AC_SUBST([REPLACE_MBRLEN])
-  REPLACE_MBSRTOWCS=0;  AC_SUBST([REPLACE_MBSRTOWCS])
-  REPLACE_MBSNRTOWCS=0; AC_SUBST([REPLACE_MBSNRTOWCS])
-  REPLACE_WCRTOMB=0;    AC_SUBST([REPLACE_WCRTOMB])
-  REPLACE_WCSRTOMBS=0;  AC_SUBST([REPLACE_WCSRTOMBS])
-  REPLACE_WCSNRTOMBS=0; AC_SUBST([REPLACE_WCSNRTOMBS])
-  REPLACE_WCWIDTH=0;    AC_SUBST([REPLACE_WCWIDTH])
-  REPLACE_WCSWIDTH=0;   AC_SUBST([REPLACE_WCSWIDTH])
-])
diff -Nuar groff-1.22.3.old/src/libs/gnulib/m4/wchar_t.m4 groff-1.22.3/src/libs/gnulib/m4/wchar_t.m4
--- groff-1.22.3.old/src/libs/gnulib/m4/wchar_t.m4	2014-11-04 10:38:35.642518784 +0200
+++ groff-1.22.3/src/libs/gnulib/m4/wchar_t.m4	1970-01-01 02:00:00.000000000 +0200
@@ -1,24 +0,0 @@
-# wchar_t.m4 serial 4 (gettext-0.18.2)
-dnl Copyright (C) 2002-2003, 2008-2014 Free Software Foundation, Inc.
-dnl This file is free software; the Free Software Foundation
-dnl gives unlimited permission to copy and/or distribute it,
-dnl with or without modifications, as long as this notice is preserved.
-
-dnl From Bruno Haible.
-dnl Test whether <stddef.h> has the 'wchar_t' type.
-dnl Prerequisite: AC_PROG_CC
-
-AC_DEFUN([gt_TYPE_WCHAR_T],
-[
-  AC_CACHE_CHECK([for wchar_t], [gt_cv_c_wchar_t],
-    [AC_COMPILE_IFELSE(
-       [AC_LANG_PROGRAM(
-          [[#include <stddef.h>
-            wchar_t foo = (wchar_t)'\0';]],
-          [[]])],
-       [gt_cv_c_wchar_t=yes],
-       [gt_cv_c_wchar_t=no])])
-  if test $gt_cv_c_wchar_t = yes; then
-    AC_DEFINE([HAVE_WCHAR_T], [1], [Define if you have the 'wchar_t' type.])
-  fi
-])
diff -Nuar groff-1.22.3.old/src/libs/gnulib/m4/wctype_h.m4 groff-1.22.3/src/libs/gnulib/m4/wctype_h.m4
--- groff-1.22.3.old/src/libs/gnulib/m4/wctype_h.m4	2014-11-04 10:38:35.642518784 +0200
+++ groff-1.22.3/src/libs/gnulib/m4/wctype_h.m4	1970-01-01 02:00:00.000000000 +0200
@@ -1,209 +0,0 @@
-# wctype_h.m4 serial 18
-
-dnl A placeholder for ISO C99 <wctype.h>, for platforms that lack it.
-
-dnl Copyright (C) 2006-2014 Free Software Foundation, Inc.
-dnl This file is free software; the Free Software Foundation
-dnl gives unlimited permission to copy and/or distribute it,
-dnl with or without modifications, as long as this notice is preserved.
-
-dnl Written by Paul Eggert.
-
-AC_DEFUN([gl_WCTYPE_H],
-[
-  AC_REQUIRE([gl_WCTYPE_H_DEFAULTS])
-  AC_REQUIRE([AC_PROG_CC])
-  AC_REQUIRE([AC_CANONICAL_HOST])
-  AC_CHECK_FUNCS_ONCE([iswcntrl])
-  if test $ac_cv_func_iswcntrl = yes; then
-    HAVE_ISWCNTRL=1
-  else
-    HAVE_ISWCNTRL=0
-  fi
-  AC_SUBST([HAVE_ISWCNTRL])
-
-  AC_REQUIRE([gt_TYPE_WINT_T])
-  if test $gt_cv_c_wint_t = yes; then
-    HAVE_WINT_T=1
-  else
-    HAVE_WINT_T=0
-  fi
-  AC_SUBST([HAVE_WINT_T])
-
-  gl_CHECK_NEXT_HEADERS([wctype.h])
-  if test $ac_cv_header_wctype_h = yes; then
-    if test $ac_cv_func_iswcntrl = yes; then
-      dnl Linux libc5 has an iswprint function that returns 0 for all arguments.
-      dnl The other functions are likely broken in the same way.
-      AC_CACHE_CHECK([whether iswcntrl works], [gl_cv_func_iswcntrl_works],
-        [
-          AC_RUN_IFELSE(
-            [AC_LANG_SOURCE([[
-               /* Tru64 with Desktop Toolkit C has a bug: <stdio.h> must be
-                  included before <wchar.h>.
-                  BSD/OS 4.0.1 has a bug: <stddef.h>, <stdio.h> and <time.h>
-                  must be included before <wchar.h>.  */
-               #include <stddef.h>
-               #include <stdio.h>
-               #include <time.h>
-               #include <wchar.h>
-               #include <wctype.h>
-               int main () { return iswprint ('x') == 0; }
-            ]])],
-            [gl_cv_func_iswcntrl_works=yes], [gl_cv_func_iswcntrl_works=no],
-            [AC_COMPILE_IFELSE([AC_LANG_PROGRAM([[#include <stdlib.h>
-                          #if __GNU_LIBRARY__ == 1
-                          Linux libc5 i18n is broken.
-                          #endif]], [])],
-              [gl_cv_func_iswcntrl_works="guessing yes"],
-              [gl_cv_func_iswcntrl_works="guessing no"])
-            ])
-        ])
-    fi
-    HAVE_WCTYPE_H=1
-  else
-    HAVE_WCTYPE_H=0
-  fi
-  AC_SUBST([HAVE_WCTYPE_H])
-
-  case "$gl_cv_func_iswcntrl_works" in
-    *yes) REPLACE_ISWCNTRL=0 ;;
-    *)    REPLACE_ISWCNTRL=1 ;;
-  esac
-  AC_SUBST([REPLACE_ISWCNTRL])
-
-  if test $HAVE_ISWCNTRL = 0 || test $REPLACE_ISWCNTRL = 1; then
-    dnl Redefine all of iswcntrl, ..., iswxdigit in <wctype.h>.
-    :
-  fi
-
-  if test $REPLACE_ISWCNTRL = 1; then
-    REPLACE_TOWLOWER=1
-  else
-    AC_CHECK_FUNCS([towlower])
-    if test $ac_cv_func_towlower = yes; then
-      REPLACE_TOWLOWER=0
-    else
-      AC_CHECK_DECLS([towlower],,,
-        [[/* Tru64 with Desktop Toolkit C has a bug: <stdio.h> must be
-             included before <wchar.h>.
-             BSD/OS 4.0.1 has a bug: <stddef.h>, <stdio.h> and <time.h>
-             must be included before <wchar.h>.  */
-          #include <stddef.h>
-          #include <stdio.h>
-          #include <time.h>
-          #include <wchar.h>
-          #if HAVE_WCTYPE_H
-          # include <wctype.h>
-          #endif
-        ]])
-      if test $ac_cv_have_decl_towlower = yes; then
-        dnl On Minix 3.1.8, the system's <wctype.h> declares towlower() and
-        dnl towupper() although it does not have the functions. Avoid a
-        dnl collision with gnulib's replacement.
-        REPLACE_TOWLOWER=1
-      else
-        REPLACE_TOWLOWER=0
-      fi
-    fi
-  fi
-  AC_SUBST([REPLACE_TOWLOWER])
-
-  if test $HAVE_ISWCNTRL = 0 || test $REPLACE_TOWLOWER = 1; then
-    dnl Redefine towlower, towupper in <wctype.h>.
-    :
-  fi
-
-  dnl We assume that the wctype() and iswctype() functions exist if and only
-  dnl if the type wctype_t is defined in <wchar.h> or in <wctype.h> if that
-  dnl exists.
-  dnl HP-UX 11.00 declares all these in <wchar.h> and lacks <wctype.h>.
-  AC_CACHE_CHECK([for wctype_t], [gl_cv_type_wctype_t],
-    [AC_COMPILE_IFELSE(
-       [AC_LANG_PROGRAM(
-          [[/* Tru64 with Desktop Toolkit C has a bug: <stdio.h> must be
-               included before <wchar.h>.
-               BSD/OS 4.0.1 has a bug: <stddef.h>, <stdio.h> and <time.h>
-               must be included before <wchar.h>.  */
-            #include <stddef.h>
-            #include <stdio.h>
-            #include <time.h>
-            #include <wchar.h>
-            #if HAVE_WCTYPE_H
-            # include <wctype.h>
-            #endif
-            wctype_t a;
-          ]],
-          [[]])],
-       [gl_cv_type_wctype_t=yes],
-       [gl_cv_type_wctype_t=no])
-    ])
-  if test $gl_cv_type_wctype_t = no; then
-    HAVE_WCTYPE_T=0
-  fi
-
-  dnl We assume that the wctrans() and towctrans() functions exist if and only
-  dnl if the type wctrans_t is defined in <wctype.h>.
-  AC_CACHE_CHECK([for wctrans_t], [gl_cv_type_wctrans_t],
-    [AC_COMPILE_IFELSE(
-       [AC_LANG_PROGRAM(
-          [[/* Tru64 with Desktop Toolkit C has a bug: <stdio.h> must be
-               included before <wchar.h>.
-               BSD/OS 4.0.1 has a bug: <stddef.h>, <stdio.h> and <time.h>
-               must be included before <wchar.h>.  */
-            #include <stddef.h>
-            #include <stdio.h>
-            #include <time.h>
-            #include <wchar.h>
-            #include <wctype.h>
-            wctrans_t a;
-          ]],
-          [[]])],
-       [gl_cv_type_wctrans_t=yes],
-       [gl_cv_type_wctrans_t=no])
-    ])
-  if test $gl_cv_type_wctrans_t = no; then
-    HAVE_WCTRANS_T=0
-  fi
-
-  dnl Check for declarations of anything we want to poison if the
-  dnl corresponding gnulib module is not in use.
-  gl_WARN_ON_USE_PREPARE([[
-/* Tru64 with Desktop Toolkit C has a bug: <stdio.h> must be included before
-   <wchar.h>.
-   BSD/OS 4.0.1 has a bug: <stddef.h>, <stdio.h> and <time.h> must be
-   included before <wchar.h>.  */
-#if !(defined __GLIBC__ && !defined __UCLIBC__)
-# include <stddef.h>
-# include <stdio.h>
-# include <time.h>
-# include <wchar.h>
-#endif
-#include <wctype.h>
-    ]],
-    [wctype iswctype wctrans towctrans
-    ])
-])
-
-AC_DEFUN([gl_WCTYPE_MODULE_INDICATOR],
-[
-  dnl Use AC_REQUIRE here, so that the default settings are expanded once only.
-  AC_REQUIRE([gl_WCTYPE_H_DEFAULTS])
-  gl_MODULE_INDICATOR_SET_VARIABLE([$1])
-  dnl Define it also as a C macro, for the benefit of the unit tests.
-  gl_MODULE_INDICATOR_FOR_TESTS([$1])
-])
-
-AC_DEFUN([gl_WCTYPE_H_DEFAULTS],
-[
-  GNULIB_ISWBLANK=0;    AC_SUBST([GNULIB_ISWBLANK])
-  GNULIB_WCTYPE=0;      AC_SUBST([GNULIB_WCTYPE])
-  GNULIB_ISWCTYPE=0;    AC_SUBST([GNULIB_ISWCTYPE])
-  GNULIB_WCTRANS=0;     AC_SUBST([GNULIB_WCTRANS])
-  GNULIB_TOWCTRANS=0;   AC_SUBST([GNULIB_TOWCTRANS])
-  dnl Assume proper GNU behavior unless another module says otherwise.
-  HAVE_ISWBLANK=1;      AC_SUBST([HAVE_ISWBLANK])
-  HAVE_WCTYPE_T=1;      AC_SUBST([HAVE_WCTYPE_T])
-  HAVE_WCTRANS_T=1;     AC_SUBST([HAVE_WCTRANS_T])
-  REPLACE_ISWBLANK=0;   AC_SUBST([REPLACE_ISWBLANK])
-])
diff -Nuar groff-1.22.3.old/src/libs/gnulib/m4/wcwidth.m4 groff-1.22.3/src/libs/gnulib/m4/wcwidth.m4
--- groff-1.22.3.old/src/libs/gnulib/m4/wcwidth.m4	2014-11-04 10:38:35.642518784 +0200
+++ groff-1.22.3/src/libs/gnulib/m4/wcwidth.m4	1970-01-01 02:00:00.000000000 +0200
@@ -1,101 +0,0 @@
-# wcwidth.m4 serial 23
-dnl Copyright (C) 2006-2014 Free Software Foundation, Inc.
-dnl This file is free software; the Free Software Foundation
-dnl gives unlimited permission to copy and/or distribute it,
-dnl with or without modifications, as long as this notice is preserved.
-
-AC_DEFUN([gl_FUNC_WCWIDTH],
-[
-  AC_REQUIRE([gl_WCHAR_H_DEFAULTS])
-  AC_REQUIRE([AC_CANONICAL_HOST]) dnl for cross-compiles
-
-  dnl Persuade glibc <wchar.h> to declare wcwidth().
-  AC_REQUIRE([AC_USE_SYSTEM_EXTENSIONS])
-
-  AC_REQUIRE([gt_TYPE_WCHAR_T])
-  AC_REQUIRE([gt_TYPE_WINT_T])
-
-  AC_CHECK_HEADERS_ONCE([wchar.h])
-  AC_CHECK_FUNCS_ONCE([wcwidth])
-
-  AC_CHECK_DECLS([wcwidth], [], [], [[
-/* AIX 3.2.5 declares wcwidth in <string.h>. */
-#include <string.h>
-/* Tru64 with Desktop Toolkit C has a bug: <stdio.h> must be included before
-   <wchar.h>.
-   BSD/OS 4.0.1 has a bug: <stddef.h>, <stdio.h> and <time.h> must be included
-   before <wchar.h>.  */
-#include <stddef.h>
-#include <stdio.h>
-#include <time.h>
-#include <wchar.h>
-]])
-  if test $ac_cv_have_decl_wcwidth != yes; then
-    HAVE_DECL_WCWIDTH=0
-  fi
-
-  if test $ac_cv_func_wcwidth = yes; then
-    HAVE_WCWIDTH=1
-    dnl On Mac OS X 10.3, wcwidth(0x0301) (COMBINING ACUTE ACCENT) returns 1.
-    dnl On OpenBSD 5.0, wcwidth(0x05B0) (HEBREW POINT SHEVA) returns 1.
-    dnl On OSF/1 5.1, wcwidth(0x200B) (ZERO WIDTH SPACE) returns 1.
-    dnl This leads to bugs in 'ls' (coreutils).
-    AC_CACHE_CHECK([whether wcwidth works reasonably in UTF-8 locales],
-      [gl_cv_func_wcwidth_works],
-      [
-        AC_RUN_IFELSE(
-          [AC_LANG_SOURCE([[
-#include <locale.h>
-/* AIX 3.2.5 declares wcwidth in <string.h>. */
-#include <string.h>
-/* Tru64 with Desktop Toolkit C has a bug: <stdio.h> must be included before
-   <wchar.h>.
-   BSD/OS 4.0.1 has a bug: <stddef.h>, <stdio.h> and <time.h> must be included
-   before <wchar.h>.  */
-#include <stddef.h>
-#include <stdio.h>
-#include <time.h>
-#include <wchar.h>
-#if !HAVE_DECL_WCWIDTH
-extern
-# ifdef __cplusplus
-"C"
-# endif
-int wcwidth (int);
-#endif
-int main ()
-{
-  int result = 0;
-  if (setlocale (LC_ALL, "fr_FR.UTF-8") != NULL)
-    {
-      if (wcwidth (0x0301) > 0)
-        result |= 1;
-      if (wcwidth (0x05B0) > 0)
-        result |= 2;
-      if (wcwidth (0x200B) > 0)
-        result |= 4;
-    }
-  return result;
-}]])],
-          [gl_cv_func_wcwidth_works=yes],
-          [gl_cv_func_wcwidth_works=no],
-          [
-changequote(,)dnl
-           case "$host_os" in
-                     # Guess yes on glibc and AIX 7 systems.
-             *-gnu* | aix[7-9]*) gl_cv_func_wcwidth_works="guessing yes";;
-             *)                  gl_cv_func_wcwidth_works="guessing no";;
-           esac
-changequote([,])dnl
-          ])
-      ])
-    case "$gl_cv_func_wcwidth_works" in
-      *yes) ;;
-      *no) REPLACE_WCWIDTH=1 ;;
-    esac
-  else
-    HAVE_WCWIDTH=0
-  fi
-  dnl We don't substitute HAVE_WCWIDTH. We assume that if the system does not
-  dnl have the wcwidth function, then it does not declare it.
-])
diff -Nuar groff-1.22.3.old/src/libs/gnulib/m4/wint_t.m4 groff-1.22.3/src/libs/gnulib/m4/wint_t.m4
--- groff-1.22.3.old/src/libs/gnulib/m4/wint_t.m4	2014-11-04 10:38:35.642518784 +0200
+++ groff-1.22.3/src/libs/gnulib/m4/wint_t.m4	1970-01-01 02:00:00.000000000 +0200
@@ -1,32 +0,0 @@
-# wint_t.m4 serial 5 (gettext-0.18.2)
-dnl Copyright (C) 2003, 2007-2014 Free Software Foundation, Inc.
-dnl This file is free software; the Free Software Foundation
-dnl gives unlimited permission to copy and/or distribute it,
-dnl with or without modifications, as long as this notice is preserved.
-
-dnl From Bruno Haible.
-dnl Test whether <wchar.h> has the 'wint_t' type.
-dnl Prerequisite: AC_PROG_CC
-
-AC_DEFUN([gt_TYPE_WINT_T],
-[
-  AC_CACHE_CHECK([for wint_t], [gt_cv_c_wint_t],
-    [AC_COMPILE_IFELSE(
-       [AC_LANG_PROGRAM(
-          [[
-/* Tru64 with Desktop Toolkit C has a bug: <stdio.h> must be included before
-   <wchar.h>.
-   BSD/OS 4.0.1 has a bug: <stddef.h>, <stdio.h> and <time.h> must be included
-   before <wchar.h>.  */
-#include <stddef.h>
-#include <stdio.h>
-#include <time.h>
-#include <wchar.h>
-            wint_t foo = (wchar_t)'\0';]],
-          [[]])],
-       [gt_cv_c_wint_t=yes],
-       [gt_cv_c_wint_t=no])])
-  if test $gt_cv_c_wint_t = yes; then
-    AC_DEFINE([HAVE_WINT_T], [1], [Define if you have the 'wint_t' type.])
-  fi
-])
diff -Nuar groff-1.22.3.old/src/libs/gnulib/Makefile.am groff-1.22.3/src/libs/gnulib/Makefile.am
--- groff-1.22.3.old/src/libs/gnulib/Makefile.am	2014-11-04 10:38:35.676518359 +0200
+++ groff-1.22.3/src/libs/gnulib/Makefile.am	1970-01-01 02:00:00.000000000 +0200
@@ -1,20 +0,0 @@
-## Process this file with automake to produce Makefile.in.
-
-# Makefile.am
-
-# Copyright (C) 1994-2014  Free Software Foundation, Inc.
-
-# This file is free software; the Free Software Foundation gives
-# unlimited permission to copy and/or distribute it, with or without
-# modifications, as long as this notice is preserved.
-
-# This program is distributed in the hope that it will be useful, but
-# WITHOUT ANY WARRANTY, to the extent permitted by law; without even
-# the implied warranty of MERCHANTABILITY or FITNESS FOR A PARTICULAR
-# PURPOSE.
-
-AUTOMAKE_OPTIONS = 1.5 foreign
-
-SUBDIRS = lib m4
-
-ACLOCAL_AMFLAGS = -I m4
diff -Nuar groff-1.22.3.old/src/libs/gnulib/Makefile.in groff-1.22.3/src/libs/gnulib/Makefile.in
--- groff-1.22.3.old/src/libs/gnulib/Makefile.in	2014-11-04 10:38:35.676518359 +0200
+++ groff-1.22.3/src/libs/gnulib/Makefile.in	1970-01-01 02:00:00.000000000 +0200
@@ -1,972 +0,0 @@
-# Makefile.in generated by automake 1.14 from Makefile.am.
-# @configure_input@
-
-# Copyright (C) 1994-2013 Free Software Foundation, Inc.
-
-# This Makefile.in is free software; the Free Software Foundation
-# gives unlimited permission to copy and/or distribute it,
-# with or without modifications, as long as this notice is preserved.
-
-# This program is distributed in the hope that it will be useful,
-# but WITHOUT ANY WARRANTY, to the extent permitted by law; without
-# even the implied warranty of MERCHANTABILITY or FITNESS FOR A
-# PARTICULAR PURPOSE.
-
-@SET_MAKE@
-
-# Makefile.am
-
-# Copyright (C) 1994-2014  Free Software Foundation, Inc.
-
-# This file is free software; the Free Software Foundation gives
-# unlimited permission to copy and/or distribute it, with or without
-# modifications, as long as this notice is preserved.
-
-# This program is distributed in the hope that it will be useful, but
-# WITHOUT ANY WARRANTY, to the extent permitted by law; without even
-# the implied warranty of MERCHANTABILITY or FITNESS FOR A PARTICULAR
-# PURPOSE.
-VPATH = @srcdir@
-am__is_gnu_make = test -n '$(MAKEFILE_LIST)' && test -n '$(MAKELEVEL)'
-am__make_running_with_option = \
-  case $${target_option-} in \
-      ?) ;; \
-      *) echo "am__make_running_with_option: internal error: invalid" \
-              "target option '$${target_option-}' specified" >&2; \
-         exit 1;; \
-  esac; \
-  has_opt=no; \
-  sane_makeflags=$$MAKEFLAGS; \
-  if $(am__is_gnu_make); then \
-    sane_makeflags=$$MFLAGS; \
-  else \
-    case $$MAKEFLAGS in \
-      *\\[\ \	]*) \
-        bs=\\; \
-        sane_makeflags=`printf '%s\n' "$$MAKEFLAGS" \
-          | sed "s/$$bs$$bs[$$bs $$bs	]*//g"`;; \
-    esac; \
-  fi; \
-  skip_next=no; \
-  strip_trailopt () \
-  { \
-    flg=`printf '%s\n' "$$flg" | sed "s/$$1.*$$//"`; \
-  }; \
-  for flg in $$sane_makeflags; do \
-    test $$skip_next = yes && { skip_next=no; continue; }; \
-    case $$flg in \
-      *=*|--*) continue;; \
-        -*I) strip_trailopt 'I'; skip_next=yes;; \
-      -*I?*) strip_trailopt 'I';; \
-        -*O) strip_trailopt 'O'; skip_next=yes;; \
-      -*O?*) strip_trailopt 'O';; \
-        -*l) strip_trailopt 'l'; skip_next=yes;; \
-      -*l?*) strip_trailopt 'l';; \
-      -[dEDm]) skip_next=yes;; \
-      -[JT]) skip_next=yes;; \
-    esac; \
-    case $$flg in \
-      *$$target_option*) has_opt=yes; break;; \
-    esac; \
-  done; \
-  test $$has_opt = yes
-am__make_dryrun = (target_option=n; $(am__make_running_with_option))
-am__make_keepgoing = (target_option=k; $(am__make_running_with_option))
-pkgdatadir = $(datadir)/@PACKAGE@
-pkgincludedir = $(includedir)/@PACKAGE@
-pkglibdir = $(libdir)/@PACKAGE@
-am__cd = CDPATH="$${ZSH_VERSION+.}$(PATH_SEPARATOR)" && cd
-install_sh_DATA = $(install_sh) -c -m 644
-install_sh_PROGRAM = $(install_sh) -c
-install_sh_SCRIPT = $(install_sh) -c
-INSTALL_HEADER = $(INSTALL_DATA)
-transform = $(program_transform_name)
-NORMAL_INSTALL = :
-PRE_INSTALL = :
-POST_INSTALL = :
-NORMAL_UNINSTALL = :
-PRE_UNINSTALL = :
-POST_UNINSTALL = :
-build_triplet = @build@
-host_triplet = @host@
-subdir = .
-DIST_COMMON = $(srcdir)/Makefile.in $(srcdir)/Makefile.am \
-	$(top_srcdir)/configure $(am__configure_deps) \
-	$(srcdir)/config.h.in build-aux/compile build-aux/config.guess \
-	build-aux/config.sub build-aux/depcomp build-aux/install-sh \
-	build-aux/missing $(top_srcdir)/build-aux/compile \
-	$(top_srcdir)/build-aux/config.guess \
-	$(top_srcdir)/build-aux/config.sub \
-	$(top_srcdir)/build-aux/install-sh \
-	$(top_srcdir)/build-aux/missing
-ACLOCAL_M4 = $(top_srcdir)/aclocal.m4
-am__aclocal_m4_deps = $(top_srcdir)/m4/00gnulib.m4 \
-	$(top_srcdir)/m4/codeset.m4 $(top_srcdir)/m4/configmake.m4 \
-	$(top_srcdir)/m4/extensions.m4 \
-	$(top_srcdir)/m4/extern-inline.m4 $(top_srcdir)/m4/fcntl-o.m4 \
-	$(top_srcdir)/m4/glibc21.m4 $(top_srcdir)/m4/gnulib-common.m4 \
-	$(top_srcdir)/m4/include_next.m4 \
-	$(top_srcdir)/m4/inttypes-pri.m4 $(top_srcdir)/m4/inttypes.m4 \
-	$(top_srcdir)/m4/libunistring-base.m4 \
-	$(top_srcdir)/m4/localcharset.m4 $(top_srcdir)/m4/longlong.m4 \
-	$(top_srcdir)/m4/multiarch.m4 $(top_srcdir)/m4/onceonly.m4 \
-	$(top_srcdir)/m4/stdbool.m4 $(top_srcdir)/m4/stddef_h.m4 \
-	$(top_srcdir)/m4/stdint.m4 $(top_srcdir)/m4/warn-on-use.m4 \
-	$(top_srcdir)/m4/wchar_h.m4 $(top_srcdir)/m4/wchar_t.m4 \
-	$(top_srcdir)/m4/wctype_h.m4 $(top_srcdir)/m4/wcwidth.m4 \
-	$(top_srcdir)/m4/wint_t.m4 $(top_srcdir)/configure.ac
-am__configure_deps = $(am__aclocal_m4_deps) $(CONFIGURE_DEPENDENCIES) \
-	$(ACLOCAL_M4)
-am__CONFIG_DISTCLEAN_FILES = config.status config.cache config.log \
- configure.lineno config.status.lineno
-mkinstalldirs = $(install_sh) -d
-CONFIG_HEADER = config.h
-CONFIG_CLEAN_FILES =
-CONFIG_CLEAN_VPATH_FILES =
-AM_V_P = $(am__v_P_@AM_V@)
-am__v_P_ = $(am__v_P_@AM_DEFAULT_V@)
-am__v_P_0 = false
-am__v_P_1 = :
-AM_V_GEN = $(am__v_GEN_@AM_V@)
-am__v_GEN_ = $(am__v_GEN_@AM_DEFAULT_V@)
-am__v_GEN_0 = @echo "  GEN     " $@;
-am__v_GEN_1 = 
-AM_V_at = $(am__v_at_@AM_V@)
-am__v_at_ = $(am__v_at_@AM_DEFAULT_V@)
-am__v_at_0 = @
-am__v_at_1 = 
-SOURCES =
-DIST_SOURCES =
-RECURSIVE_TARGETS = all-recursive check-recursive cscopelist-recursive \
-	ctags-recursive dvi-recursive html-recursive info-recursive \
-	install-data-recursive install-dvi-recursive \
-	install-exec-recursive install-html-recursive \
-	install-info-recursive install-pdf-recursive \
-	install-ps-recursive install-recursive installcheck-recursive \
-	installdirs-recursive pdf-recursive ps-recursive \
-	tags-recursive uninstall-recursive
-am__can_run_installinfo = \
-  case $$AM_UPDATE_INFO_DIR in \
-    n|no|NO) false;; \
-    *) (install-info --version) >/dev/null 2>&1;; \
-  esac
-RECURSIVE_CLEAN_TARGETS = mostlyclean-recursive clean-recursive	\
-  distclean-recursive maintainer-clean-recursive
-am__recursive_targets = \
-  $(RECURSIVE_TARGETS) \
-  $(RECURSIVE_CLEAN_TARGETS) \
-  $(am__extra_recursive_targets)
-AM_RECURSIVE_TARGETS = $(am__recursive_targets:-recursive=) TAGS CTAGS \
-	cscope distdir dist dist-all distcheck
-am__tagged_files = $(HEADERS) $(SOURCES) $(TAGS_FILES) \
-	$(LISP)config.h.in
-# Read a list of newline-separated strings from the standard input,
-# and print each of them once, without duplicates.  Input order is
-# *not* preserved.
-am__uniquify_input = $(AWK) '\
-  BEGIN { nonempty = 0; } \
-  { items[$$0] = 1; nonempty = 1; } \
-  END { if (nonempty) { for (i in items) print i; }; } \
-'
-# Make sure the list of sources is unique.  This is necessary because,
-# e.g., the same source file might be shared among _SOURCES variables
-# for different programs/libraries.
-am__define_uniq_tagged_files = \
-  list='$(am__tagged_files)'; \
-  unique=`for i in $$list; do \
-    if test -f "$$i"; then echo $$i; else echo $(srcdir)/$$i; fi; \
-  done | $(am__uniquify_input)`
-ETAGS = etags
-CTAGS = ctags
-CSCOPE = cscope
-DIST_SUBDIRS = $(SUBDIRS)
-DISTFILES = $(DIST_COMMON) $(DIST_SOURCES) $(TEXINFOS) $(EXTRA_DIST)
-distdir = $(PACKAGE)-$(VERSION)
-top_distdir = $(distdir)
-am__remove_distdir = \
-  if test -d "$(distdir)"; then \
-    find "$(distdir)" -type d ! -perm -200 -exec chmod u+w {} ';' \
-      && rm -rf "$(distdir)" \
-      || { sleep 5 && rm -rf "$(distdir)"; }; \
-  else :; fi
-am__post_remove_distdir = $(am__remove_distdir)
-am__relativize = \
-  dir0=`pwd`; \
-  sed_first='s,^\([^/]*\)/.*$$,\1,'; \
-  sed_rest='s,^[^/]*/*,,'; \
-  sed_last='s,^.*/\([^/]*\)$$,\1,'; \
-  sed_butlast='s,/*[^/]*$$,,'; \
-  while test -n "$$dir1"; do \
-    first=`echo "$$dir1" | sed -e "$$sed_first"`; \
-    if test "$$first" != "."; then \
-      if test "$$first" = ".."; then \
-        dir2=`echo "$$dir0" | sed -e "$$sed_last"`/"$$dir2"; \
-        dir0=`echo "$$dir0" | sed -e "$$sed_butlast"`; \
-      else \
-        first2=`echo "$$dir2" | sed -e "$$sed_first"`; \
-        if test "$$first2" = "$$first"; then \
-          dir2=`echo "$$dir2" | sed -e "$$sed_rest"`; \
-        else \
-          dir2="../$$dir2"; \
-        fi; \
-        dir0="$$dir0"/"$$first"; \
-      fi; \
-    fi; \
-    dir1=`echo "$$dir1" | sed -e "$$sed_rest"`; \
-  done; \
-  reldir="$$dir2"
-DIST_ARCHIVES = $(distdir).tar.gz
-GZIP_ENV = --best
-DIST_TARGETS = dist-gzip
-distuninstallcheck_listfiles = find . -type f -print
-am__distuninstallcheck_listfiles = $(distuninstallcheck_listfiles) \
-  | sed 's|^\./|$(prefix)/|' | grep -v '$(infodir)/dir$$'
-distcleancheck_listfiles = find . -type f -print
-pkglibexecdir = @pkglibexecdir@
-ACLOCAL = @ACLOCAL@
-AMTAR = @AMTAR@
-AM_DEFAULT_VERBOSITY = @AM_DEFAULT_VERBOSITY@
-APPLE_UNIVERSAL_BUILD = @APPLE_UNIVERSAL_BUILD@
-AR = @AR@
-ARFLAGS = @ARFLAGS@
-AUTOCONF = @AUTOCONF@
-AUTOHEADER = @AUTOHEADER@
-AUTOMAKE = @AUTOMAKE@
-AWK = @AWK@
-BITSIZEOF_PTRDIFF_T = @BITSIZEOF_PTRDIFF_T@
-BITSIZEOF_SIG_ATOMIC_T = @BITSIZEOF_SIG_ATOMIC_T@
-BITSIZEOF_SIZE_T = @BITSIZEOF_SIZE_T@
-BITSIZEOF_WCHAR_T = @BITSIZEOF_WCHAR_T@
-BITSIZEOF_WINT_T = @BITSIZEOF_WINT_T@
-CC = @CC@
-CCDEPMODE = @CCDEPMODE@
-CFLAGS = @CFLAGS@
-CPP = @CPP@
-CPPFLAGS = @CPPFLAGS@
-CYGPATH_W = @CYGPATH_W@
-DEFS = @DEFS@
-DEPDIR = @DEPDIR@
-ECHO_C = @ECHO_C@
-ECHO_N = @ECHO_N@
-ECHO_T = @ECHO_T@
-EGREP = @EGREP@
-EXEEXT = @EXEEXT@
-GLIBC21 = @GLIBC21@
-GNULIB_BTOWC = @GNULIB_BTOWC@
-GNULIB_IMAXABS = @GNULIB_IMAXABS@
-GNULIB_IMAXDIV = @GNULIB_IMAXDIV@
-GNULIB_ISWBLANK = @GNULIB_ISWBLANK@
-GNULIB_ISWCTYPE = @GNULIB_ISWCTYPE@
-GNULIB_MBRLEN = @GNULIB_MBRLEN@
-GNULIB_MBRTOWC = @GNULIB_MBRTOWC@
-GNULIB_MBSINIT = @GNULIB_MBSINIT@
-GNULIB_MBSNRTOWCS = @GNULIB_MBSNRTOWCS@
-GNULIB_MBSRTOWCS = @GNULIB_MBSRTOWCS@
-GNULIB_STRTOIMAX = @GNULIB_STRTOIMAX@
-GNULIB_STRTOUMAX = @GNULIB_STRTOUMAX@
-GNULIB_TOWCTRANS = @GNULIB_TOWCTRANS@
-GNULIB_WCPCPY = @GNULIB_WCPCPY@
-GNULIB_WCPNCPY = @GNULIB_WCPNCPY@
-GNULIB_WCRTOMB = @GNULIB_WCRTOMB@
-GNULIB_WCSCASECMP = @GNULIB_WCSCASECMP@
-GNULIB_WCSCAT = @GNULIB_WCSCAT@
-GNULIB_WCSCHR = @GNULIB_WCSCHR@
-GNULIB_WCSCMP = @GNULIB_WCSCMP@
-GNULIB_WCSCOLL = @GNULIB_WCSCOLL@
-GNULIB_WCSCPY = @GNULIB_WCSCPY@
-GNULIB_WCSCSPN = @GNULIB_WCSCSPN@
-GNULIB_WCSDUP = @GNULIB_WCSDUP@
-GNULIB_WCSLEN = @GNULIB_WCSLEN@
-GNULIB_WCSNCASECMP = @GNULIB_WCSNCASECMP@
-GNULIB_WCSNCAT = @GNULIB_WCSNCAT@
-GNULIB_WCSNCMP = @GNULIB_WCSNCMP@
-GNULIB_WCSNCPY = @GNULIB_WCSNCPY@
-GNULIB_WCSNLEN = @GNULIB_WCSNLEN@
-GNULIB_WCSNRTOMBS = @GNULIB_WCSNRTOMBS@
-GNULIB_WCSPBRK = @GNULIB_WCSPBRK@
-GNULIB_WCSRCHR = @GNULIB_WCSRCHR@
-GNULIB_WCSRTOMBS = @GNULIB_WCSRTOMBS@
-GNULIB_WCSSPN = @GNULIB_WCSSPN@
-GNULIB_WCSSTR = @GNULIB_WCSSTR@
-GNULIB_WCSTOK = @GNULIB_WCSTOK@
-GNULIB_WCSWIDTH = @GNULIB_WCSWIDTH@
-GNULIB_WCSXFRM = @GNULIB_WCSXFRM@
-GNULIB_WCTOB = @GNULIB_WCTOB@
-GNULIB_WCTRANS = @GNULIB_WCTRANS@
-GNULIB_WCTYPE = @GNULIB_WCTYPE@
-GNULIB_WCWIDTH = @GNULIB_WCWIDTH@
-GNULIB_WMEMCHR = @GNULIB_WMEMCHR@
-GNULIB_WMEMCMP = @GNULIB_WMEMCMP@
-GNULIB_WMEMCPY = @GNULIB_WMEMCPY@
-GNULIB_WMEMMOVE = @GNULIB_WMEMMOVE@
-GNULIB_WMEMSET = @GNULIB_WMEMSET@
-GREP = @GREP@
-HAVE_BTOWC = @HAVE_BTOWC@
-HAVE_DECL_IMAXABS = @HAVE_DECL_IMAXABS@
-HAVE_DECL_IMAXDIV = @HAVE_DECL_IMAXDIV@
-HAVE_DECL_STRTOIMAX = @HAVE_DECL_STRTOIMAX@
-HAVE_DECL_STRTOUMAX = @HAVE_DECL_STRTOUMAX@
-HAVE_DECL_WCTOB = @HAVE_DECL_WCTOB@
-HAVE_DECL_WCWIDTH = @HAVE_DECL_WCWIDTH@
-HAVE_FEATURES_H = @HAVE_FEATURES_H@
-HAVE_INTTYPES_H = @HAVE_INTTYPES_H@
-HAVE_ISWBLANK = @HAVE_ISWBLANK@
-HAVE_ISWCNTRL = @HAVE_ISWCNTRL@
-HAVE_LONG_LONG_INT = @HAVE_LONG_LONG_INT@
-HAVE_MBRLEN = @HAVE_MBRLEN@
-HAVE_MBRTOWC = @HAVE_MBRTOWC@
-HAVE_MBSINIT = @HAVE_MBSINIT@
-HAVE_MBSNRTOWCS = @HAVE_MBSNRTOWCS@
-HAVE_MBSRTOWCS = @HAVE_MBSRTOWCS@
-HAVE_SIGNED_SIG_ATOMIC_T = @HAVE_SIGNED_SIG_ATOMIC_T@
-HAVE_SIGNED_WCHAR_T = @HAVE_SIGNED_WCHAR_T@
-HAVE_SIGNED_WINT_T = @HAVE_SIGNED_WINT_T@
-HAVE_STDINT_H = @HAVE_STDINT_H@
-HAVE_SYS_BITYPES_H = @HAVE_SYS_BITYPES_H@
-HAVE_SYS_INTTYPES_H = @HAVE_SYS_INTTYPES_H@
-HAVE_SYS_TYPES_H = @HAVE_SYS_TYPES_H@
-HAVE_UNSIGNED_LONG_LONG_INT = @HAVE_UNSIGNED_LONG_LONG_INT@
-HAVE_WCHAR_H = @HAVE_WCHAR_H@
-HAVE_WCHAR_T = @HAVE_WCHAR_T@
-HAVE_WCPCPY = @HAVE_WCPCPY@
-HAVE_WCPNCPY = @HAVE_WCPNCPY@
-HAVE_WCRTOMB = @HAVE_WCRTOMB@
-HAVE_WCSCASECMP = @HAVE_WCSCASECMP@
-HAVE_WCSCAT = @HAVE_WCSCAT@
-HAVE_WCSCHR = @HAVE_WCSCHR@
-HAVE_WCSCMP = @HAVE_WCSCMP@
-HAVE_WCSCOLL = @HAVE_WCSCOLL@
-HAVE_WCSCPY = @HAVE_WCSCPY@
-HAVE_WCSCSPN = @HAVE_WCSCSPN@
-HAVE_WCSDUP = @HAVE_WCSDUP@
-HAVE_WCSLEN = @HAVE_WCSLEN@
-HAVE_WCSNCASECMP = @HAVE_WCSNCASECMP@
-HAVE_WCSNCAT = @HAVE_WCSNCAT@
-HAVE_WCSNCMP = @HAVE_WCSNCMP@
-HAVE_WCSNCPY = @HAVE_WCSNCPY@
-HAVE_WCSNLEN = @HAVE_WCSNLEN@
-HAVE_WCSNRTOMBS = @HAVE_WCSNRTOMBS@
-HAVE_WCSPBRK = @HAVE_WCSPBRK@
-HAVE_WCSRCHR = @HAVE_WCSRCHR@
-HAVE_WCSRTOMBS = @HAVE_WCSRTOMBS@
-HAVE_WCSSPN = @HAVE_WCSSPN@
-HAVE_WCSSTR = @HAVE_WCSSTR@
-HAVE_WCSTOK = @HAVE_WCSTOK@
-HAVE_WCSWIDTH = @HAVE_WCSWIDTH@
-HAVE_WCSXFRM = @HAVE_WCSXFRM@
-HAVE_WCTRANS_T = @HAVE_WCTRANS_T@
-HAVE_WCTYPE_H = @HAVE_WCTYPE_H@
-HAVE_WCTYPE_T = @HAVE_WCTYPE_T@
-HAVE_WINT_T = @HAVE_WINT_T@
-HAVE_WMEMCHR = @HAVE_WMEMCHR@
-HAVE_WMEMCMP = @HAVE_WMEMCMP@
-HAVE_WMEMCPY = @HAVE_WMEMCPY@
-HAVE_WMEMMOVE = @HAVE_WMEMMOVE@
-HAVE_WMEMSET = @HAVE_WMEMSET@
-HAVE__BOOL = @HAVE__BOOL@
-INCLUDE_NEXT = @INCLUDE_NEXT@
-INCLUDE_NEXT_AS_FIRST_DIRECTIVE = @INCLUDE_NEXT_AS_FIRST_DIRECTIVE@
-INSTALL = @INSTALL@
-INSTALL_DATA = @INSTALL_DATA@
-INSTALL_PROGRAM = @INSTALL_PROGRAM@
-INSTALL_SCRIPT = @INSTALL_SCRIPT@
-INSTALL_STRIP_PROGRAM = @INSTALL_STRIP_PROGRAM@
-INT32_MAX_LT_INTMAX_MAX = @INT32_MAX_LT_INTMAX_MAX@
-INT64_MAX_EQ_LONG_MAX = @INT64_MAX_EQ_LONG_MAX@
-LDFLAGS = @LDFLAGS@
-LIBGNU_LIBDEPS = @LIBGNU_LIBDEPS@
-LIBGNU_LTLIBDEPS = @LIBGNU_LTLIBDEPS@
-LIBOBJS = @LIBOBJS@
-LIBS = @LIBS@
-LIBUNISTRING_UNITYPES_H = @LIBUNISTRING_UNITYPES_H@
-LIBUNISTRING_UNIWIDTH_H = @LIBUNISTRING_UNIWIDTH_H@
-LOCALCHARSET_TESTS_ENVIRONMENT = @LOCALCHARSET_TESTS_ENVIRONMENT@
-LTLIBOBJS = @LTLIBOBJS@
-MAKEINFO = @MAKEINFO@
-MKDIR_P = @MKDIR_P@
-NEXT_AS_FIRST_DIRECTIVE_INTTYPES_H = @NEXT_AS_FIRST_DIRECTIVE_INTTYPES_H@
-NEXT_AS_FIRST_DIRECTIVE_STDDEF_H = @NEXT_AS_FIRST_DIRECTIVE_STDDEF_H@
-NEXT_AS_FIRST_DIRECTIVE_STDINT_H = @NEXT_AS_FIRST_DIRECTIVE_STDINT_H@
-NEXT_AS_FIRST_DIRECTIVE_WCHAR_H = @NEXT_AS_FIRST_DIRECTIVE_WCHAR_H@
-NEXT_AS_FIRST_DIRECTIVE_WCTYPE_H = @NEXT_AS_FIRST_DIRECTIVE_WCTYPE_H@
-NEXT_INTTYPES_H = @NEXT_INTTYPES_H@
-NEXT_STDDEF_H = @NEXT_STDDEF_H@
-NEXT_STDINT_H = @NEXT_STDINT_H@
-NEXT_WCHAR_H = @NEXT_WCHAR_H@
-NEXT_WCTYPE_H = @NEXT_WCTYPE_H@
-OBJEXT = @OBJEXT@
-PACKAGE = @PACKAGE@
-PACKAGE_BUGREPORT = @PACKAGE_BUGREPORT@
-PACKAGE_NAME = @PACKAGE_NAME@
-PACKAGE_STRING = @PACKAGE_STRING@
-PACKAGE_TARNAME = @PACKAGE_TARNAME@
-PACKAGE_URL = @PACKAGE_URL@
-PACKAGE_VERSION = @PACKAGE_VERSION@
-PATH_SEPARATOR = @PATH_SEPARATOR@
-PRAGMA_COLUMNS = @PRAGMA_COLUMNS@
-PRAGMA_SYSTEM_HEADER = @PRAGMA_SYSTEM_HEADER@
-PRIPTR_PREFIX = @PRIPTR_PREFIX@
-PRI_MACROS_BROKEN = @PRI_MACROS_BROKEN@
-PTRDIFF_T_SUFFIX = @PTRDIFF_T_SUFFIX@
-RANLIB = @RANLIB@
-REPLACE_BTOWC = @REPLACE_BTOWC@
-REPLACE_ISWBLANK = @REPLACE_ISWBLANK@
-REPLACE_ISWCNTRL = @REPLACE_ISWCNTRL@
-REPLACE_MBRLEN = @REPLACE_MBRLEN@
-REPLACE_MBRTOWC = @REPLACE_MBRTOWC@
-REPLACE_MBSINIT = @REPLACE_MBSINIT@
-REPLACE_MBSNRTOWCS = @REPLACE_MBSNRTOWCS@
-REPLACE_MBSRTOWCS = @REPLACE_MBSRTOWCS@
-REPLACE_MBSTATE_T = @REPLACE_MBSTATE_T@
-REPLACE_NULL = @REPLACE_NULL@
-REPLACE_STRTOIMAX = @REPLACE_STRTOIMAX@
-REPLACE_TOWLOWER = @REPLACE_TOWLOWER@
-REPLACE_WCRTOMB = @REPLACE_WCRTOMB@
-REPLACE_WCSNRTOMBS = @REPLACE_WCSNRTOMBS@
-REPLACE_WCSRTOMBS = @REPLACE_WCSRTOMBS@
-REPLACE_WCSWIDTH = @REPLACE_WCSWIDTH@
-REPLACE_WCTOB = @REPLACE_WCTOB@
-REPLACE_WCWIDTH = @REPLACE_WCWIDTH@
-SET_MAKE = @SET_MAKE@
-SHELL = @SHELL@
-SIG_ATOMIC_T_SUFFIX = @SIG_ATOMIC_T_SUFFIX@
-SIZE_T_SUFFIX = @SIZE_T_SUFFIX@
-STDBOOL_H = @STDBOOL_H@
-STDDEF_H = @STDDEF_H@
-STDINT_H = @STDINT_H@
-STRIP = @STRIP@
-UINT32_MAX_LT_UINTMAX_MAX = @UINT32_MAX_LT_UINTMAX_MAX@
-UINT64_MAX_EQ_ULONG_MAX = @UINT64_MAX_EQ_ULONG_MAX@
-VERSION = @VERSION@
-WCHAR_T_SUFFIX = @WCHAR_T_SUFFIX@
-WINT_T_SUFFIX = @WINT_T_SUFFIX@
-abs_builddir = @abs_builddir@
-abs_srcdir = @abs_srcdir@
-abs_top_builddir = @abs_top_builddir@
-abs_top_srcdir = @abs_top_srcdir@
-ac_ct_CC = @ac_ct_CC@
-am__include = @am__include@
-am__leading_dot = @am__leading_dot@
-am__quote = @am__quote@
-am__tar = @am__tar@
-am__untar = @am__untar@
-bindir = @bindir@
-build = @build@
-build_alias = @build_alias@
-build_cpu = @build_cpu@
-build_os = @build_os@
-build_vendor = @build_vendor@
-builddir = @builddir@
-datadir = @datadir@
-datarootdir = @datarootdir@
-docdir = @docdir@
-dvidir = @dvidir@
-exec_prefix = @exec_prefix@
-gl_LIBOBJS = @gl_LIBOBJS@
-gl_LTLIBOBJS = @gl_LTLIBOBJS@
-host = @host@
-host_alias = @host_alias@
-host_cpu = @host_cpu@
-host_os = @host_os@
-host_vendor = @host_vendor@
-htmldir = @htmldir@
-includedir = @includedir@
-infodir = @infodir@
-install_sh = @install_sh@
-libdir = @libdir@
-libexecdir = @libexecdir@
-lispdir = @lispdir@
-localedir = @localedir@
-localstatedir = @localstatedir@
-mandir = @mandir@
-mkdir_p = @mkdir_p@
-oldincludedir = @oldincludedir@
-pdfdir = @pdfdir@
-prefix = @prefix@
-program_transform_name = @program_transform_name@
-psdir = @psdir@
-runstatedir = @runstatedir@
-sbindir = @sbindir@
-sharedstatedir = @sharedstatedir@
-srcdir = @srcdir@
-sysconfdir = @sysconfdir@
-target_alias = @target_alias@
-top_build_prefix = @top_build_prefix@
-top_builddir = @top_builddir@
-top_srcdir = @top_srcdir@
-AUTOMAKE_OPTIONS = 1.5 foreign
-SUBDIRS = lib m4
-ACLOCAL_AMFLAGS = -I m4
-all: config.h
-	$(MAKE) $(AM_MAKEFLAGS) all-recursive
-
-.SUFFIXES:
-am--refresh: Makefile
-	@:
-$(srcdir)/Makefile.in:  $(srcdir)/Makefile.am  $(am__configure_deps)
-	@for dep in $?; do \
-	  case '$(am__configure_deps)' in \
-	    *$$dep*) \
-	      echo ' cd $(srcdir) && $(AUTOMAKE) --foreign'; \
-	      $(am__cd) $(srcdir) && $(AUTOMAKE) --foreign \
-		&& exit 0; \
-	      exit 1;; \
-	  esac; \
-	done; \
-	echo ' cd $(top_srcdir) && $(AUTOMAKE) --foreign Makefile'; \
-	$(am__cd) $(top_srcdir) && \
-	  $(AUTOMAKE) --foreign Makefile
-.PRECIOUS: Makefile
-Makefile: $(srcdir)/Makefile.in $(top_builddir)/config.status
-	@case '$?' in \
-	  *config.status*) \
-	    echo ' $(SHELL) ./config.status'; \
-	    $(SHELL) ./config.status;; \
-	  *) \
-	    echo ' cd $(top_builddir) && $(SHELL) ./config.status $@ $(am__depfiles_maybe)'; \
-	    cd $(top_builddir) && $(SHELL) ./config.status $@ $(am__depfiles_maybe);; \
-	esac;
-
-$(top_builddir)/config.status: $(top_srcdir)/configure $(CONFIG_STATUS_DEPENDENCIES)
-	$(SHELL) ./config.status --recheck
-
-$(top_srcdir)/configure:  $(am__configure_deps)
-	$(am__cd) $(srcdir) && $(AUTOCONF)
-$(ACLOCAL_M4):  $(am__aclocal_m4_deps)
-	$(am__cd) $(srcdir) && $(ACLOCAL) $(ACLOCAL_AMFLAGS)
-$(am__aclocal_m4_deps):
-
-config.h: stamp-h1
-	@test -f $@ || rm -f stamp-h1
-	@test -f $@ || $(MAKE) $(AM_MAKEFLAGS) stamp-h1
-
-stamp-h1: $(srcdir)/config.h.in $(top_builddir)/config.status
-	@rm -f stamp-h1
-	cd $(top_builddir) && $(SHELL) ./config.status config.h
-$(srcdir)/config.h.in:  $(am__configure_deps) 
-	($(am__cd) $(top_srcdir) && $(AUTOHEADER))
-	rm -f stamp-h1
-	touch $@
-
-distclean-hdr:
-	-rm -f config.h stamp-h1
-
-# This directory's subdirectories are mostly independent; you can cd
-# into them and run 'make' without going through this Makefile.
-# To change the values of 'make' variables: instead of editing Makefiles,
-# (1) if the variable is set in 'config.status', edit 'config.status'
-#     (which will cause the Makefiles to be regenerated when you run 'make');
-# (2) otherwise, pass the desired values on the 'make' command line.
-$(am__recursive_targets):
-	@fail=; \
-	if $(am__make_keepgoing); then \
-	  failcom='fail=yes'; \
-	else \
-	  failcom='exit 1'; \
-	fi; \
-	dot_seen=no; \
-	target=`echo $@ | sed s/-recursive//`; \
-	case "$@" in \
-	  distclean-* | maintainer-clean-*) list='$(DIST_SUBDIRS)' ;; \
-	  *) list='$(SUBDIRS)' ;; \
-	esac; \
-	for subdir in $$list; do \
-	  echo "Making $$target in $$subdir"; \
-	  if test "$$subdir" = "."; then \
-	    dot_seen=yes; \
-	    local_target="$$target-am"; \
-	  else \
-	    local_target="$$target"; \
-	  fi; \
-	  ($(am__cd) $$subdir && $(MAKE) $(AM_MAKEFLAGS) $$local_target) \
-	  || eval $$failcom; \
-	done; \
-	if test "$$dot_seen" = "no"; then \
-	  $(MAKE) $(AM_MAKEFLAGS) "$$target-am" || exit 1; \
-	fi; test -z "$$fail"
-
-ID: $(am__tagged_files)
-	$(am__define_uniq_tagged_files); mkid -fID $$unique
-tags: tags-recursive
-TAGS: tags
-
-tags-am: $(TAGS_DEPENDENCIES) $(am__tagged_files)
-	set x; \
-	here=`pwd`; \
-	if ($(ETAGS) --etags-include --version) >/dev/null 2>&1; then \
-	  include_option=--etags-include; \
-	  empty_fix=.; \
-	else \
-	  include_option=--include; \
-	  empty_fix=; \
-	fi; \
-	list='$(SUBDIRS)'; for subdir in $$list; do \
-	  if test "$$subdir" = .; then :; else \
-	    test ! -f $$subdir/TAGS || \
-	      set "$$@" "$$include_option=$$here/$$subdir/TAGS"; \
-	  fi; \
-	done; \
-	$(am__define_uniq_tagged_files); \
-	shift; \
-	if test -z "$(ETAGS_ARGS)$$*$$unique"; then :; else \
-	  test -n "$$unique" || unique=$$empty_fix; \
-	  if test $$# -gt 0; then \
-	    $(ETAGS) $(ETAGSFLAGS) $(AM_ETAGSFLAGS) $(ETAGS_ARGS) \
-	      "$$@" $$unique; \
-	  else \
-	    $(ETAGS) $(ETAGSFLAGS) $(AM_ETAGSFLAGS) $(ETAGS_ARGS) \
-	      $$unique; \
-	  fi; \
-	fi
-ctags: ctags-recursive
-
-CTAGS: ctags
-ctags-am: $(TAGS_DEPENDENCIES) $(am__tagged_files)
-	$(am__define_uniq_tagged_files); \
-	test -z "$(CTAGS_ARGS)$$unique" \
-	  || $(CTAGS) $(CTAGSFLAGS) $(AM_CTAGSFLAGS) $(CTAGS_ARGS) \
-	     $$unique
-
-GTAGS:
-	here=`$(am__cd) $(top_builddir) && pwd` \
-	  && $(am__cd) $(top_srcdir) \
-	  && gtags -i $(GTAGS_ARGS) "$$here"
-cscope: cscope.files
-	test ! -s cscope.files \
-	  || $(CSCOPE) -b -q $(AM_CSCOPEFLAGS) $(CSCOPEFLAGS) -i cscope.files $(CSCOPE_ARGS)
-clean-cscope:
-	-rm -f cscope.files
-cscope.files: clean-cscope cscopelist
-cscopelist: cscopelist-recursive
-
-cscopelist-am: $(am__tagged_files)
-	list='$(am__tagged_files)'; \
-	case "$(srcdir)" in \
-	  [\\/]* | ?:[\\/]*) sdir="$(srcdir)" ;; \
-	  *) sdir=$(subdir)/$(srcdir) ;; \
-	esac; \
-	for i in $$list; do \
-	  if test -f "$$i"; then \
-	    echo "$(subdir)/$$i"; \
-	  else \
-	    echo "$$sdir/$$i"; \
-	  fi; \
-	done >> $(top_builddir)/cscope.files
-
-distclean-tags:
-	-rm -f TAGS ID GTAGS GRTAGS GSYMS GPATH tags
-	-rm -f cscope.out cscope.in.out cscope.po.out cscope.files
-
-distdir: $(DISTFILES)
-	$(am__remove_distdir)
-	test -d "$(distdir)" || mkdir "$(distdir)"
-	@srcdirstrip=`echo "$(srcdir)" | sed 's/[].[^$$\\*]/\\\\&/g'`; \
-	topsrcdirstrip=`echo "$(top_srcdir)" | sed 's/[].[^$$\\*]/\\\\&/g'`; \
-	list='$(DISTFILES)'; \
-	  dist_files=`for file in $$list; do echo $$file; done | \
-	  sed -e "s|^$$srcdirstrip/||;t" \
-	      -e "s|^$$topsrcdirstrip/|$(top_builddir)/|;t"`; \
-	case $$dist_files in \
-	  */*) $(MKDIR_P) `echo "$$dist_files" | \
-			   sed '/\//!d;s|^|$(distdir)/|;s,/[^/]*$$,,' | \
-			   sort -u` ;; \
-	esac; \
-	for file in $$dist_files; do \
-	  if test -f $$file || test -d $$file; then d=.; else d=$(srcdir); fi; \
-	  if test -d $$d/$$file; then \
-	    dir=`echo "/$$file" | sed -e 's,/[^/]*$$,,'`; \
-	    if test -d "$(distdir)/$$file"; then \
-	      find "$(distdir)/$$file" -type d ! -perm -700 -exec chmod u+rwx {} \;; \
-	    fi; \
-	    if test -d $(srcdir)/$$file && test $$d != $(srcdir); then \
-	      cp -fpR $(srcdir)/$$file "$(distdir)$$dir" || exit 1; \
-	      find "$(distdir)/$$file" -type d ! -perm -700 -exec chmod u+rwx {} \;; \
-	    fi; \
-	    cp -fpR $$d/$$file "$(distdir)$$dir" || exit 1; \
-	  else \
-	    test -f "$(distdir)/$$file" \
-	    || cp -p $$d/$$file "$(distdir)/$$file" \
-	    || exit 1; \
-	  fi; \
-	done
-	@list='$(DIST_SUBDIRS)'; for subdir in $$list; do \
-	  if test "$$subdir" = .; then :; else \
-	    $(am__make_dryrun) \
-	      || test -d "$(distdir)/$$subdir" \
-	      || $(MKDIR_P) "$(distdir)/$$subdir" \
-	      || exit 1; \
-	    dir1=$$subdir; dir2="$(distdir)/$$subdir"; \
-	    $(am__relativize); \
-	    new_distdir=$$reldir; \
-	    dir1=$$subdir; dir2="$(top_distdir)"; \
-	    $(am__relativize); \
-	    new_top_distdir=$$reldir; \
-	    echo " (cd $$subdir && $(MAKE) $(AM_MAKEFLAGS) top_distdir="$$new_top_distdir" distdir="$$new_distdir" \\"; \
-	    echo "     am__remove_distdir=: am__skip_length_check=: am__skip_mode_fix=: distdir)"; \
-	    ($(am__cd) $$subdir && \
-	      $(MAKE) $(AM_MAKEFLAGS) \
-	        top_distdir="$$new_top_distdir" \
-	        distdir="$$new_distdir" \
-		am__remove_distdir=: \
-		am__skip_length_check=: \
-		am__skip_mode_fix=: \
-	        distdir) \
-	      || exit 1; \
-	  fi; \
-	done
-	-test -n "$(am__skip_mode_fix)" \
-	|| find "$(distdir)" -type d ! -perm -755 \
-		-exec chmod u+rwx,go+rx {} \; -o \
-	  ! -type d ! -perm -444 -links 1 -exec chmod a+r {} \; -o \
-	  ! -type d ! -perm -400 -exec chmod a+r {} \; -o \
-	  ! -type d ! -perm -444 -exec $(install_sh) -c -m a+r {} {} \; \
-	|| chmod -R a+r "$(distdir)"
-dist-gzip: distdir
-	tardir=$(distdir) && $(am__tar) | GZIP=$(GZIP_ENV) gzip -c >$(distdir).tar.gz
-	$(am__post_remove_distdir)
-
-dist-bzip2: distdir
-	tardir=$(distdir) && $(am__tar) | BZIP2=$${BZIP2--9} bzip2 -c >$(distdir).tar.bz2
-	$(am__post_remove_distdir)
-
-dist-lzip: distdir
-	tardir=$(distdir) && $(am__tar) | lzip -c $${LZIP_OPT--9} >$(distdir).tar.lz
-	$(am__post_remove_distdir)
-
-dist-xz: distdir
-	tardir=$(distdir) && $(am__tar) | XZ_OPT=$${XZ_OPT--e} xz -c >$(distdir).tar.xz
-	$(am__post_remove_distdir)
-
-dist-tarZ: distdir
-	@echo WARNING: "Support for shar distribution archives is" \
-	               "deprecated." >&2
-	@echo WARNING: "It will be removed altogether in Automake 2.0" >&2
-	tardir=$(distdir) && $(am__tar) | compress -c >$(distdir).tar.Z
-	$(am__post_remove_distdir)
-
-dist-shar: distdir
-	@echo WARNING: "Support for distribution archives compressed with" \
-		       "legacy program 'compress' is deprecated." >&2
-	@echo WARNING: "It will be removed altogether in Automake 2.0" >&2
-	shar $(distdir) | GZIP=$(GZIP_ENV) gzip -c >$(distdir).shar.gz
-	$(am__post_remove_distdir)
-
-dist-zip: distdir
-	-rm -f $(distdir).zip
-	zip -rq $(distdir).zip $(distdir)
-	$(am__post_remove_distdir)
-
-dist dist-all:
-	$(MAKE) $(AM_MAKEFLAGS) $(DIST_TARGETS) am__post_remove_distdir='@:'
-	$(am__post_remove_distdir)
-
-# This target untars the dist file and tries a VPATH configuration.  Then
-# it guarantees that the distribution is self-contained by making another
-# tarfile.
-distcheck: dist
-	case '$(DIST_ARCHIVES)' in \
-	*.tar.gz*) \
-	  GZIP=$(GZIP_ENV) gzip -dc $(distdir).tar.gz | $(am__untar) ;;\
-	*.tar.bz2*) \
-	  bzip2 -dc $(distdir).tar.bz2 | $(am__untar) ;;\
-	*.tar.lz*) \
-	  lzip -dc $(distdir).tar.lz | $(am__untar) ;;\
-	*.tar.xz*) \
-	  xz -dc $(distdir).tar.xz | $(am__untar) ;;\
-	*.tar.Z*) \
-	  uncompress -c $(distdir).tar.Z | $(am__untar) ;;\
-	*.shar.gz*) \
-	  GZIP=$(GZIP_ENV) gzip -dc $(distdir).shar.gz | unshar ;;\
-	*.zip*) \
-	  unzip $(distdir).zip ;;\
-	esac
-	chmod -R a-w $(distdir)
-	chmod u+w $(distdir)
-	mkdir $(distdir)/_build $(distdir)/_inst
-	chmod a-w $(distdir)
-	test -d $(distdir)/_build || exit 0; \
-	dc_install_base=`$(am__cd) $(distdir)/_inst && pwd | sed -e 's,^[^:\\/]:[\\/],/,'` \
-	  && dc_destdir="$${TMPDIR-/tmp}/am-dc-$$$$/" \
-	  && am__cwd=`pwd` \
-	  && $(am__cd) $(distdir)/_build \
-	  && ../configure --srcdir=.. --prefix="$$dc_install_base" \
-	    $(AM_DISTCHECK_CONFIGURE_FLAGS) \
-	    $(DISTCHECK_CONFIGURE_FLAGS) \
-	  && $(MAKE) $(AM_MAKEFLAGS) \
-	  && $(MAKE) $(AM_MAKEFLAGS) dvi \
-	  && $(MAKE) $(AM_MAKEFLAGS) check \
-	  && $(MAKE) $(AM_MAKEFLAGS) install \
-	  && $(MAKE) $(AM_MAKEFLAGS) installcheck \
-	  && $(MAKE) $(AM_MAKEFLAGS) uninstall \
-	  && $(MAKE) $(AM_MAKEFLAGS) distuninstallcheck_dir="$$dc_install_base" \
-	        distuninstallcheck \
-	  && chmod -R a-w "$$dc_install_base" \
-	  && ({ \
-	       (cd ../.. && umask 077 && mkdir "$$dc_destdir") \
-	       && $(MAKE) $(AM_MAKEFLAGS) DESTDIR="$$dc_destdir" install \
-	       && $(MAKE) $(AM_MAKEFLAGS) DESTDIR="$$dc_destdir" uninstall \
-	       && $(MAKE) $(AM_MAKEFLAGS) DESTDIR="$$dc_destdir" \
-	            distuninstallcheck_dir="$$dc_destdir" distuninstallcheck; \
-	      } || { rm -rf "$$dc_destdir"; exit 1; }) \
-	  && rm -rf "$$dc_destdir" \
-	  && $(MAKE) $(AM_MAKEFLAGS) dist \
-	  && rm -rf $(DIST_ARCHIVES) \
-	  && $(MAKE) $(AM_MAKEFLAGS) distcleancheck \
-	  && cd "$$am__cwd" \
-	  || exit 1
-	$(am__post_remove_distdir)
-	@(echo "$(distdir) archives ready for distribution: "; \
-	  list='$(DIST_ARCHIVES)'; for i in $$list; do echo $$i; done) | \
-	  sed -e 1h -e 1s/./=/g -e 1p -e 1x -e '$$p' -e '$$x'
-distuninstallcheck:
-	@test -n '$(distuninstallcheck_dir)' || { \
-	  echo 'ERROR: trying to run $@ with an empty' \
-	       '$$(distuninstallcheck_dir)' >&2; \
-	  exit 1; \
-	}; \
-	$(am__cd) '$(distuninstallcheck_dir)' || { \
-	  echo 'ERROR: cannot chdir into $(distuninstallcheck_dir)' >&2; \
-	  exit 1; \
-	}; \
-	test `$(am__distuninstallcheck_listfiles) | wc -l` -eq 0 \
-	   || { echo "ERROR: files left after uninstall:" ; \
-	        if test -n "$(DESTDIR)"; then \
-	          echo "  (check DESTDIR support)"; \
-	        fi ; \
-	        $(distuninstallcheck_listfiles) ; \
-	        exit 1; } >&2
-distcleancheck: distclean
-	@if test '$(srcdir)' = . ; then \
-	  echo "ERROR: distcleancheck can only run from a VPATH build" ; \
-	  exit 1 ; \
-	fi
-	@test `$(distcleancheck_listfiles) | wc -l` -eq 0 \
-	  || { echo "ERROR: files left in build directory after distclean:" ; \
-	       $(distcleancheck_listfiles) ; \
-	       exit 1; } >&2
-check-am: all-am
-check: check-recursive
-all-am: Makefile config.h
-installdirs: installdirs-recursive
-installdirs-am:
-install: install-recursive
-install-exec: install-exec-recursive
-install-data: install-data-recursive
-uninstall: uninstall-recursive
-
-install-am: all-am
-	@$(MAKE) $(AM_MAKEFLAGS) install-exec-am install-data-am
-
-installcheck: installcheck-recursive
-install-strip:
-	if test -z '$(STRIP)'; then \
-	  $(MAKE) $(AM_MAKEFLAGS) INSTALL_PROGRAM="$(INSTALL_STRIP_PROGRAM)" \
-	    install_sh_PROGRAM="$(INSTALL_STRIP_PROGRAM)" INSTALL_STRIP_FLAG=-s \
-	      install; \
-	else \
-	  $(MAKE) $(AM_MAKEFLAGS) INSTALL_PROGRAM="$(INSTALL_STRIP_PROGRAM)" \
-	    install_sh_PROGRAM="$(INSTALL_STRIP_PROGRAM)" INSTALL_STRIP_FLAG=-s \
-	    "INSTALL_PROGRAM_ENV=STRIPPROG='$(STRIP)'" install; \
-	fi
-mostlyclean-generic:
-
-clean-generic:
-
-distclean-generic:
-	-test -z "$(CONFIG_CLEAN_FILES)" || rm -f $(CONFIG_CLEAN_FILES)
-	-test . = "$(srcdir)" || test -z "$(CONFIG_CLEAN_VPATH_FILES)" || rm -f $(CONFIG_CLEAN_VPATH_FILES)
-
-maintainer-clean-generic:
-	@echo "This command is intended for maintainers to use"
-	@echo "it deletes files that may require special tools to rebuild."
-clean: clean-recursive
-
-clean-am: clean-generic mostlyclean-am
-
-distclean: distclean-recursive
-	-rm -f $(am__CONFIG_DISTCLEAN_FILES)
-	-rm -f Makefile
-distclean-am: clean-am distclean-generic distclean-hdr distclean-tags
-
-dvi: dvi-recursive
-
-dvi-am:
-
-html: html-recursive
-
-html-am:
-
-info: info-recursive
-
-info-am:
-
-install-data-am:
-
-install-dvi: install-dvi-recursive
-
-install-dvi-am:
-
-install-exec-am:
-
-install-html: install-html-recursive
-
-install-html-am:
-
-install-info: install-info-recursive
-
-install-info-am:
-
-install-man:
-
-install-pdf: install-pdf-recursive
-
-install-pdf-am:
-
-install-ps: install-ps-recursive
-
-install-ps-am:
-
-installcheck-am:
-
-maintainer-clean: maintainer-clean-recursive
-	-rm -f $(am__CONFIG_DISTCLEAN_FILES)
-	-rm -rf $(top_srcdir)/autom4te.cache
-	-rm -f Makefile
-maintainer-clean-am: distclean-am maintainer-clean-generic
-
-mostlyclean: mostlyclean-recursive
-
-mostlyclean-am: mostlyclean-generic
-
-pdf: pdf-recursive
-
-pdf-am:
-
-ps: ps-recursive
-
-ps-am:
-
-uninstall-am:
-
-.MAKE: $(am__recursive_targets) all install-am install-strip
-
-.PHONY: $(am__recursive_targets) CTAGS GTAGS TAGS all all-am \
-	am--refresh check check-am clean clean-cscope clean-generic \
-	cscope cscopelist-am ctags ctags-am dist dist-all dist-bzip2 \
-	dist-gzip dist-lzip dist-shar dist-tarZ dist-xz dist-zip \
-	distcheck distclean distclean-generic distclean-hdr \
-	distclean-tags distcleancheck distdir distuninstallcheck dvi \
-	dvi-am html html-am info info-am install install-am \
-	install-data install-data-am install-dvi install-dvi-am \
-	install-exec install-exec-am install-html install-html-am \
-	install-info install-info-am install-man install-pdf \
-	install-pdf-am install-ps install-ps-am install-strip \
-	installcheck installcheck-am installdirs installdirs-am \
-	maintainer-clean maintainer-clean-generic mostlyclean \
-	mostlyclean-generic pdf pdf-am ps ps-am tags tags-am uninstall \
-	uninstall-am
-
-
-# Tell versions [3.59,3.63) of GNU make to not export all variables.
-# Otherwise a system limit (for SysV at least) may be exceeded.
-.NOEXPORT:
diff -Nuar groff-1.22.3.old/src/libs/libbib/.gitignore groff-1.22.3/src/libs/libbib/.gitignore
--- groff-1.22.3.old/src/libs/libbib/.gitignore	1970-01-01 02:00:00.000000000 +0200
+++ groff-1.22.3/src/libs/libbib/.gitignore	2015-04-23 20:57:03.000000000 +0300
@@ -0,0 +1 @@
+Makefile.dep
diff -Nuar groff-1.22.3.old/src/libs/libbib/libbib.am groff-1.22.3/src/libs/libbib/libbib.am
--- groff-1.22.3.old/src/libs/libbib/libbib.am	1970-01-01 02:00:00.000000000 +0200
+++ groff-1.22.3/src/libs/libbib/libbib.am	2015-04-23 20:57:03.000000000 +0300
@@ -0,0 +1,30 @@
+# Automake rules for `libbib'
+#
+# File position: <groff-source>/src/libs/libbib/libbib.am
+#
+# Copyright (C) 2014  Free Software Foundation, Inc.
+#
+# `groff' is free software; you can redistribute it and/or modify it
+# under the terms of the GNU General Public License as published by
+# the Free Software Foundation, either version 2 of the License, or
+# (at your option) any later version.
+#
+# `groff' is distributed in the hope that it will be useful, but
+# WITHOUT ANY WARRANTY; without even the implied warranty of
+# MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the GNU
+# General Public License for more details.
+#
+# You should have received a copy of the GNU General Public License
+# along with this program. If not, see
+# <http://www.gnu.org/licenses/gpl-2.0.html>.
+#
+########################################################################
+
+noinst_LIBRARIES += libbib.a
+libbib_a_SOURCES = \
+  src/libs/libbib/common.cpp \
+  src/libs/libbib/index.cpp \
+  src/libs/libbib/linear.cpp \
+  src/libs/libbib/search.cpp \
+  src/libs/libbib/map.c
+src/libs/libbib/index.$(OBJEXT): defs.h
diff -Nuar groff-1.22.3.old/src/libs/libbib/Makefile.sub groff-1.22.3/src/libs/libbib/Makefile.sub
--- groff-1.22.3.old/src/libs/libbib/Makefile.sub	2014-11-04 10:38:35.183524522 +0200
+++ groff-1.22.3/src/libs/libbib/Makefile.sub	1970-01-01 02:00:00.000000000 +0200
@@ -1,46 +0,0 @@
-# Makefile.sub for `libbib'
-#
-# File position: <groff-source>/src/libs/libbib/Makefile.sub
-#
-# Copyright (C) 2014  Free Software Foundation, Inc.
-#
-# This file is part of `font utf8' which is part of `groff'.
-#
-# `groff' is free software; you can redistribute it and/or modify it
-# under the terms of the GNU General Public License as published by
-# the Free Software Foundation, either version 2 of the License, or
-# (at your option) any later version.
-#
-# `groff' is distributed in the hope that it will be useful, but
-# WITHOUT ANY WARRANTY; without even the implied warranty of
-# MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the GNU
-# General Public License for more details.
-#
-# You should have received a copy of the GNU General Public License
-# along with this program. If not, see
-# <http://www.gnu.org/licenses/gpl-2.0.html>.
-#
-########################################################################
-
-LIB=bib
-OBJS=\
-  common.$(OBJEXT) \
-  index.$(OBJEXT) \
-  linear.$(OBJEXT) \
-  search.$(OBJEXT) \
-  map.$(OBJEXT)
-CCSRCS=\
-  $(srcdir)/common.cpp \
-  $(srcdir)/index.cpp \
-  $(srcdir)/linear.cpp \
-  $(srcdir)/search.cpp
-CSRCS=\
-  $(srcdir)/map.c
-
-########################################################################
-# Emacs settings
-########################################################################
-#
-# Local Variables:
-# mode: makefile
-# End:
diff -Nuar groff-1.22.3.old/src/libs/libdriver/.gitignore groff-1.22.3/src/libs/libdriver/.gitignore
--- groff-1.22.3.old/src/libs/libdriver/.gitignore	1970-01-01 02:00:00.000000000 +0200
+++ groff-1.22.3/src/libs/libdriver/.gitignore	2015-04-23 20:57:03.000000000 +0300
@@ -0,0 +1 @@
+Makefile.dep
diff -Nuar groff-1.22.3.old/src/libs/libdriver/libdriver.am groff-1.22.3/src/libs/libdriver/libdriver.am
--- groff-1.22.3.old/src/libs/libdriver/libdriver.am	1970-01-01 02:00:00.000000000 +0200
+++ groff-1.22.3/src/libs/libdriver/libdriver.am	2015-04-23 20:57:03.000000000 +0300
@@ -0,0 +1,26 @@
+# Automake rules for `libdriver'
+#
+# File position: <groff-source>/src/libs/libdriver/libdriver.am
+#
+# Copyright (C) 2014  Free Software Foundation, Inc.
+#
+# `groff' is free software; you can redistribute it and/or modify it
+# under the terms of the GNU General Public License as published by
+# the Free Software Foundation, either version 2 of the License, or
+# (at your option) any later version.
+#
+# `groff' is distributed in the hope that it will be useful, but
+# WITHOUT ANY WARRANTY; without even the implied warranty of
+# MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the GNU
+# General Public License for more details.
+#
+# You should have received a copy of the GNU General Public License
+# along with this program. If not, see
+# <http://www.gnu.org/licenses/gpl-2.0.html>.
+#
+########################################################################
+
+noinst_LIBRARIES += libdriver.a
+libdriver_a_SOURCES = \
+  src/libs/libdriver/input.cpp \
+  src/libs/libdriver/printer.cpp
diff -Nuar groff-1.22.3.old/src/libs/libdriver/Makefile.sub groff-1.22.3/src/libs/libdriver/Makefile.sub
--- groff-1.22.3.old/src/libs/libdriver/Makefile.sub	2014-11-04 10:38:35.178524584 +0200
+++ groff-1.22.3/src/libs/libdriver/Makefile.sub	1970-01-01 02:00:00.000000000 +0200
@@ -1,39 +0,0 @@
-# Makefile.sub for `libdriver'
-#
-# File position: <groff-source>/src/libs/libdriver/Makefile.sub
-#
-# Copyright (C) 2014  Free Software Foundation, Inc.
-#
-# This file is part of `font utf8' which is part of `groff'.
-#
-# `groff' is free software; you can redistribute it and/or modify it
-# under the terms of the GNU General Public License as published by
-# the Free Software Foundation, either version 2 of the License, or
-# (at your option) any later version.
-#
-# `groff' is distributed in the hope that it will be useful, but
-# WITHOUT ANY WARRANTY; without even the implied warranty of
-# MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the GNU
-# General Public License for more details.
-#
-# You should have received a copy of the GNU General Public License
-# along with this program. If not, see
-# <http://www.gnu.org/licenses/gpl-2.0.html>.
-#
-########################################################################
-
-LIB=driver
-OBJS=\
-  input.$(OBJEXT) \
-  printer.$(OBJEXT)
-CCSRCS=\
-  $(srcdir)/input.cpp \
-  $(srcdir)/printer.cpp
-
-########################################################################
-# Emacs settings
-########################################################################
-#
-# Local Variables:
-# mode: makefile
-# End:
diff -Nuar groff-1.22.3.old/src/libs/libgroff/.gitignore groff-1.22.3/src/libs/libgroff/.gitignore
--- groff-1.22.3.old/src/libs/libgroff/.gitignore	1970-01-01 02:00:00.000000000 +0200
+++ groff-1.22.3/src/libs/libgroff/.gitignore	2015-04-23 20:57:03.000000000 +0300
@@ -0,0 +1,5 @@
+Makefile.dep
+version.cpp
+ref-del.sed
+ref-add.sed
+charset.alias
diff -Nuar groff-1.22.3.old/src/libs/libgroff/glyphuni.cpp groff-1.22.3/src/libs/libgroff/glyphuni.cpp
--- groff-1.22.3.old/src/libs/libgroff/glyphuni.cpp	2014-11-04 10:38:35.169524697 +0200
+++ groff-1.22.3/src/libs/libgroff/glyphuni.cpp	2015-04-23 20:57:03.000000000 +0300
@@ -474,12 +474,6 @@
   { "bracerightbt", "23AD" },
   { "an", "23AF" },
   { "br", "2502" },
-  { "rk", "251D" },
-  { "lk", "2525" },
-  { "lt", "256D" },
-  { "rt", "256E" },
-  { "rb", "256F" },
-  { "lb", "2570" },
   { "sq", "25A1" },
   { "lz", "25CA" },
   { "ci", "25CB" },
diff -Nuar groff-1.22.3.old/src/libs/libgroff/lf.cpp groff-1.22.3/src/libs/libgroff/lf.cpp
--- groff-1.22.3.old/src/libs/libgroff/lf.cpp	2014-11-04 10:38:35.170524684 +0200
+++ groff-1.22.3/src/libs/libgroff/lf.cpp	2015-04-23 20:57:03.000000000 +0300
@@ -22,6 +22,7 @@
 #include "lib.h"
 #include "cset.h"
 #include "stringclass.h"
+#include "lf.h"
 
 extern void change_filename(const char *);
 extern void change_lineno(int);
@@ -60,3 +61,18 @@
   change_lineno(ln);
   return 1;
 }
+
+#if defined(__MSDOS__) || (defined(_WIN32) && !defined(__CYGWIN__))
+void normalize_for_lf (string &fn)
+{
+  int fnlen = fn.length();
+  for (int i = 0; i < fnlen; i++) {
+    if (fn[i] == '\\')
+      fn[i] = '/';
+  }
+}
+#else
+void normalize_for_lf (string &)
+{
+}
+#endif
diff -Nuar groff-1.22.3.old/src/libs/libgroff/libgroff.am groff-1.22.3/src/libs/libgroff/libgroff.am
--- groff-1.22.3.old/src/libs/libgroff/libgroff.am	1970-01-01 02:00:00.000000000 +0200
+++ groff-1.22.3/src/libs/libgroff/libgroff.am	2015-04-23 20:57:03.000000000 +0300
@@ -0,0 +1,172 @@
+# Copyright (C) 2014
+#      Free Software Foundation, Inc.
+# 
+# This file is part of groff.
+#
+# groff is free software; you can redistribute it and/or modify it under
+# the terms of the GNU General Public License as published by the Free
+# Software Foundation, either version 3 of the License, or
+# (at your option) any later version.
+#
+# groff is distributed in the hope that it will be useful, but WITHOUT ANY
+# WARRANTY; without even the implied warranty of MERCHANTABILITY or
+# FITNESS FOR A PARTICULAR PURPOSE.  See the GNU General Public License
+# for more details.
+#
+# You should have received a copy of the GNU General Public License
+# along with this program. If not, see <http://www.gnu.org/licenses/>.
+
+libgroff_srcdir = $(top_srcdir)/src/libs/libgroff
+noinst_LIBRARIES += libgroff.a
+libgroff_a_CPPFLAGS = \
+  $(AM_CPPFLAGS) \
+  -D__GETOPT_PREFIX=groff_ \
+  -DENABLE_RELOCATABLE=1 \
+  -DLIBDIR=\"$(libdir)\"
+
+# Build from OBJS
+libgroff_a_SOURCES = \
+  src/libs/libgroff/assert.cpp \
+  src/libs/libgroff/change_lf.cpp \
+  src/libs/libgroff/cmap.cpp \
+  src/libs/libgroff/color.cpp \
+  src/libs/libgroff/cset.cpp\
+  src/libs/libgroff/device.cpp \
+  src/libs/libgroff/errarg.cpp \
+  src/libs/libgroff/error.cpp \
+  src/libs/libgroff/fatal.cpp \
+  src/libs/libgroff/filename.cpp \
+  src/libs/libgroff/font.cpp \
+  src/libs/libgroff/fontfile.cpp \
+  src/libs/libgroff/geometry.cpp \
+  src/libs/libgroff/getopt.c \
+  src/libs/libgroff/getopt1.c \
+  src/libs/libgroff/glyphuni.cpp \
+  src/libs/libgroff/htmlhint.cpp \
+  src/libs/libgroff/hypot.cpp \
+  src/libs/libgroff/iftoa.c \
+  src/libs/libgroff/invalid.cpp \
+  src/libs/libgroff/itoa.c \
+  src/libs/libgroff/lf.cpp \
+  src/libs/libgroff/lineno.cpp \
+  src/libs/libgroff/localcharset.c \
+  src/libs/libgroff/macropath.cpp \
+  src/libs/libgroff/matherr.c \
+  src/libs/libgroff/maxfilename.cpp \
+  src/libs/libgroff/maxpathname.cpp \
+  src/libs/libgroff/mksdir.cpp \
+  src/libs/libgroff/nametoindex.cpp \
+  src/libs/libgroff/new.cpp \
+  src/libs/libgroff/paper.cpp \
+  src/libs/libgroff/prime.cpp \
+  src/libs/libgroff/progname.c \
+  src/libs/libgroff/ptable.cpp \
+  src/libs/libgroff/quotearg.c \
+  src/libs/libgroff/relocate.cpp \
+  src/libs/libgroff/searchpath.cpp \
+  src/libs/libgroff/spawnvp.c \
+  src/libs/libgroff/string.cpp \
+  src/libs/libgroff/strsave.cpp \
+  src/libs/libgroff/symbol.cpp \
+  src/libs/libgroff/tmpfile.cpp \
+  src/libs/libgroff/tmpname.cpp \
+  src/libs/libgroff/unicode.cpp \
+  src/libs/libgroff/uniglyph.cpp \
+  src/libs/libgroff/uniuni.cpp \
+  src/libs/libgroff/relocatable.h
+nodist_libgroff_a_SOURCES = src/libs/libgroff/version.cpp
+
+# TODO: these .c files could be removed (use gnulib instead), same
+# thing for snprintf.
+EXTRA_DIST += \
+  src/libs/libgroff/mkstemp.cpp \
+  src/libs/libgroff/fmod.c \
+  src/libs/libgroff/getcwd.c \
+  src/libs/libgroff/putenv.c \
+  src/libs/libgroff/strcasecmp.c \
+  src/libs/libgroff/strerror.c \
+  src/libs/libgroff/strncasecmp.c \
+  src/libs/libgroff/strtol.c \
+  src/libs/libgroff/config.charset \
+  src/libs/libgroff/ref-add.sin \
+  src/libs/libgroff/ref-del.sin \
+  src/libs/libgroff/make-uniuni \
+  src/libs/snprintf/snprintf.c
+
+src_version=`cat $(top_srcdir)/VERSION`
+src_revision=`cat $(top_srcdir)/REVISION`
+
+CLEANFILES += \
+  src/libs/libgroff/version.cpp \
+  charset.alias \
+  ref-add.sed \
+  ref-del.sed
+
+# .o files have a 'libgroff_a-' prefix because we set libgroff_a_CPPFLAGS
+src/libs/libgroff/libgroff_a-device.$(OBJEXT): defs.h
+src/libs/libgroff/libgroff_a-fontfile.$(OBJEXT): defs.h
+src/libs/libgroff/libgroff_a-macropath.$(OBJEXT): defs.h
+src/libs/libgroff/libgroff_a-relocate.$(OBJEXT): defs.h
+
+src/libs/libgroff/version.cpp: $(top_srcdir)/VERSION $(top_srcdir)/REVISION
+	@echo Making version.cpp
+	@echo const char \*version_string = \"$(src_version)\"\; >$@
+	@echo const char \*revision_string = \"$(src_revision)\"\; >>$@
+	@echo extern \"C\" { >>$@
+	@echo const char \*Version_string = \"$(src_version).$(src_revision)\"\; >>$@
+	@echo } >>$@ \
+	  | sed -e 's/\.0\"/\"/' >>$@
+
+# Data for localcharset.c.  Taken from libiconv/libcharset.
+
+LIBGROFF_PACKAGE = groff
+
+all: charset.alias ref-add.sed ref-del.sed
+
+charset.alias: $(libgroff_srcdir)/config.charset
+	$(SHELL) $(libgroff_srcdir)/config.charset '$(HOST)' > t-$@
+	mv t-$@ $@
+
+ref-add.sed : $(libgroff_srcdir)/ref-add.sin
+	sed -e '/^#/d' \
+	    -e 's/@''PACKAGE''@/$(LIBGROFF_PACKAGE)/g' $(libgroff_srcdir)/ref-add.sin > t-$@
+	mv t-$@ $@
+
+ref-del.sed : $(libgroff_srcdir)/ref-del.sin
+	sed -e '/^#/d' \
+	    -e 's/@''PACKAGE''@/$(LIBGROFF_PACKAGE)/g' $(libgroff_srcdir)/ref-del.sin > t-$@
+	mv t-$@ $@
+
+install-data-local: install_charset_data
+install_charset_data:
+	-test $(GLIBC21) != no || $(mkinstalldirs) $(DESTDIR)$(libdir)
+	if test -f $(DESTDIR)$(libdir)/charset.alias; then \
+	  sed -f ref-add.sed $(DESTDIR)$(libdir)/charset.alias \
+	    > $(DESTDIR)$(libdir)/t-charset.alias; \
+	  $(INSTALL_DATA) $(DESTDIR)$(libdir)/t-charset.alias \
+	    $(DESTDIR)$(libdir)/charset.alias; \
+	  rm -f $(DESTDIR)$(libdir)/t-charset.alias; \
+	else \
+	  if test $(GLIBC21) = no; then \
+	    sed -f ref-add.sed charset.alias \
+	      > $(DESTDIR)$(libdir)/t-charset.alias; \
+	    $(INSTALL_DATA) $(DESTDIR)$(libdir)/t-charset.alias \
+	      $(DESTDIR)$(libdir)/charset.alias; \
+	    rm -f $(DESTDIR)$(libdir)/t-charset.alias; \
+	  fi; \
+	fi
+
+uninstall-local: uninstall_charset_data
+uninstall_charset_data:
+	-if test -f $(DESTDIR)$(libdir)/charset.alias; then \
+	  sed -f ref-del.sed $(DESTDIR)$(libdir)/charset.alias \
+	    > $(DESTDIR)$(libdir)/t-charset.alias; \
+	  if grep '^# Packages using this file: $$' \
+	          $(DESTDIR)$(libdir)/t-charset.alias > /dev/null; then \
+	    rm -f $(DESTDIR)$(libdir)/charset.alias; \
+	  else \
+	    $(INSTALL_DATA) $(DESTDIR)$(libdir)/t-charset.alias \
+	      $(DESTDIR)$(libdir)/charset.alias; \
+	  fi; \
+	  rm -f $(DESTDIR)$(libdir)/t-charset.alias; \
+	fi
diff -Nuar groff-1.22.3.old/src/libs/libgroff/Makefile.sub groff-1.22.3/src/libs/libgroff/Makefile.sub
--- groff-1.22.3.old/src/libs/libgroff/Makefile.sub	2014-11-04 10:38:35.170524684 +0200
+++ groff-1.22.3/src/libs/libgroff/Makefile.sub	1970-01-01 02:00:00.000000000 +0200
@@ -1,223 +0,0 @@
-# Makefile.sub for `libgroff'
-#
-# File position: <groff-source>/src/libs/libgroff/Makefile.sub
-#
-# Copyright (C) 2014  Free Software Foundation, Inc.
-#
-# This file is part of `font utf8' which is part of `groff'.
-#
-# `groff' is free software; you can redistribute it and/or modify it
-# under the terms of the GNU General Public License as published by
-# the Free Software Foundation, either version 2 of the License, or
-# (at your option) any later version.
-#
-# `groff' is distributed in the hope that it will be useful, but
-# WITHOUT ANY WARRANTY; without even the implied warranty of
-# MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the GNU
-# General Public License for more details.
-#
-# You should have received a copy of the GNU General Public License
-# along with this program. If not, see
-# <http://www.gnu.org/licenses/gpl-2.0.html>.
-#
-########################################################################
-
-LIB=groff
-EXTRA_CFLAGS=-D__GETOPT_PREFIX=groff_ \
-             -DENABLE_RELOCATABLE=1 \
-             -DLIBDIR=\"$(libdir)\"
-OBJS=\
-  assert.$(OBJEXT) \
-  change_lf.$(OBJEXT) \
-  cmap.$(OBJEXT) \
-  color.$(OBJEXT) \
-  cset.$(OBJEXT) \
-  device.$(OBJEXT) \
-  errarg.$(OBJEXT) \
-  error.$(OBJEXT) \
-  fatal.$(OBJEXT) \
-  filename.$(OBJEXT) \
-  font.$(OBJEXT) \
-  fontfile.$(OBJEXT) \
-  geometry.$(OBJEXT) \
-  getopt.$(OBJEXT) \
-  getopt1.$(OBJEXT) \
-  glyphuni.$(OBJEXT) \
-  htmlhint.$(OBJEXT) \
-  hypot.$(OBJEXT) \
-  iftoa.$(OBJEXT) \
-  invalid.$(OBJEXT) \
-  itoa.$(OBJEXT) \
-  lf.$(OBJEXT) \
-  lineno.$(OBJEXT) \
-  localcharset.$(OBJEXT) \
-  macropath.$(OBJEXT) \
-  matherr.$(OBJEXT) \
-  maxfilename.$(OBJEXT) \
-  maxpathname.$(OBJEXT) \
-  mksdir.$(OBJEXT) \
-  nametoindex.$(OBJEXT) \
-  new.$(OBJEXT) \
-  paper.$(OBJEXT) \
-  prime.$(OBJEXT) \
-  progname.$(OBJEXT) \
-  ptable.$(OBJEXT) \
-  quotearg.$(OBJEXT) \
-  relocate.$(OBJEXT) \
-  searchpath.$(OBJEXT) \
-  spawnvp.$(OBJEXT) \
-  string.$(OBJEXT) \
-  strsave.$(OBJEXT) \
-  symbol.$(OBJEXT) \
-  tmpfile.$(OBJEXT) \
-  tmpname.$(OBJEXT) \
-  unicode.$(OBJEXT) \
-  uniglyph.$(OBJEXT) \
-  uniuni.$(OBJEXT) \
-  version.$(OBJEXT) \
-  $(LIBOBJS)
-CCSRCS=\
-  $(srcdir)/assert.cpp \
-  $(srcdir)/change_lf.cpp \
-  $(srcdir)/cmap.cpp \
-  $(srcdir)/color.cpp \
-  $(srcdir)/cset.cpp \
-  $(srcdir)/device.cpp \
-  $(srcdir)/errarg.cpp \
-  $(srcdir)/error.cpp \
-  $(srcdir)/fatal.cpp \
-  $(srcdir)/filename.cpp \
-  $(srcdir)/font.cpp \
-  $(srcdir)/fontfile.cpp \
-  $(srcdir)/geometry.cpp \
-  $(srcdir)/glyphuni.cpp \
-  $(srcdir)/htmlhint.cpp \
-  $(srcdir)/hypot.cpp \
-  $(srcdir)/invalid.cpp \
-  $(srcdir)/lf.cpp \
-  $(srcdir)/lineno.cpp \
-  $(srcdir)/macropath.cpp \
-  $(srcdir)/maxfilename.cpp \
-  $(srcdir)/maxpathname.cpp \
-  $(srcdir)/mksdir.cpp \
-  $(srcdir)/mkstemp.cpp \
-  $(srcdir)/nametoindex.cpp \
-  $(srcdir)/new.cpp \
-  $(srcdir)/paper.cpp \
-  $(srcdir)/prime.cpp \
-  $(srcdir)/ptable.cpp \
-  $(srcdir)/relocate.cpp \
-  $(srcdir)/searchpath.cpp \
-  $(srcdir)/string.cpp \
-  $(srcdir)/strsave.cpp \
-  $(srcdir)/symbol.cpp \
-  $(srcdir)/tmpfile.cpp \
-  $(srcdir)/tmpname.cpp \
-  $(srcdir)/unicode.cpp \
-  $(srcdir)/uniglyph.cpp \
-  $(srcdir)/uniuni.cpp \
-  version.cpp
-CSRCS=\
-  $(srcdir)/fmod.c \
-  $(srcdir)/getcwd.c \
-  $(srcdir)/getopt.c \
-  $(srcdir)/getopt1.c \
-  $(srcdir)/iftoa.c \
-  $(srcdir)/itoa.c \
-  $(srcdir)/localcharset.c \
-  $(srcdir)/matherr.c \
-  $(srcdir)/progname.c \
-  $(srcdir)/putenv.c \
-  $(srcdir)/quotearg.c \
-  $(srcdir)/spawnvp.c \
-  $(srcdir)/strcasecmp.c \
-  $(srcdir)/strerror.c \
-  $(srcdir)/strncasecmp.c \
-  $(srcdir)/strtol.c \
-  $(srcdir)/../snprintf/snprintf.c
-GENSRCS=\
-  version.cpp
-RM=rm -f
-
-src_version=`cat $(top_srcdir)/VERSION`
-src_revision=`cat $(top_srcdir)/REVISION`
-
-version.cpp: $(top_srcdir)/VERSION $(top_srcdir)/REVISION
-	@echo Making version.cpp
-	@echo const char \*version_string = \"$(src_version)\"\; >$@
-	@echo const char \*revision_string = \"$(src_revision)\"\; >>$@
-	@echo extern \"C\" const char \*Version_string = \"$(src_version).$(src_revision)\"\; \
-	  | sed -e 's/\.0\"/\"/' >>$@
-
-# We have to avoid $(COMPILE.c) since we must not use groff's `assert.h'
-snprintf.$(OBJEXT): $(srcdir)/../snprintf/snprintf.c
-	$(CC) -c $(CDEFINES) $(CFLAGS) $(CPPFLAGS) \
-	  $(srcdir)/../snprintf/snprintf.c
-
-# Data for localcharset.c.  Taken from libiconv/libcharset.
-
-all: charset.alias ref-add.sed ref-del.sed
-
-charset.alias: $(srcdir)/config.charset
-	$(SHELL) $(srcdir)/config.charset '$(HOST)' > t-$@
-	mv t-$@ $@
-
-PACKAGE=groff
-
-ref-add.sed : $(srcdir)/ref-add.sin
-	sed -e '/^#/d' \
-	    -e 's/@''PACKAGE''@/$(PACKAGE)/g' $(srcdir)/ref-add.sin > t-$@
-	mv t-$@ $@
-
-ref-del.sed : $(srcdir)/ref-del.sin
-	sed -e '/^#/d' \
-	    -e 's/@''PACKAGE''@/$(PACKAGE)/g' $(srcdir)/ref-del.sin > t-$@
-	mv t-$@ $@
-
-MKINSTALLDIRS = $(SHELL) $(top_srcdir)/mkinstalldirs
-
-install_data: install_charset_data
-install_charset_data:
-	-test $(GLIBC21) != no || $(MKINSTALLDIRS) $(DESTDIR)$(libdir)
-	if test -f $(DESTDIR)$(libdir)/charset.alias; then \
-	  sed -f ref-add.sed $(DESTDIR)$(libdir)/charset.alias \
-	    > $(DESTDIR)$(libdir)/t-charset.alias; \
-	  $(INSTALL_DATA) $(DESTDIR)$(libdir)/t-charset.alias \
-	    $(DESTDIR)$(libdir)/charset.alias; \
-	  $(RM) $(DESTDIR)$(libdir)/t-charset.alias; \
-	else \
-	  if test $(GLIBC21) = no; then \
-	    sed -f ref-add.sed charset.alias \
-	      > $(DESTDIR)$(libdir)/t-charset.alias; \
-	    $(INSTALL_DATA) $(DESTDIR)$(libdir)/t-charset.alias \
-	      $(DESTDIR)$(libdir)/charset.alias; \
-	    $(RM) $(DESTDIR)$(libdir)/t-charset.alias; \
-	  fi; \
-	fi
-
-uninstall_sub: uninstall_charset_data
-uninstall_charset_data:
-	-if test -f $(DESTDIR)$(libdir)/charset.alias; then \
-	  sed -f ref-del.sed $(DESTDIR)$(libdir)/charset.alias \
-	    > $(DESTDIR)$(libdir)/t-charset.alias; \
-	  if grep '^# Packages using this file: $$' \
-	          $(DESTDIR)$(libdir)/t-charset.alias > /dev/null; then \
-	    $(RM) $(DESTDIR)$(libdir)/charset.alias; \
-	  else \
-	    $(INSTALL_DATA) $(DESTDIR)$(libdir)/t-charset.alias \
-	      $(DESTDIR)$(libdir)/charset.alias; \
-	  fi; \
-	  $(RM) $(DESTDIR)$(libdir)/t-charset.alias; \
-	fi
-
-clean: clean_charset
-clean_charset:
-	$(RM) charset.alias ref-add.sed ref-del.sed
-
-########################################################################
-# Emacs settings
-########################################################################
-#
-# Local Variables:
-# mode: makefile
-# End:
diff -Nuar groff-1.22.3.old/src/libs/libgroff/make-uniuni groff-1.22.3/src/libs/libgroff/make-uniuni
--- groff-1.22.3.old/src/libs/libgroff/make-uniuni	2014-11-04 10:38:35.170524684 +0200
+++ groff-1.22.3/src/libs/libgroff/make-uniuni	2015-04-23 20:57:03.000000000 +0300
@@ -74,8 +74,7 @@
 # Write preamble.
 cat <<END
 // -*- C++ -*-
-/* Copyright (C) 2002, 2003, 2004, 2005
-   Free Software Foundation, Inc.
+/* Copyright (C) 2002-2014  Free Software Foundation, Inc.
      Written by Werner Lemberg <wl@gnu.org>
 
 This file is part of groff.
diff -Nuar groff-1.22.3.old/src/libs/libgroff/uniglyph.cpp groff-1.22.3/src/libs/libgroff/uniglyph.cpp
--- groff-1.22.3.old/src/libs/libgroff/uniglyph.cpp	2014-11-04 10:38:35.172524659 +0200
+++ groff-1.22.3/src/libs/libgroff/uniglyph.cpp	2015-04-23 20:57:03.000000000 +0300
@@ -460,12 +460,6 @@
 //{ "23AD", "bracerightbt" },
   { "23AF", "an" },
   { "2502", "br" },
-  { "251D", "rk" },
-  { "2525", "lk" },
-  { "256D", "lt" },
-  { "256E", "rt" },
-  { "256F", "rb" },
-  { "2570", "lb" },
   { "25A1", "sq" },
   { "25CA", "lz" },
   { "25CB", "ci" },
diff -Nuar groff-1.22.3.old/src/libs/libgroff/uniuni.cpp groff-1.22.3/src/libs/libgroff/uniuni.cpp
--- groff-1.22.3.old/src/libs/libgroff/uniuni.cpp	2014-11-04 10:38:35.173524647 +0200
+++ groff-1.22.3/src/libs/libgroff/uniuni.cpp	2015-04-23 20:57:03.000000000 +0300
@@ -18,8 +18,8 @@
 along with this program. If not, see <http://www.gnu.org/licenses/>. */
 
 // This code has been algorithmically derived from the file
-// UnicodeData.txt, version 4.1.0, available from unicode.org,
-// on 2005-12-09.
+// UnicodeData.txt, version 7.0.0, available from unicode.org,
+// on 2014-12-16.
 
 #include "lib.h"
 #include "stringclass.h"
@@ -446,6 +446,17 @@
   { "0FAC", "20FAB_0FB7" },
   { "0FB9", "20F90_0FB5" },
   { "1026", "21025_102E" },
+  { "1B06", "21B05_1B35" },
+  { "1B08", "21B07_1B35" },
+  { "1B0A", "21B09_1B35" },
+  { "1B0C", "21B0B_1B35" },
+  { "1B0E", "21B0D_1B35" },
+  { "1B12", "21B11_1B35" },
+  { "1B3B", "21B3A_1B35" },
+  { "1B3D", "21B3C_1B35" },
+  { "1B40", "21B3E_1B35" },
+  { "1B41", "21B3F_1B35" },
+  { "1B43", "21B42_1B35" },
   { "1E00", "20041_0325" },
   { "1E01", "20061_0325" },
   { "1E02", "20042_0307" },
@@ -1320,6 +1331,8 @@
   { "FA2B", "198FC" },
   { "FA2C", "19928" },
   { "FA2D", "19DB4" },
+  { "FA2E", "190DE" },
+  { "FA2F", "196B7" },
   { "FA30", "14FAE" },
   { "FA31", "150E7" },
   { "FA32", "1514D" },
@@ -1379,6 +1392,9 @@
   { "FA68", "196E3" },
   { "FA69", "197FF" },
   { "FA6A", "1983B" },
+  { "FA6B", "16075" },
+  { "FA6C", "1242EE" },
+  { "FA6D", "18218" },
   { "FA70", "14E26" },
   { "FA71", "151B5" },
   { "FA72", "15168" },
@@ -1519,6 +1535,18 @@
   { "FB4C", "205D1_05BF" },
   { "FB4D", "205DB_05BF" },
   { "FB4E", "205E4_05BF" },
+  { "1109A", "211099_110BA" },
+  { "1109C", "21109B_110BA" },
+  { "110AB", "2110A5_110BA" },
+  { "1112E", "211131_11127" },
+  { "1112F", "211132_11127" },
+  { "1134B", "211347_1133E" },
+  { "1134C", "211347_11357" },
+  { "114BB", "2114B9_114BA" },
+  { "114BC", "2114B9_114B0" },
+  { "114BE", "2114B9_114BD" },
+  { "115BA", "2115B8_115AF" },
+  { "115BB", "2115B9_115AF" },
   { "1D15E", "21D157_1D165" },
   { "1D15F", "21D158_1D165" },
   { "1D160", "31D158_1D165_1D16E" },
diff -Nuar groff-1.22.3.old/src/libs/libxutil/.gitignore groff-1.22.3/src/libs/libxutil/.gitignore
--- groff-1.22.3.old/src/libs/libxutil/.gitignore	1970-01-01 02:00:00.000000000 +0200
+++ groff-1.22.3/src/libs/libxutil/.gitignore	2015-04-23 20:57:03.000000000 +0300
@@ -0,0 +1 @@
+Makefile.dep
diff -Nuar groff-1.22.3.old/src/libs/libxutil/libxutil.am groff-1.22.3/src/libs/libxutil/libxutil.am
--- groff-1.22.3.old/src/libs/libxutil/libxutil.am	1970-01-01 02:00:00.000000000 +0200
+++ groff-1.22.3/src/libs/libxutil/libxutil.am	2015-04-23 20:57:03.000000000 +0300
@@ -0,0 +1,30 @@
+# Automake rules for `libxutil'
+#
+# File position: <groff-source>/src/libs/libxutil/libxutil.am
+#
+# Copyright (C) 2014 Free Software Foundation, Inc.
+#
+# `groff' is free software; you can redistribute it and/or modify it
+# under the terms of the GNU General Public License as published by
+# the Free Software Foundation, either version 2 of the License, or
+# (at your option) any later version.
+#
+# `groff' is distributed in the hope that it will be useful, but
+# WITHOUT ANY WARRANTY; without even the implied warranty of
+# MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the GNU
+# General Public License for more details.
+#
+# You should have received a copy of the GNU General Public License
+# along with this program. If not, see
+# <http://www.gnu.org/licenses/gpl-2.0.html>.
+#
+########################################################################
+
+if !WITHOUT_X11
+noinst_LIBRARIES += libxutil.a
+libxutil_a_CPPFLAGS = $(AM_CPPFLAGS) $(X_CFLAGS)
+libxutil_a_SOURCES = \
+  src/libs/libxutil/DviChar.c \
+  src/libs/libxutil/XFontName.c \
+  src/libs/libxutil/xmalloc.c
+endif
diff -Nuar groff-1.22.3.old/src/libs/libxutil/Makefile.sub groff-1.22.3/src/libs/libxutil/Makefile.sub
--- groff-1.22.3.old/src/libs/libxutil/Makefile.sub	2014-11-04 10:38:35.187524472 +0200
+++ groff-1.22.3/src/libs/libxutil/Makefile.sub	1970-01-01 02:00:00.000000000 +0200
@@ -1,42 +0,0 @@
-# Makefile.sub for `libxutil'
-#
-# File position: <groff-source>/src/libs/libxutil/Makefile.sub
-#
-# Copyright (C) 2014 Free Software Foundation, Inc.
-#
-# This file is part of `font utf8' which is part of `groff'.
-#
-# `groff' is free software; you can redistribute it and/or modify it
-# under the terms of the GNU General Public License as published by
-# the Free Software Foundation, either version 2 of the License, or
-# (at your option) any later version.
-#
-# `groff' is distributed in the hope that it will be useful, but
-# WITHOUT ANY WARRANTY; without even the implied warranty of
-# MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the GNU
-# General Public License for more details.
-#
-# You should have received a copy of the GNU General Public License
-# along with this program. If not, see
-# <http://www.gnu.org/licenses/gpl-2.0.html>.
-#
-########################################################################
-
-LIB=xutil
-EXTRA_CFLAGS=$(X_CFLAGS)
-OBJS=\
-  DviChar.$(OBJEXT) \
-  XFontName.$(OBJEXT) \
-  xmalloc.$(OBJEXT)
-CSRCS=\
-  $(srcdir)/DviChar.c \
-  $(srcdir)/XFontName.c \
-  $(srcdir)/xmalloc.c
-
-########################################################################
-# Emacs settings
-########################################################################
-#
-# Local Variables:
-# mode: makefile
-# End:
diff -Nuar groff-1.22.3.old/src/preproc/eqn/eqn.am groff-1.22.3/src/preproc/eqn/eqn.am
--- groff-1.22.3.old/src/preproc/eqn/eqn.am	1970-01-01 02:00:00.000000000 +0200
+++ groff-1.22.3/src/preproc/eqn/eqn.am	2015-04-23 20:57:03.000000000 +0300
@@ -0,0 +1,64 @@
+# Copyright (C) 2014
+#      Free Software Foundation, Inc.
+# 
+# This file is part of groff.
+#
+# groff is free software; you can redistribute it and/or modify it under
+# the terms of the GNU General Public License as published by the Free
+# Software Foundation, either version 3 of the License, or
+# (at your option) any later version.
+#
+# groff is distributed in the hope that it will be useful, but WITHOUT ANY
+# WARRANTY; without even the implied warranty of MERCHANTABILITY or
+# FITNESS FOR A PARTICULAR PURPOSE.  See the GNU General Public License
+# for more details.
+#
+# You should have received a copy of the GNU General Public License
+# along with this program. If not, see <http://www.gnu.org/licenses/>.
+
+prefixexecbin_PROGRAMS += eqn
+prefixexecbin_SCRIPTS += neqn
+eqn_CPPFLAGS = \
+  $(AM_CPPFLAGS) \
+  -I $(top_srcdir)/src/preproc/eqn \
+  -I $(top_builddir)/src/preproc/eqn
+eqn_LDADD = $(LIBM) libgroff.a
+eqn_SOURCES = \
+  src/preproc/eqn/main.cpp \
+  src/preproc/eqn/lex.cpp \
+  src/preproc/eqn/box.cpp \
+  src/preproc/eqn/limit.cpp \
+  src/preproc/eqn/list.cpp \
+  src/preproc/eqn/over.cpp \
+  src/preproc/eqn/text.cpp \
+  src/preproc/eqn/script.cpp \
+  src/preproc/eqn/mark.cpp \
+  src/preproc/eqn/other.cpp \
+  src/preproc/eqn/delim.cpp \
+  src/preproc/eqn/sqrt.cpp \
+  src/preproc/eqn/pile.cpp \
+  src/preproc/eqn/special.cpp \
+  src/preproc/eqn/eqn.ypp \
+  src/preproc/eqn/box.h \
+  src/preproc/eqn/pbox.h \
+  src/preproc/eqn/eqn.h
+
+PREFIXMAN1 += src/preproc/eqn/eqn.n src/preproc/eqn/neqn.n
+EXTRA_DIST += \
+  src/preproc/eqn/TODO \
+  src/preproc/eqn/neqn.sh \
+  src/preproc/eqn/eqn.man \
+  src/preproc/eqn/neqn.man
+
+src/preproc/eqn/eqn-lex.$(OBJEXT): src/preproc/eqn/eqn.hpp
+CLEANFILES += \
+  src/preproc/eqn/eqn.hpp \
+  src/preproc/eqn/eqn.cpp \
+  src/preproc/eqn/eqn.output
+
+neqn: $(top_srcdir)/src/preproc/eqn/neqn.sh $(SH_DEPS_SED_SCRIPT)
+	$(RM) $@
+	sed -e 's/[@]g[@]/$(g)/g' \
+	    -f $(SH_DEPS_SED_SCRIPT) \
+	    -e $(SH_SCRIPT_SED_CMD) $(top_srcdir)/src/preproc/eqn/neqn.sh >$@
+	chmod +x $@
diff -Nuar groff-1.22.3.old/src/preproc/eqn/eqn.cpp groff-1.22.3/src/preproc/eqn/eqn.cpp
--- groff-1.22.3.old/src/preproc/eqn/eqn.cpp	2014-11-04 10:38:38.327485217 +0200
+++ groff-1.22.3/src/preproc/eqn/eqn.cpp	1970-01-01 02:00:00.000000000 +0200
@@ -1,2163 +0,0 @@
-/* A Bison parser, made by GNU Bison 3.0.2.  */
-
-/* Bison implementation for Yacc-like parsers in C
-
-   Copyright (C) 1984, 1989-1990, 2000-2013 Free Software Foundation, Inc.
-
-   This program is free software: you can redistribute it and/or modify
-   it under the terms of the GNU General Public License as published by
-   the Free Software Foundation, either version 3 of the License, or
-   (at your option) any later version.
-
-   This program is distributed in the hope that it will be useful,
-   but WITHOUT ANY WARRANTY; without even the implied warranty of
-   MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
-   GNU General Public License for more details.
-
-   You should have received a copy of the GNU General Public License
-   along with this program.  If not, see <http://www.gnu.org/licenses/>.  */
-
-/* As a special exception, you may create a larger work that contains
-   part or all of the Bison parser skeleton and distribute that work
-   under terms of your choice, so long as that work isn't itself a
-   parser generator using the skeleton or a modified version thereof
-   as a parser skeleton.  Alternatively, if you modify or redistribute
-   the parser skeleton itself, you may (at your option) remove this
-   special exception, which will cause the skeleton and the resulting
-   Bison output files to be licensed under the GNU General Public
-   License without this special exception.
-
-   This special exception was added by the Free Software Foundation in
-   version 2.2 of Bison.  */
-
-/* C LALR(1) parser skeleton written by Richard Stallman, by
-   simplifying the original so-called "semantic" parser.  */
-
-/* All symbols defined below should begin with yy or YY, to avoid
-   infringing on user name space.  This should be done even for local
-   variables, as they might otherwise be expanded by user macros.
-   There are some unavoidable exceptions within include files to
-   define necessary library symbols; they are noted "INFRINGES ON
-   USER NAME SPACE" below.  */
-
-/* Identify Bison output.  */
-#define YYBISON 1
-
-/* Bison version.  */
-#define YYBISON_VERSION "3.0.2"
-
-/* Skeleton name.  */
-#define YYSKELETON_NAME "yacc.c"
-
-/* Pure parsers.  */
-#define YYPURE 0
-
-/* Push parsers.  */
-#define YYPUSH 0
-
-/* Pull parsers.  */
-#define YYPULL 1
-
-
-
-
-/* Copy the first part of user declarations.  */
-#line 18 "eqn.y" /* yacc.c:339  */
-
-#include <stdio.h>
-#include <string.h>
-#include <stdlib.h>
-
-#include "lib.h"
-#include "box.h"
-extern int non_empty_flag;
-int yylex();
-void yyerror(const char *);
-
-#line 78 "eqn.cpp" /* yacc.c:339  */
-
-# ifndef YY_NULLPTR
-#  if defined __cplusplus && 201103L <= __cplusplus
-#   define YY_NULLPTR nullptr
-#  else
-#   define YY_NULLPTR 0
-#  endif
-# endif
-
-/* Enabling verbose error messages.  */
-#ifdef YYERROR_VERBOSE
-# undef YYERROR_VERBOSE
-# define YYERROR_VERBOSE 1
-#else
-# define YYERROR_VERBOSE 0
-#endif
-
-/* In a future release of Bison, this section will be replaced
-   by #include "y.tab.h".  */
-#ifndef YY_YY_Y_TAB_H_INCLUDED
-# define YY_YY_Y_TAB_H_INCLUDED
-/* Debug traces.  */
-#ifndef YYDEBUG
-# define YYDEBUG 0
-#endif
-#if YYDEBUG
-extern int yydebug;
-#endif
-
-/* Token type.  */
-#ifndef YYTOKENTYPE
-# define YYTOKENTYPE
-  enum yytokentype
-  {
-    OVER = 258,
-    SMALLOVER = 259,
-    SQRT = 260,
-    SUB = 261,
-    SUP = 262,
-    LPILE = 263,
-    RPILE = 264,
-    CPILE = 265,
-    PILE = 266,
-    LEFT = 267,
-    RIGHT = 268,
-    TO = 269,
-    FROM = 270,
-    SIZE = 271,
-    FONT = 272,
-    ROMAN = 273,
-    BOLD = 274,
-    ITALIC = 275,
-    FAT = 276,
-    ACCENT = 277,
-    BAR = 278,
-    UNDER = 279,
-    ABOVE = 280,
-    TEXT = 281,
-    QUOTED_TEXT = 282,
-    FWD = 283,
-    BACK = 284,
-    DOWN = 285,
-    UP = 286,
-    MATRIX = 287,
-    COL = 288,
-    LCOL = 289,
-    RCOL = 290,
-    CCOL = 291,
-    MARK = 292,
-    LINEUP = 293,
-    TYPE = 294,
-    VCENTER = 295,
-    PRIME = 296,
-    SPLIT = 297,
-    NOSPLIT = 298,
-    UACCENT = 299,
-    SPECIAL = 300,
-    SPACE = 301,
-    GFONT = 302,
-    GSIZE = 303,
-    DEFINE = 304,
-    NDEFINE = 305,
-    TDEFINE = 306,
-    SDEFINE = 307,
-    UNDEF = 308,
-    IFDEF = 309,
-    INCLUDE = 310,
-    DELIM = 311,
-    CHARTYPE = 312,
-    SET = 313,
-    GRFONT = 314,
-    GBFONT = 315
-  };
-#endif
-/* Tokens.  */
-#define OVER 258
-#define SMALLOVER 259
-#define SQRT 260
-#define SUB 261
-#define SUP 262
-#define LPILE 263
-#define RPILE 264
-#define CPILE 265
-#define PILE 266
-#define LEFT 267
-#define RIGHT 268
-#define TO 269
-#define FROM 270
-#define SIZE 271
-#define FONT 272
-#define ROMAN 273
-#define BOLD 274
-#define ITALIC 275
-#define FAT 276
-#define ACCENT 277
-#define BAR 278
-#define UNDER 279
-#define ABOVE 280
-#define TEXT 281
-#define QUOTED_TEXT 282
-#define FWD 283
-#define BACK 284
-#define DOWN 285
-#define UP 286
-#define MATRIX 287
-#define COL 288
-#define LCOL 289
-#define RCOL 290
-#define CCOL 291
-#define MARK 292
-#define LINEUP 293
-#define TYPE 294
-#define VCENTER 295
-#define PRIME 296
-#define SPLIT 297
-#define NOSPLIT 298
-#define UACCENT 299
-#define SPECIAL 300
-#define SPACE 301
-#define GFONT 302
-#define GSIZE 303
-#define DEFINE 304
-#define NDEFINE 305
-#define TDEFINE 306
-#define SDEFINE 307
-#define UNDEF 308
-#define IFDEF 309
-#define INCLUDE 310
-#define DELIM 311
-#define CHARTYPE 312
-#define SET 313
-#define GRFONT 314
-#define GBFONT 315
-
-/* Value type.  */
-#if ! defined YYSTYPE && ! defined YYSTYPE_IS_DECLARED
-typedef union YYSTYPE YYSTYPE;
-union YYSTYPE
-{
-#line 30 "eqn.y" /* yacc.c:355  */
-
-	char *str;
-	box *b;
-	pile_box *pb;
-	matrix_box *mb;
-	int n;
-	column *col;
-
-#line 247 "eqn.cpp" /* yacc.c:355  */
-};
-# define YYSTYPE_IS_TRIVIAL 1
-# define YYSTYPE_IS_DECLARED 1
-#endif
-
-
-extern YYSTYPE yylval;
-
-int yyparse (void);
-
-#endif /* !YY_YY_Y_TAB_H_INCLUDED  */
-
-/* Copy the second part of user declarations.  */
-
-#line 262 "eqn.cpp" /* yacc.c:358  */
-
-#ifdef short
-# undef short
-#endif
-
-#ifdef YYTYPE_UINT8
-typedef YYTYPE_UINT8 yytype_uint8;
-#else
-typedef unsigned char yytype_uint8;
-#endif
-
-#ifdef YYTYPE_INT8
-typedef YYTYPE_INT8 yytype_int8;
-#else
-typedef signed char yytype_int8;
-#endif
-
-#ifdef YYTYPE_UINT16
-typedef YYTYPE_UINT16 yytype_uint16;
-#else
-typedef unsigned short int yytype_uint16;
-#endif
-
-#ifdef YYTYPE_INT16
-typedef YYTYPE_INT16 yytype_int16;
-#else
-typedef short int yytype_int16;
-#endif
-
-#ifndef YYSIZE_T
-# ifdef __SIZE_TYPE__
-#  define YYSIZE_T __SIZE_TYPE__
-# elif defined size_t
-#  define YYSIZE_T size_t
-# elif ! defined YYSIZE_T
-#  include <stddef.h> /* INFRINGES ON USER NAME SPACE */
-#  define YYSIZE_T size_t
-# else
-#  define YYSIZE_T unsigned int
-# endif
-#endif
-
-#define YYSIZE_MAXIMUM ((YYSIZE_T) -1)
-
-#ifndef YY_
-# if defined YYENABLE_NLS && YYENABLE_NLS
-#  if ENABLE_NLS
-#   include <libintl.h> /* INFRINGES ON USER NAME SPACE */
-#   define YY_(Msgid) dgettext ("bison-runtime", Msgid)
-#  endif
-# endif
-# ifndef YY_
-#  define YY_(Msgid) Msgid
-# endif
-#endif
-
-#ifndef YY_ATTRIBUTE
-# if (defined __GNUC__                                               \
-      && (2 < __GNUC__ || (__GNUC__ == 2 && 96 <= __GNUC_MINOR__)))  \
-     || defined __SUNPRO_C && 0x5110 <= __SUNPRO_C
-#  define YY_ATTRIBUTE(Spec) __attribute__(Spec)
-# else
-#  define YY_ATTRIBUTE(Spec) /* empty */
-# endif
-#endif
-
-#ifndef YY_ATTRIBUTE_PURE
-# define YY_ATTRIBUTE_PURE   YY_ATTRIBUTE ((__pure__))
-#endif
-
-#ifndef YY_ATTRIBUTE_UNUSED
-# define YY_ATTRIBUTE_UNUSED YY_ATTRIBUTE ((__unused__))
-#endif
-
-#if !defined _Noreturn \
-     && (!defined __STDC_VERSION__ || __STDC_VERSION__ < 201112)
-# if defined _MSC_VER && 1200 <= _MSC_VER
-#  define _Noreturn __declspec (noreturn)
-# else
-#  define _Noreturn YY_ATTRIBUTE ((__noreturn__))
-# endif
-#endif
-
-/* Suppress unused-variable warnings by "using" E.  */
-#if ! defined lint || defined __GNUC__
-# define YYUSE(E) ((void) (E))
-#else
-# define YYUSE(E) /* empty */
-#endif
-
-#if defined __GNUC__ && 407 <= __GNUC__ * 100 + __GNUC_MINOR__
-/* Suppress an incorrect diagnostic about yylval being uninitialized.  */
-# define YY_IGNORE_MAYBE_UNINITIALIZED_BEGIN \
-    _Pragma ("GCC diagnostic push") \
-    _Pragma ("GCC diagnostic ignored \"-Wuninitialized\"")\
-    _Pragma ("GCC diagnostic ignored \"-Wmaybe-uninitialized\"")
-# define YY_IGNORE_MAYBE_UNINITIALIZED_END \
-    _Pragma ("GCC diagnostic pop")
-#else
-# define YY_INITIAL_VALUE(Value) Value
-#endif
-#ifndef YY_IGNORE_MAYBE_UNINITIALIZED_BEGIN
-# define YY_IGNORE_MAYBE_UNINITIALIZED_BEGIN
-# define YY_IGNORE_MAYBE_UNINITIALIZED_END
-#endif
-#ifndef YY_INITIAL_VALUE
-# define YY_INITIAL_VALUE(Value) /* Nothing. */
-#endif
-
-
-#if ! defined yyoverflow || YYERROR_VERBOSE
-
-/* The parser invokes alloca or malloc; define the necessary symbols.  */
-
-# ifdef YYSTACK_USE_ALLOCA
-#  if YYSTACK_USE_ALLOCA
-#   ifdef __GNUC__
-#    define YYSTACK_ALLOC __builtin_alloca
-#   elif defined __BUILTIN_VA_ARG_INCR
-#    include <alloca.h> /* INFRINGES ON USER NAME SPACE */
-#   elif defined _AIX
-#    define YYSTACK_ALLOC __alloca
-#   elif defined _MSC_VER
-#    include <malloc.h> /* INFRINGES ON USER NAME SPACE */
-#    define alloca _alloca
-#   else
-#    define YYSTACK_ALLOC alloca
-#    if ! defined _ALLOCA_H && ! defined EXIT_SUCCESS
-#     include <stdlib.h> /* INFRINGES ON USER NAME SPACE */
-      /* Use EXIT_SUCCESS as a witness for stdlib.h.  */
-#     ifndef EXIT_SUCCESS
-#      define EXIT_SUCCESS 0
-#     endif
-#    endif
-#   endif
-#  endif
-# endif
-
-# ifdef YYSTACK_ALLOC
-   /* Pacify GCC's 'empty if-body' warning.  */
-#  define YYSTACK_FREE(Ptr) do { /* empty */; } while (0)
-#  ifndef YYSTACK_ALLOC_MAXIMUM
-    /* The OS might guarantee only one guard page at the bottom of the stack,
-       and a page size can be as small as 4096 bytes.  So we cannot safely
-       invoke alloca (N) if N exceeds 4096.  Use a slightly smaller number
-       to allow for a few compiler-allocated temporary stack slots.  */
-#   define YYSTACK_ALLOC_MAXIMUM 4032 /* reasonable circa 2006 */
-#  endif
-# else
-#  define YYSTACK_ALLOC YYMALLOC
-#  define YYSTACK_FREE YYFREE
-#  ifndef YYSTACK_ALLOC_MAXIMUM
-#   define YYSTACK_ALLOC_MAXIMUM YYSIZE_MAXIMUM
-#  endif
-#  if (defined __cplusplus && ! defined EXIT_SUCCESS \
-       && ! ((defined YYMALLOC || defined malloc) \
-             && (defined YYFREE || defined free)))
-#   include <stdlib.h> /* INFRINGES ON USER NAME SPACE */
-#   ifndef EXIT_SUCCESS
-#    define EXIT_SUCCESS 0
-#   endif
-#  endif
-#  ifndef YYMALLOC
-#   define YYMALLOC malloc
-#   if ! defined malloc && ! defined EXIT_SUCCESS
-void *malloc (YYSIZE_T); /* INFRINGES ON USER NAME SPACE */
-#   endif
-#  endif
-#  ifndef YYFREE
-#   define YYFREE free
-#   if ! defined free && ! defined EXIT_SUCCESS
-void free (void *); /* INFRINGES ON USER NAME SPACE */
-#   endif
-#  endif
-# endif
-#endif /* ! defined yyoverflow || YYERROR_VERBOSE */
-
-
-#if (! defined yyoverflow \
-     && (! defined __cplusplus \
-         || (defined YYSTYPE_IS_TRIVIAL && YYSTYPE_IS_TRIVIAL)))
-
-/* A type that is properly aligned for any stack member.  */
-union yyalloc
-{
-  yytype_int16 yyss_alloc;
-  YYSTYPE yyvs_alloc;
-};
-
-/* The size of the maximum gap between one aligned stack and the next.  */
-# define YYSTACK_GAP_MAXIMUM (sizeof (union yyalloc) - 1)
-
-/* The size of an array large to enough to hold all stacks, each with
-   N elements.  */
-# define YYSTACK_BYTES(N) \
-     ((N) * (sizeof (yytype_int16) + sizeof (YYSTYPE)) \
-      + YYSTACK_GAP_MAXIMUM)
-
-# define YYCOPY_NEEDED 1
-
-/* Relocate STACK from its old location to the new one.  The
-   local variables YYSIZE and YYSTACKSIZE give the old and new number of
-   elements in the stack, and YYPTR gives the new location of the
-   stack.  Advance YYPTR to a properly aligned location for the next
-   stack.  */
-# define YYSTACK_RELOCATE(Stack_alloc, Stack)                           \
-    do                                                                  \
-      {                                                                 \
-        YYSIZE_T yynewbytes;                                            \
-        YYCOPY (&yyptr->Stack_alloc, Stack, yysize);                    \
-        Stack = &yyptr->Stack_alloc;                                    \
-        yynewbytes = yystacksize * sizeof (*Stack) + YYSTACK_GAP_MAXIMUM; \
-        yyptr += yynewbytes / sizeof (*yyptr);                          \
-      }                                                                 \
-    while (0)
-
-#endif
-
-#if defined YYCOPY_NEEDED && YYCOPY_NEEDED
-/* Copy COUNT objects from SRC to DST.  The source and destination do
-   not overlap.  */
-# ifndef YYCOPY
-#  if defined __GNUC__ && 1 < __GNUC__
-#   define YYCOPY(Dst, Src, Count) \
-      __builtin_memcpy (Dst, Src, (Count) * sizeof (*(Src)))
-#  else
-#   define YYCOPY(Dst, Src, Count)              \
-      do                                        \
-        {                                       \
-          YYSIZE_T yyi;                         \
-          for (yyi = 0; yyi < (Count); yyi++)   \
-            (Dst)[yyi] = (Src)[yyi];            \
-        }                                       \
-      while (0)
-#  endif
-# endif
-#endif /* !YYCOPY_NEEDED */
-
-/* YYFINAL -- State number of the termination state.  */
-#define YYFINAL  72
-/* YYLAST -- Last index in YYTABLE.  */
-#define YYLAST   379
-
-/* YYNTOKENS -- Number of terminals.  */
-#define YYNTOKENS  66
-/* YYNNTS -- Number of nonterminals.  */
-#define YYNNTS  18
-/* YYNRULES -- Number of rules.  */
-#define YYNRULES  75
-/* YYNSTATES -- Number of states.  */
-#define YYNSTATES  142
-
-/* YYTRANSLATE[YYX] -- Symbol number corresponding to YYX as returned
-   by yylex, with out-of-bounds checking.  */
-#define YYUNDEFTOK  2
-#define YYMAXUTOK   315
-
-#define YYTRANSLATE(YYX)                                                \
-  ((unsigned int) (YYX) <= YYMAXUTOK ? yytranslate[YYX] : YYUNDEFTOK)
-
-/* YYTRANSLATE[TOKEN-NUM] -- Symbol number corresponding to TOKEN-NUM
-   as returned by yylex, without out-of-bounds checking.  */
-static const yytype_uint8 yytranslate[] =
-{
-       0,     2,     2,     2,     2,     2,     2,     2,     2,    63,
-       2,     2,     2,     2,     2,     2,     2,     2,     2,     2,
-       2,     2,     2,     2,     2,     2,     2,     2,     2,     2,
-       2,     2,     2,     2,     2,     2,     2,     2,     2,     2,
-       2,     2,     2,     2,     2,     2,     2,     2,     2,     2,
-       2,     2,     2,     2,     2,     2,     2,     2,     2,     2,
-       2,     2,     2,     2,     2,     2,     2,     2,     2,     2,
-       2,     2,     2,     2,     2,     2,     2,     2,     2,     2,
-       2,     2,     2,     2,     2,     2,     2,     2,     2,     2,
-       2,     2,     2,     2,    61,     2,     2,     2,     2,     2,
-       2,     2,     2,     2,     2,     2,     2,     2,     2,     2,
-       2,     2,     2,     2,     2,     2,     2,     2,     2,     2,
-       2,     2,     2,    64,     2,    65,    62,     2,     2,     2,
-       2,     2,     2,     2,     2,     2,     2,     2,     2,     2,
-       2,     2,     2,     2,     2,     2,     2,     2,     2,     2,
-       2,     2,     2,     2,     2,     2,     2,     2,     2,     2,
-       2,     2,     2,     2,     2,     2,     2,     2,     2,     2,
-       2,     2,     2,     2,     2,     2,     2,     2,     2,     2,
-       2,     2,     2,     2,     2,     2,     2,     2,     2,     2,
-       2,     2,     2,     2,     2,     2,     2,     2,     2,     2,
-       2,     2,     2,     2,     2,     2,     2,     2,     2,     2,
-       2,     2,     2,     2,     2,     2,     2,     2,     2,     2,
-       2,     2,     2,     2,     2,     2,     2,     2,     2,     2,
-       2,     2,     2,     2,     2,     2,     2,     2,     2,     2,
-       2,     2,     2,     2,     2,     2,     2,     2,     2,     2,
-       2,     2,     2,     2,     2,     2,     1,     2,     3,     4,
-       5,     6,     7,     8,     9,    10,    11,    12,    13,    14,
-      15,    16,    17,    18,    19,    20,    21,    22,    23,    24,
-      25,    26,    27,    28,    29,    30,    31,    32,    33,    34,
-      35,    36,    37,    38,    39,    40,    41,    42,    43,    44,
-      45,    46,    47,    48,    49,    50,    51,    52,    53,    54,
-      55,    56,    57,    58,    59,    60
-};
-
-#if YYDEBUG
-  /* YYRLINE[YYN] -- Source line where rule number YYN was defined.  */
-static const yytype_uint16 yyrline[] =
-{
-       0,   121,   121,   123,   128,   130,   141,   143,   145,   150,
-     152,   154,   156,   158,   163,   165,   167,   169,   174,   176,
-     181,   183,   185,   190,   192,   194,   196,   198,   200,   202,
-     204,   206,   208,   210,   212,   214,   216,   218,   220,   222,
-     224,   226,   228,   230,   232,   234,   236,   238,   240,   242,
-     244,   246,   248,   250,   252,   254,   259,   269,   271,   276,
-     278,   283,   285,   290,   292,   297,   299,   304,   306,   308,
-     310,   314,   316,   321,   323,   325
-};
-#endif
-
-#if YYDEBUG || YYERROR_VERBOSE || 0
-/* YYTNAME[SYMBOL-NUM] -- String name of the symbol SYMBOL-NUM.
-   First, the terminals, then, starting at YYNTOKENS, nonterminals.  */
-static const char *const yytname[] =
-{
-  "$end", "error", "$undefined", "OVER", "SMALLOVER", "SQRT", "SUB",
-  "SUP", "LPILE", "RPILE", "CPILE", "PILE", "LEFT", "RIGHT", "TO", "FROM",
-  "SIZE", "FONT", "ROMAN", "BOLD", "ITALIC", "FAT", "ACCENT", "BAR",
-  "UNDER", "ABOVE", "TEXT", "QUOTED_TEXT", "FWD", "BACK", "DOWN", "UP",
-  "MATRIX", "COL", "LCOL", "RCOL", "CCOL", "MARK", "LINEUP", "TYPE",
-  "VCENTER", "PRIME", "SPLIT", "NOSPLIT", "UACCENT", "SPECIAL", "SPACE",
-  "GFONT", "GSIZE", "DEFINE", "NDEFINE", "TDEFINE", "SDEFINE", "UNDEF",
-  "IFDEF", "INCLUDE", "DELIM", "CHARTYPE", "SET", "GRFONT", "GBFONT",
-  "'^'", "'~'", "'\\t'", "'{'", "'}'", "$accept", "top", "equation",
-  "mark", "from_to", "sqrt_over", "script", "nonsup", "simple", "number",
-  "pile_element_list", "pile_arg", "column_list", "column_element_list",
-  "column_arg", "column", "text", "delim", YY_NULLPTR
-};
-#endif
-
-# ifdef YYPRINT
-/* YYTOKNUM[NUM] -- (External) token number corresponding to the
-   (internal) symbol number NUM (which must be that of a token).  */
-static const yytype_uint16 yytoknum[] =
-{
-       0,   256,   257,   258,   259,   260,   261,   262,   263,   264,
-     265,   266,   267,   268,   269,   270,   271,   272,   273,   274,
-     275,   276,   277,   278,   279,   280,   281,   282,   283,   284,
-     285,   286,   287,   288,   289,   290,   291,   292,   293,   294,
-     295,   296,   297,   298,   299,   300,   301,   302,   303,   304,
-     305,   306,   307,   308,   309,   310,   311,   312,   313,   314,
-     315,    94,   126,     9,   123,   125
-};
-# endif
-
-#define YYPACT_NINF -76
-
-#define yypact_value_is_default(Yystate) \
-  (!!((Yystate) == (-76)))
-
-#define YYTABLE_NINF -1
-
-#define yytable_value_is_error(Yytable_value) \
-  0
-
-  /* YYPACT[STATE-NUM] -- Index in YYTABLE of the portion describing
-     STATE-NUM.  */
-static const yytype_int16 yypact[] =
-{
-     230,   269,     6,     6,     6,     6,     2,    14,    14,   308,
-     308,   308,   308,   -76,   -76,    14,    14,    14,    14,   -50,
-     230,   230,    14,   308,     4,    23,    14,   -76,   -76,   -76,
-     230,    24,   230,   -76,   -76,    70,   -76,   -76,    20,   -76,
-     -76,   -76,   230,   -44,   -76,   -76,   -76,   -76,   -76,   -76,
-     -76,   -76,   230,   308,   308,    57,    57,    57,    57,   308,
-     308,   308,   308,     3,   -76,   -76,   308,    57,   -76,   -76,
-     308,   130,   -76,   -76,   269,   269,   269,   269,   308,   308,
-     308,   -76,   -76,   -76,   308,   230,   -12,   230,   191,    57,
-      57,    57,    57,    57,    57,     8,     8,     8,     8,    12,
-     -76,    57,    57,   -76,   -76,   -76,   -76,    79,   -76,   335,
-     -76,   -76,   -76,   230,   -76,    -6,     2,   230,    28,   -76,
-     -76,   -76,   -76,   -76,   -76,   269,   269,   308,   230,   -76,
-     -76,   230,    -3,   230,   -76,   -76,   -76,   230,   -76,    -2,
-     230,   -76
-};
-
-  /* YYDEFACT[STATE-NUM] -- Default reduction number in state STATE-NUM.
-     Performed when YYTABLE does not specify something else to do.  Zero
-     means the default is an error.  */
-static const yytype_uint8 yydefact[] =
-{
-       2,     0,     0,     0,     0,     0,     0,     0,     0,     0,
-       0,     0,     0,    23,    24,     0,     0,     0,     0,     0,
-       0,     0,     0,     0,     0,     0,     0,    27,    28,    29,
-       0,     0,     3,     4,     6,     9,    14,    18,    20,    15,
-      71,    72,     0,     0,    32,    56,    33,    34,    31,    74,
-      75,    73,     0,     0,     0,    43,    44,    45,    46,     0,
-       0,     0,     0,     0,     7,     8,     0,    54,    25,    26,
-       0,     0,     1,     5,     0,     0,     0,     0,     0,     0,
-       0,    38,    39,    40,     0,    57,     0,     0,    37,    48,
-      47,    49,    50,    52,    51,     0,     0,     0,     0,     0,
-      61,    53,    55,    30,    16,    17,    10,    11,    21,    20,
-      19,    41,    42,     0,    59,     0,     0,     0,     0,    67,
-      68,    69,    70,    35,    62,     0,     0,     0,    58,    60,
-      36,    63,     0,     0,    12,    13,    22,     0,    65,     0,
-      64,    66
-};
-
-  /* YYPGOTO[NTERM-NUM].  */
-static const yytype_int8 yypgoto[] =
-{
-     -76,   -76,     0,   -17,   -75,     1,   -67,   -13,    46,    -7,
-       9,    13,   -76,   -47,    22,    -4,    -1,   -29
-};
-
-  /* YYDEFGOTO[NTERM-NUM].  */
-static const yytype_int16 yydefgoto[] =
-{
-      -1,    31,    85,    33,    34,    35,    36,    37,    38,    43,
-      86,    44,    99,   132,   119,   100,    45,    52
-};
-
-  /* YYTABLE[YYPACT[STATE-NUM]] -- What to do in state STATE-NUM.  If
-     positive, shift that token.  If negative, reduce the rule whose
-     number is the opposite.  If YYTABLE_NINF, syntax error.  */
-static const yytype_uint8 yytable[] =
-{
-      32,   106,    39,    64,    65,    51,    53,    54,    59,    60,
-      61,    62,   110,   113,    63,    73,    46,    47,    48,   113,
-      87,    66,   137,   137,    72,    70,    78,    79,    40,    41,
-      71,    68,    40,    41,    40,    41,    95,    96,    97,    98,
-      40,    41,    80,    81,    82,    95,    96,    97,    98,    69,
-     134,   135,    88,   114,    73,    55,    56,    57,    58,   129,
-     136,    83,   138,   141,    84,   108,    49,    50,    73,    67,
-      42,    73,   117,    74,    75,   104,   105,   123,   107,    80,
-      81,    82,    74,    75,    76,    77,   139,   130,   118,   118,
-     118,   118,   133,   125,   126,   124,   115,     0,    83,    89,
-      90,    84,     0,     0,     0,    91,    92,    93,    94,     0,
-       0,    73,   101,   128,    73,    51,   102,   131,   120,   121,
-     122,     0,     0,    73,   109,     0,   111,     0,     0,     0,
-     112,     0,     0,   131,     0,     1,     0,   140,     2,     3,
-       4,     5,     6,     0,     0,     0,     7,     8,     9,    10,
-      11,    12,     0,     0,     0,     0,    13,    14,    15,    16,
-      17,    18,    19,     0,     0,     0,     0,    20,    21,    22,
-      23,     0,    24,    25,     0,    26,     0,     0,     0,     0,
-       0,     0,     0,     0,     0,     0,     0,     0,     0,     0,
-       0,    27,    28,    29,    30,   103,     1,     0,     0,     2,
-       3,     4,     5,     6,   116,     0,     0,     7,     8,     9,
-      10,    11,    12,     0,     0,     0,     0,    13,    14,    15,
-      16,    17,    18,    19,     0,     0,     0,     0,    20,    21,
-      22,    23,     0,    24,    25,     1,    26,     0,     2,     3,
-       4,     5,     6,     0,     0,     0,     7,     8,     9,    10,
-      11,    12,    27,    28,    29,    30,    13,    14,    15,    16,
-      17,    18,    19,     0,     0,     0,     0,    20,    21,    22,
-      23,     0,    24,    25,     1,    26,     0,     2,     3,     4,
-       5,     6,     0,     0,     0,     7,     8,     9,    10,    11,
-      12,    27,    28,    29,    30,    13,    14,    15,    16,    17,
-      18,    19,     0,     0,     0,     0,     0,     0,    22,    23,
-       0,    24,    25,     0,    26,     0,     2,     3,     4,     5,
-       6,     0,     0,     0,     7,     8,     9,    10,    11,    12,
-      27,    28,    29,    30,    13,    14,    15,    16,    17,    18,
-      19,    78,   127,     0,     0,     0,     0,    22,    23,     0,
-      24,    25,     0,    26,     0,     0,     0,    80,    81,    82,
-       0,     0,     0,     0,     0,     0,     0,     0,     0,    27,
-      28,    29,    30,     0,     0,     0,    83,     0,     0,    84
-};
-
-static const yytype_int16 yycheck[] =
-{
-       0,    76,     1,    20,    21,     6,     7,     8,    15,    16,
-      17,    18,    79,    25,    64,    32,     3,     4,     5,    25,
-      64,    22,    25,    25,     0,    26,     6,     7,    26,    27,
-      30,    27,    26,    27,    26,    27,    33,    34,    35,    36,
-      26,    27,    22,    23,    24,    33,    34,    35,    36,    26,
-     125,   126,    52,    65,    71,     9,    10,    11,    12,    65,
-     127,    41,    65,    65,    44,    78,    64,    65,    85,    23,
-      64,    88,    64,     3,     4,    74,    75,    65,    77,    22,
-      23,    24,     3,     4,    14,    15,   133,   116,    95,    96,
-      97,    98,    64,    14,    15,    99,    87,    -1,    41,    53,
-      54,    44,    -1,    -1,    -1,    59,    60,    61,    62,    -1,
-      -1,   128,    66,   113,   131,   116,    70,   117,    96,    97,
-      98,    -1,    -1,   140,    78,    -1,    80,    -1,    -1,    -1,
-      84,    -1,    -1,   133,    -1,     5,    -1,   137,     8,     9,
-      10,    11,    12,    -1,    -1,    -1,    16,    17,    18,    19,
-      20,    21,    -1,    -1,    -1,    -1,    26,    27,    28,    29,
-      30,    31,    32,    -1,    -1,    -1,    -1,    37,    38,    39,
-      40,    -1,    42,    43,    -1,    45,    -1,    -1,    -1,    -1,
-      -1,    -1,    -1,    -1,    -1,    -1,    -1,    -1,    -1,    -1,
-      -1,    61,    62,    63,    64,    65,     5,    -1,    -1,     8,
-       9,    10,    11,    12,    13,    -1,    -1,    16,    17,    18,
-      19,    20,    21,    -1,    -1,    -1,    -1,    26,    27,    28,
-      29,    30,    31,    32,    -1,    -1,    -1,    -1,    37,    38,
-      39,    40,    -1,    42,    43,     5,    45,    -1,     8,     9,
-      10,    11,    12,    -1,    -1,    -1,    16,    17,    18,    19,
-      20,    21,    61,    62,    63,    64,    26,    27,    28,    29,
-      30,    31,    32,    -1,    -1,    -1,    -1,    37,    38,    39,
-      40,    -1,    42,    43,     5,    45,    -1,     8,     9,    10,
-      11,    12,    -1,    -1,    -1,    16,    17,    18,    19,    20,
-      21,    61,    62,    63,    64,    26,    27,    28,    29,    30,
-      31,    32,    -1,    -1,    -1,    -1,    -1,    -1,    39,    40,
-      -1,    42,    43,    -1,    45,    -1,     8,     9,    10,    11,
-      12,    -1,    -1,    -1,    16,    17,    18,    19,    20,    21,
-      61,    62,    63,    64,    26,    27,    28,    29,    30,    31,
-      32,     6,     7,    -1,    -1,    -1,    -1,    39,    40,    -1,
-      42,    43,    -1,    45,    -1,    -1,    -1,    22,    23,    24,
-      -1,    -1,    -1,    -1,    -1,    -1,    -1,    -1,    -1,    61,
-      62,    63,    64,    -1,    -1,    -1,    41,    -1,    -1,    44
-};
-
-  /* YYSTOS[STATE-NUM] -- The (internal number of the) accessing
-     symbol of state STATE-NUM.  */
-static const yytype_uint8 yystos[] =
-{
-       0,     5,     8,     9,    10,    11,    12,    16,    17,    18,
-      19,    20,    21,    26,    27,    28,    29,    30,    31,    32,
-      37,    38,    39,    40,    42,    43,    45,    61,    62,    63,
-      64,    67,    68,    69,    70,    71,    72,    73,    74,    71,
-      26,    27,    64,    75,    77,    82,    77,    77,    77,    64,
-      65,    82,    83,    82,    82,    74,    74,    74,    74,    75,
-      75,    75,    75,    64,    69,    69,    82,    74,    27,    26,
-      82,    68,     0,    69,     3,     4,    14,    15,     6,     7,
-      22,    23,    24,    41,    44,    68,    76,    64,    68,    74,
-      74,    74,    74,    74,    74,    33,    34,    35,    36,    78,
-      81,    74,    74,    65,    71,    71,    70,    71,    73,    74,
-      72,    74,    74,    25,    65,    76,    13,    64,    75,    80,
-      80,    80,    80,    65,    81,    14,    15,     7,    68,    65,
-      83,    68,    79,    64,    70,    70,    72,    25,    65,    79,
-      68,    65
-};
-
-  /* YYR1[YYN] -- Symbol number of symbol that rule YYN derives.  */
-static const yytype_uint8 yyr1[] =
-{
-       0,    66,    67,    67,    68,    68,    69,    69,    69,    70,
-      70,    70,    70,    70,    71,    71,    71,    71,    72,    72,
-      73,    73,    73,    74,    74,    74,    74,    74,    74,    74,
-      74,    74,    74,    74,    74,    74,    74,    74,    74,    74,
-      74,    74,    74,    74,    74,    74,    74,    74,    74,    74,
-      74,    74,    74,    74,    74,    74,    75,    76,    76,    77,
-      77,    78,    78,    79,    79,    80,    80,    81,    81,    81,
-      81,    82,    82,    83,    83,    83
-};
-
-  /* YYR2[YYN] -- Number of symbols on the right hand side of rule YYN.  */
-static const yytype_uint8 yyr2[] =
-{
-       0,     2,     0,     1,     1,     2,     1,     2,     2,     1,
-       3,     3,     5,     5,     1,     2,     3,     3,     1,     3,
-       1,     3,     5,     1,     1,     2,     2,     1,     1,     1,
-       3,     2,     2,     2,     2,     4,     5,     3,     2,     2,
-       2,     3,     3,     2,     2,     2,     2,     3,     3,     3,
-       3,     3,     3,     3,     2,     3,     1,     1,     3,     3,
-       4,     1,     2,     1,     3,     3,     4,     2,     2,     2,
-       2,     1,     1,     1,     1,     1
-};
-
-
-#define yyerrok         (yyerrstatus = 0)
-#define yyclearin       (yychar = YYEMPTY)
-#define YYEMPTY         (-2)
-#define YYEOF           0
-
-#define YYACCEPT        goto yyacceptlab
-#define YYABORT         goto yyabortlab
-#define YYERROR         goto yyerrorlab
-
-
-#define YYRECOVERING()  (!!yyerrstatus)
-
-#define YYBACKUP(Token, Value)                                  \
-do                                                              \
-  if (yychar == YYEMPTY)                                        \
-    {                                                           \
-      yychar = (Token);                                         \
-      yylval = (Value);                                         \
-      YYPOPSTACK (yylen);                                       \
-      yystate = *yyssp;                                         \
-      goto yybackup;                                            \
-    }                                                           \
-  else                                                          \
-    {                                                           \
-      yyerror (YY_("syntax error: cannot back up")); \
-      YYERROR;                                                  \
-    }                                                           \
-while (0)
-
-/* Error token number */
-#define YYTERROR        1
-#define YYERRCODE       256
-
-
-
-/* Enable debugging if requested.  */
-#if YYDEBUG
-
-# ifndef YYFPRINTF
-#  include <stdio.h> /* INFRINGES ON USER NAME SPACE */
-#  define YYFPRINTF fprintf
-# endif
-
-# define YYDPRINTF(Args)                        \
-do {                                            \
-  if (yydebug)                                  \
-    YYFPRINTF Args;                             \
-} while (0)
-
-/* This macro is provided for backward compatibility. */
-#ifndef YY_LOCATION_PRINT
-# define YY_LOCATION_PRINT(File, Loc) ((void) 0)
-#endif
-
-
-# define YY_SYMBOL_PRINT(Title, Type, Value, Location)                    \
-do {                                                                      \
-  if (yydebug)                                                            \
-    {                                                                     \
-      YYFPRINTF (stderr, "%s ", Title);                                   \
-      yy_symbol_print (stderr,                                            \
-                  Type, Value); \
-      YYFPRINTF (stderr, "\n");                                           \
-    }                                                                     \
-} while (0)
-
-
-/*----------------------------------------.
-| Print this symbol's value on YYOUTPUT.  |
-`----------------------------------------*/
-
-static void
-yy_symbol_value_print (FILE *yyoutput, int yytype, YYSTYPE const * const yyvaluep)
-{
-  FILE *yyo = yyoutput;
-  YYUSE (yyo);
-  if (!yyvaluep)
-    return;
-# ifdef YYPRINT
-  if (yytype < YYNTOKENS)
-    YYPRINT (yyoutput, yytoknum[yytype], *yyvaluep);
-# endif
-  YYUSE (yytype);
-}
-
-
-/*--------------------------------.
-| Print this symbol on YYOUTPUT.  |
-`--------------------------------*/
-
-static void
-yy_symbol_print (FILE *yyoutput, int yytype, YYSTYPE const * const yyvaluep)
-{
-  YYFPRINTF (yyoutput, "%s %s (",
-             yytype < YYNTOKENS ? "token" : "nterm", yytname[yytype]);
-
-  yy_symbol_value_print (yyoutput, yytype, yyvaluep);
-  YYFPRINTF (yyoutput, ")");
-}
-
-/*------------------------------------------------------------------.
-| yy_stack_print -- Print the state stack from its BOTTOM up to its |
-| TOP (included).                                                   |
-`------------------------------------------------------------------*/
-
-static void
-yy_stack_print (yytype_int16 *yybottom, yytype_int16 *yytop)
-{
-  YYFPRINTF (stderr, "Stack now");
-  for (; yybottom <= yytop; yybottom++)
-    {
-      int yybot = *yybottom;
-      YYFPRINTF (stderr, " %d", yybot);
-    }
-  YYFPRINTF (stderr, "\n");
-}
-
-# define YY_STACK_PRINT(Bottom, Top)                            \
-do {                                                            \
-  if (yydebug)                                                  \
-    yy_stack_print ((Bottom), (Top));                           \
-} while (0)
-
-
-/*------------------------------------------------.
-| Report that the YYRULE is going to be reduced.  |
-`------------------------------------------------*/
-
-static void
-yy_reduce_print (yytype_int16 *yyssp, YYSTYPE *yyvsp, int yyrule)
-{
-  unsigned long int yylno = yyrline[yyrule];
-  int yynrhs = yyr2[yyrule];
-  int yyi;
-  YYFPRINTF (stderr, "Reducing stack by rule %d (line %lu):\n",
-             yyrule - 1, yylno);
-  /* The symbols being reduced.  */
-  for (yyi = 0; yyi < yynrhs; yyi++)
-    {
-      YYFPRINTF (stderr, "   $%d = ", yyi + 1);
-      yy_symbol_print (stderr,
-                       yystos[yyssp[yyi + 1 - yynrhs]],
-                       &(yyvsp[(yyi + 1) - (yynrhs)])
-                                              );
-      YYFPRINTF (stderr, "\n");
-    }
-}
-
-# define YY_REDUCE_PRINT(Rule)          \
-do {                                    \
-  if (yydebug)                          \
-    yy_reduce_print (yyssp, yyvsp, Rule); \
-} while (0)
-
-/* Nonzero means print parse trace.  It is left uninitialized so that
-   multiple parsers can coexist.  */
-int yydebug;
-#else /* !YYDEBUG */
-# define YYDPRINTF(Args)
-# define YY_SYMBOL_PRINT(Title, Type, Value, Location)
-# define YY_STACK_PRINT(Bottom, Top)
-# define YY_REDUCE_PRINT(Rule)
-#endif /* !YYDEBUG */
-
-
-/* YYINITDEPTH -- initial size of the parser's stacks.  */
-#ifndef YYINITDEPTH
-# define YYINITDEPTH 200
-#endif
-
-/* YYMAXDEPTH -- maximum size the stacks can grow to (effective only
-   if the built-in stack extension method is used).
-
-   Do not make this value too large; the results are undefined if
-   YYSTACK_ALLOC_MAXIMUM < YYSTACK_BYTES (YYMAXDEPTH)
-   evaluated with infinite-precision integer arithmetic.  */
-
-#ifndef YYMAXDEPTH
-# define YYMAXDEPTH 10000
-#endif
-
-
-#if YYERROR_VERBOSE
-
-# ifndef yystrlen
-#  if defined __GLIBC__ && defined _STRING_H
-#   define yystrlen strlen
-#  else
-/* Return the length of YYSTR.  */
-static YYSIZE_T
-yystrlen (const char *yystr)
-{
-  YYSIZE_T yylen;
-  for (yylen = 0; yystr[yylen]; yylen++)
-    continue;
-  return yylen;
-}
-#  endif
-# endif
-
-# ifndef yystpcpy
-#  if defined __GLIBC__ && defined _STRING_H && defined _GNU_SOURCE
-#   define yystpcpy stpcpy
-#  else
-/* Copy YYSRC to YYDEST, returning the address of the terminating '\0' in
-   YYDEST.  */
-static char *
-yystpcpy (char *yydest, const char *yysrc)
-{
-  char *yyd = yydest;
-  const char *yys = yysrc;
-
-  while ((*yyd++ = *yys++) != '\0')
-    continue;
-
-  return yyd - 1;
-}
-#  endif
-# endif
-
-# ifndef yytnamerr
-/* Copy to YYRES the contents of YYSTR after stripping away unnecessary
-   quotes and backslashes, so that it's suitable for yyerror.  The
-   heuristic is that double-quoting is unnecessary unless the string
-   contains an apostrophe, a comma, or backslash (other than
-   backslash-backslash).  YYSTR is taken from yytname.  If YYRES is
-   null, do not copy; instead, return the length of what the result
-   would have been.  */
-static YYSIZE_T
-yytnamerr (char *yyres, const char *yystr)
-{
-  if (*yystr == '"')
-    {
-      YYSIZE_T yyn = 0;
-      char const *yyp = yystr;
-
-      for (;;)
-        switch (*++yyp)
-          {
-          case '\'':
-          case ',':
-            goto do_not_strip_quotes;
-
-          case '\\':
-            if (*++yyp != '\\')
-              goto do_not_strip_quotes;
-            /* Fall through.  */
-          default:
-            if (yyres)
-              yyres[yyn] = *yyp;
-            yyn++;
-            break;
-
-          case '"':
-            if (yyres)
-              yyres[yyn] = '\0';
-            return yyn;
-          }
-    do_not_strip_quotes: ;
-    }
-
-  if (! yyres)
-    return yystrlen (yystr);
-
-  return yystpcpy (yyres, yystr) - yyres;
-}
-# endif
-
-/* Copy into *YYMSG, which is of size *YYMSG_ALLOC, an error message
-   about the unexpected token YYTOKEN for the state stack whose top is
-   YYSSP.
-
-   Return 0 if *YYMSG was successfully written.  Return 1 if *YYMSG is
-   not large enough to hold the message.  In that case, also set
-   *YYMSG_ALLOC to the required number of bytes.  Return 2 if the
-   required number of bytes is too large to store.  */
-static int
-yysyntax_error (YYSIZE_T *yymsg_alloc, char **yymsg,
-                yytype_int16 *yyssp, int yytoken)
-{
-  YYSIZE_T yysize0 = yytnamerr (YY_NULLPTR, yytname[yytoken]);
-  YYSIZE_T yysize = yysize0;
-  enum { YYERROR_VERBOSE_ARGS_MAXIMUM = 5 };
-  /* Internationalized format string. */
-  const char *yyformat = YY_NULLPTR;
-  /* Arguments of yyformat. */
-  char const *yyarg[YYERROR_VERBOSE_ARGS_MAXIMUM];
-  /* Number of reported tokens (one for the "unexpected", one per
-     "expected"). */
-  int yycount = 0;
-
-  /* There are many possibilities here to consider:
-     - If this state is a consistent state with a default action, then
-       the only way this function was invoked is if the default action
-       is an error action.  In that case, don't check for expected
-       tokens because there are none.
-     - The only way there can be no lookahead present (in yychar) is if
-       this state is a consistent state with a default action.  Thus,
-       detecting the absence of a lookahead is sufficient to determine
-       that there is no unexpected or expected token to report.  In that
-       case, just report a simple "syntax error".
-     - Don't assume there isn't a lookahead just because this state is a
-       consistent state with a default action.  There might have been a
-       previous inconsistent state, consistent state with a non-default
-       action, or user semantic action that manipulated yychar.
-     - Of course, the expected token list depends on states to have
-       correct lookahead information, and it depends on the parser not
-       to perform extra reductions after fetching a lookahead from the
-       scanner and before detecting a syntax error.  Thus, state merging
-       (from LALR or IELR) and default reductions corrupt the expected
-       token list.  However, the list is correct for canonical LR with
-       one exception: it will still contain any token that will not be
-       accepted due to an error action in a later state.
-  */
-  if (yytoken != YYEMPTY)
-    {
-      int yyn = yypact[*yyssp];
-      yyarg[yycount++] = yytname[yytoken];
-      if (!yypact_value_is_default (yyn))
-        {
-          /* Start YYX at -YYN if negative to avoid negative indexes in
-             YYCHECK.  In other words, skip the first -YYN actions for
-             this state because they are default actions.  */
-          int yyxbegin = yyn < 0 ? -yyn : 0;
-          /* Stay within bounds of both yycheck and yytname.  */
-          int yychecklim = YYLAST - yyn + 1;
-          int yyxend = yychecklim < YYNTOKENS ? yychecklim : YYNTOKENS;
-          int yyx;
-
-          for (yyx = yyxbegin; yyx < yyxend; ++yyx)
-            if (yycheck[yyx + yyn] == yyx && yyx != YYTERROR
-                && !yytable_value_is_error (yytable[yyx + yyn]))
-              {
-                if (yycount == YYERROR_VERBOSE_ARGS_MAXIMUM)
-                  {
-                    yycount = 1;
-                    yysize = yysize0;
-                    break;
-                  }
-                yyarg[yycount++] = yytname[yyx];
-                {
-                  YYSIZE_T yysize1 = yysize + yytnamerr (YY_NULLPTR, yytname[yyx]);
-                  if (! (yysize <= yysize1
-                         && yysize1 <= YYSTACK_ALLOC_MAXIMUM))
-                    return 2;
-                  yysize = yysize1;
-                }
-              }
-        }
-    }
-
-  switch (yycount)
-    {
-# define YYCASE_(N, S)                      \
-      case N:                               \
-        yyformat = S;                       \
-      break
-      YYCASE_(0, YY_("syntax error"));
-      YYCASE_(1, YY_("syntax error, unexpected %s"));
-      YYCASE_(2, YY_("syntax error, unexpected %s, expecting %s"));
-      YYCASE_(3, YY_("syntax error, unexpected %s, expecting %s or %s"));
-      YYCASE_(4, YY_("syntax error, unexpected %s, expecting %s or %s or %s"));
-      YYCASE_(5, YY_("syntax error, unexpected %s, expecting %s or %s or %s or %s"));
-# undef YYCASE_
-    }
-
-  {
-    YYSIZE_T yysize1 = yysize + yystrlen (yyformat);
-    if (! (yysize <= yysize1 && yysize1 <= YYSTACK_ALLOC_MAXIMUM))
-      return 2;
-    yysize = yysize1;
-  }
-
-  if (*yymsg_alloc < yysize)
-    {
-      *yymsg_alloc = 2 * yysize;
-      if (! (yysize <= *yymsg_alloc
-             && *yymsg_alloc <= YYSTACK_ALLOC_MAXIMUM))
-        *yymsg_alloc = YYSTACK_ALLOC_MAXIMUM;
-      return 1;
-    }
-
-  /* Avoid sprintf, as that infringes on the user's name space.
-     Don't have undefined behavior even if the translation
-     produced a string with the wrong number of "%s"s.  */
-  {
-    char *yyp = *yymsg;
-    int yyi = 0;
-    while ((*yyp = *yyformat) != '\0')
-      if (*yyp == '%' && yyformat[1] == 's' && yyi < yycount)
-        {
-          yyp += yytnamerr (yyp, yyarg[yyi++]);
-          yyformat += 2;
-        }
-      else
-        {
-          yyp++;
-          yyformat++;
-        }
-  }
-  return 0;
-}
-#endif /* YYERROR_VERBOSE */
-
-/*-----------------------------------------------.
-| Release the memory associated to this symbol.  |
-`-----------------------------------------------*/
-
-static void
-yydestruct (const char *yymsg, int yytype, YYSTYPE *yyvaluep)
-{
-  YYUSE (yyvaluep);
-  if (!yymsg)
-    yymsg = "Deleting";
-  YY_SYMBOL_PRINT (yymsg, yytype, yyvaluep, yylocationp);
-
-  YY_IGNORE_MAYBE_UNINITIALIZED_BEGIN
-  YYUSE (yytype);
-  YY_IGNORE_MAYBE_UNINITIALIZED_END
-}
-
-
-
-
-/* The lookahead symbol.  */
-int yychar;
-
-/* The semantic value of the lookahead symbol.  */
-YYSTYPE yylval;
-/* Number of syntax errors so far.  */
-int yynerrs;
-
-
-/*----------.
-| yyparse.  |
-`----------*/
-
-int
-yyparse (void)
-{
-    int yystate;
-    /* Number of tokens to shift before error messages enabled.  */
-    int yyerrstatus;
-
-    /* The stacks and their tools:
-       'yyss': related to states.
-       'yyvs': related to semantic values.
-
-       Refer to the stacks through separate pointers, to allow yyoverflow
-       to reallocate them elsewhere.  */
-
-    /* The state stack.  */
-    yytype_int16 yyssa[YYINITDEPTH];
-    yytype_int16 *yyss;
-    yytype_int16 *yyssp;
-
-    /* The semantic value stack.  */
-    YYSTYPE yyvsa[YYINITDEPTH];
-    YYSTYPE *yyvs;
-    YYSTYPE *yyvsp;
-
-    YYSIZE_T yystacksize;
-
-  int yyn;
-  int yyresult;
-  /* Lookahead token as an internal (translated) token number.  */
-  int yytoken = 0;
-  /* The variables used to return semantic value and location from the
-     action routines.  */
-  YYSTYPE yyval;
-
-#if YYERROR_VERBOSE
-  /* Buffer for error messages, and its allocated size.  */
-  char yymsgbuf[128];
-  char *yymsg = yymsgbuf;
-  YYSIZE_T yymsg_alloc = sizeof yymsgbuf;
-#endif
-
-#define YYPOPSTACK(N)   (yyvsp -= (N), yyssp -= (N))
-
-  /* The number of symbols on the RHS of the reduced rule.
-     Keep to zero when no symbol should be popped.  */
-  int yylen = 0;
-
-  yyssp = yyss = yyssa;
-  yyvsp = yyvs = yyvsa;
-  yystacksize = YYINITDEPTH;
-
-  YYDPRINTF ((stderr, "Starting parse\n"));
-
-  yystate = 0;
-  yyerrstatus = 0;
-  yynerrs = 0;
-  yychar = YYEMPTY; /* Cause a token to be read.  */
-  goto yysetstate;
-
-/*------------------------------------------------------------.
-| yynewstate -- Push a new state, which is found in yystate.  |
-`------------------------------------------------------------*/
- yynewstate:
-  /* In all cases, when you get here, the value and location stacks
-     have just been pushed.  So pushing a state here evens the stacks.  */
-  yyssp++;
-
- yysetstate:
-  *yyssp = yystate;
-
-  if (yyss + yystacksize - 1 <= yyssp)
-    {
-      /* Get the current used size of the three stacks, in elements.  */
-      YYSIZE_T yysize = yyssp - yyss + 1;
-
-#ifdef yyoverflow
-      {
-        /* Give user a chance to reallocate the stack.  Use copies of
-           these so that the &'s don't force the real ones into
-           memory.  */
-        YYSTYPE *yyvs1 = yyvs;
-        yytype_int16 *yyss1 = yyss;
-
-        /* Each stack pointer address is followed by the size of the
-           data in use in that stack, in bytes.  This used to be a
-           conditional around just the two extra args, but that might
-           be undefined if yyoverflow is a macro.  */
-        yyoverflow (YY_("memory exhausted"),
-                    &yyss1, yysize * sizeof (*yyssp),
-                    &yyvs1, yysize * sizeof (*yyvsp),
-                    &yystacksize);
-
-        yyss = yyss1;
-        yyvs = yyvs1;
-      }
-#else /* no yyoverflow */
-# ifndef YYSTACK_RELOCATE
-      goto yyexhaustedlab;
-# else
-      /* Extend the stack our own way.  */
-      if (YYMAXDEPTH <= yystacksize)
-        goto yyexhaustedlab;
-      yystacksize *= 2;
-      if (YYMAXDEPTH < yystacksize)
-        yystacksize = YYMAXDEPTH;
-
-      {
-        yytype_int16 *yyss1 = yyss;
-        union yyalloc *yyptr =
-          (union yyalloc *) YYSTACK_ALLOC (YYSTACK_BYTES (yystacksize));
-        if (! yyptr)
-          goto yyexhaustedlab;
-        YYSTACK_RELOCATE (yyss_alloc, yyss);
-        YYSTACK_RELOCATE (yyvs_alloc, yyvs);
-#  undef YYSTACK_RELOCATE
-        if (yyss1 != yyssa)
-          YYSTACK_FREE (yyss1);
-      }
-# endif
-#endif /* no yyoverflow */
-
-      yyssp = yyss + yysize - 1;
-      yyvsp = yyvs + yysize - 1;
-
-      YYDPRINTF ((stderr, "Stack size increased to %lu\n",
-                  (unsigned long int) yystacksize));
-
-      if (yyss + yystacksize - 1 <= yyssp)
-        YYABORT;
-    }
-
-  YYDPRINTF ((stderr, "Entering state %d\n", yystate));
-
-  if (yystate == YYFINAL)
-    YYACCEPT;
-
-  goto yybackup;
-
-/*-----------.
-| yybackup.  |
-`-----------*/
-yybackup:
-
-  /* Do appropriate processing given the current state.  Read a
-     lookahead token if we need one and don't already have one.  */
-
-  /* First try to decide what to do without reference to lookahead token.  */
-  yyn = yypact[yystate];
-  if (yypact_value_is_default (yyn))
-    goto yydefault;
-
-  /* Not known => get a lookahead token if don't already have one.  */
-
-  /* YYCHAR is either YYEMPTY or YYEOF or a valid lookahead symbol.  */
-  if (yychar == YYEMPTY)
-    {
-      YYDPRINTF ((stderr, "Reading a token: "));
-      yychar = yylex ();
-    }
-
-  if (yychar <= YYEOF)
-    {
-      yychar = yytoken = YYEOF;
-      YYDPRINTF ((stderr, "Now at end of input.\n"));
-    }
-  else
-    {
-      yytoken = YYTRANSLATE (yychar);
-      YY_SYMBOL_PRINT ("Next token is", yytoken, &yylval, &yylloc);
-    }
-
-  /* If the proper action on seeing token YYTOKEN is to reduce or to
-     detect an error, take that action.  */
-  yyn += yytoken;
-  if (yyn < 0 || YYLAST < yyn || yycheck[yyn] != yytoken)
-    goto yydefault;
-  yyn = yytable[yyn];
-  if (yyn <= 0)
-    {
-      if (yytable_value_is_error (yyn))
-        goto yyerrlab;
-      yyn = -yyn;
-      goto yyreduce;
-    }
-
-  /* Count tokens shifted since error; after three, turn off error
-     status.  */
-  if (yyerrstatus)
-    yyerrstatus--;
-
-  /* Shift the lookahead token.  */
-  YY_SYMBOL_PRINT ("Shifting", yytoken, &yylval, &yylloc);
-
-  /* Discard the shifted token.  */
-  yychar = YYEMPTY;
-
-  yystate = yyn;
-  YY_IGNORE_MAYBE_UNINITIALIZED_BEGIN
-  *++yyvsp = yylval;
-  YY_IGNORE_MAYBE_UNINITIALIZED_END
-
-  goto yynewstate;
-
-
-/*-----------------------------------------------------------.
-| yydefault -- do the default action for the current state.  |
-`-----------------------------------------------------------*/
-yydefault:
-  yyn = yydefact[yystate];
-  if (yyn == 0)
-    goto yyerrlab;
-  goto yyreduce;
-
-
-/*-----------------------------.
-| yyreduce -- Do a reduction.  |
-`-----------------------------*/
-yyreduce:
-  /* yyn is the number of a rule to reduce with.  */
-  yylen = yyr2[yyn];
-
-  /* If YYLEN is nonzero, implement the default value of the action:
-     '$$ = $1'.
-
-     Otherwise, the following line sets YYVAL to garbage.
-     This behavior is undocumented and Bison
-     users should not rely upon it.  Assigning to YYVAL
-     unconditionally makes the parser a bit smaller, and it avoids a
-     GCC warning that YYVAL may be used uninitialized.  */
-  yyval = yyvsp[1-yylen];
-
-
-  YY_REDUCE_PRINT (yyn);
-  switch (yyn)
-    {
-        case 3:
-#line 124 "eqn.y" /* yacc.c:1646  */
-    { (yyvsp[0].b)->top_level(); non_empty_flag = 1; }
-#line 1488 "eqn.cpp" /* yacc.c:1646  */
-    break;
-
-  case 4:
-#line 129 "eqn.y" /* yacc.c:1646  */
-    { (yyval.b) = (yyvsp[0].b); }
-#line 1494 "eqn.cpp" /* yacc.c:1646  */
-    break;
-
-  case 5:
-#line 131 "eqn.y" /* yacc.c:1646  */
-    {
-		  list_box *lb = (yyvsp[-1].b)->to_list_box();
-		  if (!lb)
-		    lb = new list_box((yyvsp[-1].b));
-		  lb->append((yyvsp[0].b));
-		  (yyval.b) = lb;
-		}
-#line 1506 "eqn.cpp" /* yacc.c:1646  */
-    break;
-
-  case 6:
-#line 142 "eqn.y" /* yacc.c:1646  */
-    { (yyval.b) = (yyvsp[0].b); }
-#line 1512 "eqn.cpp" /* yacc.c:1646  */
-    break;
-
-  case 7:
-#line 144 "eqn.y" /* yacc.c:1646  */
-    { (yyval.b) = make_mark_box((yyvsp[0].b)); }
-#line 1518 "eqn.cpp" /* yacc.c:1646  */
-    break;
-
-  case 8:
-#line 146 "eqn.y" /* yacc.c:1646  */
-    { (yyval.b) = make_lineup_box((yyvsp[0].b)); }
-#line 1524 "eqn.cpp" /* yacc.c:1646  */
-    break;
-
-  case 9:
-#line 151 "eqn.y" /* yacc.c:1646  */
-    { (yyval.b) = (yyvsp[0].b); }
-#line 1530 "eqn.cpp" /* yacc.c:1646  */
-    break;
-
-  case 10:
-#line 153 "eqn.y" /* yacc.c:1646  */
-    { (yyval.b) = make_limit_box((yyvsp[-2].b), 0, (yyvsp[0].b)); }
-#line 1536 "eqn.cpp" /* yacc.c:1646  */
-    break;
-
-  case 11:
-#line 155 "eqn.y" /* yacc.c:1646  */
-    { (yyval.b) = make_limit_box((yyvsp[-2].b), (yyvsp[0].b), 0); }
-#line 1542 "eqn.cpp" /* yacc.c:1646  */
-    break;
-
-  case 12:
-#line 157 "eqn.y" /* yacc.c:1646  */
-    { (yyval.b) = make_limit_box((yyvsp[-4].b), (yyvsp[-2].b), (yyvsp[0].b)); }
-#line 1548 "eqn.cpp" /* yacc.c:1646  */
-    break;
-
-  case 13:
-#line 159 "eqn.y" /* yacc.c:1646  */
-    { (yyval.b) = make_limit_box((yyvsp[-4].b), make_limit_box((yyvsp[-2].b), (yyvsp[0].b), 0), 0); }
-#line 1554 "eqn.cpp" /* yacc.c:1646  */
-    break;
-
-  case 14:
-#line 164 "eqn.y" /* yacc.c:1646  */
-    { (yyval.b) = (yyvsp[0].b); }
-#line 1560 "eqn.cpp" /* yacc.c:1646  */
-    break;
-
-  case 15:
-#line 166 "eqn.y" /* yacc.c:1646  */
-    { (yyval.b) = make_sqrt_box((yyvsp[0].b)); }
-#line 1566 "eqn.cpp" /* yacc.c:1646  */
-    break;
-
-  case 16:
-#line 168 "eqn.y" /* yacc.c:1646  */
-    { (yyval.b) = make_over_box((yyvsp[-2].b), (yyvsp[0].b)); }
-#line 1572 "eqn.cpp" /* yacc.c:1646  */
-    break;
-
-  case 17:
-#line 170 "eqn.y" /* yacc.c:1646  */
-    { (yyval.b) = make_small_over_box((yyvsp[-2].b), (yyvsp[0].b)); }
-#line 1578 "eqn.cpp" /* yacc.c:1646  */
-    break;
-
-  case 18:
-#line 175 "eqn.y" /* yacc.c:1646  */
-    { (yyval.b) = (yyvsp[0].b); }
-#line 1584 "eqn.cpp" /* yacc.c:1646  */
-    break;
-
-  case 19:
-#line 177 "eqn.y" /* yacc.c:1646  */
-    { (yyval.b) = make_script_box((yyvsp[-2].b), 0, (yyvsp[0].b)); }
-#line 1590 "eqn.cpp" /* yacc.c:1646  */
-    break;
-
-  case 20:
-#line 182 "eqn.y" /* yacc.c:1646  */
-    { (yyval.b) = (yyvsp[0].b); }
-#line 1596 "eqn.cpp" /* yacc.c:1646  */
-    break;
-
-  case 21:
-#line 184 "eqn.y" /* yacc.c:1646  */
-    { (yyval.b) = make_script_box((yyvsp[-2].b), (yyvsp[0].b), 0); }
-#line 1602 "eqn.cpp" /* yacc.c:1646  */
-    break;
-
-  case 22:
-#line 186 "eqn.y" /* yacc.c:1646  */
-    { (yyval.b) = make_script_box((yyvsp[-4].b), (yyvsp[-2].b), (yyvsp[0].b)); }
-#line 1608 "eqn.cpp" /* yacc.c:1646  */
-    break;
-
-  case 23:
-#line 191 "eqn.y" /* yacc.c:1646  */
-    { (yyval.b) = split_text((yyvsp[0].str)); }
-#line 1614 "eqn.cpp" /* yacc.c:1646  */
-    break;
-
-  case 24:
-#line 193 "eqn.y" /* yacc.c:1646  */
-    { (yyval.b) = new quoted_text_box((yyvsp[0].str)); }
-#line 1620 "eqn.cpp" /* yacc.c:1646  */
-    break;
-
-  case 25:
-#line 195 "eqn.y" /* yacc.c:1646  */
-    { (yyval.b) = split_text((yyvsp[0].str)); }
-#line 1626 "eqn.cpp" /* yacc.c:1646  */
-    break;
-
-  case 26:
-#line 197 "eqn.y" /* yacc.c:1646  */
-    { (yyval.b) = new quoted_text_box((yyvsp[0].str)); }
-#line 1632 "eqn.cpp" /* yacc.c:1646  */
-    break;
-
-  case 27:
-#line 199 "eqn.y" /* yacc.c:1646  */
-    { (yyval.b) = new half_space_box; }
-#line 1638 "eqn.cpp" /* yacc.c:1646  */
-    break;
-
-  case 28:
-#line 201 "eqn.y" /* yacc.c:1646  */
-    { (yyval.b) = new space_box; }
-#line 1644 "eqn.cpp" /* yacc.c:1646  */
-    break;
-
-  case 29:
-#line 203 "eqn.y" /* yacc.c:1646  */
-    { (yyval.b) = new tab_box; }
-#line 1650 "eqn.cpp" /* yacc.c:1646  */
-    break;
-
-  case 30:
-#line 205 "eqn.y" /* yacc.c:1646  */
-    { (yyval.b) = (yyvsp[-1].b); }
-#line 1656 "eqn.cpp" /* yacc.c:1646  */
-    break;
-
-  case 31:
-#line 207 "eqn.y" /* yacc.c:1646  */
-    { (yyvsp[0].pb)->set_alignment(CENTER_ALIGN); (yyval.b) = (yyvsp[0].pb); }
-#line 1662 "eqn.cpp" /* yacc.c:1646  */
-    break;
-
-  case 32:
-#line 209 "eqn.y" /* yacc.c:1646  */
-    { (yyvsp[0].pb)->set_alignment(LEFT_ALIGN); (yyval.b) = (yyvsp[0].pb); }
-#line 1668 "eqn.cpp" /* yacc.c:1646  */
-    break;
-
-  case 33:
-#line 211 "eqn.y" /* yacc.c:1646  */
-    { (yyvsp[0].pb)->set_alignment(RIGHT_ALIGN); (yyval.b) = (yyvsp[0].pb); }
-#line 1674 "eqn.cpp" /* yacc.c:1646  */
-    break;
-
-  case 34:
-#line 213 "eqn.y" /* yacc.c:1646  */
-    { (yyvsp[0].pb)->set_alignment(CENTER_ALIGN); (yyval.b) = (yyvsp[0].pb); }
-#line 1680 "eqn.cpp" /* yacc.c:1646  */
-    break;
-
-  case 35:
-#line 215 "eqn.y" /* yacc.c:1646  */
-    { (yyval.b) = (yyvsp[-1].mb); }
-#line 1686 "eqn.cpp" /* yacc.c:1646  */
-    break;
-
-  case 36:
-#line 217 "eqn.y" /* yacc.c:1646  */
-    { (yyval.b) = make_delim_box((yyvsp[-3].str), (yyvsp[-2].b), (yyvsp[0].str)); }
-#line 1692 "eqn.cpp" /* yacc.c:1646  */
-    break;
-
-  case 37:
-#line 219 "eqn.y" /* yacc.c:1646  */
-    { (yyval.b) = make_delim_box((yyvsp[-1].str), (yyvsp[0].b), 0); }
-#line 1698 "eqn.cpp" /* yacc.c:1646  */
-    break;
-
-  case 38:
-#line 221 "eqn.y" /* yacc.c:1646  */
-    { (yyval.b) = make_overline_box((yyvsp[-1].b)); }
-#line 1704 "eqn.cpp" /* yacc.c:1646  */
-    break;
-
-  case 39:
-#line 223 "eqn.y" /* yacc.c:1646  */
-    { (yyval.b) = make_underline_box((yyvsp[-1].b)); }
-#line 1710 "eqn.cpp" /* yacc.c:1646  */
-    break;
-
-  case 40:
-#line 225 "eqn.y" /* yacc.c:1646  */
-    { (yyval.b) = make_prime_box((yyvsp[-1].b)); }
-#line 1716 "eqn.cpp" /* yacc.c:1646  */
-    break;
-
-  case 41:
-#line 227 "eqn.y" /* yacc.c:1646  */
-    { (yyval.b) = make_accent_box((yyvsp[-2].b), (yyvsp[0].b)); }
-#line 1722 "eqn.cpp" /* yacc.c:1646  */
-    break;
-
-  case 42:
-#line 229 "eqn.y" /* yacc.c:1646  */
-    { (yyval.b) = make_uaccent_box((yyvsp[-2].b), (yyvsp[0].b)); }
-#line 1728 "eqn.cpp" /* yacc.c:1646  */
-    break;
-
-  case 43:
-#line 231 "eqn.y" /* yacc.c:1646  */
-    { (yyval.b) = new font_box(strsave(get_grfont()), (yyvsp[0].b)); }
-#line 1734 "eqn.cpp" /* yacc.c:1646  */
-    break;
-
-  case 44:
-#line 233 "eqn.y" /* yacc.c:1646  */
-    { (yyval.b) = new font_box(strsave(get_gbfont()), (yyvsp[0].b)); }
-#line 1740 "eqn.cpp" /* yacc.c:1646  */
-    break;
-
-  case 45:
-#line 235 "eqn.y" /* yacc.c:1646  */
-    { (yyval.b) = new font_box(strsave(get_gfont()), (yyvsp[0].b)); }
-#line 1746 "eqn.cpp" /* yacc.c:1646  */
-    break;
-
-  case 46:
-#line 237 "eqn.y" /* yacc.c:1646  */
-    { (yyval.b) = new fat_box((yyvsp[0].b)); }
-#line 1752 "eqn.cpp" /* yacc.c:1646  */
-    break;
-
-  case 47:
-#line 239 "eqn.y" /* yacc.c:1646  */
-    { (yyval.b) = new font_box((yyvsp[-1].str), (yyvsp[0].b)); }
-#line 1758 "eqn.cpp" /* yacc.c:1646  */
-    break;
-
-  case 48:
-#line 241 "eqn.y" /* yacc.c:1646  */
-    { (yyval.b) = new size_box((yyvsp[-1].str), (yyvsp[0].b)); }
-#line 1764 "eqn.cpp" /* yacc.c:1646  */
-    break;
-
-  case 49:
-#line 243 "eqn.y" /* yacc.c:1646  */
-    { (yyval.b) = new hmotion_box((yyvsp[-1].n), (yyvsp[0].b)); }
-#line 1770 "eqn.cpp" /* yacc.c:1646  */
-    break;
-
-  case 50:
-#line 245 "eqn.y" /* yacc.c:1646  */
-    { (yyval.b) = new hmotion_box(-(yyvsp[-1].n), (yyvsp[0].b)); }
-#line 1776 "eqn.cpp" /* yacc.c:1646  */
-    break;
-
-  case 51:
-#line 247 "eqn.y" /* yacc.c:1646  */
-    { (yyval.b) = new vmotion_box((yyvsp[-1].n), (yyvsp[0].b)); }
-#line 1782 "eqn.cpp" /* yacc.c:1646  */
-    break;
-
-  case 52:
-#line 249 "eqn.y" /* yacc.c:1646  */
-    { (yyval.b) = new vmotion_box(-(yyvsp[-1].n), (yyvsp[0].b)); }
-#line 1788 "eqn.cpp" /* yacc.c:1646  */
-    break;
-
-  case 53:
-#line 251 "eqn.y" /* yacc.c:1646  */
-    { (yyvsp[0].b)->set_spacing_type((yyvsp[-1].str)); (yyval.b) = (yyvsp[0].b); }
-#line 1794 "eqn.cpp" /* yacc.c:1646  */
-    break;
-
-  case 54:
-#line 253 "eqn.y" /* yacc.c:1646  */
-    { (yyval.b) = new vcenter_box((yyvsp[0].b)); }
-#line 1800 "eqn.cpp" /* yacc.c:1646  */
-    break;
-
-  case 55:
-#line 255 "eqn.y" /* yacc.c:1646  */
-    { (yyval.b) = make_special_box((yyvsp[-1].str), (yyvsp[0].b)); }
-#line 1806 "eqn.cpp" /* yacc.c:1646  */
-    break;
-
-  case 56:
-#line 260 "eqn.y" /* yacc.c:1646  */
-    {
-		  int n;
-		  if (sscanf((yyvsp[0].str), "%d", &n) == 1)
-		    (yyval.n) = n;
-		  a_delete (yyvsp[0].str);
-		}
-#line 1817 "eqn.cpp" /* yacc.c:1646  */
-    break;
-
-  case 57:
-#line 270 "eqn.y" /* yacc.c:1646  */
-    { (yyval.pb) = new pile_box((yyvsp[0].b)); }
-#line 1823 "eqn.cpp" /* yacc.c:1646  */
-    break;
-
-  case 58:
-#line 272 "eqn.y" /* yacc.c:1646  */
-    { (yyvsp[-2].pb)->append((yyvsp[0].b)); (yyval.pb) = (yyvsp[-2].pb); }
-#line 1829 "eqn.cpp" /* yacc.c:1646  */
-    break;
-
-  case 59:
-#line 277 "eqn.y" /* yacc.c:1646  */
-    { (yyval.pb) = (yyvsp[-1].pb); }
-#line 1835 "eqn.cpp" /* yacc.c:1646  */
-    break;
-
-  case 60:
-#line 279 "eqn.y" /* yacc.c:1646  */
-    { (yyvsp[-1].pb)->set_space((yyvsp[-3].n)); (yyval.pb) = (yyvsp[-1].pb); }
-#line 1841 "eqn.cpp" /* yacc.c:1646  */
-    break;
-
-  case 61:
-#line 284 "eqn.y" /* yacc.c:1646  */
-    { (yyval.mb) = new matrix_box((yyvsp[0].col)); }
-#line 1847 "eqn.cpp" /* yacc.c:1646  */
-    break;
-
-  case 62:
-#line 286 "eqn.y" /* yacc.c:1646  */
-    { (yyvsp[-1].mb)->append((yyvsp[0].col)); (yyval.mb) = (yyvsp[-1].mb); }
-#line 1853 "eqn.cpp" /* yacc.c:1646  */
-    break;
-
-  case 63:
-#line 291 "eqn.y" /* yacc.c:1646  */
-    { (yyval.col) = new column((yyvsp[0].b)); }
-#line 1859 "eqn.cpp" /* yacc.c:1646  */
-    break;
-
-  case 64:
-#line 293 "eqn.y" /* yacc.c:1646  */
-    { (yyvsp[-2].col)->append((yyvsp[0].b)); (yyval.col) = (yyvsp[-2].col); }
-#line 1865 "eqn.cpp" /* yacc.c:1646  */
-    break;
-
-  case 65:
-#line 298 "eqn.y" /* yacc.c:1646  */
-    { (yyval.col) = (yyvsp[-1].col); }
-#line 1871 "eqn.cpp" /* yacc.c:1646  */
-    break;
-
-  case 66:
-#line 300 "eqn.y" /* yacc.c:1646  */
-    { (yyvsp[-1].col)->set_space((yyvsp[-3].n)); (yyval.col) = (yyvsp[-1].col); }
-#line 1877 "eqn.cpp" /* yacc.c:1646  */
-    break;
-
-  case 67:
-#line 305 "eqn.y" /* yacc.c:1646  */
-    { (yyvsp[0].col)->set_alignment(CENTER_ALIGN); (yyval.col) = (yyvsp[0].col); }
-#line 1883 "eqn.cpp" /* yacc.c:1646  */
-    break;
-
-  case 68:
-#line 307 "eqn.y" /* yacc.c:1646  */
-    { (yyvsp[0].col)->set_alignment(LEFT_ALIGN); (yyval.col) = (yyvsp[0].col); }
-#line 1889 "eqn.cpp" /* yacc.c:1646  */
-    break;
-
-  case 69:
-#line 309 "eqn.y" /* yacc.c:1646  */
-    { (yyvsp[0].col)->set_alignment(RIGHT_ALIGN); (yyval.col) = (yyvsp[0].col); }
-#line 1895 "eqn.cpp" /* yacc.c:1646  */
-    break;
-
-  case 70:
-#line 311 "eqn.y" /* yacc.c:1646  */
-    { (yyvsp[0].col)->set_alignment(CENTER_ALIGN); (yyval.col) = (yyvsp[0].col); }
-#line 1901 "eqn.cpp" /* yacc.c:1646  */
-    break;
-
-  case 71:
-#line 315 "eqn.y" /* yacc.c:1646  */
-    { (yyval.str) = (yyvsp[0].str); }
-#line 1907 "eqn.cpp" /* yacc.c:1646  */
-    break;
-
-  case 72:
-#line 317 "eqn.y" /* yacc.c:1646  */
-    { (yyval.str) = (yyvsp[0].str); }
-#line 1913 "eqn.cpp" /* yacc.c:1646  */
-    break;
-
-  case 73:
-#line 322 "eqn.y" /* yacc.c:1646  */
-    { (yyval.str) = (yyvsp[0].str); }
-#line 1919 "eqn.cpp" /* yacc.c:1646  */
-    break;
-
-  case 74:
-#line 324 "eqn.y" /* yacc.c:1646  */
-    { (yyval.str) = strsave("{"); }
-#line 1925 "eqn.cpp" /* yacc.c:1646  */
-    break;
-
-  case 75:
-#line 326 "eqn.y" /* yacc.c:1646  */
-    { (yyval.str) = strsave("}"); }
-#line 1931 "eqn.cpp" /* yacc.c:1646  */
-    break;
-
-
-#line 1935 "eqn.cpp" /* yacc.c:1646  */
-      default: break;
-    }
-  /* User semantic actions sometimes alter yychar, and that requires
-     that yytoken be updated with the new translation.  We take the
-     approach of translating immediately before every use of yytoken.
-     One alternative is translating here after every semantic action,
-     but that translation would be missed if the semantic action invokes
-     YYABORT, YYACCEPT, or YYERROR immediately after altering yychar or
-     if it invokes YYBACKUP.  In the case of YYABORT or YYACCEPT, an
-     incorrect destructor might then be invoked immediately.  In the
-     case of YYERROR or YYBACKUP, subsequent parser actions might lead
-     to an incorrect destructor call or verbose syntax error message
-     before the lookahead is translated.  */
-  YY_SYMBOL_PRINT ("-> $$ =", yyr1[yyn], &yyval, &yyloc);
-
-  YYPOPSTACK (yylen);
-  yylen = 0;
-  YY_STACK_PRINT (yyss, yyssp);
-
-  *++yyvsp = yyval;
-
-  /* Now 'shift' the result of the reduction.  Determine what state
-     that goes to, based on the state we popped back to and the rule
-     number reduced by.  */
-
-  yyn = yyr1[yyn];
-
-  yystate = yypgoto[yyn - YYNTOKENS] + *yyssp;
-  if (0 <= yystate && yystate <= YYLAST && yycheck[yystate] == *yyssp)
-    yystate = yytable[yystate];
-  else
-    yystate = yydefgoto[yyn - YYNTOKENS];
-
-  goto yynewstate;
-
-
-/*--------------------------------------.
-| yyerrlab -- here on detecting error.  |
-`--------------------------------------*/
-yyerrlab:
-  /* Make sure we have latest lookahead translation.  See comments at
-     user semantic actions for why this is necessary.  */
-  yytoken = yychar == YYEMPTY ? YYEMPTY : YYTRANSLATE (yychar);
-
-  /* If not already recovering from an error, report this error.  */
-  if (!yyerrstatus)
-    {
-      ++yynerrs;
-#if ! YYERROR_VERBOSE
-      yyerror (YY_("syntax error"));
-#else
-# define YYSYNTAX_ERROR yysyntax_error (&yymsg_alloc, &yymsg, \
-                                        yyssp, yytoken)
-      {
-        char const *yymsgp = YY_("syntax error");
-        int yysyntax_error_status;
-        yysyntax_error_status = YYSYNTAX_ERROR;
-        if (yysyntax_error_status == 0)
-          yymsgp = yymsg;
-        else if (yysyntax_error_status == 1)
-          {
-            if (yymsg != yymsgbuf)
-              YYSTACK_FREE (yymsg);
-            yymsg = (char *) YYSTACK_ALLOC (yymsg_alloc);
-            if (!yymsg)
-              {
-                yymsg = yymsgbuf;
-                yymsg_alloc = sizeof yymsgbuf;
-                yysyntax_error_status = 2;
-              }
-            else
-              {
-                yysyntax_error_status = YYSYNTAX_ERROR;
-                yymsgp = yymsg;
-              }
-          }
-        yyerror (yymsgp);
-        if (yysyntax_error_status == 2)
-          goto yyexhaustedlab;
-      }
-# undef YYSYNTAX_ERROR
-#endif
-    }
-
-
-
-  if (yyerrstatus == 3)
-    {
-      /* If just tried and failed to reuse lookahead token after an
-         error, discard it.  */
-
-      if (yychar <= YYEOF)
-        {
-          /* Return failure if at end of input.  */
-          if (yychar == YYEOF)
-            YYABORT;
-        }
-      else
-        {
-          yydestruct ("Error: discarding",
-                      yytoken, &yylval);
-          yychar = YYEMPTY;
-        }
-    }
-
-  /* Else will try to reuse lookahead token after shifting the error
-     token.  */
-  goto yyerrlab1;
-
-
-/*---------------------------------------------------.
-| yyerrorlab -- error raised explicitly by YYERROR.  |
-`---------------------------------------------------*/
-yyerrorlab:
-
-  /* Pacify compilers like GCC when the user code never invokes
-     YYERROR and the label yyerrorlab therefore never appears in user
-     code.  */
-  if (/*CONSTCOND*/ 0)
-     goto yyerrorlab;
-
-  /* Do not reclaim the symbols of the rule whose action triggered
-     this YYERROR.  */
-  YYPOPSTACK (yylen);
-  yylen = 0;
-  YY_STACK_PRINT (yyss, yyssp);
-  yystate = *yyssp;
-  goto yyerrlab1;
-
-
-/*-------------------------------------------------------------.
-| yyerrlab1 -- common code for both syntax error and YYERROR.  |
-`-------------------------------------------------------------*/
-yyerrlab1:
-  yyerrstatus = 3;      /* Each real token shifted decrements this.  */
-
-  for (;;)
-    {
-      yyn = yypact[yystate];
-      if (!yypact_value_is_default (yyn))
-        {
-          yyn += YYTERROR;
-          if (0 <= yyn && yyn <= YYLAST && yycheck[yyn] == YYTERROR)
-            {
-              yyn = yytable[yyn];
-              if (0 < yyn)
-                break;
-            }
-        }
-
-      /* Pop the current state because it cannot handle the error token.  */
-      if (yyssp == yyss)
-        YYABORT;
-
-
-      yydestruct ("Error: popping",
-                  yystos[yystate], yyvsp);
-      YYPOPSTACK (1);
-      yystate = *yyssp;
-      YY_STACK_PRINT (yyss, yyssp);
-    }
-
-  YY_IGNORE_MAYBE_UNINITIALIZED_BEGIN
-  *++yyvsp = yylval;
-  YY_IGNORE_MAYBE_UNINITIALIZED_END
-
-
-  /* Shift the error token.  */
-  YY_SYMBOL_PRINT ("Shifting", yystos[yyn], yyvsp, yylsp);
-
-  yystate = yyn;
-  goto yynewstate;
-
-
-/*-------------------------------------.
-| yyacceptlab -- YYACCEPT comes here.  |
-`-------------------------------------*/
-yyacceptlab:
-  yyresult = 0;
-  goto yyreturn;
-
-/*-----------------------------------.
-| yyabortlab -- YYABORT comes here.  |
-`-----------------------------------*/
-yyabortlab:
-  yyresult = 1;
-  goto yyreturn;
-
-#if !defined yyoverflow || YYERROR_VERBOSE
-/*-------------------------------------------------.
-| yyexhaustedlab -- memory exhaustion comes here.  |
-`-------------------------------------------------*/
-yyexhaustedlab:
-  yyerror (YY_("memory exhausted"));
-  yyresult = 2;
-  /* Fall through.  */
-#endif
-
-yyreturn:
-  if (yychar != YYEMPTY)
-    {
-      /* Make sure we have latest lookahead translation.  See comments at
-         user semantic actions for why this is necessary.  */
-      yytoken = YYTRANSLATE (yychar);
-      yydestruct ("Cleanup: discarding lookahead",
-                  yytoken, &yylval);
-    }
-  /* Do not reclaim the symbols of the rule whose action triggered
-     this YYABORT or YYACCEPT.  */
-  YYPOPSTACK (yylen);
-  YY_STACK_PRINT (yyss, yyssp);
-  while (yyssp != yyss)
-    {
-      yydestruct ("Cleanup: popping",
-                  yystos[*yyssp], yyvsp);
-      YYPOPSTACK (1);
-    }
-#ifndef yyoverflow
-  if (yyss != yyssa)
-    YYSTACK_FREE (yyss);
-#endif
-#if YYERROR_VERBOSE
-  if (yymsg != yymsgbuf)
-    YYSTACK_FREE (yymsg);
-#endif
-  return yyresult;
-}
-#line 329 "eqn.y" /* yacc.c:1906  */
-
diff -Nuar groff-1.22.3.old/src/preproc/eqn/eqn.man groff-1.22.3/src/preproc/eqn/eqn.man
--- groff-1.22.3.old/src/preproc/eqn/eqn.man	2014-11-04 10:38:35.232523909 +0200
+++ groff-1.22.3/src/preproc/eqn/eqn.man	2015-04-23 20:57:03.000000000 +0300
@@ -3,6 +3,10 @@
 @g@eqn \- format equations for troff or MathML
 .
 .
+.do nr groff_C \n[.C]
+.cp 0
+.
+.
 .\" license (copying)
 .de co
 Copyright \[co] 1989-2014 Free Software Foundation, Inc.
@@ -341,7 +345,7 @@
 .
 .TP
 punctuation
-a punctuation character such as \[oq],\[cl];
+a punctuation character such as \[oq],\[cq];
 .
 .TP
 inner
@@ -468,7 +472,7 @@
 about the math axis.
 .
 The math axis is the vertical position about which characters such as
-\[oq]\[pl]\[]cq and \[oq]\[mi]\[cq] are centered; also it is the
+\[oq]\[pl]\[cq] and \[oq]\[mi]\[cq] are centered; also it is the
 vertical position used for the bar of fractions.
 .
 For example,
@@ -1401,6 +1405,9 @@
 .co
 .
 .
+.cp \n[groff_C]
+.
+.
 .\" Local Variables:
 .\" mode: nroff
 .\" End:
diff -Nuar groff-1.22.3.old/src/preproc/eqn/eqn_tab.h groff-1.22.3/src/preproc/eqn/eqn_tab.h
--- groff-1.22.3.old/src/preproc/eqn/eqn_tab.h	2014-11-04 10:38:38.300485555 +0200
+++ groff-1.22.3/src/preproc/eqn/eqn_tab.h	1970-01-01 02:00:00.000000000 +0200
@@ -1,193 +0,0 @@
-/* A Bison parser, made by GNU Bison 3.0.2.  */
-
-/* Bison interface for Yacc-like parsers in C
-
-   Copyright (C) 1984, 1989-1990, 2000-2013 Free Software Foundation, Inc.
-
-   This program is free software: you can redistribute it and/or modify
-   it under the terms of the GNU General Public License as published by
-   the Free Software Foundation, either version 3 of the License, or
-   (at your option) any later version.
-
-   This program is distributed in the hope that it will be useful,
-   but WITHOUT ANY WARRANTY; without even the implied warranty of
-   MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
-   GNU General Public License for more details.
-
-   You should have received a copy of the GNU General Public License
-   along with this program.  If not, see <http://www.gnu.org/licenses/>.  */
-
-/* As a special exception, you may create a larger work that contains
-   part or all of the Bison parser skeleton and distribute that work
-   under terms of your choice, so long as that work isn't itself a
-   parser generator using the skeleton or a modified version thereof
-   as a parser skeleton.  Alternatively, if you modify or redistribute
-   the parser skeleton itself, you may (at your option) remove this
-   special exception, which will cause the skeleton and the resulting
-   Bison output files to be licensed under the GNU General Public
-   License without this special exception.
-
-   This special exception was added by the Free Software Foundation in
-   version 2.2 of Bison.  */
-
-#ifndef YY_YY_Y_TAB_H_INCLUDED
-# define YY_YY_Y_TAB_H_INCLUDED
-/* Debug traces.  */
-#ifndef YYDEBUG
-# define YYDEBUG 0
-#endif
-#if YYDEBUG
-extern int yydebug;
-#endif
-
-/* Token type.  */
-#ifndef YYTOKENTYPE
-# define YYTOKENTYPE
-  enum yytokentype
-  {
-    OVER = 258,
-    SMALLOVER = 259,
-    SQRT = 260,
-    SUB = 261,
-    SUP = 262,
-    LPILE = 263,
-    RPILE = 264,
-    CPILE = 265,
-    PILE = 266,
-    LEFT = 267,
-    RIGHT = 268,
-    TO = 269,
-    FROM = 270,
-    SIZE = 271,
-    FONT = 272,
-    ROMAN = 273,
-    BOLD = 274,
-    ITALIC = 275,
-    FAT = 276,
-    ACCENT = 277,
-    BAR = 278,
-    UNDER = 279,
-    ABOVE = 280,
-    TEXT = 281,
-    QUOTED_TEXT = 282,
-    FWD = 283,
-    BACK = 284,
-    DOWN = 285,
-    UP = 286,
-    MATRIX = 287,
-    COL = 288,
-    LCOL = 289,
-    RCOL = 290,
-    CCOL = 291,
-    MARK = 292,
-    LINEUP = 293,
-    TYPE = 294,
-    VCENTER = 295,
-    PRIME = 296,
-    SPLIT = 297,
-    NOSPLIT = 298,
-    UACCENT = 299,
-    SPECIAL = 300,
-    SPACE = 301,
-    GFONT = 302,
-    GSIZE = 303,
-    DEFINE = 304,
-    NDEFINE = 305,
-    TDEFINE = 306,
-    SDEFINE = 307,
-    UNDEF = 308,
-    IFDEF = 309,
-    INCLUDE = 310,
-    DELIM = 311,
-    CHARTYPE = 312,
-    SET = 313,
-    GRFONT = 314,
-    GBFONT = 315
-  };
-#endif
-/* Tokens.  */
-#define OVER 258
-#define SMALLOVER 259
-#define SQRT 260
-#define SUB 261
-#define SUP 262
-#define LPILE 263
-#define RPILE 264
-#define CPILE 265
-#define PILE 266
-#define LEFT 267
-#define RIGHT 268
-#define TO 269
-#define FROM 270
-#define SIZE 271
-#define FONT 272
-#define ROMAN 273
-#define BOLD 274
-#define ITALIC 275
-#define FAT 276
-#define ACCENT 277
-#define BAR 278
-#define UNDER 279
-#define ABOVE 280
-#define TEXT 281
-#define QUOTED_TEXT 282
-#define FWD 283
-#define BACK 284
-#define DOWN 285
-#define UP 286
-#define MATRIX 287
-#define COL 288
-#define LCOL 289
-#define RCOL 290
-#define CCOL 291
-#define MARK 292
-#define LINEUP 293
-#define TYPE 294
-#define VCENTER 295
-#define PRIME 296
-#define SPLIT 297
-#define NOSPLIT 298
-#define UACCENT 299
-#define SPECIAL 300
-#define SPACE 301
-#define GFONT 302
-#define GSIZE 303
-#define DEFINE 304
-#define NDEFINE 305
-#define TDEFINE 306
-#define SDEFINE 307
-#define UNDEF 308
-#define IFDEF 309
-#define INCLUDE 310
-#define DELIM 311
-#define CHARTYPE 312
-#define SET 313
-#define GRFONT 314
-#define GBFONT 315
-
-/* Value type.  */
-#if ! defined YYSTYPE && ! defined YYSTYPE_IS_DECLARED
-typedef union YYSTYPE YYSTYPE;
-union YYSTYPE
-{
-#line 30 "eqn.y" /* yacc.c:1909  */
-
-	char *str;
-	box *b;
-	pile_box *pb;
-	matrix_box *mb;
-	int n;
-	column *col;
-
-#line 183 "y.tab.h" /* yacc.c:1909  */
-};
-# define YYSTYPE_IS_TRIVIAL 1
-# define YYSTYPE_IS_DECLARED 1
-#endif
-
-
-extern YYSTYPE yylval;
-
-int yyparse (void);
-
-#endif /* !YY_YY_Y_TAB_H_INCLUDED  */
diff -Nuar groff-1.22.3.old/src/preproc/eqn/eqn.y groff-1.22.3/src/preproc/eqn/eqn.y
--- groff-1.22.3.old/src/preproc/eqn/eqn.y	2014-11-04 10:38:35.232523909 +0200
+++ groff-1.22.3/src/preproc/eqn/eqn.y	1970-01-01 02:00:00.000000000 +0200
@@ -1,329 +0,0 @@
-/* Copyright (C) 1989-2014  Free Software Foundation, Inc.
-     Written by James Clark (jjc@jclark.com)
-
-This file is part of groff.
-
-groff is free software; you can redistribute it and/or modify it under
-the terms of the GNU General Public License as published by the Free
-Software Foundation, either version 3 of the License, or
-(at your option) any later version.
-
-groff is distributed in the hope that it will be useful, but WITHOUT ANY
-WARRANTY; without even the implied warranty of MERCHANTABILITY or
-FITNESS FOR A PARTICULAR PURPOSE.  See the GNU General Public License
-for more details.
-
-You should have received a copy of the GNU General Public License
-along with this program. If not, see <http://www.gnu.org/licenses/>. */
-%{
-#include <stdio.h>
-#include <string.h>
-#include <stdlib.h>
-
-#include "lib.h"
-#include "box.h"
-extern int non_empty_flag;
-int yylex();
-void yyerror(const char *);
-%}
-
-%union {
-	char *str;
-	box *b;
-	pile_box *pb;
-	matrix_box *mb;
-	int n;
-	column *col;
-}
-
-%token OVER
-%token SMALLOVER
-%token SQRT
-%token SUB
-%token SUP
-%token LPILE
-%token RPILE
-%token CPILE
-%token PILE
-%token LEFT
-%token RIGHT
-%token TO
-%token FROM
-%token SIZE
-%token FONT
-%token ROMAN
-%token BOLD
-%token ITALIC
-%token FAT
-%token ACCENT
-%token BAR
-%token UNDER
-%token ABOVE
-%token <str> TEXT
-%token <str> QUOTED_TEXT
-%token FWD
-%token BACK
-%token DOWN
-%token UP
-%token MATRIX
-%token COL
-%token LCOL
-%token RCOL
-%token CCOL
-%token MARK
-%token LINEUP
-%token TYPE
-%token VCENTER
-%token PRIME
-%token SPLIT
-%token NOSPLIT
-%token UACCENT
-%token SPECIAL
-
-/* these are handled in the lexer */
-%token SPACE
-%token GFONT
-%token GSIZE
-%token DEFINE
-%token NDEFINE
-%token TDEFINE
-%token SDEFINE
-%token UNDEF
-%token IFDEF
-%token INCLUDE
-%token DELIM
-%token CHARTYPE
-%token SET
-%token GRFONT
-%token GBFONT
-
-/* The original eqn manual says that `left' is right associative. It's lying.
-Consider `left ( ~ left ( ~ right ) right )'. */
-
-%right LEFT
-%left RIGHT
-%right LPILE RPILE CPILE PILE TEXT QUOTED_TEXT MATRIX MARK LINEUP '^' '~' '\t' '{' SPLIT NOSPLIT
-%right FROM TO
-%left SQRT OVER SMALLOVER
-%right SUB SUP
-%right ROMAN BOLD ITALIC FAT FONT SIZE FWD BACK DOWN UP TYPE VCENTER SPECIAL
-%right BAR UNDER PRIME
-%left ACCENT UACCENT
-
-%type <b> mark from_to sqrt_over script simple equation nonsup
-%type <n> number
-%type <str> text delim
-%type <pb> pile_element_list pile_arg
-%type <mb> column_list
-%type <col> column column_arg column_element_list
-
-%%
-top:
-	/* empty */
-	| equation
-		{ $1->top_level(); non_empty_flag = 1; }
-	;
-
-equation:
-	mark
-		{ $$ = $1; }
-	| equation mark
-		{
-		  list_box *lb = $1->to_list_box();
-		  if (!lb)
-		    lb = new list_box($1);
-		  lb->append($2);
-		  $$ = lb;
-		}
-	;
-
-mark:
-	from_to
-		{ $$ = $1; }
-	| MARK mark
-		{ $$ = make_mark_box($2); }
-	| LINEUP mark
-		{ $$ = make_lineup_box($2); }
-	;
-
-from_to:
-	sqrt_over  %prec FROM
-		{ $$ = $1; }
-	| sqrt_over TO from_to
-		{ $$ = make_limit_box($1, 0, $3); }
-	| sqrt_over FROM sqrt_over
-		{ $$ = make_limit_box($1, $3, 0); }
-	| sqrt_over FROM sqrt_over TO from_to
-		{ $$ = make_limit_box($1, $3, $5); }
-	| sqrt_over FROM sqrt_over FROM from_to
-		{ $$ = make_limit_box($1, make_limit_box($3, $5, 0), 0); }
-	;
-
-sqrt_over:
-	script
-		{ $$ = $1; }
-	| SQRT sqrt_over
-		{ $$ = make_sqrt_box($2); }
-	| sqrt_over OVER sqrt_over
-		{ $$ = make_over_box($1, $3); }
-	| sqrt_over SMALLOVER sqrt_over
-		{ $$ = make_small_over_box($1, $3); }
-	;
-
-script:
-	nonsup
-		{ $$ = $1; }
-	| simple SUP script
-		{ $$ = make_script_box($1, 0, $3); }
-	;
-
-nonsup:
-	simple  %prec SUP
-		{ $$ = $1; }
-	| simple SUB nonsup
-		{ $$ = make_script_box($1, $3, 0); }
-	| simple SUB simple SUP script
-		{ $$ = make_script_box($1, $3, $5); }
-	;
-
-simple:
-	TEXT
-		{ $$ = split_text($1); }
-	| QUOTED_TEXT
-		{ $$ = new quoted_text_box($1); }
-	| SPLIT QUOTED_TEXT
-		{ $$ = split_text($2); }
-	| NOSPLIT TEXT
-		{ $$ = new quoted_text_box($2); }
-	| '^'
-		{ $$ = new half_space_box; }
-	| '~'
-		{ $$ = new space_box; }
-	| '\t'
-		{ $$ = new tab_box; }
-	| '{' equation '}'
-		{ $$ = $2; }
-	| PILE pile_arg
-		{ $2->set_alignment(CENTER_ALIGN); $$ = $2; }
-	| LPILE pile_arg
-		{ $2->set_alignment(LEFT_ALIGN); $$ = $2; }
-	| RPILE pile_arg
-		{ $2->set_alignment(RIGHT_ALIGN); $$ = $2; }
-	| CPILE pile_arg
-		{ $2->set_alignment(CENTER_ALIGN); $$ = $2; }
-	| MATRIX '{' column_list '}'
-		{ $$ = $3; }
-	| LEFT delim equation RIGHT delim
-		{ $$ = make_delim_box($2, $3, $5); }
-	| LEFT delim equation
-		{ $$ = make_delim_box($2, $3, 0); }
-	| simple BAR
-		{ $$ = make_overline_box($1); }
-	| simple UNDER
-		{ $$ = make_underline_box($1); }
-	| simple PRIME
-		{ $$ = make_prime_box($1); }
-	| simple ACCENT simple
-		{ $$ = make_accent_box($1, $3); }
-	| simple UACCENT simple
-		{ $$ = make_uaccent_box($1, $3); }
-	| ROMAN simple
-		{ $$ = new font_box(strsave(get_grfont()), $2); }
-	| BOLD simple
-		{ $$ = new font_box(strsave(get_gbfont()), $2); }
-	| ITALIC simple
-		{ $$ = new font_box(strsave(get_gfont()), $2); }
-	| FAT simple
-		{ $$ = new fat_box($2); }
-	| FONT text simple
-		{ $$ = new font_box($2, $3); }
-	| SIZE text simple
-		{ $$ = new size_box($2, $3); }
-	| FWD number simple
-		{ $$ = new hmotion_box($2, $3); }
-	| BACK number simple
-		{ $$ = new hmotion_box(-$2, $3); }
-	| UP number simple
-		{ $$ = new vmotion_box($2, $3); }
-	| DOWN number simple
-		{ $$ = new vmotion_box(-$2, $3); }
-	| TYPE text simple
-		{ $3->set_spacing_type($2); $$ = $3; }
-	| VCENTER simple
-		{ $$ = new vcenter_box($2); }
-	| SPECIAL text simple
-		{ $$ = make_special_box($2, $3); }
-	;
-	
-number:
-	text
-		{
-		  int n;
-		  if (sscanf($1, "%d", &n) == 1)
-		    $$ = n;
-		  a_delete $1;
-		}
-	;
-
-pile_element_list:
-	equation
-		{ $$ = new pile_box($1); }
-	| pile_element_list ABOVE equation
-		{ $1->append($3); $$ = $1; }
-	;
-
-pile_arg:
-  	'{' pile_element_list '}'
-		{ $$ = $2; }
-	| number '{' pile_element_list '}'
-		{ $3->set_space($1); $$ = $3; }
-	;
-
-column_list:
-	column
-		{ $$ = new matrix_box($1); }
-	| column_list column
-		{ $1->append($2); $$ = $1; }
-	;
-
-column_element_list:
-	equation
-		{ $$ = new column($1); }
-	| column_element_list ABOVE equation
-		{ $1->append($3); $$ = $1; }
-	;
-
-column_arg:
-  	'{' column_element_list '}'
-		{ $$ = $2; }
-	| number '{' column_element_list '}'
-		{ $3->set_space($1); $$ = $3; }
-	;
-
-column:
-	COL column_arg
-		{ $2->set_alignment(CENTER_ALIGN); $$ = $2; }
-	| LCOL column_arg
-		{ $2->set_alignment(LEFT_ALIGN); $$ = $2; }
-	| RCOL column_arg
-		{ $2->set_alignment(RIGHT_ALIGN); $$ = $2; }
-	| CCOL column_arg
-		{ $2->set_alignment(CENTER_ALIGN); $$ = $2; }
-	;
-
-text:	TEXT
-		{ $$ = $1; }
-	| QUOTED_TEXT
-		{ $$ = $1; }
-	;
-
-delim:
-	text
-		{ $$ = $1; }
-	| '{'
-		{ $$ = strsave("{"); }
-	| '}'
-		{ $$ = strsave("}"); }
-	;
-
-%%
diff -Nuar groff-1.22.3.old/src/preproc/eqn/eqn.ypp groff-1.22.3/src/preproc/eqn/eqn.ypp
--- groff-1.22.3.old/src/preproc/eqn/eqn.ypp	1970-01-01 02:00:00.000000000 +0200
+++ groff-1.22.3/src/preproc/eqn/eqn.ypp	2015-04-23 20:57:03.000000000 +0300
@@ -0,0 +1,329 @@
+/* Copyright (C) 1989-2014  Free Software Foundation, Inc.
+     Written by James Clark (jjc@jclark.com)
+
+This file is part of groff.
+
+groff is free software; you can redistribute it and/or modify it under
+the terms of the GNU General Public License as published by the Free
+Software Foundation, either version 3 of the License, or
+(at your option) any later version.
+
+groff is distributed in the hope that it will be useful, but WITHOUT ANY
+WARRANTY; without even the implied warranty of MERCHANTABILITY or
+FITNESS FOR A PARTICULAR PURPOSE.  See the GNU General Public License
+for more details.
+
+You should have received a copy of the GNU General Public License
+along with this program. If not, see <http://www.gnu.org/licenses/>. */
+%{
+#include <stdio.h>
+#include <string.h>
+#include <stdlib.h>
+
+#include "lib.h"
+#include "box.h"
+extern int non_empty_flag;
+int yylex();
+void yyerror(const char *);
+%}
+
+%union {
+	char *str;
+	box *b;
+	pile_box *pb;
+	matrix_box *mb;
+	int n;
+	column *col;
+}
+
+%token OVER
+%token SMALLOVER
+%token SQRT
+%token SUB
+%token SUP
+%token LPILE
+%token RPILE
+%token CPILE
+%token PILE
+%token LEFT
+%token RIGHT
+%token TO
+%token FROM
+%token SIZE
+%token FONT
+%token ROMAN
+%token BOLD
+%token ITALIC
+%token FAT
+%token ACCENT
+%token BAR
+%token UNDER
+%token ABOVE
+%token <str> TEXT
+%token <str> QUOTED_TEXT
+%token FWD
+%token BACK
+%token DOWN
+%token UP
+%token MATRIX
+%token COL
+%token LCOL
+%token RCOL
+%token CCOL
+%token MARK
+%token LINEUP
+%token TYPE
+%token VCENTER
+%token PRIME
+%token SPLIT
+%token NOSPLIT
+%token UACCENT
+%token SPECIAL
+
+/* these are handled in the lexer */
+%token SPACE
+%token GFONT
+%token GSIZE
+%token DEFINE
+%token NDEFINE
+%token TDEFINE
+%token SDEFINE
+%token UNDEF
+%token IFDEF
+%token INCLUDE
+%token DELIM
+%token CHARTYPE
+%token SET
+%token GRFONT
+%token GBFONT
+
+/* The original eqn manual says that `left' is right associative. It's lying.
+Consider `left ( ~ left ( ~ right ) right )'. */
+
+%right LEFT
+%left RIGHT
+%right LPILE RPILE CPILE PILE TEXT QUOTED_TEXT MATRIX MARK LINEUP '^' '~' '\t' '{' SPLIT NOSPLIT
+%right FROM TO
+%left SQRT OVER SMALLOVER
+%right SUB SUP
+%right ROMAN BOLD ITALIC FAT FONT SIZE FWD BACK DOWN UP TYPE VCENTER SPECIAL
+%right BAR UNDER PRIME
+%left ACCENT UACCENT
+
+%type <b> mark from_to sqrt_over script simple equation nonsup
+%type <n> number
+%type <str> text delim
+%type <pb> pile_element_list pile_arg
+%type <mb> column_list
+%type <col> column column_arg column_element_list
+
+%%
+top:
+	/* empty */
+	| equation
+		{ $1->top_level(); non_empty_flag = 1; }
+	;
+
+equation:
+	mark
+		{ $$ = $1; }
+	| equation mark
+		{
+		  list_box *lb = $1->to_list_box();
+		  if (!lb)
+		    lb = new list_box($1);
+		  lb->append($2);
+		  $$ = lb;
+		}
+	;
+
+mark:
+	from_to
+		{ $$ = $1; }
+	| MARK mark
+		{ $$ = make_mark_box($2); }
+	| LINEUP mark
+		{ $$ = make_lineup_box($2); }
+	;
+
+from_to:
+	sqrt_over  %prec FROM
+		{ $$ = $1; }
+	| sqrt_over TO from_to
+		{ $$ = make_limit_box($1, 0, $3); }
+	| sqrt_over FROM sqrt_over
+		{ $$ = make_limit_box($1, $3, 0); }
+	| sqrt_over FROM sqrt_over TO from_to
+		{ $$ = make_limit_box($1, $3, $5); }
+	| sqrt_over FROM sqrt_over FROM from_to
+		{ $$ = make_limit_box($1, make_limit_box($3, $5, 0), 0); }
+	;
+
+sqrt_over:
+	script
+		{ $$ = $1; }
+	| SQRT sqrt_over
+		{ $$ = make_sqrt_box($2); }
+	| sqrt_over OVER sqrt_over
+		{ $$ = make_over_box($1, $3); }
+	| sqrt_over SMALLOVER sqrt_over
+		{ $$ = make_small_over_box($1, $3); }
+	;
+
+script:
+	nonsup
+		{ $$ = $1; }
+	| simple SUP script
+		{ $$ = make_script_box($1, 0, $3); }
+	;
+
+nonsup:
+	simple  %prec SUP
+		{ $$ = $1; }
+	| simple SUB nonsup
+		{ $$ = make_script_box($1, $3, 0); }
+	| simple SUB simple SUP script
+		{ $$ = make_script_box($1, $3, $5); }
+	;
+
+simple:
+	TEXT
+		{ $$ = split_text($1); }
+	| QUOTED_TEXT
+		{ $$ = new quoted_text_box($1); }
+	| SPLIT QUOTED_TEXT
+		{ $$ = split_text($2); }
+	| NOSPLIT TEXT
+		{ $$ = new quoted_text_box($2); }
+	| '^'
+		{ $$ = new half_space_box; }
+	| '~'
+		{ $$ = new space_box; }
+	| '\t'
+		{ $$ = new tab_box; }
+	| '{' equation '}'
+		{ $$ = $2; }
+	| PILE pile_arg
+		{ $2->set_alignment(CENTER_ALIGN); $$ = $2; }
+	| LPILE pile_arg
+		{ $2->set_alignment(LEFT_ALIGN); $$ = $2; }
+	| RPILE pile_arg
+		{ $2->set_alignment(RIGHT_ALIGN); $$ = $2; }
+	| CPILE pile_arg
+		{ $2->set_alignment(CENTER_ALIGN); $$ = $2; }
+	| MATRIX '{' column_list '}'
+		{ $$ = $3; }
+	| LEFT delim equation RIGHT delim
+		{ $$ = make_delim_box($2, $3, $5); }
+	| LEFT delim equation
+		{ $$ = make_delim_box($2, $3, 0); }
+	| simple BAR
+		{ $$ = make_overline_box($1); }
+	| simple UNDER
+		{ $$ = make_underline_box($1); }
+	| simple PRIME
+		{ $$ = make_prime_box($1); }
+	| simple ACCENT simple
+		{ $$ = make_accent_box($1, $3); }
+	| simple UACCENT simple
+		{ $$ = make_uaccent_box($1, $3); }
+	| ROMAN simple
+		{ $$ = new font_box(strsave(get_grfont()), $2); }
+	| BOLD simple
+		{ $$ = new font_box(strsave(get_gbfont()), $2); }
+	| ITALIC simple
+		{ $$ = new font_box(strsave(get_gfont()), $2); }
+	| FAT simple
+		{ $$ = new fat_box($2); }
+	| FONT text simple
+		{ $$ = new font_box($2, $3); }
+	| SIZE text simple
+		{ $$ = new size_box($2, $3); }
+	| FWD number simple
+		{ $$ = new hmotion_box($2, $3); }
+	| BACK number simple
+		{ $$ = new hmotion_box(-$2, $3); }
+	| UP number simple
+		{ $$ = new vmotion_box($2, $3); }
+	| DOWN number simple
+		{ $$ = new vmotion_box(-$2, $3); }
+	| TYPE text simple
+		{ $3->set_spacing_type($2); $$ = $3; }
+	| VCENTER simple
+		{ $$ = new vcenter_box($2); }
+	| SPECIAL text simple
+		{ $$ = make_special_box($2, $3); }
+	;
+	
+number:
+	text
+		{
+		  int n;
+		  if (sscanf($1, "%d", &n) == 1)
+		    $$ = n;
+		  a_delete $1;
+		}
+	;
+
+pile_element_list:
+	equation
+		{ $$ = new pile_box($1); }
+	| pile_element_list ABOVE equation
+		{ $1->append($3); $$ = $1; }
+	;
+
+pile_arg:
+  	'{' pile_element_list '}'
+		{ $$ = $2; }
+	| number '{' pile_element_list '}'
+		{ $3->set_space($1); $$ = $3; }
+	;
+
+column_list:
+	column
+		{ $$ = new matrix_box($1); }
+	| column_list column
+		{ $1->append($2); $$ = $1; }
+	;
+
+column_element_list:
+	equation
+		{ $$ = new column($1); }
+	| column_element_list ABOVE equation
+		{ $1->append($3); $$ = $1; }
+	;
+
+column_arg:
+  	'{' column_element_list '}'
+		{ $$ = $2; }
+	| number '{' column_element_list '}'
+		{ $3->set_space($1); $$ = $3; }
+	;
+
+column:
+	COL column_arg
+		{ $2->set_alignment(CENTER_ALIGN); $$ = $2; }
+	| LCOL column_arg
+		{ $2->set_alignment(LEFT_ALIGN); $$ = $2; }
+	| RCOL column_arg
+		{ $2->set_alignment(RIGHT_ALIGN); $$ = $2; }
+	| CCOL column_arg
+		{ $2->set_alignment(CENTER_ALIGN); $$ = $2; }
+	;
+
+text:	TEXT
+		{ $$ = $1; }
+	| QUOTED_TEXT
+		{ $$ = $1; }
+	;
+
+delim:
+	text
+		{ $$ = $1; }
+	| '{'
+		{ $$ = strsave("{"); }
+	| '}'
+		{ $$ = strsave("}"); }
+	;
+
+%%
diff -Nuar groff-1.22.3.old/src/preproc/eqn/.gitignore groff-1.22.3/src/preproc/eqn/.gitignore
--- groff-1.22.3.old/src/preproc/eqn/.gitignore	1970-01-01 02:00:00.000000000 +0200
+++ groff-1.22.3/src/preproc/eqn/.gitignore	2015-04-23 20:57:03.000000000 +0300
@@ -0,0 +1 @@
+eqn.cpp
diff -Nuar groff-1.22.3.old/src/preproc/eqn/lex.cpp groff-1.22.3/src/preproc/eqn/lex.cpp
--- groff-1.22.3.old/src/preproc/eqn/lex.cpp	2014-11-04 10:38:35.232523909 +0200
+++ groff-1.22.3/src/preproc/eqn/lex.cpp	2015-04-23 20:57:03.000000000 +0300
@@ -18,7 +18,7 @@
 along with this program. If not, see <http://www.gnu.org/licenses/>. */
 
 #include "eqn.h"
-#include "eqn_tab.h"
+#include "eqn.hpp"
 #include "stringclass.h"
 #include "ptable.h"
 
diff -Nuar groff-1.22.3.old/src/preproc/eqn/main.cpp groff-1.22.3/src/preproc/eqn/main.cpp
--- groff-1.22.3.old/src/preproc/eqn/main.cpp	2014-11-04 10:38:35.232523909 +0200
+++ groff-1.22.3/src/preproc/eqn/main.cpp	2015-04-23 20:57:03.000000000 +0300
@@ -25,6 +25,7 @@
 #include "htmlhint.h"
 #include "pbox.h"
 #include "ctype.h"
+#include "lf.h"
 
 #define STARTUP_FILE "eqnrc"
 
@@ -66,9 +67,12 @@
 {
   string linebuf;
   string str;
+  string fn(filename);
+  fn += '\0';
+  normalize_for_lf(fn);
+  current_filename = fn.contents();
   if (output_format == troff)
-    printf(".lf 1 %s\n", filename);
-  current_filename = filename;
+    printf(".lf 1 %s\n", current_filename);
   current_lineno = 0;
   while (read_line(fp, &linebuf)) {
     if (linebuf.length() >= 4
diff -Nuar groff-1.22.3.old/src/preproc/eqn/Makefile.sub groff-1.22.3/src/preproc/eqn/Makefile.sub
--- groff-1.22.3.old/src/preproc/eqn/Makefile.sub	2014-11-04 10:38:35.233523897 +0200
+++ groff-1.22.3/src/preproc/eqn/Makefile.sub	1970-01-01 02:00:00.000000000 +0200
@@ -1,93 +0,0 @@
-# Makefile.sub for `preproc eqn'
-#
-# File position: <groff-source>/src/preproc/eqn/Makefile.sub
-#
-# Copyright (C) 2014  Free Software Foundation, Inc.
-#
-# This file is part of `font utf8' which is part of `groff'.
-#
-# `groff' is free software; you can redistribute it and/or modify it
-# under the terms of the GNU General Public License as published by
-# the Free Software Foundation, either version 2 of the License, or
-# (at your option) any later version.
-#
-# `groff' is distributed in the hope that it will be useful, but
-# WITHOUT ANY WARRANTY; without even the implied warranty of
-# MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the GNU
-# General Public License for more details.
-#
-# You should have received a copy of the GNU General Public License
-# along with this program. If not, see
-# <http://www.gnu.org/licenses/gpl-2.0.html>.
-#
-########################################################################
-
-PROG=eqn$(EXEEXT)
-MAN1=eqn.n neqn.n
-XLIBS=$(LIBGROFF)
-MLIB=$(LIBM)
-OBJS=\
-  eqn.$(OBJEXT) \
-  main.$(OBJEXT) \
-  lex.$(OBJEXT) \
-  box.$(OBJEXT) \
-  limit.$(OBJEXT) \
-  list.$(OBJEXT) \
-  over.$(OBJEXT) \
-  text.$(OBJEXT) \
-  script.$(OBJEXT) \
-  mark.$(OBJEXT) \
-  other.$(OBJEXT) \
-  delim.$(OBJEXT) \
-  sqrt.$(OBJEXT) \
-  pile.$(OBJEXT) \
-  special.$(OBJEXT)
-CCSRCS=\
-  $(srcdir)/main.cpp \
-  $(srcdir)/lex.cpp \
-  $(srcdir)/box.cpp \
-  $(srcdir)/limit.cpp \
-  $(srcdir)/list.cpp \
-  $(srcdir)/over.cpp \
-  $(srcdir)/text.cpp \
-  $(srcdir)/script.cpp \
-  $(srcdir)/mark.cpp \
-  $(srcdir)/other.cpp \
-  $(srcdir)/delim.cpp \
-  $(srcdir)/sqrt.cpp \
-  $(srcdir)/pile.cpp \
-  $(srcdir)/special.cpp
-HDRS=\
-  $(srcdir)/box.h \
-  $(srcdir)/eqn.h \
-  $(srcdir)/pbox.h
-GRAM=$(srcdir)/eqn.y
-YTABC=eqn.cpp
-YTABH=eqn_tab.h
-NAMEPREFIX=$(g)
-MOSTLYCLEANADD=neqn
-RM=rm -f
-
-all: neqn
-
-neqn: neqn.sh $(SH_DEPS_SED_SCRIPT)
-	$(RM) $@
-	sed -e 's/@g@/$(g)/g' \
-	    -f $(SH_DEPS_SED_SCRIPT) \
-	    -e $(SH_SCRIPT_SED_CMD) $(srcdir)/neqn.sh >$@
-	chmod +x $@
-
-install_data: neqn
-	$(RM) $(DESTDIR)$(bindir)/$(NAMEPREFIX)neqn
-	$(INSTALL_SCRIPT) neqn $(DESTDIR)$(bindir)/$(NAMEPREFIX)neqn
-
-uninstall_sub:
-	$(RM) $(DESTDIR)$(bindir)/$(NAMEPREFIX)neqn
-
-########################################################################
-# Emacs settings
-########################################################################
-#
-# Local Variables:
-# mode: makefile
-# End:
diff -Nuar groff-1.22.3.old/src/preproc/eqn/neqn.man groff-1.22.3/src/preproc/eqn/neqn.man
--- groff-1.22.3.old/src/preproc/eqn/neqn.man	2014-11-04 10:38:35.233523897 +0200
+++ groff-1.22.3/src/preproc/eqn/neqn.man	2015-04-23 20:57:03.000000000 +0300
@@ -5,7 +5,7 @@
 .
 .\" license
 .de co
-Copyright \[co] 2001-2014 Free Software Foundation, Inc.
+Copyright \(co 2001-2014 Free Software Foundation, Inc.
 
 Permission is granted to make and distribute verbatim copies of
 this manual provided the copyright notice and this permission notice
diff -Nuar groff-1.22.3.old/src/preproc/grn/.gitignore groff-1.22.3/src/preproc/grn/.gitignore
--- groff-1.22.3.old/src/preproc/grn/.gitignore	1970-01-01 02:00:00.000000000 +0200
+++ groff-1.22.3/src/preproc/grn/.gitignore	2015-04-23 20:57:03.000000000 +0300
@@ -0,0 +1,3 @@
+Makefile.dep
+grn
+grn.n
diff -Nuar groff-1.22.3.old/src/preproc/grn/grn.am groff-1.22.3/src/preproc/grn/grn.am
--- groff-1.22.3.old/src/preproc/grn/grn.am	1970-01-01 02:00:00.000000000 +0200
+++ groff-1.22.3/src/preproc/grn/grn.am	2015-04-23 20:57:03.000000000 +0300
@@ -0,0 +1,29 @@
+# Copyright (C) 2014
+#      Free Software Foundation, Inc.
+# 
+# This file is part of groff.
+#
+# groff is free software; you can redistribute it and/or modify it under
+# the terms of the GNU General Public License as published by the Free
+# Software Foundation, either version 3 of the License, or
+# (at your option) any later version.
+#
+# groff is distributed in the hope that it will be useful, but WITHOUT ANY
+# WARRANTY; without even the implied warranty of MERCHANTABILITY or
+# FITNESS FOR A PARTICULAR PURPOSE.  See the GNU General Public License
+# for more details.
+#
+# You should have received a copy of the GNU General Public License
+# along with this program. If not, see <http://www.gnu.org/licenses/>.
+
+prefixexecbin_PROGRAMS += grn
+grn_SOURCES = \
+  src/preproc/grn/hdb.cpp \
+  src/preproc/grn/hpoint.cpp \
+  src/preproc/grn/hgraph.cpp \
+  src/preproc/grn/main.cpp \
+  src/preproc/grn/gprint.h
+src/preproc/grn/main.$(OBJEXT): defs.h
+grn_LDADD = libgroff.a lib/libgnu.a $(LIBM)
+PREFIXMAN1 += src/preproc/grn/grn.n
+EXTRA_DIST += src/preproc/grn/README src/preproc/grn/grn.man
diff -Nuar groff-1.22.3.old/src/preproc/grn/grn.man groff-1.22.3/src/preproc/grn/grn.man
--- groff-1.22.3.old/src/preproc/grn/grn.man	2014-11-04 10:38:35.239523822 +0200
+++ groff-1.22.3/src/preproc/grn/grn.man	2015-04-23 20:57:03.000000000 +0300
@@ -10,7 +10,7 @@
 .
 .\" license
 .de co
-Copyright \[co] 2000-2014 Free Software Foundation, Inc.
+Copyright \(co 2000-2014 Free Software Foundation, Inc.
 
 Permission is granted to make and distribute verbatim copies of
 this manual provided the copyright notice and this permission notice
diff -Nuar groff-1.22.3.old/src/preproc/grn/Makefile.sub groff-1.22.3/src/preproc/grn/Makefile.sub
--- groff-1.22.3.old/src/preproc/grn/Makefile.sub	2014-11-04 10:38:35.239523822 +0200
+++ groff-1.22.3/src/preproc/grn/Makefile.sub	1970-01-01 02:00:00.000000000 +0200
@@ -1,49 +0,0 @@
-# Makefile.sub for `preproc grn
-#
-# File position: <groff-source>/src/preproc/grn/Makefile.sub
-#
-# Copyright (C) 2014  Free Software Foundation, Inc.
-#
-# This file is part of `font utf8' which is part of `groff'.
-#
-# `groff' is free software; you can redistribute it and/or modify it
-# under the terms of the GNU General Public License as published by
-# the Free Software Foundation, either version 2 of the License, or
-# (at your option) any later version.
-#
-# `groff' is distributed in the hope that it will be useful, but
-# WITHOUT ANY WARRANTY; without even the implied warranty of
-# MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the GNU
-# General Public License for more details.
-#
-# You should have received a copy of the GNU General Public License
-# along with this program. If not, see
-# <http://www.gnu.org/licenses/gpl-2.0.html>.
-#
-########################################################################
-
-PROG=grn$(EXEEXT)
-MAN1=grn.n
-MLIB=$(LIBM)
-XLIBS=$(LIBGROFF) $(LIBGNU)
-OBJS=\
-  hdb.$(OBJEXT) \
-  hpoint.$(OBJEXT) \
-  hgraph.$(OBJEXT) \
-  main.$(OBJEXT)
-CCSRCS=\
-  $(srcdir)/hdb.cpp \
-  $(srcdir)/hpoint.cpp \
-  $(srcdir)/hgraph.cpp \
-  $(srcdir)/main.cpp
-HDRS=\
-  $(srcdir)/gprint.h
-NAMEPREFIX=$(g)
-
-########################################################################
-# Emacs settings
-########################################################################
-#
-# Local Variables:
-# mode: makefile
-# End:
diff -Nuar groff-1.22.3.old/src/preproc/html/.gitignore groff-1.22.3/src/preproc/html/.gitignore
--- groff-1.22.3.old/src/preproc/html/.gitignore	1970-01-01 02:00:00.000000000 +0200
+++ groff-1.22.3/src/preproc/html/.gitignore	2015-04-23 20:57:03.000000000 +0300
@@ -0,0 +1,2 @@
+Makefile.dep
+pre-grohtml
diff -Nuar groff-1.22.3.old/src/preproc/html/html.am groff-1.22.3/src/preproc/html/html.am
--- groff-1.22.3.old/src/preproc/html/html.am	1970-01-01 02:00:00.000000000 +0200
+++ groff-1.22.3/src/preproc/html/html.am	2015-04-23 20:57:03.000000000 +0300
@@ -0,0 +1,26 @@
+# Copyright (C) 2014
+#      Free Software Foundation, Inc.
+# 
+# This file is part of groff.
+#
+# groff is free software; you can redistribute it and/or modify it under
+# the terms of the GNU General Public License as published by the Free
+# Software Foundation, either version 3 of the License, or
+# (at your option) any later version.
+#
+# groff is distributed in the hope that it will be useful, but WITHOUT ANY
+# WARRANTY; without even the implied warranty of MERCHANTABILITY or
+# FITNESS FOR A PARTICULAR PURPOSE.  See the GNU General Public License
+# for more details.
+#
+# You should have received a copy of the GNU General Public License
+# along with this program. If not, see <http://www.gnu.org/licenses/>.
+
+bin_PROGRAMS += pre-grohtml
+pre_grohtml_LDADD = libgroff.a lib/libgnu.a $(LIBM)
+pre_grohtml_SOURCES = \
+  src/preproc/html/pre-html.cpp \
+  src/preproc/html/pushback.cpp \
+  src/preproc/html/pre-html.h \
+  src/preproc/html/pushback.h
+src/preproc/html/pre-html.$(OBJEXT): defs.h
diff -Nuar groff-1.22.3.old/src/preproc/html/Makefile.sub groff-1.22.3/src/preproc/html/Makefile.sub
--- groff-1.22.3.old/src/preproc/html/Makefile.sub	2014-11-04 10:38:35.255523622 +0200
+++ groff-1.22.3/src/preproc/html/Makefile.sub	1970-01-01 02:00:00.000000000 +0200
@@ -1,39 +0,0 @@
-# Makefile.sub for `preproc html'
-#
-# File position: <groff-source>/src/preproc/html/Makefile.sub
-#
-# Copyright (C) 2014  Free Software Foundation, Inc.
-#
-# This file is part of `font utf8' which is part of `groff'.
-#
-# `groff' is free software; you can redistribute it and/or modify it
-# under the terms of the GNU General Public License as published by
-# the Free Software Foundation, either version 2 of the License, or
-# (at your option) any later version.
-#
-# `groff' is distributed in the hope that it will be useful, but
-# WITHOUT ANY WARRANTY; without even the implied warranty of
-# MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the GNU
-# General Public License for more details.
-#
-# You should have received a copy of the GNU General Public License
-# along with this program. If not, see
-# <http://www.gnu.org/licenses/gpl-2.0.html>.
-#
-########################################################################
-
-PROG=pre-grohtml$(EXEEXT)
-# MAN1=pre-grohtml.n
-MAN1=
-XLIBS=$(LIBGROFF) $(LIBGNU)
-MLIB=$(LIBM)
-OBJS=pre-html.$(OBJEXT) pushback.$(OBJEXT)
-CCSRCS=$(srcdir)/pre-html.cpp $(srcdir)/pushback.cpp
-
-########################################################################
-# Emacs settings
-########################################################################
-#
-# Local Variables:
-# mode: makefile
-# End:
diff -Nuar groff-1.22.3.old/src/preproc/pic/.gitignore groff-1.22.3/src/preproc/pic/.gitignore
--- groff-1.22.3.old/src/preproc/pic/.gitignore	1970-01-01 02:00:00.000000000 +0200
+++ groff-1.22.3/src/preproc/pic/.gitignore	2015-04-23 20:57:03.000000000 +0300
@@ -0,0 +1 @@
+pic.cpp
diff -Nuar groff-1.22.3.old/src/preproc/pic/lex.cpp groff-1.22.3/src/preproc/pic/lex.cpp
--- groff-1.22.3.old/src/preproc/pic/lex.cpp	2014-11-04 10:38:35.225523997 +0200
+++ groff-1.22.3/src/preproc/pic/lex.cpp	2015-04-23 20:57:03.000000000 +0300
@@ -20,7 +20,7 @@
 #include "pic.h"
 #include "ptable.h"
 #include "object.h"
-#include "pic_tab.h"
+#include "pic.hpp"
 
 declare_ptable(char)
 implement_ptable(char)
diff -Nuar groff-1.22.3.old/src/preproc/pic/main.cpp groff-1.22.3/src/preproc/pic/main.cpp
--- groff-1.22.3.old/src/preproc/pic/main.cpp	2014-11-04 10:38:35.226523984 +0200
+++ groff-1.22.3/src/preproc/pic/main.cpp	2015-04-23 20:57:03.000000000 +0300
@@ -309,8 +309,11 @@
       fatal("can't open `%1': %2", filename, strerror(errno));
     }
   }
-  out->set_location(filename, 1);
-  current_filename = filename;
+  string fn(filename);
+  fn += '\0';
+  normalize_for_lf(fn);
+  current_filename = fn.contents();
+  out->set_location(current_filename, 1);
   current_lineno = 1;
   enum { START, MIDDLE, HAD_DOT, HAD_P, HAD_PS, HAD_l, HAD_lf } state = START;
   for (;;) {
diff -Nuar groff-1.22.3.old/src/preproc/pic/Makefile.sub groff-1.22.3/src/preproc/pic/Makefile.sub
--- groff-1.22.3.old/src/preproc/pic/Makefile.sub	2014-11-04 10:38:35.226523984 +0200
+++ groff-1.22.3/src/preproc/pic/Makefile.sub	1970-01-01 02:00:00.000000000 +0200
@@ -1,63 +0,0 @@
-# Makefile.sub for `preproc pic'
-#
-# File position: <groff-source>/src/preproc/pic/Makefile.sub
-#
-# Copyright (C) 2014  Free Software Foundation, Inc.
-#
-# This file is part of `font utf8' which is part of `groff'.
-#
-# `groff' is free software; you can redistribute it and/or modify it
-# under the terms of the GNU General Public License as published by
-# the Free Software Foundation, either version 2 of the License, or
-# (at your option) any later version.
-#
-# `groff' is distributed in the hope that it will be useful, but
-# WITHOUT ANY WARRANTY; without even the implied warranty of
-# MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the GNU
-# General Public License for more details.
-#
-# You should have received a copy of the GNU General Public License
-# along with this program. If not, see
-# <http://www.gnu.org/licenses/gpl-2.0.html>.
-#
-########################################################################
-
-PROG=pic$(EXEEXT)
-MAN1=pic.n
-XLIBS=$(LIBGROFF)
-MLIB=$(LIBM)
-OBJS=\
-  pic.$(OBJEXT) \
-  lex.$(OBJEXT) \
-  main.$(OBJEXT) \
-  object.$(OBJEXT) \
-  common.$(OBJEXT) \
-  troff.$(OBJEXT) \
-  tex.$(OBJEXT)
-  # fig.$(OBJEXT)
-CCSRCS=\
-  $(srcdir)/lex.cpp \
-  $(srcdir)/main.cpp \
-  $(srcdir)/object.cpp \
-  $(srcdir)/common.cpp \
-  $(srcdir)/troff.cpp \
-  $(srcdir)/tex.cpp
-HDRS=\
-  $(srcdir)/common.h \
-  $(srcdir)/object.h \
-  $(srcdir)/output.h \
-  $(srcdir)/pic.h \
-  $(srcdir)/position.h \
-  $(srcdir)/text.h
-GRAM=$(srcdir)/pic.y
-YTABC=pic.cpp
-YTABH=pic_tab.h
-NAMEPREFIX=$(g)
-
-########################################################################
-# Emacs settings
-########################################################################
-#
-# Local Variables:
-# mode: makefile
-# End:
diff -Nuar groff-1.22.3.old/src/preproc/pic/pic.am groff-1.22.3/src/preproc/pic/pic.am
--- groff-1.22.3.old/src/preproc/pic/pic.am	1970-01-01 02:00:00.000000000 +0200
+++ groff-1.22.3/src/preproc/pic/pic.am	2015-04-23 20:57:03.000000000 +0300
@@ -0,0 +1,49 @@
+# Copyright (C) 2014
+#      Free Software Foundation, Inc.
+# 
+# This file is part of groff.
+#
+# groff is free software; you can redistribute it and/or modify it under
+# the terms of the GNU General Public License as published by the Free
+# Software Foundation, either version 3 of the License, or
+# (at your option) any later version.
+#
+# groff is distributed in the hope that it will be useful, but WITHOUT ANY
+# WARRANTY; without even the implied warranty of MERCHANTABILITY or
+# FITNESS FOR A PARTICULAR PURPOSE.  See the GNU General Public License
+# for more details.
+#
+# You should have received a copy of the GNU General Public License
+# along with this program. If not, see <http://www.gnu.org/licenses/>.
+
+prefixexecbin_PROGRAMS += pic
+pic_LDADD = libgroff.a $(LIBM)
+pic_SOURCES = \
+  src/preproc/pic/pic.ypp \
+  src/preproc/pic/lex.cpp \
+  src/preproc/pic/main.cpp \
+  src/preproc/pic/object.cpp \
+  src/preproc/pic/common.cpp \
+  src/preproc/pic/troff.cpp \
+  src/preproc/pic/tex.cpp \
+  src/preproc/pic/pic.h \
+  src/preproc/pic/position.h \
+  src/preproc/pic/text.h \
+  src/preproc/pic/common.h \
+  src/preproc/pic/output.h \
+  src/preproc/pic/object.h
+
+pic_CPPFLAGS = $(AM_CPPFLAGS) \
+  -I $(top_srcdir)/src/preproc/pic \
+  -I $(top_builddir)/src/preproc/pic
+PREFIXMAN1 += src/preproc/pic/pic.n
+
+src/preproc/pic/pic-lex.$(OBJEXT): src/preproc/pic/pic.hpp
+EXTRA_DIST += \
+  src/preproc/pic/pic.man \
+  src/preproc/pic/TODO
+CLEANFILES += \
+  src/preproc/pic/pic.cpp \
+  src/preproc/pic/pic.hpp \
+  src/preproc/pic/pic.output
+
diff -Nuar groff-1.22.3.old/src/preproc/pic/pic.cpp groff-1.22.3/src/preproc/pic/pic.cpp
--- groff-1.22.3.old/src/preproc/pic/pic.cpp	2014-11-04 10:38:37.823491518 +0200
+++ groff-1.22.3/src/preproc/pic/pic.cpp	1970-01-01 02:00:00.000000000 +0200
@@ -1,5008 +0,0 @@
-/* A Bison parser, made by GNU Bison 3.0.2.  */
-
-/* Bison implementation for Yacc-like parsers in C
-
-   Copyright (C) 1984, 1989-1990, 2000-2013 Free Software Foundation, Inc.
-
-   This program is free software: you can redistribute it and/or modify
-   it under the terms of the GNU General Public License as published by
-   the Free Software Foundation, either version 3 of the License, or
-   (at your option) any later version.
-
-   This program is distributed in the hope that it will be useful,
-   but WITHOUT ANY WARRANTY; without even the implied warranty of
-   MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
-   GNU General Public License for more details.
-
-   You should have received a copy of the GNU General Public License
-   along with this program.  If not, see <http://www.gnu.org/licenses/>.  */
-
-/* As a special exception, you may create a larger work that contains
-   part or all of the Bison parser skeleton and distribute that work
-   under terms of your choice, so long as that work isn't itself a
-   parser generator using the skeleton or a modified version thereof
-   as a parser skeleton.  Alternatively, if you modify or redistribute
-   the parser skeleton itself, you may (at your option) remove this
-   special exception, which will cause the skeleton and the resulting
-   Bison output files to be licensed under the GNU General Public
-   License without this special exception.
-
-   This special exception was added by the Free Software Foundation in
-   version 2.2 of Bison.  */
-
-/* C LALR(1) parser skeleton written by Richard Stallman, by
-   simplifying the original so-called "semantic" parser.  */
-
-/* All symbols defined below should begin with yy or YY, to avoid
-   infringing on user name space.  This should be done even for local
-   variables, as they might otherwise be expanded by user macros.
-   There are some unavoidable exceptions within include files to
-   define necessary library symbols; they are noted "INFRINGES ON
-   USER NAME SPACE" below.  */
-
-/* Identify Bison output.  */
-#define YYBISON 1
-
-/* Bison version.  */
-#define YYBISON_VERSION "3.0.2"
-
-/* Skeleton name.  */
-#define YYSKELETON_NAME "yacc.c"
-
-/* Pure parsers.  */
-#define YYPURE 0
-
-/* Push parsers.  */
-#define YYPUSH 0
-
-/* Pull parsers.  */
-#define YYPULL 1
-
-
-
-
-/* Copy the first part of user declarations.  */
-#line 19 "pic.y" /* yacc.c:339  */
-
-#include "pic.h"
-#include "ptable.h"
-#include "object.h"
-
-extern int delim_flag;
-extern void copy_rest_thru(const char *, const char *);
-extern void copy_file_thru(const char *, const char *, const char *);
-extern void push_body(const char *);
-extern void do_for(char *var, double from, double to,
-		   int by_is_multiplicative, double by, char *body);
-extern void do_lookahead();
-
-/* Maximum number of characters produced by printf("%g") */
-#define GDIGITS 14
-
-int yylex();
-void yyerror(const char *);
-
-void reset(const char *nm);
-void reset_all();
-
-place *lookup_label(const char *);
-void define_label(const char *label, const place *pl);
-
-direction current_direction;
-position current_position;
-
-implement_ptable(place)
-
-PTABLE(place) top_table;
-
-PTABLE(place) *current_table = &top_table;
-saved_state *current_saved_state = 0;
-
-object_list olist;
-
-const char *ordinal_postfix(int n);
-const char *object_type_name(object_type type);
-char *format_number(const char *form, double n);
-char *do_sprintf(const char *form, const double *v, int nv);
-
-
-#line 110 "pic.cpp" /* yacc.c:339  */
-
-# ifndef YY_NULLPTR
-#  if defined __cplusplus && 201103L <= __cplusplus
-#   define YY_NULLPTR nullptr
-#  else
-#   define YY_NULLPTR 0
-#  endif
-# endif
-
-/* Enabling verbose error messages.  */
-#ifdef YYERROR_VERBOSE
-# undef YYERROR_VERBOSE
-# define YYERROR_VERBOSE 1
-#else
-# define YYERROR_VERBOSE 0
-#endif
-
-/* In a future release of Bison, this section will be replaced
-   by #include "y.tab.h".  */
-#ifndef YY_YY_Y_TAB_H_INCLUDED
-# define YY_YY_Y_TAB_H_INCLUDED
-/* Debug traces.  */
-#ifndef YYDEBUG
-# define YYDEBUG 0
-#endif
-#if YYDEBUG
-extern int yydebug;
-#endif
-
-/* Token type.  */
-#ifndef YYTOKENTYPE
-# define YYTOKENTYPE
-  enum yytokentype
-  {
-    LABEL = 258,
-    VARIABLE = 259,
-    NUMBER = 260,
-    TEXT = 261,
-    COMMAND_LINE = 262,
-    DELIMITED = 263,
-    ORDINAL = 264,
-    TH = 265,
-    LEFT_ARROW_HEAD = 266,
-    RIGHT_ARROW_HEAD = 267,
-    DOUBLE_ARROW_HEAD = 268,
-    LAST = 269,
-    BOX = 270,
-    CIRCLE = 271,
-    ELLIPSE = 272,
-    ARC = 273,
-    LINE = 274,
-    ARROW = 275,
-    MOVE = 276,
-    SPLINE = 277,
-    HEIGHT = 278,
-    RADIUS = 279,
-    FIGNAME = 280,
-    WIDTH = 281,
-    DIAMETER = 282,
-    UP = 283,
-    DOWN = 284,
-    RIGHT = 285,
-    LEFT = 286,
-    FROM = 287,
-    TO = 288,
-    AT = 289,
-    WITH = 290,
-    BY = 291,
-    THEN = 292,
-    SOLID = 293,
-    DOTTED = 294,
-    DASHED = 295,
-    CHOP = 296,
-    SAME = 297,
-    INVISIBLE = 298,
-    LJUST = 299,
-    RJUST = 300,
-    ABOVE = 301,
-    BELOW = 302,
-    OF = 303,
-    THE = 304,
-    WAY = 305,
-    BETWEEN = 306,
-    AND = 307,
-    HERE = 308,
-    DOT_N = 309,
-    DOT_E = 310,
-    DOT_W = 311,
-    DOT_S = 312,
-    DOT_NE = 313,
-    DOT_SE = 314,
-    DOT_NW = 315,
-    DOT_SW = 316,
-    DOT_C = 317,
-    DOT_START = 318,
-    DOT_END = 319,
-    DOT_X = 320,
-    DOT_Y = 321,
-    DOT_HT = 322,
-    DOT_WID = 323,
-    DOT_RAD = 324,
-    SIN = 325,
-    COS = 326,
-    ATAN2 = 327,
-    LOG = 328,
-    EXP = 329,
-    SQRT = 330,
-    K_MAX = 331,
-    K_MIN = 332,
-    INT = 333,
-    RAND = 334,
-    SRAND = 335,
-    COPY = 336,
-    THRU = 337,
-    TOP = 338,
-    BOTTOM = 339,
-    UPPER = 340,
-    LOWER = 341,
-    SH = 342,
-    PRINT = 343,
-    CW = 344,
-    CCW = 345,
-    FOR = 346,
-    DO = 347,
-    IF = 348,
-    ELSE = 349,
-    ANDAND = 350,
-    OROR = 351,
-    NOTEQUAL = 352,
-    EQUALEQUAL = 353,
-    LESSEQUAL = 354,
-    GREATEREQUAL = 355,
-    LEFT_CORNER = 356,
-    RIGHT_CORNER = 357,
-    NORTH = 358,
-    SOUTH = 359,
-    EAST = 360,
-    WEST = 361,
-    CENTER = 362,
-    END = 363,
-    START = 364,
-    RESET = 365,
-    UNTIL = 366,
-    PLOT = 367,
-    THICKNESS = 368,
-    FILL = 369,
-    COLORED = 370,
-    OUTLINED = 371,
-    SHADED = 372,
-    XSLANTED = 373,
-    YSLANTED = 374,
-    ALIGNED = 375,
-    SPRINTF = 376,
-    COMMAND = 377,
-    DEFINE = 378,
-    UNDEF = 379
-  };
-#endif
-/* Tokens.  */
-#define LABEL 258
-#define VARIABLE 259
-#define NUMBER 260
-#define TEXT 261
-#define COMMAND_LINE 262
-#define DELIMITED 263
-#define ORDINAL 264
-#define TH 265
-#define LEFT_ARROW_HEAD 266
-#define RIGHT_ARROW_HEAD 267
-#define DOUBLE_ARROW_HEAD 268
-#define LAST 269
-#define BOX 270
-#define CIRCLE 271
-#define ELLIPSE 272
-#define ARC 273
-#define LINE 274
-#define ARROW 275
-#define MOVE 276
-#define SPLINE 277
-#define HEIGHT 278
-#define RADIUS 279
-#define FIGNAME 280
-#define WIDTH 281
-#define DIAMETER 282
-#define UP 283
-#define DOWN 284
-#define RIGHT 285
-#define LEFT 286
-#define FROM 287
-#define TO 288
-#define AT 289
-#define WITH 290
-#define BY 291
-#define THEN 292
-#define SOLID 293
-#define DOTTED 294
-#define DASHED 295
-#define CHOP 296
-#define SAME 297
-#define INVISIBLE 298
-#define LJUST 299
-#define RJUST 300
-#define ABOVE 301
-#define BELOW 302
-#define OF 303
-#define THE 304
-#define WAY 305
-#define BETWEEN 306
-#define AND 307
-#define HERE 308
-#define DOT_N 309
-#define DOT_E 310
-#define DOT_W 311
-#define DOT_S 312
-#define DOT_NE 313
-#define DOT_SE 314
-#define DOT_NW 315
-#define DOT_SW 316
-#define DOT_C 317
-#define DOT_START 318
-#define DOT_END 319
-#define DOT_X 320
-#define DOT_Y 321
-#define DOT_HT 322
-#define DOT_WID 323
-#define DOT_RAD 324
-#define SIN 325
-#define COS 326
-#define ATAN2 327
-#define LOG 328
-#define EXP 329
-#define SQRT 330
-#define K_MAX 331
-#define K_MIN 332
-#define INT 333
-#define RAND 334
-#define SRAND 335
-#define COPY 336
-#define THRU 337
-#define TOP 338
-#define BOTTOM 339
-#define UPPER 340
-#define LOWER 341
-#define SH 342
-#define PRINT 343
-#define CW 344
-#define CCW 345
-#define FOR 346
-#define DO 347
-#define IF 348
-#define ELSE 349
-#define ANDAND 350
-#define OROR 351
-#define NOTEQUAL 352
-#define EQUALEQUAL 353
-#define LESSEQUAL 354
-#define GREATEREQUAL 355
-#define LEFT_CORNER 356
-#define RIGHT_CORNER 357
-#define NORTH 358
-#define SOUTH 359
-#define EAST 360
-#define WEST 361
-#define CENTER 362
-#define END 363
-#define START 364
-#define RESET 365
-#define UNTIL 366
-#define PLOT 367
-#define THICKNESS 368
-#define FILL 369
-#define COLORED 370
-#define OUTLINED 371
-#define SHADED 372
-#define XSLANTED 373
-#define YSLANTED 374
-#define ALIGNED 375
-#define SPRINTF 376
-#define COMMAND 377
-#define DEFINE 378
-#define UNDEF 379
-
-/* Value type.  */
-#if ! defined YYSTYPE && ! defined YYSTYPE_IS_DECLARED
-typedef union YYSTYPE YYSTYPE;
-union YYSTYPE
-{
-#line 65 "pic.y" /* yacc.c:355  */
-
-	char *str;
-	int n;
-	double x;
-	struct { double x, y; } pair;
-	struct { double x; char *body; } if_data;
-	struct { char *str; const char *filename; int lineno; } lstr;
-	struct { double *v; int nv; int maxv; } dv;
-	struct { double val; int is_multiplicative; } by;
-	place pl;
-	object *obj;
-	corner crn;
-	path *pth;
-	object_spec *spec;
-	saved_state *pstate;
-	graphics_state state;
-	object_type obtype;
-
-#line 417 "pic.cpp" /* yacc.c:355  */
-};
-# define YYSTYPE_IS_TRIVIAL 1
-# define YYSTYPE_IS_DECLARED 1
-#endif
-
-
-extern YYSTYPE yylval;
-
-int yyparse (void);
-
-#endif /* !YY_YY_Y_TAB_H_INCLUDED  */
-
-/* Copy the second part of user declarations.  */
-
-#line 432 "pic.cpp" /* yacc.c:358  */
-
-#ifdef short
-# undef short
-#endif
-
-#ifdef YYTYPE_UINT8
-typedef YYTYPE_UINT8 yytype_uint8;
-#else
-typedef unsigned char yytype_uint8;
-#endif
-
-#ifdef YYTYPE_INT8
-typedef YYTYPE_INT8 yytype_int8;
-#else
-typedef signed char yytype_int8;
-#endif
-
-#ifdef YYTYPE_UINT16
-typedef YYTYPE_UINT16 yytype_uint16;
-#else
-typedef unsigned short int yytype_uint16;
-#endif
-
-#ifdef YYTYPE_INT16
-typedef YYTYPE_INT16 yytype_int16;
-#else
-typedef short int yytype_int16;
-#endif
-
-#ifndef YYSIZE_T
-# ifdef __SIZE_TYPE__
-#  define YYSIZE_T __SIZE_TYPE__
-# elif defined size_t
-#  define YYSIZE_T size_t
-# elif ! defined YYSIZE_T
-#  include <stddef.h> /* INFRINGES ON USER NAME SPACE */
-#  define YYSIZE_T size_t
-# else
-#  define YYSIZE_T unsigned int
-# endif
-#endif
-
-#define YYSIZE_MAXIMUM ((YYSIZE_T) -1)
-
-#ifndef YY_
-# if defined YYENABLE_NLS && YYENABLE_NLS
-#  if ENABLE_NLS
-#   include <libintl.h> /* INFRINGES ON USER NAME SPACE */
-#   define YY_(Msgid) dgettext ("bison-runtime", Msgid)
-#  endif
-# endif
-# ifndef YY_
-#  define YY_(Msgid) Msgid
-# endif
-#endif
-
-#ifndef YY_ATTRIBUTE
-# if (defined __GNUC__                                               \
-      && (2 < __GNUC__ || (__GNUC__ == 2 && 96 <= __GNUC_MINOR__)))  \
-     || defined __SUNPRO_C && 0x5110 <= __SUNPRO_C
-#  define YY_ATTRIBUTE(Spec) __attribute__(Spec)
-# else
-#  define YY_ATTRIBUTE(Spec) /* empty */
-# endif
-#endif
-
-#ifndef YY_ATTRIBUTE_PURE
-# define YY_ATTRIBUTE_PURE   YY_ATTRIBUTE ((__pure__))
-#endif
-
-#ifndef YY_ATTRIBUTE_UNUSED
-# define YY_ATTRIBUTE_UNUSED YY_ATTRIBUTE ((__unused__))
-#endif
-
-#if !defined _Noreturn \
-     && (!defined __STDC_VERSION__ || __STDC_VERSION__ < 201112)
-# if defined _MSC_VER && 1200 <= _MSC_VER
-#  define _Noreturn __declspec (noreturn)
-# else
-#  define _Noreturn YY_ATTRIBUTE ((__noreturn__))
-# endif
-#endif
-
-/* Suppress unused-variable warnings by "using" E.  */
-#if ! defined lint || defined __GNUC__
-# define YYUSE(E) ((void) (E))
-#else
-# define YYUSE(E) /* empty */
-#endif
-
-#if defined __GNUC__ && 407 <= __GNUC__ * 100 + __GNUC_MINOR__
-/* Suppress an incorrect diagnostic about yylval being uninitialized.  */
-# define YY_IGNORE_MAYBE_UNINITIALIZED_BEGIN \
-    _Pragma ("GCC diagnostic push") \
-    _Pragma ("GCC diagnostic ignored \"-Wuninitialized\"")\
-    _Pragma ("GCC diagnostic ignored \"-Wmaybe-uninitialized\"")
-# define YY_IGNORE_MAYBE_UNINITIALIZED_END \
-    _Pragma ("GCC diagnostic pop")
-#else
-# define YY_INITIAL_VALUE(Value) Value
-#endif
-#ifndef YY_IGNORE_MAYBE_UNINITIALIZED_BEGIN
-# define YY_IGNORE_MAYBE_UNINITIALIZED_BEGIN
-# define YY_IGNORE_MAYBE_UNINITIALIZED_END
-#endif
-#ifndef YY_INITIAL_VALUE
-# define YY_INITIAL_VALUE(Value) /* Nothing. */
-#endif
-
-
-#if ! defined yyoverflow || YYERROR_VERBOSE
-
-/* The parser invokes alloca or malloc; define the necessary symbols.  */
-
-# ifdef YYSTACK_USE_ALLOCA
-#  if YYSTACK_USE_ALLOCA
-#   ifdef __GNUC__
-#    define YYSTACK_ALLOC __builtin_alloca
-#   elif defined __BUILTIN_VA_ARG_INCR
-#    include <alloca.h> /* INFRINGES ON USER NAME SPACE */
-#   elif defined _AIX
-#    define YYSTACK_ALLOC __alloca
-#   elif defined _MSC_VER
-#    include <malloc.h> /* INFRINGES ON USER NAME SPACE */
-#    define alloca _alloca
-#   else
-#    define YYSTACK_ALLOC alloca
-#    if ! defined _ALLOCA_H && ! defined EXIT_SUCCESS
-#     include <stdlib.h> /* INFRINGES ON USER NAME SPACE */
-      /* Use EXIT_SUCCESS as a witness for stdlib.h.  */
-#     ifndef EXIT_SUCCESS
-#      define EXIT_SUCCESS 0
-#     endif
-#    endif
-#   endif
-#  endif
-# endif
-
-# ifdef YYSTACK_ALLOC
-   /* Pacify GCC's 'empty if-body' warning.  */
-#  define YYSTACK_FREE(Ptr) do { /* empty */; } while (0)
-#  ifndef YYSTACK_ALLOC_MAXIMUM
-    /* The OS might guarantee only one guard page at the bottom of the stack,
-       and a page size can be as small as 4096 bytes.  So we cannot safely
-       invoke alloca (N) if N exceeds 4096.  Use a slightly smaller number
-       to allow for a few compiler-allocated temporary stack slots.  */
-#   define YYSTACK_ALLOC_MAXIMUM 4032 /* reasonable circa 2006 */
-#  endif
-# else
-#  define YYSTACK_ALLOC YYMALLOC
-#  define YYSTACK_FREE YYFREE
-#  ifndef YYSTACK_ALLOC_MAXIMUM
-#   define YYSTACK_ALLOC_MAXIMUM YYSIZE_MAXIMUM
-#  endif
-#  if (defined __cplusplus && ! defined EXIT_SUCCESS \
-       && ! ((defined YYMALLOC || defined malloc) \
-             && (defined YYFREE || defined free)))
-#   include <stdlib.h> /* INFRINGES ON USER NAME SPACE */
-#   ifndef EXIT_SUCCESS
-#    define EXIT_SUCCESS 0
-#   endif
-#  endif
-#  ifndef YYMALLOC
-#   define YYMALLOC malloc
-#   if ! defined malloc && ! defined EXIT_SUCCESS
-void *malloc (YYSIZE_T); /* INFRINGES ON USER NAME SPACE */
-#   endif
-#  endif
-#  ifndef YYFREE
-#   define YYFREE free
-#   if ! defined free && ! defined EXIT_SUCCESS
-void free (void *); /* INFRINGES ON USER NAME SPACE */
-#   endif
-#  endif
-# endif
-#endif /* ! defined yyoverflow || YYERROR_VERBOSE */
-
-
-#if (! defined yyoverflow \
-     && (! defined __cplusplus \
-         || (defined YYSTYPE_IS_TRIVIAL && YYSTYPE_IS_TRIVIAL)))
-
-/* A type that is properly aligned for any stack member.  */
-union yyalloc
-{
-  yytype_int16 yyss_alloc;
-  YYSTYPE yyvs_alloc;
-};
-
-/* The size of the maximum gap between one aligned stack and the next.  */
-# define YYSTACK_GAP_MAXIMUM (sizeof (union yyalloc) - 1)
-
-/* The size of an array large to enough to hold all stacks, each with
-   N elements.  */
-# define YYSTACK_BYTES(N) \
-     ((N) * (sizeof (yytype_int16) + sizeof (YYSTYPE)) \
-      + YYSTACK_GAP_MAXIMUM)
-
-# define YYCOPY_NEEDED 1
-
-/* Relocate STACK from its old location to the new one.  The
-   local variables YYSIZE and YYSTACKSIZE give the old and new number of
-   elements in the stack, and YYPTR gives the new location of the
-   stack.  Advance YYPTR to a properly aligned location for the next
-   stack.  */
-# define YYSTACK_RELOCATE(Stack_alloc, Stack)                           \
-    do                                                                  \
-      {                                                                 \
-        YYSIZE_T yynewbytes;                                            \
-        YYCOPY (&yyptr->Stack_alloc, Stack, yysize);                    \
-        Stack = &yyptr->Stack_alloc;                                    \
-        yynewbytes = yystacksize * sizeof (*Stack) + YYSTACK_GAP_MAXIMUM; \
-        yyptr += yynewbytes / sizeof (*yyptr);                          \
-      }                                                                 \
-    while (0)
-
-#endif
-
-#if defined YYCOPY_NEEDED && YYCOPY_NEEDED
-/* Copy COUNT objects from SRC to DST.  The source and destination do
-   not overlap.  */
-# ifndef YYCOPY
-#  if defined __GNUC__ && 1 < __GNUC__
-#   define YYCOPY(Dst, Src, Count) \
-      __builtin_memcpy (Dst, Src, (Count) * sizeof (*(Src)))
-#  else
-#   define YYCOPY(Dst, Src, Count)              \
-      do                                        \
-        {                                       \
-          YYSIZE_T yyi;                         \
-          for (yyi = 0; yyi < (Count); yyi++)   \
-            (Dst)[yyi] = (Src)[yyi];            \
-        }                                       \
-      while (0)
-#  endif
-# endif
-#endif /* !YYCOPY_NEEDED */
-
-/* YYFINAL -- State number of the termination state.  */
-#define YYFINAL  6
-/* YYLAST -- Last index in YYTABLE.  */
-#define YYLAST   2438
-
-/* YYNTOKENS -- Number of terminals.  */
-#define YYNTOKENS  146
-/* YYNNTS -- Number of nonterminals.  */
-#define YYNNTS  49
-/* YYNRULES -- Number of rules.  */
-#define YYNRULES  260
-/* YYNSTATES -- Number of states.  */
-#define YYNSTATES  454
-
-/* YYTRANSLATE[YYX] -- Symbol number corresponding to YYX as returned
-   by yylex, with out-of-bounds checking.  */
-#define YYUNDEFTOK  2
-#define YYMAXUTOK   379
-
-#define YYTRANSLATE(YYX)                                                \
-  ((unsigned int) (YYX) <= YYMAXUTOK ? yytranslate[YYX] : YYUNDEFTOK)
-
-/* YYTRANSLATE[TOKEN-NUM] -- Symbol number corresponding to TOKEN-NUM
-   as returned by yylex, without out-of-bounds checking.  */
-static const yytype_uint8 yytranslate[] =
-{
-       0,     2,     2,     2,     2,     2,     2,     2,     2,     2,
-       2,     2,     2,     2,     2,     2,     2,     2,     2,     2,
-       2,     2,     2,     2,     2,     2,     2,     2,     2,     2,
-       2,     2,     2,   137,     2,     2,     2,   136,     2,     2,
-     126,   145,   134,   132,   129,   133,   125,   135,     2,     2,
-       2,     2,     2,     2,     2,     2,     2,     2,   141,   139,
-     130,   140,   131,     2,     2,     2,     2,     2,     2,     2,
-       2,     2,     2,     2,     2,     2,     2,     2,     2,     2,
-       2,     2,     2,     2,     2,     2,     2,     2,     2,     2,
-       2,   128,     2,   144,   138,     2,   127,     2,     2,     2,
-       2,     2,     2,     2,     2,     2,     2,     2,     2,     2,
-       2,     2,     2,     2,     2,     2,     2,     2,     2,     2,
-       2,     2,     2,   142,     2,   143,     2,     2,     2,     2,
-       2,     2,     2,     2,     2,     2,     2,     2,     2,     2,
-       2,     2,     2,     2,     2,     2,     2,     2,     2,     2,
-       2,     2,     2,     2,     2,     2,     2,     2,     2,     2,
-       2,     2,     2,     2,     2,     2,     2,     2,     2,     2,
-       2,     2,     2,     2,     2,     2,     2,     2,     2,     2,
-       2,     2,     2,     2,     2,     2,     2,     2,     2,     2,
-       2,     2,     2,     2,     2,     2,     2,     2,     2,     2,
-       2,     2,     2,     2,     2,     2,     2,     2,     2,     2,
-       2,     2,     2,     2,     2,     2,     2,     2,     2,     2,
-       2,     2,     2,     2,     2,     2,     2,     2,     2,     2,
-       2,     2,     2,     2,     2,     2,     2,     2,     2,     2,
-       2,     2,     2,     2,     2,     2,     2,     2,     2,     2,
-       2,     2,     2,     2,     2,     2,     1,     2,     3,     4,
-       5,     6,     7,     8,     9,    10,    11,    12,    13,    14,
-      15,    16,    17,    18,    19,    20,    21,    22,    23,    24,
-      25,    26,    27,    28,    29,    30,    31,    32,    33,    34,
-      35,    36,    37,    38,    39,    40,    41,    42,    43,    44,
-      45,    46,    47,    48,    49,    50,    51,    52,    53,    54,
-      55,    56,    57,    58,    59,    60,    61,    62,    63,    64,
-      65,    66,    67,    68,    69,    70,    71,    72,    73,    74,
-      75,    76,    77,    78,    79,    80,    81,    82,    83,    84,
-      85,    86,    87,    88,    89,    90,    91,    92,    93,    94,
-      95,    96,    97,    98,    99,   100,   101,   102,   103,   104,
-     105,   106,   107,   108,   109,   110,   111,   112,   113,   114,
-     115,   116,   117,   118,   119,   120,   121,   122,   123,   124
-};
-
-#if YYDEBUG
-  /* YYRLINE[YYN] -- Source line where rule number YYN was defined.  */
-static const yytype_uint16 yyrline[] =
-{
-       0,   275,   275,   276,   285,   290,   292,   296,   298,   302,
-     303,   307,   315,   320,   332,   334,   336,   338,   340,   345,
-     350,   357,   356,   367,   375,   377,   374,   388,   390,   387,
-     400,   399,   408,   417,   416,   430,   431,   436,   437,   441,
-     446,   451,   459,   461,   480,   487,   489,   500,   499,   511,
-     512,   517,   519,   524,   530,   536,   538,   540,   542,   544,
-     546,   548,   555,   559,   564,   572,   586,   592,   600,   607,
-     613,   606,   622,   632,   633,   638,   640,   642,   644,   649,
-     656,   663,   670,   677,   682,   687,   695,   694,   721,   727,
-     733,   739,   745,   764,   771,   778,   785,   792,   799,   806,
-     813,   820,   827,   842,   854,   860,   869,   876,   901,   905,
-     911,   917,   923,   929,   934,   940,   946,   952,   959,   968,
-     975,   991,  1008,  1013,  1018,  1023,  1028,  1033,  1038,  1043,
-    1051,  1061,  1071,  1081,  1091,  1097,  1105,  1107,  1119,  1124,
-    1154,  1156,  1162,  1171,  1173,  1178,  1183,  1188,  1193,  1198,
-    1203,  1209,  1214,  1222,  1223,  1227,  1232,  1238,  1240,  1246,
-    1252,  1258,  1267,  1277,  1279,  1288,  1290,  1298,  1300,  1305,
-    1320,  1338,  1340,  1342,  1344,  1346,  1348,  1350,  1352,  1354,
-    1359,  1361,  1369,  1373,  1375,  1383,  1385,  1391,  1397,  1403,
-    1409,  1418,  1420,  1422,  1424,  1426,  1428,  1430,  1432,  1434,
-    1436,  1438,  1440,  1442,  1444,  1446,  1448,  1450,  1452,  1454,
-    1456,  1458,  1460,  1462,  1464,  1466,  1468,  1470,  1472,  1474,
-    1476,  1478,  1480,  1485,  1487,  1492,  1497,  1505,  1507,  1514,
-    1521,  1528,  1535,  1542,  1544,  1546,  1548,  1556,  1564,  1577,
-    1579,  1581,  1590,  1599,  1612,  1621,  1630,  1639,  1641,  1643,
-    1645,  1647,  1653,  1658,  1660,  1662,  1664,  1666,  1668,  1670,
-    1672
-};
-#endif
-
-#if YYDEBUG || YYERROR_VERBOSE || 0
-/* YYTNAME[SYMBOL-NUM] -- String name of the symbol SYMBOL-NUM.
-   First, the terminals, then, starting at YYNTOKENS, nonterminals.  */
-static const char *const yytname[] =
-{
-  "$end", "error", "$undefined", "LABEL", "VARIABLE", "NUMBER", "TEXT",
-  "COMMAND_LINE", "DELIMITED", "ORDINAL", "TH", "LEFT_ARROW_HEAD",
-  "RIGHT_ARROW_HEAD", "DOUBLE_ARROW_HEAD", "LAST", "BOX", "CIRCLE",
-  "ELLIPSE", "ARC", "LINE", "ARROW", "MOVE", "SPLINE", "HEIGHT", "RADIUS",
-  "FIGNAME", "WIDTH", "DIAMETER", "UP", "DOWN", "RIGHT", "LEFT", "FROM",
-  "TO", "AT", "WITH", "BY", "THEN", "SOLID", "DOTTED", "DASHED", "CHOP",
-  "SAME", "INVISIBLE", "LJUST", "RJUST", "ABOVE", "BELOW", "OF", "THE",
-  "WAY", "BETWEEN", "AND", "HERE", "DOT_N", "DOT_E", "DOT_W", "DOT_S",
-  "DOT_NE", "DOT_SE", "DOT_NW", "DOT_SW", "DOT_C", "DOT_START", "DOT_END",
-  "DOT_X", "DOT_Y", "DOT_HT", "DOT_WID", "DOT_RAD", "SIN", "COS", "ATAN2",
-  "LOG", "EXP", "SQRT", "K_MAX", "K_MIN", "INT", "RAND", "SRAND", "COPY",
-  "THRU", "TOP", "BOTTOM", "UPPER", "LOWER", "SH", "PRINT", "CW", "CCW",
-  "FOR", "DO", "IF", "ELSE", "ANDAND", "OROR", "NOTEQUAL", "EQUALEQUAL",
-  "LESSEQUAL", "GREATEREQUAL", "LEFT_CORNER", "RIGHT_CORNER", "NORTH",
-  "SOUTH", "EAST", "WEST", "CENTER", "END", "START", "RESET", "UNTIL",
-  "PLOT", "THICKNESS", "FILL", "COLORED", "OUTLINED", "SHADED", "XSLANTED",
-  "YSLANTED", "ALIGNED", "SPRINTF", "COMMAND", "DEFINE", "UNDEF", "'.'",
-  "'('", "'`'", "'['", "','", "'<'", "'>'", "'+'", "'-'", "'*'", "'/'",
-  "'%'", "'!'", "'^'", "';'", "'='", "':'", "'{'", "'}'", "']'", "')'",
-  "$accept", "top", "element_list", "middle_element_list",
-  "optional_separator", "separator", "placeless_element", "$@1", "$@2",
-  "$@3", "$@4", "$@5", "$@6", "$@7", "macro_name", "reset_variables",
-  "print_args", "print_arg", "simple_if", "$@8", "until", "any_expr",
-  "text_expr", "optional_by", "element", "@9", "$@10", "optional_element",
-  "object_spec", "@11", "text", "sprintf_args", "position",
-  "position_not_place", "between", "expr_pair", "place", "label",
-  "ordinal", "optional_ordinal_last", "nth_primitive", "object_type",
-  "label_path", "relative_path", "path", "corner", "expr",
-  "expr_lower_than", "expr_not_lower_than", YY_NULLPTR
-};
-#endif
-
-# ifdef YYPRINT
-/* YYTOKNUM[NUM] -- (External) token number corresponding to the
-   (internal) symbol number NUM (which must be that of a token).  */
-static const yytype_uint16 yytoknum[] =
-{
-       0,   256,   257,   258,   259,   260,   261,   262,   263,   264,
-     265,   266,   267,   268,   269,   270,   271,   272,   273,   274,
-     275,   276,   277,   278,   279,   280,   281,   282,   283,   284,
-     285,   286,   287,   288,   289,   290,   291,   292,   293,   294,
-     295,   296,   297,   298,   299,   300,   301,   302,   303,   304,
-     305,   306,   307,   308,   309,   310,   311,   312,   313,   314,
-     315,   316,   317,   318,   319,   320,   321,   322,   323,   324,
-     325,   326,   327,   328,   329,   330,   331,   332,   333,   334,
-     335,   336,   337,   338,   339,   340,   341,   342,   343,   344,
-     345,   346,   347,   348,   349,   350,   351,   352,   353,   354,
-     355,   356,   357,   358,   359,   360,   361,   362,   363,   364,
-     365,   366,   367,   368,   369,   370,   371,   372,   373,   374,
-     375,   376,   377,   378,   379,    46,    40,    96,    91,    44,
-      60,    62,    43,    45,    42,    47,    37,    33,    94,    59,
-      61,    58,   123,   125,    93,    41
-};
-# endif
-
-#define YYPACT_NINF -240
-
-#define yypact_value_is_default(Yystate) \
-  (!!((Yystate) == (-240)))
-
-#define YYTABLE_NINF -206
-
-#define yytable_value_is_error(Yytable_value) \
-  0
-
-  /* YYPACT[STATE-NUM] -- Index in YYTABLE of the portion describing
-     STATE-NUM.  */
-static const yytype_int16 yypact[] =
-{
-    -114,  -240,    20,  -240,   757,  -107,  -240,   -98,  -123,  -240,
-    -240,  -240,  -240,  -240,  -240,  -240,  -240,  -240,  -240,  -106,
-    -240,  -240,  -240,  -240,     9,  -240,  1087,    46,  1172,    49,
-    1597,   -70,  1087,  -240,  -240,  -114,  -240,     3,   -33,  -240,
-     877,  -240,  -240,  -114,  1172,   -60,    36,   -14,  -240,    74,
-    -240,  -240,  -240,  -240,  -240,  -240,  -240,  -240,  -240,  -240,
-    -240,  -240,  -240,  -240,  -240,  -240,  -240,  -240,  -240,   -34,
-     -18,     8,    38,    47,    51,    65,   101,   102,   112,   122,
-    -240,  -240,    21,   150,  -240,  -240,  -240,  -240,  -240,  -240,
-    -240,  -240,  -240,  1257,  1172,  1597,  1597,  1087,  -240,  -240,
-     -43,  -240,  -240,   357,  2242,    59,   258,  -240,    10,  2147,
-    -240,     1,     6,  1172,  1172,   145,    -1,     2,   357,  2273,
-    -240,  -240,   220,   249,  1087,  -114,  -114,  -240,   721,  -240,
-     252,  -240,  -240,  -240,  -240,  1597,  1597,  1597,  1597,  2024,
-    2024,  1853,  1939,  1682,  1682,  1682,  1427,  1767,  -240,  -240,
-    2024,  2024,  2024,  -240,  -240,  -240,  -240,  -240,  -240,  -240,
-    -240,  1597,  2024,    23,    23,    23,  1597,  1597,  -240,  -240,
-    2282,   593,  -240,  1172,  -240,  -240,  -240,  -240,   250,  -240,
-    1172,  1172,  1172,  1172,  1172,  1172,  1172,  1172,  1172,   458,
-    1172,  -240,  -240,  -240,  -240,  -240,  -240,  -240,  -240,   121,
-     107,   123,   256,  2157,   137,   261,   134,   134,  -240,  1767,
-    1767,  -240,  -240,  -240,  -240,  -240,   276,  -240,  -240,  -240,
-    -240,  -240,  -240,  -240,  -240,  -240,  -240,   138,  -240,  -240,
-      24,   156,   235,  -240,  1597,  1597,  1597,  1597,  1597,  1597,
-    1597,  1597,  1597,  1597,  1597,  1597,  1597,  1597,  1597,  1682,
-    1682,  1597,  -240,   134,  -240,  1172,  1172,    23,    23,  1172,
-    1172,  -240,  -240,   143,   757,   153,  -240,  -240,   280,  2282,
-    2282,  2282,  2282,  2282,  2282,  2282,  2282,   -43,  2147,   -43,
-     -43,  2253,   275,   275,   295,  1002,   -43,  2081,  -240,  -240,
-      10,  1342,  -240,   694,  2282,  2282,  2282,  2282,  2282,  -240,
-    -240,  -240,  2282,  2282,   -98,  -123,    16,    28,  -240,   -43,
-      56,   302,  -240,   291,  -240,   155,   160,   172,   161,   164,
-     167,   184,   185,   181,  -240,   186,   188,  -240,  1682,  1767,
-    1767,  -240,  -240,  1682,  1682,  -240,  -240,  -240,  -240,  -240,
-     156,   279,   314,  2291,   440,   440,   413,   413,  2282,   413,
-     413,   -72,   -72,   134,   134,   134,   134,   -49,   117,   343,
-     322,  -240,   314,   239,  2300,  -240,  -240,  -240,   314,   239,
-    2300,  -119,  -240,  -240,  -240,  -240,  -240,  2116,  2116,  -240,
-     206,   333,  -240,   123,  2131,  -240,   228,  -240,  -240,  1172,
-    -240,  -240,  -240,  1172,  1172,  -240,  -240,  -240,  -110,   195,
-     197,   -47,   128,   292,  1682,  1682,  1597,  -240,  1597,  -240,
-     757,  -240,  -240,  2116,  -240,   228,   338,  -240,   200,   202,
-     212,  -240,  -240,  -240,  1682,  1682,  -240,   -43,   -27,   360,
-    2282,  -240,  -240,   214,  -240,  -240,  -240,  -240,  -240,   -73,
-      30,  -240,  1512,   268,  -240,  -240,   216,  1597,  2282,  -240,
-    -240,  2282,   354,  -240
-};
-
-  /* YYDEFACT[STATE-NUM] -- Default reduction number in state STATE-NUM.
-     Performed when YYTABLE does not specify something else to do.  Zero
-     means the default is an error.  */
-static const yytype_uint16 yydefact[] =
-{
-       7,     9,     0,     3,     2,     8,     1,     0,     0,   136,
-      18,    75,    76,    77,    78,    79,    80,    81,    82,     0,
-      14,    15,    17,    16,     0,    21,     0,     0,     0,    36,
-       0,     0,     0,    86,    69,     7,    72,    35,    32,     5,
-      65,    83,    10,     7,     0,     0,     0,    23,    27,     0,
-     162,   226,   227,   165,   167,   205,   204,   161,   191,   192,
-     193,   194,   195,   196,   197,   198,   199,   200,   201,     0,
-       0,     0,     0,     0,     0,     0,     0,     0,     0,     0,
-     202,   203,     0,     0,   210,   211,   216,   217,   218,   219,
-     220,   222,   221,     0,     0,     0,     0,    20,    42,    45,
-      46,   140,   143,   141,   157,     0,     0,   163,     0,    44,
-     223,   224,     0,     0,     0,     0,    52,     0,     0,    51,
-     224,    39,    84,     0,    19,     7,     7,     4,     8,    40,
-       0,    33,   124,   125,   126,     0,     0,     0,     0,    93,
-      95,    97,    99,     0,     0,     0,     0,     0,   107,   108,
-     109,   111,   120,   122,   123,   130,   131,   132,   133,   127,
-     128,     0,   113,     0,     0,     0,     0,     0,   135,   129,
-      92,     0,    12,     0,    38,    37,    11,    24,     0,    22,
-       0,     0,     0,     0,     0,     0,     0,     0,     0,     0,
-       0,   208,   206,   212,   214,   209,   207,   213,   215,     0,
-       0,   143,   141,    51,   224,     0,   239,   260,    43,     0,
-       0,   228,   229,   230,   231,   232,     0,   158,   179,   168,
-     171,   172,   173,   174,   175,   176,   177,     0,   169,   170,
-       0,   159,     0,   153,     0,     0,     0,     0,     0,     0,
-       0,     0,     0,     0,     0,     0,     0,     0,     0,     0,
-       0,     0,    61,   260,    47,     0,     0,     0,     0,     0,
-       0,    85,   138,     0,     0,     0,     6,    41,     0,    88,
-      89,    90,    91,    94,    96,    98,   100,   101,     0,   102,
-     103,   162,   165,   167,     0,     0,   105,   183,   185,   104,
-     182,     0,   106,     0,   110,   112,   121,   134,   114,   118,
-     119,   117,   115,   116,   162,   226,   205,   204,    66,     0,
-      67,    68,    13,     0,    28,     0,     0,     0,     0,     0,
-       0,     0,     0,     0,   251,     0,     0,   240,     0,     0,
-       0,   156,   142,     0,     0,   166,   144,   146,   164,   178,
-     160,     0,   258,   259,   257,   256,   253,   255,   155,   225,
-     254,   233,   234,   235,   236,   237,   238,     0,     0,     0,
-       0,    55,    56,    58,    59,    54,    53,    57,   258,    60,
-     259,     0,    87,    70,    34,   190,   182,     0,     0,   180,
-       0,     0,   184,     0,    51,    25,    49,   241,   242,     0,
-     244,   245,   246,     0,     0,   249,   250,   252,     0,   144,
-     146,     0,     0,     0,     0,     0,     0,    48,     0,   137,
-      73,   189,   188,     0,   181,    49,     0,    29,     0,     0,
-       0,   148,   145,   147,     0,     0,   154,   149,     0,    62,
-     139,    74,    71,     0,    26,    50,   243,   247,   248,   149,
-       0,   151,     0,     0,   186,   150,   151,     0,    63,    30,
-     152,    64,     0,    31
-};
-
-  /* YYPGOTO[NTERM-NUM].  */
-static const yytype_int16 yypgoto[] =
-{
-    -240,  -240,    17,  -240,    12,   329,  -240,  -240,  -240,  -240,
-    -240,  -240,  -240,  -240,  -240,  -240,   334,   -76,  -240,  -240,
-     -42,    13,  -103,  -240,  -127,  -240,  -240,  -240,  -240,  -240,
-       5,  -240,    99,   194,   169,   -44,     4,  -100,  -240,  -240,
-    -240,  -104,  -240,  -239,  -240,   -50,   -26,  -240,    61
-};
-
-  /* YYDEFGOTO[NTERM-NUM].  */
-static const yytype_int16 yydefgoto[] =
-{
-      -1,     2,     3,    35,   264,     5,    36,    49,   313,   415,
-     178,   386,   452,   268,   176,    37,    97,    98,    38,   360,
-     417,   199,   116,   443,    39,   126,   410,   432,    40,   125,
-     117,   371,   100,   101,   249,   102,   118,   104,   105,   106,
-     107,   228,   287,   288,   289,   108,   119,   110,   120
-};
-
-  /* YYTABLE[YYPACT[STATE-NUM]] -- What to do in state STATE-NUM.  If
-     positive, shift that token.  If negative, reduce the rule whose
-     number is the opposite.  If YYTABLE_NINF, syntax error.  */
-static const yytype_int16 yytable[] =
-{
-     109,   266,   229,   404,   122,   424,   109,   129,   231,    41,
-     408,   252,     4,    50,   170,    47,   -17,    44,    45,    53,
-       6,   208,   209,   210,    54,     1,   409,    50,   -16,     9,
-     103,    99,    42,    53,    46,   421,   103,    99,    54,   174,
-     175,   115,   375,    43,   308,   169,   380,   127,   208,   201,
-     112,   191,   192,   121,   217,   171,   123,   172,   230,   209,
-     210,   131,   245,   246,   247,   218,   248,   203,   177,   206,
-     207,   109,   445,   219,   220,   221,   222,   223,   224,   225,
-     173,   226,   179,   209,   210,   209,   210,   111,   253,   209,
-     210,    48,   180,   111,   255,   256,   290,   202,   109,   257,
-     258,   103,    99,   292,   441,   209,   210,   205,   181,   269,
-     270,   271,   272,   273,   274,   275,   276,   278,   278,   278,
-     278,   293,   193,   194,   294,   295,   296,   261,   103,    99,
-     340,   250,   130,    41,   182,   297,   298,    94,   411,   412,
-     302,   303,   263,   265,    31,   278,   251,   103,   103,   103,
-     103,    94,   361,   363,   204,   -17,   367,   369,   111,   -17,
-     -17,   446,   209,   210,   183,   336,   337,   -16,   299,   300,
-     301,   -16,   -16,   184,   433,   311,    41,   185,   377,   378,
-     195,   196,   254,   293,   293,   111,   312,   227,  -140,  -140,
-     231,   186,   200,   315,   316,   317,   318,   319,   320,   321,
-     322,   323,   325,   326,   111,   111,   111,   111,   342,   343,
-     344,   345,   346,   347,   348,   349,   350,   351,   352,   353,
-     354,   355,   356,   278,   278,   359,     9,   187,   188,   362,
-     364,   376,   111,   368,   370,   290,   328,   382,   189,   329,
-     330,   201,   277,   279,   280,   286,   405,   383,   190,   209,
-     210,   197,   198,   103,   103,   262,   267,   425,   314,   203,
-     209,   210,   365,   366,   218,   384,   327,   334,   331,    41,
-     309,   335,   248,   220,   221,   222,   223,   224,   225,   338,
-     226,   216,   339,   431,   341,   399,   400,   372,   374,   202,
-     220,   221,   222,   223,   224,   225,   373,   226,   379,   385,
-     387,   389,   278,   293,   293,   388,   390,   278,   278,   391,
-     111,   111,   392,   393,   394,   234,   235,   236,   237,   238,
-     239,   211,   212,   213,   214,   215,   395,   376,   376,   403,
-     407,   396,   103,   397,   255,   413,   414,   103,   103,   416,
-     422,    31,   423,   426,   435,   436,   204,   437,   357,   358,
-     241,   242,   243,   244,   245,   246,   247,   438,   248,   444,
-     449,   450,   453,   376,   128,   310,   124,   211,   212,   213,
-     214,   215,   333,   434,     0,     0,   406,     0,   278,   278,
-     429,     0,   430,     0,   200,     0,   227,     0,     0,   111,
-       0,     0,     0,     0,   111,   111,   442,     0,   278,   278,
-       0,   332,   418,   227,     0,     0,   419,   420,   103,   103,
-       0,   236,   237,   238,   239,    41,   448,     0,     0,     0,
-       0,   451,   211,   212,   213,   214,   215,   398,   103,   103,
-       0,     0,   401,   402,  -141,  -141,     0,     0,   234,   235,
-     236,   237,   238,   239,   241,   242,   243,   244,   245,   246,
-     247,     0,   248,     0,     0,   234,   235,   236,   237,   238,
-     239,    50,    51,    52,     9,   111,   111,    53,     0,     0,
-       0,     0,    54,   241,   242,   243,   244,   245,   246,   247,
-       0,   248,     0,     0,     0,   111,   111,     0,    55,    56,
-     241,   242,   243,   244,   245,   246,   247,     0,   248,     0,
-       0,     0,     0,   427,   428,     0,     0,     0,     0,     0,
-       0,    57,    58,    59,    60,    61,    62,    63,    64,    65,
-      66,    67,    68,   439,   440,     0,     0,     0,    69,    70,
-      71,    72,    73,    74,    75,    76,    77,    78,    79,   238,
-     239,    80,    81,    82,    83,   243,   244,   245,   246,   247,
-       0,   248,     0,     0,     0,     0,     0,     0,     0,    84,
-      85,    86,    87,    88,    89,    90,    91,    92,     0,     0,
-     241,   242,   243,   244,   245,   246,   247,     0,   248,    31,
-       0,     0,     0,     0,   113,    94,     0,     0,     0,     0,
-       0,    95,     0,     0,     0,   114,   304,   305,    52,     9,
-      10,     0,    53,   324,     0,     0,     0,    54,    11,    12,
-      13,    14,    15,    16,    17,    18,     0,     0,    19,     0,
-       0,    20,    21,   306,   307,     0,     0,     0,     0,     0,
-       0,     0,     0,     0,     0,     0,     0,     0,     0,     0,
-       0,     0,     0,     0,     0,     0,    57,    58,    59,    60,
-      61,    62,    63,    64,    65,    66,    67,    68,     0,     0,
-       0,     0,     0,    69,    70,    71,    72,    73,    74,    75,
-      76,    77,    78,    79,    24,     0,    80,    81,    82,    83,
-      25,    26,     0,     0,    27,     0,    28,     0,     0,     0,
-       0,     0,     0,     0,    84,    85,    86,    87,    88,    89,
-      90,    91,    92,    29,     0,    30,     0,     0,     0,     0,
-       0,     0,     0,     0,    31,    32,     0,     0,     0,    93,
-      94,    33,     0,     0,     7,     8,    95,     9,    10,     0,
-      96,     0,     0,     0,     0,    34,    11,    12,    13,    14,
-      15,    16,    17,    18,     0,     0,    19,     0,     0,    20,
-      21,    22,    23,     0,     0,     0,     0,     0,     0,     0,
-       7,     8,     0,     9,    10,     0,     0,     0,     0,     0,
-       0,     0,    11,    12,    13,    14,    15,    16,    17,    18,
-       0,     0,    19,     0,     0,    20,    21,    22,    23,   234,
-     235,   236,   237,   238,   239,     0,     0,     0,     0,     0,
-       0,     0,    24,     0,     0,     0,     0,     0,    25,    26,
-       0,     0,    27,     0,    28,     0,     0,     0,     0,     0,
-       0,     0,     0,   240,   241,   242,   243,   244,   245,   246,
-     247,    29,   248,    30,     0,     0,     0,     0,    24,     0,
-       0,     0,    31,    32,    25,    26,     0,     0,    27,    33,
-      28,     0,     0,     0,     0,     0,     0,     0,     0,     0,
-      42,     0,     0,    34,     0,     0,     0,    29,     0,    30,
-       0,     0,     0,     0,     0,     0,     0,     0,    31,    32,
-      50,    51,    52,     9,     0,    33,    53,     0,   132,   133,
-     134,    54,     0,     0,     0,     0,     0,     0,     0,    34,
-     135,   136,     0,   137,   138,   139,   140,   141,   142,   143,
-     144,   145,   146,   147,   148,   149,   150,   151,   152,   153,
-     154,   155,   156,   157,   158,     0,     0,     0,     0,     0,
-      57,    58,    59,    60,    61,    62,    63,    64,    65,    66,
-      67,    68,     0,     0,     0,     0,     0,    69,    70,    71,
-      72,    73,    74,    75,    76,    77,    78,    79,     0,     0,
-      80,    81,    82,    83,     0,     0,   159,   160,     0,     0,
-       0,     0,     0,     0,     0,     0,     0,     0,    84,    85,
-      86,    87,    88,    89,    90,    91,    92,     0,     0,     0,
-     161,   162,   163,   164,   165,   166,   167,   168,    31,     0,
-       0,     0,     0,   113,    94,    50,    51,    52,     9,     0,
-      95,    53,     0,     0,    96,     0,    54,     0,     0,     0,
-       0,     0,     0,     0,     0,     0,     0,     0,     0,     0,
-       0,     0,    55,    56,     0,     0,     0,     0,     0,     0,
-       0,     0,     0,     0,     0,     0,     0,     0,     0,     0,
-       0,     0,     0,     0,     0,    57,    58,    59,    60,    61,
-      62,    63,    64,    65,    66,    67,    68,     0,     0,     0,
-       0,     0,    69,    70,    71,    72,    73,    74,    75,    76,
-      77,    78,    79,     0,     0,    80,    81,    82,    83,     0,
-      50,    51,    52,     9,     0,     0,    53,     0,     0,     0,
-       0,    54,     0,    84,    85,    86,    87,    88,    89,    90,
-      91,    92,     0,     0,     0,     0,     0,    55,    56,     0,
-       0,     0,     0,    31,     0,     0,     0,   284,    93,    94,
-       0,     0,     0,     0,     0,    95,     0,     0,     0,   114,
-      57,    58,    59,    60,    61,    62,    63,    64,    65,    66,
-      67,    68,     0,     0,     0,     0,     0,    69,    70,    71,
-      72,    73,    74,    75,    76,    77,    78,    79,     0,     0,
-      80,    81,    82,    83,     0,    50,    51,    52,     9,     0,
-       0,    53,     0,     0,     0,     0,    54,     0,    84,    85,
-      86,    87,    88,    89,    90,    91,    92,     0,     0,     0,
-       0,     0,    55,    56,     0,     0,     0,     0,    31,     0,
-       0,     0,     0,    93,    94,     0,     0,     0,     0,     0,
-      95,     0,     0,     0,    96,    57,    58,    59,    60,    61,
-      62,    63,    64,    65,    66,    67,    68,     0,     0,     0,
-       0,     0,    69,    70,    71,    72,    73,    74,    75,    76,
-      77,    78,    79,     0,     0,    80,    81,    82,    83,     0,
-      50,    51,    52,     9,     0,     0,    53,     0,     0,     0,
-       0,    54,     0,    84,    85,    86,    87,    88,    89,    90,
-      91,    92,     0,     0,     0,     0,     0,    55,    56,     0,
-       0,     0,     0,    31,     0,     0,     0,     0,   113,    94,
-       0,     0,     0,     0,     0,    95,     0,     0,     0,   114,
-      57,    58,    59,    60,    61,    62,    63,    64,    65,    66,
-      67,    68,     0,     0,     0,     0,     0,    69,    70,    71,
-      72,    73,    74,    75,    76,    77,    78,    79,     0,     0,
-      80,    81,    82,    83,     0,    50,    51,    52,     9,     0,
-       0,    53,     0,     0,     0,     0,    54,     0,    84,    85,
-      86,    87,    88,    89,    90,    91,    92,     0,     0,     0,
-       0,     0,    55,    56,     0,     0,     0,     0,    31,     0,
-       0,     0,     0,    93,    94,     0,     0,     0,     0,     0,
-      95,     0,     0,     0,   114,    57,    58,    59,    60,    61,
-      62,    63,    64,    65,    66,    67,    68,     0,     0,     0,
-       0,     0,    69,    70,    71,    72,    73,    74,    75,    76,
-      77,    78,    79,     0,     0,    80,    81,    82,    83,     0,
-     281,    51,    52,     0,     0,     0,   282,     0,     0,     0,
-       0,   283,     0,    84,    85,    86,    87,    88,    89,    90,
-      91,    92,     0,     0,     0,     0,     0,    55,    56,     0,
-       0,     0,     0,    31,     0,     0,     0,     0,   291,    94,
-       0,     0,     0,     0,     0,    95,     0,     0,     0,   114,
-      57,    58,    59,    60,    61,    62,    63,    64,    65,    66,
-      67,    68,     0,     0,     0,     0,     0,    69,    70,    71,
-      72,    73,    74,    75,    76,    77,    78,    79,     0,     0,
-      80,    81,    82,    83,     0,    50,    51,    52,     0,     0,
-       0,    53,     0,     0,     0,     0,    54,     0,    84,    85,
-      86,    87,    88,    89,    90,    91,    92,     0,     0,     0,
-       0,     0,    55,    56,     0,     0,     0,     0,     0,     0,
-       0,     0,   284,   285,    94,     0,     0,     0,     0,     0,
-      95,     0,     0,     0,    96,    57,    58,    59,    60,    61,
-      62,    63,    64,    65,    66,    67,    68,     0,     0,     0,
-       0,     0,    69,    70,    71,    72,    73,    74,    75,    76,
-      77,    78,    79,     0,     0,    80,    81,    82,    83,     0,
-      50,    51,    52,     0,     0,     0,    53,     0,     0,     0,
-       0,    54,     0,    84,    85,    86,    87,    88,    89,    90,
-      91,    92,     0,     0,     0,     0,     0,    55,    56,     0,
-       0,     0,     0,     0,     0,     0,     0,     0,   113,    94,
-       0,     0,     0,     0,     0,    95,   447,     0,     0,    96,
-      57,    58,    59,    60,    61,    62,    63,    64,    65,    66,
-      67,    68,     0,     0,     0,     0,     0,    69,    70,    71,
-      72,    73,    74,    75,    76,    77,    78,    79,     0,     0,
-      80,    81,    82,    83,     0,    50,    51,    52,     0,     0,
-       0,    53,     0,     0,     0,     0,    54,     0,    84,    85,
-      86,    87,    88,    89,    90,    91,    92,     0,     0,     0,
-       0,     0,    55,    56,     0,     0,     0,     0,     0,     0,
-       0,     0,     0,   113,    94,     0,     0,     0,     0,     0,
-      95,     0,     0,     0,    96,    57,    58,    59,    60,    61,
-      62,    63,    64,    65,    66,    67,    68,     0,     0,     0,
-       0,     0,    69,    70,    71,    72,    73,    74,    75,    76,
-      77,    78,    79,     0,     0,    80,    81,    82,    83,     0,
-      50,    51,    52,     0,     0,     0,    53,     0,     0,     0,
-       0,    54,     0,    84,    85,    86,    87,    88,    89,    90,
-      91,    92,     0,     0,     0,     0,     0,    55,    56,     0,
-       0,     0,     0,     0,     0,     0,     0,     0,    93,    94,
-       0,     0,     0,     0,     0,    95,     0,     0,     0,    96,
-      57,    58,    59,    60,    61,    62,    63,    64,    65,    66,
-      67,    68,     0,     0,     0,     0,     0,    69,    70,    71,
-      72,    73,    74,    75,    76,    77,    78,    79,     0,     0,
-      80,    81,    82,    83,     0,     0,    50,    51,    52,     0,
-       0,     0,    53,     0,     0,     0,     0,    54,    84,    85,
-      86,    87,    88,    89,    90,    91,    92,     0,     0,     0,
-       0,     0,     0,     0,     0,     0,     0,     0,     0,     0,
-       0,     0,     0,   291,    94,     0,     0,     0,     0,     0,
-      95,  -205,     0,     0,    96,     0,    57,    58,    59,    60,
-      61,    62,    63,    64,    65,    66,    67,    68,     0,     0,
-       0,     0,     0,    69,    70,    71,    72,    73,    74,    75,
-      76,    77,    78,    79,     0,     0,    80,    81,    82,    83,
-       0,     0,    50,    51,    52,     0,     0,     0,    53,     0,
-       0,     0,     0,    54,    84,    85,    86,    87,    88,    89,
-      90,    91,    92,     0,     0,     0,     0,     0,     0,     0,
-       0,     0,     0,     0,     0,     0,     0,     0,     0,   113,
-      94,     0,     0,     0,     0,     0,    95,  -204,     0,     0,
-      96,     0,    57,    58,    59,    60,    61,    62,    63,    64,
-      65,    66,    67,    68,     0,     0,     0,     0,     0,    69,
-      70,    71,    72,    73,    74,    75,    76,    77,    78,    79,
-       0,     0,    80,    81,    82,    83,     0,    50,    51,    52,
-       0,     0,     0,    53,     0,     0,     0,     0,    54,     0,
-      84,    85,    86,    87,    88,    89,    90,    91,    92,     0,
-       0,     0,     0,     0,     0,     0,     0,     0,     0,     0,
-       0,     0,     0,     0,     0,   113,    94,     0,     0,     0,
-       0,     0,    95,     0,     0,     0,    96,    57,    58,    59,
-      60,    61,    62,    63,    64,    65,    66,    67,    68,     0,
-       0,     0,     0,     0,    69,    70,    71,    72,    73,    74,
-      75,    76,    77,    78,    79,     0,     0,    80,    81,    82,
-      83,    55,    56,     0,     0,     0,     0,     0,     0,     0,
-       0,     0,     0,     0,     0,    84,    85,    86,    87,    88,
-      89,    90,    91,    92,     0,    58,    59,    60,    61,    62,
-      63,    64,    65,    66,    67,    68,    55,    56,     0,     0,
-     113,    94,     0,     0,     0,     0,     0,    95,     0,     0,
-       0,    96,     0,     0,    80,    81,    82,    83,     0,     0,
-      58,    59,    60,    61,    62,    63,    64,    65,    66,    67,
-      68,     0,    84,    85,    86,    87,    88,    89,    90,    91,
-      92,     0,     0,     0,     0,   232,     0,     0,   233,    80,
-      81,    82,    83,     0,     0,   232,   381,     0,   233,     0,
-       0,     0,     0,     0,     0,     0,     0,    84,    85,    86,
-      87,    88,    89,    90,    91,    92,   259,   260,   236,   237,
-     238,   239,     0,     0,     0,     0,     0,     0,     0,     0,
-       0,   284,   234,   235,   236,   237,   238,   239,     0,     0,
-       0,     0,   259,   260,   236,   237,   238,   239,     0,     0,
-     240,   241,   242,   243,   244,   245,   246,   247,     0,   248,
-       0,     0,     0,     0,     0,     0,   240,   241,   242,   243,
-     244,   245,   246,   247,     0,   248,   240,   241,   242,   243,
-     244,   245,   246,   247,     0,   248,    58,    59,    60,    61,
-      62,    63,    64,    65,    66,    67,    68,    58,    59,    60,
-      61,    62,    63,    64,    65,    66,    67,    68,     0,     0,
-       0,     0,     0,     0,     0,    80,    81,    82,    83,     0,
-       0,     0,     0,     0,     0,     0,    80,    81,    82,    83,
-       0,     0,     0,    84,    85,    86,    87,    88,    89,    90,
-      91,    92,     0,     0,    84,    85,    86,    87,    88,    89,
-      90,    91,    92,     0,     0,     0,     0,   216,   259,   260,
-     236,   237,   238,   239,     0,     0,     0,   234,   235,   236,
-     237,   238,   239,     0,     0,     0,   234,     0,   236,   237,
-     238,   239,     0,     0,     0,   259,     0,   236,   237,   238,
-     239,     0,     0,   241,   242,   243,   244,   245,   246,   247,
-       0,   248,   241,   242,   243,   244,   245,   246,   247,     0,
-     248,   241,   242,   243,   244,   245,   246,   247,     0,   248,
-     241,   242,   243,   244,   245,   246,   247,     0,   248
-};
-
-static const yytype_int16 yycheck[] =
-{
-      26,   128,   106,    52,    30,    52,    32,     4,   108,     4,
-     129,   114,     0,     3,    40,     6,     0,   140,   141,     9,
-       0,    97,   132,   133,    14,   139,   145,     3,     0,     6,
-      26,    26,   139,     9,   140,   145,    32,    32,    14,     3,
-       4,    28,   281,   141,   171,    40,   285,    35,   124,    93,
-       4,    30,    31,     4,   104,    43,   126,    44,    48,   132,
-     133,    94,   134,   135,   136,     6,   138,    93,    82,    95,
-      96,    97,   145,    14,    15,    16,    17,    18,    19,    20,
-     140,    22,     8,   132,   133,   132,   133,    26,   114,   132,
-     133,    82,   126,    32,    95,    96,   146,    93,   124,    97,
-      98,    97,    97,   147,   131,   132,   133,    94,   126,   135,
-     136,   137,   138,   139,   140,   141,   142,   143,   144,   145,
-     146,   147,   101,   102,   150,   151,   152,   122,   124,   124,
-     230,   130,   129,   128,   126,   161,   162,   127,   377,   378,
-     166,   167,   125,   126,   121,   171,   140,   143,   144,   145,
-     146,   127,   255,   256,    93,   139,   259,   260,    97,   143,
-     144,   131,   132,   133,   126,   209,   210,   139,   163,   164,
-     165,   143,   144,   126,   413,   171,   171,   126,   282,   283,
-      30,    31,    37,   209,   210,   124,   173,   128,   132,   133,
-     290,   126,    93,   180,   181,   182,   183,   184,   185,   186,
-     187,   188,   189,   190,   143,   144,   145,   146,   234,   235,
-     236,   237,   238,   239,   240,   241,   242,   243,   244,   245,
-     246,   247,   248,   249,   250,   251,     6,   126,   126,   255,
-     256,   281,   171,   259,   260,   285,   129,   287,   126,   132,
-     133,   285,   143,   144,   145,   146,   129,   291,   126,   132,
-     133,   101,   102,   249,   250,     6,     4,   129,     8,   285,
-     132,   133,   257,   258,     6,   291,   145,   130,   145,   264,
-     171,    10,   138,    15,    16,    17,    18,    19,    20,     3,
-      22,   125,   144,   410,    49,   329,   330,   144,     8,   285,
-      15,    16,    17,    18,    19,    20,   143,    22,     3,     8,
-     145,   129,   328,   329,   330,   145,   145,   333,   334,   145,
-     249,   250,   145,   129,   129,    95,    96,    97,    98,    99,
-     100,    65,    66,    67,    68,    69,   145,   377,   378,    50,
-       8,   145,   328,   145,    95,   129,     3,   333,   334,   111,
-     145,   121,   145,    51,     6,   145,   285,   145,   249,   250,
-     130,   131,   132,   133,   134,   135,   136,   145,   138,   145,
-      92,   145,     8,   413,    35,   171,    32,    65,    66,    67,
-      68,    69,   203,   415,    -1,    -1,    33,    -1,   404,   405,
-     406,    -1,   408,    -1,   285,    -1,   128,    -1,    -1,   328,
-      -1,    -1,    -1,    -1,   333,   334,    36,    -1,   424,   425,
-      -1,   145,   389,   128,    -1,    -1,   393,   394,   404,   405,
-      -1,    97,    98,    99,   100,   410,   442,    -1,    -1,    -1,
-      -1,   447,    65,    66,    67,    68,    69,   328,   424,   425,
-      -1,    -1,   333,   334,   132,   133,    -1,    -1,    95,    96,
-      97,    98,    99,   100,   130,   131,   132,   133,   134,   135,
-     136,    -1,   138,    -1,    -1,    95,    96,    97,    98,    99,
-     100,     3,     4,     5,     6,   404,   405,     9,    -1,    -1,
-      -1,    -1,    14,   130,   131,   132,   133,   134,   135,   136,
-      -1,   138,    -1,    -1,    -1,   424,   425,    -1,    30,    31,
-     130,   131,   132,   133,   134,   135,   136,    -1,   138,    -1,
-      -1,    -1,    -1,   404,   405,    -1,    -1,    -1,    -1,    -1,
-      -1,    53,    54,    55,    56,    57,    58,    59,    60,    61,
-      62,    63,    64,   424,   425,    -1,    -1,    -1,    70,    71,
-      72,    73,    74,    75,    76,    77,    78,    79,    80,    99,
-     100,    83,    84,    85,    86,   132,   133,   134,   135,   136,
-      -1,   138,    -1,    -1,    -1,    -1,    -1,    -1,    -1,   101,
-     102,   103,   104,   105,   106,   107,   108,   109,    -1,    -1,
-     130,   131,   132,   133,   134,   135,   136,    -1,   138,   121,
-      -1,    -1,    -1,    -1,   126,   127,    -1,    -1,    -1,    -1,
-      -1,   133,    -1,    -1,    -1,   137,     3,     4,     5,     6,
-       7,    -1,     9,   145,    -1,    -1,    -1,    14,    15,    16,
-      17,    18,    19,    20,    21,    22,    -1,    -1,    25,    -1,
-      -1,    28,    29,    30,    31,    -1,    -1,    -1,    -1,    -1,
-      -1,    -1,    -1,    -1,    -1,    -1,    -1,    -1,    -1,    -1,
-      -1,    -1,    -1,    -1,    -1,    -1,    53,    54,    55,    56,
-      57,    58,    59,    60,    61,    62,    63,    64,    -1,    -1,
-      -1,    -1,    -1,    70,    71,    72,    73,    74,    75,    76,
-      77,    78,    79,    80,    81,    -1,    83,    84,    85,    86,
-      87,    88,    -1,    -1,    91,    -1,    93,    -1,    -1,    -1,
-      -1,    -1,    -1,    -1,   101,   102,   103,   104,   105,   106,
-     107,   108,   109,   110,    -1,   112,    -1,    -1,    -1,    -1,
-      -1,    -1,    -1,    -1,   121,   122,    -1,    -1,    -1,   126,
-     127,   128,    -1,    -1,     3,     4,   133,     6,     7,    -1,
-     137,    -1,    -1,    -1,    -1,   142,    15,    16,    17,    18,
-      19,    20,    21,    22,    -1,    -1,    25,    -1,    -1,    28,
-      29,    30,    31,    -1,    -1,    -1,    -1,    -1,    -1,    -1,
-       3,     4,    -1,     6,     7,    -1,    -1,    -1,    -1,    -1,
-      -1,    -1,    15,    16,    17,    18,    19,    20,    21,    22,
-      -1,    -1,    25,    -1,    -1,    28,    29,    30,    31,    95,
-      96,    97,    98,    99,   100,    -1,    -1,    -1,    -1,    -1,
-      -1,    -1,    81,    -1,    -1,    -1,    -1,    -1,    87,    88,
-      -1,    -1,    91,    -1,    93,    -1,    -1,    -1,    -1,    -1,
-      -1,    -1,    -1,   129,   130,   131,   132,   133,   134,   135,
-     136,   110,   138,   112,    -1,    -1,    -1,    -1,    81,    -1,
-      -1,    -1,   121,   122,    87,    88,    -1,    -1,    91,   128,
-      93,    -1,    -1,    -1,    -1,    -1,    -1,    -1,    -1,    -1,
-     139,    -1,    -1,   142,    -1,    -1,    -1,   110,    -1,   112,
-      -1,    -1,    -1,    -1,    -1,    -1,    -1,    -1,   121,   122,
-       3,     4,     5,     6,    -1,   128,     9,    -1,    11,    12,
-      13,    14,    -1,    -1,    -1,    -1,    -1,    -1,    -1,   142,
-      23,    24,    -1,    26,    27,    28,    29,    30,    31,    32,
-      33,    34,    35,    36,    37,    38,    39,    40,    41,    42,
-      43,    44,    45,    46,    47,    -1,    -1,    -1,    -1,    -1,
-      53,    54,    55,    56,    57,    58,    59,    60,    61,    62,
-      63,    64,    -1,    -1,    -1,    -1,    -1,    70,    71,    72,
-      73,    74,    75,    76,    77,    78,    79,    80,    -1,    -1,
-      83,    84,    85,    86,    -1,    -1,    89,    90,    -1,    -1,
-      -1,    -1,    -1,    -1,    -1,    -1,    -1,    -1,   101,   102,
-     103,   104,   105,   106,   107,   108,   109,    -1,    -1,    -1,
-     113,   114,   115,   116,   117,   118,   119,   120,   121,    -1,
-      -1,    -1,    -1,   126,   127,     3,     4,     5,     6,    -1,
-     133,     9,    -1,    -1,   137,    -1,    14,    -1,    -1,    -1,
-      -1,    -1,    -1,    -1,    -1,    -1,    -1,    -1,    -1,    -1,
-      -1,    -1,    30,    31,    -1,    -1,    -1,    -1,    -1,    -1,
-      -1,    -1,    -1,    -1,    -1,    -1,    -1,    -1,    -1,    -1,
-      -1,    -1,    -1,    -1,    -1,    53,    54,    55,    56,    57,
-      58,    59,    60,    61,    62,    63,    64,    -1,    -1,    -1,
-      -1,    -1,    70,    71,    72,    73,    74,    75,    76,    77,
-      78,    79,    80,    -1,    -1,    83,    84,    85,    86,    -1,
-       3,     4,     5,     6,    -1,    -1,     9,    -1,    -1,    -1,
-      -1,    14,    -1,   101,   102,   103,   104,   105,   106,   107,
-     108,   109,    -1,    -1,    -1,    -1,    -1,    30,    31,    -1,
-      -1,    -1,    -1,   121,    -1,    -1,    -1,   125,   126,   127,
-      -1,    -1,    -1,    -1,    -1,   133,    -1,    -1,    -1,   137,
-      53,    54,    55,    56,    57,    58,    59,    60,    61,    62,
-      63,    64,    -1,    -1,    -1,    -1,    -1,    70,    71,    72,
-      73,    74,    75,    76,    77,    78,    79,    80,    -1,    -1,
-      83,    84,    85,    86,    -1,     3,     4,     5,     6,    -1,
-      -1,     9,    -1,    -1,    -1,    -1,    14,    -1,   101,   102,
-     103,   104,   105,   106,   107,   108,   109,    -1,    -1,    -1,
-      -1,    -1,    30,    31,    -1,    -1,    -1,    -1,   121,    -1,
-      -1,    -1,    -1,   126,   127,    -1,    -1,    -1,    -1,    -1,
-     133,    -1,    -1,    -1,   137,    53,    54,    55,    56,    57,
-      58,    59,    60,    61,    62,    63,    64,    -1,    -1,    -1,
-      -1,    -1,    70,    71,    72,    73,    74,    75,    76,    77,
-      78,    79,    80,    -1,    -1,    83,    84,    85,    86,    -1,
-       3,     4,     5,     6,    -1,    -1,     9,    -1,    -1,    -1,
-      -1,    14,    -1,   101,   102,   103,   104,   105,   106,   107,
-     108,   109,    -1,    -1,    -1,    -1,    -1,    30,    31,    -1,
-      -1,    -1,    -1,   121,    -1,    -1,    -1,    -1,   126,   127,
-      -1,    -1,    -1,    -1,    -1,   133,    -1,    -1,    -1,   137,
-      53,    54,    55,    56,    57,    58,    59,    60,    61,    62,
-      63,    64,    -1,    -1,    -1,    -1,    -1,    70,    71,    72,
-      73,    74,    75,    76,    77,    78,    79,    80,    -1,    -1,
-      83,    84,    85,    86,    -1,     3,     4,     5,     6,    -1,
-      -1,     9,    -1,    -1,    -1,    -1,    14,    -1,   101,   102,
-     103,   104,   105,   106,   107,   108,   109,    -1,    -1,    -1,
-      -1,    -1,    30,    31,    -1,    -1,    -1,    -1,   121,    -1,
-      -1,    -1,    -1,   126,   127,    -1,    -1,    -1,    -1,    -1,
-     133,    -1,    -1,    -1,   137,    53,    54,    55,    56,    57,
-      58,    59,    60,    61,    62,    63,    64,    -1,    -1,    -1,
-      -1,    -1,    70,    71,    72,    73,    74,    75,    76,    77,
-      78,    79,    80,    -1,    -1,    83,    84,    85,    86,    -1,
-       3,     4,     5,    -1,    -1,    -1,     9,    -1,    -1,    -1,
-      -1,    14,    -1,   101,   102,   103,   104,   105,   106,   107,
-     108,   109,    -1,    -1,    -1,    -1,    -1,    30,    31,    -1,
-      -1,    -1,    -1,   121,    -1,    -1,    -1,    -1,   126,   127,
-      -1,    -1,    -1,    -1,    -1,   133,    -1,    -1,    -1,   137,
-      53,    54,    55,    56,    57,    58,    59,    60,    61,    62,
-      63,    64,    -1,    -1,    -1,    -1,    -1,    70,    71,    72,
-      73,    74,    75,    76,    77,    78,    79,    80,    -1,    -1,
-      83,    84,    85,    86,    -1,     3,     4,     5,    -1,    -1,
-      -1,     9,    -1,    -1,    -1,    -1,    14,    -1,   101,   102,
-     103,   104,   105,   106,   107,   108,   109,    -1,    -1,    -1,
-      -1,    -1,    30,    31,    -1,    -1,    -1,    -1,    -1,    -1,
-      -1,    -1,   125,   126,   127,    -1,    -1,    -1,    -1,    -1,
-     133,    -1,    -1,    -1,   137,    53,    54,    55,    56,    57,
-      58,    59,    60,    61,    62,    63,    64,    -1,    -1,    -1,
-      -1,    -1,    70,    71,    72,    73,    74,    75,    76,    77,
-      78,    79,    80,    -1,    -1,    83,    84,    85,    86,    -1,
-       3,     4,     5,    -1,    -1,    -1,     9,    -1,    -1,    -1,
-      -1,    14,    -1,   101,   102,   103,   104,   105,   106,   107,
-     108,   109,    -1,    -1,    -1,    -1,    -1,    30,    31,    -1,
-      -1,    -1,    -1,    -1,    -1,    -1,    -1,    -1,   126,   127,
-      -1,    -1,    -1,    -1,    -1,   133,   134,    -1,    -1,   137,
-      53,    54,    55,    56,    57,    58,    59,    60,    61,    62,
-      63,    64,    -1,    -1,    -1,    -1,    -1,    70,    71,    72,
-      73,    74,    75,    76,    77,    78,    79,    80,    -1,    -1,
-      83,    84,    85,    86,    -1,     3,     4,     5,    -1,    -1,
-      -1,     9,    -1,    -1,    -1,    -1,    14,    -1,   101,   102,
-     103,   104,   105,   106,   107,   108,   109,    -1,    -1,    -1,
-      -1,    -1,    30,    31,    -1,    -1,    -1,    -1,    -1,    -1,
-      -1,    -1,    -1,   126,   127,    -1,    -1,    -1,    -1,    -1,
-     133,    -1,    -1,    -1,   137,    53,    54,    55,    56,    57,
-      58,    59,    60,    61,    62,    63,    64,    -1,    -1,    -1,
-      -1,    -1,    70,    71,    72,    73,    74,    75,    76,    77,
-      78,    79,    80,    -1,    -1,    83,    84,    85,    86,    -1,
-       3,     4,     5,    -1,    -1,    -1,     9,    -1,    -1,    -1,
-      -1,    14,    -1,   101,   102,   103,   104,   105,   106,   107,
-     108,   109,    -1,    -1,    -1,    -1,    -1,    30,    31,    -1,
-      -1,    -1,    -1,    -1,    -1,    -1,    -1,    -1,   126,   127,
-      -1,    -1,    -1,    -1,    -1,   133,    -1,    -1,    -1,   137,
-      53,    54,    55,    56,    57,    58,    59,    60,    61,    62,
-      63,    64,    -1,    -1,    -1,    -1,    -1,    70,    71,    72,
-      73,    74,    75,    76,    77,    78,    79,    80,    -1,    -1,
-      83,    84,    85,    86,    -1,    -1,     3,     4,     5,    -1,
-      -1,    -1,     9,    -1,    -1,    -1,    -1,    14,   101,   102,
-     103,   104,   105,   106,   107,   108,   109,    -1,    -1,    -1,
-      -1,    -1,    -1,    -1,    -1,    -1,    -1,    -1,    -1,    -1,
-      -1,    -1,    -1,   126,   127,    -1,    -1,    -1,    -1,    -1,
-     133,    48,    -1,    -1,   137,    -1,    53,    54,    55,    56,
-      57,    58,    59,    60,    61,    62,    63,    64,    -1,    -1,
-      -1,    -1,    -1,    70,    71,    72,    73,    74,    75,    76,
-      77,    78,    79,    80,    -1,    -1,    83,    84,    85,    86,
-      -1,    -1,     3,     4,     5,    -1,    -1,    -1,     9,    -1,
-      -1,    -1,    -1,    14,   101,   102,   103,   104,   105,   106,
-     107,   108,   109,    -1,    -1,    -1,    -1,    -1,    -1,    -1,
-      -1,    -1,    -1,    -1,    -1,    -1,    -1,    -1,    -1,   126,
-     127,    -1,    -1,    -1,    -1,    -1,   133,    48,    -1,    -1,
-     137,    -1,    53,    54,    55,    56,    57,    58,    59,    60,
-      61,    62,    63,    64,    -1,    -1,    -1,    -1,    -1,    70,
-      71,    72,    73,    74,    75,    76,    77,    78,    79,    80,
-      -1,    -1,    83,    84,    85,    86,    -1,     3,     4,     5,
-      -1,    -1,    -1,     9,    -1,    -1,    -1,    -1,    14,    -1,
-     101,   102,   103,   104,   105,   106,   107,   108,   109,    -1,
-      -1,    -1,    -1,    -1,    -1,    -1,    -1,    -1,    -1,    -1,
-      -1,    -1,    -1,    -1,    -1,   126,   127,    -1,    -1,    -1,
-      -1,    -1,   133,    -1,    -1,    -1,   137,    53,    54,    55,
-      56,    57,    58,    59,    60,    61,    62,    63,    64,    -1,
-      -1,    -1,    -1,    -1,    70,    71,    72,    73,    74,    75,
-      76,    77,    78,    79,    80,    -1,    -1,    83,    84,    85,
-      86,    30,    31,    -1,    -1,    -1,    -1,    -1,    -1,    -1,
-      -1,    -1,    -1,    -1,    -1,   101,   102,   103,   104,   105,
-     106,   107,   108,   109,    -1,    54,    55,    56,    57,    58,
-      59,    60,    61,    62,    63,    64,    30,    31,    -1,    -1,
-     126,   127,    -1,    -1,    -1,    -1,    -1,   133,    -1,    -1,
-      -1,   137,    -1,    -1,    83,    84,    85,    86,    -1,    -1,
-      54,    55,    56,    57,    58,    59,    60,    61,    62,    63,
-      64,    -1,   101,   102,   103,   104,   105,   106,   107,   108,
-     109,    -1,    -1,    -1,    -1,    48,    -1,    -1,    51,    83,
-      84,    85,    86,    -1,    -1,    48,   125,    -1,    51,    -1,
-      -1,    -1,    -1,    -1,    -1,    -1,    -1,   101,   102,   103,
-     104,   105,   106,   107,   108,   109,    95,    96,    97,    98,
-      99,   100,    -1,    -1,    -1,    -1,    -1,    -1,    -1,    -1,
-      -1,   125,    95,    96,    97,    98,    99,   100,    -1,    -1,
-      -1,    -1,    95,    96,    97,    98,    99,   100,    -1,    -1,
-     129,   130,   131,   132,   133,   134,   135,   136,    -1,   138,
-      -1,    -1,    -1,    -1,    -1,    -1,   129,   130,   131,   132,
-     133,   134,   135,   136,    -1,   138,   129,   130,   131,   132,
-     133,   134,   135,   136,    -1,   138,    54,    55,    56,    57,
-      58,    59,    60,    61,    62,    63,    64,    54,    55,    56,
-      57,    58,    59,    60,    61,    62,    63,    64,    -1,    -1,
-      -1,    -1,    -1,    -1,    -1,    83,    84,    85,    86,    -1,
-      -1,    -1,    -1,    -1,    -1,    -1,    83,    84,    85,    86,
-      -1,    -1,    -1,   101,   102,   103,   104,   105,   106,   107,
-     108,   109,    -1,    -1,   101,   102,   103,   104,   105,   106,
-     107,   108,   109,    -1,    -1,    -1,    -1,   125,    95,    96,
-      97,    98,    99,   100,    -1,    -1,    -1,    95,    96,    97,
-      98,    99,   100,    -1,    -1,    -1,    95,    -1,    97,    98,
-      99,   100,    -1,    -1,    -1,    95,    -1,    97,    98,    99,
-     100,    -1,    -1,   130,   131,   132,   133,   134,   135,   136,
-      -1,   138,   130,   131,   132,   133,   134,   135,   136,    -1,
-     138,   130,   131,   132,   133,   134,   135,   136,    -1,   138,
-     130,   131,   132,   133,   134,   135,   136,    -1,   138
-};
-
-  /* YYSTOS[STATE-NUM] -- The (internal number of the) accessing
-     symbol of state STATE-NUM.  */
-static const yytype_uint8 yystos[] =
-{
-       0,   139,   147,   148,   150,   151,     0,     3,     4,     6,
-       7,    15,    16,    17,    18,    19,    20,    21,    22,    25,
-      28,    29,    30,    31,    81,    87,    88,    91,    93,   110,
-     112,   121,   122,   128,   142,   149,   152,   161,   164,   170,
-     174,   176,   139,   141,   140,   141,   140,     6,    82,   153,
-       3,     4,     5,     9,    14,    30,    31,    53,    54,    55,
-      56,    57,    58,    59,    60,    61,    62,    63,    64,    70,
-      71,    72,    73,    74,    75,    76,    77,    78,    79,    80,
-      83,    84,    85,    86,   101,   102,   103,   104,   105,   106,
-     107,   108,   109,   126,   127,   133,   137,   162,   163,   176,
-     178,   179,   181,   182,   183,   184,   185,   186,   191,   192,
-     193,   194,     4,   126,   137,   167,   168,   176,   182,   192,
-     194,     4,   192,   126,   162,   175,   171,   150,   151,     4,
-     129,    94,    11,    12,    13,    23,    24,    26,    27,    28,
-      29,    30,    31,    32,    33,    34,    35,    36,    37,    38,
-      39,    40,    41,    42,    43,    44,    45,    46,    47,    89,
-      90,   113,   114,   115,   116,   117,   118,   119,   120,   176,
-     192,   150,   167,   140,     3,     4,   160,    82,   156,     8,
-     126,   126,   126,   126,   126,   126,   126,   126,   126,   126,
-     126,    30,    31,   101,   102,    30,    31,   101,   102,   167,
-     178,   181,   182,   192,   194,   167,   192,   192,   163,   132,
-     133,    65,    66,    67,    68,    69,   125,   191,     6,    14,
-      15,    16,    17,    18,    19,    20,    22,   128,   187,   187,
-      48,   183,    48,    51,    95,    96,    97,    98,    99,   100,
-     129,   130,   131,   132,   133,   134,   135,   136,   138,   180,
-     130,   140,   168,   192,    37,    95,    96,    97,    98,    95,
-      96,   176,     6,   148,   150,   148,   170,     4,   159,   192,
-     192,   192,   192,   192,   192,   192,   192,   178,   192,   178,
-     178,     3,     9,    14,   125,   126,   178,   188,   189,   190,
-     191,   126,   181,   192,   192,   192,   192,   192,   192,   176,
-     176,   176,   192,   192,     3,     4,    30,    31,   170,   178,
-     179,   182,   167,   154,     8,   167,   167,   167,   167,   167,
-     167,   167,   167,   167,   145,   167,   167,   145,   129,   132,
-     133,   145,   145,   180,   130,    10,   181,   181,     3,   144,
-     183,    49,   192,   192,   192,   192,   192,   192,   192,   192,
-     192,   192,   192,   192,   192,   192,   192,   178,   178,   192,
-     165,   168,   192,   168,   192,   176,   176,   168,   192,   168,
-     192,   177,   144,   143,     8,   189,   191,   187,   187,     3,
-     189,   125,   191,   181,   192,     8,   157,   145,   145,   129,
-     145,   145,   145,   129,   129,   145,   145,   145,   178,   181,
-     181,   178,   178,    50,    52,   129,    33,     8,   129,   145,
-     172,   189,   189,   129,     3,   155,   111,   166,   167,   167,
-     167,   145,   145,   145,    52,   129,    51,   178,   178,   192,
-     192,   170,   173,   189,   166,     6,   145,   145,   145,   178,
-     178,   131,    36,   169,   145,   145,   131,   134,   192,    92,
-     145,   192,   158,     8
-};
-
-  /* YYR1[YYN] -- Symbol number of symbol that rule YYN derives.  */
-static const yytype_uint8 yyr1[] =
-{
-       0,   146,   147,   147,   148,   149,   149,   150,   150,   151,
-     151,   152,   152,   152,   152,   152,   152,   152,   152,   152,
-     152,   153,   152,   152,   154,   155,   152,   156,   157,   152,
-     158,   152,   152,   159,   152,   152,   152,   160,   160,   161,
-     161,   161,   162,   162,   163,   163,   163,   165,   164,   166,
-     166,   167,   167,   168,   168,   168,   168,   168,   168,   168,
-     168,   168,   169,   169,   169,   170,   170,   170,   170,   171,
-     172,   170,   170,   173,   173,   174,   174,   174,   174,   174,
-     174,   174,   174,   174,   174,   174,   175,   174,   174,   174,
-     174,   174,   174,   174,   174,   174,   174,   174,   174,   174,
-     174,   174,   174,   174,   174,   174,   174,   174,   174,   174,
-     174,   174,   174,   174,   174,   174,   174,   174,   174,   174,
-     174,   174,   174,   174,   174,   174,   174,   174,   174,   174,
-     174,   174,   174,   174,   174,   174,   176,   176,   177,   177,
-     178,   178,   178,   179,   179,   179,   179,   179,   179,   179,
-     179,   179,   179,   180,   180,   181,   181,   182,   182,   182,
-     182,   182,   183,   183,   183,   184,   184,   185,   185,   186,
-     186,   187,   187,   187,   187,   187,   187,   187,   187,   187,
-     188,   188,   189,   189,   189,   190,   190,   190,   190,   190,
-     190,   191,   191,   191,   191,   191,   191,   191,   191,   191,
-     191,   191,   191,   191,   191,   191,   191,   191,   191,   191,
-     191,   191,   191,   191,   191,   191,   191,   191,   191,   191,
-     191,   191,   191,   192,   192,   193,   194,   194,   194,   194,
-     194,   194,   194,   194,   194,   194,   194,   194,   194,   194,
-     194,   194,   194,   194,   194,   194,   194,   194,   194,   194,
-     194,   194,   194,   194,   194,   194,   194,   194,   194,   194,
-     194
-};
-
-  /* YYR2[YYN] -- Number of symbols on the right hand side of rule YYN.  */
-static const yytype_uint8 yyr2[] =
-{
-       0,     2,     1,     1,     3,     1,     3,     0,     1,     1,
-       2,     3,     3,     4,     1,     1,     1,     1,     1,     2,
-       2,     0,     3,     2,     0,     0,     7,     0,     0,     6,
-       0,    10,     1,     0,     4,     1,     1,     1,     1,     2,
-       2,     3,     1,     2,     1,     1,     1,     0,     5,     0,
-       2,     1,     1,     3,     3,     3,     3,     3,     3,     3,
-       3,     2,     0,     2,     3,     1,     4,     4,     4,     0,
-       0,     6,     1,     0,     1,     1,     1,     1,     1,     1,
-       1,     1,     1,     1,     2,     3,     0,     4,     3,     3,
-       3,     3,     2,     2,     3,     2,     3,     2,     3,     2,
-       3,     3,     3,     3,     3,     3,     3,     2,     2,     2,
-       3,     2,     3,     2,     3,     3,     3,     3,     3,     3,
-       2,     3,     2,     2,     2,     2,     2,     2,     2,     2,
-       2,     2,     2,     2,     3,     2,     1,     5,     0,     3,
-       1,     1,     3,     1,     3,     5,     3,     5,     5,     5,
-       7,     6,     8,     1,     4,     3,     3,     1,     2,     2,
-       3,     1,     1,     1,     3,     1,     3,     1,     2,     2,
-       2,     1,     1,     1,     1,     1,     1,     1,     2,     1,
-       2,     3,     1,     1,     2,     1,     5,     4,     3,     3,
-       2,     1,     1,     1,     1,     1,     1,     1,     1,     1,
-       1,     1,     1,     1,     1,     1,     2,     2,     2,     2,
-       1,     1,     2,     2,     2,     2,     1,     1,     1,     1,
-       1,     1,     1,     1,     1,     3,     1,     1,     2,     2,
-       2,     2,     2,     3,     3,     3,     3,     3,     3,     2,
-       3,     4,     4,     6,     4,     4,     4,     6,     6,     4,
-       4,     3,     4,     3,     3,     3,     3,     3,     3,     3,
-       2
-};
-
-
-#define yyerrok         (yyerrstatus = 0)
-#define yyclearin       (yychar = YYEMPTY)
-#define YYEMPTY         (-2)
-#define YYEOF           0
-
-#define YYACCEPT        goto yyacceptlab
-#define YYABORT         goto yyabortlab
-#define YYERROR         goto yyerrorlab
-
-
-#define YYRECOVERING()  (!!yyerrstatus)
-
-#define YYBACKUP(Token, Value)                                  \
-do                                                              \
-  if (yychar == YYEMPTY)                                        \
-    {                                                           \
-      yychar = (Token);                                         \
-      yylval = (Value);                                         \
-      YYPOPSTACK (yylen);                                       \
-      yystate = *yyssp;                                         \
-      goto yybackup;                                            \
-    }                                                           \
-  else                                                          \
-    {                                                           \
-      yyerror (YY_("syntax error: cannot back up")); \
-      YYERROR;                                                  \
-    }                                                           \
-while (0)
-
-/* Error token number */
-#define YYTERROR        1
-#define YYERRCODE       256
-
-
-
-/* Enable debugging if requested.  */
-#if YYDEBUG
-
-# ifndef YYFPRINTF
-#  include <stdio.h> /* INFRINGES ON USER NAME SPACE */
-#  define YYFPRINTF fprintf
-# endif
-
-# define YYDPRINTF(Args)                        \
-do {                                            \
-  if (yydebug)                                  \
-    YYFPRINTF Args;                             \
-} while (0)
-
-/* This macro is provided for backward compatibility. */
-#ifndef YY_LOCATION_PRINT
-# define YY_LOCATION_PRINT(File, Loc) ((void) 0)
-#endif
-
-
-# define YY_SYMBOL_PRINT(Title, Type, Value, Location)                    \
-do {                                                                      \
-  if (yydebug)                                                            \
-    {                                                                     \
-      YYFPRINTF (stderr, "%s ", Title);                                   \
-      yy_symbol_print (stderr,                                            \
-                  Type, Value); \
-      YYFPRINTF (stderr, "\n");                                           \
-    }                                                                     \
-} while (0)
-
-
-/*----------------------------------------.
-| Print this symbol's value on YYOUTPUT.  |
-`----------------------------------------*/
-
-static void
-yy_symbol_value_print (FILE *yyoutput, int yytype, YYSTYPE const * const yyvaluep)
-{
-  FILE *yyo = yyoutput;
-  YYUSE (yyo);
-  if (!yyvaluep)
-    return;
-# ifdef YYPRINT
-  if (yytype < YYNTOKENS)
-    YYPRINT (yyoutput, yytoknum[yytype], *yyvaluep);
-# endif
-  YYUSE (yytype);
-}
-
-
-/*--------------------------------.
-| Print this symbol on YYOUTPUT.  |
-`--------------------------------*/
-
-static void
-yy_symbol_print (FILE *yyoutput, int yytype, YYSTYPE const * const yyvaluep)
-{
-  YYFPRINTF (yyoutput, "%s %s (",
-             yytype < YYNTOKENS ? "token" : "nterm", yytname[yytype]);
-
-  yy_symbol_value_print (yyoutput, yytype, yyvaluep);
-  YYFPRINTF (yyoutput, ")");
-}
-
-/*------------------------------------------------------------------.
-| yy_stack_print -- Print the state stack from its BOTTOM up to its |
-| TOP (included).                                                   |
-`------------------------------------------------------------------*/
-
-static void
-yy_stack_print (yytype_int16 *yybottom, yytype_int16 *yytop)
-{
-  YYFPRINTF (stderr, "Stack now");
-  for (; yybottom <= yytop; yybottom++)
-    {
-      int yybot = *yybottom;
-      YYFPRINTF (stderr, " %d", yybot);
-    }
-  YYFPRINTF (stderr, "\n");
-}
-
-# define YY_STACK_PRINT(Bottom, Top)                            \
-do {                                                            \
-  if (yydebug)                                                  \
-    yy_stack_print ((Bottom), (Top));                           \
-} while (0)
-
-
-/*------------------------------------------------.
-| Report that the YYRULE is going to be reduced.  |
-`------------------------------------------------*/
-
-static void
-yy_reduce_print (yytype_int16 *yyssp, YYSTYPE *yyvsp, int yyrule)
-{
-  unsigned long int yylno = yyrline[yyrule];
-  int yynrhs = yyr2[yyrule];
-  int yyi;
-  YYFPRINTF (stderr, "Reducing stack by rule %d (line %lu):\n",
-             yyrule - 1, yylno);
-  /* The symbols being reduced.  */
-  for (yyi = 0; yyi < yynrhs; yyi++)
-    {
-      YYFPRINTF (stderr, "   $%d = ", yyi + 1);
-      yy_symbol_print (stderr,
-                       yystos[yyssp[yyi + 1 - yynrhs]],
-                       &(yyvsp[(yyi + 1) - (yynrhs)])
-                                              );
-      YYFPRINTF (stderr, "\n");
-    }
-}
-
-# define YY_REDUCE_PRINT(Rule)          \
-do {                                    \
-  if (yydebug)                          \
-    yy_reduce_print (yyssp, yyvsp, Rule); \
-} while (0)
-
-/* Nonzero means print parse trace.  It is left uninitialized so that
-   multiple parsers can coexist.  */
-int yydebug;
-#else /* !YYDEBUG */
-# define YYDPRINTF(Args)
-# define YY_SYMBOL_PRINT(Title, Type, Value, Location)
-# define YY_STACK_PRINT(Bottom, Top)
-# define YY_REDUCE_PRINT(Rule)
-#endif /* !YYDEBUG */
-
-
-/* YYINITDEPTH -- initial size of the parser's stacks.  */
-#ifndef YYINITDEPTH
-# define YYINITDEPTH 200
-#endif
-
-/* YYMAXDEPTH -- maximum size the stacks can grow to (effective only
-   if the built-in stack extension method is used).
-
-   Do not make this value too large; the results are undefined if
-   YYSTACK_ALLOC_MAXIMUM < YYSTACK_BYTES (YYMAXDEPTH)
-   evaluated with infinite-precision integer arithmetic.  */
-
-#ifndef YYMAXDEPTH
-# define YYMAXDEPTH 10000
-#endif
-
-
-#if YYERROR_VERBOSE
-
-# ifndef yystrlen
-#  if defined __GLIBC__ && defined _STRING_H
-#   define yystrlen strlen
-#  else
-/* Return the length of YYSTR.  */
-static YYSIZE_T
-yystrlen (const char *yystr)
-{
-  YYSIZE_T yylen;
-  for (yylen = 0; yystr[yylen]; yylen++)
-    continue;
-  return yylen;
-}
-#  endif
-# endif
-
-# ifndef yystpcpy
-#  if defined __GLIBC__ && defined _STRING_H && defined _GNU_SOURCE
-#   define yystpcpy stpcpy
-#  else
-/* Copy YYSRC to YYDEST, returning the address of the terminating '\0' in
-   YYDEST.  */
-static char *
-yystpcpy (char *yydest, const char *yysrc)
-{
-  char *yyd = yydest;
-  const char *yys = yysrc;
-
-  while ((*yyd++ = *yys++) != '\0')
-    continue;
-
-  return yyd - 1;
-}
-#  endif
-# endif
-
-# ifndef yytnamerr
-/* Copy to YYRES the contents of YYSTR after stripping away unnecessary
-   quotes and backslashes, so that it's suitable for yyerror.  The
-   heuristic is that double-quoting is unnecessary unless the string
-   contains an apostrophe, a comma, or backslash (other than
-   backslash-backslash).  YYSTR is taken from yytname.  If YYRES is
-   null, do not copy; instead, return the length of what the result
-   would have been.  */
-static YYSIZE_T
-yytnamerr (char *yyres, const char *yystr)
-{
-  if (*yystr == '"')
-    {
-      YYSIZE_T yyn = 0;
-      char const *yyp = yystr;
-
-      for (;;)
-        switch (*++yyp)
-          {
-          case '\'':
-          case ',':
-            goto do_not_strip_quotes;
-
-          case '\\':
-            if (*++yyp != '\\')
-              goto do_not_strip_quotes;
-            /* Fall through.  */
-          default:
-            if (yyres)
-              yyres[yyn] = *yyp;
-            yyn++;
-            break;
-
-          case '"':
-            if (yyres)
-              yyres[yyn] = '\0';
-            return yyn;
-          }
-    do_not_strip_quotes: ;
-    }
-
-  if (! yyres)
-    return yystrlen (yystr);
-
-  return yystpcpy (yyres, yystr) - yyres;
-}
-# endif
-
-/* Copy into *YYMSG, which is of size *YYMSG_ALLOC, an error message
-   about the unexpected token YYTOKEN for the state stack whose top is
-   YYSSP.
-
-   Return 0 if *YYMSG was successfully written.  Return 1 if *YYMSG is
-   not large enough to hold the message.  In that case, also set
-   *YYMSG_ALLOC to the required number of bytes.  Return 2 if the
-   required number of bytes is too large to store.  */
-static int
-yysyntax_error (YYSIZE_T *yymsg_alloc, char **yymsg,
-                yytype_int16 *yyssp, int yytoken)
-{
-  YYSIZE_T yysize0 = yytnamerr (YY_NULLPTR, yytname[yytoken]);
-  YYSIZE_T yysize = yysize0;
-  enum { YYERROR_VERBOSE_ARGS_MAXIMUM = 5 };
-  /* Internationalized format string. */
-  const char *yyformat = YY_NULLPTR;
-  /* Arguments of yyformat. */
-  char const *yyarg[YYERROR_VERBOSE_ARGS_MAXIMUM];
-  /* Number of reported tokens (one for the "unexpected", one per
-     "expected"). */
-  int yycount = 0;
-
-  /* There are many possibilities here to consider:
-     - If this state is a consistent state with a default action, then
-       the only way this function was invoked is if the default action
-       is an error action.  In that case, don't check for expected
-       tokens because there are none.
-     - The only way there can be no lookahead present (in yychar) is if
-       this state is a consistent state with a default action.  Thus,
-       detecting the absence of a lookahead is sufficient to determine
-       that there is no unexpected or expected token to report.  In that
-       case, just report a simple "syntax error".
-     - Don't assume there isn't a lookahead just because this state is a
-       consistent state with a default action.  There might have been a
-       previous inconsistent state, consistent state with a non-default
-       action, or user semantic action that manipulated yychar.
-     - Of course, the expected token list depends on states to have
-       correct lookahead information, and it depends on the parser not
-       to perform extra reductions after fetching a lookahead from the
-       scanner and before detecting a syntax error.  Thus, state merging
-       (from LALR or IELR) and default reductions corrupt the expected
-       token list.  However, the list is correct for canonical LR with
-       one exception: it will still contain any token that will not be
-       accepted due to an error action in a later state.
-  */
-  if (yytoken != YYEMPTY)
-    {
-      int yyn = yypact[*yyssp];
-      yyarg[yycount++] = yytname[yytoken];
-      if (!yypact_value_is_default (yyn))
-        {
-          /* Start YYX at -YYN if negative to avoid negative indexes in
-             YYCHECK.  In other words, skip the first -YYN actions for
-             this state because they are default actions.  */
-          int yyxbegin = yyn < 0 ? -yyn : 0;
-          /* Stay within bounds of both yycheck and yytname.  */
-          int yychecklim = YYLAST - yyn + 1;
-          int yyxend = yychecklim < YYNTOKENS ? yychecklim : YYNTOKENS;
-          int yyx;
-
-          for (yyx = yyxbegin; yyx < yyxend; ++yyx)
-            if (yycheck[yyx + yyn] == yyx && yyx != YYTERROR
-                && !yytable_value_is_error (yytable[yyx + yyn]))
-              {
-                if (yycount == YYERROR_VERBOSE_ARGS_MAXIMUM)
-                  {
-                    yycount = 1;
-                    yysize = yysize0;
-                    break;
-                  }
-                yyarg[yycount++] = yytname[yyx];
-                {
-                  YYSIZE_T yysize1 = yysize + yytnamerr (YY_NULLPTR, yytname[yyx]);
-                  if (! (yysize <= yysize1
-                         && yysize1 <= YYSTACK_ALLOC_MAXIMUM))
-                    return 2;
-                  yysize = yysize1;
-                }
-              }
-        }
-    }
-
-  switch (yycount)
-    {
-# define YYCASE_(N, S)                      \
-      case N:                               \
-        yyformat = S;                       \
-      break
-      YYCASE_(0, YY_("syntax error"));
-      YYCASE_(1, YY_("syntax error, unexpected %s"));
-      YYCASE_(2, YY_("syntax error, unexpected %s, expecting %s"));
-      YYCASE_(3, YY_("syntax error, unexpected %s, expecting %s or %s"));
-      YYCASE_(4, YY_("syntax error, unexpected %s, expecting %s or %s or %s"));
-      YYCASE_(5, YY_("syntax error, unexpected %s, expecting %s or %s or %s or %s"));
-# undef YYCASE_
-    }
-
-  {
-    YYSIZE_T yysize1 = yysize + yystrlen (yyformat);
-    if (! (yysize <= yysize1 && yysize1 <= YYSTACK_ALLOC_MAXIMUM))
-      return 2;
-    yysize = yysize1;
-  }
-
-  if (*yymsg_alloc < yysize)
-    {
-      *yymsg_alloc = 2 * yysize;
-      if (! (yysize <= *yymsg_alloc
-             && *yymsg_alloc <= YYSTACK_ALLOC_MAXIMUM))
-        *yymsg_alloc = YYSTACK_ALLOC_MAXIMUM;
-      return 1;
-    }
-
-  /* Avoid sprintf, as that infringes on the user's name space.
-     Don't have undefined behavior even if the translation
-     produced a string with the wrong number of "%s"s.  */
-  {
-    char *yyp = *yymsg;
-    int yyi = 0;
-    while ((*yyp = *yyformat) != '\0')
-      if (*yyp == '%' && yyformat[1] == 's' && yyi < yycount)
-        {
-          yyp += yytnamerr (yyp, yyarg[yyi++]);
-          yyformat += 2;
-        }
-      else
-        {
-          yyp++;
-          yyformat++;
-        }
-  }
-  return 0;
-}
-#endif /* YYERROR_VERBOSE */
-
-/*-----------------------------------------------.
-| Release the memory associated to this symbol.  |
-`-----------------------------------------------*/
-
-static void
-yydestruct (const char *yymsg, int yytype, YYSTYPE *yyvaluep)
-{
-  YYUSE (yyvaluep);
-  if (!yymsg)
-    yymsg = "Deleting";
-  YY_SYMBOL_PRINT (yymsg, yytype, yyvaluep, yylocationp);
-
-  YY_IGNORE_MAYBE_UNINITIALIZED_BEGIN
-  YYUSE (yytype);
-  YY_IGNORE_MAYBE_UNINITIALIZED_END
-}
-
-
-
-
-/* The lookahead symbol.  */
-int yychar;
-
-/* The semantic value of the lookahead symbol.  */
-YYSTYPE yylval;
-/* Number of syntax errors so far.  */
-int yynerrs;
-
-
-/*----------.
-| yyparse.  |
-`----------*/
-
-int
-yyparse (void)
-{
-    int yystate;
-    /* Number of tokens to shift before error messages enabled.  */
-    int yyerrstatus;
-
-    /* The stacks and their tools:
-       'yyss': related to states.
-       'yyvs': related to semantic values.
-
-       Refer to the stacks through separate pointers, to allow yyoverflow
-       to reallocate them elsewhere.  */
-
-    /* The state stack.  */
-    yytype_int16 yyssa[YYINITDEPTH];
-    yytype_int16 *yyss;
-    yytype_int16 *yyssp;
-
-    /* The semantic value stack.  */
-    YYSTYPE yyvsa[YYINITDEPTH];
-    YYSTYPE *yyvs;
-    YYSTYPE *yyvsp;
-
-    YYSIZE_T yystacksize;
-
-  int yyn;
-  int yyresult;
-  /* Lookahead token as an internal (translated) token number.  */
-  int yytoken = 0;
-  /* The variables used to return semantic value and location from the
-     action routines.  */
-  YYSTYPE yyval;
-
-#if YYERROR_VERBOSE
-  /* Buffer for error messages, and its allocated size.  */
-  char yymsgbuf[128];
-  char *yymsg = yymsgbuf;
-  YYSIZE_T yymsg_alloc = sizeof yymsgbuf;
-#endif
-
-#define YYPOPSTACK(N)   (yyvsp -= (N), yyssp -= (N))
-
-  /* The number of symbols on the RHS of the reduced rule.
-     Keep to zero when no symbol should be popped.  */
-  int yylen = 0;
-
-  yyssp = yyss = yyssa;
-  yyvsp = yyvs = yyvsa;
-  yystacksize = YYINITDEPTH;
-
-  YYDPRINTF ((stderr, "Starting parse\n"));
-
-  yystate = 0;
-  yyerrstatus = 0;
-  yynerrs = 0;
-  yychar = YYEMPTY; /* Cause a token to be read.  */
-  goto yysetstate;
-
-/*------------------------------------------------------------.
-| yynewstate -- Push a new state, which is found in yystate.  |
-`------------------------------------------------------------*/
- yynewstate:
-  /* In all cases, when you get here, the value and location stacks
-     have just been pushed.  So pushing a state here evens the stacks.  */
-  yyssp++;
-
- yysetstate:
-  *yyssp = yystate;
-
-  if (yyss + yystacksize - 1 <= yyssp)
-    {
-      /* Get the current used size of the three stacks, in elements.  */
-      YYSIZE_T yysize = yyssp - yyss + 1;
-
-#ifdef yyoverflow
-      {
-        /* Give user a chance to reallocate the stack.  Use copies of
-           these so that the &'s don't force the real ones into
-           memory.  */
-        YYSTYPE *yyvs1 = yyvs;
-        yytype_int16 *yyss1 = yyss;
-
-        /* Each stack pointer address is followed by the size of the
-           data in use in that stack, in bytes.  This used to be a
-           conditional around just the two extra args, but that might
-           be undefined if yyoverflow is a macro.  */
-        yyoverflow (YY_("memory exhausted"),
-                    &yyss1, yysize * sizeof (*yyssp),
-                    &yyvs1, yysize * sizeof (*yyvsp),
-                    &yystacksize);
-
-        yyss = yyss1;
-        yyvs = yyvs1;
-      }
-#else /* no yyoverflow */
-# ifndef YYSTACK_RELOCATE
-      goto yyexhaustedlab;
-# else
-      /* Extend the stack our own way.  */
-      if (YYMAXDEPTH <= yystacksize)
-        goto yyexhaustedlab;
-      yystacksize *= 2;
-      if (YYMAXDEPTH < yystacksize)
-        yystacksize = YYMAXDEPTH;
-
-      {
-        yytype_int16 *yyss1 = yyss;
-        union yyalloc *yyptr =
-          (union yyalloc *) YYSTACK_ALLOC (YYSTACK_BYTES (yystacksize));
-        if (! yyptr)
-          goto yyexhaustedlab;
-        YYSTACK_RELOCATE (yyss_alloc, yyss);
-        YYSTACK_RELOCATE (yyvs_alloc, yyvs);
-#  undef YYSTACK_RELOCATE
-        if (yyss1 != yyssa)
-          YYSTACK_FREE (yyss1);
-      }
-# endif
-#endif /* no yyoverflow */
-
-      yyssp = yyss + yysize - 1;
-      yyvsp = yyvs + yysize - 1;
-
-      YYDPRINTF ((stderr, "Stack size increased to %lu\n",
-                  (unsigned long int) yystacksize));
-
-      if (yyss + yystacksize - 1 <= yyssp)
-        YYABORT;
-    }
-
-  YYDPRINTF ((stderr, "Entering state %d\n", yystate));
-
-  if (yystate == YYFINAL)
-    YYACCEPT;
-
-  goto yybackup;
-
-/*-----------.
-| yybackup.  |
-`-----------*/
-yybackup:
-
-  /* Do appropriate processing given the current state.  Read a
-     lookahead token if we need one and don't already have one.  */
-
-  /* First try to decide what to do without reference to lookahead token.  */
-  yyn = yypact[yystate];
-  if (yypact_value_is_default (yyn))
-    goto yydefault;
-
-  /* Not known => get a lookahead token if don't already have one.  */
-
-  /* YYCHAR is either YYEMPTY or YYEOF or a valid lookahead symbol.  */
-  if (yychar == YYEMPTY)
-    {
-      YYDPRINTF ((stderr, "Reading a token: "));
-      yychar = yylex ();
-    }
-
-  if (yychar <= YYEOF)
-    {
-      yychar = yytoken = YYEOF;
-      YYDPRINTF ((stderr, "Now at end of input.\n"));
-    }
-  else
-    {
-      yytoken = YYTRANSLATE (yychar);
-      YY_SYMBOL_PRINT ("Next token is", yytoken, &yylval, &yylloc);
-    }
-
-  /* If the proper action on seeing token YYTOKEN is to reduce or to
-     detect an error, take that action.  */
-  yyn += yytoken;
-  if (yyn < 0 || YYLAST < yyn || yycheck[yyn] != yytoken)
-    goto yydefault;
-  yyn = yytable[yyn];
-  if (yyn <= 0)
-    {
-      if (yytable_value_is_error (yyn))
-        goto yyerrlab;
-      yyn = -yyn;
-      goto yyreduce;
-    }
-
-  /* Count tokens shifted since error; after three, turn off error
-     status.  */
-  if (yyerrstatus)
-    yyerrstatus--;
-
-  /* Shift the lookahead token.  */
-  YY_SYMBOL_PRINT ("Shifting", yytoken, &yylval, &yylloc);
-
-  /* Discard the shifted token.  */
-  yychar = YYEMPTY;
-
-  yystate = yyn;
-  YY_IGNORE_MAYBE_UNINITIALIZED_BEGIN
-  *++yyvsp = yylval;
-  YY_IGNORE_MAYBE_UNINITIALIZED_END
-
-  goto yynewstate;
-
-
-/*-----------------------------------------------------------.
-| yydefault -- do the default action for the current state.  |
-`-----------------------------------------------------------*/
-yydefault:
-  yyn = yydefact[yystate];
-  if (yyn == 0)
-    goto yyerrlab;
-  goto yyreduce;
-
-
-/*-----------------------------.
-| yyreduce -- Do a reduction.  |
-`-----------------------------*/
-yyreduce:
-  /* yyn is the number of a rule to reduce with.  */
-  yylen = yyr2[yyn];
-
-  /* If YYLEN is nonzero, implement the default value of the action:
-     '$$ = $1'.
-
-     Otherwise, the following line sets YYVAL to garbage.
-     This behavior is undocumented and Bison
-     users should not rely upon it.  Assigning to YYVAL
-     unconditionally makes the parser a bit smaller, and it avoids a
-     GCC warning that YYVAL may be used uninitialized.  */
-  yyval = yyvsp[1-yylen];
-
-
-  YY_REDUCE_PRINT (yyn);
-  switch (yyn)
-    {
-        case 3:
-#line 277 "pic.y" /* yacc.c:1646  */
-    {
-		  if (olist.head)
-		    print_picture(olist.head);
-		}
-#line 2260 "pic.cpp" /* yacc.c:1646  */
-    break;
-
-  case 4:
-#line 286 "pic.y" /* yacc.c:1646  */
-    { (yyval.pl) = (yyvsp[-1].pl); }
-#line 2266 "pic.cpp" /* yacc.c:1646  */
-    break;
-
-  case 5:
-#line 291 "pic.y" /* yacc.c:1646  */
-    { (yyval.pl) = (yyvsp[0].pl); }
-#line 2272 "pic.cpp" /* yacc.c:1646  */
-    break;
-
-  case 6:
-#line 293 "pic.y" /* yacc.c:1646  */
-    { (yyval.pl) = (yyvsp[-2].pl); }
-#line 2278 "pic.cpp" /* yacc.c:1646  */
-    break;
-
-  case 11:
-#line 308 "pic.y" /* yacc.c:1646  */
-    {
-		  a_delete graphname;
-		  graphname = new char[strlen((yyvsp[0].str)) + 1];
-		  strcpy(graphname, (yyvsp[0].str));
-		  a_delete (yyvsp[0].str);
-		}
-#line 2289 "pic.cpp" /* yacc.c:1646  */
-    break;
-
-  case 12:
-#line 316 "pic.y" /* yacc.c:1646  */
-    {
-		  define_variable((yyvsp[-2].str), (yyvsp[0].x));
-		  a_delete (yyvsp[-2].str);
-		}
-#line 2298 "pic.cpp" /* yacc.c:1646  */
-    break;
-
-  case 13:
-#line 321 "pic.y" /* yacc.c:1646  */
-    {
-		  place *p = lookup_label((yyvsp[-3].str));
-		  if (!p) {
-		    lex_error("variable `%1' not defined", (yyvsp[-3].str));
-		    YYABORT;
-		  }
-		  p->obj = 0;
-		  p->x = (yyvsp[0].x);
-		  p->y = 0.0;
-		  a_delete (yyvsp[-3].str);
-		}
-#line 2314 "pic.cpp" /* yacc.c:1646  */
-    break;
-
-  case 14:
-#line 333 "pic.y" /* yacc.c:1646  */
-    { current_direction = UP_DIRECTION; }
-#line 2320 "pic.cpp" /* yacc.c:1646  */
-    break;
-
-  case 15:
-#line 335 "pic.y" /* yacc.c:1646  */
-    { current_direction = DOWN_DIRECTION; }
-#line 2326 "pic.cpp" /* yacc.c:1646  */
-    break;
-
-  case 16:
-#line 337 "pic.y" /* yacc.c:1646  */
-    { current_direction = LEFT_DIRECTION; }
-#line 2332 "pic.cpp" /* yacc.c:1646  */
-    break;
-
-  case 17:
-#line 339 "pic.y" /* yacc.c:1646  */
-    { current_direction = RIGHT_DIRECTION; }
-#line 2338 "pic.cpp" /* yacc.c:1646  */
-    break;
-
-  case 18:
-#line 341 "pic.y" /* yacc.c:1646  */
-    {
-		  olist.append(make_command_object((yyvsp[0].lstr).str, (yyvsp[0].lstr).filename,
-						   (yyvsp[0].lstr).lineno));
-		}
-#line 2347 "pic.cpp" /* yacc.c:1646  */
-    break;
-
-  case 19:
-#line 346 "pic.y" /* yacc.c:1646  */
-    {
-		  olist.append(make_command_object((yyvsp[0].lstr).str, (yyvsp[0].lstr).filename,
-						   (yyvsp[0].lstr).lineno));
-		}
-#line 2356 "pic.cpp" /* yacc.c:1646  */
-    break;
-
-  case 20:
-#line 351 "pic.y" /* yacc.c:1646  */
-    {
-		  fprintf(stderr, "%s\n", (yyvsp[0].lstr).str);
-		  a_delete (yyvsp[0].lstr).str;
-		  fflush(stderr);
-		}
-#line 2366 "pic.cpp" /* yacc.c:1646  */
-    break;
-
-  case 21:
-#line 357 "pic.y" /* yacc.c:1646  */
-    { delim_flag = 1; }
-#line 2372 "pic.cpp" /* yacc.c:1646  */
-    break;
-
-  case 22:
-#line 359 "pic.y" /* yacc.c:1646  */
-    {
-		  delim_flag = 0;
-		  if (safer_flag)
-		    lex_error("unsafe to run command `%1'", (yyvsp[0].str));
-		  else
-		    system((yyvsp[0].str));
-		  a_delete (yyvsp[0].str);
-		}
-#line 2385 "pic.cpp" /* yacc.c:1646  */
-    break;
-
-  case 23:
-#line 368 "pic.y" /* yacc.c:1646  */
-    {
-		  if (yychar < 0)
-		    do_lookahead();
-		  do_copy((yyvsp[0].lstr).str);
-		  // do not delete the filename
-		}
-#line 2396 "pic.cpp" /* yacc.c:1646  */
-    break;
-
-  case 24:
-#line 375 "pic.y" /* yacc.c:1646  */
-    { delim_flag = 2; }
-#line 2402 "pic.cpp" /* yacc.c:1646  */
-    break;
-
-  case 25:
-#line 377 "pic.y" /* yacc.c:1646  */
-    { delim_flag = 0; }
-#line 2408 "pic.cpp" /* yacc.c:1646  */
-    break;
-
-  case 26:
-#line 379 "pic.y" /* yacc.c:1646  */
-    {
-		  if (yychar < 0)
-		    do_lookahead();
-		  copy_file_thru((yyvsp[-5].lstr).str, (yyvsp[-2].str), (yyvsp[0].str));
-		  // do not delete the filename
-		  a_delete (yyvsp[-2].str);
-		  a_delete (yyvsp[0].str);
-		}
-#line 2421 "pic.cpp" /* yacc.c:1646  */
-    break;
-
-  case 27:
-#line 388 "pic.y" /* yacc.c:1646  */
-    { delim_flag = 2; }
-#line 2427 "pic.cpp" /* yacc.c:1646  */
-    break;
-
-  case 28:
-#line 390 "pic.y" /* yacc.c:1646  */
-    { delim_flag = 0; }
-#line 2433 "pic.cpp" /* yacc.c:1646  */
-    break;
-
-  case 29:
-#line 392 "pic.y" /* yacc.c:1646  */
-    {
-		  if (yychar < 0)
-		    do_lookahead();
-		  copy_rest_thru((yyvsp[-2].str), (yyvsp[0].str));
-		  a_delete (yyvsp[-2].str);
-		  a_delete (yyvsp[0].str);
-		}
-#line 2445 "pic.cpp" /* yacc.c:1646  */
-    break;
-
-  case 30:
-#line 400 "pic.y" /* yacc.c:1646  */
-    { delim_flag = 1; }
-#line 2451 "pic.cpp" /* yacc.c:1646  */
-    break;
-
-  case 31:
-#line 402 "pic.y" /* yacc.c:1646  */
-    {
-		  delim_flag = 0;
-		  if (yychar < 0)
-		    do_lookahead();
-		  do_for((yyvsp[-8].str), (yyvsp[-6].x), (yyvsp[-4].x), (yyvsp[-3].by).is_multiplicative, (yyvsp[-3].by).val, (yyvsp[0].str)); 
-		}
-#line 2462 "pic.cpp" /* yacc.c:1646  */
-    break;
-
-  case 32:
-#line 409 "pic.y" /* yacc.c:1646  */
-    {
-		  if (yychar < 0)
-		    do_lookahead();
-		  if ((yyvsp[0].if_data).x != 0.0)
-		    push_body((yyvsp[0].if_data).body);
-		  a_delete (yyvsp[0].if_data).body;
-		}
-#line 2474 "pic.cpp" /* yacc.c:1646  */
-    break;
-
-  case 33:
-#line 417 "pic.y" /* yacc.c:1646  */
-    { delim_flag = 1; }
-#line 2480 "pic.cpp" /* yacc.c:1646  */
-    break;
-
-  case 34:
-#line 419 "pic.y" /* yacc.c:1646  */
-    {
-		  delim_flag = 0;
-		  if (yychar < 0)
-		    do_lookahead();
-		  if ((yyvsp[-3].if_data).x != 0.0)
-		    push_body((yyvsp[-3].if_data).body);
-		  else
-		    push_body((yyvsp[0].str));
-		  a_delete (yyvsp[-3].if_data).body;
-		  a_delete (yyvsp[0].str);
-		}
-#line 2496 "pic.cpp" /* yacc.c:1646  */
-    break;
-
-  case 36:
-#line 432 "pic.y" /* yacc.c:1646  */
-    { define_variable("scale", 1.0); }
-#line 2502 "pic.cpp" /* yacc.c:1646  */
-    break;
-
-  case 39:
-#line 442 "pic.y" /* yacc.c:1646  */
-    {
-		  reset((yyvsp[0].str));
-		  a_delete (yyvsp[0].str);
-		}
-#line 2511 "pic.cpp" /* yacc.c:1646  */
-    break;
-
-  case 40:
-#line 447 "pic.y" /* yacc.c:1646  */
-    {
-		  reset((yyvsp[0].str));
-		  a_delete (yyvsp[0].str);
-		}
-#line 2520 "pic.cpp" /* yacc.c:1646  */
-    break;
-
-  case 41:
-#line 452 "pic.y" /* yacc.c:1646  */
-    {
-		  reset((yyvsp[0].str));
-		  a_delete (yyvsp[0].str);
-		}
-#line 2529 "pic.cpp" /* yacc.c:1646  */
-    break;
-
-  case 42:
-#line 460 "pic.y" /* yacc.c:1646  */
-    { (yyval.lstr) = (yyvsp[0].lstr); }
-#line 2535 "pic.cpp" /* yacc.c:1646  */
-    break;
-
-  case 43:
-#line 462 "pic.y" /* yacc.c:1646  */
-    {
-		  (yyval.lstr).str = new char[strlen((yyvsp[-1].lstr).str) + strlen((yyvsp[0].lstr).str) + 1];
-		  strcpy((yyval.lstr).str, (yyvsp[-1].lstr).str);
-		  strcat((yyval.lstr).str, (yyvsp[0].lstr).str);
-		  a_delete (yyvsp[-1].lstr).str;
-		  a_delete (yyvsp[0].lstr).str;
-		  if ((yyvsp[-1].lstr).filename) {
-		    (yyval.lstr).filename = (yyvsp[-1].lstr).filename;
-		    (yyval.lstr).lineno = (yyvsp[-1].lstr).lineno;
-		  }
-		  else if ((yyvsp[0].lstr).filename) {
-		    (yyval.lstr).filename = (yyvsp[0].lstr).filename;
-		    (yyval.lstr).lineno = (yyvsp[0].lstr).lineno;
-		  }
-		}
-#line 2555 "pic.cpp" /* yacc.c:1646  */
-    break;
-
-  case 44:
-#line 481 "pic.y" /* yacc.c:1646  */
-    {
-		  (yyval.lstr).str = new char[GDIGITS + 1];
-		  sprintf((yyval.lstr).str, "%g", (yyvsp[0].x));
-		  (yyval.lstr).filename = 0;
-		  (yyval.lstr).lineno = 0;
-		}
-#line 2566 "pic.cpp" /* yacc.c:1646  */
-    break;
-
-  case 45:
-#line 488 "pic.y" /* yacc.c:1646  */
-    { (yyval.lstr) = (yyvsp[0].lstr); }
-#line 2572 "pic.cpp" /* yacc.c:1646  */
-    break;
-
-  case 46:
-#line 490 "pic.y" /* yacc.c:1646  */
-    {
-		  (yyval.lstr).str = new char[GDIGITS + 2 + GDIGITS + 1];
-		  sprintf((yyval.lstr).str, "%g, %g", (yyvsp[0].pair).x, (yyvsp[0].pair).y);
-		  (yyval.lstr).filename = 0;
-		  (yyval.lstr).lineno = 0;
-		}
-#line 2583 "pic.cpp" /* yacc.c:1646  */
-    break;
-
-  case 47:
-#line 500 "pic.y" /* yacc.c:1646  */
-    { delim_flag = 1; }
-#line 2589 "pic.cpp" /* yacc.c:1646  */
-    break;
-
-  case 48:
-#line 502 "pic.y" /* yacc.c:1646  */
-    {
-		  delim_flag = 0;
-		  (yyval.if_data).x = (yyvsp[-3].x);
-		  (yyval.if_data).body = (yyvsp[0].str);
-		}
-#line 2599 "pic.cpp" /* yacc.c:1646  */
-    break;
-
-  case 49:
-#line 511 "pic.y" /* yacc.c:1646  */
-    { (yyval.str) = 0; }
-#line 2605 "pic.cpp" /* yacc.c:1646  */
-    break;
-
-  case 50:
-#line 513 "pic.y" /* yacc.c:1646  */
-    { (yyval.str) = (yyvsp[0].lstr).str; }
-#line 2611 "pic.cpp" /* yacc.c:1646  */
-    break;
-
-  case 51:
-#line 518 "pic.y" /* yacc.c:1646  */
-    { (yyval.x) = (yyvsp[0].x); }
-#line 2617 "pic.cpp" /* yacc.c:1646  */
-    break;
-
-  case 52:
-#line 520 "pic.y" /* yacc.c:1646  */
-    { (yyval.x) = (yyvsp[0].x); }
-#line 2623 "pic.cpp" /* yacc.c:1646  */
-    break;
-
-  case 53:
-#line 525 "pic.y" /* yacc.c:1646  */
-    {
-		  (yyval.x) = strcmp((yyvsp[-2].lstr).str, (yyvsp[0].lstr).str) == 0;
-		  a_delete (yyvsp[-2].lstr).str;
-		  a_delete (yyvsp[0].lstr).str;
-		}
-#line 2633 "pic.cpp" /* yacc.c:1646  */
-    break;
-
-  case 54:
-#line 531 "pic.y" /* yacc.c:1646  */
-    {
-		  (yyval.x) = strcmp((yyvsp[-2].lstr).str, (yyvsp[0].lstr).str) != 0;
-		  a_delete (yyvsp[-2].lstr).str;
-		  a_delete (yyvsp[0].lstr).str;
-		}
-#line 2643 "pic.cpp" /* yacc.c:1646  */
-    break;
-
-  case 55:
-#line 537 "pic.y" /* yacc.c:1646  */
-    { (yyval.x) = ((yyvsp[-2].x) != 0.0 && (yyvsp[0].x) != 0.0); }
-#line 2649 "pic.cpp" /* yacc.c:1646  */
-    break;
-
-  case 56:
-#line 539 "pic.y" /* yacc.c:1646  */
-    { (yyval.x) = ((yyvsp[-2].x) != 0.0 && (yyvsp[0].x) != 0.0); }
-#line 2655 "pic.cpp" /* yacc.c:1646  */
-    break;
-
-  case 57:
-#line 541 "pic.y" /* yacc.c:1646  */
-    { (yyval.x) = ((yyvsp[-2].x) != 0.0 && (yyvsp[0].x) != 0.0); }
-#line 2661 "pic.cpp" /* yacc.c:1646  */
-    break;
-
-  case 58:
-#line 543 "pic.y" /* yacc.c:1646  */
-    { (yyval.x) = ((yyvsp[-2].x) != 0.0 || (yyvsp[0].x) != 0.0); }
-#line 2667 "pic.cpp" /* yacc.c:1646  */
-    break;
-
-  case 59:
-#line 545 "pic.y" /* yacc.c:1646  */
-    { (yyval.x) = ((yyvsp[-2].x) != 0.0 || (yyvsp[0].x) != 0.0); }
-#line 2673 "pic.cpp" /* yacc.c:1646  */
-    break;
-
-  case 60:
-#line 547 "pic.y" /* yacc.c:1646  */
-    { (yyval.x) = ((yyvsp[-2].x) != 0.0 || (yyvsp[0].x) != 0.0); }
-#line 2679 "pic.cpp" /* yacc.c:1646  */
-    break;
-
-  case 61:
-#line 549 "pic.y" /* yacc.c:1646  */
-    { (yyval.x) = ((yyvsp[0].x) == 0.0); }
-#line 2685 "pic.cpp" /* yacc.c:1646  */
-    break;
-
-  case 62:
-#line 555 "pic.y" /* yacc.c:1646  */
-    {
-		  (yyval.by).val = 1.0;
-		  (yyval.by).is_multiplicative = 0;
-		}
-#line 2694 "pic.cpp" /* yacc.c:1646  */
-    break;
-
-  case 63:
-#line 560 "pic.y" /* yacc.c:1646  */
-    {
-		  (yyval.by).val = (yyvsp[0].x);
-		  (yyval.by).is_multiplicative = 0;
-		}
-#line 2703 "pic.cpp" /* yacc.c:1646  */
-    break;
-
-  case 64:
-#line 565 "pic.y" /* yacc.c:1646  */
-    {
-		  (yyval.by).val = (yyvsp[0].x);
-		  (yyval.by).is_multiplicative = 1;
-		}
-#line 2712 "pic.cpp" /* yacc.c:1646  */
-    break;
-
-  case 65:
-#line 573 "pic.y" /* yacc.c:1646  */
-    {
-		  (yyval.pl).obj = (yyvsp[0].spec)->make_object(&current_position,
-					   &current_direction);
-		  if ((yyval.pl).obj == 0)
-		    YYABORT;
-		  delete (yyvsp[0].spec);
-		  if ((yyval.pl).obj)
-		    olist.append((yyval.pl).obj);
-		  else {
-		    (yyval.pl).x = current_position.x;
-		    (yyval.pl).y = current_position.y;
-		  }
-		}
-#line 2730 "pic.cpp" /* yacc.c:1646  */
-    break;
-
-  case 66:
-#line 587 "pic.y" /* yacc.c:1646  */
-    {
-		  (yyval.pl) = (yyvsp[0].pl);
-		  define_label((yyvsp[-3].str), & (yyval.pl));
-		  a_delete (yyvsp[-3].str);
-		}
-#line 2740 "pic.cpp" /* yacc.c:1646  */
-    break;
-
-  case 67:
-#line 593 "pic.y" /* yacc.c:1646  */
-    {
-		  (yyval.pl).obj = 0;
-		  (yyval.pl).x = (yyvsp[0].pair).x;
-		  (yyval.pl).y = (yyvsp[0].pair).y;
-		  define_label((yyvsp[-3].str), & (yyval.pl));
-		  a_delete (yyvsp[-3].str);
-		}
-#line 2752 "pic.cpp" /* yacc.c:1646  */
-    break;
-
-  case 68:
-#line 601 "pic.y" /* yacc.c:1646  */
-    {
-		  (yyval.pl) = (yyvsp[0].pl);
-		  define_label((yyvsp[-3].str), & (yyval.pl));
-		  a_delete (yyvsp[-3].str);
-		}
-#line 2762 "pic.cpp" /* yacc.c:1646  */
-    break;
-
-  case 69:
-#line 607 "pic.y" /* yacc.c:1646  */
-    {
-		  (yyval.state).x = current_position.x;
-		  (yyval.state).y = current_position.y;
-		  (yyval.state).dir = current_direction;
-		}
-#line 2772 "pic.cpp" /* yacc.c:1646  */
-    break;
-
-  case 70:
-#line 613 "pic.y" /* yacc.c:1646  */
-    {
-		  current_position.x = (yyvsp[-2].state).x;
-		  current_position.y = (yyvsp[-2].state).y;
-		  current_direction = (yyvsp[-2].state).dir;
-		}
-#line 2782 "pic.cpp" /* yacc.c:1646  */
-    break;
-
-  case 71:
-#line 619 "pic.y" /* yacc.c:1646  */
-    {
-		  (yyval.pl) = (yyvsp[-3].pl);
-		}
-#line 2790 "pic.cpp" /* yacc.c:1646  */
-    break;
-
-  case 72:
-#line 623 "pic.y" /* yacc.c:1646  */
-    {
-		  (yyval.pl).obj = 0;
-		  (yyval.pl).x = current_position.x;
-		  (yyval.pl).y = current_position.y;
-		}
-#line 2800 "pic.cpp" /* yacc.c:1646  */
-    break;
-
-  case 73:
-#line 632 "pic.y" /* yacc.c:1646  */
-    {}
-#line 2806 "pic.cpp" /* yacc.c:1646  */
-    break;
-
-  case 74:
-#line 634 "pic.y" /* yacc.c:1646  */
-    {}
-#line 2812 "pic.cpp" /* yacc.c:1646  */
-    break;
-
-  case 75:
-#line 639 "pic.y" /* yacc.c:1646  */
-    { (yyval.spec) = new object_spec(BOX_OBJECT); }
-#line 2818 "pic.cpp" /* yacc.c:1646  */
-    break;
-
-  case 76:
-#line 641 "pic.y" /* yacc.c:1646  */
-    { (yyval.spec) = new object_spec(CIRCLE_OBJECT); }
-#line 2824 "pic.cpp" /* yacc.c:1646  */
-    break;
-
-  case 77:
-#line 643 "pic.y" /* yacc.c:1646  */
-    { (yyval.spec) = new object_spec(ELLIPSE_OBJECT); }
-#line 2830 "pic.cpp" /* yacc.c:1646  */
-    break;
-
-  case 78:
-#line 645 "pic.y" /* yacc.c:1646  */
-    {
-		  (yyval.spec) = new object_spec(ARC_OBJECT);
-		  (yyval.spec)->dir = current_direction;
-		}
-#line 2839 "pic.cpp" /* yacc.c:1646  */
-    break;
-
-  case 79:
-#line 650 "pic.y" /* yacc.c:1646  */
-    {
-		  (yyval.spec) = new object_spec(LINE_OBJECT);
-		  lookup_variable("lineht", & (yyval.spec)->segment_height);
-		  lookup_variable("linewid", & (yyval.spec)->segment_width);
-		  (yyval.spec)->dir = current_direction;
-		}
-#line 2850 "pic.cpp" /* yacc.c:1646  */
-    break;
-
-  case 80:
-#line 657 "pic.y" /* yacc.c:1646  */
-    {
-		  (yyval.spec) = new object_spec(ARROW_OBJECT);
-		  lookup_variable("lineht", & (yyval.spec)->segment_height);
-		  lookup_variable("linewid", & (yyval.spec)->segment_width);
-		  (yyval.spec)->dir = current_direction;
-		}
-#line 2861 "pic.cpp" /* yacc.c:1646  */
-    break;
-
-  case 81:
-#line 664 "pic.y" /* yacc.c:1646  */
-    {
-		  (yyval.spec) = new object_spec(MOVE_OBJECT);
-		  lookup_variable("moveht", & (yyval.spec)->segment_height);
-		  lookup_variable("movewid", & (yyval.spec)->segment_width);
-		  (yyval.spec)->dir = current_direction;
-		}
-#line 2872 "pic.cpp" /* yacc.c:1646  */
-    break;
-
-  case 82:
-#line 671 "pic.y" /* yacc.c:1646  */
-    {
-		  (yyval.spec) = new object_spec(SPLINE_OBJECT);
-		  lookup_variable("lineht", & (yyval.spec)->segment_height);
-		  lookup_variable("linewid", & (yyval.spec)->segment_width);
-		  (yyval.spec)->dir = current_direction;
-		}
-#line 2883 "pic.cpp" /* yacc.c:1646  */
-    break;
-
-  case 83:
-#line 678 "pic.y" /* yacc.c:1646  */
-    {
-		  (yyval.spec) = new object_spec(TEXT_OBJECT);
-		  (yyval.spec)->text = new text_item((yyvsp[0].lstr).str, (yyvsp[0].lstr).filename, (yyvsp[0].lstr).lineno);
-		}
-#line 2892 "pic.cpp" /* yacc.c:1646  */
-    break;
-
-  case 84:
-#line 683 "pic.y" /* yacc.c:1646  */
-    {
-		  (yyval.spec) = new object_spec(TEXT_OBJECT);
-		  (yyval.spec)->text = new text_item(format_number(0, (yyvsp[0].x)), 0, -1);
-		}
-#line 2901 "pic.cpp" /* yacc.c:1646  */
-    break;
-
-  case 85:
-#line 688 "pic.y" /* yacc.c:1646  */
-    {
-		  (yyval.spec) = new object_spec(TEXT_OBJECT);
-		  (yyval.spec)->text = new text_item(format_number((yyvsp[0].lstr).str, (yyvsp[-1].x)),
-					   (yyvsp[0].lstr).filename, (yyvsp[0].lstr).lineno);
-		  a_delete (yyvsp[0].lstr).str;
-		}
-#line 2912 "pic.cpp" /* yacc.c:1646  */
-    break;
-
-  case 86:
-#line 695 "pic.y" /* yacc.c:1646  */
-    {
-		  saved_state *p = new saved_state;
-		  (yyval.pstate) = p;
-		  p->x = current_position.x;
-		  p->y = current_position.y;
-		  p->dir = current_direction;
-		  p->tbl = current_table;
-		  p->prev = current_saved_state;
-		  current_position.x = 0.0;
-		  current_position.y = 0.0;
-		  current_table = new PTABLE(place);
-		  current_saved_state = p;
-		  olist.append(make_mark_object());
-		}
-#line 2931 "pic.cpp" /* yacc.c:1646  */
-    break;
-
-  case 87:
-#line 710 "pic.y" /* yacc.c:1646  */
-    {
-		  current_position.x = (yyvsp[-2].pstate)->x;
-		  current_position.y = (yyvsp[-2].pstate)->y;
-		  current_direction = (yyvsp[-2].pstate)->dir;
-		  (yyval.spec) = new object_spec(BLOCK_OBJECT);
-		  olist.wrap_up_block(& (yyval.spec)->oblist);
-		  (yyval.spec)->tbl = current_table;
-		  current_table = (yyvsp[-2].pstate)->tbl;
-		  current_saved_state = (yyvsp[-2].pstate)->prev;
-		  delete (yyvsp[-2].pstate);
-		}
-#line 2947 "pic.cpp" /* yacc.c:1646  */
-    break;
-
-  case 88:
-#line 722 "pic.y" /* yacc.c:1646  */
-    {
-		  (yyval.spec) = (yyvsp[-2].spec);
-		  (yyval.spec)->height = (yyvsp[0].x);
-		  (yyval.spec)->flags |= HAS_HEIGHT;
-		}
-#line 2957 "pic.cpp" /* yacc.c:1646  */
-    break;
-
-  case 89:
-#line 728 "pic.y" /* yacc.c:1646  */
-    {
-		  (yyval.spec) = (yyvsp[-2].spec);
-		  (yyval.spec)->radius = (yyvsp[0].x);
-		  (yyval.spec)->flags |= HAS_RADIUS;
-		}
-#line 2967 "pic.cpp" /* yacc.c:1646  */
-    break;
-
-  case 90:
-#line 734 "pic.y" /* yacc.c:1646  */
-    {
-		  (yyval.spec) = (yyvsp[-2].spec);
-		  (yyval.spec)->width = (yyvsp[0].x);
-		  (yyval.spec)->flags |= HAS_WIDTH;
-		}
-#line 2977 "pic.cpp" /* yacc.c:1646  */
-    break;
-
-  case 91:
-#line 740 "pic.y" /* yacc.c:1646  */
-    {
-		  (yyval.spec) = (yyvsp[-2].spec);
-		  (yyval.spec)->radius = (yyvsp[0].x)/2.0;
-		  (yyval.spec)->flags |= HAS_RADIUS;
-		}
-#line 2987 "pic.cpp" /* yacc.c:1646  */
-    break;
-
-  case 92:
-#line 746 "pic.y" /* yacc.c:1646  */
-    {
-		  (yyval.spec) = (yyvsp[-1].spec);
-		  (yyval.spec)->flags |= HAS_SEGMENT;
-		  switch ((yyval.spec)->dir) {
-		  case UP_DIRECTION:
-		    (yyval.spec)->segment_pos.y += (yyvsp[0].x);
-		    break;
-		  case DOWN_DIRECTION:
-		    (yyval.spec)->segment_pos.y -= (yyvsp[0].x);
-		    break;
-		  case RIGHT_DIRECTION:
-		    (yyval.spec)->segment_pos.x += (yyvsp[0].x);
-		    break;
-		  case LEFT_DIRECTION:
-		    (yyval.spec)->segment_pos.x -= (yyvsp[0].x);
-		    break;
-		  }
-		}
-#line 3010 "pic.cpp" /* yacc.c:1646  */
-    break;
-
-  case 93:
-#line 765 "pic.y" /* yacc.c:1646  */
-    {
-		  (yyval.spec) = (yyvsp[-1].spec);
-		  (yyval.spec)->dir = UP_DIRECTION;
-		  (yyval.spec)->flags |= HAS_SEGMENT;
-		  (yyval.spec)->segment_pos.y += (yyval.spec)->segment_height;
-		}
-#line 3021 "pic.cpp" /* yacc.c:1646  */
-    break;
-
-  case 94:
-#line 772 "pic.y" /* yacc.c:1646  */
-    {
-		  (yyval.spec) = (yyvsp[-2].spec);
-		  (yyval.spec)->dir = UP_DIRECTION;
-		  (yyval.spec)->flags |= HAS_SEGMENT;
-		  (yyval.spec)->segment_pos.y += (yyvsp[0].x);
-		}
-#line 3032 "pic.cpp" /* yacc.c:1646  */
-    break;
-
-  case 95:
-#line 779 "pic.y" /* yacc.c:1646  */
-    {
-		  (yyval.spec) = (yyvsp[-1].spec);
-		  (yyval.spec)->dir = DOWN_DIRECTION;
-		  (yyval.spec)->flags |= HAS_SEGMENT;
-		  (yyval.spec)->segment_pos.y -= (yyval.spec)->segment_height;
-		}
-#line 3043 "pic.cpp" /* yacc.c:1646  */
-    break;
-
-  case 96:
-#line 786 "pic.y" /* yacc.c:1646  */
-    {
-		  (yyval.spec) = (yyvsp[-2].spec);
-		  (yyval.spec)->dir = DOWN_DIRECTION;
-		  (yyval.spec)->flags |= HAS_SEGMENT;
-		  (yyval.spec)->segment_pos.y -= (yyvsp[0].x);
-		}
-#line 3054 "pic.cpp" /* yacc.c:1646  */
-    break;
-
-  case 97:
-#line 793 "pic.y" /* yacc.c:1646  */
-    {
-		  (yyval.spec) = (yyvsp[-1].spec);
-		  (yyval.spec)->dir = RIGHT_DIRECTION;
-		  (yyval.spec)->flags |= HAS_SEGMENT;
-		  (yyval.spec)->segment_pos.x += (yyval.spec)->segment_width;
-		}
-#line 3065 "pic.cpp" /* yacc.c:1646  */
-    break;
-
-  case 98:
-#line 800 "pic.y" /* yacc.c:1646  */
-    {
-		  (yyval.spec) = (yyvsp[-2].spec);
-		  (yyval.spec)->dir = RIGHT_DIRECTION;
-		  (yyval.spec)->flags |= HAS_SEGMENT;
-		  (yyval.spec)->segment_pos.x += (yyvsp[0].x);
-		}
-#line 3076 "pic.cpp" /* yacc.c:1646  */
-    break;
-
-  case 99:
-#line 807 "pic.y" /* yacc.c:1646  */
-    {
-		  (yyval.spec) = (yyvsp[-1].spec);
-		  (yyval.spec)->dir = LEFT_DIRECTION;
-		  (yyval.spec)->flags |= HAS_SEGMENT;
-		  (yyval.spec)->segment_pos.x -= (yyval.spec)->segment_width;
-		}
-#line 3087 "pic.cpp" /* yacc.c:1646  */
-    break;
-
-  case 100:
-#line 814 "pic.y" /* yacc.c:1646  */
-    {
-		  (yyval.spec) = (yyvsp[-2].spec);
-		  (yyval.spec)->dir = LEFT_DIRECTION;
-		  (yyval.spec)->flags |= HAS_SEGMENT;
-		  (yyval.spec)->segment_pos.x -= (yyvsp[0].x);
-		}
-#line 3098 "pic.cpp" /* yacc.c:1646  */
-    break;
-
-  case 101:
-#line 821 "pic.y" /* yacc.c:1646  */
-    {
-		  (yyval.spec) = (yyvsp[-2].spec);
-		  (yyval.spec)->flags |= HAS_FROM;
-		  (yyval.spec)->from.x = (yyvsp[0].pair).x;
-		  (yyval.spec)->from.y = (yyvsp[0].pair).y;
-		}
-#line 3109 "pic.cpp" /* yacc.c:1646  */
-    break;
-
-  case 102:
-#line 828 "pic.y" /* yacc.c:1646  */
-    {
-		  (yyval.spec) = (yyvsp[-2].spec);
-		  if ((yyval.spec)->flags & HAS_SEGMENT)
-		    (yyval.spec)->segment_list = new segment((yyval.spec)->segment_pos,
-						   (yyval.spec)->segment_is_absolute,
-						   (yyval.spec)->segment_list);
-		  (yyval.spec)->flags |= HAS_SEGMENT;
-		  (yyval.spec)->segment_pos.x = (yyvsp[0].pair).x;
-		  (yyval.spec)->segment_pos.y = (yyvsp[0].pair).y;
-		  (yyval.spec)->segment_is_absolute = 1;
-		  (yyval.spec)->flags |= HAS_TO;
-		  (yyval.spec)->to.x = (yyvsp[0].pair).x;
-		  (yyval.spec)->to.y = (yyvsp[0].pair).y;
-		}
-#line 3128 "pic.cpp" /* yacc.c:1646  */
-    break;
-
-  case 103:
-#line 843 "pic.y" /* yacc.c:1646  */
-    {
-		  (yyval.spec) = (yyvsp[-2].spec);
-		  (yyval.spec)->flags |= HAS_AT;
-		  (yyval.spec)->at.x = (yyvsp[0].pair).x;
-		  (yyval.spec)->at.y = (yyvsp[0].pair).y;
-		  if ((yyval.spec)->type != ARC_OBJECT) {
-		    (yyval.spec)->flags |= HAS_FROM;
-		    (yyval.spec)->from.x = (yyvsp[0].pair).x;
-		    (yyval.spec)->from.y = (yyvsp[0].pair).y;
-		  }
-		}
-#line 3144 "pic.cpp" /* yacc.c:1646  */
-    break;
-
-  case 104:
-#line 855 "pic.y" /* yacc.c:1646  */
-    {
-		  (yyval.spec) = (yyvsp[-2].spec);
-		  (yyval.spec)->flags |= HAS_WITH;
-		  (yyval.spec)->with = (yyvsp[0].pth);
-		}
-#line 3154 "pic.cpp" /* yacc.c:1646  */
-    break;
-
-  case 105:
-#line 861 "pic.y" /* yacc.c:1646  */
-    {
-		  (yyval.spec) = (yyvsp[-2].spec);
-		  (yyval.spec)->flags |= HAS_WITH;
-		  position pos;
-		  pos.x = (yyvsp[0].pair).x;
-		  pos.y = (yyvsp[0].pair).y;
-		  (yyval.spec)->with = new path(pos);
-		}
-#line 3167 "pic.cpp" /* yacc.c:1646  */
-    break;
-
-  case 106:
-#line 870 "pic.y" /* yacc.c:1646  */
-    {
-		  (yyval.spec) = (yyvsp[-2].spec);
-		  (yyval.spec)->flags |= HAS_SEGMENT;
-		  (yyval.spec)->segment_pos.x += (yyvsp[0].pair).x;
-		  (yyval.spec)->segment_pos.y += (yyvsp[0].pair).y;
-		}
-#line 3178 "pic.cpp" /* yacc.c:1646  */
-    break;
-
-  case 107:
-#line 877 "pic.y" /* yacc.c:1646  */
-    {
-		  (yyval.spec) = (yyvsp[-1].spec);
-		  if (!((yyval.spec)->flags & HAS_SEGMENT))
-		    switch ((yyval.spec)->dir) {
-		    case UP_DIRECTION:
-		      (yyval.spec)->segment_pos.y += (yyval.spec)->segment_width;
-		      break;
-		    case DOWN_DIRECTION:
-		      (yyval.spec)->segment_pos.y -= (yyval.spec)->segment_width;
-		      break;
-		    case RIGHT_DIRECTION:
-		      (yyval.spec)->segment_pos.x += (yyval.spec)->segment_width;
-		      break;
-		    case LEFT_DIRECTION:
-		      (yyval.spec)->segment_pos.x -= (yyval.spec)->segment_width;
-		      break;
-		    }
-		  (yyval.spec)->segment_list = new segment((yyval.spec)->segment_pos,
-						 (yyval.spec)->segment_is_absolute,
-						 (yyval.spec)->segment_list);
-		  (yyval.spec)->flags &= ~HAS_SEGMENT;
-		  (yyval.spec)->segment_pos.x = (yyval.spec)->segment_pos.y = 0.0;
-		  (yyval.spec)->segment_is_absolute = 0;
-		}
-#line 3207 "pic.cpp" /* yacc.c:1646  */
-    break;
-
-  case 108:
-#line 902 "pic.y" /* yacc.c:1646  */
-    {
-		  (yyval.spec) = (yyvsp[-1].spec);	// nothing
-		}
-#line 3215 "pic.cpp" /* yacc.c:1646  */
-    break;
-
-  case 109:
-#line 906 "pic.y" /* yacc.c:1646  */
-    {
-		  (yyval.spec) = (yyvsp[-1].spec);
-		  (yyval.spec)->flags |= IS_DOTTED;
-		  lookup_variable("dashwid", & (yyval.spec)->dash_width);
-		}
-#line 3225 "pic.cpp" /* yacc.c:1646  */
-    break;
-
-  case 110:
-#line 912 "pic.y" /* yacc.c:1646  */
-    {
-		  (yyval.spec) = (yyvsp[-2].spec);
-		  (yyval.spec)->flags |= IS_DOTTED;
-		  (yyval.spec)->dash_width = (yyvsp[0].x);
-		}
-#line 3235 "pic.cpp" /* yacc.c:1646  */
-    break;
-
-  case 111:
-#line 918 "pic.y" /* yacc.c:1646  */
-    {
-		  (yyval.spec) = (yyvsp[-1].spec);
-		  (yyval.spec)->flags |= IS_DASHED;
-		  lookup_variable("dashwid", & (yyval.spec)->dash_width);
-		}
-#line 3245 "pic.cpp" /* yacc.c:1646  */
-    break;
-
-  case 112:
-#line 924 "pic.y" /* yacc.c:1646  */
-    {
-		  (yyval.spec) = (yyvsp[-2].spec);
-		  (yyval.spec)->flags |= IS_DASHED;
-		  (yyval.spec)->dash_width = (yyvsp[0].x);
-		}
-#line 3255 "pic.cpp" /* yacc.c:1646  */
-    break;
-
-  case 113:
-#line 930 "pic.y" /* yacc.c:1646  */
-    {
-		  (yyval.spec) = (yyvsp[-1].spec);
-		  (yyval.spec)->flags |= IS_DEFAULT_FILLED;
-		}
-#line 3264 "pic.cpp" /* yacc.c:1646  */
-    break;
-
-  case 114:
-#line 935 "pic.y" /* yacc.c:1646  */
-    {
-		  (yyval.spec) = (yyvsp[-2].spec);
-		  (yyval.spec)->flags |= IS_FILLED;
-		  (yyval.spec)->fill = (yyvsp[0].x);
-		}
-#line 3274 "pic.cpp" /* yacc.c:1646  */
-    break;
-
-  case 115:
-#line 941 "pic.y" /* yacc.c:1646  */
-    {
-		  (yyval.spec) = (yyvsp[-2].spec);
-		  (yyval.spec)->flags |= IS_XSLANTED;
-		  (yyval.spec)->xslanted = (yyvsp[0].x);
-		}
-#line 3284 "pic.cpp" /* yacc.c:1646  */
-    break;
-
-  case 116:
-#line 947 "pic.y" /* yacc.c:1646  */
-    {
-		  (yyval.spec) = (yyvsp[-2].spec);
-		  (yyval.spec)->flags |= IS_YSLANTED;
-		  (yyval.spec)->yslanted = (yyvsp[0].x);
-		}
-#line 3294 "pic.cpp" /* yacc.c:1646  */
-    break;
-
-  case 117:
-#line 953 "pic.y" /* yacc.c:1646  */
-    {
-		  (yyval.spec) = (yyvsp[-2].spec);
-		  (yyval.spec)->flags |= (IS_SHADED | IS_FILLED);
-		  (yyval.spec)->shaded = new char[strlen((yyvsp[0].lstr).str)+1];
-		  strcpy((yyval.spec)->shaded, (yyvsp[0].lstr).str);
-		}
-#line 3305 "pic.cpp" /* yacc.c:1646  */
-    break;
-
-  case 118:
-#line 960 "pic.y" /* yacc.c:1646  */
-    {
-		  (yyval.spec) = (yyvsp[-2].spec);
-		  (yyval.spec)->flags |= (IS_SHADED | IS_OUTLINED | IS_FILLED);
-		  (yyval.spec)->shaded = new char[strlen((yyvsp[0].lstr).str)+1];
-		  strcpy((yyval.spec)->shaded, (yyvsp[0].lstr).str);
-		  (yyval.spec)->outlined = new char[strlen((yyvsp[0].lstr).str)+1];
-		  strcpy((yyval.spec)->outlined, (yyvsp[0].lstr).str);
-		}
-#line 3318 "pic.cpp" /* yacc.c:1646  */
-    break;
-
-  case 119:
-#line 969 "pic.y" /* yacc.c:1646  */
-    {
-		  (yyval.spec) = (yyvsp[-2].spec);
-		  (yyval.spec)->flags |= IS_OUTLINED;
-		  (yyval.spec)->outlined = new char[strlen((yyvsp[0].lstr).str)+1];
-		  strcpy((yyval.spec)->outlined, (yyvsp[0].lstr).str);
-		}
-#line 3329 "pic.cpp" /* yacc.c:1646  */
-    break;
-
-  case 120:
-#line 976 "pic.y" /* yacc.c:1646  */
-    {
-		  (yyval.spec) = (yyvsp[-1].spec);
-		  // line chop chop means line chop 0 chop 0
-		  if ((yyval.spec)->flags & IS_DEFAULT_CHOPPED) {
-		    (yyval.spec)->flags |= IS_CHOPPED;
-		    (yyval.spec)->flags &= ~IS_DEFAULT_CHOPPED;
-		    (yyval.spec)->start_chop = (yyval.spec)->end_chop = 0.0;
-		  }
-		  else if ((yyval.spec)->flags & IS_CHOPPED) {
-		    (yyval.spec)->end_chop = 0.0;
-		  }
-		  else {
-		    (yyval.spec)->flags |= IS_DEFAULT_CHOPPED;
-		  }
-		}
-#line 3349 "pic.cpp" /* yacc.c:1646  */
-    break;
-
-  case 121:
-#line 992 "pic.y" /* yacc.c:1646  */
-    {
-		  (yyval.spec) = (yyvsp[-2].spec);
-		  if ((yyval.spec)->flags & IS_DEFAULT_CHOPPED) {
-		    (yyval.spec)->flags |= IS_CHOPPED;
-		    (yyval.spec)->flags &= ~IS_DEFAULT_CHOPPED;
-		    (yyval.spec)->start_chop = 0.0;
-		    (yyval.spec)->end_chop = (yyvsp[0].x);
-		  }
-		  else if ((yyval.spec)->flags & IS_CHOPPED) {
-		    (yyval.spec)->end_chop = (yyvsp[0].x);
-		  }
-		  else {
-		    (yyval.spec)->start_chop = (yyval.spec)->end_chop = (yyvsp[0].x);
-		    (yyval.spec)->flags |= IS_CHOPPED;
-		  }
-		}
-#line 3370 "pic.cpp" /* yacc.c:1646  */
-    break;
-
-  case 122:
-#line 1009 "pic.y" /* yacc.c:1646  */
-    {
-		  (yyval.spec) = (yyvsp[-1].spec);
-		  (yyval.spec)->flags |= IS_SAME;
-		}
-#line 3379 "pic.cpp" /* yacc.c:1646  */
-    break;
-
-  case 123:
-#line 1014 "pic.y" /* yacc.c:1646  */
-    {
-		  (yyval.spec) = (yyvsp[-1].spec);
-		  (yyval.spec)->flags |= IS_INVISIBLE;
-		}
-#line 3388 "pic.cpp" /* yacc.c:1646  */
-    break;
-
-  case 124:
-#line 1019 "pic.y" /* yacc.c:1646  */
-    {
-		  (yyval.spec) = (yyvsp[-1].spec);
-		  (yyval.spec)->flags |= HAS_LEFT_ARROW_HEAD;
-		}
-#line 3397 "pic.cpp" /* yacc.c:1646  */
-    break;
-
-  case 125:
-#line 1024 "pic.y" /* yacc.c:1646  */
-    {
-		  (yyval.spec) = (yyvsp[-1].spec);
-		  (yyval.spec)->flags |= HAS_RIGHT_ARROW_HEAD;
-		}
-#line 3406 "pic.cpp" /* yacc.c:1646  */
-    break;
-
-  case 126:
-#line 1029 "pic.y" /* yacc.c:1646  */
-    {
-		  (yyval.spec) = (yyvsp[-1].spec);
-		  (yyval.spec)->flags |= (HAS_LEFT_ARROW_HEAD|HAS_RIGHT_ARROW_HEAD);
-		}
-#line 3415 "pic.cpp" /* yacc.c:1646  */
-    break;
-
-  case 127:
-#line 1034 "pic.y" /* yacc.c:1646  */
-    {
-		  (yyval.spec) = (yyvsp[-1].spec);
-		  (yyval.spec)->flags |= IS_CLOCKWISE;
-		}
-#line 3424 "pic.cpp" /* yacc.c:1646  */
-    break;
-
-  case 128:
-#line 1039 "pic.y" /* yacc.c:1646  */
-    {
-		  (yyval.spec) = (yyvsp[-1].spec);
-		  (yyval.spec)->flags &= ~IS_CLOCKWISE;
-		}
-#line 3433 "pic.cpp" /* yacc.c:1646  */
-    break;
-
-  case 129:
-#line 1044 "pic.y" /* yacc.c:1646  */
-    {
-		  (yyval.spec) = (yyvsp[-1].spec);
-		  text_item **p;
-		  for (p = & (yyval.spec)->text; *p; p = &(*p)->next)
-		    ;
-		  *p = new text_item((yyvsp[0].lstr).str, (yyvsp[0].lstr).filename, (yyvsp[0].lstr).lineno);
-		}
-#line 3445 "pic.cpp" /* yacc.c:1646  */
-    break;
-
-  case 130:
-#line 1052 "pic.y" /* yacc.c:1646  */
-    {
-		  (yyval.spec) = (yyvsp[-1].spec);
-		  if ((yyval.spec)->text) {
-		    text_item *p;
-		    for (p = (yyval.spec)->text; p->next; p = p->next)
-		      ;
-		    p->adj.h = LEFT_ADJUST;
-		  }
-		}
-#line 3459 "pic.cpp" /* yacc.c:1646  */
-    break;
-
-  case 131:
-#line 1062 "pic.y" /* yacc.c:1646  */
-    {
-		  (yyval.spec) = (yyvsp[-1].spec);
-		  if ((yyval.spec)->text) {
-		    text_item *p;
-		    for (p = (yyval.spec)->text; p->next; p = p->next)
-		      ;
-		    p->adj.h = RIGHT_ADJUST;
-		  }
-		}
-#line 3473 "pic.cpp" /* yacc.c:1646  */
-    break;
-
-  case 132:
-#line 1072 "pic.y" /* yacc.c:1646  */
-    {
-		  (yyval.spec) = (yyvsp[-1].spec);
-		  if ((yyval.spec)->text) {
-		    text_item *p;
-		    for (p = (yyval.spec)->text; p->next; p = p->next)
-		      ;
-		    p->adj.v = ABOVE_ADJUST;
-		  }
-		}
-#line 3487 "pic.cpp" /* yacc.c:1646  */
-    break;
-
-  case 133:
-#line 1082 "pic.y" /* yacc.c:1646  */
-    {
-		  (yyval.spec) = (yyvsp[-1].spec);
-		  if ((yyval.spec)->text) {
-		    text_item *p;
-		    for (p = (yyval.spec)->text; p->next; p = p->next)
-		      ;
-		    p->adj.v = BELOW_ADJUST;
-		  }
-		}
-#line 3501 "pic.cpp" /* yacc.c:1646  */
-    break;
-
-  case 134:
-#line 1092 "pic.y" /* yacc.c:1646  */
-    {
-		  (yyval.spec) = (yyvsp[-2].spec);
-		  (yyval.spec)->flags |= HAS_THICKNESS;
-		  (yyval.spec)->thickness = (yyvsp[0].x);
-		}
-#line 3511 "pic.cpp" /* yacc.c:1646  */
-    break;
-
-  case 135:
-#line 1098 "pic.y" /* yacc.c:1646  */
-    {
-		  (yyval.spec) = (yyvsp[-1].spec);
-		  (yyval.spec)->flags |= IS_ALIGNED;
-		}
-#line 3520 "pic.cpp" /* yacc.c:1646  */
-    break;
-
-  case 136:
-#line 1106 "pic.y" /* yacc.c:1646  */
-    { (yyval.lstr) = (yyvsp[0].lstr); }
-#line 3526 "pic.cpp" /* yacc.c:1646  */
-    break;
-
-  case 137:
-#line 1108 "pic.y" /* yacc.c:1646  */
-    {
-		  (yyval.lstr).filename = (yyvsp[-2].lstr).filename;
-		  (yyval.lstr).lineno = (yyvsp[-2].lstr).lineno;
-		  (yyval.lstr).str = do_sprintf((yyvsp[-2].lstr).str, (yyvsp[-1].dv).v, (yyvsp[-1].dv).nv);
-		  a_delete (yyvsp[-1].dv).v;
-		  a_delete (yyvsp[-2].lstr).str;
-		}
-#line 3538 "pic.cpp" /* yacc.c:1646  */
-    break;
-
-  case 138:
-#line 1119 "pic.y" /* yacc.c:1646  */
-    {
-		  (yyval.dv).v = 0;
-		  (yyval.dv).nv = 0;
-		  (yyval.dv).maxv = 0;
-		}
-#line 3548 "pic.cpp" /* yacc.c:1646  */
-    break;
-
-  case 139:
-#line 1125 "pic.y" /* yacc.c:1646  */
-    {
-		  (yyval.dv) = (yyvsp[-2].dv);
-		  if ((yyval.dv).nv >= (yyval.dv).maxv) {
-		    if ((yyval.dv).nv == 0) {
-		      (yyval.dv).v = new double[4];
-		      (yyval.dv).maxv = 4;
-		    }
-		    else {
-		      double *oldv = (yyval.dv).v;
-		      (yyval.dv).maxv *= 2;
-#if 0
-		      (yyval.dv).v = new double[(yyval.dv).maxv];
-		      memcpy((yyval.dv).v, oldv, (yyval.dv).nv*sizeof(double));
-#else
-		      // workaround for bug in Compaq C++ V6.5-033
-		      // for Compaq Tru64 UNIX V5.1A (Rev. 1885)
-		      double *foo = new double[(yyval.dv).maxv];
-		      memcpy(foo, oldv, (yyval.dv).nv*sizeof(double));
-		      (yyval.dv).v = foo;
-#endif
-		      a_delete oldv;
-		    }
-		  }
-		  (yyval.dv).v[(yyval.dv).nv] = (yyvsp[0].x);
-		  (yyval.dv).nv += 1;
-		}
-#line 3579 "pic.cpp" /* yacc.c:1646  */
-    break;
-
-  case 140:
-#line 1155 "pic.y" /* yacc.c:1646  */
-    { (yyval.pair) = (yyvsp[0].pair); }
-#line 3585 "pic.cpp" /* yacc.c:1646  */
-    break;
-
-  case 141:
-#line 1157 "pic.y" /* yacc.c:1646  */
-    {
-		  position pos = (yyvsp[0].pl);
-		  (yyval.pair).x = pos.x;
-		  (yyval.pair).y = pos.y;
-		}
-#line 3595 "pic.cpp" /* yacc.c:1646  */
-    break;
-
-  case 142:
-#line 1163 "pic.y" /* yacc.c:1646  */
-    {
-		  position pos = (yyvsp[-1].pl);
-		  (yyval.pair).x = pos.x;
-		  (yyval.pair).y = pos.y;
-		}
-#line 3605 "pic.cpp" /* yacc.c:1646  */
-    break;
-
-  case 143:
-#line 1172 "pic.y" /* yacc.c:1646  */
-    { (yyval.pair) = (yyvsp[0].pair); }
-#line 3611 "pic.cpp" /* yacc.c:1646  */
-    break;
-
-  case 144:
-#line 1174 "pic.y" /* yacc.c:1646  */
-    {
-		  (yyval.pair).x = (yyvsp[-2].pair).x + (yyvsp[0].pair).x;
-		  (yyval.pair).y = (yyvsp[-2].pair).y + (yyvsp[0].pair).y;
-		}
-#line 3620 "pic.cpp" /* yacc.c:1646  */
-    break;
-
-  case 145:
-#line 1179 "pic.y" /* yacc.c:1646  */
-    {
-		  (yyval.pair).x = (yyvsp[-3].pair).x + (yyvsp[-1].pair).x;
-		  (yyval.pair).y = (yyvsp[-3].pair).y + (yyvsp[-1].pair).y;
-		}
-#line 3629 "pic.cpp" /* yacc.c:1646  */
-    break;
-
-  case 146:
-#line 1184 "pic.y" /* yacc.c:1646  */
-    {
-		  (yyval.pair).x = (yyvsp[-2].pair).x - (yyvsp[0].pair).x;
-		  (yyval.pair).y = (yyvsp[-2].pair).y - (yyvsp[0].pair).y;
-		}
-#line 3638 "pic.cpp" /* yacc.c:1646  */
-    break;
-
-  case 147:
-#line 1189 "pic.y" /* yacc.c:1646  */
-    {
-		  (yyval.pair).x = (yyvsp[-3].pair).x - (yyvsp[-1].pair).x;
-		  (yyval.pair).y = (yyvsp[-3].pair).y - (yyvsp[-1].pair).y;
-		}
-#line 3647 "pic.cpp" /* yacc.c:1646  */
-    break;
-
-  case 148:
-#line 1194 "pic.y" /* yacc.c:1646  */
-    {
-		  (yyval.pair).x = (yyvsp[-3].pair).x;
-		  (yyval.pair).y = (yyvsp[-1].pair).y;
-		}
-#line 3656 "pic.cpp" /* yacc.c:1646  */
-    break;
-
-  case 149:
-#line 1199 "pic.y" /* yacc.c:1646  */
-    {
-		  (yyval.pair).x = (1.0 - (yyvsp[-4].x))*(yyvsp[-2].pair).x + (yyvsp[-4].x)*(yyvsp[0].pair).x;
-		  (yyval.pair).y = (1.0 - (yyvsp[-4].x))*(yyvsp[-2].pair).y + (yyvsp[-4].x)*(yyvsp[0].pair).y;
-		}
-#line 3665 "pic.cpp" /* yacc.c:1646  */
-    break;
-
-  case 150:
-#line 1204 "pic.y" /* yacc.c:1646  */
-    {
-		  (yyval.pair).x = (1.0 - (yyvsp[-5].x))*(yyvsp[-3].pair).x + (yyvsp[-5].x)*(yyvsp[-1].pair).x;
-		  (yyval.pair).y = (1.0 - (yyvsp[-5].x))*(yyvsp[-3].pair).y + (yyvsp[-5].x)*(yyvsp[-1].pair).y;
-		}
-#line 3674 "pic.cpp" /* yacc.c:1646  */
-    break;
-
-  case 151:
-#line 1210 "pic.y" /* yacc.c:1646  */
-    {
-		  (yyval.pair).x = (1.0 - (yyvsp[-5].x))*(yyvsp[-3].pair).x + (yyvsp[-5].x)*(yyvsp[-1].pair).x;
-		  (yyval.pair).y = (1.0 - (yyvsp[-5].x))*(yyvsp[-3].pair).y + (yyvsp[-5].x)*(yyvsp[-1].pair).y;
-		}
-#line 3683 "pic.cpp" /* yacc.c:1646  */
-    break;
-
-  case 152:
-#line 1215 "pic.y" /* yacc.c:1646  */
-    {
-		  (yyval.pair).x = (1.0 - (yyvsp[-6].x))*(yyvsp[-4].pair).x + (yyvsp[-6].x)*(yyvsp[-2].pair).x;
-		  (yyval.pair).y = (1.0 - (yyvsp[-6].x))*(yyvsp[-4].pair).y + (yyvsp[-6].x)*(yyvsp[-2].pair).y;
-		}
-#line 3692 "pic.cpp" /* yacc.c:1646  */
-    break;
-
-  case 155:
-#line 1228 "pic.y" /* yacc.c:1646  */
-    {
-		  (yyval.pair).x = (yyvsp[-2].x);
-		  (yyval.pair).y = (yyvsp[0].x);
-		}
-#line 3701 "pic.cpp" /* yacc.c:1646  */
-    break;
-
-  case 156:
-#line 1233 "pic.y" /* yacc.c:1646  */
-    { (yyval.pair) = (yyvsp[-1].pair); }
-#line 3707 "pic.cpp" /* yacc.c:1646  */
-    break;
-
-  case 157:
-#line 1239 "pic.y" /* yacc.c:1646  */
-    { (yyval.pl) = (yyvsp[0].pl); }
-#line 3713 "pic.cpp" /* yacc.c:1646  */
-    break;
-
-  case 158:
-#line 1241 "pic.y" /* yacc.c:1646  */
-    {
-		  path pth((yyvsp[0].crn));
-		  if (!pth.follow((yyvsp[-1].pl), & (yyval.pl)))
-		    YYABORT;
-		}
-#line 3723 "pic.cpp" /* yacc.c:1646  */
-    break;
-
-  case 159:
-#line 1247 "pic.y" /* yacc.c:1646  */
-    {
-		  path pth((yyvsp[-1].crn));
-		  if (!pth.follow((yyvsp[0].pl), & (yyval.pl)))
-		    YYABORT;
-		}
-#line 3733 "pic.cpp" /* yacc.c:1646  */
-    break;
-
-  case 160:
-#line 1253 "pic.y" /* yacc.c:1646  */
-    {
-		  path pth((yyvsp[-2].crn));
-		  if (!pth.follow((yyvsp[0].pl), & (yyval.pl)))
-		    YYABORT;
-		}
-#line 3743 "pic.cpp" /* yacc.c:1646  */
-    break;
-
-  case 161:
-#line 1259 "pic.y" /* yacc.c:1646  */
-    {
-		  (yyval.pl).x = current_position.x;
-		  (yyval.pl).y = current_position.y;
-		  (yyval.pl).obj = 0;
-		}
-#line 3753 "pic.cpp" /* yacc.c:1646  */
-    break;
-
-  case 162:
-#line 1268 "pic.y" /* yacc.c:1646  */
-    {
-		  place *p = lookup_label((yyvsp[0].str));
-		  if (!p) {
-		    lex_error("there is no place `%1'", (yyvsp[0].str));
-		    YYABORT;
-		  }
-		  (yyval.pl) = *p;
-		  a_delete (yyvsp[0].str);
-		}
-#line 3767 "pic.cpp" /* yacc.c:1646  */
-    break;
-
-  case 163:
-#line 1278 "pic.y" /* yacc.c:1646  */
-    { (yyval.pl).obj = (yyvsp[0].obj); }
-#line 3773 "pic.cpp" /* yacc.c:1646  */
-    break;
-
-  case 164:
-#line 1280 "pic.y" /* yacc.c:1646  */
-    {
-		  path pth((yyvsp[0].str));
-		  if (!pth.follow((yyvsp[-2].pl), & (yyval.pl)))
-		    YYABORT;
-		}
-#line 3783 "pic.cpp" /* yacc.c:1646  */
-    break;
-
-  case 165:
-#line 1289 "pic.y" /* yacc.c:1646  */
-    { (yyval.n) = (yyvsp[0].n); }
-#line 3789 "pic.cpp" /* yacc.c:1646  */
-    break;
-
-  case 166:
-#line 1291 "pic.y" /* yacc.c:1646  */
-    {
-		  // XXX Check for overflow (and non-integers?).
-		  (yyval.n) = (int)(yyvsp[-1].x);
-		}
-#line 3798 "pic.cpp" /* yacc.c:1646  */
-    break;
-
-  case 167:
-#line 1299 "pic.y" /* yacc.c:1646  */
-    { (yyval.n) = 1; }
-#line 3804 "pic.cpp" /* yacc.c:1646  */
-    break;
-
-  case 168:
-#line 1301 "pic.y" /* yacc.c:1646  */
-    { (yyval.n) = (yyvsp[-1].n); }
-#line 3810 "pic.cpp" /* yacc.c:1646  */
-    break;
-
-  case 169:
-#line 1306 "pic.y" /* yacc.c:1646  */
-    {
-		  int count = 0;
-		  object *p;
-		  for (p = olist.head; p != 0; p = p->next)
-		    if (p->type() == (yyvsp[0].obtype) && ++count == (yyvsp[-1].n)) {
-		      (yyval.obj) = p;
-		      break;
-		    }
-		  if (p == 0) {
-		    lex_error("there is no %1%2 %3", (yyvsp[-1].n), ordinal_postfix((yyvsp[-1].n)),
-			      object_type_name((yyvsp[0].obtype)));
-		    YYABORT;
-		  }
-		}
-#line 3829 "pic.cpp" /* yacc.c:1646  */
-    break;
-
-  case 170:
-#line 1321 "pic.y" /* yacc.c:1646  */
-    {
-		  int count = 0;
-		  object *p;
-		  for (p = olist.tail; p != 0; p = p->prev)
-		    if (p->type() == (yyvsp[0].obtype) && ++count == (yyvsp[-1].n)) {
-		      (yyval.obj) = p;
-		      break;
-		    }
-		  if (p == 0) {
-		    lex_error("there is no %1%2 last %3", (yyvsp[-1].n),
-			      ordinal_postfix((yyvsp[-1].n)), object_type_name((yyvsp[0].obtype)));
-		    YYABORT;
-		  }
-		}
-#line 3848 "pic.cpp" /* yacc.c:1646  */
-    break;
-
-  case 171:
-#line 1339 "pic.y" /* yacc.c:1646  */
-    { (yyval.obtype) = BOX_OBJECT; }
-#line 3854 "pic.cpp" /* yacc.c:1646  */
-    break;
-
-  case 172:
-#line 1341 "pic.y" /* yacc.c:1646  */
-    { (yyval.obtype) = CIRCLE_OBJECT; }
-#line 3860 "pic.cpp" /* yacc.c:1646  */
-    break;
-
-  case 173:
-#line 1343 "pic.y" /* yacc.c:1646  */
-    { (yyval.obtype) = ELLIPSE_OBJECT; }
-#line 3866 "pic.cpp" /* yacc.c:1646  */
-    break;
-
-  case 174:
-#line 1345 "pic.y" /* yacc.c:1646  */
-    { (yyval.obtype) = ARC_OBJECT; }
-#line 3872 "pic.cpp" /* yacc.c:1646  */
-    break;
-
-  case 175:
-#line 1347 "pic.y" /* yacc.c:1646  */
-    { (yyval.obtype) = LINE_OBJECT; }
-#line 3878 "pic.cpp" /* yacc.c:1646  */
-    break;
-
-  case 176:
-#line 1349 "pic.y" /* yacc.c:1646  */
-    { (yyval.obtype) = ARROW_OBJECT; }
-#line 3884 "pic.cpp" /* yacc.c:1646  */
-    break;
-
-  case 177:
-#line 1351 "pic.y" /* yacc.c:1646  */
-    { (yyval.obtype) = SPLINE_OBJECT; }
-#line 3890 "pic.cpp" /* yacc.c:1646  */
-    break;
-
-  case 178:
-#line 1353 "pic.y" /* yacc.c:1646  */
-    { (yyval.obtype) = BLOCK_OBJECT; }
-#line 3896 "pic.cpp" /* yacc.c:1646  */
-    break;
-
-  case 179:
-#line 1355 "pic.y" /* yacc.c:1646  */
-    { (yyval.obtype) = TEXT_OBJECT; }
-#line 3902 "pic.cpp" /* yacc.c:1646  */
-    break;
-
-  case 180:
-#line 1360 "pic.y" /* yacc.c:1646  */
-    { (yyval.pth) = new path((yyvsp[0].str)); }
-#line 3908 "pic.cpp" /* yacc.c:1646  */
-    break;
-
-  case 181:
-#line 1362 "pic.y" /* yacc.c:1646  */
-    {
-		  (yyval.pth) = (yyvsp[-2].pth);
-		  (yyval.pth)->append((yyvsp[0].str));
-		}
-#line 3917 "pic.cpp" /* yacc.c:1646  */
-    break;
-
-  case 182:
-#line 1370 "pic.y" /* yacc.c:1646  */
-    { (yyval.pth) = new path((yyvsp[0].crn)); }
-#line 3923 "pic.cpp" /* yacc.c:1646  */
-    break;
-
-  case 183:
-#line 1374 "pic.y" /* yacc.c:1646  */
-    { (yyval.pth) = (yyvsp[0].pth); }
-#line 3929 "pic.cpp" /* yacc.c:1646  */
-    break;
-
-  case 184:
-#line 1376 "pic.y" /* yacc.c:1646  */
-    {
-		  (yyval.pth) = (yyvsp[-1].pth);
-		  (yyval.pth)->append((yyvsp[0].crn));
-		}
-#line 3938 "pic.cpp" /* yacc.c:1646  */
-    break;
-
-  case 185:
-#line 1384 "pic.y" /* yacc.c:1646  */
-    { (yyval.pth) = (yyvsp[0].pth); }
-#line 3944 "pic.cpp" /* yacc.c:1646  */
-    break;
-
-  case 186:
-#line 1386 "pic.y" /* yacc.c:1646  */
-    {
-		  (yyval.pth) = (yyvsp[-3].pth);
-		  (yyval.pth)->set_ypath((yyvsp[-1].pth));
-		}
-#line 3953 "pic.cpp" /* yacc.c:1646  */
-    break;
-
-  case 187:
-#line 1392 "pic.y" /* yacc.c:1646  */
-    {
-		  lex_warning("`%1%2 last %3' in `with' argument ignored",
-			      (yyvsp[-3].n), ordinal_postfix((yyvsp[-3].n)), object_type_name((yyvsp[-1].obtype)));
-		  (yyval.pth) = (yyvsp[0].pth);
-		}
-#line 3963 "pic.cpp" /* yacc.c:1646  */
-    break;
-
-  case 188:
-#line 1398 "pic.y" /* yacc.c:1646  */
-    {
-		  lex_warning("`last %1' in `with' argument ignored",
-			      object_type_name((yyvsp[-1].obtype)));
-		  (yyval.pth) = (yyvsp[0].pth);
-		}
-#line 3973 "pic.cpp" /* yacc.c:1646  */
-    break;
-
-  case 189:
-#line 1404 "pic.y" /* yacc.c:1646  */
-    {
-		  lex_warning("`%1%2 %3' in `with' argument ignored",
-			      (yyvsp[-2].n), ordinal_postfix((yyvsp[-2].n)), object_type_name((yyvsp[-1].obtype)));
-		  (yyval.pth) = (yyvsp[0].pth);
-		}
-#line 3983 "pic.cpp" /* yacc.c:1646  */
-    break;
-
-  case 190:
-#line 1410 "pic.y" /* yacc.c:1646  */
-    {
-		  lex_warning("initial `%1' in `with' argument ignored", (yyvsp[-1].str));
-		  a_delete (yyvsp[-1].str);
-		  (yyval.pth) = (yyvsp[0].pth);
-		}
-#line 3993 "pic.cpp" /* yacc.c:1646  */
-    break;
-
-  case 191:
-#line 1419 "pic.y" /* yacc.c:1646  */
-    { (yyval.crn) = &object::north; }
-#line 3999 "pic.cpp" /* yacc.c:1646  */
-    break;
-
-  case 192:
-#line 1421 "pic.y" /* yacc.c:1646  */
-    { (yyval.crn) = &object::east; }
-#line 4005 "pic.cpp" /* yacc.c:1646  */
-    break;
-
-  case 193:
-#line 1423 "pic.y" /* yacc.c:1646  */
-    { (yyval.crn) = &object::west; }
-#line 4011 "pic.cpp" /* yacc.c:1646  */
-    break;
-
-  case 194:
-#line 1425 "pic.y" /* yacc.c:1646  */
-    { (yyval.crn) = &object::south; }
-#line 4017 "pic.cpp" /* yacc.c:1646  */
-    break;
-
-  case 195:
-#line 1427 "pic.y" /* yacc.c:1646  */
-    { (yyval.crn) = &object::north_east; }
-#line 4023 "pic.cpp" /* yacc.c:1646  */
-    break;
-
-  case 196:
-#line 1429 "pic.y" /* yacc.c:1646  */
-    { (yyval.crn) = &object:: south_east; }
-#line 4029 "pic.cpp" /* yacc.c:1646  */
-    break;
-
-  case 197:
-#line 1431 "pic.y" /* yacc.c:1646  */
-    { (yyval.crn) = &object::north_west; }
-#line 4035 "pic.cpp" /* yacc.c:1646  */
-    break;
-
-  case 198:
-#line 1433 "pic.y" /* yacc.c:1646  */
-    { (yyval.crn) = &object::south_west; }
-#line 4041 "pic.cpp" /* yacc.c:1646  */
-    break;
-
-  case 199:
-#line 1435 "pic.y" /* yacc.c:1646  */
-    { (yyval.crn) = &object::center; }
-#line 4047 "pic.cpp" /* yacc.c:1646  */
-    break;
-
-  case 200:
-#line 1437 "pic.y" /* yacc.c:1646  */
-    { (yyval.crn) = &object::start; }
-#line 4053 "pic.cpp" /* yacc.c:1646  */
-    break;
-
-  case 201:
-#line 1439 "pic.y" /* yacc.c:1646  */
-    { (yyval.crn) = &object::end; }
-#line 4059 "pic.cpp" /* yacc.c:1646  */
-    break;
-
-  case 202:
-#line 1441 "pic.y" /* yacc.c:1646  */
-    { (yyval.crn) = &object::north; }
-#line 4065 "pic.cpp" /* yacc.c:1646  */
-    break;
-
-  case 203:
-#line 1443 "pic.y" /* yacc.c:1646  */
-    { (yyval.crn) = &object::south; }
-#line 4071 "pic.cpp" /* yacc.c:1646  */
-    break;
-
-  case 204:
-#line 1445 "pic.y" /* yacc.c:1646  */
-    { (yyval.crn) = &object::west; }
-#line 4077 "pic.cpp" /* yacc.c:1646  */
-    break;
-
-  case 205:
-#line 1447 "pic.y" /* yacc.c:1646  */
-    { (yyval.crn) = &object::east; }
-#line 4083 "pic.cpp" /* yacc.c:1646  */
-    break;
-
-  case 206:
-#line 1449 "pic.y" /* yacc.c:1646  */
-    { (yyval.crn) = &object::north_west; }
-#line 4089 "pic.cpp" /* yacc.c:1646  */
-    break;
-
-  case 207:
-#line 1451 "pic.y" /* yacc.c:1646  */
-    { (yyval.crn) = &object::south_west; }
-#line 4095 "pic.cpp" /* yacc.c:1646  */
-    break;
-
-  case 208:
-#line 1453 "pic.y" /* yacc.c:1646  */
-    { (yyval.crn) = &object::north_east; }
-#line 4101 "pic.cpp" /* yacc.c:1646  */
-    break;
-
-  case 209:
-#line 1455 "pic.y" /* yacc.c:1646  */
-    { (yyval.crn) = &object::south_east; }
-#line 4107 "pic.cpp" /* yacc.c:1646  */
-    break;
-
-  case 210:
-#line 1457 "pic.y" /* yacc.c:1646  */
-    { (yyval.crn) = &object::west; }
-#line 4113 "pic.cpp" /* yacc.c:1646  */
-    break;
-
-  case 211:
-#line 1459 "pic.y" /* yacc.c:1646  */
-    { (yyval.crn) = &object::east; }
-#line 4119 "pic.cpp" /* yacc.c:1646  */
-    break;
-
-  case 212:
-#line 1461 "pic.y" /* yacc.c:1646  */
-    { (yyval.crn) = &object::north_west; }
-#line 4125 "pic.cpp" /* yacc.c:1646  */
-    break;
-
-  case 213:
-#line 1463 "pic.y" /* yacc.c:1646  */
-    { (yyval.crn) = &object::south_west; }
-#line 4131 "pic.cpp" /* yacc.c:1646  */
-    break;
-
-  case 214:
-#line 1465 "pic.y" /* yacc.c:1646  */
-    { (yyval.crn) = &object::north_east; }
-#line 4137 "pic.cpp" /* yacc.c:1646  */
-    break;
-
-  case 215:
-#line 1467 "pic.y" /* yacc.c:1646  */
-    { (yyval.crn) = &object::south_east; }
-#line 4143 "pic.cpp" /* yacc.c:1646  */
-    break;
-
-  case 216:
-#line 1469 "pic.y" /* yacc.c:1646  */
-    { (yyval.crn) = &object::north; }
-#line 4149 "pic.cpp" /* yacc.c:1646  */
-    break;
-
-  case 217:
-#line 1471 "pic.y" /* yacc.c:1646  */
-    { (yyval.crn) = &object::south; }
-#line 4155 "pic.cpp" /* yacc.c:1646  */
-    break;
-
-  case 218:
-#line 1473 "pic.y" /* yacc.c:1646  */
-    { (yyval.crn) = &object::east; }
-#line 4161 "pic.cpp" /* yacc.c:1646  */
-    break;
-
-  case 219:
-#line 1475 "pic.y" /* yacc.c:1646  */
-    { (yyval.crn) = &object::west; }
-#line 4167 "pic.cpp" /* yacc.c:1646  */
-    break;
-
-  case 220:
-#line 1477 "pic.y" /* yacc.c:1646  */
-    { (yyval.crn) = &object::center; }
-#line 4173 "pic.cpp" /* yacc.c:1646  */
-    break;
-
-  case 221:
-#line 1479 "pic.y" /* yacc.c:1646  */
-    { (yyval.crn) = &object::start; }
-#line 4179 "pic.cpp" /* yacc.c:1646  */
-    break;
-
-  case 222:
-#line 1481 "pic.y" /* yacc.c:1646  */
-    { (yyval.crn) = &object::end; }
-#line 4185 "pic.cpp" /* yacc.c:1646  */
-    break;
-
-  case 223:
-#line 1486 "pic.y" /* yacc.c:1646  */
-    { (yyval.x) = (yyvsp[0].x); }
-#line 4191 "pic.cpp" /* yacc.c:1646  */
-    break;
-
-  case 224:
-#line 1488 "pic.y" /* yacc.c:1646  */
-    { (yyval.x) = (yyvsp[0].x); }
-#line 4197 "pic.cpp" /* yacc.c:1646  */
-    break;
-
-  case 225:
-#line 1493 "pic.y" /* yacc.c:1646  */
-    { (yyval.x) = ((yyvsp[-2].x) < (yyvsp[0].x)); }
-#line 4203 "pic.cpp" /* yacc.c:1646  */
-    break;
-
-  case 226:
-#line 1498 "pic.y" /* yacc.c:1646  */
-    {
-		  if (!lookup_variable((yyvsp[0].str), & (yyval.x))) {
-		    lex_error("there is no variable `%1'", (yyvsp[0].str));
-		    YYABORT;
-		  }
-		  a_delete (yyvsp[0].str);
-		}
-#line 4215 "pic.cpp" /* yacc.c:1646  */
-    break;
-
-  case 227:
-#line 1506 "pic.y" /* yacc.c:1646  */
-    { (yyval.x) = (yyvsp[0].x); }
-#line 4221 "pic.cpp" /* yacc.c:1646  */
-    break;
-
-  case 228:
-#line 1508 "pic.y" /* yacc.c:1646  */
-    {
-		  if ((yyvsp[-1].pl).obj != 0)
-		    (yyval.x) = (yyvsp[-1].pl).obj->origin().x;
-		  else
-		    (yyval.x) = (yyvsp[-1].pl).x;
-		}
-#line 4232 "pic.cpp" /* yacc.c:1646  */
-    break;
-
-  case 229:
-#line 1515 "pic.y" /* yacc.c:1646  */
-    {
-		  if ((yyvsp[-1].pl).obj != 0)
-		    (yyval.x) = (yyvsp[-1].pl).obj->origin().y;
-		  else
-		    (yyval.x) = (yyvsp[-1].pl).y;
-		}
-#line 4243 "pic.cpp" /* yacc.c:1646  */
-    break;
-
-  case 230:
-#line 1522 "pic.y" /* yacc.c:1646  */
-    {
-		  if ((yyvsp[-1].pl).obj != 0)
-		    (yyval.x) = (yyvsp[-1].pl).obj->height();
-		  else
-		    (yyval.x) = 0.0;
-		}
-#line 4254 "pic.cpp" /* yacc.c:1646  */
-    break;
-
-  case 231:
-#line 1529 "pic.y" /* yacc.c:1646  */
-    {
-		  if ((yyvsp[-1].pl).obj != 0)
-		    (yyval.x) = (yyvsp[-1].pl).obj->width();
-		  else
-		    (yyval.x) = 0.0;
-		}
-#line 4265 "pic.cpp" /* yacc.c:1646  */
-    break;
-
-  case 232:
-#line 1536 "pic.y" /* yacc.c:1646  */
-    {
-		  if ((yyvsp[-1].pl).obj != 0)
-		    (yyval.x) = (yyvsp[-1].pl).obj->radius();
-		  else
-		    (yyval.x) = 0.0;
-		}
-#line 4276 "pic.cpp" /* yacc.c:1646  */
-    break;
-
-  case 233:
-#line 1543 "pic.y" /* yacc.c:1646  */
-    { (yyval.x) = (yyvsp[-2].x) + (yyvsp[0].x); }
-#line 4282 "pic.cpp" /* yacc.c:1646  */
-    break;
-
-  case 234:
-#line 1545 "pic.y" /* yacc.c:1646  */
-    { (yyval.x) = (yyvsp[-2].x) - (yyvsp[0].x); }
-#line 4288 "pic.cpp" /* yacc.c:1646  */
-    break;
-
-  case 235:
-#line 1547 "pic.y" /* yacc.c:1646  */
-    { (yyval.x) = (yyvsp[-2].x) * (yyvsp[0].x); }
-#line 4294 "pic.cpp" /* yacc.c:1646  */
-    break;
-
-  case 236:
-#line 1549 "pic.y" /* yacc.c:1646  */
-    {
-		  if ((yyvsp[0].x) == 0.0) {
-		    lex_error("division by zero");
-		    YYABORT;
-		  }
-		  (yyval.x) = (yyvsp[-2].x)/(yyvsp[0].x);
-		}
-#line 4306 "pic.cpp" /* yacc.c:1646  */
-    break;
-
-  case 237:
-#line 1557 "pic.y" /* yacc.c:1646  */
-    {
-		  if ((yyvsp[0].x) == 0.0) {
-		    lex_error("modulus by zero");
-		    YYABORT;
-		  }
-		  (yyval.x) = fmod((yyvsp[-2].x), (yyvsp[0].x));
-		}
-#line 4318 "pic.cpp" /* yacc.c:1646  */
-    break;
-
-  case 238:
-#line 1565 "pic.y" /* yacc.c:1646  */
-    {
-		  errno = 0;
-		  (yyval.x) = pow((yyvsp[-2].x), (yyvsp[0].x));
-		  if (errno == EDOM) {
-		    lex_error("arguments to `^' operator out of domain");
-		    YYABORT;
-		  }
-		  if (errno == ERANGE) {
-		    lex_error("result of `^' operator out of range");
-		    YYABORT;
-		  }
-		}
-#line 4335 "pic.cpp" /* yacc.c:1646  */
-    break;
-
-  case 239:
-#line 1578 "pic.y" /* yacc.c:1646  */
-    { (yyval.x) = -(yyvsp[0].x); }
-#line 4341 "pic.cpp" /* yacc.c:1646  */
-    break;
-
-  case 240:
-#line 1580 "pic.y" /* yacc.c:1646  */
-    { (yyval.x) = (yyvsp[-1].x); }
-#line 4347 "pic.cpp" /* yacc.c:1646  */
-    break;
-
-  case 241:
-#line 1582 "pic.y" /* yacc.c:1646  */
-    {
-		  errno = 0;
-		  (yyval.x) = sin((yyvsp[-1].x));
-		  if (errno == ERANGE) {
-		    lex_error("sin result out of range");
-		    YYABORT;
-		  }
-		}
-#line 4360 "pic.cpp" /* yacc.c:1646  */
-    break;
-
-  case 242:
-#line 1591 "pic.y" /* yacc.c:1646  */
-    {
-		  errno = 0;
-		  (yyval.x) = cos((yyvsp[-1].x));
-		  if (errno == ERANGE) {
-		    lex_error("cos result out of range");
-		    YYABORT;
-		  }
-		}
-#line 4373 "pic.cpp" /* yacc.c:1646  */
-    break;
-
-  case 243:
-#line 1600 "pic.y" /* yacc.c:1646  */
-    {
-		  errno = 0;
-		  (yyval.x) = atan2((yyvsp[-3].x), (yyvsp[-1].x));
-		  if (errno == EDOM) {
-		    lex_error("atan2 argument out of domain");
-		    YYABORT;
-		  }
-		  if (errno == ERANGE) {
-		    lex_error("atan2 result out of range");
-		    YYABORT;
-		  }
-		}
-#line 4390 "pic.cpp" /* yacc.c:1646  */
-    break;
-
-  case 244:
-#line 1613 "pic.y" /* yacc.c:1646  */
-    {
-		  errno = 0;
-		  (yyval.x) = log10((yyvsp[-1].x));
-		  if (errno == ERANGE) {
-		    lex_error("log result out of range");
-		    YYABORT;
-		  }
-		}
-#line 4403 "pic.cpp" /* yacc.c:1646  */
-    break;
-
-  case 245:
-#line 1622 "pic.y" /* yacc.c:1646  */
-    {
-		  errno = 0;
-		  (yyval.x) = pow(10.0, (yyvsp[-1].x));
-		  if (errno == ERANGE) {
-		    lex_error("exp result out of range");
-		    YYABORT;
-		  }
-		}
-#line 4416 "pic.cpp" /* yacc.c:1646  */
-    break;
-
-  case 246:
-#line 1631 "pic.y" /* yacc.c:1646  */
-    {
-		  errno = 0;
-		  (yyval.x) = sqrt((yyvsp[-1].x));
-		  if (errno == EDOM) {
-		    lex_error("sqrt argument out of domain");
-		    YYABORT;
-		  }
-		}
-#line 4429 "pic.cpp" /* yacc.c:1646  */
-    break;
-
-  case 247:
-#line 1640 "pic.y" /* yacc.c:1646  */
-    { (yyval.x) = (yyvsp[-3].x) > (yyvsp[-1].x) ? (yyvsp[-3].x) : (yyvsp[-1].x); }
-#line 4435 "pic.cpp" /* yacc.c:1646  */
-    break;
-
-  case 248:
-#line 1642 "pic.y" /* yacc.c:1646  */
-    { (yyval.x) = (yyvsp[-3].x) < (yyvsp[-1].x) ? (yyvsp[-3].x) : (yyvsp[-1].x); }
-#line 4441 "pic.cpp" /* yacc.c:1646  */
-    break;
-
-  case 249:
-#line 1644 "pic.y" /* yacc.c:1646  */
-    { (yyval.x) = (yyvsp[-1].x) < 0 ? -floor(-(yyvsp[-1].x)) : floor((yyvsp[-1].x)); }
-#line 4447 "pic.cpp" /* yacc.c:1646  */
-    break;
-
-  case 250:
-#line 1646 "pic.y" /* yacc.c:1646  */
-    { (yyval.x) = 1.0 + floor(((rand()&0x7fff)/double(0x7fff))*(yyvsp[-1].x)); }
-#line 4453 "pic.cpp" /* yacc.c:1646  */
-    break;
-
-  case 251:
-#line 1648 "pic.y" /* yacc.c:1646  */
-    {
-		  /* return a random number in the range [0,1) */
-		  /* portable, but not very random */
-		  (yyval.x) = (rand() & 0x7fff) / double(0x8000);
-		}
-#line 4463 "pic.cpp" /* yacc.c:1646  */
-    break;
-
-  case 252:
-#line 1654 "pic.y" /* yacc.c:1646  */
-    {
-		  (yyval.x) = 0;
-		  srand((unsigned int)(yyvsp[-1].x));
-		}
-#line 4472 "pic.cpp" /* yacc.c:1646  */
-    break;
-
-  case 253:
-#line 1659 "pic.y" /* yacc.c:1646  */
-    { (yyval.x) = ((yyvsp[-2].x) <= (yyvsp[0].x)); }
-#line 4478 "pic.cpp" /* yacc.c:1646  */
-    break;
-
-  case 254:
-#line 1661 "pic.y" /* yacc.c:1646  */
-    { (yyval.x) = ((yyvsp[-2].x) > (yyvsp[0].x)); }
-#line 4484 "pic.cpp" /* yacc.c:1646  */
-    break;
-
-  case 255:
-#line 1663 "pic.y" /* yacc.c:1646  */
-    { (yyval.x) = ((yyvsp[-2].x) >= (yyvsp[0].x)); }
-#line 4490 "pic.cpp" /* yacc.c:1646  */
-    break;
-
-  case 256:
-#line 1665 "pic.y" /* yacc.c:1646  */
-    { (yyval.x) = ((yyvsp[-2].x) == (yyvsp[0].x)); }
-#line 4496 "pic.cpp" /* yacc.c:1646  */
-    break;
-
-  case 257:
-#line 1667 "pic.y" /* yacc.c:1646  */
-    { (yyval.x) = ((yyvsp[-2].x) != (yyvsp[0].x)); }
-#line 4502 "pic.cpp" /* yacc.c:1646  */
-    break;
-
-  case 258:
-#line 1669 "pic.y" /* yacc.c:1646  */
-    { (yyval.x) = ((yyvsp[-2].x) != 0.0 && (yyvsp[0].x) != 0.0); }
-#line 4508 "pic.cpp" /* yacc.c:1646  */
-    break;
-
-  case 259:
-#line 1671 "pic.y" /* yacc.c:1646  */
-    { (yyval.x) = ((yyvsp[-2].x) != 0.0 || (yyvsp[0].x) != 0.0); }
-#line 4514 "pic.cpp" /* yacc.c:1646  */
-    break;
-
-  case 260:
-#line 1673 "pic.y" /* yacc.c:1646  */
-    { (yyval.x) = ((yyvsp[0].x) == 0.0); }
-#line 4520 "pic.cpp" /* yacc.c:1646  */
-    break;
-
-
-#line 4524 "pic.cpp" /* yacc.c:1646  */
-      default: break;
-    }
-  /* User semantic actions sometimes alter yychar, and that requires
-     that yytoken be updated with the new translation.  We take the
-     approach of translating immediately before every use of yytoken.
-     One alternative is translating here after every semantic action,
-     but that translation would be missed if the semantic action invokes
-     YYABORT, YYACCEPT, or YYERROR immediately after altering yychar or
-     if it invokes YYBACKUP.  In the case of YYABORT or YYACCEPT, an
-     incorrect destructor might then be invoked immediately.  In the
-     case of YYERROR or YYBACKUP, subsequent parser actions might lead
-     to an incorrect destructor call or verbose syntax error message
-     before the lookahead is translated.  */
-  YY_SYMBOL_PRINT ("-> $$ =", yyr1[yyn], &yyval, &yyloc);
-
-  YYPOPSTACK (yylen);
-  yylen = 0;
-  YY_STACK_PRINT (yyss, yyssp);
-
-  *++yyvsp = yyval;
-
-  /* Now 'shift' the result of the reduction.  Determine what state
-     that goes to, based on the state we popped back to and the rule
-     number reduced by.  */
-
-  yyn = yyr1[yyn];
-
-  yystate = yypgoto[yyn - YYNTOKENS] + *yyssp;
-  if (0 <= yystate && yystate <= YYLAST && yycheck[yystate] == *yyssp)
-    yystate = yytable[yystate];
-  else
-    yystate = yydefgoto[yyn - YYNTOKENS];
-
-  goto yynewstate;
-
-
-/*--------------------------------------.
-| yyerrlab -- here on detecting error.  |
-`--------------------------------------*/
-yyerrlab:
-  /* Make sure we have latest lookahead translation.  See comments at
-     user semantic actions for why this is necessary.  */
-  yytoken = yychar == YYEMPTY ? YYEMPTY : YYTRANSLATE (yychar);
-
-  /* If not already recovering from an error, report this error.  */
-  if (!yyerrstatus)
-    {
-      ++yynerrs;
-#if ! YYERROR_VERBOSE
-      yyerror (YY_("syntax error"));
-#else
-# define YYSYNTAX_ERROR yysyntax_error (&yymsg_alloc, &yymsg, \
-                                        yyssp, yytoken)
-      {
-        char const *yymsgp = YY_("syntax error");
-        int yysyntax_error_status;
-        yysyntax_error_status = YYSYNTAX_ERROR;
-        if (yysyntax_error_status == 0)
-          yymsgp = yymsg;
-        else if (yysyntax_error_status == 1)
-          {
-            if (yymsg != yymsgbuf)
-              YYSTACK_FREE (yymsg);
-            yymsg = (char *) YYSTACK_ALLOC (yymsg_alloc);
-            if (!yymsg)
-              {
-                yymsg = yymsgbuf;
-                yymsg_alloc = sizeof yymsgbuf;
-                yysyntax_error_status = 2;
-              }
-            else
-              {
-                yysyntax_error_status = YYSYNTAX_ERROR;
-                yymsgp = yymsg;
-              }
-          }
-        yyerror (yymsgp);
-        if (yysyntax_error_status == 2)
-          goto yyexhaustedlab;
-      }
-# undef YYSYNTAX_ERROR
-#endif
-    }
-
-
-
-  if (yyerrstatus == 3)
-    {
-      /* If just tried and failed to reuse lookahead token after an
-         error, discard it.  */
-
-      if (yychar <= YYEOF)
-        {
-          /* Return failure if at end of input.  */
-          if (yychar == YYEOF)
-            YYABORT;
-        }
-      else
-        {
-          yydestruct ("Error: discarding",
-                      yytoken, &yylval);
-          yychar = YYEMPTY;
-        }
-    }
-
-  /* Else will try to reuse lookahead token after shifting the error
-     token.  */
-  goto yyerrlab1;
-
-
-/*---------------------------------------------------.
-| yyerrorlab -- error raised explicitly by YYERROR.  |
-`---------------------------------------------------*/
-yyerrorlab:
-
-  /* Pacify compilers like GCC when the user code never invokes
-     YYERROR and the label yyerrorlab therefore never appears in user
-     code.  */
-  if (/*CONSTCOND*/ 0)
-     goto yyerrorlab;
-
-  /* Do not reclaim the symbols of the rule whose action triggered
-     this YYERROR.  */
-  YYPOPSTACK (yylen);
-  yylen = 0;
-  YY_STACK_PRINT (yyss, yyssp);
-  yystate = *yyssp;
-  goto yyerrlab1;
-
-
-/*-------------------------------------------------------------.
-| yyerrlab1 -- common code for both syntax error and YYERROR.  |
-`-------------------------------------------------------------*/
-yyerrlab1:
-  yyerrstatus = 3;      /* Each real token shifted decrements this.  */
-
-  for (;;)
-    {
-      yyn = yypact[yystate];
-      if (!yypact_value_is_default (yyn))
-        {
-          yyn += YYTERROR;
-          if (0 <= yyn && yyn <= YYLAST && yycheck[yyn] == YYTERROR)
-            {
-              yyn = yytable[yyn];
-              if (0 < yyn)
-                break;
-            }
-        }
-
-      /* Pop the current state because it cannot handle the error token.  */
-      if (yyssp == yyss)
-        YYABORT;
-
-
-      yydestruct ("Error: popping",
-                  yystos[yystate], yyvsp);
-      YYPOPSTACK (1);
-      yystate = *yyssp;
-      YY_STACK_PRINT (yyss, yyssp);
-    }
-
-  YY_IGNORE_MAYBE_UNINITIALIZED_BEGIN
-  *++yyvsp = yylval;
-  YY_IGNORE_MAYBE_UNINITIALIZED_END
-
-
-  /* Shift the error token.  */
-  YY_SYMBOL_PRINT ("Shifting", yystos[yyn], yyvsp, yylsp);
-
-  yystate = yyn;
-  goto yynewstate;
-
-
-/*-------------------------------------.
-| yyacceptlab -- YYACCEPT comes here.  |
-`-------------------------------------*/
-yyacceptlab:
-  yyresult = 0;
-  goto yyreturn;
-
-/*-----------------------------------.
-| yyabortlab -- YYABORT comes here.  |
-`-----------------------------------*/
-yyabortlab:
-  yyresult = 1;
-  goto yyreturn;
-
-#if !defined yyoverflow || YYERROR_VERBOSE
-/*-------------------------------------------------.
-| yyexhaustedlab -- memory exhaustion comes here.  |
-`-------------------------------------------------*/
-yyexhaustedlab:
-  yyerror (YY_("memory exhausted"));
-  yyresult = 2;
-  /* Fall through.  */
-#endif
-
-yyreturn:
-  if (yychar != YYEMPTY)
-    {
-      /* Make sure we have latest lookahead translation.  See comments at
-         user semantic actions for why this is necessary.  */
-      yytoken = YYTRANSLATE (yychar);
-      yydestruct ("Cleanup: discarding lookahead",
-                  yytoken, &yylval);
-    }
-  /* Do not reclaim the symbols of the rule whose action triggered
-     this YYABORT or YYACCEPT.  */
-  YYPOPSTACK (yylen);
-  YY_STACK_PRINT (yyss, yyssp);
-  while (yyssp != yyss)
-    {
-      yydestruct ("Cleanup: popping",
-                  yystos[*yyssp], yyvsp);
-      YYPOPSTACK (1);
-    }
-#ifndef yyoverflow
-  if (yyss != yyssa)
-    YYSTACK_FREE (yyss);
-#endif
-#if YYERROR_VERBOSE
-  if (yymsg != yymsgbuf)
-    YYSTACK_FREE (yymsg);
-#endif
-  return yyresult;
-}
-#line 1677 "pic.y" /* yacc.c:1906  */
-
-
-/* bison defines const to be empty unless __STDC__ is defined, which it
-isn't under cfront */
-
-#ifdef const
-#undef const
-#endif
-
-static struct {
-  const char *name;
-  double val;
-  int scaled;		     // non-zero if val should be multiplied by scale
-} defaults_table[] = {
-  { "arcrad", .25, 1 },
-  { "arrowht", .1, 1 },
-  { "arrowwid", .05, 1 },
-  { "circlerad", .25, 1 },
-  { "boxht", .5, 1 },
-  { "boxwid", .75, 1 },
-  { "boxrad", 0.0, 1 },
-  { "dashwid", .05, 1 },
-  { "ellipseht", .5, 1 },
-  { "ellipsewid", .75, 1 },
-  { "moveht", .5, 1 },
-  { "movewid", .5, 1 },
-  { "lineht", .5, 1 },
-  { "linewid", .5, 1 },
-  { "textht", 0.0, 1 },
-  { "textwid", 0.0, 1 },
-  { "scale", 1.0, 0 },
-  { "linethick", -1.0, 0 },		// in points
-  { "fillval", .5, 0 },
-  { "arrowhead", 1.0, 0 },
-  { "maxpswid", 8.5, 0 },
-  { "maxpsht", 11.0, 0 },
-};
-
-place *lookup_label(const char *label)
-{
-  saved_state *state = current_saved_state;
-  PTABLE(place) *tbl = current_table;
-  for (;;) {
-    place *pl = tbl->lookup(label);
-    if (pl)
-      return pl;
-    if (!state)
-      return 0;
-    tbl = state->tbl;
-    state = state->prev;
-  }
-}
-
-void define_label(const char *label, const place *pl)
-{
-  place *p = new place[1];
-  *p = *pl;
-  current_table->define(label, p);
-}
-
-int lookup_variable(const char *name, double *val)
-{
-  place *pl = lookup_label(name);
-  if (pl) {
-    *val = pl->x;
-    return 1;
-  }
-  return 0;
-}
-
-void define_variable(const char *name, double val)
-{
-  place *p = new place[1];
-  p->obj = 0;
-  p->x = val;
-  p->y = 0.0;
-  current_table->define(name, p);
-  if (strcmp(name, "scale") == 0) {
-    // When the scale changes, reset all scaled pre-defined variables to
-    // their default values.
-    for (unsigned int i = 0;
-	 i < sizeof(defaults_table)/sizeof(defaults_table[0]); i++) 
-      if (defaults_table[i].scaled)
-	define_variable(defaults_table[i].name, val*defaults_table[i].val);
-  }
-}
-
-// called once only (not once per parse)
-
-void parse_init()
-{
-  current_direction = RIGHT_DIRECTION;
-  current_position.x = 0.0;
-  current_position.y = 0.0;
-  // This resets everything to its default value.
-  reset_all();
-}
-
-void reset(const char *nm)
-{
-  for (unsigned int i = 0;
-       i < sizeof(defaults_table)/sizeof(defaults_table[0]); i++)
-    if (strcmp(nm, defaults_table[i].name) == 0) {
-      double val = defaults_table[i].val;
-      if (defaults_table[i].scaled) {
-	double scale;
-	lookup_variable("scale", &scale);
-	val *= scale;
-      }
-      define_variable(defaults_table[i].name, val);
-      return;
-    }
-  lex_error("`%1' is not a predefined variable", nm);
-}
-
-void reset_all()
-{
-  // We only have to explicitly reset the pre-defined variables that
-  // aren't scaled because `scale' is not scaled, and changing the
-  // value of `scale' will reset all the pre-defined variables that
-  // are scaled.
-  for (unsigned int i = 0;
-       i < sizeof(defaults_table)/sizeof(defaults_table[0]); i++)
-    if (!defaults_table[i].scaled)
-      define_variable(defaults_table[i].name, defaults_table[i].val);
-}
-
-// called after each parse
-
-void parse_cleanup()
-{
-  while (current_saved_state != 0) {
-    delete current_table;
-    current_table = current_saved_state->tbl;
-    saved_state *tem = current_saved_state;
-    current_saved_state = current_saved_state->prev;
-    delete tem;
-  }
-  assert(current_table == &top_table);
-  PTABLE_ITERATOR(place) iter(current_table);
-  const char *key;
-  place *pl;
-  while (iter.next(&key, &pl))
-    if (pl->obj != 0) {
-      position pos = pl->obj->origin();
-      pl->obj = 0;
-      pl->x = pos.x;
-      pl->y = pos.y;
-    }
-  while (olist.head != 0) {
-    object *tem = olist.head;
-    olist.head = olist.head->next;
-    delete tem;
-  }
-  olist.tail = 0;
-  current_direction = RIGHT_DIRECTION;
-  current_position.x = 0.0;
-  current_position.y = 0.0;
-}
-
-const char *ordinal_postfix(int n)
-{
-  if (n < 10 || n > 20)
-    switch (n % 10) {
-    case 1:
-      return "st";
-    case 2:
-      return "nd";
-    case 3:
-      return "rd";
-    }
-  return "th";
-}
-
-const char *object_type_name(object_type type)
-{
-  switch (type) {
-  case BOX_OBJECT:
-    return "box";
-  case CIRCLE_OBJECT:
-    return "circle";
-  case ELLIPSE_OBJECT:
-    return "ellipse";
-  case ARC_OBJECT:
-    return "arc";
-  case SPLINE_OBJECT:
-    return "spline";
-  case LINE_OBJECT:
-    return "line";
-  case ARROW_OBJECT:
-    return "arrow";
-  case MOVE_OBJECT:
-    return "move";
-  case TEXT_OBJECT:
-    return "\"\"";
-  case BLOCK_OBJECT:
-    return "[]";
-  case OTHER_OBJECT:
-  case MARK_OBJECT:
-  default:
-    break;
-  }
-  return "object";
-}
-
-static char sprintf_buf[1024];
-
-char *format_number(const char *form, double n)
-{
-  if (form == 0)
-    form = "%g";
-  return do_sprintf(form, &n, 1);
-}
-
-char *do_sprintf(const char *form, const double *v, int nv)
-{
-  string result;
-  int i = 0;
-  string one_format;
-  while (*form) {
-    if (*form == '%') {
-      one_format += *form++;
-      for (; *form != '\0' && strchr("#-+ 0123456789.", *form) != 0; form++)
-	one_format += *form;
-      if (*form == '\0' || strchr("eEfgG%", *form) == 0) {
-	lex_error("bad sprintf format");
-	result += one_format;
-	result += form;
-	break;
-      }
-      if (*form == '%') {
-	one_format += *form++;
-	one_format += '\0';
-	snprintf(sprintf_buf, sizeof(sprintf_buf),
-		 "%s", one_format.contents());
-      }
-      else {
-	if (i >= nv) {
-	  lex_error("too few arguments to snprintf");
-	  result += one_format;
-	  result += form;
-	  break;
-	}
-	one_format += *form++;
-	one_format += '\0';
-	snprintf(sprintf_buf, sizeof(sprintf_buf),
-		 one_format.contents(), v[i++]);
-      }
-      one_format.clear();
-      result += sprintf_buf;
-    }
-    else
-      result += *form++;
-  }
-  result += '\0';
-  return strsave(result.contents());
-}
diff -Nuar groff-1.22.3.old/src/preproc/pic/pic.h groff-1.22.3/src/preproc/pic/pic.h
--- groff-1.22.3.old/src/preproc/pic/pic.h	2014-11-04 10:38:35.226523984 +0200
+++ groff-1.22.3/src/preproc/pic/pic.h	2015-04-23 20:57:03.000000000 +0300
@@ -50,6 +50,7 @@
 #include "assert.h"
 #include "cset.h"
 #include "stringclass.h"
+#include "lf.h"
 #include "errarg.h"
 #include "error.h"
 #include "position.h"
diff -Nuar groff-1.22.3.old/src/preproc/pic/pic.man groff-1.22.3/src/preproc/pic/pic.man
--- groff-1.22.3.old/src/preproc/pic/pic.man	2014-11-04 10:38:35.226523984 +0200
+++ groff-1.22.3/src/preproc/pic/pic.man	2015-04-23 20:57:03.000000000 +0300
@@ -3,6 +3,10 @@
 @g@pic \- compile pictures for troff or TeX
 .
 .
+.do nr groff_C \n[.C]
+.cp 0
+.
+.
 .\" --------------------------------------------------------------------
 .\" License (copying)
 .\" --------------------------------------------------------------------
@@ -1343,6 +1347,9 @@
 .co
 .
 .
+.cp \n[groff_C]
+.
+.
 .\" Local Variables:
 .\" mode: nroff
 .\" End:
diff -Nuar groff-1.22.3.old/src/preproc/pic/pic_tab.h groff-1.22.3/src/preproc/pic/pic_tab.h
--- groff-1.22.3.old/src/preproc/pic/pic_tab.h	2014-11-04 10:38:37.791491918 +0200
+++ groff-1.22.3/src/preproc/pic/pic_tab.h	1970-01-01 02:00:00.000000000 +0200
@@ -1,331 +0,0 @@
-/* A Bison parser, made by GNU Bison 3.0.2.  */
-
-/* Bison interface for Yacc-like parsers in C
-
-   Copyright (C) 1984, 1989-1990, 2000-2013 Free Software Foundation, Inc.
-
-   This program is free software: you can redistribute it and/or modify
-   it under the terms of the GNU General Public License as published by
-   the Free Software Foundation, either version 3 of the License, or
-   (at your option) any later version.
-
-   This program is distributed in the hope that it will be useful,
-   but WITHOUT ANY WARRANTY; without even the implied warranty of
-   MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
-   GNU General Public License for more details.
-
-   You should have received a copy of the GNU General Public License
-   along with this program.  If not, see <http://www.gnu.org/licenses/>.  */
-
-/* As a special exception, you may create a larger work that contains
-   part or all of the Bison parser skeleton and distribute that work
-   under terms of your choice, so long as that work isn't itself a
-   parser generator using the skeleton or a modified version thereof
-   as a parser skeleton.  Alternatively, if you modify or redistribute
-   the parser skeleton itself, you may (at your option) remove this
-   special exception, which will cause the skeleton and the resulting
-   Bison output files to be licensed under the GNU General Public
-   License without this special exception.
-
-   This special exception was added by the Free Software Foundation in
-   version 2.2 of Bison.  */
-
-#ifndef YY_YY_Y_TAB_H_INCLUDED
-# define YY_YY_Y_TAB_H_INCLUDED
-/* Debug traces.  */
-#ifndef YYDEBUG
-# define YYDEBUG 0
-#endif
-#if YYDEBUG
-extern int yydebug;
-#endif
-
-/* Token type.  */
-#ifndef YYTOKENTYPE
-# define YYTOKENTYPE
-  enum yytokentype
-  {
-    LABEL = 258,
-    VARIABLE = 259,
-    NUMBER = 260,
-    TEXT = 261,
-    COMMAND_LINE = 262,
-    DELIMITED = 263,
-    ORDINAL = 264,
-    TH = 265,
-    LEFT_ARROW_HEAD = 266,
-    RIGHT_ARROW_HEAD = 267,
-    DOUBLE_ARROW_HEAD = 268,
-    LAST = 269,
-    BOX = 270,
-    CIRCLE = 271,
-    ELLIPSE = 272,
-    ARC = 273,
-    LINE = 274,
-    ARROW = 275,
-    MOVE = 276,
-    SPLINE = 277,
-    HEIGHT = 278,
-    RADIUS = 279,
-    FIGNAME = 280,
-    WIDTH = 281,
-    DIAMETER = 282,
-    UP = 283,
-    DOWN = 284,
-    RIGHT = 285,
-    LEFT = 286,
-    FROM = 287,
-    TO = 288,
-    AT = 289,
-    WITH = 290,
-    BY = 291,
-    THEN = 292,
-    SOLID = 293,
-    DOTTED = 294,
-    DASHED = 295,
-    CHOP = 296,
-    SAME = 297,
-    INVISIBLE = 298,
-    LJUST = 299,
-    RJUST = 300,
-    ABOVE = 301,
-    BELOW = 302,
-    OF = 303,
-    THE = 304,
-    WAY = 305,
-    BETWEEN = 306,
-    AND = 307,
-    HERE = 308,
-    DOT_N = 309,
-    DOT_E = 310,
-    DOT_W = 311,
-    DOT_S = 312,
-    DOT_NE = 313,
-    DOT_SE = 314,
-    DOT_NW = 315,
-    DOT_SW = 316,
-    DOT_C = 317,
-    DOT_START = 318,
-    DOT_END = 319,
-    DOT_X = 320,
-    DOT_Y = 321,
-    DOT_HT = 322,
-    DOT_WID = 323,
-    DOT_RAD = 324,
-    SIN = 325,
-    COS = 326,
-    ATAN2 = 327,
-    LOG = 328,
-    EXP = 329,
-    SQRT = 330,
-    K_MAX = 331,
-    K_MIN = 332,
-    INT = 333,
-    RAND = 334,
-    SRAND = 335,
-    COPY = 336,
-    THRU = 337,
-    TOP = 338,
-    BOTTOM = 339,
-    UPPER = 340,
-    LOWER = 341,
-    SH = 342,
-    PRINT = 343,
-    CW = 344,
-    CCW = 345,
-    FOR = 346,
-    DO = 347,
-    IF = 348,
-    ELSE = 349,
-    ANDAND = 350,
-    OROR = 351,
-    NOTEQUAL = 352,
-    EQUALEQUAL = 353,
-    LESSEQUAL = 354,
-    GREATEREQUAL = 355,
-    LEFT_CORNER = 356,
-    RIGHT_CORNER = 357,
-    NORTH = 358,
-    SOUTH = 359,
-    EAST = 360,
-    WEST = 361,
-    CENTER = 362,
-    END = 363,
-    START = 364,
-    RESET = 365,
-    UNTIL = 366,
-    PLOT = 367,
-    THICKNESS = 368,
-    FILL = 369,
-    COLORED = 370,
-    OUTLINED = 371,
-    SHADED = 372,
-    XSLANTED = 373,
-    YSLANTED = 374,
-    ALIGNED = 375,
-    SPRINTF = 376,
-    COMMAND = 377,
-    DEFINE = 378,
-    UNDEF = 379
-  };
-#endif
-/* Tokens.  */
-#define LABEL 258
-#define VARIABLE 259
-#define NUMBER 260
-#define TEXT 261
-#define COMMAND_LINE 262
-#define DELIMITED 263
-#define ORDINAL 264
-#define TH 265
-#define LEFT_ARROW_HEAD 266
-#define RIGHT_ARROW_HEAD 267
-#define DOUBLE_ARROW_HEAD 268
-#define LAST 269
-#define BOX 270
-#define CIRCLE 271
-#define ELLIPSE 272
-#define ARC 273
-#define LINE 274
-#define ARROW 275
-#define MOVE 276
-#define SPLINE 277
-#define HEIGHT 278
-#define RADIUS 279
-#define FIGNAME 280
-#define WIDTH 281
-#define DIAMETER 282
-#define UP 283
-#define DOWN 284
-#define RIGHT 285
-#define LEFT 286
-#define FROM 287
-#define TO 288
-#define AT 289
-#define WITH 290
-#define BY 291
-#define THEN 292
-#define SOLID 293
-#define DOTTED 294
-#define DASHED 295
-#define CHOP 296
-#define SAME 297
-#define INVISIBLE 298
-#define LJUST 299
-#define RJUST 300
-#define ABOVE 301
-#define BELOW 302
-#define OF 303
-#define THE 304
-#define WAY 305
-#define BETWEEN 306
-#define AND 307
-#define HERE 308
-#define DOT_N 309
-#define DOT_E 310
-#define DOT_W 311
-#define DOT_S 312
-#define DOT_NE 313
-#define DOT_SE 314
-#define DOT_NW 315
-#define DOT_SW 316
-#define DOT_C 317
-#define DOT_START 318
-#define DOT_END 319
-#define DOT_X 320
-#define DOT_Y 321
-#define DOT_HT 322
-#define DOT_WID 323
-#define DOT_RAD 324
-#define SIN 325
-#define COS 326
-#define ATAN2 327
-#define LOG 328
-#define EXP 329
-#define SQRT 330
-#define K_MAX 331
-#define K_MIN 332
-#define INT 333
-#define RAND 334
-#define SRAND 335
-#define COPY 336
-#define THRU 337
-#define TOP 338
-#define BOTTOM 339
-#define UPPER 340
-#define LOWER 341
-#define SH 342
-#define PRINT 343
-#define CW 344
-#define CCW 345
-#define FOR 346
-#define DO 347
-#define IF 348
-#define ELSE 349
-#define ANDAND 350
-#define OROR 351
-#define NOTEQUAL 352
-#define EQUALEQUAL 353
-#define LESSEQUAL 354
-#define GREATEREQUAL 355
-#define LEFT_CORNER 356
-#define RIGHT_CORNER 357
-#define NORTH 358
-#define SOUTH 359
-#define EAST 360
-#define WEST 361
-#define CENTER 362
-#define END 363
-#define START 364
-#define RESET 365
-#define UNTIL 366
-#define PLOT 367
-#define THICKNESS 368
-#define FILL 369
-#define COLORED 370
-#define OUTLINED 371
-#define SHADED 372
-#define XSLANTED 373
-#define YSLANTED 374
-#define ALIGNED 375
-#define SPRINTF 376
-#define COMMAND 377
-#define DEFINE 378
-#define UNDEF 379
-
-/* Value type.  */
-#if ! defined YYSTYPE && ! defined YYSTYPE_IS_DECLARED
-typedef union YYSTYPE YYSTYPE;
-union YYSTYPE
-{
-#line 65 "pic.y" /* yacc.c:1909  */
-
-	char *str;
-	int n;
-	double x;
-	struct { double x, y; } pair;
-	struct { double x; char *body; } if_data;
-	struct { char *str; const char *filename; int lineno; } lstr;
-	struct { double *v; int nv; int maxv; } dv;
-	struct { double val; int is_multiplicative; } by;
-	place pl;
-	object *obj;
-	corner crn;
-	path *pth;
-	object_spec *spec;
-	saved_state *pstate;
-	graphics_state state;
-	object_type obtype;
-
-#line 321 "y.tab.h" /* yacc.c:1909  */
-};
-# define YYSTYPE_IS_TRIVIAL 1
-# define YYSTYPE_IS_DECLARED 1
-#endif
-
-
-extern YYSTYPE yylval;
-
-int yyparse (void);
-
-#endif /* !YY_YY_Y_TAB_H_INCLUDED  */
diff -Nuar groff-1.22.3.old/src/preproc/pic/pic.y groff-1.22.3/src/preproc/pic/pic.y
--- groff-1.22.3.old/src/preproc/pic/pic.y	2014-11-04 10:38:35.226523984 +0200
+++ groff-1.22.3/src/preproc/pic/pic.y	1970-01-01 02:00:00.000000000 +0200
@@ -1,1933 +0,0 @@
-/* Copyright (C) 1989-2014  Free Software Foundation, Inc.
-     Written by James Clark (jjc@jclark.com)
-
-This file is part of groff.
-
-groff is free software; you can redistribute it and/or modify it under
-the terms of the GNU General Public License as published by the Free
-Software Foundation, either version 3 of the License, or
-(at your option) any later version.
-
-groff is distributed in the hope that it will be useful, but WITHOUT ANY
-WARRANTY; without even the implied warranty of MERCHANTABILITY or
-FITNESS FOR A PARTICULAR PURPOSE.  See the GNU General Public License
-for more details.
-
-You should have received a copy of the GNU General Public License
-along with this program. If not, see <http://www.gnu.org/licenses/>. */
-
-%{
-#include "pic.h"
-#include "ptable.h"
-#include "object.h"
-
-extern int delim_flag;
-extern void copy_rest_thru(const char *, const char *);
-extern void copy_file_thru(const char *, const char *, const char *);
-extern void push_body(const char *);
-extern void do_for(char *var, double from, double to,
-		   int by_is_multiplicative, double by, char *body);
-extern void do_lookahead();
-
-/* Maximum number of characters produced by printf("%g") */
-#define GDIGITS 14
-
-int yylex();
-void yyerror(const char *);
-
-void reset(const char *nm);
-void reset_all();
-
-place *lookup_label(const char *);
-void define_label(const char *label, const place *pl);
-
-direction current_direction;
-position current_position;
-
-implement_ptable(place)
-
-PTABLE(place) top_table;
-
-PTABLE(place) *current_table = &top_table;
-saved_state *current_saved_state = 0;
-
-object_list olist;
-
-const char *ordinal_postfix(int n);
-const char *object_type_name(object_type type);
-char *format_number(const char *form, double n);
-char *do_sprintf(const char *form, const double *v, int nv);
-
-%}
-
-%expect 2
-
-%union {
-	char *str;
-	int n;
-	double x;
-	struct { double x, y; } pair;
-	struct { double x; char *body; } if_data;
-	struct { char *str; const char *filename; int lineno; } lstr;
-	struct { double *v; int nv; int maxv; } dv;
-	struct { double val; int is_multiplicative; } by;
-	place pl;
-	object *obj;
-	corner crn;
-	path *pth;
-	object_spec *spec;
-	saved_state *pstate;
-	graphics_state state;
-	object_type obtype;
-}
-
-%token <str> LABEL
-%token <str> VARIABLE
-%token <x> NUMBER
-%token <lstr> TEXT
-%token <lstr> COMMAND_LINE
-%token <str> DELIMITED
-%token <n> ORDINAL
-%token TH
-%token LEFT_ARROW_HEAD
-%token RIGHT_ARROW_HEAD
-%token DOUBLE_ARROW_HEAD
-%token LAST
-%token BOX
-%token CIRCLE
-%token ELLIPSE
-%token ARC
-%token LINE
-%token ARROW
-%token MOVE
-%token SPLINE
-%token HEIGHT
-%token RADIUS
-%token FIGNAME
-%token WIDTH
-%token DIAMETER
-%token UP
-%token DOWN
-%token RIGHT
-%token LEFT
-%token FROM
-%token TO
-%token AT
-%token WITH
-%token BY
-%token THEN
-%token SOLID
-%token DOTTED
-%token DASHED
-%token CHOP
-%token SAME
-%token INVISIBLE
-%token LJUST
-%token RJUST
-%token ABOVE
-%token BELOW
-%token OF
-%token THE
-%token WAY
-%token BETWEEN
-%token AND
-%token HERE
-%token DOT_N
-%token DOT_E	
-%token DOT_W
-%token DOT_S
-%token DOT_NE
-%token DOT_SE
-%token DOT_NW
-%token DOT_SW
-%token DOT_C
-%token DOT_START
-%token DOT_END
-%token DOT_X
-%token DOT_Y
-%token DOT_HT
-%token DOT_WID
-%token DOT_RAD
-%token SIN
-%token COS
-%token ATAN2
-%token LOG
-%token EXP
-%token SQRT
-%token K_MAX
-%token K_MIN
-%token INT
-%token RAND
-%token SRAND
-%token COPY
-%token THRU
-%token TOP
-%token BOTTOM
-%token UPPER
-%token LOWER
-%token SH
-%token PRINT
-%token CW
-%token CCW
-%token FOR
-%token DO
-%token IF
-%token ELSE
-%token ANDAND
-%token OROR
-%token NOTEQUAL
-%token EQUALEQUAL
-%token LESSEQUAL
-%token GREATEREQUAL
-%token LEFT_CORNER
-%token RIGHT_CORNER
-%token NORTH
-%token SOUTH
-%token EAST
-%token WEST
-%token CENTER
-%token END
-%token START
-%token RESET
-%token UNTIL
-%token PLOT
-%token THICKNESS
-%token FILL
-%token COLORED
-%token OUTLINED
-%token SHADED
-%token XSLANTED
-%token YSLANTED
-%token ALIGNED
-%token SPRINTF
-%token COMMAND
-
-%token DEFINE
-%token UNDEF
-
-%left '.'
-
-/* this ensures that plot 17 "%g" parses as (plot 17 "%g") */
-%left PLOT
-%left TEXT SPRINTF
-
-/* give text adjustments higher precedence than TEXT, so that
-box "foo" above ljust == box ("foo" above ljust)
-*/
-
-%left LJUST RJUST ABOVE BELOW
-
-%left LEFT RIGHT
-/* Give attributes that take an optional expression a higher
-precedence than left and right, so that eg `line chop left'
-parses properly. */
-%left CHOP SOLID DASHED DOTTED UP DOWN FILL COLORED OUTLINED
-%left XSLANTED YSLANTED
-%left LABEL
-
-%left VARIABLE NUMBER '(' SIN COS ATAN2 LOG EXP SQRT K_MAX K_MIN INT RAND SRAND LAST 
-%left ORDINAL HERE '`'
-
-%left BOX CIRCLE ELLIPSE ARC LINE ARROW SPLINE '['
-
-/* these need to be lower than '-' */
-%left HEIGHT RADIUS WIDTH DIAMETER FROM TO AT THICKNESS
-
-/* these must have higher precedence than CHOP so that `label %prec CHOP'
-works */
-%left DOT_N DOT_E DOT_W DOT_S DOT_NE DOT_SE DOT_NW DOT_SW DOT_C
-%left DOT_START DOT_END TOP BOTTOM LEFT_CORNER RIGHT_CORNER
-%left UPPER LOWER NORTH SOUTH EAST WEST CENTER START END
-
-%left ','
-%left OROR
-%left ANDAND
-%left EQUALEQUAL NOTEQUAL
-%left '<' '>' LESSEQUAL GREATEREQUAL
-
-%left BETWEEN OF
-%left AND
-
-%left '+' '-'
-%left '*' '/' '%'
-%right '!'
-%right '^'
-
-%type <x> expr expr_lower_than expr_not_lower_than any_expr text_expr
-%type <by> optional_by
-%type <pair> expr_pair position_not_place
-%type <if_data> simple_if
-%type <obj> nth_primitive
-%type <crn> corner
-%type <pth> path label_path relative_path
-%type <pl> place label element element_list middle_element_list
-%type <spec> object_spec
-%type <pair> position
-%type <obtype> object_type
-%type <n> optional_ordinal_last ordinal
-%type <str> macro_name until
-%type <dv> sprintf_args
-%type <lstr> text print_args print_arg
-
-%%
-
-top:
-	optional_separator
-	| element_list
-		{
-		  if (olist.head)
-		    print_picture(olist.head);
-		}
-	;
-
-
-element_list:
-	optional_separator middle_element_list optional_separator
-		{ $$ = $2; }
-	;
-
-middle_element_list:
-	element
-		{ $$ = $1; }
-	| middle_element_list separator element
-		{ $$ = $1; }
-	;
-
-optional_separator:
-	/* empty */
-	| separator
-	;
-
-separator:
-	';'
-	| separator ';'
-	;
-
-placeless_element:
-	FIGNAME '=' macro_name
-		{
-		  a_delete graphname;
-		  graphname = new char[strlen($3) + 1];
-		  strcpy(graphname, $3);
-		  a_delete $3;
-		}
-	|
-	VARIABLE '=' any_expr
-		{
-		  define_variable($1, $3);
-		  a_delete $1;
-		}
-	| VARIABLE ':' '=' any_expr
-		{
-		  place *p = lookup_label($1);
-		  if (!p) {
-		    lex_error("variable `%1' not defined", $1);
-		    YYABORT;
-		  }
-		  p->obj = 0;
-		  p->x = $4;
-		  p->y = 0.0;
-		  a_delete $1;
-		}
-	| UP
-		{ current_direction = UP_DIRECTION; }
-	| DOWN
-		{ current_direction = DOWN_DIRECTION; }
-	| LEFT
-		{ current_direction = LEFT_DIRECTION; }
-	| RIGHT
-		{ current_direction = RIGHT_DIRECTION; }
-	| COMMAND_LINE
-		{
-		  olist.append(make_command_object($1.str, $1.filename,
-						   $1.lineno));
-		}
-	| COMMAND print_args
-		{
-		  olist.append(make_command_object($2.str, $2.filename,
-						   $2.lineno));
-		}
-	| PRINT print_args
-		{
-		  fprintf(stderr, "%s\n", $2.str);
-		  a_delete $2.str;
-		  fflush(stderr);
-		}
-	| SH
-		{ delim_flag = 1; }
-	  DELIMITED
-		{
-		  delim_flag = 0;
-		  if (safer_flag)
-		    lex_error("unsafe to run command `%1'", $3);
-		  else
-		    system($3);
-		  a_delete $3;
-		}
-	| COPY TEXT
-		{
-		  if (yychar < 0)
-		    do_lookahead();
-		  do_copy($2.str);
-		  // do not delete the filename
-		}
-	| COPY TEXT THRU
-		{ delim_flag = 2; }
-	  DELIMITED 
-		{ delim_flag = 0; }
-	  until
-		{
-		  if (yychar < 0)
-		    do_lookahead();
-		  copy_file_thru($2.str, $5, $7);
-		  // do not delete the filename
-		  a_delete $5;
-		  a_delete $7;
-		}
-	| COPY THRU
-		{ delim_flag = 2; }
-	  DELIMITED
-		{ delim_flag = 0; }
-	  until
-		{
-		  if (yychar < 0)
-		    do_lookahead();
-		  copy_rest_thru($4, $6);
-		  a_delete $4;
-		  a_delete $6;
-		}
-	| FOR VARIABLE '=' expr TO expr optional_by DO
-	  	{ delim_flag = 1; }
-	  DELIMITED
-	  	{
-		  delim_flag = 0;
-		  if (yychar < 0)
-		    do_lookahead();
-		  do_for($2, $4, $6, $7.is_multiplicative, $7.val, $10); 
-		}
-	| simple_if
-		{
-		  if (yychar < 0)
-		    do_lookahead();
-		  if ($1.x != 0.0)
-		    push_body($1.body);
-		  a_delete $1.body;
-		}
-	| simple_if ELSE
-		{ delim_flag = 1; }
-	  DELIMITED
-		{
-		  delim_flag = 0;
-		  if (yychar < 0)
-		    do_lookahead();
-		  if ($1.x != 0.0)
-		    push_body($1.body);
-		  else
-		    push_body($4);
-		  a_delete $1.body;
-		  a_delete $4;
-		}
-	| reset_variables
-	| RESET
-		{ define_variable("scale", 1.0); }
-	;
-
-macro_name:
-	VARIABLE
-	| LABEL
-	;
-
-reset_variables:
-	RESET VARIABLE
-		{
-		  reset($2);
-		  a_delete $2;
-		}
-	| reset_variables VARIABLE
-		{
-		  reset($2);
-		  a_delete $2;
-		}
-	| reset_variables ',' VARIABLE
-		{
-		  reset($3);
-		  a_delete $3;
-		}
-	;
-
-print_args:
-	print_arg
-		{ $$ = $1; }
-	| print_args print_arg
-		{
-		  $$.str = new char[strlen($1.str) + strlen($2.str) + 1];
-		  strcpy($$.str, $1.str);
-		  strcat($$.str, $2.str);
-		  a_delete $1.str;
-		  a_delete $2.str;
-		  if ($1.filename) {
-		    $$.filename = $1.filename;
-		    $$.lineno = $1.lineno;
-		  }
-		  else if ($2.filename) {
-		    $$.filename = $2.filename;
-		    $$.lineno = $2.lineno;
-		  }
-		}
-	;
-
-print_arg:
-  	expr							%prec ','
-		{
-		  $$.str = new char[GDIGITS + 1];
-		  sprintf($$.str, "%g", $1);
-		  $$.filename = 0;
-		  $$.lineno = 0;
-		}
-	| text
-		{ $$ = $1; }
-	| position						%prec ','
-		{
-		  $$.str = new char[GDIGITS + 2 + GDIGITS + 1];
-		  sprintf($$.str, "%g, %g", $1.x, $1.y);
-		  $$.filename = 0;
-		  $$.lineno = 0;
-		}
-	;
-
-simple_if:
-	IF any_expr THEN
-		{ delim_flag = 1; }
-	DELIMITED
-		{
-		  delim_flag = 0;
-		  $$.x = $2;
-		  $$.body = $5;
-		}
-	;
-
-until:
-	/* empty */
-		{ $$ = 0; }
-	| UNTIL TEXT
-		{ $$ = $2.str; }
-	;
-	
-any_expr:
-	expr
-		{ $$ = $1; }
-	| text_expr
-		{ $$ = $1; }
-	;
-	
-text_expr:
-	text EQUALEQUAL text
-		{
-		  $$ = strcmp($1.str, $3.str) == 0;
-		  a_delete $1.str;
-		  a_delete $3.str;
-		}
-	| text NOTEQUAL text
-		{
-		  $$ = strcmp($1.str, $3.str) != 0;
-		  a_delete $1.str;
-		  a_delete $3.str;
-		}
-	| text_expr ANDAND text_expr
-		{ $$ = ($1 != 0.0 && $3 != 0.0); }
-	| text_expr ANDAND expr
-		{ $$ = ($1 != 0.0 && $3 != 0.0); }
-	| expr ANDAND text_expr
-		{ $$ = ($1 != 0.0 && $3 != 0.0); }
-	| text_expr OROR text_expr
-		{ $$ = ($1 != 0.0 || $3 != 0.0); }
-	| text_expr OROR expr
-		{ $$ = ($1 != 0.0 || $3 != 0.0); }
-	| expr OROR text_expr
-		{ $$ = ($1 != 0.0 || $3 != 0.0); }
-	| '!' text_expr
-		{ $$ = ($2 == 0.0); }
-	;
-
-
-optional_by:
-	/* empty */
-		{
-		  $$.val = 1.0;
-		  $$.is_multiplicative = 0;
-		}
-	| BY expr
-		{
-		  $$.val = $2;
-		  $$.is_multiplicative = 0;
-		}
-	| BY '*' expr
-		{
-		  $$.val = $3;
-		  $$.is_multiplicative = 1;
-		}
-	;
-
-element:
-	object_spec
-		{
-		  $$.obj = $1->make_object(&current_position,
-					   &current_direction);
-		  if ($$.obj == 0)
-		    YYABORT;
-		  delete $1;
-		  if ($$.obj)
-		    olist.append($$.obj);
-		  else {
-		    $$.x = current_position.x;
-		    $$.y = current_position.y;
-		  }
-		}
-	| LABEL ':' optional_separator element
-		{
-		  $$ = $4;
-		  define_label($1, & $$);
-		  a_delete $1;
-		}
-	| LABEL ':' optional_separator position_not_place
-		{
-		  $$.obj = 0;
-		  $$.x = $4.x;
-		  $$.y = $4.y;
-		  define_label($1, & $$);
-		  a_delete $1;
-		}
-	| LABEL ':' optional_separator place
-		{
-		  $$ = $4;
-		  define_label($1, & $$);
-		  a_delete $1;
-		}
-	| '{'
-		{
-		  $<state>$.x = current_position.x;
-		  $<state>$.y = current_position.y;
-		  $<state>$.dir = current_direction;
-		}
-	  element_list '}'
-		{
-		  current_position.x = $<state>2.x;
-		  current_position.y = $<state>2.y;
-		  current_direction = $<state>2.dir;
-		}
-	  optional_element
-		{
-		  $$ = $3;
-		}
-	| placeless_element
-		{
-		  $$.obj = 0;
-		  $$.x = current_position.x;
-		  $$.y = current_position.y;
-		}
-	;
-
-optional_element:
-	/* empty */
-		{}
-	| element
-		{}
-	;
-
-object_spec:
-	BOX
-		{ $$ = new object_spec(BOX_OBJECT); }
-	| CIRCLE
-		{ $$ = new object_spec(CIRCLE_OBJECT); }
-	| ELLIPSE
-		{ $$ = new object_spec(ELLIPSE_OBJECT); }
-	| ARC
-		{
-		  $$ = new object_spec(ARC_OBJECT);
-		  $$->dir = current_direction;
-		}
-	| LINE
-		{
-		  $$ = new object_spec(LINE_OBJECT);
-		  lookup_variable("lineht", & $$->segment_height);
-		  lookup_variable("linewid", & $$->segment_width);
-		  $$->dir = current_direction;
-		}
-	| ARROW
-		{
-		  $$ = new object_spec(ARROW_OBJECT);
-		  lookup_variable("lineht", & $$->segment_height);
-		  lookup_variable("linewid", & $$->segment_width);
-		  $$->dir = current_direction;
-		}
-	| MOVE
-		{
-		  $$ = new object_spec(MOVE_OBJECT);
-		  lookup_variable("moveht", & $$->segment_height);
-		  lookup_variable("movewid", & $$->segment_width);
-		  $$->dir = current_direction;
-		}
-	| SPLINE
-		{
-		  $$ = new object_spec(SPLINE_OBJECT);
-		  lookup_variable("lineht", & $$->segment_height);
-		  lookup_variable("linewid", & $$->segment_width);
-		  $$->dir = current_direction;
-		}
-	| text							%prec TEXT
-		{
-		  $$ = new object_spec(TEXT_OBJECT);
-		  $$->text = new text_item($1.str, $1.filename, $1.lineno);
-		}
-	| PLOT expr
-		{
-		  $$ = new object_spec(TEXT_OBJECT);
-		  $$->text = new text_item(format_number(0, $2), 0, -1);
-		}
-	| PLOT expr text
-		{
-		  $$ = new object_spec(TEXT_OBJECT);
-		  $$->text = new text_item(format_number($3.str, $2),
-					   $3.filename, $3.lineno);
-		  a_delete $3.str;
-		}
-	| '[' 
-		{
-		  saved_state *p = new saved_state;
-		  $<pstate>$ = p;
-		  p->x = current_position.x;
-		  p->y = current_position.y;
-		  p->dir = current_direction;
-		  p->tbl = current_table;
-		  p->prev = current_saved_state;
-		  current_position.x = 0.0;
-		  current_position.y = 0.0;
-		  current_table = new PTABLE(place);
-		  current_saved_state = p;
-		  olist.append(make_mark_object());
-		}
-	  element_list ']'
-		{
-		  current_position.x = $<pstate>2->x;
-		  current_position.y = $<pstate>2->y;
-		  current_direction = $<pstate>2->dir;
-		  $$ = new object_spec(BLOCK_OBJECT);
-		  olist.wrap_up_block(& $$->oblist);
-		  $$->tbl = current_table;
-		  current_table = $<pstate>2->tbl;
-		  current_saved_state = $<pstate>2->prev;
-		  delete $<pstate>2;
-		}
-	| object_spec HEIGHT expr
-		{
-		  $$ = $1;
-		  $$->height = $3;
-		  $$->flags |= HAS_HEIGHT;
-		}
-	| object_spec RADIUS expr
-		{
-		  $$ = $1;
-		  $$->radius = $3;
-		  $$->flags |= HAS_RADIUS;
-		}
-	| object_spec WIDTH expr
-		{
-		  $$ = $1;
-		  $$->width = $3;
-		  $$->flags |= HAS_WIDTH;
-		}
-	| object_spec DIAMETER expr
-		{
-		  $$ = $1;
-		  $$->radius = $3/2.0;
-		  $$->flags |= HAS_RADIUS;
-		}
-	| object_spec expr					%prec HEIGHT
-		{
-		  $$ = $1;
-		  $$->flags |= HAS_SEGMENT;
-		  switch ($$->dir) {
-		  case UP_DIRECTION:
-		    $$->segment_pos.y += $2;
-		    break;
-		  case DOWN_DIRECTION:
-		    $$->segment_pos.y -= $2;
-		    break;
-		  case RIGHT_DIRECTION:
-		    $$->segment_pos.x += $2;
-		    break;
-		  case LEFT_DIRECTION:
-		    $$->segment_pos.x -= $2;
-		    break;
-		  }
-		}
-	| object_spec UP
-		{
-		  $$ = $1;
-		  $$->dir = UP_DIRECTION;
-		  $$->flags |= HAS_SEGMENT;
-		  $$->segment_pos.y += $$->segment_height;
-		}
-	| object_spec UP expr
-		{
-		  $$ = $1;
-		  $$->dir = UP_DIRECTION;
-		  $$->flags |= HAS_SEGMENT;
-		  $$->segment_pos.y += $3;
-		}
-	| object_spec DOWN
-		{
-		  $$ = $1;
-		  $$->dir = DOWN_DIRECTION;
-		  $$->flags |= HAS_SEGMENT;
-		  $$->segment_pos.y -= $$->segment_height;
-		}
-	| object_spec DOWN expr
-		{
-		  $$ = $1;
-		  $$->dir = DOWN_DIRECTION;
-		  $$->flags |= HAS_SEGMENT;
-		  $$->segment_pos.y -= $3;
-		}
-	| object_spec RIGHT
-		{
-		  $$ = $1;
-		  $$->dir = RIGHT_DIRECTION;
-		  $$->flags |= HAS_SEGMENT;
-		  $$->segment_pos.x += $$->segment_width;
-		}
-	| object_spec RIGHT expr
-		{
-		  $$ = $1;
-		  $$->dir = RIGHT_DIRECTION;
-		  $$->flags |= HAS_SEGMENT;
-		  $$->segment_pos.x += $3;
-		}
-	| object_spec LEFT
-		{
-		  $$ = $1;
-		  $$->dir = LEFT_DIRECTION;
-		  $$->flags |= HAS_SEGMENT;
-		  $$->segment_pos.x -= $$->segment_width;
-		}
-	| object_spec LEFT expr
-		{
-		  $$ = $1;
-		  $$->dir = LEFT_DIRECTION;
-		  $$->flags |= HAS_SEGMENT;
-		  $$->segment_pos.x -= $3;
-		}
-	| object_spec FROM position
-		{
-		  $$ = $1;
-		  $$->flags |= HAS_FROM;
-		  $$->from.x = $3.x;
-		  $$->from.y = $3.y;
-		}
-	| object_spec TO position
-		{
-		  $$ = $1;
-		  if ($$->flags & HAS_SEGMENT)
-		    $$->segment_list = new segment($$->segment_pos,
-						   $$->segment_is_absolute,
-						   $$->segment_list);
-		  $$->flags |= HAS_SEGMENT;
-		  $$->segment_pos.x = $3.x;
-		  $$->segment_pos.y = $3.y;
-		  $$->segment_is_absolute = 1;
-		  $$->flags |= HAS_TO;
-		  $$->to.x = $3.x;
-		  $$->to.y = $3.y;
-		}
-	| object_spec AT position
-		{
-		  $$ = $1;
-		  $$->flags |= HAS_AT;
-		  $$->at.x = $3.x;
-		  $$->at.y = $3.y;
-		  if ($$->type != ARC_OBJECT) {
-		    $$->flags |= HAS_FROM;
-		    $$->from.x = $3.x;
-		    $$->from.y = $3.y;
-		  }
-		}
-	| object_spec WITH path
-		{
-		  $$ = $1;
-		  $$->flags |= HAS_WITH;
-		  $$->with = $3;
-		}
-	| object_spec WITH position				%prec ','
-		{
-		  $$ = $1;
-		  $$->flags |= HAS_WITH;
-		  position pos;
-		  pos.x = $3.x;
-		  pos.y = $3.y;
-		  $$->with = new path(pos);
-		}
-	| object_spec BY expr_pair
-		{
-		  $$ = $1;
-		  $$->flags |= HAS_SEGMENT;
-		  $$->segment_pos.x += $3.x;
-		  $$->segment_pos.y += $3.y;
-		}
-	| object_spec THEN
-  		{
-		  $$ = $1;
-		  if (!($$->flags & HAS_SEGMENT))
-		    switch ($$->dir) {
-		    case UP_DIRECTION:
-		      $$->segment_pos.y += $$->segment_width;
-		      break;
-		    case DOWN_DIRECTION:
-		      $$->segment_pos.y -= $$->segment_width;
-		      break;
-		    case RIGHT_DIRECTION:
-		      $$->segment_pos.x += $$->segment_width;
-		      break;
-		    case LEFT_DIRECTION:
-		      $$->segment_pos.x -= $$->segment_width;
-		      break;
-		    }
-		  $$->segment_list = new segment($$->segment_pos,
-						 $$->segment_is_absolute,
-						 $$->segment_list);
-		  $$->flags &= ~HAS_SEGMENT;
-		  $$->segment_pos.x = $$->segment_pos.y = 0.0;
-		  $$->segment_is_absolute = 0;
-		}
-	| object_spec SOLID
-		{
-		  $$ = $1;	// nothing
-		}
-	| object_spec DOTTED
-		{
-		  $$ = $1;
-		  $$->flags |= IS_DOTTED;
-		  lookup_variable("dashwid", & $$->dash_width);
-		}
-	| object_spec DOTTED expr
-		{
-		  $$ = $1;
-		  $$->flags |= IS_DOTTED;
-		  $$->dash_width = $3;
-		}
-	| object_spec DASHED
-		{
-		  $$ = $1;
-		  $$->flags |= IS_DASHED;
-		  lookup_variable("dashwid", & $$->dash_width);
-		}
-	| object_spec DASHED expr
-		{
-		  $$ = $1;
-		  $$->flags |= IS_DASHED;
-		  $$->dash_width = $3;
-		}
-	| object_spec FILL
-		{
-		  $$ = $1;
-		  $$->flags |= IS_DEFAULT_FILLED;
-		}
-	| object_spec FILL expr
-		{
-		  $$ = $1;
-		  $$->flags |= IS_FILLED;
-		  $$->fill = $3;
-		}
-	| object_spec XSLANTED expr
-		{
-		  $$ = $1;
-		  $$->flags |= IS_XSLANTED;
-		  $$->xslanted = $3;
-		}
-	| object_spec YSLANTED expr
-		{
-		  $$ = $1;
-		  $$->flags |= IS_YSLANTED;
-		  $$->yslanted = $3;
-		}
-	| object_spec SHADED text
-		{
-		  $$ = $1;
-		  $$->flags |= (IS_SHADED | IS_FILLED);
-		  $$->shaded = new char[strlen($3.str)+1];
-		  strcpy($$->shaded, $3.str);
-		}
-	| object_spec COLORED text
-		{
-		  $$ = $1;
-		  $$->flags |= (IS_SHADED | IS_OUTLINED | IS_FILLED);
-		  $$->shaded = new char[strlen($3.str)+1];
-		  strcpy($$->shaded, $3.str);
-		  $$->outlined = new char[strlen($3.str)+1];
-		  strcpy($$->outlined, $3.str);
-		}
-	| object_spec OUTLINED text
-		{
-		  $$ = $1;
-		  $$->flags |= IS_OUTLINED;
-		  $$->outlined = new char[strlen($3.str)+1];
-		  strcpy($$->outlined, $3.str);
-		}
-	| object_spec CHOP
-  		{
-		  $$ = $1;
-		  // line chop chop means line chop 0 chop 0
-		  if ($$->flags & IS_DEFAULT_CHOPPED) {
-		    $$->flags |= IS_CHOPPED;
-		    $$->flags &= ~IS_DEFAULT_CHOPPED;
-		    $$->start_chop = $$->end_chop = 0.0;
-		  }
-		  else if ($$->flags & IS_CHOPPED) {
-		    $$->end_chop = 0.0;
-		  }
-		  else {
-		    $$->flags |= IS_DEFAULT_CHOPPED;
-		  }
-		}
-	| object_spec CHOP expr
-		{
-		  $$ = $1;
-		  if ($$->flags & IS_DEFAULT_CHOPPED) {
-		    $$->flags |= IS_CHOPPED;
-		    $$->flags &= ~IS_DEFAULT_CHOPPED;
-		    $$->start_chop = 0.0;
-		    $$->end_chop = $3;
-		  }
-		  else if ($$->flags & IS_CHOPPED) {
-		    $$->end_chop = $3;
-		  }
-		  else {
-		    $$->start_chop = $$->end_chop = $3;
-		    $$->flags |= IS_CHOPPED;
-		  }
-		}
-	| object_spec SAME
-		{
-		  $$ = $1;
-		  $$->flags |= IS_SAME;
-		}
-	| object_spec INVISIBLE
-		{
-		  $$ = $1;
-		  $$->flags |= IS_INVISIBLE;
-		}
-	| object_spec LEFT_ARROW_HEAD
-		{
-		  $$ = $1;
-		  $$->flags |= HAS_LEFT_ARROW_HEAD;
-		}
-	| object_spec RIGHT_ARROW_HEAD
-		{
-		  $$ = $1;
-		  $$->flags |= HAS_RIGHT_ARROW_HEAD;
-		}
-	| object_spec DOUBLE_ARROW_HEAD
-		{
-		  $$ = $1;
-		  $$->flags |= (HAS_LEFT_ARROW_HEAD|HAS_RIGHT_ARROW_HEAD);
-		}
-	| object_spec CW
-		{
-		  $$ = $1;
-		  $$->flags |= IS_CLOCKWISE;
-		}
-	| object_spec CCW
-		{
-		  $$ = $1;
-		  $$->flags &= ~IS_CLOCKWISE;
-		}
-	| object_spec text					%prec TEXT
-		{
-		  $$ = $1;
-		  text_item **p;
-		  for (p = & $$->text; *p; p = &(*p)->next)
-		    ;
-		  *p = new text_item($2.str, $2.filename, $2.lineno);
-		}
-	| object_spec LJUST
-		{
-		  $$ = $1;
-		  if ($$->text) {
-		    text_item *p;
-		    for (p = $$->text; p->next; p = p->next)
-		      ;
-		    p->adj.h = LEFT_ADJUST;
-		  }
-		}
-	| object_spec RJUST
-		{
-		  $$ = $1;
-		  if ($$->text) {
-		    text_item *p;
-		    for (p = $$->text; p->next; p = p->next)
-		      ;
-		    p->adj.h = RIGHT_ADJUST;
-		  }
-		}
-	| object_spec ABOVE
-		{
-		  $$ = $1;
-		  if ($$->text) {
-		    text_item *p;
-		    for (p = $$->text; p->next; p = p->next)
-		      ;
-		    p->adj.v = ABOVE_ADJUST;
-		  }
-		}
-	| object_spec BELOW
-		{
-		  $$ = $1;
-		  if ($$->text) {
-		    text_item *p;
-		    for (p = $$->text; p->next; p = p->next)
-		      ;
-		    p->adj.v = BELOW_ADJUST;
-		  }
-		}
-	| object_spec THICKNESS expr
-		{
-		  $$ = $1;
-		  $$->flags |= HAS_THICKNESS;
-		  $$->thickness = $3;
-		}
-	| object_spec ALIGNED
-		{
-		  $$ = $1;
-		  $$->flags |= IS_ALIGNED;
-		}
-	;
-
-text:
-	TEXT
-		{ $$ = $1; }
-	| SPRINTF '(' TEXT sprintf_args ')'
-		{
-		  $$.filename = $3.filename;
-		  $$.lineno = $3.lineno;
-		  $$.str = do_sprintf($3.str, $4.v, $4.nv);
-		  a_delete $4.v;
-		  a_delete $3.str;
-		}
-	;
-
-sprintf_args:
-	/* empty */
-		{
-		  $$.v = 0;
-		  $$.nv = 0;
-		  $$.maxv = 0;
-		}
-	| sprintf_args ',' expr
-		{
-		  $$ = $1;
-		  if ($$.nv >= $$.maxv) {
-		    if ($$.nv == 0) {
-		      $$.v = new double[4];
-		      $$.maxv = 4;
-		    }
-		    else {
-		      double *oldv = $$.v;
-		      $$.maxv *= 2;
-#if 0
-		      $$.v = new double[$$.maxv];
-		      memcpy($$.v, oldv, $$.nv*sizeof(double));
-#else
-		      // workaround for bug in Compaq C++ V6.5-033
-		      // for Compaq Tru64 UNIX V5.1A (Rev. 1885)
-		      double *foo = new double[$$.maxv];
-		      memcpy(foo, oldv, $$.nv*sizeof(double));
-		      $$.v = foo;
-#endif
-		      a_delete oldv;
-		    }
-		  }
-		  $$.v[$$.nv] = $3;
-		  $$.nv += 1;
-		}
-	;
-
-position:
-  	position_not_place
-		{ $$ = $1; }
-	| place
-  		{
-		  position pos = $1;
-		  $$.x = pos.x;
-		  $$.y = pos.y;
-		}
-	| '(' place ')'
-		{
-		  position pos = $2;
-		  $$.x = pos.x;
-		  $$.y = pos.y;
-		}
-	;
-
-position_not_place:
-	expr_pair
-		{ $$ = $1; }
-	| position '+' expr_pair
-		{
-		  $$.x = $1.x + $3.x;
-		  $$.y = $1.y + $3.y;
-		}
-	| '(' position '+' expr_pair ')'
-		{
-		  $$.x = $2.x + $4.x;
-		  $$.y = $2.y + $4.y;
-		}
-	| position '-' expr_pair
-		{
-		  $$.x = $1.x - $3.x;
-		  $$.y = $1.y - $3.y;
-		}
-	| '(' position '-' expr_pair ')'
-		{
-		  $$.x = $2.x - $4.x;
-		  $$.y = $2.y - $4.y;
-		}
-	| '(' position ',' position ')'
-		{
-		  $$.x = $2.x;
-		  $$.y = $4.y;
-		}
-	| expr between position AND position
-		{
-		  $$.x = (1.0 - $1)*$3.x + $1*$5.x;
-		  $$.y = (1.0 - $1)*$3.y + $1*$5.y;
-		}
-	| '(' expr between position AND position ')'
-		{
-		  $$.x = (1.0 - $2)*$4.x + $2*$6.x;
-		  $$.y = (1.0 - $2)*$4.y + $2*$6.y;
-		}
-	/* the next two rules cause harmless shift/reduce warnings */
-	| expr_not_lower_than '<' position ',' position '>'
-		{
-		  $$.x = (1.0 - $1)*$3.x + $1*$5.x;
-		  $$.y = (1.0 - $1)*$3.y + $1*$5.y;
-		}
-	| '(' expr_not_lower_than '<' position ',' position '>' ')'
-		{
-		  $$.x = (1.0 - $2)*$4.x + $2*$6.x;
-		  $$.y = (1.0 - $2)*$4.y + $2*$6.y;
-		}
-	;
-
-between:
-	BETWEEN
-	| OF THE WAY BETWEEN
-	;
-
-expr_pair:
-	expr ',' expr
-		{
-		  $$.x = $1;
-		  $$.y = $3;
-		}
-	| '(' expr_pair ')'
-		{ $$ = $2; }
-	;
-
-place:
-	/* line at A left == line (at A) left */
-	label							%prec CHOP
-		{ $$ = $1; }
-	| label corner
-		{
-		  path pth($2);
-		  if (!pth.follow($1, & $$))
-		    YYABORT;
-		}
-	| corner label
-		{
-		  path pth($1);
-		  if (!pth.follow($2, & $$))
-		    YYABORT;
-		}
-	| corner OF label
-		{
-		  path pth($1);
-		  if (!pth.follow($3, & $$))
-		    YYABORT;
-		}
-	| HERE
-		{
-		  $$.x = current_position.x;
-		  $$.y = current_position.y;
-		  $$.obj = 0;
-		}
-	;
-
-label:
-	LABEL
-		{
-		  place *p = lookup_label($1);
-		  if (!p) {
-		    lex_error("there is no place `%1'", $1);
-		    YYABORT;
-		  }
-		  $$ = *p;
-		  a_delete $1;
-		}
-	| nth_primitive
-		{ $$.obj = $1; }
-	| label '.' LABEL
-		{
-		  path pth($3);
-		  if (!pth.follow($1, & $$))
-		    YYABORT;
-		}
-	;
-
-ordinal:
-	ORDINAL
-		{ $$ = $1; }
-	| '`' any_expr TH
-		{
-		  // XXX Check for overflow (and non-integers?).
-		  $$ = (int)$2;
-		}
-	;
-
-optional_ordinal_last:
-	LAST
-		{ $$ = 1; }
-  	| ordinal LAST
-		{ $$ = $1; }
-	;
-
-nth_primitive:
-	ordinal object_type
-		{
-		  int count = 0;
-		  object *p;
-		  for (p = olist.head; p != 0; p = p->next)
-		    if (p->type() == $2 && ++count == $1) {
-		      $$ = p;
-		      break;
-		    }
-		  if (p == 0) {
-		    lex_error("there is no %1%2 %3", $1, ordinal_postfix($1),
-			      object_type_name($2));
-		    YYABORT;
-		  }
-		}
-	| optional_ordinal_last object_type
-		{
-		  int count = 0;
-		  object *p;
-		  for (p = olist.tail; p != 0; p = p->prev)
-		    if (p->type() == $2 && ++count == $1) {
-		      $$ = p;
-		      break;
-		    }
-		  if (p == 0) {
-		    lex_error("there is no %1%2 last %3", $1,
-			      ordinal_postfix($1), object_type_name($2));
-		    YYABORT;
-		  }
-		}
-	;
-
-object_type:
-	BOX
-  		{ $$ = BOX_OBJECT; }
-	| CIRCLE
-		{ $$ = CIRCLE_OBJECT; }
-	| ELLIPSE
-		{ $$ = ELLIPSE_OBJECT; }
-	| ARC
-		{ $$ = ARC_OBJECT; }
-	| LINE
-		{ $$ = LINE_OBJECT; }
-	| ARROW
-		{ $$ = ARROW_OBJECT; }
-	| SPLINE
-		{ $$ = SPLINE_OBJECT; }
-	| '[' ']'
-		{ $$ = BLOCK_OBJECT; }
-	| TEXT
-		{ $$ = TEXT_OBJECT; }
-	;
-
-label_path:
- 	'.' LABEL
-		{ $$ = new path($2); }
-	| label_path '.' LABEL
-		{
-		  $$ = $1;
-		  $$->append($3);
-		}
-	;
-
-relative_path:
-	corner							%prec CHOP
-		{ $$ = new path($1); }
-	/* give this a lower precedence than LEFT and RIGHT so that
-	   [A: box] with .A left == [A: box] with (.A left) */
-  	| label_path						%prec TEXT
-		{ $$ = $1; }
-	| label_path corner
-		{
-		  $$ = $1;
-		  $$->append($2);
-		}
-	;
-
-path:
-	relative_path
-		{ $$ = $1; }
-	| '(' relative_path ',' relative_path ')'
-		{
-		  $$ = $2;
-		  $$->set_ypath($4);
-		}
-	/* The rest of these rules are a compatibility sop. */
-	| ORDINAL LAST object_type relative_path
-		{
-		  lex_warning("`%1%2 last %3' in `with' argument ignored",
-			      $1, ordinal_postfix($1), object_type_name($3));
-		  $$ = $4;
-		}
-	| LAST object_type relative_path
-		{
-		  lex_warning("`last %1' in `with' argument ignored",
-			      object_type_name($2));
-		  $$ = $3;
-		}
-	| ORDINAL object_type relative_path
-		{
-		  lex_warning("`%1%2 %3' in `with' argument ignored",
-			      $1, ordinal_postfix($1), object_type_name($2));
-		  $$ = $3;
-		}
-	| LABEL relative_path
-		{
-		  lex_warning("initial `%1' in `with' argument ignored", $1);
-		  a_delete $1;
-		  $$ = $2;
-		}
-	;
-
-corner:
-	DOT_N
-		{ $$ = &object::north; }
-	| DOT_E	
-		{ $$ = &object::east; }
-	| DOT_W
-		{ $$ = &object::west; }
-	| DOT_S
-		{ $$ = &object::south; }
-	| DOT_NE
-		{ $$ = &object::north_east; }
-	| DOT_SE
-		{ $$ = &object:: south_east; }
-	| DOT_NW
-		{ $$ = &object::north_west; }
-	| DOT_SW
-		{ $$ = &object::south_west; }
-	| DOT_C
-		{ $$ = &object::center; }
-	| DOT_START
-		{ $$ = &object::start; }
-	| DOT_END
-		{ $$ = &object::end; }
-  	| TOP
-		{ $$ = &object::north; }
-	| BOTTOM
-		{ $$ = &object::south; }
-	| LEFT
-		{ $$ = &object::west; }
-	| RIGHT
-		{ $$ = &object::east; }
-	| UPPER LEFT
-		{ $$ = &object::north_west; }
-	| LOWER LEFT
-		{ $$ = &object::south_west; }
-	| UPPER RIGHT
-		{ $$ = &object::north_east; }
-	| LOWER RIGHT
-		{ $$ = &object::south_east; }
-	| LEFT_CORNER
-		{ $$ = &object::west; }
-	| RIGHT_CORNER
-		{ $$ = &object::east; }
-	| UPPER LEFT_CORNER
-		{ $$ = &object::north_west; }
-	| LOWER LEFT_CORNER
-		{ $$ = &object::south_west; }
-	| UPPER RIGHT_CORNER
-		{ $$ = &object::north_east; }
-	| LOWER RIGHT_CORNER
-		{ $$ = &object::south_east; }
-	| NORTH
-		{ $$ = &object::north; }
-	| SOUTH
-		{ $$ = &object::south; }
-	| EAST
-		{ $$ = &object::east; }
-	| WEST
-		{ $$ = &object::west; }
-	| CENTER
-		{ $$ = &object::center; }
-	| START
-		{ $$ = &object::start; }
-	| END
-		{ $$ = &object::end; }
-	;
-
-expr:
-	expr_lower_than
-		{ $$ = $1; }
-	| expr_not_lower_than
-		{ $$ = $1; }
-	;
-
-expr_lower_than:
-	expr '<' expr
-		{ $$ = ($1 < $3); }
-	;
-
-expr_not_lower_than:
-	VARIABLE
-		{
-		  if (!lookup_variable($1, & $$)) {
-		    lex_error("there is no variable `%1'", $1);
-		    YYABORT;
-		  }
-		  a_delete $1;
-		}
-	| NUMBER
-		{ $$ = $1; }
-	| place DOT_X
-  		{
-		  if ($1.obj != 0)
-		    $$ = $1.obj->origin().x;
-		  else
-		    $$ = $1.x;
-		}			
-	| place DOT_Y
-		{
-		  if ($1.obj != 0)
-		    $$ = $1.obj->origin().y;
-		  else
-		    $$ = $1.y;
-		}
-	| place DOT_HT
-		{
-		  if ($1.obj != 0)
-		    $$ = $1.obj->height();
-		  else
-		    $$ = 0.0;
-		}
-	| place DOT_WID
-		{
-		  if ($1.obj != 0)
-		    $$ = $1.obj->width();
-		  else
-		    $$ = 0.0;
-		}
-	| place DOT_RAD
-		{
-		  if ($1.obj != 0)
-		    $$ = $1.obj->radius();
-		  else
-		    $$ = 0.0;
-		}
-	| expr '+' expr
-		{ $$ = $1 + $3; }
-	| expr '-' expr
-		{ $$ = $1 - $3; }
-	| expr '*' expr
-		{ $$ = $1 * $3; }
-	| expr '/' expr
-		{
-		  if ($3 == 0.0) {
-		    lex_error("division by zero");
-		    YYABORT;
-		  }
-		  $$ = $1/$3;
-		}
-	| expr '%' expr
-		{
-		  if ($3 == 0.0) {
-		    lex_error("modulus by zero");
-		    YYABORT;
-		  }
-		  $$ = fmod($1, $3);
-		}
-	| expr '^' expr
-		{
-		  errno = 0;
-		  $$ = pow($1, $3);
-		  if (errno == EDOM) {
-		    lex_error("arguments to `^' operator out of domain");
-		    YYABORT;
-		  }
-		  if (errno == ERANGE) {
-		    lex_error("result of `^' operator out of range");
-		    YYABORT;
-		  }
-		}
-	| '-' expr						%prec '!'
-		{ $$ = -$2; }
-	| '(' any_expr ')'
-		{ $$ = $2; }
-	| SIN '(' any_expr ')'
-		{
-		  errno = 0;
-		  $$ = sin($3);
-		  if (errno == ERANGE) {
-		    lex_error("sin result out of range");
-		    YYABORT;
-		  }
-		}
-	| COS '(' any_expr ')'
-		{
-		  errno = 0;
-		  $$ = cos($3);
-		  if (errno == ERANGE) {
-		    lex_error("cos result out of range");
-		    YYABORT;
-		  }
-		}
-	| ATAN2 '(' any_expr ',' any_expr ')'
-		{
-		  errno = 0;
-		  $$ = atan2($3, $5);
-		  if (errno == EDOM) {
-		    lex_error("atan2 argument out of domain");
-		    YYABORT;
-		  }
-		  if (errno == ERANGE) {
-		    lex_error("atan2 result out of range");
-		    YYABORT;
-		  }
-		}
-	| LOG '(' any_expr ')'
-		{
-		  errno = 0;
-		  $$ = log10($3);
-		  if (errno == ERANGE) {
-		    lex_error("log result out of range");
-		    YYABORT;
-		  }
-		}
-	| EXP '(' any_expr ')'
-		{
-		  errno = 0;
-		  $$ = pow(10.0, $3);
-		  if (errno == ERANGE) {
-		    lex_error("exp result out of range");
-		    YYABORT;
-		  }
-		}
-	| SQRT '(' any_expr ')'
-		{
-		  errno = 0;
-		  $$ = sqrt($3);
-		  if (errno == EDOM) {
-		    lex_error("sqrt argument out of domain");
-		    YYABORT;
-		  }
-		}
-	| K_MAX '(' any_expr ',' any_expr ')'
-		{ $$ = $3 > $5 ? $3 : $5; }
-	| K_MIN '(' any_expr ',' any_expr ')'
-		{ $$ = $3 < $5 ? $3 : $5; }
-	| INT '(' any_expr ')'
-		{ $$ = $3 < 0 ? -floor(-$3) : floor($3); }
-	| RAND '(' any_expr ')'
-		{ $$ = 1.0 + floor(((rand()&0x7fff)/double(0x7fff))*$3); }
-	| RAND '(' ')'
-		{
-		  /* return a random number in the range [0,1) */
-		  /* portable, but not very random */
-		  $$ = (rand() & 0x7fff) / double(0x8000);
-		}
-	| SRAND '(' any_expr ')'
-		{
-		  $$ = 0;
-		  srand((unsigned int)$3);
-		}
-	| expr LESSEQUAL expr
-		{ $$ = ($1 <= $3); }
-	| expr '>' expr
-		{ $$ = ($1 > $3); }
-	| expr GREATEREQUAL expr
-		{ $$ = ($1 >= $3); }
-	| expr EQUALEQUAL expr
-		{ $$ = ($1 == $3); }
-	| expr NOTEQUAL expr
-		{ $$ = ($1 != $3); }
-	| expr ANDAND expr
-		{ $$ = ($1 != 0.0 && $3 != 0.0); }
-	| expr OROR expr
-		{ $$ = ($1 != 0.0 || $3 != 0.0); }
-	| '!' expr
-		{ $$ = ($2 == 0.0); }
-
-	;
-
-%%
-
-/* bison defines const to be empty unless __STDC__ is defined, which it
-isn't under cfront */
-
-#ifdef const
-#undef const
-#endif
-
-static struct {
-  const char *name;
-  double val;
-  int scaled;		     // non-zero if val should be multiplied by scale
-} defaults_table[] = {
-  { "arcrad", .25, 1 },
-  { "arrowht", .1, 1 },
-  { "arrowwid", .05, 1 },
-  { "circlerad", .25, 1 },
-  { "boxht", .5, 1 },
-  { "boxwid", .75, 1 },
-  { "boxrad", 0.0, 1 },
-  { "dashwid", .05, 1 },
-  { "ellipseht", .5, 1 },
-  { "ellipsewid", .75, 1 },
-  { "moveht", .5, 1 },
-  { "movewid", .5, 1 },
-  { "lineht", .5, 1 },
-  { "linewid", .5, 1 },
-  { "textht", 0.0, 1 },
-  { "textwid", 0.0, 1 },
-  { "scale", 1.0, 0 },
-  { "linethick", -1.0, 0 },		// in points
-  { "fillval", .5, 0 },
-  { "arrowhead", 1.0, 0 },
-  { "maxpswid", 8.5, 0 },
-  { "maxpsht", 11.0, 0 },
-};
-
-place *lookup_label(const char *label)
-{
-  saved_state *state = current_saved_state;
-  PTABLE(place) *tbl = current_table;
-  for (;;) {
-    place *pl = tbl->lookup(label);
-    if (pl)
-      return pl;
-    if (!state)
-      return 0;
-    tbl = state->tbl;
-    state = state->prev;
-  }
-}
-
-void define_label(const char *label, const place *pl)
-{
-  place *p = new place[1];
-  *p = *pl;
-  current_table->define(label, p);
-}
-
-int lookup_variable(const char *name, double *val)
-{
-  place *pl = lookup_label(name);
-  if (pl) {
-    *val = pl->x;
-    return 1;
-  }
-  return 0;
-}
-
-void define_variable(const char *name, double val)
-{
-  place *p = new place[1];
-  p->obj = 0;
-  p->x = val;
-  p->y = 0.0;
-  current_table->define(name, p);
-  if (strcmp(name, "scale") == 0) {
-    // When the scale changes, reset all scaled pre-defined variables to
-    // their default values.
-    for (unsigned int i = 0;
-	 i < sizeof(defaults_table)/sizeof(defaults_table[0]); i++) 
-      if (defaults_table[i].scaled)
-	define_variable(defaults_table[i].name, val*defaults_table[i].val);
-  }
-}
-
-// called once only (not once per parse)
-
-void parse_init()
-{
-  current_direction = RIGHT_DIRECTION;
-  current_position.x = 0.0;
-  current_position.y = 0.0;
-  // This resets everything to its default value.
-  reset_all();
-}
-
-void reset(const char *nm)
-{
-  for (unsigned int i = 0;
-       i < sizeof(defaults_table)/sizeof(defaults_table[0]); i++)
-    if (strcmp(nm, defaults_table[i].name) == 0) {
-      double val = defaults_table[i].val;
-      if (defaults_table[i].scaled) {
-	double scale;
-	lookup_variable("scale", &scale);
-	val *= scale;
-      }
-      define_variable(defaults_table[i].name, val);
-      return;
-    }
-  lex_error("`%1' is not a predefined variable", nm);
-}
-
-void reset_all()
-{
-  // We only have to explicitly reset the pre-defined variables that
-  // aren't scaled because `scale' is not scaled, and changing the
-  // value of `scale' will reset all the pre-defined variables that
-  // are scaled.
-  for (unsigned int i = 0;
-       i < sizeof(defaults_table)/sizeof(defaults_table[0]); i++)
-    if (!defaults_table[i].scaled)
-      define_variable(defaults_table[i].name, defaults_table[i].val);
-}
-
-// called after each parse
-
-void parse_cleanup()
-{
-  while (current_saved_state != 0) {
-    delete current_table;
-    current_table = current_saved_state->tbl;
-    saved_state *tem = current_saved_state;
-    current_saved_state = current_saved_state->prev;
-    delete tem;
-  }
-  assert(current_table == &top_table);
-  PTABLE_ITERATOR(place) iter(current_table);
-  const char *key;
-  place *pl;
-  while (iter.next(&key, &pl))
-    if (pl->obj != 0) {
-      position pos = pl->obj->origin();
-      pl->obj = 0;
-      pl->x = pos.x;
-      pl->y = pos.y;
-    }
-  while (olist.head != 0) {
-    object *tem = olist.head;
-    olist.head = olist.head->next;
-    delete tem;
-  }
-  olist.tail = 0;
-  current_direction = RIGHT_DIRECTION;
-  current_position.x = 0.0;
-  current_position.y = 0.0;
-}
-
-const char *ordinal_postfix(int n)
-{
-  if (n < 10 || n > 20)
-    switch (n % 10) {
-    case 1:
-      return "st";
-    case 2:
-      return "nd";
-    case 3:
-      return "rd";
-    }
-  return "th";
-}
-
-const char *object_type_name(object_type type)
-{
-  switch (type) {
-  case BOX_OBJECT:
-    return "box";
-  case CIRCLE_OBJECT:
-    return "circle";
-  case ELLIPSE_OBJECT:
-    return "ellipse";
-  case ARC_OBJECT:
-    return "arc";
-  case SPLINE_OBJECT:
-    return "spline";
-  case LINE_OBJECT:
-    return "line";
-  case ARROW_OBJECT:
-    return "arrow";
-  case MOVE_OBJECT:
-    return "move";
-  case TEXT_OBJECT:
-    return "\"\"";
-  case BLOCK_OBJECT:
-    return "[]";
-  case OTHER_OBJECT:
-  case MARK_OBJECT:
-  default:
-    break;
-  }
-  return "object";
-}
-
-static char sprintf_buf[1024];
-
-char *format_number(const char *form, double n)
-{
-  if (form == 0)
-    form = "%g";
-  return do_sprintf(form, &n, 1);
-}
-
-char *do_sprintf(const char *form, const double *v, int nv)
-{
-  string result;
-  int i = 0;
-  string one_format;
-  while (*form) {
-    if (*form == '%') {
-      one_format += *form++;
-      for (; *form != '\0' && strchr("#-+ 0123456789.", *form) != 0; form++)
-	one_format += *form;
-      if (*form == '\0' || strchr("eEfgG%", *form) == 0) {
-	lex_error("bad sprintf format");
-	result += one_format;
-	result += form;
-	break;
-      }
-      if (*form == '%') {
-	one_format += *form++;
-	one_format += '\0';
-	snprintf(sprintf_buf, sizeof(sprintf_buf),
-		 "%s", one_format.contents());
-      }
-      else {
-	if (i >= nv) {
-	  lex_error("too few arguments to snprintf");
-	  result += one_format;
-	  result += form;
-	  break;
-	}
-	one_format += *form++;
-	one_format += '\0';
-	snprintf(sprintf_buf, sizeof(sprintf_buf),
-		 one_format.contents(), v[i++]);
-      }
-      one_format.clear();
-      result += sprintf_buf;
-    }
-    else
-      result += *form++;
-  }
-  result += '\0';
-  return strsave(result.contents());
-}
diff -Nuar groff-1.22.3.old/src/preproc/pic/pic.ypp groff-1.22.3/src/preproc/pic/pic.ypp
--- groff-1.22.3.old/src/preproc/pic/pic.ypp	1970-01-01 02:00:00.000000000 +0200
+++ groff-1.22.3/src/preproc/pic/pic.ypp	2015-04-23 20:57:03.000000000 +0300
@@ -0,0 +1,1933 @@
+/* Copyright (C) 1989-2014  Free Software Foundation, Inc.
+     Written by James Clark (jjc@jclark.com)
+
+This file is part of groff.
+
+groff is free software; you can redistribute it and/or modify it under
+the terms of the GNU General Public License as published by the Free
+Software Foundation, either version 3 of the License, or
+(at your option) any later version.
+
+groff is distributed in the hope that it will be useful, but WITHOUT ANY
+WARRANTY; without even the implied warranty of MERCHANTABILITY or
+FITNESS FOR A PARTICULAR PURPOSE.  See the GNU General Public License
+for more details.
+
+You should have received a copy of the GNU General Public License
+along with this program. If not, see <http://www.gnu.org/licenses/>. */
+
+%{
+#include "pic.h"
+#include "ptable.h"
+#include "object.h"
+
+extern int delim_flag;
+extern void copy_rest_thru(const char *, const char *);
+extern void copy_file_thru(const char *, const char *, const char *);
+extern void push_body(const char *);
+extern void do_for(char *var, double from, double to,
+		   int by_is_multiplicative, double by, char *body);
+extern void do_lookahead();
+
+/* Maximum number of characters produced by printf("%g") */
+#define GDIGITS 14
+
+int yylex();
+void yyerror(const char *);
+
+void reset(const char *nm);
+void reset_all();
+
+place *lookup_label(const char *);
+void define_label(const char *label, const place *pl);
+
+direction current_direction;
+position current_position;
+
+implement_ptable(place)
+
+PTABLE(place) top_table;
+
+PTABLE(place) *current_table = &top_table;
+saved_state *current_saved_state = 0;
+
+object_list olist;
+
+const char *ordinal_postfix(int n);
+const char *object_type_name(object_type type);
+char *format_number(const char *form, double n);
+char *do_sprintf(const char *form, const double *v, int nv);
+
+%}
+
+%expect 2
+
+%union {
+	char *str;
+	int n;
+	double x;
+	struct { double x, y; } pair;
+	struct { double x; char *body; } if_data;
+	struct { char *str; const char *filename; int lineno; } lstr;
+	struct { double *v; int nv; int maxv; } dv;
+	struct { double val; int is_multiplicative; } by;
+	place pl;
+	object *obj;
+	corner crn;
+	path *pth;
+	object_spec *spec;
+	saved_state *pstate;
+	graphics_state state;
+	object_type obtype;
+}
+
+%token <str> LABEL
+%token <str> VARIABLE
+%token <x> NUMBER
+%token <lstr> TEXT
+%token <lstr> COMMAND_LINE
+%token <str> DELIMITED
+%token <n> ORDINAL
+%token TH
+%token LEFT_ARROW_HEAD
+%token RIGHT_ARROW_HEAD
+%token DOUBLE_ARROW_HEAD
+%token LAST
+%token BOX
+%token CIRCLE
+%token ELLIPSE
+%token ARC
+%token LINE
+%token ARROW
+%token MOVE
+%token SPLINE
+%token HEIGHT
+%token RADIUS
+%token FIGNAME
+%token WIDTH
+%token DIAMETER
+%token UP
+%token DOWN
+%token RIGHT
+%token LEFT
+%token FROM
+%token TO
+%token AT
+%token WITH
+%token BY
+%token THEN
+%token SOLID
+%token DOTTED
+%token DASHED
+%token CHOP
+%token SAME
+%token INVISIBLE
+%token LJUST
+%token RJUST
+%token ABOVE
+%token BELOW
+%token OF
+%token THE
+%token WAY
+%token BETWEEN
+%token AND
+%token HERE
+%token DOT_N
+%token DOT_E	
+%token DOT_W
+%token DOT_S
+%token DOT_NE
+%token DOT_SE
+%token DOT_NW
+%token DOT_SW
+%token DOT_C
+%token DOT_START
+%token DOT_END
+%token DOT_X
+%token DOT_Y
+%token DOT_HT
+%token DOT_WID
+%token DOT_RAD
+%token SIN
+%token COS
+%token ATAN2
+%token LOG
+%token EXP
+%token SQRT
+%token K_MAX
+%token K_MIN
+%token INT
+%token RAND
+%token SRAND
+%token COPY
+%token THRU
+%token TOP
+%token BOTTOM
+%token UPPER
+%token LOWER
+%token SH
+%token PRINT
+%token CW
+%token CCW
+%token FOR
+%token DO
+%token IF
+%token ELSE
+%token ANDAND
+%token OROR
+%token NOTEQUAL
+%token EQUALEQUAL
+%token LESSEQUAL
+%token GREATEREQUAL
+%token LEFT_CORNER
+%token RIGHT_CORNER
+%token NORTH
+%token SOUTH
+%token EAST
+%token WEST
+%token CENTER
+%token END
+%token START
+%token RESET
+%token UNTIL
+%token PLOT
+%token THICKNESS
+%token FILL
+%token COLORED
+%token OUTLINED
+%token SHADED
+%token XSLANTED
+%token YSLANTED
+%token ALIGNED
+%token SPRINTF
+%token COMMAND
+
+%token DEFINE
+%token UNDEF
+
+%left '.'
+
+/* this ensures that plot 17 "%g" parses as (plot 17 "%g") */
+%left PLOT
+%left TEXT SPRINTF
+
+/* give text adjustments higher precedence than TEXT, so that
+box "foo" above ljust == box ("foo" above ljust)
+*/
+
+%left LJUST RJUST ABOVE BELOW
+
+%left LEFT RIGHT
+/* Give attributes that take an optional expression a higher
+precedence than left and right, so that eg `line chop left'
+parses properly. */
+%left CHOP SOLID DASHED DOTTED UP DOWN FILL COLORED OUTLINED
+%left XSLANTED YSLANTED
+%left LABEL
+
+%left VARIABLE NUMBER '(' SIN COS ATAN2 LOG EXP SQRT K_MAX K_MIN INT RAND SRAND LAST 
+%left ORDINAL HERE '`'
+
+%left BOX CIRCLE ELLIPSE ARC LINE ARROW SPLINE '['
+
+/* these need to be lower than '-' */
+%left HEIGHT RADIUS WIDTH DIAMETER FROM TO AT THICKNESS
+
+/* these must have higher precedence than CHOP so that `label %prec CHOP'
+works */
+%left DOT_N DOT_E DOT_W DOT_S DOT_NE DOT_SE DOT_NW DOT_SW DOT_C
+%left DOT_START DOT_END TOP BOTTOM LEFT_CORNER RIGHT_CORNER
+%left UPPER LOWER NORTH SOUTH EAST WEST CENTER START END
+
+%left ','
+%left OROR
+%left ANDAND
+%left EQUALEQUAL NOTEQUAL
+%left '<' '>' LESSEQUAL GREATEREQUAL
+
+%left BETWEEN OF
+%left AND
+
+%left '+' '-'
+%left '*' '/' '%'
+%right '!'
+%right '^'
+
+%type <x> expr expr_lower_than expr_not_lower_than any_expr text_expr
+%type <by> optional_by
+%type <pair> expr_pair position_not_place
+%type <if_data> simple_if
+%type <obj> nth_primitive
+%type <crn> corner
+%type <pth> path label_path relative_path
+%type <pl> place label element element_list middle_element_list
+%type <spec> object_spec
+%type <pair> position
+%type <obtype> object_type
+%type <n> optional_ordinal_last ordinal
+%type <str> macro_name until
+%type <dv> sprintf_args
+%type <lstr> text print_args print_arg
+
+%%
+
+top:
+	optional_separator
+	| element_list
+		{
+		  if (olist.head)
+		    print_picture(olist.head);
+		}
+	;
+
+
+element_list:
+	optional_separator middle_element_list optional_separator
+		{ $$ = $2; }
+	;
+
+middle_element_list:
+	element
+		{ $$ = $1; }
+	| middle_element_list separator element
+		{ $$ = $1; }
+	;
+
+optional_separator:
+	/* empty */
+	| separator
+	;
+
+separator:
+	';'
+	| separator ';'
+	;
+
+placeless_element:
+	FIGNAME '=' macro_name
+		{
+		  a_delete graphname;
+		  graphname = new char[strlen($3) + 1];
+		  strcpy(graphname, $3);
+		  a_delete $3;
+		}
+	|
+	VARIABLE '=' any_expr
+		{
+		  define_variable($1, $3);
+		  a_delete $1;
+		}
+	| VARIABLE ':' '=' any_expr
+		{
+		  place *p = lookup_label($1);
+		  if (!p) {
+		    lex_error("variable `%1' not defined", $1);
+		    YYABORT;
+		  }
+		  p->obj = 0;
+		  p->x = $4;
+		  p->y = 0.0;
+		  a_delete $1;
+		}
+	| UP
+		{ current_direction = UP_DIRECTION; }
+	| DOWN
+		{ current_direction = DOWN_DIRECTION; }
+	| LEFT
+		{ current_direction = LEFT_DIRECTION; }
+	| RIGHT
+		{ current_direction = RIGHT_DIRECTION; }
+	| COMMAND_LINE
+		{
+		  olist.append(make_command_object($1.str, $1.filename,
+						   $1.lineno));
+		}
+	| COMMAND print_args
+		{
+		  olist.append(make_command_object($2.str, $2.filename,
+						   $2.lineno));
+		}
+	| PRINT print_args
+		{
+		  fprintf(stderr, "%s\n", $2.str);
+		  a_delete $2.str;
+		  fflush(stderr);
+		}
+	| SH
+		{ delim_flag = 1; }
+	  DELIMITED
+		{
+		  delim_flag = 0;
+		  if (safer_flag)
+		    lex_error("unsafe to run command `%1'", $3);
+		  else
+		    system($3);
+		  a_delete $3;
+		}
+	| COPY TEXT
+		{
+		  if (yychar < 0)
+		    do_lookahead();
+		  do_copy($2.str);
+		  // do not delete the filename
+		}
+	| COPY TEXT THRU
+		{ delim_flag = 2; }
+	  DELIMITED 
+		{ delim_flag = 0; }
+	  until
+		{
+		  if (yychar < 0)
+		    do_lookahead();
+		  copy_file_thru($2.str, $5, $7);
+		  // do not delete the filename
+		  a_delete $5;
+		  a_delete $7;
+		}
+	| COPY THRU
+		{ delim_flag = 2; }
+	  DELIMITED
+		{ delim_flag = 0; }
+	  until
+		{
+		  if (yychar < 0)
+		    do_lookahead();
+		  copy_rest_thru($4, $6);
+		  a_delete $4;
+		  a_delete $6;
+		}
+	| FOR VARIABLE '=' expr TO expr optional_by DO
+	  	{ delim_flag = 1; }
+	  DELIMITED
+	  	{
+		  delim_flag = 0;
+		  if (yychar < 0)
+		    do_lookahead();
+		  do_for($2, $4, $6, $7.is_multiplicative, $7.val, $10); 
+		}
+	| simple_if
+		{
+		  if (yychar < 0)
+		    do_lookahead();
+		  if ($1.x != 0.0)
+		    push_body($1.body);
+		  a_delete $1.body;
+		}
+	| simple_if ELSE
+		{ delim_flag = 1; }
+	  DELIMITED
+		{
+		  delim_flag = 0;
+		  if (yychar < 0)
+		    do_lookahead();
+		  if ($1.x != 0.0)
+		    push_body($1.body);
+		  else
+		    push_body($4);
+		  a_delete $1.body;
+		  a_delete $4;
+		}
+	| reset_variables
+	| RESET
+		{ define_variable("scale", 1.0); }
+	;
+
+macro_name:
+	VARIABLE
+	| LABEL
+	;
+
+reset_variables:
+	RESET VARIABLE
+		{
+		  reset($2);
+		  a_delete $2;
+		}
+	| reset_variables VARIABLE
+		{
+		  reset($2);
+		  a_delete $2;
+		}
+	| reset_variables ',' VARIABLE
+		{
+		  reset($3);
+		  a_delete $3;
+		}
+	;
+
+print_args:
+	print_arg
+		{ $$ = $1; }
+	| print_args print_arg
+		{
+		  $$.str = new char[strlen($1.str) + strlen($2.str) + 1];
+		  strcpy($$.str, $1.str);
+		  strcat($$.str, $2.str);
+		  a_delete $1.str;
+		  a_delete $2.str;
+		  if ($1.filename) {
+		    $$.filename = $1.filename;
+		    $$.lineno = $1.lineno;
+		  }
+		  else if ($2.filename) {
+		    $$.filename = $2.filename;
+		    $$.lineno = $2.lineno;
+		  }
+		}
+	;
+
+print_arg:
+  	expr							%prec ','
+		{
+		  $$.str = new char[GDIGITS + 1];
+		  sprintf($$.str, "%g", $1);
+		  $$.filename = 0;
+		  $$.lineno = 0;
+		}
+	| text
+		{ $$ = $1; }
+	| position						%prec ','
+		{
+		  $$.str = new char[GDIGITS + 2 + GDIGITS + 1];
+		  sprintf($$.str, "%g, %g", $1.x, $1.y);
+		  $$.filename = 0;
+		  $$.lineno = 0;
+		}
+	;
+
+simple_if:
+	IF any_expr THEN
+		{ delim_flag = 1; }
+	DELIMITED
+		{
+		  delim_flag = 0;
+		  $$.x = $2;
+		  $$.body = $5;
+		}
+	;
+
+until:
+	/* empty */
+		{ $$ = 0; }
+	| UNTIL TEXT
+		{ $$ = $2.str; }
+	;
+	
+any_expr:
+	expr
+		{ $$ = $1; }
+	| text_expr
+		{ $$ = $1; }
+	;
+	
+text_expr:
+	text EQUALEQUAL text
+		{
+		  $$ = strcmp($1.str, $3.str) == 0;
+		  a_delete $1.str;
+		  a_delete $3.str;
+		}
+	| text NOTEQUAL text
+		{
+		  $$ = strcmp($1.str, $3.str) != 0;
+		  a_delete $1.str;
+		  a_delete $3.str;
+		}
+	| text_expr ANDAND text_expr
+		{ $$ = ($1 != 0.0 && $3 != 0.0); }
+	| text_expr ANDAND expr
+		{ $$ = ($1 != 0.0 && $3 != 0.0); }
+	| expr ANDAND text_expr
+		{ $$ = ($1 != 0.0 && $3 != 0.0); }
+	| text_expr OROR text_expr
+		{ $$ = ($1 != 0.0 || $3 != 0.0); }
+	| text_expr OROR expr
+		{ $$ = ($1 != 0.0 || $3 != 0.0); }
+	| expr OROR text_expr
+		{ $$ = ($1 != 0.0 || $3 != 0.0); }
+	| '!' text_expr
+		{ $$ = ($2 == 0.0); }
+	;
+
+
+optional_by:
+	/* empty */
+		{
+		  $$.val = 1.0;
+		  $$.is_multiplicative = 0;
+		}
+	| BY expr
+		{
+		  $$.val = $2;
+		  $$.is_multiplicative = 0;
+		}
+	| BY '*' expr
+		{
+		  $$.val = $3;
+		  $$.is_multiplicative = 1;
+		}
+	;
+
+element:
+	object_spec
+		{
+		  $$.obj = $1->make_object(&current_position,
+					   &current_direction);
+		  if ($$.obj == 0)
+		    YYABORT;
+		  delete $1;
+		  if ($$.obj)
+		    olist.append($$.obj);
+		  else {
+		    $$.x = current_position.x;
+		    $$.y = current_position.y;
+		  }
+		}
+	| LABEL ':' optional_separator element
+		{
+		  $$ = $4;
+		  define_label($1, & $$);
+		  a_delete $1;
+		}
+	| LABEL ':' optional_separator position_not_place
+		{
+		  $$.obj = 0;
+		  $$.x = $4.x;
+		  $$.y = $4.y;
+		  define_label($1, & $$);
+		  a_delete $1;
+		}
+	| LABEL ':' optional_separator place
+		{
+		  $$ = $4;
+		  define_label($1, & $$);
+		  a_delete $1;
+		}
+	| '{'
+		{
+		  $<state>$.x = current_position.x;
+		  $<state>$.y = current_position.y;
+		  $<state>$.dir = current_direction;
+		}
+	  element_list '}'
+		{
+		  current_position.x = $<state>2.x;
+		  current_position.y = $<state>2.y;
+		  current_direction = $<state>2.dir;
+		}
+	  optional_element
+		{
+		  $$ = $3;
+		}
+	| placeless_element
+		{
+		  $$.obj = 0;
+		  $$.x = current_position.x;
+		  $$.y = current_position.y;
+		}
+	;
+
+optional_element:
+	/* empty */
+		{}
+	| element
+		{}
+	;
+
+object_spec:
+	BOX
+		{ $$ = new object_spec(BOX_OBJECT); }
+	| CIRCLE
+		{ $$ = new object_spec(CIRCLE_OBJECT); }
+	| ELLIPSE
+		{ $$ = new object_spec(ELLIPSE_OBJECT); }
+	| ARC
+		{
+		  $$ = new object_spec(ARC_OBJECT);
+		  $$->dir = current_direction;
+		}
+	| LINE
+		{
+		  $$ = new object_spec(LINE_OBJECT);
+		  lookup_variable("lineht", & $$->segment_height);
+		  lookup_variable("linewid", & $$->segment_width);
+		  $$->dir = current_direction;
+		}
+	| ARROW
+		{
+		  $$ = new object_spec(ARROW_OBJECT);
+		  lookup_variable("lineht", & $$->segment_height);
+		  lookup_variable("linewid", & $$->segment_width);
+		  $$->dir = current_direction;
+		}
+	| MOVE
+		{
+		  $$ = new object_spec(MOVE_OBJECT);
+		  lookup_variable("moveht", & $$->segment_height);
+		  lookup_variable("movewid", & $$->segment_width);
+		  $$->dir = current_direction;
+		}
+	| SPLINE
+		{
+		  $$ = new object_spec(SPLINE_OBJECT);
+		  lookup_variable("lineht", & $$->segment_height);
+		  lookup_variable("linewid", & $$->segment_width);
+		  $$->dir = current_direction;
+		}
+	| text							%prec TEXT
+		{
+		  $$ = new object_spec(TEXT_OBJECT);
+		  $$->text = new text_item($1.str, $1.filename, $1.lineno);
+		}
+	| PLOT expr
+		{
+		  $$ = new object_spec(TEXT_OBJECT);
+		  $$->text = new text_item(format_number(0, $2), 0, -1);
+		}
+	| PLOT expr text
+		{
+		  $$ = new object_spec(TEXT_OBJECT);
+		  $$->text = new text_item(format_number($3.str, $2),
+					   $3.filename, $3.lineno);
+		  a_delete $3.str;
+		}
+	| '[' 
+		{
+		  saved_state *p = new saved_state;
+		  $<pstate>$ = p;
+		  p->x = current_position.x;
+		  p->y = current_position.y;
+		  p->dir = current_direction;
+		  p->tbl = current_table;
+		  p->prev = current_saved_state;
+		  current_position.x = 0.0;
+		  current_position.y = 0.0;
+		  current_table = new PTABLE(place);
+		  current_saved_state = p;
+		  olist.append(make_mark_object());
+		}
+	  element_list ']'
+		{
+		  current_position.x = $<pstate>2->x;
+		  current_position.y = $<pstate>2->y;
+		  current_direction = $<pstate>2->dir;
+		  $$ = new object_spec(BLOCK_OBJECT);
+		  olist.wrap_up_block(& $$->oblist);
+		  $$->tbl = current_table;
+		  current_table = $<pstate>2->tbl;
+		  current_saved_state = $<pstate>2->prev;
+		  delete $<pstate>2;
+		}
+	| object_spec HEIGHT expr
+		{
+		  $$ = $1;
+		  $$->height = $3;
+		  $$->flags |= HAS_HEIGHT;
+		}
+	| object_spec RADIUS expr
+		{
+		  $$ = $1;
+		  $$->radius = $3;
+		  $$->flags |= HAS_RADIUS;
+		}
+	| object_spec WIDTH expr
+		{
+		  $$ = $1;
+		  $$->width = $3;
+		  $$->flags |= HAS_WIDTH;
+		}
+	| object_spec DIAMETER expr
+		{
+		  $$ = $1;
+		  $$->radius = $3/2.0;
+		  $$->flags |= HAS_RADIUS;
+		}
+	| object_spec expr					%prec HEIGHT
+		{
+		  $$ = $1;
+		  $$->flags |= HAS_SEGMENT;
+		  switch ($$->dir) {
+		  case UP_DIRECTION:
+		    $$->segment_pos.y += $2;
+		    break;
+		  case DOWN_DIRECTION:
+		    $$->segment_pos.y -= $2;
+		    break;
+		  case RIGHT_DIRECTION:
+		    $$->segment_pos.x += $2;
+		    break;
+		  case LEFT_DIRECTION:
+		    $$->segment_pos.x -= $2;
+		    break;
+		  }
+		}
+	| object_spec UP
+		{
+		  $$ = $1;
+		  $$->dir = UP_DIRECTION;
+		  $$->flags |= HAS_SEGMENT;
+		  $$->segment_pos.y += $$->segment_height;
+		}
+	| object_spec UP expr
+		{
+		  $$ = $1;
+		  $$->dir = UP_DIRECTION;
+		  $$->flags |= HAS_SEGMENT;
+		  $$->segment_pos.y += $3;
+		}
+	| object_spec DOWN
+		{
+		  $$ = $1;
+		  $$->dir = DOWN_DIRECTION;
+		  $$->flags |= HAS_SEGMENT;
+		  $$->segment_pos.y -= $$->segment_height;
+		}
+	| object_spec DOWN expr
+		{
+		  $$ = $1;
+		  $$->dir = DOWN_DIRECTION;
+		  $$->flags |= HAS_SEGMENT;
+		  $$->segment_pos.y -= $3;
+		}
+	| object_spec RIGHT
+		{
+		  $$ = $1;
+		  $$->dir = RIGHT_DIRECTION;
+		  $$->flags |= HAS_SEGMENT;
+		  $$->segment_pos.x += $$->segment_width;
+		}
+	| object_spec RIGHT expr
+		{
+		  $$ = $1;
+		  $$->dir = RIGHT_DIRECTION;
+		  $$->flags |= HAS_SEGMENT;
+		  $$->segment_pos.x += $3;
+		}
+	| object_spec LEFT
+		{
+		  $$ = $1;
+		  $$->dir = LEFT_DIRECTION;
+		  $$->flags |= HAS_SEGMENT;
+		  $$->segment_pos.x -= $$->segment_width;
+		}
+	| object_spec LEFT expr
+		{
+		  $$ = $1;
+		  $$->dir = LEFT_DIRECTION;
+		  $$->flags |= HAS_SEGMENT;
+		  $$->segment_pos.x -= $3;
+		}
+	| object_spec FROM position
+		{
+		  $$ = $1;
+		  $$->flags |= HAS_FROM;
+		  $$->from.x = $3.x;
+		  $$->from.y = $3.y;
+		}
+	| object_spec TO position
+		{
+		  $$ = $1;
+		  if ($$->flags & HAS_SEGMENT)
+		    $$->segment_list = new segment($$->segment_pos,
+						   $$->segment_is_absolute,
+						   $$->segment_list);
+		  $$->flags |= HAS_SEGMENT;
+		  $$->segment_pos.x = $3.x;
+		  $$->segment_pos.y = $3.y;
+		  $$->segment_is_absolute = 1;
+		  $$->flags |= HAS_TO;
+		  $$->to.x = $3.x;
+		  $$->to.y = $3.y;
+		}
+	| object_spec AT position
+		{
+		  $$ = $1;
+		  $$->flags |= HAS_AT;
+		  $$->at.x = $3.x;
+		  $$->at.y = $3.y;
+		  if ($$->type != ARC_OBJECT) {
+		    $$->flags |= HAS_FROM;
+		    $$->from.x = $3.x;
+		    $$->from.y = $3.y;
+		  }
+		}
+	| object_spec WITH path
+		{
+		  $$ = $1;
+		  $$->flags |= HAS_WITH;
+		  $$->with = $3;
+		}
+	| object_spec WITH position				%prec ','
+		{
+		  $$ = $1;
+		  $$->flags |= HAS_WITH;
+		  position pos;
+		  pos.x = $3.x;
+		  pos.y = $3.y;
+		  $$->with = new path(pos);
+		}
+	| object_spec BY expr_pair
+		{
+		  $$ = $1;
+		  $$->flags |= HAS_SEGMENT;
+		  $$->segment_pos.x += $3.x;
+		  $$->segment_pos.y += $3.y;
+		}
+	| object_spec THEN
+  		{
+		  $$ = $1;
+		  if (!($$->flags & HAS_SEGMENT))
+		    switch ($$->dir) {
+		    case UP_DIRECTION:
+		      $$->segment_pos.y += $$->segment_width;
+		      break;
+		    case DOWN_DIRECTION:
+		      $$->segment_pos.y -= $$->segment_width;
+		      break;
+		    case RIGHT_DIRECTION:
+		      $$->segment_pos.x += $$->segment_width;
+		      break;
+		    case LEFT_DIRECTION:
+		      $$->segment_pos.x -= $$->segment_width;
+		      break;
+		    }
+		  $$->segment_list = new segment($$->segment_pos,
+						 $$->segment_is_absolute,
+						 $$->segment_list);
+		  $$->flags &= ~HAS_SEGMENT;
+		  $$->segment_pos.x = $$->segment_pos.y = 0.0;
+		  $$->segment_is_absolute = 0;
+		}
+	| object_spec SOLID
+		{
+		  $$ = $1;	// nothing
+		}
+	| object_spec DOTTED
+		{
+		  $$ = $1;
+		  $$->flags |= IS_DOTTED;
+		  lookup_variable("dashwid", & $$->dash_width);
+		}
+	| object_spec DOTTED expr
+		{
+		  $$ = $1;
+		  $$->flags |= IS_DOTTED;
+		  $$->dash_width = $3;
+		}
+	| object_spec DASHED
+		{
+		  $$ = $1;
+		  $$->flags |= IS_DASHED;
+		  lookup_variable("dashwid", & $$->dash_width);
+		}
+	| object_spec DASHED expr
+		{
+		  $$ = $1;
+		  $$->flags |= IS_DASHED;
+		  $$->dash_width = $3;
+		}
+	| object_spec FILL
+		{
+		  $$ = $1;
+		  $$->flags |= IS_DEFAULT_FILLED;
+		}
+	| object_spec FILL expr
+		{
+		  $$ = $1;
+		  $$->flags |= IS_FILLED;
+		  $$->fill = $3;
+		}
+	| object_spec XSLANTED expr
+		{
+		  $$ = $1;
+		  $$->flags |= IS_XSLANTED;
+		  $$->xslanted = $3;
+		}
+	| object_spec YSLANTED expr
+		{
+		  $$ = $1;
+		  $$->flags |= IS_YSLANTED;
+		  $$->yslanted = $3;
+		}
+	| object_spec SHADED text
+		{
+		  $$ = $1;
+		  $$->flags |= (IS_SHADED | IS_FILLED);
+		  $$->shaded = new char[strlen($3.str)+1];
+		  strcpy($$->shaded, $3.str);
+		}
+	| object_spec COLORED text
+		{
+		  $$ = $1;
+		  $$->flags |= (IS_SHADED | IS_OUTLINED | IS_FILLED);
+		  $$->shaded = new char[strlen($3.str)+1];
+		  strcpy($$->shaded, $3.str);
+		  $$->outlined = new char[strlen($3.str)+1];
+		  strcpy($$->outlined, $3.str);
+		}
+	| object_spec OUTLINED text
+		{
+		  $$ = $1;
+		  $$->flags |= IS_OUTLINED;
+		  $$->outlined = new char[strlen($3.str)+1];
+		  strcpy($$->outlined, $3.str);
+		}
+	| object_spec CHOP
+  		{
+		  $$ = $1;
+		  // line chop chop means line chop 0 chop 0
+		  if ($$->flags & IS_DEFAULT_CHOPPED) {
+		    $$->flags |= IS_CHOPPED;
+		    $$->flags &= ~IS_DEFAULT_CHOPPED;
+		    $$->start_chop = $$->end_chop = 0.0;
+		  }
+		  else if ($$->flags & IS_CHOPPED) {
+		    $$->end_chop = 0.0;
+		  }
+		  else {
+		    $$->flags |= IS_DEFAULT_CHOPPED;
+		  }
+		}
+	| object_spec CHOP expr
+		{
+		  $$ = $1;
+		  if ($$->flags & IS_DEFAULT_CHOPPED) {
+		    $$->flags |= IS_CHOPPED;
+		    $$->flags &= ~IS_DEFAULT_CHOPPED;
+		    $$->start_chop = 0.0;
+		    $$->end_chop = $3;
+		  }
+		  else if ($$->flags & IS_CHOPPED) {
+		    $$->end_chop = $3;
+		  }
+		  else {
+		    $$->start_chop = $$->end_chop = $3;
+		    $$->flags |= IS_CHOPPED;
+		  }
+		}
+	| object_spec SAME
+		{
+		  $$ = $1;
+		  $$->flags |= IS_SAME;
+		}
+	| object_spec INVISIBLE
+		{
+		  $$ = $1;
+		  $$->flags |= IS_INVISIBLE;
+		}
+	| object_spec LEFT_ARROW_HEAD
+		{
+		  $$ = $1;
+		  $$->flags |= HAS_LEFT_ARROW_HEAD;
+		}
+	| object_spec RIGHT_ARROW_HEAD
+		{
+		  $$ = $1;
+		  $$->flags |= HAS_RIGHT_ARROW_HEAD;
+		}
+	| object_spec DOUBLE_ARROW_HEAD
+		{
+		  $$ = $1;
+		  $$->flags |= (HAS_LEFT_ARROW_HEAD|HAS_RIGHT_ARROW_HEAD);
+		}
+	| object_spec CW
+		{
+		  $$ = $1;
+		  $$->flags |= IS_CLOCKWISE;
+		}
+	| object_spec CCW
+		{
+		  $$ = $1;
+		  $$->flags &= ~IS_CLOCKWISE;
+		}
+	| object_spec text					%prec TEXT
+		{
+		  $$ = $1;
+		  text_item **p;
+		  for (p = & $$->text; *p; p = &(*p)->next)
+		    ;
+		  *p = new text_item($2.str, $2.filename, $2.lineno);
+		}
+	| object_spec LJUST
+		{
+		  $$ = $1;
+		  if ($$->text) {
+		    text_item *p;
+		    for (p = $$->text; p->next; p = p->next)
+		      ;
+		    p->adj.h = LEFT_ADJUST;
+		  }
+		}
+	| object_spec RJUST
+		{
+		  $$ = $1;
+		  if ($$->text) {
+		    text_item *p;
+		    for (p = $$->text; p->next; p = p->next)
+		      ;
+		    p->adj.h = RIGHT_ADJUST;
+		  }
+		}
+	| object_spec ABOVE
+		{
+		  $$ = $1;
+		  if ($$->text) {
+		    text_item *p;
+		    for (p = $$->text; p->next; p = p->next)
+		      ;
+		    p->adj.v = ABOVE_ADJUST;
+		  }
+		}
+	| object_spec BELOW
+		{
+		  $$ = $1;
+		  if ($$->text) {
+		    text_item *p;
+		    for (p = $$->text; p->next; p = p->next)
+		      ;
+		    p->adj.v = BELOW_ADJUST;
+		  }
+		}
+	| object_spec THICKNESS expr
+		{
+		  $$ = $1;
+		  $$->flags |= HAS_THICKNESS;
+		  $$->thickness = $3;
+		}
+	| object_spec ALIGNED
+		{
+		  $$ = $1;
+		  $$->flags |= IS_ALIGNED;
+		}
+	;
+
+text:
+	TEXT
+		{ $$ = $1; }
+	| SPRINTF '(' TEXT sprintf_args ')'
+		{
+		  $$.filename = $3.filename;
+		  $$.lineno = $3.lineno;
+		  $$.str = do_sprintf($3.str, $4.v, $4.nv);
+		  a_delete $4.v;
+		  a_delete $3.str;
+		}
+	;
+
+sprintf_args:
+	/* empty */
+		{
+		  $$.v = 0;
+		  $$.nv = 0;
+		  $$.maxv = 0;
+		}
+	| sprintf_args ',' expr
+		{
+		  $$ = $1;
+		  if ($$.nv >= $$.maxv) {
+		    if ($$.nv == 0) {
+		      $$.v = new double[4];
+		      $$.maxv = 4;
+		    }
+		    else {
+		      double *oldv = $$.v;
+		      $$.maxv *= 2;
+#if 0
+		      $$.v = new double[$$.maxv];
+		      memcpy($$.v, oldv, $$.nv*sizeof(double));
+#else
+		      // workaround for bug in Compaq C++ V6.5-033
+		      // for Compaq Tru64 UNIX V5.1A (Rev. 1885)
+		      double *foo = new double[$$.maxv];
+		      memcpy(foo, oldv, $$.nv*sizeof(double));
+		      $$.v = foo;
+#endif
+		      a_delete oldv;
+		    }
+		  }
+		  $$.v[$$.nv] = $3;
+		  $$.nv += 1;
+		}
+	;
+
+position:
+  	position_not_place
+		{ $$ = $1; }
+	| place
+  		{
+		  position pos = $1;
+		  $$.x = pos.x;
+		  $$.y = pos.y;
+		}
+	| '(' place ')'
+		{
+		  position pos = $2;
+		  $$.x = pos.x;
+		  $$.y = pos.y;
+		}
+	;
+
+position_not_place:
+	expr_pair
+		{ $$ = $1; }
+	| position '+' expr_pair
+		{
+		  $$.x = $1.x + $3.x;
+		  $$.y = $1.y + $3.y;
+		}
+	| '(' position '+' expr_pair ')'
+		{
+		  $$.x = $2.x + $4.x;
+		  $$.y = $2.y + $4.y;
+		}
+	| position '-' expr_pair
+		{
+		  $$.x = $1.x - $3.x;
+		  $$.y = $1.y - $3.y;
+		}
+	| '(' position '-' expr_pair ')'
+		{
+		  $$.x = $2.x - $4.x;
+		  $$.y = $2.y - $4.y;
+		}
+	| '(' position ',' position ')'
+		{
+		  $$.x = $2.x;
+		  $$.y = $4.y;
+		}
+	| expr between position AND position
+		{
+		  $$.x = (1.0 - $1)*$3.x + $1*$5.x;
+		  $$.y = (1.0 - $1)*$3.y + $1*$5.y;
+		}
+	| '(' expr between position AND position ')'
+		{
+		  $$.x = (1.0 - $2)*$4.x + $2*$6.x;
+		  $$.y = (1.0 - $2)*$4.y + $2*$6.y;
+		}
+	/* the next two rules cause harmless shift/reduce warnings */
+	| expr_not_lower_than '<' position ',' position '>'
+		{
+		  $$.x = (1.0 - $1)*$3.x + $1*$5.x;
+		  $$.y = (1.0 - $1)*$3.y + $1*$5.y;
+		}
+	| '(' expr_not_lower_than '<' position ',' position '>' ')'
+		{
+		  $$.x = (1.0 - $2)*$4.x + $2*$6.x;
+		  $$.y = (1.0 - $2)*$4.y + $2*$6.y;
+		}
+	;
+
+between:
+	BETWEEN
+	| OF THE WAY BETWEEN
+	;
+
+expr_pair:
+	expr ',' expr
+		{
+		  $$.x = $1;
+		  $$.y = $3;
+		}
+	| '(' expr_pair ')'
+		{ $$ = $2; }
+	;
+
+place:
+	/* line at A left == line (at A) left */
+	label							%prec CHOP
+		{ $$ = $1; }
+	| label corner
+		{
+		  path pth($2);
+		  if (!pth.follow($1, & $$))
+		    YYABORT;
+		}
+	| corner label
+		{
+		  path pth($1);
+		  if (!pth.follow($2, & $$))
+		    YYABORT;
+		}
+	| corner OF label
+		{
+		  path pth($1);
+		  if (!pth.follow($3, & $$))
+		    YYABORT;
+		}
+	| HERE
+		{
+		  $$.x = current_position.x;
+		  $$.y = current_position.y;
+		  $$.obj = 0;
+		}
+	;
+
+label:
+	LABEL
+		{
+		  place *p = lookup_label($1);
+		  if (!p) {
+		    lex_error("there is no place `%1'", $1);
+		    YYABORT;
+		  }
+		  $$ = *p;
+		  a_delete $1;
+		}
+	| nth_primitive
+		{ $$.obj = $1; }
+	| label '.' LABEL
+		{
+		  path pth($3);
+		  if (!pth.follow($1, & $$))
+		    YYABORT;
+		}
+	;
+
+ordinal:
+	ORDINAL
+		{ $$ = $1; }
+	| '`' any_expr TH
+		{
+		  // XXX Check for overflow (and non-integers?).
+		  $$ = (int)$2;
+		}
+	;
+
+optional_ordinal_last:
+	LAST
+		{ $$ = 1; }
+  	| ordinal LAST
+		{ $$ = $1; }
+	;
+
+nth_primitive:
+	ordinal object_type
+		{
+		  int count = 0;
+		  object *p;
+		  for (p = olist.head; p != 0; p = p->next)
+		    if (p->type() == $2 && ++count == $1) {
+		      $$ = p;
+		      break;
+		    }
+		  if (p == 0) {
+		    lex_error("there is no %1%2 %3", $1, ordinal_postfix($1),
+			      object_type_name($2));
+		    YYABORT;
+		  }
+		}
+	| optional_ordinal_last object_type
+		{
+		  int count = 0;
+		  object *p;
+		  for (p = olist.tail; p != 0; p = p->prev)
+		    if (p->type() == $2 && ++count == $1) {
+		      $$ = p;
+		      break;
+		    }
+		  if (p == 0) {
+		    lex_error("there is no %1%2 last %3", $1,
+			      ordinal_postfix($1), object_type_name($2));
+		    YYABORT;
+		  }
+		}
+	;
+
+object_type:
+	BOX
+  		{ $$ = BOX_OBJECT; }
+	| CIRCLE
+		{ $$ = CIRCLE_OBJECT; }
+	| ELLIPSE
+		{ $$ = ELLIPSE_OBJECT; }
+	| ARC
+		{ $$ = ARC_OBJECT; }
+	| LINE
+		{ $$ = LINE_OBJECT; }
+	| ARROW
+		{ $$ = ARROW_OBJECT; }
+	| SPLINE
+		{ $$ = SPLINE_OBJECT; }
+	| '[' ']'
+		{ $$ = BLOCK_OBJECT; }
+	| TEXT
+		{ $$ = TEXT_OBJECT; }
+	;
+
+label_path:
+ 	'.' LABEL
+		{ $$ = new path($2); }
+	| label_path '.' LABEL
+		{
+		  $$ = $1;
+		  $$->append($3);
+		}
+	;
+
+relative_path:
+	corner							%prec CHOP
+		{ $$ = new path($1); }
+	/* give this a lower precedence than LEFT and RIGHT so that
+	   [A: box] with .A left == [A: box] with (.A left) */
+  	| label_path						%prec TEXT
+		{ $$ = $1; }
+	| label_path corner
+		{
+		  $$ = $1;
+		  $$->append($2);
+		}
+	;
+
+path:
+	relative_path
+		{ $$ = $1; }
+	| '(' relative_path ',' relative_path ')'
+		{
+		  $$ = $2;
+		  $$->set_ypath($4);
+		}
+	/* The rest of these rules are a compatibility sop. */
+	| ORDINAL LAST object_type relative_path
+		{
+		  lex_warning("`%1%2 last %3' in `with' argument ignored",
+			      $1, ordinal_postfix($1), object_type_name($3));
+		  $$ = $4;
+		}
+	| LAST object_type relative_path
+		{
+		  lex_warning("`last %1' in `with' argument ignored",
+			      object_type_name($2));
+		  $$ = $3;
+		}
+	| ORDINAL object_type relative_path
+		{
+		  lex_warning("`%1%2 %3' in `with' argument ignored",
+			      $1, ordinal_postfix($1), object_type_name($2));
+		  $$ = $3;
+		}
+	| LABEL relative_path
+		{
+		  lex_warning("initial `%1' in `with' argument ignored", $1);
+		  a_delete $1;
+		  $$ = $2;
+		}
+	;
+
+corner:
+	DOT_N
+		{ $$ = &object::north; }
+	| DOT_E	
+		{ $$ = &object::east; }
+	| DOT_W
+		{ $$ = &object::west; }
+	| DOT_S
+		{ $$ = &object::south; }
+	| DOT_NE
+		{ $$ = &object::north_east; }
+	| DOT_SE
+		{ $$ = &object:: south_east; }
+	| DOT_NW
+		{ $$ = &object::north_west; }
+	| DOT_SW
+		{ $$ = &object::south_west; }
+	| DOT_C
+		{ $$ = &object::center; }
+	| DOT_START
+		{ $$ = &object::start; }
+	| DOT_END
+		{ $$ = &object::end; }
+  	| TOP
+		{ $$ = &object::north; }
+	| BOTTOM
+		{ $$ = &object::south; }
+	| LEFT
+		{ $$ = &object::west; }
+	| RIGHT
+		{ $$ = &object::east; }
+	| UPPER LEFT
+		{ $$ = &object::north_west; }
+	| LOWER LEFT
+		{ $$ = &object::south_west; }
+	| UPPER RIGHT
+		{ $$ = &object::north_east; }
+	| LOWER RIGHT
+		{ $$ = &object::south_east; }
+	| LEFT_CORNER
+		{ $$ = &object::west; }
+	| RIGHT_CORNER
+		{ $$ = &object::east; }
+	| UPPER LEFT_CORNER
+		{ $$ = &object::north_west; }
+	| LOWER LEFT_CORNER
+		{ $$ = &object::south_west; }
+	| UPPER RIGHT_CORNER
+		{ $$ = &object::north_east; }
+	| LOWER RIGHT_CORNER
+		{ $$ = &object::south_east; }
+	| NORTH
+		{ $$ = &object::north; }
+	| SOUTH
+		{ $$ = &object::south; }
+	| EAST
+		{ $$ = &object::east; }
+	| WEST
+		{ $$ = &object::west; }
+	| CENTER
+		{ $$ = &object::center; }
+	| START
+		{ $$ = &object::start; }
+	| END
+		{ $$ = &object::end; }
+	;
+
+expr:
+	expr_lower_than
+		{ $$ = $1; }
+	| expr_not_lower_than
+		{ $$ = $1; }
+	;
+
+expr_lower_than:
+	expr '<' expr
+		{ $$ = ($1 < $3); }
+	;
+
+expr_not_lower_than:
+	VARIABLE
+		{
+		  if (!lookup_variable($1, & $$)) {
+		    lex_error("there is no variable `%1'", $1);
+		    YYABORT;
+		  }
+		  a_delete $1;
+		}
+	| NUMBER
+		{ $$ = $1; }
+	| place DOT_X
+  		{
+		  if ($1.obj != 0)
+		    $$ = $1.obj->origin().x;
+		  else
+		    $$ = $1.x;
+		}			
+	| place DOT_Y
+		{
+		  if ($1.obj != 0)
+		    $$ = $1.obj->origin().y;
+		  else
+		    $$ = $1.y;
+		}
+	| place DOT_HT
+		{
+		  if ($1.obj != 0)
+		    $$ = $1.obj->height();
+		  else
+		    $$ = 0.0;
+		}
+	| place DOT_WID
+		{
+		  if ($1.obj != 0)
+		    $$ = $1.obj->width();
+		  else
+		    $$ = 0.0;
+		}
+	| place DOT_RAD
+		{
+		  if ($1.obj != 0)
+		    $$ = $1.obj->radius();
+		  else
+		    $$ = 0.0;
+		}
+	| expr '+' expr
+		{ $$ = $1 + $3; }
+	| expr '-' expr
+		{ $$ = $1 - $3; }
+	| expr '*' expr
+		{ $$ = $1 * $3; }
+	| expr '/' expr
+		{
+		  if ($3 == 0.0) {
+		    lex_error("division by zero");
+		    YYABORT;
+		  }
+		  $$ = $1/$3;
+		}
+	| expr '%' expr
+		{
+		  if ($3 == 0.0) {
+		    lex_error("modulus by zero");
+		    YYABORT;
+		  }
+		  $$ = fmod($1, $3);
+		}
+	| expr '^' expr
+		{
+		  errno = 0;
+		  $$ = pow($1, $3);
+		  if (errno == EDOM) {
+		    lex_error("arguments to `^' operator out of domain");
+		    YYABORT;
+		  }
+		  if (errno == ERANGE) {
+		    lex_error("result of `^' operator out of range");
+		    YYABORT;
+		  }
+		}
+	| '-' expr						%prec '!'
+		{ $$ = -$2; }
+	| '(' any_expr ')'
+		{ $$ = $2; }
+	| SIN '(' any_expr ')'
+		{
+		  errno = 0;
+		  $$ = sin($3);
+		  if (errno == ERANGE) {
+		    lex_error("sin result out of range");
+		    YYABORT;
+		  }
+		}
+	| COS '(' any_expr ')'
+		{
+		  errno = 0;
+		  $$ = cos($3);
+		  if (errno == ERANGE) {
+		    lex_error("cos result out of range");
+		    YYABORT;
+		  }
+		}
+	| ATAN2 '(' any_expr ',' any_expr ')'
+		{
+		  errno = 0;
+		  $$ = atan2($3, $5);
+		  if (errno == EDOM) {
+		    lex_error("atan2 argument out of domain");
+		    YYABORT;
+		  }
+		  if (errno == ERANGE) {
+		    lex_error("atan2 result out of range");
+		    YYABORT;
+		  }
+		}
+	| LOG '(' any_expr ')'
+		{
+		  errno = 0;
+		  $$ = log10($3);
+		  if (errno == ERANGE) {
+		    lex_error("log result out of range");
+		    YYABORT;
+		  }
+		}
+	| EXP '(' any_expr ')'
+		{
+		  errno = 0;
+		  $$ = pow(10.0, $3);
+		  if (errno == ERANGE) {
+		    lex_error("exp result out of range");
+		    YYABORT;
+		  }
+		}
+	| SQRT '(' any_expr ')'
+		{
+		  errno = 0;
+		  $$ = sqrt($3);
+		  if (errno == EDOM) {
+		    lex_error("sqrt argument out of domain");
+		    YYABORT;
+		  }
+		}
+	| K_MAX '(' any_expr ',' any_expr ')'
+		{ $$ = $3 > $5 ? $3 : $5; }
+	| K_MIN '(' any_expr ',' any_expr ')'
+		{ $$ = $3 < $5 ? $3 : $5; }
+	| INT '(' any_expr ')'
+		{ $$ = $3 < 0 ? -floor(-$3) : floor($3); }
+	| RAND '(' any_expr ')'
+		{ $$ = 1.0 + floor(((rand()&0x7fff)/double(0x7fff))*$3); }
+	| RAND '(' ')'
+		{
+		  /* return a random number in the range [0,1) */
+		  /* portable, but not very random */
+		  $$ = (rand() & 0x7fff) / double(0x8000);
+		}
+	| SRAND '(' any_expr ')'
+		{
+		  $$ = 0;
+		  srand((unsigned int)$3);
+		}
+	| expr LESSEQUAL expr
+		{ $$ = ($1 <= $3); }
+	| expr '>' expr
+		{ $$ = ($1 > $3); }
+	| expr GREATEREQUAL expr
+		{ $$ = ($1 >= $3); }
+	| expr EQUALEQUAL expr
+		{ $$ = ($1 == $3); }
+	| expr NOTEQUAL expr
+		{ $$ = ($1 != $3); }
+	| expr ANDAND expr
+		{ $$ = ($1 != 0.0 && $3 != 0.0); }
+	| expr OROR expr
+		{ $$ = ($1 != 0.0 || $3 != 0.0); }
+	| '!' expr
+		{ $$ = ($2 == 0.0); }
+
+	;
+
+%%
+
+/* bison defines const to be empty unless __STDC__ is defined, which it
+isn't under cfront */
+
+#ifdef const
+#undef const
+#endif
+
+static struct {
+  const char *name;
+  double val;
+  int scaled;		     // non-zero if val should be multiplied by scale
+} defaults_table[] = {
+  { "arcrad", .25, 1 },
+  { "arrowht", .1, 1 },
+  { "arrowwid", .05, 1 },
+  { "circlerad", .25, 1 },
+  { "boxht", .5, 1 },
+  { "boxwid", .75, 1 },
+  { "boxrad", 0.0, 1 },
+  { "dashwid", .05, 1 },
+  { "ellipseht", .5, 1 },
+  { "ellipsewid", .75, 1 },
+  { "moveht", .5, 1 },
+  { "movewid", .5, 1 },
+  { "lineht", .5, 1 },
+  { "linewid", .5, 1 },
+  { "textht", 0.0, 1 },
+  { "textwid", 0.0, 1 },
+  { "scale", 1.0, 0 },
+  { "linethick", -1.0, 0 },		// in points
+  { "fillval", .5, 0 },
+  { "arrowhead", 1.0, 0 },
+  { "maxpswid", 8.5, 0 },
+  { "maxpsht", 11.0, 0 },
+};
+
+place *lookup_label(const char *label)
+{
+  saved_state *state = current_saved_state;
+  PTABLE(place) *tbl = current_table;
+  for (;;) {
+    place *pl = tbl->lookup(label);
+    if (pl)
+      return pl;
+    if (!state)
+      return 0;
+    tbl = state->tbl;
+    state = state->prev;
+  }
+}
+
+void define_label(const char *label, const place *pl)
+{
+  place *p = new place[1];
+  *p = *pl;
+  current_table->define(label, p);
+}
+
+int lookup_variable(const char *name, double *val)
+{
+  place *pl = lookup_label(name);
+  if (pl) {
+    *val = pl->x;
+    return 1;
+  }
+  return 0;
+}
+
+void define_variable(const char *name, double val)
+{
+  place *p = new place[1];
+  p->obj = 0;
+  p->x = val;
+  p->y = 0.0;
+  current_table->define(name, p);
+  if (strcmp(name, "scale") == 0) {
+    // When the scale changes, reset all scaled pre-defined variables to
+    // their default values.
+    for (unsigned int i = 0;
+	 i < sizeof(defaults_table)/sizeof(defaults_table[0]); i++) 
+      if (defaults_table[i].scaled)
+	define_variable(defaults_table[i].name, val*defaults_table[i].val);
+  }
+}
+
+// called once only (not once per parse)
+
+void parse_init()
+{
+  current_direction = RIGHT_DIRECTION;
+  current_position.x = 0.0;
+  current_position.y = 0.0;
+  // This resets everything to its default value.
+  reset_all();
+}
+
+void reset(const char *nm)
+{
+  for (unsigned int i = 0;
+       i < sizeof(defaults_table)/sizeof(defaults_table[0]); i++)
+    if (strcmp(nm, defaults_table[i].name) == 0) {
+      double val = defaults_table[i].val;
+      if (defaults_table[i].scaled) {
+	double scale;
+	lookup_variable("scale", &scale);
+	val *= scale;
+      }
+      define_variable(defaults_table[i].name, val);
+      return;
+    }
+  lex_error("`%1' is not a predefined variable", nm);
+}
+
+void reset_all()
+{
+  // We only have to explicitly reset the pre-defined variables that
+  // aren't scaled because `scale' is not scaled, and changing the
+  // value of `scale' will reset all the pre-defined variables that
+  // are scaled.
+  for (unsigned int i = 0;
+       i < sizeof(defaults_table)/sizeof(defaults_table[0]); i++)
+    if (!defaults_table[i].scaled)
+      define_variable(defaults_table[i].name, defaults_table[i].val);
+}
+
+// called after each parse
+
+void parse_cleanup()
+{
+  while (current_saved_state != 0) {
+    delete current_table;
+    current_table = current_saved_state->tbl;
+    saved_state *tem = current_saved_state;
+    current_saved_state = current_saved_state->prev;
+    delete tem;
+  }
+  assert(current_table == &top_table);
+  PTABLE_ITERATOR(place) iter(current_table);
+  const char *key;
+  place *pl;
+  while (iter.next(&key, &pl))
+    if (pl->obj != 0) {
+      position pos = pl->obj->origin();
+      pl->obj = 0;
+      pl->x = pos.x;
+      pl->y = pos.y;
+    }
+  while (olist.head != 0) {
+    object *tem = olist.head;
+    olist.head = olist.head->next;
+    delete tem;
+  }
+  olist.tail = 0;
+  current_direction = RIGHT_DIRECTION;
+  current_position.x = 0.0;
+  current_position.y = 0.0;
+}
+
+const char *ordinal_postfix(int n)
+{
+  if (n < 10 || n > 20)
+    switch (n % 10) {
+    case 1:
+      return "st";
+    case 2:
+      return "nd";
+    case 3:
+      return "rd";
+    }
+  return "th";
+}
+
+const char *object_type_name(object_type type)
+{
+  switch (type) {
+  case BOX_OBJECT:
+    return "box";
+  case CIRCLE_OBJECT:
+    return "circle";
+  case ELLIPSE_OBJECT:
+    return "ellipse";
+  case ARC_OBJECT:
+    return "arc";
+  case SPLINE_OBJECT:
+    return "spline";
+  case LINE_OBJECT:
+    return "line";
+  case ARROW_OBJECT:
+    return "arrow";
+  case MOVE_OBJECT:
+    return "move";
+  case TEXT_OBJECT:
+    return "\"\"";
+  case BLOCK_OBJECT:
+    return "[]";
+  case OTHER_OBJECT:
+  case MARK_OBJECT:
+  default:
+    break;
+  }
+  return "object";
+}
+
+static char sprintf_buf[1024];
+
+char *format_number(const char *form, double n)
+{
+  if (form == 0)
+    form = "%g";
+  return do_sprintf(form, &n, 1);
+}
+
+char *do_sprintf(const char *form, const double *v, int nv)
+{
+  string result;
+  int i = 0;
+  string one_format;
+  while (*form) {
+    if (*form == '%') {
+      one_format += *form++;
+      for (; *form != '\0' && strchr("#-+ 0123456789.", *form) != 0; form++)
+	one_format += *form;
+      if (*form == '\0' || strchr("eEfgG%", *form) == 0) {
+	lex_error("bad sprintf format");
+	result += one_format;
+	result += form;
+	break;
+      }
+      if (*form == '%') {
+	one_format += *form++;
+	one_format += '\0';
+	snprintf(sprintf_buf, sizeof(sprintf_buf),
+		 "%s", one_format.contents());
+      }
+      else {
+	if (i >= nv) {
+	  lex_error("too few arguments to snprintf");
+	  result += one_format;
+	  result += form;
+	  break;
+	}
+	one_format += *form++;
+	one_format += '\0';
+	snprintf(sprintf_buf, sizeof(sprintf_buf),
+		 one_format.contents(), v[i++]);
+      }
+      one_format.clear();
+      result += sprintf_buf;
+    }
+    else
+      result += *form++;
+  }
+  result += '\0';
+  return strsave(result.contents());
+}
diff -Nuar groff-1.22.3.old/src/preproc/preconv/.gitignore groff-1.22.3/src/preproc/preconv/.gitignore
--- groff-1.22.3.old/src/preproc/preconv/.gitignore	1970-01-01 02:00:00.000000000 +0200
+++ groff-1.22.3/src/preproc/preconv/.gitignore	2015-04-23 20:57:03.000000000 +0300
@@ -0,0 +1,3 @@
+Makefile.dep
+preconv
+preconv.n
diff -Nuar groff-1.22.3.old/src/preproc/preconv/Makefile.sub groff-1.22.3/src/preproc/preconv/Makefile.sub
--- groff-1.22.3.old/src/preproc/preconv/Makefile.sub	2014-11-04 10:38:35.214524134 +0200
+++ groff-1.22.3/src/preproc/preconv/Makefile.sub	1970-01-01 02:00:00.000000000 +0200
@@ -1,39 +0,0 @@
-# Makefile.sub for `preproc preconv'
-#
-# File position: <groff-source>/src/preproc/preconv/Makefile.sub
-#
-# Copyright (C) 2014  Free Software Foundation, Inc.
-#
-# This file is part of `font utf8' which is part of `groff'.
-#
-# `groff' is free software; you can redistribute it and/or modify it
-# under the terms of the GNU General Public License as published by
-# the Free Software Foundation, either version 2 of the License, or
-# (at your option) any later version.
-#
-# `groff' is distributed in the hope that it will be useful, but
-# WITHOUT ANY WARRANTY; without even the implied warranty of
-# MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the GNU
-# General Public License for more details.
-#
-# You should have received a copy of the GNU General Public License
-# along with this program. If not, see
-# <http://www.gnu.org/licenses/gpl-2.0.html>.
-#
-########################################################################
-
-PROG=preconv$(EXEEXT)
-MAN1=preconv.n
-XLIBS=$(LIBGROFF)
-MLIB=$(LIBM)
-EXTRA_LDFLAGS=$(LIBICONV)
-OBJS=preconv.$(OBJEXT)
-CCSRCS=$(srcdir)/preconv.cpp
-
-########################################################################
-# Emacs settings
-########################################################################
-#
-# Local Variables:
-# mode: makefile
-# End:
diff -Nuar groff-1.22.3.old/src/preproc/preconv/preconv.am groff-1.22.3/src/preproc/preconv/preconv.am
--- groff-1.22.3.old/src/preproc/preconv/preconv.am	1970-01-01 02:00:00.000000000 +0200
+++ groff-1.22.3/src/preproc/preconv/preconv.am	2015-04-23 20:57:03.000000000 +0300
@@ -0,0 +1,23 @@
+# Copyright (C) 2014
+#      Free Software Foundation, Inc.
+# 
+# This file is part of groff.
+#
+# groff is free software; you can redistribute it and/or modify it under
+# the terms of the GNU General Public License as published by the Free
+# Software Foundation, either version 3 of the License, or
+# (at your option) any later version.
+#
+# groff is distributed in the hope that it will be useful, but WITHOUT ANY
+# WARRANTY; without even the implied warranty of MERCHANTABILITY or
+# FITNESS FOR A PARTICULAR PURPOSE.  See the GNU General Public License
+# for more details.
+#
+# You should have received a copy of the GNU General Public License
+# along with this program. If not, see <http://www.gnu.org/licenses/>.
+
+bin_PROGRAMS += preconv
+preconv_LDADD = libgroff.a $(LIBM) $(LIBICONV)
+preconv_SOURCES = src/preproc/preconv/preconv.cpp
+man1_MANS += src/preproc/preconv/preconv.n
+EXTRA_DIST += src/preproc/preconv/preconv.man
diff -Nuar groff-1.22.3.old/src/preproc/preconv/preconv.cpp groff-1.22.3/src/preproc/preconv/preconv.cpp
--- groff-1.22.3.old/src/preproc/preconv/preconv.cpp	2014-11-04 10:38:35.214524134 +0200
+++ groff-1.22.3/src/preproc/preconv/preconv.cpp	2015-04-23 20:57:03.000000000 +0300
@@ -27,6 +27,7 @@
 #include "localcharset.h"
 #include "nonposix.h"
 #include "stringclass.h"
+#include "lf.h"
 
 #include <locale.h>
 
@@ -1065,8 +1066,12 @@
   }
   if (debug_flag)
     fprintf(stderr, "  encoding used: `%s'\n", encoding);
-  if (!raw_flag)
-    printf(".lf 1 %s\n", filename);
+  if (!raw_flag) {
+    string fn(filename);
+    fn += '\0';
+    normalize_for_lf(fn);
+    printf(".lf 1 %s\n", fn.contents());
+  }
   int success = 1;
   // Call converter (converters write to stdout).
   if (!strcasecmp(encoding, "ISO-8859-1"))
diff -Nuar groff-1.22.3.old/src/preproc/preconv/preconv.man groff-1.22.3/src/preproc/preconv/preconv.man
--- groff-1.22.3.old/src/preproc/preconv/preconv.man	2014-11-04 10:38:35.214524134 +0200
+++ groff-1.22.3/src/preproc/preconv/preconv.man	2015-04-23 20:57:03.000000000 +0300
@@ -3,6 +3,10 @@
 preconv \- convert encoding of input files to something GNU troff understands
 .
 .
+.do nr groff_C \n[.C]
+.cp 0
+.
+.
 .\" license (copying)
 .de co
 Copyright \[co] 2006-2014 Free Software Foundation, Inc.
@@ -355,6 +359,9 @@
 .co
 .
 .
+.cp \n[groff_C]
+.
+.
 .\" Emacs setting
 .\" Local Variables:
 .\" mode: nroff
diff -Nuar groff-1.22.3.old/src/preproc/refer/.gitignore groff-1.22.3/src/preproc/refer/.gitignore
--- groff-1.22.3.old/src/preproc/refer/.gitignore	1970-01-01 02:00:00.000000000 +0200
+++ groff-1.22.3/src/preproc/refer/.gitignore	2015-04-23 20:57:03.000000000 +0300
@@ -0,0 +1,5 @@
+Makefile.dep
+refer
+refer.n
+y.output
+label.cpp
diff -Nuar groff-1.22.3.old/src/preproc/refer/label.cpp groff-1.22.3/src/preproc/refer/label.cpp
--- groff-1.22.3.old/src/preproc/refer/label.cpp	2014-11-04 10:38:38.659481067 +0200
+++ groff-1.22.3/src/preproc/refer/label.cpp	1970-01-01 02:00:00.000000000 +0200
@@ -1,2701 +0,0 @@
-/* A Bison parser, made by GNU Bison 3.0.2.  */
-
-/* Bison implementation for Yacc-like parsers in C
-
-   Copyright (C) 1984, 1989-1990, 2000-2013 Free Software Foundation, Inc.
-
-   This program is free software: you can redistribute it and/or modify
-   it under the terms of the GNU General Public License as published by
-   the Free Software Foundation, either version 3 of the License, or
-   (at your option) any later version.
-
-   This program is distributed in the hope that it will be useful,
-   but WITHOUT ANY WARRANTY; without even the implied warranty of
-   MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
-   GNU General Public License for more details.
-
-   You should have received a copy of the GNU General Public License
-   along with this program.  If not, see <http://www.gnu.org/licenses/>.  */
-
-/* As a special exception, you may create a larger work that contains
-   part or all of the Bison parser skeleton and distribute that work
-   under terms of your choice, so long as that work isn't itself a
-   parser generator using the skeleton or a modified version thereof
-   as a parser skeleton.  Alternatively, if you modify or redistribute
-   the parser skeleton itself, you may (at your option) remove this
-   special exception, which will cause the skeleton and the resulting
-   Bison output files to be licensed under the GNU General Public
-   License without this special exception.
-
-   This special exception was added by the Free Software Foundation in
-   version 2.2 of Bison.  */
-
-/* C LALR(1) parser skeleton written by Richard Stallman, by
-   simplifying the original so-called "semantic" parser.  */
-
-/* All symbols defined below should begin with yy or YY, to avoid
-   infringing on user name space.  This should be done even for local
-   variables, as they might otherwise be expanded by user macros.
-   There are some unavoidable exceptions within include files to
-   define necessary library symbols; they are noted "INFRINGES ON
-   USER NAME SPACE" below.  */
-
-/* Identify Bison output.  */
-#define YYBISON 1
-
-/* Bison version.  */
-#define YYBISON_VERSION "3.0.2"
-
-/* Skeleton name.  */
-#define YYSKELETON_NAME "yacc.c"
-
-/* Pure parsers.  */
-#define YYPURE 0
-
-/* Push parsers.  */
-#define YYPUSH 0
-
-/* Pull parsers.  */
-#define YYPULL 1
-
-
-
-
-/* Copy the first part of user declarations.  */
-#line 20 "label.y" /* yacc.c:339  */
-
-
-#include "refer.h"
-#include "refid.h"
-#include "ref.h"
-#include "token.h"
-
-int yylex();
-void yyerror(const char *);
-int yyparse();
-
-static const char *format_serial(char c, int n);
-
-struct label_info {
-  int start;
-  int length;
-  int count;
-  int total;
-  label_info(const string &);
-};
-
-label_info *lookup_label(const string &label);
-
-struct expression {
-  enum {
-    // Does the tentative label depend on the reference?
-    CONTAINS_VARIABLE = 01, 
-    CONTAINS_STAR = 02,
-    CONTAINS_FORMAT = 04,
-    CONTAINS_AT = 010
-  };
-  virtual ~expression() { }
-  virtual void evaluate(int, const reference &, string &,
-			substring_position &) = 0;
-  virtual unsigned analyze() { return 0; }
-};
-
-class at_expr : public expression {
-public:
-  at_expr() { }
-  void evaluate(int, const reference &, string &, substring_position &);
-  unsigned analyze() { return CONTAINS_VARIABLE|CONTAINS_AT; }
-};
-
-class format_expr : public expression {
-  char type;
-  int width;
-  int first_number;
-public:
-  format_expr(char c, int w = 0, int f = 1)
-    : type(c), width(w), first_number(f) { }
-  void evaluate(int, const reference &, string &, substring_position &);
-  unsigned analyze() { return CONTAINS_FORMAT; }
-};
-
-class field_expr : public expression {
-  int number;
-  char name;
-public:
-  field_expr(char nm, int num) : number(num), name(nm) { }
-  void evaluate(int, const reference &, string &, substring_position &);
-  unsigned analyze() { return CONTAINS_VARIABLE; }
-};
-
-class literal_expr : public expression {
-  string s;
-public:
-  literal_expr(const char *ptr, int len) : s(ptr, len) { }
-  void evaluate(int, const reference &, string &, substring_position &);
-};
-
-class unary_expr : public expression {
-protected:
-  expression *expr;
-public:
-  unary_expr(expression *e) : expr(e) { }
-  ~unary_expr() { delete expr; }
-  void evaluate(int, const reference &, string &, substring_position &) = 0;
-  unsigned analyze() { return expr ? expr->analyze() : 0; }
-};
-
-// This caches the analysis of an expression.
-
-class analyzed_expr : public unary_expr {
-  unsigned flags;
-public:
-  analyzed_expr(expression *);
-  void evaluate(int, const reference &, string &, substring_position &);
-  unsigned analyze() { return flags; }
-};
-
-class star_expr : public unary_expr {
-public:
-  star_expr(expression *e) : unary_expr(e) { }
-  void evaluate(int, const reference &, string &, substring_position &);
-  unsigned analyze() {
-    return ((expr ? (expr->analyze() & ~CONTAINS_VARIABLE) : 0)
-	    | CONTAINS_STAR);
-  }
-};
-
-typedef void map_func(const char *, const char *, string &);
-
-class map_expr : public unary_expr {
-  map_func *func;
-public:
-  map_expr(expression *e, map_func *f) : unary_expr(e), func(f) { }
-  void evaluate(int, const reference &, string &, substring_position &);
-};
-  
-typedef const char *extractor_func(const char *, const char *, const char **);
-
-class extractor_expr : public unary_expr {
-  int part;
-  extractor_func *func;
-public:
-  enum { BEFORE = +1, MATCH = 0, AFTER = -1 };
-  extractor_expr(expression *e, extractor_func *f, int pt)
-    : unary_expr(e), part(pt), func(f) { }
-  void evaluate(int, const reference &, string &, substring_position &);
-};
-
-class truncate_expr : public unary_expr {
-  int n;
-public:
-  truncate_expr(expression *e, int i) : unary_expr(e), n(i) { } 
-  void evaluate(int, const reference &, string &, substring_position &);
-};
-
-class separator_expr : public unary_expr {
-public:
-  separator_expr(expression *e) : unary_expr(e) { }
-  void evaluate(int, const reference &, string &, substring_position &);
-};
-
-class binary_expr : public expression {
-protected:
-  expression *expr1;
-  expression *expr2;
-public:
-  binary_expr(expression *e1, expression *e2) : expr1(e1), expr2(e2) { }
-  ~binary_expr() { delete expr1; delete expr2; }
-  void evaluate(int, const reference &, string &, substring_position &) = 0;
-  unsigned analyze() {
-    return (expr1 ? expr1->analyze() : 0) | (expr2 ? expr2->analyze() : 0);
-  }
-};
-
-class alternative_expr : public binary_expr {
-public:
-  alternative_expr(expression *e1, expression *e2) : binary_expr(e1, e2) { }
-  void evaluate(int, const reference &, string &, substring_position &);
-};
-
-class list_expr : public binary_expr {
-public:
-  list_expr(expression *e1, expression *e2) : binary_expr(e1, e2) { }
-  void evaluate(int, const reference &, string &, substring_position &);
-};
-
-class substitute_expr : public binary_expr {
-public:
-  substitute_expr(expression *e1, expression *e2) : binary_expr(e1, e2) { }
-  void evaluate(int, const reference &, string &, substring_position &);
-};
-
-class ternary_expr : public expression {
-protected:
-  expression *expr1;
-  expression *expr2;
-  expression *expr3;
-public:
-  ternary_expr(expression *e1, expression *e2, expression *e3)
-    : expr1(e1), expr2(e2), expr3(e3) { }
-  ~ternary_expr() { delete expr1; delete expr2; delete expr3; }
-  void evaluate(int, const reference &, string &, substring_position &) = 0;
-  unsigned analyze() {
-    return ((expr1 ? expr1->analyze() : 0)
-	    | (expr2 ? expr2->analyze() : 0)
-	    | (expr3 ? expr3->analyze() : 0));
-  }
-};
-
-class conditional_expr : public ternary_expr {
-public:
-  conditional_expr(expression *e1, expression *e2, expression *e3)
-    : ternary_expr(e1, e2, e3) { }
-  void evaluate(int, const reference &, string &, substring_position &);
-};
-
-static expression *parsed_label = 0;
-static expression *parsed_date_label = 0;
-static expression *parsed_short_label = 0;
-
-static expression *parse_result;
-
-string literals;
-
-
-#line 266 "label.cpp" /* yacc.c:339  */
-
-# ifndef YY_NULLPTR
-#  if defined __cplusplus && 201103L <= __cplusplus
-#   define YY_NULLPTR nullptr
-#  else
-#   define YY_NULLPTR 0
-#  endif
-# endif
-
-/* Enabling verbose error messages.  */
-#ifdef YYERROR_VERBOSE
-# undef YYERROR_VERBOSE
-# define YYERROR_VERBOSE 1
-#else
-# define YYERROR_VERBOSE 0
-#endif
-
-
-/* Debug traces.  */
-#ifndef YYDEBUG
-# define YYDEBUG 0
-#endif
-#if YYDEBUG
-extern int yydebug;
-#endif
-
-/* Token type.  */
-#ifndef YYTOKENTYPE
-# define YYTOKENTYPE
-  enum yytokentype
-  {
-    TOKEN_LETTER = 258,
-    TOKEN_LITERAL = 259,
-    TOKEN_DIGIT = 260
-  };
-#endif
-/* Tokens.  */
-#define TOKEN_LETTER 258
-#define TOKEN_LITERAL 259
-#define TOKEN_DIGIT 260
-
-/* Value type.  */
-#if ! defined YYSTYPE && ! defined YYSTYPE_IS_DECLARED
-typedef union YYSTYPE YYSTYPE;
-union YYSTYPE
-{
-#line 220 "label.y" /* yacc.c:355  */
-
-  int num;
-  expression *expr;
-  struct { int ndigits; int val; } dig;
-  struct { int start; int len; } str;
-
-#line 320 "label.cpp" /* yacc.c:355  */
-};
-# define YYSTYPE_IS_TRIVIAL 1
-# define YYSTYPE_IS_DECLARED 1
-#endif
-
-
-extern YYSTYPE yylval;
-
-int yyparse (void);
-
-
-
-/* Copy the second part of user declarations.  */
-
-#line 335 "label.cpp" /* yacc.c:358  */
-
-#ifdef short
-# undef short
-#endif
-
-#ifdef YYTYPE_UINT8
-typedef YYTYPE_UINT8 yytype_uint8;
-#else
-typedef unsigned char yytype_uint8;
-#endif
-
-#ifdef YYTYPE_INT8
-typedef YYTYPE_INT8 yytype_int8;
-#else
-typedef signed char yytype_int8;
-#endif
-
-#ifdef YYTYPE_UINT16
-typedef YYTYPE_UINT16 yytype_uint16;
-#else
-typedef unsigned short int yytype_uint16;
-#endif
-
-#ifdef YYTYPE_INT16
-typedef YYTYPE_INT16 yytype_int16;
-#else
-typedef short int yytype_int16;
-#endif
-
-#ifndef YYSIZE_T
-# ifdef __SIZE_TYPE__
-#  define YYSIZE_T __SIZE_TYPE__
-# elif defined size_t
-#  define YYSIZE_T size_t
-# elif ! defined YYSIZE_T
-#  include <stddef.h> /* INFRINGES ON USER NAME SPACE */
-#  define YYSIZE_T size_t
-# else
-#  define YYSIZE_T unsigned int
-# endif
-#endif
-
-#define YYSIZE_MAXIMUM ((YYSIZE_T) -1)
-
-#ifndef YY_
-# if defined YYENABLE_NLS && YYENABLE_NLS
-#  if ENABLE_NLS
-#   include <libintl.h> /* INFRINGES ON USER NAME SPACE */
-#   define YY_(Msgid) dgettext ("bison-runtime", Msgid)
-#  endif
-# endif
-# ifndef YY_
-#  define YY_(Msgid) Msgid
-# endif
-#endif
-
-#ifndef YY_ATTRIBUTE
-# if (defined __GNUC__                                               \
-      && (2 < __GNUC__ || (__GNUC__ == 2 && 96 <= __GNUC_MINOR__)))  \
-     || defined __SUNPRO_C && 0x5110 <= __SUNPRO_C
-#  define YY_ATTRIBUTE(Spec) __attribute__(Spec)
-# else
-#  define YY_ATTRIBUTE(Spec) /* empty */
-# endif
-#endif
-
-#ifndef YY_ATTRIBUTE_PURE
-# define YY_ATTRIBUTE_PURE   YY_ATTRIBUTE ((__pure__))
-#endif
-
-#ifndef YY_ATTRIBUTE_UNUSED
-# define YY_ATTRIBUTE_UNUSED YY_ATTRIBUTE ((__unused__))
-#endif
-
-#if !defined _Noreturn \
-     && (!defined __STDC_VERSION__ || __STDC_VERSION__ < 201112)
-# if defined _MSC_VER && 1200 <= _MSC_VER
-#  define _Noreturn __declspec (noreturn)
-# else
-#  define _Noreturn YY_ATTRIBUTE ((__noreturn__))
-# endif
-#endif
-
-/* Suppress unused-variable warnings by "using" E.  */
-#if ! defined lint || defined __GNUC__
-# define YYUSE(E) ((void) (E))
-#else
-# define YYUSE(E) /* empty */
-#endif
-
-#if defined __GNUC__ && 407 <= __GNUC__ * 100 + __GNUC_MINOR__
-/* Suppress an incorrect diagnostic about yylval being uninitialized.  */
-# define YY_IGNORE_MAYBE_UNINITIALIZED_BEGIN \
-    _Pragma ("GCC diagnostic push") \
-    _Pragma ("GCC diagnostic ignored \"-Wuninitialized\"")\
-    _Pragma ("GCC diagnostic ignored \"-Wmaybe-uninitialized\"")
-# define YY_IGNORE_MAYBE_UNINITIALIZED_END \
-    _Pragma ("GCC diagnostic pop")
-#else
-# define YY_INITIAL_VALUE(Value) Value
-#endif
-#ifndef YY_IGNORE_MAYBE_UNINITIALIZED_BEGIN
-# define YY_IGNORE_MAYBE_UNINITIALIZED_BEGIN
-# define YY_IGNORE_MAYBE_UNINITIALIZED_END
-#endif
-#ifndef YY_INITIAL_VALUE
-# define YY_INITIAL_VALUE(Value) /* Nothing. */
-#endif
-
-
-#if ! defined yyoverflow || YYERROR_VERBOSE
-
-/* The parser invokes alloca or malloc; define the necessary symbols.  */
-
-# ifdef YYSTACK_USE_ALLOCA
-#  if YYSTACK_USE_ALLOCA
-#   ifdef __GNUC__
-#    define YYSTACK_ALLOC __builtin_alloca
-#   elif defined __BUILTIN_VA_ARG_INCR
-#    include <alloca.h> /* INFRINGES ON USER NAME SPACE */
-#   elif defined _AIX
-#    define YYSTACK_ALLOC __alloca
-#   elif defined _MSC_VER
-#    include <malloc.h> /* INFRINGES ON USER NAME SPACE */
-#    define alloca _alloca
-#   else
-#    define YYSTACK_ALLOC alloca
-#    if ! defined _ALLOCA_H && ! defined EXIT_SUCCESS
-#     include <stdlib.h> /* INFRINGES ON USER NAME SPACE */
-      /* Use EXIT_SUCCESS as a witness for stdlib.h.  */
-#     ifndef EXIT_SUCCESS
-#      define EXIT_SUCCESS 0
-#     endif
-#    endif
-#   endif
-#  endif
-# endif
-
-# ifdef YYSTACK_ALLOC
-   /* Pacify GCC's 'empty if-body' warning.  */
-#  define YYSTACK_FREE(Ptr) do { /* empty */; } while (0)
-#  ifndef YYSTACK_ALLOC_MAXIMUM
-    /* The OS might guarantee only one guard page at the bottom of the stack,
-       and a page size can be as small as 4096 bytes.  So we cannot safely
-       invoke alloca (N) if N exceeds 4096.  Use a slightly smaller number
-       to allow for a few compiler-allocated temporary stack slots.  */
-#   define YYSTACK_ALLOC_MAXIMUM 4032 /* reasonable circa 2006 */
-#  endif
-# else
-#  define YYSTACK_ALLOC YYMALLOC
-#  define YYSTACK_FREE YYFREE
-#  ifndef YYSTACK_ALLOC_MAXIMUM
-#   define YYSTACK_ALLOC_MAXIMUM YYSIZE_MAXIMUM
-#  endif
-#  if (defined __cplusplus && ! defined EXIT_SUCCESS \
-       && ! ((defined YYMALLOC || defined malloc) \
-             && (defined YYFREE || defined free)))
-#   include <stdlib.h> /* INFRINGES ON USER NAME SPACE */
-#   ifndef EXIT_SUCCESS
-#    define EXIT_SUCCESS 0
-#   endif
-#  endif
-#  ifndef YYMALLOC
-#   define YYMALLOC malloc
-#   if ! defined malloc && ! defined EXIT_SUCCESS
-void *malloc (YYSIZE_T); /* INFRINGES ON USER NAME SPACE */
-#   endif
-#  endif
-#  ifndef YYFREE
-#   define YYFREE free
-#   if ! defined free && ! defined EXIT_SUCCESS
-void free (void *); /* INFRINGES ON USER NAME SPACE */
-#   endif
-#  endif
-# endif
-#endif /* ! defined yyoverflow || YYERROR_VERBOSE */
-
-
-#if (! defined yyoverflow \
-     && (! defined __cplusplus \
-         || (defined YYSTYPE_IS_TRIVIAL && YYSTYPE_IS_TRIVIAL)))
-
-/* A type that is properly aligned for any stack member.  */
-union yyalloc
-{
-  yytype_int16 yyss_alloc;
-  YYSTYPE yyvs_alloc;
-};
-
-/* The size of the maximum gap between one aligned stack and the next.  */
-# define YYSTACK_GAP_MAXIMUM (sizeof (union yyalloc) - 1)
-
-/* The size of an array large to enough to hold all stacks, each with
-   N elements.  */
-# define YYSTACK_BYTES(N) \
-     ((N) * (sizeof (yytype_int16) + sizeof (YYSTYPE)) \
-      + YYSTACK_GAP_MAXIMUM)
-
-# define YYCOPY_NEEDED 1
-
-/* Relocate STACK from its old location to the new one.  The
-   local variables YYSIZE and YYSTACKSIZE give the old and new number of
-   elements in the stack, and YYPTR gives the new location of the
-   stack.  Advance YYPTR to a properly aligned location for the next
-   stack.  */
-# define YYSTACK_RELOCATE(Stack_alloc, Stack)                           \
-    do                                                                  \
-      {                                                                 \
-        YYSIZE_T yynewbytes;                                            \
-        YYCOPY (&yyptr->Stack_alloc, Stack, yysize);                    \
-        Stack = &yyptr->Stack_alloc;                                    \
-        yynewbytes = yystacksize * sizeof (*Stack) + YYSTACK_GAP_MAXIMUM; \
-        yyptr += yynewbytes / sizeof (*yyptr);                          \
-      }                                                                 \
-    while (0)
-
-#endif
-
-#if defined YYCOPY_NEEDED && YYCOPY_NEEDED
-/* Copy COUNT objects from SRC to DST.  The source and destination do
-   not overlap.  */
-# ifndef YYCOPY
-#  if defined __GNUC__ && 1 < __GNUC__
-#   define YYCOPY(Dst, Src, Count) \
-      __builtin_memcpy (Dst, Src, (Count) * sizeof (*(Src)))
-#  else
-#   define YYCOPY(Dst, Src, Count)              \
-      do                                        \
-        {                                       \
-          YYSIZE_T yyi;                         \
-          for (yyi = 0; yyi < (Count); yyi++)   \
-            (Dst)[yyi] = (Src)[yyi];            \
-        }                                       \
-      while (0)
-#  endif
-# endif
-#endif /* !YYCOPY_NEEDED */
-
-/* YYFINAL -- State number of the termination state.  */
-#define YYFINAL  21
-/* YYLAST -- Last index in YYTABLE.  */
-#define YYLAST   39
-
-/* YYNTOKENS -- Number of terminals.  */
-#define YYNTOKENS  21
-/* YYNNTS -- Number of nonterminals.  */
-#define YYNNTS  12
-/* YYNRULES -- Number of rules.  */
-#define YYNRULES  34
-/* YYNSTATES -- Number of states.  */
-#define YYNSTATES  49
-
-/* YYTRANSLATE[YYX] -- Symbol number corresponding to YYX as returned
-   by yylex, with out-of-bounds checking.  */
-#define YYUNDEFTOK  2
-#define YYMAXUTOK   260
-
-#define YYTRANSLATE(YYX)                                                \
-  ((unsigned int) (YYX) <= YYMAXUTOK ? yytranslate[YYX] : YYUNDEFTOK)
-
-/* YYTRANSLATE[TOKEN-NUM] -- Symbol number corresponding to TOKEN-NUM
-   as returned by yylex, without out-of-bounds checking.  */
-static const yytype_uint8 yytranslate[] =
-{
-       0,     2,     2,     2,     2,     2,     2,     2,     2,     2,
-       2,     2,     2,     2,     2,     2,     2,     2,     2,     2,
-       2,     2,     2,     2,     2,     2,     2,     2,     2,     2,
-       2,     2,     2,     2,     2,     2,     2,    12,     9,     2,
-      17,    18,    16,    14,     2,    15,    13,     2,     2,     2,
-       2,     2,     2,     2,     2,     2,     2,     2,     7,     2,
-      19,     2,    20,     6,    11,     2,     2,     2,     2,     2,
-       2,     2,     2,     2,     2,     2,     2,     2,     2,     2,
-       2,     2,     2,     2,     2,     2,     2,     2,     2,     2,
-       2,     2,     2,     2,     2,     2,     2,     2,     2,     2,
-       2,     2,     2,     2,     2,     2,     2,     2,     2,     2,
-       2,     2,     2,     2,     2,     2,     2,     2,     2,     2,
-       2,     2,     2,     2,     8,     2,    10,     2,     2,     2,
-       2,     2,     2,     2,     2,     2,     2,     2,     2,     2,
-       2,     2,     2,     2,     2,     2,     2,     2,     2,     2,
-       2,     2,     2,     2,     2,     2,     2,     2,     2,     2,
-       2,     2,     2,     2,     2,     2,     2,     2,     2,     2,
-       2,     2,     2,     2,     2,     2,     2,     2,     2,     2,
-       2,     2,     2,     2,     2,     2,     2,     2,     2,     2,
-       2,     2,     2,     2,     2,     2,     2,     2,     2,     2,
-       2,     2,     2,     2,     2,     2,     2,     2,     2,     2,
-       2,     2,     2,     2,     2,     2,     2,     2,     2,     2,
-       2,     2,     2,     2,     2,     2,     2,     2,     2,     2,
-       2,     2,     2,     2,     2,     2,     2,     2,     2,     2,
-       2,     2,     2,     2,     2,     2,     2,     2,     2,     2,
-       2,     2,     2,     2,     2,     2,     1,     2,     3,     4,
-       5
-};
-
-#if YYDEBUG
-  /* YYRLINE[YYN] -- Source line where rule number YYN was defined.  */
-static const yytype_uint16 yyrline[] =
-{
-       0,   248,   248,   253,   255,   261,   262,   267,   269,   271,
-     276,   278,   283,   285,   290,   292,   297,   299,   301,   317,
-     321,   352,   354,   356,   358,   360,   366,   367,   372,   374,
-     379,   381,   388,   389,   391
-};
-#endif
-
-#if YYDEBUG || YYERROR_VERBOSE || 0
-/* YYTNAME[SYMBOL-NUM] -- String name of the symbol SYMBOL-NUM.
-   First, the terminals, then, starting at YYNTOKENS, nonterminals.  */
-static const char *const yytname[] =
-{
-  "$end", "error", "$undefined", "TOKEN_LETTER", "TOKEN_LITERAL",
-  "TOKEN_DIGIT", "'?'", "':'", "'|'", "'&'", "'~'", "'@'", "'%'", "'.'",
-  "'+'", "'-'", "'*'", "'('", "')'", "'<'", "'>'", "$accept", "expr",
-  "conditional", "optional_conditional", "alternative", "list",
-  "substitute", "string", "optional_number", "number", "digits", "flag", YY_NULLPTR
-};
-#endif
-
-# ifdef YYPRINT
-/* YYTOKNUM[NUM] -- (External) token number corresponding to the
-   (internal) symbol number NUM (which must be that of a token).  */
-static const yytype_uint16 yytoknum[] =
-{
-       0,   256,   257,   258,   259,   260,    63,    58,   124,    38,
-     126,    64,    37,    46,    43,    45,    42,    40,    41,    60,
-      62
-};
-# endif
-
-#define YYPACT_NINF -26
-
-#define yypact_value_is_default(Yystate) \
-  (!!((Yystate) == (-26)))
-
-#define YYTABLE_NINF -1
-
-#define yytable_value_is_error(Yytable_value) \
-  0
-
-  /* YYPACT[STATE-NUM] -- Index in YYTABLE of the portion describing
-     STATE-NUM.  */
-static const yytype_int8 yypact[] =
-{
-       2,    11,   -26,   -26,    12,     2,     2,    24,   -26,   -26,
-      21,     2,    18,    -6,   -26,    26,   -26,   -26,    27,    15,
-      14,   -26,     2,     2,     2,    18,     2,    -3,    11,    11,
-     -26,   -26,   -26,   -26,   -26,    28,     2,     2,    -6,   -26,
-     -26,    33,    26,    26,     2,    11,   -26,   -26,    26
-};
-
-  /* YYDEFACT[STATE-NUM] -- Default reduction number in state STATE-NUM.
-     Performed when YYTABLE does not specify something else to do.  Zero
-     means the default is an error.  */
-static const yytype_uint8 yydefact[] =
-{
-       5,    16,    15,    14,     0,     5,     5,     0,     6,     2,
-       3,     7,    10,    12,    28,    17,    18,    30,    19,     0,
-       0,     1,     5,     0,     0,    11,     0,    32,     0,     0,
-      23,    29,    31,    24,    25,     0,     8,     9,    13,    33,
-      34,     0,    21,    22,     0,    26,     4,    20,    27
-};
-
-  /* YYPGOTO[NTERM-NUM].  */
-static const yytype_int8 yypgoto[] =
-{
-     -26,   -26,    -7,    -4,   -26,    -1,   -11,    13,   -26,   -25,
-     -26,   -26
-};
-
-  /* YYDEFGOTO[NTERM-NUM].  */
-static const yytype_int8 yydefgoto[] =
-{
-      -1,     7,     8,     9,    10,    11,    12,    13,    47,    15,
-      18,    41
-};
-
-  /* YYTABLE[YYPACT[STATE-NUM]] -- What to do in state STATE-NUM.  If
-     positive, shift that token.  If negative, reduce the rule whose
-     number is the opposite.  If YYTABLE_NINF, syntax error.  */
-static const yytype_uint8 yytable[] =
-{
-      25,    19,    20,    42,    43,     1,     2,    27,    28,    29,
-      30,    39,    40,     3,     4,    16,    14,    17,    35,     5,
-      48,     6,    36,    37,    21,    25,    25,    22,    26,    23,
-      24,    31,    32,    33,    34,    44,    45,    46,     0,    38
-};
-
-static const yytype_int8 yycheck[] =
-{
-      11,     5,     6,    28,    29,     3,     4,    13,    14,    15,
-      16,    14,    15,    11,    12,     3,     5,     5,    22,    17,
-      45,    19,    23,    24,     0,    36,    37,     6,    10,     8,
-       9,     5,     5,    18,    20,     7,     3,    44,    -1,    26
-};
-
-  /* YYSTOS[STATE-NUM] -- The (internal number of the) accessing
-     symbol of state STATE-NUM.  */
-static const yytype_uint8 yystos[] =
-{
-       0,     3,     4,    11,    12,    17,    19,    22,    23,    24,
-      25,    26,    27,    28,     5,    30,     3,     5,    31,    24,
-      24,     0,     6,     8,     9,    27,    10,    13,    14,    15,
-      16,     5,     5,    18,    20,    24,    26,    26,    28,    14,
-      15,    32,    30,    30,     7,     3,    23,    29,    30
-};
-
-  /* YYR1[YYN] -- Symbol number of symbol that rule YYN derives.  */
-static const yytype_uint8 yyr1[] =
-{
-       0,    21,    22,    23,    23,    24,    24,    25,    25,    25,
-      26,    26,    27,    27,    28,    28,    28,    28,    28,    28,
-      28,    28,    28,    28,    28,    28,    29,    29,    30,    30,
-      31,    31,    32,    32,    32
-};
-
-  /* YYR2[YYN] -- Number of symbols on the right hand side of rule YYN.  */
-static const yytype_uint8 yyr2[] =
-{
-       0,     2,     1,     1,     5,     0,     1,     1,     3,     3,
-       1,     2,     1,     3,     1,     1,     1,     2,     2,     2,
-       5,     3,     3,     2,     3,     3,     0,     1,     1,     2,
-       1,     2,     0,     1,     1
-};
-
-
-#define yyerrok         (yyerrstatus = 0)
-#define yyclearin       (yychar = YYEMPTY)
-#define YYEMPTY         (-2)
-#define YYEOF           0
-
-#define YYACCEPT        goto yyacceptlab
-#define YYABORT         goto yyabortlab
-#define YYERROR         goto yyerrorlab
-
-
-#define YYRECOVERING()  (!!yyerrstatus)
-
-#define YYBACKUP(Token, Value)                                  \
-do                                                              \
-  if (yychar == YYEMPTY)                                        \
-    {                                                           \
-      yychar = (Token);                                         \
-      yylval = (Value);                                         \
-      YYPOPSTACK (yylen);                                       \
-      yystate = *yyssp;                                         \
-      goto yybackup;                                            \
-    }                                                           \
-  else                                                          \
-    {                                                           \
-      yyerror (YY_("syntax error: cannot back up")); \
-      YYERROR;                                                  \
-    }                                                           \
-while (0)
-
-/* Error token number */
-#define YYTERROR        1
-#define YYERRCODE       256
-
-
-
-/* Enable debugging if requested.  */
-#if YYDEBUG
-
-# ifndef YYFPRINTF
-#  include <stdio.h> /* INFRINGES ON USER NAME SPACE */
-#  define YYFPRINTF fprintf
-# endif
-
-# define YYDPRINTF(Args)                        \
-do {                                            \
-  if (yydebug)                                  \
-    YYFPRINTF Args;                             \
-} while (0)
-
-/* This macro is provided for backward compatibility. */
-#ifndef YY_LOCATION_PRINT
-# define YY_LOCATION_PRINT(File, Loc) ((void) 0)
-#endif
-
-
-# define YY_SYMBOL_PRINT(Title, Type, Value, Location)                    \
-do {                                                                      \
-  if (yydebug)                                                            \
-    {                                                                     \
-      YYFPRINTF (stderr, "%s ", Title);                                   \
-      yy_symbol_print (stderr,                                            \
-                  Type, Value); \
-      YYFPRINTF (stderr, "\n");                                           \
-    }                                                                     \
-} while (0)
-
-
-/*----------------------------------------.
-| Print this symbol's value on YYOUTPUT.  |
-`----------------------------------------*/
-
-static void
-yy_symbol_value_print (FILE *yyoutput, int yytype, YYSTYPE const * const yyvaluep)
-{
-  FILE *yyo = yyoutput;
-  YYUSE (yyo);
-  if (!yyvaluep)
-    return;
-# ifdef YYPRINT
-  if (yytype < YYNTOKENS)
-    YYPRINT (yyoutput, yytoknum[yytype], *yyvaluep);
-# endif
-  YYUSE (yytype);
-}
-
-
-/*--------------------------------.
-| Print this symbol on YYOUTPUT.  |
-`--------------------------------*/
-
-static void
-yy_symbol_print (FILE *yyoutput, int yytype, YYSTYPE const * const yyvaluep)
-{
-  YYFPRINTF (yyoutput, "%s %s (",
-             yytype < YYNTOKENS ? "token" : "nterm", yytname[yytype]);
-
-  yy_symbol_value_print (yyoutput, yytype, yyvaluep);
-  YYFPRINTF (yyoutput, ")");
-}
-
-/*------------------------------------------------------------------.
-| yy_stack_print -- Print the state stack from its BOTTOM up to its |
-| TOP (included).                                                   |
-`------------------------------------------------------------------*/
-
-static void
-yy_stack_print (yytype_int16 *yybottom, yytype_int16 *yytop)
-{
-  YYFPRINTF (stderr, "Stack now");
-  for (; yybottom <= yytop; yybottom++)
-    {
-      int yybot = *yybottom;
-      YYFPRINTF (stderr, " %d", yybot);
-    }
-  YYFPRINTF (stderr, "\n");
-}
-
-# define YY_STACK_PRINT(Bottom, Top)                            \
-do {                                                            \
-  if (yydebug)                                                  \
-    yy_stack_print ((Bottom), (Top));                           \
-} while (0)
-
-
-/*------------------------------------------------.
-| Report that the YYRULE is going to be reduced.  |
-`------------------------------------------------*/
-
-static void
-yy_reduce_print (yytype_int16 *yyssp, YYSTYPE *yyvsp, int yyrule)
-{
-  unsigned long int yylno = yyrline[yyrule];
-  int yynrhs = yyr2[yyrule];
-  int yyi;
-  YYFPRINTF (stderr, "Reducing stack by rule %d (line %lu):\n",
-             yyrule - 1, yylno);
-  /* The symbols being reduced.  */
-  for (yyi = 0; yyi < yynrhs; yyi++)
-    {
-      YYFPRINTF (stderr, "   $%d = ", yyi + 1);
-      yy_symbol_print (stderr,
-                       yystos[yyssp[yyi + 1 - yynrhs]],
-                       &(yyvsp[(yyi + 1) - (yynrhs)])
-                                              );
-      YYFPRINTF (stderr, "\n");
-    }
-}
-
-# define YY_REDUCE_PRINT(Rule)          \
-do {                                    \
-  if (yydebug)                          \
-    yy_reduce_print (yyssp, yyvsp, Rule); \
-} while (0)
-
-/* Nonzero means print parse trace.  It is left uninitialized so that
-   multiple parsers can coexist.  */
-int yydebug;
-#else /* !YYDEBUG */
-# define YYDPRINTF(Args)
-# define YY_SYMBOL_PRINT(Title, Type, Value, Location)
-# define YY_STACK_PRINT(Bottom, Top)
-# define YY_REDUCE_PRINT(Rule)
-#endif /* !YYDEBUG */
-
-
-/* YYINITDEPTH -- initial size of the parser's stacks.  */
-#ifndef YYINITDEPTH
-# define YYINITDEPTH 200
-#endif
-
-/* YYMAXDEPTH -- maximum size the stacks can grow to (effective only
-   if the built-in stack extension method is used).
-
-   Do not make this value too large; the results are undefined if
-   YYSTACK_ALLOC_MAXIMUM < YYSTACK_BYTES (YYMAXDEPTH)
-   evaluated with infinite-precision integer arithmetic.  */
-
-#ifndef YYMAXDEPTH
-# define YYMAXDEPTH 10000
-#endif
-
-
-#if YYERROR_VERBOSE
-
-# ifndef yystrlen
-#  if defined __GLIBC__ && defined _STRING_H
-#   define yystrlen strlen
-#  else
-/* Return the length of YYSTR.  */
-static YYSIZE_T
-yystrlen (const char *yystr)
-{
-  YYSIZE_T yylen;
-  for (yylen = 0; yystr[yylen]; yylen++)
-    continue;
-  return yylen;
-}
-#  endif
-# endif
-
-# ifndef yystpcpy
-#  if defined __GLIBC__ && defined _STRING_H && defined _GNU_SOURCE
-#   define yystpcpy stpcpy
-#  else
-/* Copy YYSRC to YYDEST, returning the address of the terminating '\0' in
-   YYDEST.  */
-static char *
-yystpcpy (char *yydest, const char *yysrc)
-{
-  char *yyd = yydest;
-  const char *yys = yysrc;
-
-  while ((*yyd++ = *yys++) != '\0')
-    continue;
-
-  return yyd - 1;
-}
-#  endif
-# endif
-
-# ifndef yytnamerr
-/* Copy to YYRES the contents of YYSTR after stripping away unnecessary
-   quotes and backslashes, so that it's suitable for yyerror.  The
-   heuristic is that double-quoting is unnecessary unless the string
-   contains an apostrophe, a comma, or backslash (other than
-   backslash-backslash).  YYSTR is taken from yytname.  If YYRES is
-   null, do not copy; instead, return the length of what the result
-   would have been.  */
-static YYSIZE_T
-yytnamerr (char *yyres, const char *yystr)
-{
-  if (*yystr == '"')
-    {
-      YYSIZE_T yyn = 0;
-      char const *yyp = yystr;
-
-      for (;;)
-        switch (*++yyp)
-          {
-          case '\'':
-          case ',':
-            goto do_not_strip_quotes;
-
-          case '\\':
-            if (*++yyp != '\\')
-              goto do_not_strip_quotes;
-            /* Fall through.  */
-          default:
-            if (yyres)
-              yyres[yyn] = *yyp;
-            yyn++;
-            break;
-
-          case '"':
-            if (yyres)
-              yyres[yyn] = '\0';
-            return yyn;
-          }
-    do_not_strip_quotes: ;
-    }
-
-  if (! yyres)
-    return yystrlen (yystr);
-
-  return yystpcpy (yyres, yystr) - yyres;
-}
-# endif
-
-/* Copy into *YYMSG, which is of size *YYMSG_ALLOC, an error message
-   about the unexpected token YYTOKEN for the state stack whose top is
-   YYSSP.
-
-   Return 0 if *YYMSG was successfully written.  Return 1 if *YYMSG is
-   not large enough to hold the message.  In that case, also set
-   *YYMSG_ALLOC to the required number of bytes.  Return 2 if the
-   required number of bytes is too large to store.  */
-static int
-yysyntax_error (YYSIZE_T *yymsg_alloc, char **yymsg,
-                yytype_int16 *yyssp, int yytoken)
-{
-  YYSIZE_T yysize0 = yytnamerr (YY_NULLPTR, yytname[yytoken]);
-  YYSIZE_T yysize = yysize0;
-  enum { YYERROR_VERBOSE_ARGS_MAXIMUM = 5 };
-  /* Internationalized format string. */
-  const char *yyformat = YY_NULLPTR;
-  /* Arguments of yyformat. */
-  char const *yyarg[YYERROR_VERBOSE_ARGS_MAXIMUM];
-  /* Number of reported tokens (one for the "unexpected", one per
-     "expected"). */
-  int yycount = 0;
-
-  /* There are many possibilities here to consider:
-     - If this state is a consistent state with a default action, then
-       the only way this function was invoked is if the default action
-       is an error action.  In that case, don't check for expected
-       tokens because there are none.
-     - The only way there can be no lookahead present (in yychar) is if
-       this state is a consistent state with a default action.  Thus,
-       detecting the absence of a lookahead is sufficient to determine
-       that there is no unexpected or expected token to report.  In that
-       case, just report a simple "syntax error".
-     - Don't assume there isn't a lookahead just because this state is a
-       consistent state with a default action.  There might have been a
-       previous inconsistent state, consistent state with a non-default
-       action, or user semantic action that manipulated yychar.
-     - Of course, the expected token list depends on states to have
-       correct lookahead information, and it depends on the parser not
-       to perform extra reductions after fetching a lookahead from the
-       scanner and before detecting a syntax error.  Thus, state merging
-       (from LALR or IELR) and default reductions corrupt the expected
-       token list.  However, the list is correct for canonical LR with
-       one exception: it will still contain any token that will not be
-       accepted due to an error action in a later state.
-  */
-  if (yytoken != YYEMPTY)
-    {
-      int yyn = yypact[*yyssp];
-      yyarg[yycount++] = yytname[yytoken];
-      if (!yypact_value_is_default (yyn))
-        {
-          /* Start YYX at -YYN if negative to avoid negative indexes in
-             YYCHECK.  In other words, skip the first -YYN actions for
-             this state because they are default actions.  */
-          int yyxbegin = yyn < 0 ? -yyn : 0;
-          /* Stay within bounds of both yycheck and yytname.  */
-          int yychecklim = YYLAST - yyn + 1;
-          int yyxend = yychecklim < YYNTOKENS ? yychecklim : YYNTOKENS;
-          int yyx;
-
-          for (yyx = yyxbegin; yyx < yyxend; ++yyx)
-            if (yycheck[yyx + yyn] == yyx && yyx != YYTERROR
-                && !yytable_value_is_error (yytable[yyx + yyn]))
-              {
-                if (yycount == YYERROR_VERBOSE_ARGS_MAXIMUM)
-                  {
-                    yycount = 1;
-                    yysize = yysize0;
-                    break;
-                  }
-                yyarg[yycount++] = yytname[yyx];
-                {
-                  YYSIZE_T yysize1 = yysize + yytnamerr (YY_NULLPTR, yytname[yyx]);
-                  if (! (yysize <= yysize1
-                         && yysize1 <= YYSTACK_ALLOC_MAXIMUM))
-                    return 2;
-                  yysize = yysize1;
-                }
-              }
-        }
-    }
-
-  switch (yycount)
-    {
-# define YYCASE_(N, S)                      \
-      case N:                               \
-        yyformat = S;                       \
-      break
-      YYCASE_(0, YY_("syntax error"));
-      YYCASE_(1, YY_("syntax error, unexpected %s"));
-      YYCASE_(2, YY_("syntax error, unexpected %s, expecting %s"));
-      YYCASE_(3, YY_("syntax error, unexpected %s, expecting %s or %s"));
-      YYCASE_(4, YY_("syntax error, unexpected %s, expecting %s or %s or %s"));
-      YYCASE_(5, YY_("syntax error, unexpected %s, expecting %s or %s or %s or %s"));
-# undef YYCASE_
-    }
-
-  {
-    YYSIZE_T yysize1 = yysize + yystrlen (yyformat);
-    if (! (yysize <= yysize1 && yysize1 <= YYSTACK_ALLOC_MAXIMUM))
-      return 2;
-    yysize = yysize1;
-  }
-
-  if (*yymsg_alloc < yysize)
-    {
-      *yymsg_alloc = 2 * yysize;
-      if (! (yysize <= *yymsg_alloc
-             && *yymsg_alloc <= YYSTACK_ALLOC_MAXIMUM))
-        *yymsg_alloc = YYSTACK_ALLOC_MAXIMUM;
-      return 1;
-    }
-
-  /* Avoid sprintf, as that infringes on the user's name space.
-     Don't have undefined behavior even if the translation
-     produced a string with the wrong number of "%s"s.  */
-  {
-    char *yyp = *yymsg;
-    int yyi = 0;
-    while ((*yyp = *yyformat) != '\0')
-      if (*yyp == '%' && yyformat[1] == 's' && yyi < yycount)
-        {
-          yyp += yytnamerr (yyp, yyarg[yyi++]);
-          yyformat += 2;
-        }
-      else
-        {
-          yyp++;
-          yyformat++;
-        }
-  }
-  return 0;
-}
-#endif /* YYERROR_VERBOSE */
-
-/*-----------------------------------------------.
-| Release the memory associated to this symbol.  |
-`-----------------------------------------------*/
-
-static void
-yydestruct (const char *yymsg, int yytype, YYSTYPE *yyvaluep)
-{
-  YYUSE (yyvaluep);
-  if (!yymsg)
-    yymsg = "Deleting";
-  YY_SYMBOL_PRINT (yymsg, yytype, yyvaluep, yylocationp);
-
-  YY_IGNORE_MAYBE_UNINITIALIZED_BEGIN
-  YYUSE (yytype);
-  YY_IGNORE_MAYBE_UNINITIALIZED_END
-}
-
-
-
-
-/* The lookahead symbol.  */
-int yychar;
-
-/* The semantic value of the lookahead symbol.  */
-YYSTYPE yylval;
-/* Number of syntax errors so far.  */
-int yynerrs;
-
-
-/*----------.
-| yyparse.  |
-`----------*/
-
-int
-yyparse (void)
-{
-    int yystate;
-    /* Number of tokens to shift before error messages enabled.  */
-    int yyerrstatus;
-
-    /* The stacks and their tools:
-       'yyss': related to states.
-       'yyvs': related to semantic values.
-
-       Refer to the stacks through separate pointers, to allow yyoverflow
-       to reallocate them elsewhere.  */
-
-    /* The state stack.  */
-    yytype_int16 yyssa[YYINITDEPTH];
-    yytype_int16 *yyss;
-    yytype_int16 *yyssp;
-
-    /* The semantic value stack.  */
-    YYSTYPE yyvsa[YYINITDEPTH];
-    YYSTYPE *yyvs;
-    YYSTYPE *yyvsp;
-
-    YYSIZE_T yystacksize;
-
-  int yyn;
-  int yyresult;
-  /* Lookahead token as an internal (translated) token number.  */
-  int yytoken = 0;
-  /* The variables used to return semantic value and location from the
-     action routines.  */
-  YYSTYPE yyval;
-
-#if YYERROR_VERBOSE
-  /* Buffer for error messages, and its allocated size.  */
-  char yymsgbuf[128];
-  char *yymsg = yymsgbuf;
-  YYSIZE_T yymsg_alloc = sizeof yymsgbuf;
-#endif
-
-#define YYPOPSTACK(N)   (yyvsp -= (N), yyssp -= (N))
-
-  /* The number of symbols on the RHS of the reduced rule.
-     Keep to zero when no symbol should be popped.  */
-  int yylen = 0;
-
-  yyssp = yyss = yyssa;
-  yyvsp = yyvs = yyvsa;
-  yystacksize = YYINITDEPTH;
-
-  YYDPRINTF ((stderr, "Starting parse\n"));
-
-  yystate = 0;
-  yyerrstatus = 0;
-  yynerrs = 0;
-  yychar = YYEMPTY; /* Cause a token to be read.  */
-  goto yysetstate;
-
-/*------------------------------------------------------------.
-| yynewstate -- Push a new state, which is found in yystate.  |
-`------------------------------------------------------------*/
- yynewstate:
-  /* In all cases, when you get here, the value and location stacks
-     have just been pushed.  So pushing a state here evens the stacks.  */
-  yyssp++;
-
- yysetstate:
-  *yyssp = yystate;
-
-  if (yyss + yystacksize - 1 <= yyssp)
-    {
-      /* Get the current used size of the three stacks, in elements.  */
-      YYSIZE_T yysize = yyssp - yyss + 1;
-
-#ifdef yyoverflow
-      {
-        /* Give user a chance to reallocate the stack.  Use copies of
-           these so that the &'s don't force the real ones into
-           memory.  */
-        YYSTYPE *yyvs1 = yyvs;
-        yytype_int16 *yyss1 = yyss;
-
-        /* Each stack pointer address is followed by the size of the
-           data in use in that stack, in bytes.  This used to be a
-           conditional around just the two extra args, but that might
-           be undefined if yyoverflow is a macro.  */
-        yyoverflow (YY_("memory exhausted"),
-                    &yyss1, yysize * sizeof (*yyssp),
-                    &yyvs1, yysize * sizeof (*yyvsp),
-                    &yystacksize);
-
-        yyss = yyss1;
-        yyvs = yyvs1;
-      }
-#else /* no yyoverflow */
-# ifndef YYSTACK_RELOCATE
-      goto yyexhaustedlab;
-# else
-      /* Extend the stack our own way.  */
-      if (YYMAXDEPTH <= yystacksize)
-        goto yyexhaustedlab;
-      yystacksize *= 2;
-      if (YYMAXDEPTH < yystacksize)
-        yystacksize = YYMAXDEPTH;
-
-      {
-        yytype_int16 *yyss1 = yyss;
-        union yyalloc *yyptr =
-          (union yyalloc *) YYSTACK_ALLOC (YYSTACK_BYTES (yystacksize));
-        if (! yyptr)
-          goto yyexhaustedlab;
-        YYSTACK_RELOCATE (yyss_alloc, yyss);
-        YYSTACK_RELOCATE (yyvs_alloc, yyvs);
-#  undef YYSTACK_RELOCATE
-        if (yyss1 != yyssa)
-          YYSTACK_FREE (yyss1);
-      }
-# endif
-#endif /* no yyoverflow */
-
-      yyssp = yyss + yysize - 1;
-      yyvsp = yyvs + yysize - 1;
-
-      YYDPRINTF ((stderr, "Stack size increased to %lu\n",
-                  (unsigned long int) yystacksize));
-
-      if (yyss + yystacksize - 1 <= yyssp)
-        YYABORT;
-    }
-
-  YYDPRINTF ((stderr, "Entering state %d\n", yystate));
-
-  if (yystate == YYFINAL)
-    YYACCEPT;
-
-  goto yybackup;
-
-/*-----------.
-| yybackup.  |
-`-----------*/
-yybackup:
-
-  /* Do appropriate processing given the current state.  Read a
-     lookahead token if we need one and don't already have one.  */
-
-  /* First try to decide what to do without reference to lookahead token.  */
-  yyn = yypact[yystate];
-  if (yypact_value_is_default (yyn))
-    goto yydefault;
-
-  /* Not known => get a lookahead token if don't already have one.  */
-
-  /* YYCHAR is either YYEMPTY or YYEOF or a valid lookahead symbol.  */
-  if (yychar == YYEMPTY)
-    {
-      YYDPRINTF ((stderr, "Reading a token: "));
-      yychar = yylex ();
-    }
-
-  if (yychar <= YYEOF)
-    {
-      yychar = yytoken = YYEOF;
-      YYDPRINTF ((stderr, "Now at end of input.\n"));
-    }
-  else
-    {
-      yytoken = YYTRANSLATE (yychar);
-      YY_SYMBOL_PRINT ("Next token is", yytoken, &yylval, &yylloc);
-    }
-
-  /* If the proper action on seeing token YYTOKEN is to reduce or to
-     detect an error, take that action.  */
-  yyn += yytoken;
-  if (yyn < 0 || YYLAST < yyn || yycheck[yyn] != yytoken)
-    goto yydefault;
-  yyn = yytable[yyn];
-  if (yyn <= 0)
-    {
-      if (yytable_value_is_error (yyn))
-        goto yyerrlab;
-      yyn = -yyn;
-      goto yyreduce;
-    }
-
-  /* Count tokens shifted since error; after three, turn off error
-     status.  */
-  if (yyerrstatus)
-    yyerrstatus--;
-
-  /* Shift the lookahead token.  */
-  YY_SYMBOL_PRINT ("Shifting", yytoken, &yylval, &yylloc);
-
-  /* Discard the shifted token.  */
-  yychar = YYEMPTY;
-
-  yystate = yyn;
-  YY_IGNORE_MAYBE_UNINITIALIZED_BEGIN
-  *++yyvsp = yylval;
-  YY_IGNORE_MAYBE_UNINITIALIZED_END
-
-  goto yynewstate;
-
-
-/*-----------------------------------------------------------.
-| yydefault -- do the default action for the current state.  |
-`-----------------------------------------------------------*/
-yydefault:
-  yyn = yydefact[yystate];
-  if (yyn == 0)
-    goto yyerrlab;
-  goto yyreduce;
-
-
-/*-----------------------------.
-| yyreduce -- Do a reduction.  |
-`-----------------------------*/
-yyreduce:
-  /* yyn is the number of a rule to reduce with.  */
-  yylen = yyr2[yyn];
-
-  /* If YYLEN is nonzero, implement the default value of the action:
-     '$$ = $1'.
-
-     Otherwise, the following line sets YYVAL to garbage.
-     This behavior is undocumented and Bison
-     users should not rely upon it.  Assigning to YYVAL
-     unconditionally makes the parser a bit smaller, and it avoids a
-     GCC warning that YYVAL may be used uninitialized.  */
-  yyval = yyvsp[1-yylen];
-
-
-  YY_REDUCE_PRINT (yyn);
-  switch (yyn)
-    {
-        case 2:
-#line 249 "label.y" /* yacc.c:1646  */
-    { parse_result = ((yyvsp[0].expr) ? new analyzed_expr((yyvsp[0].expr)) : 0); }
-#line 1435 "label.cpp" /* yacc.c:1646  */
-    break;
-
-  case 3:
-#line 254 "label.y" /* yacc.c:1646  */
-    { (yyval.expr) = (yyvsp[0].expr); }
-#line 1441 "label.cpp" /* yacc.c:1646  */
-    break;
-
-  case 4:
-#line 256 "label.y" /* yacc.c:1646  */
-    { (yyval.expr) = new conditional_expr((yyvsp[-4].expr), (yyvsp[-2].expr), (yyvsp[0].expr)); }
-#line 1447 "label.cpp" /* yacc.c:1646  */
-    break;
-
-  case 5:
-#line 261 "label.y" /* yacc.c:1646  */
-    { (yyval.expr) = 0; }
-#line 1453 "label.cpp" /* yacc.c:1646  */
-    break;
-
-  case 6:
-#line 263 "label.y" /* yacc.c:1646  */
-    { (yyval.expr) = (yyvsp[0].expr); }
-#line 1459 "label.cpp" /* yacc.c:1646  */
-    break;
-
-  case 7:
-#line 268 "label.y" /* yacc.c:1646  */
-    { (yyval.expr) = (yyvsp[0].expr); }
-#line 1465 "label.cpp" /* yacc.c:1646  */
-    break;
-
-  case 8:
-#line 270 "label.y" /* yacc.c:1646  */
-    { (yyval.expr) = new alternative_expr((yyvsp[-2].expr), (yyvsp[0].expr)); }
-#line 1471 "label.cpp" /* yacc.c:1646  */
-    break;
-
-  case 9:
-#line 272 "label.y" /* yacc.c:1646  */
-    { (yyval.expr) = new conditional_expr((yyvsp[-2].expr), (yyvsp[0].expr), 0); }
-#line 1477 "label.cpp" /* yacc.c:1646  */
-    break;
-
-  case 10:
-#line 277 "label.y" /* yacc.c:1646  */
-    { (yyval.expr) = (yyvsp[0].expr); }
-#line 1483 "label.cpp" /* yacc.c:1646  */
-    break;
-
-  case 11:
-#line 279 "label.y" /* yacc.c:1646  */
-    { (yyval.expr) = new list_expr((yyvsp[-1].expr), (yyvsp[0].expr)); }
-#line 1489 "label.cpp" /* yacc.c:1646  */
-    break;
-
-  case 12:
-#line 284 "label.y" /* yacc.c:1646  */
-    { (yyval.expr) = (yyvsp[0].expr); }
-#line 1495 "label.cpp" /* yacc.c:1646  */
-    break;
-
-  case 13:
-#line 286 "label.y" /* yacc.c:1646  */
-    { (yyval.expr) = new substitute_expr((yyvsp[-2].expr), (yyvsp[0].expr)); }
-#line 1501 "label.cpp" /* yacc.c:1646  */
-    break;
-
-  case 14:
-#line 291 "label.y" /* yacc.c:1646  */
-    { (yyval.expr) = new at_expr; }
-#line 1507 "label.cpp" /* yacc.c:1646  */
-    break;
-
-  case 15:
-#line 293 "label.y" /* yacc.c:1646  */
-    {
-		  (yyval.expr) = new literal_expr(literals.contents() + (yyvsp[0].str).start,
-					(yyvsp[0].str).len);
-		}
-#line 1516 "label.cpp" /* yacc.c:1646  */
-    break;
-
-  case 16:
-#line 298 "label.y" /* yacc.c:1646  */
-    { (yyval.expr) = new field_expr((yyvsp[0].num), 0); }
-#line 1522 "label.cpp" /* yacc.c:1646  */
-    break;
-
-  case 17:
-#line 300 "label.y" /* yacc.c:1646  */
-    { (yyval.expr) = new field_expr((yyvsp[-1].num), (yyvsp[0].num) - 1); }
-#line 1528 "label.cpp" /* yacc.c:1646  */
-    break;
-
-  case 18:
-#line 302 "label.y" /* yacc.c:1646  */
-    {
-		  switch ((yyvsp[0].num)) {
-		  case 'I':
-		  case 'i':
-		  case 'A':
-		  case 'a':
-		    (yyval.expr) = new format_expr((yyvsp[0].num));
-		    break;
-		  default:
-		    command_error("unrecognized format `%1'", char((yyvsp[0].num)));
-		    (yyval.expr) = new format_expr('a');
-		    break;
-		  }
-		}
-#line 1547 "label.cpp" /* yacc.c:1646  */
-    break;
-
-  case 19:
-#line 318 "label.y" /* yacc.c:1646  */
-    {
-		  (yyval.expr) = new format_expr('0', (yyvsp[0].dig).ndigits, (yyvsp[0].dig).val);
-		}
-#line 1555 "label.cpp" /* yacc.c:1646  */
-    break;
-
-  case 20:
-#line 322 "label.y" /* yacc.c:1646  */
-    {
-		  switch ((yyvsp[-1].num)) {
-		  case 'l':
-		    (yyval.expr) = new map_expr((yyvsp[-4].expr), lowercase);
-		    break;
-		  case 'u':
-		    (yyval.expr) = new map_expr((yyvsp[-4].expr), uppercase);
-		    break;
-		  case 'c':
-		    (yyval.expr) = new map_expr((yyvsp[-4].expr), capitalize);
-		    break;
-		  case 'r':
-		    (yyval.expr) = new map_expr((yyvsp[-4].expr), reverse_name);
-		    break;
-		  case 'a':
-		    (yyval.expr) = new map_expr((yyvsp[-4].expr), abbreviate_name);
-		    break;
-		  case 'y':
-		    (yyval.expr) = new extractor_expr((yyvsp[-4].expr), find_year, (yyvsp[-2].num));
-		    break;
-		  case 'n':
-		    (yyval.expr) = new extractor_expr((yyvsp[-4].expr), find_last_name, (yyvsp[-2].num));
-		    break;
-		  default:
-		    (yyval.expr) = (yyvsp[-4].expr);
-		    command_error("unknown function `%1'", char((yyvsp[-1].num)));
-		    break;
-		  }
-		}
-#line 1589 "label.cpp" /* yacc.c:1646  */
-    break;
-
-  case 21:
-#line 353 "label.y" /* yacc.c:1646  */
-    { (yyval.expr) = new truncate_expr((yyvsp[-2].expr), (yyvsp[0].num)); }
-#line 1595 "label.cpp" /* yacc.c:1646  */
-    break;
-
-  case 22:
-#line 355 "label.y" /* yacc.c:1646  */
-    { (yyval.expr) = new truncate_expr((yyvsp[-2].expr), -(yyvsp[0].num)); }
-#line 1601 "label.cpp" /* yacc.c:1646  */
-    break;
-
-  case 23:
-#line 357 "label.y" /* yacc.c:1646  */
-    { (yyval.expr) = new star_expr((yyvsp[-1].expr)); }
-#line 1607 "label.cpp" /* yacc.c:1646  */
-    break;
-
-  case 24:
-#line 359 "label.y" /* yacc.c:1646  */
-    { (yyval.expr) = (yyvsp[-1].expr); }
-#line 1613 "label.cpp" /* yacc.c:1646  */
-    break;
-
-  case 25:
-#line 361 "label.y" /* yacc.c:1646  */
-    { (yyval.expr) = new separator_expr((yyvsp[-1].expr)); }
-#line 1619 "label.cpp" /* yacc.c:1646  */
-    break;
-
-  case 26:
-#line 366 "label.y" /* yacc.c:1646  */
-    { (yyval.num) = -1; }
-#line 1625 "label.cpp" /* yacc.c:1646  */
-    break;
-
-  case 27:
-#line 368 "label.y" /* yacc.c:1646  */
-    { (yyval.num) = (yyvsp[0].num); }
-#line 1631 "label.cpp" /* yacc.c:1646  */
-    break;
-
-  case 28:
-#line 373 "label.y" /* yacc.c:1646  */
-    { (yyval.num) = (yyvsp[0].num); }
-#line 1637 "label.cpp" /* yacc.c:1646  */
-    break;
-
-  case 29:
-#line 375 "label.y" /* yacc.c:1646  */
-    { (yyval.num) = (yyvsp[-1].num)*10 + (yyvsp[0].num); }
-#line 1643 "label.cpp" /* yacc.c:1646  */
-    break;
-
-  case 30:
-#line 380 "label.y" /* yacc.c:1646  */
-    { (yyval.dig).ndigits = 1; (yyval.dig).val = (yyvsp[0].num); }
-#line 1649 "label.cpp" /* yacc.c:1646  */
-    break;
-
-  case 31:
-#line 382 "label.y" /* yacc.c:1646  */
-    { (yyval.dig).ndigits = (yyvsp[-1].dig).ndigits + 1; (yyval.dig).val = (yyvsp[-1].dig).val*10 + (yyvsp[0].num); }
-#line 1655 "label.cpp" /* yacc.c:1646  */
-    break;
-
-  case 32:
-#line 388 "label.y" /* yacc.c:1646  */
-    { (yyval.num) = 0; }
-#line 1661 "label.cpp" /* yacc.c:1646  */
-    break;
-
-  case 33:
-#line 390 "label.y" /* yacc.c:1646  */
-    { (yyval.num) = 1; }
-#line 1667 "label.cpp" /* yacc.c:1646  */
-    break;
-
-  case 34:
-#line 392 "label.y" /* yacc.c:1646  */
-    { (yyval.num) = -1; }
-#line 1673 "label.cpp" /* yacc.c:1646  */
-    break;
-
-
-#line 1677 "label.cpp" /* yacc.c:1646  */
-      default: break;
-    }
-  /* User semantic actions sometimes alter yychar, and that requires
-     that yytoken be updated with the new translation.  We take the
-     approach of translating immediately before every use of yytoken.
-     One alternative is translating here after every semantic action,
-     but that translation would be missed if the semantic action invokes
-     YYABORT, YYACCEPT, or YYERROR immediately after altering yychar or
-     if it invokes YYBACKUP.  In the case of YYABORT or YYACCEPT, an
-     incorrect destructor might then be invoked immediately.  In the
-     case of YYERROR or YYBACKUP, subsequent parser actions might lead
-     to an incorrect destructor call or verbose syntax error message
-     before the lookahead is translated.  */
-  YY_SYMBOL_PRINT ("-> $$ =", yyr1[yyn], &yyval, &yyloc);
-
-  YYPOPSTACK (yylen);
-  yylen = 0;
-  YY_STACK_PRINT (yyss, yyssp);
-
-  *++yyvsp = yyval;
-
-  /* Now 'shift' the result of the reduction.  Determine what state
-     that goes to, based on the state we popped back to and the rule
-     number reduced by.  */
-
-  yyn = yyr1[yyn];
-
-  yystate = yypgoto[yyn - YYNTOKENS] + *yyssp;
-  if (0 <= yystate && yystate <= YYLAST && yycheck[yystate] == *yyssp)
-    yystate = yytable[yystate];
-  else
-    yystate = yydefgoto[yyn - YYNTOKENS];
-
-  goto yynewstate;
-
-
-/*--------------------------------------.
-| yyerrlab -- here on detecting error.  |
-`--------------------------------------*/
-yyerrlab:
-  /* Make sure we have latest lookahead translation.  See comments at
-     user semantic actions for why this is necessary.  */
-  yytoken = yychar == YYEMPTY ? YYEMPTY : YYTRANSLATE (yychar);
-
-  /* If not already recovering from an error, report this error.  */
-  if (!yyerrstatus)
-    {
-      ++yynerrs;
-#if ! YYERROR_VERBOSE
-      yyerror (YY_("syntax error"));
-#else
-# define YYSYNTAX_ERROR yysyntax_error (&yymsg_alloc, &yymsg, \
-                                        yyssp, yytoken)
-      {
-        char const *yymsgp = YY_("syntax error");
-        int yysyntax_error_status;
-        yysyntax_error_status = YYSYNTAX_ERROR;
-        if (yysyntax_error_status == 0)
-          yymsgp = yymsg;
-        else if (yysyntax_error_status == 1)
-          {
-            if (yymsg != yymsgbuf)
-              YYSTACK_FREE (yymsg);
-            yymsg = (char *) YYSTACK_ALLOC (yymsg_alloc);
-            if (!yymsg)
-              {
-                yymsg = yymsgbuf;
-                yymsg_alloc = sizeof yymsgbuf;
-                yysyntax_error_status = 2;
-              }
-            else
-              {
-                yysyntax_error_status = YYSYNTAX_ERROR;
-                yymsgp = yymsg;
-              }
-          }
-        yyerror (yymsgp);
-        if (yysyntax_error_status == 2)
-          goto yyexhaustedlab;
-      }
-# undef YYSYNTAX_ERROR
-#endif
-    }
-
-
-
-  if (yyerrstatus == 3)
-    {
-      /* If just tried and failed to reuse lookahead token after an
-         error, discard it.  */
-
-      if (yychar <= YYEOF)
-        {
-          /* Return failure if at end of input.  */
-          if (yychar == YYEOF)
-            YYABORT;
-        }
-      else
-        {
-          yydestruct ("Error: discarding",
-                      yytoken, &yylval);
-          yychar = YYEMPTY;
-        }
-    }
-
-  /* Else will try to reuse lookahead token after shifting the error
-     token.  */
-  goto yyerrlab1;
-
-
-/*---------------------------------------------------.
-| yyerrorlab -- error raised explicitly by YYERROR.  |
-`---------------------------------------------------*/
-yyerrorlab:
-
-  /* Pacify compilers like GCC when the user code never invokes
-     YYERROR and the label yyerrorlab therefore never appears in user
-     code.  */
-  if (/*CONSTCOND*/ 0)
-     goto yyerrorlab;
-
-  /* Do not reclaim the symbols of the rule whose action triggered
-     this YYERROR.  */
-  YYPOPSTACK (yylen);
-  yylen = 0;
-  YY_STACK_PRINT (yyss, yyssp);
-  yystate = *yyssp;
-  goto yyerrlab1;
-
-
-/*-------------------------------------------------------------.
-| yyerrlab1 -- common code for both syntax error and YYERROR.  |
-`-------------------------------------------------------------*/
-yyerrlab1:
-  yyerrstatus = 3;      /* Each real token shifted decrements this.  */
-
-  for (;;)
-    {
-      yyn = yypact[yystate];
-      if (!yypact_value_is_default (yyn))
-        {
-          yyn += YYTERROR;
-          if (0 <= yyn && yyn <= YYLAST && yycheck[yyn] == YYTERROR)
-            {
-              yyn = yytable[yyn];
-              if (0 < yyn)
-                break;
-            }
-        }
-
-      /* Pop the current state because it cannot handle the error token.  */
-      if (yyssp == yyss)
-        YYABORT;
-
-
-      yydestruct ("Error: popping",
-                  yystos[yystate], yyvsp);
-      YYPOPSTACK (1);
-      yystate = *yyssp;
-      YY_STACK_PRINT (yyss, yyssp);
-    }
-
-  YY_IGNORE_MAYBE_UNINITIALIZED_BEGIN
-  *++yyvsp = yylval;
-  YY_IGNORE_MAYBE_UNINITIALIZED_END
-
-
-  /* Shift the error token.  */
-  YY_SYMBOL_PRINT ("Shifting", yystos[yyn], yyvsp, yylsp);
-
-  yystate = yyn;
-  goto yynewstate;
-
-
-/*-------------------------------------.
-| yyacceptlab -- YYACCEPT comes here.  |
-`-------------------------------------*/
-yyacceptlab:
-  yyresult = 0;
-  goto yyreturn;
-
-/*-----------------------------------.
-| yyabortlab -- YYABORT comes here.  |
-`-----------------------------------*/
-yyabortlab:
-  yyresult = 1;
-  goto yyreturn;
-
-#if !defined yyoverflow || YYERROR_VERBOSE
-/*-------------------------------------------------.
-| yyexhaustedlab -- memory exhaustion comes here.  |
-`-------------------------------------------------*/
-yyexhaustedlab:
-  yyerror (YY_("memory exhausted"));
-  yyresult = 2;
-  /* Fall through.  */
-#endif
-
-yyreturn:
-  if (yychar != YYEMPTY)
-    {
-      /* Make sure we have latest lookahead translation.  See comments at
-         user semantic actions for why this is necessary.  */
-      yytoken = YYTRANSLATE (yychar);
-      yydestruct ("Cleanup: discarding lookahead",
-                  yytoken, &yylval);
-    }
-  /* Do not reclaim the symbols of the rule whose action triggered
-     this YYABORT or YYACCEPT.  */
-  YYPOPSTACK (yylen);
-  YY_STACK_PRINT (yyss, yyssp);
-  while (yyssp != yyss)
-    {
-      yydestruct ("Cleanup: popping",
-                  yystos[*yyssp], yyvsp);
-      YYPOPSTACK (1);
-    }
-#ifndef yyoverflow
-  if (yyss != yyssa)
-    YYSTACK_FREE (yyss);
-#endif
-#if YYERROR_VERBOSE
-  if (yymsg != yymsgbuf)
-    YYSTACK_FREE (yymsg);
-#endif
-  return yyresult;
-}
-#line 395 "label.y" /* yacc.c:1906  */
-
-
-/* bison defines const to be empty unless __STDC__ is defined, which it
-isn't under cfront */
-
-#ifdef const
-#undef const
-#endif
-
-const char *spec_ptr;
-const char *spec_end;
-const char *spec_cur;
-
-static char uppercase_array[] = {
-  'A', 'B', 'C', 'D', 'E', 'F', 'G', 'H',
-  'I', 'J', 'K', 'L', 'M', 'N', 'O', 'P',
-  'Q', 'R', 'S', 'T', 'U', 'V', 'W', 'X',
-  'Y', 'Z',
-};
-  
-static char lowercase_array[] = {
-  'a', 'b', 'c', 'd', 'e', 'f', 'g', 'h',
-  'i', 'j', 'k', 'l', 'm', 'n', 'o', 'p',
-  'q', 'r', 's', 't', 'u', 'v', 'w', 'x',
-  'y', 'z',
-};
-
-int yylex()
-{
-  while (spec_ptr < spec_end && csspace(*spec_ptr))
-    spec_ptr++;
-  spec_cur = spec_ptr;
-  if (spec_ptr >= spec_end)
-    return 0;
-  unsigned char c = *spec_ptr++;
-  if (csalpha(c)) {
-    yylval.num = c;
-    return TOKEN_LETTER;
-  }
-  if (csdigit(c)) {
-    yylval.num = c - '0';
-    return TOKEN_DIGIT;
-  }
-  if (c == '\'') {
-    yylval.str.start = literals.length();
-    for (; spec_ptr < spec_end; spec_ptr++) {
-      if (*spec_ptr == '\'') {
-	if (++spec_ptr < spec_end && *spec_ptr == '\'')
-	  literals += '\'';
-	else {
-	  yylval.str.len = literals.length() - yylval.str.start;
-	  return TOKEN_LITERAL;
-	}
-      }
-      else
-	literals += *spec_ptr;
-    }
-    yylval.str.len = literals.length() - yylval.str.start;
-    return TOKEN_LITERAL;
-  }
-  return c;
-}
-
-int set_label_spec(const char *label_spec)
-{
-  spec_cur = spec_ptr = label_spec;
-  spec_end = strchr(label_spec, '\0');
-  literals.clear();
-  if (yyparse())
-    return 0;
-  delete parsed_label;
-  parsed_label = parse_result;
-  return 1;
-}
-
-int set_date_label_spec(const char *label_spec)
-{
-  spec_cur = spec_ptr = label_spec;
-  spec_end = strchr(label_spec, '\0');
-  literals.clear();
-  if (yyparse())
-    return 0;
-  delete parsed_date_label;
-  parsed_date_label = parse_result;
-  return 1;
-}
-
-int set_short_label_spec(const char *label_spec)
-{
-  spec_cur = spec_ptr = label_spec;
-  spec_end = strchr(label_spec, '\0');
-  literals.clear();
-  if (yyparse())
-    return 0;
-  delete parsed_short_label;
-  parsed_short_label = parse_result;
-  return 1;
-}
-
-void yyerror(const char *message)
-{
-  if (spec_cur < spec_end)
-    command_error("label specification %1 before `%2'", message, spec_cur);
-  else
-    command_error("label specification %1 at end of string",
-		  message, spec_cur);
-}
-
-void at_expr::evaluate(int tentative, const reference &ref,
-		       string &result, substring_position &)
-{
-  if (tentative)
-    ref.canonicalize_authors(result);
-  else {
-    const char *end, *start = ref.get_authors(&end);
-    if (start)
-      result.append(start, end - start);
-  }
-}
-
-void format_expr::evaluate(int tentative, const reference &ref,
-			   string &result, substring_position &)
-{
-  if (tentative)
-    return;
-  const label_info *lp = ref.get_label_ptr();
-  int num = lp == 0 ? ref.get_number() : lp->count;
-  if (type != '0')
-    result += format_serial(type, num + 1);
-  else {
-    const char *ptr = i_to_a(num + first_number);
-    int pad = width - strlen(ptr);
-    while (--pad >= 0)
-      result += '0';
-    result += ptr;
-  }
-}
-
-static const char *format_serial(char c, int n)
-{
-  assert(n > 0);
-  static char buf[128]; // more than enough.
-  switch (c) {
-  case 'i':
-  case 'I':
-    {
-      char *p = buf;
-      // troff uses z and w to represent 10000 and 5000 in Roman
-      // numerals; I can find no historical basis for this usage
-      const char *s = c == 'i' ? "zwmdclxvi" : "ZWMDCLXVI";
-      if (n >= 40000)
-	return i_to_a(n);
-      while (n >= 10000) {
-	*p++ = s[0];
-	n -= 10000;
-      }
-      for (int i = 1000; i > 0; i /= 10, s += 2) {
-	int m = n/i;
-	n -= m*i;
-	switch (m) {
-	case 3:
-	  *p++ = s[2];
-	  /* falls through */
-	case 2:
-	  *p++ = s[2];
-	  /* falls through */
-	case 1:
-	  *p++ = s[2];
-	  break;
-	case 4:
-	  *p++ = s[2];
-	  *p++ = s[1];
-	  break;
-	case 8:
-	  *p++ = s[1];
-	  *p++ = s[2];
-	  *p++ = s[2];
-	  *p++ = s[2];
-	  break;
-	case 7:
-	  *p++ = s[1];
-	  *p++ = s[2];
-	  *p++ = s[2];
-	  break;
-	case 6:
-	  *p++ = s[1];
-	  *p++ = s[2];
-	  break;
-	case 5:
-	  *p++ = s[1];
-	  break;
-	case 9:
-	  *p++ = s[2];
-	  *p++ = s[0];
-	}
-      }
-      *p = 0;
-      break;
-    }
-  case 'a':
-  case 'A':
-    {
-      char *p = buf;
-      // this is derived from troff/reg.c
-      while (n > 0) {
-	int d = n % 26;
-	if (d == 0)
-	  d = 26;
-	n -= d;
-	n /= 26;
-	*p++ = c == 'a' ? lowercase_array[d - 1] :
-			       uppercase_array[d - 1];
-      }
-      *p-- = 0;
-      // Reverse it.
-      char *q = buf;
-      while (q < p) {
-	char temp = *q;
-	*q = *p;
-	*p = temp;
-	--p;
-	++q;
-      }
-      break;
-    }
-  default:
-    assert(0);
-  }
-  return buf;
-}
-
-void field_expr::evaluate(int, const reference &ref,
-			  string &result, substring_position &)
-{
-  const char *end;
-  const char *start = ref.get_field(name, &end);
-  if (start) {
-    start = nth_field(number, start, &end);
-    if (start)
-      result.append(start, end - start);
-  }
-}
-
-void literal_expr::evaluate(int, const reference &,
-			    string &result, substring_position &)
-{
-  result += s;
-}
-
-analyzed_expr::analyzed_expr(expression *e)
-: unary_expr(e), flags(e ? e->analyze() : 0)
-{
-}
-
-void analyzed_expr::evaluate(int tentative, const reference &ref,
-			     string &result, substring_position &pos)
-{
-  if (expr)
-    expr->evaluate(tentative, ref, result, pos);
-}
-
-void star_expr::evaluate(int tentative, const reference &ref,
-			 string &result, substring_position &pos)
-{
-  const label_info *lp = ref.get_label_ptr();
-  if (!tentative
-      && (lp == 0 || lp->total > 1)
-      && expr)
-    expr->evaluate(tentative, ref, result, pos);
-}
-
-void separator_expr::evaluate(int tentative, const reference &ref,
-			      string &result, substring_position &pos)
-{
-  int start_length = result.length();
-  int is_first = pos.start < 0;
-  if (expr)
-    expr->evaluate(tentative, ref, result, pos);
-  if (is_first) {
-    pos.start = start_length;
-    pos.length = result.length() - start_length;
-  }
-}
-
-void map_expr::evaluate(int tentative, const reference &ref,
-			string &result, substring_position &)
-{
-  if (expr) {
-    string temp;
-    substring_position temp_pos;
-    expr->evaluate(tentative, ref, temp, temp_pos);
-    (*func)(temp.contents(), temp.contents() + temp.length(), result);
-  }
-}
-
-void extractor_expr::evaluate(int tentative, const reference &ref,
-			      string &result, substring_position &)
-{
-  if (expr) {
-    string temp;
-    substring_position temp_pos;
-    expr->evaluate(tentative, ref, temp, temp_pos);
-    const char *end, *start = (*func)(temp.contents(),
-				      temp.contents() + temp.length(),
-				      &end);
-    switch (part) {
-    case BEFORE:
-      if (start)
-	result.append(temp.contents(), start - temp.contents());
-      else
-	result += temp;
-      break;
-    case MATCH:
-      if (start)
-	result.append(start, end - start);
-      break;
-    case AFTER:
-      if (start)
-	result.append(end, temp.contents() + temp.length() - end);
-      break;
-    default:
-      assert(0);
-    }
-  }
-}
-
-static void first_part(int len, const char *ptr, const char *end,
-			  string &result)
-{
-  for (;;) {
-    const char *token_start = ptr;
-    if (!get_token(&ptr, end))
-      break;
-    const token_info *ti = lookup_token(token_start, ptr);
-    int counts = ti->sortify_non_empty(token_start, ptr);
-    if (counts && --len < 0)
-      break;
-    if (counts || ti->is_accent())
-      result.append(token_start, ptr - token_start);
-  }
-}
-
-static void last_part(int len, const char *ptr, const char *end,
-		      string &result)
-{
-  const char *start = ptr;
-  int count = 0;
-  for (;;) {
-    const char *token_start = ptr;
-    if (!get_token(&ptr, end))
-      break;
-    const token_info *ti = lookup_token(token_start, ptr);
-    if (ti->sortify_non_empty(token_start, ptr))
-      count++;
-  }
-  ptr = start;
-  int skip = count - len;
-  if (skip > 0) {
-    for (;;) {
-      const char *token_start = ptr;
-      if (!get_token(&ptr, end))
-	assert(0);
-      const token_info *ti = lookup_token(token_start, ptr);
-      if (ti->sortify_non_empty(token_start, ptr) && --skip < 0) {
-	ptr = token_start;
-	break;
-      }
-    }
-  }
-  first_part(len, ptr, end, result);
-}
-
-void truncate_expr::evaluate(int tentative, const reference &ref,
-			     string &result, substring_position &)
-{
-  if (expr) {
-    string temp;
-    substring_position temp_pos;
-    expr->evaluate(tentative, ref, temp, temp_pos);
-    const char *start = temp.contents();
-    const char *end = start + temp.length();
-    if (n > 0)
-      first_part(n, start, end, result);
-    else if (n < 0)
-      last_part(-n, start, end, result);
-  }
-}
-
-void alternative_expr::evaluate(int tentative, const reference &ref,
-				string &result, substring_position &pos)
-{
-  int start_length = result.length();
-  if (expr1)
-    expr1->evaluate(tentative, ref, result, pos);
-  if (result.length() == start_length && expr2)
-    expr2->evaluate(tentative, ref, result, pos);
-}
-
-void list_expr::evaluate(int tentative, const reference &ref,
-			 string &result, substring_position &pos)
-{
-  if (expr1)
-    expr1->evaluate(tentative, ref, result, pos);
-  if (expr2)
-    expr2->evaluate(tentative, ref, result, pos);
-}
-
-void substitute_expr::evaluate(int tentative, const reference &ref,
-			       string &result, substring_position &pos)
-{
-  int start_length = result.length();
-  if (expr1)
-    expr1->evaluate(tentative, ref, result, pos);
-  if (result.length() > start_length && result[result.length() - 1] == '-') {
-    // ought to see if pos covers the -
-    result.set_length(result.length() - 1);
-    if (expr2)
-      expr2->evaluate(tentative, ref, result, pos);
-  }
-}
-
-void conditional_expr::evaluate(int tentative, const reference &ref,
-				string &result, substring_position &pos)
-{
-  string temp;
-  substring_position temp_pos;
-  if (expr1)
-    expr1->evaluate(tentative, ref, temp, temp_pos);
-  if (temp.length() > 0) {
-    if (expr2)
-      expr2->evaluate(tentative, ref, result, pos);
-  }
-  else {
-    if (expr3)
-      expr3->evaluate(tentative, ref, result, pos);
-  }
-}
-
-void reference::pre_compute_label()
-{
-  if (parsed_label != 0
-      && (parsed_label->analyze() & expression::CONTAINS_VARIABLE)) {
-    label.clear();
-    substring_position temp_pos;
-    parsed_label->evaluate(1, *this, label, temp_pos);
-    label_ptr = lookup_label(label);
-  }
-}
-
-void reference::compute_label()
-{
-  label.clear();
-  if (parsed_label)
-    parsed_label->evaluate(0, *this, label, separator_pos);
-  if (short_label_flag && parsed_short_label)
-    parsed_short_label->evaluate(0, *this, short_label, short_separator_pos);
-  if (date_as_label) {
-    string new_date;
-    if (parsed_date_label) {
-      substring_position temp_pos;
-      parsed_date_label->evaluate(0, *this, new_date, temp_pos);
-    }
-    set_date(new_date);
-  }
-  if (label_ptr)
-    label_ptr->count += 1;
-}
-
-void reference::immediate_compute_label()
-{
-  if (label_ptr)
-    label_ptr->total = 2;	// force use of disambiguator
-  compute_label();
-}
-
-int reference::merge_labels(reference **v, int n, label_type type,
-			    string &result)
-{
-  if (abbreviate_label_ranges)
-    return merge_labels_by_number(v, n, type, result);
-  else
-    return merge_labels_by_parts(v, n, type, result);
-}
-
-int reference::merge_labels_by_number(reference **v, int n, label_type type,
-				      string &result)
-{
-  if (n <= 1)
-    return 0;
-  int num = get_number();
-  // Only merge three or more labels.
-  if (v[0]->get_number() != num + 1
-      || v[1]->get_number() != num + 2)
-    return 0;
-  int i;
-  for (i = 2; i < n; i++)
-    if (v[i]->get_number() != num + i + 1)
-      break;
-  result = get_label(type);
-  result += label_range_indicator;
-  result += v[i - 1]->get_label(type);
-  return i;
-}
-
-const substring_position &reference::get_separator_pos(label_type type) const
-{
-  if (type == SHORT_LABEL && short_label_flag)
-    return short_separator_pos;
-  else
-    return separator_pos;
-}
-
-const string &reference::get_label(label_type type) const
-{
-  if (type == SHORT_LABEL && short_label_flag)
-    return short_label; 
-  else
-    return label;
-}
-
-int reference::merge_labels_by_parts(reference **v, int n, label_type type,
-				     string &result)
-{
-  if (n <= 0)
-    return 0;
-  const string &lb = get_label(type);
-  const substring_position &sp = get_separator_pos(type);
-  if (sp.start < 0
-      || sp.start != v[0]->get_separator_pos(type).start 
-      || memcmp(lb.contents(), v[0]->get_label(type).contents(),
-		sp.start) != 0)
-    return 0;
-  result = lb;
-  int i = 0;
-  do {
-    result += separate_label_second_parts;
-    const substring_position &s = v[i]->get_separator_pos(type);
-    int sep_end_pos = s.start + s.length;
-    result.append(v[i]->get_label(type).contents() + sep_end_pos,
-		  v[i]->get_label(type).length() - sep_end_pos);
-  } while (++i < n
-	   && sp.start == v[i]->get_separator_pos(type).start
-	   && memcmp(lb.contents(), v[i]->get_label(type).contents(),
-		     sp.start) == 0);
-  return i;
-}
-
-string label_pool;
-
-label_info::label_info(const string &s)
-: start(label_pool.length()), length(s.length()), count(0), total(1)
-{
-  label_pool += s;
-}
-
-static label_info **label_table = 0;
-static int label_table_size = 0;
-static int label_table_used = 0;
-
-label_info *lookup_label(const string &label)
-{
-  if (label_table == 0) {
-    label_table = new label_info *[17];
-    label_table_size = 17;
-    for (int i = 0; i < 17; i++)
-      label_table[i] = 0;
-  }
-  unsigned h = hash_string(label.contents(), label.length()) % label_table_size;
-  label_info **ptr;
-  for (ptr = label_table + h;
-       *ptr != 0;
-       (ptr == label_table)
-       ? (ptr = label_table + label_table_size - 1)
-       : ptr--)
-    if ((*ptr)->length == label.length()
-	&& memcmp(label_pool.contents() + (*ptr)->start, label.contents(),
-		  label.length()) == 0) {
-      (*ptr)->total += 1;
-      return *ptr;
-    }
-  label_info *result = *ptr = new label_info(label);
-  if (++label_table_used * 2 > label_table_size) {
-    // Rehash the table.
-    label_info **old_table = label_table;
-    int old_size = label_table_size;
-    label_table_size = next_size(label_table_size);
-    label_table = new label_info *[label_table_size];
-    int i;
-    for (i = 0; i < label_table_size; i++)
-      label_table[i] = 0;
-    for (i = 0; i < old_size; i++)
-      if (old_table[i]) {
-	h = hash_string(label_pool.contents() + old_table[i]->start,
-			old_table[i]->length);
-	label_info **p;
-	for (p = label_table + (h % label_table_size);
-	     *p != 0;
-	     (p == label_table)
-	     ? (p = label_table + label_table_size - 1)
-	     : --p)
-	    ;
-	*p = old_table[i];
-	}
-    a_delete old_table;
-  }
-  return result;
-}
-
-void clear_labels()
-{
-  for (int i = 0; i < label_table_size; i++) {
-    delete label_table[i];
-    label_table[i] = 0;
-  }
-  label_table_used = 0;
-  label_pool.clear();
-}
-
-static void consider_authors(reference **start, reference **end, int i);
-
-void compute_labels(reference **v, int n)
-{
-  if (parsed_label
-      && (parsed_label->analyze() & expression::CONTAINS_AT)
-      && sort_fields.length() >= 2
-      && sort_fields[0] == 'A'
-      && sort_fields[1] == '+')
-    consider_authors(v, v + n, 0);
-  for (int i = 0; i < n; i++)
-    v[i]->compute_label();
-}
-
-
-/* A reference with a list of authors <A0,A1,...,AN> _needs_ author i
-where 0 <= i <= N if there exists a reference with a list of authors
-<B0,B1,...,BM> such that <A0,A1,...,AN> != <B0,B1,...,BM> and M >= i
-and Aj = Bj for 0 <= j < i. In this case if we can't say ``A0,
-A1,...,A(i-1) et al'' because this would match both <A0,A1,...,AN> and
-<B0,B1,...,BM>.  If a reference needs author i we only have to call
-need_author(j) for some j >= i such that the reference also needs
-author j. */
-
-/* This function handles 2 tasks:
-determine which authors are needed (cannot be elided with et al.);
-determine which authors can have only last names in the labels.
-
-References >= start and < end have the same first i author names.
-Also they're sorted by A+. */
-
-static void consider_authors(reference **start, reference **end, int i)
-{
-  if (start >= end)
-    return;
-  reference **p = start;
-  if (i >= (*p)->get_nauthors()) {
-    for (++p; p < end && i >= (*p)->get_nauthors(); p++)
-      ;
-    if (p < end && i > 0) {
-      // If we have an author list <A B C> and an author list <A B C D>,
-      // then both lists need C.
-      for (reference **q = start; q < end; q++)
-	(*q)->need_author(i - 1);
-    }
-    start = p;
-  }
-  while (p < end) {
-    reference **last_name_start = p;
-    reference **name_start = p;
-    for (++p;
-	 p < end && i < (*p)->get_nauthors()
-	 && same_author_last_name(**last_name_start, **p, i);
-	 p++) {
-      if (!same_author_name(**name_start, **p, i)) {
-	consider_authors(name_start, p, i + 1);
-	name_start = p;
-      }
-    }
-    consider_authors(name_start, p, i + 1);
-    if (last_name_start == name_start) {
-      for (reference **q = last_name_start; q < p; q++)
-	(*q)->set_last_name_unambiguous(i);
-    }
-    // If we have an author list <A B C D> and <A B C E>, then the lists
-    // need author D and E respectively.
-    if (name_start > start || p < end) {
-      for (reference **q = last_name_start; q < p; q++)
-	(*q)->need_author(i);
-    }
-  }
-}
-
-int same_author_last_name(const reference &r1, const reference &r2, int n)
-{
-  const char *ae1;
-  const char *as1 = r1.get_sort_field(0, n, 0, &ae1);
-  const char *ae2;
-  const char *as2 = r2.get_sort_field(0, n, 0, &ae2);
-  if (!as1 && !as2) return 1;	// they are the same
-  if (!as1 || !as2) return 0;
-  return ae1 - as1 == ae2 - as2 && memcmp(as1, as2, ae1 - as1) == 0;
-}
-
-int same_author_name(const reference &r1, const reference &r2, int n)
-{
-  const char *ae1;
-  const char *as1 = r1.get_sort_field(0, n, -1, &ae1);
-  const char *ae2;
-  const char *as2 = r2.get_sort_field(0, n, -1, &ae2);
-  if (!as1 && !as2) return 1;	// they are the same
-  if (!as1 || !as2) return 0;
-  return ae1 - as1 == ae2 - as2 && memcmp(as1, as2, ae1 - as1) == 0;
-}
-
-
-void int_set::set(int i)
-{
-  assert(i >= 0);
-  int bytei = i >> 3;
-  if (bytei >= v.length()) {
-    int old_length = v.length();
-    v.set_length(bytei + 1);
-    for (int j = old_length; j <= bytei; j++)
-      v[j] = 0;
-  }
-  v[bytei] |= 1 << (i & 7);
-}
-
-int int_set::get(int i) const
-{
-  assert(i >= 0);
-  int bytei = i >> 3;
-  return bytei >= v.length() ? 0 : (v[bytei] & (1 << (i & 7))) != 0;
-}
-
-void reference::set_last_name_unambiguous(int i)
-{
-  last_name_unambiguous.set(i);
-}
-
-void reference::need_author(int n)
-{
-  if (n > last_needed_author)
-    last_needed_author = n;
-}
-
-const char *reference::get_authors(const char **end) const
-{
-  if (!computed_authors) {
-    ((reference *)this)->computed_authors = 1;
-    string &result = ((reference *)this)->authors;
-    int na = get_nauthors();
-    result.clear();
-    for (int i = 0; i < na; i++) {
-      if (last_name_unambiguous.get(i)) {
-	const char *e, *start = get_author_last_name(i, &e);
-	assert(start != 0);
-	result.append(start, e - start);
-      }
-      else {
-	const char *e, *start = get_author(i, &e);
-	assert(start != 0);
-	result.append(start, e - start);
-      }
-      if (i == last_needed_author
-	  && et_al.length() > 0
-	  && et_al_min_elide > 0
-	  && last_needed_author + et_al_min_elide < na
-	  && na >= et_al_min_total) {
-	result += et_al;
-	break;
-      }
-      if (i < na - 1) {
-	if (na == 2)
-	  result += join_authors_exactly_two;
-	else if (i < na - 2)
-	  result += join_authors_default;
-	else
-	  result += join_authors_last_two;
-      }
-    }
-  }
-  const char *start = authors.contents();
-  *end = start + authors.length();
-  return start;
-}
-
-int reference::get_nauthors() const
-{
-  if (nauthors < 0) {
-    const char *dummy;
-    int na;
-    for (na = 0; get_author(na, &dummy) != 0; na++)
-      ;
-    ((reference *)this)->nauthors = na;
-  }
-  return nauthors;
-}
diff -Nuar groff-1.22.3.old/src/preproc/refer/label.y groff-1.22.3/src/preproc/refer/label.y
--- groff-1.22.3.old/src/preproc/refer/label.y	2014-11-04 10:38:35.244523759 +0200
+++ groff-1.22.3/src/preproc/refer/label.y	1970-01-01 02:00:00.000000000 +0200
@@ -1,1191 +0,0 @@
-/* -*- C++ -*-
-   Copyright (C) 1989-2014  Free Software Foundation, Inc.
-     Written by James Clark (jjc@jclark.com)
-
-This file is part of groff.
-
-groff is free software; you can redistribute it and/or modify it under
-the terms of the GNU General Public License as published by the Free
-Software Foundation, either version 3 of the License, or
-(at your option) any later version.
-
-groff is distributed in the hope that it will be useful, but WITHOUT ANY
-WARRANTY; without even the implied warranty of MERCHANTABILITY or
-FITNESS FOR A PARTICULAR PURPOSE.  See the GNU General Public License
-for more details.
-
-You should have received a copy of the GNU General Public License
-along with this program. If not, see <http://www.gnu.org/licenses/>. */
-
-%{
-
-#include "refer.h"
-#include "refid.h"
-#include "ref.h"
-#include "token.h"
-
-int yylex();
-void yyerror(const char *);
-int yyparse();
-
-static const char *format_serial(char c, int n);
-
-struct label_info {
-  int start;
-  int length;
-  int count;
-  int total;
-  label_info(const string &);
-};
-
-label_info *lookup_label(const string &label);
-
-struct expression {
-  enum {
-    // Does the tentative label depend on the reference?
-    CONTAINS_VARIABLE = 01, 
-    CONTAINS_STAR = 02,
-    CONTAINS_FORMAT = 04,
-    CONTAINS_AT = 010
-  };
-  virtual ~expression() { }
-  virtual void evaluate(int, const reference &, string &,
-			substring_position &) = 0;
-  virtual unsigned analyze() { return 0; }
-};
-
-class at_expr : public expression {
-public:
-  at_expr() { }
-  void evaluate(int, const reference &, string &, substring_position &);
-  unsigned analyze() { return CONTAINS_VARIABLE|CONTAINS_AT; }
-};
-
-class format_expr : public expression {
-  char type;
-  int width;
-  int first_number;
-public:
-  format_expr(char c, int w = 0, int f = 1)
-    : type(c), width(w), first_number(f) { }
-  void evaluate(int, const reference &, string &, substring_position &);
-  unsigned analyze() { return CONTAINS_FORMAT; }
-};
-
-class field_expr : public expression {
-  int number;
-  char name;
-public:
-  field_expr(char nm, int num) : number(num), name(nm) { }
-  void evaluate(int, const reference &, string &, substring_position &);
-  unsigned analyze() { return CONTAINS_VARIABLE; }
-};
-
-class literal_expr : public expression {
-  string s;
-public:
-  literal_expr(const char *ptr, int len) : s(ptr, len) { }
-  void evaluate(int, const reference &, string &, substring_position &);
-};
-
-class unary_expr : public expression {
-protected:
-  expression *expr;
-public:
-  unary_expr(expression *e) : expr(e) { }
-  ~unary_expr() { delete expr; }
-  void evaluate(int, const reference &, string &, substring_position &) = 0;
-  unsigned analyze() { return expr ? expr->analyze() : 0; }
-};
-
-// This caches the analysis of an expression.
-
-class analyzed_expr : public unary_expr {
-  unsigned flags;
-public:
-  analyzed_expr(expression *);
-  void evaluate(int, const reference &, string &, substring_position &);
-  unsigned analyze() { return flags; }
-};
-
-class star_expr : public unary_expr {
-public:
-  star_expr(expression *e) : unary_expr(e) { }
-  void evaluate(int, const reference &, string &, substring_position &);
-  unsigned analyze() {
-    return ((expr ? (expr->analyze() & ~CONTAINS_VARIABLE) : 0)
-	    | CONTAINS_STAR);
-  }
-};
-
-typedef void map_func(const char *, const char *, string &);
-
-class map_expr : public unary_expr {
-  map_func *func;
-public:
-  map_expr(expression *e, map_func *f) : unary_expr(e), func(f) { }
-  void evaluate(int, const reference &, string &, substring_position &);
-};
-  
-typedef const char *extractor_func(const char *, const char *, const char **);
-
-class extractor_expr : public unary_expr {
-  int part;
-  extractor_func *func;
-public:
-  enum { BEFORE = +1, MATCH = 0, AFTER = -1 };
-  extractor_expr(expression *e, extractor_func *f, int pt)
-    : unary_expr(e), part(pt), func(f) { }
-  void evaluate(int, const reference &, string &, substring_position &);
-};
-
-class truncate_expr : public unary_expr {
-  int n;
-public:
-  truncate_expr(expression *e, int i) : unary_expr(e), n(i) { } 
-  void evaluate(int, const reference &, string &, substring_position &);
-};
-
-class separator_expr : public unary_expr {
-public:
-  separator_expr(expression *e) : unary_expr(e) { }
-  void evaluate(int, const reference &, string &, substring_position &);
-};
-
-class binary_expr : public expression {
-protected:
-  expression *expr1;
-  expression *expr2;
-public:
-  binary_expr(expression *e1, expression *e2) : expr1(e1), expr2(e2) { }
-  ~binary_expr() { delete expr1; delete expr2; }
-  void evaluate(int, const reference &, string &, substring_position &) = 0;
-  unsigned analyze() {
-    return (expr1 ? expr1->analyze() : 0) | (expr2 ? expr2->analyze() : 0);
-  }
-};
-
-class alternative_expr : public binary_expr {
-public:
-  alternative_expr(expression *e1, expression *e2) : binary_expr(e1, e2) { }
-  void evaluate(int, const reference &, string &, substring_position &);
-};
-
-class list_expr : public binary_expr {
-public:
-  list_expr(expression *e1, expression *e2) : binary_expr(e1, e2) { }
-  void evaluate(int, const reference &, string &, substring_position &);
-};
-
-class substitute_expr : public binary_expr {
-public:
-  substitute_expr(expression *e1, expression *e2) : binary_expr(e1, e2) { }
-  void evaluate(int, const reference &, string &, substring_position &);
-};
-
-class ternary_expr : public expression {
-protected:
-  expression *expr1;
-  expression *expr2;
-  expression *expr3;
-public:
-  ternary_expr(expression *e1, expression *e2, expression *e3)
-    : expr1(e1), expr2(e2), expr3(e3) { }
-  ~ternary_expr() { delete expr1; delete expr2; delete expr3; }
-  void evaluate(int, const reference &, string &, substring_position &) = 0;
-  unsigned analyze() {
-    return ((expr1 ? expr1->analyze() : 0)
-	    | (expr2 ? expr2->analyze() : 0)
-	    | (expr3 ? expr3->analyze() : 0));
-  }
-};
-
-class conditional_expr : public ternary_expr {
-public:
-  conditional_expr(expression *e1, expression *e2, expression *e3)
-    : ternary_expr(e1, e2, e3) { }
-  void evaluate(int, const reference &, string &, substring_position &);
-};
-
-static expression *parsed_label = 0;
-static expression *parsed_date_label = 0;
-static expression *parsed_short_label = 0;
-
-static expression *parse_result;
-
-string literals;
-
-%}
-
-%union {
-  int num;
-  expression *expr;
-  struct { int ndigits; int val; } dig;
-  struct { int start; int len; } str;
-}
-
-/* uppercase or lowercase letter */
-%token <num> TOKEN_LETTER
-/* literal characters */
-%token <str> TOKEN_LITERAL
-/* digit */
-%token <num> TOKEN_DIGIT
-
-%type <expr> conditional
-%type <expr> alternative
-%type <expr> list
-%type <expr> string
-%type <expr> substitute
-%type <expr> optional_conditional
-%type <num> number
-%type <dig> digits
-%type <num> optional_number
-%type <num> flag
-
-%%
-
-expr:
-	optional_conditional
-		{ parse_result = ($1 ? new analyzed_expr($1) : 0); }
-	;
-
-conditional:
-	alternative
-		{ $$ = $1; }
-	| alternative '?' optional_conditional ':' conditional
-		{ $$ = new conditional_expr($1, $3, $5); }
-	;
-
-optional_conditional:
-	/* empty */
-		{ $$ = 0; }
-	| conditional
-		{ $$ = $1; }
-	;
-
-alternative:
-	list
-		{ $$ = $1; }
-	| alternative '|' list
-		{ $$ = new alternative_expr($1, $3); }
-	| alternative '&' list
-		{ $$ = new conditional_expr($1, $3, 0); }
-	;	
-
-list:
-	substitute
-		{ $$ = $1; }
-	| list substitute
-		{ $$ = new list_expr($1, $2); }
-	;
-
-substitute:
-	string
-		{ $$ = $1; }
-	| substitute '~' string
-		{ $$ = new substitute_expr($1, $3); }
-	;
-
-string:
-	'@'
-		{ $$ = new at_expr; }
-	| TOKEN_LITERAL
-		{
-		  $$ = new literal_expr(literals.contents() + $1.start,
-					$1.len);
-		}
-	| TOKEN_LETTER
-		{ $$ = new field_expr($1, 0); }
-	| TOKEN_LETTER number
-		{ $$ = new field_expr($1, $2 - 1); }
-	| '%' TOKEN_LETTER
-		{
-		  switch ($2) {
-		  case 'I':
-		  case 'i':
-		  case 'A':
-		  case 'a':
-		    $$ = new format_expr($2);
-		    break;
-		  default:
-		    command_error("unrecognized format `%1'", char($2));
-		    $$ = new format_expr('a');
-		    break;
-		  }
-		}
-	
-	| '%' digits
-		{
-		  $$ = new format_expr('0', $2.ndigits, $2.val);
-		}
-	| string '.' flag TOKEN_LETTER optional_number
-		{
-		  switch ($4) {
-		  case 'l':
-		    $$ = new map_expr($1, lowercase);
-		    break;
-		  case 'u':
-		    $$ = new map_expr($1, uppercase);
-		    break;
-		  case 'c':
-		    $$ = new map_expr($1, capitalize);
-		    break;
-		  case 'r':
-		    $$ = new map_expr($1, reverse_name);
-		    break;
-		  case 'a':
-		    $$ = new map_expr($1, abbreviate_name);
-		    break;
-		  case 'y':
-		    $$ = new extractor_expr($1, find_year, $3);
-		    break;
-		  case 'n':
-		    $$ = new extractor_expr($1, find_last_name, $3);
-		    break;
-		  default:
-		    $$ = $1;
-		    command_error("unknown function `%1'", char($4));
-		    break;
-		  }
-		}
-
-	| string '+' number
-		{ $$ = new truncate_expr($1, $3); }
-	| string '-' number
-		{ $$ = new truncate_expr($1, -$3); }
-	| string '*'
-		{ $$ = new star_expr($1); }
-	| '(' optional_conditional ')'
-		{ $$ = $2; }
-	| '<' optional_conditional '>'
-		{ $$ = new separator_expr($2); }
-	;
-
-optional_number:
-	/* empty */
-		{ $$ = -1; }
-	| number
-		{ $$ = $1; }
-	;
-
-number:
-	TOKEN_DIGIT
-		{ $$ = $1; }
-	| number TOKEN_DIGIT
-		{ $$ = $1*10 + $2; }
-	;
-
-digits:
-	TOKEN_DIGIT
-		{ $$.ndigits = 1; $$.val = $1; }
-	| digits TOKEN_DIGIT
-		{ $$.ndigits = $1.ndigits + 1; $$.val = $1.val*10 + $2; }
-	;
-	
-      
-flag:
-	/* empty */
-		{ $$ = 0; }
-	| '+'
-		{ $$ = 1; }
-	| '-'
-		{ $$ = -1; }
-	;
-
-%%
-
-/* bison defines const to be empty unless __STDC__ is defined, which it
-isn't under cfront */
-
-#ifdef const
-#undef const
-#endif
-
-const char *spec_ptr;
-const char *spec_end;
-const char *spec_cur;
-
-static char uppercase_array[] = {
-  'A', 'B', 'C', 'D', 'E', 'F', 'G', 'H',
-  'I', 'J', 'K', 'L', 'M', 'N', 'O', 'P',
-  'Q', 'R', 'S', 'T', 'U', 'V', 'W', 'X',
-  'Y', 'Z',
-};
-  
-static char lowercase_array[] = {
-  'a', 'b', 'c', 'd', 'e', 'f', 'g', 'h',
-  'i', 'j', 'k', 'l', 'm', 'n', 'o', 'p',
-  'q', 'r', 's', 't', 'u', 'v', 'w', 'x',
-  'y', 'z',
-};
-
-int yylex()
-{
-  while (spec_ptr < spec_end && csspace(*spec_ptr))
-    spec_ptr++;
-  spec_cur = spec_ptr;
-  if (spec_ptr >= spec_end)
-    return 0;
-  unsigned char c = *spec_ptr++;
-  if (csalpha(c)) {
-    yylval.num = c;
-    return TOKEN_LETTER;
-  }
-  if (csdigit(c)) {
-    yylval.num = c - '0';
-    return TOKEN_DIGIT;
-  }
-  if (c == '\'') {
-    yylval.str.start = literals.length();
-    for (; spec_ptr < spec_end; spec_ptr++) {
-      if (*spec_ptr == '\'') {
-	if (++spec_ptr < spec_end && *spec_ptr == '\'')
-	  literals += '\'';
-	else {
-	  yylval.str.len = literals.length() - yylval.str.start;
-	  return TOKEN_LITERAL;
-	}
-      }
-      else
-	literals += *spec_ptr;
-    }
-    yylval.str.len = literals.length() - yylval.str.start;
-    return TOKEN_LITERAL;
-  }
-  return c;
-}
-
-int set_label_spec(const char *label_spec)
-{
-  spec_cur = spec_ptr = label_spec;
-  spec_end = strchr(label_spec, '\0');
-  literals.clear();
-  if (yyparse())
-    return 0;
-  delete parsed_label;
-  parsed_label = parse_result;
-  return 1;
-}
-
-int set_date_label_spec(const char *label_spec)
-{
-  spec_cur = spec_ptr = label_spec;
-  spec_end = strchr(label_spec, '\0');
-  literals.clear();
-  if (yyparse())
-    return 0;
-  delete parsed_date_label;
-  parsed_date_label = parse_result;
-  return 1;
-}
-
-int set_short_label_spec(const char *label_spec)
-{
-  spec_cur = spec_ptr = label_spec;
-  spec_end = strchr(label_spec, '\0');
-  literals.clear();
-  if (yyparse())
-    return 0;
-  delete parsed_short_label;
-  parsed_short_label = parse_result;
-  return 1;
-}
-
-void yyerror(const char *message)
-{
-  if (spec_cur < spec_end)
-    command_error("label specification %1 before `%2'", message, spec_cur);
-  else
-    command_error("label specification %1 at end of string",
-		  message, spec_cur);
-}
-
-void at_expr::evaluate(int tentative, const reference &ref,
-		       string &result, substring_position &)
-{
-  if (tentative)
-    ref.canonicalize_authors(result);
-  else {
-    const char *end, *start = ref.get_authors(&end);
-    if (start)
-      result.append(start, end - start);
-  }
-}
-
-void format_expr::evaluate(int tentative, const reference &ref,
-			   string &result, substring_position &)
-{
-  if (tentative)
-    return;
-  const label_info *lp = ref.get_label_ptr();
-  int num = lp == 0 ? ref.get_number() : lp->count;
-  if (type != '0')
-    result += format_serial(type, num + 1);
-  else {
-    const char *ptr = i_to_a(num + first_number);
-    int pad = width - strlen(ptr);
-    while (--pad >= 0)
-      result += '0';
-    result += ptr;
-  }
-}
-
-static const char *format_serial(char c, int n)
-{
-  assert(n > 0);
-  static char buf[128]; // more than enough.
-  switch (c) {
-  case 'i':
-  case 'I':
-    {
-      char *p = buf;
-      // troff uses z and w to represent 10000 and 5000 in Roman
-      // numerals; I can find no historical basis for this usage
-      const char *s = c == 'i' ? "zwmdclxvi" : "ZWMDCLXVI";
-      if (n >= 40000)
-	return i_to_a(n);
-      while (n >= 10000) {
-	*p++ = s[0];
-	n -= 10000;
-      }
-      for (int i = 1000; i > 0; i /= 10, s += 2) {
-	int m = n/i;
-	n -= m*i;
-	switch (m) {
-	case 3:
-	  *p++ = s[2];
-	  /* falls through */
-	case 2:
-	  *p++ = s[2];
-	  /* falls through */
-	case 1:
-	  *p++ = s[2];
-	  break;
-	case 4:
-	  *p++ = s[2];
-	  *p++ = s[1];
-	  break;
-	case 8:
-	  *p++ = s[1];
-	  *p++ = s[2];
-	  *p++ = s[2];
-	  *p++ = s[2];
-	  break;
-	case 7:
-	  *p++ = s[1];
-	  *p++ = s[2];
-	  *p++ = s[2];
-	  break;
-	case 6:
-	  *p++ = s[1];
-	  *p++ = s[2];
-	  break;
-	case 5:
-	  *p++ = s[1];
-	  break;
-	case 9:
-	  *p++ = s[2];
-	  *p++ = s[0];
-	}
-      }
-      *p = 0;
-      break;
-    }
-  case 'a':
-  case 'A':
-    {
-      char *p = buf;
-      // this is derived from troff/reg.c
-      while (n > 0) {
-	int d = n % 26;
-	if (d == 0)
-	  d = 26;
-	n -= d;
-	n /= 26;
-	*p++ = c == 'a' ? lowercase_array[d - 1] :
-			       uppercase_array[d - 1];
-      }
-      *p-- = 0;
-      // Reverse it.
-      char *q = buf;
-      while (q < p) {
-	char temp = *q;
-	*q = *p;
-	*p = temp;
-	--p;
-	++q;
-      }
-      break;
-    }
-  default:
-    assert(0);
-  }
-  return buf;
-}
-
-void field_expr::evaluate(int, const reference &ref,
-			  string &result, substring_position &)
-{
-  const char *end;
-  const char *start = ref.get_field(name, &end);
-  if (start) {
-    start = nth_field(number, start, &end);
-    if (start)
-      result.append(start, end - start);
-  }
-}
-
-void literal_expr::evaluate(int, const reference &,
-			    string &result, substring_position &)
-{
-  result += s;
-}
-
-analyzed_expr::analyzed_expr(expression *e)
-: unary_expr(e), flags(e ? e->analyze() : 0)
-{
-}
-
-void analyzed_expr::evaluate(int tentative, const reference &ref,
-			     string &result, substring_position &pos)
-{
-  if (expr)
-    expr->evaluate(tentative, ref, result, pos);
-}
-
-void star_expr::evaluate(int tentative, const reference &ref,
-			 string &result, substring_position &pos)
-{
-  const label_info *lp = ref.get_label_ptr();
-  if (!tentative
-      && (lp == 0 || lp->total > 1)
-      && expr)
-    expr->evaluate(tentative, ref, result, pos);
-}
-
-void separator_expr::evaluate(int tentative, const reference &ref,
-			      string &result, substring_position &pos)
-{
-  int start_length = result.length();
-  int is_first = pos.start < 0;
-  if (expr)
-    expr->evaluate(tentative, ref, result, pos);
-  if (is_first) {
-    pos.start = start_length;
-    pos.length = result.length() - start_length;
-  }
-}
-
-void map_expr::evaluate(int tentative, const reference &ref,
-			string &result, substring_position &)
-{
-  if (expr) {
-    string temp;
-    substring_position temp_pos;
-    expr->evaluate(tentative, ref, temp, temp_pos);
-    (*func)(temp.contents(), temp.contents() + temp.length(), result);
-  }
-}
-
-void extractor_expr::evaluate(int tentative, const reference &ref,
-			      string &result, substring_position &)
-{
-  if (expr) {
-    string temp;
-    substring_position temp_pos;
-    expr->evaluate(tentative, ref, temp, temp_pos);
-    const char *end, *start = (*func)(temp.contents(),
-				      temp.contents() + temp.length(),
-				      &end);
-    switch (part) {
-    case BEFORE:
-      if (start)
-	result.append(temp.contents(), start - temp.contents());
-      else
-	result += temp;
-      break;
-    case MATCH:
-      if (start)
-	result.append(start, end - start);
-      break;
-    case AFTER:
-      if (start)
-	result.append(end, temp.contents() + temp.length() - end);
-      break;
-    default:
-      assert(0);
-    }
-  }
-}
-
-static void first_part(int len, const char *ptr, const char *end,
-			  string &result)
-{
-  for (;;) {
-    const char *token_start = ptr;
-    if (!get_token(&ptr, end))
-      break;
-    const token_info *ti = lookup_token(token_start, ptr);
-    int counts = ti->sortify_non_empty(token_start, ptr);
-    if (counts && --len < 0)
-      break;
-    if (counts || ti->is_accent())
-      result.append(token_start, ptr - token_start);
-  }
-}
-
-static void last_part(int len, const char *ptr, const char *end,
-		      string &result)
-{
-  const char *start = ptr;
-  int count = 0;
-  for (;;) {
-    const char *token_start = ptr;
-    if (!get_token(&ptr, end))
-      break;
-    const token_info *ti = lookup_token(token_start, ptr);
-    if (ti->sortify_non_empty(token_start, ptr))
-      count++;
-  }
-  ptr = start;
-  int skip = count - len;
-  if (skip > 0) {
-    for (;;) {
-      const char *token_start = ptr;
-      if (!get_token(&ptr, end))
-	assert(0);
-      const token_info *ti = lookup_token(token_start, ptr);
-      if (ti->sortify_non_empty(token_start, ptr) && --skip < 0) {
-	ptr = token_start;
-	break;
-      }
-    }
-  }
-  first_part(len, ptr, end, result);
-}
-
-void truncate_expr::evaluate(int tentative, const reference &ref,
-			     string &result, substring_position &)
-{
-  if (expr) {
-    string temp;
-    substring_position temp_pos;
-    expr->evaluate(tentative, ref, temp, temp_pos);
-    const char *start = temp.contents();
-    const char *end = start + temp.length();
-    if (n > 0)
-      first_part(n, start, end, result);
-    else if (n < 0)
-      last_part(-n, start, end, result);
-  }
-}
-
-void alternative_expr::evaluate(int tentative, const reference &ref,
-				string &result, substring_position &pos)
-{
-  int start_length = result.length();
-  if (expr1)
-    expr1->evaluate(tentative, ref, result, pos);
-  if (result.length() == start_length && expr2)
-    expr2->evaluate(tentative, ref, result, pos);
-}
-
-void list_expr::evaluate(int tentative, const reference &ref,
-			 string &result, substring_position &pos)
-{
-  if (expr1)
-    expr1->evaluate(tentative, ref, result, pos);
-  if (expr2)
-    expr2->evaluate(tentative, ref, result, pos);
-}
-
-void substitute_expr::evaluate(int tentative, const reference &ref,
-			       string &result, substring_position &pos)
-{
-  int start_length = result.length();
-  if (expr1)
-    expr1->evaluate(tentative, ref, result, pos);
-  if (result.length() > start_length && result[result.length() - 1] == '-') {
-    // ought to see if pos covers the -
-    result.set_length(result.length() - 1);
-    if (expr2)
-      expr2->evaluate(tentative, ref, result, pos);
-  }
-}
-
-void conditional_expr::evaluate(int tentative, const reference &ref,
-				string &result, substring_position &pos)
-{
-  string temp;
-  substring_position temp_pos;
-  if (expr1)
-    expr1->evaluate(tentative, ref, temp, temp_pos);
-  if (temp.length() > 0) {
-    if (expr2)
-      expr2->evaluate(tentative, ref, result, pos);
-  }
-  else {
-    if (expr3)
-      expr3->evaluate(tentative, ref, result, pos);
-  }
-}
-
-void reference::pre_compute_label()
-{
-  if (parsed_label != 0
-      && (parsed_label->analyze() & expression::CONTAINS_VARIABLE)) {
-    label.clear();
-    substring_position temp_pos;
-    parsed_label->evaluate(1, *this, label, temp_pos);
-    label_ptr = lookup_label(label);
-  }
-}
-
-void reference::compute_label()
-{
-  label.clear();
-  if (parsed_label)
-    parsed_label->evaluate(0, *this, label, separator_pos);
-  if (short_label_flag && parsed_short_label)
-    parsed_short_label->evaluate(0, *this, short_label, short_separator_pos);
-  if (date_as_label) {
-    string new_date;
-    if (parsed_date_label) {
-      substring_position temp_pos;
-      parsed_date_label->evaluate(0, *this, new_date, temp_pos);
-    }
-    set_date(new_date);
-  }
-  if (label_ptr)
-    label_ptr->count += 1;
-}
-
-void reference::immediate_compute_label()
-{
-  if (label_ptr)
-    label_ptr->total = 2;	// force use of disambiguator
-  compute_label();
-}
-
-int reference::merge_labels(reference **v, int n, label_type type,
-			    string &result)
-{
-  if (abbreviate_label_ranges)
-    return merge_labels_by_number(v, n, type, result);
-  else
-    return merge_labels_by_parts(v, n, type, result);
-}
-
-int reference::merge_labels_by_number(reference **v, int n, label_type type,
-				      string &result)
-{
-  if (n <= 1)
-    return 0;
-  int num = get_number();
-  // Only merge three or more labels.
-  if (v[0]->get_number() != num + 1
-      || v[1]->get_number() != num + 2)
-    return 0;
-  int i;
-  for (i = 2; i < n; i++)
-    if (v[i]->get_number() != num + i + 1)
-      break;
-  result = get_label(type);
-  result += label_range_indicator;
-  result += v[i - 1]->get_label(type);
-  return i;
-}
-
-const substring_position &reference::get_separator_pos(label_type type) const
-{
-  if (type == SHORT_LABEL && short_label_flag)
-    return short_separator_pos;
-  else
-    return separator_pos;
-}
-
-const string &reference::get_label(label_type type) const
-{
-  if (type == SHORT_LABEL && short_label_flag)
-    return short_label; 
-  else
-    return label;
-}
-
-int reference::merge_labels_by_parts(reference **v, int n, label_type type,
-				     string &result)
-{
-  if (n <= 0)
-    return 0;
-  const string &lb = get_label(type);
-  const substring_position &sp = get_separator_pos(type);
-  if (sp.start < 0
-      || sp.start != v[0]->get_separator_pos(type).start 
-      || memcmp(lb.contents(), v[0]->get_label(type).contents(),
-		sp.start) != 0)
-    return 0;
-  result = lb;
-  int i = 0;
-  do {
-    result += separate_label_second_parts;
-    const substring_position &s = v[i]->get_separator_pos(type);
-    int sep_end_pos = s.start + s.length;
-    result.append(v[i]->get_label(type).contents() + sep_end_pos,
-		  v[i]->get_label(type).length() - sep_end_pos);
-  } while (++i < n
-	   && sp.start == v[i]->get_separator_pos(type).start
-	   && memcmp(lb.contents(), v[i]->get_label(type).contents(),
-		     sp.start) == 0);
-  return i;
-}
-
-string label_pool;
-
-label_info::label_info(const string &s)
-: start(label_pool.length()), length(s.length()), count(0), total(1)
-{
-  label_pool += s;
-}
-
-static label_info **label_table = 0;
-static int label_table_size = 0;
-static int label_table_used = 0;
-
-label_info *lookup_label(const string &label)
-{
-  if (label_table == 0) {
-    label_table = new label_info *[17];
-    label_table_size = 17;
-    for (int i = 0; i < 17; i++)
-      label_table[i] = 0;
-  }
-  unsigned h = hash_string(label.contents(), label.length()) % label_table_size;
-  label_info **ptr;
-  for (ptr = label_table + h;
-       *ptr != 0;
-       (ptr == label_table)
-       ? (ptr = label_table + label_table_size - 1)
-       : ptr--)
-    if ((*ptr)->length == label.length()
-	&& memcmp(label_pool.contents() + (*ptr)->start, label.contents(),
-		  label.length()) == 0) {
-      (*ptr)->total += 1;
-      return *ptr;
-    }
-  label_info *result = *ptr = new label_info(label);
-  if (++label_table_used * 2 > label_table_size) {
-    // Rehash the table.
-    label_info **old_table = label_table;
-    int old_size = label_table_size;
-    label_table_size = next_size(label_table_size);
-    label_table = new label_info *[label_table_size];
-    int i;
-    for (i = 0; i < label_table_size; i++)
-      label_table[i] = 0;
-    for (i = 0; i < old_size; i++)
-      if (old_table[i]) {
-	h = hash_string(label_pool.contents() + old_table[i]->start,
-			old_table[i]->length);
-	label_info **p;
-	for (p = label_table + (h % label_table_size);
-	     *p != 0;
-	     (p == label_table)
-	     ? (p = label_table + label_table_size - 1)
-	     : --p)
-	    ;
-	*p = old_table[i];
-	}
-    a_delete old_table;
-  }
-  return result;
-}
-
-void clear_labels()
-{
-  for (int i = 0; i < label_table_size; i++) {
-    delete label_table[i];
-    label_table[i] = 0;
-  }
-  label_table_used = 0;
-  label_pool.clear();
-}
-
-static void consider_authors(reference **start, reference **end, int i);
-
-void compute_labels(reference **v, int n)
-{
-  if (parsed_label
-      && (parsed_label->analyze() & expression::CONTAINS_AT)
-      && sort_fields.length() >= 2
-      && sort_fields[0] == 'A'
-      && sort_fields[1] == '+')
-    consider_authors(v, v + n, 0);
-  for (int i = 0; i < n; i++)
-    v[i]->compute_label();
-}
-
-
-/* A reference with a list of authors <A0,A1,...,AN> _needs_ author i
-where 0 <= i <= N if there exists a reference with a list of authors
-<B0,B1,...,BM> such that <A0,A1,...,AN> != <B0,B1,...,BM> and M >= i
-and Aj = Bj for 0 <= j < i. In this case if we can't say ``A0,
-A1,...,A(i-1) et al'' because this would match both <A0,A1,...,AN> and
-<B0,B1,...,BM>.  If a reference needs author i we only have to call
-need_author(j) for some j >= i such that the reference also needs
-author j. */
-
-/* This function handles 2 tasks:
-determine which authors are needed (cannot be elided with et al.);
-determine which authors can have only last names in the labels.
-
-References >= start and < end have the same first i author names.
-Also they're sorted by A+. */
-
-static void consider_authors(reference **start, reference **end, int i)
-{
-  if (start >= end)
-    return;
-  reference **p = start;
-  if (i >= (*p)->get_nauthors()) {
-    for (++p; p < end && i >= (*p)->get_nauthors(); p++)
-      ;
-    if (p < end && i > 0) {
-      // If we have an author list <A B C> and an author list <A B C D>,
-      // then both lists need C.
-      for (reference **q = start; q < end; q++)
-	(*q)->need_author(i - 1);
-    }
-    start = p;
-  }
-  while (p < end) {
-    reference **last_name_start = p;
-    reference **name_start = p;
-    for (++p;
-	 p < end && i < (*p)->get_nauthors()
-	 && same_author_last_name(**last_name_start, **p, i);
-	 p++) {
-      if (!same_author_name(**name_start, **p, i)) {
-	consider_authors(name_start, p, i + 1);
-	name_start = p;
-      }
-    }
-    consider_authors(name_start, p, i + 1);
-    if (last_name_start == name_start) {
-      for (reference **q = last_name_start; q < p; q++)
-	(*q)->set_last_name_unambiguous(i);
-    }
-    // If we have an author list <A B C D> and <A B C E>, then the lists
-    // need author D and E respectively.
-    if (name_start > start || p < end) {
-      for (reference **q = last_name_start; q < p; q++)
-	(*q)->need_author(i);
-    }
-  }
-}
-
-int same_author_last_name(const reference &r1, const reference &r2, int n)
-{
-  const char *ae1;
-  const char *as1 = r1.get_sort_field(0, n, 0, &ae1);
-  const char *ae2;
-  const char *as2 = r2.get_sort_field(0, n, 0, &ae2);
-  if (!as1 && !as2) return 1;	// they are the same
-  if (!as1 || !as2) return 0;
-  return ae1 - as1 == ae2 - as2 && memcmp(as1, as2, ae1 - as1) == 0;
-}
-
-int same_author_name(const reference &r1, const reference &r2, int n)
-{
-  const char *ae1;
-  const char *as1 = r1.get_sort_field(0, n, -1, &ae1);
-  const char *ae2;
-  const char *as2 = r2.get_sort_field(0, n, -1, &ae2);
-  if (!as1 && !as2) return 1;	// they are the same
-  if (!as1 || !as2) return 0;
-  return ae1 - as1 == ae2 - as2 && memcmp(as1, as2, ae1 - as1) == 0;
-}
-
-
-void int_set::set(int i)
-{
-  assert(i >= 0);
-  int bytei = i >> 3;
-  if (bytei >= v.length()) {
-    int old_length = v.length();
-    v.set_length(bytei + 1);
-    for (int j = old_length; j <= bytei; j++)
-      v[j] = 0;
-  }
-  v[bytei] |= 1 << (i & 7);
-}
-
-int int_set::get(int i) const
-{
-  assert(i >= 0);
-  int bytei = i >> 3;
-  return bytei >= v.length() ? 0 : (v[bytei] & (1 << (i & 7))) != 0;
-}
-
-void reference::set_last_name_unambiguous(int i)
-{
-  last_name_unambiguous.set(i);
-}
-
-void reference::need_author(int n)
-{
-  if (n > last_needed_author)
-    last_needed_author = n;
-}
-
-const char *reference::get_authors(const char **end) const
-{
-  if (!computed_authors) {
-    ((reference *)this)->computed_authors = 1;
-    string &result = ((reference *)this)->authors;
-    int na = get_nauthors();
-    result.clear();
-    for (int i = 0; i < na; i++) {
-      if (last_name_unambiguous.get(i)) {
-	const char *e, *start = get_author_last_name(i, &e);
-	assert(start != 0);
-	result.append(start, e - start);
-      }
-      else {
-	const char *e, *start = get_author(i, &e);
-	assert(start != 0);
-	result.append(start, e - start);
-      }
-      if (i == last_needed_author
-	  && et_al.length() > 0
-	  && et_al_min_elide > 0
-	  && last_needed_author + et_al_min_elide < na
-	  && na >= et_al_min_total) {
-	result += et_al;
-	break;
-      }
-      if (i < na - 1) {
-	if (na == 2)
-	  result += join_authors_exactly_two;
-	else if (i < na - 2)
-	  result += join_authors_default;
-	else
-	  result += join_authors_last_two;
-      }
-    }
-  }
-  const char *start = authors.contents();
-  *end = start + authors.length();
-  return start;
-}
-
-int reference::get_nauthors() const
-{
-  if (nauthors < 0) {
-    const char *dummy;
-    int na;
-    for (na = 0; get_author(na, &dummy) != 0; na++)
-      ;
-    ((reference *)this)->nauthors = na;
-  }
-  return nauthors;
-}
diff -Nuar groff-1.22.3.old/src/preproc/refer/label.ypp groff-1.22.3/src/preproc/refer/label.ypp
--- groff-1.22.3.old/src/preproc/refer/label.ypp	1970-01-01 02:00:00.000000000 +0200
+++ groff-1.22.3/src/preproc/refer/label.ypp	2015-04-23 20:57:03.000000000 +0300
@@ -0,0 +1,1191 @@
+/* -*- C++ -*-
+   Copyright (C) 1989-2014  Free Software Foundation, Inc.
+     Written by James Clark (jjc@jclark.com)
+
+This file is part of groff.
+
+groff is free software; you can redistribute it and/or modify it under
+the terms of the GNU General Public License as published by the Free
+Software Foundation, either version 3 of the License, or
+(at your option) any later version.
+
+groff is distributed in the hope that it will be useful, but WITHOUT ANY
+WARRANTY; without even the implied warranty of MERCHANTABILITY or
+FITNESS FOR A PARTICULAR PURPOSE.  See the GNU General Public License
+for more details.
+
+You should have received a copy of the GNU General Public License
+along with this program. If not, see <http://www.gnu.org/licenses/>. */
+
+%{
+
+#include "refer.h"
+#include "refid.h"
+#include "ref.h"
+#include "token.h"
+
+int yylex();
+void yyerror(const char *);
+int yyparse();
+
+static const char *format_serial(char c, int n);
+
+struct label_info {
+  int start;
+  int length;
+  int count;
+  int total;
+  label_info(const string &);
+};
+
+label_info *lookup_label(const string &label);
+
+struct expression {
+  enum {
+    // Does the tentative label depend on the reference?
+    CONTAINS_VARIABLE = 01, 
+    CONTAINS_STAR = 02,
+    CONTAINS_FORMAT = 04,
+    CONTAINS_AT = 010
+  };
+  virtual ~expression() { }
+  virtual void evaluate(int, const reference &, string &,
+			substring_position &) = 0;
+  virtual unsigned analyze() { return 0; }
+};
+
+class at_expr : public expression {
+public:
+  at_expr() { }
+  void evaluate(int, const reference &, string &, substring_position &);
+  unsigned analyze() { return CONTAINS_VARIABLE|CONTAINS_AT; }
+};
+
+class format_expr : public expression {
+  char type;
+  int width;
+  int first_number;
+public:
+  format_expr(char c, int w = 0, int f = 1)
+    : type(c), width(w), first_number(f) { }
+  void evaluate(int, const reference &, string &, substring_position &);
+  unsigned analyze() { return CONTAINS_FORMAT; }
+};
+
+class field_expr : public expression {
+  int number;
+  char name;
+public:
+  field_expr(char nm, int num) : number(num), name(nm) { }
+  void evaluate(int, const reference &, string &, substring_position &);
+  unsigned analyze() { return CONTAINS_VARIABLE; }
+};
+
+class literal_expr : public expression {
+  string s;
+public:
+  literal_expr(const char *ptr, int len) : s(ptr, len) { }
+  void evaluate(int, const reference &, string &, substring_position &);
+};
+
+class unary_expr : public expression {
+protected:
+  expression *expr;
+public:
+  unary_expr(expression *e) : expr(e) { }
+  ~unary_expr() { delete expr; }
+  void evaluate(int, const reference &, string &, substring_position &) = 0;
+  unsigned analyze() { return expr ? expr->analyze() : 0; }
+};
+
+// This caches the analysis of an expression.
+
+class analyzed_expr : public unary_expr {
+  unsigned flags;
+public:
+  analyzed_expr(expression *);
+  void evaluate(int, const reference &, string &, substring_position &);
+  unsigned analyze() { return flags; }
+};
+
+class star_expr : public unary_expr {
+public:
+  star_expr(expression *e) : unary_expr(e) { }
+  void evaluate(int, const reference &, string &, substring_position &);
+  unsigned analyze() {
+    return ((expr ? (expr->analyze() & ~CONTAINS_VARIABLE) : 0)
+	    | CONTAINS_STAR);
+  }
+};
+
+typedef void map_func(const char *, const char *, string &);
+
+class map_expr : public unary_expr {
+  map_func *func;
+public:
+  map_expr(expression *e, map_func *f) : unary_expr(e), func(f) { }
+  void evaluate(int, const reference &, string &, substring_position &);
+};
+  
+typedef const char *extractor_func(const char *, const char *, const char **);
+
+class extractor_expr : public unary_expr {
+  int part;
+  extractor_func *func;
+public:
+  enum { BEFORE = +1, MATCH = 0, AFTER = -1 };
+  extractor_expr(expression *e, extractor_func *f, int pt)
+    : unary_expr(e), part(pt), func(f) { }
+  void evaluate(int, const reference &, string &, substring_position &);
+};
+
+class truncate_expr : public unary_expr {
+  int n;
+public:
+  truncate_expr(expression *e, int i) : unary_expr(e), n(i) { } 
+  void evaluate(int, const reference &, string &, substring_position &);
+};
+
+class separator_expr : public unary_expr {
+public:
+  separator_expr(expression *e) : unary_expr(e) { }
+  void evaluate(int, const reference &, string &, substring_position &);
+};
+
+class binary_expr : public expression {
+protected:
+  expression *expr1;
+  expression *expr2;
+public:
+  binary_expr(expression *e1, expression *e2) : expr1(e1), expr2(e2) { }
+  ~binary_expr() { delete expr1; delete expr2; }
+  void evaluate(int, const reference &, string &, substring_position &) = 0;
+  unsigned analyze() {
+    return (expr1 ? expr1->analyze() : 0) | (expr2 ? expr2->analyze() : 0);
+  }
+};
+
+class alternative_expr : public binary_expr {
+public:
+  alternative_expr(expression *e1, expression *e2) : binary_expr(e1, e2) { }
+  void evaluate(int, const reference &, string &, substring_position &);
+};
+
+class list_expr : public binary_expr {
+public:
+  list_expr(expression *e1, expression *e2) : binary_expr(e1, e2) { }
+  void evaluate(int, const reference &, string &, substring_position &);
+};
+
+class substitute_expr : public binary_expr {
+public:
+  substitute_expr(expression *e1, expression *e2) : binary_expr(e1, e2) { }
+  void evaluate(int, const reference &, string &, substring_position &);
+};
+
+class ternary_expr : public expression {
+protected:
+  expression *expr1;
+  expression *expr2;
+  expression *expr3;
+public:
+  ternary_expr(expression *e1, expression *e2, expression *e3)
+    : expr1(e1), expr2(e2), expr3(e3) { }
+  ~ternary_expr() { delete expr1; delete expr2; delete expr3; }
+  void evaluate(int, const reference &, string &, substring_position &) = 0;
+  unsigned analyze() {
+    return ((expr1 ? expr1->analyze() : 0)
+	    | (expr2 ? expr2->analyze() : 0)
+	    | (expr3 ? expr3->analyze() : 0));
+  }
+};
+
+class conditional_expr : public ternary_expr {
+public:
+  conditional_expr(expression *e1, expression *e2, expression *e3)
+    : ternary_expr(e1, e2, e3) { }
+  void evaluate(int, const reference &, string &, substring_position &);
+};
+
+static expression *parsed_label = 0;
+static expression *parsed_date_label = 0;
+static expression *parsed_short_label = 0;
+
+static expression *parse_result;
+
+string literals;
+
+%}
+
+%union {
+  int num;
+  expression *expr;
+  struct { int ndigits; int val; } dig;
+  struct { int start; int len; } str;
+}
+
+/* uppercase or lowercase letter */
+%token <num> TOKEN_LETTER
+/* literal characters */
+%token <str> TOKEN_LITERAL
+/* digit */
+%token <num> TOKEN_DIGIT
+
+%type <expr> conditional
+%type <expr> alternative
+%type <expr> list
+%type <expr> string
+%type <expr> substitute
+%type <expr> optional_conditional
+%type <num> number
+%type <dig> digits
+%type <num> optional_number
+%type <num> flag
+
+%%
+
+expr:
+	optional_conditional
+		{ parse_result = ($1 ? new analyzed_expr($1) : 0); }
+	;
+
+conditional:
+	alternative
+		{ $$ = $1; }
+	| alternative '?' optional_conditional ':' conditional
+		{ $$ = new conditional_expr($1, $3, $5); }
+	;
+
+optional_conditional:
+	/* empty */
+		{ $$ = 0; }
+	| conditional
+		{ $$ = $1; }
+	;
+
+alternative:
+	list
+		{ $$ = $1; }
+	| alternative '|' list
+		{ $$ = new alternative_expr($1, $3); }
+	| alternative '&' list
+		{ $$ = new conditional_expr($1, $3, 0); }
+	;	
+
+list:
+	substitute
+		{ $$ = $1; }
+	| list substitute
+		{ $$ = new list_expr($1, $2); }
+	;
+
+substitute:
+	string
+		{ $$ = $1; }
+	| substitute '~' string
+		{ $$ = new substitute_expr($1, $3); }
+	;
+
+string:
+	'@'
+		{ $$ = new at_expr; }
+	| TOKEN_LITERAL
+		{
+		  $$ = new literal_expr(literals.contents() + $1.start,
+					$1.len);
+		}
+	| TOKEN_LETTER
+		{ $$ = new field_expr($1, 0); }
+	| TOKEN_LETTER number
+		{ $$ = new field_expr($1, $2 - 1); }
+	| '%' TOKEN_LETTER
+		{
+		  switch ($2) {
+		  case 'I':
+		  case 'i':
+		  case 'A':
+		  case 'a':
+		    $$ = new format_expr($2);
+		    break;
+		  default:
+		    command_error("unrecognized format `%1'", char($2));
+		    $$ = new format_expr('a');
+		    break;
+		  }
+		}
+	
+	| '%' digits
+		{
+		  $$ = new format_expr('0', $2.ndigits, $2.val);
+		}
+	| string '.' flag TOKEN_LETTER optional_number
+		{
+		  switch ($4) {
+		  case 'l':
+		    $$ = new map_expr($1, lowercase);
+		    break;
+		  case 'u':
+		    $$ = new map_expr($1, uppercase);
+		    break;
+		  case 'c':
+		    $$ = new map_expr($1, capitalize);
+		    break;
+		  case 'r':
+		    $$ = new map_expr($1, reverse_name);
+		    break;
+		  case 'a':
+		    $$ = new map_expr($1, abbreviate_name);
+		    break;
+		  case 'y':
+		    $$ = new extractor_expr($1, find_year, $3);
+		    break;
+		  case 'n':
+		    $$ = new extractor_expr($1, find_last_name, $3);
+		    break;
+		  default:
+		    $$ = $1;
+		    command_error("unknown function `%1'", char($4));
+		    break;
+		  }
+		}
+
+	| string '+' number
+		{ $$ = new truncate_expr($1, $3); }
+	| string '-' number
+		{ $$ = new truncate_expr($1, -$3); }
+	| string '*'
+		{ $$ = new star_expr($1); }
+	| '(' optional_conditional ')'
+		{ $$ = $2; }
+	| '<' optional_conditional '>'
+		{ $$ = new separator_expr($2); }
+	;
+
+optional_number:
+	/* empty */
+		{ $$ = -1; }
+	| number
+		{ $$ = $1; }
+	;
+
+number:
+	TOKEN_DIGIT
+		{ $$ = $1; }
+	| number TOKEN_DIGIT
+		{ $$ = $1*10 + $2; }
+	;
+
+digits:
+	TOKEN_DIGIT
+		{ $$.ndigits = 1; $$.val = $1; }
+	| digits TOKEN_DIGIT
+		{ $$.ndigits = $1.ndigits + 1; $$.val = $1.val*10 + $2; }
+	;
+	
+      
+flag:
+	/* empty */
+		{ $$ = 0; }
+	| '+'
+		{ $$ = 1; }
+	| '-'
+		{ $$ = -1; }
+	;
+
+%%
+
+/* bison defines const to be empty unless __STDC__ is defined, which it
+isn't under cfront */
+
+#ifdef const
+#undef const
+#endif
+
+const char *spec_ptr;
+const char *spec_end;
+const char *spec_cur;
+
+static char uppercase_array[] = {
+  'A', 'B', 'C', 'D', 'E', 'F', 'G', 'H',
+  'I', 'J', 'K', 'L', 'M', 'N', 'O', 'P',
+  'Q', 'R', 'S', 'T', 'U', 'V', 'W', 'X',
+  'Y', 'Z',
+};
+  
+static char lowercase_array[] = {
+  'a', 'b', 'c', 'd', 'e', 'f', 'g', 'h',
+  'i', 'j', 'k', 'l', 'm', 'n', 'o', 'p',
+  'q', 'r', 's', 't', 'u', 'v', 'w', 'x',
+  'y', 'z',
+};
+
+int yylex()
+{
+  while (spec_ptr < spec_end && csspace(*spec_ptr))
+    spec_ptr++;
+  spec_cur = spec_ptr;
+  if (spec_ptr >= spec_end)
+    return 0;
+  unsigned char c = *spec_ptr++;
+  if (csalpha(c)) {
+    yylval.num = c;
+    return TOKEN_LETTER;
+  }
+  if (csdigit(c)) {
+    yylval.num = c - '0';
+    return TOKEN_DIGIT;
+  }
+  if (c == '\'') {
+    yylval.str.start = literals.length();
+    for (; spec_ptr < spec_end; spec_ptr++) {
+      if (*spec_ptr == '\'') {
+	if (++spec_ptr < spec_end && *spec_ptr == '\'')
+	  literals += '\'';
+	else {
+	  yylval.str.len = literals.length() - yylval.str.start;
+	  return TOKEN_LITERAL;
+	}
+      }
+      else
+	literals += *spec_ptr;
+    }
+    yylval.str.len = literals.length() - yylval.str.start;
+    return TOKEN_LITERAL;
+  }
+  return c;
+}
+
+int set_label_spec(const char *label_spec)
+{
+  spec_cur = spec_ptr = label_spec;
+  spec_end = strchr(label_spec, '\0');
+  literals.clear();
+  if (yyparse())
+    return 0;
+  delete parsed_label;
+  parsed_label = parse_result;
+  return 1;
+}
+
+int set_date_label_spec(const char *label_spec)
+{
+  spec_cur = spec_ptr = label_spec;
+  spec_end = strchr(label_spec, '\0');
+  literals.clear();
+  if (yyparse())
+    return 0;
+  delete parsed_date_label;
+  parsed_date_label = parse_result;
+  return 1;
+}
+
+int set_short_label_spec(const char *label_spec)
+{
+  spec_cur = spec_ptr = label_spec;
+  spec_end = strchr(label_spec, '\0');
+  literals.clear();
+  if (yyparse())
+    return 0;
+  delete parsed_short_label;
+  parsed_short_label = parse_result;
+  return 1;
+}
+
+void yyerror(const char *message)
+{
+  if (spec_cur < spec_end)
+    command_error("label specification %1 before `%2'", message, spec_cur);
+  else
+    command_error("label specification %1 at end of string",
+		  message, spec_cur);
+}
+
+void at_expr::evaluate(int tentative, const reference &ref,
+		       string &result, substring_position &)
+{
+  if (tentative)
+    ref.canonicalize_authors(result);
+  else {
+    const char *end, *start = ref.get_authors(&end);
+    if (start)
+      result.append(start, end - start);
+  }
+}
+
+void format_expr::evaluate(int tentative, const reference &ref,
+			   string &result, substring_position &)
+{
+  if (tentative)
+    return;
+  const label_info *lp = ref.get_label_ptr();
+  int num = lp == 0 ? ref.get_number() : lp->count;
+  if (type != '0')
+    result += format_serial(type, num + 1);
+  else {
+    const char *ptr = i_to_a(num + first_number);
+    int pad = width - strlen(ptr);
+    while (--pad >= 0)
+      result += '0';
+    result += ptr;
+  }
+}
+
+static const char *format_serial(char c, int n)
+{
+  assert(n > 0);
+  static char buf[128]; // more than enough.
+  switch (c) {
+  case 'i':
+  case 'I':
+    {
+      char *p = buf;
+      // troff uses z and w to represent 10000 and 5000 in Roman
+      // numerals; I can find no historical basis for this usage
+      const char *s = c == 'i' ? "zwmdclxvi" : "ZWMDCLXVI";
+      if (n >= 40000)
+	return i_to_a(n);
+      while (n >= 10000) {
+	*p++ = s[0];
+	n -= 10000;
+      }
+      for (int i = 1000; i > 0; i /= 10, s += 2) {
+	int m = n/i;
+	n -= m*i;
+	switch (m) {
+	case 3:
+	  *p++ = s[2];
+	  /* falls through */
+	case 2:
+	  *p++ = s[2];
+	  /* falls through */
+	case 1:
+	  *p++ = s[2];
+	  break;
+	case 4:
+	  *p++ = s[2];
+	  *p++ = s[1];
+	  break;
+	case 8:
+	  *p++ = s[1];
+	  *p++ = s[2];
+	  *p++ = s[2];
+	  *p++ = s[2];
+	  break;
+	case 7:
+	  *p++ = s[1];
+	  *p++ = s[2];
+	  *p++ = s[2];
+	  break;
+	case 6:
+	  *p++ = s[1];
+	  *p++ = s[2];
+	  break;
+	case 5:
+	  *p++ = s[1];
+	  break;
+	case 9:
+	  *p++ = s[2];
+	  *p++ = s[0];
+	}
+      }
+      *p = 0;
+      break;
+    }
+  case 'a':
+  case 'A':
+    {
+      char *p = buf;
+      // this is derived from troff/reg.c
+      while (n > 0) {
+	int d = n % 26;
+	if (d == 0)
+	  d = 26;
+	n -= d;
+	n /= 26;
+	*p++ = c == 'a' ? lowercase_array[d - 1] :
+			       uppercase_array[d - 1];
+      }
+      *p-- = 0;
+      // Reverse it.
+      char *q = buf;
+      while (q < p) {
+	char temp = *q;
+	*q = *p;
+	*p = temp;
+	--p;
+	++q;
+      }
+      break;
+    }
+  default:
+    assert(0);
+  }
+  return buf;
+}
+
+void field_expr::evaluate(int, const reference &ref,
+			  string &result, substring_position &)
+{
+  const char *end;
+  const char *start = ref.get_field(name, &end);
+  if (start) {
+    start = nth_field(number, start, &end);
+    if (start)
+      result.append(start, end - start);
+  }
+}
+
+void literal_expr::evaluate(int, const reference &,
+			    string &result, substring_position &)
+{
+  result += s;
+}
+
+analyzed_expr::analyzed_expr(expression *e)
+: unary_expr(e), flags(e ? e->analyze() : 0)
+{
+}
+
+void analyzed_expr::evaluate(int tentative, const reference &ref,
+			     string &result, substring_position &pos)
+{
+  if (expr)
+    expr->evaluate(tentative, ref, result, pos);
+}
+
+void star_expr::evaluate(int tentative, const reference &ref,
+			 string &result, substring_position &pos)
+{
+  const label_info *lp = ref.get_label_ptr();
+  if (!tentative
+      && (lp == 0 || lp->total > 1)
+      && expr)
+    expr->evaluate(tentative, ref, result, pos);
+}
+
+void separator_expr::evaluate(int tentative, const reference &ref,
+			      string &result, substring_position &pos)
+{
+  int start_length = result.length();
+  int is_first = pos.start < 0;
+  if (expr)
+    expr->evaluate(tentative, ref, result, pos);
+  if (is_first) {
+    pos.start = start_length;
+    pos.length = result.length() - start_length;
+  }
+}
+
+void map_expr::evaluate(int tentative, const reference &ref,
+			string &result, substring_position &)
+{
+  if (expr) {
+    string temp;
+    substring_position temp_pos;
+    expr->evaluate(tentative, ref, temp, temp_pos);
+    (*func)(temp.contents(), temp.contents() + temp.length(), result);
+  }
+}
+
+void extractor_expr::evaluate(int tentative, const reference &ref,
+			      string &result, substring_position &)
+{
+  if (expr) {
+    string temp;
+    substring_position temp_pos;
+    expr->evaluate(tentative, ref, temp, temp_pos);
+    const char *end, *start = (*func)(temp.contents(),
+				      temp.contents() + temp.length(),
+				      &end);
+    switch (part) {
+    case BEFORE:
+      if (start)
+	result.append(temp.contents(), start - temp.contents());
+      else
+	result += temp;
+      break;
+    case MATCH:
+      if (start)
+	result.append(start, end - start);
+      break;
+    case AFTER:
+      if (start)
+	result.append(end, temp.contents() + temp.length() - end);
+      break;
+    default:
+      assert(0);
+    }
+  }
+}
+
+static void first_part(int len, const char *ptr, const char *end,
+			  string &result)
+{
+  for (;;) {
+    const char *token_start = ptr;
+    if (!get_token(&ptr, end))
+      break;
+    const token_info *ti = lookup_token(token_start, ptr);
+    int counts = ti->sortify_non_empty(token_start, ptr);
+    if (counts && --len < 0)
+      break;
+    if (counts || ti->is_accent())
+      result.append(token_start, ptr - token_start);
+  }
+}
+
+static void last_part(int len, const char *ptr, const char *end,
+		      string &result)
+{
+  const char *start = ptr;
+  int count = 0;
+  for (;;) {
+    const char *token_start = ptr;
+    if (!get_token(&ptr, end))
+      break;
+    const token_info *ti = lookup_token(token_start, ptr);
+    if (ti->sortify_non_empty(token_start, ptr))
+      count++;
+  }
+  ptr = start;
+  int skip = count - len;
+  if (skip > 0) {
+    for (;;) {
+      const char *token_start = ptr;
+      if (!get_token(&ptr, end))
+	assert(0);
+      const token_info *ti = lookup_token(token_start, ptr);
+      if (ti->sortify_non_empty(token_start, ptr) && --skip < 0) {
+	ptr = token_start;
+	break;
+      }
+    }
+  }
+  first_part(len, ptr, end, result);
+}
+
+void truncate_expr::evaluate(int tentative, const reference &ref,
+			     string &result, substring_position &)
+{
+  if (expr) {
+    string temp;
+    substring_position temp_pos;
+    expr->evaluate(tentative, ref, temp, temp_pos);
+    const char *start = temp.contents();
+    const char *end = start + temp.length();
+    if (n > 0)
+      first_part(n, start, end, result);
+    else if (n < 0)
+      last_part(-n, start, end, result);
+  }
+}
+
+void alternative_expr::evaluate(int tentative, const reference &ref,
+				string &result, substring_position &pos)
+{
+  int start_length = result.length();
+  if (expr1)
+    expr1->evaluate(tentative, ref, result, pos);
+  if (result.length() == start_length && expr2)
+    expr2->evaluate(tentative, ref, result, pos);
+}
+
+void list_expr::evaluate(int tentative, const reference &ref,
+			 string &result, substring_position &pos)
+{
+  if (expr1)
+    expr1->evaluate(tentative, ref, result, pos);
+  if (expr2)
+    expr2->evaluate(tentative, ref, result, pos);
+}
+
+void substitute_expr::evaluate(int tentative, const reference &ref,
+			       string &result, substring_position &pos)
+{
+  int start_length = result.length();
+  if (expr1)
+    expr1->evaluate(tentative, ref, result, pos);
+  if (result.length() > start_length && result[result.length() - 1] == '-') {
+    // ought to see if pos covers the -
+    result.set_length(result.length() - 1);
+    if (expr2)
+      expr2->evaluate(tentative, ref, result, pos);
+  }
+}
+
+void conditional_expr::evaluate(int tentative, const reference &ref,
+				string &result, substring_position &pos)
+{
+  string temp;
+  substring_position temp_pos;
+  if (expr1)
+    expr1->evaluate(tentative, ref, temp, temp_pos);
+  if (temp.length() > 0) {
+    if (expr2)
+      expr2->evaluate(tentative, ref, result, pos);
+  }
+  else {
+    if (expr3)
+      expr3->evaluate(tentative, ref, result, pos);
+  }
+}
+
+void reference::pre_compute_label()
+{
+  if (parsed_label != 0
+      && (parsed_label->analyze() & expression::CONTAINS_VARIABLE)) {
+    label.clear();
+    substring_position temp_pos;
+    parsed_label->evaluate(1, *this, label, temp_pos);
+    label_ptr = lookup_label(label);
+  }
+}
+
+void reference::compute_label()
+{
+  label.clear();
+  if (parsed_label)
+    parsed_label->evaluate(0, *this, label, separator_pos);
+  if (short_label_flag && parsed_short_label)
+    parsed_short_label->evaluate(0, *this, short_label, short_separator_pos);
+  if (date_as_label) {
+    string new_date;
+    if (parsed_date_label) {
+      substring_position temp_pos;
+      parsed_date_label->evaluate(0, *this, new_date, temp_pos);
+    }
+    set_date(new_date);
+  }
+  if (label_ptr)
+    label_ptr->count += 1;
+}
+
+void reference::immediate_compute_label()
+{
+  if (label_ptr)
+    label_ptr->total = 2;	// force use of disambiguator
+  compute_label();
+}
+
+int reference::merge_labels(reference **v, int n, label_type type,
+			    string &result)
+{
+  if (abbreviate_label_ranges)
+    return merge_labels_by_number(v, n, type, result);
+  else
+    return merge_labels_by_parts(v, n, type, result);
+}
+
+int reference::merge_labels_by_number(reference **v, int n, label_type type,
+				      string &result)
+{
+  if (n <= 1)
+    return 0;
+  int num = get_number();
+  // Only merge three or more labels.
+  if (v[0]->get_number() != num + 1
+      || v[1]->get_number() != num + 2)
+    return 0;
+  int i;
+  for (i = 2; i < n; i++)
+    if (v[i]->get_number() != num + i + 1)
+      break;
+  result = get_label(type);
+  result += label_range_indicator;
+  result += v[i - 1]->get_label(type);
+  return i;
+}
+
+const substring_position &reference::get_separator_pos(label_type type) const
+{
+  if (type == SHORT_LABEL && short_label_flag)
+    return short_separator_pos;
+  else
+    return separator_pos;
+}
+
+const string &reference::get_label(label_type type) const
+{
+  if (type == SHORT_LABEL && short_label_flag)
+    return short_label; 
+  else
+    return label;
+}
+
+int reference::merge_labels_by_parts(reference **v, int n, label_type type,
+				     string &result)
+{
+  if (n <= 0)
+    return 0;
+  const string &lb = get_label(type);
+  const substring_position &sp = get_separator_pos(type);
+  if (sp.start < 0
+      || sp.start != v[0]->get_separator_pos(type).start 
+      || memcmp(lb.contents(), v[0]->get_label(type).contents(),
+		sp.start) != 0)
+    return 0;
+  result = lb;
+  int i = 0;
+  do {
+    result += separate_label_second_parts;
+    const substring_position &s = v[i]->get_separator_pos(type);
+    int sep_end_pos = s.start + s.length;
+    result.append(v[i]->get_label(type).contents() + sep_end_pos,
+		  v[i]->get_label(type).length() - sep_end_pos);
+  } while (++i < n
+	   && sp.start == v[i]->get_separator_pos(type).start
+	   && memcmp(lb.contents(), v[i]->get_label(type).contents(),
+		     sp.start) == 0);
+  return i;
+}
+
+string label_pool;
+
+label_info::label_info(const string &s)
+: start(label_pool.length()), length(s.length()), count(0), total(1)
+{
+  label_pool += s;
+}
+
+static label_info **label_table = 0;
+static int label_table_size = 0;
+static int label_table_used = 0;
+
+label_info *lookup_label(const string &label)
+{
+  if (label_table == 0) {
+    label_table = new label_info *[17];
+    label_table_size = 17;
+    for (int i = 0; i < 17; i++)
+      label_table[i] = 0;
+  }
+  unsigned h = hash_string(label.contents(), label.length()) % label_table_size;
+  label_info **ptr;
+  for (ptr = label_table + h;
+       *ptr != 0;
+       (ptr == label_table)
+       ? (ptr = label_table + label_table_size - 1)
+       : ptr--)
+    if ((*ptr)->length == label.length()
+	&& memcmp(label_pool.contents() + (*ptr)->start, label.contents(),
+		  label.length()) == 0) {
+      (*ptr)->total += 1;
+      return *ptr;
+    }
+  label_info *result = *ptr = new label_info(label);
+  if (++label_table_used * 2 > label_table_size) {
+    // Rehash the table.
+    label_info **old_table = label_table;
+    int old_size = label_table_size;
+    label_table_size = next_size(label_table_size);
+    label_table = new label_info *[label_table_size];
+    int i;
+    for (i = 0; i < label_table_size; i++)
+      label_table[i] = 0;
+    for (i = 0; i < old_size; i++)
+      if (old_table[i]) {
+	h = hash_string(label_pool.contents() + old_table[i]->start,
+			old_table[i]->length);
+	label_info **p;
+	for (p = label_table + (h % label_table_size);
+	     *p != 0;
+	     (p == label_table)
+	     ? (p = label_table + label_table_size - 1)
+	     : --p)
+	    ;
+	*p = old_table[i];
+	}
+    a_delete old_table;
+  }
+  return result;
+}
+
+void clear_labels()
+{
+  for (int i = 0; i < label_table_size; i++) {
+    delete label_table[i];
+    label_table[i] = 0;
+  }
+  label_table_used = 0;
+  label_pool.clear();
+}
+
+static void consider_authors(reference **start, reference **end, int i);
+
+void compute_labels(reference **v, int n)
+{
+  if (parsed_label
+      && (parsed_label->analyze() & expression::CONTAINS_AT)
+      && sort_fields.length() >= 2
+      && sort_fields[0] == 'A'
+      && sort_fields[1] == '+')
+    consider_authors(v, v + n, 0);
+  for (int i = 0; i < n; i++)
+    v[i]->compute_label();
+}
+
+
+/* A reference with a list of authors <A0,A1,...,AN> _needs_ author i
+where 0 <= i <= N if there exists a reference with a list of authors
+<B0,B1,...,BM> such that <A0,A1,...,AN> != <B0,B1,...,BM> and M >= i
+and Aj = Bj for 0 <= j < i. In this case if we can't say ``A0,
+A1,...,A(i-1) et al'' because this would match both <A0,A1,...,AN> and
+<B0,B1,...,BM>.  If a reference needs author i we only have to call
+need_author(j) for some j >= i such that the reference also needs
+author j. */
+
+/* This function handles 2 tasks:
+determine which authors are needed (cannot be elided with et al.);
+determine which authors can have only last names in the labels.
+
+References >= start and < end have the same first i author names.
+Also they're sorted by A+. */
+
+static void consider_authors(reference **start, reference **end, int i)
+{
+  if (start >= end)
+    return;
+  reference **p = start;
+  if (i >= (*p)->get_nauthors()) {
+    for (++p; p < end && i >= (*p)->get_nauthors(); p++)
+      ;
+    if (p < end && i > 0) {
+      // If we have an author list <A B C> and an author list <A B C D>,
+      // then both lists need C.
+      for (reference **q = start; q < end; q++)
+	(*q)->need_author(i - 1);
+    }
+    start = p;
+  }
+  while (p < end) {
+    reference **last_name_start = p;
+    reference **name_start = p;
+    for (++p;
+	 p < end && i < (*p)->get_nauthors()
+	 && same_author_last_name(**last_name_start, **p, i);
+	 p++) {
+      if (!same_author_name(**name_start, **p, i)) {
+	consider_authors(name_start, p, i + 1);
+	name_start = p;
+      }
+    }
+    consider_authors(name_start, p, i + 1);
+    if (last_name_start == name_start) {
+      for (reference **q = last_name_start; q < p; q++)
+	(*q)->set_last_name_unambiguous(i);
+    }
+    // If we have an author list <A B C D> and <A B C E>, then the lists
+    // need author D and E respectively.
+    if (name_start > start || p < end) {
+      for (reference **q = last_name_start; q < p; q++)
+	(*q)->need_author(i);
+    }
+  }
+}
+
+int same_author_last_name(const reference &r1, const reference &r2, int n)
+{
+  const char *ae1;
+  const char *as1 = r1.get_sort_field(0, n, 0, &ae1);
+  const char *ae2;
+  const char *as2 = r2.get_sort_field(0, n, 0, &ae2);
+  if (!as1 && !as2) return 1;	// they are the same
+  if (!as1 || !as2) return 0;
+  return ae1 - as1 == ae2 - as2 && memcmp(as1, as2, ae1 - as1) == 0;
+}
+
+int same_author_name(const reference &r1, const reference &r2, int n)
+{
+  const char *ae1;
+  const char *as1 = r1.get_sort_field(0, n, -1, &ae1);
+  const char *ae2;
+  const char *as2 = r2.get_sort_field(0, n, -1, &ae2);
+  if (!as1 && !as2) return 1;	// they are the same
+  if (!as1 || !as2) return 0;
+  return ae1 - as1 == ae2 - as2 && memcmp(as1, as2, ae1 - as1) == 0;
+}
+
+
+void int_set::set(int i)
+{
+  assert(i >= 0);
+  int bytei = i >> 3;
+  if (bytei >= v.length()) {
+    int old_length = v.length();
+    v.set_length(bytei + 1);
+    for (int j = old_length; j <= bytei; j++)
+      v[j] = 0;
+  }
+  v[bytei] |= 1 << (i & 7);
+}
+
+int int_set::get(int i) const
+{
+  assert(i >= 0);
+  int bytei = i >> 3;
+  return bytei >= v.length() ? 0 : (v[bytei] & (1 << (i & 7))) != 0;
+}
+
+void reference::set_last_name_unambiguous(int i)
+{
+  last_name_unambiguous.set(i);
+}
+
+void reference::need_author(int n)
+{
+  if (n > last_needed_author)
+    last_needed_author = n;
+}
+
+const char *reference::get_authors(const char **end) const
+{
+  if (!computed_authors) {
+    ((reference *)this)->computed_authors = 1;
+    string &result = ((reference *)this)->authors;
+    int na = get_nauthors();
+    result.clear();
+    for (int i = 0; i < na; i++) {
+      if (last_name_unambiguous.get(i)) {
+	const char *e, *start = get_author_last_name(i, &e);
+	assert(start != 0);
+	result.append(start, e - start);
+      }
+      else {
+	const char *e, *start = get_author(i, &e);
+	assert(start != 0);
+	result.append(start, e - start);
+      }
+      if (i == last_needed_author
+	  && et_al.length() > 0
+	  && et_al_min_elide > 0
+	  && last_needed_author + et_al_min_elide < na
+	  && na >= et_al_min_total) {
+	result += et_al;
+	break;
+      }
+      if (i < na - 1) {
+	if (na == 2)
+	  result += join_authors_exactly_two;
+	else if (i < na - 2)
+	  result += join_authors_default;
+	else
+	  result += join_authors_last_two;
+      }
+    }
+  }
+  const char *start = authors.contents();
+  *end = start + authors.length();
+  return start;
+}
+
+int reference::get_nauthors() const
+{
+  if (nauthors < 0) {
+    const char *dummy;
+    int na;
+    for (na = 0; get_author(na, &dummy) != 0; na++)
+      ;
+    ((reference *)this)->nauthors = na;
+  }
+  return nauthors;
+}
diff -Nuar groff-1.22.3.old/src/preproc/refer/Makefile.sub groff-1.22.3/src/preproc/refer/Makefile.sub
--- groff-1.22.3.old/src/preproc/refer/Makefile.sub	2014-11-04 10:38:35.245523747 +0200
+++ groff-1.22.3/src/preproc/refer/Makefile.sub	1970-01-01 02:00:00.000000000 +0200
@@ -1,65 +0,0 @@
-# Makefile.sub for `preproc refer'
-#
-# File position: <groff-source>/src/preproc/refer/Makefile.sub
-#
-# Copyright (C) 1989-2014  Free Software Foundation, Inc.
-#
-# This file is part of `font utf8' which is part of `groff'.
-#
-# `groff' is free software; you can redistribute it and/or modify it
-# under the terms of the GNU General Public License as published by
-# the Free Software Foundation, either version 2 of the License, or
-# (at your option) any later version.
-#
-# `groff' is distributed in the hope that it will be useful, but
-# WITHOUT ANY WARRANTY; without even the implied warranty of
-# MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the GNU
-# General Public License for more details.
-#
-# You should have received a copy of the GNU General Public License
-# along with this program. If not, see
-# <http://www.gnu.org/licenses/gpl-2.0.html>.
-#
-########################################################################
-
-PROG=refer$(EXEEXT)
-MAN1=refer.n
-XLIBS=$(LIBBIB) $(LIBGROFF)
-MLIB=$(LIBM)
-OBJS=\
-  command.$(OBJEXT) \
-  label.$(OBJEXT) \
-  ref.$(OBJEXT) \
-  refer.$(OBJEXT) \
-  token.$(OBJEXT)
-CCSRCS=\
-  $(srcdir)/command.cpp \
-  $(srcdir)/ref.cpp \
-  $(srcdir)/refer.cpp \
-  $(srcdir)/token.cpp
-HDRS=\
-  $(srcdir)/refer.h \
-  $(srcdir)/token.h \
-  $(srcdir)/command.h \
-  $(srcdir)/ref.h
-GRAM=$(srcdir)/label.y
-YTABC=label.cpp
-NAMEPREFIX=$(g)
-
-.PHONY: install_data
-install_data: refer
-	-test -d $(DESTDIR)$(referdir) \
-	  || $(mkinstalldirs) $(DESTDIR)$(referdir)
-
-.PHONY: uninstall_data
-uninstall_sub:
-	-test -d $(DESTDIR)$(referdir) && rmdir $(DESTDIR)$(referdir)
-
-
-########################################################################
-# Emacs settings
-########################################################################
-#
-# Local Variables:
-# mode: makefile
-# End:
diff -Nuar groff-1.22.3.old/src/preproc/refer/refer.am groff-1.22.3/src/preproc/refer/refer.am
--- groff-1.22.3.old/src/preproc/refer/refer.am	1970-01-01 02:00:00.000000000 +0200
+++ groff-1.22.3/src/preproc/refer/refer.am	2015-04-23 20:57:03.000000000 +0300
@@ -0,0 +1,44 @@
+# Copyright (C) 2014
+#      Free Software Foundation, Inc.
+# 
+# This file is part of groff.
+#
+# groff is free software; you can redistribute it and/or modify it under
+# the terms of the GNU General Public License as published by the Free
+# Software Foundation, either version 3 of the License, or
+# (at your option) any later version.
+#
+# groff is distributed in the hope that it will be useful, but WITHOUT ANY
+# WARRANTY; without even the implied warranty of MERCHANTABILITY or
+# FITNESS FOR A PARTICULAR PURPOSE.  See the GNU General Public License
+# for more details.
+#
+# You should have received a copy of the GNU General Public License
+# along with this program. If not, see <http://www.gnu.org/licenses/>.
+
+prefixexecbin_PROGRAMS += refer
+refer_CPPFLAGS = $(AM_CPPFLAGS) -I $(top_srcdir)/src/preproc/refer
+refer_LDADD = libbib.a libgroff.a $(LIBM)
+refer_SOURCES =  \
+  src/preproc/refer/command.cpp \
+  src/preproc/refer/ref.cpp \
+  src/preproc/refer/refer.cpp \
+  src/preproc/refer/token.cpp \
+  src/preproc/refer/label.ypp \
+  src/preproc/refer/refer.h \
+  src/preproc/refer/ref.h \
+  src/preproc/refer/token.h \
+  src/preproc/refer/command.h
+PREFIXMAN1 += src/preproc/refer/refer.n
+EXTRA_DIST += src/preproc/refer/TODO src/preproc/refer/refer.man
+CLEANFILES += \
+  src/preproc/refer/label.cpp \
+  src/preproc/refer/label.hpp \
+  src/preproc/refer/label.output
+# As refer_CPPFLAGS was set, all the .o have a 'refer-' prefix
+src/preproc/refer/refer-command.$(OBJEXT): defs.h
+src/preproc/refer/refer-ref.$(OBJEXT): defs.h
+src/preproc/refer/refer-refer.$(OBJEXT): defs.h
+src/preproc/refer/refer-token.$(OBJEXT): defs.h
+src/preproc/refer/refer-label.$(OBJEXT): defs.h
+
diff -Nuar groff-1.22.3.old/src/preproc/refer/refer.cpp groff-1.22.3/src/preproc/refer/refer.cpp
--- groff-1.22.3.old/src/preproc/refer/refer.cpp	2014-11-04 10:38:35.245523747 +0200
+++ groff-1.22.3/src/preproc/refer/refer.cpp	2015-04-23 20:57:03.000000000 +0300
@@ -432,8 +432,11 @@
       return;
     }
   }
-  current_filename = filename;
-  fprintf(outfp, ".lf 1 %s\n", filename);
+  string fn(filename);
+  fn += '\0';
+  normalize_for_lf(fn);
+  current_filename = fn.contents();
+  fprintf(outfp, ".lf 1 %s\n", current_filename);
   string line;
   current_lineno = 0;
   for (;;) {
diff -Nuar groff-1.22.3.old/src/preproc/refer/refer.h groff-1.22.3/src/preproc/refer/refer.h
--- groff-1.22.3.old/src/preproc/refer/refer.h	2014-11-04 10:38:35.245523747 +0200
+++ groff-1.22.3/src/preproc/refer/refer.h	2015-04-23 20:57:03.000000000 +0300
@@ -28,6 +28,7 @@
 #include "stringclass.h"
 #include "cset.h"
 #include "cmap.h"
+#include "lf.h"
 
 #include "defs.h"
 
diff -Nuar groff-1.22.3.old/src/preproc/refer/refer.man groff-1.22.3/src/preproc/refer/refer.man
--- groff-1.22.3.old/src/preproc/refer/refer.man	2014-11-04 10:38:35.245523747 +0200
+++ groff-1.22.3/src/preproc/refer/refer.man	2015-04-23 20:57:03.000000000 +0300
@@ -8,7 +8,7 @@
 .\" --------------------------------------------------------------------
 .
 .de co
-Copyright \[co] 1989-2014 Free Software Foundation, Inc.
+Copyright \(co 1989-2014 Free Software Foundation, Inc.
 
 Permission is granted to make and distribute verbatim copies of
 this manual provided the copyright notice and this permission notice
diff -Nuar groff-1.22.3.old/src/preproc/soelim/.gitignore groff-1.22.3/src/preproc/soelim/.gitignore
--- groff-1.22.3.old/src/preproc/soelim/.gitignore	1970-01-01 02:00:00.000000000 +0200
+++ groff-1.22.3/src/preproc/soelim/.gitignore	2015-04-23 20:57:03.000000000 +0300
@@ -0,0 +1,3 @@
+Makefile.dep
+soelim
+soelim.n
diff -Nuar groff-1.22.3.old/src/preproc/soelim/Makefile.sub groff-1.22.3/src/preproc/soelim/Makefile.sub
--- groff-1.22.3.old/src/preproc/soelim/Makefile.sub	2014-11-04 10:38:35.250523684 +0200
+++ groff-1.22.3/src/preproc/soelim/Makefile.sub	1970-01-01 02:00:00.000000000 +0200
@@ -1,39 +0,0 @@
-# Makefile.sub for `preproc soelim'
-#
-# File position: <groff-source>/src/preproc/soelim/Makefile.sub
-#
-# Copyright (C) 2014  Free Software Foundation, Inc.
-#
-# This file is part of `font utf8' which is part of `groff'.
-#
-# `groff' is free software; you can redistribute it and/or modify it
-# under the terms of the GNU General Public License as published by
-# the Free Software Foundation, either version 2 of the License, or
-# (at your option) any later version.
-#
-# `groff' is distributed in the hope that it will be useful, but
-# WITHOUT ANY WARRANTY; without even the implied warranty of
-# MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the GNU
-# General Public License for more details.
-#
-# You should have received a copy of the GNU General Public License
-# along with this program. If not, see
-# <http://www.gnu.org/licenses/gpl-2.0.html>.
-#
-########################################################################
-
-PROG=soelim$(EXEEXT)
-MAN1=soelim.n
-XLIBS=$(LIBGROFF)
-MLIB=$(LIBM)
-OBJS=soelim.$(OBJEXT)
-CCSRCS=$(srcdir)/soelim.cpp
-NAMEPREFIX=$(g)
-
-########################################################################
-# Emacs settings
-########################################################################
-#
-# Local Variables:
-# mode: makefile
-# End:
diff -Nuar groff-1.22.3.old/src/preproc/soelim/soelim.am groff-1.22.3/src/preproc/soelim/soelim.am
--- groff-1.22.3.old/src/preproc/soelim/soelim.am	1970-01-01 02:00:00.000000000 +0200
+++ groff-1.22.3/src/preproc/soelim/soelim.am	2015-04-23 20:57:03.000000000 +0300
@@ -0,0 +1,25 @@
+# Copyright (C) 2014
+#      Free Software Foundation, Inc.
+# 
+# This file is part of groff.
+#
+# groff is free software; you can redistribute it and/or modify it under
+# the terms of the GNU General Public License as published by the Free
+# Software Foundation, either version 3 of the License, or
+# (at your option) any later version.
+#
+# groff is distributed in the hope that it will be useful, but WITHOUT ANY
+# WARRANTY; without even the implied warranty of MERCHANTABILITY or
+# FITNESS FOR A PARTICULAR PURPOSE.  See the GNU General Public License
+# for more details.
+#
+# You should have received a copy of the GNU General Public License
+# along with this program. If not, see <http://www.gnu.org/licenses/>.
+
+prefixexecbin_PROGRAMS += soelim
+soelim_LDADD = libgroff.a $(LIBM)
+soelim_SOURCES = src/preproc/soelim/soelim.cpp
+PREFIXMAN1 += src/preproc/soelim/soelim.n
+EXTRA_DIST += \
+  src/preproc/soelim/TODO \
+  src/preproc/soelim/soelim.man
diff -Nuar groff-1.22.3.old/src/preproc/soelim/soelim.cpp groff-1.22.3/src/preproc/soelim/soelim.cpp
--- groff-1.22.3.old/src/preproc/soelim/soelim.cpp	2014-11-04 10:38:35.250523684 +0200
+++ groff-1.22.3/src/preproc/soelim/soelim.cpp	2015-04-23 20:57:03.000000000 +0300
@@ -28,6 +28,7 @@
 #include "stringclass.h"
 #include "nonposix.h"
 #include "searchpath.h"
+#include "lf.h"
 
 // The include search path initially contains only the current directory.
 static search_path include_search_path(0, 0, 0, 1);
@@ -161,6 +162,7 @@
     error("can't open `%1': %2", whole_filename.contents(), strerror(err));
     return 0;
   }
+  normalize_for_lf(whole_filename);
   current_filename = whole_filename.contents();
   current_lineno = 1;
   set_location();
diff -Nuar groff-1.22.3.old/src/preproc/soelim/soelim.man groff-1.22.3/src/preproc/soelim/soelim.man
--- groff-1.22.3.old/src/preproc/soelim/soelim.man	2014-11-04 10:38:35.250523684 +0200
+++ groff-1.22.3/src/preproc/soelim/soelim.man	2015-04-23 20:57:03.000000000 +0300
@@ -5,6 +5,10 @@
 @g@soelim \- interpret .so requests in groff input
 .
 .
+.do nr groff_C \n[.C]
+.cp 0
+.
+.
 .\" license (copying)
 .de co
 Copyright \[co] 1989-2014 Free Software Foundation, Inc.
@@ -275,6 +279,9 @@
 .co
 .
 .
+.cp \n[groff_C]
+.
+.
 .\" Local Variables:
 .\" mode: nroff
 .\" End:
diff -Nuar groff-1.22.3.old/src/preproc/tbl/.gitignore groff-1.22.3/src/preproc/tbl/.gitignore
--- groff-1.22.3.old/src/preproc/tbl/.gitignore	1970-01-01 02:00:00.000000000 +0200
+++ groff-1.22.3/src/preproc/tbl/.gitignore	2015-04-23 20:57:03.000000000 +0300
@@ -0,0 +1,3 @@
+Makefile.dep
+tbl
+tbl.n
diff -Nuar groff-1.22.3.old/src/preproc/tbl/main.cpp groff-1.22.3/src/preproc/tbl/main.cpp
--- groff-1.22.3.old/src/preproc/tbl/main.cpp	2014-11-04 10:38:35.220524059 +0200
+++ groff-1.22.3/src/preproc/tbl/main.cpp	2015-04-23 20:57:03.000000000 +0300
@@ -1615,7 +1615,10 @@
 	  fatal("can't open `%1': %2", argv[i], strerror(errno));
 	else {
 	  current_lineno = 1;
-	  current_filename = argv[i];
+	  string fn(argv[i]);
+	  fn += '\0';
+	  normalize_for_lf(fn);
+	  current_filename = fn.contents();
 	  printf(".lf 1 %s\n", current_filename);
 	  process_input_file(fp);
 	}
diff -Nuar groff-1.22.3.old/src/preproc/tbl/Makefile.sub groff-1.22.3/src/preproc/tbl/Makefile.sub
--- groff-1.22.3.old/src/preproc/tbl/Makefile.sub	2014-11-04 10:38:35.220524059 +0200
+++ groff-1.22.3/src/preproc/tbl/Makefile.sub	1970-01-01 02:00:00.000000000 +0200
@@ -1,45 +0,0 @@
-# Makefile.sub for `preproc tbl'
-#
-# File position: <groff-source>/src/preproc/tbl/Makefile.sub
-#
-# Copyright (C) 2014  Free Software Foundation, Inc.
-#
-# This file is part of `font utf8' which is part of `groff'.
-#
-# `groff' is free software; you can redistribute it and/or modify it
-# under the terms of the GNU General Public License as published by
-# the Free Software Foundation, either version 2 of the License, or
-# (at your option) any later version.
-#
-# `groff' is distributed in the hope that it will be useful, but
-# WITHOUT ANY WARRANTY; without even the implied warranty of
-# MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the GNU
-# General Public License for more details.
-#
-# You should have received a copy of the GNU General Public License
-# along with this program. If not, see
-# <http://www.gnu.org/licenses/gpl-2.0.html>.
-#
-########################################################################
-
-PROG=tbl$(EXEEXT)
-MAN1=tbl.n
-XLIBS=$(LIBGROFF)
-MLIB=$(LIBM)
-OBJS=\
-  main.$(OBJEXT) \
-  table.$(OBJEXT)
-CCSRCS=\
-  $(srcdir)/main.cpp \
-  $(srcdir)/table.cpp
-HDRS=\
-  $(srcdir)/table.h
-NAMEPREFIX=$(g)
-
-########################################################################
-# Emacs settings
-########################################################################
-#
-# Local Variables:
-# mode: makefile
-# End:
diff -Nuar groff-1.22.3.old/src/preproc/tbl/table.cpp groff-1.22.3/src/preproc/tbl/table.cpp
--- groff-1.22.3.old/src/preproc/tbl/table.cpp	2014-11-04 10:38:35.221524047 +0200
+++ groff-1.22.3/src/preproc/tbl/table.cpp	2015-04-23 20:57:03.000000000 +0300
@@ -2966,7 +2966,10 @@
       && strcmp(fn, last_filename) == 0)
     printfs(".lf %1\n", as_string(ln));
   else {
-    printfs(".lf %1 %2\n", as_string(ln), fn);
+    string filename(fn);
+    filename += '\0';
+    normalize_for_lf(filename);
+    printfs(".lf %1 %2\n", as_string(ln), filename.contents());
     last_filename = fn;
     location_force_filename = 0;
   }
diff -Nuar groff-1.22.3.old/src/preproc/tbl/table.h groff-1.22.3/src/preproc/tbl/table.h
--- groff-1.22.3.old/src/preproc/tbl/table.h	2014-11-04 10:38:35.221524047 +0200
+++ groff-1.22.3/src/preproc/tbl/table.h	2015-04-23 20:57:03.000000000 +0300
@@ -29,6 +29,7 @@
 #include "stringclass.h"
 #include "errarg.h"
 #include "error.h"
+#include "lf.h"
 
 // PREFIX and PREFIX_CHAR must be the same.
 #define PREFIX "3"
diff -Nuar groff-1.22.3.old/src/preproc/tbl/tbl.am groff-1.22.3/src/preproc/tbl/tbl.am
--- groff-1.22.3.old/src/preproc/tbl/tbl.am	1970-01-01 02:00:00.000000000 +0200
+++ groff-1.22.3/src/preproc/tbl/tbl.am	2015-04-23 20:57:03.000000000 +0300
@@ -0,0 +1,26 @@
+# Copyright (C) 2014
+#      Free Software Foundation, Inc.
+# 
+# This file is part of groff.
+#
+# groff is free software; you can redistribute it and/or modify it under
+# the terms of the GNU General Public License as published by the Free
+# Software Foundation, either version 3 of the License, or
+# (at your option) any later version.
+#
+# groff is distributed in the hope that it will be useful, but WITHOUT ANY
+# WARRANTY; without even the implied warranty of MERCHANTABILITY or
+# FITNESS FOR A PARTICULAR PURPOSE.  See the GNU General Public License
+# for more details.
+#
+# You should have received a copy of the GNU General Public License
+# along with this program. If not, see <http://www.gnu.org/licenses/>.
+
+prefixexecbin_PROGRAMS += tbl
+tbl_LDADD = libgroff.a $(LIBM)
+tbl_SOURCES = \
+  src/preproc/tbl/main.cpp \
+  src/preproc/tbl/table.cpp \
+  src/preproc/tbl/table.h
+PREFIXMAN1 += src/preproc/tbl/tbl.n
+EXTRA_DIST += src/preproc/tbl/tbl.man
diff -Nuar groff-1.22.3.old/src/preproc/tbl/tbl.man groff-1.22.3/src/preproc/tbl/tbl.man
--- groff-1.22.3.old/src/preproc/tbl/tbl.man	2014-11-04 10:38:35.221524047 +0200
+++ groff-1.22.3/src/preproc/tbl/tbl.man	2015-04-23 20:57:03.000000000 +0300
@@ -4,6 +4,10 @@
 @g@tbl \- format tables for troff
 .
 .
+.do nr groff_C \n[.C]
+.cp 0
+.
+.
 .\" license
 .de co
 Copyright \[co] 1989-2014 Free Software Foundation, Inc.
@@ -1225,6 +1229,9 @@
 .co
 .
 .
+.cp \n[groff_C]
+.
+.
 .\" Local Variables:
 .\" mode: nroff
 .\" End:
diff -Nuar groff-1.22.3.old/src/roff/groff/.gitignore groff-1.22.3/src/roff/groff/.gitignore
--- groff-1.22.3.old/src/roff/groff/.gitignore	1970-01-01 02:00:00.000000000 +0200
+++ groff-1.22.3/src/roff/groff/.gitignore	2015-04-23 20:57:03.000000000 +0300
@@ -0,0 +1,3 @@
+Makefile.dep
+groff
+groff.n
diff -Nuar groff-1.22.3.old/src/roff/groff/groff.am groff-1.22.3/src/roff/groff/groff.am
--- groff-1.22.3.old/src/roff/groff/groff.am	1970-01-01 02:00:00.000000000 +0200
+++ groff-1.22.3/src/roff/groff/groff.am	2015-04-23 20:57:03.000000000 +0300
@@ -0,0 +1,60 @@
+# Copyright (C) 1993-2014
+#   Free Software Foundation, Inc.
+#
+#   Original Makefile.sub rewritten by 
+#   Bernd Warken <groff-bernd.warken-72@web.de>
+#   and Werner LEMBERG <wl@gnu.org>
+#
+#   Automake migration by 
+#   Bertrand Garrigues <bertrand.garrigues@laposte.net>
+#
+# `groff' is free software; you can redistribute it and/or modify it
+# under the terms of the GNU General Public License as published by
+# the Free Software Foundation, either version 3 of the License, or
+# (at your option) any later version.
+#
+# `groff' is distributed in the hope that it will be useful, but
+# WITHOUT ANY WARRANTY; without even the implied warranty of
+# MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the GNU
+# General Public License for more details.
+#
+# You should have received a copy of the GNU General Public License
+# along with this program. If not, see <http://www.gnu.org/licenses/>.
+
+########################################################################
+
+bin_PROGRAMS += groff
+groff_LDADD = \
+  libgroff.a \
+  lib/libgnu.a \
+  $(LIBM)
+groff_SOURCES = \
+  src/roff/groff/groff.cpp \
+  src/roff/groff/pipeline.c \
+  src/roff/groff/pipeline.h
+src/roff/groff/groff.$(OBJEXT): defs.h
+man1_MANS += src/roff/groff/groff.n
+EXTRA_DIST += src/roff/groff/groff.man
+GROFF_OPTS_OUTPUT = \
+  groff_opts_no_arg.txt \
+  groff_opts_with_arg.txt
+groffoptsdir = $(libprogramdir)
+groffopts_DATA = $(GROFF_OPTS_OUTPUT)
+
+MOSTLYCLEANFILES += groff_opts.tmp $(GROFF_OPTS_OUTPUT)
+
+groff_opts.tmp: src/roff/groff/groff.cpp
+	@$(GREP) -e ':.*:.*:' $? | sed -e 's/[ \t",]//g' > $@
+	@echo -n 'groff options: '
+	@cat $@
+
+groff_opts_no_arg.txt: groff_opts.tmp
+	@sed -e 's/[a-zA-Z]://g' $? > $@
+	@echo -n 'no arg: '
+	@cat $@
+
+groff_opts_with_arg.txt: groff_opts_no_arg.txt
+	@rm -f $@
+	@sed "s/[`cat $?`:]//g" groff_opts.tmp > $@
+	@echo -n 'with arg: '
+	@cat $@
diff -Nuar groff-1.22.3.old/src/roff/groff/groff.cpp groff-1.22.3/src/roff/groff/groff.cpp
--- groff-1.22.3.old/src/roff/groff/groff.cpp	2014-11-04 10:38:35.195524372 +0200
+++ groff-1.22.3/src/roff/groff/groff.cpp	2015-04-23 20:57:03.000000000 +0300
@@ -701,7 +701,13 @@
 {
   str += ' ';
   int needs_quoting = 0;
+  // Native Windows programs don't support '..' style of quoting, so
+  // always behave as if ARG included the single quote character.
+#if defined(_WIN32) && !defined(__CYGWIN__)
+  int contains_single_quote = 1;
+#else
   int contains_single_quote = 0;
+#endif
   const char*p;
   for (p = arg; *p != '\0'; p++)
     switch (*p) {
@@ -731,10 +737,17 @@
     str += '"';
     for (p = arg; *p != '\0'; p++)
       switch (*p) {
+#if !(defined(_WIN32) && !defined(__CYGWIN__))
       case '"':
       case '\\':
       case '$':
 	str += '\\';
+#else
+      case '"':
+      case '\\':
+	if (*p == '"' || (*p == '\\' && p[1] == '"'))
+	  str += '\\';
+#endif
 	// fall through
       default:
 	str += *p;
diff -Nuar groff-1.22.3.old/src/roff/groff/groff.man groff-1.22.3/src/roff/groff/groff.man
--- groff-1.22.3.old/src/roff/groff/groff.man	2014-11-04 10:38:35.195524372 +0200
+++ groff-1.22.3/src/roff/groff/groff.man	2015-04-23 20:57:03.000000000 +0300
@@ -5,6 +5,10 @@
 .\" groff.man -> groff.1
 .
 .
+.do nr groff_C \n[.C]
+.cp 0
+.
+.
 .\" --------------------------------------------------------------------
 .\" Legal Terms
 .\" --------------------------------------------------------------------
@@ -2026,6 +2030,9 @@
 .au
 .
 .
+.cp \n[groff_C]
+.
+.
 .\" --------------------------------------------------------------------
 .\" Emacs setup
 .\" --------------------------------------------------------------------
diff -Nuar groff-1.22.3.old/src/roff/groff/Makefile.sub groff-1.22.3/src/roff/groff/Makefile.sub
--- groff-1.22.3.old/src/roff/groff/Makefile.sub	2014-11-04 10:38:35.195524372 +0200
+++ groff-1.22.3/src/roff/groff/Makefile.sub	1970-01-01 02:00:00.000000000 +0200
@@ -1,82 +0,0 @@
-# Makefile.sub for `src roff groff'
-
-# File position: <groff-source>/src/roff/groff/Makefile.sub
-
-# Copyright (C) 1993-2014  Free Software Foundation, Inc.
-
-#   Rewritten by Bernd Warken <groff-bernd.warken-72@web.de> and
-#   Werner LEMBERG  <wl@gnu.org>
-
-# `groff' is free software; you can redistribute it and/or modify it
-# under the terms of the GNU General Public License as published by
-# the Free Software Foundation, either version 3 of the License, or
-# (at your option) any later version.
-
-# `groff' is distributed in the hope that it will be useful, but
-# WITHOUT ANY WARRANTY; without even the implied warranty of
-# MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the GNU
-# General Public License for more details.
-
-# You should have received a copy of the GNU General Public License
-# along with this program. If not, see <http://www.gnu.org/licenses/>.
-
-########################################################################
-
-PROG=groff$(EXEEXT)
-MAN1=groff.n
-XLIBS=$(LIBGROFF) $(LIBGNU)
-MLIB=$(LIBM)
-OBJS=groff.$(OBJEXT) pipeline.$(OBJEXT)
-CCSRCS=$(srcdir)/groff.cpp
-CSRCS=$(srcdir)/pipeline.c
-HDRS=$(srcdir)/pipeline.h
-
-GROFF_OPTS_OUTPUT=\
-  groff_opts_no_arg.txt \
-  groff_opts_with_arg.txt
-
-MOSTLYCLEANADD=groff_opts.tmp $(GROFF_OPTS_OUTPUT)
-
-RM=rm -f
-
-all: $(srcdir)/groff.cpp groff_opts.tmp $(GROFF_OPTS_OUTPUT)
-
-groff_opts.tmp: $(srcdir)/groff.cpp
-	@$(GREP) -e ':.*:.*:' $? | sed -e 's/[ \t",]//g' > $@
-	@echo -n 'groff options: '
-	@cat $@
-
-groff_opts_no_arg.txt: groff_opts.tmp
-	@sed -e 's/[a-zA-Z]://g' $? > $@
-	@echo -n 'no arg: '
-	@cat $@
-
-groff_opts_with_arg.txt: groff_opts_no_arg.txt
-	@sed "s/[`cat $?`:]//g" groff_opts.tmp > $@
-	@echo -n 'with arg: '
-	@cat $@
-
-install_data: $(GROFF_OPTS_OUTPUT)
-	-test -d $(DESTDIR)$(libprogramdir) \
-	  || $(mkinstalldirs) $(DESTDIR)$(libprogramdir)
-	for f in  $(GROFF_OPTS_OUTPUT); do \
-	  $(RM) $(DESTDIR)$(libprogramdir)/$$f; \
-	  $(INSTALL_SCRIPT) $$f $(DESTDIR)$(libprogramdir); \
-	done
-
-uninstall_sub:
-	-for f in $(GROFF_OPTS_OUTPUT); do \
-	  $(RM) $(DESTDIR)$(libprogramdir)/$$f;\
-	done
-# XXX This will be removed by `uninstall_dirs' in `$(top_srcdir)/Makefile.in'
-# XXX (And only from there it is successful on an empty directory)
-#	-d=$(DESTDIR)$(libprogramdir);\
-#	  if test -d $$d; then rmdir $$d; fi
-
-########################################################################
-# Emacs settings
-########################################################################
-#
-# Local Variables:
-# mode: makefile
-# End:
diff -Nuar groff-1.22.3.old/src/roff/grog/.gitignore groff-1.22.3/src/roff/grog/.gitignore
--- groff-1.22.3.old/src/roff/grog/.gitignore	1970-01-01 02:00:00.000000000 +0200
+++ groff-1.22.3/src/roff/grog/.gitignore	2015-04-23 20:57:03.000000000 +0300
@@ -0,0 +1,2 @@
+grog
+grog.n
diff -Nuar groff-1.22.3.old/src/roff/grog/grog.am groff-1.22.3/src/roff/grog/grog.am
--- groff-1.22.3.old/src/roff/grog/grog.am	1970-01-01 02:00:00.000000000 +0200
+++ groff-1.22.3/src/roff/grog/grog.am	2015-04-23 20:57:03.000000000 +0300
@@ -0,0 +1,49 @@
+# grog.am for `grog'
+#
+# File position: <groff-source>/src/roff/grog/grog.am
+#
+# Copyright (C) 1993-2014
+#   Free Software Foundation, Inc.
+#
+# This file is part of `grog' which is part of `groff'.
+#
+# `groff' is free software; you can redistribute it and/or modify it
+# under the terms of the GNU General Public License as published by
+# the Free Software Foundation, either version 3 of the License, or
+# (at your option) any later version.
+#
+# `groff' is distributed in the hope that it will be useful, but
+# WITHOUT ANY WARRANTY; without even the implied warranty of
+# MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the GNU
+# General Public License for more details.
+#
+# You should have received a copy of the GNU General Public License
+# along with this program. If not, see <http://www.gnu.org/licenses/>.
+
+grog_srcdir = $(top_srcdir)/src/roff/grog
+bin_SCRIPTS += grog
+GROG = src/roff/grog/subs.pl
+
+# grog_dir is defined by a m4 macro
+grogdir = $(grog_dir)
+dist_grog_DATA = $(GROG)
+man1_MANS += src/roff/grog/grog.n
+EXTRA_DIST += \
+  src/roff/grog/grog.man \
+  src/roff/grog/grog.pl
+
+# Perl version works for all parts of `groff'.
+
+grog: $(grog_srcdir)/grog.pl $(GROG) $(SH_DEPS_SED_SCRIPT)
+	$(RM) $@
+	sed -f "$(SH_DEPS_SED_SCRIPT)" \
+	    -e "1s|^\(#! \).*perl|\\1$(PERL)|" \
+	    -e "s|[@]g[@]|$(g)|g" \
+	    -e "s|[@]BINDIR[@]|$(DESTDIR)$(bindir)|g" \
+	    -e "s|[@]libdir[@]|$(DESTDIR)$(libdir)|g" \
+	    -e "s|[@]EGREP[@]|$(EGREP)|g" \
+	    -e "s|[@]VERSION[@]|$(VERSION)|" \
+	    -e "s|[@]grog_dir[@]|$(grog_dir)|" \
+	    -e "$(SH_SCRIPT_SED_CMD)" \
+	    $(grog_srcdir)/grog.pl >$@
+	chmod +x $@
diff -Nuar groff-1.22.3.old/src/roff/grog/grog.man groff-1.22.3/src/roff/grog/grog.man
--- groff-1.22.3.old/src/roff/grog/grog.man	2014-11-04 10:38:35.522520284 +0200
+++ groff-1.22.3/src/roff/grog/grog.man	2015-04-23 20:57:03.000000000 +0300
@@ -12,7 +12,7 @@
 .\" --------------------------------------------------------------------
 .
 .de co
-Copyright \[co] 1989-2014 Free Software Foundation, Inc.
+Copyright \(co 1989-2014 Free Software Foundation, Inc.
 
 This file is part of grog, which is part of groff, a free software
 project.  You can redistribute it and/or modify it under the terms of
@@ -48,12 +48,12 @@
 .\" --------------------------------------------------------------------
 .
 .\" Ellipsis ...
-.ie t .ds EL \fS\N'188'\fP
-.el .ds EL \&.\|.\|.\&\
+.ie t .ds EL \fS\N'188'\fP\"
+.el .ds EL \&.\|.\|.\&\"
 .\" called with \*(EL
 .
 .\" Bullet
-.ie t .ds BU \[bu]
+.ie t .ds BU \(bu
 .el .ds BU *
 .\" used in `.IP \*(BU 2m' (former .Topic)
 .
@@ -513,12 +513,12 @@
 .RS
 Man-pages of section 1 can be viewed with either
 .RS
-\[Do]
+\(Do
 .BI man " name"
 .RE
 for text mode or
 .RS
-\[Do]
+\(Do
 .BI groffer " name"
 .RE
 for graphical mode (default is PDF mode).
@@ -535,12 +535,12 @@
 .RS
 Man-pages of section 7 can be viewed with either with
 .RS
-\[Do]
+\(Do
 .BI "man 7 " name
 .RE
 for text mode or
 .RS
-\[Do]
+\(Do
 .BI "groffer 7 " name
 .RE
 for graphical mode (default is PDF mode).
diff -Nuar groff-1.22.3.old/src/roff/grog/Makefile.sub groff-1.22.3/src/roff/grog/Makefile.sub
--- groff-1.22.3.old/src/roff/grog/Makefile.sub	2014-11-04 10:38:35.523520271 +0200
+++ groff-1.22.3/src/roff/grog/Makefile.sub	1970-01-01 02:00:00.000000000 +0200
@@ -1,79 +0,0 @@
-# Makefile.sub for `grog'
-
-# File position: <groff-source>/src/roff/grog/Makefile.sub
-
-# Copyright (C) 1993-2014  Free Software Foundation, Inc.
-
-# This file is part of `grog' which is part of `groff'.
-
-# `groff' is free software; you can redistribute it and/or modify it
-# under the terms of the GNU General Public License as published by
-# the Free Software Foundation, either version 3 of the License, or
-# (at your option) any later version.
-
-# `groff' is distributed in the hope that it will be useful, but
-# WITHOUT ANY WARRANTY; without even the implied warranty of
-# MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the GNU
-# General Public License for more details.
-
-# You should have received a copy of the GNU General Public License
-# along with this program. If not, see <http://www.gnu.org/licenses/>.
-
-########################################################################
-
-MAN1=grog.n
-MOSTLYCLEANADD=grog $(MAN1)
-
-# not all make programs have $(RM) predefined.
-RM=rm -f
-
-all: grog $(MAN1)
-
-# lib .pl-files
-GROG=$(srcdir)/subs.pl
-GROG_=`echo $(GROG) | sed 's|$(srcdir)/||g'`
-
-
-# Perl version works for all parts of `groff'.
-
-grog: grog.pl $(GROG) $(SH_DEPS_SED_SCRIPT)
-	$(RM) $@
-	sed -f "$(SH_DEPS_SED_SCRIPT)" \
-	    -e "1s|^\(#! \).*perl|\\1$(PERL)|" \
-	    -e "s|@g@|$(g)|g" \
-	    -e "s|@BINDIR@|$(DESTDIR)$(bindir)|g" \
-	    -e "s|@grog_dir@|$(DESTDIR)$(grog_dir)|g" \
-	    -e "s|@EGREP@|$(EGREP)|g" \
-	    -e "s|@VERSION@|$(version)$(revision)|" \
-	    -e "$(SH_SCRIPT_SED_CMD)" \
-	    $(srcdir)/grog.pl >$@
-	chmod +x $@
-
-.PHONY: install_data
-install_data: grog
-	-test -d $(DESTDIR)$(bindir) || $(mkinstalldirs) $(DESTDIR)$(bindir)
-	$(RM) $(DESTDIR)$(bindir)/grog
-	$(INSTALL_SCRIPT) grog $(DESTDIR)$(bindir)/grog
-	-test -d $(DESTDIR)$(grog_dir) || $(mkinstalldirs) $(DESTDIR)$(grog_dir)
-	for f in $(GROG_); do \
-	  $(RM) $(DESTDIR)$(grog_dir)/$$f; \
-	  $(INSTALL_SCRIPT) $(srcdir)/$$f $(DESTDIR)$(grog_dir)/$$f; \
-	done
-
-.PHONY: uninstall_data
-uninstall_sub:
-	$(RM) $(DESTDIR)$(bindir)/grog
-	-for f in $(GROG_); do \
-	  $(RM) $(DESTDIR)$(grog_dir)/$$f; \
-	done
-	-d=$(DESTDIR)$(grog_dir);\
-	  if test -d $$d; then rmdir $$d; fi
-
-
-########################################################################
-# Emacs settings
-########################################################################
-#
-# Local Variables:
-# mode: makefile
-# End:
diff -Nuar groff-1.22.3.old/src/roff/nroff/.gitignore groff-1.22.3/src/roff/nroff/.gitignore
--- groff-1.22.3.old/src/roff/nroff/.gitignore	1970-01-01 02:00:00.000000000 +0200
+++ groff-1.22.3/src/roff/nroff/.gitignore	2015-04-23 20:57:03.000000000 +0300
@@ -0,0 +1,2 @@
+nroff
+nroff.n
diff -Nuar groff-1.22.3.old/src/roff/nroff/Makefile.sub groff-1.22.3/src/roff/nroff/Makefile.sub
--- groff-1.22.3.old/src/roff/nroff/Makefile.sub	2014-11-04 10:38:35.526520234 +0200
+++ groff-1.22.3/src/roff/nroff/Makefile.sub	1970-01-01 02:00:00.000000000 +0200
@@ -1,53 +0,0 @@
-# Makefile.sub for `src roff nroff'
-#
-# File position: <groff-source>/src/roff/nroff/Makefile.sub
-#
-# Copyright (C) 2014  Free Software Foundation, Inc.
-#
-# This file is part of `font utf8' which is part of `groff'.
-#
-# `groff' is free software; you can redistribute it and/or modify it
-# under the terms of the GNU General Public License as published by
-# the Free Software Foundation, either version 2 of the License, or
-# (at your option) any later version.
-#
-# `groff' is distributed in the hope that it will be useful, but
-# WITHOUT ANY WARRANTY; without even the implied warranty of
-# MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the GNU
-# General Public License for more details.
-#
-# You should have received a copy of the GNU General Public License
-# along with this program. If not, see
-# <http://www.gnu.org/licenses/gpl-2.0.html>.
-#
-########################################################################
-
-MAN1=nroff.n
-NAMEPREFIX=$(g)
-MOSTLYCLEANADD=nroff
-RM=rm -f
-
-all: nroff
-
-nroff: nroff.sh $(SH_DEPS_SED_SCRIPT)
-	$(RM) $@
-	sed -f $(SH_DEPS_SED_SCRIPT) \
-	    -e $(SH_SCRIPT_SED_CMD) \
-	    -e "s|@VERSION@|$(version)$(revision)|" $(srcdir)/nroff.sh >$@
-	chmod +x $@
-
-install_data: nroff
-	-test -d $(DESTDIR)$(bindir) || $(mkinstalldirs) $(DESTDIR)$(bindir)
-	$(RM) $(DESTDIR)$(bindir)/$(NAMEPREFIX)nroff
-	$(INSTALL_SCRIPT) nroff $(DESTDIR)$(bindir)/$(NAMEPREFIX)nroff
-
-uninstall_sub:
-	$(RM) $(DESTDIR)$(bindir)/$(NAMEPREFIX)nroff
-
-########################################################################
-# Emacs settings
-########################################################################
-#
-# Local Variables:
-# mode: makefile
-# End:
diff -Nuar groff-1.22.3.old/src/roff/nroff/nroff.am groff-1.22.3/src/roff/nroff/nroff.am
--- groff-1.22.3.old/src/roff/nroff/nroff.am	1970-01-01 02:00:00.000000000 +0200
+++ groff-1.22.3/src/roff/nroff/nroff.am	2015-04-23 20:57:03.000000000 +0300
@@ -0,0 +1,31 @@
+# Copyright (C) 2014
+#      Free Software Foundation, Inc.
+# 
+# This file is part of groff.
+#
+# groff is free software; you can redistribute it and/or modify it under
+# the terms of the GNU General Public License as published by the Free
+# Software Foundation, either version 3 of the License, or
+# (at your option) any later version.
+#
+# groff is distributed in the hope that it will be useful, but WITHOUT ANY
+# WARRANTY; without even the implied warranty of MERCHANTABILITY or
+# FITNESS FOR A PARTICULAR PURPOSE.  See the GNU General Public License
+# for more details.
+#
+# You should have received a copy of the GNU General Public License
+# along with this program. If not, see <http://www.gnu.org/licenses/>.
+
+prefixexecbin_SCRIPTS += nroff
+nroff_srcdir = $(top_srcdir)/src/roff/nroff
+PREFIXMAN1 += src/roff/nroff/nroff.n
+EXTRA_DIST += \
+  src/roff/nroff/nroff.man \
+  src/roff/nroff/nroff.sh
+
+nroff: $(nroff_srcdir)/nroff.sh $(SH_DEPS_SED_SCRIPT)
+	rm -f $@
+	sed -f $(SH_DEPS_SED_SCRIPT) \
+	    -e $(SH_SCRIPT_SED_CMD) \
+	    -e "s|[@]VERSION[@]|$(VERSION)|" $(nroff_srcdir)/nroff.sh >$@
+	chmod +x $@
diff -Nuar groff-1.22.3.old/src/roff/nroff/nroff.man groff-1.22.3/src/roff/nroff/nroff.man
--- groff-1.22.3.old/src/roff/nroff/nroff.man	2014-11-04 10:38:35.526520234 +0200
+++ groff-1.22.3/src/roff/nroff/nroff.man	2015-04-23 20:57:03.000000000 +0300
@@ -8,7 +8,7 @@
 .\" --------------------------------------------------------------------
 .
 .de co
-Copyright \[co] 1989-2014 Free Software Foundation, Inc.
+Copyright \(co 1989-2014 Free Software Foundation, Inc.
 
 Permission is granted to make and distribute verbatim copies of
 this manual provided the copyright notice and this permission notice
@@ -78,7 +78,7 @@
 .BR nroff
 to select the output encoding emitted by
 .BR grotty ,
-groff\[aq]s TTY output device.
+groff\(aqs TTY output device.
 .
 If neither the
 .B GROFF_TYPESETTER
@@ -108,7 +108,7 @@
 .B \-c
 options
 are equivalent to
-.BR grotty \[aq]s
+.BR grotty \(aqs
 options
 .B \-h
 (using tabs in the output) and
@@ -168,7 +168,7 @@
 .B GROFF_TYPESETTER
 The default device for
 .BR groff .
-If not set (which is the normal case), it defaults to \[oq]ps\[cq].
+If not set (which is the normal case), it defaults to \(oqps\(cq.
 .
 .TP
 .SM
@@ -177,7 +177,7 @@
 .B groff
 executable before searching in PATH.
 .
-If unset, \[oq]@BINDIR@\[cq] is used.
+If unset, \(oq@BINDIR@\(cq is used.
 .
 .
 .\" --------------------------------------------------------------------
diff -Nuar groff-1.22.3.old/src/roff/troff/.gitignore groff-1.22.3/src/roff/troff/.gitignore
--- groff-1.22.3.old/src/roff/troff/.gitignore	1970-01-01 02:00:00.000000000 +0200
+++ groff-1.22.3/src/roff/troff/.gitignore	2015-04-23 20:57:03.000000000 +0300
@@ -0,0 +1,4 @@
+Makefile.dep
+majorminor.cpp
+troff
+troff.n
diff -Nuar groff-1.22.3.old/src/roff/troff/Makefile.sub groff-1.22.3/src/roff/troff/Makefile.sub
--- groff-1.22.3.old/src/roff/troff/Makefile.sub	2014-11-04 10:38:35.203524272 +0200
+++ groff-1.22.3/src/roff/troff/Makefile.sub	1970-01-01 02:00:00.000000000 +0200
@@ -1,82 +0,0 @@
-# Makefile.sub for `src roff troff'
-#
-# File position: <groff-source>/src/roff/troff/Makefile.sub
-#
-# Copyright (C) 2014  Free Software Foundation, Inc.
-#
-# This file is part of `font utf8' which is part of `groff'.
-#
-# `groff' is free software; you can redistribute it and/or modify it
-# under the terms of the GNU General Public License as published by
-# the Free Software Foundation, either version 2 of the License, or
-# (at your option) any later version.
-#
-# `groff' is distributed in the hope that it will be useful, but
-# WITHOUT ANY WARRANTY; without even the implied warranty of
-# MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the GNU
-# General Public License for more details.
-#
-# You should have received a copy of the GNU General Public License
-# along with this program. If not, see
-# <http://www.gnu.org/licenses/gpl-2.0.html>.
-#
-########################################################################
-
-PROG=troff$(EXEEXT)
-MAN1=troff.n
-XLIBS=$(LIBGROFF) $(LIBGNU)
-MLIB=$(LIBM)
-OBJS=\
-  dictionary.$(OBJEXT) \
-  div.$(OBJEXT) \
-  env.$(OBJEXT) \
-  input.$(OBJEXT) \
-  majorminor.$(OBJEXT) \
-  mtsm.$(OBJEXT) \
-  node.$(OBJEXT) \
-  number.$(OBJEXT) \
-  reg.$(OBJEXT)
-CCSRCS=\
-  $(srcdir)/dictionary.cpp \
-  $(srcdir)/div.cpp \
-  $(srcdir)/env.cpp \
-  $(srcdir)/input.cpp \
-  majorminor.cpp \
-  $(srcdir)/mtsm.cpp \
-  $(srcdir)/node.cpp \
-  $(srcdir)/number.cpp \
-  $(srcdir)/reg.cpp
-HDRS=\
-  $(srcdir)/charinfo.h \
-  $(srcdir)/dictionary.h \
-  $(srcdir)/div.h \
-  $(srcdir)/env.h \
-  $(srcdir)/hvunits.h \
-  $(srcdir)/input.h \
-  $(srcdir)/mtsm.h \
-  $(srcdir)/node.h \
-  $(srcdir)/reg.h \
-  $(srcdir)/request.h \
-  $(srcdir)/token.h \
-  $(srcdir)/troff.h
-GENSRCS=majorminor.cpp
-NAMEPREFIX=$(g)
-RM=rm -f
-
-majorminor.cpp: $(top_srcdir)/VERSION $(top_srcdir)/REVISION
-	@echo Making $@
-	@$(RM) $@
-	@echo const char \*major_version = \
-	  \"`sed -e 's/^\([^.]*\)\..*$$/\1/' $(top_srcdir)/VERSION`\"\; >$@
-	@echo const char \*minor_version = \
-	   \"`sed -e 's/^[^.]*\.\([0-9]*\).*$$/\1/' $(top_srcdir)/VERSION`\"\; \
-	   >>$@
-	@echo const char \*revision = \"`cat $(top_srcdir)/REVISION`\"\; >>$@
-
-########################################################################
-# Emacs settings
-########################################################################
-#
-# Local Variables:
-# mode: makefile
-# End:
diff -Nuar groff-1.22.3.old/src/roff/troff/troff.am groff-1.22.3/src/roff/troff/troff.am
--- groff-1.22.3.old/src/roff/troff/troff.am	1970-01-01 02:00:00.000000000 +0200
+++ groff-1.22.3/src/roff/troff/troff.am	2015-04-23 20:57:03.000000000 +0300
@@ -0,0 +1,61 @@
+# Copyright (C) 2014
+#      Free Software Foundation, Inc.
+# 
+# This file is part of groff.
+#
+# groff is free software; you can redistribute it and/or modify it under
+# the terms of the GNU General Public License as published by the Free
+# Software Foundation, either version 3 of the License, or
+# (at your option) any later version.
+#
+# groff is distributed in the hope that it will be useful, but WITHOUT ANY
+# WARRANTY; without even the implied warranty of MERCHANTABILITY or
+# FITNESS FOR A PARTICULAR PURPOSE.  See the GNU General Public License
+# for more details.
+#
+# You should have received a copy of the GNU General Public License
+# along with this program. If not, see <http://www.gnu.org/licenses/>.
+
+prefixexecbin_PROGRAMS += troff
+PREFIXMAN1 += src/roff/troff/troff.n
+EXTRA_DIST += \
+  src/roff/troff/column.cpp \
+  src/roff/troff/troff.man \
+  src/roff/troff/TODO
+troff_LDADD = libgroff.a lib/libgnu.a $(LIBM)
+troff_SOURCES = \
+  src/roff/troff/dictionary.cpp \
+  src/roff/troff/div.cpp \
+  src/roff/troff/env.cpp \
+  src/roff/troff/input.cpp \
+  src/roff/troff/mtsm.cpp \
+  src/roff/troff/node.cpp \
+  src/roff/troff/number.cpp \
+  src/roff/troff/reg.cpp \
+  src/roff/troff/env.h \
+  src/roff/troff/node.h \
+  src/roff/troff/troff.h \
+  src/roff/troff/div.h \
+  src/roff/troff/reg.h \
+  src/roff/troff/dictionary.h \
+  src/roff/troff/input.h \
+  src/roff/troff/mtsm.h \
+  src/roff/troff/token.h \
+  src/roff/troff/charinfo.h \
+  src/roff/troff/request.h \
+  src/roff/troff/hvunits.h
+
+nodist_troff_SOURCES = src/roff/troff/majorminor.cpp 
+
+src/roff/troff/input.$(OBJEXT): defs.h
+CLEANFILES += src/roff/troff/majorminor.cpp
+
+src/roff/troff/majorminor.cpp: $(top_srcdir)/VERSION $(top_srcdir)/REVISION
+	@echo Making $@
+	@$(RM) $@
+	@echo const char \*major_version = \
+	  \"`sed -e 's/^\([^.]*\)\..*$$/\1/' $(top_srcdir)/VERSION`\"\; >$@
+	@echo const char \*minor_version = \
+	   \"`sed -e 's/^[^.]*\.\([0-9]*\).*$$/\1/' $(top_srcdir)/VERSION`\"\; \
+	   >>$@
+	@echo const char \*revision = \"`cat $(top_srcdir)/REVISION`\"\; >>$@
diff -Nuar groff-1.22.3.old/src/roff/troff/troff.man groff-1.22.3/src/roff/troff/troff.man
--- groff-1.22.3.old/src/roff/troff/troff.man	2014-11-04 10:38:35.204524259 +0200
+++ groff-1.22.3/src/roff/troff/troff.man	2015-04-23 20:57:03.000000000 +0300
@@ -11,7 +11,7 @@
 .\" --------------------------------------------------------------------
 .
 .de co
-Copyright \[co] 1989-2014 Free Software Foundation, Inc.
+Copyright \(co 1989-2014 Free Software Foundation, Inc.
 
 This file is part of groff, the GNU roff type-setting system, which
 is a GNU free software project..
@@ -98,7 +98,7 @@
 This backtrace should help track down the cause of the error.
 .
 The line numbers given in the backtrace may not always be correct, for
-.BR @g@troff \[aq]s
+.BR @g@troff \(aqs
 idea of line numbers gets confused by
 .B as
 or
@@ -131,7 +131,7 @@
 Inhibit all error messages of
 .BR @g@troff .
 .
-Note that this doesn\[aq]t affect messages output to standard error by
+Note that this doesn\(aqt affect messages output to standard error by
 macro packages using the
 .B tm
 or
@@ -188,7 +188,7 @@
 Read in the file
 .IB name .tmac\fR.
 .
-If it isn\[aq]t found, try
+If it isn\(aqt found, try
 .BI tmac. name
 instead.
 .
@@ -253,7 +253,7 @@
 .
 .TP
 .B \-R
-Don\[aq]t load
+Don\(aqt load
 .B troffrc
 and
 .BR troffrc-end .
@@ -467,7 +467,7 @@
 .TP
 .BR right-brace "\t4096"
 Use of
-.B \[rs]}
+.B \(rs}
 where a number was expected.
 .
 .TP
diff -Nuar groff-1.22.3.old/src/utils/addftinfo/addftinfo.am groff-1.22.3/src/utils/addftinfo/addftinfo.am
--- groff-1.22.3.old/src/utils/addftinfo/addftinfo.am	1970-01-01 02:00:00.000000000 +0200
+++ groff-1.22.3/src/utils/addftinfo/addftinfo.am	2015-04-23 20:57:03.000000000 +0300
@@ -0,0 +1,30 @@
+# Automake rules for `src utils addftinfo'
+#
+# File position: <groff-source>/src/utils/addftinfo/addftinfo.am
+#
+# Copyright (C) 2014  Free Software Foundation, Inc.
+#
+# `groff' is free software; you can redistribute it and/or modify it
+# under the terms of the GNU General Public License as published by
+# the Free Software Foundation, either version 2 of the License, or
+# (at your option) any later version.
+#
+# `groff' is distributed in the hope that it will be useful, but
+# WITHOUT ANY WARRANTY; without even the implied warranty of
+# MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the GNU
+# General Public License for more details.
+#
+# You should have received a copy of the GNU General Public License
+# along with this program. If not, see
+# <http://www.gnu.org/licenses/gpl-2.0.html>.
+#
+########################################################################
+
+bin_PROGRAMS += addftinfo
+man1_MANS += src/utils/addftinfo/addftinfo.n
+EXTRA_DIST += src/utils/addftinfo/addftinfo.man
+addftinfo_LDADD = libgroff.a
+addftinfo_SOURCES = \
+  src/utils/addftinfo/addftinfo.cpp \
+  src/utils/addftinfo/guess.cpp \
+  src/utils/addftinfo/guess.h
diff -Nuar groff-1.22.3.old/src/utils/addftinfo/addftinfo.man groff-1.22.3/src/utils/addftinfo/addftinfo.man
--- groff-1.22.3.old/src/utils/addftinfo/addftinfo.man	2014-11-04 10:38:35.310522934 +0200
+++ groff-1.22.3/src/utils/addftinfo/addftinfo.man	2015-04-23 20:57:03.000000000 +0300
@@ -8,7 +8,7 @@
 .\" --------------------------------------------------------------------
 .
 .de co
-Copyright \[co] 1989-2014 Free Software Foundation, Inc.
+Copyright \(co 1989-2014 Free Software Foundation, Inc.
 
 Permission is granted to make and distribute verbatim copies of
 this manual provided the copyright notice and this permission notice
@@ -31,8 +31,8 @@
 .\" --------------------------------------------------------------------
 .
 .\" Ellipsis ...
-.ie t .ds EL \fS\N'188'\fP
-.el .ds EL \&.\|.\|.\&\
+.ie t .ds EL \fS\N'188'\fP\"
+.el .ds EL \&.\|.\|.\&\"
 .\" called with \*(EL
 .
 .
@@ -88,7 +88,7 @@
 .SH OPTIONS
 .\" --------------------------------------------------------------------
 .
-.B \[en]v
+.B \-v
 prints the version number.
 .
 .
@@ -107,35 +107,35 @@
 must be one of:
 .
 .TP
-.B \[en]x\-height
+.B \-x\-height
 The height of lowercase letters without ascenders such as x.
 .
 .TP
-.B \[en]fig-height
+.B \-fig\-height
 The height of figures (digits).
 .
 .TP
-.B \[en]asc-height
+.B \-asc\-height
 The height of characters with ascenders, such as b, d or l.
 .
 .TP
-.B \[en]body\-height
+.B \-body\-height
 The height of characters such as parentheses.
 .
 .TP
-.B \[en]cap-height
+.B \-cap\-height
 The height of uppercase letters such as A.
 .
 .TP
-.B \[en]comma\-depth
+.B \-comma\-depth
 The depth of a comma.
 .
 .TP
-.B \[en]desc\-depth
+.B \-desc\-depth
 The depth of characters with descenders, such as p, q, or y.
 .
 .TP
-.B \[en]body\-depth
+.B \-body\-depth
 The depth of characters such as parentheses.
 .
 .
diff -Nuar groff-1.22.3.old/src/utils/addftinfo/.gitignore groff-1.22.3/src/utils/addftinfo/.gitignore
--- groff-1.22.3.old/src/utils/addftinfo/.gitignore	1970-01-01 02:00:00.000000000 +0200
+++ groff-1.22.3/src/utils/addftinfo/.gitignore	2015-04-23 20:57:03.000000000 +0300
@@ -0,0 +1,3 @@
+Makefile.dep
+addftinfo
+addftinfo.n
diff -Nuar groff-1.22.3.old/src/utils/addftinfo/Makefile.sub groff-1.22.3/src/utils/addftinfo/Makefile.sub
--- groff-1.22.3.old/src/utils/addftinfo/Makefile.sub	2014-11-04 10:38:35.310522934 +0200
+++ groff-1.22.3/src/utils/addftinfo/Makefile.sub	1970-01-01 02:00:00.000000000 +0200
@@ -1,43 +0,0 @@
-# Makefile.sub for `src utils addftinfo'
-#
-# File position: <groff-source>/src/utils/addftinfo/Makefile.sub
-#
-# Copyright (C) 2014  Free Software Foundation, Inc.
-#
-# This file is part of `font utf8' which is part of `groff'.
-#
-# `groff' is free software; you can redistribute it and/or modify it
-# under the terms of the GNU General Public License as published by
-# the Free Software Foundation, either version 2 of the License, or
-# (at your option) any later version.
-#
-# `groff' is distributed in the hope that it will be useful, but
-# WITHOUT ANY WARRANTY; without even the implied warranty of
-# MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the GNU
-# General Public License for more details.
-#
-# You should have received a copy of the GNU General Public License
-# along with this program. If not, see
-# <http://www.gnu.org/licenses/gpl-2.0.html>.
-#
-########################################################################
-
-PROG=addftinfo$(EXEEXT)
-MAN1=addftinfo.n
-XLIBS=$(LIBGROFF)
-OBJS=\
-  addftinfo.$(OBJEXT) \
-  guess.$(OBJEXT)
-CCSRCS=\
-  $(srcdir)/addftinfo.cpp \
-  $(srcdir)/guess.cpp
-HDRS=\
-  $(srcdir)/guess.h
-
-########################################################################
-# Emacs settings
-########################################################################
-#
-# Local Variables:
-# mode: makefile
-# End:
diff -Nuar groff-1.22.3.old/src/utils/afmtodit/afmtodit.am groff-1.22.3/src/utils/afmtodit/afmtodit.am
--- groff-1.22.3.old/src/utils/afmtodit/afmtodit.am	1970-01-01 02:00:00.000000000 +0200
+++ groff-1.22.3/src/utils/afmtodit/afmtodit.am	2015-04-23 20:57:03.000000000 +0300
@@ -0,0 +1,49 @@
+# Automake rules for `src utils afmtodit'
+#
+# File position: <groff-source>/src/utils/afmtodit/afmtdodit.am
+#
+# Copyright (C) 2013-2014  Free Software Foundation, Inc.
+#
+# This file is part of groff.
+#
+# groff is free software; you can redistribute it and/or modify it under
+# the terms of the GNU General Public License as published by the Free
+# Software Foundation, either version 3 of the License, or
+# (at your option) any later version.
+#
+# groff is distributed in the hope that it will be useful, but WITHOUT ANY
+# WARRANTY; without even the implied warranty of MERCHANTABILITY or
+# FITNESS FOR A PARTICULAR PURPOSE.  See the GNU General Public License
+# for more details.
+#
+# You should have received a copy of the GNU General Public License
+# along with this program. If not, see <http://www.gnu.org/licenses/>.
+#
+########################################################################
+
+afmtodit_srcdir = $(top_srcdir)/src/utils/afmtodit
+
+bin_SCRIPTS += afmtodit
+man1_MANS += src/utils/afmtodit/afmtodit.n
+EXTRA_DIST += \
+  src/utils/afmtodit/afmtodit.man \
+  src/utils/afmtodit/afmtodit.pl \
+  src/utils/afmtodit/afmtodit.tables \
+  src/utils/afmtodit/make-afmtodit-tables
+
+afmtodit: $(afmtodit_srcdir)/afmtodit.pl $(afmtodit_srcdir)/afmtodit.tables
+	if test -n "$(PERL)"; then \
+	  sed -e "s|/usr/bin/perl|$(PERL)|" \
+	      -e "s|[@]VERSION[@]|$(VERSION)|" \
+	      -e "s|[@]FONTDIR[@]|$(fontdir)|" \
+	      -e "/[@]afmtodit.tables[@]/ r $(afmtodit_srcdir)/afmtodit.tables" \
+	      -e "/[@]afmtodit.tables[@]/ d" \
+	      $(afmtodit_srcdir)/afmtodit.pl >afmtodit; \
+	else \
+	  sed -e "s|[@]VERSION[@]|$(VERSION)|" \
+	      -e "s|[@]FONTDIR[@]|$(fontdir)|" \
+	      -e "/[@]afmtodit.tables[@]/ r $(afmtodit_srcdir)/afmtodit.tables" \
+	      -e "/[@]afmtodit.tables[@]/ d" \
+	      $(afmtodit_srcdir)/afmtodit.pl >afmtodit; \
+	fi
+	chmod +x afmtodit
diff -Nuar groff-1.22.3.old/src/utils/afmtodit/afmtodit.man groff-1.22.3/src/utils/afmtodit/afmtodit.man
--- groff-1.22.3.old/src/utils/afmtodit/afmtodit.man	2014-11-04 10:38:35.421521547 +0200
+++ groff-1.22.3/src/utils/afmtodit/afmtodit.man	2015-04-23 20:57:03.000000000 +0300
@@ -7,7 +7,7 @@
 .\" Leagal Terms
 .
 .de co
-Copyright \[co] 1989-2014 Free Software Foundation, Inc.
+Copyright \(co 1989-2014 Free Software Foundation, Inc.
 
 Permission is granted to make and distribute verbatim copies of
 this manual provided the copyright notice and this permission notice
@@ -115,8 +115,8 @@
 .B #
 and blank lines are ignored.
 .
-If the file isn\[aq]t found in the current directory, it is searched
-in the \[oq]devps/generate\[cq] subdirectory of the default font
+If the file isn\(aqt found in the current directory, it is searched
+in the \(oqdevps/generate\(cq subdirectory of the default font
 directory.
 .
 .
@@ -134,7 +134,7 @@
 escape sequence in
 .BR troff .
 .
-In particular, this is true for glyph variants like \[oq]foo.bar\[cq];
+In particular, this is true for glyph variants like \(oqfoo.bar\(cq;
 all glyph names containing one or more periods are mapped to unnamed
 entities.
 .
@@ -143,7 +143,7 @@
 is not specified, the encoding defined in the AFM file (i.e., entries
 with non-negative character codes) is used.
 .
-Please refer to section \[oq]Using Symbols\[cq] in the groff info file
+Please refer to section \(oqUsing Symbols\(cq in the groff info file
 which describes how groff glyph names are constructed.
 .
 .
@@ -154,7 +154,7 @@
 code used in the AFM file in the unlikely case that it is greater than
 255) in the groff font file.
 .
-Glyph indices of unencoded characters don\[aq]t have a specific order;
+Glyph indices of unencoded characters don\(aqt have a specific order;
 it is best to access them with glyph names only.
 .
 .
@@ -239,7 +239,7 @@
 rather than the default
 .BR DESC .
 .
-If not found in the current directory, the \[oq]devps\[qc]
+If not found in the current directory, the \(oqdevps\(cq
 subdirectory of the default font directory is searched (this is true
 for both the default device description file and a file given with
 option
@@ -255,7 +255,7 @@
 is described in
 .BR grops (@MAN1EXT@).
 .
-If not found in the current directory, the \[oq]devps\[cq]
+If not found in the current directory, the \(oqdevps\(cq
 subdirectory of the default font directory is searched.
 .
 .TP
@@ -270,7 +270,7 @@
 .I n
 thousandths of an em
 plus the amount by which the right edge of the character's bounding box
-is to the right of the character\[aq]s origin.
+is to the right of the character\(aqs origin.
 .
 If this would result in a negative italic correction, use a zero
 italic correction instead.
@@ -290,7 +290,7 @@
 .I n
 thousandths of an em
 plus the amount by which the left edge of the character's bounding box
-is to the left of the character\[aq]s origin.
+is to the left of the character\(aqs origin.
 .
 The left italic correction may be negative unless option
 .B \-m
@@ -387,7 +387,7 @@
 .
 .
 .LP
-The groff info file, section \[oq]Using Symbols\[cq].
+The groff info file, section \(oqUsing Symbols\(cq.
 .
 .
 .\" --------------------------------------------------------------------
diff -Nuar groff-1.22.3.old/src/utils/afmtodit/.gitignore groff-1.22.3/src/utils/afmtodit/.gitignore
--- groff-1.22.3.old/src/utils/afmtodit/.gitignore	1970-01-01 02:00:00.000000000 +0200
+++ groff-1.22.3/src/utils/afmtodit/.gitignore	2015-04-23 20:57:03.000000000 +0300
@@ -0,0 +1,2 @@
+afmtodit
+afmtodit.n
diff -Nuar groff-1.22.3.old/src/utils/afmtodit/Makefile.sub groff-1.22.3/src/utils/afmtodit/Makefile.sub
--- groff-1.22.3.old/src/utils/afmtodit/Makefile.sub	2014-11-04 10:38:35.422521534 +0200
+++ groff-1.22.3/src/utils/afmtodit/Makefile.sub	1970-01-01 02:00:00.000000000 +0200
@@ -1,61 +0,0 @@
-# Makefile.sub for `src utils afmtodit'
-#
-# File position: <groff-source>/src/utils/afmtodit/Makefile.sub
-#
-# Copyright (C) 2013-2014  Free Software Foundation, Inc.
-#
-# This file is part of groff.
-#
-# groff is free software; you can redistribute it and/or modify it under
-# the terms of the GNU General Public License as published by the Free
-# Software Foundation, either version 3 of the License, or
-# (at your option) any later version.
-#
-# groff is distributed in the hope that it will be useful, but WITHOUT ANY
-# WARRANTY; without even the implied warranty of MERCHANTABILITY or
-# FITNESS FOR A PARTICULAR PURPOSE.  See the GNU General Public License
-# for more details.
-#
-# You should have received a copy of the GNU General Public License
-# along with this program. If not, see <http://www.gnu.org/licenses/>.
-#
-########################################################################
-
-MAN1=afmtodit.n
-MOSTLYCLEANADD=afmtodit
-RM=rm -f
-
-all: afmtodit
-
-afmtodit: afmtodit.pl afmtodit.tables
-	if test -n "$(PERL)"; then \
-	  sed -e "s|/usr/bin/perl|$(PERL)|" \
-	      -e "s|@VERSION@|$(version)$(revision)|" \
-	      -e "s|@FONTDIR@|$(fontdir)|" \
-	      -e "/@afmtodit.tables@/ r $(srcdir)/afmtodit.tables" \
-	      -e "/@afmtodit.tables@/ d" \
-	      $(srcdir)/afmtodit.pl >afmtodit; \
-	else \
-	  sed -e "s|@VERSION@|$(version)$(revision)|" \
-	      -e "s|@FONTDIR@|$(fontdir)|" \
-	      -e "/@afmtodit.tables@/ r $(srcdir)/afmtodit.tables" \
-	      -e "/@afmtodit.tables@/ d" \
-	      $(srcdir)/afmtodit.pl >afmtodit; \
-	fi
-	chmod +x afmtodit
-
-install_data: afmtodit
-	-test -d $(DESTDIR)$(bindir) || $(mkinstalldirs) $(DESTDIR)$(bindir)
-	$(RM) $(DESTDIR)$(bindir)/afmtodit
-	$(INSTALL_SCRIPT) afmtodit $(DESTDIR)$(bindir)/afmtodit
-
-uninstall_sub:
-	$(RM) $(DESTDIR)$(bindir)/afmtodit
-
-########################################################################
-# Emacs settings
-########################################################################
-#
-# Local Variables:
-# mode: makefile
-# End:
diff -Nuar groff-1.22.3.old/src/utils/hpftodit/.gitignore groff-1.22.3/src/utils/hpftodit/.gitignore
--- groff-1.22.3.old/src/utils/hpftodit/.gitignore	1970-01-01 02:00:00.000000000 +0200
+++ groff-1.22.3/src/utils/hpftodit/.gitignore	2015-04-23 20:57:03.000000000 +0300
@@ -0,0 +1,3 @@
+Makefile.dep
+hpftodit
+hpftodit.n
diff -Nuar groff-1.22.3.old/src/utils/hpftodit/hpftodit.am groff-1.22.3/src/utils/hpftodit/hpftodit.am
--- groff-1.22.3.old/src/utils/hpftodit/hpftodit.am	1970-01-01 02:00:00.000000000 +0200
+++ groff-1.22.3/src/utils/hpftodit/hpftodit.am	2015-04-23 20:57:03.000000000 +0300
@@ -0,0 +1,29 @@
+# Automake rules for `src utils hpftodit'
+#
+# File position: <groff-source>/src/utils/hpftodit/hpftodit.am
+#
+# Copyright (C) 2014  Free Software Foundation, Inc.
+#
+# `groff' is free software; you can redistribute it and/or modify it
+# under the terms of the GNU General Public License as published by
+# the Free Software Foundation, either version 2 of the License, or
+# (at your option) any later version.
+#
+# `groff' is distributed in the hope that it will be useful, but
+# WITHOUT ANY WARRANTY; without even the implied warranty of
+# MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the GNU
+# General Public License for more details.
+#
+# You should have received a copy of the GNU General Public License
+# along with this program. If not, see
+# <http://www.gnu.org/licenses/gpl-2.0.html>.
+#
+########################################################################
+
+bin_PROGRAMS += hpftodit
+man1_MANS += src/utils/hpftodit/hpftodit.n
+EXTRA_DIST += src/utils/hpftodit/hpftodit.man
+hpftodit_LDADD = libgroff.a $(LIBM)
+hpftodit_SOURCES = \
+  src/utils/hpftodit/hpftodit.cpp \
+  src/utils/hpftodit/hpuni.cpp
diff -Nuar groff-1.22.3.old/src/utils/hpftodit/hpftodit.man groff-1.22.3/src/utils/hpftodit/hpftodit.man
--- groff-1.22.3.old/src/utils/hpftodit/hpftodit.man	2014-11-04 10:38:35.293523147 +0200
+++ groff-1.22.3/src/utils/hpftodit/hpftodit.man	2015-04-23 20:57:03.000000000 +0300
@@ -4,6 +4,10 @@
 hpftodit \- create font description files for use with groff \-Tlj4
 .
 .
+.do nr groff_C \n[.C]
+.cp 0
+.
+.
 .\" --------------------------------------------------------------------
 .\" Legal Terms
 .\" --------------------------------------------------------------------
@@ -380,6 +384,9 @@
 .co
 .
 .
+.cp \n[groff_C]
+.
+.
 .\" Local Variables:
 .\" mode: nroff
 .\" End:
diff -Nuar groff-1.22.3.old/src/utils/hpftodit/Makefile.sub groff-1.22.3/src/utils/hpftodit/Makefile.sub
--- groff-1.22.3.old/src/utils/hpftodit/Makefile.sub	2014-11-04 10:38:35.293523147 +0200
+++ groff-1.22.3/src/utils/hpftodit/Makefile.sub	1970-01-01 02:00:00.000000000 +0200
@@ -1,40 +0,0 @@
-# Makefile.sub for `src utils hpftodit'
-#
-# File position: <groff-source>/src/utils/hpftodit/Makefile.sub
-#
-# Copyright (C) 2014  Free Software Foundation, Inc.
-#
-# This file is part of `font utf8' which is part of `groff'.
-#
-# `groff' is free software; you can redistribute it and/or modify it
-# under the terms of the GNU General Public License as published by
-# the Free Software Foundation, either version 2 of the License, or
-# (at your option) any later version.
-#
-# `groff' is distributed in the hope that it will be useful, but
-# WITHOUT ANY WARRANTY; without even the implied warranty of
-# MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the GNU
-# General Public License for more details.
-#
-# You should have received a copy of the GNU General Public License
-# along with this program. If not, see
-# <http://www.gnu.org/licenses/gpl-2.0.html>.
-#
-########################################################################
-
-PROG=hpftodit$(EXEEXT)
-MAN1=hpftodit.n
-XLIBS=$(LIBGROFF)
-MLIB=$(LIBM)
-OBJS=hpftodit.$(OBJEXT) \
-     hpuni.$(OBJEXT)
-CCSRCS=$(srcdir)/hpftodit.cpp \
-       $(srcdir)/hpuni.cpp
-
-########################################################################
-# Emacs settings
-########################################################################
-#
-# Local Variables:
-# mode: makefile
-# End:
diff -Nuar groff-1.22.3.old/src/utils/indxbib/.gitignore groff-1.22.3/src/utils/indxbib/.gitignore
--- groff-1.22.3.old/src/utils/indxbib/.gitignore	1970-01-01 02:00:00.000000000 +0200
+++ groff-1.22.3/src/utils/indxbib/.gitignore	2015-04-23 20:57:03.000000000 +0300
@@ -0,0 +1,3 @@
+Makefile.dep
+indxbib
+indxbib.n
diff -Nuar groff-1.22.3.old/src/utils/indxbib/indxbib.am groff-1.22.3/src/utils/indxbib/indxbib.am
--- groff-1.22.3.old/src/utils/indxbib/indxbib.am	1970-01-01 02:00:00.000000000 +0200
+++ groff-1.22.3/src/utils/indxbib/indxbib.am	2015-04-23 20:57:03.000000000 +0300
@@ -0,0 +1,51 @@
+# Copyright (C) 2014
+#      Free Software Foundation, Inc.
+# 
+# This file is part of groff.
+#
+# groff is free software; you can redistribute it and/or modify it under
+# the terms of the GNU General Public License as published by the Free
+# Software Foundation, either version 3 of the License, or
+# (at your option) any later version.
+#
+# groff is distributed in the hope that it will be useful, but WITHOUT ANY
+# WARRANTY; without even the implied warranty of MERCHANTABILITY or
+# FITNESS FOR A PARTICULAR PURPOSE.  See the GNU General Public License
+# for more details.
+#
+# You should have received a copy of the GNU General Public License
+# along with this program. If not, see <http://www.gnu.org/licenses/>.
+
+indxbib_srcdir = $(top_srcdir)/src/utils/indxbib
+prefixexecbin_PROGRAMS += indxbib
+indxbib_SOURCES = \
+  src/utils/indxbib/indxbib.cpp \
+  src/utils/indxbib/signal.c
+src/utils/indxbib/indxbib.$(OBJEXT): defs.h
+indxbib_LDADD = libbib.a libgroff.a $(LIBM)
+PREFIXMAN1 += src/utils/indxbib/indxbib.n
+EXTRA_DIST += \
+  src/utils/indxbib/indxbib.man \
+  src/utils/indxbib/eign
+
+install-data-local: install_indxbib
+install_indxbib: $(indxbib_srcdir)/eign
+	-test -d $(DESTDIR)$(datadir) \
+	  || $(mkinstalldirs) $(DESTDIR)$(datadir)
+	-test -d $(DESTDIR)$(dataprogramdir) \
+	  || $(mkinstalldirs) $(DESTDIR)$(dataprogramdir)
+	-test -d $(DESTDIR)$(datasubdir) \
+	  || $(mkinstalldirs) $(DESTDIR)$(datasubdir)
+	if test -f /usr/lib/eign; then \
+	  rm -f $(DESTDIR)$(common_words_file); \
+	  ln -s /usr/lib/eign $(DESTDIR)$(common_words_file) 2>/dev/null \
+	    || ln /usr/lib/eign $(DESTDIR)$(common_words_file) 2>/dev/null \
+	    || cp /usr/lib/eign $(DESTDIR)$(common_words_file); \
+	else \
+	  rm -f $(DESTDIR)$(common_words_file); \
+	  $(INSTALL_DATA) $(indxbib_srcdir)/eign $(DESTDIR)$(common_words_file); \
+	fi
+
+uninstall-local: uninstall_indxbib
+uninstall_indxbib:
+	rm -f $(DESTDIR)$(common_words_file)
diff -Nuar groff-1.22.3.old/src/utils/indxbib/indxbib.man groff-1.22.3/src/utils/indxbib/indxbib.man
--- groff-1.22.3.old/src/utils/indxbib/indxbib.man	2014-11-04 10:38:35.301523047 +0200
+++ groff-1.22.3/src/utils/indxbib/indxbib.man	2015-04-23 20:57:03.000000000 +0300
@@ -4,7 +4,7 @@
 .
 .
 .de co
-Copyright \[co] 1989-2014 Free Software Foundation, Inc.
+Copyright \(co 1989-2014 Free Software Foundation, Inc.
 
 Permission is granted to make and distribute verbatim copies of
 this manual provided the copyright notice and this permission notice
@@ -167,7 +167,7 @@
 .
 .TP
 .BI \-i string
-Don\[aq]t index the contents of fields whose names are in
+Don\(aqt index the contents of fields whose names are in
 .IR string .
 .
 Initially
diff -Nuar groff-1.22.3.old/src/utils/indxbib/Makefile.sub groff-1.22.3/src/utils/indxbib/Makefile.sub
--- groff-1.22.3.old/src/utils/indxbib/Makefile.sub	2014-11-04 10:38:35.301523047 +0200
+++ groff-1.22.3/src/utils/indxbib/Makefile.sub	1970-01-01 02:00:00.000000000 +0200
@@ -1,65 +0,0 @@
-# Makefile.sub for `src utils indxbib'
-#
-# File position: <groff-source>/src/utils/indxbib/Makefile.sub
-#
-# Copyright (C) 2014  Free Software Foundation, Inc.
-#
-# This file is part of `font utf8' which is part of `groff'.
-#
-# `groff' is free software; you can redistribute it and/or modify it
-# under the terms of the GNU General Public License as published by
-# the Free Software Foundation, either version 2 of the License, or
-# (at your option) any later version.
-#
-# `groff' is distributed in the hope that it will be useful, but
-# WITHOUT ANY WARRANTY; without even the implied warranty of
-# MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the GNU
-# General Public License for more details.
-#
-# You should have received a copy of the GNU General Public License
-# along with this program. If not, see
-# <http://www.gnu.org/licenses/gpl-2.0.html>.
-#
-########################################################################
-
-PROG=indxbib$(EXEEXT)
-MAN1=indxbib.n
-XLIBS=$(LIBBIB) $(LIBGROFF)
-MLIB=$(LIBM)
-OBJS=\
-  indxbib.$(OBJEXT) \
-  signal.$(OBJEXT)
-CCSRCS=\
-  $(srcdir)/indxbib.cpp
-CSRCS=\
-  $(srcdir)/signal.c
-NAMEPREFIX=$(g)
-RM=rm -f
-
-install_data: $(srcdir)/eign
-	-test -d $(DESTDIR)$(datadir) \
-	  || $(mkinstalldirs) $(DESTDIR)$(datadir)
-	-test -d $(DESTDIR)$(dataprogramdir) \
-	  || $(mkinstalldirs) $(DESTDIR)$(dataprogramdir)
-	-test -d $(DESTDIR)$(datasubdir) \
-	  || $(mkinstalldirs) $(DESTDIR)$(datasubdir)
-	if test -f /usr/lib/eign; then \
-	  $(MK) $(DESTDIR)$(common_words_file); \
-	  ln -s /usr/lib/eign $(DESTDIR)$(common_words_file) 2>/dev/null \
-	    || ln /usr/lib/eign $(DESTDIR)$(common_words_file) 2>/dev/null \
-	    || cp /usr/lib/eign $(DESTDIR)$(common_words_file); \
-	else \
-	  $(RM) $(DESTDIR)$(common_words_file); \
-	  $(INSTALL_DATA) $(srcdir)/eign $(DESTDIR)$(common_words_file); \
-	fi
-
-uninstall_sub:
-	$(RM) $(DESTDIR)$(common_words_file)
-
-########################################################################
-# Emacs settings
-########################################################################
-#
-# Local Variables:
-# mode: makefile
-# End:
diff -Nuar groff-1.22.3.old/src/utils/lkbib/.gitignore groff-1.22.3/src/utils/lkbib/.gitignore
--- groff-1.22.3.old/src/utils/lkbib/.gitignore	1970-01-01 02:00:00.000000000 +0200
+++ groff-1.22.3/src/utils/lkbib/.gitignore	2015-04-23 20:57:03.000000000 +0300
@@ -0,0 +1,3 @@
+Makefile.dep
+lkbib
+lkbib.n
diff -Nuar groff-1.22.3.old/src/utils/lkbib/lkbib.am groff-1.22.3/src/utils/lkbib/lkbib.am
--- groff-1.22.3.old/src/utils/lkbib/lkbib.am	1970-01-01 02:00:00.000000000 +0200
+++ groff-1.22.3/src/utils/lkbib/lkbib.am	2015-04-23 20:57:03.000000000 +0300
@@ -0,0 +1,24 @@
+# Copyright (C) 2014
+#      Free Software Foundation, Inc.
+# 
+# This file is part of groff.
+#
+# groff is free software; you can redistribute it and/or modify it under
+# the terms of the GNU General Public License as published by the Free
+# Software Foundation, either version 3 of the License, or
+# (at your option) any later version.
+#
+# groff is distributed in the hope that it will be useful, but WITHOUT ANY
+# WARRANTY; without even the implied warranty of MERCHANTABILITY or
+# FITNESS FOR A PARTICULAR PURPOSE.  See the GNU General Public License
+# for more details.
+#
+# You should have received a copy of the GNU General Public License
+# along with this program. If not, see <http://www.gnu.org/licenses/>.
+
+bin_PROGRAMS += lkbib
+man1_MANS += src/utils/lkbib/lkbib.n
+EXTRA_DIST += src/utils/lkbib/lkbib.man
+lkbib_LDADD = libbib.a libgroff.a $(LIBM)
+lkbib_SOURCES = src/utils/lkbib/lkbib.cpp
+src/utils/lkbib/lkbib.$(OBJEXT): defs.h
diff -Nuar groff-1.22.3.old/src/utils/lkbib/lkbib.man groff-1.22.3/src/utils/lkbib/lkbib.man
--- groff-1.22.3.old/src/utils/lkbib/lkbib.man	2014-11-04 10:38:35.305522997 +0200
+++ groff-1.22.3/src/utils/lkbib/lkbib.man	2015-04-23 20:57:03.000000000 +0300
@@ -8,7 +8,7 @@
 .\" --------------------------------------------------------------------
 .
 .de co
-Copyright \[co] 1989-2014 Free Software Foundation, Inc.
+Copyright \(co 1989-2014 Free Software Foundation, Inc.
 
 Permission is granted to make and distribute verbatim copies of
 this manual provided the copyright notice and this permission notice
diff -Nuar groff-1.22.3.old/src/utils/lkbib/Makefile.sub groff-1.22.3/src/utils/lkbib/Makefile.sub
--- groff-1.22.3.old/src/utils/lkbib/Makefile.sub	2014-11-04 10:38:35.305522997 +0200
+++ groff-1.22.3/src/utils/lkbib/Makefile.sub	1970-01-01 02:00:00.000000000 +0200
@@ -1,38 +0,0 @@
-# Makefile.sub for `src utils lkbib'
-#
-# File position: <groff-source>/src/utils/lkbib/Makefile.sub
-#
-# Copyright (C) 2014  Free Software Foundation, Inc.
-#
-# This file is part of `font utf8' which is part of `groff'.
-#
-# `groff' is free software; you can redistribute it and/or modify it
-# under the terms of the GNU General Public License as published by
-# the Free Software Foundation, either version 2 of the License, or
-# (at your option) any later version.
-#
-# `groff' is distributed in the hope that it will be useful, but
-# WITHOUT ANY WARRANTY; without even the implied warranty of
-# MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the GNU
-# General Public License for more details.
-#
-# You should have received a copy of the GNU General Public License
-# along with this program. If not, see
-# <http://www.gnu.org/licenses/gpl-2.0.html>.
-#
-########################################################################
-
-PROG=lkbib$(EXEEXT)
-MAN1=lkbib.n
-XLIBS=$(LIBBIB) $(LIBGROFF)
-MLIB=$(LIBM)
-OBJS=lkbib.$(OBJEXT)
-CCSRCS=$(srcdir)/lkbib.cpp
-
-########################################################################
-# Emacs settings
-########################################################################
-#
-# Local Variables:
-# mode: makefile
-# End:
diff -Nuar groff-1.22.3.old/src/utils/lookbib/.gitignore groff-1.22.3/src/utils/lookbib/.gitignore
--- groff-1.22.3.old/src/utils/lookbib/.gitignore	1970-01-01 02:00:00.000000000 +0200
+++ groff-1.22.3/src/utils/lookbib/.gitignore	2015-04-23 20:57:03.000000000 +0300
@@ -0,0 +1,3 @@
+Makefile.dep
+lookbib
+lookbib.n
diff -Nuar groff-1.22.3.old/src/utils/lookbib/lookbib.am groff-1.22.3/src/utils/lookbib/lookbib.am
--- groff-1.22.3.old/src/utils/lookbib/lookbib.am	1970-01-01 02:00:00.000000000 +0200
+++ groff-1.22.3/src/utils/lookbib/lookbib.am	2015-04-23 20:57:03.000000000 +0300
@@ -0,0 +1,23 @@
+# Copyright (C) 2014
+#      Free Software Foundation, Inc.
+# 
+# This file is part of groff.
+#
+# groff is free software; you can redistribute it and/or modify it under
+# the terms of the GNU General Public License as published by the Free
+# Software Foundation, either version 3 of the License, or
+# (at your option) any later version.
+#
+# groff is distributed in the hope that it will be useful, but WITHOUT ANY
+# WARRANTY; without even the implied warranty of MERCHANTABILITY or
+# FITNESS FOR A PARTICULAR PURPOSE.  See the GNU General Public License
+# for more details.
+#
+# You should have received a copy of the GNU General Public License
+# along with this program. If not, see <http://www.gnu.org/licenses/>.
+
+prefixexecbin_PROGRAMS += lookbib
+PREFIXMAN1 += src/utils/lookbib/lookbib.n
+EXTRA_DIST += src/utils/lookbib/lookbib.man
+lookbib_LDADD = libbib.a libgroff.a $(LIBM)
+lookbib_SOURCES = src/utils/lookbib/lookbib.cpp
diff -Nuar groff-1.22.3.old/src/utils/lookbib/lookbib.man groff-1.22.3/src/utils/lookbib/lookbib.man
--- groff-1.22.3.old/src/utils/lookbib/lookbib.man	2014-11-04 10:38:35.297523097 +0200
+++ groff-1.22.3/src/utils/lookbib/lookbib.man	2015-04-23 20:57:03.000000000 +0300
@@ -8,7 +8,7 @@
 .\" --------------------------------------------------------------------
 .
 .de co
-Copyright \[co] 1989-2014 Free Software Foundation, Inc.
+Copyright \(co 1989-2014 Free Software Foundation, Inc.
 
 Permission is granted to make and distribute verbatim copies of
 this manual provided the copyright notice and this permission notice
diff -Nuar groff-1.22.3.old/src/utils/lookbib/Makefile.sub groff-1.22.3/src/utils/lookbib/Makefile.sub
--- groff-1.22.3.old/src/utils/lookbib/Makefile.sub	2014-11-04 10:38:35.297523097 +0200
+++ groff-1.22.3/src/utils/lookbib/Makefile.sub	1970-01-01 02:00:00.000000000 +0200
@@ -1,39 +0,0 @@
-# Makefile.sub for `src utils lookbib'
-#
-# File position: <groff-source>/src/utils/lookbib/Makefile.sub
-#
-# Copyright (C) 2014  Free Software Foundation, Inc.
-#
-# This file is part of `font utf8' which is part of `groff'.
-#
-# `groff' is free software; you can redistribute it and/or modify it
-# under the terms of the GNU General Public License as published by
-# the Free Software Foundation, either version 2 of the License, or
-# (at your option) any later version.
-#
-# `groff' is distributed in the hope that it will be useful, but
-# WITHOUT ANY WARRANTY; without even the implied warranty of
-# MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the GNU
-# General Public License for more details.
-#
-# You should have received a copy of the GNU General Public License
-# along with this program. If not, see
-# <http://www.gnu.org/licenses/gpl-2.0.html>.
-#
-########################################################################
-
-PROG=lookbib$(EXEEXT)
-MAN1=lookbib.n
-XLIBS=$(LIBBIB) $(LIBGROFF)
-MLIB=$(LIBM)
-OBJS=lookbib.$(OBJEXT)
-CCSRCS=$(srcdir)/lookbib.cpp
-NAMEPREFIX=$(g)
-
-########################################################################
-# Emacs settings
-########################################################################
-#
-# Local Variables:
-# mode: makefile
-# End:
diff -Nuar groff-1.22.3.old/src/utils/pfbtops/.gitignore groff-1.22.3/src/utils/pfbtops/.gitignore
--- groff-1.22.3.old/src/utils/pfbtops/.gitignore	1970-01-01 02:00:00.000000000 +0200
+++ groff-1.22.3/src/utils/pfbtops/.gitignore	2015-04-23 20:57:03.000000000 +0300
@@ -0,0 +1,3 @@
+Makefile.dep
+pfbtops
+pfbtops.n
diff -Nuar groff-1.22.3.old/src/utils/pfbtops/Makefile.sub groff-1.22.3/src/utils/pfbtops/Makefile.sub
--- groff-1.22.3.old/src/utils/pfbtops/Makefile.sub	2014-11-04 10:38:35.314522884 +0200
+++ groff-1.22.3/src/utils/pfbtops/Makefile.sub	1970-01-01 02:00:00.000000000 +0200
@@ -1,39 +0,0 @@
-# Makefile.sub for `src utils pfbtops'
-#
-# File position: <groff-source>/src/utils/pfbtops/Makefile.sub
-#
-# Copyright (C) 2014  Free Software Foundation, Inc.
-#
-# This file is part of `font utf8' which is part of `groff'.
-#
-# `groff' is free software; you can redistribute it and/or modify it
-# under the terms of the GNU General Public License as published by
-# the Free Software Foundation, either version 2 of the License, or
-# (at your option) any later version.
-#
-# `groff' is distributed in the hope that it will be useful, but
-# WITHOUT ANY WARRANTY; without even the implied warranty of
-# MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the GNU
-# General Public License for more details.
-#
-# You should have received a copy of the GNU General Public License
-# along with this program. If not, see
-# <http://www.gnu.org/licenses/gpl-2.0.html>.
-#
-########################################################################
-
-PROG=pfbtops$(EXEEXT)
-MAN1=pfbtops.n
-OBJS=pfbtops.$(OBJEXT)
-CSRCS=$(srcdir)/pfbtops.c
-XLIBS=$(LIBGROFF)
-MLIB=$(LIBM)
-LINK.c=$(CCC) $(CCFLAGS) $(LDFLAGS)
-
-########################################################################
-# Emacs settings
-########################################################################
-#
-# Local Variables:
-# mode: makefile
-# End:
diff -Nuar groff-1.22.3.old/src/utils/pfbtops/pfbtops.am groff-1.22.3/src/utils/pfbtops/pfbtops.am
--- groff-1.22.3.old/src/utils/pfbtops/pfbtops.am	1970-01-01 02:00:00.000000000 +0200
+++ groff-1.22.3/src/utils/pfbtops/pfbtops.am	2015-04-23 20:57:03.000000000 +0300
@@ -0,0 +1,26 @@
+# Copyright (C) 2014
+#      Free Software Foundation, Inc.
+# 
+# This file is part of groff.
+#
+# groff is free software; you can redistribute it and/or modify it under
+# the terms of the GNU General Public License as published by the Free
+# Software Foundation, either version 3 of the License, or
+# (at your option) any later version.
+#
+# groff is distributed in the hope that it will be useful, but WITHOUT ANY
+# WARRANTY; without even the implied warranty of MERCHANTABILITY or
+# FITNESS FOR A PARTICULAR PURPOSE.  See the GNU General Public License
+# for more details.
+#
+# You should have received a copy of the GNU General Public License
+# along with this program. If not, see <http://www.gnu.org/licenses/>.
+
+bin_PROGRAMS += pfbtops
+man1_MANS += src/utils/pfbtops/pfbtops.n
+EXTRA_DIST += src/utils/pfbtops/pfbtops.man
+pfbtops_SOURCES = src/utils/pfbtops/pfbtops.c
+pfbtops_LDADD = libgroff.a $(LIBM)
+# We use the following trick to force the use of C++ compiler
+# See the Automake manual, "Libtool Convenience Libraries"
+nodist_EXTRA_pfbtops_SOURCES = src/utils/pfbtops/dummy.cpp
diff -Nuar groff-1.22.3.old/src/utils/pfbtops/pfbtops.man groff-1.22.3/src/utils/pfbtops/pfbtops.man
--- groff-1.22.3.old/src/utils/pfbtops/pfbtops.man	2014-11-04 10:38:35.314522884 +0200
+++ groff-1.22.3/src/utils/pfbtops/pfbtops.man	2015-04-23 20:57:03.000000000 +0300
@@ -8,7 +8,7 @@
 .\" --------------------------------------------------------------------
 .
 .de co
-Copyright \[co] 1989-2014 Free Software Foundation, Inc.
+Copyright \(co 1989-2014 Free Software Foundation, Inc.
 
 Permission is granted to make and distribute verbatim copies of
 this manual provided the copyright notice and this permission notice
diff -Nuar groff-1.22.3.old/src/utils/tfmtodit/.gitignore groff-1.22.3/src/utils/tfmtodit/.gitignore
--- groff-1.22.3.old/src/utils/tfmtodit/.gitignore	1970-01-01 02:00:00.000000000 +0200
+++ groff-1.22.3/src/utils/tfmtodit/.gitignore	2015-04-23 20:57:03.000000000 +0300
@@ -0,0 +1,3 @@
+Makefile.dep
+tfmtodit
+tfmtodit.n
diff -Nuar groff-1.22.3.old/src/utils/tfmtodit/Makefile.sub groff-1.22.3/src/utils/tfmtodit/Makefile.sub
--- groff-1.22.3.old/src/utils/tfmtodit/Makefile.sub	2014-11-04 10:38:35.288523209 +0200
+++ groff-1.22.3/src/utils/tfmtodit/Makefile.sub	1970-01-01 02:00:00.000000000 +0200
@@ -1,38 +0,0 @@
-# Makefile.sub for `src utils tfmtodit'
-#
-# File position: <groff-source>/src/utils/tfmtodit/Makefile.sub
-#
-# Copyright (C) 2014  Free Software Foundation, Inc.
-#
-# This file is part of `font utf8' which is part of `groff'.
-#
-# `groff' is free software; you can redistribute it and/or modify it
-# under the terms of the GNU General Public License as published by
-# the Free Software Foundation, either version 2 of the License, or
-# (at your option) any later version.
-#
-# `groff' is distributed in the hope that it will be useful, but
-# WITHOUT ANY WARRANTY; without even the implied warranty of
-# MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the GNU
-# General Public License for more details.
-#
-# You should have received a copy of the GNU General Public License
-# along with this program. If not, see
-# <http://www.gnu.org/licenses/gpl-2.0.html>.
-#
-########################################################################
-
-PROG=tfmtodit$(EXEEXT)
-MAN1=tfmtodit.n
-XLIBS=$(LIBGROFF)
-MLIB=$(LIBM)
-OBJS=tfmtodit.$(OBJEXT)
-CCSRCS=$(srcdir)/tfmtodit.cpp
-
-########################################################################
-# Emacs settings
-########################################################################
-#
-# Local Variables:
-# mode: makefile
-# End:
diff -Nuar groff-1.22.3.old/src/utils/tfmtodit/tfmtodit.am groff-1.22.3/src/utils/tfmtodit/tfmtodit.am
--- groff-1.22.3.old/src/utils/tfmtodit/tfmtodit.am	1970-01-01 02:00:00.000000000 +0200
+++ groff-1.22.3/src/utils/tfmtodit/tfmtodit.am	2015-04-23 20:57:03.000000000 +0300
@@ -0,0 +1,23 @@
+# Copyright (C) 2014
+#      Free Software Foundation, Inc.
+# 
+# This file is part of groff.
+#
+# groff is free software; you can redistribute it and/or modify it under
+# the terms of the GNU General Public License as published by the Free
+# Software Foundation, either version 3 of the License, or
+# (at your option) any later version.
+#
+# groff is distributed in the hope that it will be useful, but WITHOUT ANY
+# WARRANTY; without even the implied warranty of MERCHANTABILITY or
+# FITNESS FOR A PARTICULAR PURPOSE.  See the GNU General Public License
+# for more details.
+#
+# You should have received a copy of the GNU General Public License
+# along with this program. If not, see <http://www.gnu.org/licenses/>.
+
+bin_PROGRAMS += tfmtodit
+man1_MANS += src/utils/tfmtodit/tfmtodit.n
+EXTRA_DIST += src/utils/tfmtodit/tfmtodit.man
+tfmtodit_SOURCES = src/utils/tfmtodit/tfmtodit.cpp
+tfmtodit_LDADD = libgroff.a $(LIBM)
diff -Nuar groff-1.22.3.old/src/utils/tfmtodit/tfmtodit.man groff-1.22.3/src/utils/tfmtodit/tfmtodit.man
--- groff-1.22.3.old/src/utils/tfmtodit/tfmtodit.man	2014-11-04 10:38:35.288523209 +0200
+++ groff-1.22.3/src/utils/tfmtodit/tfmtodit.man	2015-04-23 20:57:03.000000000 +0300
@@ -8,7 +8,7 @@
 .\" --------------------------------------------------------------------
 .
 .de co
-Copyright \[co] 1989-2014 Free Software Foundation, Inc.
+Copyright \(co 1989-2014 Free Software Foundation, Inc.
 
 Permission is granted to make and distribute verbatim copies of
 this manual provided the copyright notice and this permission notice
@@ -120,7 +120,7 @@
 command in the DESC file;
 if it is not special, there is no need to list it, since
 .B troff
-can automatically mount it when it\[aq]s first used.
+can automatically mount it when it\(aqs first used.
 .
 .
 .LP
diff -Nuar groff-1.22.3.old/src/utils/xtotroff/.gitignore groff-1.22.3/src/utils/xtotroff/.gitignore
--- groff-1.22.3.old/src/utils/xtotroff/.gitignore	1970-01-01 02:00:00.000000000 +0200
+++ groff-1.22.3/src/utils/xtotroff/.gitignore	2015-04-23 20:57:03.000000000 +0300
@@ -0,0 +1,4 @@
+Makefile
+xtotroff.n
+xtotroff
+Makefile.dep
diff -Nuar groff-1.22.3.old/src/utils/xtotroff/Makefile.sub groff-1.22.3/src/utils/xtotroff/Makefile.sub
--- groff-1.22.3.old/src/utils/xtotroff/Makefile.sub	2014-11-04 10:38:35.331522672 +0200
+++ groff-1.22.3/src/utils/xtotroff/Makefile.sub	1970-01-01 02:00:00.000000000 +0200
@@ -1,40 +0,0 @@
-# Makefile.sub for `src utils xtotroff'
-#
-# File position: <groff-source>/src/utils/stotroff/Makefile.sub
-#
-# Copyright (C) 2014  Free Software Foundation, Inc.
-#
-# This file is part of `font utf8' which is part of `groff'.
-#
-# `groff' is free software; you can redistribute it and/or modify it
-# under the terms of the GNU General Public License as published by
-# the Free Software Foundation, either version 2 of the License, or
-# (at your option) any later version.
-#
-# `groff' is distributed in the hope that it will be useful, but
-# WITHOUT ANY WARRANTY; without even the implied warranty of
-# MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the GNU
-# General Public License for more details.
-#
-# You should have received a copy of the GNU General Public License
-# along with this program. If not, see
-# <http://www.gnu.org/licenses/gpl-2.0.html>.
-#
-########################################################################
-
-PROG=xtotroff$(EXEEXT)
-MAN1=xtotroff.n
-MLIB=$(LIBM)
-XLIBS=$(LIBXUTIL) $(LIBGROFF)
-EXTRA_CFLAGS=$(X_CFLAGS)
-EXTRA_LDFLAGS=$(X_LIBS) $(X_PRE_LIBS) -lXaw -lXt -lX11 $(X_EXTRA_LIBS)
-OBJS=xtotroff.$(OBJEXT)
-CSRCS=$(srcdir)/xtotroff.c
-
-########################################################################
-# Emacs settings
-########################################################################
-#
-# Local Variables:
-# mode: makefile
-# End:
diff -Nuar groff-1.22.3.old/src/utils/xtotroff/xtotroff.am groff-1.22.3/src/utils/xtotroff/xtotroff.am
--- groff-1.22.3.old/src/utils/xtotroff/xtotroff.am	1970-01-01 02:00:00.000000000 +0200
+++ groff-1.22.3/src/utils/xtotroff/xtotroff.am	2015-04-23 20:57:03.000000000 +0300
@@ -0,0 +1,28 @@
+# Copyright (C) 2014
+#      Free Software Foundation, Inc.
+# 
+# This file is part of groff.
+#
+# groff is free software; you can redistribute it and/or modify it under
+# the terms of the GNU General Public License as published by the Free
+# Software Foundation, either version 3 of the License, or
+# (at your option) any later version.
+#
+# groff is distributed in the hope that it will be useful, but WITHOUT ANY
+# WARRANTY; without even the implied warranty of MERCHANTABILITY or
+# FITNESS FOR A PARTICULAR PURPOSE.  See the GNU General Public License
+# for more details.
+#
+# You should have received a copy of the GNU General Public License
+# along with this program. If not, see <http://www.gnu.org/licenses/>.
+
+if !WITHOUT_X11
+bin_PROGRAMS += xtotroff
+man1_MANS += src/utils/xtotroff/xtotroff.n
+xtotroff_SOURCES = src/utils/xtotroff/xtotroff.c
+XLIBS=$(LIBXUTIL) $(LIBGROFF)
+xtotroff_LDADD = libxutil.a libgroff.a $(X_LIBS) $(X_PRE_LIBS) \
+  -lXaw -lXt -lX11 $(X_EXTRA_LIBS) $(LIBM)
+xtotroff_CPPFLAGS = $(AM_CPPFLAGS) $(X_CFLAGS)
+endif
+EXTRA_DIST += src/utils/xtotroff/xtotroff.man
diff -Nuar groff-1.22.3.old/src/utils/xtotroff/xtotroff.man groff-1.22.3/src/utils/xtotroff/xtotroff.man
--- groff-1.22.3.old/src/utils/xtotroff/xtotroff.man	2014-11-04 10:38:35.331522672 +0200
+++ groff-1.22.3/src/utils/xtotroff/xtotroff.man	2015-04-23 20:57:03.000000000 +0300
@@ -8,7 +8,7 @@
 .\" --------------------------------------------------------------------
 .
 .de co
-Copyright \[co] 2004-2014 Free Software Foundation, Inc.
+Copyright \(co 2004-2014 Free Software Foundation, Inc.
 
 Permission is granted to make and distribute verbatim copies of
 this manual provided the copyright notice and this permission notice
@@ -116,8 +116,8 @@
 .\" --------------------------------------------------------------------
 .SH BUGS
 .\" --------------------------------------------------------------------
-The only supported font encodings are \[oq]iso8859-1\[cq] and
-\[cq]adobe-fontspecific\[cq].
+The only supported font encodings are \(oqiso8859-1\(cq and
+\(cqadobe-fontspecific\(cq.
 .
 .
 .\" --------------------------------------------------------------------
diff -Nuar groff-1.22.3.old/stamp-h.in groff-1.22.3/stamp-h.in
--- groff-1.22.3.old/stamp-h.in	2014-11-04 10:38:35.146524985 +0200
+++ groff-1.22.3/stamp-h.in	1970-01-01 02:00:00.000000000 +0200
@@ -1 +0,0 @@
-timestamp
diff -Nuar groff-1.22.3.old/test-groff.in groff-1.22.3/test-groff.in
--- groff-1.22.3.old/test-groff.in	2014-11-04 10:38:35.146524985 +0200
+++ groff-1.22.3/test-groff.in	2015-04-23 20:57:03.000000000 +0300
@@ -20,35 +20,17 @@
 # This script runs groff without requiring that it be installed.
 
 SEP='@PATH_SEPARATOR@'
-builddir=@abs_top_builddir@/src
+builddir=@abs_top_builddir@
 srcdir=@abs_top_srcdir@
 
-GROFF_BIN_PATH=\
-$builddir/roff/groff$SEP\
-$builddir/roff/troff$SEP\
-$builddir/preproc/preconv$SEP\
-$builddir/preproc/pic$SEP\
-$builddir/preproc/eqn$SEP\
-$builddir/preproc/tbl$SEP\
-$builddir/preproc/grn$SEP\
-$builddir/preproc/refer$SEP\
-$builddir/preproc/soelim$SEP\
-$builddir/preproc/html$SEP\
-$builddir/devices/grops$SEP\
-$builddir/devices/grodvi$SEP\
-$builddir/devices/grotty$SEP\
-$builddir/devices/grolj4$SEP\
-$builddir/devices/grolbp$SEP\
-$builddir/devices/grohtml$SEP\
-$builddir/devices/gropdf$SEP\
-$builddir/devices/xditview
+GROFF_BIN_PATH=$builddir
 
 XENVIRONMENT=$srcdir/src/devices/xditview/GXditview.ad
 export XENVIRONMENT
 
 GROFF_COMMAND_PREFIX=
-GROFF_FONT_PATH=$builddir/../font$SEP$srcdir/font
-GROFF_TMAC_PATH=$srcdir/tmac
+GROFF_FONT_PATH=$builddir/font$SEP$srcdir/font
+GROFF_TMAC_PATH=$srcdir/tmac$SEP$builddir/tmac$SEP$srcdir/contrib/mom$SEP$builddir/contrib/mom
 export GROFF_BIN_PATH GROFF_COMMAND_PREFIX GROFF_FONT_PATH GROFF_TMAC_PATH
 
-exec $builddir/roff/groff/groff ${1+"$@"}
+exec $builddir/groff ${1+"$@"}
diff -Nuar groff-1.22.3.old/TESTS groff-1.22.3/TESTS
--- groff-1.22.3.old/TESTS	1970-01-01 02:00:00.000000000 +0200
+++ groff-1.22.3/TESTS	2015-04-23 20:57:03.000000000 +0300
@@ -0,0 +1,654 @@
+This file gives information on the tests that were made during the
+Automake migration.
+
+Environment
+-----------
+Arch Linux x64 with:
+  - Autoconf 2.69
+  - Automake 1.14.1
+  - GNU Make 4.0
+
+Current status
+--------------
+  - Gnulib integrated
+  - Automake support
+  - Build src/libs/*
+  - Build src/utils/*
+  - Build src/preproc/*
+  - Build src/devices/*
+  - Build src/roff/*
+  - Build font/*
+  - man files from 'man' directory installed
+  - tmac files from 'tmac' directory installed
+  - Build and installation of contrib
+  - Build and installation of doc, including texinfo doc
+
+Tests
+-----
+
+0. Sum up of a full test pass
+-----------------------------
+
+0.1. Build
+
+  ./bootstrap
+  mkdir build
+  cd build
+  ../configure
+  make -j
+
+0.2 Install
+
+  mkdir -p ~/tmp/automake
+  make install DESTDIR=~/tmp/automake
+
+-> Comparison with the tree installed by the the reference version
+
+  make uninstall DESTDIR=~/tmp/automake
+
+-> Check what is left in the installation tree
+
+  make uninstall DESTDIR=~/tmp/automake
+
+-> Check that this same command did not fail
+
+0.3 Distcheck
+
+  mkdir -p ~/tmp/distcheck
+  make distcheck DESTDIR=~/tmp/distcheck
+
+-> Will attempt to untar the dist, make an out-of-source build, clean
+   and check that nothing is level, install, uninstall and check that
+   nothing is left in the install tree. This should not fail.
+
+0.4 Dist
+
+   make dist
+
+-> Comparison of the generated tarball with the git tree
+-> Manually build an install from the tarball and compare the
+   installation tree with the reference version's installation tree.
+
+Note that discheck checks that install does not fail, uninstall does
+not leave any file, but cannot check if a generated file that should
+not be distributed was distributed, or that files are missing in the
+installation tree.
+
+0.5 Check
+   
+  make check
+
+-> All tests should pass
+
+0.6 Clean
+
+   make mostlyclean
+
+-> Check what is left in the build tree.
+
+   make clean
+
+-> Check what is left in the build tree. This is also automatically
+   checked by 'distcheck'.
+
+   make distclean
+
+-> Check what is left in the build tree
+
+
+1. Generation of build system files
+-----------------------------------
+
+  ./bootstrap
+
+Generated the following files and directories:
+  INSTALL
+  Makefile.in
+  aclocal.m4
+  autom4te.cache/
+  build-aux/
+  configure
+  gnulib_m4/
+  lib/
+  src/include/config.hin
+
+2. Tests of various targets
+---------------------------
+
+Tests done in 2 configurations:
+
+  - Out-of source build mode
+
+    mkdir build
+    cd build
+    ../configure
+
+  - In source build:
+    ../configure
+
+2.1 make
+
+Following files are generated:
+
+  - src/include/config.h
+  - lib/libgnu.a
+
+from arch/misc:
+  - shdeps.sed
+
+from src/libs:
+  - libbib.a
+  - libdriver.a
+  - libgroff.a, version.cpp and extra files (charset.alias,
+    ref-add.sed, ref-del.sed)
+  - libxutils.a
+
+from src/utils:
+  - addftinfo
+  - afmtodit
+  - hpftodit
+  - indxbib
+  - lkbib
+  - lookbib
+  - pfbtops
+  - tfmtodit
+  - xtotroff
+  - man files (.n) in src/utils
+
+from src/preproc:
+  - eqn
+  - grn
+  - pre-grohtml
+  - pic
+  - preconv
+  - refer
+  - soelim
+  - tbl
+  - Yacc and Lex support: the following files are generated:
+    -- eqn/eqn.cpp
+    -- eqn/eqn.hpp (previously eqn_tab.h)
+    -- pic/pic.cpp
+    -- pic/pic.hpp (previously pic_tab.h)
+    -- pic/pic.output
+    -- refer/label.cpp
+    -- refer/label.hpp
+    Compared to the previous build system, the only relevant diff is
+    an extra protection #define in label.cpp
+#ifndef YY_YY_SRC_PREPROC_REFER_LABEL_HPP_INCLUDED
+# define YY_YY_SRC_PREPROC_REFER_LABEL_HPP_INCLUDED
+
+from src/devices:
+  - grodvi
+  - pre-grohtml
+  - post-grohtml
+  - grolbp
+  - grolj4
+  - gropdf
+  - pdfmom
+  - grops
+  - grotty
+  - gxditview
+
+from src/roff
+  - groff
+  - grog
+  - nroff
+  - troff
+
+from font: font files in 
+  - devascii
+  - devcp1047
+  - devdvi
+  - devhtml
+  - devlatin1
+  - devlbp
+  - devlj4
+  - devpdf
+  - devps
+  - devutf8
+
+from contrib/chem:
+  - `chem' script and 3 README files
+
+from contrib/eqn2graph:
+  - `eqn2graph' script
+
+from contrib/gdiffmk:
+  - `gdiffmk' script
+
+from contrib/gperl
+  - `gperl' script  
+
+from contrib/gpinyin
+  - `gpinyin' script
+
+from contrib/grap2graph
+  - `grap2graph' script
+
+from contrib/pic2graph
+  - `pic2graph' script
+
+from contrib/glilypond
+  - `glilypond' script
+
+from contrib/groffer
+  - `groffer' script, all the man files.
+
+from contrib/hdtbl
+  - hdtbl examples and tmac files
+
+from contrib/mm
+  - .n files
+
+from contrib/pdfmark
+  - pdfmark.pdf
+  - pdfroff
+
+from contrib/mom
+  - pdfmom
+  - 4 .pdf example files
+
+from doc
+  - gnu.eps
+  - html and doc files
+
+from doc, texinfo files:
+
+  - By default, only doc/groff.info is built, as GNU standards require
+    to install only info doc.
+
+  - Additional optional targets are available to build the doc in various formats:
+    -- make doc_txt
+    -- make doc_dvi
+    -- make doc_pdf
+    -- make doc_html (this will build the html in 2 directories: all
+       in 1 .html file, and 1 file per node). Note also that if
+       texinfo version is < 5.0, the resulting (mono) file will be
+       patched by fixinfo.sh
+    -- make doc_all will build all the 4 previous formats
+
+In order to check and improve the dependencies, the following targets
+were built from a clean environment:
+  - make lib/libgnu.a
+  - make libbib.a
+  - make libdriver.a
+  - make libgroff.a
+  - make libxutil.a
+  - make addftinfo
+  - make  afmtodit
+  - make hpftodit
+  - make indxbib
+  - make lkbib
+  - make lookbib
+  - make pfbtops
+  - make tfmtodit
+  - make xtotroff
+  - make eqn
+  - make grn
+  - make pre-grohtml
+  - make pic
+  - make preconv
+  - make refer
+  - make soelim
+  - make tbl
+  - make grodvi
+  - make post-grohtml
+  - make grolbp
+  - make grolj4
+  - make gropdf
+  - make pdfmom
+  - make grops
+  - make grotty
+  - make gxditview
+  - make groff
+  - make grog
+  - make nroff
+  - make troff
+  - make chem
+  - make eqn2graph
+  - make gdiffmk
+  - make gperl
+  - make gpinyin
+  - make grap2graph
+  - make pic2graph
+  - make glilypond
+  - make groffer
+  - make pdfroff
+  - make contrib/pdfmark/pdfmark.pdf 
+  - make pdfmom
+  - make contrib/mom/examples/mom-pdf.pdf
+
+2.2 make clean
+
+The following files remain (this is expected):
+  - Makefile
+  - config.status
+  - config.log
+  - doc/groff.info-1
+  - doc/groff.info-3
+  - src/include/config.h
+  - src/include/stamp-h1
+  - .deps directories and .dirstamp files
+
+2.3 make mostlyclean
+
+  Like 'make clean', but the following files also remain (expected):
+  - lib*.a
+  - libgroff.a's charset.alias, ref-add.sed, ref-del.sed, and
+    version.cpp.
+  - gnulib's charset.alias, ref-add.sed, ref-del.sed and configmake.h
+  - src/preproc generated .cpp, hpp, and .output files
+  - Scripts (listed in bin_SCRIPTS) are added to the MOSTLYCLEANFILES
+    list.
+
+Differences with former build system:
+
+  - Programs (listed in bin_PROGRAMS) are not cleaned by 'make
+    mostlyclean'. This could be changed if needed (MOSTLYCLEANFILES +=
+    $(bin_PROGRAMS)).
+
+2.4 make distclean
+
+  Like 'make clean', but the following files are also cleaned:
+  - Makefile
+  - config.status
+  - config.log
+  - src/include/config.h
+  - src/include/stamp-h1
+  - .deps directories and .dirstamp files
+
+  In a out-of-source build, nothing remains in the build directory
+  expect empty directories.
+
+  The files generated by bootstrap and needed by the configure script
+  are untouched:
+  INSTALL
+  Makefile.in
+  aclocal.m4
+  build-aux/
+  configure
+  gnulib_m4/
+  lib/
+  src/include/config.hin
+
+2.5 make maintainer-clean
+
+  Like 'make distclean'
+
+2.6 make install
+
+  mkdir -p ~/tmp/automake
+  make install DESTDIR=~/tmp/automake
+
+  - If file charset.alias is always present in
+    $(DESTDIR)/usr/local/lib, make install update it by adding 'groff'
+    to the list of programs using it. Otherwise nothing is installed.
+
+  - Programs from 'src' installed in $(DESTDIR)/usr/local/bin: 
+
+  - man files from man, src are installed in
+    $(DESTDIR)/usr/local/share/man/man1, man5 and man7.
+
+  - $(DESTDIR)/usr/local/share/groff/1.22.3/eign (from src/utils/indxbib)
+
+  - In $(DESTDIR)/usr/local/lib/X11/app-defaults: GXditview and
+    GXditview-color. If these files are already present, they are
+    first moved to GXditview.old and GXditview-color.old.
+
+  - usr/local/lib/groff:
+    -- groff_opts_no_arg.txt and groff_opts_with_arg.txt are installed
+    -- grog/sub.pl
+
+  - font files are installed in $(DESTDIR)/usr/local/groff/1.22.3/font
+    and oldfont and identical to the one installed with the previous
+    build system, except the fonts from devpdf which are not generated
+    identically at each build.
+
+  - tmac files from 'tmac' dir are installed in
+    $(DESTDIR)/usr/local/groff/1.22.3/tmac. Some files are first
+    stripped (comments removed) at build time. Checked that they are
+    strictly identical to the one install by the original build
+    system.
+  
+  - contrib scripts installed in $(DESTDIR)/usr/local/bin
+
+  - contrib/chem:
+
+    -- chem.pic installed in
+    $(DESTDIR)/usr/local/share/groff/1.22.3/pic/chem.pic
+
+    -- other chem files installed in
+    $(DESTDIR)/usr/local/share/doc/groff-1.22.3/examples, identical to
+    the old build system.
+    
+    -- contrib/chem/README is strangely build but not installed, this
+       is the behaviour on the old build system.
+
+  - contrib/hdtbl:
+   
+    -- example files in
+      $(DESTDIR)/usr/local/share/doc/groff-1.22.3/examples/hdtbl
+
+    -- hdtbl.tmac and hdmisc.tmac installed in 
+       $(DESTDIR)/usr/local/share/groff-1.22.3/tmac
+
+  - contrib/mm
+    
+    -- tmac files in tmacdir, misc files in
+       $(DESTDIR)/usr/local/share/groff/1.22.3/tmac/mm
+
+    -- refer-mm.tmac in tmacdir
+
+  - contrib/pdfmark
+
+    -- tmac files
+    -- pdfmark.pdf
+
+  - contrib/mom
+     -- example files in $(DESTDIR)/usr/local/share/doc/groff-1.22.3/examples/mom
+     -- html files in $(DESTDIR)/usr/local/share/doc/groff-1.22.3/html/mom
+
+  - doc
+
+    -- webpageXX.html files
+    -- picXX.html files
+    -- info file from groff.texinfo
+
+Diff with previous build system after final (full tree comparison):
+  - devcp1047 fonts are installed $(DESTDIR)/usr/local/groff/1.22.3/font
+  - devpdf fonts (not identical at each build)
+  - in hdbtbl, parts of some .ps are not identical at each build.
+  - timetamp in man files or html files
+
+2.7 make uninstall
+
+  - Note: target 'uninstall_groffdirs' is a dependency of standard
+    target uninstall-hook, and removes groff's specific directories
+    (exampledir, libprogramdir etc ...). contrib that create
+    sub-directories in these groff specific directories should also
+    add a custom rule that is a dependency of uninstall_groffdirs to
+    remove the directories it created, otherwise uninstall-hook will
+    fail du to the impossibility to remove non-empty dir.
+
+  - Tree after uninstall:
+.
+└── usr
+    └── local
+        ├── bin
+        ├── lib
+        │   └── X11
+        │       └── app-defaults
+        └── share
+            ├── doc
+            ├── info
+            │   └── dir
+            └── man
+                ├── man1
+                ├── man5
+                └── man7
+
+13 directories, 1 file
+
+  - Notes:
+    -- $(DESTDIR)/usr/local/lib/charset.alias is removed if exists
+    -- $(DESTDIR)/usr/local/lib/X11/app-defaults/GXditview and
+    GXditview-color are removed. However, GXditview.old and
+    GXditview-color.old are not removed (this is the behaviour on the
+    old build system)
+  
+2.8 make dist
+
+  groff-1.22.3.tar.gz is generated.
+
+  - Files/directories that are not distributed on purpose:
+    all .gitignore files
+    .gitmodules
+    bootstrap
+    bootstrap.conf
+    gnulib/
+    README.git
+
+  - Files/directories not present in the git tree that are
+    distributed:
+    build-aux/
+    gnulib_m4/
+    lib/
+    src/include/config.hin
+    INSTALL
+    Makefile.in
+    aclocal.m4
+    configure   
+    src/preproc/eqn/eqn.cpp
+    src/preproc/eqn/eqn.hpp
+    src/preproc/pic/pic.cpp
+    src/preproc/pic/pic.hpp 
+    src/preproc/refer/label.hpp
+    src/preproc/refere/label.cpp
+    doc/gnu.eps
+
+Note: when building from a tarball, we will use doc/gnu.eps.
+
+2.9 make check
+  
+  (manually called automake --add-missing to add build-aux/test-driver)
+  - gdiffmk's test script is now plugged to the 'make check'
+    target. The original runtests.in is renamed to runtests.sh with
+    absolute paths. The new script gdiffmk_tests.sh is used to call
+    runtests.sh in $(top_builddir)/contrib/gdiff/tests, because
+    runtest.sh will generate some result files.
+  
+2.10 make distcheck
+  
+  This will attempt to make a tarball, and from this tarball, build
+the package(out-of-source build), check it, clean it (checking that no
+file remains), install it, uninstall it (checking that no file remains
+in the install tree).
+
+  make distcheck
+
+  - All phases now succeed
+
+3. Additional tests
+-------------------
+
+3.1 Build without X support
+
+  Calling configure with option --without-x doesn't build:
+  - gxidview
+  - libxutil.a
+  - xtotroff
+
+  The following fonts are not installed: 
+  - dev/X100
+  - devX100-12
+  - devX75
+  - devX75-12
+  
+  'make distcheck' passes correctly, and the tarball generated by
+  'make dist' is identical to the one generated with X support.
+
+3.2 Options to build the doc
+
+  - Default behavour
+    -- By default all the documentation (except texinfo documents)
+       will be installed in:
+       $(DESTDIR)/usr/local/share/doc/groff-1.22.3/
+    -- The only texinfo documentation installed by default is:
+       $(DESTDIR)/usr/local/share/info/groff.info
+
+  - Passing to configure option: --with-doc=no
+
+    No doc is built nor installed, $(DESTDIR)/usr/local/share/doc
+    is not even created. groff.info is not installed.
+
+  - Passing to configure option: --with-doc=examples
+
+    Only $(DESTDIR)/usr/local/share/doc/groff-1.22.3/examples is
+    present, and contain files in format other than html and pdf
+    formats.
+
+  - Passing to configure option: --with-doc=html
+
+    Only $(DESTDIR)/usr/local/share/doc/groff-1.22.3/html/ is present.
+
+  - Passing to configure option: --with-doc=pdf
+    Only
+    $(DESTDIR)/usr/local/share/doc/groff-1.22.3/pdf/pdfmark.pdf
+    is present
+
+  - Passing to configure option: --with-doc=other
+
+    Only .me and .ps files are present in
+    $(DESTDIR)/usr/local/share/doc/groff-1.22.3/
+
+  - Passing to configure option: --with-doc=info
+    $(DESTDIR)/usr/local/share/doc is not created.
+    Only $(DESTDIR/usr/local/share/info/ is installed
+
+  - Note that pre-built HTML doc in contrib/mom is installed even if
+    the tools needed to build html doc are not available.
+
+
+3.3 Build in presence of an non-GNU Troff installation 
+
+  - To simulate the existence of a non-GNU Troff, removed any existing
+    troff, and added a dummy troff script in /usr/bin/troff that
+    contains:
+
+    #!/bin/sh
+    echo 0
+
+    and built groff as usuall.
+
+  - Programs listed in prefixexecbin_PROGRAMS, scripts listed in
+    prefixecbin_SCRIPTS and man pages listed in PREFIXMAN1 are
+    correctly installed with a 'g' prefix. All targets (clean,
+    install/uninstall, distcheck) work as usual. No diff with the old
+    build system.
+
+3.4 Build in presence of system tmac files
+ 
+  - Create 3 dummy files in /usr/lib/tmac: tmac.an, tmac.m, tmac.s,
+    that all contain:
+
+.if
+  
+  - Build and install as usual:
+
+    -- $(DESTDIR)/usr/local/lib/groff/site-tmac/ contains 3 files:
+       an.tmac, m.tmac, s.tmac.
+    -- In $(DESTDIR)/usr/local/share/groff/1.22.3/tmac 6 files have a
+       'g' prefix: gan.tmac, gm.tmac, gmm.tmac, gmmse.tmac, gmse.tmac,
+       gs.tmac.
+
+3.5 Parallel build
+
+   - Checked that usage of option -j when invoking `make' works correctly.
+
+4. Notes
+--------
+
+  - Gnulib: some files of src/libs/libgroff could be replaced by their
+    gnulib equivalent
+
+  - Gnulib: git-version-gen could be used
diff -Nuar groff-1.22.3.old/tmac/andoc.tmac groff-1.22.3/tmac/andoc.tmac
--- groff-1.22.3.old/tmac/andoc.tmac	2014-11-04 10:38:35.532520159 +0200
+++ groff-1.22.3/tmac/andoc.tmac	2015-04-23 20:57:03.000000000 +0300
@@ -34,35 +34,50 @@
 .als andoc-em em
 .als andoc-bp bp
 .
-.de1 reload-doc
-.  ch an-header   \" remove trap set by an-old.tmac
-.  ch an-footer   \" remove trap set by an-old.tmac
-.  ch an-p-footer \" remove trap set by an-old.tmac
-.
-.  als em andoc-em
-.  als bp andoc-bp
-.  rm Dd          \" disable load-only-once, see doc.tmac
 .
-.  mso doc.tmac
+.\" We must not use `.de1' for `reload-doc' or `reload-man'!  `doc.tmac'
+.\" unconditionally switches compatibility mode off, but `.de1' would ignore
+.\" this, restoring the mode that was active before.  Similarly, we have to
+.\" switch back to the original compatibility mode for man documents in case
+.\" there is a mix of mdoc and man input files.
+.\"
+.\" Due to a bug in GNU troff it necessary to have a no-op line between
+.\" `.do' and `\*'.
+.
+.
+.de reload-doc
+.  do ch an-header   \" remove trap set by an-old.tmac
+.  do ch an-footer   \" remove trap set by an-old.tmac
+.  do ch an-p-footer \" remove trap set by an-old.tmac
+.
+.  do als em andoc-em
+.  do als bp andoc-bp
+.  do rm Dd          \" disable load-only-once, see doc.tmac
 .
-.  als TH reload-man
-\\*[Dd]\\
+.  do mso doc.tmac
+.
+.  do als TH reload-man
+.
+\\*(Dd\\
 ..
 .
-.de1 reload-man
-.  ch header      \" remove trap set by doc.tmac
-.  ch footer      \" remove trap set by doc.tmac
-.
-.  als em andoc-em
-.  als bp andoc-bp
-.  rm RI          \" disable load-only-once, see an-old.tmac
-.  blm            \" no blank line macro
-.  rm TH
+.de reload-man
+.  do cp \n(.C       \" restore original compatibility mode
+.
+.  do ch header      \" remove trap set by doc.tmac
+.  do ch footer      \" remove trap set by doc.tmac
+.
+.  do als em andoc-em
+.  do als bp andoc-bp
+.  do rm RI          \" disable load-only-once, see an-old.tmac
+.  do blm            \" no blank line macro
+.  do rm TH
+.
+.  do mso an-old.tmac
 .
-.  mso an-old.tmac
+.  do als Dd reload-doc
 .
-.  als Dd reload-doc
-\\*[TH]\\
+\\*(TH\\
 ..
 .
 .als TH reload-man
diff -Nuar groff-1.22.3.old/tmac/doc-common groff-1.22.3/tmac/doc-common
--- groff-1.22.3.old/tmac/doc-common	2014-11-04 10:38:35.533520146 +0200
+++ groff-1.22.3/tmac/doc-common	1970-01-01 02:00:00.000000000 +0200
@@ -1,1376 +0,0 @@
-.\" -*- nroff -*-
-.\"
-.\" Copyright (c) 1991, 1993
-.\"	The Regents of the University of California.  All rights reserved.
-.\"
-.\" Redistribution and use in source and binary forms, with or without
-.\" modification, are permitted provided that the following conditions
-.\" are met:
-.\" 1. Redistributions of source code must retain the above copyright
-.\"    notice, this list of conditions and the following disclaimer.
-.\" 2. Redistributions in binary form must reproduce the above copyright
-.\"    notice, this list of conditions and the following disclaimer in the
-.\"    documentation and/or other materials provided with the distribution.
-.\" 3. [Deleted.  See
-.\"     ftp://ftp.cs.berkeley.edu/pub/4bsd/README.Impt.License.Change]
-.\" 4. Neither the name of the University nor the names of its contributors
-.\"    may be used to endorse or promote products derived from this software
-.\"    without specific prior written permission.
-.\"
-.\" THIS SOFTWARE IS PROVIDED BY THE REGENTS AND CONTRIBUTORS ``AS IS'' AND
-.\" ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE
-.\" IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE
-.\" ARE DISCLAIMED.  IN NO EVENT SHALL THE REGENTS OR CONTRIBUTORS BE LIABLE
-.\" FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL
-.\" DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS
-.\" OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION)
-.\" HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT
-.\" LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY
-.\" OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF
-.\" SUCH DAMAGE.
-.\"
-.\"     @(#)doc-common	8.1 (Berkeley) 06/08/93
-.\"
-.\"     %beginstrip%
-.
-.
-.\" Macro Identifiers.  For each user macro a corresponding register with
-.\" the same name must exist.  Its value must not be zero.
-.
-.nr %A 1
-.nr %B 1
-.nr %C 1
-.nr %D 1
-.nr %I 1
-.nr %J 1
-.nr %N 1
-.nr %O 1
-.nr %P 1
-.nr %Q 1
-.nr %R 1
-.nr %T 1
-.nr %U 1
-.nr %V 1
-.nr Ac 3
-.nr Ad 12n
-.nr An 12n
-.nr Ao 12n
-.nr Ap 2
-.nr Aq 12n
-.nr Ar 12n
-.nr At 1
-.nr Bc 3
-.nr Bf 8n\" ?
-.nr Bk 8n\" ?
-.nr Bl 1
-.nr Bo 12n
-.nr Bq 12n
-.nr Brc 3
-.nr Bro 12n
-.nr Brq 12n
-.nr Bsx 1
-.nr Bt 8n\" ?
-.nr Bx 1
-.nr Cd 12n
-.nr Cm 10n
-.nr D1 8n\" ?
-.nr Dc 3
-.nr Dl 8n\" ?
-.nr Dt 8n\" ?
-.nr Do 12n
-.nr Dq 12n
-.nr Ds 6n\" many manpages still use this as a -width value
-.nr Dv 12n
-.nr Dx 1
-.nr Ec 3
-.nr Ef 8n\" ?
-.nr Ek 8n\" ?
-.nr El 1
-.nr Em 10n
-.nr En 12n
-.nr Eo 12n
-.nr Eq 12n
-.nr Er 17n
-.nr Es 12n
-.nr Ev 15n
-.nr Ex 1
-.nr Fa 12n
-.nr Fc 3
-.nr Fd 12n\" ?
-.nr Fl 10n
-.nr Fn 16n
-.nr Fo 16n
-.nr Fr 12n\" ?
-.nr Ft 8n\" ?
-.nr Fx 1
-.nr Ic 10n
-.nr In 12n
-.nr It 8n\" ?
-.nr Lb 11n
-.nr Li 16n
-.nr Lk 6n\" ?
-.nr Lp 8n\" ?
-.nr Me 6n
-.nr Ms 6n
-.nr Mt 6n\" ?
-.nr Nd 8n\" ?
-.nr Nm 10n
-.nr No 12n
-.nr Ns 2
-.nr Nx 1
-.nr Oc 3
-.nr Oo 10n
-.nr Op 14n
-.nr Os 6n\" ?
-.nr Ox 1
-.nr Pa 32n
-.nr Pc 3
-.nr Pf 12n
-.nr Po 12n
-.nr Pp 8n\" ?
-.nr Pq 12n
-.nr Qc 3
-.nr Ql 16n
-.nr Qo 12n
-.nr Qq 12n
-.nr Rv 1
-.nr Sc 3
-.nr Sh 8n
-.nr Sm 8n\" ?
-.nr So 12n
-.nr Sq 12n
-.nr Ss 8n
-.nr St 8n\" ?
-.nr Sx 16n
-.nr Sy 6n
-.nr Ta 2
-.nr Tn 10n
-.nr Ud 8n\" ?
-.nr Ux 1
-.nr Va 12n
-.nr Vt 8n\" ?
-.nr Xc 3
-.nr Xo 1
-.nr Xr 10n
-.
-.
-.\" macros which must be processed after the closing delimiter of `Op'
-.\" and friends
-.ds doc-after-Ao
-.ds doc-after-Bo
-.ds doc-after-Bro
-.ds doc-after-Do
-.ds doc-after-Eo
-.ds doc-after-Fo
-.ds doc-after-Ns
-.ds doc-after-Oo
-.ds doc-after-Po
-.ds doc-after-Qo
-.ds doc-after-So
-.ds doc-after-Xo
-.
-.
-.nr doc-display-indent 6n
-.
-.
-.\" space strings
-.
-.ds doc-soft-space " \"
-.ds doc-hard-space \~
-.ds doc-tab \t
-.
-.
-.eo
-.
-.
-.\" punctuation values (suffix=3, prefix=4)
-.
-.nr doc-punct. 3
-.nr doc-punct, 3
-.nr doc-punct: 3
-.nr doc-punct; 3
-.nr doc-punct( 4
-.nr doc-punct) 3
-.nr doc-punct[ 4
-.nr doc-punct] 3
-.nr doc-punct? 3
-.nr doc-punct! 3
-.
-.
-.\" header assembly macros
-.
-.\" NS doc-document-title global string
-.\" NS   the title of the manual page
-.
-.ds doc-document-title UNTITLED
-.
-.
-.\" NS doc-volume global string
-.\" NS   the volume where the manual page belongs to
-.
-.ds doc-volume LOCAL
-.
-.
-.\" NS doc-section global string
-.\" NS   the manual section
-.
-.ds doc-section Null
-.
-.
-.\" NS Dt user macro (not parsed, not callable)
-.\" NS   document title
-.\" NS
-.\" NS modifies:
-.\" NS   doc-document-title
-.\" NS   doc-section
-.\" NS   doc-volume
-.\" NS   doc-command-name
-.\" NS
-.\" NS local variables:
-.\" NS   doc-volume-as-XXX
-.\" NS   doc-volume-ds-XXX
-.\" NS
-.\" NS width register `Dt' set above
-.
-.\" an alternative, more detailed scheme for naming the manual sections
-.\"
-.ds doc-volume-operating-system BSD
-.nr doc-volume-operating-system-ateol 0
-.ds doc-volume-ds-1 General Commands Manual
-.ds doc-volume-ds-2 System Calls Manual
-.ds doc-volume-ds-3 Library Functions Manual
-.ds doc-volume-ds-4 Kernel Interfaces Manual
-.ds doc-volume-ds-5 File Formats Manual
-.ds doc-volume-ds-6 Games Manual
-.ds doc-volume-ds-7 Miscellaneous Information Manual
-.ds doc-volume-ds-8 System Manager's Manual
-.ds doc-volume-ds-9 Kernel Developer's Manual
-.
-.ds doc-volume-ds-USD   User's Supplementary Documents
-.ds doc-volume-ds-PS1   Programmer's Supplementary Documents
-.ds doc-volume-ds-AMD   Ancestral Manual Documents
-.ds doc-volume-ds-SMM   System Manager's Manual
-.ds doc-volume-ds-URM   User's Reference Manual
-.ds doc-volume-ds-PRM   Programmer's Manual
-.ds doc-volume-ds-KM    Kernel Manual
-.ds doc-volume-ds-IND   Manual Master Index
-.ds doc-volume-ds-LOCAL Local Manual
-.ds doc-volume-ds-CON   Contributed Software Manual
-.
-.als doc-volume-ds-MMI doc-volume-ds-IND
-.als doc-volume-ds-LOC doc-volume-ds-LOCAL
-.
-.ds doc-volume-as-alpha        alpha
-.als doc-volume-as-Alpha doc-volume-as-alpha
-.ds doc-volume-as-acorn26      acorn26
-.ds doc-volume-as-acorn32      acorn32
-.ds doc-volume-as-algor        algor
-.ds doc-volume-as-amd64        amd64
-.ds doc-volume-as-amiga        amiga
-.ds doc-volume-as-amigappc     amigappc
-.ds doc-volume-as-arc          arc
-.ds doc-volume-as-arm          arm
-.ds doc-volume-as-arm26        arm26
-.ds doc-volume-as-arm32        arm32
-.ds doc-volume-as-armish       armish
-.ds doc-volume-as-atari        atari
-.ds doc-volume-as-aviion       aviion
-.ds doc-volume-as-beagle       beagle
-.ds doc-volume-as-bebox        bebox
-.ds doc-volume-as-cats         cats
-.ds doc-volume-as-cesfic       cesfic
-.ds doc-volume-as-cobalt       cobalt
-.ds doc-volume-as-dreamcast    dreamcast
-.ds doc-volume-as-emips        emips
-.ds doc-volume-as-evbarm       evbarm
-.ds doc-volume-as-evbmips      evbmips
-.ds doc-volume-as-evbppc       evbppc
-.ds doc-volume-as-evbsh3       evbsh3
-.ds doc-volume-as-ews4800mips  ews4800mips
-.ds doc-volume-as-hp300        hp300
-.ds doc-volume-as-hp700        hp700
-.ds doc-volume-as-hpcarm       hpcarm
-.ds doc-volume-as-hpcmips      hpcmips
-.ds doc-volume-as-hpcsh        hpcsh
-.ds doc-volume-as-hppa         hppa
-.ds doc-volume-as-hppa64       hppa64
-.ds doc-volume-as-i386         i386
-.ds doc-volume-as-ia64         ia64
-.ds doc-volume-as-ibmnws       ibmnws
-.ds doc-volume-as-iyonix       iyonix
-.ds doc-volume-as-landisk      landisk
-.ds doc-volume-as-loongson     loongson
-.ds doc-volume-as-luna68k      luna68k
-.ds doc-volume-as-luna88k      luna88k
-.ds doc-volume-as-m68k         m68k
-.ds doc-volume-as-mac68k       mac68k
-.ds doc-volume-as-macppc       macppc
-.ds doc-volume-as-mips         mips
-.ds doc-volume-as-mips64       mips64
-.ds doc-volume-as-mipsco       mipsco
-.ds doc-volume-as-mmeye        mmeye
-.ds doc-volume-as-mvme68k      mvme68k
-.ds doc-volume-as-mvme88k      mvme88k
-.ds doc-volume-as-mvmeppc      mvmeppc
-.ds doc-volume-as-netwinder    netwinder
-.ds doc-volume-as-news68k      news68k
-.ds doc-volume-as-newsmips     newsmips
-.ds doc-volume-as-next68k      next68k
-.ds doc-volume-as-ofppc        ofppc
-.ds doc-volume-as-palm         palm
-.ds doc-volume-as-pc532        pc532
-.ds doc-volume-as-playstation2 playstation2
-.ds doc-volume-as-pmax         pmax
-.ds doc-volume-as-pmppc        pmppc
-.ds doc-volume-as-powerpc      powerpc
-.ds doc-volume-as-prep         prep
-.ds doc-volume-as-rs6000       rs6000
-.ds doc-volume-as-sandpoint    sandpoint
-.ds doc-volume-as-sbmips       sbmips
-.ds doc-volume-as-sgi          sgi
-.ds doc-volume-as-sgimips      sgimips
-.ds doc-volume-as-sh3          sh3
-.ds doc-volume-as-shark        shark
-.ds doc-volume-as-socppc       socppc
-.ds doc-volume-as-solbourne    solbourne
-.ds doc-volume-as-sparc        sparc
-.ds doc-volume-as-sparc64      sparc64
-.ds doc-volume-as-sun2         sun2
-.ds doc-volume-as-sun3         sun3
-.ds doc-volume-as-tahoe        tahoe
-.ds doc-volume-as-vax          vax
-.ds doc-volume-as-x68k         x68k
-.ds doc-volume-as-x86_64       x86_64
-.ds doc-volume-as-xen          xen
-.ds doc-volume-as-zaurus       zaurus
-.
-.de Dt
-.  \" reset default arguments
-.  ds doc-document-title UNTITLED
-.  ds doc-volume LOCAL
-.  ds doc-section Null
-.  ds doc-command-name
-.
-.  if !"\$1"" \
-.    ds doc-document-title "\$1
-.
-.  if !"\$2"" \{\
-.    ds doc-section \$2
-.    ie \B\$2 \{\
-.      if ((\$2 >= 1) & (\$2 <= 9)) \{\
-.        ie \n[doc-volume-operating-system-ateol] \{\
-.          ds doc-volume "\*[doc-volume-ds-\$2] \*[doc-volume-operating-system]
-.          if \A\$3 \{\
-.            if d doc-volume-as-\$3 \
-.              as doc-volume "/\*[doc-volume-as-\$3]
-.        \}\}
-.        el \{\
-.          ds doc-volume "\*[doc-volume-operating-system]
-.          if \A\$3 \{\
-.            if d doc-volume-as-\$3 \
-.              as doc-volume "/\*[doc-volume-as-\$3]
-.          \}
-.          as doc-volume " \*[doc-volume-ds-\$2]
-.    \}\}\}
-.    el \{\
-.      ie "\$2"unass" \
-.        ds doc-volume DRAFT
-.      el \{ .ie "\$2"draft" \
-.        ds doc-volume DRAFT
-.      el .if "\$2"paper" \
-.        ds doc-volume UNTITLED
-.      \}\}
-.      if \A\$3 \{\
-.        if d doc-volume-ds-\$3 \
-.          ds doc-volume "\*[doc-volume-ds-\$3]
-.  \}\}\}
-.
-.  if !"\$3"" \
-.    if "\*[doc-volume]"LOCAL" \
-.      ds doc-volume \$3
-.
-.  if !\n[cR] \
-.    if \n[nl] \{\
-  .    doc-setup-header
-.      bp
-.    \}
-..
-.
-.
-.\" NS doc-default-operating-system global string
-.\" NS   the exact (default) version of the operating system
-.\" NS
-.\" NS override this in `mdoc.local', if necessary
-.
-.ds doc-default-operating-system BSD
-.
-.
-.\" NS doc-operating-system global string
-.\" NS   the exact version of the operating system
-.
-.ds doc-operating-system
-.
-.
-.\" NS Os user macro (not parsed, not callable)
-.\" NS   operating system
-.\" NS
-.\" NS modifies:
-.\" NS   doc-operating-system
-.\" NS   doc-command-name
-.\" NS
-.\" NS local variables:
-.\" NS   doc-operating-system-XXX-XXX
-.\" NS
-.\" NS width register `Os' set above
-.
-.ds doc-operating-system-ATT-7   7th\~Edition
-.als doc-operating-system-ATT-7th doc-operating-system-ATT-7
-.ds doc-operating-system-ATT-3   System\~III
-.als doc-operating-system-ATT-III doc-operating-system-ATT-3
-.ds doc-operating-system-ATT-V   System\~V
-.ds doc-operating-system-ATT-V.2 System\~V Release\~2
-.ds doc-operating-system-ATT-V.3 System\~V Release\~3
-.ds doc-operating-system-ATT-V.4 System\~V Release\~4
-.
-.ds doc-operating-system-BSD-3    3rd\~Berkeley Distribution
-.ds doc-operating-system-BSD-4    4th\~Berkeley Distribution
-.ds doc-operating-system-BSD-4.1  4.1\~Berkeley Distribution
-.ds doc-operating-system-BSD-4.2  4.2\~Berkeley Distribution
-.ds doc-operating-system-BSD-4.3  4.3\~Berkeley Distribution
-.ds doc-operating-system-BSD-4.3T 4.3-Tahoe Berkeley Distribution
-.ds doc-operating-system-BSD-4.3R 4.3-Reno Berkeley Distribution
-.als doc-operating-system-BSD-4.3t doc-operating-system-BSD-4.3T
-.als doc-operating-system-BSD-4.3r doc-operating-system-BSD-4.3R
-.ds doc-operating-system-BSD-4.4  4.4BSD
-.
-.ds doc-operating-system-NetBSD-0.8   0.8
-.ds doc-operating-system-NetBSD-0.8a  0.8A
-.ds doc-operating-system-NetBSD-0.9   0.9
-.ds doc-operating-system-NetBSD-0.9a  0.9A
-.ds doc-operating-system-NetBSD-1.0   1.0
-.ds doc-operating-system-NetBSD-1.0a  1.0A
-.ds doc-operating-system-NetBSD-1.1   1.1
-.ds doc-operating-system-NetBSD-1.2   1.2
-.ds doc-operating-system-NetBSD-1.2a  1.2A
-.ds doc-operating-system-NetBSD-1.2b  1.2B
-.ds doc-operating-system-NetBSD-1.2c  1.2C
-.ds doc-operating-system-NetBSD-1.2d  1.2D
-.ds doc-operating-system-NetBSD-1.2e  1.2E
-.ds doc-operating-system-NetBSD-1.3   1.3
-.ds doc-operating-system-NetBSD-1.3a  1.3A
-.ds doc-operating-system-NetBSD-1.4   1.4
-.ds doc-operating-system-NetBSD-1.4.1 1.4.1
-.ds doc-operating-system-NetBSD-1.4.2 1.4.2
-.ds doc-operating-system-NetBSD-1.4.3 1.4.3
-.ds doc-operating-system-NetBSD-1.5   1.5
-.ds doc-operating-system-NetBSD-1.5.1 1.5.1
-.ds doc-operating-system-NetBSD-1.5.2 1.5.2
-.ds doc-operating-system-NetBSD-1.5.3 1.5.3
-.ds doc-operating-system-NetBSD-1.6   1.6
-.ds doc-operating-system-NetBSD-1.6.1 1.6.1
-.ds doc-operating-system-NetBSD-1.6.2 1.6.2
-.ds doc-operating-system-NetBSD-1.6.3 1.6.3
-.ds doc-operating-system-NetBSD-2.0   2.0
-.ds doc-operating-system-NetBSD-2.0.1 2.0.1
-.ds doc-operating-system-NetBSD-2.0.2 2.0.2
-.ds doc-operating-system-NetBSD-2.0.3 2.0.3
-.ds doc-operating-system-NetBSD-2.1   2.1
-.ds doc-operating-system-NetBSD-3.0   3.0
-.ds doc-operating-system-NetBSD-3.0.1 3.0.1
-.ds doc-operating-system-NetBSD-3.0.2 3.0.2
-.ds doc-operating-system-NetBSD-3.0.3 3.0.3
-.ds doc-operating-system-NetBSD-3.1   3.1
-.ds doc-operating-system-NetBSD-3.1.1 3.1.1
-.ds doc-operating-system-NetBSD-4.0   4.0
-.ds doc-operating-system-NetBSD-4.0.1 4.0.1
-.ds doc-operating-system-NetBSD-5.0   5.0
-.ds doc-operating-system-NetBSD-5.0.1 5.0.1
-.ds doc-operating-system-NetBSD-5.0.2 5.0.2
-.ds doc-operating-system-NetBSD-5.1   5.1
-.ds doc-operating-system-NetBSD-5.1.2 5.1.2
-.ds doc-operating-system-NetBSD-5.1.3 5.1.3
-.ds doc-operating-system-NetBSD-5.1.4 5.1.4
-.ds doc-operating-system-NetBSD-5.2   5.2
-.ds doc-operating-system-NetBSD-5.2.1 5.2.1
-.ds doc-operating-system-NetBSD-5.2.2 5.2.2
-.ds doc-operating-system-NetBSD-6.0   6.0
-.ds doc-operating-system-NetBSD-6.0.1 6.0.1
-.ds doc-operating-system-NetBSD-6.0.2 6.0.2
-.ds doc-operating-system-NetBSD-6.0.3 6.0.3
-.ds doc-operating-system-NetBSD-6.0.4 6.0.4
-.ds doc-operating-system-NetBSD-6.0.5 6.0.5
-.ds doc-operating-system-NetBSD-6.1   6.1
-.ds doc-operating-system-NetBSD-6.1.1 6.1.1
-.ds doc-operating-system-NetBSD-6.1.2 6.1.2
-.ds doc-operating-system-NetBSD-6.1.3 6.1.3
-.ds doc-operating-system-NetBSD-6.1.4 6.1.4
-.
-.ds doc-operating-system-OpenBSD-2.0  2.0
-.ds doc-operating-system-OpenBSD-2.1  2.1
-.ds doc-operating-system-OpenBSD-2.2  2.2
-.ds doc-operating-system-OpenBSD-2.3  2.3
-.ds doc-operating-system-OpenBSD-2.4  2.4
-.ds doc-operating-system-OpenBSD-2.5  2.5
-.ds doc-operating-system-OpenBSD-2.6  2.6
-.ds doc-operating-system-OpenBSD-2.7  2.7
-.ds doc-operating-system-OpenBSD-2.8  2.8
-.ds doc-operating-system-OpenBSD-2.9  2.9
-.ds doc-operating-system-OpenBSD-3.0  3.0
-.ds doc-operating-system-OpenBSD-3.1  3.1
-.ds doc-operating-system-OpenBSD-3.2  3.2
-.ds doc-operating-system-OpenBSD-3.3  3.3
-.ds doc-operating-system-OpenBSD-3.4  3.4
-.ds doc-operating-system-OpenBSD-3.5  3.5
-.ds doc-operating-system-OpenBSD-3.6  3.6
-.ds doc-operating-system-OpenBSD-3.7  3.7
-.ds doc-operating-system-OpenBSD-3.8  3.8
-.ds doc-operating-system-OpenBSD-3.9  3.9
-.ds doc-operating-system-OpenBSD-4.0  4.0
-.ds doc-operating-system-OpenBSD-4.1  4.1
-.ds doc-operating-system-OpenBSD-4.2  4.2
-.ds doc-operating-system-OpenBSD-4.3  4.3
-.ds doc-operating-system-OpenBSD-4.4  4.4
-.ds doc-operating-system-OpenBSD-4.5  4.5
-.ds doc-operating-system-OpenBSD-4.6  4.6
-.ds doc-operating-system-OpenBSD-4.7  4.7
-.ds doc-operating-system-OpenBSD-4.8  4.8
-.ds doc-operating-system-OpenBSD-4.9  4.9
-.ds doc-operating-system-OpenBSD-5.0  5.0
-.ds doc-operating-system-OpenBSD-5.1  5.1
-.ds doc-operating-system-OpenBSD-5.2  5.2
-.ds doc-operating-system-OpenBSD-5.3  5.3
-.ds doc-operating-system-OpenBSD-5.4  5.4
-.ds doc-operating-system-OpenBSD-5.5  5.5
-.ds doc-operating-system-OpenBSD-5.6  5.6
-.
-.ds doc-operating-system-FreeBSD-1.0     1.0
-.ds doc-operating-system-FreeBSD-1.1     1.1
-.ds doc-operating-system-FreeBSD-1.1.5   1.1.5
-.ds doc-operating-system-FreeBSD-1.1.5.1 1.1.5.1
-.ds doc-operating-system-FreeBSD-2.0     2.0
-.ds doc-operating-system-FreeBSD-2.0.5   2.0.5
-.ds doc-operating-system-FreeBSD-2.1     2.1
-.ds doc-operating-system-FreeBSD-2.1.5   2.1.5
-.ds doc-operating-system-FreeBSD-2.1.6   2.1.6
-.ds doc-operating-system-FreeBSD-2.1.7   2.1.7
-.ds doc-operating-system-FreeBSD-2.2     2.2
-.ds doc-operating-system-FreeBSD-2.2.1   2.2.1
-.ds doc-operating-system-FreeBSD-2.2.2   2.2.2
-.ds doc-operating-system-FreeBSD-2.2.5   2.2.5
-.ds doc-operating-system-FreeBSD-2.2.6   2.2.6
-.ds doc-operating-system-FreeBSD-2.2.7   2.2.7
-.ds doc-operating-system-FreeBSD-2.2.8   2.2.8
-.ds doc-operating-system-FreeBSD-2.2.9   2.2.9
-.ds doc-operating-system-FreeBSD-3.0     3.0
-.ds doc-operating-system-FreeBSD-3.1     3.1
-.ds doc-operating-system-FreeBSD-3.2     3.2
-.ds doc-operating-system-FreeBSD-3.3     3.3
-.ds doc-operating-system-FreeBSD-3.4     3.4
-.ds doc-operating-system-FreeBSD-3.5     3.5
-.ds doc-operating-system-FreeBSD-4.0     4.0
-.ds doc-operating-system-FreeBSD-4.1     4.1
-.ds doc-operating-system-FreeBSD-4.1.1   4.1.1
-.ds doc-operating-system-FreeBSD-4.2     4.2
-.ds doc-operating-system-FreeBSD-4.3     4.3
-.ds doc-operating-system-FreeBSD-4.4     4.4
-.ds doc-operating-system-FreeBSD-4.5     4.5
-.ds doc-operating-system-FreeBSD-4.6     4.6
-.ds doc-operating-system-FreeBSD-4.6.2   4.6.2
-.ds doc-operating-system-FreeBSD-4.7     4.7
-.ds doc-operating-system-FreeBSD-4.8     4.8
-.ds doc-operating-system-FreeBSD-4.9     4.9
-.ds doc-operating-system-FreeBSD-4.10    4.10
-.ds doc-operating-system-FreeBSD-4.11    4.11
-.ds doc-operating-system-FreeBSD-5.0     5.0
-.ds doc-operating-system-FreeBSD-5.1     5.1
-.ds doc-operating-system-FreeBSD-5.2     5.2
-.ds doc-operating-system-FreeBSD-5.2.1   5.2.1
-.ds doc-operating-system-FreeBSD-5.3     5.3
-.ds doc-operating-system-FreeBSD-5.4     5.4
-.ds doc-operating-system-FreeBSD-5.5     5.5
-.ds doc-operating-system-FreeBSD-6.0     6.0
-.ds doc-operating-system-FreeBSD-6.1     6.1
-.ds doc-operating-system-FreeBSD-6.2     6.2
-.ds doc-operating-system-FreeBSD-6.3     6.3
-.ds doc-operating-system-FreeBSD-6.4     6.4
-.ds doc-operating-system-FreeBSD-7.0     7.0
-.ds doc-operating-system-FreeBSD-7.1     7.1
-.ds doc-operating-system-FreeBSD-7.2     7.2
-.ds doc-operating-system-FreeBSD-7.3     7.3
-.ds doc-operating-system-FreeBSD-7.4     7.4
-.ds doc-operating-system-FreeBSD-8.0     8.0
-.ds doc-operating-system-FreeBSD-8.1     8.1
-.ds doc-operating-system-FreeBSD-8.2     8.2
-.ds doc-operating-system-FreeBSD-8.3     8.3
-.ds doc-operating-system-FreeBSD-8.4     8.4
-.ds doc-operating-system-FreeBSD-9.0     9.0
-.ds doc-operating-system-FreeBSD-9.1     9.1
-.ds doc-operating-system-FreeBSD-9.2     9.2
-.ds doc-operating-system-FreeBSD-9.3     9.3
-.ds doc-operating-system-FreeBSD-10.0    10.0
-.
-.ds doc-operating-system-Darwin-8.0.0  8.0.0
-.ds doc-operating-system-Darwin-8.1.0  8.1.0
-.ds doc-operating-system-Darwin-8.2.0  8.2.0
-.ds doc-operating-system-Darwin-8.3.0  8.3.0
-.ds doc-operating-system-Darwin-8.4.0  8.4.0
-.ds doc-operating-system-Darwin-8.5.0  8.5.0
-.ds doc-operating-system-Darwin-8.6.0  8.6.0
-.ds doc-operating-system-Darwin-8.7.0  8.7.0
-.ds doc-operating-system-Darwin-8.8.0  8.8.0
-.ds doc-operating-system-Darwin-8.9.0  8.9.0
-.ds doc-operating-system-Darwin-8.10.0 8.10.0
-.ds doc-operating-system-Darwin-8.11.0 8.11.0
-.ds doc-operating-system-Darwin-9.0.0  9.0.0
-.ds doc-operating-system-Darwin-9.1.0  9.1.0
-.ds doc-operating-system-Darwin-9.2.0  9.2.0
-.ds doc-operating-system-Darwin-9.3.0  9.3.0
-.ds doc-operating-system-Darwin-9.4.0  9.4.0
-.ds doc-operating-system-Darwin-9.5.0  9.5.0
-.ds doc-operating-system-Darwin-9.6.0  9.6.0
-.ds doc-operating-system-Darwin-9.7.0  9.7.0
-.ds doc-operating-system-Darwin-9.8.0  9.8.0
-.ds doc-operating-system-Darwin-10.0.0 10.0.0
-.ds doc-operating-system-Darwin-10.1.0 10.1.0
-.ds doc-operating-system-Darwin-10.2.0 10.2.0
-.ds doc-operating-system-Darwin-10.3.0 10.3.0
-.ds doc-operating-system-Darwin-10.4.0 10.4.0
-.ds doc-operating-system-Darwin-10.5.0 10.5.0
-.ds doc-operating-system-Darwin-10.6.0 10.6.0
-.ds doc-operating-system-Darwin-10.7.0 10.7.0
-.ds doc-operating-system-Darwin-10.8.0 10.8.0
-.ds doc-operating-system-Darwin-11.0.0 11.0.0
-.ds doc-operating-system-Darwin-11.1.0 11.1.0
-.ds doc-operating-system-Darwin-11.2.0 11.2.0
-.ds doc-operating-system-Darwin-11.3.0 11.3.0
-.ds doc-operating-system-Darwin-11.4.0 11.4.0
-.ds doc-operating-system-Darwin-11.5.0 11.5.0
-.ds doc-operating-system-Darwin-12.0.0 12.0.0
-.ds doc-operating-system-Darwin-12.1.0 12.1.0
-.ds doc-operating-system-Darwin-12.2.0 12.2.0
-.ds doc-operating-system-Darwin-13.0.0 13.0.0
-.ds doc-operating-system-Darwin-13.1.0 13.1.0
-.ds doc-operating-system-Darwin-13.2.0 13.2.0
-.ds doc-operating-system-Darwin-13.3.0 13.3.0
-.ds doc-operating-system-Darwin-13.4.0 13.4.0
-.ds doc-operating-system-Darwin-14.0.0 14.0.0
-.
-.ds doc-operating-system-DragonFly-1.0    1.0
-.ds doc-operating-system-DragonFly-1.1    1.1
-.ds doc-operating-system-DragonFly-1.2    1.2
-.ds doc-operating-system-DragonFly-1.3    1.3
-.ds doc-operating-system-DragonFly-1.4    1.4
-.ds doc-operating-system-DragonFly-1.5    1.5
-.ds doc-operating-system-DragonFly-1.6    1.6
-.ds doc-operating-system-DragonFly-1.7    1.7
-.ds doc-operating-system-DragonFly-1.8    1.8
-.ds doc-operating-system-DragonFly-1.8.1  1.8.1
-.ds doc-operating-system-DragonFly-1.9    1.9
-.ds doc-operating-system-DragonFly-1.10   1.10
-.ds doc-operating-system-DragonFly-1.11   1.11
-.ds doc-operating-system-DragonFly-1.12   1.12
-.ds doc-operating-system-DragonFly-1.12.2 1.12.2
-.ds doc-operating-system-DragonFly-1.13   1.13
-.ds doc-operating-system-DragonFly-2.0    2.0
-.ds doc-operating-system-DragonFly-2.1    2.1
-.ds doc-operating-system-DragonFly-2.2    2.2
-.ds doc-operating-system-DragonFly-2.3    2.3
-.ds doc-operating-system-DragonFly-2.4    2.4
-.ds doc-operating-system-DragonFly-2.5    2.5
-.ds doc-operating-system-DragonFly-2.6    2.6
-.ds doc-operating-system-DragonFly-2.7    2.7
-.ds doc-operating-system-DragonFly-2.8    2.8
-.ds doc-operating-system-DragonFly-2.9    2.9
-.ds doc-operating-system-DragonFly-2.9.1  2.9.1
-.ds doc-operating-system-DragonFly-2.10   2.10
-.ds doc-operating-system-DragonFly-2.10.1 2.10.1
-.ds doc-operating-system-DragonFly-2.11   2.11
-.ds doc-operating-system-DragonFly-2.12   2.12
-.ds doc-operating-system-DragonFly-2.13   2.13
-.ds doc-operating-system-DragonFly-3.0    3.0
-.ds doc-operating-system-DragonFly-3.1    3.1
-.ds doc-operating-system-DragonFly-3.2    3.2
-.ds doc-operating-system-DragonFly-3.3    3.3
-.ds doc-operating-system-DragonFly-3.4    3.4
-.ds doc-operating-system-DragonFly-3.5    3.5
-.ds doc-operating-system-DragonFly-3.6    3.6
-.ds doc-operating-system-DragonFly-3.7    3.7
-.ds doc-operating-system-DragonFly-3.8    3.8
-.
-.de Os
-.  ds doc-command-name
-.
-.  ie "\$1"" \
-.    ds doc-operating-system "\*[doc-default-operating-system]
-.  el \{ .ie "\$1"ATT" \{\
-.    ds doc-operating-system AT&T
-.    if \A\$2 \{\
-.      ie d doc-operating-system-ATT-\$2 \
-.        as doc-operating-system " \*[doc-operating-system-ATT-\$2]
-.      el \
-.        as doc-operating-system " UNIX
-.  \}\}
-.  el \{ .ie "\$1"BSD" \{\
-.    if \A\$2 \{\
-.      ie d doc-operating-system-BSD-\$2 \
-.        ds doc-operating-system "\*[doc-operating-system-BSD-\$2]
-.      el \
-.        tm mdoc warning: .Os: Unknown BSD version `\$2' (#\n[.c])
-.  \}\}
-.  el \{ .ie "\$1"FreeBSD" \{\
-.    ds doc-operating-system FreeBSD
-.    if \A\$2 \{\
-.      ie d doc-operating-system-FreeBSD-\$2 \
-.        as doc-operating-system \~\*[doc-operating-system-FreeBSD-\$2]
-.      el \
-.        tm mdoc warning: .Os: Unknown FreeBSD version `\$2' (#\n[.c])
-.  \}\}
-.  el \{ .ie "\$1"DragonFly" \{\
-.    ds doc-operating-system DragonFly
-.    if \A\$2 \{\
-.      ie d doc-operating-system-DragonFly-\$2 \
-.        as doc-operating-system \~\*[doc-operating-system-DragonFly-\$2]
-.      el \
-.        tm mdoc warning: .Os: Unknown DragonFly version `\$2' (#\n[.c])
-.  \}\}
-.  el \{ .ie "\$1"NetBSD" \{\
-.    ds doc-operating-system NetBSD
-.    if \A\$2 \{\
-.      ie d doc-operating-system-NetBSD-\$2 \
-.        as doc-operating-system \~\*[doc-operating-system-NetBSD-\$2]
-.      el \
-.        tm mdoc warning: .Os: Unknown NetBSD version `\$2' (#\n[.c])
-.  \}\}
-.  el \{ .ie "\$1"OpenBSD" \{\
-.    ds doc-operating-system OpenBSD
-.    if \A\$2 \{\
-.      ie d doc-operating-system-OpenBSD-\$2 \
-.        as doc-operating-system \~\*[doc-operating-system-OpenBSD-\$2]
-.      el \
-.        tm mdoc warning: .Os: Unknown OpenBSD version `\$2' (#\n[.c])
-.  \}\}
-.  el \{ .ie "\$1"Darwin" \{\
-.    ds doc-operating-system Darwin
-.    if \A\$2 \{\
-.      ie d doc-operating-system-Darwin-\$2 \
-.        as doc-operating-system \~\*[doc-operating-system-Darwin-\$2]
-.      el \
-.        tm mdoc warning: .Os: Unknown Darwin version `\$2' (#\n[.c])
-.  \}\}
-.  el \{\
-.    ds doc-operating-system \$1
-.    if !"\$2"" \
-.      as doc-operating-system " \$2
-.  \}\}\}\}\}\}\}\}
-..
-.
-.
-.\" NS doc-date-string global string
-.\" NS   the manual page date as set by `Dd'
-.
-.ds doc-date-string
-.
-.
-.\" NS Dd user macro (not parsed, not callable)
-.\" NS   set document date
-.\" NS
-.\" NS modifies:
-.\" NS   doc-date-string
-.\" NS   doc-command-name
-.\" NS
-.\" NS local variables:
-.\" NS   doc-date-XXX
-.\" NS
-.\" NS width register `Dd' set above
-.
-.ds doc-date-1  January
-.ds doc-date-2  February
-.ds doc-date-3  March
-.ds doc-date-4  April
-.ds doc-date-5  May
-.ds doc-date-6  June
-.ds doc-date-7  July
-.ds doc-date-8  August
-.ds doc-date-9  September
-.ds doc-date-10 October
-.ds doc-date-11 November
-.ds doc-date-12 December
-.
-.de Dd
-.  ds doc-command-name
-.
-.  ie \n[.$] \{\
-.    ie "\$1"$Mdocdate:" \
-.      ds doc-date-string \$2\~\$3, \$4
-.    el .ie (\n[.$] == 3) \
-.      ds doc-date-string \$1\~\$2 \$3
-.    el \{\
-.      ds doc-date-string "\*[doc-date-\n[mo]]
-.      as doc-date-string \~\n[dy], \n[year]
-.    \}
-.  \}
-.  el \
-.    ds doc-date-string Epoch
-..
-.
-.
-.\" NS doc-hyphen-flags global register
-.\" NS   the parameter for the `.hy' request
-.\" NS
-.\" NS override this in `mdoc.local', if necessary.
-.
-.nr doc-hyphen-flags 12
-.
-.
-.\" NS doc-header macro
-.\" NS   print page header
-.\" NS
-.\" NS local variables:
-.\" NS   doc-reg-dh
-.\" NS   doc-reg-dh1
-.
-.de doc-header
-.  ev doc-env-dh
-.  doc-setup-page-layout
-.  if !\n[cR] \
-.    sp \n[doc-header-space]u
-.  nr doc-reg-dh \w'\*[doc-caption-font]\*[doc-header-string]\f[]'
-.  nr doc-reg-dh1 \w'\*[doc-caption-font2]\*[doc-volume]\f[]'
-.  if (\n[doc-reg-dh] + \n[doc-reg-dh1] + \n[doc-reg-dh] >= \n[.lt]) \{\
-.    while (\n[doc-reg-dh] + \n[doc-reg-dh1] + \n[doc-reg-dh] >= \n[.lt]) \{\
-.      substring doc-header-string 0 -2
-.      nr doc-reg-dh \w'\*[doc-caption-font]\*[doc-header-string]\|.\|.\|.\f[]'
-.    \}
-.    as doc-header-string "\|.\|.\|.
-.  \}
-.  tl \*[doc-caption-font]\*[doc-header-string]\f[]\*[doc-caption-font2]\*[doc-volume]\f[]\*[doc-caption-font]\*[doc-header-string]\f[]
-.  ie !\n[cR] \
-.    sp \n[doc-header-space]u
-.  el \
-.    sp 1v
-.  ev
-.  ns
-..
-.
-.
-.\" NS doc-footer macro
-.\" NS   print page footer
-.
-.de doc-footer
-.  ie \n[cR] \
-.    br
-.  el \{\
-.    ev doc-caption-enviroment
-.    doc-setup-page-layout
-.    sp \n[doc-footer-space]u
-.    ie \n[D] \{\
-.      ie o \
-.        tl %\*[doc-caption-font2]\*[doc-date-string]\f[]\*[doc-caption-font]\*[doc-operating-system]\f[]
-.      el \
-.        tl \*[doc-caption-font]\*[doc-operating-system]\f[]\*[doc-caption-font2]\*[doc-date-string]\f[]%
-.    \}
-.    el \
-.      tl \*[doc-caption-font]\*[doc-operating-system]\f[]\*[doc-caption-font2]\*[doc-date-string]\f[]%
-.    bp
-.    ev
-.  \}
-..
-.
-.
-.\" NS doc-check-depth macro
-.\" NS   check paired macros
-.
-.de doc-check-depth
-.  if \n[doc-list-depth] \{\
-.    tm mdoc warning: A .Bl directive has no matching .El (#\n[.c])
-.    nr doc-list-depth 0
-.  \}
-.  if \n[doc-display-depth] \{\
-.    tm mdoc warning: A .Bd directive has no matching .Ed (#\n[.c])
-.    nr doc-display-depth 0
-.  \}
-.  if \n[doc-fontmode-depth] \{\
-.    tm mdoc warning: A .Bf directive has no matching .Ef (#\n[.c])
-.    nr doc-fontmode-depth 0
-.  \}
-..
-.
-.
-.\" NS doc-end-macro macro
-.\" NS   finish output
-.
-.de doc-end-macro
-.  \" We may still have a partial line in the environment.  If this is the
-.  \" case, and we happen to be on the last line of the page, the `.fl'
-.  \" request will cause the page to be ejected and troff will immediately
-.  \" exit.  If we are in nroff mode, this would be unfortunate, since we
-.  \" would never get a chance to output the footer.  So we fudge the page
-.  \" length to make sure that the last page is never ejected until we want
-.  \" it to be.
-.
-.  if \n[cR] \
-.    pl +3v
-.  fl
-.
-.  doc-check-depth
-.
-.  if \n[cR] \{\
-.    sp
-.    tl \*[doc-caption-font]\*[doc-operating-system]\f[]\*[doc-caption-font2]\*[doc-date-string]\f[]\*[doc-caption-font]\*[doc-operating-system]\f[]
-.    \" suppress empty lines after the footer
-.    pl \n[nl]u
-.  \}
-..
-.
-.
-.\" NS doc-paragraph macro
-.\" NS   insert a paragraph
-.
-.de doc-paragraph
-.  sp \n[doc-paragraph-space]u
-.  if !\n[cR] \
-.    ne 2
-.  ns
-..
-.
-.
-.\" NS Pp user macro (not parsed, not callable)
-.\" NS   new paragraph
-.\" NS
-.\" NS width register `Pp' set above
-.
-.als Pp doc-paragraph
-.
-.
-.\" NS Lp user macro (not parsed, not callable)
-.\" NS   same as .Pp
-.\" NS
-.\" NS width register `Lp' set above
-.
-.als Lp doc-paragraph
-.
-.
-.de LP
-.  tm Not a \-mdoc command: .LP (#\n[.c])
-..
-.
-.
-.de PP
-.  tm Not a \-mdoc command: .PP (#\n[.c])
-..
-.
-.
-.de pp
-.  tm Not a \-mdoc command: .pp (#\n[.c])
-..
-.
-.
-.de SH
-.  tm Not a \-mdoc command: .SH (#\n[.c])
-..
-.
-.
-.\" NS Nd user macro (not parsed, not callable)
-.\" NS   print name description
-.\" NS
-.\" NS width register `Nd' set above
-.
-.de Nd
-.  nop \[em] \$*
-..
-.
-.
-.\" NS doc-in-synopsis-section global register (bool)
-.\" NS   whether we are in the `synopsis' section
-.
-.nr doc-in-synopsis-section 0
-.
-.
-.\" NS doc-in-library-section global register (bool)
-.\" NS   whether we are in the `library' section
-.
-.nr doc-in-library-section 0
-.
-.
-.\" NS doc-in-see-also-section global register (bool)
-.\" NS   whether we are in the `see also' section
-.
-.nr doc-in-see-also-section 0
-.
-.
-.\" NS doc-in-files-section global register (bool)
-.\" NS   whether we are in the `files' section
-.
-.nr doc-in-files-section 0
-.
-.
-.\" NS doc-in-authors-section global register (bool)
-.\" NS   whether we are in the `authors' section
-.
-.nr doc-in-authors-section 0
-.
-.
-.\" NS doc-first-parameter macro
-.\" NS   return first parameter
-.\" NS
-.\" NS local variables:
-.\" NS   doc-str-dfp
-.
-.de doc-first-parameter
-.  ds doc-str-dfp "\$1
-..
-.
-.
-.\" NS Sh user macro (not callable)
-.\" NS   section headers
-.\" NS
-.\" NS modifies:
-.\" NS   doc-func-args-processed
-.\" NS   doc-func-count
-.\" NS   doc-in-authors-section
-.\" NS   doc-in-files-section
-.\" NS   doc-in-library-section
-.\" NS   doc-in-see-also-section
-.\" NS   doc-in-synopsis-section
-.\" NS   doc-indent-synopsis
-.\" NS   doc-indent-synopsis-active
-.\" NS   doc-is-func
-.\" NS   doc-num-func-args
-.\" NS
-.\" NS local variables:
-.\" NS   doc-reg-Sh
-.\" NS   doc-reg-Sh1
-.\" NS   doc-section-XXX
-.\" NS
-.\" NS width register `Sh' set in doc-common
-.
-.ds doc-section-name        NAME
-.ds doc-section-synopsis    SYNOPSIS
-.ds doc-section-library     LIBRARY
-.ds doc-section-description DESCRIPTION
-.ds doc-section-see-also    SEE
-.ds doc-section-files       FILES
-.ds doc-section-authors     AUTHORS
-.
-.de Sh
-.  ie \n[doc-arg-limit] \{\
-.    \" we only allow `Sh' within `Sh'; it will change the font back to
-.    \" `doc-Sh-font'
-.    ie "\*[doc-macro-name]"Sh" \{\
-.      nr doc-arg-ptr +1
-.      ie (\n[doc-arg-limit] >= \n[doc-arg-ptr]) \{\
-.        nr doc-curr-font \n[.f]
-.        nr doc-curr-size \n[.ps]
-.        nop \*[doc-Sh-font]\c
-.        doc-print-recursive
-.      \}
-.      el \{\
-.        tm Usage: .Sh section_name ... (#\n[.c])
-.        doc-reset-args
-.    \}\}
-.    el \{\
-.      tm Usage: .Sh not callable by other macros (#\n[.c])
-.      doc-reset-args
-.  \}\}
-.  el \{\
-.    if !\n[.$] \{\
-.      tm Usage: .Sh section_name ... (#\n[.c])
-.      return
-.    \}
-.
-.    ds doc-macro-name Sh
-.    doc-parse-args \$@
-.
-.    if t \
-.      ad
-.
-.    \" this resolves e.g. `.Sh "SEE ALSO"'
-.    doc-first-parameter \$*
-.
-.    ie "\*[doc-str-dfp]"\*[doc-section-name]" \{\
-.      doc-setup-header
-.      in 0
-.    \}
-.    el \{\
-.      nr doc-in-synopsis-section 0
-.      nr doc-in-library-section 0
-.      nr doc-in-see-also-section 0
-.      nr doc-in-files-section 0
-.      nr doc-in-authors-section 0
-.
-.      ie        "\*[doc-str-dfp]"\*[doc-section-synopsis]" \{\
-.        if t \
-.          na
-.        nr doc-in-synopsis-section 1
-.        nr doc-indent-synopsis 0
-.        nr doc-indent-synopsis-active 0
-.      \}
-.      el \{ .ie "\*[doc-str-dfp]"\*[doc-section-library]" \{\
-.        nr doc-in-library-section 1
-.      \}
-.      el \{ .ie "\*[doc-str-dfp]"\*[doc-section-description]" \{\
-.        nr doc-is-func 0
-.        nr doc-func-count 0
-.        nr doc-func-args-processed 0
-.        nr doc-num-func-args 0
-.      \}
-.      el \{ .ie "\*[doc-str-dfp]"\*[doc-section-see-also]" \{\
-.        if t \
-.          na
-.        nr doc-in-see-also-section 1
-.      \}
-.      el \{ .ie "\*[doc-str-dfp]"\*[doc-section-files]" \
-.        nr doc-in-files-section 1
-.      el .if    "\*[doc-str-dfp]"\*[doc-section-authors]" \
-.        nr doc-in-authors-section 1
-.      \}\}\}\}
-.
-.      in 0
-.      nr doc-have-author 0
-.    \}
-.
-.    doc-setup-page-layout
-.    sp
-.    ns
-.    ta T .5i
-.    if !\n[cR] \
-.      ne 3
-.    fi
-.
-.    if t \{\
-.      nr doc-reg-Sh \n[.ss]
-.      nr doc-reg-Sh1 \n[.sss]
-.      ss (\n[.ss] * 5 / 3) (\n[.sss] * 5 / 3)
-.    \}
-.
-.    nr doc-arg-ptr +1
-.    nr doc-curr-font \n[.f]
-.    nr doc-curr-size \n[.ps]
-.    nop \*[doc-Sh-font]\c
-.    doc-print-recursive
-.
-.    if t \
-.      ss \n[doc-reg-Sh] \n[doc-reg-Sh1]
-.
-.    in +\n[doc-subheader-indent]u
-.    ns
-.
-.    doc-check-depth
-.  \}
-..
-.
-.
-.\" NS Ss user macro (not callable)
-.\" NS   subsection
-.\" NS
-.\" NS local variable:
-.\" NS   doc-reg-Ss
-.\" NS   doc-reg-Ss1
-.\" NS
-.\" NS width register `Ss' set above
-.
-.de Ss
-.  ie \n[doc-arg-limit] \{\
-.    \" we only allow `Ss' within `Ss'; it will change the font back to
-.    \" `doc-Sh-font'
-.    ie "\*[doc-macro-name]"Ss" \{\
-.      nr doc-arg-ptr +1
-.      ie (\n[doc-arg-limit] >= \n[doc-arg-ptr]) \{\
-.        nr doc-curr-font \n[.f]
-.        nr doc-curr-size \n[.ps]
-.        nop \*[doc-Sh-font]\c
-.        doc-print-recursive
-.      \}
-.      el \{\
-.        tm Usage: .Ss subsection_name ... (#\n[.c])
-.        doc-reset-args
-.    \}\}
-.    el \{\
-.      tm Usage: .Ss not callable by other macros (#\n[.c])
-.      doc-reset-args
-.  \}\}
-.  el \{\
-.    if !\n[.$] \{\
-.      tm Usage: .Ss subsection_name ... (#\n[.c])
-.      return
-.    \}
-.
-.    ds doc-macro-name Ss
-.    doc-parse-args \$@
-.
-.    sp
-.    if !\n[cR] \
-.      ne 3
-.    ti -.25i
-.
-.    nr doc-reg-Ss \n[.ss]
-.    nr doc-reg-Ss1 \n[.sss]
-.    ss (\n[.ss] * 5 / 4) (\n[.sss] * 5 / 4)
-.
-.    nr doc-arg-ptr +1
-.    nr doc-curr-font \n[.f]
-.    nr doc-curr-size \n[.ps]
-.    nop \*[doc-Sh-font]\c
-.    doc-print-recursive
-.
-.    ss \n[doc-reg-Ss] \n[doc-reg-Ss1]
-.
-.    ta T .5i
-.    if !\n[cR] \
-.      ne 2
-.    br
-.    ns
-.
-.    doc-check-depth
-.  \}
-..
-.
-.
-.\" NS Rd macro (not parsed, not callable)
-.\" NS   print global register dump to stderr
-.\" NS
-.\" NS local variables:
-.\" NS   doc-reg-Rd
-.
-.de Rd
-.  tm MDOC GLOBAL REGISTER DUMP
-.  tm doc-macro-name == `\*[doc-macro-name]'
-.  tm doc-arg-limit == \n[doc-arg-limit]
-.  tm doc-num-args == \n[doc-num-args]
-.  tm doc-arg-ptr == \n[doc-arg-ptr]
-.
-.  nr doc-reg-Rd 1
-.  while (\n[doc-reg-Rd] <= \n[doc-arg-limit]) \{\
-.    tm doc-arg\n[doc-reg-Rd] == `\*[doc-arg\n[doc-reg-Rd]]'
-.    tm doc-type\n[doc-reg-Rd] == \n[doc-type\n[doc-reg-Rd]]
-.    tm doc-space\n[doc-reg-Rd] == `\*[doc-space\n[doc-reg-Rd]]'
-.    nr doc-reg-Rd +1
-.  \}
-.
-.  tm doc-curr-font == \n[doc-curr-font]
-.  tm doc-curr-size == \n[doc-curr-size]
-.  tm doc-indent-synopsis == \n[doc-indent-synopsis]
-.  tm doc-indent-synopsis-active == \n[doc-indent-synopsis-active]
-.  tm doc-have-decl == \n[doc-have-decl]
-.  tm doc-have-var == \n[doc-have-var]
-.  tm doc-command-name == `\*[doc-command-name]'
-.  tm doc-quote-left == `\*[doc-quote-left]'
-.  tm doc-quote-right == `\*[doc-quote-right]'
-.  tm doc-nesting-level == \n[doc-nesting-level]
-.  tm doc-in-list == \n[doc-in-list]
-.  tm doc-space == `\*[doc-space]'
-.  tm doc-saved-space == `\*[doc-saved-space]'
-.  tm doc-space-mode == \n[doc-space-mode]
-.  tm doc-have-space == \n[doc-have-space]
-.  tm doc-have-slot == \n[doc-have-slot]
-.  tm doc-keep-type == \n[doc-keep-type]
-.  tm doc-display-depth == \n[doc-display-depth]
-.  tm doc-is-compact == \n[doc-is-compact]
-.
-.  nr doc-reg-Rd 0
-.  while (\n[doc-reg-Rd] <= \n[doc-display-depth]) \{\
-.    tm doc-display-type-stack\n[doc-reg-Rd] == `\*[doc-display-type-stack\n[doc-reg-Rd]]'
-.    tm doc-display-indent-stack\n[doc-reg-Rd] == \n[doc-display-indent-stack\n[doc-reg-Rd]]
-.    tm doc-display-ad-stack\n[doc-reg-Rd] == \n[doc-display-ad-stack\n[doc-reg-Rd]]
-.    tm doc-display-fi-stack\n[doc-reg-Rd] == \n[doc-display-fi-stack\n[doc-reg-Rd]]
-.    tm doc-display-ft-stack\n[doc-reg-Rd] == \n[doc-display-ft-stack\n[doc-reg-Rd]]
-.    tm doc-display-ps-stack\n[doc-reg-Rd] == \n[doc-display-ps-stack\n[doc-reg-Rd]]
-.    nr doc-reg-Rd +1
-.  \}
-.
-.  tm doc-fontmode-depth == \n[doc-fontmode-depth]
-.
-.  nr doc-reg-Rd 1
-.  while (\n[doc-reg-Rd] <= \n[doc-fontmode-depth]) \{\
-.    tm doc-fontmode-font-stack\n[doc-reg-Rd] == `\n[doc-fontmode-font-stack\n[doc-reg-Rd]]'
-.    tm doc-fontmode-size-stack\n[doc-reg-Rd] == `\n[doc-fontmode-size-stack\n[doc-reg-Rd]]'
-.    nr doc-reg-Rd +1
-.  \}
-.
-.  tm doc-list-depth == \n[doc-list-depth]
-.
-.  nr doc-reg-Rd 1
-.  while (\n[doc-reg-Rd] <= \n[doc-list-depth]) \{\
-.    tm doc-list-type-stack\n[doc-reg-Rd] == `\*[doc-list-type-stack\n[doc-reg-Rd]]'
-.    tm doc-list-have-indent-stack\n[doc-reg-Rd] == \n[doc-list-have-indent-stack\n[doc-reg-Rd]]
-.    tm doc-list-indent-stack\n[doc-reg-Rd] == \n[doc-list-indent-stack\n[doc-reg-Rd]]
-.    tm doc-compact-list-stack\n[doc-reg-Rd] == \n[doc-compact-list-stack\n[doc-reg-Rd]]
-.    tm doc-tag-prefix-stack\n[doc-reg-Rd] == `\*[doc-tag-prefix-stack\n[doc-reg-Rd]]'
-.    tm doc-tag-width-stack\n[doc-reg-Rd] == `\*[doc-tag-width-stack\n[doc-reg-Rd]]'
-.    tm doc-list-offset-stack\n[doc-reg-Rd] == \n[doc-list-offset-stack\n[doc-reg-Rd]]
-.    tm doc-enum-list-count-stack\n[doc-reg-Rd] == \n[doc-enum-list-count-stack\n[doc-reg-Rd]]
-.    nr doc-reg-Rd +1
-.  \}
-.
-.  tm doc-saved-Pa-font == `\*[doc-saved-Pa-font]'
-.  tm doc-curr-type == \n[doc-curr-type]
-.  tm doc-curr-arg == `\*[doc-curr-arg]'
-.  tm doc-diag-list-input-line-count == \n[doc-diag-list-input-line-count]
-.  tm doc-num-columns == \n[doc-num-columns]
-.  tm doc-column-indent-width == \n[doc-column-indent-width]
-.  tm doc-is-func == \n[doc-is-func]
-.  tm doc-have-old-func == \n[doc-have-old-func]
-.  tm doc-func-arg-count == \n[doc-func-arg-count]
-.  tm doc-func-arg == `\*[doc-func-arg]'
-.  tm doc-num-func-args == \n[doc-num-func-args]
-.  tm doc-func-args-processed == \n[doc-func-args-processed]
-.  tm doc-have-func == \n[doc-have-func]
-.  tm doc-is-reference == \n[doc-is-reference]
-.  tm doc-reference-count == \n[doc-reference-count]
-.  tm doc-author-count == \n[doc-author-count]
-.
-.  nr doc-reg-Rd 0
-.  while (\n[doc-reg-Rd] <= \n[doc-author-count]) \{\
-.    tm doc-author-name\n[doc-reg-Rd] == `\*[doc-author-name\n[doc-reg-Rd]]'
-.    nr doc-reg-Rd +1
-.  \}
-.
-.  tm doc-book-count == \n[doc-book-count]
-.  tm doc-book-name == `\*[doc-book-name]'
-.  tm doc-date-count == \n[doc-date-count]
-.  tm doc-date == `\*[doc-date]'
-.  tm doc-publisher-count == \n[doc-publisher-count]
-.  tm doc-publisher-name == `\*[doc-publisher-name]'
-.  tm doc-journal-count == \n[doc-journal-count]
-.  tm doc-journal-name == `\*[doc-journal-name]'
-.  tm doc-issue-count == \n[doc-issue-count]
-.  tm doc-issue-name == `\*[doc-issue-name]'
-.  tm doc-optional-count == \n[doc-optional-count]
-.  tm doc-optional-string == `\*[doc-optional-string]'
-.  tm doc-page-number-count == \n[doc-page-number-count]
-.  tm doc-page-number-string == `\*[doc-page-number-string]'
-.  tm doc-corporate-count == \n[doc-corporate-count]
-.  tm doc-corporate-name == `\*[doc-corporate-name]'
-.  tm doc-report-count == \n[doc-report-count]
-.  tm doc-report-name == `\*[doc-report-name]'
-.  tm doc-reference-title-count == \n[doc-reference-title-count]
-.  tm doc-reference-title-name == `\*[doc-reference-title-name]'
-.  tm doc-reference-title-name-for-book == `\*[doc-reference-title-name-for-book]'
-.  tm doc-url-count == \n[doc-url-count]
-.  tm doc-url-name == `\*[doc-url-name]'
-.  tm doc-volume-count == \n[doc-volume-count]
-.  tm doc-volume-name == `\*[doc-volume-name]'
-.  tm doc-have-author == \n[doc-have-author]
-.
-.  tm doc-document-title == `\*[doc-document-title]'
-.  tm doc-volume == `\*[doc-volume]'
-.  tm doc-section == `\*[doc-section]'
-.  tm doc-operating-system == `\*[doc-operating-system]'
-.  tm doc-date-string == `\*[doc-date-string]'
-.  tm doc-header-space == \n[doc-header-space]
-.  tm doc-footer-space == \n[doc-footer-space]
-.  tm doc-display-vertical == \n[doc-display-vertical]
-.  tm doc-header-string == `\*[doc-header-string]'
-.  tm doc-in-synopsis-section == \n[doc-in-synopsis-section]
-.  tm doc-in-library-section == \n[doc-in-library-section]
-.  tm doc-in-see-also-section == \n[doc-in-see-also-section]
-.  tm doc-in-files-section == \n[doc-in-files-section]
-.  tm doc-in-authors-section == \n[doc-in-authors-section]
-.
-.  tm END OF GLOBAL REGISTER DUMP
-..
-.
-.
-.ec
-.
-.\" EOF
diff -Nuar groff-1.22.3.old/tmac/doc-common-u groff-1.22.3/tmac/doc-common-u
--- groff-1.22.3.old/tmac/doc-common-u	1970-01-01 02:00:00.000000000 +0200
+++ groff-1.22.3/tmac/doc-common-u	2015-04-23 20:57:03.000000000 +0300
@@ -0,0 +1,1376 @@
+.\" -*- nroff -*-
+.\"
+.\" Copyright (c) 1991, 1993
+.\"	The Regents of the University of California.  All rights reserved.
+.\"
+.\" Redistribution and use in source and binary forms, with or without
+.\" modification, are permitted provided that the following conditions
+.\" are met:
+.\" 1. Redistributions of source code must retain the above copyright
+.\"    notice, this list of conditions and the following disclaimer.
+.\" 2. Redistributions in binary form must reproduce the above copyright
+.\"    notice, this list of conditions and the following disclaimer in the
+.\"    documentation and/or other materials provided with the distribution.
+.\" 3. [Deleted.  See
+.\"     ftp://ftp.cs.berkeley.edu/pub/4bsd/README.Impt.License.Change]
+.\" 4. Neither the name of the University nor the names of its contributors
+.\"    may be used to endorse or promote products derived from this software
+.\"    without specific prior written permission.
+.\"
+.\" THIS SOFTWARE IS PROVIDED BY THE REGENTS AND CONTRIBUTORS ``AS IS'' AND
+.\" ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE
+.\" IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE
+.\" ARE DISCLAIMED.  IN NO EVENT SHALL THE REGENTS OR CONTRIBUTORS BE LIABLE
+.\" FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL
+.\" DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS
+.\" OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION)
+.\" HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT
+.\" LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY
+.\" OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF
+.\" SUCH DAMAGE.
+.\"
+.\"     @(#)doc-common	8.1 (Berkeley) 06/08/93
+.\"
+.\"     %beginstrip%
+.
+.
+.\" Macro Identifiers.  For each user macro a corresponding register with
+.\" the same name must exist.  Its value must not be zero.
+.
+.nr %A 1
+.nr %B 1
+.nr %C 1
+.nr %D 1
+.nr %I 1
+.nr %J 1
+.nr %N 1
+.nr %O 1
+.nr %P 1
+.nr %Q 1
+.nr %R 1
+.nr %T 1
+.nr %U 1
+.nr %V 1
+.nr Ac 3
+.nr Ad 12n
+.nr An 12n
+.nr Ao 12n
+.nr Ap 2
+.nr Aq 12n
+.nr Ar 12n
+.nr At 1
+.nr Bc 3
+.nr Bf 8n\" ?
+.nr Bk 8n\" ?
+.nr Bl 1
+.nr Bo 12n
+.nr Bq 12n
+.nr Brc 3
+.nr Bro 12n
+.nr Brq 12n
+.nr Bsx 1
+.nr Bt 8n\" ?
+.nr Bx 1
+.nr Cd 12n
+.nr Cm 10n
+.nr D1 8n\" ?
+.nr Dc 3
+.nr Dl 8n\" ?
+.nr Dt 8n\" ?
+.nr Do 12n
+.nr Dq 12n
+.nr Ds 6n\" many manpages still use this as a -width value
+.nr Dv 12n
+.nr Dx 1
+.nr Ec 3
+.nr Ef 8n\" ?
+.nr Ek 8n\" ?
+.nr El 1
+.nr Em 10n
+.nr En 12n
+.nr Eo 12n
+.nr Eq 12n
+.nr Er 17n
+.nr Es 12n
+.nr Ev 15n
+.nr Ex 1
+.nr Fa 12n
+.nr Fc 3
+.nr Fd 12n\" ?
+.nr Fl 10n
+.nr Fn 16n
+.nr Fo 16n
+.nr Fr 12n\" ?
+.nr Ft 8n\" ?
+.nr Fx 1
+.nr Ic 10n
+.nr In 12n
+.nr It 8n\" ?
+.nr Lb 11n
+.nr Li 16n
+.nr Lk 6n\" ?
+.nr Lp 8n\" ?
+.nr Me 6n
+.nr Ms 6n
+.nr Mt 6n\" ?
+.nr Nd 8n\" ?
+.nr Nm 10n
+.nr No 12n
+.nr Ns 2
+.nr Nx 1
+.nr Oc 3
+.nr Oo 10n
+.nr Op 14n
+.nr Os 6n\" ?
+.nr Ox 1
+.nr Pa 32n
+.nr Pc 3
+.nr Pf 12n
+.nr Po 12n
+.nr Pp 8n\" ?
+.nr Pq 12n
+.nr Qc 3
+.nr Ql 16n
+.nr Qo 12n
+.nr Qq 12n
+.nr Rv 1
+.nr Sc 3
+.nr Sh 8n
+.nr Sm 8n\" ?
+.nr So 12n
+.nr Sq 12n
+.nr Ss 8n
+.nr St 8n\" ?
+.nr Sx 16n
+.nr Sy 6n
+.nr Ta 2
+.nr Tn 10n
+.nr Ud 8n\" ?
+.nr Ux 1
+.nr Va 12n
+.nr Vt 8n\" ?
+.nr Xc 3
+.nr Xo 1
+.nr Xr 10n
+.
+.
+.\" macros which must be processed after the closing delimiter of `Op'
+.\" and friends
+.ds doc-after-Ao
+.ds doc-after-Bo
+.ds doc-after-Bro
+.ds doc-after-Do
+.ds doc-after-Eo
+.ds doc-after-Fo
+.ds doc-after-Ns
+.ds doc-after-Oo
+.ds doc-after-Po
+.ds doc-after-Qo
+.ds doc-after-So
+.ds doc-after-Xo
+.
+.
+.nr doc-display-indent 6n
+.
+.
+.\" space strings
+.
+.ds doc-soft-space " \"
+.ds doc-hard-space \~
+.ds doc-tab \t
+.
+.
+.eo
+.
+.
+.\" punctuation values (suffix=3, prefix=4)
+.
+.nr doc-punct. 3
+.nr doc-punct, 3
+.nr doc-punct: 3
+.nr doc-punct; 3
+.nr doc-punct( 4
+.nr doc-punct) 3
+.nr doc-punct[ 4
+.nr doc-punct] 3
+.nr doc-punct? 3
+.nr doc-punct! 3
+.
+.
+.\" header assembly macros
+.
+.\" NS doc-document-title global string
+.\" NS   the title of the manual page
+.
+.ds doc-document-title UNTITLED
+.
+.
+.\" NS doc-volume global string
+.\" NS   the volume where the manual page belongs to
+.
+.ds doc-volume LOCAL
+.
+.
+.\" NS doc-section global string
+.\" NS   the manual section
+.
+.ds doc-section Null
+.
+.
+.\" NS Dt user macro (not parsed, not callable)
+.\" NS   document title
+.\" NS
+.\" NS modifies:
+.\" NS   doc-document-title
+.\" NS   doc-section
+.\" NS   doc-volume
+.\" NS   doc-command-name
+.\" NS
+.\" NS local variables:
+.\" NS   doc-volume-as-XXX
+.\" NS   doc-volume-ds-XXX
+.\" NS
+.\" NS width register `Dt' set above
+.
+.\" an alternative, more detailed scheme for naming the manual sections
+.\"
+.ds doc-volume-operating-system BSD
+.nr doc-volume-operating-system-ateol 0
+.ds doc-volume-ds-1 General Commands Manual
+.ds doc-volume-ds-2 System Calls Manual
+.ds doc-volume-ds-3 Library Functions Manual
+.ds doc-volume-ds-4 Kernel Interfaces Manual
+.ds doc-volume-ds-5 File Formats Manual
+.ds doc-volume-ds-6 Games Manual
+.ds doc-volume-ds-7 Miscellaneous Information Manual
+.ds doc-volume-ds-8 System Manager's Manual
+.ds doc-volume-ds-9 Kernel Developer's Manual
+.
+.ds doc-volume-ds-USD   User's Supplementary Documents
+.ds doc-volume-ds-PS1   Programmer's Supplementary Documents
+.ds doc-volume-ds-AMD   Ancestral Manual Documents
+.ds doc-volume-ds-SMM   System Manager's Manual
+.ds doc-volume-ds-URM   User's Reference Manual
+.ds doc-volume-ds-PRM   Programmer's Manual
+.ds doc-volume-ds-KM    Kernel Manual
+.ds doc-volume-ds-IND   Manual Master Index
+.ds doc-volume-ds-LOCAL Local Manual
+.ds doc-volume-ds-CON   Contributed Software Manual
+.
+.als doc-volume-ds-MMI doc-volume-ds-IND
+.als doc-volume-ds-LOC doc-volume-ds-LOCAL
+.
+.ds doc-volume-as-alpha        alpha
+.als doc-volume-as-Alpha doc-volume-as-alpha
+.ds doc-volume-as-acorn26      acorn26
+.ds doc-volume-as-acorn32      acorn32
+.ds doc-volume-as-algor        algor
+.ds doc-volume-as-amd64        amd64
+.ds doc-volume-as-amiga        amiga
+.ds doc-volume-as-amigappc     amigappc
+.ds doc-volume-as-arc          arc
+.ds doc-volume-as-arm          arm
+.ds doc-volume-as-arm26        arm26
+.ds doc-volume-as-arm32        arm32
+.ds doc-volume-as-armish       armish
+.ds doc-volume-as-atari        atari
+.ds doc-volume-as-aviion       aviion
+.ds doc-volume-as-beagle       beagle
+.ds doc-volume-as-bebox        bebox
+.ds doc-volume-as-cats         cats
+.ds doc-volume-as-cesfic       cesfic
+.ds doc-volume-as-cobalt       cobalt
+.ds doc-volume-as-dreamcast    dreamcast
+.ds doc-volume-as-emips        emips
+.ds doc-volume-as-evbarm       evbarm
+.ds doc-volume-as-evbmips      evbmips
+.ds doc-volume-as-evbppc       evbppc
+.ds doc-volume-as-evbsh3       evbsh3
+.ds doc-volume-as-ews4800mips  ews4800mips
+.ds doc-volume-as-hp300        hp300
+.ds doc-volume-as-hp700        hp700
+.ds doc-volume-as-hpcarm       hpcarm
+.ds doc-volume-as-hpcmips      hpcmips
+.ds doc-volume-as-hpcsh        hpcsh
+.ds doc-volume-as-hppa         hppa
+.ds doc-volume-as-hppa64       hppa64
+.ds doc-volume-as-i386         i386
+.ds doc-volume-as-ia64         ia64
+.ds doc-volume-as-ibmnws       ibmnws
+.ds doc-volume-as-iyonix       iyonix
+.ds doc-volume-as-landisk      landisk
+.ds doc-volume-as-loongson     loongson
+.ds doc-volume-as-luna68k      luna68k
+.ds doc-volume-as-luna88k      luna88k
+.ds doc-volume-as-m68k         m68k
+.ds doc-volume-as-mac68k       mac68k
+.ds doc-volume-as-macppc       macppc
+.ds doc-volume-as-mips         mips
+.ds doc-volume-as-mips64       mips64
+.ds doc-volume-as-mipsco       mipsco
+.ds doc-volume-as-mmeye        mmeye
+.ds doc-volume-as-mvme68k      mvme68k
+.ds doc-volume-as-mvme88k      mvme88k
+.ds doc-volume-as-mvmeppc      mvmeppc
+.ds doc-volume-as-netwinder    netwinder
+.ds doc-volume-as-news68k      news68k
+.ds doc-volume-as-newsmips     newsmips
+.ds doc-volume-as-next68k      next68k
+.ds doc-volume-as-ofppc        ofppc
+.ds doc-volume-as-palm         palm
+.ds doc-volume-as-pc532        pc532
+.ds doc-volume-as-playstation2 playstation2
+.ds doc-volume-as-pmax         pmax
+.ds doc-volume-as-pmppc        pmppc
+.ds doc-volume-as-powerpc      powerpc
+.ds doc-volume-as-prep         prep
+.ds doc-volume-as-rs6000       rs6000
+.ds doc-volume-as-sandpoint    sandpoint
+.ds doc-volume-as-sbmips       sbmips
+.ds doc-volume-as-sgi          sgi
+.ds doc-volume-as-sgimips      sgimips
+.ds doc-volume-as-sh3          sh3
+.ds doc-volume-as-shark        shark
+.ds doc-volume-as-socppc       socppc
+.ds doc-volume-as-solbourne    solbourne
+.ds doc-volume-as-sparc        sparc
+.ds doc-volume-as-sparc64      sparc64
+.ds doc-volume-as-sun2         sun2
+.ds doc-volume-as-sun3         sun3
+.ds doc-volume-as-tahoe        tahoe
+.ds doc-volume-as-vax          vax
+.ds doc-volume-as-x68k         x68k
+.ds doc-volume-as-x86_64       x86_64
+.ds doc-volume-as-xen          xen
+.ds doc-volume-as-zaurus       zaurus
+.
+.de Dt
+.  \" reset default arguments
+.  ds doc-document-title UNTITLED
+.  ds doc-volume LOCAL
+.  ds doc-section Null
+.  ds doc-command-name
+.
+.  if !"\$1"" \
+.    ds doc-document-title "\$1
+.
+.  if !"\$2"" \{\
+.    ds doc-section \$2
+.    ie \B\$2 \{\
+.      if ((\$2 >= 1) & (\$2 <= 9)) \{\
+.        ie \n[doc-volume-operating-system-ateol] \{\
+.          ds doc-volume "\*[doc-volume-ds-\$2] \*[doc-volume-operating-system]
+.          if \A\$3 \{\
+.            if d doc-volume-as-\$3 \
+.              as doc-volume "/\*[doc-volume-as-\$3]
+.        \}\}
+.        el \{\
+.          ds doc-volume "\*[doc-volume-operating-system]
+.          if \A\$3 \{\
+.            if d doc-volume-as-\$3 \
+.              as doc-volume "/\*[doc-volume-as-\$3]
+.          \}
+.          as doc-volume " \*[doc-volume-ds-\$2]
+.    \}\}\}
+.    el \{\
+.      ie "\$2"unass" \
+.        ds doc-volume DRAFT
+.      el \{ .ie "\$2"draft" \
+.        ds doc-volume DRAFT
+.      el .if "\$2"paper" \
+.        ds doc-volume UNTITLED
+.      \}\}
+.      if \A\$3 \{\
+.        if d doc-volume-ds-\$3 \
+.          ds doc-volume "\*[doc-volume-ds-\$3]
+.  \}\}\}
+.
+.  if !"\$3"" \
+.    if "\*[doc-volume]"LOCAL" \
+.      ds doc-volume \$3
+.
+.  if !\n[cR] \
+.    if \n[nl] \{\
+.      doc-setup-header
+.      bp
+.    \}
+..
+.
+.
+.\" NS doc-default-operating-system global string
+.\" NS   the exact (default) version of the operating system
+.\" NS
+.\" NS override this in `mdoc.local', if necessary
+.
+.ds doc-default-operating-system BSD
+.
+.
+.\" NS doc-operating-system global string
+.\" NS   the exact version of the operating system
+.
+.ds doc-operating-system
+.
+.
+.\" NS Os user macro (not parsed, not callable)
+.\" NS   operating system
+.\" NS
+.\" NS modifies:
+.\" NS   doc-operating-system
+.\" NS   doc-command-name
+.\" NS
+.\" NS local variables:
+.\" NS   doc-operating-system-XXX-XXX
+.\" NS
+.\" NS width register `Os' set above
+.
+.ds doc-operating-system-ATT-7   7th\~Edition
+.als doc-operating-system-ATT-7th doc-operating-system-ATT-7
+.ds doc-operating-system-ATT-3   System\~III
+.als doc-operating-system-ATT-III doc-operating-system-ATT-3
+.ds doc-operating-system-ATT-V   System\~V
+.ds doc-operating-system-ATT-V.2 System\~V Release\~2
+.ds doc-operating-system-ATT-V.3 System\~V Release\~3
+.ds doc-operating-system-ATT-V.4 System\~V Release\~4
+.
+.ds doc-operating-system-BSD-3    3rd\~Berkeley Distribution
+.ds doc-operating-system-BSD-4    4th\~Berkeley Distribution
+.ds doc-operating-system-BSD-4.1  4.1\~Berkeley Distribution
+.ds doc-operating-system-BSD-4.2  4.2\~Berkeley Distribution
+.ds doc-operating-system-BSD-4.3  4.3\~Berkeley Distribution
+.ds doc-operating-system-BSD-4.3T 4.3-Tahoe Berkeley Distribution
+.ds doc-operating-system-BSD-4.3R 4.3-Reno Berkeley Distribution
+.als doc-operating-system-BSD-4.3t doc-operating-system-BSD-4.3T
+.als doc-operating-system-BSD-4.3r doc-operating-system-BSD-4.3R
+.ds doc-operating-system-BSD-4.4  4.4BSD
+.
+.ds doc-operating-system-NetBSD-0.8   0.8
+.ds doc-operating-system-NetBSD-0.8a  0.8A
+.ds doc-operating-system-NetBSD-0.9   0.9
+.ds doc-operating-system-NetBSD-0.9a  0.9A
+.ds doc-operating-system-NetBSD-1.0   1.0
+.ds doc-operating-system-NetBSD-1.0a  1.0A
+.ds doc-operating-system-NetBSD-1.1   1.1
+.ds doc-operating-system-NetBSD-1.2   1.2
+.ds doc-operating-system-NetBSD-1.2a  1.2A
+.ds doc-operating-system-NetBSD-1.2b  1.2B
+.ds doc-operating-system-NetBSD-1.2c  1.2C
+.ds doc-operating-system-NetBSD-1.2d  1.2D
+.ds doc-operating-system-NetBSD-1.2e  1.2E
+.ds doc-operating-system-NetBSD-1.3   1.3
+.ds doc-operating-system-NetBSD-1.3a  1.3A
+.ds doc-operating-system-NetBSD-1.4   1.4
+.ds doc-operating-system-NetBSD-1.4.1 1.4.1
+.ds doc-operating-system-NetBSD-1.4.2 1.4.2
+.ds doc-operating-system-NetBSD-1.4.3 1.4.3
+.ds doc-operating-system-NetBSD-1.5   1.5
+.ds doc-operating-system-NetBSD-1.5.1 1.5.1
+.ds doc-operating-system-NetBSD-1.5.2 1.5.2
+.ds doc-operating-system-NetBSD-1.5.3 1.5.3
+.ds doc-operating-system-NetBSD-1.6   1.6
+.ds doc-operating-system-NetBSD-1.6.1 1.6.1
+.ds doc-operating-system-NetBSD-1.6.2 1.6.2
+.ds doc-operating-system-NetBSD-1.6.3 1.6.3
+.ds doc-operating-system-NetBSD-2.0   2.0
+.ds doc-operating-system-NetBSD-2.0.1 2.0.1
+.ds doc-operating-system-NetBSD-2.0.2 2.0.2
+.ds doc-operating-system-NetBSD-2.0.3 2.0.3
+.ds doc-operating-system-NetBSD-2.1   2.1
+.ds doc-operating-system-NetBSD-3.0   3.0
+.ds doc-operating-system-NetBSD-3.0.1 3.0.1
+.ds doc-operating-system-NetBSD-3.0.2 3.0.2
+.ds doc-operating-system-NetBSD-3.0.3 3.0.3
+.ds doc-operating-system-NetBSD-3.1   3.1
+.ds doc-operating-system-NetBSD-3.1.1 3.1.1
+.ds doc-operating-system-NetBSD-4.0   4.0
+.ds doc-operating-system-NetBSD-4.0.1 4.0.1
+.ds doc-operating-system-NetBSD-5.0   5.0
+.ds doc-operating-system-NetBSD-5.0.1 5.0.1
+.ds doc-operating-system-NetBSD-5.0.2 5.0.2
+.ds doc-operating-system-NetBSD-5.1   5.1
+.ds doc-operating-system-NetBSD-5.1.2 5.1.2
+.ds doc-operating-system-NetBSD-5.1.3 5.1.3
+.ds doc-operating-system-NetBSD-5.1.4 5.1.4
+.ds doc-operating-system-NetBSD-5.2   5.2
+.ds doc-operating-system-NetBSD-5.2.1 5.2.1
+.ds doc-operating-system-NetBSD-5.2.2 5.2.2
+.ds doc-operating-system-NetBSD-6.0   6.0
+.ds doc-operating-system-NetBSD-6.0.1 6.0.1
+.ds doc-operating-system-NetBSD-6.0.2 6.0.2
+.ds doc-operating-system-NetBSD-6.0.3 6.0.3
+.ds doc-operating-system-NetBSD-6.0.4 6.0.4
+.ds doc-operating-system-NetBSD-6.0.5 6.0.5
+.ds doc-operating-system-NetBSD-6.1   6.1
+.ds doc-operating-system-NetBSD-6.1.1 6.1.1
+.ds doc-operating-system-NetBSD-6.1.2 6.1.2
+.ds doc-operating-system-NetBSD-6.1.3 6.1.3
+.ds doc-operating-system-NetBSD-6.1.4 6.1.4
+.
+.ds doc-operating-system-OpenBSD-2.0  2.0
+.ds doc-operating-system-OpenBSD-2.1  2.1
+.ds doc-operating-system-OpenBSD-2.2  2.2
+.ds doc-operating-system-OpenBSD-2.3  2.3
+.ds doc-operating-system-OpenBSD-2.4  2.4
+.ds doc-operating-system-OpenBSD-2.5  2.5
+.ds doc-operating-system-OpenBSD-2.6  2.6
+.ds doc-operating-system-OpenBSD-2.7  2.7
+.ds doc-operating-system-OpenBSD-2.8  2.8
+.ds doc-operating-system-OpenBSD-2.9  2.9
+.ds doc-operating-system-OpenBSD-3.0  3.0
+.ds doc-operating-system-OpenBSD-3.1  3.1
+.ds doc-operating-system-OpenBSD-3.2  3.2
+.ds doc-operating-system-OpenBSD-3.3  3.3
+.ds doc-operating-system-OpenBSD-3.4  3.4
+.ds doc-operating-system-OpenBSD-3.5  3.5
+.ds doc-operating-system-OpenBSD-3.6  3.6
+.ds doc-operating-system-OpenBSD-3.7  3.7
+.ds doc-operating-system-OpenBSD-3.8  3.8
+.ds doc-operating-system-OpenBSD-3.9  3.9
+.ds doc-operating-system-OpenBSD-4.0  4.0
+.ds doc-operating-system-OpenBSD-4.1  4.1
+.ds doc-operating-system-OpenBSD-4.2  4.2
+.ds doc-operating-system-OpenBSD-4.3  4.3
+.ds doc-operating-system-OpenBSD-4.4  4.4
+.ds doc-operating-system-OpenBSD-4.5  4.5
+.ds doc-operating-system-OpenBSD-4.6  4.6
+.ds doc-operating-system-OpenBSD-4.7  4.7
+.ds doc-operating-system-OpenBSD-4.8  4.8
+.ds doc-operating-system-OpenBSD-4.9  4.9
+.ds doc-operating-system-OpenBSD-5.0  5.0
+.ds doc-operating-system-OpenBSD-5.1  5.1
+.ds doc-operating-system-OpenBSD-5.2  5.2
+.ds doc-operating-system-OpenBSD-5.3  5.3
+.ds doc-operating-system-OpenBSD-5.4  5.4
+.ds doc-operating-system-OpenBSD-5.5  5.5
+.ds doc-operating-system-OpenBSD-5.6  5.6
+.
+.ds doc-operating-system-FreeBSD-1.0     1.0
+.ds doc-operating-system-FreeBSD-1.1     1.1
+.ds doc-operating-system-FreeBSD-1.1.5   1.1.5
+.ds doc-operating-system-FreeBSD-1.1.5.1 1.1.5.1
+.ds doc-operating-system-FreeBSD-2.0     2.0
+.ds doc-operating-system-FreeBSD-2.0.5   2.0.5
+.ds doc-operating-system-FreeBSD-2.1     2.1
+.ds doc-operating-system-FreeBSD-2.1.5   2.1.5
+.ds doc-operating-system-FreeBSD-2.1.6   2.1.6
+.ds doc-operating-system-FreeBSD-2.1.7   2.1.7
+.ds doc-operating-system-FreeBSD-2.2     2.2
+.ds doc-operating-system-FreeBSD-2.2.1   2.2.1
+.ds doc-operating-system-FreeBSD-2.2.2   2.2.2
+.ds doc-operating-system-FreeBSD-2.2.5   2.2.5
+.ds doc-operating-system-FreeBSD-2.2.6   2.2.6
+.ds doc-operating-system-FreeBSD-2.2.7   2.2.7
+.ds doc-operating-system-FreeBSD-2.2.8   2.2.8
+.ds doc-operating-system-FreeBSD-2.2.9   2.2.9
+.ds doc-operating-system-FreeBSD-3.0     3.0
+.ds doc-operating-system-FreeBSD-3.1     3.1
+.ds doc-operating-system-FreeBSD-3.2     3.2
+.ds doc-operating-system-FreeBSD-3.3     3.3
+.ds doc-operating-system-FreeBSD-3.4     3.4
+.ds doc-operating-system-FreeBSD-3.5     3.5
+.ds doc-operating-system-FreeBSD-4.0     4.0
+.ds doc-operating-system-FreeBSD-4.1     4.1
+.ds doc-operating-system-FreeBSD-4.1.1   4.1.1
+.ds doc-operating-system-FreeBSD-4.2     4.2
+.ds doc-operating-system-FreeBSD-4.3     4.3
+.ds doc-operating-system-FreeBSD-4.4     4.4
+.ds doc-operating-system-FreeBSD-4.5     4.5
+.ds doc-operating-system-FreeBSD-4.6     4.6
+.ds doc-operating-system-FreeBSD-4.6.2   4.6.2
+.ds doc-operating-system-FreeBSD-4.7     4.7
+.ds doc-operating-system-FreeBSD-4.8     4.8
+.ds doc-operating-system-FreeBSD-4.9     4.9
+.ds doc-operating-system-FreeBSD-4.10    4.10
+.ds doc-operating-system-FreeBSD-4.11    4.11
+.ds doc-operating-system-FreeBSD-5.0     5.0
+.ds doc-operating-system-FreeBSD-5.1     5.1
+.ds doc-operating-system-FreeBSD-5.2     5.2
+.ds doc-operating-system-FreeBSD-5.2.1   5.2.1
+.ds doc-operating-system-FreeBSD-5.3     5.3
+.ds doc-operating-system-FreeBSD-5.4     5.4
+.ds doc-operating-system-FreeBSD-5.5     5.5
+.ds doc-operating-system-FreeBSD-6.0     6.0
+.ds doc-operating-system-FreeBSD-6.1     6.1
+.ds doc-operating-system-FreeBSD-6.2     6.2
+.ds doc-operating-system-FreeBSD-6.3     6.3
+.ds doc-operating-system-FreeBSD-6.4     6.4
+.ds doc-operating-system-FreeBSD-7.0     7.0
+.ds doc-operating-system-FreeBSD-7.1     7.1
+.ds doc-operating-system-FreeBSD-7.2     7.2
+.ds doc-operating-system-FreeBSD-7.3     7.3
+.ds doc-operating-system-FreeBSD-7.4     7.4
+.ds doc-operating-system-FreeBSD-8.0     8.0
+.ds doc-operating-system-FreeBSD-8.1     8.1
+.ds doc-operating-system-FreeBSD-8.2     8.2
+.ds doc-operating-system-FreeBSD-8.3     8.3
+.ds doc-operating-system-FreeBSD-8.4     8.4
+.ds doc-operating-system-FreeBSD-9.0     9.0
+.ds doc-operating-system-FreeBSD-9.1     9.1
+.ds doc-operating-system-FreeBSD-9.2     9.2
+.ds doc-operating-system-FreeBSD-9.3     9.3
+.ds doc-operating-system-FreeBSD-10.0    10.0
+.
+.ds doc-operating-system-Darwin-8.0.0  8.0.0
+.ds doc-operating-system-Darwin-8.1.0  8.1.0
+.ds doc-operating-system-Darwin-8.2.0  8.2.0
+.ds doc-operating-system-Darwin-8.3.0  8.3.0
+.ds doc-operating-system-Darwin-8.4.0  8.4.0
+.ds doc-operating-system-Darwin-8.5.0  8.5.0
+.ds doc-operating-system-Darwin-8.6.0  8.6.0
+.ds doc-operating-system-Darwin-8.7.0  8.7.0
+.ds doc-operating-system-Darwin-8.8.0  8.8.0
+.ds doc-operating-system-Darwin-8.9.0  8.9.0
+.ds doc-operating-system-Darwin-8.10.0 8.10.0
+.ds doc-operating-system-Darwin-8.11.0 8.11.0
+.ds doc-operating-system-Darwin-9.0.0  9.0.0
+.ds doc-operating-system-Darwin-9.1.0  9.1.0
+.ds doc-operating-system-Darwin-9.2.0  9.2.0
+.ds doc-operating-system-Darwin-9.3.0  9.3.0
+.ds doc-operating-system-Darwin-9.4.0  9.4.0
+.ds doc-operating-system-Darwin-9.5.0  9.5.0
+.ds doc-operating-system-Darwin-9.6.0  9.6.0
+.ds doc-operating-system-Darwin-9.7.0  9.7.0
+.ds doc-operating-system-Darwin-9.8.0  9.8.0
+.ds doc-operating-system-Darwin-10.0.0 10.0.0
+.ds doc-operating-system-Darwin-10.1.0 10.1.0
+.ds doc-operating-system-Darwin-10.2.0 10.2.0
+.ds doc-operating-system-Darwin-10.3.0 10.3.0
+.ds doc-operating-system-Darwin-10.4.0 10.4.0
+.ds doc-operating-system-Darwin-10.5.0 10.5.0
+.ds doc-operating-system-Darwin-10.6.0 10.6.0
+.ds doc-operating-system-Darwin-10.7.0 10.7.0
+.ds doc-operating-system-Darwin-10.8.0 10.8.0
+.ds doc-operating-system-Darwin-11.0.0 11.0.0
+.ds doc-operating-system-Darwin-11.1.0 11.1.0
+.ds doc-operating-system-Darwin-11.2.0 11.2.0
+.ds doc-operating-system-Darwin-11.3.0 11.3.0
+.ds doc-operating-system-Darwin-11.4.0 11.4.0
+.ds doc-operating-system-Darwin-11.5.0 11.5.0
+.ds doc-operating-system-Darwin-12.0.0 12.0.0
+.ds doc-operating-system-Darwin-12.1.0 12.1.0
+.ds doc-operating-system-Darwin-12.2.0 12.2.0
+.ds doc-operating-system-Darwin-13.0.0 13.0.0
+.ds doc-operating-system-Darwin-13.1.0 13.1.0
+.ds doc-operating-system-Darwin-13.2.0 13.2.0
+.ds doc-operating-system-Darwin-13.3.0 13.3.0
+.ds doc-operating-system-Darwin-13.4.0 13.4.0
+.ds doc-operating-system-Darwin-14.0.0 14.0.0
+.
+.ds doc-operating-system-DragonFly-1.0    1.0
+.ds doc-operating-system-DragonFly-1.1    1.1
+.ds doc-operating-system-DragonFly-1.2    1.2
+.ds doc-operating-system-DragonFly-1.3    1.3
+.ds doc-operating-system-DragonFly-1.4    1.4
+.ds doc-operating-system-DragonFly-1.5    1.5
+.ds doc-operating-system-DragonFly-1.6    1.6
+.ds doc-operating-system-DragonFly-1.7    1.7
+.ds doc-operating-system-DragonFly-1.8    1.8
+.ds doc-operating-system-DragonFly-1.8.1  1.8.1
+.ds doc-operating-system-DragonFly-1.9    1.9
+.ds doc-operating-system-DragonFly-1.10   1.10
+.ds doc-operating-system-DragonFly-1.11   1.11
+.ds doc-operating-system-DragonFly-1.12   1.12
+.ds doc-operating-system-DragonFly-1.12.2 1.12.2
+.ds doc-operating-system-DragonFly-1.13   1.13
+.ds doc-operating-system-DragonFly-2.0    2.0
+.ds doc-operating-system-DragonFly-2.1    2.1
+.ds doc-operating-system-DragonFly-2.2    2.2
+.ds doc-operating-system-DragonFly-2.3    2.3
+.ds doc-operating-system-DragonFly-2.4    2.4
+.ds doc-operating-system-DragonFly-2.5    2.5
+.ds doc-operating-system-DragonFly-2.6    2.6
+.ds doc-operating-system-DragonFly-2.7    2.7
+.ds doc-operating-system-DragonFly-2.8    2.8
+.ds doc-operating-system-DragonFly-2.9    2.9
+.ds doc-operating-system-DragonFly-2.9.1  2.9.1
+.ds doc-operating-system-DragonFly-2.10   2.10
+.ds doc-operating-system-DragonFly-2.10.1 2.10.1
+.ds doc-operating-system-DragonFly-2.11   2.11
+.ds doc-operating-system-DragonFly-2.12   2.12
+.ds doc-operating-system-DragonFly-2.13   2.13
+.ds doc-operating-system-DragonFly-3.0    3.0
+.ds doc-operating-system-DragonFly-3.1    3.1
+.ds doc-operating-system-DragonFly-3.2    3.2
+.ds doc-operating-system-DragonFly-3.3    3.3
+.ds doc-operating-system-DragonFly-3.4    3.4
+.ds doc-operating-system-DragonFly-3.5    3.5
+.ds doc-operating-system-DragonFly-3.6    3.6
+.ds doc-operating-system-DragonFly-3.7    3.7
+.ds doc-operating-system-DragonFly-3.8    3.8
+.
+.de Os
+.  ds doc-command-name
+.
+.  ie "\$1"" \
+.    ds doc-operating-system "\*[doc-default-operating-system]
+.  el \{ .ie "\$1"ATT" \{\
+.    ds doc-operating-system AT&T
+.    if \A\$2 \{\
+.      ie d doc-operating-system-ATT-\$2 \
+.        as doc-operating-system " \*[doc-operating-system-ATT-\$2]
+.      el \
+.        as doc-operating-system " UNIX
+.  \}\}
+.  el \{ .ie "\$1"BSD" \{\
+.    if \A\$2 \{\
+.      ie d doc-operating-system-BSD-\$2 \
+.        ds doc-operating-system "\*[doc-operating-system-BSD-\$2]
+.      el \
+.        tm mdoc warning: .Os: Unknown BSD version `\$2' (#\n[.c])
+.  \}\}
+.  el \{ .ie "\$1"FreeBSD" \{\
+.    ds doc-operating-system FreeBSD
+.    if \A\$2 \{\
+.      ie d doc-operating-system-FreeBSD-\$2 \
+.        as doc-operating-system \~\*[doc-operating-system-FreeBSD-\$2]
+.      el \
+.        tm mdoc warning: .Os: Unknown FreeBSD version `\$2' (#\n[.c])
+.  \}\}
+.  el \{ .ie "\$1"DragonFly" \{\
+.    ds doc-operating-system DragonFly
+.    if \A\$2 \{\
+.      ie d doc-operating-system-DragonFly-\$2 \
+.        as doc-operating-system \~\*[doc-operating-system-DragonFly-\$2]
+.      el \
+.        tm mdoc warning: .Os: Unknown DragonFly version `\$2' (#\n[.c])
+.  \}\}
+.  el \{ .ie "\$1"NetBSD" \{\
+.    ds doc-operating-system NetBSD
+.    if \A\$2 \{\
+.      ie d doc-operating-system-NetBSD-\$2 \
+.        as doc-operating-system \~\*[doc-operating-system-NetBSD-\$2]
+.      el \
+.        tm mdoc warning: .Os: Unknown NetBSD version `\$2' (#\n[.c])
+.  \}\}
+.  el \{ .ie "\$1"OpenBSD" \{\
+.    ds doc-operating-system OpenBSD
+.    if \A\$2 \{\
+.      ie d doc-operating-system-OpenBSD-\$2 \
+.        as doc-operating-system \~\*[doc-operating-system-OpenBSD-\$2]
+.      el \
+.        tm mdoc warning: .Os: Unknown OpenBSD version `\$2' (#\n[.c])
+.  \}\}
+.  el \{ .ie "\$1"Darwin" \{\
+.    ds doc-operating-system Darwin
+.    if \A\$2 \{\
+.      ie d doc-operating-system-Darwin-\$2 \
+.        as doc-operating-system \~\*[doc-operating-system-Darwin-\$2]
+.      el \
+.        tm mdoc warning: .Os: Unknown Darwin version `\$2' (#\n[.c])
+.  \}\}
+.  el \{\
+.    ds doc-operating-system \$1
+.    if !"\$2"" \
+.      as doc-operating-system " \$2
+.  \}\}\}\}\}\}\}\}
+..
+.
+.
+.\" NS doc-date-string global string
+.\" NS   the manual page date as set by `Dd'
+.
+.ds doc-date-string
+.
+.
+.\" NS Dd user macro (not parsed, not callable)
+.\" NS   set document date
+.\" NS
+.\" NS modifies:
+.\" NS   doc-date-string
+.\" NS   doc-command-name
+.\" NS
+.\" NS local variables:
+.\" NS   doc-date-XXX
+.\" NS
+.\" NS width register `Dd' set above
+.
+.ds doc-date-1  January
+.ds doc-date-2  February
+.ds doc-date-3  March
+.ds doc-date-4  April
+.ds doc-date-5  May
+.ds doc-date-6  June
+.ds doc-date-7  July
+.ds doc-date-8  August
+.ds doc-date-9  September
+.ds doc-date-10 October
+.ds doc-date-11 November
+.ds doc-date-12 December
+.
+.de Dd
+.  ds doc-command-name
+.
+.  ie \n[.$] \{\
+.    ie "\$1"$Mdocdate:" \
+.      ds doc-date-string \$2\~\$3, \$4
+.    el \{ .ie (\n[.$] == 3) \
+.      ds doc-date-string \$1\~\$2 \$3
+.    el \{\
+.      ds doc-date-string "\*[doc-date-\n[mo]]
+.      as doc-date-string \~\n[dy], \n[year]
+.    \}\}
+.  \}
+.  el \
+.    ds doc-date-string Epoch
+..
+.
+.
+.\" NS doc-hyphen-flags global register
+.\" NS   the parameter for the `.hy' request
+.\" NS
+.\" NS override this in `mdoc.local', if necessary.
+.
+.nr doc-hyphen-flags 12
+.
+.
+.\" NS doc-header macro
+.\" NS   print page header
+.\" NS
+.\" NS local variables:
+.\" NS   doc-reg-dh
+.\" NS   doc-reg-dh1
+.
+.de doc-header
+.  ev doc-env-dh
+.  doc-setup-page-layout
+.  if !\n[cR] \
+.    sp \n[doc-header-space]u
+.  nr doc-reg-dh \w'\*[doc-caption-font]\*[doc-header-string]\f[]'
+.  nr doc-reg-dh1 \w'\*[doc-caption-font2]\*[doc-volume]\f[]'
+.  if (\n[doc-reg-dh] + \n[doc-reg-dh1] + \n[doc-reg-dh] >= \n[.lt]) \{\
+.    while (\n[doc-reg-dh] + \n[doc-reg-dh1] + \n[doc-reg-dh] >= \n[.lt]) \{\
+.      substring doc-header-string 0 -2
+.      nr doc-reg-dh \w'\*[doc-caption-font]\*[doc-header-string]\|.\|.\|.\f[]'
+.    \}
+.    as doc-header-string "\|.\|.\|.
+.  \}
+.  tl \*[doc-caption-font]\*[doc-header-string]\f[]\*[doc-caption-font2]\*[doc-volume]\f[]\*[doc-caption-font]\*[doc-header-string]\f[]
+.  ie !\n[cR] \
+.    sp \n[doc-header-space]u
+.  el \
+.    sp 1v
+.  ev
+.  ns
+..
+.
+.
+.\" NS doc-footer macro
+.\" NS   print page footer
+.
+.de doc-footer
+.  ie \n[cR] \
+.    br
+.  el \{\
+.    ev doc-caption-enviroment
+.    doc-setup-page-layout
+.    sp \n[doc-footer-space]u
+.    ie \n[D] \{\
+.      ie o \
+.        tl %\*[doc-caption-font2]\*[doc-date-string]\f[]\*[doc-caption-font]\*[doc-operating-system]\f[]
+.      el \
+.        tl \*[doc-caption-font]\*[doc-operating-system]\f[]\*[doc-caption-font2]\*[doc-date-string]\f[]%
+.    \}
+.    el \
+.      tl \*[doc-caption-font]\*[doc-operating-system]\f[]\*[doc-caption-font2]\*[doc-date-string]\f[]%
+.    bp
+.    ev
+.  \}
+..
+.
+.
+.\" NS doc-check-depth macro
+.\" NS   check paired macros
+.
+.de doc-check-depth
+.  if \n[doc-list-depth] \{\
+.    tm mdoc warning: A .Bl directive has no matching .El (#\n[.c])
+.    nr doc-list-depth 0
+.  \}
+.  if \n[doc-display-depth] \{\
+.    tm mdoc warning: A .Bd directive has no matching .Ed (#\n[.c])
+.    nr doc-display-depth 0
+.  \}
+.  if \n[doc-fontmode-depth] \{\
+.    tm mdoc warning: A .Bf directive has no matching .Ef (#\n[.c])
+.    nr doc-fontmode-depth 0
+.  \}
+..
+.
+.
+.\" NS doc-end-macro macro
+.\" NS   finish output
+.
+.de doc-end-macro
+.  \" We may still have a partial line in the environment.  If this is the
+.  \" case, and we happen to be on the last line of the page, the `.fl'
+.  \" request will cause the page to be ejected and troff will immediately
+.  \" exit.  If we are in nroff mode, this would be unfortunate, since we
+.  \" would never get a chance to output the footer.  So we fudge the page
+.  \" length to make sure that the last page is never ejected until we want
+.  \" it to be.
+.
+.  if \n[cR] \
+.    pl +3v
+.  fl
+.
+.  doc-check-depth
+.
+.  if \n[cR] \{\
+.    sp
+.    tl \*[doc-caption-font]\*[doc-operating-system]\f[]\*[doc-caption-font2]\*[doc-date-string]\f[]\*[doc-caption-font]\*[doc-operating-system]\f[]
+.    \" suppress empty lines after the footer
+.    pl \n[nl]u
+.  \}
+..
+.
+.
+.\" NS doc-paragraph macro
+.\" NS   insert a paragraph
+.
+.de doc-paragraph
+.  sp \n[doc-paragraph-space]u
+.  if !\n[cR] \
+.    ne 2
+.  ns
+..
+.
+.
+.\" NS Pp user macro (not parsed, not callable)
+.\" NS   new paragraph
+.\" NS
+.\" NS width register `Pp' set above
+.
+.als Pp doc-paragraph
+.
+.
+.\" NS Lp user macro (not parsed, not callable)
+.\" NS   same as .Pp
+.\" NS
+.\" NS width register `Lp' set above
+.
+.als Lp doc-paragraph
+.
+.
+.de LP
+.  tm Not a \-mdoc command: .LP (#\n[.c])
+..
+.
+.
+.de PP
+.  tm Not a \-mdoc command: .PP (#\n[.c])
+..
+.
+.
+.de pp
+.  tm Not a \-mdoc command: .pp (#\n[.c])
+..
+.
+.
+.de SH
+.  tm Not a \-mdoc command: .SH (#\n[.c])
+..
+.
+.
+.\" NS Nd user macro (not parsed, not callable)
+.\" NS   print name description
+.\" NS
+.\" NS width register `Nd' set above
+.
+.de Nd
+.  nop \[em] \$*
+..
+.
+.
+.\" NS doc-in-synopsis-section global register (bool)
+.\" NS   whether we are in the `synopsis' section
+.
+.nr doc-in-synopsis-section 0
+.
+.
+.\" NS doc-in-library-section global register (bool)
+.\" NS   whether we are in the `library' section
+.
+.nr doc-in-library-section 0
+.
+.
+.\" NS doc-in-see-also-section global register (bool)
+.\" NS   whether we are in the `see also' section
+.
+.nr doc-in-see-also-section 0
+.
+.
+.\" NS doc-in-files-section global register (bool)
+.\" NS   whether we are in the `files' section
+.
+.nr doc-in-files-section 0
+.
+.
+.\" NS doc-in-authors-section global register (bool)
+.\" NS   whether we are in the `authors' section
+.
+.nr doc-in-authors-section 0
+.
+.
+.\" NS doc-first-parameter macro
+.\" NS   return first parameter
+.\" NS
+.\" NS local variables:
+.\" NS   doc-str-dfp
+.
+.de doc-first-parameter
+.  ds doc-str-dfp "\$1
+..
+.
+.
+.\" NS Sh user macro (not callable)
+.\" NS   section headers
+.\" NS
+.\" NS modifies:
+.\" NS   doc-func-args-processed
+.\" NS   doc-func-count
+.\" NS   doc-in-authors-section
+.\" NS   doc-in-files-section
+.\" NS   doc-in-library-section
+.\" NS   doc-in-see-also-section
+.\" NS   doc-in-synopsis-section
+.\" NS   doc-indent-synopsis
+.\" NS   doc-indent-synopsis-active
+.\" NS   doc-is-func
+.\" NS   doc-num-func-args
+.\" NS
+.\" NS local variables:
+.\" NS   doc-reg-Sh
+.\" NS   doc-reg-Sh1
+.\" NS   doc-section-XXX
+.\" NS
+.\" NS width register `Sh' set in doc-common
+.
+.ds doc-section-name        NAME
+.ds doc-section-synopsis    SYNOPSIS
+.ds doc-section-library     LIBRARY
+.ds doc-section-description DESCRIPTION
+.ds doc-section-see-also    SEE
+.ds doc-section-files       FILES
+.ds doc-section-authors     AUTHORS
+.
+.de Sh
+.  ie \n[doc-arg-limit] \{\
+.    \" we only allow `Sh' within `Sh'; it will change the font back to
+.    \" `doc-Sh-font'
+.    ie "\*[doc-macro-name]"Sh" \{\
+.      nr doc-arg-ptr +1
+.      ie (\n[doc-arg-limit] >= \n[doc-arg-ptr]) \{\
+.        nr doc-curr-font \n[.f]
+.        nr doc-curr-size \n[.ps]
+.        nop \*[doc-Sh-font]\c
+.        doc-print-recursive
+.      \}
+.      el \{\
+.        tm Usage: .Sh section_name ... (#\n[.c])
+.        doc-reset-args
+.    \}\}
+.    el \{\
+.      tm Usage: .Sh not callable by other macros (#\n[.c])
+.      doc-reset-args
+.  \}\}
+.  el \{\
+.    if !\n[.$] \{\
+.      tm Usage: .Sh section_name ... (#\n[.c])
+.      return
+.    \}
+.
+.    ds doc-macro-name Sh
+.    doc-parse-args \$@
+.
+.    if t \
+.      ad
+.
+.    \" this resolves e.g. `.Sh "SEE ALSO"'
+.    doc-first-parameter \$*
+.
+.    ie "\*[doc-str-dfp]"\*[doc-section-name]" \{\
+.      doc-setup-header
+.      in 0
+.    \}
+.    el \{\
+.      nr doc-in-synopsis-section 0
+.      nr doc-in-library-section 0
+.      nr doc-in-see-also-section 0
+.      nr doc-in-files-section 0
+.      nr doc-in-authors-section 0
+.
+.      ie        "\*[doc-str-dfp]"\*[doc-section-synopsis]" \{\
+.        if t \
+.          na
+.        nr doc-in-synopsis-section 1
+.        nr doc-indent-synopsis 0
+.        nr doc-indent-synopsis-active 0
+.      \}
+.      el \{ .ie "\*[doc-str-dfp]"\*[doc-section-library]" \{\
+.        nr doc-in-library-section 1
+.      \}
+.      el \{ .ie "\*[doc-str-dfp]"\*[doc-section-description]" \{\
+.        nr doc-is-func 0
+.        nr doc-func-count 0
+.        nr doc-func-args-processed 0
+.        nr doc-num-func-args 0
+.      \}
+.      el \{ .ie "\*[doc-str-dfp]"\*[doc-section-see-also]" \{\
+.        if t \
+.          na
+.        nr doc-in-see-also-section 1
+.      \}
+.      el \{ .ie "\*[doc-str-dfp]"\*[doc-section-files]" \
+.        nr doc-in-files-section 1
+.      el .if    "\*[doc-str-dfp]"\*[doc-section-authors]" \
+.        nr doc-in-authors-section 1
+.      \}\}\}\}
+.
+.      in 0
+.      nr doc-have-author 0
+.    \}
+.
+.    doc-setup-page-layout
+.    sp
+.    ns
+.    ta T .5i
+.    if !\n[cR] \
+.      ne 3
+.    fi
+.
+.    if t \{\
+.      nr doc-reg-Sh \n[.ss]
+.      nr doc-reg-Sh1 \n[.sss]
+.      ss (\n[.ss] * 5 / 3) (\n[.sss] * 5 / 3)
+.    \}
+.
+.    nr doc-arg-ptr +1
+.    nr doc-curr-font \n[.f]
+.    nr doc-curr-size \n[.ps]
+.    nop \*[doc-Sh-font]\c
+.    doc-print-recursive
+.
+.    if t \
+.      ss \n[doc-reg-Sh] \n[doc-reg-Sh1]
+.
+.    in +\n[doc-subheader-indent]u
+.    ns
+.
+.    doc-check-depth
+.  \}
+..
+.
+.
+.\" NS Ss user macro (not callable)
+.\" NS   subsection
+.\" NS
+.\" NS local variable:
+.\" NS   doc-reg-Ss
+.\" NS   doc-reg-Ss1
+.\" NS
+.\" NS width register `Ss' set above
+.
+.de Ss
+.  ie \n[doc-arg-limit] \{\
+.    \" we only allow `Ss' within `Ss'; it will change the font back to
+.    \" `doc-Sh-font'
+.    ie "\*[doc-macro-name]"Ss" \{\
+.      nr doc-arg-ptr +1
+.      ie (\n[doc-arg-limit] >= \n[doc-arg-ptr]) \{\
+.        nr doc-curr-font \n[.f]
+.        nr doc-curr-size \n[.ps]
+.        nop \*[doc-Sh-font]\c
+.        doc-print-recursive
+.      \}
+.      el \{\
+.        tm Usage: .Ss subsection_name ... (#\n[.c])
+.        doc-reset-args
+.    \}\}
+.    el \{\
+.      tm Usage: .Ss not callable by other macros (#\n[.c])
+.      doc-reset-args
+.  \}\}
+.  el \{\
+.    if !\n[.$] \{\
+.      tm Usage: .Ss subsection_name ... (#\n[.c])
+.      return
+.    \}
+.
+.    ds doc-macro-name Ss
+.    doc-parse-args \$@
+.
+.    sp
+.    if !\n[cR] \
+.      ne 3
+.    ti -.25i
+.
+.    nr doc-reg-Ss \n[.ss]
+.    nr doc-reg-Ss1 \n[.sss]
+.    ss (\n[.ss] * 5 / 4) (\n[.sss] * 5 / 4)
+.
+.    nr doc-arg-ptr +1
+.    nr doc-curr-font \n[.f]
+.    nr doc-curr-size \n[.ps]
+.    nop \*[doc-Sh-font]\c
+.    doc-print-recursive
+.
+.    ss \n[doc-reg-Ss] \n[doc-reg-Ss1]
+.
+.    ta T .5i
+.    if !\n[cR] \
+.      ne 2
+.    br
+.    ns
+.
+.    doc-check-depth
+.  \}
+..
+.
+.
+.\" NS Rd macro (not parsed, not callable)
+.\" NS   print global register dump to stderr
+.\" NS
+.\" NS local variables:
+.\" NS   doc-reg-Rd
+.
+.de Rd
+.  tm MDOC GLOBAL REGISTER DUMP
+.  tm doc-macro-name == `\*[doc-macro-name]'
+.  tm doc-arg-limit == \n[doc-arg-limit]
+.  tm doc-num-args == \n[doc-num-args]
+.  tm doc-arg-ptr == \n[doc-arg-ptr]
+.
+.  nr doc-reg-Rd 1
+.  while (\n[doc-reg-Rd] <= \n[doc-arg-limit]) \{\
+.    tm doc-arg\n[doc-reg-Rd] == `\*[doc-arg\n[doc-reg-Rd]]'
+.    tm doc-type\n[doc-reg-Rd] == \n[doc-type\n[doc-reg-Rd]]
+.    tm doc-space\n[doc-reg-Rd] == `\*[doc-space\n[doc-reg-Rd]]'
+.    nr doc-reg-Rd +1
+.  \}
+.
+.  tm doc-curr-font == \n[doc-curr-font]
+.  tm doc-curr-size == \n[doc-curr-size]
+.  tm doc-indent-synopsis == \n[doc-indent-synopsis]
+.  tm doc-indent-synopsis-active == \n[doc-indent-synopsis-active]
+.  tm doc-have-decl == \n[doc-have-decl]
+.  tm doc-have-var == \n[doc-have-var]
+.  tm doc-command-name == `\*[doc-command-name]'
+.  tm doc-quote-left == `\*[doc-quote-left]'
+.  tm doc-quote-right == `\*[doc-quote-right]'
+.  tm doc-nesting-level == \n[doc-nesting-level]
+.  tm doc-in-list == \n[doc-in-list]
+.  tm doc-space == `\*[doc-space]'
+.  tm doc-saved-space == `\*[doc-saved-space]'
+.  tm doc-space-mode == \n[doc-space-mode]
+.  tm doc-have-space == \n[doc-have-space]
+.  tm doc-have-slot == \n[doc-have-slot]
+.  tm doc-keep-type == \n[doc-keep-type]
+.  tm doc-display-depth == \n[doc-display-depth]
+.  tm doc-is-compact == \n[doc-is-compact]
+.
+.  nr doc-reg-Rd 0
+.  while (\n[doc-reg-Rd] <= \n[doc-display-depth]) \{\
+.    tm doc-display-type-stack\n[doc-reg-Rd] == `\*[doc-display-type-stack\n[doc-reg-Rd]]'
+.    tm doc-display-indent-stack\n[doc-reg-Rd] == \n[doc-display-indent-stack\n[doc-reg-Rd]]
+.    tm doc-display-ad-stack\n[doc-reg-Rd] == \n[doc-display-ad-stack\n[doc-reg-Rd]]
+.    tm doc-display-fi-stack\n[doc-reg-Rd] == \n[doc-display-fi-stack\n[doc-reg-Rd]]
+.    tm doc-display-ft-stack\n[doc-reg-Rd] == \n[doc-display-ft-stack\n[doc-reg-Rd]]
+.    tm doc-display-ps-stack\n[doc-reg-Rd] == \n[doc-display-ps-stack\n[doc-reg-Rd]]
+.    nr doc-reg-Rd +1
+.  \}
+.
+.  tm doc-fontmode-depth == \n[doc-fontmode-depth]
+.
+.  nr doc-reg-Rd 1
+.  while (\n[doc-reg-Rd] <= \n[doc-fontmode-depth]) \{\
+.    tm doc-fontmode-font-stack\n[doc-reg-Rd] == `\n[doc-fontmode-font-stack\n[doc-reg-Rd]]'
+.    tm doc-fontmode-size-stack\n[doc-reg-Rd] == `\n[doc-fontmode-size-stack\n[doc-reg-Rd]]'
+.    nr doc-reg-Rd +1
+.  \}
+.
+.  tm doc-list-depth == \n[doc-list-depth]
+.
+.  nr doc-reg-Rd 1
+.  while (\n[doc-reg-Rd] <= \n[doc-list-depth]) \{\
+.    tm doc-list-type-stack\n[doc-reg-Rd] == `\*[doc-list-type-stack\n[doc-reg-Rd]]'
+.    tm doc-list-have-indent-stack\n[doc-reg-Rd] == \n[doc-list-have-indent-stack\n[doc-reg-Rd]]
+.    tm doc-list-indent-stack\n[doc-reg-Rd] == \n[doc-list-indent-stack\n[doc-reg-Rd]]
+.    tm doc-compact-list-stack\n[doc-reg-Rd] == \n[doc-compact-list-stack\n[doc-reg-Rd]]
+.    tm doc-tag-prefix-stack\n[doc-reg-Rd] == `\*[doc-tag-prefix-stack\n[doc-reg-Rd]]'
+.    tm doc-tag-width-stack\n[doc-reg-Rd] == `\*[doc-tag-width-stack\n[doc-reg-Rd]]'
+.    tm doc-list-offset-stack\n[doc-reg-Rd] == \n[doc-list-offset-stack\n[doc-reg-Rd]]
+.    tm doc-enum-list-count-stack\n[doc-reg-Rd] == \n[doc-enum-list-count-stack\n[doc-reg-Rd]]
+.    nr doc-reg-Rd +1
+.  \}
+.
+.  tm doc-saved-Pa-font == `\*[doc-saved-Pa-font]'
+.  tm doc-curr-type == \n[doc-curr-type]
+.  tm doc-curr-arg == `\*[doc-curr-arg]'
+.  tm doc-diag-list-input-line-count == \n[doc-diag-list-input-line-count]
+.  tm doc-num-columns == \n[doc-num-columns]
+.  tm doc-column-indent-width == \n[doc-column-indent-width]
+.  tm doc-is-func == \n[doc-is-func]
+.  tm doc-have-old-func == \n[doc-have-old-func]
+.  tm doc-func-arg-count == \n[doc-func-arg-count]
+.  tm doc-func-arg == `\*[doc-func-arg]'
+.  tm doc-num-func-args == \n[doc-num-func-args]
+.  tm doc-func-args-processed == \n[doc-func-args-processed]
+.  tm doc-have-func == \n[doc-have-func]
+.  tm doc-is-reference == \n[doc-is-reference]
+.  tm doc-reference-count == \n[doc-reference-count]
+.  tm doc-author-count == \n[doc-author-count]
+.
+.  nr doc-reg-Rd 0
+.  while (\n[doc-reg-Rd] <= \n[doc-author-count]) \{\
+.    tm doc-author-name\n[doc-reg-Rd] == `\*[doc-author-name\n[doc-reg-Rd]]'
+.    nr doc-reg-Rd +1
+.  \}
+.
+.  tm doc-book-count == \n[doc-book-count]
+.  tm doc-book-name == `\*[doc-book-name]'
+.  tm doc-date-count == \n[doc-date-count]
+.  tm doc-date == `\*[doc-date]'
+.  tm doc-publisher-count == \n[doc-publisher-count]
+.  tm doc-publisher-name == `\*[doc-publisher-name]'
+.  tm doc-journal-count == \n[doc-journal-count]
+.  tm doc-journal-name == `\*[doc-journal-name]'
+.  tm doc-issue-count == \n[doc-issue-count]
+.  tm doc-issue-name == `\*[doc-issue-name]'
+.  tm doc-optional-count == \n[doc-optional-count]
+.  tm doc-optional-string == `\*[doc-optional-string]'
+.  tm doc-page-number-count == \n[doc-page-number-count]
+.  tm doc-page-number-string == `\*[doc-page-number-string]'
+.  tm doc-corporate-count == \n[doc-corporate-count]
+.  tm doc-corporate-name == `\*[doc-corporate-name]'
+.  tm doc-report-count == \n[doc-report-count]
+.  tm doc-report-name == `\*[doc-report-name]'
+.  tm doc-reference-title-count == \n[doc-reference-title-count]
+.  tm doc-reference-title-name == `\*[doc-reference-title-name]'
+.  tm doc-reference-title-name-for-book == `\*[doc-reference-title-name-for-book]'
+.  tm doc-url-count == \n[doc-url-count]
+.  tm doc-url-name == `\*[doc-url-name]'
+.  tm doc-volume-count == \n[doc-volume-count]
+.  tm doc-volume-name == `\*[doc-volume-name]'
+.  tm doc-have-author == \n[doc-have-author]
+.
+.  tm doc-document-title == `\*[doc-document-title]'
+.  tm doc-volume == `\*[doc-volume]'
+.  tm doc-section == `\*[doc-section]'
+.  tm doc-operating-system == `\*[doc-operating-system]'
+.  tm doc-date-string == `\*[doc-date-string]'
+.  tm doc-header-space == \n[doc-header-space]
+.  tm doc-footer-space == \n[doc-footer-space]
+.  tm doc-display-vertical == \n[doc-display-vertical]
+.  tm doc-header-string == `\*[doc-header-string]'
+.  tm doc-in-synopsis-section == \n[doc-in-synopsis-section]
+.  tm doc-in-library-section == \n[doc-in-library-section]
+.  tm doc-in-see-also-section == \n[doc-in-see-also-section]
+.  tm doc-in-files-section == \n[doc-in-files-section]
+.  tm doc-in-authors-section == \n[doc-in-authors-section]
+.
+.  tm END OF GLOBAL REGISTER DUMP
+..
+.
+.
+.ec
+.
+.\" EOF
diff -Nuar groff-1.22.3.old/tmac/doc-ditroff groff-1.22.3/tmac/doc-ditroff
--- groff-1.22.3.old/tmac/doc-ditroff	2014-11-04 10:38:35.533520146 +0200
+++ groff-1.22.3/tmac/doc-ditroff	1970-01-01 02:00:00.000000000 +0200
@@ -1,334 +0,0 @@
-.\" -*- nroff -*-
-.\"
-.\" Copyright (c) 1991, 1993
-.\"	The Regents of the University of California.  All rights reserved.
-.\"
-.\" Redistribution and use in source and binary forms, with or without
-.\" modification, are permitted provided that the following conditions
-.\" are met:
-.\" 1. Redistributions of source code must retain the above copyright
-.\"    notice, this list of conditions and the following disclaimer.
-.\" 2. Redistributions in binary form must reproduce the above copyright
-.\"    notice, this list of conditions and the following disclaimer in the
-.\"    documentation and/or other materials provided with the distribution.
-.\" 3. [Deleted.  See
-.\"     ftp://ftp.cs.berkeley.edu/pub/4bsd/README.Impt.License.Change]
-.\" 4. Neither the name of the University nor the names of its contributors
-.\"    may be used to endorse or promote products derived from this software
-.\"    without specific prior written permission.
-.\"
-.\" THIS SOFTWARE IS PROVIDED BY THE REGENTS AND CONTRIBUTORS ``AS IS'' AND
-.\" ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE
-.\" IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE
-.\" ARE DISCLAIMED.  IN NO EVENT SHALL THE REGENTS OR CONTRIBUTORS BE LIABLE
-.\" FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL
-.\" DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS
-.\" OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION)
-.\" HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT
-.\" LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY
-.\" OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF
-.\" SUCH DAMAGE.
-.\"
-.\"     @(#)doc-ditroff	8.1 (Berkeley) 06/08/93
-.\"
-.\"     %beginstrip%
-.
-.
-.eo
-.
-.\" use -rD=1 for double-sided printing
-.
-.if !r D .nr D 0
-.
-.\" use -rcR=1 to force the creation of a single, very long page
-.
-.if !r cR .nr cR 0
-.
-.\" use -rS={11,12} to change the font size from 10pt to 11pt or 12pt.
-.
-.if !r S .nr S 10
-.
-.
-.ec
-.
-.
-.ie        (\n[S] == 11) \{\
-.  ps 10.95z
-.  vs 13.6p
-.\}
-.el \{ .ie (\n[S] == 12) \{\
-.  ps 12z
-.  vs 14.5p
-.\}
-.el \{\
-.  ps 10z
-.  vs 12p
-.\}\}
-.
-.
-.\" the `doc-xx-font' strings must not be empty!
-.
-.ds doc-caption-font \f[R]\s[\n[.ps]u]
-.ds doc-caption-font2 \f[R]\s[\n[.ps]u]
-.ds doc-Ad-font \f[I]\s[\n[.ps]u]
-.ds doc-Ar-font \f[CO]\s[\n[.ps]u]
-.ds doc-Cm-font \f[CB]\s[\n[.ps]u]
-.ds doc-Em-font \f[I]\s[\n[.ps]u]
-.ds doc-Er-font \f[C]\s[\n[.ps]u]
-.ds doc-Ev-font \f[C]\s[\n[.ps]u]
-.ds doc-Fa-font \f[CO]\s[\n[.ps]u]
-.ds doc-Fd-font \f[CB]\s[\n[.ps]u]
-.ds doc-Fl-font \f[CB]\s[\n[.ps]u]
-.ds doc-Fn-font \f[CB]\s[\n[.ps]u]
-.ds doc-Ft-font \f[CO]\s[\n[.ps]u]
-.ds doc-Ic-font \f[CB]\s[\n[.ps]u]
-.ds doc-Li-font \f[C]
-.ds doc-Me-font \f[B]\s[\n[.ps]u]
-.ds doc-Nm-font \f[CB]\s[\n[.ps]u]
-.ds doc-No-font \f[R]\s[\n[.ps]u]
-.ds doc-Pa-font \f[C]\s[\n[.ps]u]
-.ds doc-Sh-font \f[B]\s[\n[.ps]u]
-.ds doc-Sy-font \f[B]\s[\n[.ps]u]
-.ds doc-Sx-font \f[B]\s[\n[.ps]u]
-.ds doc-Tn-font-shape \f[R]
-\# XXX: adapt to discrete LaTeX font sizes
-.ds doc-Tn-font-size \s[(\n[.ps]u - 1z)]
-.ds doc-Va-font \f[I]\s[\n[.ps]u]
-.ds doc-Xr-font \f[C]\s[\n[.ps]u]
-.
-.ds doc-left-parenthesis \f[R]\|(\|\f[]\s[\n[.ps]u]
-.ds doc-right-parenthesis \f[R]\|)\|\f[]\s[\n[.ps]u]
-.ds lp \f[R](\f[]\s[\n[.ps]u]
-.ds rp \f[R])\f[]\s[\n[.ps]u]
-.ds doc-left-bracket \f[R]\^[\^\f[]\s[\n[.ps]u]
-.ds doc-right-bracket \f[R]\^]\f[]\s[\n[.ps]u]
-.
-.tr *\[**]
-.
-.\" miscellaneous
-.nr doc-subheader-indent (\w\f[C],u * 5u)
-.nr doc-paragraph-space .5v
-.
-.nr doc-digit-width \w'\0'u
-.nr doc-fixed-width \w\f[C]0
-.
-.eo
-.
-.
-.\" NS doc-header-space global register
-.\" NS   the space between header and body
-.
-.nr doc-header-space .5i
-.
-.
-.\" NS doc-footer-space global register
-.\" NS   the space between body and footer
-.
-.nr doc-footer-space .5i
-.
-.
-.\" NS doc-display-vertical global register
-.\" NS   vertical space between list elements etc.
-.
-.nr doc-display-vertical 0
-.
-.
-.\" NS doc-setup-page-layout macro
-.\" NS   set up page layout
-.\" NS
-.\" NS modifies:
-.\" NS   doc-display-vertical
-.
-.de doc-setup-page-layout
-.  ie r LL \
-.    ll \n[LL]u
-.  el \
-.    ll 6.5i
-.
-.  ie r LT \
-.    lt \n[LT]u
-.  el \
-.    lt 6.5i
-.
-.  po 1i
-.
-.  nr doc-display-vertical .5v
-..
-.
-.
-.ds doc-left-singlequote \[oq]
-.ds doc-right-singlequote \[cq]
-.
-.\" the following strings are `official'
-.ds <= \[<=]
-.ds >= \[>=]
-.ds Lq \[lq]
-.ds Rq \[rq]
-.ds ua \[ua]
-.ds aa \[aa]
-.ds ga \[ga]
-.ds q \[dq]
-.ds Pi \[*p]
-.ds Ne \[!=]
-.ds Le \[<=]
-.ds Ge \[>=]
-.ds Lt <
-.ds Gt >
-.ds Pm \[+-]
-.ds If \[if]
-.ds Na \f[I]NaN\f[]
-.ds Ba \f[R]|\f[]
-.ds Am &
-.
-.
-.\" NS doc-header-string global string
-.\" NS   the final string used for the manual page header
-.
-.ds doc-header-string
-.
-.
-.\" NS doc-setup-header macro
-.\" NS   install and initialize header and footer support
-.\" NS
-.\" NS modifies:
-.\" NS   doc-header-string
-.
-.de doc-setup-header
-.  ds doc-header-string "\*[doc-document-title]
-.  if !"\*[doc-section]"Null" \
-.    as doc-header-string \|(\*[doc-section])
-.
-.  wh 0 doc-header
-.  wh -1.25i doc-footer
-.
-.  br
-.
-.  e@ doc-end-macro
-..
-.
-.
-.\" NS doc-get-width macro
-.\" NS   computes the width of a string as a multiple of `doc-fixed-width':
-.\" NS   `.doc-get-width string'
-.\" NS
-.\" NS modifies:
-.\" NS   doc-width
-.
-.de doc-get-width
-.  nr doc-width \w\f[C]\$1
-.  ie (\n[doc-width] >= \n[doc-fixed-width]) \{\
-.    ie (\n[doc-width] % \n[doc-fixed-width]) \
-.      nr doc-width ((\n[doc-width] / \n[doc-fixed-width]) + 1)
-.    el \
-.      nr doc-width (\n[doc-width] / \n[doc-fixed-width])
-.  \}
-.  el \{\
-.    ie \n[doc-width] \
-.      nr doc-width 1
-.    el \
-.      nr doc-width 0
-.  \}
-..
-.
-.
-.\" NS doc-get-arg-width macro
-.\" NS   computes the width of an argument as a multiple of
-.\" NS   `doc-fixed-width': `.doc-get-arg-width arg-index'
-.\" NS
-.\" NS modifies:
-.\" NS   doc-width
-.
-.de doc-get-arg-width
-.  nr doc-width \w\f[C]\*[doc-arg\$1]
-.  ie (\n[doc-width] >= \n[doc-fixed-width]) \{\
-.    ie (\n[doc-width] % \n[doc-fixed-width]) \
-.      nr doc-width ((\n[doc-width] / \n[doc-fixed-width]) + 1)
-.    el \
-.      nr doc-width (\n[doc-width] / \n[doc-fixed-width])
-.  \}
-.  el \{\
-.    ie \n[doc-width] \
-.      nr doc-width 1
-.    el \
-.      nr doc-width 0
-.  \}
-..
-.
-.
-.\" NS Ql user macro
-.\" NS   quoted literal define
-.\" NS
-.\" NS modifies:
-.\" NS   doc-argXXX
-.\" NS   doc-arg-limit
-.\" NS   doc-arg-ptr
-.\" NS   doc-macro-name
-.\" NS   doc-spaceXXX
-.\" NS   doc-typeXXX
-.\" NS   doc-quote-left
-.\" NS   doc-quote-right
-.\" NS
-.\" NS local variables:
-.\" NS   doc-reg-Ql
-.\" NS   doc-reg-Ql1
-.\" NS   doc-reg-Ql2
-.\" NS
-.\" NS width register `Ql' set in doc-common
-.
-.de Ql
-.  if !\n[doc-arg-limit] \{\
-.    ie \n[.$] \{\
-.      ds doc-macro-name Ql
-.      doc-parse-args \$@
-.    \}
-.    el \
-.      tm Usage: .Ql argument ... (#\n[.c])
-.  \}
-.
-.  nr doc-reg-Ql (\n[doc-arg-ptr] + 1)
-.  doc-get-arg-width \n[doc-reg-Ql]
-.
-.  \" don't use quotes if we have more than two succeeding string arguments
-.  nr doc-reg-Ql +1
-.  if (\n[doc-arg-limit] >= \n[doc-reg-Ql]) \
-.    if (\n[doc-type\n[doc-reg-Ql]] == 2) \
-.      nr doc-width 3
-.
-.  \" make a difference in quotation style for strings longer
-.  \" than two characters
-.  ie (\n[doc-width] > 2) \
-.    Li
-.  el \{\
-.    ie \n[doc-arg-ptr] \{\
-.      \" we replace `Ql' with `Li'
-.      ds doc-arg\n[doc-arg-ptr] Li
-.      nr doc-arg-ptr -1
-.    \}
-.    el \{\
-.      \" if .Ql has been called directly, we must shift all elements in
-.      \" the argument vector to the right so that we can insert `Li'
-.      nr doc-reg-Ql \n[doc-arg-limit]
-.      nr doc-reg-Ql1 (\n[doc-arg-limit] + 1)
-.      while \n[doc-reg-Ql] \{\
-.        rn doc-arg\n[doc-reg-Ql] doc-arg\n[doc-reg-Ql1]
-.        rnn doc-type\n[doc-reg-Ql] doc-type\n[doc-reg-Ql1]
-.        rn doc-space\n[doc-reg-Ql] doc-space\n[doc-reg-Ql1]
-.        nr doc-reg-Ql -1
-.        nr doc-reg-Ql1 -1
-.      \}
-.      ds doc-arg1 Li
-.      nr doc-type1 1
-.      ds doc-space1
-.      nr doc-arg-limit +1
-.    \}
-.
-.    ds doc-quote-left "\*[doc-left-singlequote]
-.    ds doc-quote-right "\*[doc-right-singlequote]
-.    doc-enclose-string
-.  \}
-..
-.
-.
-.ec
-.
-.\" EOF
diff -Nuar groff-1.22.3.old/tmac/doc-ditroff-u groff-1.22.3/tmac/doc-ditroff-u
--- groff-1.22.3.old/tmac/doc-ditroff-u	1970-01-01 02:00:00.000000000 +0200
+++ groff-1.22.3/tmac/doc-ditroff-u	2015-04-23 20:57:03.000000000 +0300
@@ -0,0 +1,334 @@
+.\" -*- nroff -*-
+.\"
+.\" Copyright (c) 1991, 1993
+.\"	The Regents of the University of California.  All rights reserved.
+.\"
+.\" Redistribution and use in source and binary forms, with or without
+.\" modification, are permitted provided that the following conditions
+.\" are met:
+.\" 1. Redistributions of source code must retain the above copyright
+.\"    notice, this list of conditions and the following disclaimer.
+.\" 2. Redistributions in binary form must reproduce the above copyright
+.\"    notice, this list of conditions and the following disclaimer in the
+.\"    documentation and/or other materials provided with the distribution.
+.\" 3. [Deleted.  See
+.\"     ftp://ftp.cs.berkeley.edu/pub/4bsd/README.Impt.License.Change]
+.\" 4. Neither the name of the University nor the names of its contributors
+.\"    may be used to endorse or promote products derived from this software
+.\"    without specific prior written permission.
+.\"
+.\" THIS SOFTWARE IS PROVIDED BY THE REGENTS AND CONTRIBUTORS ``AS IS'' AND
+.\" ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE
+.\" IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE
+.\" ARE DISCLAIMED.  IN NO EVENT SHALL THE REGENTS OR CONTRIBUTORS BE LIABLE
+.\" FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL
+.\" DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS
+.\" OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION)
+.\" HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT
+.\" LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY
+.\" OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF
+.\" SUCH DAMAGE.
+.\"
+.\"     @(#)doc-ditroff	8.1 (Berkeley) 06/08/93
+.\"
+.\"     %beginstrip%
+.
+.
+.eo
+.
+.\" use -rD=1 for double-sided printing
+.
+.if !r D .nr D 0
+.
+.\" use -rcR=1 to force the creation of a single, very long page
+.
+.if !r cR .nr cR 0
+.
+.\" use -rS={11,12} to change the font size from 10pt to 11pt or 12pt.
+.
+.if !r S .nr S 10
+.
+.
+.ec
+.
+.
+.ie        (\n[S] == 11) \{\
+.  ps 10.95z
+.  vs 13.6p
+.\}
+.el \{ .ie (\n[S] == 12) \{\
+.  ps 12z
+.  vs 14.5p
+.\}
+.el \{\
+.  ps 10z
+.  vs 12p
+.\}\}
+.
+.
+.\" the `doc-xx-font' strings must not be empty!
+.
+.ds doc-caption-font \f[R]\s[\n[.ps]u]
+.ds doc-caption-font2 \f[R]\s[\n[.ps]u]
+.ds doc-Ad-font \f[I]\s[\n[.ps]u]
+.ds doc-Ar-font \f[CO]\s[\n[.ps]u]
+.ds doc-Cm-font \f[CB]\s[\n[.ps]u]
+.ds doc-Em-font \f[I]\s[\n[.ps]u]
+.ds doc-Er-font \f[C]\s[\n[.ps]u]
+.ds doc-Ev-font \f[C]\s[\n[.ps]u]
+.ds doc-Fa-font \f[CO]\s[\n[.ps]u]
+.ds doc-Fd-font \f[CB]\s[\n[.ps]u]
+.ds doc-Fl-font \f[CB]\s[\n[.ps]u]
+.ds doc-Fn-font \f[CB]\s[\n[.ps]u]
+.ds doc-Ft-font \f[CO]\s[\n[.ps]u]
+.ds doc-Ic-font \f[CB]\s[\n[.ps]u]
+.ds doc-Li-font \f[C]
+.ds doc-Me-font \f[B]\s[\n[.ps]u]
+.ds doc-Nm-font \f[CB]\s[\n[.ps]u]
+.ds doc-No-font \f[R]\s[\n[.ps]u]
+.ds doc-Pa-font \f[C]\s[\n[.ps]u]
+.ds doc-Sh-font \f[B]\s[\n[.ps]u]
+.ds doc-Sy-font \f[B]\s[\n[.ps]u]
+.ds doc-Sx-font \f[B]\s[\n[.ps]u]
+.ds doc-Tn-font-shape \f[R]
+\# XXX: adapt to discrete LaTeX font sizes
+.ds doc-Tn-font-size \s[(\n[.ps]u - 1z)]
+.ds doc-Va-font \f[I]\s[\n[.ps]u]
+.ds doc-Xr-font \f[C]\s[\n[.ps]u]
+.
+.ds doc-left-parenthesis \f[R]\|(\|\f[]\s[\n[.ps]u]
+.ds doc-right-parenthesis \f[R]\|)\|\f[]\s[\n[.ps]u]
+.ds lp \f[R](\f[]\s[\n[.ps]u]
+.ds rp \f[R])\f[]\s[\n[.ps]u]
+.ds doc-left-bracket \f[R]\^[\^\f[]\s[\n[.ps]u]
+.ds doc-right-bracket \f[R]\^]\f[]\s[\n[.ps]u]
+.
+.tr *\[**]
+.
+.\" miscellaneous
+.nr doc-subheader-indent (\w\f[C],u * 5u)
+.nr doc-paragraph-space .5v
+.
+.nr doc-digit-width \w'\0'u
+.nr doc-fixed-width \w\f[C]0
+.
+.eo
+.
+.
+.\" NS doc-header-space global register
+.\" NS   the space between header and body
+.
+.nr doc-header-space .5i
+.
+.
+.\" NS doc-footer-space global register
+.\" NS   the space between body and footer
+.
+.nr doc-footer-space .5i
+.
+.
+.\" NS doc-display-vertical global register
+.\" NS   vertical space between list elements etc.
+.
+.nr doc-display-vertical 0
+.
+.
+.\" NS doc-setup-page-layout macro
+.\" NS   set up page layout
+.\" NS
+.\" NS modifies:
+.\" NS   doc-display-vertical
+.
+.de doc-setup-page-layout
+.  ie r LL \
+.    ll \n[LL]u
+.  el \
+.    ll 6.5i
+.
+.  ie r LT \
+.    lt \n[LT]u
+.  el \
+.    lt 6.5i
+.
+.  po 1i
+.
+.  nr doc-display-vertical .5v
+..
+.
+.
+.ds doc-left-singlequote \[oq]
+.ds doc-right-singlequote \[cq]
+.
+.\" the following strings are `official'
+.ds <= \[<=]
+.ds >= \[>=]
+.ds Lq \[lq]
+.ds Rq \[rq]
+.ds ua \[ua]
+.ds aa \[aa]
+.ds ga \[ga]
+.ds q \[dq]
+.ds Pi \[*p]
+.ds Ne \[!=]
+.ds Le \[<=]
+.ds Ge \[>=]
+.ds Lt <
+.ds Gt >
+.ds Pm \[+-]
+.ds If \[if]
+.ds Na \f[I]NaN\f[]
+.ds Ba \f[R]|\f[]
+.ds Am &
+.
+.
+.\" NS doc-header-string global string
+.\" NS   the final string used for the manual page header
+.
+.ds doc-header-string
+.
+.
+.\" NS doc-setup-header macro
+.\" NS   install and initialize header and footer support
+.\" NS
+.\" NS modifies:
+.\" NS   doc-header-string
+.
+.de doc-setup-header
+.  ds doc-header-string "\*[doc-document-title]
+.  if !"\*[doc-section]"Null" \
+.    as doc-header-string \|(\*[doc-section])
+.
+.  wh 0 doc-header
+.  wh -1.25i doc-footer
+.
+.  br
+.
+.  e@ doc-end-macro
+..
+.
+.
+.\" NS doc-get-width macro
+.\" NS   computes the width of a string as a multiple of `doc-fixed-width':
+.\" NS   `.doc-get-width string'
+.\" NS
+.\" NS modifies:
+.\" NS   doc-width
+.
+.de doc-get-width
+.  nr doc-width \w\f[C]\$1
+.  ie (\n[doc-width] >= \n[doc-fixed-width]) \{\
+.    ie (\n[doc-width] % \n[doc-fixed-width]) \
+.      nr doc-width ((\n[doc-width] / \n[doc-fixed-width]) + 1)
+.    el \
+.      nr doc-width (\n[doc-width] / \n[doc-fixed-width])
+.  \}
+.  el \{\
+.    ie \n[doc-width] \
+.      nr doc-width 1
+.    el \
+.      nr doc-width 0
+.  \}
+..
+.
+.
+.\" NS doc-get-arg-width macro
+.\" NS   computes the width of an argument as a multiple of
+.\" NS   `doc-fixed-width': `.doc-get-arg-width arg-index'
+.\" NS
+.\" NS modifies:
+.\" NS   doc-width
+.
+.de doc-get-arg-width
+.  nr doc-width \w\f[C]\*[doc-arg\$1]
+.  ie (\n[doc-width] >= \n[doc-fixed-width]) \{\
+.    ie (\n[doc-width] % \n[doc-fixed-width]) \
+.      nr doc-width ((\n[doc-width] / \n[doc-fixed-width]) + 1)
+.    el \
+.      nr doc-width (\n[doc-width] / \n[doc-fixed-width])
+.  \}
+.  el \{\
+.    ie \n[doc-width] \
+.      nr doc-width 1
+.    el \
+.      nr doc-width 0
+.  \}
+..
+.
+.
+.\" NS Ql user macro
+.\" NS   quoted literal define
+.\" NS
+.\" NS modifies:
+.\" NS   doc-argXXX
+.\" NS   doc-arg-limit
+.\" NS   doc-arg-ptr
+.\" NS   doc-macro-name
+.\" NS   doc-spaceXXX
+.\" NS   doc-typeXXX
+.\" NS   doc-quote-left
+.\" NS   doc-quote-right
+.\" NS
+.\" NS local variables:
+.\" NS   doc-reg-Ql
+.\" NS   doc-reg-Ql1
+.\" NS   doc-reg-Ql2
+.\" NS
+.\" NS width register `Ql' set in doc-common
+.
+.de Ql
+.  if !\n[doc-arg-limit] \{\
+.    ie \n[.$] \{\
+.      ds doc-macro-name Ql
+.      doc-parse-args \$@
+.    \}
+.    el \
+.      tm Usage: .Ql argument ... (#\n[.c])
+.  \}
+.
+.  nr doc-reg-Ql (\n[doc-arg-ptr] + 1)
+.  doc-get-arg-width \n[doc-reg-Ql]
+.
+.  \" don't use quotes if we have more than two succeeding string arguments
+.  nr doc-reg-Ql +1
+.  if (\n[doc-arg-limit] >= \n[doc-reg-Ql]) \
+.    if (\n[doc-type\n[doc-reg-Ql]] == 2) \
+.      nr doc-width 3
+.
+.  \" make a difference in quotation style for strings longer
+.  \" than two characters
+.  ie (\n[doc-width] > 2) \
+.    Li
+.  el \{\
+.    ie \n[doc-arg-ptr] \{\
+.      \" we replace `Ql' with `Li'
+.      ds doc-arg\n[doc-arg-ptr] Li
+.      nr doc-arg-ptr -1
+.    \}
+.    el \{\
+.      \" if .Ql has been called directly, we must shift all elements in
+.      \" the argument vector to the right so that we can insert `Li'
+.      nr doc-reg-Ql \n[doc-arg-limit]
+.      nr doc-reg-Ql1 (\n[doc-arg-limit] + 1)
+.      while \n[doc-reg-Ql] \{\
+.        rn doc-arg\n[doc-reg-Ql] doc-arg\n[doc-reg-Ql1]
+.        rnn doc-type\n[doc-reg-Ql] doc-type\n[doc-reg-Ql1]
+.        rn doc-space\n[doc-reg-Ql] doc-space\n[doc-reg-Ql1]
+.        nr doc-reg-Ql -1
+.        nr doc-reg-Ql1 -1
+.      \}
+.      ds doc-arg1 Li
+.      nr doc-type1 1
+.      ds doc-space1
+.      nr doc-arg-limit +1
+.    \}
+.
+.    ds doc-quote-left "\*[doc-left-singlequote]
+.    ds doc-quote-right "\*[doc-right-singlequote]
+.    doc-enclose-string
+.  \}
+..
+.
+.
+.ec
+.
+.\" EOF
diff -Nuar groff-1.22.3.old/tmac/doc-nroff groff-1.22.3/tmac/doc-nroff
--- groff-1.22.3.old/tmac/doc-nroff	2014-11-04 10:38:35.533520146 +0200
+++ groff-1.22.3/tmac/doc-nroff	1970-01-01 02:00:00.000000000 +0200
@@ -1,277 +0,0 @@
-.\" -*- nroff -*-
-.\"
-.\" Copyright (c) 1991, 1993
-.\"	The Regents of the University of California.  All rights reserved.
-.\"
-.\" Redistribution and use in source and binary forms, with or without
-.\" modification, are permitted provided that the following conditions
-.\" are met:
-.\" 1. Redistributions of source code must retain the above copyright
-.\"    notice, this list of conditions and the following disclaimer.
-.\" 2. Redistributions in binary form must reproduce the above copyright
-.\"    notice, this list of conditions and the following disclaimer in the
-.\"    documentation and/or other materials provided with the distribution.
-.\" 3. [Deleted.  See
-.\"     ftp://ftp.cs.berkeley.edu/pub/4bsd/README.Impt.License.Change]
-.\" 4. Neither the name of the University nor the names of its contributors
-.\"    may be used to endorse or promote products derived from this software
-.\"    without specific prior written permission.
-.\"
-.\" THIS SOFTWARE IS PROVIDED BY THE REGENTS AND CONTRIBUTORS ``AS IS'' AND
-.\" ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE
-.\" IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE
-.\" ARE DISCLAIMED.  IN NO EVENT SHALL THE REGENTS OR CONTRIBUTORS BE LIABLE
-.\" FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL
-.\" DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS
-.\" OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION)
-.\" HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT
-.\" LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY
-.\" OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF
-.\" SUCH DAMAGE.
-.\"
-.\"     @(#)doc-nroff	8.1 (Berkeley) 06/08/93
-.\"
-.\"     %beginstrip%
-.
-.
-.eo
-.
-.\" use -rD=1 for double-sided printing
-.
-.if !r D .nr D 0
-.
-.\" use -rcR=0 to have multiple pages instead of a single, very long page
-.
-.if !r cR .nr cR 1
-.
-.\" the following switch is ignored in nroff mode
-.
-.nr S 10
-.
-.\" the `doc-xx-font' strings must not be empty!
-.
-.ds doc-caption-font \f[R]
-.ds doc-caption-font2 \f[R]
-.ds doc-Ad-font \f[I]
-.ds doc-Ar-font \f[I]
-.ds doc-Cm-font \f[B]
-.ds doc-Em-font \f[I]
-.ds doc-Er-font \f[R]
-.ds doc-Ev-font \f[R]
-.ds doc-Fa-font \f[I]
-.ds doc-Fd-font \f[B]
-.ds doc-Fl-font \f[B]
-.ds doc-Fn-font \f[B]
-.ds doc-Ft-font \f[I]
-.ds doc-Ic-font \f[B]
-.ds doc-Li-font \f[R]
-.ds doc-Me-font \f[B]
-.ds doc-Nm-font \f[B]
-.ds doc-No-font \f[R]
-.ds doc-Pa-font \f[I]
-.ds doc-Sh-font \f[B]
-.ds doc-Sy-font \f[B]
-.ds doc-Sx-font \f[I]
-.ds doc-Tn-font-shape \f[R]
-.ds doc-Tn-font-size
-.ds doc-Va-font \f[I]
-.ds doc-Xr-font \f[R]
-.
-.ds doc-left-parenthesis \f[R](\f[]
-.ds doc-right-parenthesis \f[R])\f[]
-.ds lp \f[R](\f[]
-.ds rp \f[R])\f[]
-.ds doc-left-bracket \f[R][\f[]
-.ds doc-right-bracket \f[R]]\f[]
-.
-.\" miscellaneous
-.nr doc-subheader-indent .5i
-.nr doc-paragraph-space 1v
-.
-.ec
-.nr doc-digit-width \w'\0\0'u
-.nr doc-fixed-width \w'0'
-.eo
-.
-.
-.\" NS doc-header-space global register
-.\" NS   the space between header and body
-.
-.nr doc-header-space 0.5i
-.
-.
-.\" NS doc-footer-space global register
-.\" NS   the space between body and footer
-.
-.nr doc-footer-space 0.5i
-.
-.
-.\" NS doc-display-vertical global register
-.\" NS   vertical space between list elements etc.
-.
-.nr doc-display-vertical 0
-.
-.
-.\" NS doc-setup-page-layout macro
-.\" NS   set up page layout
-.\" NS
-.\" NS modifies:
-.\" NS   doc-display-vertical
-.
-.de doc-setup-page-layout
-.  ie r LL \
-.    ll \n[LL]u
-.  el \
-.    ll 78n
-.
-.  ie r LT \
-.    lt \n[LT]u
-.  el \
-.    lt 78n
-.
-.  po 0i
-.
-.  nr doc-display-vertical 1v
-.  ad l
-.  na
-..
-.
-.
-.ec
-.
-.ds doc-left-singlequote \[oq]
-.ds doc-right-singlequote \[cq]
-.
-.\" the following strings are `official'
-.ds <= \[<=]
-.ds >= \[>=]
-.ds aa \[aa]
-.ds ga \[ga]
-.ds q \[dq]
-.ds Ne \[!=]
-.ds Le \[<=]
-.ds Ge \[>=]
-.ds Lt <
-.ds Gt >
-.ds Pm \[+-]
-.ds Na \f[I]NaN\f[]
-.ds Ba \f[R]|\f[]
-.ds Am &
-.
-.\" Unicode TTYs have all glyph forms; for other TTY character sets we need
-.\" character representations which are different from GNU troff's standard
-.\" forms.
-.ie '\*[.T]'utf8' \{\
-.  ds Rq \[rq]
-.  ds Lq \[lq]
-.  ds ua \[ua]
-.  ds Pi \[*p]
-.  ds If \[if]
-.\}
-.el \{\
-.  ds Rq ''
-.  ds Lq ``
-.  ds ua ^
-.  ds Pi pi
-.  ds If infinity
-.\}
-.
-.eo
-.
-.
-.\" NS doc-header-string global string
-.\" NS   the final string used for the manual page header
-.
-.ds doc-header-string
-.
-.
-.\" NS doc-setup-header macro
-.\" NS   install and initialize header and footer support
-.\" NS
-.\" NS modifies:
-.\" NS   doc-header-string
-.
-.de doc-setup-header
-.  ds doc-header-string "\*[doc-document-title]
-.  if !"\*[doc-section]"Null" \
-.    as doc-header-string (\*[doc-section])
-.
-.  ie \n[cR] \
-.    doc-header
-.  el \{\
-.    wh 0 doc-header
-.    wh -1.167i doc-footer
-.  \}
-.
-.  e@ doc-end-macro
-..
-.
-.
-.\" NS doc-get-width macro
-.\" NS   computes the width of a string as a multiple of `doc-fixed-width':
-.\" NS   `.doc-get-width string'
-.\" NS
-.\" NS modifies:
-.\" NS   doc-width
-.
-.de doc-get-width
-.  nr doc-width \w\$1
-.  ie (\n[doc-width] >= \n[doc-fixed-width]) \{\
-.    ie (\n[doc-width] % \n[doc-fixed-width]) \
-.      nr doc-width ((\n[doc-width] / \n[doc-fixed-width]) + 1)
-.    el \
-.      nr doc-width (\n[doc-width] / \n[doc-fixed-width])
-.  \}
-.  el \
-.    nr doc-width 0
-..
-.
-.
-.\" NS doc-get-arg-width macro
-.\" NS   computes the width of an argument as a multiple of
-.\" NS   `doc-fixed-width': `.doc-get-arg-width arg-index'
-.\" NS
-.\" NS modifies:
-.\" NS   doc-width
-.
-.de doc-get-arg-width
-.  nr doc-width \w\*[doc-arg\$1]
-.  ie (\n[doc-width] >= \n[doc-fixed-width]) \{\
-.    ie (\n[doc-width] % \n[doc-fixed-width]) \
-.      nr doc-width ((\n[doc-width] / \n[doc-fixed-width]) + 1)
-.    el \
-.      nr doc-width (\n[doc-width] / \n[doc-fixed-width])
-.  \}
-.  el \
-.    nr doc-width 0
-..
-.
-.
-.\" NS Ql user macro
-.\" NS   quoted literal define
-.\" NS
-.\" NS modifies:
-.\" NS   doc-macro-name
-.\" NS   doc-quote-left
-.\" NS   doc-quote-right
-.\" NS
-.\" NS width register `Ql' set in doc-common
-.
-.de Ql
-.  if !\n[doc-arg-limit] \{\
-.    ie \n[.$] \
-.      ds doc-macro-name Ql
-.    el \
-.      tm Usage: .Ql argument ... (#\n[.c])
-.  \}
-.
-.  ds doc-quote-left "\*[doc-left-singlequote]
-.  ds doc-quote-right "\*[doc-right-singlequote]
-.
-.  doc-enclose-string \$@
-..
-.
-.
-.ec
-.
-.\" EOF
diff -Nuar groff-1.22.3.old/tmac/doc-nroff-u groff-1.22.3/tmac/doc-nroff-u
--- groff-1.22.3.old/tmac/doc-nroff-u	1970-01-01 02:00:00.000000000 +0200
+++ groff-1.22.3/tmac/doc-nroff-u	2015-04-23 20:57:03.000000000 +0300
@@ -0,0 +1,277 @@
+.\" -*- nroff -*-
+.\"
+.\" Copyright (c) 1991, 1993
+.\"	The Regents of the University of California.  All rights reserved.
+.\"
+.\" Redistribution and use in source and binary forms, with or without
+.\" modification, are permitted provided that the following conditions
+.\" are met:
+.\" 1. Redistributions of source code must retain the above copyright
+.\"    notice, this list of conditions and the following disclaimer.
+.\" 2. Redistributions in binary form must reproduce the above copyright
+.\"    notice, this list of conditions and the following disclaimer in the
+.\"    documentation and/or other materials provided with the distribution.
+.\" 3. [Deleted.  See
+.\"     ftp://ftp.cs.berkeley.edu/pub/4bsd/README.Impt.License.Change]
+.\" 4. Neither the name of the University nor the names of its contributors
+.\"    may be used to endorse or promote products derived from this software
+.\"    without specific prior written permission.
+.\"
+.\" THIS SOFTWARE IS PROVIDED BY THE REGENTS AND CONTRIBUTORS ``AS IS'' AND
+.\" ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE
+.\" IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE
+.\" ARE DISCLAIMED.  IN NO EVENT SHALL THE REGENTS OR CONTRIBUTORS BE LIABLE
+.\" FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL
+.\" DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS
+.\" OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION)
+.\" HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT
+.\" LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY
+.\" OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF
+.\" SUCH DAMAGE.
+.\"
+.\"     @(#)doc-nroff	8.1 (Berkeley) 06/08/93
+.\"
+.\"     %beginstrip%
+.
+.
+.eo
+.
+.\" use -rD=1 for double-sided printing
+.
+.if !r D .nr D 0
+.
+.\" use -rcR=0 to have multiple pages instead of a single, very long page
+.
+.if !r cR .nr cR 1
+.
+.\" the following switch is ignored in nroff mode
+.
+.nr S 10
+.
+.\" the `doc-xx-font' strings must not be empty!
+.
+.ds doc-caption-font \f[R]
+.ds doc-caption-font2 \f[R]
+.ds doc-Ad-font \f[I]
+.ds doc-Ar-font \f[I]
+.ds doc-Cm-font \f[B]
+.ds doc-Em-font \f[I]
+.ds doc-Er-font \f[R]
+.ds doc-Ev-font \f[R]
+.ds doc-Fa-font \f[I]
+.ds doc-Fd-font \f[B]
+.ds doc-Fl-font \f[B]
+.ds doc-Fn-font \f[B]
+.ds doc-Ft-font \f[I]
+.ds doc-Ic-font \f[B]
+.ds doc-Li-font \f[R]
+.ds doc-Me-font \f[B]
+.ds doc-Nm-font \f[B]
+.ds doc-No-font \f[R]
+.ds doc-Pa-font \f[I]
+.ds doc-Sh-font \f[B]
+.ds doc-Sy-font \f[B]
+.ds doc-Sx-font \f[I]
+.ds doc-Tn-font-shape \f[R]
+.ds doc-Tn-font-size
+.ds doc-Va-font \f[I]
+.ds doc-Xr-font \f[R]
+.
+.ds doc-left-parenthesis \f[R](\f[]
+.ds doc-right-parenthesis \f[R])\f[]
+.ds lp \f[R](\f[]
+.ds rp \f[R])\f[]
+.ds doc-left-bracket \f[R][\f[]
+.ds doc-right-bracket \f[R]]\f[]
+.
+.\" miscellaneous
+.nr doc-subheader-indent .5i
+.nr doc-paragraph-space 1v
+.
+.ec
+.nr doc-digit-width \w'\0\0'u
+.nr doc-fixed-width \w'0'
+.eo
+.
+.
+.\" NS doc-header-space global register
+.\" NS   the space between header and body
+.
+.nr doc-header-space 0.5i
+.
+.
+.\" NS doc-footer-space global register
+.\" NS   the space between body and footer
+.
+.nr doc-footer-space 0.5i
+.
+.
+.\" NS doc-display-vertical global register
+.\" NS   vertical space between list elements etc.
+.
+.nr doc-display-vertical 0
+.
+.
+.\" NS doc-setup-page-layout macro
+.\" NS   set up page layout
+.\" NS
+.\" NS modifies:
+.\" NS   doc-display-vertical
+.
+.de doc-setup-page-layout
+.  ie r LL \
+.    ll \n[LL]u
+.  el \
+.    ll 78n
+.
+.  ie r LT \
+.    lt \n[LT]u
+.  el \
+.    lt 78n
+.
+.  po 0i
+.
+.  nr doc-display-vertical 1v
+.  ad l
+.  na
+..
+.
+.
+.ec
+.
+.ds doc-left-singlequote \[oq]
+.ds doc-right-singlequote \[cq]
+.
+.\" the following strings are `official'
+.ds <= \[<=]
+.ds >= \[>=]
+.ds aa \[aa]
+.ds ga \[ga]
+.ds q \[dq]
+.ds Ne \[!=]
+.ds Le \[<=]
+.ds Ge \[>=]
+.ds Lt <
+.ds Gt >
+.ds Pm \[+-]
+.ds Na \f[I]NaN\f[]
+.ds Ba \f[R]|\f[]
+.ds Am &
+.
+.\" Unicode TTYs have all glyph forms; for other TTY character sets we need
+.\" character representations which are different from GNU troff's standard
+.\" forms.
+.ie '\*[.T]'utf8' \{\
+.  ds Rq \[rq]
+.  ds Lq \[lq]
+.  ds ua \[ua]
+.  ds Pi \[*p]
+.  ds If \[if]
+.\}
+.el \{\
+.  ds Rq ''
+.  ds Lq ``
+.  ds ua ^
+.  ds Pi pi
+.  ds If infinity
+.\}
+.
+.eo
+.
+.
+.\" NS doc-header-string global string
+.\" NS   the final string used for the manual page header
+.
+.ds doc-header-string
+.
+.
+.\" NS doc-setup-header macro
+.\" NS   install and initialize header and footer support
+.\" NS
+.\" NS modifies:
+.\" NS   doc-header-string
+.
+.de doc-setup-header
+.  ds doc-header-string "\*[doc-document-title]
+.  if !"\*[doc-section]"Null" \
+.    as doc-header-string (\*[doc-section])
+.
+.  ie \n[cR] \
+.    doc-header
+.  el \{\
+.    wh 0 doc-header
+.    wh -1.167i doc-footer
+.  \}
+.
+.  e@ doc-end-macro
+..
+.
+.
+.\" NS doc-get-width macro
+.\" NS   computes the width of a string as a multiple of `doc-fixed-width':
+.\" NS   `.doc-get-width string'
+.\" NS
+.\" NS modifies:
+.\" NS   doc-width
+.
+.de doc-get-width
+.  nr doc-width \w\$1
+.  ie (\n[doc-width] >= \n[doc-fixed-width]) \{\
+.    ie (\n[doc-width] % \n[doc-fixed-width]) \
+.      nr doc-width ((\n[doc-width] / \n[doc-fixed-width]) + 1)
+.    el \
+.      nr doc-width (\n[doc-width] / \n[doc-fixed-width])
+.  \}
+.  el \
+.    nr doc-width 0
+..
+.
+.
+.\" NS doc-get-arg-width macro
+.\" NS   computes the width of an argument as a multiple of
+.\" NS   `doc-fixed-width': `.doc-get-arg-width arg-index'
+.\" NS
+.\" NS modifies:
+.\" NS   doc-width
+.
+.de doc-get-arg-width
+.  nr doc-width \w\*[doc-arg\$1]
+.  ie (\n[doc-width] >= \n[doc-fixed-width]) \{\
+.    ie (\n[doc-width] % \n[doc-fixed-width]) \
+.      nr doc-width ((\n[doc-width] / \n[doc-fixed-width]) + 1)
+.    el \
+.      nr doc-width (\n[doc-width] / \n[doc-fixed-width])
+.  \}
+.  el \
+.    nr doc-width 0
+..
+.
+.
+.\" NS Ql user macro
+.\" NS   quoted literal define
+.\" NS
+.\" NS modifies:
+.\" NS   doc-macro-name
+.\" NS   doc-quote-left
+.\" NS   doc-quote-right
+.\" NS
+.\" NS width register `Ql' set in doc-common
+.
+.de Ql
+.  if !\n[doc-arg-limit] \{\
+.    ie \n[.$] \
+.      ds doc-macro-name Ql
+.    el \
+.      tm Usage: .Ql argument ... (#\n[.c])
+.  \}
+.
+.  ds doc-quote-left "\*[doc-left-singlequote]
+.  ds doc-quote-right "\*[doc-right-singlequote]
+.
+.  doc-enclose-string \$@
+..
+.
+.
+.ec
+.
+.\" EOF
diff -Nuar groff-1.22.3.old/tmac/doc-old.tmac groff-1.22.3/tmac/doc-old.tmac
--- groff-1.22.3.old/tmac/doc-old.tmac	2014-11-04 10:38:35.533520146 +0200
+++ groff-1.22.3/tmac/doc-old.tmac	1970-01-01 02:00:00.000000000 +0200
@@ -1,1857 +0,0 @@
-.\" -*- nroff -*-
-.\"
-.\" Copyright (c) 1990 The Regents of the University of California.
-.\" All rights reserved.
-.\"
-.\" Redistribution and use in source and binary forms, with or without
-.\" modification, are permitted provided that the following conditions
-.\" are met:
-.\" 1. Redistributions of source code must retain the above copyright
-.\"    notice, this list of conditions and the following disclaimer.
-.\" 2. Redistributions in binary form must reproduce the above copyright
-.\"    notice, this list of conditions and the following disclaimer in the
-.\"    documentation and/or other materials provided with the distribution.
-.\" 3. [Deleted.  See
-.\"     ftp://ftp.cs.berkeley.edu/pub/4bsd/README.Impt.License.Change]
-.\" 4. Neither the name of the University nor the names of its contributors
-.\"    may be used to endorse or promote products derived from this software
-.\"    without specific prior written permission.
-.\"
-.\" THIS SOFTWARE IS PROVIDED BY THE REGENTS AND CONTRIBUTORS ``AS IS'' AND
-.\" ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE
-.\" IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE
-.\" ARE DISCLAIMED.  IN NO EVENT SHALL THE REGENTS OR CONTRIBUTORS BE LIABLE
-.\" FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL
-.\" DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS
-.\" OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION)
-.\" HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT
-.\" LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY
-.\" OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF
-.\" SUCH DAMAGE.
-.\"
-.\"     @(#)doc-old.tmac	5.2 (Berkeley) 3/13/91
-.\"     Slightly modified by jjc@jclark.com to work with groff as well.
-.\"
-.\" Assume nroff on crt's only if cR==1
-.if n .nr cR 1
-.\"	STRING CONSTANTS
-.\" 	DITROFF
-.if t \{\
-.\"	Address Style
-.ds aD \fI
-.\"	Argument Reference Style
-.ds aR \f(CO
-.\"	Interactive Command Modifier (flag)
-.ds cM \f(CB
-.\"	Emphasis (in the English sense - usually italics)
-.ds eM \fI
-.\"	Errno Style
-.ds eR \fC
-.\"	Environment Variable Style
-.ds eV \fC
-.\"	Command Line Flag Style
-.ds fL \f(CB
-.\"	Header String Style
-.ds Hs \fR
-.\"	Interactive Command Style
-.ds iC \f(CB
-.\"	Literal Style
-.ds lI \fC
-.\"	Left Parenthesis Style
-.ds lP \fR\|(\|\fP
-.\"	Right Parenthesis Style
-.ds rP \fR\|)\|\fP
-.\"	Options Open Bracket Style
-.ds lB \fR\^[\^\fP
-.\"	Options Open Bracket Style
-.ds rB \fR\^]\fP
-.\"	Name (subject of manpage) Style
-.ds nM \f(CB
-.\"	Pathname Style
-.ds pA \fC
-.\"	Accepted punctuation string for -mdoc syntax
-.ds Pu \fR[.,:;(\^)[\^]\fR]
-.\"	Section Header Style
-.ds Sp \s12\fB
-.\" .ds sT \s-2\fR
-.\"	Symbolic Emphasis (boldface)
-.ds sY \f(CB
-.\"	Generic Variable Style
-.ds vA \fI
-.\"	Volume Title Style
-.ds Vs \fR
-.\"	Cross Reference STyle (man page only)
-.ds xR \fC
-.\"	Math *
-.tr *\(**
-.\}
-.\"	NROFF
-.if n \{\
-.\"	Address Style
-.ds aD \fI
-.\"	Argument Reference Style
-.ds aR \fI
-.\"	Interactive Command Modifier (flag)
-.ds cM \fB
-.\"	Emphasis (in the English sense - usually italics)
-.ds eM \fI
-.\"	Errno Style
-.ds eR \fR
-.\"	Environment Variable Style
-.ds eV \fR
-.\"	Command Line Flag Style
-.ds fL \fB
-.\"	Header String Style
-.ds Hs \fR
-.\"	Interactive Command Style
-.ds iC \fB
-.\"	Literal Style
-.ds lI \fR
-.\"	Left Parenthesis Style
-.ds lP \fR\|(\fP
-.\"	Right Parenthesis Style
-.ds rP \fR\|)\fP
-.\"	Options Open Bracket Style
-.ds lB \fR\|[\|\fP
-.\"	Options Open Bracket Style
-.ds rB \fR\|]\fP
-.\"	Name (subject of manpage) Style
-.ds nM \fB
-.\"	Pathname Style
-.ds pA \fI
-.\"	Accepted punctuation string for -mdoc syntax
-.ds Pu [.,;:()[]]
-.\"	Section Header Style
-.ds Sp \s12\fB
-.\"	.ds sT \s-2\fR
-.\" .ds sT \s-2\fR
-.\"	Symbol, Mode or Mask Style
-.ds sY \fB
-.\"	Generic Variable Style
-.ds vA \fI
-.\"	Volume Title Style
-.ds Vs \fR
-.\"	Cross Reference Style (man page only)
-.ds xR \fR
-.\}
-.\"	INDENTS - Subheaders(sI), Text(Ti) between Section Headers and Subsects
-.if t \{\
-.	nr sI \w'\fC,'u*5
-.	nr Ti \n(sIu
-.\}
-.if n \{\
-.	nr sI .5i
-.	nr Ti .5i
-.\}
-.\"	Flags for macros names which are used only for .Ds
-.nr dI 6n
-.nr dC 1
-.nr dL 1
-.nr dR 1
-.\"	INDENT WIDTHS (for Lists)
-.\"	Width Needed for Address Tag (indented amount)
-.nr Ad 12n
-.\"	Angle Quote Width
-.nr Aq 12n
-.\"	Width Needed for Argument
-.nr Ar 12n
-.\"	Width Needed for Column offset
-.nr Cl 15n
-.\"	Width neeeded for Interactive Command Modifier
-.nr Cm 10n
-.\"	Width Needed for Complex Expressions
-.nr Cx 20n
-.\"	Indent Width Needed for Display (right and left margins)
-.nr Ds 6n
-.\"	Double Quote Width
-.nr Dq 12n
-.\"	tI is dependent on Ds and used by .Dp
-.nr tI \n(Dsu
-.\"	Width Needed for Display
-.nr Em 10n
-.\"	Width Needed for Errno Types
-.nr Er 15n
-.\"	Width Needed for Environment Variables
-.nr Ev 15n
-.\"	Width Needed for Example Indent
-.nr Ex 10n
-.\"	Width Needed for Flag
-.nr Fl 10n
-.\"	Width Needed for Function
-.nr Fn 16n
-.\"	Width neeeded for Interactive Command Name
-.nr Ic 10n
-.\"	Width Needed for Constant
-.nr Li 16n
-.\"	Width Needed for Math Symbol ? not sure if needed
-.nr Ms 6n
-.\"	Width Needed for Name
-.nr Nm 10n
-.\"	Width Needed for Option Begin
-.nr Ob 14n
-.\"	Width Needed for Option End
-.nr Oe 14n
-.\"	Width Needed for Option (one line)
-.nr Op 14n
-.\"	Width Needed for Pathname
-.nr Pa 32n
-.\"	Parenthesis Quote Width
-.nr Pq 12n
-.\"	Single Quote Width
-.nr Sq 12n
-.\"	Width Needed for Symbols, Modes or Masks
-.nr Sy 6n
-.\"	Width needed for default or unknown text width
-.nr Tx 22n
-.\"	Width Needed for Generic Variable
-.nr Va 12n
-.\"	Width Needed for Cross Reference, should the cross ref be annotated.
-.nr Xr 10n
-.\" PARAGRAPH SPACE
-.if t \{\
-.	nr Pp .5v
-.\}
-.if n \{\
-.	nr Pp 1v
-.\}
-.\"	PAGE LAYOUT
-.\" .Li Tagged Paragraph Style - zero if break on oversized tag
-.\" one if add em space and continue filling line.
-.nr tP 0
-.\" Page Layout Macro
-.de pL
-.\"	DITROFF
-.ie t \{\
-.\" Header Margin
-.	nr Hm .5i
-.\" Footer Margin
-.	nr Fm .5i
-.\" Line length
-.	nr ll 5.5i
-.\" Line length
-.	ll 5.5i
-.\" Title length
-.	nr lt 5.5i
-.\" Title length
-.	lt 5.5i
-.\" Page offset
-.	nr po 1.56i
-.\" Page offset
-.	po 1.56i
-.\" Vertical space distance (from Section headers/Lists/Subsections)
-.	nr vV .5v
-.\" em space
-.	ds tP \|\|\|\|\|\|
-.\}
-.el \{\
-.\" Line length
-.	nr ll 78n
-.	ll 78n
-.\" Title length
-.	nr lt 78n
-.\" Title length
-.	lt 78n
-.\" Page offset
-.	nr po 0i
-.\" Page offset
-.	po 0i
-.\" Vertical space distance (from Section headers/Lists/Subsections)
-.	nr vV 1v
-.\" em space
-.	ds tP \0\0
-.\" Test for crt
-.	ie \\n(cR .nr Hm 0
-.	el .nr Hm .5i
-.\" Footer Margin
-.	nr Fm .5i
-.\}
-..
-.\" Adjustment mode
-.if n \{\
-.ad l
-.na
-..
-.\}
-.\" PREDEFINED STRINGS
-.if t \{\
-.	ds <= \(<=
-.	ds >= \(>=
-.	ds Lq \&``
-.	ds Rq \&''
-.	ds ua \(ua
-.	ds aa \(aa
-.	ds ga \(ga
-.	ds sR \(aa
-.	ds sL \(ga
-.\}
-.if n \{\
-.	ds <= \&<\&=
-.	ds >= \&>\&=
-.       ds Rq ''
-.       ds Lq ``
-.	ds ua ^
-.	ds aa '
-.	ds ga `
-.	ds sL `
-.	ds sR '
-.\}
-.\" Note: The distances from the bottom or top of the page are set
-.\" in headers (macro .hK): to -1.25 for troff, and -1.167 for nroff
-.\" bottoms, and top is 0.
-.\"
-.\"	.Dt Document/manpage_title section/chapter volume
-.\"		The \{ and \} is necessary as roff doesn't nest if-elses
-.\"		properly, especially with .ds.
-.\"	TODO: separate Dt into Dt, Ch and Vt for supp docs.
-.de Dt
-.ds dT UNTITLED
-.ds vT Local
-.ds cH Null
-.\" 	Volume and Section Number or Chapter Number
-.if !"\\$1"" .ds dT \\$1
-.if !"\\$2"" \{\
-.	ds cH \\$2
-.	if "\\$3"" \{\
-.		\" Volume Title if none given
-.		if \\$2>=1 .if \\$2<=8 \{\
-.			ds vT UNIX Reference Manual
-.			if \\$2>1 .if \\$2<6 .ds vT UNIX Programmer's Manual
-.			if "\\$2"8" .ds vT UNIX System Manager's Manual
-.		\}
-.		if "\\$2"unass"  .ds vT DRAFT
-.		if "\\$2"draft"  .ds vT DRAFT
-.		if "\\$2"paper"  .ds vT Null
-.	\}
-.\}
-.if !"\\$3"" \{\
-.	\" Volume Title if given
-.	if "\\$3"USD"   .ds vT UNIX User's Supplementary Documents
-.	if "\\$3"PS1"   .ds vT UNIX Programmers's Supplementary Documents
-.	if "\\$3"AMD"   .ds vT UNIX Ancestral Manual Documents
-.	if "\\$3"SMM"   .ds vT UNIX System Manager's Manual
-.	if "\\$3"URM"   .ds vT UNIX Reference Manual
-.	if "\\$3"PRM"   .ds vT UNIX Programmers's Manual
-.	if "\\$3"IND"   .ds vT UNIX Manual Master Index
-.	if "\\$3"CON"   .ds vT UNIX Contributed Software Manual
-.	if "\\$3"IMP"	.ds vT UNIX Implementation Notes
-.	if "\\$3"HOW"	.ds vT UNIX How Pocket Manual
-.	if "\\$3"LOCAL" .ds vT UNIX Local Manual
-.	if "\\*(vT"Local" .ds vT \\$3
-.\}
-..
-.\"
-.\"	.Os Operating System/Standard and Release or Version Number
-.\"
-.de Os
-.ds oS Null
-.if "\\$1"" \{\
-.	ds oS \fIBSD Experimental\fP
-.\" .	ds oS (\fIBag o' Bits\fP)
-.\}
-.if "\\$2"" \{\
-.	ds o1 Non-Null
-.\}
-.if "\\$1"ATT"   \{\
-.	ds oS AT&T
-.	if "\\$2""    .as oS \0UNIX
-.	if "\\$2"7th" .as oS \07th Edition
-.	if "\\$2"7"   .as oS \07th Edition
-.	if "\\$2"III" .as oS \0System III
-.	if "\\$2"3"   .as oS \0System III
-.	if "\\$2"V"   .as oS \0System V
-.	if "\\$2"V.2" .as oS \0System V Release 2
-.	if "\\$2"V.3" .as oS \0System V Release 3
-.	if "\\$2"V.4" .as oS \0System V Release 4
-.\}
-.if "\\$1"BSD" \{\
-.	if "\\$2"3"    .ds oS 3rd Berkeley Distribution
-.	if "\\$2"4"    .ds oS 4th Berkeley Distribution
-.	if "\\$2"4.1"  .ds oS 4.1 Berkeley Distribution
-.	if "\\$2"4.2"  .ds oS 4.2 Berkeley Distribution
-.	if "\\$2"4.3"  .ds oS 4.3 Berkeley Distribution
-.	if "\\$2"4.3+" .ds oS 4.3+tahoe Berkeley Distribution
-.\}
-.if "\\*(oS"Null" .ds oS \\$1
-.if "\\*(o1"Non-Null" .as oS \0\\$2
-.rm o1
-..
-.\"
-.\" Standards
-.\"
-.\" .de St
-.\" .ds sT Null
-.\" .if "\\$1"POSIX" \{\
-.\" .	ds sT IEEE Standard POSIX
-.\" .	if \\$2 .as sT \0\\$2
-.\" .\}
-.\" .if "\\$1"ANSI" \{\
-.\" .	ds sT ANSI Standard
-.\" .	if \\$2 .as sT \0\\$2
-.\" .\}
-.\" .if "\\$1"ISO" \{\
-.\" .	ds sT ISO Standard
-.\" .	if \\$2 .as sT \0\\$2
-.\" .\}
-.\" .if "\\*(sT"Null" .ds sR \\$3
-.\" ..
-.\"
-.\" .de Gp
-.\" .ie !"\\$1"" .ds gP \&\\$1 \\$2 \\$3 \\$4 \\$5
-.\" .el .ds gP Null
-.\" ..
-.\"
-.\"
-.de Dd
-.nr aa 0
-.ie \\n(.$>0 \{\
-.	ie \\n(.$<4 \{\
-.		ds dD \\$1 \\$2 \\$3
-.	\}
-.	el .tm Usage: .Dd Month Day, Year (e.g July 4, 1977).
-.\}
-.el \{\
-.	ds dD Epoch
-.\}
-..
-.\"
-.\"	House Keeping Macro - Make sense of dT, cH, vT, sT, gP and dS
-.\"	TODO: Try to get else's for efficiency
-.\"	TODO: GET RID OF .wh -1.167i (its in v7)
-.\"
-.\"
-.de hK
-.nr % 1
-.ds hT \\*(dT
-.if !"\\*(cH"Null" \{\
-.	ie !"\\*(gP"Null" .as hT \|(\|\\*(cH\\*(gP\|)
-.	el .as hT \\|(\\|\\*(cH\\|)
-.\}
-.if "\\*(cH"Null" .if !"\\*(gP"Null" .as hT \&\|(\|\\*(gP\|)
-.if t \{\
-.	wh 0 hM
-.	wh -1.25i fM
-.\}
-.if n \{\
-.	ie \\n(cR \{\
-.		hM
-.		wh -0v fM
-.	\}
-.	el \{\
-.		wh 0 hM
-.		wh -1.167i fM
-.	\}
-.\}
-.if n \{\
-.	if \\n(nl==0:\\n(nl==-1 'bp
-.\}
-.if t 'bp
-.em lM
-..
-.\"	Header Macro
-.\"
-.de hM
-.ev 1
-.pL
-.if !\\n(cR 'sp \\n(Hmu
-.tl @\\*(Hs\\*(hT\fP@\\*(Vs\\*(vT\fP@\\*(Hs\\*(hT\fP@
-'sp \\n(Hmu
-.ev
-..
-.\"
-.de fM
-.ev 1
-.pL
-.if !\\n(cR \{\
-'	sp \\n(Fmu
-.	tl @\\*(Hs\\*(oS\fP@\\*(Vs\\*(dD\fP@%@
-'	bp
-.\}
-.if \\n(cR \{\
-.\" .	tl @\\*(Hs\\*(oS\fP@\\*(Vs\\*(dD\fP@%@
-.\" '	bp
-.\}
-.ev
-..
-.de lM
-.fl
-.if \\n(cR \{\
-.       fM
-.       pl \\n(nlu
-.\}
-..
-.de Pp
-.sp \\n(Ppu
-.ne 2
-.ns
-..
-.de Lp
-.Pp
-..
-.de LP
-.tm Not a \-mdoc command: .LP
-..
-.de PP
-.tm Not a \-mdoc command: .PP
-..
-.de pp
-.tm Not a \-mdoc command: .pp
-..
-.de Co
-.tm Not a \-mdoc command: .Co
-..
-.nr z. 1
-.nr z, 1
-.nr z: 1
-.nr z; 1
-.nr z) 1
-.nr z( 1
-.nr z[ 1
-.nr z] 1
-.\" This is disgusting, troff not parse if stmt properly
-.nr z1 0
-.nr z2 0
-.nr z3 0
-.nr z4 0
-.nr z5 0
-.nr z6 0
-.nr z7 0
-.nr z8 0
-.nr z9 0
-.nr z0 0
-.nr z# 0
-.\"
-.de Ad
-.ie \\n(.$==0 \{\
-.       tm Usage: .Ad address [...] \\*(Pu
-.\}
-.el \{\
-.       ds sV \\*(aD
-.       nr cF \\n(.f
-.       ie "\\*(iM"" .ds f1 \&\\*(sV
-.       el .as f1 \&\\*(sV
-.       nB \\$1 \\$2 \\$3 \\$4 \\$5 \\$6 \\$7 \\$8 \\$9
-.       ft \\n(cF
-.\}
-..
-.\"
-.\" Command Line Argument Macro
-.\"
-.de Ar
-.ie \\n(.$==0 \{\
-.       ie !"\\*(iM"" .as f1 \&[\|\\*(aRfile\ ...\fP\|]
-.       el \&[\|\\*(aRfile\ ...\fP\|]
-.\}
-.el \{\
-.       ds sV \\*(aR
-.       nr cF \\n(.f
-.       ie "\\*(iM"" .ds f1 \&\\*(sV
-.       el .as f1 \&\\*(sV
-.       nB \\$1 \\$2 \\$3 \\$4 \\$5 \\$6 \\$7 \\$8 \\$9
-.       ft \\n(cF
-.\}
-..
-.\"
-.de Em
-.ie \\n(.$==0 \{\
-.       tm Usage: .Em text ... \\*(Pu
-.\}
-.el \{\
-.       ds sV \\*(eM
-.       nr cF \\n(.f
-.       ie "\\*(iM"" .ds f1 \&\\*(sV
-.       el .as f1 \&\\*(sV
-.       nB \\$1 \\$2 \\$3 \\$4 \\$5 \\$6 \\$7 \\$8 \\$9
-.       ft \\n(cF
-.\}
-..
-.\"
-.de Er
-.ie \\n(.$==0 \{\
-.       tm Usage: .Er ERRNOTYPE ... \\*(Pu
-.       \}
-.el \{\
-.       ds sV \\*(eR
-.       nr cF \\n(.f
-.       ie "\\*(iM"" .ds f1 \&\\*(sV
-.       el .as f1 \&\\*(sV
-.       nB \\$1 \\$2 \\$3 \\$4 \\$5 \\$6 \\$7 \\$8 \\$9
-.       ft \\n(cF
-.\}
-..
-.\"
-.de Ev
-.ie \\n(.$==0 \{\
-.	tm Usage: .Ev ENVIRONMENT_VARIABLE(s) ... \\*(Pu
-.	\}
-.el \{\
-.	ds sV \\*(eV
-.	nr cF \\n(.f
-.       ie "\\*(iM"" .ds f1 \&\\*(sV
-.       el .as f1 \&\\*(sV
-.       nB \\$1 \\$2 \\$3 \\$4 \\$5 \\$6 \\$7 \\$8 \\$9
-.	ft \\n(cF
-.\}
-..
-.\"
-.\" Flag Name Macro
-.\"
-.de Fl
-.ie \\n(.$==0 \{\
-.       ie !"\\*(iM"" .as f1 \&\\*(fL\-\fP
-.       el \&\\*(fL\-\fP
-.\}
-.el \{\
-.       nr rZ 0
-.       sW \\$1
-.       if (\\n(sW==1&\\n(.$==1) .rZ \\$1
-.       ds sV \\*(fL
-.       nr cF \\n(.f
-.       ie \\n(rZ \{\
-.               ie "\\*(iM"" .ds f1 \&\\*(sV\-\f\\n(cF\\$1
-.               el \&\\*(sV\-\f\\n(cF\\$1
-.       \}
-.	el \{\
-.	       ie "\\*(iM"" .ds f1 \&\\*(sV
-.	       el .as f1 \&\\*(sV
-.	       fB \\$1 \\$2 \\$3 \\$4 \\$5 \\$6 \\$7 \\$8 \\$9
-.	       ft \\n(cF
-.	\}
-.\}
-..
-.\"	Interactive Commands Macro
-.\"
-.de Ic
-.ie \\n(.$==0 \{\
-.	tm Usage: .Ic Interactive Commands(s) ... \\*(Pu
-.\}
-.el \{\
-.       ds sV \\*(iC
-.       nr cF \\n(.f
-.       ie "\\*(iM"" .ds f1 \&\\*(sV
-.       el .as f1 \&\\*(sV
-.       nB \\$1 \\$2 \\$3 \\$4 \\$5 \\$6 \\$7 \\$8 \\$9
-.       ft \\n(cF
-.\}
-..
-.\"
-.\" Interactive Command Modifiers (flags)
-.\"
-.de Cm
-.ie \\n(.$==0 \{\
-.	tm Usage: .Cm Interactive Command Modifier(s) ... \\*(Pu
-.\}
-.el \{\
-.       ds sV \\*(cM
-.       nr cF \\n(.f
-.       ie "\\*(iM"" .ds f1 \&\\*(sV
-.       el .as f1 \&\\*(sV
-.       nB \\$1 \\$2 \\$3 \\$4 \\$5 \\$6 \\$7 \\$8 \\$9
-.       ft \\n(cF
-.\}
-..
-.\"
-.de Li
-.ie \\n(.$==0 \{\
-.       tm Usage: .Li literal ... \\*(Pu
-.       \}
-.el \{\
-.       ds sV \\*(lI
-.       nr cF \\n(.f
-.       ie "\\*(iM"" .ds f1 \&\\*(sV
-.       el .as f1 \&\\*(sV
-.       nB \\$1 \\$2 \\$3 \\$4 \\$5 \\$6 \\$7 \\$8 \\$9
-.       ft \\n(cF
-.\}
-..
-.\" If in nroff or any other case where the default font
-.\" is constant width, and literal means zilch, single quote instead.
-.ie n \{\
-.de Ql
-.	ie \\n(.$==0 \{\
-.	       tm Usage: .Ql literal ... \\*(Pu
-.       \}
-.	el \{\
-.		Sq \\$1 \\$2 \\$3 \\$4 \\$5 \\$6 \\$7 \\$8 \\$9
-.	\}
-..
-.\}
-.el \{\
-.de Ql
-.	ie \\n(.$==0 \{\
-.	       tm Usage: .Ql literal ... \\*(Pu
-.       \}
-.	el \{\
-.		Li \\$1 \\$2 \\$3 \\$4 \\$5 \\$6 \\$7 \\$8 \\$9
-.	\}
-..
-.\}
-.\"
-.de Nm
-.ie \\n(.$==0 \{\
-.	if "\\*(n1"" .tm Usage: .Nm Name(s) ... \\*(Pu
-.	ie !"\\*(iM"" .as f1 \&\\*(nM\\*(n1\\$1\fP
-.	el \&\\*(nM\\*(n1\\$1\fP
-.\}
-.el \{\
-.	ds sV \\*(nM
-.	nr cF \\n(.f
-.	if \\n(nS \{\
-.		rs
-.		in -\\n(iSu
-.		ie \\n(nS>1 .br
-.		el \{\
-.			sW \\$1
-.			nr iS ((\\n(sW+1)*\\n(fW)u
-.		\}
-.		in +\\n(iSu
-.		ti -\\n(iSu
-.		nr nS \\n(nS+1
-.	\}
-.	if "\\*(n1"" .ds n1 \\$1
-.	ie "\\*(iM"" .ds f1 \&\\*(sV
-.	el .as f1 \&\\*(sV
-.	nB \\$1 \\$2 \\$3 \\$4 \\$5 \\$6 \\$7 \\$8 \\$9
-.	ft \\n(cF
-.\}
-..
-.\"
-.de Pa
-.ie \\n(.$==0 \{\
-\&\\*(pA~\fP
-.\}
-.el \{\
-.       ds sV \\*(pA
-.       nr cF \\n(.f
-.       ie "\\*(iM"" .ds f1 \&\\*(sV
-.       el .as f1 \&\\*(sV
-.       nB \\$1 \\$2 \\$3 \\$4 \\$5 \\$6 \\$7 \\$8 \\$9
-.       ft \\n(cF
-.\}
-..
-.\"
-.de Sy
-.ie \\n(.$==0 \{\
-.       tm Usage: .Sy Symbolic Text ... \\*(Pu
-.       \}
-.el \{\
-.       ds sV \\*(sY
-.       nr cF \\n(.f
-.       ie "\\*(iM"" .ds f1 \&\\*(sV
-.       el .as f1 \&\\*(sV
-.       nB \\$1 \\$2 \\$3 \\$4 \\$5 \\$6 \\$7 \\$8 \\$9
-.       ft \\n(cF
-.\}
-..
-.\"
-.de Ms
-.ie \\n(.$==0 \{\
-.       tm Usage: .Ms Math Symbol ... \\*(Pu
-.       \}
-.el \{\
-.       ds sV \\*(sY
-.       nr cF \\n(.f
-.       ie "\\*(iM"" .ds f1 \&\\*(sV
-.       el .as f1 \&\\*(sV
-.       nB \\$1 \\$2 \\$3 \\$4 \\$5 \\$6 \\$7 \\$8 \\$9
-.       ft \\n(cF
-.\}
-..
-.\"
-.de Va
-.ie \\n(.$==0 \{\
-.       tm Usage: .Va variable_name(s) ... \\*(Pu
-.\}
-.el \{\
-.       ds sV \\*(vA
-.       nr cF \\n(.f
-.       ie "\\*(iM"" .ds f1 \&\\*(sV
-.       el .as f1 \&\\*(sV
-.       nB \\$1 \\$2 \\$3 \\$4 \\$5 \\$6 \\$7 \\$8 \\$9
-.       ft \\n(cF
-.\}
-..
-.\"
-.de nB
-.hy 0
-.if \\n(.$==0 .tm Usage error: called with empty arguments (empty quotes)?
-.ie \\n(.$>1 \{\
-.	rZ \\$1
-.	ie \\n(rZ .as f1 \&\f\\n(cF\\$1\fP
-.	el .as f1 \&\\$1
-.	rZ \\$2
-.	if !\\n(rZ \{\
-.		ie !"\\*(iM""\{\
-.\"			I surrender
-.			if "\\*(iM"Tp" .as f1 \&\ \&
-.			if "\\*(iM"Dp" .as f1 \&\ \&
-.			if "\\*(iM"Op" .as f1 \&\ \&
-.			if "\\*(iM"Cx" .as f1 \&\ \&
-.			if "\\*(iM"Dq" .as f1 \& \&
-.			if "\\*(iM"Sq" .as f1 \& \&
-.			if "\\*(iM"Pq" .as f1 \& \&
-.			if "\\*(iM"Aq" .as f1 \& \&
-.		\}
-.		el .as f1 \& \&
-.	\}
-.	nB \\$2 \\$3 \\$4 \\$5 \\$6 \\$7 \\$8 \\$9
-.\}
-.el \{\
-.	rZ \\$1
-.	ie \\n(rZ .as f1 \&\f\\n(cF\\$1
-.	el .as f1 \&\\$1\f\\n(cF
-.	if "\\*(iM"" \{\&\\*(f1
-.		ds f1
-.	\}
-.	hy
-.\}
-..
-.de fB
-.hy 0
-.if \\n(.$==0 .tm Usage error: called with empty arguments (empty quotes)?
-.ie \\n(.$>1 \{\
-.	rZ \\$1
-.	ie \\n(rZ .as f1 \&\f\\n(cF\\$1\fP
-.	el \{\
-.		ie "\\$1"-" .as f1 \&\-\-
-.		el .as f1 \&\-\\$1
-.	\}
-.	rZ \\$2
-.	if !\\n(rZ \{\
-.		ie !"\\*(iM""\{\
-.\"			I surrender
-.			if "\\*(iM"Tp" .as f1 \&\ \&
-.			if "\\*(iM"Dp" .as f1 \&\ \&
-.			if "\\*(iM"Op" .as f1 \&\ \&
-.			if "\\*(iM"Cx" .as f1 \&\ \&
-.			if "\\*(iM"Dq" .as f1 \& \&
-.			if "\\*(iM"Sq" .as f1 \& \&
-.			if "\\*(iM"Pq" .as f1 \& \&
-.			if "\\*(iM"Aq" .as f1 \& \&
-.		\}
-.		el .as f1 \& \&
-.	\}
-.	fB \\$2 \\$3 \\$4 \\$5 \\$6 \\$7 \\$8 \\$9
-.\}
-.el \{\
-.	rZ \\$1
-.	ie \\n(rZ .as f1 \&\f\\n(cF\\$1
-.	el \{\
-.		ie "\\$1"-" .as f1 \&\-\-\f\\n(cF
-.		el .as f1 \&\-\\$1\f\\n(cF
-.	\}
-.	if "\\*(iM"" \{\&\\*(f1
-.		ds f1
-.	\}
-.	hy
-.\}
-..
-.\"
-.\" Single quoted Items
-.\" eF, sB g[0-9] and f2
-.de Sq
-.nr eF 0
-.ie \\n(.$==0 \{\
-.       ie "\\*(iM"" \&\\*(sL\&\\*sR
-.       el .as f1 \&\\*(sL\&\\*(sR
-.\}
-.el \{\
-.       ie "\\*(iM"" \{\
-.		ds f1 \&\\*(sL
-.		ds iM Sq
-.	\}
-.       el .as f1 \&\\*(sL
-.       sB \\$1 \\$2 \\$3 \\$4 \\$5 \\$6 \\$7 \\$8 \\$9
-.	ie \\n(eF>0 .\\*(g1 \\*(g2 \\*(g3 \\*(g4 \\*(g5 \\*(g6 \\*(g7 \\*(g8
-.	el .as f1 \\*(g0
-.	as f1 \\*(sR
-.	if !"\\*(f2"" .as f1 \\*(f2
-.	if "\\*(iM"Sq" \{\
-\&\\*(f1
-.		ds f1
-.		ds iM
-.	\}
-.	ds f2
-.	rm  g0 g1 g2 g3 g4 g5 g6 g7 g8 g9
-.	nr eF 0
-.\}
-..
-.\"
-.\" Double quoted Items
-.de Dq
-.nr Ef 0
-.ie \\n(.$==0 \{\
-.       ie "\\*(iM"" \&\\*(Lq\&\\*(Rq
-.       el .as f1 \&\\*(Lq\&\\*(Rq
-.\}
-.el \{\
-.       ie "\\*(iM"" \{\
-.               ds f1 \&\\*(Lq
-.               ds iM Dq
-.       \}
-.       el .as f1 \&\\*(Lq
-.       Sb \\$1 \\$2 \\$3 \\$4 \\$5 \\$6 \\$7 \\$8 \\$9
-.       ie \\n(Ef>0 .\\*(k1 \\*(k2 \\*(k3 \\*(k4 \\*(k5 \\*(k6 \\*(k7 \\*(k8
-.       el .as f1 \\*(k0
-.       as f1 \\*(Rq
-.       if !"\\*(f4"" .as f1 \\*(f4
-.       if "\\*(iM"Dq" \{\
-\&\\*(f1
-.               ds f1
-.               ds iM
-.       \}
-.       ds f4
-.       rm  k0 k1 k2 k3 k4 k5 k6 k7 k8 k9
-.       nr Ef 0
-.\}
-..
-.\"
-.\" Parenthesis quoted Items
-.de Pq
-.nr pQ 0
-.ie \\n(.$==0 \{\
-.       ie "\\*(iM"" \&(\&)
-.       el .as f1 \&(\&)
-.\}
-.el \{\
-.       ie "\\*(iM"" \{\
-.               ds f1 \&(
-.               ds iM Pq
-.       \}
-.       el .as f1 \&(
-.       pB \\$1 \\$2 \\$3 \\$4 \\$5 \\$6 \\$7 \\$8 \\$9
-.       ie \\n(pQ>0 .\\*(y1 \\*(y2 \\*(y3 \\*(y4 \\*(y5 \\*(y6 \\*(y7 \\*(y8
-.       el .as f1 \\*(y0
-.       as f1 \&)
-.       if !"\\*(f3"" .as f1 \\*(f3
-.       if "\\*(iM"Pq" \{\
-\&\\*(f1
-.               ds f1
-.               ds iM
-.       \}
-.       ds f3
-.       rm  y0 y1 y2 y3 y4 y5 y6 y7 y8 y9
-.       nr pQ 0
-.\}
-..
-.\" eF, sB g[0-9] and f2
-.de sB
-.hy 0
-.ie \\n(.$==0 .tm Sick Logic: macro sB
-.el \{\
-.	ie \\n(eF>=1 .nr eF \\n(eF+1
-.	el \{\
-.		mN \\$1
-.		if \\n(mN .nr eF \\n(eF+1
-.	\}
-.       rZ \\$1
-.       ie \\n(rZ .as f2 \\$1
-.       el \{\
-.		ie \\n(eF<1 .as g\\n(eF \\$1
-.		el .as g\\n(eF \\$1
-.	\}
-.       if \\n(.$>1 \{\
-.		rZ \\$2
-.	        if \\n(rZ==0 \{\
-.			if \\n(eF<1 \{\
-.				as g\\n(eF \& \&
-.			\}
-.		\}
-.		sB \\$2 \\$3 \\$4 \\$5 \\$6 \\$7 \\$8 \\$9
-.	\}
-.\}
-..
-.de Sb
-.hy 0
-.ie \\n(.$==0 .tm Sick Logic: macro Sb
-.el \{\
-.       ie \\n(Ef>=1 .nr Ef \\n(Ef+1
-.	el \{\
-.		mN \\$1
-.	        if \\n(mN .nr Ef \\n(Ef+1
-.	\}
-.       rZ \\$1
-.       ie \\n(rZ .as f4 \\$1
-.       el \{\
-.               ie \\n(Ef<1 .as k\\n(Ef \\$1
-.               el .as k\\n(Ef \\$1
-.       \}
-.       if \\n(.$>1 \{\
-.               rZ \\$2
-.               if \\n(rZ==0 \{\
-.                       if \\n(Ef<1 \{\
-.                               as k\\n(Ef \& \&
-.                       \}
-.               \}
-.               Sb \\$2 \\$3 \\$4 \\$5 \\$6 \\$7 \\$8 \\$9
-.       \}
-.\}
-..
-.de pB
-.hy 0
-.ie \\n(.$==0 .tm Sick Logic: macro pB
-.el \{\
-.       ie \\n(pQ>=1 .nr pQ \\n(pQ+1
-.       el \{\
-.               mN \\$1
-.               if \\n(mN .nr pQ \\n(pQ+1
-.       \}
-.       rZ \\$1
-.       ie \\n(rZ .as f3 \\$1
-.       el \{\
-.               ie \\n(pQ<1 .as y\\n(pQ \\$1
-.               el .as y\\n(pQ \\$1
-.       \}
-.       if \\n(.$>1 \{\
-.               rZ \\$2
-.               if \\n(rZ==0 \{\
-.                       if \\n(pQ<1 \{\
-.                               as y\\n(pQ \& \&
-.                       \}
-.               \}
-.               pB \\$2 \\$3 \\$4 \\$5 \\$6 \\$7 \\$8 \\$9
-.       \}
-.\}
-..
-.de aQ
-.hy 0
-.ie \\n(.$==0 .tm Bad Syntax: .Aq
-.el \{\
-.       ie \\n(aQ>=1 .nr aQ \\n(aQ+1
-.       el \{\
-.               mN \\$1
-.               if \\n(mN .nr aQ \\n(aQ+1
-.       \}
-.       rZ \\$1
-.       ie \\n(rZ .as aZ \\$1
-.       el \{\
-.               ie \\n(aQ<1 .as a\\n(aQ \\$1
-.               el .as a\\n(aQ \\$1
-.       \}
-.       if \\n(.$>1 \{\
-.               rZ \\$2
-.               if \\n(rZ==0 \{\
-.                       if \\n(aQ<1 \{\
-.                               as a\\n(aQ \& \&
-.                       \}
-.               \}
-.               aQ \\$2 \\$3 \\$4 \\$5 \\$6 \\$7 \\$8 \\$9
-.       \}
-.\}
-..
-.\" Angle Bracket Quoted Items
-.de Aq
-.nr aQ 0
-.ie \\n(.$==0 \{\
-.       ie "\\*(iM"" \&<\&>
-.       el .as f1 \&<\&>
-.\}
-.el \{\
-.       ie "\\*(iM"" \{\
-.               ds f1 \&<
-.               ds iM Aq
-.       \}
-.       el .as f1 \&<
-.       aQ \\$1 \\$2 \\$3 \\$4 \\$5 \\$6 \\$7 \\$8
-.       ie \\n(aQ>0 .\\*(a1 \\*(a2 \\*(a3 \\*(a4 \\*(a5 \\*(a6 \\*(a7 \\*(a8
-.       el .as f1 \\*(a0
-.       as f1 \&>
-.       if !"\\*(aZ"" .as f1 \\*(aZ
-.       if "\\*(iM"Aq" \{\
-\&\\*(f1
-.               ds f1
-.               ds iM
-.       \}
-.       ds aZ
-.       rm  a0 a1 a2 a3 a4 a5 a6 a7 a8
-.       nr aQ 0
-.\}
-..
-.\" macro Name test, return macro register value if true
-.if \n(.g .ig
-.de mN
-.nr mN 0
-.sW \\$1
-.if \\n(sW==2 \{\
-.	if \\n(\\$1 .nr mN \\n(\\$1
-.\}
-..
-.if !\n(.g .ig
-.de mN
-.nr mN 0
-.if \A'\\$1' \{\
-.	sW \\$1
-.	if \\n(sW==2 \{\
-.		if \\n(\\$1 .nr mN \\n(\\$1
-.	\}
-.\}
-..
-.\" Punctuation test (using z registers), return 1 if true
-.if \n(.g .ig
-.de rZ
-.nr rZ 0
-.sW \\$1
-.if \\n(sW==1 \{\
-.	if \\n(z\\$1==1 \{\
-.		nr rZ 1
-.	\}
-.\}
-..
-.if !\n(.g .ig
-.de rZ
-.nr rZ 0
-.if \A'\\$1' \{\
-.	sW \\$1
-.	if \\n(sW==1 \{\
-.		if \\n(z\\$1==1 \{\
-.			nr rZ 1
-.		\}
-.	\}
-.\}
-..
-.\"
-.\" sW returns number of characters in a string
-.if t \{\
-.nr fW \w'\fC,'
-.de sW
-.nr sW \w'\fC\\$1'
-.\}
-.if n \{\
-.nr fW \w'0'
-.de sW
-.nr sW \w'\\$1'
-.\}
-.ie \\n(sW>=\\n(fW \{\
-.	ie \\n(sW%\\n(fW .nr sW (\\n(sW/\\n(fW)+1
-.	el .nr sW \\n(sW/\\n(fW
-.\}
-.el .nr sW 0
-..
-.\"	Option Expression -
-.\"	TODO - add line overflow check (right!)
-.nr eP 0
-.ds e1
-.nr oE 0
-.nr hP 0
-.ds hP
-.nr Ep 0
-.de Op
-.hy 0
-.if "\\*(iM"" \{\
-.	ds iM Op
-.       ds f1 \&
-.\}
-.as f1 \&\\*(lB
-.\" .tm Op:  \\$1 \\$2 \\$3 \\$4 \\$5 \\$6 \\$7 \\$8 \\$9
-.dO \\$1 \\$2 \\$3 \\$4 \\$5 \\$6 \\$7 \\$8 \\$9
-.ie !"\\$1"Cx" .oE
-.el .nr oE \\n(oE+1
-..
-.\"
-.\" just for mike, with every bite of garlic in mind (oops, i mean burp).
-.\" dO: go dOwn an argument vector and test each argument to see if
-.\" a macro name or punctuation. stash in respective place along
-.\" with its arguments.
-.nr oO 0
-.nr oP 0
-.nr aO 0
-.de dO
-.mN \\$1
-.ie \\n(mN \{\
-.       if \\n(oP  \{\
-.               if \\n(hP \{\
-.                       nr oZ 1
-.                       oZ
-.                       Oz
-.               \}
-.               if \\n(e1==1 \{\
-.\\*(e1 \\*(e2 \\*(e3 \\*(e4 \\*(e5 \\*(e6 \\*(e7 \\*(e8 \\*(e9
-.               \}
-.               uO
-.		if !(\\n(oO:\\n(aO) .as f1 \& \&
-.	\}
-.       ie "\\$1"Op" \{\
-.               as f1 \&\\*(lB
-.               nr aO \\n(aO+1
-.       \}
-.	el \{\
-.               nr eP \\n(eP+1
-.               ds e\\n(eP \\$1
-.               nr e\\n(eP 1
-.       \}
-.\}
-.el \{\
-.\" .tm dO: $1: \\$1: eP \\n(eP e[\\n(eP]: \\*(e\\n(ePEE
-.	rZ \\$1
-.	ie \\n(rZ \{\
-.\" .tm dO:rZ: $1: \\$1: eP \\n(eP e[\\n(eP]: \\*(e\\n(eP
-.		nr hP \\n(hP+1
-.		ds h\\n(hP \\$1
-.	\}
-.	el \{\
-.\" .tm dO:word $1: \\$1: eP \\n(eP e[\\n(eP]: \\*(e\\n(ePEE
-.		if \\n(eP==0:\\n(e\\n(eP==1 .nr eP \\n(eP+1
-.		if \\n(eZ .as e\\n(eP \& \&
-.		as e\\n(eP " \&\\$1
-.\" .		ds e\\n(eP \&\\$1
-.		nr eZ \\n(eZ+1
-.	\}
-.\}
-.nr oP 1
-.ie \\n(.$>1 \{\
-.	dO \\$2 \\$3 \\$4 \\$5 \\$6 \\$7 \\$8 \\$9
-.\}
-.el \{\
-.     ie \\n(e1 \{\
-.\\*(e1 \\*(e2 \\*(e3 \\*(e4 \\*(e5 \\*(e6 \\*(e7 \\*(e8 \\*(e9
-.	\}
-.     el \{\
-.	as f1 \\*(e1
-.	\}
-.\}
-..
-.\" handle old style arguments such as the arg -Idir
-.\" in adb, .Oo is a toggle.
-.de Oo
-.ie \\n(oO .nr oO 0
-.el .nr oO 1
-..
-.\" stash punctuation
-.de oZ
-.if \\n(hP>=\\n(oZ \{\
-.	nr eP \\n(eP+1
-.	ds e\\n(eP \\*(h\\n(oZ
-.	nr oZ \\n(oZ+1
-.	oZ
-.\}
-..
-.\" clean up punctuation vector
-.de Oz
-.if \\n(hP>0 \{\
-.	rm h\\n(hP
-.	nr hP \\n(hP-1
-.	Oz
-.\}
-..
-.\" uO: go back up created vector cleaning it up along the way
-.de uO
-.if \\n(eP>0 \{\
-.	rm e\\n(eP
-.	rr e\\n(eP
-.	nr eP \\n(eP-1
-.	nr oP 0
-.	nr eZ 0
-.	uO
-.\}
-..
-.\" option end
-.de oE
-.uO
-.ie \\n(hP \{\
-.       as f1 \\*(rB\\*(h1\\*(h2\\*(h3
-.	Oz
-.	nr oZ 0
-.\}
-.el \{\
-.	as f1 \\*(rB
-.\}
-.ie "\\*(iM"Op" \{\
-.	if \\n(aO .aO
-.if t \{\
-.	if (\\n(.lu-\\n(.ku-\\n(.ou-(2*\\n(fWu))<\w'\fC\\*(f1'u .br
-.\}
-.if n \{\
-.	nr aa \w'\\*(f1'u
-.\" .	nr qq \\n(.lu-\\n(.ku-\\n(.ou
-.\" \&aa == \\n(aa, f1==\\*(f1, qq==\\n(qq
-.	if (\\n(.lu-\\n(.ku-\\n(.ou-\\n(aau)<=(8*\\n(fWu) .br
-.\}
-\&\\*(f1
-.	ds iM
-.	ds f1
-.	hy
-.\}
-.el .nr oE \\n(oE-1
-..
-.de aO
-.as f1 \\*(rB
-.nr aO \\n(aO-1
-.if \\n(aO >0 .aO
-..
-.\"
-.de Xr
-.if \\n(.$<=1 \{\
-.	ie \\n(.$==1 \{\
-.		if !"\\*(iM"" .as f1 \&\\*(xR\\$1\fP
-.		if "\\*(iM"" \&\\*(xR\\$1\fP
-.	\}
-.	el .tm Xr Usage: .Xr manpage_name [section#] \\*(Pu
-.\}
-.if \\n(.$==2 \{\
-.	rZ \\$2
-.	ie "\\*(iM"" \{\
-.		ie \\n(rZ \&\\*(xR\\$1\fP\\$2
-.		el \&\\*(xR\\$1\fP(\\$2)
-.	\}
-.	el \{\
-.		ie \\n(rZ .as f1 \&\\*(xR\\$1\fP\\$2
-.		el .as f1 \&\\*(xR\\$1\fP(\\$2)
-.	\}
-.\}
-.if \\n(.$>=3 \{\
-.	rZ \\$2
-.	ie \\n(rZ \{\
-.		ie !"\\*(iM"" .as f1 \&\\*(xR\\$1\fP\\$2\\$3\\$4\\$5\\$6\\$7\\$8
-.		el \&\\*(xR\\$1\fP\\$2\\$3\\$4\\$5\\$6\\$7\\$8
-.	\}
-.	el \{\
-.		rZ \\$3
-.		ie \\n(rZ \{\
-.			if !"\\*(iM"" \{\
-.			     as f1 \&\\*(xR\\$1\fP(\\$2)\\$3\\$4\\$5\\$6\\$7\\$8
-.			\}
-.			if "\\*(iM"" \{\
-\&\\*(xR\\$1\fP(\\$2)\\$3\\$4\\$5\\$6\\$7\\$8
-.			\}
-.		\}
-.		el \{\
-.			tm rZ = \\n(rZ  the arg is \\$3
-.			tm Xr-XX Usage: .Xr manpage_name [section#] \\*(Pu
-.		\}
-.	\}
-.\}
-..
-.\"
-.\"
-.de Ex
-.tm Ex defunct, Use .Dl: \\$1 \\$2 \\$3 \\$4 \\$5 \\$6 \\$7 \\$8 \\$9
-..
-.\" Display (one) Line of text.
-.de Dl
-.ie "\\*(iM"" \{\
-'	ta .5i 1i 1.5i 2i 2.5i 3i 3.5i 4i 4.5i 5i 5.5i 6i 6.5i
-.	in \\n(.iu+\\n(Dsu
-.	mN \\$1
-.	ie \\n(mN .\\$1 \\$2 \\$3 \\$4 \\$5 \\$6 \\$7 \\$8 \\$9
-.	el \{\
-.		nr cF \\n(.f
-.\"	 Literal font is none specified
-\&\\*(lI\\$1 \\$2 \\$3 \\$4 \\$5 \\$6 \\$7 \\$8 \\$9
-.		ft \\n(cF
-.	\}
-.	in \\n(.iu-\\n(Dsu
-.\}
-.el \{\
-.	mN \\$1
-.	ie \\n(mN .\\$1 \\$2 \\$3 \\$4 \\$5 \\$6 \\$7 \\$8
-.	el \{\
-.		nr cF \\n(.f
-.		ds f1 \&\\*(lI\\&\\$1 \\$2 \\$3 \\$4 \\$5 \\$6 \\$7 \\$8
-.		as f1 \&\f\\n(cF
-.	\}
-.\}
-..
-.\"
-.\"
-.\" user set Tagged Paragraph Width (used in both Dp and Tp)
-.de Tw
-.ie \\n(.$==0 \{\
-.	nr aa 0
-.\}
-.el \{\
-.	mN \\$1
-.	ie \\n(sW>2 \{\
-.		nr tW (\\n(sW+3)*\\n(fWu)
-.	\}
-.	el \{\
-.		ie \\n(mN .nr tW \\n(mN
-.		el .nr tW \\$1
-.	\}
-.	nr tF 1
-.\}
-..
-.\"
-.de Dw
-.Tw \\$1
-..
-.\"
-.de Di
-.ie \\n(.$==0 \{\
-.	nr tI \\n(Dsu
-.\}
-.el \{\
-.	sW \\$1
-.	if \\n(sW>=2 \{\
-.		nr tI \\$1u
-.	\}
-.	if \\n(sW<2 \{\
-.		if "\\$1"L" \{\
-.			nr tI 0
-.		\}
-.	\}
-.\}
-..
-.\" tagged paragraph
-.\" initialize baby stack variables
-.nr np 0
-.nr p1 0
-.ds s\n(np
-.\"
-.de Tp
-.ie "\\$1"" .pE p s np
-.el \{\
-.	ds iM Tp
-.	mN \\$1
-.	ie \\n(tF \{\
-.		ds tC Tw
-.		nr tC 1
-.		nr tF 0
-.	\}
-.	el \{\
-.		if !"Tw"\\*(s\\n(np" \{\
-.			ie \\n(mN \{\
-.				ds tC \\$1
-.				nr tW \\n(mN
-.			\}
-.			el \{\
-.				ds tC Tx
-.				nr tW \\n(Tx
-.			\}
-.			if !"\\*(tC"\\*(s\\n(np" .nr tC 1
-.		\}
-.	\}
-.	sp \\n(vVu
-.	if !\\n(cR .ne 2
-.	if \\n(tC \{\
-.		nr np \\n(np+1
-.		nr p\\n(np \\n(tW
-.		ds s\\n(np \\*(tC
-.		nr tC 0
-.		ds tC
-.		in \\n(.iu+\\n(p\\n(npu
-.	\}
-.	ie \\n(mN \{\
-.		ds f1
-.		\\$1 \\$2 \\$3 \\$4 \\$5 \\$6 \\$7 \\$8 \\$9
-.		if !"\\$1"Cx" .pT st p np
-.	\}
-.	el \{\
-.		br
-.		ev 1
-.		fi
-.		di Td
-\&\\$1 \\$2 \\$3 \\$4 \\$5 \\$6 \\$7 \\$8 \\$9
-.		br
-.		di
-.		ev
-.		na
-.		ds tD \\*(Td\\
-.		pT di p np
-.	\}
-.\}
-..
-.\"
-.\"
-.\" Complex Expression Macro
-.\"
-.\"	 TODO: add length across line boundary check (like Li)
-.de Cx
-.hy 0
-.ie \\n(.$==0 \{\
-.	if "\\*(iM"Cx" \{\
-.		ds iM
-.		if \\n(oE .oE
-\&\\*(f1
-.		ds f1
-.	\}
-.	if "\\*(iM"Tp" .pT st p np
-.	if "\\*(iM"Dp" .pT st q mp
-.\}
-.el \{\
-.	if "\\*(iM"" \{\
-.		ds iM Cx
-.		ds f1 \&
-.	\}
-.	mN \\$1
-.\" Here are the args: `\\$1'  `\\$2'  `\\$3'  `\\$4'
-.	ie \\n(mN .\\$1 \\$2 \\$3 \\$4 \\$5 \\$6 \\$7 \\$8 \\$9
-.	el \{\
-.		as f1 \&\\$1
-.		if \\n(.$>1 .Cx \\$2 \\$3 \\$4 \\$5 \\$6 \\$7 \\$8 \\$9
-.	\}
-.\}
-..
-.\" Prefix string in default font to content specified string
-.de Pf
-.Cx \\$1
-.\\$2 \\$3 \\$4 \\$5
-.Cx
-..
-.\" Suffix string in default font to content specified string
-.de Sf
-.Cx \\$1 \\$2
-.Cx \\$3
-.Cx
-..
-.\" Simple Option Begin
-.de Ob
-.hy 0
-.ie "\\*(iM"" \{\
-.	ev 2
-.	fi
-.	di oB
-.\}
-.el \{\
-.tm shouldn't be here
-.	as f1 \&[
-.	mN \\$1
-.	ie \\n(mN .\\$1 \\$2 \\$3 \\$4 \\$5 \\$6 \\$7 \\$8 \\$9
-.	el \{\
-.		as f1 \&\\$1
-.		if \\n(.$>1 .Oc \\$2 \\$3 \\$4 \\$5 \\$6 \\$7 \\$8 \\$9
-.	\}
-.\}
-..
-.de Oc
-.as f1 \&\\$1
-.if \\n(.$>1 .Oc \\$2 \\$3 \\$4 \\$5 \\$6 \\$7 \\$8 \\$9
-..
-.de Oe
-.hy 0
-.ie "\\*(iM"" \{\
-.	br
-.	di
-.	ev
-.	ds bO \\*(oB\\
-\&[\\*(bO\&]
-.\}
-.el \{\
-.	as f1 \&]
-.\}
-..
-.\" White space for Cx
-.de Ws
-.Cx \&\ \&
-..
-.\" tagged paragraph
-.\" initialize baby stack variables
-.nr mp 0
-.nr q1 0
-.ds r\n(np
-.\"
-.\" Complex Dp tag
-.de Dc
-.Dp Cx \\$1 \\$2 \\$3 \\$4 \\$5 \\$6 \\$7 \\$8
-..
-.\" Complex Tp tag
-.de Tc
-.Tp Cx \\$1 \\$2 \\$3 \\$4 \\$5 \\$6 \\$7 \\$8
-..
-.\" Tag with a flag and an argument with a space
-.de Ta
-.if "\\$2"" \{\
-.	Tp Fl \\$1
-.\}
-.el \{\
-.	Tp Fl \\$1
-.	Cx \&\ \&
-.	Ar \\$2 \\$3
-.	Cx
-.\}
-..
-.de Da
-.Dp Cx Fl \\$1
-.Ws
-.Ar \\$2 \\$3
-.Cx
-..
-.de To
-.Tp Cx Fl \\$1
-.Ar \\$2 \\$3
-.Cx
-..
-.de Do
-.Dp Cx Fl \\$1
-.Ar \\$2 \\$3
-.Cx
-..
-.\" Blended tag toggle
-.de Bt
-.ie \\n(tP==0 .nr tP 1
-.el .nr tP 0
-..
-.\" Bullet paragraph
-.de Bu
-.Tp Sy \&\(bu
-..
-.\" Display tagged paragraph
-.de Dp
-.ie "\\$1"" \{\
-.	pE q r mp
-.	sp \\n(vVu
-.\}
-.el \{\
-.       ds iM Dp
-.       mN \\$1
-.       ie \\n(tF \{\
-.               ds tC Tw
-.               nr tC 1
-.               nr tF 0
-.       \}
-.       el \{\
-.               if !"Tw"\\*(r\\n(mp" \{\
-.                       ie \\n(mN \{\
-.                               ds tC \\$1
-.                               nr tW \\n(mN
-.                       \}
-.                       el \{\
-.                               ds tC Tx
-.                               nr tW \\n(Tx
-.                       \}
-.                       if !"\\*(tC"\\*(r\\n(mp" .nr tC 1
-.               \}
-.       \}
-.       if !\\n(cR .ne 2
-.       if \\n(tC \{\
-.               nr mp \\n(mp+1
-.               nr q\\n(mp \\n(tW
-.               ds r\\n(mp \\*(tC
-.               nr tC 0
-.               ds tC
-.		ie \\n(tIu==\\n(Dsu .nr i\\n(mp \\n(Dsu
-.		el \{\
-.			nr i\\n(mp \\n(tIu
-.			nr tI \\n(Dsu
-.		\}
-.              	in \\n(.iu+\\n(i\\n(mpu
-.		sp \\n(vVu
-.		in \\n(.iu+\\n(\\q\\n(mpu
-.       \}
-.       ie \\n(mN \{\
-.               \\$1 \\$2 \\$3 \\$4 \\$5 \\$6 \\$7 \\$8 \\$9
-.               if !"\\$1"Cx" .pT st q mp
-.       \}
-.       el \{\
-.               br
-.               ev 1
-.               fi
-.               di Td
-\&\\$1 \\$2 \\$3 \\$4 \\$5 \\$6 \\$7 \\$8 \\$9
-.               br
-.               di
-.               ev
-.               na
-.               ds tD \\*(Td\\
-.               pT di q mp
-.       \}
-.\}
-..
-.\"
-.\" .pE number_stack string_stack counter
-.de pE
-.ie "\\$3"mp" \{\
-.	in \\n(.iu-(\\n(\\$1\\n(\\$3u)-(\\n(i\\n(mpu)
-.	rr i\\n(mp
-.\}
-.el .in \\n(.iu-\\n(\\$1\\n(\\$3u
-.\" .in \\n(.iu-\\n(\\$1\\n(\\$3u
-.if \\n(\\$3<=0 .tm Extraneous call .Tp or .Dp
-.rr \\$1\\n(\\$3
-.rm \\$2\\n(\\$3
-.nr \\$3 \\n(\\$3-1
-.ds iM
-..
-.\"
-.\" .pT [st or di] number_stack counter
-.de pT
-.ie "\\$1"st" \{\
-.	nr bb \\n(\\$2\\n(\\$3u
-.	ti -\\n(bbu
-.	ie (\\n(\\$2\\n(\\$3u-2n)<=\w'\\*(f1'u \{\&\\*(f1\\*(tP
-.		if \\n(tP==0 .br
-.	\}
-.	el \\*(f1\h'|\\n(\\$2\\n(\\$3u'\c
-.\}
-.el \{\
-.       ti -\\n(\\$2\\n(\\$3u
-.	ie (\\n(\\$2\\n(\\$3u-2n)<=\\n(dlu \{\&\\*(tD\\*(tP
-.	       if !\\n(tP .br
-.	\}
-.	el \\*(tD\h'|\\n(\\$2\\n(\\$3u'\c
-.	if t 'ad
-.\}
-.	ds iM
-.	ds f1
-'fi
-..
-.\"
-.\" The new SH
-.\"
-.de Sh
-.\" set Sh state off, check for list state before calling indent (.In)
-.nr nS 0
-.nr sE 0
-.ie "\\$1"NAME" \{\
-.\"	name state on, housekeep (headers & footers)
-.	hK
-'	in 0
-.\}
-.el \{\
-.	if "\\$1"SYNOPSIS" .nr nS 1
-.	in 0
-.\}
-.pL
-'sp
-.ns
-.ta .5i 1i 1.5i 2i 2.5i 3i 3.5i 4i 4.5i 5i 5.5i 6i 6.5i
-.if !\\n(cR .ne 3
-'fi
-\&\fB\\$1 \|\\$2 \|\\$3 \|\\$4 \|\\$5 \|\\$6 \|\\$7 \|\\$8 \|\\$9
-\&\fP\&
-.in \\n(.iu+\\n(Tiu
-.if "\\$1"SEE" .nr sE 1
-.ns
-..
-.\"
-.\" Nd minus sign for an en dash used in .Sh Name
-.de Nd
-\&\-\& \\$1 \\$2 \\$3 \\$4 \\$5 \\$6 \\$7 \\$8 \\$9
-..
-.de Ss
-.sp
-.ti -.25i
-\&\fB\\$1 \|\\$2 \|\\$3 \|\\$4 \|\\$5 \|\\$6 \|\\$7 \|\\$8 \|\\$9
-\&\fP\&
-.ta .5i 1i 1.5i 2i 2.5i 3i 3.5i 4i 4.5i 5i 5.5i 6i 6.5i
-.if !\\n(cR .ne 2
-.br
-..
-.\"	.if "\\$1"Ss" .in \\n(.iu+\\n(sIu
-.\"..
-.\"
-.\"
-.\" Column Macro
-.\"
-.hy 0
-.de Cw
-.ie \\n(.$==0 \{\
-.	br
-.	in \\n(.iu-\\n(eWu
-.	ta .5i 1i 1.5i 2i 2.5i 3i 3.5i 4i 4.5i 5i 5.5i 6i 6.5i
-.\}
-.el \{\
-.	Pp
-.	if \\n(.$==1 \{\
-.		ta \w'\\$1    'u
-.		nr eW \w'\\$1    'u
-'		in \\n(.iu+\\n(eWu
-.	\}
-.	if \\n(.$==2 \{\
-.		ta \w'\\$1    'u +\w'\\$2    'u
-.		nr eW \w'\\$1    'u+\w'\\$2    'u
-'		in \\n(.iu+\\n(eWu
-.	\}
-.	if \\n(.$==3 \{\
-.		ta \w'\\$1    'u +\w'\\$2    'u +\w'\\$3    'u
-.		nr eW \w'\\$1    'u+\w'\\$2    'u+\w'\\$3    'u
-'		in \\n(.iu+\\n(eWu
-.	\}
-.	if \\n(.$==4 \{\
-.	ta \w'\\$1    'u +\w'\\$2    'u +\w'\\$3    'u +\w'\\$4    'u
-.	nr eW \w'\\$1    'u+\w'\\$2    'u+\w'\\$3    'u +\w'\\$4    'u
-'	in \\n(.iu+\\n(eWu
-.	\}
-.	if \\n(.$==5 \{\
-.ta \w'\\$1    'u +\w'\\$2    'u +\w'\\$3    'u +\w'\\$4    'u +\w'\\$5    'u
-.nr eW \w'\\$1    'u +\w'\\$2    'u +\w'\\$3    'u +\w'\\$4    'u +\w'\\$5    'u
-'	in \\n(.iu+\\n(eWu
-.	\}
-.\}
-..
-.de Cl
-.ti -\\n(eWu
-.mN \\$1
-.ie \\n(mN .\\$1 \\$2 \\$3 \\$4 \\$5 \\$6 \\$7 \\$8 \\$9
-.el \\$1 \\$2 \\$3 \\$4 \\$5 \\$6 \\$7 \\$8 \\$9
-..
-.nr dQ 0
-.de Ds
-.ie !"\\$1"" \{\
-.	mN d\\$1
-.	if \\n(mN \{\
-.		nr dQ \\n(dQ+1
-.		d\\$1
-.	\}
-.\}
-.el .br
-.nf
-..
-.de Df
-.ie !"\\$1"" \{\
-.       mN d\\$1
-.       if \\n(mN \{\
-.               nr dQ \\n(dQ+1
-.               d\\$1
-.       \}
-.\}
-.el .br
-..
-.de Dn
-\\$1 \\$2 \\$3 \\$4 \\$5 \\$6 \\$7 \\$8 \\$9
-.nf
-..
-.de dI
-.nr d\\n(dQ \\n(dIu
-.in \\n(.iu+\\n(dIu
-..
-.de dC
-.nr d\\n(dQ (\\n(.l-\\n(.i)/4u
-.in \\n(.iu+\\n(d\\n(dQu
-..
-.de dR
-.nr d\\n(dQ (\\n(.l/3)u
-.in \\n(.iu+\\n(d\\n(dQu
-..
-.de dL
-.nr aa 0
-..
-.de De
-.br
-.if \\n(d\\n(dQ \{\
-.	in \\n(.iu-\\n(d\\n(dQu
-.	rr d\\n(dQ
-.	nr dQ \\n(dQ-1
-.\}
-.fi
-..
-.\"
-.de Fn
-.ie \\n(.$==0 \{\
-.	tm Usage: .Fn function_name function_arg(s) ... \\*(Pu
-.\}
-.el \{\
-.	nr cF \\n(.f
-.	ie \\n(.$==1 .ds f1 \&\\*(nM\\$1\fP\\*(lP\fP\\*(rP\fP
-.	el \{\
-.		ds f1 \\*(nM\\$1\fP\\*(lP
-.		nr aa 0
-.		rC \\$2 \\$3 \\$4 \\$5 \\$6 \\$7 \\$8 \\$9
-.	\}
-.	if "\\*(iM"" \{\\&\\*(f1
-.		ds f1
-.	\}
-.\}
-..
-.\"
-.de rC
-.rZ \\$1
-.ie \\n(rZ \{\
-.	as f1 \f\\n(cF\\*(rP\f\\n(cF\\$1\\$2\\$3\\$4\\$5\\$6\\$7
-.\}
-.el \{\
-.	ie \\n(aa .as f1 \fP, \\*(aR\\$1
-.	el .as f1 \\*(aR\\$1
-.	nr aa 1
-.	ie \\n(.$>1 .rC \\$2 \\$3 \\$4 \\$5 \\$6 \\$7
-.	el .as f1 \fP\\*(rP\fP
-.\}
-..
diff -Nuar groff-1.22.3.old/tmac/doc-old.tmac-u groff-1.22.3/tmac/doc-old.tmac-u
--- groff-1.22.3.old/tmac/doc-old.tmac-u	1970-01-01 02:00:00.000000000 +0200
+++ groff-1.22.3/tmac/doc-old.tmac-u	2015-04-23 20:57:03.000000000 +0300
@@ -0,0 +1,1857 @@
+.\" -*- nroff -*-
+.\"
+.\" Copyright (c) 1990 The Regents of the University of California.
+.\" All rights reserved.
+.\"
+.\" Redistribution and use in source and binary forms, with or without
+.\" modification, are permitted provided that the following conditions
+.\" are met:
+.\" 1. Redistributions of source code must retain the above copyright
+.\"    notice, this list of conditions and the following disclaimer.
+.\" 2. Redistributions in binary form must reproduce the above copyright
+.\"    notice, this list of conditions and the following disclaimer in the
+.\"    documentation and/or other materials provided with the distribution.
+.\" 3. [Deleted.  See
+.\"     ftp://ftp.cs.berkeley.edu/pub/4bsd/README.Impt.License.Change]
+.\" 4. Neither the name of the University nor the names of its contributors
+.\"    may be used to endorse or promote products derived from this software
+.\"    without specific prior written permission.
+.\"
+.\" THIS SOFTWARE IS PROVIDED BY THE REGENTS AND CONTRIBUTORS ``AS IS'' AND
+.\" ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE
+.\" IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE
+.\" ARE DISCLAIMED.  IN NO EVENT SHALL THE REGENTS OR CONTRIBUTORS BE LIABLE
+.\" FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL
+.\" DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS
+.\" OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION)
+.\" HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT
+.\" LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY
+.\" OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF
+.\" SUCH DAMAGE.
+.\"
+.\"     @(#)doc-old.tmac	5.2 (Berkeley) 3/13/91
+.\"     Slightly modified by jjc@jclark.com to work with groff as well.
+.\"
+.\" Assume nroff on crt's only if cR==1
+.if n .nr cR 1
+.\"	STRING CONSTANTS
+.\" 	DITROFF
+.if t \{\
+.\"	Address Style
+.ds aD \fI
+.\"	Argument Reference Style
+.ds aR \f(CO
+.\"	Interactive Command Modifier (flag)
+.ds cM \f(CB
+.\"	Emphasis (in the English sense - usually italics)
+.ds eM \fI
+.\"	Errno Style
+.ds eR \fC
+.\"	Environment Variable Style
+.ds eV \fC
+.\"	Command Line Flag Style
+.ds fL \f(CB
+.\"	Header String Style
+.ds Hs \fR
+.\"	Interactive Command Style
+.ds iC \f(CB
+.\"	Literal Style
+.ds lI \fC
+.\"	Left Parenthesis Style
+.ds lP \fR\|(\|\fP
+.\"	Right Parenthesis Style
+.ds rP \fR\|)\|\fP
+.\"	Options Open Bracket Style
+.ds lB \fR\^[\^\fP
+.\"	Options Open Bracket Style
+.ds rB \fR\^]\fP
+.\"	Name (subject of manpage) Style
+.ds nM \f(CB
+.\"	Pathname Style
+.ds pA \fC
+.\"	Accepted punctuation string for -mdoc syntax
+.ds Pu \fR[.,:;(\^)[\^]\fR]
+.\"	Section Header Style
+.ds Sp \s12\fB
+.\" .ds sT \s-2\fR
+.\"	Symbolic Emphasis (boldface)
+.ds sY \f(CB
+.\"	Generic Variable Style
+.ds vA \fI
+.\"	Volume Title Style
+.ds Vs \fR
+.\"	Cross Reference STyle (man page only)
+.ds xR \fC
+.\"	Math *
+.tr *\(**
+.\}
+.\"	NROFF
+.if n \{\
+.\"	Address Style
+.ds aD \fI
+.\"	Argument Reference Style
+.ds aR \fI
+.\"	Interactive Command Modifier (flag)
+.ds cM \fB
+.\"	Emphasis (in the English sense - usually italics)
+.ds eM \fI
+.\"	Errno Style
+.ds eR \fR
+.\"	Environment Variable Style
+.ds eV \fR
+.\"	Command Line Flag Style
+.ds fL \fB
+.\"	Header String Style
+.ds Hs \fR
+.\"	Interactive Command Style
+.ds iC \fB
+.\"	Literal Style
+.ds lI \fR
+.\"	Left Parenthesis Style
+.ds lP \fR\|(\fP
+.\"	Right Parenthesis Style
+.ds rP \fR\|)\fP
+.\"	Options Open Bracket Style
+.ds lB \fR\|[\|\fP
+.\"	Options Open Bracket Style
+.ds rB \fR\|]\fP
+.\"	Name (subject of manpage) Style
+.ds nM \fB
+.\"	Pathname Style
+.ds pA \fI
+.\"	Accepted punctuation string for -mdoc syntax
+.ds Pu [.,;:()[]]
+.\"	Section Header Style
+.ds Sp \s12\fB
+.\"	.ds sT \s-2\fR
+.\" .ds sT \s-2\fR
+.\"	Symbol, Mode or Mask Style
+.ds sY \fB
+.\"	Generic Variable Style
+.ds vA \fI
+.\"	Volume Title Style
+.ds Vs \fR
+.\"	Cross Reference Style (man page only)
+.ds xR \fR
+.\}
+.\"	INDENTS - Subheaders(sI), Text(Ti) between Section Headers and Subsects
+.if t \{\
+.	nr sI \w'\fC,'u*5
+.	nr Ti \n(sIu
+.\}
+.if n \{\
+.	nr sI .5i
+.	nr Ti .5i
+.\}
+.\"	Flags for macros names which are used only for .Ds
+.nr dI 6n
+.nr dC 1
+.nr dL 1
+.nr dR 1
+.\"	INDENT WIDTHS (for Lists)
+.\"	Width Needed for Address Tag (indented amount)
+.nr Ad 12n
+.\"	Angle Quote Width
+.nr Aq 12n
+.\"	Width Needed for Argument
+.nr Ar 12n
+.\"	Width Needed for Column offset
+.nr Cl 15n
+.\"	Width neeeded for Interactive Command Modifier
+.nr Cm 10n
+.\"	Width Needed for Complex Expressions
+.nr Cx 20n
+.\"	Indent Width Needed for Display (right and left margins)
+.nr Ds 6n
+.\"	Double Quote Width
+.nr Dq 12n
+.\"	tI is dependent on Ds and used by .Dp
+.nr tI \n(Dsu
+.\"	Width Needed for Display
+.nr Em 10n
+.\"	Width Needed for Errno Types
+.nr Er 15n
+.\"	Width Needed for Environment Variables
+.nr Ev 15n
+.\"	Width Needed for Example Indent
+.nr Ex 10n
+.\"	Width Needed for Flag
+.nr Fl 10n
+.\"	Width Needed for Function
+.nr Fn 16n
+.\"	Width neeeded for Interactive Command Name
+.nr Ic 10n
+.\"	Width Needed for Constant
+.nr Li 16n
+.\"	Width Needed for Math Symbol ? not sure if needed
+.nr Ms 6n
+.\"	Width Needed for Name
+.nr Nm 10n
+.\"	Width Needed for Option Begin
+.nr Ob 14n
+.\"	Width Needed for Option End
+.nr Oe 14n
+.\"	Width Needed for Option (one line)
+.nr Op 14n
+.\"	Width Needed for Pathname
+.nr Pa 32n
+.\"	Parenthesis Quote Width
+.nr Pq 12n
+.\"	Single Quote Width
+.nr Sq 12n
+.\"	Width Needed for Symbols, Modes or Masks
+.nr Sy 6n
+.\"	Width needed for default or unknown text width
+.nr Tx 22n
+.\"	Width Needed for Generic Variable
+.nr Va 12n
+.\"	Width Needed for Cross Reference, should the cross ref be annotated.
+.nr Xr 10n
+.\" PARAGRAPH SPACE
+.if t \{\
+.	nr Pp .5v
+.\}
+.if n \{\
+.	nr Pp 1v
+.\}
+.\"	PAGE LAYOUT
+.\" .Li Tagged Paragraph Style - zero if break on oversized tag
+.\" one if add em space and continue filling line.
+.nr tP 0
+.\" Page Layout Macro
+.de pL
+.\"	DITROFF
+.ie t \{\
+.\" Header Margin
+.	nr Hm .5i
+.\" Footer Margin
+.	nr Fm .5i
+.\" Line length
+.	nr ll 5.5i
+.\" Line length
+.	ll 5.5i
+.\" Title length
+.	nr lt 5.5i
+.\" Title length
+.	lt 5.5i
+.\" Page offset
+.	nr po 1.56i
+.\" Page offset
+.	po 1.56i
+.\" Vertical space distance (from Section headers/Lists/Subsections)
+.	nr vV .5v
+.\" em space
+.	ds tP \|\|\|\|\|\|
+.\}
+.el \{\
+.\" Line length
+.	nr ll 78n
+.	ll 78n
+.\" Title length
+.	nr lt 78n
+.\" Title length
+.	lt 78n
+.\" Page offset
+.	nr po 0i
+.\" Page offset
+.	po 0i
+.\" Vertical space distance (from Section headers/Lists/Subsections)
+.	nr vV 1v
+.\" em space
+.	ds tP \0\0
+.\" Test for crt
+.	ie \\n(cR .nr Hm 0
+.	el .nr Hm .5i
+.\" Footer Margin
+.	nr Fm .5i
+.\}
+..
+.\" Adjustment mode
+.if n \{\
+.ad l
+.na
+..
+.\}
+.\" PREDEFINED STRINGS
+.if t \{\
+.	ds <= \(<=
+.	ds >= \(>=
+.	ds Lq \&``
+.	ds Rq \&''
+.	ds ua \(ua
+.	ds aa \(aa
+.	ds ga \(ga
+.	ds sR \(aa
+.	ds sL \(ga
+.\}
+.if n \{\
+.	ds <= \&<\&=
+.	ds >= \&>\&=
+.       ds Rq ''
+.       ds Lq ``
+.	ds ua ^
+.	ds aa '
+.	ds ga `
+.	ds sL `
+.	ds sR '
+.\}
+.\" Note: The distances from the bottom or top of the page are set
+.\" in headers (macro .hK): to -1.25 for troff, and -1.167 for nroff
+.\" bottoms, and top is 0.
+.\"
+.\"	.Dt Document/manpage_title section/chapter volume
+.\"		The \{ and \} is necessary as roff doesn't nest if-elses
+.\"		properly, especially with .ds.
+.\"	TODO: separate Dt into Dt, Ch and Vt for supp docs.
+.de Dt
+.ds dT UNTITLED
+.ds vT Local
+.ds cH Null
+.\" 	Volume and Section Number or Chapter Number
+.if !"\\$1"" .ds dT \\$1
+.if !"\\$2"" \{\
+.	ds cH \\$2
+.	if "\\$3"" \{\
+.		\" Volume Title if none given
+.		if \\$2>=1 .if \\$2<=8 \{\
+.			ds vT UNIX Reference Manual
+.			if \\$2>1 .if \\$2<6 .ds vT UNIX Programmer's Manual
+.			if "\\$2"8" .ds vT UNIX System Manager's Manual
+.		\}
+.		if "\\$2"unass"  .ds vT DRAFT
+.		if "\\$2"draft"  .ds vT DRAFT
+.		if "\\$2"paper"  .ds vT Null
+.	\}
+.\}
+.if !"\\$3"" \{\
+.	\" Volume Title if given
+.	if "\\$3"USD"   .ds vT UNIX User's Supplementary Documents
+.	if "\\$3"PS1"   .ds vT UNIX Programmers's Supplementary Documents
+.	if "\\$3"AMD"   .ds vT UNIX Ancestral Manual Documents
+.	if "\\$3"SMM"   .ds vT UNIX System Manager's Manual
+.	if "\\$3"URM"   .ds vT UNIX Reference Manual
+.	if "\\$3"PRM"   .ds vT UNIX Programmers's Manual
+.	if "\\$3"IND"   .ds vT UNIX Manual Master Index
+.	if "\\$3"CON"   .ds vT UNIX Contributed Software Manual
+.	if "\\$3"IMP"	.ds vT UNIX Implementation Notes
+.	if "\\$3"HOW"	.ds vT UNIX How Pocket Manual
+.	if "\\$3"LOCAL" .ds vT UNIX Local Manual
+.	if "\\*(vT"Local" .ds vT \\$3
+.\}
+..
+.\"
+.\"	.Os Operating System/Standard and Release or Version Number
+.\"
+.de Os
+.ds oS Null
+.if "\\$1"" \{\
+.	ds oS \fIBSD Experimental\fP
+.\" .	ds oS (\fIBag o' Bits\fP)
+.\}
+.if "\\$2"" \{\
+.	ds o1 Non-Null
+.\}
+.if "\\$1"ATT"   \{\
+.	ds oS AT&T
+.	if "\\$2""    .as oS \0UNIX
+.	if "\\$2"7th" .as oS \07th Edition
+.	if "\\$2"7"   .as oS \07th Edition
+.	if "\\$2"III" .as oS \0System III
+.	if "\\$2"3"   .as oS \0System III
+.	if "\\$2"V"   .as oS \0System V
+.	if "\\$2"V.2" .as oS \0System V Release 2
+.	if "\\$2"V.3" .as oS \0System V Release 3
+.	if "\\$2"V.4" .as oS \0System V Release 4
+.\}
+.if "\\$1"BSD" \{\
+.	if "\\$2"3"    .ds oS 3rd Berkeley Distribution
+.	if "\\$2"4"    .ds oS 4th Berkeley Distribution
+.	if "\\$2"4.1"  .ds oS 4.1 Berkeley Distribution
+.	if "\\$2"4.2"  .ds oS 4.2 Berkeley Distribution
+.	if "\\$2"4.3"  .ds oS 4.3 Berkeley Distribution
+.	if "\\$2"4.3+" .ds oS 4.3+tahoe Berkeley Distribution
+.\}
+.if "\\*(oS"Null" .ds oS \\$1
+.if "\\*(o1"Non-Null" .as oS \0\\$2
+.rm o1
+..
+.\"
+.\" Standards
+.\"
+.\" .de St
+.\" .ds sT Null
+.\" .if "\\$1"POSIX" \{\
+.\" .	ds sT IEEE Standard POSIX
+.\" .	if \\$2 .as sT \0\\$2
+.\" .\}
+.\" .if "\\$1"ANSI" \{\
+.\" .	ds sT ANSI Standard
+.\" .	if \\$2 .as sT \0\\$2
+.\" .\}
+.\" .if "\\$1"ISO" \{\
+.\" .	ds sT ISO Standard
+.\" .	if \\$2 .as sT \0\\$2
+.\" .\}
+.\" .if "\\*(sT"Null" .ds sR \\$3
+.\" ..
+.\"
+.\" .de Gp
+.\" .ie !"\\$1"" .ds gP \&\\$1 \\$2 \\$3 \\$4 \\$5
+.\" .el .ds gP Null
+.\" ..
+.\"
+.\"
+.de Dd
+.nr aa 0
+.ie \\n(.$>0 \{\
+.	ie \\n(.$<4 \{\
+.		ds dD \\$1 \\$2 \\$3
+.	\}
+.	el .tm Usage: .Dd Month Day, Year (e.g July 4, 1977).
+.\}
+.el \{\
+.	ds dD Epoch
+.\}
+..
+.\"
+.\"	House Keeping Macro - Make sense of dT, cH, vT, sT, gP and dS
+.\"	TODO: Try to get else's for efficiency
+.\"	TODO: GET RID OF .wh -1.167i (its in v7)
+.\"
+.\"
+.de hK
+.nr % 1
+.ds hT \\*(dT
+.if !"\\*(cH"Null" \{\
+.	ie !"\\*(gP"Null" .as hT \|(\|\\*(cH\\*(gP\|)
+.	el .as hT \\|(\\|\\*(cH\\|)
+.\}
+.if "\\*(cH"Null" .if !"\\*(gP"Null" .as hT \&\|(\|\\*(gP\|)
+.if t \{\
+.	wh 0 hM
+.	wh -1.25i fM
+.\}
+.if n \{\
+.	ie \\n(cR \{\
+.		hM
+.		wh -0v fM
+.	\}
+.	el \{\
+.		wh 0 hM
+.		wh -1.167i fM
+.	\}
+.\}
+.if n \{\
+.	if \\n(nl==0:\\n(nl==-1 'bp
+.\}
+.if t 'bp
+.em lM
+..
+.\"	Header Macro
+.\"
+.de hM
+.ev 1
+.pL
+.if !\\n(cR 'sp \\n(Hmu
+.tl @\\*(Hs\\*(hT\fP@\\*(Vs\\*(vT\fP@\\*(Hs\\*(hT\fP@
+'sp \\n(Hmu
+.ev
+..
+.\"
+.de fM
+.ev 1
+.pL
+.if !\\n(cR \{\
+'	sp \\n(Fmu
+.	tl @\\*(Hs\\*(oS\fP@\\*(Vs\\*(dD\fP@%@
+'	bp
+.\}
+.if \\n(cR \{\
+.\" .	tl @\\*(Hs\\*(oS\fP@\\*(Vs\\*(dD\fP@%@
+.\" '	bp
+.\}
+.ev
+..
+.de lM
+.fl
+.if \\n(cR \{\
+.       fM
+.       pl \\n(nlu
+.\}
+..
+.de Pp
+.sp \\n(Ppu
+.ne 2
+.ns
+..
+.de Lp
+.Pp
+..
+.de LP
+.tm Not a \-mdoc command: .LP
+..
+.de PP
+.tm Not a \-mdoc command: .PP
+..
+.de pp
+.tm Not a \-mdoc command: .pp
+..
+.de Co
+.tm Not a \-mdoc command: .Co
+..
+.nr z. 1
+.nr z, 1
+.nr z: 1
+.nr z; 1
+.nr z) 1
+.nr z( 1
+.nr z[ 1
+.nr z] 1
+.\" This is disgusting, troff not parse if stmt properly
+.nr z1 0
+.nr z2 0
+.nr z3 0
+.nr z4 0
+.nr z5 0
+.nr z6 0
+.nr z7 0
+.nr z8 0
+.nr z9 0
+.nr z0 0
+.nr z# 0
+.\"
+.de Ad
+.ie \\n(.$==0 \{\
+.       tm Usage: .Ad address [...] \\*(Pu
+.\}
+.el \{\
+.       ds sV \\*(aD
+.       nr cF \\n(.f
+.       ie "\\*(iM"" .ds f1 \&\\*(sV
+.       el .as f1 \&\\*(sV
+.       nB \\$1 \\$2 \\$3 \\$4 \\$5 \\$6 \\$7 \\$8 \\$9
+.       ft \\n(cF
+.\}
+..
+.\"
+.\" Command Line Argument Macro
+.\"
+.de Ar
+.ie \\n(.$==0 \{\
+.       ie !"\\*(iM"" .as f1 \&[\|\\*(aRfile\ ...\fP\|]
+.       el \&[\|\\*(aRfile\ ...\fP\|]
+.\}
+.el \{\
+.       ds sV \\*(aR
+.       nr cF \\n(.f
+.       ie "\\*(iM"" .ds f1 \&\\*(sV
+.       el .as f1 \&\\*(sV
+.       nB \\$1 \\$2 \\$3 \\$4 \\$5 \\$6 \\$7 \\$8 \\$9
+.       ft \\n(cF
+.\}
+..
+.\"
+.de Em
+.ie \\n(.$==0 \{\
+.       tm Usage: .Em text ... \\*(Pu
+.\}
+.el \{\
+.       ds sV \\*(eM
+.       nr cF \\n(.f
+.       ie "\\*(iM"" .ds f1 \&\\*(sV
+.       el .as f1 \&\\*(sV
+.       nB \\$1 \\$2 \\$3 \\$4 \\$5 \\$6 \\$7 \\$8 \\$9
+.       ft \\n(cF
+.\}
+..
+.\"
+.de Er
+.ie \\n(.$==0 \{\
+.       tm Usage: .Er ERRNOTYPE ... \\*(Pu
+.       \}
+.el \{\
+.       ds sV \\*(eR
+.       nr cF \\n(.f
+.       ie "\\*(iM"" .ds f1 \&\\*(sV
+.       el .as f1 \&\\*(sV
+.       nB \\$1 \\$2 \\$3 \\$4 \\$5 \\$6 \\$7 \\$8 \\$9
+.       ft \\n(cF
+.\}
+..
+.\"
+.de Ev
+.ie \\n(.$==0 \{\
+.	tm Usage: .Ev ENVIRONMENT_VARIABLE(s) ... \\*(Pu
+.	\}
+.el \{\
+.	ds sV \\*(eV
+.	nr cF \\n(.f
+.       ie "\\*(iM"" .ds f1 \&\\*(sV
+.       el .as f1 \&\\*(sV
+.       nB \\$1 \\$2 \\$3 \\$4 \\$5 \\$6 \\$7 \\$8 \\$9
+.	ft \\n(cF
+.\}
+..
+.\"
+.\" Flag Name Macro
+.\"
+.de Fl
+.ie \\n(.$==0 \{\
+.       ie !"\\*(iM"" .as f1 \&\\*(fL\-\fP
+.       el \&\\*(fL\-\fP
+.\}
+.el \{\
+.       nr rZ 0
+.       sW \\$1
+.       if (\\n(sW==1&\\n(.$==1) .rZ \\$1
+.       ds sV \\*(fL
+.       nr cF \\n(.f
+.       ie \\n(rZ \{\
+.               ie "\\*(iM"" .ds f1 \&\\*(sV\-\f\\n(cF\\$1
+.               el \&\\*(sV\-\f\\n(cF\\$1
+.       \}
+.	el \{\
+.	       ie "\\*(iM"" .ds f1 \&\\*(sV
+.	       el .as f1 \&\\*(sV
+.	       fB \\$1 \\$2 \\$3 \\$4 \\$5 \\$6 \\$7 \\$8 \\$9
+.	       ft \\n(cF
+.	\}
+.\}
+..
+.\"	Interactive Commands Macro
+.\"
+.de Ic
+.ie \\n(.$==0 \{\
+.	tm Usage: .Ic Interactive Commands(s) ... \\*(Pu
+.\}
+.el \{\
+.       ds sV \\*(iC
+.       nr cF \\n(.f
+.       ie "\\*(iM"" .ds f1 \&\\*(sV
+.       el .as f1 \&\\*(sV
+.       nB \\$1 \\$2 \\$3 \\$4 \\$5 \\$6 \\$7 \\$8 \\$9
+.       ft \\n(cF
+.\}
+..
+.\"
+.\" Interactive Command Modifiers (flags)
+.\"
+.de Cm
+.ie \\n(.$==0 \{\
+.	tm Usage: .Cm Interactive Command Modifier(s) ... \\*(Pu
+.\}
+.el \{\
+.       ds sV \\*(cM
+.       nr cF \\n(.f
+.       ie "\\*(iM"" .ds f1 \&\\*(sV
+.       el .as f1 \&\\*(sV
+.       nB \\$1 \\$2 \\$3 \\$4 \\$5 \\$6 \\$7 \\$8 \\$9
+.       ft \\n(cF
+.\}
+..
+.\"
+.de Li
+.ie \\n(.$==0 \{\
+.       tm Usage: .Li literal ... \\*(Pu
+.       \}
+.el \{\
+.       ds sV \\*(lI
+.       nr cF \\n(.f
+.       ie "\\*(iM"" .ds f1 \&\\*(sV
+.       el .as f1 \&\\*(sV
+.       nB \\$1 \\$2 \\$3 \\$4 \\$5 \\$6 \\$7 \\$8 \\$9
+.       ft \\n(cF
+.\}
+..
+.\" If in nroff or any other case where the default font
+.\" is constant width, and literal means zilch, single quote instead.
+.ie n \{\
+.de Ql
+.	ie \\n(.$==0 \{\
+.	       tm Usage: .Ql literal ... \\*(Pu
+.       \}
+.	el \{\
+.		Sq \\$1 \\$2 \\$3 \\$4 \\$5 \\$6 \\$7 \\$8 \\$9
+.	\}
+..
+.\}
+.el \{\
+.de Ql
+.	ie \\n(.$==0 \{\
+.	       tm Usage: .Ql literal ... \\*(Pu
+.       \}
+.	el \{\
+.		Li \\$1 \\$2 \\$3 \\$4 \\$5 \\$6 \\$7 \\$8 \\$9
+.	\}
+..
+.\}
+.\"
+.de Nm
+.ie \\n(.$==0 \{\
+.	if "\\*(n1"" .tm Usage: .Nm Name(s) ... \\*(Pu
+.	ie !"\\*(iM"" .as f1 \&\\*(nM\\*(n1\\$1\fP
+.	el \&\\*(nM\\*(n1\\$1\fP
+.\}
+.el \{\
+.	ds sV \\*(nM
+.	nr cF \\n(.f
+.	if \\n(nS \{\
+.		rs
+.		in -\\n(iSu
+.		ie \\n(nS>1 .br
+.		el \{\
+.			sW \\$1
+.			nr iS ((\\n(sW+1)*\\n(fW)u
+.		\}
+.		in +\\n(iSu
+.		ti -\\n(iSu
+.		nr nS \\n(nS+1
+.	\}
+.	if "\\*(n1"" .ds n1 \\$1
+.	ie "\\*(iM"" .ds f1 \&\\*(sV
+.	el .as f1 \&\\*(sV
+.	nB \\$1 \\$2 \\$3 \\$4 \\$5 \\$6 \\$7 \\$8 \\$9
+.	ft \\n(cF
+.\}
+..
+.\"
+.de Pa
+.ie \\n(.$==0 \{\
+\&\\*(pA~\fP
+.\}
+.el \{\
+.       ds sV \\*(pA
+.       nr cF \\n(.f
+.       ie "\\*(iM"" .ds f1 \&\\*(sV
+.       el .as f1 \&\\*(sV
+.       nB \\$1 \\$2 \\$3 \\$4 \\$5 \\$6 \\$7 \\$8 \\$9
+.       ft \\n(cF
+.\}
+..
+.\"
+.de Sy
+.ie \\n(.$==0 \{\
+.       tm Usage: .Sy Symbolic Text ... \\*(Pu
+.       \}
+.el \{\
+.       ds sV \\*(sY
+.       nr cF \\n(.f
+.       ie "\\*(iM"" .ds f1 \&\\*(sV
+.       el .as f1 \&\\*(sV
+.       nB \\$1 \\$2 \\$3 \\$4 \\$5 \\$6 \\$7 \\$8 \\$9
+.       ft \\n(cF
+.\}
+..
+.\"
+.de Ms
+.ie \\n(.$==0 \{\
+.       tm Usage: .Ms Math Symbol ... \\*(Pu
+.       \}
+.el \{\
+.       ds sV \\*(sY
+.       nr cF \\n(.f
+.       ie "\\*(iM"" .ds f1 \&\\*(sV
+.       el .as f1 \&\\*(sV
+.       nB \\$1 \\$2 \\$3 \\$4 \\$5 \\$6 \\$7 \\$8 \\$9
+.       ft \\n(cF
+.\}
+..
+.\"
+.de Va
+.ie \\n(.$==0 \{\
+.       tm Usage: .Va variable_name(s) ... \\*(Pu
+.\}
+.el \{\
+.       ds sV \\*(vA
+.       nr cF \\n(.f
+.       ie "\\*(iM"" .ds f1 \&\\*(sV
+.       el .as f1 \&\\*(sV
+.       nB \\$1 \\$2 \\$3 \\$4 \\$5 \\$6 \\$7 \\$8 \\$9
+.       ft \\n(cF
+.\}
+..
+.\"
+.de nB
+.hy 0
+.if \\n(.$==0 .tm Usage error: called with empty arguments (empty quotes)?
+.ie \\n(.$>1 \{\
+.	rZ \\$1
+.	ie \\n(rZ .as f1 \&\f\\n(cF\\$1\fP
+.	el .as f1 \&\\$1
+.	rZ \\$2
+.	if !\\n(rZ \{\
+.		ie !"\\*(iM""\{\
+.\"			I surrender
+.			if "\\*(iM"Tp" .as f1 \&\ \&
+.			if "\\*(iM"Dp" .as f1 \&\ \&
+.			if "\\*(iM"Op" .as f1 \&\ \&
+.			if "\\*(iM"Cx" .as f1 \&\ \&
+.			if "\\*(iM"Dq" .as f1 \& \&
+.			if "\\*(iM"Sq" .as f1 \& \&
+.			if "\\*(iM"Pq" .as f1 \& \&
+.			if "\\*(iM"Aq" .as f1 \& \&
+.		\}
+.		el .as f1 \& \&
+.	\}
+.	nB \\$2 \\$3 \\$4 \\$5 \\$6 \\$7 \\$8 \\$9
+.\}
+.el \{\
+.	rZ \\$1
+.	ie \\n(rZ .as f1 \&\f\\n(cF\\$1
+.	el .as f1 \&\\$1\f\\n(cF
+.	if "\\*(iM"" \{\&\\*(f1
+.		ds f1
+.	\}
+.	hy
+.\}
+..
+.de fB
+.hy 0
+.if \\n(.$==0 .tm Usage error: called with empty arguments (empty quotes)?
+.ie \\n(.$>1 \{\
+.	rZ \\$1
+.	ie \\n(rZ .as f1 \&\f\\n(cF\\$1\fP
+.	el \{\
+.		ie "\\$1"-" .as f1 \&\-\-
+.		el .as f1 \&\-\\$1
+.	\}
+.	rZ \\$2
+.	if !\\n(rZ \{\
+.		ie !"\\*(iM""\{\
+.\"			I surrender
+.			if "\\*(iM"Tp" .as f1 \&\ \&
+.			if "\\*(iM"Dp" .as f1 \&\ \&
+.			if "\\*(iM"Op" .as f1 \&\ \&
+.			if "\\*(iM"Cx" .as f1 \&\ \&
+.			if "\\*(iM"Dq" .as f1 \& \&
+.			if "\\*(iM"Sq" .as f1 \& \&
+.			if "\\*(iM"Pq" .as f1 \& \&
+.			if "\\*(iM"Aq" .as f1 \& \&
+.		\}
+.		el .as f1 \& \&
+.	\}
+.	fB \\$2 \\$3 \\$4 \\$5 \\$6 \\$7 \\$8 \\$9
+.\}
+.el \{\
+.	rZ \\$1
+.	ie \\n(rZ .as f1 \&\f\\n(cF\\$1
+.	el \{\
+.		ie "\\$1"-" .as f1 \&\-\-\f\\n(cF
+.		el .as f1 \&\-\\$1\f\\n(cF
+.	\}
+.	if "\\*(iM"" \{\&\\*(f1
+.		ds f1
+.	\}
+.	hy
+.\}
+..
+.\"
+.\" Single quoted Items
+.\" eF, sB g[0-9] and f2
+.de Sq
+.nr eF 0
+.ie \\n(.$==0 \{\
+.       ie "\\*(iM"" \&\\*(sL\&\\*sR
+.       el .as f1 \&\\*(sL\&\\*(sR
+.\}
+.el \{\
+.       ie "\\*(iM"" \{\
+.		ds f1 \&\\*(sL
+.		ds iM Sq
+.	\}
+.       el .as f1 \&\\*(sL
+.       sB \\$1 \\$2 \\$3 \\$4 \\$5 \\$6 \\$7 \\$8 \\$9
+.	ie \\n(eF>0 .\\*(g1 \\*(g2 \\*(g3 \\*(g4 \\*(g5 \\*(g6 \\*(g7 \\*(g8
+.	el .as f1 \\*(g0
+.	as f1 \\*(sR
+.	if !"\\*(f2"" .as f1 \\*(f2
+.	if "\\*(iM"Sq" \{\
+\&\\*(f1
+.		ds f1
+.		ds iM
+.	\}
+.	ds f2
+.	rm  g0 g1 g2 g3 g4 g5 g6 g7 g8 g9
+.	nr eF 0
+.\}
+..
+.\"
+.\" Double quoted Items
+.de Dq
+.nr Ef 0
+.ie \\n(.$==0 \{\
+.       ie "\\*(iM"" \&\\*(Lq\&\\*(Rq
+.       el .as f1 \&\\*(Lq\&\\*(Rq
+.\}
+.el \{\
+.       ie "\\*(iM"" \{\
+.               ds f1 \&\\*(Lq
+.               ds iM Dq
+.       \}
+.       el .as f1 \&\\*(Lq
+.       Sb \\$1 \\$2 \\$3 \\$4 \\$5 \\$6 \\$7 \\$8 \\$9
+.       ie \\n(Ef>0 .\\*(k1 \\*(k2 \\*(k3 \\*(k4 \\*(k5 \\*(k6 \\*(k7 \\*(k8
+.       el .as f1 \\*(k0
+.       as f1 \\*(Rq
+.       if !"\\*(f4"" .as f1 \\*(f4
+.       if "\\*(iM"Dq" \{\
+\&\\*(f1
+.               ds f1
+.               ds iM
+.       \}
+.       ds f4
+.       rm  k0 k1 k2 k3 k4 k5 k6 k7 k8 k9
+.       nr Ef 0
+.\}
+..
+.\"
+.\" Parenthesis quoted Items
+.de Pq
+.nr pQ 0
+.ie \\n(.$==0 \{\
+.       ie "\\*(iM"" \&(\&)
+.       el .as f1 \&(\&)
+.\}
+.el \{\
+.       ie "\\*(iM"" \{\
+.               ds f1 \&(
+.               ds iM Pq
+.       \}
+.       el .as f1 \&(
+.       pB \\$1 \\$2 \\$3 \\$4 \\$5 \\$6 \\$7 \\$8 \\$9
+.       ie \\n(pQ>0 .\\*(y1 \\*(y2 \\*(y3 \\*(y4 \\*(y5 \\*(y6 \\*(y7 \\*(y8
+.       el .as f1 \\*(y0
+.       as f1 \&)
+.       if !"\\*(f3"" .as f1 \\*(f3
+.       if "\\*(iM"Pq" \{\
+\&\\*(f1
+.               ds f1
+.               ds iM
+.       \}
+.       ds f3
+.       rm  y0 y1 y2 y3 y4 y5 y6 y7 y8 y9
+.       nr pQ 0
+.\}
+..
+.\" eF, sB g[0-9] and f2
+.de sB
+.hy 0
+.ie \\n(.$==0 .tm Sick Logic: macro sB
+.el \{\
+.	ie \\n(eF>=1 .nr eF \\n(eF+1
+.	el \{\
+.		mN \\$1
+.		if \\n(mN .nr eF \\n(eF+1
+.	\}
+.       rZ \\$1
+.       ie \\n(rZ .as f2 \\$1
+.       el \{\
+.		ie \\n(eF<1 .as g\\n(eF \\$1
+.		el .as g\\n(eF \\$1
+.	\}
+.       if \\n(.$>1 \{\
+.		rZ \\$2
+.	        if \\n(rZ==0 \{\
+.			if \\n(eF<1 \{\
+.				as g\\n(eF \& \&
+.			\}
+.		\}
+.		sB \\$2 \\$3 \\$4 \\$5 \\$6 \\$7 \\$8 \\$9
+.	\}
+.\}
+..
+.de Sb
+.hy 0
+.ie \\n(.$==0 .tm Sick Logic: macro Sb
+.el \{\
+.       ie \\n(Ef>=1 .nr Ef \\n(Ef+1
+.	el \{\
+.		mN \\$1
+.	        if \\n(mN .nr Ef \\n(Ef+1
+.	\}
+.       rZ \\$1
+.       ie \\n(rZ .as f4 \\$1
+.       el \{\
+.               ie \\n(Ef<1 .as k\\n(Ef \\$1
+.               el .as k\\n(Ef \\$1
+.       \}
+.       if \\n(.$>1 \{\
+.               rZ \\$2
+.               if \\n(rZ==0 \{\
+.                       if \\n(Ef<1 \{\
+.                               as k\\n(Ef \& \&
+.                       \}
+.               \}
+.               Sb \\$2 \\$3 \\$4 \\$5 \\$6 \\$7 \\$8 \\$9
+.       \}
+.\}
+..
+.de pB
+.hy 0
+.ie \\n(.$==0 .tm Sick Logic: macro pB
+.el \{\
+.       ie \\n(pQ>=1 .nr pQ \\n(pQ+1
+.       el \{\
+.               mN \\$1
+.               if \\n(mN .nr pQ \\n(pQ+1
+.       \}
+.       rZ \\$1
+.       ie \\n(rZ .as f3 \\$1
+.       el \{\
+.               ie \\n(pQ<1 .as y\\n(pQ \\$1
+.               el .as y\\n(pQ \\$1
+.       \}
+.       if \\n(.$>1 \{\
+.               rZ \\$2
+.               if \\n(rZ==0 \{\
+.                       if \\n(pQ<1 \{\
+.                               as y\\n(pQ \& \&
+.                       \}
+.               \}
+.               pB \\$2 \\$3 \\$4 \\$5 \\$6 \\$7 \\$8 \\$9
+.       \}
+.\}
+..
+.de aQ
+.hy 0
+.ie \\n(.$==0 .tm Bad Syntax: .Aq
+.el \{\
+.       ie \\n(aQ>=1 .nr aQ \\n(aQ+1
+.       el \{\
+.               mN \\$1
+.               if \\n(mN .nr aQ \\n(aQ+1
+.       \}
+.       rZ \\$1
+.       ie \\n(rZ .as aZ \\$1
+.       el \{\
+.               ie \\n(aQ<1 .as a\\n(aQ \\$1
+.               el .as a\\n(aQ \\$1
+.       \}
+.       if \\n(.$>1 \{\
+.               rZ \\$2
+.               if \\n(rZ==0 \{\
+.                       if \\n(aQ<1 \{\
+.                               as a\\n(aQ \& \&
+.                       \}
+.               \}
+.               aQ \\$2 \\$3 \\$4 \\$5 \\$6 \\$7 \\$8 \\$9
+.       \}
+.\}
+..
+.\" Angle Bracket Quoted Items
+.de Aq
+.nr aQ 0
+.ie \\n(.$==0 \{\
+.       ie "\\*(iM"" \&<\&>
+.       el .as f1 \&<\&>
+.\}
+.el \{\
+.       ie "\\*(iM"" \{\
+.               ds f1 \&<
+.               ds iM Aq
+.       \}
+.       el .as f1 \&<
+.       aQ \\$1 \\$2 \\$3 \\$4 \\$5 \\$6 \\$7 \\$8
+.       ie \\n(aQ>0 .\\*(a1 \\*(a2 \\*(a3 \\*(a4 \\*(a5 \\*(a6 \\*(a7 \\*(a8
+.       el .as f1 \\*(a0
+.       as f1 \&>
+.       if !"\\*(aZ"" .as f1 \\*(aZ
+.       if "\\*(iM"Aq" \{\
+\&\\*(f1
+.               ds f1
+.               ds iM
+.       \}
+.       ds aZ
+.       rm  a0 a1 a2 a3 a4 a5 a6 a7 a8
+.       nr aQ 0
+.\}
+..
+.\" macro Name test, return macro register value if true
+.if \n(.g .ig
+.de mN
+.nr mN 0
+.sW \\$1
+.if \\n(sW==2 \{\
+.	if \\n(\\$1 .nr mN \\n(\\$1
+.\}
+..
+.if !\n(.g .ig
+.de mN
+.nr mN 0
+.if \A'\\$1' \{\
+.	sW \\$1
+.	if \\n(sW==2 \{\
+.		if \\n(\\$1 .nr mN \\n(\\$1
+.	\}
+.\}
+..
+.\" Punctuation test (using z registers), return 1 if true
+.if \n(.g .ig
+.de rZ
+.nr rZ 0
+.sW \\$1
+.if \\n(sW==1 \{\
+.	if \\n(z\\$1==1 \{\
+.		nr rZ 1
+.	\}
+.\}
+..
+.if !\n(.g .ig
+.de rZ
+.nr rZ 0
+.if \A'\\$1' \{\
+.	sW \\$1
+.	if \\n(sW==1 \{\
+.		if \\n(z\\$1==1 \{\
+.			nr rZ 1
+.		\}
+.	\}
+.\}
+..
+.\"
+.\" sW returns number of characters in a string
+.if t \{\
+.nr fW \w'\fC,'
+.de sW
+.nr sW \w'\fC\\$1'
+.\}
+.if n \{\
+.nr fW \w'0'
+.de sW
+.nr sW \w'\\$1'
+.\}
+.ie \\n(sW>=\\n(fW \{\
+.	ie \\n(sW%\\n(fW .nr sW (\\n(sW/\\n(fW)+1
+.	el .nr sW \\n(sW/\\n(fW
+.\}
+.el .nr sW 0
+..
+.\"	Option Expression -
+.\"	TODO - add line overflow check (right!)
+.nr eP 0
+.ds e1
+.nr oE 0
+.nr hP 0
+.ds hP
+.nr Ep 0
+.de Op
+.hy 0
+.if "\\*(iM"" \{\
+.	ds iM Op
+.       ds f1 \&
+.\}
+.as f1 \&\\*(lB
+.\" .tm Op:  \\$1 \\$2 \\$3 \\$4 \\$5 \\$6 \\$7 \\$8 \\$9
+.dO \\$1 \\$2 \\$3 \\$4 \\$5 \\$6 \\$7 \\$8 \\$9
+.ie !"\\$1"Cx" .oE
+.el .nr oE \\n(oE+1
+..
+.\"
+.\" just for mike, with every bite of garlic in mind (oops, i mean burp).
+.\" dO: go dOwn an argument vector and test each argument to see if
+.\" a macro name or punctuation. stash in respective place along
+.\" with its arguments.
+.nr oO 0
+.nr oP 0
+.nr aO 0
+.de dO
+.mN \\$1
+.ie \\n(mN \{\
+.       if \\n(oP  \{\
+.               if \\n(hP \{\
+.                       nr oZ 1
+.                       oZ
+.                       Oz
+.               \}
+.               if \\n(e1==1 \{\
+.\\*(e1 \\*(e2 \\*(e3 \\*(e4 \\*(e5 \\*(e6 \\*(e7 \\*(e8 \\*(e9
+.               \}
+.               uO
+.		if !(\\n(oO:\\n(aO) .as f1 \& \&
+.	\}
+.       ie "\\$1"Op" \{\
+.               as f1 \&\\*(lB
+.               nr aO \\n(aO+1
+.       \}
+.	el \{\
+.               nr eP \\n(eP+1
+.               ds e\\n(eP \\$1
+.               nr e\\n(eP 1
+.       \}
+.\}
+.el \{\
+.\" .tm dO: $1: \\$1: eP \\n(eP e[\\n(eP]: \\*(e\\n(ePEE
+.	rZ \\$1
+.	ie \\n(rZ \{\
+.\" .tm dO:rZ: $1: \\$1: eP \\n(eP e[\\n(eP]: \\*(e\\n(eP
+.		nr hP \\n(hP+1
+.		ds h\\n(hP \\$1
+.	\}
+.	el \{\
+.\" .tm dO:word $1: \\$1: eP \\n(eP e[\\n(eP]: \\*(e\\n(ePEE
+.		if \\n(eP==0:\\n(e\\n(eP==1 .nr eP \\n(eP+1
+.		if \\n(eZ .as e\\n(eP \& \&
+.		as e\\n(eP " \&\\$1
+.\" .		ds e\\n(eP \&\\$1
+.		nr eZ \\n(eZ+1
+.	\}
+.\}
+.nr oP 1
+.ie \\n(.$>1 \{\
+.	dO \\$2 \\$3 \\$4 \\$5 \\$6 \\$7 \\$8 \\$9
+.\}
+.el \{\
+.     ie \\n(e1 \{\
+.\\*(e1 \\*(e2 \\*(e3 \\*(e4 \\*(e5 \\*(e6 \\*(e7 \\*(e8 \\*(e9
+.	\}
+.     el \{\
+.	as f1 \\*(e1
+.	\}
+.\}
+..
+.\" handle old style arguments such as the arg -Idir
+.\" in adb, .Oo is a toggle.
+.de Oo
+.ie \\n(oO .nr oO 0
+.el .nr oO 1
+..
+.\" stash punctuation
+.de oZ
+.if \\n(hP>=\\n(oZ \{\
+.	nr eP \\n(eP+1
+.	ds e\\n(eP \\*(h\\n(oZ
+.	nr oZ \\n(oZ+1
+.	oZ
+.\}
+..
+.\" clean up punctuation vector
+.de Oz
+.if \\n(hP>0 \{\
+.	rm h\\n(hP
+.	nr hP \\n(hP-1
+.	Oz
+.\}
+..
+.\" uO: go back up created vector cleaning it up along the way
+.de uO
+.if \\n(eP>0 \{\
+.	rm e\\n(eP
+.	rr e\\n(eP
+.	nr eP \\n(eP-1
+.	nr oP 0
+.	nr eZ 0
+.	uO
+.\}
+..
+.\" option end
+.de oE
+.uO
+.ie \\n(hP \{\
+.       as f1 \\*(rB\\*(h1\\*(h2\\*(h3
+.	Oz
+.	nr oZ 0
+.\}
+.el \{\
+.	as f1 \\*(rB
+.\}
+.ie "\\*(iM"Op" \{\
+.	if \\n(aO .aO
+.if t \{\
+.	if (\\n(.lu-\\n(.ku-\\n(.ou-(2*\\n(fWu))<\w'\fC\\*(f1'u .br
+.\}
+.if n \{\
+.	nr aa \w'\\*(f1'u
+.\" .	nr qq \\n(.lu-\\n(.ku-\\n(.ou
+.\" \&aa == \\n(aa, f1==\\*(f1, qq==\\n(qq
+.	if (\\n(.lu-\\n(.ku-\\n(.ou-\\n(aau)<=(8*\\n(fWu) .br
+.\}
+\&\\*(f1
+.	ds iM
+.	ds f1
+.	hy
+.\}
+.el .nr oE \\n(oE-1
+..
+.de aO
+.as f1 \\*(rB
+.nr aO \\n(aO-1
+.if \\n(aO >0 .aO
+..
+.\"
+.de Xr
+.if \\n(.$<=1 \{\
+.	ie \\n(.$==1 \{\
+.		if !"\\*(iM"" .as f1 \&\\*(xR\\$1\fP
+.		if "\\*(iM"" \&\\*(xR\\$1\fP
+.	\}
+.	el .tm Xr Usage: .Xr manpage_name [section#] \\*(Pu
+.\}
+.if \\n(.$==2 \{\
+.	rZ \\$2
+.	ie "\\*(iM"" \{\
+.		ie \\n(rZ \&\\*(xR\\$1\fP\\$2
+.		el \&\\*(xR\\$1\fP(\\$2)
+.	\}
+.	el \{\
+.		ie \\n(rZ .as f1 \&\\*(xR\\$1\fP\\$2
+.		el .as f1 \&\\*(xR\\$1\fP(\\$2)
+.	\}
+.\}
+.if \\n(.$>=3 \{\
+.	rZ \\$2
+.	ie \\n(rZ \{\
+.		ie !"\\*(iM"" .as f1 \&\\*(xR\\$1\fP\\$2\\$3\\$4\\$5\\$6\\$7\\$8
+.		el \&\\*(xR\\$1\fP\\$2\\$3\\$4\\$5\\$6\\$7\\$8
+.	\}
+.	el \{\
+.		rZ \\$3
+.		ie \\n(rZ \{\
+.			if !"\\*(iM"" \{\
+.			     as f1 \&\\*(xR\\$1\fP(\\$2)\\$3\\$4\\$5\\$6\\$7\\$8
+.			\}
+.			if "\\*(iM"" \{\
+\&\\*(xR\\$1\fP(\\$2)\\$3\\$4\\$5\\$6\\$7\\$8
+.			\}
+.		\}
+.		el \{\
+.			tm rZ = \\n(rZ  the arg is \\$3
+.			tm Xr-XX Usage: .Xr manpage_name [section#] \\*(Pu
+.		\}
+.	\}
+.\}
+..
+.\"
+.\"
+.de Ex
+.tm Ex defunct, Use .Dl: \\$1 \\$2 \\$3 \\$4 \\$5 \\$6 \\$7 \\$8 \\$9
+..
+.\" Display (one) Line of text.
+.de Dl
+.ie "\\*(iM"" \{\
+'	ta .5i 1i 1.5i 2i 2.5i 3i 3.5i 4i 4.5i 5i 5.5i 6i 6.5i
+.	in \\n(.iu+\\n(Dsu
+.	mN \\$1
+.	ie \\n(mN .\\$1 \\$2 \\$3 \\$4 \\$5 \\$6 \\$7 \\$8 \\$9
+.	el \{\
+.		nr cF \\n(.f
+.\"	 Literal font is none specified
+\&\\*(lI\\$1 \\$2 \\$3 \\$4 \\$5 \\$6 \\$7 \\$8 \\$9
+.		ft \\n(cF
+.	\}
+.	in \\n(.iu-\\n(Dsu
+.\}
+.el \{\
+.	mN \\$1
+.	ie \\n(mN .\\$1 \\$2 \\$3 \\$4 \\$5 \\$6 \\$7 \\$8
+.	el \{\
+.		nr cF \\n(.f
+.		ds f1 \&\\*(lI\\&\\$1 \\$2 \\$3 \\$4 \\$5 \\$6 \\$7 \\$8
+.		as f1 \&\f\\n(cF
+.	\}
+.\}
+..
+.\"
+.\"
+.\" user set Tagged Paragraph Width (used in both Dp and Tp)
+.de Tw
+.ie \\n(.$==0 \{\
+.	nr aa 0
+.\}
+.el \{\
+.	mN \\$1
+.	ie \\n(sW>2 \{\
+.		nr tW (\\n(sW+3)*\\n(fWu)
+.	\}
+.	el \{\
+.		ie \\n(mN .nr tW \\n(mN
+.		el .nr tW \\$1
+.	\}
+.	nr tF 1
+.\}
+..
+.\"
+.de Dw
+.Tw \\$1
+..
+.\"
+.de Di
+.ie \\n(.$==0 \{\
+.	nr tI \\n(Dsu
+.\}
+.el \{\
+.	sW \\$1
+.	if \\n(sW>=2 \{\
+.		nr tI \\$1u
+.	\}
+.	if \\n(sW<2 \{\
+.		if "\\$1"L" \{\
+.			nr tI 0
+.		\}
+.	\}
+.\}
+..
+.\" tagged paragraph
+.\" initialize baby stack variables
+.nr np 0
+.nr p1 0
+.ds s\n(np
+.\"
+.de Tp
+.ie "\\$1"" .pE p s np
+.el \{\
+.	ds iM Tp
+.	mN \\$1
+.	ie \\n(tF \{\
+.		ds tC Tw
+.		nr tC 1
+.		nr tF 0
+.	\}
+.	el \{\
+.		if !"Tw"\\*(s\\n(np" \{\
+.			ie \\n(mN \{\
+.				ds tC \\$1
+.				nr tW \\n(mN
+.			\}
+.			el \{\
+.				ds tC Tx
+.				nr tW \\n(Tx
+.			\}
+.			if !"\\*(tC"\\*(s\\n(np" .nr tC 1
+.		\}
+.	\}
+.	sp \\n(vVu
+.	if !\\n(cR .ne 2
+.	if \\n(tC \{\
+.		nr np \\n(np+1
+.		nr p\\n(np \\n(tW
+.		ds s\\n(np \\*(tC
+.		nr tC 0
+.		ds tC
+.		in \\n(.iu+\\n(p\\n(npu
+.	\}
+.	ie \\n(mN \{\
+.		ds f1
+.		\\$1 \\$2 \\$3 \\$4 \\$5 \\$6 \\$7 \\$8 \\$9
+.		if !"\\$1"Cx" .pT st p np
+.	\}
+.	el \{\
+.		br
+.		ev 1
+.		fi
+.		di Td
+\&\\$1 \\$2 \\$3 \\$4 \\$5 \\$6 \\$7 \\$8 \\$9
+.		br
+.		di
+.		ev
+.		na
+.		ds tD \\*(Td\\
+.		pT di p np
+.	\}
+.\}
+..
+.\"
+.\"
+.\" Complex Expression Macro
+.\"
+.\"	 TODO: add length across line boundary check (like Li)
+.de Cx
+.hy 0
+.ie \\n(.$==0 \{\
+.	if "\\*(iM"Cx" \{\
+.		ds iM
+.		if \\n(oE .oE
+\&\\*(f1
+.		ds f1
+.	\}
+.	if "\\*(iM"Tp" .pT st p np
+.	if "\\*(iM"Dp" .pT st q mp
+.\}
+.el \{\
+.	if "\\*(iM"" \{\
+.		ds iM Cx
+.		ds f1 \&
+.	\}
+.	mN \\$1
+.\" Here are the args: `\\$1'  `\\$2'  `\\$3'  `\\$4'
+.	ie \\n(mN .\\$1 \\$2 \\$3 \\$4 \\$5 \\$6 \\$7 \\$8 \\$9
+.	el \{\
+.		as f1 \&\\$1
+.		if \\n(.$>1 .Cx \\$2 \\$3 \\$4 \\$5 \\$6 \\$7 \\$8 \\$9
+.	\}
+.\}
+..
+.\" Prefix string in default font to content specified string
+.de Pf
+.Cx \\$1
+.\\$2 \\$3 \\$4 \\$5
+.Cx
+..
+.\" Suffix string in default font to content specified string
+.de Sf
+.Cx \\$1 \\$2
+.Cx \\$3
+.Cx
+..
+.\" Simple Option Begin
+.de Ob
+.hy 0
+.ie "\\*(iM"" \{\
+.	ev 2
+.	fi
+.	di oB
+.\}
+.el \{\
+.tm shouldn't be here
+.	as f1 \&[
+.	mN \\$1
+.	ie \\n(mN .\\$1 \\$2 \\$3 \\$4 \\$5 \\$6 \\$7 \\$8 \\$9
+.	el \{\
+.		as f1 \&\\$1
+.		if \\n(.$>1 .Oc \\$2 \\$3 \\$4 \\$5 \\$6 \\$7 \\$8 \\$9
+.	\}
+.\}
+..
+.de Oc
+.as f1 \&\\$1
+.if \\n(.$>1 .Oc \\$2 \\$3 \\$4 \\$5 \\$6 \\$7 \\$8 \\$9
+..
+.de Oe
+.hy 0
+.ie "\\*(iM"" \{\
+.	br
+.	di
+.	ev
+.	ds bO \\*(oB\\
+\&[\\*(bO\&]
+.\}
+.el \{\
+.	as f1 \&]
+.\}
+..
+.\" White space for Cx
+.de Ws
+.Cx \&\ \&
+..
+.\" tagged paragraph
+.\" initialize baby stack variables
+.nr mp 0
+.nr q1 0
+.ds r\n(np
+.\"
+.\" Complex Dp tag
+.de Dc
+.Dp Cx \\$1 \\$2 \\$3 \\$4 \\$5 \\$6 \\$7 \\$8
+..
+.\" Complex Tp tag
+.de Tc
+.Tp Cx \\$1 \\$2 \\$3 \\$4 \\$5 \\$6 \\$7 \\$8
+..
+.\" Tag with a flag and an argument with a space
+.de Ta
+.if "\\$2"" \{\
+.	Tp Fl \\$1
+.\}
+.el \{\
+.	Tp Fl \\$1
+.	Cx \&\ \&
+.	Ar \\$2 \\$3
+.	Cx
+.\}
+..
+.de Da
+.Dp Cx Fl \\$1
+.Ws
+.Ar \\$2 \\$3
+.Cx
+..
+.de To
+.Tp Cx Fl \\$1
+.Ar \\$2 \\$3
+.Cx
+..
+.de Do
+.Dp Cx Fl \\$1
+.Ar \\$2 \\$3
+.Cx
+..
+.\" Blended tag toggle
+.de Bt
+.ie \\n(tP==0 .nr tP 1
+.el .nr tP 0
+..
+.\" Bullet paragraph
+.de Bu
+.Tp Sy \&\(bu
+..
+.\" Display tagged paragraph
+.de Dp
+.ie "\\$1"" \{\
+.	pE q r mp
+.	sp \\n(vVu
+.\}
+.el \{\
+.       ds iM Dp
+.       mN \\$1
+.       ie \\n(tF \{\
+.               ds tC Tw
+.               nr tC 1
+.               nr tF 0
+.       \}
+.       el \{\
+.               if !"Tw"\\*(r\\n(mp" \{\
+.                       ie \\n(mN \{\
+.                               ds tC \\$1
+.                               nr tW \\n(mN
+.                       \}
+.                       el \{\
+.                               ds tC Tx
+.                               nr tW \\n(Tx
+.                       \}
+.                       if !"\\*(tC"\\*(r\\n(mp" .nr tC 1
+.               \}
+.       \}
+.       if !\\n(cR .ne 2
+.       if \\n(tC \{\
+.               nr mp \\n(mp+1
+.               nr q\\n(mp \\n(tW
+.               ds r\\n(mp \\*(tC
+.               nr tC 0
+.               ds tC
+.		ie \\n(tIu==\\n(Dsu .nr i\\n(mp \\n(Dsu
+.		el \{\
+.			nr i\\n(mp \\n(tIu
+.			nr tI \\n(Dsu
+.		\}
+.              	in \\n(.iu+\\n(i\\n(mpu
+.		sp \\n(vVu
+.		in \\n(.iu+\\n(\\q\\n(mpu
+.       \}
+.       ie \\n(mN \{\
+.               \\$1 \\$2 \\$3 \\$4 \\$5 \\$6 \\$7 \\$8 \\$9
+.               if !"\\$1"Cx" .pT st q mp
+.       \}
+.       el \{\
+.               br
+.               ev 1
+.               fi
+.               di Td
+\&\\$1 \\$2 \\$3 \\$4 \\$5 \\$6 \\$7 \\$8 \\$9
+.               br
+.               di
+.               ev
+.               na
+.               ds tD \\*(Td\\
+.               pT di q mp
+.       \}
+.\}
+..
+.\"
+.\" .pE number_stack string_stack counter
+.de pE
+.ie "\\$3"mp" \{\
+.	in \\n(.iu-(\\n(\\$1\\n(\\$3u)-(\\n(i\\n(mpu)
+.	rr i\\n(mp
+.\}
+.el .in \\n(.iu-\\n(\\$1\\n(\\$3u
+.\" .in \\n(.iu-\\n(\\$1\\n(\\$3u
+.if \\n(\\$3<=0 .tm Extraneous call .Tp or .Dp
+.rr \\$1\\n(\\$3
+.rm \\$2\\n(\\$3
+.nr \\$3 \\n(\\$3-1
+.ds iM
+..
+.\"
+.\" .pT [st or di] number_stack counter
+.de pT
+.ie "\\$1"st" \{\
+.	nr bb \\n(\\$2\\n(\\$3u
+.	ti -\\n(bbu
+.	ie (\\n(\\$2\\n(\\$3u-2n)<=\w'\\*(f1'u \{\&\\*(f1\\*(tP
+.		if \\n(tP==0 .br
+.	\}
+.	el \\*(f1\h'|\\n(\\$2\\n(\\$3u'\c
+.\}
+.el \{\
+.       ti -\\n(\\$2\\n(\\$3u
+.	ie (\\n(\\$2\\n(\\$3u-2n)<=\\n(dlu \{\&\\*(tD\\*(tP
+.	       if !\\n(tP .br
+.	\}
+.	el \\*(tD\h'|\\n(\\$2\\n(\\$3u'\c
+.	if t 'ad
+.\}
+.	ds iM
+.	ds f1
+'fi
+..
+.\"
+.\" The new SH
+.\"
+.de Sh
+.\" set Sh state off, check for list state before calling indent (.In)
+.nr nS 0
+.nr sE 0
+.ie "\\$1"NAME" \{\
+.\"	name state on, housekeep (headers & footers)
+.	hK
+'	in 0
+.\}
+.el \{\
+.	if "\\$1"SYNOPSIS" .nr nS 1
+.	in 0
+.\}
+.pL
+'sp
+.ns
+.ta .5i 1i 1.5i 2i 2.5i 3i 3.5i 4i 4.5i 5i 5.5i 6i 6.5i
+.if !\\n(cR .ne 3
+'fi
+\&\fB\\$1 \|\\$2 \|\\$3 \|\\$4 \|\\$5 \|\\$6 \|\\$7 \|\\$8 \|\\$9
+\&\fP\&
+.in \\n(.iu+\\n(Tiu
+.if "\\$1"SEE" .nr sE 1
+.ns
+..
+.\"
+.\" Nd minus sign for an en dash used in .Sh Name
+.de Nd
+\&\-\& \\$1 \\$2 \\$3 \\$4 \\$5 \\$6 \\$7 \\$8 \\$9
+..
+.de Ss
+.sp
+.ti -.25i
+\&\fB\\$1 \|\\$2 \|\\$3 \|\\$4 \|\\$5 \|\\$6 \|\\$7 \|\\$8 \|\\$9
+\&\fP\&
+.ta .5i 1i 1.5i 2i 2.5i 3i 3.5i 4i 4.5i 5i 5.5i 6i 6.5i
+.if !\\n(cR .ne 2
+.br
+..
+.\"	.if "\\$1"Ss" .in \\n(.iu+\\n(sIu
+.\"..
+.\"
+.\"
+.\" Column Macro
+.\"
+.hy 0
+.de Cw
+.ie \\n(.$==0 \{\
+.	br
+.	in \\n(.iu-\\n(eWu
+.	ta .5i 1i 1.5i 2i 2.5i 3i 3.5i 4i 4.5i 5i 5.5i 6i 6.5i
+.\}
+.el \{\
+.	Pp
+.	if \\n(.$==1 \{\
+.		ta \w'\\$1    'u
+.		nr eW \w'\\$1    'u
+'		in \\n(.iu+\\n(eWu
+.	\}
+.	if \\n(.$==2 \{\
+.		ta \w'\\$1    'u +\w'\\$2    'u
+.		nr eW \w'\\$1    'u+\w'\\$2    'u
+'		in \\n(.iu+\\n(eWu
+.	\}
+.	if \\n(.$==3 \{\
+.		ta \w'\\$1    'u +\w'\\$2    'u +\w'\\$3    'u
+.		nr eW \w'\\$1    'u+\w'\\$2    'u+\w'\\$3    'u
+'		in \\n(.iu+\\n(eWu
+.	\}
+.	if \\n(.$==4 \{\
+.	ta \w'\\$1    'u +\w'\\$2    'u +\w'\\$3    'u +\w'\\$4    'u
+.	nr eW \w'\\$1    'u+\w'\\$2    'u+\w'\\$3    'u +\w'\\$4    'u
+'	in \\n(.iu+\\n(eWu
+.	\}
+.	if \\n(.$==5 \{\
+.ta \w'\\$1    'u +\w'\\$2    'u +\w'\\$3    'u +\w'\\$4    'u +\w'\\$5    'u
+.nr eW \w'\\$1    'u +\w'\\$2    'u +\w'\\$3    'u +\w'\\$4    'u +\w'\\$5    'u
+'	in \\n(.iu+\\n(eWu
+.	\}
+.\}
+..
+.de Cl
+.ti -\\n(eWu
+.mN \\$1
+.ie \\n(mN .\\$1 \\$2 \\$3 \\$4 \\$5 \\$6 \\$7 \\$8 \\$9
+.el \\$1 \\$2 \\$3 \\$4 \\$5 \\$6 \\$7 \\$8 \\$9
+..
+.nr dQ 0
+.de Ds
+.ie !"\\$1"" \{\
+.	mN d\\$1
+.	if \\n(mN \{\
+.		nr dQ \\n(dQ+1
+.		d\\$1
+.	\}
+.\}
+.el .br
+.nf
+..
+.de Df
+.ie !"\\$1"" \{\
+.       mN d\\$1
+.       if \\n(mN \{\
+.               nr dQ \\n(dQ+1
+.               d\\$1
+.       \}
+.\}
+.el .br
+..
+.de Dn
+\\$1 \\$2 \\$3 \\$4 \\$5 \\$6 \\$7 \\$8 \\$9
+.nf
+..
+.de dI
+.nr d\\n(dQ \\n(dIu
+.in \\n(.iu+\\n(dIu
+..
+.de dC
+.nr d\\n(dQ (\\n(.l-\\n(.i)/4u
+.in \\n(.iu+\\n(d\\n(dQu
+..
+.de dR
+.nr d\\n(dQ (\\n(.l/3)u
+.in \\n(.iu+\\n(d\\n(dQu
+..
+.de dL
+.nr aa 0
+..
+.de De
+.br
+.if \\n(d\\n(dQ \{\
+.	in \\n(.iu-\\n(d\\n(dQu
+.	rr d\\n(dQ
+.	nr dQ \\n(dQ-1
+.\}
+.fi
+..
+.\"
+.de Fn
+.ie \\n(.$==0 \{\
+.	tm Usage: .Fn function_name function_arg(s) ... \\*(Pu
+.\}
+.el \{\
+.	nr cF \\n(.f
+.	ie \\n(.$==1 .ds f1 \&\\*(nM\\$1\fP\\*(lP\fP\\*(rP\fP
+.	el \{\
+.		ds f1 \\*(nM\\$1\fP\\*(lP
+.		nr aa 0
+.		rC \\$2 \\$3 \\$4 \\$5 \\$6 \\$7 \\$8 \\$9
+.	\}
+.	if "\\*(iM"" \{\\&\\*(f1
+.		ds f1
+.	\}
+.\}
+..
+.\"
+.de rC
+.rZ \\$1
+.ie \\n(rZ \{\
+.	as f1 \f\\n(cF\\*(rP\f\\n(cF\\$1\\$2\\$3\\$4\\$5\\$6\\$7
+.\}
+.el \{\
+.	ie \\n(aa .as f1 \fP, \\*(aR\\$1
+.	el .as f1 \\*(aR\\$1
+.	nr aa 1
+.	ie \\n(.$>1 .rC \\$2 \\$3 \\$4 \\$5 \\$6 \\$7
+.	el .as f1 \fP\\*(rP\fP
+.\}
+..
diff -Nuar groff-1.22.3.old/tmac/doc-syms groff-1.22.3/tmac/doc-syms
--- groff-1.22.3.old/tmac/doc-syms	2014-11-04 10:38:35.533520146 +0200
+++ groff-1.22.3/tmac/doc-syms	1970-01-01 02:00:00.000000000 +0200
@@ -1,880 +0,0 @@
-.\" -*- nroff -*-
-.\"
-.\" Copyright (c) 1991, 1993
-.\"	The Regents of the University of California.  All rights reserved.
-.\"
-.\" Redistribution and use in source and binary forms, with or without
-.\" modification, are permitted provided that the following conditions
-.\" are met:
-.\" 1. Redistributions of source code must retain the above copyright
-.\"    notice, this list of conditions and the following disclaimer.
-.\" 2. Redistributions in binary form must reproduce the above copyright
-.\"    notice, this list of conditions and the following disclaimer in the
-.\"    documentation and/or other materials provided with the distribution.
-.\" 3. [Deleted.  See
-.\"     ftp://ftp.cs.berkeley.edu/pub/4bsd/README.Impt.License.Change]
-.\" 4. Neither the name of the University nor the names of its contributors
-.\"    may be used to endorse or promote products derived from this software
-.\"    without specific prior written permission.
-.\"
-.\" THIS SOFTWARE IS PROVIDED BY THE REGENTS AND CONTRIBUTORS ``AS IS'' AND
-.\" ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE
-.\" IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE
-.\" ARE DISCLAIMED.  IN NO EVENT SHALL THE REGENTS OR CONTRIBUTORS BE LIABLE
-.\" FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL
-.\" DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS
-.\" OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION)
-.\" HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT
-.\" LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY
-.\" OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF
-.\" SUCH DAMAGE.
-.\"
-.\"     @(#)doc-syms	8.1 (Berkeley) 06/08/93
-.\"
-.\"     %beginstrip%
-.
-.
-.eo
-.
-.\" NS Ux user macro
-.\" NS   print UNIX
-.\" NS
-.\" NS modifies:
-.\" NS   doc-arg-ptr
-.\" NS   doc-curr-font
-.\" NS   doc-curr-size
-.\" NS   doc-macro-name
-.\" NS
-.\" NS local variable:
-.\" NS   doc-str-Ux
-.\" NS
-.\" NS width register `Ux' defined in doc-common
-.
-.de Ux
-.  nr doc-curr-font \n[.f]
-.  nr doc-curr-size \n[.ps]
-.  ds doc-str-Ux \f[\n[doc-curr-font]]\s[\n[doc-curr-size]u]
-.
-.  if !\n[doc-arg-limit] \
-.    if \n[.$] \{\
-.      ds doc-macro-name Ux
-.      doc-parse-args \$@
-.    \}
-.
-.  \" replace current argument with result
-.  ds doc-arg\n[doc-arg-ptr] \*[doc-Tn-font-size]UNIX\*[doc-str-Ux]
-.  nr doc-type\n[doc-arg-ptr] 2
-.  ds doc-space\n[doc-arg-ptr] "\*[doc-space]
-.
-.  \" recompute space vector for remaining arguments
-.  nr doc-num-args (\n[doc-arg-limit] - \n[doc-arg-ptr])
-.  nr doc-arg-limit \n[doc-arg-ptr]
-.  if \n[doc-num-args] \
-.    doc-parse-space-vector
-.
-.  doc-print-recursive
-..
-.
-.
-.\" NS Bx user macro
-.\" NS   print BSD (fix smaller nroff version)
-.\" NS
-.\" NS modifies:
-.\" NS   doc-arg-ptr
-.\" NS   doc-curr-font
-.\" NS   doc-curr-size
-.\" NS   doc-macro-name
-.\" NS
-.\" NS local variable:
-.\" NS   doc-str-Bx
-.\" NS   doc-str-Bx1
-.\" NS   doc-str-Bx-XXX
-.\" NS
-.\" NS width register `Bx' defined in doc-common
-.
-.ds doc-str-Bx-Reno  \-Reno
-.ds doc-str-Bx-reno  \-Reno
-.ds doc-str-Bx-Tahoe \-Tahoe
-.ds doc-str-Bx-tahoe \-Tahoe
-.ds doc-str-Bx-Lite  \-Lite
-.ds doc-str-Bx-lite  \-Lite
-.ds doc-str-Bx-Lite2 \-Lite2
-.ds doc-str-Bx-lite2 \-Lite2
-.
-.de Bx
-.  nr doc-curr-font \n[.f]
-.  nr doc-curr-size \n[.ps]
-.  ds doc-str-Bx \f[\n[doc-curr-font]]\s[\n[doc-curr-size]u]
-.
-.  \" default value if no argument
-.  ds doc-str-Bx1 \*[doc-Tn-font-size]BSD\*[doc-str-Bx]
-.
-.  if !\n[doc-arg-limit] \
-.    if \n[.$] \{\
-.      ds doc-macro-name Bx
-.      doc-parse-args \$@
-.    \}
-.
-.  if (\n[doc-arg-limit] > \n[doc-arg-ptr]) \{\
-.    nr doc-arg-ptr +1
-.    ie (\n[doc-type\n[doc-arg-ptr]] == 2) \{\
-.      ie        "\*[doc-arg\n[doc-arg-ptr]]"-alpha" \
-.        as doc-str-Bx1 " (currently in alpha test)
-.      el \{ .ie "\*[doc-arg\n[doc-arg-ptr]]"-beta" \
-.        as doc-str-Bx1 " (currently in beta test)
-.      el \{ .ie "\*[doc-arg\n[doc-arg-ptr]]"-devel" \
-.        as doc-str-Bx1 " (currently under development)
-.      el \{\
-.        ds doc-str-Bx1 \&\*[doc-arg\n[doc-arg-ptr]]\^\*[doc-Tn-font-size]
-.        as doc-str-Bx1 BSD\*[doc-str-Bx]
-.
-.        if (\n[doc-arg-limit] > \n[doc-arg-ptr]) \{\
-.          nr doc-arg-ptr +1
-.          ie (\n[doc-type\n[doc-arg-ptr]] == 2) \{\
-.            ie (\n[doc-type\n[doc-arg-ptr]] == 2) \{\
-.              ie d doc-str-Bx-\*[doc-arg\n[doc-arg-ptr]] \
-.                as doc-str-Bx1 "\*[doc-str-Bx-\*[doc-arg\n[doc-arg-ptr]]]
-.              el \
-.                nr doc-arg-ptr -1
-.            \}
-.            el \
-.              nr doc-arg-ptr -1
-.          \}
-.          el \
-.            nr doc-arg-ptr -1
-.    \}\}\}\}\}
-.    el \
-.      nr doc-arg-ptr -1
-.  \}
-.
-.  \" replace current argument with result
-.  ds doc-arg\n[doc-arg-ptr] "\*[doc-str-Bx1]
-.  nr doc-type\n[doc-arg-ptr] 2
-.  ds doc-space\n[doc-arg-ptr] "\*[doc-space]
-.
-.  \" recompute space vector for remaining arguments
-.  nr doc-num-args (\n[doc-arg-limit] - \n[doc-arg-ptr])
-.  nr doc-arg-limit \n[doc-arg-ptr]
-.  if \n[doc-num-args] \
-.    doc-parse-space-vector
-.
-.  doc-print-recursive
-..
-.
-.
-.\" NS Ud user macro (not parsed, not callable)
-.\" NS   print "currently under development" (HISTORY section)
-.\" NS
-.\" NS width register `Ud' defined in doc-common
-.
-.de Ud
-.  nop \&currently under development.
-..
-.
-.
-.\" NS At user macro
-.\" NS   print AT&T UNIX
-.\" NS
-.\" NS modifies:
-.\" NS   doc-arg-ptr
-.\" NS   doc-curr-font
-.\" NS   doc-curr-size
-.\" NS   doc-macro-name
-.\" NS
-.\" NS local variable:
-.\" NS   doc-str-At
-.\" NS   doc-str-At1
-.\" NS   doc-str-At-XXX
-.\" NS
-.\" NS width register `At' defined in doc-common
-.
-.ds doc-str-At-32v \&Version\~32V
-.as doc-str-At-32v " \*[doc-Tn-font-size]AT&T UNIX\*[doc-str-At]
-.ds doc-str-At-v1  \&Version\~1
-.as doc-str-At-v1  " \*[doc-Tn-font-size]AT&T UNIX\*[doc-str-At]
-.ds doc-str-At-v2  \&Version\~2
-.as doc-str-At-v2  " \*[doc-Tn-font-size]AT&T UNIX\*[doc-str-At]
-.ds doc-str-At-v3  \&Version\~3
-.as doc-str-At-v3  " \*[doc-Tn-font-size]AT&T UNIX\*[doc-str-At]
-.ds doc-str-At-v4  \&Version\~4
-.as doc-str-At-v4  " \*[doc-Tn-font-size]AT&T UNIX\*[doc-str-At]
-.ds doc-str-At-v5  \&Version\~5
-.as doc-str-At-v5  " \*[doc-Tn-font-size]AT&T UNIX\*[doc-str-At]
-.ds doc-str-At-v6  \&Version\~6
-.as doc-str-At-v6  " \*[doc-Tn-font-size]AT&T UNIX\*[doc-str-At]
-.ds doc-str-At-v7  \&Version\~7
-.as doc-str-At-v7  " \*[doc-Tn-font-size]AT&T UNIX\*[doc-str-At]
-.ds doc-str-At-III \*[doc-Tn-font-size]AT&T\*[doc-str-At] System\~III
-.as doc-str-At-III " \*[doc-Tn-font-size]UNIX\*[doc-str-At]
-.ds doc-str-At-V   \*[doc-Tn-font-size]AT&T\*[doc-str-At] System\~V
-.as doc-str-At-V   " \*[doc-Tn-font-size]UNIX\*[doc-str-At]
-.ds doc-str-At-V.1 \*[doc-Tn-font-size]AT&T\*[doc-str-At] System\~V Release\~1
-.as doc-str-At-V.1 " \*[doc-Tn-font-size]UNIX\*[doc-str-At]
-.ds doc-str-At-V.2 \*[doc-Tn-font-size]AT&T\*[doc-str-At] System\~V Release\~2
-.as doc-str-At-V.2 " \*[doc-Tn-font-size]UNIX\*[doc-str-At]
-.ds doc-str-At-V.3 \*[doc-Tn-font-size]AT&T\*[doc-str-At] System\~V Release\~3
-.as doc-str-At-V.3 " \*[doc-Tn-font-size]UNIX\*[doc-str-At]
-.ds doc-str-At-V.4 \*[doc-Tn-font-size]AT&T\*[doc-str-At] System\~V Release\~4
-.as doc-str-At-V.4 " \*[doc-Tn-font-size]UNIX\*[doc-str-At]
-.
-.de At
-.  nr doc-curr-font \n[.f]
-.  nr doc-curr-size \n[.ps]
-.  ds doc-str-At \f[\n[doc-curr-font]]\s[\n[doc-curr-size]u]
-.
-.  \" default value if no argument
-.  ds doc-str-At1 \*[doc-Tn-font-size]AT&T UNIX\*[doc-str-At]
-.
-.  if !\n[doc-arg-limit] \
-.    if \n[.$] \{\
-.      ds doc-macro-name At
-.      doc-parse-args \$@
-.    \}
-.
-.  if (\n[doc-arg-limit] > \n[doc-arg-ptr]) \{\
-.    nr doc-arg-ptr +1
-.    ie (\n[doc-type\n[doc-arg-ptr]] == 2) \{\
-.      ie \A\*[doc-arg\n[doc-arg-ptr]] \{\
-.        ie d doc-str-At-\*[doc-arg\n[doc-arg-ptr]] \
-.          ds doc-str-At1 "\*[doc-str-At-\*[doc-arg\n[doc-arg-ptr]]]
-.        el \{\
-.          tmc mdoc warning: .At: Unknown AT&T UNIX version
-.          tm1 " `\*[doc-arg\n[doc-arg-ptr]]' (#\n[.c])
-.          nr doc-arg-ptr -1
-.      \}\}
-.      el \
-.        nr doc-arg-ptr -1
-.    \}
-.    el \
-.      nr doc-arg-ptr -1
-.  \}
-.
-.  \" replace current argument with result
-.  ds doc-arg\n[doc-arg-ptr] "\*[doc-str-At1]
-.  nr doc-type\n[doc-arg-ptr] 2
-.  ds doc-space\n[doc-arg-ptr] "\*[doc-space]
-.
-.  \" recompute space vector for remaining arguments
-.  nr doc-num-args (\n[doc-arg-limit] - \n[doc-arg-ptr])
-.  nr doc-arg-limit \n[doc-arg-ptr]
-.  if \n[doc-num-args] \
-.    doc-parse-space-vector
-.
-.  doc-print-recursive
-..
-.
-.
-.\" NS Dx user macro
-.\" NS   print DragonFly
-.\" NS
-.\" NS modifies:
-.\" NS   doc-arg-ptr
-.\" NS   doc-curr-font
-.\" NS   doc-curr-size
-.\" NS   doc-macro-name
-.\" NS
-.\" NS local variable:
-.\" NS   doc-str-Dx
-.\" NS   doc-str-Dx1
-.\" NS
-.\" NS width register `Dx' defined in doc-common
-.
-.\" we use the doc-operating-system-DragonFly-* strings defined in doc-common
-.
-.de Dx
-.  nr doc-curr-font \n[.f]
-.  nr doc-curr-size \n[.ps]
-.  ds doc-str-Dx \f[\n[doc-curr-font]]\s[\n[doc-curr-size]u]
-.
-.  \" default value if no argument
-.  ds doc-str-Dx1 \*[doc-Tn-font-size]\%DragonFly\*[doc-str-Dx]
-.
-.  if !\n[doc-arg-limit] \
-.    if \n[.$] \{\
-.      ds doc-macro-name Dx
-.      doc-parse-args \$@
-.    \}
-.
-.  if (\n[doc-arg-limit] > \n[doc-arg-ptr]) \{\
-.    nr doc-arg-ptr +1
-.    ie (\n[doc-type\n[doc-arg-ptr]] == 2) \{\
-.      ie \A\*[doc-arg\n[doc-arg-ptr]] \{\
-.        ie d doc-operating-system-DragonFly-\*[doc-arg\n[doc-arg-ptr]] \
-.          as doc-str-Dx1 \~\*[doc-operating-system-DragonFly-\*[doc-arg\n[doc-arg-ptr]]]
-.        el \{\
-.          tmc mdoc warning: .Dx: Unknown DragonFly version
-.          tm1 " `\*[doc-arg\n[doc-arg-ptr]]' (#\n[.c])
-.          as doc-str-Dx1 \~\*[doc-arg\n[doc-arg-ptr]]
-.      \}\}
-.      el \
-.        as doc-str-Dx1 \~\*[doc-arg\n[doc-arg-ptr]]
-.    \}
-.    el \
-.      nr doc-arg-ptr -1
-.  \}
-.
-.  \" replace current argument with result
-.  ds doc-arg\n[doc-arg-ptr] "\*[doc-str-Dx1]
-.  nr doc-type\n[doc-arg-ptr] 2
-.  ds doc-space\n[doc-arg-ptr] "\*[doc-space]
-.
-.  \" recompute space vector for remaining arguments
-.  nr doc-num-args (\n[doc-arg-limit] - \n[doc-arg-ptr])
-.  nr doc-arg-limit \n[doc-arg-ptr]
-.  if \n[doc-num-args] \
-.    doc-parse-space-vector
-.
-.  doc-print-recursive
-..
-.
-.
-.\" NS Fx user macro
-.\" NS   print FreeBSD
-.\" NS
-.\" NS modifies:
-.\" NS   doc-arg-ptr
-.\" NS   doc-curr-font
-.\" NS   doc-curr-size
-.\" NS   doc-macro-name
-.\" NS
-.\" NS local variable:
-.\" NS   doc-str-Fx
-.\" NS   doc-str-Fx1
-.\" NS
-.\" NS width register `Fx' defined in doc-common
-.
-.\" we use the doc-operating-system-FreeBSD-* strings defined in doc-common
-.
-.de Fx
-.  nr doc-curr-font \n[.f]
-.  nr doc-curr-size \n[.ps]
-.  ds doc-str-Fx \f[\n[doc-curr-font]]\s[\n[doc-curr-size]u]
-.
-.  \" default value if no argument
-.  ds doc-str-Fx1 \*[doc-Tn-font-size]\%FreeBSD\*[doc-str-Fx]
-.
-.  if !\n[doc-arg-limit] \
-.    if \n[.$] \{\
-.      ds doc-macro-name Fx
-.      doc-parse-args \$@
-.    \}
-.
-.  if (\n[doc-arg-limit] > \n[doc-arg-ptr]) \{\
-.    nr doc-arg-ptr +1
-.    ie (\n[doc-type\n[doc-arg-ptr]] == 2) \{\
-.      ie \A\*[doc-arg\n[doc-arg-ptr]] \{\
-.        ie d doc-operating-system-FreeBSD-\*[doc-arg\n[doc-arg-ptr]] \
-.          as doc-str-Fx1 \~\*[doc-operating-system-FreeBSD-\*[doc-arg\n[doc-arg-ptr]]]
-.        el \{\
-.          tmc mdoc warning: .Fx: Unknown FreeBSD version
-.          tm1 " `\*[doc-arg\n[doc-arg-ptr]]' (#\n[.c])
-.          as doc-str-Fx1 \~\*[doc-arg\n[doc-arg-ptr]]
-.      \}\}
-.      el \
-.        as doc-str-Fx1 \~\*[doc-arg\n[doc-arg-ptr]]
-.    \}
-.    el \
-.      nr doc-arg-ptr -1
-.  \}
-.
-.  \" replace current argument with result
-.  ds doc-arg\n[doc-arg-ptr] "\*[doc-str-Fx1]
-.  nr doc-type\n[doc-arg-ptr] 2
-.  ds doc-space\n[doc-arg-ptr] "\*[doc-space]
-.
-.  \" recompute space vector for remaining arguments
-.  nr doc-num-args (\n[doc-arg-limit] - \n[doc-arg-ptr])
-.  nr doc-arg-limit \n[doc-arg-ptr]
-.  if \n[doc-num-args] \
-.    doc-parse-space-vector
-.
-.  doc-print-recursive
-..
-.
-.
-.\" NS Nx user macro
-.\" NS   print NetBSD
-.\" NS
-.\" NS modifies:
-.\" NS   doc-arg-ptr
-.\" NS   doc-curr-font
-.\" NS   doc-curr-size
-.\" NS   doc-macro-name
-.\" NS
-.\" NS local variable:
-.\" NS   doc-str-Nx
-.\" NS   doc-str-Nx1
-.\" NS
-.\" NS width register `Nx' defined in doc-common
-.
-.\" we use the doc-operating-system-NetBSD-* strings defined in doc-common
-.
-.de Nx
-.  nr doc-curr-font \n[.f]
-.  nr doc-curr-size \n[.ps]
-.  ds doc-str-Nx \f[\n[doc-curr-font]]\s[\n[doc-curr-size]u]
-.
-.  \" default value if no argument
-.  ds doc-str-Nx1 \*[doc-Tn-font-size]\%N\s[\n[doc-curr-size]u]et
-.  as doc-str-Nx1 \*[doc-Tn-font-size]BSD\*[doc-str-Nx]
-.
-.  if !\n[doc-arg-limit] \
-.    if \n[.$] \{\
-.      ds doc-macro-name Nx
-.      doc-parse-args \$@
-.    \}
-.
-.  if (\n[doc-arg-limit] > \n[doc-arg-ptr]) \{\
-.    nr doc-arg-ptr +1
-.    ie (\n[doc-type\n[doc-arg-ptr]] == 2) \{\
-.      ie \A\*[doc-arg\n[doc-arg-ptr]] \{\
-.        ie d doc-operating-system-NetBSD-\*[doc-arg\n[doc-arg-ptr]] \
-.          as doc-str-Nx1 \~\*[doc-operating-system-NetBSD-\*[doc-arg\n[doc-arg-ptr]]]
-.        el \{\
-.          tmc mdoc warning: .Nx: Unknown NetBSD version
-.          tm1 " `\*[doc-arg\n[doc-arg-ptr]]' (#\n[.c])
-.          as doc-str-Nx1 \~\*[doc-arg\n[doc-arg-ptr]]
-.      \}\}
-.      el \
-.        as doc-str-Nx1 \~\*[doc-arg\n[doc-arg-ptr]]
-.    \}
-.    el \
-.      nr doc-arg-ptr -1
-.  \}
-.
-.  \" replace current argument with result
-.  ds doc-arg\n[doc-arg-ptr] "\*[doc-str-Nx1]
-.  nr doc-type\n[doc-arg-ptr] 2
-.  ds doc-space\n[doc-arg-ptr] "\*[doc-space]
-.
-.  \" recompute space vector for remaining arguments
-.  nr doc-num-args (\n[doc-arg-limit] - \n[doc-arg-ptr])
-.  nr doc-arg-limit \n[doc-arg-ptr]
-.  if \n[doc-num-args] \
-.    doc-parse-space-vector
-.
-.  doc-print-recursive
-..
-.
-.
-.\" NS Ox user macro
-.\" NS   print OpenBSD
-.\" NS
-.\" NS modifies:
-.\" NS   doc-arg-ptr
-.\" NS   doc-curr-font
-.\" NS   doc-curr-size
-.\" NS   doc-macro-name
-.\" NS
-.\" NS local variable:
-.\" NS   doc-str-Ox
-.\" NS   doc-str-Ox1
-.\" NS
-.\" NS width register `Ox' defined in doc-common
-.
-.de Ox
-.  nr doc-curr-font \n[.f]
-.  nr doc-curr-size \n[.ps]
-.  ds doc-str-Ox \f[\n[doc-curr-font]]\s[\n[doc-curr-size]u]
-.
-.  \" default value if no argument
-.  ds doc-str-Ox1 \*[doc-Tn-font-size]\%OpenBSD\*[doc-str-Ox]
-.
-.  if !\n[doc-arg-limit] \
-.    if \n[.$] \{\
-.      ds doc-macro-name Ox
-.      doc-parse-args \$@
-.    \}
-.
-.  if (\n[doc-arg-limit] > \n[doc-arg-ptr]) \{\
-.    nr doc-arg-ptr +1
-.    ie (\n[doc-type\n[doc-arg-ptr]] == 2) \
-.      as doc-str-Ox1 \~\*[doc-arg\n[doc-arg-ptr]]
-.    el \
-.      nr doc-arg-ptr -1
-.  \}
-.
-.  \" replace current argument with result
-.  ds doc-arg\n[doc-arg-ptr] "\*[doc-str-Ox1]
-.  nr doc-type\n[doc-arg-ptr] 2
-.  ds doc-space\n[doc-arg-ptr] "\*[doc-space]
-.
-.  \" recompute space vector for remaining arguments
-.  nr doc-num-args (\n[doc-arg-limit] - \n[doc-arg-ptr])
-.  nr doc-arg-limit \n[doc-arg-ptr]
-.  if \n[doc-num-args] \
-.    doc-parse-space-vector
-.
-.  doc-print-recursive
-..
-.
-.
-.\" NS Bsx user macro
-.\" NS   print BSD/OS
-.\" NS
-.\" NS modifies:
-.\" NS   doc-arg-ptr
-.\" NS   doc-curr-font
-.\" NS   doc-curr-size
-.\" NS   doc-macro-name
-.\" NS
-.\" NS local variable:
-.\" NS   doc-str-Bsx
-.\" NS   doc-str-Bsx1
-.\" NS
-.\" NS width register `Bsx' defined in doc-common
-.
-.de Bsx
-.  nr doc-curr-font \n[.f]
-.  nr doc-curr-size \n[.ps]
-.  ds doc-str-Bsx \f[\n[doc-curr-font]]\s[\n[doc-curr-size]u]
-.
-.  \" default value if no argument
-.  ds doc-str-Bsx1 \*[doc-Tn-font-size]BSD/OS\*[doc-str-Bsx]
-.
-.  if !\n[doc-arg-limit] \
-.    if \n[.$] \{\
-.      ds doc-macro-name Bsx
-.      doc-parse-args \$@
-.    \}
-.
-.  if (\n[doc-arg-limit] > \n[doc-arg-ptr]) \{\
-.    nr doc-arg-ptr +1
-.    ie (\n[doc-type\n[doc-arg-ptr]] == 2) \
-.      as doc-str-Bsx1 \~\*[doc-arg\n[doc-arg-ptr]]
-.    el \
-.      nr doc-arg-ptr -1
-.  \}
-.
-.  \" replace current argument with result
-.  ds doc-arg\n[doc-arg-ptr] "\*[doc-str-Bsx1]
-.  nr doc-type\n[doc-arg-ptr] 2
-.  ds doc-space\n[doc-arg-ptr] "\*[doc-space]
-.
-.  \" recompute space vector for remaining arguments
-.  nr doc-num-args (\n[doc-arg-limit] - \n[doc-arg-ptr])
-.  nr doc-arg-limit \n[doc-arg-ptr]
-.  if \n[doc-num-args] \
-.    doc-parse-space-vector
-.
-.  doc-print-recursive
-..
-.
-.
-.\" The Bt macro should go away now
-.
-.\" NS Bt user macro (not parsed, not callable)
-.\" NS   print "is currently in beta test." (HISTORY section)
-.\" NS
-.\" NS width register `Bt' defined in doc-common
-.
-.de Bt
-.  nop \&is currently in beta test.
-..
-.
-.
-.\" NS Px user macro
-.\" NS   print POSIX
-.
-.ds Px \*[doc-Tn-font-size]\%POSIX
-.
-.
-.\" NS Ai user macro
-.\" NS   print ANSI
-.
-.ds Ai \*[doc-Tn-font-size]\%ANSI
-.
-.
-.\" NS St user macro
-.\" NS   standards (posix, ansi - formal standard names)
-.\" NS
-.\" NS modifies:
-.\" NS   doc-arg-ptr
-.\" NS   doc-curr-font
-.\" NS   doc-curr-size
-.\" NS   doc-macro-name
-.\" NS
-.\" NS local variable:
-.\" NS   doc-reg-St
-.\" NS   doc-str-St
-.\" NS   doc-str-St1
-.\" NS   doc-str-St-XXX
-.\" NS
-.\" NS width register `St' defined in doc-common
-.
-.\" ANSI/ISO C
-.ds doc-str-St--ansiC-89       \*[Ai] \*[doc-str-St]X\^3.159-1989
-.as doc-str-St--ansiC-89       " (\*[Lq]\)\*[Ai]\~C89\*[doc-str-St]\*[Rq])
-.als doc-str-St--ansiC doc-str-St--ansiC-89
-.ds doc-str-St--isoC           \*[doc-Tn-font-size]ISO/IEC\*[doc-str-St] 9899:1990
-.as doc-str-St--isoC           " (\*[Lq]\*[doc-Tn-font-size]ISO\~C\^90\*[doc-str-St]\*[Rq])
-.als doc-str-St--isoC-90 doc-str-St--isoC
-.ds doc-str-St--isoC-2011      \*[doc-Tn-font-size]ISO/IEC\*[doc-str-St] 9899:2011
-.as doc-str-St--isoC-2011      " (\*[Lq]\*[doc-Tn-font-size]ISO\~C\^11\*[doc-str-St]\*[Rq])
-.ds doc-str-St--isoC-99        \*[doc-Tn-font-size]ISO/IEC\*[doc-str-St] 9899:1999
-.as doc-str-St--isoC-99        " (\*[Lq]\*[doc-Tn-font-size]ISO\~C\^99\*[doc-str-St]\*[Rq])
-.ds doc-str-St--isoC-amd1       \*[doc-Tn-font-size]ISO/IEC\*[doc-str-St] 9899/AMD1:1995
-.as doc-str-St--isoC-amd1       " (\*[Lq]\*[doc-Tn-font-size]ISO\~C\^90\*[doc-str-St], Amendment 1\*[Rq])
-.ds doc-str-St--isoC-tcor1      \*[doc-Tn-font-size]ISO/IEC\*[doc-str-St] 9899/TCOR1:1994
-.as doc-str-St--isoC-tcor1      " (\*[Lq]\*[doc-Tn-font-size]ISO\~C\^90\*[doc-str-St], Technical Corrigendum 1\*[Rq])
-.ds doc-str-St--isoC-tcor2      \*[doc-Tn-font-size]ISO/IEC\*[doc-str-St] 9899/TCOR2:1995
-.as doc-str-St--isoC-tcor2      " (\*[Lq]\*[doc-Tn-font-size]ISO\~C\^90\*[doc-str-St], Technical Corrigendum 2\*[Rq])
-.
-.\" POSIX Part 1: System API
-.ds doc-str-St--p1003.1        \*[doc-Tn-font-size]\%IEEE\*[doc-str-St] Std 1003.1
-.as doc-str-St--p1003.1        " (\*[Lq]\)\*[Px]\*[doc-str-St].1\*[Rq])
-.ds doc-str-St--p1003.1b       \*[doc-Tn-font-size]\%IEEE\*[doc-str-St] Std 1003.1b
-.as doc-str-St--p1003.1b       " (\*[Lq]\)\*[Px]\*[doc-str-St].1\*[Rq])
-.ds doc-str-St--p1003.1-88     \*[doc-Tn-font-size]\%IEEE\*[doc-str-St] Std 1003.1-1988
-.as doc-str-St--p1003.1-88     " (\*[Lq]\)\*[Px]\*[doc-str-St].1\*[Rq])
-.ds doc-str-St--p1003.1-90     \*[doc-Tn-font-size]ISO/IEC\*[doc-str-St] 9945-1:1990
-.as doc-str-St--p1003.1-90     " (\*[Lq]\)\*[Px]\*[doc-str-St].1\*[Rq])
-.als doc-str-St--iso9945-1-90 doc-str-St--p1003.1-90
-.ds doc-str-St--p1003.1b-93    \*[doc-Tn-font-size]\%IEEE\*[doc-str-St] Std 1003.1b-1993
-.as doc-str-St--p1003.1b-93    " (\*[Lq]\)\*[Px]\*[doc-str-St].1\*[Rq])
-.ds doc-str-St--p1003.1c-95    \*[doc-Tn-font-size]\%IEEE\*[doc-str-St] Std 1003.1c-1995
-.as doc-str-St--p1003.1c-95    " (\*[Lq]\)\*[Px]\*[doc-str-St].1\*[Rq])
-.ds doc-str-St--p1003.1i-95    \*[doc-Tn-font-size]\%IEEE\*[doc-str-St] Std 1003.1i-1995
-.as doc-str-St--p1003.1i-95    " (\*[Lq]\)\*[Px]\*[doc-str-St].1\*[Rq])
-.ds doc-str-St--p1003.1-96     \*[doc-Tn-font-size]ISO/IEC\*[doc-str-St] 9945-1:1996
-.as doc-str-St--p1003.1-96     " (\*[Lq]\)\*[Px]\*[doc-str-St].1\*[Rq])
-.als doc-str-St--iso9945-1-96 doc-str-St--p1003.1-96
-.ds doc-str-St--p1003.1g-2000  \*[doc-Tn-font-size]\%IEEE\*[doc-str-St] Std 1003.1g-2000
-.as doc-str-St--p1003.1g-2000  " (\*[Lq]\)\*[Px]\*[doc-str-St].1\*[Rq])
-.ds doc-str-St--p1003.1-2001   \*[doc-Tn-font-size]\%IEEE\*[doc-str-St] Std 1003.1-2001
-.as doc-str-St--p1003.1-2001   " (\*[Lq]\)\*[Px]\*[doc-str-St].1\*[Rq])
-.ds doc-str-St--p1003.1-2004   \*[doc-Tn-font-size]\%IEEE\*[doc-str-St] Std 1003.1-2004
-.as doc-str-St--p1003.1-2004   " (\*[Lq]\)\*[Px]\*[doc-str-St].1\*[Rq])
-.ds doc-str-St--p1003.1-2008   \*[doc-Tn-font-size]\%IEEE\*[doc-str-St] Std 1003.1-2008
-.as doc-str-St--p1003.1-2008   " (\*[Lq]\)\*[Px]\*[doc-str-St].1\*[Rq])
-.
-.\" POSIX Part 2: Shell and Utilities
-.ds doc-str-St--p1003.2        \*[doc-Tn-font-size]\%IEEE\*[doc-str-St] Std 1003.2
-.as doc-str-St--p1003.2        " (\*[Lq]\)\*[Px]\*[doc-str-St].2\*[Rq])
-.ds doc-str-St--p1003.2-92     \*[doc-Tn-font-size]\%IEEE\*[doc-str-St] Std 1003.2-1992
-.as doc-str-St--p1003.2-92     " (\*[Lq]\)\*[Px]\*[doc-str-St].2\*[Rq])
-.ds doc-str-St--p1003.2a-92    \*[doc-Tn-font-size]\%IEEE\*[doc-str-St] Std 1003.2a-1992
-.as doc-str-St--p1003.2a-92    " (\*[Lq]\)\*[Px]\*[doc-str-St].2\*[Rq])
-.ds doc-str-St--iso9945-2-93   \*[doc-Tn-font-size]ISO/IEC\*[doc-str-St] 9945-2:1993
-.as doc-str-St--iso9945-2-93   " (\*[Lq]\)\*[Px]\*[doc-str-St].2\*[Rq])
-.
-.\" X/Open
-.ds doc-str-St--susv2          Version\~2 of the Single \*[doc-Tn-font-size]UNIX\*[doc-str-St] Specification
-.as doc-str-St--susv2          " (\*[Lq]\*[doc-Tn-font-size]SUSv2\*[doc-str-St]\*[Rq])
-.ds doc-str-St--susv3          Version\~3 of the Single \*[doc-Tn-font-size]UNIX\*[doc-str-St] Specification
-.as doc-str-St--susv3          " (\*[Lq]\*[doc-Tn-font-size]SUSv3\*[doc-str-St]\*[Rq])
-.ds doc-str-St--svid4          System\~V Interface Definition, Fourth Edition
-.as doc-str-St--svid4          " (\*[Lq]\*[doc-Tn-font-size]SVID\*[doc-str-St]\^4\*[Rq])
-.ds doc-str-St--xbd5           \*[doc-Tn-font-size]X/Open\*[doc-str-St] Base Definitions Issue\~5
-.as doc-str-St--xbd5           " (\*[Lq]\*[doc-Tn-font-size]XBD\*[doc-str-St]\^5\*[Rq])
-.ds doc-str-St--xcu5           \*[doc-Tn-font-size]X/Open\*[doc-str-St] Commands and Utilities Issue\~5
-.as doc-str-St--xcu5           " (\*[Lq]\*[doc-Tn-font-size]XCU\*[doc-str-St]\^5\*[Rq])
-.ds doc-str-St--xcurses4.2     \*[doc-Tn-font-size]X/Open\*[doc-str-St] Curses Issue\~4, Version\~2
-.as doc-str-St--xcurses4.2     " (\*[Lq]\*[doc-Tn-font-size]XCURSES\*[doc-str-St]\^4.2\*[Rq])
-.ds doc-str-St--xns5           \*[doc-Tn-font-size]X/Open\*[doc-str-St] Networking Services Issue\~5
-.as doc-str-St--xns5           " (\*[Lq]\*[doc-Tn-font-size]XNS\*[doc-str-St]\^5\*[Rq])
-.ds doc-str-St--xns5.2         \*[doc-Tn-font-size]X/Open\*[doc-str-St] Networking Services Issue\~5.2
-.as doc-str-St--xns5.2         " (\*[Lq]\*[doc-Tn-font-size]XNS\*[doc-str-St]\^5.2\*[Rq])
-.ds doc-str-St--xpg3           \*[doc-Tn-font-size]X/Open\*[doc-str-St] Portability Guide Issue\~3
-.as doc-str-St--xpg3           " (\*[Lq]\*[doc-Tn-font-size]XPG\*[doc-str-St]\^3\*[Rq])
-.ds doc-str-St--xpg4           \*[doc-Tn-font-size]X/Open\*[doc-str-St] Portability Guide Issue\~4
-.as doc-str-St--xpg4           " (\*[Lq]\*[doc-Tn-font-size]XPG\*[doc-str-St]\^4\*[Rq])
-.ds doc-str-St--xpg4.2         \*[doc-Tn-font-size]X/Open\*[doc-str-St] Portability Guide Issue\~4, Version\~2
-.as doc-str-St--xpg4.2         " (\*[Lq]\*[doc-Tn-font-size]XPG\*[doc-str-St]\^4.2\*[Rq])
-.ds doc-str-St--xsh5           \*[doc-Tn-font-size]X/Open\*[doc-str-St] System Interfaces and Headers Issue\~5
-.as doc-str-St--xsh5           " (\*[Lq]\*[doc-Tn-font-size]XSH\*[doc-str-St]\^5\*[Rq])
-.
-.\" Miscellaneous
-.ds doc-str-St--ieee754        \*[doc-Tn-font-size]\%IEEE\*[doc-str-St] Std 754-1985
-.ds doc-str-St--ieee1275-94     \*[doc-Tn-font-size]\%IEEE\*[doc-str-St] Std 1275-1994
-.as doc-str-St--ieee1275-94     " (\*[Lq]\*[doc-Tn-font-size]Open Firmware\*[doc-str-St]\*[Rq])
-.ds doc-str-St--iso8601        \*[doc-Tn-font-size]ISO\*[doc-str-St] 8601
-.ds doc-str-St--iso8802-3      \*[doc-Tn-font-size]ISO/IEC\*[doc-str-St] 8802-3:1989
-.
-.de St
-.  if !\n[doc-arg-limit] \{\
-.    ie \n[.$] \{\
-.      ds doc-macro-name St
-.      doc-parse-args \$@
-.    \}
-.    el \
-.      doc-St-usage
-.  \}
-.
-.  if !\n[doc-arg-limit] \
-.    return
-.
-.  nr doc-arg-ptr +1
-.  ie (\n[doc-arg-limit] >= \n[doc-arg-ptr]) \{\
-.    nr doc-curr-font \n[.f]
-.    nr doc-curr-size \n[.ps]
-.    ds doc-str-St \f[\n[doc-curr-font]]\s[\n[doc-curr-size]u]
-.
-.    ds doc-str-St1
-.    ie \A\*[doc-arg\n[doc-arg-ptr]] \{\
-.      ie d doc-str-St-\*[doc-arg\n[doc-arg-ptr]] \
-.        ds doc-str-St1 "\*[doc-str-St-\*[doc-arg\n[doc-arg-ptr]]]
-.      el \{\
-.        tmc "mdoc warning: .St: Unknown standard abbreviation
-.        tm1 " `\*[doc-arg\n[doc-arg-ptr]]' (#\n[.c])
-.        tm1 "              Please refer to the groff_mdoc(7) manpage for a
-.        tm1 "              list of available standard abbreviations.
-.    \}\}
-.    el \
-.      doc-St-usage
-.
-.    \" replacing argument with result
-.    ds doc-arg\n[doc-arg-ptr] "\*[doc-str-St1]
-.
-.    doc-print-recursive
-.  \}
-.  el \{\
-.    doc-St-usage
-.    doc-reset-args
-.  \}
-..
-.
-.
-.\" NS doc-St-usage macro
-.
-.de doc-St-usage
-.  tm1 "Usage: .St standard (#\n[.c])
-.  tm1 "       Please refer to the groff_mdoc(7) manpage for a list of
-.  tm1 "       available standard abbreviations.
-..
-.
-.
-.\" NS Lb user macro
-.\" NS   formal library names for LIBRARY sections
-.\" NS
-.\" NS modifies:
-.\" NS   doc-arg-ptr
-.\" NS   doc-curr-font
-.\" NS   doc-curr-size
-.\" NS   doc-macro-name
-.\" NS
-.\" NS local variable:
-.\" NS   doc-reg-Lb
-.\" NS   doc-str-Lb
-.\" NS   doc-str-Lb1
-.\" NS   doc-str-Lb-XXX
-.\" NS
-.\" NS width register `Lb' defined in doc-common
-.
-.ds doc-str-Lb-libarchive  Reading and Writing Streaming Archives Library (libarchive, \-larchive)
-.ds doc-str-Lb-libarm      ARM Architecture Library (libarm, \-larm)
-.ds doc-str-Lb-libarm32    ARM32 Architecture Library (libarm32, \-larm32)
-.ds doc-str-Lb-libbluetooth Bluetooth Library (libbluetooth, \-lbluetooth)
-.ds doc-str-Lb-libbsm      Basic Security Module Library (libbsm, \-lbsm)
-.ds doc-str-Lb-libc        Standard C\~Library (libc, \-lc)
-.ds doc-str-Lb-libc_r      Reentrant C\~Library (libc_r, \-lc_r)
-.ds doc-str-Lb-libcalendar Calendar Arithmetic Library (libcalendar, \-lcalendar)
-.ds doc-str-Lb-libcam      Common Access Method User Library (libcam, \-lcam)
-.ds doc-str-Lb-libcdk      Curses Development Kit Library (libcdk, \-lcdk)
-.ds doc-str-Lb-libcipher   FreeSec Crypt Library (libcipher, \-lcipher)
-.ds doc-str-Lb-libcompat   Compatibility Library (libcompat, \-lcompat)
-.ds doc-str-Lb-libcrypt    Crypt Library (libcrypt, \-lcrypt)
-.ds doc-str-Lb-libcurses   Curses Library (libcurses, \-lcurses)
-.ds doc-str-Lb-libdevinfo  Device and Resource Information Utility Library (libdevinfo, \-ldevinfo)
-.ds doc-str-Lb-libdevstat  Device Statistics Library (libdevstat, \-ldevstat)
-.ds doc-str-Lb-libdisk     Interface to Slice and Partition Labels Library (libdisk, \-ldisk)
-.ds doc-str-Lb-libdwarf    DWARF Access Library (libdwarf, \-ldwarf)
-.ds doc-str-Lb-libedit     Command Line Editor Library (libedit, \-ledit)
-.ds doc-str-Lb-libelf      ELF Access Library (libelf, \-lelf)
-.ds doc-str-Lb-libevent    Event Notification Library (libevent, \-levent)
-.ds doc-str-Lb-libfetch    File Transfer Library for URLs (libfetch, \-lfetch)
-.ds doc-str-Lb-libform     Curses Form Library (libform, \-lform)
-.ds doc-str-Lb-libgeom     Userland API Library for kernel GEOM subsystem (libgeom, \-lgeom)
-.ds doc-str-Lb-libgpib     General-Purpose Instrument Bus (GPIB) library (libgpib, \-lgpib)
-.ds doc-str-Lb-libi386     i386 Architecture Library (libi386, \-li386)
-.ds doc-str-Lb-libintl     Internationalized Message Handling Library (libintl, \-lintl)
-.ds doc-str-Lb-libipsec    IPsec Policy Control Library (libipsec, \-lipsec)
-.ds doc-str-Lb-libipx      IPX Address Conversion Support Library (libipx, \-lipx)
-.ds doc-str-Lb-libiscsi    iSCSI protocol library (libiscsi, \-liscsi)
-.ds doc-str-Lb-libjail     Jail Library (libjail, \-ljail)
-.ds doc-str-Lb-libkiconv   Kernel side iconv library (libkiconv, \-lkiconv)
-.ds doc-str-Lb-libkse      N:M Threading Library (libkse, \-lkse)
-.ds doc-str-Lb-libkvm      Kernel Data Access Library (libkvm, \-lkvm)
-.ds doc-str-Lb-libm        Math Library (libm, \-lm)
-.ds doc-str-Lb-libm68k     m68k Architecture Library (libm68k, \-lm68k)
-.ds doc-str-Lb-libmagic    Magic Number Recognition Library (libmagic, \-lmagic)
-.ds doc-str-Lb-libmd       Message Digest (MD4, MD5, etc.) Support Library (libmd, \-lmd)
-.ds doc-str-Lb-libmemstat  Kernel Memory Allocator Statistics Library (libmemstat, \-lmemstat)
-.ds doc-str-Lb-libmenu     Curses Menu Library (libmenu, \-lmenu)
-.ds doc-str-Lb-libnetgraph Netgraph User Library (libnetgraph, \-lnetgraph)
-.ds doc-str-Lb-libnetpgp   Netpgp signing, verification, encryption and decryption (libnetpgp, \-lnetpgp)
-.ds doc-str-Lb-libossaudio OSS Audio Emulation Library (libossaudio, \-lossaudio)
-.ds doc-str-Lb-libpam      Pluggable Authentication Module Library (libpam, \-lpam)
-.ds doc-str-Lb-libpcap     Packet Capture Library (libpcap, \-lpcap)
-.ds doc-str-Lb-libpci      PCI Bus Access Library (libpci, \-lpci)
-.ds doc-str-Lb-libpmc      Performance Counters Library (libpmc, \-lpmc)
-.ds doc-str-Lb-libposix    \*[Px] \*[doc-str-Lb]Compatibility Library (libposix, \-lposix)
-.ds doc-str-Lb-libprop     Property Container Object Library (libprop, \-lprop)
-.ds doc-str-Lb-libpthread  \*[Px] \*[doc-str-Lb]Threads Library (libpthread, \-lpthread)
-.ds doc-str-Lb-libpuffs    puffs Convenience Library (libpuffs, \-lpuffs)
-.ds doc-str-Lb-librefuse   File System in Userspace Convenience Library (librefuse, \-lrefuse)
-.ds doc-str-Lb-libresolv   DNS Resolver Library (libresolv, \-lresolv)
-.ds doc-str-Lb-librpcsec_gss RPC GSS-API Authentication Library (librpcsec_gss, \-lrpcsec_gss)
-.ds doc-str-Lb-librpcsvc   RPC Service Library (librpcsvc, \-lrpcsvc)
-.ds doc-str-Lb-librt       \*[Px] \*[doc-str-Lb]Real-time Library (librt, \-lrt)
-.ds doc-str-Lb-libsdp      Bluetooth Service Discovery Protocol User Library (libsdp, \-lsdp)
-.ds doc-str-Lb-libssp      Buffer Overflow Protection Library (libssp, \-lssp)
-.ds doc-str-Lb-libSystem   System Library (libSystem, \-lSystem)
-.ds doc-str-Lb-libtermcap  Termcap Access Library (libtermcap, \-ltermcap)
-.ds doc-str-Lb-libterminfo Terminal Information Library (libterminfo, \-lterminfo)
-.ds doc-str-Lb-libthr      1:1 Threading Library (libthr, \-lthr)
-.ds doc-str-Lb-libufs      UFS File System Access Library (libufs, \-lufs)
-.ds doc-str-Lb-libugidfw   File System Firewall Interface Library (libugidfw, \-lugidfw)
-.ds doc-str-Lb-libulog     User Login Record Library (libulog, \-lulog)
-.ds doc-str-Lb-libusbhid   USB Human Interface Devices Library (libusbhid, \-lusbhid)
-.ds doc-str-Lb-libutil     System Utilities Library (libutil, \-lutil)
-.ds doc-str-Lb-libvgl      Video Graphics Library (libvgl, \-lvgl)
-.ds doc-str-Lb-libx86_64   x86_64 Architecture Library (libx86_64, \-lx86_64)
-.ds doc-str-Lb-libz        Compression Library (libz, \-lz)
-.
-.de Lb
-.  if !\n[doc-arg-limit] \{\
-.    ie \n[.$] \{\
-.      ds doc-macro-name Lb
-.      doc-parse-args \$@
-.    \}
-.    el \
-.      tm Usage: .Lb library_name ... (#\n[.c])
-.  \}
-.
-.  if !\n[doc-arg-limit] \
-.    return
-.
-.  nr doc-arg-ptr +1
-.  ie (\n[doc-arg-limit] >= \n[doc-arg-ptr]) \{\
-.    nr doc-curr-font \n[.f]
-.    nr doc-curr-size \n[.ps]
-.    ds doc-str-Lb \f[\n[doc-curr-font]]\s[\n[doc-curr-size]u]
-.
-.    ie d doc-str-Lb-\*[doc-arg\n[doc-arg-ptr]] \
-.      ds doc-str-Lb1 "\*[doc-str-Lb-\*[doc-arg\n[doc-arg-ptr]]]
-.    el \{\
-.      tmc "mdoc warning: .Lb: no description for library
-.      tm1 " `\*[doc-arg\n[doc-arg-ptr]]' available (#\n[.c])
-.      ds doc-str-Lb1 library \*[Lq]\*[doc-arg\n[doc-arg-ptr]]\*[Rq]
-.    \}
-.
-.    \" replacing argument with result
-.    ds doc-arg\n[doc-arg-ptr] "\*[doc-str-Lb1]
-.
-.    if \n[doc-in-library-section] \
-.      br
-.    doc-print-recursive
-.    if \n[doc-in-library-section] \
-.      br
-.  \}
-.  el \{\
-.    tm Usage: .Lb library_name ... (#\n[.c])
-.    doc-reset-args
-.  \}
-..
-.
-.
-.ec
-.
-.\" EOF
diff -Nuar groff-1.22.3.old/tmac/doc-syms-u groff-1.22.3/tmac/doc-syms-u
--- groff-1.22.3.old/tmac/doc-syms-u	1970-01-01 02:00:00.000000000 +0200
+++ groff-1.22.3/tmac/doc-syms-u	2015-04-23 20:57:03.000000000 +0300
@@ -0,0 +1,880 @@
+.\" -*- nroff -*-
+.\"
+.\" Copyright (c) 1991, 1993
+.\"	The Regents of the University of California.  All rights reserved.
+.\"
+.\" Redistribution and use in source and binary forms, with or without
+.\" modification, are permitted provided that the following conditions
+.\" are met:
+.\" 1. Redistributions of source code must retain the above copyright
+.\"    notice, this list of conditions and the following disclaimer.
+.\" 2. Redistributions in binary form must reproduce the above copyright
+.\"    notice, this list of conditions and the following disclaimer in the
+.\"    documentation and/or other materials provided with the distribution.
+.\" 3. [Deleted.  See
+.\"     ftp://ftp.cs.berkeley.edu/pub/4bsd/README.Impt.License.Change]
+.\" 4. Neither the name of the University nor the names of its contributors
+.\"    may be used to endorse or promote products derived from this software
+.\"    without specific prior written permission.
+.\"
+.\" THIS SOFTWARE IS PROVIDED BY THE REGENTS AND CONTRIBUTORS ``AS IS'' AND
+.\" ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE
+.\" IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE
+.\" ARE DISCLAIMED.  IN NO EVENT SHALL THE REGENTS OR CONTRIBUTORS BE LIABLE
+.\" FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL
+.\" DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS
+.\" OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION)
+.\" HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT
+.\" LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY
+.\" OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF
+.\" SUCH DAMAGE.
+.\"
+.\"     @(#)doc-syms	8.1 (Berkeley) 06/08/93
+.\"
+.\"     %beginstrip%
+.
+.
+.eo
+.
+.\" NS Ux user macro
+.\" NS   print UNIX
+.\" NS
+.\" NS modifies:
+.\" NS   doc-arg-ptr
+.\" NS   doc-curr-font
+.\" NS   doc-curr-size
+.\" NS   doc-macro-name
+.\" NS
+.\" NS local variable:
+.\" NS   doc-str-Ux
+.\" NS
+.\" NS width register `Ux' defined in doc-common
+.
+.de Ux
+.  nr doc-curr-font \n[.f]
+.  nr doc-curr-size \n[.ps]
+.  ds doc-str-Ux \f[\n[doc-curr-font]]\s[\n[doc-curr-size]u]
+.
+.  if !\n[doc-arg-limit] \
+.    if \n[.$] \{\
+.      ds doc-macro-name Ux
+.      doc-parse-args \$@
+.    \}
+.
+.  \" replace current argument with result
+.  ds doc-arg\n[doc-arg-ptr] \*[doc-Tn-font-size]UNIX\*[doc-str-Ux]
+.  nr doc-type\n[doc-arg-ptr] 2
+.  ds doc-space\n[doc-arg-ptr] "\*[doc-space]
+.
+.  \" recompute space vector for remaining arguments
+.  nr doc-num-args (\n[doc-arg-limit] - \n[doc-arg-ptr])
+.  nr doc-arg-limit \n[doc-arg-ptr]
+.  if \n[doc-num-args] \
+.    doc-parse-space-vector
+.
+.  doc-print-recursive
+..
+.
+.
+.\" NS Bx user macro
+.\" NS   print BSD (fix smaller nroff version)
+.\" NS
+.\" NS modifies:
+.\" NS   doc-arg-ptr
+.\" NS   doc-curr-font
+.\" NS   doc-curr-size
+.\" NS   doc-macro-name
+.\" NS
+.\" NS local variable:
+.\" NS   doc-str-Bx
+.\" NS   doc-str-Bx1
+.\" NS   doc-str-Bx-XXX
+.\" NS
+.\" NS width register `Bx' defined in doc-common
+.
+.ds doc-str-Bx-Reno  \-Reno
+.ds doc-str-Bx-reno  \-Reno
+.ds doc-str-Bx-Tahoe \-Tahoe
+.ds doc-str-Bx-tahoe \-Tahoe
+.ds doc-str-Bx-Lite  \-Lite
+.ds doc-str-Bx-lite  \-Lite
+.ds doc-str-Bx-Lite2 \-Lite2
+.ds doc-str-Bx-lite2 \-Lite2
+.
+.de Bx
+.  nr doc-curr-font \n[.f]
+.  nr doc-curr-size \n[.ps]
+.  ds doc-str-Bx \f[\n[doc-curr-font]]\s[\n[doc-curr-size]u]
+.
+.  \" default value if no argument
+.  ds doc-str-Bx1 \*[doc-Tn-font-size]BSD\*[doc-str-Bx]
+.
+.  if !\n[doc-arg-limit] \
+.    if \n[.$] \{\
+.      ds doc-macro-name Bx
+.      doc-parse-args \$@
+.    \}
+.
+.  if (\n[doc-arg-limit] > \n[doc-arg-ptr]) \{\
+.    nr doc-arg-ptr +1
+.    ie (\n[doc-type\n[doc-arg-ptr]] == 2) \{\
+.      ie        "\*[doc-arg\n[doc-arg-ptr]]"-alpha" \
+.        as doc-str-Bx1 " (currently in alpha test)
+.      el \{ .ie "\*[doc-arg\n[doc-arg-ptr]]"-beta" \
+.        as doc-str-Bx1 " (currently in beta test)
+.      el \{ .ie "\*[doc-arg\n[doc-arg-ptr]]"-devel" \
+.        as doc-str-Bx1 " (currently under development)
+.      el \{\
+.        ds doc-str-Bx1 \&\*[doc-arg\n[doc-arg-ptr]]\^\*[doc-Tn-font-size]
+.        as doc-str-Bx1 BSD\*[doc-str-Bx]
+.
+.        if (\n[doc-arg-limit] > \n[doc-arg-ptr]) \{\
+.          nr doc-arg-ptr +1
+.          ie (\n[doc-type\n[doc-arg-ptr]] == 2) \{\
+.            ie (\n[doc-type\n[doc-arg-ptr]] == 2) \{\
+.              ie d doc-str-Bx-\*[doc-arg\n[doc-arg-ptr]] \
+.                as doc-str-Bx1 "\*[doc-str-Bx-\*[doc-arg\n[doc-arg-ptr]]]
+.              el \
+.                nr doc-arg-ptr -1
+.            \}
+.            el \
+.              nr doc-arg-ptr -1
+.          \}
+.          el \
+.            nr doc-arg-ptr -1
+.    \}\}\}\}\}
+.    el \
+.      nr doc-arg-ptr -1
+.  \}
+.
+.  \" replace current argument with result
+.  ds doc-arg\n[doc-arg-ptr] "\*[doc-str-Bx1]
+.  nr doc-type\n[doc-arg-ptr] 2
+.  ds doc-space\n[doc-arg-ptr] "\*[doc-space]
+.
+.  \" recompute space vector for remaining arguments
+.  nr doc-num-args (\n[doc-arg-limit] - \n[doc-arg-ptr])
+.  nr doc-arg-limit \n[doc-arg-ptr]
+.  if \n[doc-num-args] \
+.    doc-parse-space-vector
+.
+.  doc-print-recursive
+..
+.
+.
+.\" NS Ud user macro (not parsed, not callable)
+.\" NS   print "currently under development" (HISTORY section)
+.\" NS
+.\" NS width register `Ud' defined in doc-common
+.
+.de Ud
+.  nop \&currently under development.
+..
+.
+.
+.\" NS At user macro
+.\" NS   print AT&T UNIX
+.\" NS
+.\" NS modifies:
+.\" NS   doc-arg-ptr
+.\" NS   doc-curr-font
+.\" NS   doc-curr-size
+.\" NS   doc-macro-name
+.\" NS
+.\" NS local variable:
+.\" NS   doc-str-At
+.\" NS   doc-str-At1
+.\" NS   doc-str-At-XXX
+.\" NS
+.\" NS width register `At' defined in doc-common
+.
+.ds doc-str-At-32v \&Version\~32V
+.as doc-str-At-32v " \*[doc-Tn-font-size]AT&T UNIX\*[doc-str-At]
+.ds doc-str-At-v1  \&Version\~1
+.as doc-str-At-v1  " \*[doc-Tn-font-size]AT&T UNIX\*[doc-str-At]
+.ds doc-str-At-v2  \&Version\~2
+.as doc-str-At-v2  " \*[doc-Tn-font-size]AT&T UNIX\*[doc-str-At]
+.ds doc-str-At-v3  \&Version\~3
+.as doc-str-At-v3  " \*[doc-Tn-font-size]AT&T UNIX\*[doc-str-At]
+.ds doc-str-At-v4  \&Version\~4
+.as doc-str-At-v4  " \*[doc-Tn-font-size]AT&T UNIX\*[doc-str-At]
+.ds doc-str-At-v5  \&Version\~5
+.as doc-str-At-v5  " \*[doc-Tn-font-size]AT&T UNIX\*[doc-str-At]
+.ds doc-str-At-v6  \&Version\~6
+.as doc-str-At-v6  " \*[doc-Tn-font-size]AT&T UNIX\*[doc-str-At]
+.ds doc-str-At-v7  \&Version\~7
+.as doc-str-At-v7  " \*[doc-Tn-font-size]AT&T UNIX\*[doc-str-At]
+.ds doc-str-At-III \*[doc-Tn-font-size]AT&T\*[doc-str-At] System\~III
+.as doc-str-At-III " \*[doc-Tn-font-size]UNIX\*[doc-str-At]
+.ds doc-str-At-V   \*[doc-Tn-font-size]AT&T\*[doc-str-At] System\~V
+.as doc-str-At-V   " \*[doc-Tn-font-size]UNIX\*[doc-str-At]
+.ds doc-str-At-V.1 \*[doc-Tn-font-size]AT&T\*[doc-str-At] System\~V Release\~1
+.as doc-str-At-V.1 " \*[doc-Tn-font-size]UNIX\*[doc-str-At]
+.ds doc-str-At-V.2 \*[doc-Tn-font-size]AT&T\*[doc-str-At] System\~V Release\~2
+.as doc-str-At-V.2 " \*[doc-Tn-font-size]UNIX\*[doc-str-At]
+.ds doc-str-At-V.3 \*[doc-Tn-font-size]AT&T\*[doc-str-At] System\~V Release\~3
+.as doc-str-At-V.3 " \*[doc-Tn-font-size]UNIX\*[doc-str-At]
+.ds doc-str-At-V.4 \*[doc-Tn-font-size]AT&T\*[doc-str-At] System\~V Release\~4
+.as doc-str-At-V.4 " \*[doc-Tn-font-size]UNIX\*[doc-str-At]
+.
+.de At
+.  nr doc-curr-font \n[.f]
+.  nr doc-curr-size \n[.ps]
+.  ds doc-str-At \f[\n[doc-curr-font]]\s[\n[doc-curr-size]u]
+.
+.  \" default value if no argument
+.  ds doc-str-At1 \*[doc-Tn-font-size]AT&T UNIX\*[doc-str-At]
+.
+.  if !\n[doc-arg-limit] \
+.    if \n[.$] \{\
+.      ds doc-macro-name At
+.      doc-parse-args \$@
+.    \}
+.
+.  if (\n[doc-arg-limit] > \n[doc-arg-ptr]) \{\
+.    nr doc-arg-ptr +1
+.    ie (\n[doc-type\n[doc-arg-ptr]] == 2) \{\
+.      ie \A\*[doc-arg\n[doc-arg-ptr]] \{\
+.        ie d doc-str-At-\*[doc-arg\n[doc-arg-ptr]] \
+.          ds doc-str-At1 "\*[doc-str-At-\*[doc-arg\n[doc-arg-ptr]]]
+.        el \{\
+.          tmc mdoc warning: .At: Unknown AT&T UNIX version
+.          tm1 " `\*[doc-arg\n[doc-arg-ptr]]' (#\n[.c])
+.          nr doc-arg-ptr -1
+.      \}\}
+.      el \
+.        nr doc-arg-ptr -1
+.    \}
+.    el \
+.      nr doc-arg-ptr -1
+.  \}
+.
+.  \" replace current argument with result
+.  ds doc-arg\n[doc-arg-ptr] "\*[doc-str-At1]
+.  nr doc-type\n[doc-arg-ptr] 2
+.  ds doc-space\n[doc-arg-ptr] "\*[doc-space]
+.
+.  \" recompute space vector for remaining arguments
+.  nr doc-num-args (\n[doc-arg-limit] - \n[doc-arg-ptr])
+.  nr doc-arg-limit \n[doc-arg-ptr]
+.  if \n[doc-num-args] \
+.    doc-parse-space-vector
+.
+.  doc-print-recursive
+..
+.
+.
+.\" NS Dx user macro
+.\" NS   print DragonFly
+.\" NS
+.\" NS modifies:
+.\" NS   doc-arg-ptr
+.\" NS   doc-curr-font
+.\" NS   doc-curr-size
+.\" NS   doc-macro-name
+.\" NS
+.\" NS local variable:
+.\" NS   doc-str-Dx
+.\" NS   doc-str-Dx1
+.\" NS
+.\" NS width register `Dx' defined in doc-common
+.
+.\" we use the doc-operating-system-DragonFly-* strings defined in doc-common
+.
+.de Dx
+.  nr doc-curr-font \n[.f]
+.  nr doc-curr-size \n[.ps]
+.  ds doc-str-Dx \f[\n[doc-curr-font]]\s[\n[doc-curr-size]u]
+.
+.  \" default value if no argument
+.  ds doc-str-Dx1 \*[doc-Tn-font-size]\%DragonFly\*[doc-str-Dx]
+.
+.  if !\n[doc-arg-limit] \
+.    if \n[.$] \{\
+.      ds doc-macro-name Dx
+.      doc-parse-args \$@
+.    \}
+.
+.  if (\n[doc-arg-limit] > \n[doc-arg-ptr]) \{\
+.    nr doc-arg-ptr +1
+.    ie (\n[doc-type\n[doc-arg-ptr]] == 2) \{\
+.      ie \A\*[doc-arg\n[doc-arg-ptr]] \{\
+.        ie d doc-operating-system-DragonFly-\*[doc-arg\n[doc-arg-ptr]] \
+.          as doc-str-Dx1 \~\*[doc-operating-system-DragonFly-\*[doc-arg\n[doc-arg-ptr]]]
+.        el \{\
+.          tmc mdoc warning: .Dx: Unknown DragonFly version
+.          tm1 " `\*[doc-arg\n[doc-arg-ptr]]' (#\n[.c])
+.          as doc-str-Dx1 \~\*[doc-arg\n[doc-arg-ptr]]
+.      \}\}
+.      el \
+.        as doc-str-Dx1 \~\*[doc-arg\n[doc-arg-ptr]]
+.    \}
+.    el \
+.      nr doc-arg-ptr -1
+.  \}
+.
+.  \" replace current argument with result
+.  ds doc-arg\n[doc-arg-ptr] "\*[doc-str-Dx1]
+.  nr doc-type\n[doc-arg-ptr] 2
+.  ds doc-space\n[doc-arg-ptr] "\*[doc-space]
+.
+.  \" recompute space vector for remaining arguments
+.  nr doc-num-args (\n[doc-arg-limit] - \n[doc-arg-ptr])
+.  nr doc-arg-limit \n[doc-arg-ptr]
+.  if \n[doc-num-args] \
+.    doc-parse-space-vector
+.
+.  doc-print-recursive
+..
+.
+.
+.\" NS Fx user macro
+.\" NS   print FreeBSD
+.\" NS
+.\" NS modifies:
+.\" NS   doc-arg-ptr
+.\" NS   doc-curr-font
+.\" NS   doc-curr-size
+.\" NS   doc-macro-name
+.\" NS
+.\" NS local variable:
+.\" NS   doc-str-Fx
+.\" NS   doc-str-Fx1
+.\" NS
+.\" NS width register `Fx' defined in doc-common
+.
+.\" we use the doc-operating-system-FreeBSD-* strings defined in doc-common
+.
+.de Fx
+.  nr doc-curr-font \n[.f]
+.  nr doc-curr-size \n[.ps]
+.  ds doc-str-Fx \f[\n[doc-curr-font]]\s[\n[doc-curr-size]u]
+.
+.  \" default value if no argument
+.  ds doc-str-Fx1 \*[doc-Tn-font-size]\%FreeBSD\*[doc-str-Fx]
+.
+.  if !\n[doc-arg-limit] \
+.    if \n[.$] \{\
+.      ds doc-macro-name Fx
+.      doc-parse-args \$@
+.    \}
+.
+.  if (\n[doc-arg-limit] > \n[doc-arg-ptr]) \{\
+.    nr doc-arg-ptr +1
+.    ie (\n[doc-type\n[doc-arg-ptr]] == 2) \{\
+.      ie \A\*[doc-arg\n[doc-arg-ptr]] \{\
+.        ie d doc-operating-system-FreeBSD-\*[doc-arg\n[doc-arg-ptr]] \
+.          as doc-str-Fx1 \~\*[doc-operating-system-FreeBSD-\*[doc-arg\n[doc-arg-ptr]]]
+.        el \{\
+.          tmc mdoc warning: .Fx: Unknown FreeBSD version
+.          tm1 " `\*[doc-arg\n[doc-arg-ptr]]' (#\n[.c])
+.          as doc-str-Fx1 \~\*[doc-arg\n[doc-arg-ptr]]
+.      \}\}
+.      el \
+.        as doc-str-Fx1 \~\*[doc-arg\n[doc-arg-ptr]]
+.    \}
+.    el \
+.      nr doc-arg-ptr -1
+.  \}
+.
+.  \" replace current argument with result
+.  ds doc-arg\n[doc-arg-ptr] "\*[doc-str-Fx1]
+.  nr doc-type\n[doc-arg-ptr] 2
+.  ds doc-space\n[doc-arg-ptr] "\*[doc-space]
+.
+.  \" recompute space vector for remaining arguments
+.  nr doc-num-args (\n[doc-arg-limit] - \n[doc-arg-ptr])
+.  nr doc-arg-limit \n[doc-arg-ptr]
+.  if \n[doc-num-args] \
+.    doc-parse-space-vector
+.
+.  doc-print-recursive
+..
+.
+.
+.\" NS Nx user macro
+.\" NS   print NetBSD
+.\" NS
+.\" NS modifies:
+.\" NS   doc-arg-ptr
+.\" NS   doc-curr-font
+.\" NS   doc-curr-size
+.\" NS   doc-macro-name
+.\" NS
+.\" NS local variable:
+.\" NS   doc-str-Nx
+.\" NS   doc-str-Nx1
+.\" NS
+.\" NS width register `Nx' defined in doc-common
+.
+.\" we use the doc-operating-system-NetBSD-* strings defined in doc-common
+.
+.de Nx
+.  nr doc-curr-font \n[.f]
+.  nr doc-curr-size \n[.ps]
+.  ds doc-str-Nx \f[\n[doc-curr-font]]\s[\n[doc-curr-size]u]
+.
+.  \" default value if no argument
+.  ds doc-str-Nx1 \*[doc-Tn-font-size]\%N\s[\n[doc-curr-size]u]et
+.  as doc-str-Nx1 \*[doc-Tn-font-size]BSD\*[doc-str-Nx]
+.
+.  if !\n[doc-arg-limit] \
+.    if \n[.$] \{\
+.      ds doc-macro-name Nx
+.      doc-parse-args \$@
+.    \}
+.
+.  if (\n[doc-arg-limit] > \n[doc-arg-ptr]) \{\
+.    nr doc-arg-ptr +1
+.    ie (\n[doc-type\n[doc-arg-ptr]] == 2) \{\
+.      ie \A\*[doc-arg\n[doc-arg-ptr]] \{\
+.        ie d doc-operating-system-NetBSD-\*[doc-arg\n[doc-arg-ptr]] \
+.          as doc-str-Nx1 \~\*[doc-operating-system-NetBSD-\*[doc-arg\n[doc-arg-ptr]]]
+.        el \{\
+.          tmc mdoc warning: .Nx: Unknown NetBSD version
+.          tm1 " `\*[doc-arg\n[doc-arg-ptr]]' (#\n[.c])
+.          as doc-str-Nx1 \~\*[doc-arg\n[doc-arg-ptr]]
+.      \}\}
+.      el \
+.        as doc-str-Nx1 \~\*[doc-arg\n[doc-arg-ptr]]
+.    \}
+.    el \
+.      nr doc-arg-ptr -1
+.  \}
+.
+.  \" replace current argument with result
+.  ds doc-arg\n[doc-arg-ptr] "\*[doc-str-Nx1]
+.  nr doc-type\n[doc-arg-ptr] 2
+.  ds doc-space\n[doc-arg-ptr] "\*[doc-space]
+.
+.  \" recompute space vector for remaining arguments
+.  nr doc-num-args (\n[doc-arg-limit] - \n[doc-arg-ptr])
+.  nr doc-arg-limit \n[doc-arg-ptr]
+.  if \n[doc-num-args] \
+.    doc-parse-space-vector
+.
+.  doc-print-recursive
+..
+.
+.
+.\" NS Ox user macro
+.\" NS   print OpenBSD
+.\" NS
+.\" NS modifies:
+.\" NS   doc-arg-ptr
+.\" NS   doc-curr-font
+.\" NS   doc-curr-size
+.\" NS   doc-macro-name
+.\" NS
+.\" NS local variable:
+.\" NS   doc-str-Ox
+.\" NS   doc-str-Ox1
+.\" NS
+.\" NS width register `Ox' defined in doc-common
+.
+.de Ox
+.  nr doc-curr-font \n[.f]
+.  nr doc-curr-size \n[.ps]
+.  ds doc-str-Ox \f[\n[doc-curr-font]]\s[\n[doc-curr-size]u]
+.
+.  \" default value if no argument
+.  ds doc-str-Ox1 \*[doc-Tn-font-size]\%OpenBSD\*[doc-str-Ox]
+.
+.  if !\n[doc-arg-limit] \
+.    if \n[.$] \{\
+.      ds doc-macro-name Ox
+.      doc-parse-args \$@
+.    \}
+.
+.  if (\n[doc-arg-limit] > \n[doc-arg-ptr]) \{\
+.    nr doc-arg-ptr +1
+.    ie (\n[doc-type\n[doc-arg-ptr]] == 2) \
+.      as doc-str-Ox1 \~\*[doc-arg\n[doc-arg-ptr]]
+.    el \
+.      nr doc-arg-ptr -1
+.  \}
+.
+.  \" replace current argument with result
+.  ds doc-arg\n[doc-arg-ptr] "\*[doc-str-Ox1]
+.  nr doc-type\n[doc-arg-ptr] 2
+.  ds doc-space\n[doc-arg-ptr] "\*[doc-space]
+.
+.  \" recompute space vector for remaining arguments
+.  nr doc-num-args (\n[doc-arg-limit] - \n[doc-arg-ptr])
+.  nr doc-arg-limit \n[doc-arg-ptr]
+.  if \n[doc-num-args] \
+.    doc-parse-space-vector
+.
+.  doc-print-recursive
+..
+.
+.
+.\" NS Bsx user macro
+.\" NS   print BSD/OS
+.\" NS
+.\" NS modifies:
+.\" NS   doc-arg-ptr
+.\" NS   doc-curr-font
+.\" NS   doc-curr-size
+.\" NS   doc-macro-name
+.\" NS
+.\" NS local variable:
+.\" NS   doc-str-Bsx
+.\" NS   doc-str-Bsx1
+.\" NS
+.\" NS width register `Bsx' defined in doc-common
+.
+.de Bsx
+.  nr doc-curr-font \n[.f]
+.  nr doc-curr-size \n[.ps]
+.  ds doc-str-Bsx \f[\n[doc-curr-font]]\s[\n[doc-curr-size]u]
+.
+.  \" default value if no argument
+.  ds doc-str-Bsx1 \*[doc-Tn-font-size]BSD/OS\*[doc-str-Bsx]
+.
+.  if !\n[doc-arg-limit] \
+.    if \n[.$] \{\
+.      ds doc-macro-name Bsx
+.      doc-parse-args \$@
+.    \}
+.
+.  if (\n[doc-arg-limit] > \n[doc-arg-ptr]) \{\
+.    nr doc-arg-ptr +1
+.    ie (\n[doc-type\n[doc-arg-ptr]] == 2) \
+.      as doc-str-Bsx1 \~\*[doc-arg\n[doc-arg-ptr]]
+.    el \
+.      nr doc-arg-ptr -1
+.  \}
+.
+.  \" replace current argument with result
+.  ds doc-arg\n[doc-arg-ptr] "\*[doc-str-Bsx1]
+.  nr doc-type\n[doc-arg-ptr] 2
+.  ds doc-space\n[doc-arg-ptr] "\*[doc-space]
+.
+.  \" recompute space vector for remaining arguments
+.  nr doc-num-args (\n[doc-arg-limit] - \n[doc-arg-ptr])
+.  nr doc-arg-limit \n[doc-arg-ptr]
+.  if \n[doc-num-args] \
+.    doc-parse-space-vector
+.
+.  doc-print-recursive
+..
+.
+.
+.\" The Bt macro should go away now
+.
+.\" NS Bt user macro (not parsed, not callable)
+.\" NS   print "is currently in beta test." (HISTORY section)
+.\" NS
+.\" NS width register `Bt' defined in doc-common
+.
+.de Bt
+.  nop \&is currently in beta test.
+..
+.
+.
+.\" NS Px user macro
+.\" NS   print POSIX
+.
+.ds Px \*[doc-Tn-font-size]\%POSIX
+.
+.
+.\" NS Ai user macro
+.\" NS   print ANSI
+.
+.ds Ai \*[doc-Tn-font-size]\%ANSI
+.
+.
+.\" NS St user macro
+.\" NS   standards (posix, ansi - formal standard names)
+.\" NS
+.\" NS modifies:
+.\" NS   doc-arg-ptr
+.\" NS   doc-curr-font
+.\" NS   doc-curr-size
+.\" NS   doc-macro-name
+.\" NS
+.\" NS local variable:
+.\" NS   doc-reg-St
+.\" NS   doc-str-St
+.\" NS   doc-str-St1
+.\" NS   doc-str-St-XXX
+.\" NS
+.\" NS width register `St' defined in doc-common
+.
+.\" ANSI/ISO C
+.ds doc-str-St--ansiC-89       \*[Ai] \*[doc-str-St]X\^3.159-1989
+.as doc-str-St--ansiC-89       " (\*[Lq]\)\*[Ai]\~C89\*[doc-str-St]\*[Rq])
+.als doc-str-St--ansiC doc-str-St--ansiC-89
+.ds doc-str-St--isoC           \*[doc-Tn-font-size]ISO/IEC\*[doc-str-St] 9899:1990
+.as doc-str-St--isoC           " (\*[Lq]\*[doc-Tn-font-size]ISO\~C\^90\*[doc-str-St]\*[Rq])
+.als doc-str-St--isoC-90 doc-str-St--isoC
+.ds doc-str-St--isoC-2011      \*[doc-Tn-font-size]ISO/IEC\*[doc-str-St] 9899:2011
+.as doc-str-St--isoC-2011      " (\*[Lq]\*[doc-Tn-font-size]ISO\~C\^11\*[doc-str-St]\*[Rq])
+.ds doc-str-St--isoC-99        \*[doc-Tn-font-size]ISO/IEC\*[doc-str-St] 9899:1999
+.as doc-str-St--isoC-99        " (\*[Lq]\*[doc-Tn-font-size]ISO\~C\^99\*[doc-str-St]\*[Rq])
+.ds doc-str-St--isoC-amd1       \*[doc-Tn-font-size]ISO/IEC\*[doc-str-St] 9899/AMD1:1995
+.as doc-str-St--isoC-amd1       " (\*[Lq]\*[doc-Tn-font-size]ISO\~C\^90\*[doc-str-St], Amendment 1\*[Rq])
+.ds doc-str-St--isoC-tcor1      \*[doc-Tn-font-size]ISO/IEC\*[doc-str-St] 9899/TCOR1:1994
+.as doc-str-St--isoC-tcor1      " (\*[Lq]\*[doc-Tn-font-size]ISO\~C\^90\*[doc-str-St], Technical Corrigendum 1\*[Rq])
+.ds doc-str-St--isoC-tcor2      \*[doc-Tn-font-size]ISO/IEC\*[doc-str-St] 9899/TCOR2:1995
+.as doc-str-St--isoC-tcor2      " (\*[Lq]\*[doc-Tn-font-size]ISO\~C\^90\*[doc-str-St], Technical Corrigendum 2\*[Rq])
+.
+.\" POSIX Part 1: System API
+.ds doc-str-St--p1003.1        \*[doc-Tn-font-size]\%IEEE\*[doc-str-St] Std 1003.1
+.as doc-str-St--p1003.1        " (\*[Lq]\)\*[Px]\*[doc-str-St].1\*[Rq])
+.ds doc-str-St--p1003.1b       \*[doc-Tn-font-size]\%IEEE\*[doc-str-St] Std 1003.1b
+.as doc-str-St--p1003.1b       " (\*[Lq]\)\*[Px]\*[doc-str-St].1\*[Rq])
+.ds doc-str-St--p1003.1-88     \*[doc-Tn-font-size]\%IEEE\*[doc-str-St] Std 1003.1-1988
+.as doc-str-St--p1003.1-88     " (\*[Lq]\)\*[Px]\*[doc-str-St].1\*[Rq])
+.ds doc-str-St--p1003.1-90     \*[doc-Tn-font-size]ISO/IEC\*[doc-str-St] 9945-1:1990
+.as doc-str-St--p1003.1-90     " (\*[Lq]\)\*[Px]\*[doc-str-St].1\*[Rq])
+.als doc-str-St--iso9945-1-90 doc-str-St--p1003.1-90
+.ds doc-str-St--p1003.1b-93    \*[doc-Tn-font-size]\%IEEE\*[doc-str-St] Std 1003.1b-1993
+.as doc-str-St--p1003.1b-93    " (\*[Lq]\)\*[Px]\*[doc-str-St].1\*[Rq])
+.ds doc-str-St--p1003.1c-95    \*[doc-Tn-font-size]\%IEEE\*[doc-str-St] Std 1003.1c-1995
+.as doc-str-St--p1003.1c-95    " (\*[Lq]\)\*[Px]\*[doc-str-St].1\*[Rq])
+.ds doc-str-St--p1003.1i-95    \*[doc-Tn-font-size]\%IEEE\*[doc-str-St] Std 1003.1i-1995
+.as doc-str-St--p1003.1i-95    " (\*[Lq]\)\*[Px]\*[doc-str-St].1\*[Rq])
+.ds doc-str-St--p1003.1-96     \*[doc-Tn-font-size]ISO/IEC\*[doc-str-St] 9945-1:1996
+.as doc-str-St--p1003.1-96     " (\*[Lq]\)\*[Px]\*[doc-str-St].1\*[Rq])
+.als doc-str-St--iso9945-1-96 doc-str-St--p1003.1-96
+.ds doc-str-St--p1003.1g-2000  \*[doc-Tn-font-size]\%IEEE\*[doc-str-St] Std 1003.1g-2000
+.as doc-str-St--p1003.1g-2000  " (\*[Lq]\)\*[Px]\*[doc-str-St].1\*[Rq])
+.ds doc-str-St--p1003.1-2001   \*[doc-Tn-font-size]\%IEEE\*[doc-str-St] Std 1003.1-2001
+.as doc-str-St--p1003.1-2001   " (\*[Lq]\)\*[Px]\*[doc-str-St].1\*[Rq])
+.ds doc-str-St--p1003.1-2004   \*[doc-Tn-font-size]\%IEEE\*[doc-str-St] Std 1003.1-2004
+.as doc-str-St--p1003.1-2004   " (\*[Lq]\)\*[Px]\*[doc-str-St].1\*[Rq])
+.ds doc-str-St--p1003.1-2008   \*[doc-Tn-font-size]\%IEEE\*[doc-str-St] Std 1003.1-2008
+.as doc-str-St--p1003.1-2008   " (\*[Lq]\)\*[Px]\*[doc-str-St].1\*[Rq])
+.
+.\" POSIX Part 2: Shell and Utilities
+.ds doc-str-St--p1003.2        \*[doc-Tn-font-size]\%IEEE\*[doc-str-St] Std 1003.2
+.as doc-str-St--p1003.2        " (\*[Lq]\)\*[Px]\*[doc-str-St].2\*[Rq])
+.ds doc-str-St--p1003.2-92     \*[doc-Tn-font-size]\%IEEE\*[doc-str-St] Std 1003.2-1992
+.as doc-str-St--p1003.2-92     " (\*[Lq]\)\*[Px]\*[doc-str-St].2\*[Rq])
+.ds doc-str-St--p1003.2a-92    \*[doc-Tn-font-size]\%IEEE\*[doc-str-St] Std 1003.2a-1992
+.as doc-str-St--p1003.2a-92    " (\*[Lq]\)\*[Px]\*[doc-str-St].2\*[Rq])
+.ds doc-str-St--iso9945-2-93   \*[doc-Tn-font-size]ISO/IEC\*[doc-str-St] 9945-2:1993
+.as doc-str-St--iso9945-2-93   " (\*[Lq]\)\*[Px]\*[doc-str-St].2\*[Rq])
+.
+.\" X/Open
+.ds doc-str-St--susv2          Version\~2 of the Single \*[doc-Tn-font-size]UNIX\*[doc-str-St] Specification
+.as doc-str-St--susv2          " (\*[Lq]\*[doc-Tn-font-size]SUSv2\*[doc-str-St]\*[Rq])
+.ds doc-str-St--susv3          Version\~3 of the Single \*[doc-Tn-font-size]UNIX\*[doc-str-St] Specification
+.as doc-str-St--susv3          " (\*[Lq]\*[doc-Tn-font-size]SUSv3\*[doc-str-St]\*[Rq])
+.ds doc-str-St--svid4          System\~V Interface Definition, Fourth Edition
+.as doc-str-St--svid4          " (\*[Lq]\*[doc-Tn-font-size]SVID\*[doc-str-St]\^4\*[Rq])
+.ds doc-str-St--xbd5           \*[doc-Tn-font-size]X/Open\*[doc-str-St] Base Definitions Issue\~5
+.as doc-str-St--xbd5           " (\*[Lq]\*[doc-Tn-font-size]XBD\*[doc-str-St]\^5\*[Rq])
+.ds doc-str-St--xcu5           \*[doc-Tn-font-size]X/Open\*[doc-str-St] Commands and Utilities Issue\~5
+.as doc-str-St--xcu5           " (\*[Lq]\*[doc-Tn-font-size]XCU\*[doc-str-St]\^5\*[Rq])
+.ds doc-str-St--xcurses4.2     \*[doc-Tn-font-size]X/Open\*[doc-str-St] Curses Issue\~4, Version\~2
+.as doc-str-St--xcurses4.2     " (\*[Lq]\*[doc-Tn-font-size]XCURSES\*[doc-str-St]\^4.2\*[Rq])
+.ds doc-str-St--xns5           \*[doc-Tn-font-size]X/Open\*[doc-str-St] Networking Services Issue\~5
+.as doc-str-St--xns5           " (\*[Lq]\*[doc-Tn-font-size]XNS\*[doc-str-St]\^5\*[Rq])
+.ds doc-str-St--xns5.2         \*[doc-Tn-font-size]X/Open\*[doc-str-St] Networking Services Issue\~5.2
+.as doc-str-St--xns5.2         " (\*[Lq]\*[doc-Tn-font-size]XNS\*[doc-str-St]\^5.2\*[Rq])
+.ds doc-str-St--xpg3           \*[doc-Tn-font-size]X/Open\*[doc-str-St] Portability Guide Issue\~3
+.as doc-str-St--xpg3           " (\*[Lq]\*[doc-Tn-font-size]XPG\*[doc-str-St]\^3\*[Rq])
+.ds doc-str-St--xpg4           \*[doc-Tn-font-size]X/Open\*[doc-str-St] Portability Guide Issue\~4
+.as doc-str-St--xpg4           " (\*[Lq]\*[doc-Tn-font-size]XPG\*[doc-str-St]\^4\*[Rq])
+.ds doc-str-St--xpg4.2         \*[doc-Tn-font-size]X/Open\*[doc-str-St] Portability Guide Issue\~4, Version\~2
+.as doc-str-St--xpg4.2         " (\*[Lq]\*[doc-Tn-font-size]XPG\*[doc-str-St]\^4.2\*[Rq])
+.ds doc-str-St--xsh5           \*[doc-Tn-font-size]X/Open\*[doc-str-St] System Interfaces and Headers Issue\~5
+.as doc-str-St--xsh5           " (\*[Lq]\*[doc-Tn-font-size]XSH\*[doc-str-St]\^5\*[Rq])
+.
+.\" Miscellaneous
+.ds doc-str-St--ieee754        \*[doc-Tn-font-size]\%IEEE\*[doc-str-St] Std 754-1985
+.ds doc-str-St--ieee1275-94     \*[doc-Tn-font-size]\%IEEE\*[doc-str-St] Std 1275-1994
+.as doc-str-St--ieee1275-94     " (\*[Lq]\*[doc-Tn-font-size]Open Firmware\*[doc-str-St]\*[Rq])
+.ds doc-str-St--iso8601        \*[doc-Tn-font-size]ISO\*[doc-str-St] 8601
+.ds doc-str-St--iso8802-3      \*[doc-Tn-font-size]ISO/IEC\*[doc-str-St] 8802-3:1989
+.
+.de St
+.  if !\n[doc-arg-limit] \{\
+.    ie \n[.$] \{\
+.      ds doc-macro-name St
+.      doc-parse-args \$@
+.    \}
+.    el \
+.      doc-St-usage
+.  \}
+.
+.  if !\n[doc-arg-limit] \
+.    return
+.
+.  nr doc-arg-ptr +1
+.  ie (\n[doc-arg-limit] >= \n[doc-arg-ptr]) \{\
+.    nr doc-curr-font \n[.f]
+.    nr doc-curr-size \n[.ps]
+.    ds doc-str-St \f[\n[doc-curr-font]]\s[\n[doc-curr-size]u]
+.
+.    ds doc-str-St1
+.    ie \A\*[doc-arg\n[doc-arg-ptr]] \{\
+.      ie d doc-str-St-\*[doc-arg\n[doc-arg-ptr]] \
+.        ds doc-str-St1 "\*[doc-str-St-\*[doc-arg\n[doc-arg-ptr]]]
+.      el \{\
+.        tmc "mdoc warning: .St: Unknown standard abbreviation
+.        tm1 " `\*[doc-arg\n[doc-arg-ptr]]' (#\n[.c])
+.        tm1 "              Please refer to the groff_mdoc(7) manpage for a
+.        tm1 "              list of available standard abbreviations.
+.    \}\}
+.    el \
+.      doc-St-usage
+.
+.    \" replacing argument with result
+.    ds doc-arg\n[doc-arg-ptr] "\*[doc-str-St1]
+.
+.    doc-print-recursive
+.  \}
+.  el \{\
+.    doc-St-usage
+.    doc-reset-args
+.  \}
+..
+.
+.
+.\" NS doc-St-usage macro
+.
+.de doc-St-usage
+.  tm1 "Usage: .St standard (#\n[.c])
+.  tm1 "       Please refer to the groff_mdoc(7) manpage for a list of
+.  tm1 "       available standard abbreviations.
+..
+.
+.
+.\" NS Lb user macro
+.\" NS   formal library names for LIBRARY sections
+.\" NS
+.\" NS modifies:
+.\" NS   doc-arg-ptr
+.\" NS   doc-curr-font
+.\" NS   doc-curr-size
+.\" NS   doc-macro-name
+.\" NS
+.\" NS local variable:
+.\" NS   doc-reg-Lb
+.\" NS   doc-str-Lb
+.\" NS   doc-str-Lb1
+.\" NS   doc-str-Lb-XXX
+.\" NS
+.\" NS width register `Lb' defined in doc-common
+.
+.ds doc-str-Lb-libarchive  Reading and Writing Streaming Archives Library (libarchive, \-larchive)
+.ds doc-str-Lb-libarm      ARM Architecture Library (libarm, \-larm)
+.ds doc-str-Lb-libarm32    ARM32 Architecture Library (libarm32, \-larm32)
+.ds doc-str-Lb-libbluetooth Bluetooth Library (libbluetooth, \-lbluetooth)
+.ds doc-str-Lb-libbsm      Basic Security Module Library (libbsm, \-lbsm)
+.ds doc-str-Lb-libc        Standard C\~Library (libc, \-lc)
+.ds doc-str-Lb-libc_r      Reentrant C\~Library (libc_r, \-lc_r)
+.ds doc-str-Lb-libcalendar Calendar Arithmetic Library (libcalendar, \-lcalendar)
+.ds doc-str-Lb-libcam      Common Access Method User Library (libcam, \-lcam)
+.ds doc-str-Lb-libcdk      Curses Development Kit Library (libcdk, \-lcdk)
+.ds doc-str-Lb-libcipher   FreeSec Crypt Library (libcipher, \-lcipher)
+.ds doc-str-Lb-libcompat   Compatibility Library (libcompat, \-lcompat)
+.ds doc-str-Lb-libcrypt    Crypt Library (libcrypt, \-lcrypt)
+.ds doc-str-Lb-libcurses   Curses Library (libcurses, \-lcurses)
+.ds doc-str-Lb-libdevinfo  Device and Resource Information Utility Library (libdevinfo, \-ldevinfo)
+.ds doc-str-Lb-libdevstat  Device Statistics Library (libdevstat, \-ldevstat)
+.ds doc-str-Lb-libdisk     Interface to Slice and Partition Labels Library (libdisk, \-ldisk)
+.ds doc-str-Lb-libdwarf    DWARF Access Library (libdwarf, \-ldwarf)
+.ds doc-str-Lb-libedit     Command Line Editor Library (libedit, \-ledit)
+.ds doc-str-Lb-libelf      ELF Access Library (libelf, \-lelf)
+.ds doc-str-Lb-libevent    Event Notification Library (libevent, \-levent)
+.ds doc-str-Lb-libfetch    File Transfer Library for URLs (libfetch, \-lfetch)
+.ds doc-str-Lb-libform     Curses Form Library (libform, \-lform)
+.ds doc-str-Lb-libgeom     Userland API Library for kernel GEOM subsystem (libgeom, \-lgeom)
+.ds doc-str-Lb-libgpib     General-Purpose Instrument Bus (GPIB) library (libgpib, \-lgpib)
+.ds doc-str-Lb-libi386     i386 Architecture Library (libi386, \-li386)
+.ds doc-str-Lb-libintl     Internationalized Message Handling Library (libintl, \-lintl)
+.ds doc-str-Lb-libipsec    IPsec Policy Control Library (libipsec, \-lipsec)
+.ds doc-str-Lb-libipx      IPX Address Conversion Support Library (libipx, \-lipx)
+.ds doc-str-Lb-libiscsi    iSCSI protocol library (libiscsi, \-liscsi)
+.ds doc-str-Lb-libjail     Jail Library (libjail, \-ljail)
+.ds doc-str-Lb-libkiconv   Kernel side iconv library (libkiconv, \-lkiconv)
+.ds doc-str-Lb-libkse      N:M Threading Library (libkse, \-lkse)
+.ds doc-str-Lb-libkvm      Kernel Data Access Library (libkvm, \-lkvm)
+.ds doc-str-Lb-libm        Math Library (libm, \-lm)
+.ds doc-str-Lb-libm68k     m68k Architecture Library (libm68k, \-lm68k)
+.ds doc-str-Lb-libmagic    Magic Number Recognition Library (libmagic, \-lmagic)
+.ds doc-str-Lb-libmd       Message Digest (MD4, MD5, etc.) Support Library (libmd, \-lmd)
+.ds doc-str-Lb-libmemstat  Kernel Memory Allocator Statistics Library (libmemstat, \-lmemstat)
+.ds doc-str-Lb-libmenu     Curses Menu Library (libmenu, \-lmenu)
+.ds doc-str-Lb-libnetgraph Netgraph User Library (libnetgraph, \-lnetgraph)
+.ds doc-str-Lb-libnetpgp   Netpgp signing, verification, encryption and decryption (libnetpgp, \-lnetpgp)
+.ds doc-str-Lb-libossaudio OSS Audio Emulation Library (libossaudio, \-lossaudio)
+.ds doc-str-Lb-libpam      Pluggable Authentication Module Library (libpam, \-lpam)
+.ds doc-str-Lb-libpcap     Packet Capture Library (libpcap, \-lpcap)
+.ds doc-str-Lb-libpci      PCI Bus Access Library (libpci, \-lpci)
+.ds doc-str-Lb-libpmc      Performance Counters Library (libpmc, \-lpmc)
+.ds doc-str-Lb-libposix    \*[Px] \*[doc-str-Lb]Compatibility Library (libposix, \-lposix)
+.ds doc-str-Lb-libprop     Property Container Object Library (libprop, \-lprop)
+.ds doc-str-Lb-libpthread  \*[Px] \*[doc-str-Lb]Threads Library (libpthread, \-lpthread)
+.ds doc-str-Lb-libpuffs    puffs Convenience Library (libpuffs, \-lpuffs)
+.ds doc-str-Lb-librefuse   File System in Userspace Convenience Library (librefuse, \-lrefuse)
+.ds doc-str-Lb-libresolv   DNS Resolver Library (libresolv, \-lresolv)
+.ds doc-str-Lb-librpcsec_gss RPC GSS-API Authentication Library (librpcsec_gss, \-lrpcsec_gss)
+.ds doc-str-Lb-librpcsvc   RPC Service Library (librpcsvc, \-lrpcsvc)
+.ds doc-str-Lb-librt       \*[Px] \*[doc-str-Lb]Real-time Library (librt, \-lrt)
+.ds doc-str-Lb-libsdp      Bluetooth Service Discovery Protocol User Library (libsdp, \-lsdp)
+.ds doc-str-Lb-libssp      Buffer Overflow Protection Library (libssp, \-lssp)
+.ds doc-str-Lb-libSystem   System Library (libSystem, \-lSystem)
+.ds doc-str-Lb-libtermcap  Termcap Access Library (libtermcap, \-ltermcap)
+.ds doc-str-Lb-libterminfo Terminal Information Library (libterminfo, \-lterminfo)
+.ds doc-str-Lb-libthr      1:1 Threading Library (libthr, \-lthr)
+.ds doc-str-Lb-libufs      UFS File System Access Library (libufs, \-lufs)
+.ds doc-str-Lb-libugidfw   File System Firewall Interface Library (libugidfw, \-lugidfw)
+.ds doc-str-Lb-libulog     User Login Record Library (libulog, \-lulog)
+.ds doc-str-Lb-libusbhid   USB Human Interface Devices Library (libusbhid, \-lusbhid)
+.ds doc-str-Lb-libutil     System Utilities Library (libutil, \-lutil)
+.ds doc-str-Lb-libvgl      Video Graphics Library (libvgl, \-lvgl)
+.ds doc-str-Lb-libx86_64   x86_64 Architecture Library (libx86_64, \-lx86_64)
+.ds doc-str-Lb-libz        Compression Library (libz, \-lz)
+.
+.de Lb
+.  if !\n[doc-arg-limit] \{\
+.    ie \n[.$] \{\
+.      ds doc-macro-name Lb
+.      doc-parse-args \$@
+.    \}
+.    el \
+.      tm Usage: .Lb library_name ... (#\n[.c])
+.  \}
+.
+.  if !\n[doc-arg-limit] \
+.    return
+.
+.  nr doc-arg-ptr +1
+.  ie (\n[doc-arg-limit] >= \n[doc-arg-ptr]) \{\
+.    nr doc-curr-font \n[.f]
+.    nr doc-curr-size \n[.ps]
+.    ds doc-str-Lb \f[\n[doc-curr-font]]\s[\n[doc-curr-size]u]
+.
+.    ie d doc-str-Lb-\*[doc-arg\n[doc-arg-ptr]] \
+.      ds doc-str-Lb1 "\*[doc-str-Lb-\*[doc-arg\n[doc-arg-ptr]]]
+.    el \{\
+.      tmc "mdoc warning: .Lb: no description for library
+.      tm1 " `\*[doc-arg\n[doc-arg-ptr]]' available (#\n[.c])
+.      ds doc-str-Lb1 library \*[Lq]\*[doc-arg\n[doc-arg-ptr]]\*[Rq]
+.    \}
+.
+.    \" replacing argument with result
+.    ds doc-arg\n[doc-arg-ptr] "\*[doc-str-Lb1]
+.
+.    if \n[doc-in-library-section] \
+.      br
+.    doc-print-recursive
+.    if \n[doc-in-library-section] \
+.      br
+.  \}
+.  el \{\
+.    tm Usage: .Lb library_name ... (#\n[.c])
+.    doc-reset-args
+.  \}
+..
+.
+.
+.ec
+.
+.\" EOF
diff -Nuar groff-1.22.3.old/tmac/doc.tmac groff-1.22.3/tmac/doc.tmac
--- groff-1.22.3.old/tmac/doc.tmac	2014-11-04 10:38:35.534520134 +0200
+++ groff-1.22.3/tmac/doc.tmac	1970-01-01 02:00:00.000000000 +0200
@@ -1,6599 +0,0 @@
-.\" -*- nroff -*-
-.\"
-.\" Copyright (c) 1991, 1993
-.\"	The Regents of the University of California.  All rights reserved.
-.\"
-.\" Redistribution and use in source and binary forms, with or without
-.\" modification, are permitted provided that the following conditions
-.\" are met:
-.\" 1. Redistributions of source code must retain the above copyright
-.\"    notice, this list of conditions and the following disclaimer.
-.\" 2. Redistributions in binary form must reproduce the above copyright
-.\"    notice, this list of conditions and the following disclaimer in the
-.\"    documentation and/or other materials provided with the distribution.
-.\" 3. [Deleted.  See
-.\"     ftp://ftp.cs.berkeley.edu/pub/4bsd/README.Impt.License.Change]
-.\" 4. Neither the name of the University nor the names of its contributors
-.\"    may be used to endorse or promote products derived from this software
-.\"    without specific prior written permission.
-.\"
-.\" THIS SOFTWARE IS PROVIDED BY THE REGENTS AND CONTRIBUTORS ``AS IS'' AND
-.\" ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE
-.\" IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE
-.\" ARE DISCLAIMED.  IN NO EVENT SHALL THE REGENTS OR CONTRIBUTORS BE LIABLE
-.\" FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL
-.\" DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS
-.\" OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION)
-.\" HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT
-.\" LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY
-.\" OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF
-.\" SUCH DAMAGE.
-.\"
-.\"     @(#)doc	8.1 (Berkeley) 06/08/93
-.\"
-.\" Modified by jjc@jclark.com as follows: the doc-* files are assumed to be
-.\" installed as mdoc/doc-* rather than tmac.doc-* (the filename
-.\" `tmac.doc-common' would be too long); when using groff, the doc-* files
-.\" are loaded using the `mso' request.
-.\"
-.\" Modified by
-.\"
-.\"   Werner LEMBERG <wl@gnu.org>      and
-.\"   Ruslan Ermilov <ru@freebsd.org>
-.\"
-.\" to make it more readable: using long names and many groff features,
-.\" updating and extending documentation, etc.
-.\"
-.\" %beginstrip%
-.
-.
-.if !\n(.g \
-.  ab This version of mdoc can be run with GNU troff only!
-.
-.
-.do if d Dd .nx
-.
-.
-.cp 0
-.
-.
-.if (\n[.x]\n[.y] < 118) \
-.  ab You need GNU troff version 1.18 or higher to run this version of mdoc!
-.
-.
-.\" Load start-up files
-.ie t \
-.  mso mdoc/doc-ditroff
-.el \
-.  mso mdoc/doc-nroff
-.
-.mso mdoc/doc-common
-.mso mdoc/doc-syms
-.
-.
-.eo
-.
-.
-.\" NS doc-macro-name global string
-.\" NS   name of calling request (set in each user-requestable macro)
-.
-.ds doc-macro-name
-.als doc-arg0 doc-macro-name
-.
-.
-.\" NS doc-arg-limit global register
-.\" NS   total number of arguments
-.
-.nr doc-arg-limit 0
-.
-.
-.\" NS doc-num-args global register
-.\" NS   number of arguments to handle (must be set to \n[.$] prior to
-.\" NS   `doc-parse-arg-vector' request)
-.
-.nr doc-num-args 0
-.
-.
-.\" NS doc-arg-ptr global register
-.\" NS   argument pointer
-.
-.nr doc-arg-ptr 0
-.
-.
-.\" NS doc-argXXX global string
-.\" NS   argument vector
-.\" NS
-.\" NS limit:
-.\" NS   doc-arg-limit
-.
-.ds doc-arg1
-.
-.
-.\" NS doc-typeXXX global register
-.\" NS   argument type vector (macro=1, string=2, punctuation suffix=3,
-.\" NS   punctuation prefix=4)
-.\" NS
-.\" NS limit:
-.\" NS   doc-arg-limit
-.
-.nr doc-type1 0
-.
-.
-.\" NS doc-spaceXXX global string
-.\" NS   space vector
-.\" NS
-.\" NS limit:
-.\" NS   doc-arg-limit
-.
-.ds doc-space1
-.
-.
-.\" NS doc-parse-args macro
-.\" NS   parse arguments (recursively) (`.doc-parse-args arg ...')
-.\" NS
-.\" NS modifies:
-.\" NS   doc-arg-limit
-.\" NS   doc-arg-ptr
-.\" NS   doc-argXXX
-.\" NS   doc-spaceXXX
-.\" NS   doc-typeXXX
-.\" NS   doc-arg-ptr
-.\" NS   doc-have-space
-.\" NS
-.\" NS local variables:
-.\" NS   doc-reg-dpa
-.\" NS   doc-reg-dpa1
-.\" NS   doc-str-dpa
-.
-.de doc-parse-args
-.  if !\n[doc-arg-limit] \
-.    doc-set-spacing-1
-.
-.  nr doc-have-space 0
-.
-.  if !\n[.$] \
-.    return
-.
-.  nr doc-arg-limit +1
-.
-.  \" handle `|' and `...' specially
-.  ie        "\$1"|" \
-.    ds doc-arg\n[doc-arg-limit] \f[R]|\f[]
-.  el \{ .ie "\$1"..." \
-.    ds doc-arg\n[doc-arg-limit] \|.\|.\|.
-.  el \
-.    ds doc-arg\n[doc-arg-limit] "\$1
-.  \}
-.
-.  \" get argument type and set spacing
-.  doc-get-arg-type* \n[doc-arg-limit]
-.  nr doc-type\n[doc-arg-limit] \n[doc-arg-type]
-.  doc-set-spacing-\n[doc-arg-type]
-.
-.  \" check whether we have processed the last parameter
-.  ie (\n[.$] == 1) \
-.    nr doc-arg-ptr 0
-.  el \{\
-.    shift
-.    doc-parse-args \$@
-.  \}
-.
-.  nh
-..
-.
-.
-.\" NS doc-parse-arg-vector macro
-.\" NS   parse argument vector (recursive)
-.\" NS
-.\" NS   cf. comments in doc-parse-args
-.\" NS
-.\" NS modifies:
-.\" NS   doc-arg-limit
-.\" NS   doc-arg-ptr
-.\" NS   doc-argXXX
-.\" NS   doc-num-args
-.\" NS   doc-spaceXXX
-.\" NS   doc-typeXXX
-.\" NS
-.\" NS local variables:
-.\" NS   doc-reg-dpav
-.\" NS   doc-reg-dpav1
-.\" NS   doc-str-dpav
-.
-.de doc-parse-arg-vector
-.  if !\n[doc-arg-limit] \
-.    doc-set-spacing-1
-.
-.  nr doc-arg-limit +1
-.
-.  ie        "\*[doc-arg\n[doc-arg-limit]]"|" \
-.    ds doc-arg\n[doc-arg-limit] \f[R]|\f[]
-.  el \{ .if "\*[doc-arg\n[doc-arg-limit]]"..." \
-.    ds doc-arg\n[doc-arg-limit] \|.\|.\|.
-.  \}
-.
-.  doc-get-arg-type* \n[doc-arg-limit]
-.  nr doc-type\n[doc-arg-limit] \n[doc-arg-type]
-.  doc-set-spacing-\n[doc-arg-type]
-.
-.  ie (\n[doc-num-args] == 1) \{\
-.    nr doc-arg-ptr 0
-.    nr doc-num-args 0
-.  \}
-.  el \{\
-.    nr doc-num-args -1
-.    doc-parse-arg-vector
-.  \}
-.
-.  nh
-..
-.
-.
-.\" NS doc-parse-space-vector macro
-.\" NS   parse space vector (recursive)
-.\" NS
-.\" NS modifies:
-.\" NS   doc-arg-limit
-.\" NS   doc-num-args
-.\" NS   doc-spaceXXX
-.
-.de doc-parse-space-vector
-.  nr doc-arg-limit +1
-.
-.  doc-set-spacing-\n[doc-type\n[doc-arg-limit]]
-.
-.  ie (\n[doc-num-args] == 1) \
-.    nr doc-num-args 0
-.  el \{\
-.    nr doc-num-args -1
-.    doc-parse-space-vector
-.  \}
-..
-.
-.
-.\" NS doc-remaining-args macro
-.\" NS   output remaining arguments as-is, separated by spaces (until
-.\" NS   `doc-num-args' is exhausted)
-.\" NS
-.\" NS modifies:
-.\" NS   doc-arg-ptr
-.\" NS   doc-num-args
-.
-.de doc-remaining-args
-.  nr doc-arg-ptr +1
-.  nop \)\*[doc-arg\n[doc-arg-ptr]]\c
-.
-.  ie (\n[doc-num-args] == 1) \{\
-.    nr doc-arg-ptr 0
-.    nr doc-num-args 0
-.  \}
-.  el \{\
-.    nop \)\*[doc-space]\c
-.    nr doc-num-args -1
-.    doc-remaining-args
-.  \}
-..
-.
-.
-.\" NS doc-append-arg macro
-.\" NS   append one argument to argument vector:
-.\" NS   `.doc-append-arg [arg] [type]'
-.\" NS
-.\" NS modifies:
-.\" NS   doc-arg-limit
-.\" NS   doc-argXXX
-.\" NS   doc-typeXXX
-.
-.de doc-append-arg
-.  nr doc-arg-limit +1
-.  ds doc-arg\n[doc-arg-limit] "\$1
-.  nr doc-type\n[doc-arg-limit] \$2
-.  doc-set-spacing-\$2
-..
-.
-.
-.\" NS doc-print-and-reset macro
-.\" NS   finish input line and clean up argument vectors
-.
-.de doc-print-and-reset
-.  if \n[doc-space-mode] \
-.    nop \)
-.  doc-reset-args
-..
-.
-.
-.\" NS doc-reset-args macro
-.\" NS   reset argument counters
-.\" NS
-.\" NS modifies:
-.\" NS   doc-arg-limit
-.\" NS   doc-arg-ptr
-.\" NS   doc-have-slot
-.
-.de doc-reset-args
-.  nr doc-arg-limit 0
-.  nr doc-arg-ptr 0
-.  nr doc-have-slot 0
-.
-.  hy \n[doc-hyphen-flags]
-..
-.
-.
-.ec
-.
-.\" NS doc-curr-font global register
-.\" NS   saved current font
-.
-.nr doc-curr-font \n[.f]
-.
-.
-.\" NS doc-curr-size global register
-.\" NS   saved current font size
-.
-.nr doc-curr-size \n[.ps]
-.
-.eo
-.
-.
-.\" NS Fl user macro
-.\" NS   handle flags (appends `-' and prints flags): `.Fl [arg ...]'
-.\" NS
-.\" NS modifies:
-.\" NS   doc-arg-ptr
-.\" NS   doc-curr-font
-.\" NS   doc-curr-size
-.\" NS   doc-macro-name
-.\" NS
-.\" NS local variables:
-.\" NS   doc-reg-Fl (for communication with doc-flag-recursion)
-.\" NS
-.\" NS width register `Fl' set in doc-common
-.
-.de Fl
-.  nr doc-curr-font \n[.f]
-.  nr doc-curr-size \n[.ps]
-.  nop \*[doc-Fl-font]\c
-.
-.  if !\n[doc-arg-limit] \{\
-.    ds doc-macro-name Fl
-.    doc-parse-args \$@
-.
-.    \" no arguments
-.    if !\n[.$] \
-.      nop \|\-\|\f[]\s[0]
-.  \}
-.
-.  if !\n[doc-arg-limit] \
-.    return
-.
-.  nr doc-arg-ptr +1
-.  ie (\n[doc-arg-limit] < \n[doc-arg-ptr]) \{\
-.    \" last argument
-.    nop \|\-\f[]\s[0]\c
-.    doc-print-and-reset
-.  \}
-.  el \{\
-.    ie (\n[doc-type\n[doc-arg-ptr]] == 1) \{\
-.      nop \|\-\f[]\s[0]\c
-.      \*[doc-arg\n[doc-arg-ptr]]
-.    \}
-.    el \{\
-.      if (\n[doc-type\n[doc-arg-ptr]] == 3) \
-.        nop \|\-\|\c
-.
-.      nr doc-reg-Fl 1
-.      doc-flag-recursion
-.  \}\}
-..
-.
-.
-.\" NS doc-flag-recursion macro
-.\" NS   `Fl' flag recursion routine (special handling)
-.\" NS
-.\" NS modifies:
-.\" NS   doc-arg-ptr
-.\" NS
-.\" NS local variables:
-.\" NS   doc-reg-dfr
-.\" NS   doc-reg-dfr1
-.\" NS   doc-str-dfr
-.
-.de doc-flag-recursion
-.  nr doc-reg-dfr1 \n[doc-type\n[doc-arg-ptr]]
-.  ds doc-str-dfr "\*[doc-arg\n[doc-arg-ptr]]
-.
-.  ie (\n[doc-reg-dfr1] == 1) \{\
-.    nop \f[]\s[0]\c
-.    \*[doc-str-dfr]
-.  \}
-.  el \{\
-.    nr doc-reg-dfr \n[doc-arg-ptr]
-.
-.    ie (\n[doc-reg-dfr1] == 2) \{\
-.      \" handle vertical bar -- doc-reg-Fl is set for the first call of
-.      \" doc-flag-recursion only; we need this to make `.Fl | ...' work
-.      \" correctly
-.      ie "\*[doc-str-dfr]"\*[Ba]" \{\
-.        if \n[doc-reg-Fl] \
-.          nop \|\-\*[doc-space]\c
-.        nop \)\*[Ba]\c
-.      \}
-.      el \{\
-.        ie "\*[doc-str-dfr]"\f[R]|\f[]" \{\
-.          if \n[doc-reg-Fl] \
-.            nop \|\-\*[doc-space]\c
-.          nop \f[R]|\f[]\c
-.        \}
-.        el \{\
-.          \" two consecutive hyphen characters?
-.          ie "\*[doc-str-dfr]"-" \
-.            nop \|\-\^\-\|\c
-.          el \
-.            nop \|\%\-\*[doc-str-dfr]\&\c
-.    \}\}\}
-.    el \{\
-.      nop \f[\n[doc-curr-font]]\s[\n[doc-curr-size]u]\c
-.      nop \)\*[doc-str-dfr]\f[]\s[0]\c
-.    \}
-.
-.    ie (\n[doc-arg-limit] == \n[doc-arg-ptr]) \{\
-.      \" last argument
-.      if (\n[doc-reg-dfr1] == 4) \
-.        nop \|\-\c
-.      nop \f[\n[doc-curr-font]]\s[\n[doc-curr-size]u]\c
-.      doc-print-and-reset
-.    \}
-.    el \{\
-.      nr doc-arg-ptr +1
-.      ie (\n[doc-type\n[doc-arg-ptr]] == 3) \{\
-.        ie (\n[doc-type\n[doc-reg-dfr]] == 4) \
-.          nop \|\-\c
-.        el \
-.          nop \)\*[doc-space\n[doc-reg-dfr]]\c
-.      \}
-.      el \
-.        nop \)\*[doc-space\n[doc-reg-dfr]]\c
-.
-.      shift
-.      nr doc-reg-Fl 0
-.      doc-flag-recursion \$@
-.  \}\}
-..
-.
-.
-.\" NS doc-print-recursive macro
-.\" NS   general name recursion routine (print remaining arguments)
-.\" NS
-.\" NS modifies:
-.\" NS   doc-arg-ptr
-.\" NS
-.\" NS local variables:
-.\" NS   doc-reg-dpr
-.\" NS   doc-reg-dpr1
-.\" NS   doc-str-dpr
-.
-.de doc-print-recursive
-.  nr doc-reg-dpr1 \n[doc-type\n[doc-arg-ptr]]
-.  ds doc-str-dpr "\*[doc-arg\n[doc-arg-ptr]]
-.
-.  ie (\n[doc-reg-dpr1] == 1) \{\
-.    nop \f[\n[doc-curr-font]]\s[\n[doc-curr-size]u]\c
-.    \*[doc-str-dpr]
-.  \}
-.  el \{\
-.    nr doc-reg-dpr \n[doc-arg-ptr]
-.
-.    \" the `\%' prevents hyphenation on a dash (`-')
-.    ie (\n[doc-reg-dpr1] == 2) \
-.      nop \%\*[doc-str-dpr]\&\c
-.    el \{\
-.      \" punctuation character
-.      nop \f[\n[doc-curr-font]]\s[\n[doc-curr-size]u]\c
-.      nop \)\*[doc-str-dpr]\f[]\s[0]\c
-.    \}
-.
-.    nr doc-arg-ptr +1
-.    ie (\n[doc-arg-limit] < \n[doc-arg-ptr]) \{\
-.      \" last argument
-.      nop \f[\n[doc-curr-font]]\s[\n[doc-curr-size]u]\c
-.      doc-print-and-reset
-.    \}
-.    el \{\
-.      nop \)\*[doc-space\n[doc-reg-dpr]]\c
-.      doc-print-recursive
-.  \}\}
-..
-.
-.
-.\" NS doc-print-prefixes macro
-.\" NS   print leading prefixes
-.\" NS
-.\" NS modifies:
-.\" NS   doc-arg-ptr
-.
-.de doc-print-prefixes
-.  while (\n[doc-arg-limit] >= \n[doc-arg-ptr]) \{\
-.    if !(\n[doc-type\n[doc-arg-ptr]] == 4) \
-.      break
-.    nop \f[\n[doc-curr-font]]\s[\n[doc-curr-size]u]\c
-.    nop \)\*[doc-arg\n[doc-arg-ptr]]\f[]\s[0]\c
-.    nr doc-arg-ptr +1
-.  \}
-..
-.
-.
-.\" NS doc-generic-macro macro
-.\" NS   this is the skeleton for most simple macros
-.\" NS
-.\" NS modifies:
-.\" NS   doc-arg-ptr
-.\" NS   doc-curr-font
-.\" NS   doc-curr-size
-.\" NS   doc-macro-name
-.
-.de doc-generic-macro
-.  if !\n[doc-arg-limit] \{\
-.    ie \n[.$] \{\
-.      ds doc-macro-name \$0
-.      doc-parse-args \$@
-.    \}
-.    el \
-.      tm Usage: .\$0 \*[doc-\$0-usage] ... (#\n[.c])
-.  \}
-.
-.  if !\n[doc-arg-limit] \
-.    return
-.
-.  nr doc-arg-ptr +1
-.  ie (\n[doc-arg-limit] >= \n[doc-arg-ptr]) \{\
-.    if (\n[doc-type\n[doc-arg-ptr]] == 1) \{\
-.      tmc mdoc warning: Using a macro as first argument
-.      tm1 " cancels effect of .\$0 (#\n[.c])
-.
-.      \" the right action here would be to reset the argument counters
-.      \" and bail out -- unfortunately, a small number of manual pages
-.      \" (less than 2% for FreeBSD which has been used for testing)
-.      \" relied on the old behaviour (silently ignore this error),
-.      \" so it is commented out
-.
-.\"    doc-reset-args
-.    \}
-.\"  el \{\
-.      nr doc-curr-font \n[.f]
-.      nr doc-curr-size \n[.ps]
-.      nop \*[doc-\$0-font]\c
-.      doc-print-recursive
-.\"  \}
-.  \}
-.  el \{\
-.    tm Usage: .\$0 \*[doc-\$0-usage] ... (#\n[.c])
-.    doc-reset-args
-.  \}
-..
-.
-.
-.\" NS Ar user macro
-.\" NS   command line `argument' macro: `.Ar [args ...]'
-.\" NS
-.\" NS modifies:
-.\" NS   doc-arg-ptr
-.\" NS   doc-curr-font
-.\" NS   doc-curr-size
-.\" NS   doc-macro-name
-.\" NS
-.\" NS local variable:
-.\" NS   doc-str-Ar-default
-.\" NS
-.\" NS width register `Ar' set in doc-common
-.
-.ds doc-str-Ar-default "file\ .\|.\|.
-.
-.de Ar
-.  nr doc-curr-font \n[.f]
-.  nr doc-curr-size \n[.ps]
-.  nop \*[doc-Ar-font]\c
-.
-.  if !\n[doc-arg-limit] \{\
-.    ds doc-macro-name Ar
-.    doc-parse-args \$@
-.
-.    \" no argument
-.    if !\n[.$] \
-.      nop \)\*[doc-str-Ar-default]\&\f[]\s[0]
-.  \}
-.
-.  if !\n[doc-arg-limit] \
-.    return
-.
-.  nr doc-arg-ptr +1
-.  doc-print-prefixes
-.  ie (\n[doc-arg-limit] < \n[doc-arg-ptr]) \{\
-.    nop \)\*[doc-str-Ar-default]\&\f[]\s[0]\c
-.    doc-print-and-reset
-.  \}
-.  el \{\
-.    if !(\n[doc-type\n[doc-arg-ptr]] == 2) \{\
-.      \" replace previous argument (Ar) with default value
-.      nr doc-arg-ptr -1
-.      ds doc-arg\n[doc-arg-ptr] "\*[doc-str-Ar-default]
-.      nr doc-type\n[doc-arg-ptr] 2
-.      ds doc-space\n[doc-arg-ptr] "\*[doc-space]
-.
-.      \" recompute space vector for remaining arguments
-.      nr doc-num-args (\n[doc-arg-limit] - \n[doc-arg-ptr])
-.      nr doc-arg-limit \n[doc-arg-ptr]
-.      doc-parse-space-vector
-.    \}
-.    doc-print-recursive
-.  \}
-..
-.
-.
-.\" NS Ad user macro
-.\" NS   Addresses
-.\" NS
-.\" NS width register `Ad' set in doc-common
-.
-.als Ad doc-generic-macro
-.ds doc-Ad-usage address
-.
-.
-.\" NS doc-indent-synopsis global register
-.\" NS   indentation in synopsis
-.
-.nr doc-indent-synopsis 0
-.
-.
-.\" NS doc-indent-synopsis-active global register (bool)
-.\" NS   indentation in synopsis active
-.
-.nr doc-indent-synopsis-active 0
-.
-.
-.\" NS Cd user macro
-.\" NS   config declaration (for section 4 SYNOPSIS)
-.\" NS
-.\" NS   this function causes a break; it uses the `Nm' font
-.\" NS
-.\" NS modifies:
-.\" NS   doc-arg-ptr
-.\" NS   doc-curr-font
-.\" NS   doc-curr-size
-.\" NS   doc-indent-synopsis
-.\" NS   doc-macro-name
-.\" NS
-.\" NS width register `Cd' set in doc-common
-.
-.de Cd
-.  if !\n[doc-arg-limit] \{\
-.    ie \n[.$] \{\
-.      ds doc-macro-name Cd
-.      doc-parse-args \$@
-.    \}
-.    el \
-.      tm Usage: .Cd configuration_file_declaration ... (#\n[.c])
-.  \}
-.
-.  if !\n[doc-arg-limit] \
-.    return
-.
-.  nr doc-arg-ptr +1
-.  ie (\n[doc-arg-limit] >= \n[doc-arg-ptr]) \{\
-.    nr doc-curr-font \n[.f]
-.    nr doc-curr-size \n[.ps]
-.
-.    ie \n[doc-in-synopsis-section] \{\
-.      ie "\*[doc-macro-name]"Cd" \{\
-.        br
-.        if !\n[doc-indent-synopsis] \
-.          nr doc-indent-synopsis \n[doc-display-indent]u
-.        if !\n[doc-indent-synopsis-active] \
-.          in +\n[doc-indent-synopsis]u
-.        ti -\n[doc-indent-synopsis]u
-.        nop \*[doc-Nm-font]\c
-.        doc-print-recursive
-.        if !\n[doc-indent-synopsis-active] \
-.          in -\n[doc-indent-synopsis]u
-.      \}
-.      el \{\
-.        nop \*[doc-Nm-font]\c
-.        doc-print-recursive
-.    \}\}
-.    el \{\
-.      nop \*[doc-Nm-font]\c
-.      doc-print-recursive
-.  \}\}
-.  el \{\
-.    tm Usage: .Cd configuration_file_declaration ... (#\n[.c])
-.    doc-reset-args
-.  \}
-..
-.
-.
-.\" NS Cm user macro
-.\" NS   interactive command modifier (flag)
-.\" NS
-.\" NS width register `Cm' set in doc-common
-.
-.als Cm doc-generic-macro
-.ds doc-Cm-usage interactive_command_modifier
-.
-.
-.\" NS Dv user macro
-.\" NS   defined variable
-.\" NS
-.\" NS   this function uses the `Er' font
-.\" NS
-.\" NS width register `Dv' set in doc-common
-.
-.als Dv doc-generic-macro
-.ds doc-Dv-usage defined_variable
-.als doc-Dv-font doc-Er-font
-.
-.
-.\" NS Em user macro
-.\" NS   emphasis
-.\" NS
-.\" NS width register `Em' set in doc-common
-.
-.als Em doc-generic-macro
-.ds doc-Em-usage text
-.
-.
-.\" NS Er user macro
-.\" NS   errno type
-.\" NS
-.\" NS width register `Er' set in doc-common
-.
-.als Er doc-generic-macro
-.ds doc-Er-usage text
-.
-.
-.\" NS Ev user macro
-.\" NS   environment variable
-.\" NS
-.\" NS width register `Ev' set in doc-common
-.
-.als Ev doc-generic-macro
-.ds doc-Ev-usage text
-.
-.
-.\" NS doc-have-decl global register (bool)
-.\" NS   subroutine test (in synopsis only)
-.
-.nr doc-have-decl 0
-.
-.
-.\" NS doc-have-var global register (bool)
-.\" NS   whether last type is a variable type
-.
-.nr doc-have-var 0
-.
-.
-.\" NS doc-do-func-decl macro
-.\" NS   do something special while in SYNOPSIS
-.\" NS
-.\" NS modifies:
-.\" NS   doc-curr-font
-.\" NS   doc-curr-size
-.\" NS   doc-have-decl
-.\" NS   doc-have-var
-.
-.de doc-do-func-decl
-.  if \n[doc-in-synopsis-section] \{\
-.    \" if a variable type was the last thing given, want vertical space
-.    if \n[doc-have-var] \{\
-.      doc-paragraph
-.      nr doc-have-var 0
-.    \}
-.    \" if a subroutine was the last thing given, want vertical space
-.    if \n[doc-have-func] \{\
-.      ie \n[doc-have-decl] \
-.        br
-.      el \
-.        doc-paragraph
-.    \}
-.    nr doc-have-decl 1
-.  \}
-.
-.  nr doc-curr-font \n[.f]
-.  nr doc-curr-size \n[.ps]
-..
-.
-.
-.\" NS Fd user macro
-.\" NS   function declaration -- not callable
-.\" NS
-.\" NS   this function causes a break
-.\" NS
-.\" NS width register `Fd' set in doc-common
-.
-.de Fd
-.  ie ((\n[.$] >= 1) & (\n[doc-arg-limit] == 0)) \{\
-.    doc-do-func-decl
-.    nop \*[doc-Fd-font]\$*
-.    br
-.    ft \n[doc-curr-font]
-.    ps \n[doc-curr-size]u
-.  \}
-.  el \{\
-.    tm Usage: .Fd function_declaration -- Fd is not callable (#\n[.c])
-.    doc-reset-args
-.  \}
-..
-.
-.
-.\" NS In user macro
-.\" NS   #include statement in SYNOPSIS
-.\" NS   <header.h> if not in SYNOPSIS
-.\" NS
-.\" NS   this function causes a break; it uses the `Fd' font
-.\" NS
-.\" NS modifies:
-.\" NS   doc-arg-ptr
-.\" NS   doc-curr-font
-.\" NS   doc-curr-size
-.\" NS   doc-indent-synopsis
-.\" NS   doc-macro-name
-.\" NS
-.\" NS width register `In' set in doc-common
-.
-.de In
-.  if !\n[doc-arg-limit] \{\
-.    ie \n[.$] \{\
-.      ds doc-macro-name In
-.      doc-parse-args \$@
-.    \}
-.    el \
-.      tm Usage: .In include_file ... (#\n[.c])
-.  \}
-.
-.  if !\n[doc-arg-limit] \
-.    return
-.
-.  nr doc-arg-ptr +1
-.  doc-print-prefixes
-.  ie ((\n[doc-arg-limit] >= \n[doc-arg-ptr]) & (\n[doc-type\n[doc-arg-ptr]] == 2)) \{\
-.    nr doc-curr-font \n[.f]
-.    nr doc-curr-size \n[.ps]
-.
-.    ie \n[doc-in-synopsis-section] \{\
-.      ie "\*[doc-macro-name]"In" \{\
-.        doc-do-func-decl
-.        nop \*[doc-Fd-font]#include <\*[doc-arg\n[doc-arg-ptr]]>
-.        ft \n[doc-curr-font]
-.        ps \n[doc-curr-size]u
-.        br
-.        nr doc-arg-ptr +1
-.        ie (\n[doc-arg-limit] >= \n[doc-arg-ptr]) \
-.          doc-print-recursive
-.        el \
-.          doc-reset-args
-.      \}
-.      el \{\
-.        ds doc-arg\n[doc-arg-ptr] "<\*[doc-Pa-font]\*[doc-arg\n[doc-arg-ptr]]
-.        as doc-arg\n[doc-arg-ptr] \f[\n[doc-curr-font]]\s[\n[doc-curr-size]u]>
-.        doc-print-recursive
-.    \}\}
-.    el \{\
-.      ds doc-arg\n[doc-arg-ptr] "<\*[doc-Pa-font]\*[doc-arg\n[doc-arg-ptr]]
-.      as doc-arg\n[doc-arg-ptr] \f[\n[doc-curr-font]]\s[\n[doc-curr-size]u]>
-.      doc-print-recursive
-.  \}\}
-.  el \{\
-.    tm Usage: .In include_file ... (#\n[.c])
-.    doc-reset-args
-.  \}
-..
-.
-.
-.\" NS Fr user macro
-.\" NS   function return value
-.\" NS
-.\" NS   this function uses the `Ar' font
-.\" NS
-.\" NS width register `Fr' set in doc-common
-.
-.als Fr doc-generic-macro
-.ds doc-Fr-usage function_return_value
-.als doc-Fr-font doc-Ar-font
-.
-.
-.\" NS Ic user macro
-.\" NS   interactive command
-.\" NS
-.\" NS width register `Ic' set in doc-common
-.
-.als Ic doc-generic-macro
-.ds doc-Ic-usage interactive_command
-.
-.
-.\" NS Li user macro
-.\" NS   literals
-.\" NS
-.\" NS width register `Li' set in doc-common
-.
-.als Li doc-generic-macro
-.ds doc-Li-usage argument
-.
-.
-.\" NS Ms user macro
-.\" NS   math symbol
-.\" NS
-.\" NS   this function uses the `Sy' font
-.\" NS
-.\" NS width register `Ms' set in doc-common
-.
-.als Ms doc-generic-macro
-.ds doc-Ms-usage math_symbol
-.als doc-Ms-font doc-Sy-font
-.
-.
-.\" NS doc-command-name global string
-.\" NS   save first invocation of .Nm
-.
-.ds doc-command-name
-.
-.
-.\" NS Nm user macro
-.\" NS   name of command or page topic
-.\" NS
-.\" NS modifies:
-.\" NS   doc-arg-ptr
-.\" NS   doc-command-name
-.\" NS   doc-curr-font
-.\" NS   doc-curr-size
-.\" NS   doc-indent-synopsis
-.\" NS   doc-indent-synopsis-active
-.\" NS   doc-macro-name
-.\" NS
-.\" NS width register `Nm' set in doc-common
-.
-.de Nm
-.  if !\n[doc-arg-limit] \{\
-.    ds doc-macro-name Nm
-.    ie \n[.$] \
-.      doc-parse-args \$@
-.    el \{\
-.      ie "\*[doc-command-name]"" \
-.        tm Usage: .Nm name ... (#\n[.c])
-.      el \
-.        doc-parse-args \*[doc-command-name]
-.  \}\}
-.
-.  if !\n[doc-arg-limit] \
-.    return
-.
-.  nr doc-arg-ptr +1
-.  doc-print-prefixes
-.  ie (\n[doc-arg-limit] < \n[doc-arg-ptr]) \{\
-.    \" last argument
-.    ie "\*[doc-command-name]"" \{\
-.      tm Usage: .Nm name ... (#\n[.c])
-.      doc-reset-args
-.    \}
-.    el \{\
-.      nop \*[doc-Nm-font]\*[doc-command-name]\f[]\s[0]\c
-.      doc-print-and-reset
-.  \}\}
-.  el \{\
-.    nr doc-curr-font \n[.f]
-.    nr doc-curr-size \n[.ps]
-.
-.    ie !(\n[doc-type\n[doc-arg-ptr]] == 2) \{\
-.      ie "\*[doc-command-name]"" \
-.        tm Usage: .Nm name ... (#\n[.c])
-.      el \{\
-.        \" replace previous argument (Nm) with default value
-.        nr doc-arg-ptr -1
-.        ds doc-arg\n[doc-arg-ptr] "\*[doc-Nm-font]\*[doc-command-name]\f[]\s[0]
-.        nr doc-type\n[doc-arg-ptr] 2
-.        ds doc-space\n[doc-arg-ptr] "\*[doc-space]
-.
-.        \" recompute space vector for remaining arguments
-.        nr doc-num-args (\n[doc-arg-limit] - \n[doc-arg-ptr])
-.        nr doc-arg-limit \n[doc-arg-ptr]
-.        doc-parse-space-vector
-.    \}\}
-.    el \{\
-.      \" handle `.Nm ...' in SYNOPSIS
-.      if \n[doc-in-synopsis-section] \{\
-.        if "\*[doc-macro-name]"Nm" \{\
-.          br
-.          if !\n[doc-indent-synopsis] \{\
-.            doc-get-width "\*[doc-arg\n[doc-arg-ptr]]"
-.            nr doc-indent-synopsis ((\n[doc-width]u + 1u) * \n[doc-fixed-width]u)
-.          \}
-.          if !\n[doc-indent-synopsis-active] \{\
-.            in +\n[doc-indent-synopsis]u
-.            nr doc-indent-synopsis-active 1
-.          \}
-.          ti -\n[doc-indent-synopsis]u
-.      \}\}
-.      if "\*[doc-command-name]"" \
-.        ds doc-command-name "\*[doc-arg\n[doc-arg-ptr]]
-.
-.      nop \*[doc-Nm-font]\c
-.    \}
-.    doc-print-recursive
-.  \}
-..
-.
-.
-.\" NS Pa user macro
-.\" NS   pathname: `.Pa [arg ...]'
-.\" NS
-.\" NS modifies:
-.\" NS   doc-arg-ptr
-.\" NS   doc-curr-font
-.\" NS   doc-curr-size
-.\" NS   doc-macro-name
-.\" NS
-.\" NS width register `Pa' set in doc-common
-.
-.de Pa
-.  if !\n[doc-arg-limit] \{\
-.    ds doc-macro-name Pa
-.    doc-parse-args \$@
-.
-.    \" default value
-.    if !\n[.$] \
-.      nop \*[doc-Pa-font]~\f[]\s[0]
-.  \}
-.
-.  if !\n[doc-arg-limit] \
-.    return
-.
-.  nr doc-arg-ptr +1
-.  doc-print-prefixes
-.  ie (\n[doc-arg-limit] >= \n[doc-arg-ptr]) \{\
-.    nr doc-curr-font \n[.f]
-.    nr doc-curr-size \n[.ps]
-.    nop \*[doc-Pa-font]\c
-.    if !(\n[doc-type\n[doc-arg-ptr]] == 2) \{\
-.      \" replace previous argument (Pa) with default value
-.      nr doc-arg-ptr -1
-.      ds doc-arg\n[doc-arg-ptr] ~
-.      nr doc-type\n[doc-arg-ptr] 2
-.      ds doc-space\n[doc-arg-ptr] "\*[doc-space]
-.
-.      \" recompute space vector for remaining arguments
-.      nr doc-num-args (\n[doc-arg-limit] - \n[doc-arg-ptr])
-.      nr doc-arg-limit \n[doc-arg-ptr]
-.      doc-parse-space-vector
-.    \}
-.    doc-print-recursive
-.  \}
-.  el \{\
-.    nop \*[doc-Pa-font]~\f[]\s[0]\c
-.    doc-print-and-reset
-.  \}
-..
-.
-.
-.\" NS Sy user macro
-.\" NS   symbolics
-.\" NS
-.\" NS width register `Sy' set in doc-common
-.
-.als Sy doc-generic-macro
-.ds doc-Sy-usage symbolic_text
-.
-.
-.\" NS Me user macro
-.\" NS   menu entries
-.\" NS
-.\" NS width register `Me' set in doc-common
-.
-.als Me doc-generic-macro
-.ds doc-Me-usage menu_entry
-.
-.
-.\" NS Tn user macro
-.\" NS   trade name
-.\" NS
-.\" NS modifies:
-.\" NS   doc-arg-ptr
-.\" NS   doc-curr-font
-.\" NS   doc-curr-size
-.\" NS   doc-macro-name
-.\" NS
-.\" NS width register `Tn' set in doc-common
-.
-.de Tn
-.  if !\n[doc-arg-limit] \{\
-.    ie \n[.$] \{\
-.      ds doc-macro-name Tn
-.      doc-parse-args \$@
-.    \}
-.    el \
-.      tm Usage: .Tn trade_name ... (#\n[.c])
-.  \}
-.
-.  if !\n[doc-arg-limit] \
-.    return
-.
-.  nr doc-arg-ptr +1
-.  ie (\n[doc-arg-limit] >= \n[doc-arg-ptr]) \{\
-.    nr doc-curr-font \n[.f]
-.    nr doc-curr-size \n[.ps]
-.    nop \)\*[doc-Tn-font-size]\c
-.    ie !\n[doc-is-reference] \{\
-.      nop \)\*[doc-Tn-font-shape]\c
-.      doc-print-recursive
-.    \}
-.    el \
-.      doc-do-references
-.  \}
-.  el \{\
-.    tm Usage: .Tn trade_name ... (#\n[.c])
-.    doc-reset-args
-.  \}
-..
-.
-.
-.\" NS Va user macro
-.\" NS   variable name
-.\" NS
-.\" NS width register `Va' set in doc-common
-.
-.als Va doc-generic-macro
-.ds doc-Va-usage variable_name
-.
-.
-.\" NS No user macro
-.\" NS   normal text macro (default text style if mess up)
-.\" NS
-.\" NS width register `No' set in doc-common
-.
-.als No doc-generic-macro
-.ds doc-No-usage normal_text
-.
-.
-.\" NS doc-quote-left global string
-.\" NS   left quotation character for `doc-enclose-string' and
-.\" NS   `doc-enclose-open'
-.
-.ds doc-quote-left
-.
-.
-.\" NS doc-quote-right global string
-.\" NS   right quotation character for `doc-enclose-string' and
-.\" NS   `doc-enclose-close'
-.
-.ds doc-quote-right
-.
-.
-.\" NS Op user macro
-.\" NS   option expression (i.e., enclose string in square brackets)
-.\" NS
-.\" NS modifies:
-.\" NS   doc-macro-name
-.\" NS   doc-quote-left
-.\" NS   doc-quote-right
-.\" NS
-.\" NS width register `Op' set in doc-common
-.
-.de Op
-.  if !\n[doc-arg-limit] \
-.    ds doc-macro-name Op
-.
-.  ds doc-quote-left "\*[doc-left-bracket]
-.  ds doc-quote-right "\*[doc-right-bracket]
-.
-.  doc-enclose-string \$@
-..
-.
-.
-.\" NS Aq user macro
-.\" NS   enclose string in angle brackets
-.\" NS
-.\" NS modifies:
-.\" NS   doc-macro-name
-.\" NS   doc-quote-left
-.\" NS   doc-quote-right
-.\" NS
-.\" NS width register `Aq' set in doc-common
-.
-.de Aq
-.  if !\n[doc-arg-limit] \
-.    ds doc-macro-name Aq
-.
-.  ie "\*[doc-macro-name]"An" \{\
-.    ds doc-quote-left <
-.    ds doc-quote-right >
-.  \}
-.  el \{\
-.    ds doc-quote-left \[la]
-.    ds doc-quote-right \[ra]
-.  \}
-.
-.  doc-enclose-string \$@
-..
-.
-.
-.\" NS Bq user macro
-.\" NS   enclose string in square brackets
-.\" NS
-.\" NS modifies:
-.\" NS   doc-macro-name
-.\" NS   doc-quote-left
-.\" NS   doc-quote-right
-.\" NS
-.\" NS width register `Bq' set in doc-common
-.
-.de Bq
-.  if !\n[doc-arg-limit] \
-.    ds doc-macro-name Bq
-.
-.  ds doc-quote-left "\*[doc-left-bracket]
-.  ds doc-quote-right "\*[doc-right-bracket]
-.
-.  doc-enclose-string \$@
-..
-.
-.
-.\" NS Brq user macro
-.\" NS   enclose string in braces
-.\" NS
-.\" NS modifies:
-.\" NS   doc-macro-name
-.\" NS   doc-quote-left
-.\" NS   doc-quote-right
-.\" NS
-.\" NS width register `Brq' set in doc-common
-.
-.de Brq
-.  if !\n[doc-arg-limit] \
-.    ds doc-macro-name Brq
-.
-.  ds doc-quote-left {
-.  ds doc-quote-right }
-.
-.  doc-enclose-string \$@
-..
-.
-.
-.\" NS Dq user macro
-.\" NS   enclose string in double quotes
-.\" NS
-.\" NS modifies:
-.\" NS   doc-macro-name
-.\" NS   doc-quote-left
-.\" NS   doc-quote-right
-.\" NS
-.\" NS width register `Dq' set in doc-common
-.
-.de Dq
-.  if !\n[doc-arg-limit] \
-.    ds doc-macro-name Dq
-.
-.  ds doc-quote-left "\*[Lq]
-.  ds doc-quote-right "\*[Rq]
-.
-.  doc-enclose-string \$@
-..
-.
-.
-.\" NS Eq user macro
-.\" NS   enclose string in user-defined quotes (args 1 and 2)
-.\" NS
-.\" NS modifies:
-.\" NS   doc-macro-name
-.\" NS   doc-quote-left
-.\" NS   doc-quote-right
-.\" NS
-.\" NS width register `Eq' set in doc-common
-.
-.de Eq
-.  if !\n[doc-arg-limit] \
-.    ds doc-macro-name Eq
-.
-.  ds doc-quote-left "\$1
-.  ds doc-quote-right "\$2
-.
-.  shift 2
-.  doc-enclose-string \$@
-..
-.
-.
-.\" NS Pq user macro
-.\" NS   enclose string in parentheses
-.\" NS
-.\" NS modifies:
-.\" NS   doc-macro-name
-.\" NS   doc-quote-left
-.\" NS   doc-quote-right
-.\" NS
-.\" NS width register `Pq' set in doc-common
-.
-.de Pq
-.  if !\n[doc-arg-limit] \
-.    ds doc-macro-name Pq
-.
-.  ds doc-quote-left "\*[doc-left-parenthesis]
-.  ds doc-quote-right "\*[doc-right-parenthesis]
-.
-.  doc-enclose-string \$@
-..
-.
-.
-.\" NS Ql user macro
-.\" NS   quoted literal
-.\"
-.\"   is in file doc-[dit|n]roff
-.
-.
-.\" NS Qq user macro
-.\" NS   enclose string in straight double quotes
-.\" NS
-.\" NS modifies:
-.\" NS   doc-macro-name
-.\" NS   doc-quote-left
-.\" NS   doc-quote-right
-.\" NS
-.\" NS width register `Qq' set in doc-common
-.
-.de Qq
-.  if !\n[doc-arg-limit] \
-.    ds doc-macro-name Qq
-.
-.  ds doc-quote-left "\*[q]
-.  ds doc-quote-right "\*[q]
-.
-.  doc-enclose-string \$@
-..
-.
-.
-.\" NS Sq user macro
-.\" NS   enclose string in single quotes
-.\" NS
-.\" NS modifies:
-.\" NS   doc-macro-name
-.\" NS   doc-quote-left
-.\" NS   doc-quote-right
-.\" NS
-.\" NS width register `Sq' set in doc-common
-.
-.de Sq
-.  if !\n[doc-arg-limit] \
-.    ds doc-macro-name Sq
-.
-.  ds doc-quote-left "\*[doc-left-singlequote]
-.  ds doc-quote-right "\*[doc-right-singlequote]
-.
-.  doc-enclose-string \$@
-..
-.
-.
-.\" NS Es user macro
-.\" NS   set up arguments (i.e., the left and right quotation character as
-.\" NS   first and second argument) for .En call
-.\" NS
-.\" NS modifies:
-.\" NS   doc-arg-ptr
-.\" NS   doc-macro-name
-.\" NS   doc-quote-left
-.\" NS   doc-quote-right
-.
-.de Es
-.  if !\n[doc-arg-limit] \{\
-.    ie (\n[.$] > 2) \{\
-.      ds doc-macro-name Es
-.      doc-parse-args \$@
-.    \}
-.    el \{\
-.      ds doc-quote-left "\$1
-.      ds doc-quote-right "\$2
-.  \}\}
-.
-.  if !\n[doc-arg-limit] \
-.    return
-.
-.  nr doc-arg-ptr +1
-.  ds doc-quote-left "\*[doc-arg\n[doc-arg-ptr]]
-.  nr doc-arg-ptr +1
-.  ds doc-quote-right "\*[doc-arg\n[doc-arg-ptr]]
-.  nr doc-arg-ptr +1
-.  ie (\n[doc-arg-limit] >= \n[doc-arg-ptr]) \
-.    doc-do-\n[doc-type\n[doc-arg-ptr]]
-.  el \
-.    doc-print-and-reset
-..
-.
-.
-.\" NS doc-have-slot global register (bool)
-.\" NS   set if `doc-enclose-string' has created a slot for closing
-.\" NS   delimiter
-.
-.nr doc-have-slot 0
-.
-.
-.\" NS doc-enclose-string macro
-.\" NS   enclose string with given args (e.g. [ and ])
-.\" NS
-.\" NS modifies:
-.\" NS   doc-arg-ptr
-.\" NS   doc-argXXX
-.\" NS   doc-have-slot
-.\" NS
-.\" NS local variables:
-.\" NS   doc-reg-des
-.\" NS   doc-reg-des1
-.\" NS   doc-reg-des2
-.\" NS
-.\" NS requires:
-.\" NS   doc-quote-left
-.\" NS   doc-quote-right
-.
-.de doc-enclose-string
-.  if \n[doc-in-synopsis-section] \
-.    doc-set-hard-space
-.
-.  if !\n[doc-arg-limit] \{\
-.    ie \n[.$] \
-.      doc-parse-args \$@
-.    el \{\
-.      nop \)\*[doc-quote-left]\*[doc-quote-right]
-.  \}\}
-.
-.  if !\n[doc-arg-limit] \
-.    return
-.
-.  nr doc-curr-font \n[.f]
-.  nr doc-curr-size \n[.ps]
-.
-.  nr doc-arg-ptr +1
-.  doc-print-prefixes
-.  \" the final `\)' prevents hyphenation in case the next character is `\%'
-.  nop \)\*[doc-quote-left]\)\c
-.  ie (\n[doc-arg-limit] < \n[doc-arg-ptr]) \{\
-.    \" last argument
-.    nop \)\*[doc-quote-right]\)\c
-.    doc-print-and-reset
-.  \}
-.  el \{\
-.    \" test whether last arguments are of type closing punctuation
-.    \" resp. suffix
-.    ie (\n[doc-type\n[doc-arg-limit]] == 3) \{\
-.      nr doc-reg-des (\n[doc-arg-limit] - 1)
-.      while (\n[doc-type\n[doc-reg-des]] == 3) \
-.        nr doc-reg-des -1
-.
-.      \" prepend closing delimiter
-.      nr doc-reg-des +1
-.      ds doc-arg\n[doc-reg-des] "\*[doc-quote-right]\)\*[doc-arg\n[doc-reg-des]]
-.    \}
-.    el \{\
-.      \" test whether last arguments are macros which continue the line
-.      \" logically
-.      nr doc-reg-des \n[doc-arg-limit]
-.      while (\n[doc-reg-des] >= \n[doc-arg-ptr]) \{\
-.        if !\A\*[doc-arg\n[doc-reg-des]] \
-.          break
-.        if !d doc-after-\*[doc-arg\n[doc-reg-des]] \
-.          break
-.        nr doc-reg-des -1
-.      \}
-.
-.      \" if there are no trailing macros to be skipped, append argument
-.      ie (\n[doc-reg-des] == \n[doc-arg-limit]) \
-.        doc-append-arg "\)\*[doc-quote-right]\)" 3
-.      el \{\
-.        \" if a previous call to `doc-enclose-string' has already created
-.        \" a slot, prepend argument
-.        ie \n[doc-have-slot] \
-.          ds doc-arg\n[doc-reg-des] "\*[doc-quote-right]\)\*[doc-arg\n[doc-reg-des]]
-.        el \{\
-.          \" we have to shift all arguments to the right
-.          nr doc-reg-des +1
-.          nr doc-reg-des1 \n[doc-arg-limit]
-.          nr doc-reg-des2 (\n[doc-arg-limit] + 1)
-.          while (\n[doc-reg-des1] >= \n[doc-reg-des]) \{\
-.            rn doc-arg\n[doc-reg-des1] doc-arg\n[doc-reg-des2]
-.            rnn doc-type\n[doc-reg-des1] doc-type\n[doc-reg-des2]
-.            rn doc-space\n[doc-reg-des1] doc-space\n[doc-reg-des2]
-.            nr doc-reg-des1 -1
-.            nr doc-reg-des2 -1
-.          \}
-.          nr doc-arg-limit +1
-.
-.          \" finally, insert closing delimiter into the freed slot and
-.          \" recompute spacing vector
-.          ds doc-arg\n[doc-reg-des] "\)\*[doc-quote-right]\)
-.          nr doc-type\n[doc-reg-des] 3
-.          nr doc-num-args (\n[doc-arg-limit] - \n[doc-reg-des] + 1)
-.          nr doc-arg-limit (\n[doc-reg-des] - 1)
-.          doc-parse-space-vector
-.          nr doc-have-slot 1
-.    \}\}\}
-.
-.    doc-do-\n[doc-type\n[doc-arg-ptr]]
-.  \}
-.
-.  if \n[doc-in-synopsis-section] \
-.    doc-set-soft-space
-..
-.
-.
-.\" NS En user macro
-.\" NS   enclose arguments with quotation characters set up with `.Es'
-.
-.als En doc-enclose-string
-.
-.
-.\" NS Ao user macro
-.\" NS   angle open
-.\" NS
-.\" NS modifies:
-.\" NS   doc-macro-name
-.\" NS   doc-quote-left
-.\" NS
-.\" NS width register `Ao' set in doc-common
-.
-.de Ao
-.  if !\n[doc-arg-limit] \
-.    ds doc-macro-name Ao
-.
-.  ie "\*[doc-macro-name]"An" \
-.    ds doc-quote-left <
-.  el \
-.    ds doc-quote-left \[la]
-.
-.  doc-enclose-open \$@
-..
-.
-.
-.\" NS Ac user macro
-.\" NS   angle close
-.\" NS
-.\" NS modifies:
-.\" NS   doc-macro-name
-.\" NS   doc-quote-right
-.\" NS
-.\" NS width register `Ac' set in doc-common
-.
-.de Ac
-.  if !\n[doc-arg-limit] \
-.    ds doc-macro-name Ac
-.
-.  ie "\*[doc-macro-name]"An" \
-.    ds doc-quote-right >
-.  el \
-.    ds doc-quote-right \[ra]
-.
-.  doc-enclose-close \$@
-..
-.
-.
-.\" NS Bo user macro
-.\" NS   bracket open
-.\" NS
-.\" NS modifies:
-.\" NS   doc-macro-name
-.\" NS   doc-quote-left
-.\" NS
-.\" NS width register `Bo' set in doc-common
-.
-.de Bo
-.  if !\n[doc-arg-limit] \
-.    ds doc-macro-name Bo
-.
-.  ds doc-quote-left "\*[doc-left-bracket]
-.
-.  doc-enclose-open \$@
-..
-.
-.
-.\" NS Bc user macro
-.\" NS   bracket close
-.\" NS
-.\" NS modifies:
-.\" NS   doc-macro-name
-.\" NS   doc-quote-right
-.\" NS
-.\" NS width register `Bc' set in doc-common
-.
-.de Bc
-.  if !\n[doc-arg-limit] \
-.    ds doc-macro-name Bc
-.
-.  ds doc-quote-right "\*[doc-right-bracket]
-.
-.  doc-enclose-close \$@
-..
-.
-.
-.\" NS Bro user macro
-.\" NS   brace open
-.\" NS
-.\" NS modifies:
-.\" NS   doc-macro-name
-.\" NS   doc-quote-left
-.\" NS
-.\" NS width register `Bro' set in doc-common
-.
-.de Bro
-.  if !\n[doc-arg-limit] \
-.    ds doc-macro-name Bo
-.
-.  ds doc-quote-left {
-.
-.  doc-enclose-open \$@
-..
-.
-.
-.\" NS Brc user macro
-.\" NS   brace close
-.\" NS
-.\" NS modifies:
-.\" NS   doc-macro-name
-.\" NS   doc-quote-right
-.\" NS
-.\" NS width register `Brc' set in doc-common
-.
-.de Brc
-.  if !\n[doc-arg-limit] \
-.    ds doc-macro-name Bc
-.
-.  ds doc-quote-right }
-.
-.  doc-enclose-close \$@
-..
-.
-.
-.\" NS Do user macro
-.\" NS   double quote open
-.\" NS
-.\" NS modifies:
-.\" NS   doc-macro-name
-.\" NS   doc-quote-left
-.\" NS
-.\" NS width register `Do' set in doc-common
-.
-.de Do
-.  if !\n[doc-arg-limit] \
-.    ds doc-macro-name Do
-.
-.  ds doc-quote-left "\*[Lq]
-.
-.  doc-enclose-open \$@
-..
-.
-.
-.\" NS Dc user macro
-.\" NS   double quote close
-.\" NS
-.\" NS modifies:
-.\" NS   doc-macro-name
-.\" NS   doc-quote-right
-.\" NS
-.\" NS width register `Dc' set in doc-common
-.
-.de Dc
-.  if !\n[doc-arg-limit] \
-.    ds doc-macro-name Dc
-.
-.  ds doc-quote-right "\*[Rq]
-.
-.  doc-enclose-close \$@
-..
-.
-.
-.\" NS Eo user macro
-.\" NS   enclose open (using first argument as beginning of enclosure)
-.\" NS
-.\" NS modifies:
-.\" NS   doc-macro-name
-.\" NS   doc-quote-left
-.\" NS
-.\" NS width register `Eo' set in doc-common
-.
-.de Eo
-.  if !\n[doc-arg-limit] \
-.    ds doc-macro-name Eo
-.
-.  ds doc-quote-left "\$1
-.
-.  shift
-.  doc-enclose-open \$@
-..
-.
-.
-.\" NS Ec user macro
-.\" NS   enclose close (using first argument as end of enclosure)
-.\" NS
-.\" NS modifies:
-.\" NS   doc-macro-name
-.\" NS   doc-quote-right
-.\" NS
-.\" NS width register `Ec' set in doc-common
-.
-.de Ec
-.  if !\n[doc-arg-limit] \
-.    ds doc-macro-name Ec
-.
-.  ds doc-quote-right "\$1
-.
-.  shift
-.  doc-enclose-close \$@
-..
-.
-.
-.\" NS Oo user macro
-.\" NS   option open
-.\" NS
-.\" NS modifies:
-.\" NS   doc-macro-name
-.\" NS   doc-quote-left
-.\" NS
-.\" NS width register `Oo' set in doc-common
-.
-.de Oo
-.  if !\n[doc-arg-limit] \
-.    ds doc-macro-name Oo
-.
-.  ds doc-quote-left [
-.
-.  doc-enclose-open \$@
-..
-.
-.
-.\" NS Oc user macro
-.\" NS   option close
-.\" NS
-.\" NS modifies:
-.\" NS   doc-macro-name
-.\" NS   doc-quote-right
-.\" NS
-.\" NS width register `Oc' set in doc-common
-.
-.de Oc
-.  if !\n[doc-arg-limit] \
-.    ds doc-macro-name Oc
-.
-.  ds doc-quote-right ]
-.
-.  doc-enclose-close \$@
-..
-.
-.
-.\" NS Po user macro
-.\" NS   parenthesis open
-.\" NS
-.\" NS modifies:
-.\" NS   doc-macro-name
-.\" NS   doc-quote-left
-.\" NS
-.\" NS width register `Po' set in doc-common
-.
-.de Po
-.  if !\n[doc-arg-limit] \
-.    ds doc-macro-name Po
-.
-.  ds doc-quote-left "\*[doc-left-parenthesis]
-.
-.  doc-enclose-open \$@
-..
-.
-.
-.\" NS Pc user macro
-.\" NS   parenthesis close
-.\" NS
-.\" NS modifies:
-.\" NS   doc-macro-name
-.\" NS   doc-quote-right
-.\" NS
-.\" NS width register `Pc' set in doc-common
-.
-.de Pc
-.  if !\n[doc-arg-limit] \
-.    ds doc-macro-name Pc
-.
-.  ds doc-quote-right "\*[doc-right-parenthesis]
-.
-.  doc-enclose-close \$@
-..
-.
-.
-.\" NS Qo user macro
-.\" NS   straight double quote open
-.\" NS
-.\" NS modifies:
-.\" NS   doc-macro-name
-.\" NS   doc-quote-left
-.\" NS
-.\" NS width register `Qo' set in doc-common
-.
-.de Qo
-.  if !\n[doc-arg-limit] \
-.    ds doc-macro-name Qo
-.
-.  ds doc-quote-left "\*[q]
-.
-.  doc-enclose-open \$@
-..
-.
-.
-.\" NS Qc user macro
-.\" NS   straight double quote close
-.\" NS
-.\" NS modifies:
-.\" NS   doc-macro-name
-.\" NS   doc-quote-right
-.\" NS
-.\" NS width register `Qc' set in doc-common
-.
-.de Qc
-.  if !\n[doc-arg-limit] \
-.    ds doc-macro-name Qc
-.
-.  ds doc-quote-right "\*[q]
-.
-.  doc-enclose-close \$@
-..
-.
-.
-.\" NS So user macro
-.\" NS   single quote open
-.\" NS
-.\" NS modifies:
-.\" NS   doc-macro-name
-.\" NS   doc-quote-left
-.\" NS
-.\" NS width register `So' set in doc-common
-.
-.de So
-.  if !\n[doc-arg-limit] \
-.    ds doc-macro-name So
-.
-.  ds doc-quote-left "\*[doc-left-singlequote]
-.
-.  doc-enclose-open \$@
-..
-.
-.
-.\" NS Sc user macro
-.\" NS   single quote close
-.\" NS
-.\" NS modifies:
-.\" NS   doc-macro-name
-.\" NS   doc-quote-right
-.\" NS
-.\" NS width register `Sc' set in doc-common
-.
-.de Sc
-.  if !\n[doc-arg-limit] \
-.    ds doc-macro-name Sc
-.
-.  ds doc-quote-right "\*[doc-right-singlequote]
-.
-.  doc-enclose-close \$@
-..
-.
-.
-.\" NS Xo user macro
-.\" NS   extend open
-.\" NS
-.\" NS modifies:
-.\" NS   doc-macro-name
-.\" NS   doc-quote-left
-.\" NS
-.\" NS width register `Xo' set in doc-common
-.
-.de Xo
-.  if !\n[doc-arg-limit] \
-.    ds doc-macro-name Xo
-.
-.  ds doc-quote-left
-.
-.  doc-enclose-open \$@
-..
-.
-.
-.\" NS Xc user macro
-.\" NS   extend close
-.\" NS
-.\" NS modifies:
-.\" NS   doc-macro-name
-.\" NS   doc-quote-right
-.\" NS
-.\" NS width register `Xc' set in doc-common
-.
-.de Xc
-.  if !\n[doc-arg-limit] \
-.    ds doc-macro-name Xc
-.
-.  ds doc-quote-right
-.
-.  doc-enclose-close \$@
-..
-.
-.
-.\" NS doc-nesting-level global register
-.\" NS   used by `doc-enclose-open' and `doc-enclose-close'
-.
-.nr doc-nesting-level 0
-.
-.
-.\" NS doc-in-list global register (bool)
-.\" NS   whether we are in (logical) .It
-.
-.nr doc-in-list 0
-.
-.
-.\" NS doc-enclose-open macro
-.\" NS   enclose string open
-.\" NS
-.\" NS modifies:
-.\" NS   doc-arg-ptr
-.\" NS   doc-nesting-level
-.
-.de doc-enclose-open
-.  if !\n[doc-arg-limit] \
-.    doc-parse-args \$@
-.
-.  nr doc-arg-ptr +1
-.  doc-print-prefixes
-.  nr doc-arg-ptr -1
-.
-.  nop \)\*[doc-quote-left]\)\c
-.
-.  \" start enclosure box
-.  box doc-enclosure-box\n[doc-nesting-level]
-.  ev doc-enclosure-env\n[doc-nesting-level]
-.  evc 0
-.  in 0
-.  nf
-.  \" we insert something to make .chop always work
-.  nop \&\c
-.
-.  \" increase nesting level *after* parsing of arguments
-.  nr doc-nesting-level +1
-.
-.  if \n[doc-arg-limit] \{\
-.    nr doc-arg-ptr +1
-.    ie (\n[doc-arg-limit] >= \n[doc-arg-ptr]) \
-.      doc-print-recursive
-.    el \
-.      doc-reset-args
-.  \}
-..
-.
-.
-.\" NS doc-enclose-close macro
-.\" NS   enclose string close
-.\" NS
-.\" NS modifies:
-.\" NS   doc-nesting-level
-.
-.de doc-enclose-close
-.  nr doc-nesting-level -1
-.
-.  \" finish enclosure box
-.  br
-.  ev
-.  box
-.  chop doc-enclosure-box\n[doc-nesting-level]
-.  unformat doc-enclosure-box\n[doc-nesting-level]
-.
-.  nh
-.  nop \*[doc-enclosure-box\n[doc-nesting-level]]\c
-.  nop \)\*[doc-quote-right]\)\c
-.
-.  if !\n[doc-arg-limit] \{\
-.    doc-parse-args \$@
-.
-.    if !\n[.$] \
-.      doc-print-and-reset
-.  \}
-.
-.  if \n[doc-arg-limit] \{\
-.    ie (\n[doc-arg-limit] > \n[doc-arg-ptr]) \{\
-.      nop \)\*[doc-space\n[doc-arg-ptr]]\c
-.      nr doc-arg-ptr +1
-.      doc-print-recursive
-.    \}
-.    el \
-.      doc-print-and-reset
-.  \}
-.
-.  \" shall we finish .It macro?
-.  if !"\*[doc-macro-name]"It" \
-.    if \n[doc-in-list] \
-.      if !\n[doc-nesting-level] \
-.        doc-\*[doc-list-type-stack\n[doc-list-depth]]
-..
-.
-.
-.\" NS Pf user macro
-.\" NS   prefix: `.Pf prefix arg ...'
-.\" NS
-.\" NS modifies:
-.\" NS   doc-arg-ptr
-.\" NS   doc-macro-name
-.\" NS   doc-quote-left
-.\" NS
-.\" NS width register `Pf' set in doc-common
-.
-.de Pf
-.  if !\n[doc-arg-limit] \
-.    ds doc-macro-name Pf
-.
-.  ie \n[doc-arg-limit] \{\
-.    ie ((\n[doc-arg-limit] - \n[doc-arg-ptr]) > 1) \{\
-.      nr doc-arg-ptr +1
-.      nop \)\*[doc-arg\n[doc-arg-ptr]]\c
-.    \}
-.    el \
-.      tm mdoc warning: .Pf: trailing prefix (#\n[.c])
-.  \}
-.  el \{\
-.    nop \)\$1\)\c
-.    shift
-.    ie \n[.$] \
-.      doc-parse-args \$@
-.    el \{\
-.      tm mdoc warning: .Pf: missing arguments (#\n[.c])
-.      nop \)
-.  \}\}
-.
-.  if \n[doc-arg-limit] \{\
-.    nr doc-arg-ptr +1
-.    ie (\n[doc-arg-limit] < \n[doc-arg-ptr]) \
-.      doc-print-and-reset
-.    el \
-.      doc-do-\n[doc-type\n[doc-arg-ptr]]
-.  \}
-..
-.
-.
-.\" NS Ns user macro
-.\" NS   remove space (space removal done by `doc-parse-args')
-.\" NS
-.\" NS modifies:
-.\" NS   doc-argXXX
-.\" NS   doc-macro-name
-.\" NS
-.\" NS width register `Ns' set in doc-common
-.
-.de Ns
-.  if !\n[doc-arg-limit] \{\
-.    ie \n[.$] \{\
-.      ds doc-macro-name Ns
-.      doc-parse-args \$@
-.    \}
-.    el \
-.      tm Usage: .Ns must be called with arguments (#\n[.c])
-.  \}
-.
-.  if \n[doc-arg-limit] \{\
-.    nr doc-arg-ptr +1
-.    ie (\n[doc-arg-limit] >= \n[doc-arg-ptr]) \
-.      doc-print-recursive
-.    el \
-.      doc-reset-args
-.  \}
-..
-.
-.
-.\" NS Ap user macro
-.\" NS   append an apostrophe
-.\" NS
-.\" NS width register `Ap' set in doc-common
-.
-.de Ap
-.  ie !\n[doc-arg-limit] \
-.    tm Usage: `Ap' cannot be first macro on a line (no `.Ap') (#\n[.c])
-.  el \{\
-.    nop \)'\)\c
-.    nr doc-arg-ptr +1
-.    ie (\n[doc-arg-limit] >= \n[doc-arg-ptr]) \
-.      doc-print-recursive
-.    el \
-.      doc-reset-args
-.  \}
-..
-.
-.
-.\" NS doc-space global string
-.\" NS   current inter-argument space
-.
-.ds doc-space "\*[doc-soft-space]
-.
-.
-.\" NS doc-soft-space constant string
-.\" NS   soft (stretchable) space (defined in doc-common)
-.
-.
-.\" NS doc-hard-space constant string
-.\" NS   hard (unpaddable) space (defined in doc-common)
-.
-.
-.\" NS doc-set-hard-space macro
-.\" NS   set current space string to hard (unpaddable) space.
-.\" NS
-.\" NS modifies:
-.\" NS   doc-saved-space
-.\" NS   doc-space
-.
-.de doc-set-hard-space
-.  ie "\*[doc-space]"" \
-.    ds doc-saved-space "\*[doc-hard-space]
-.  el \
-.    ds doc-space "\*[doc-hard-space]
-..
-.
-.
-.\" NS doc-set-soft-space macro
-.\" NS   set current space string to soft space
-.\" NS
-.\" NS modifies:
-.\" NS   doc-saved-space
-.\" NS   doc-space
-.
-.de doc-set-soft-space
-.  ie "\*[doc-space]"" \
-.    ds doc-saved-space "\*[doc-soft-space]
-.  el \
-.    ds doc-space "\*[doc-soft-space]
-..
-.
-.
-.\" NS doc-space-mode global register (bool)
-.\" NS   default is one (space mode on)
-.
-.nr doc-space-mode 1
-.
-.
-.\" NS doc-saved-space global string
-.\" NS   saved value of `doc-space'
-.
-.ds doc-saved-space "\*[doc-space]
-.
-.
-.\" NS doc-have-space global register (bool)
-.\" NS   set if last command was horizontal space
-.
-.nr doc-have-space 0
-.
-.
-.\" NS Sm user macro
-.\" NS   space mode (`.Sm'/`.Sm on'/`.Sm off')
-.\" NS
-.\" NS   without argument, toggle space mode
-.\" NS
-.\" NS modifies:
-.\" NS   doc-arg-limit
-.\" NS   doc-arg-ptr
-.\" NS   doc-argXXX
-.\" NS   doc-macro-name
-.\" NS   doc-num-args
-.\" NS   doc-saved-space
-.\" NS   doc-space
-.\" NS   doc-space-mode
-.\" NS   doc-spaceXXX
-.\" NS
-.\" NS local variables:
-.\" NS   doc-reg-Sm
-.\" NS
-.\" NS width register `Sm' set in doc-common
-.
-.de Sm
-.  ie \n[doc-have-space] \
-.    nr doc-reg-Sm 0
-.  el \
-.    nr doc-reg-Sm 1
-.
-.  if !\n[doc-arg-limit] \{\
-.    ie \n[.$] \{\
-.      ds doc-macro-name Sm
-.      doc-parse-args \$@
-.    \}
-.    el \{\
-.      ie \n[doc-space-mode] \{\
-.        ds doc-saved-space "\*[doc-space]
-.        ds doc-space
-.        nr doc-space-mode 0
-.      \}
-.      el \{\
-.        ds doc-space "\*[doc-saved-space]
-.        nr doc-space-mode 1
-.
-.        \" finish line only if it is interrupted and `doc-have-space'
-.        \" isn't set
-.        if \n[doc-reg-Sm] \
-.          if \n[.int] \
-.            nop \)
-.      \}
-.  \}\}
-.
-.  if !\n[doc-arg-limit] \
-.    return
-.
-.  nr doc-arg-ptr +1
-.
-.  \" avoid a warning message in case `Sm' is the last parameter
-.  if !d doc-arg\n[doc-arg-ptr] \
-.    ds doc-arg\n[doc-arg-ptr]
-.
-.  ie "\*[doc-arg\n[doc-arg-ptr]]"on" \{\
-.    ds doc-space "\*[doc-saved-space]
-.    nr doc-space-mode 1
-.  \}
-.  el \{\
-.    ie "\*[doc-arg\n[doc-arg-ptr]]"off" \{\
-.      ds doc-saved-space "\*[doc-space]
-.      ds doc-space
-.      nr doc-space-mode 0
-.    \}
-.    el \{\
-.      \" no argument for Sm
-.      nr doc-arg-ptr -1
-.      ie \n[doc-space-mode] \{\
-.        ds doc-saved-space "\*[doc-space]
-.        ds doc-space
-.        nr doc-space-mode 0
-.      \}
-.      el \{\
-.        ds doc-space "\*[doc-saved-space]
-.        nr doc-space-mode 1
-.      \}
-.  \}\}
-.
-.  ie \n[doc-space-mode] \{\
-.    \" recompute space vector for remaining arguments
-.    nr doc-num-args (\n[doc-arg-limit] - \n[doc-arg-ptr])
-.    nr doc-arg-limit \n[doc-arg-ptr]
-.    if \n[doc-num-args] \
-.      doc-parse-space-vector
-.
-.    \" finish line only if it is interrupted and `doc-have-space'
-.    \" isn't set
-.    if \n[doc-reg-Sm] \
-.      if \n[.int] \
-.        nop \)
-.  \}
-.  el \{\
-.    \" reset remaining space vector elements
-.    nr doc-reg-Sm (\n[doc-arg-ptr] + 1)
-.    while (\n[doc-reg-Sm] <= \n[doc-arg-limit]) \{\
-.      ds doc-space\n[doc-reg-Sm]
-.      nr doc-reg-Sm +1
-.      \" the body of a `while' request must end with the fitting `\}'!
-.    \}
-.  \}
-.
-.  \" do we have parameters to print?
-.  ie (\n[doc-arg-limit] > \n[doc-arg-ptr]) \{\
-.    \" skip `Sm' argument
-.    nr doc-arg-ptr +1
-.    doc-print-recursive
-.  \}
-.  el \
-.    doc-reset-args
-..
-.
-.
-.\" NS doc-arg-type immediate register
-.\" NS   argument type (macro=1, string=2, punctuation suffix=3,
-.\" NS   punctuation prefix=4)
-.
-.nr doc-arg-type 0
-.
-.
-.\" NS doc-get-arg-type macro
-.\" NS   get argument type
-.\" NS
-.\" NS   this macro expects the width of the argument in `doc-width'
-.\" NS
-.\" NS modifies:
-.\" NS   doc-arg-type
-.
-.de doc-get-arg-type
-.  nr doc-arg-type 2
-.
-.  if ((\n[doc-width] < 4) & \A\$1) \{\
-.    ie (\n[doc-width] == 1) \{\
-.      if r doc-punct\$1 \
-.        nr doc-arg-type \n[doc-punct\$1]
-.    \}
-.    el \
-.      if r \$1 \
-.        if d \$1 \
-.          nr doc-arg-type 1
-.  \}
-..
-.
-.
-.\" NS doc-get-arg-type* macro
-.\" NS   similar to as `doc-get-arg-type' but uses doc-argXXX strings
-.\" NS
-.\" NS   this macro sets the `doc-width' register using the `length' request
-.\" NS   to get the number of characters in a string literally
-.\" NS
-.\" NS modifies:
-.\" NS   doc-arg-type
-.\" NS   doc-width
-.
-.de doc-get-arg-type*
-.  nr doc-arg-type 2
-.  length doc-width "\*[doc-arg\$1]
-.
-.  if ((\n[doc-width] < 4) & \A\*[doc-arg\$1]) \{\
-.    ie (\n[doc-width] == 1) \{\
-.      if r doc-punct\*[doc-arg\$1] \
-.        nr doc-arg-type \n[doc-punct\*[doc-arg\$1]]
-.    \}
-.    el \
-.      if r \*[doc-arg\$1] \
-.        if d \*[doc-arg\$1] \
-.          nr doc-arg-type 1
-.  \}
-..
-.
-.
-.\" NS doc-set-spacing-1 macro
-.\" NS   set spacing for macros
-.\" NS
-.\" NS modifies:
-.\" NS   doc-spaceXXX
-.\" NS
-.\" NS local variables:
-.\" NS   doc-reg-dssfm
-.\" NS   doc-reg-dssfm1
-.
-.de doc-set-spacing-1
-.  nr doc-reg-dssfm1 \n[\*[doc-arg\n[doc-arg-limit]]]
-.
-.  \" closing macros like .Ac, Bc., etc. have value 3 (remove space before
-.  \" argument)
-.  ie (\n[doc-reg-dssfm1] == 3) \{\
-.    if \n[doc-arg-limit] \{\
-.      nr doc-reg-dssfm (\n[doc-arg-limit] - 1)
-.      ds doc-space\n[doc-reg-dssfm]
-.    \}
-.    ds doc-space\n[doc-arg-limit] "\*[doc-space]
-.  \}
-.  el \{\
-.    \" macros like .Ap and .Ns have value 2 (remove space before and after
-.    \" argument)
-.    ie (\n[doc-reg-dssfm1] == 2) \{\
-.      if \n[doc-arg-limit] \{\
-.        nr doc-reg-dssfm (\n[doc-arg-limit] - 1)
-.        ds doc-space\n[doc-reg-dssfm]
-.      \}
-.      ds doc-space\n[doc-arg-limit]
-.    \}
-.    el \
-.      ds doc-space\n[doc-arg-limit]
-.  \}
-..
-.
-.
-.\" NS doc-set-spacing-2 macro
-.\" NS   set spacing for strings
-.\" NS
-.\" NS modifies:
-.\" NS   doc-spaceXXX
-.
-.de doc-set-spacing-2
-.  ds doc-space\n[doc-arg-limit] "\*[doc-space]
-..
-.
-.
-.\" NS doc-set-spacing-3 macro
-.\" NS   set spacing for punctuation suffixes
-.\" NS
-.\" NS modifies:
-.\" NS   doc-spaceXXX
-.\" NS
-.\" NS local variables:
-.\" NS   doc-reg-dssfps
-.
-.de doc-set-spacing-3
-.  if \n[doc-arg-limit] \{\
-.    nr doc-reg-dssfps (\n[doc-arg-limit] - 1)
-.    ds doc-space\n[doc-reg-dssfps]
-.  \}
-.
-.  ds doc-space\n[doc-arg-limit] "\*[doc-space]
-..
-.
-.
-.\" NS doc-set-spacing-4 macro
-.\" NS   set spacing for punctuation prefixes
-.\" NS
-.\" NS modifies:
-.\" NS   doc-spaceXXX
-.
-.de doc-set-spacing-4
-.  ds doc-space\n[doc-arg-limit]
-..
-.
-.
-.\" type switches (on current argument doc-arg-ptr)
-.
-.
-.\" NS doc-do-1 macro
-.\" NS   call request if macro
-.
-.de doc-do-1
-.  \*[doc-arg\n[doc-arg-ptr]]
-..
-.
-.
-.\" NS doc-do-2 macro
-.\" NS   call .doc-print-recursive if string
-.
-.als doc-do-2 doc-print-recursive
-.
-.
-.\" NS doc-do-3 macro
-.\" NS   call .doc-print-recursive if punctuation suffix
-.
-.als doc-do-3 doc-print-recursive
-.
-.
-.\" NS doc-do-4 macro
-.\" NS   call .doc-print-recursive if punctuation prefix
-.
-.als doc-do-4 doc-print-recursive
-.
-.
-.\" NS doc-fontmode-depth global register
-.\" NS   font mode level
-.
-.nr doc-fontmode-depth 0
-.
-.
-.\" NS doc-fontmode-font-stackXXX global register
-.\" NS   stack of saved current font values from `Bf' macro
-.\" NS
-.\" NS limit:
-.\" NS   doc-fontmode-depth
-.
-.nr doc-fontmode-font-stack0 0
-.
-.
-.\" NS doc-fontmode-size-stackXXX global register
-.\" NS   stack of saved current size values from `Bf' macro
-.\" NS
-.\" NS limit:
-.\" NS   doc-fontmode-depth
-.
-.nr doc-fontmode-size-stack0 0
-.
-.
-.\" NS Bf user macro
-.\" NS   begin font mode (will be begin-mode/end-mode in groff & TeX)
-.\" NS
-.\" NS modifies:
-.\" NS   doc-fontmode-depth
-.\" NS   doc-fontmode-font-stackXXX
-.\" NS   doc-fontmode-size-stackXXX
-.\" NS   doc-macro-name
-.\" NS
-.\" NS width register `Bf' set in doc-common
-.
-.de Bf
-.  ds doc-macro-name Bf
-.
-.  ie \n[.$] \{\
-.    nr doc-fontmode-depth +1
-.
-.    \" save current font and size
-.    nr doc-fontmode-font-stack\n[doc-fontmode-depth] \n[.f]
-.    nr doc-fontmode-size-stack\n[doc-fontmode-depth] \n[.ps]
-.
-.    ie        "\$1"Em" \
-.      nop \*[doc-Em-font]\c
-.    el \{ .ie "\$1"Li" \
-.      nop \*[doc-Li-font]\c
-.    el \{ .ie "\$1"Sy" \
-.      nop \*[doc-Sy-font]\c
-.    el \{ .ie "\$1"-emphasis" \
-.      nop \*[doc-Em-font]\c
-.    el \{ .ie "\$1"-literal" \
-.      nop \*[doc-Li-font]\c
-.    el \{ .ie "\$1"-symbolic" \
-.      nop \*[doc-Sy-font]\c
-.    el \{\
-.      tmc mdoc warning: Unknown keyword `\$1' in .Bf macro
-.      tm1 " (#\n[.c])
-.  \}\}\}\}\}\}\}
-.  el \
-.    tm Usage: .Bf [Em | -emphasis | Li | -literal | Sy | -symbolic] (#\n[.c])
-..
-.
-.
-.\" NS Ef user macro
-.\" NS   end font mode
-.\" NS
-.\" NS modifies:
-.\" NS   doc-macro-name
-.\" NS
-.\" NS width register `Ef' set in doc-common
-.
-.de Ef
-.  ds doc-macro-name Ef
-.
-.  ie \n[doc-fontmode-depth] \{\
-.    \" restore saved font and size
-.    nop \)\f[\n[doc-fontmode-font-stack\n[doc-fontmode-depth]]]\c
-.    nop \)\s[\n[doc-fontmode-size-stack\n[doc-fontmode-depth]]u]\c
-.
-.    nr doc-fontmode-font-stack\n[doc-fontmode-depth] 0
-.    nr doc-curr-font \n[.f]
-.    nr doc-fontmode-size-stack\n[doc-fontmode-depth] 0
-.    nr doc-curr-size \n[.ps]
-.    nr doc-fontmode-depth -1
-.  \}
-.  el \
-.    tm mdoc warning: Extraneous .Ef (#\n[.c])
-..
-.
-.
-.\" NS doc-keep-type global register
-.\" NS   current keep type; 1 is `-words', 2 is `-lines', 3 is unknown
-.
-.nr doc-keep-type 0
-.
-.
-.\" NS Bk user macro
-.\" NS   begin keep
-.\" NS
-.\" NS modifies:
-.\" NS   doc-keep-type
-.\" NS   doc-macro-name
-.\" NS
-.\" NS width register `Bk' set in doc-common
-.
-.de Bk
-.  ds doc-macro-name Bk
-.
-.  if \n[doc-keep-type] \
-.    tm .Bk: nesting keeps not implemented yet. (#\n[.c])
-.
-.  ie        "\$1"-lines" \{\
-.    nr doc-keep-type 2
-.    tm .Bk -lines: Not implemented yet. (#\n[.c])
-.  \}
-.  el \{ .ie "\$1"-words" \{\
-.    nr doc-keep-type 1
-.    doc-set-hard-space
-.  \}
-.  el \{ .ie "\$1"" \{\
-.    \" default
-.    nr doc-keep-type 1
-.    doc-set-hard-space
-.  \}
-.  el \{\
-.    tm mdoc warning: Unknown keyword `\$1' in .Bk macro (#\n[.c])
-.    nr doc-keep-type 3
-.  \}\}\}
-.
-\#.  nr doc-nesting-level +1
-..
-.
-.
-.\" NS Ek user macro
-.\" NS   end keep
-.\" NS
-.\" NS modifies:
-.\" NS   doc-keep-type
-.\" NS   doc-macro-name
-.\" NS
-.\" NS width register `Ek' set in doc-common
-.
-.de Ek
-.  ds doc-macro-name Ek
-.
-\#.  nr doc-nesting-level -1
-.
-.  ie \n[.$] \
-.    tm Usage: .Ek (does not take arguments) (#\n[.c])
-.  el \{\
-.    if !\n[doc-keep-type] \
-.      tm mdoc warning: .Ek found without .Bk before (#\n[.c])
-.
-.    ie        (\n[doc-keep-type] == 1) \
-.      doc-set-soft-space
-.    el \{ .if (\n[doc-keep-type] == 2) \
-.      tm .Bk -lines: Not implemented yet. (#\n[.c])
-.  \}\}
-.
-.  nr doc-keep-type 0
-.
-\#.  if !"\*[doc-out-string]"" \
-\#.    doc-print-out-string
-..
-.
-.
-.\" NS doc-display-depth global register
-.\" NS   display level
-.
-.nr doc-display-depth 0
-.
-.
-.\" NS doc-is-compact global register (bool)
-.\" NS   set if the `compact' keyword is given
-.
-.nr doc-is-compact 0
-.
-.
-.\" NS doc-display-type-stackXXX global string
-.\" NS   the display type stack
-.\" NS
-.\" NS limit:
-.\" NS   doc-display-depth
-.
-.ds doc-display-type-stack0
-.
-.
-.\" NS doc-display-indent-stackXXX global register
-.\" NS   stack of display indentation values
-.\" NS
-.\" NS limit:
-.\" NS   doc-display-depth
-.
-.nr doc-display-indent-stack0 0
-.
-.
-.\" NS doc-display-ad-stackXXX global register
-.\" NS   stack of saved adjustment modes
-.\" NS
-.\" NS limit:
-.\" NS   doc-display-depth
-.
-.nr doc-display-ad-stack0 0
-.
-.
-.\" NS doc-display-fi-stackXXX global register
-.\" NS   stack of saved fill modes
-.\" NS
-.\" NS limit:
-.\" NS   doc-display-depth
-.
-.nr doc-display-fi-stack0 0
-.
-.
-.\" NS doc-display-ft-stackXXX global register
-.\" NS   stack of saved fonts
-.\" NS
-.\" NS limit:
-.\" NS   doc-display-depth
-.
-.nr doc-display-ft-stack0 0
-.
-.
-.\" NS doc-display-ps-stackXXX global register
-.\" NS   stack of saved font sizes
-.\" NS
-.\" NS limit:
-.\" NS   doc-display-depth
-.
-.nr doc-display-ps-stack0 0
-.
-.
-.\" NS Bd user macro
-.\" NS   begin display
-.\" NS
-.\" NS width register `Bd' set in doc-common
-.\" NS
-.\" NS modifies:
-.\" NS   doc-curr-font
-.\" NS   doc-curr-size
-.\" NS   doc-display-depth
-.\" NS   doc-display-ad-stackXXX
-.\" NS   doc-display-fi-stackXXX
-.\" NS   doc-display-ft-stackXXX
-.\" NS   doc-display-ps-stackXXX
-.\" NS   doc-display-file
-.\" NS   doc-display-indent-stackXXX
-.\" NS   doc-display-type-stackXXX
-.\" NS   doc-is-compact
-.\" NS   doc-macro-name
-.\" NS
-.\" NS local variables:
-.\" NS   doc-reg-Bd
-.
-.de Bd
-.  ds doc-macro-name Bd
-.
-.  if !\n[.$] \{\
-.    tm1 "Usage: .Bd {-literal | -filled | -ragged | -centered | -unfilled}
-.    tm1 "           [-offset [string]] [-compact] [-file name] (#\n[.c])
-.    return
-.  \}
-.
-.  nr doc-is-compact 0
-.  ds doc-display-file
-.  nr doc-reg-Bd 1
-.  nr doc-display-depth +1
-.
-.  \" save current adjustment and fill modes
-.  nr doc-display-ad-stack\n[doc-display-depth] \n[.j]
-.  nr doc-display-fi-stack\n[doc-display-depth] \n[.u]
-.
-.  ie        "\$1"-literal" \{\
-.    ds doc-display-type-stack\n[doc-display-depth] literal
-.    nr doc-display-ft-stack\n[doc-display-depth] \n[.f]
-.    nr doc-display-ps-stack\n[doc-display-depth] \n[.ps]
-.
-.    ie t \
-.      ta T 9n
-.    el \
-.      ta T 8n
-.    nf
-.  \}
-.  el \{ .ie "\$1"-filled" \{\
-.    ds doc-display-type-stack\n[doc-display-depth] filled
-.    ad b
-.    fi
-.  \}
-.  el \{ .ie "\$1"-ragged" \{\
-.    ds doc-display-type-stack\n[doc-display-depth] ragged
-.    na
-.    fi
-.  \}
-.  el \{ .ie "\$1"-centered" \{\
-.    ds doc-display-type-stack\n[doc-display-depth] centered
-.    ad c
-.    fi
-.  \}
-.  el \{ .ie "\$1"-unfilled" \{\
-.    ds doc-display-type-stack\n[doc-display-depth] unfilled
-.    nf
-.  \}
-.  el \{\
-.    tm1 "mdoc warning: Unknown keyword `\$1' (or missing display type)
-.    tm1 "              in .Bd macro (#\n[.c])
-.    nr doc-reg-Bd 0
-.  \}\}\}\}\}
-.
-.  \" have we seen an argument?
-.  if \n[doc-reg-Bd] \{\
-.    shift
-.    \" check other arguments
-.    if \n[.$] \
-.      doc-do-Bd-args \$@
-.  \}
-.
-.  \" avoid warning about non-existent register
-.  if !r doc-display-indent-stack\n[doc-display-depth] \
-.    nr doc-display-indent-stack\n[doc-display-depth] 0
-.
-.  if \n[doc-display-indent-stack\n[doc-display-depth]] \
-.    in +\n[doc-display-indent-stack\n[doc-display-depth]]u
-.
-.  if !\n[doc-is-compact] \
-.    sp \n[doc-display-vertical]u
-.
-.  if "\*[doc-display-type-stack\n[doc-display-depth]]"literal" \
-.    if t \
-.      nop \*[doc-Li-font]\c
-.
-.  if !\n[cR] \
-.    ne 2v
-.
-.  if !"\*[doc-display-file]"" \
-.    so \*[doc-display-file]
-.
-.  nr doc-is-compact 0
-.  ds doc-display-file
-..
-.
-.
-.\" NS doc-do-Bd-args macro
-.\" NS   resolve remaining .Bd arguments
-.\" NS
-.\" NS modifies:
-.\" NS   doc-display-file
-.\" NS   doc-display-indent-stackXXX
-.\" NS   doc-is-compact
-.\" NS
-.\" NS local variables:
-.\" NS   doc-reg-ddBa
-.\" NS   doc-reg-ddBa1
-.\" NS   doc-reg-ddBa2
-.\" NS   doc-reg-ddBa3
-.\" NS   doc-reg-ddBa4
-.\" NS   doc-str-ddBa
-.
-.de doc-do-Bd-args
-.  nr doc-reg-ddBa 1
-.
-.  ie        "\$1"-offset" \{\
-.    nr doc-reg-ddBa 2
-.
-.    ie        "\$2"left" \
-.      nr doc-display-indent-stack\n[doc-display-depth] 0
-.    el \{ .ie "\$2"right" \
-.      nr doc-display-indent-stack\n[doc-display-depth] (\n[.l]u / 3u)
-.    el \{ .ie "\$2"center" \
-.      nr doc-display-indent-stack\n[doc-display-depth] ((\n[.l]u - \n[.i]u) / 4u)
-.    el \{ .ie "\$2"indent" \
-.      nr doc-display-indent-stack\n[doc-display-depth] \n[doc-display-indent]u
-.    el \{ .ie "\$2"indent-two" \
-.      nr doc-display-indent-stack\n[doc-display-depth] (\n[doc-display-indent]u + \n[doc-display-indent]u)
-.    el \
-.      nr doc-reg-ddBa 1
-.    \}\}\}\}
-.
-.    \" not a known keyword
-.    if (\n[doc-reg-ddBa] == 1) \{\
-.      nr doc-reg-ddBa 2
-.
-.      nr doc-reg-ddBa1 0
-.      if \B(\$2) \{\
-.        \" disable warnings related to scaling indicators (32)
-.        nr doc-reg-ddBa2 \n[.warn]
-.        warn (\n[.warn] - (\n[.warn] / 32 % 2 * 32))
-.
-.        \" values without a scaling indicator are taken as strings;
-.        \" we test whether the parameter string with and without the last
-.        \" character yields identical numerical results (ignoring the
-.        \" scaling indicator)
-.        ds doc-str-ddBa "\$2
-.        substring doc-str-ddBa 0 -2
-.        if \B(\*[doc-str-ddBa]) \{\
-.          nr doc-reg-ddBa3 (;(\$2))
-.          nr doc-reg-ddBa4 (\*[doc-str-ddBa])
-.          if (\n[doc-reg-ddBa3] == \n[doc-reg-ddBa4]) \
-.            nr doc-reg-ddBa1 1
-.        \}
-.
-.        \" enable all warnings again
-.        warn \n[doc-reg-ddBa2]
-.      \}
-.
-.      ie \n[doc-reg-ddBa1] \
-.        nr doc-display-indent-stack\n[doc-display-depth] \$2
-.      el \{\
-.        doc-get-width "\$2"
-.        ie (\n[doc-width] <= 3) \{\
-.          \" if the offset parameter is a macro, use the macro's
-.          \" width as specified in doc-common
-.          doc-get-arg-type "\$2"
-.          ie (\n[doc-arg-type] == 1) \
-.            nr doc-display-indent-stack\n[doc-display-depth] \n[\$2]
-.          el \
-.            nr doc-display-indent-stack\n[doc-display-depth] (\n[doc-width]u * \n[doc-fixed-width]u)
-.        \}
-.        el \
-.          nr doc-display-indent-stack\n[doc-display-depth] (\n[doc-width]u * \n[doc-fixed-width]u)
-.    \}\}
-.  \}
-.  el \{ .ie "\$1"-compact" \
-.    nr doc-is-compact 1
-.  el \{ .ie "\$1"-file" \{\
-.    ie !"\$2"" \{\
-.      ds doc-display-file "\$2
-.      nr doc-reg-ddBa 2
-.    \}
-.    el \
-.      tm mdoc warning: .Bd `-file' keyword requires argument (#\n[.c])
-.  \}
-.  el \
-.      tm mdoc warning: Unknown keyword `\$1' in .Bd macro (#\n[.c])
-.  \}\}
-.
-.  if (\n[doc-reg-ddBa] < \n[.$]) \{\
-.    shift \n[doc-reg-ddBa]
-.    doc-do-Bd-args \$@
-.  \}
-..
-.
-.
-.\" NS Ed user macro
-.\" NS   end display
-.\" NS
-.\" NS modifies:
-.\" NS   doc-display-depth
-.\" NS   doc-display-indent-stackXXX
-.\" NS   doc-display-type-stackXXX
-.\" NS   doc-macro-name
-.\" NS
-.\" NS width register `Ed' set in doc-common
-.
-.de Ed
-.  ds doc-macro-name Ed
-.
-.  br
-.
-.  if !\n[doc-display-depth] \{\
-.    tm mdoc warning: Extraneous .Ed (#\n[.c])
-.    nr doc-display-depth 1
-.  \}
-.
-.  if "\*[doc-display-type-stack\n[doc-display-depth]]"literal" \{\
-.    ft \n[doc-display-ft-stack\n[doc-display-depth]]
-.    ps \n[doc-display-ps-stack\n[doc-display-depth]]u
-.  \}
-.
-.  in -\n[doc-display-indent-stack\n[doc-display-depth]]u
-.
-.  \" restore saved adjustment and fill modes
-.  ie \n[doc-display-fi-stack\n[doc-display-depth]] \
-.    fi
-.  el \
-.    nf
-.  ad \n[doc-display-ad-stack\n[doc-display-depth]]
-.
-.  nr doc-display-indent-stack\n[doc-display-depth] 0
-.  ds doc-display-type-stack\n[doc-display-depth]
-.  nr doc-display-depth -1
-..
-.
-.
-.\" NS doc-list-type-stackXXX global string
-.\" NS   stack of list types
-.\" NS
-.\" NS limit:
-.\" NS   doc-list-depth
-.
-.ds doc-list-type-stack1
-.
-.
-.\" NS doc-list-indent-stackXXX global register
-.\" NS   stack of list indentation values
-.\" NS
-.\" NS limit:
-.\" NS   doc-list-depth
-.
-.nr doc-list-indent-stack1 0
-.
-.
-.\" NS doc-list-have-indent-stackXXX global register (bool)
-.\" NS   an indentation value is active
-.\" NS
-.\" NS limit:
-.\" NS   doc-list-depth
-.
-.nr doc-list-have-indent-stack1 0
-.
-.
-.\" NS Bl user macro
-.\" NS   begin list
-.\" NS
-.\" NS width register `Bl' set in doc-common
-.\" NS
-.\" NS modifies:
-.\" NS   doc-arg-ptr
-.\" NS   doc-argXXX
-.\" NS   doc-list-depth
-.\" NS   doc-list-have-indent-stackXXX
-.\" NS   doc-list-indent-stackXXX
-.\" NS   doc-list-type-stackXXX
-.\" NS   doc-macro-name
-.\" NS   doc-num-args
-.\" NS   doc-num-columns
-.\" NS
-.\" NS local variables:
-.\" NS   doc-reg-Bl
-.
-.de Bl
-.  if !\n[.$] \{\
-.    doc-Bl-usage
-.    return
-.  \}
-.
-.  ds doc-macro-name Bl
-.  nr doc-list-depth +1
-.  nr doc-arg-ptr 1
-.
-.  ie        "\$1"-hang" \{\
-.    ds doc-list-type-stack\n[doc-list-depth] hang-list
-.    nr doc-list-indent-stack\n[doc-list-depth] 6n
-.    nr doc-list-have-indent-stack\n[doc-list-depth] 1
-.  \}
-.  el \{ .ie "\$1"-tag" \{\
-.    ds doc-list-type-stack\n[doc-list-depth] tag-list
-.    nr doc-list-have-indent-stack\n[doc-list-depth] 1
-.  \}
-.  el \{ .ie "\$1"-item" \{\
-.    ds doc-list-type-stack\n[doc-list-depth] item-list
-.    nr doc-list-have-indent-stack\n[doc-list-depth] 1
-.  \}
-.  el \{ .ie "\$1"-enum" \{\
-.    ds doc-list-type-stack\n[doc-list-depth] enum-list
-.    nr doc-list-indent-stack\n[doc-list-depth] 3n
-.    nr doc-list-have-indent-stack\n[doc-list-depth] 1
-.  \}
-.  el \{ .ie "\$1"-bullet" \{\
-.    ds doc-list-type-stack\n[doc-list-depth] bullet-list
-.    nr doc-list-indent-stack\n[doc-list-depth] 2n
-.    nr doc-list-have-indent-stack\n[doc-list-depth] 1
-.  \}
-.  el \{ .ie "\$1"-dash" \{\
-.    ds doc-list-type-stack\n[doc-list-depth] dash-list
-.    nr doc-list-indent-stack\n[doc-list-depth] 2n
-.    nr doc-list-have-indent-stack\n[doc-list-depth] 1
-.  \}
-.  el \{ .ie "\$1"-hyphen" \{\
-.    ds doc-list-type-stack\n[doc-list-depth] dash-list
-.    nr doc-list-indent-stack\n[doc-list-depth] 2n
-.    nr doc-list-have-indent-stack\n[doc-list-depth] 1
-.  \}
-.  el \{ .ie "\$1"-inset" \{\
-.    ds doc-list-type-stack\n[doc-list-depth] inset-list
-.    nr doc-list-have-indent-stack\n[doc-list-depth] 1
-.  \}
-.  el \{ .ie "\$1"-diag" \{\
-.    ds doc-list-type-stack\n[doc-list-depth] diag-list
-.  \}
-.  el \{ .ie "\$1"-ohang" \{\
-.    ds doc-list-type-stack\n[doc-list-depth] ohang-list
-.    nr doc-list-have-indent-stack\n[doc-list-depth] 1
-.  \}
-.  el \{ .ie "\$1"-column" \{\
-.    ds doc-list-type-stack\n[doc-list-depth] column-list
-.    linetabs 1
-.  \}
-.  el \{\
-.    tm1 "mdoc warning: Unknown list type `\$1' (or missing list type)
-.    tm1 "              in .Bl macro
-.    tm
-.    nr doc-arg-ptr 0
-.  \}\}\}\}\}\}\}\}\}\}\}
-.
-.  \" we have seen a list type
-.  if !\n[doc-arg-ptr] \{\
-.    doc-Bl-usage
-.    doc-reset-args
-.    nr doc-list-depth -1
-.    return
-.  \}
-.
-.  shift
-.
-.  \" fill argument vector
-.  nr doc-reg-Bl 1
-.  while (\n[doc-reg-Bl] <= \n[.$]) \{\
-.    ds doc-arg\n[doc-reg-Bl] "\$[\n[doc-reg-Bl]]
-.    \" dummy type and space so that doc-save-global-vars() doesn't warn
-.    nr doc-type\n[doc-reg-Bl] 0
-.    ds doc-space\n[doc-reg-Bl]
-.    nr doc-reg-Bl +1
-.  \}
-.
-.  doc-increment-list-stack
-.
-.  if \n[.$] \{\
-.    nr doc-arg-limit \n[.$]
-.    nr doc-arg-ptr 0
-.    doc-do-Bl-args
-.
-.    in +\n[doc-list-offset-stack\n[doc-list-depth]]u
-.
-.    \" initialize column list
-.    if "\*[doc-list-type-stack\n[doc-list-depth]]"column-list" \{\
-.      doc-set-column-tab \n[doc-num-columns]
-'      in -\n[doc-column-indent-width]u
-.      if !\n[doc-compact-list-stack\n[doc-list-depth]] \
-.        sp \n[doc-display-vertical]u
-.
-.      nf
-.      nr doc-num-columns 0
-.  \}\}
-.
-.  doc-reset-args
-..
-.
-.
-.\" NS doc-Bl-usage macro
-.
-.de doc-Bl-usage
-.  tm1 "Usage: .Bl {-hang | -ohang | -tag | -diag | -inset}
-.  tm1 "             [-width <string>]
-.  tm1 "             [-offset <string>] [-compact]
-.  tm1 "       .Bl -column [-offset <string>] <string1> <string2> ...
-.  tm1 "       .Bl {-item | -enum [-nested] | -bullet | -hyphen | -dash}
-.  tm1 "             [-offset <string>] [-compact] (#\n[.c])
-..
-.
-.
-.\" NS doc-do-Bl-args macro
-.\" NS   resolve remaining .Bl arguments
-.\" NS
-.\" NS modifies:
-.\" NS   doc-arg-ptr
-.\" NS   doc-argXXX
-.\" NS   doc-compact-list-stackXXX
-.\" NS   doc-list-indent-stackXXX
-.\" NS   doc-list-offset-stackXXX
-.\" NS   doc-num-columns
-.\" NS   doc-tag-prefix-stackXXX
-.\" NS   doc-tag-width-stackXXX
-.\" NS
-.\" NS local variables:
-.\" NS   doc-box-dBla
-.\" NS   doc-env-dBla
-.\" NS   doc-reg-dBla
-.\" NS   doc-reg-dBla1
-.\" NS   doc-reg-dBla2
-.\" NS   doc-reg-dBla3
-.\" NS   doc-reg-dBla4
-.\" NS   doc-str-dBla
-.\" NS   doc-str-dBla1
-.
-.de doc-do-Bl-args
-.  nr doc-arg-ptr +1
-.
-.  if (\n[doc-arg-limit] < \n[doc-arg-ptr]) \
-.    return
-.
-.  \" avoid a warning message in case e.g. `-offset' has no parameter
-.  nr doc-reg-dBla (\n[doc-arg-ptr] + 1)
-.  if !d doc-arg\n[doc-reg-dBla] \
-.    ds doc-arg\n[doc-reg-dBla]
-.
-.  nr doc-reg-dBla 1
-.
-.  ie        "\*[doc-arg\n[doc-arg-ptr]]"-compact" \
-.    nr doc-compact-list-stack\n[doc-list-depth] 1
-.
-.  el \{ .ie "\*[doc-arg\n[doc-arg-ptr]]"-nested" \{\
-.    ie (\n[doc-list-depth] > 1) \{\
-.      nr doc-reg-dBla1 (\n[doc-list-depth] - 1)
-.      ds doc-tag-prefix-stack\n[doc-list-depth] "\*[doc-tag-prefix-stack\n[doc-reg-dBla1]]
-.      as doc-tag-prefix-stack\n[doc-list-depth] \n[doc-enum-list-count-stack\n[doc-reg-dBla1]].
-.      length doc-reg-dBla1 "\*[doc-tag-prefix-stack\n[doc-list-depth]]
-.      nr doc-list-indent-stack\n[doc-list-depth] +\n[doc-reg-dBla1]n
-.    \}
-.    el \
-.      tm mdoc warning: `-nested' allowed with nested .Bl macros only (#\n[.c])
-.  \}
-.
-.  el \{ .ie "\*[doc-arg\n[doc-arg-ptr]]"-width" \{\
-.    nr doc-arg-ptr +1
-.    ds doc-tag-width-stack\n[doc-list-depth] TagwidtH
-.
-.    ds doc-str-dBla "\*[doc-arg\n[doc-arg-ptr]]
-.    substring doc-str-dBla 0 0
-.    ie .\*[doc-str-dBla] \{\
-.      ds doc-str-dBla "\*[doc-arg\n[doc-arg-ptr]]
-.      substring doc-str-dBla 1
-.      doc-first-parameter \*[doc-str-dBla]
-.      doc-get-width "\*[doc-str-dfp]
-.      doc-get-arg-type "\*[doc-str-dfp]
-.      ie (\n[doc-arg-type] == 1) \
-.        nr doc-reg-dBla1 1
-.      el \
-.        nr doc-reg-dBla1 0
-.    \}
-.    el \
-.      nr doc-reg-dBla1 0
-.    ds doc-str-dBla "\*[doc-arg\n[doc-arg-ptr]]
-.
-.    ie \n[doc-reg-dBla1] \{\
-.      \" execute string in a box to get the width of the diversion
-.      ds doc-str-dBla \*[doc-arg\n[doc-arg-ptr]]
-.      doc-save-global-vars
-.      doc-reset-args
-.      box doc-box-dBla
-.      ev doc-env-dBla
-.      evc 0
-.      in 0
-.      nf
-.      nop \*[doc-str-dBla]
-.      br
-.      ev
-.      box
-.      doc-restore-global-vars
-.      doc-get-width \h'\n[dl]u'
-.      nr doc-list-indent-stack\n[doc-list-depth] (\n[doc-width]u * \n[doc-fixed-width]u)
-.    \}
-.    el \{\
-.      \" test whether argument is a valid numeric expression
-.      nr doc-reg-dBla1 0
-.      if \B(\*[doc-str-dBla]) \{\
-.        \" disable warnings related to scaling indicators (32)
-.        nr doc-reg-dBla2 \n[.warn]
-.        warn (\n[.warn] - (\n[.warn] / 32 % 2 * 32))
-.
-.        \" values without a scaling indicator are taken as strings;
-.        \" we test whether the parameter string with and without the last
-.        \" character yields identical numerical results (ignoring the
-.        \" scaling indicator)
-.        ds doc-str-dBla1 "\*[doc-str-dBla]
-.        substring doc-str-dBla1 0 -2
-.        if \B(\*[doc-str-dBla1]) \{\
-.          nr doc-reg-dBla3 (;(\*[doc-str-dBla]))
-.          nr doc-reg-dBla4 (\*[doc-str-dBla1])
-.          if (\n[doc-reg-dBla3] == \n[doc-reg-dBla4]) \
-.            nr doc-reg-dBla1 1
-.        \}
-.
-.        \" enable all warnings again
-.        warn \n[doc-reg-dBla2]
-.      \}
-.
-.      ie \n[doc-reg-dBla1] \
-.        nr doc-list-indent-stack\n[doc-list-depth] (\*[doc-str-dBla])
-.      el \{\
-.        doc-get-arg-width \n[doc-arg-ptr]
-.        ie (\n[doc-width] == 2) \{\
-.          \" if the width parameter is a macro, use the macro's
-.          \" width as specified in doc-common
-.          doc-get-arg-type \*[doc-str-dBla]
-.          ie (\n[doc-arg-type] == 1) \
-.            nr doc-list-indent-stack\n[doc-list-depth] \n[\*[doc-str-dBla]]
-.          el \
-.            nr doc-list-indent-stack\n[doc-list-depth] (\n[doc-width]u * \n[doc-fixed-width]u)
-.        \}
-.        el \
-.          nr doc-list-indent-stack\n[doc-list-depth] (\n[doc-width]u * \n[doc-fixed-width]u)
-.  \}\}\}
-.
-.  el \{ .ie "\*[doc-arg\n[doc-arg-ptr]]"-offset" \{\
-.    nr doc-arg-ptr +1
-.
-.    ie "\*[doc-arg\n[doc-arg-ptr]]"indent" \
-.      nr doc-list-offset-stack\n[doc-list-depth] \n[doc-display-indent]u
-.    el \{\
-.      ds doc-str-dBla "\*[doc-arg\n[doc-arg-ptr]]
-.      nr doc-reg-dBla1 0
-.      if \B(\*[doc-str-dBla]) \{\
-.        nr doc-reg-dBla2 \n[.warn]
-.        warn (\n[.warn] - (\n[.warn] / 32 % 2 * 32))
-.
-.        ds doc-str-dBla1 "\*[doc-str-dBla]
-.        substring doc-str-dBla1 0 -2
-.        if \B(\*[doc-str-dBla1]) \{\
-.          nr doc-reg-dBla3 (;(\*[doc-str-dBla]))
-.          nr doc-reg-dBla4 (\*[doc-str-dBla1])
-.          if (\n[doc-reg-dBla3] == \n[doc-reg-dBla4]) \
-.            nr doc-reg-dBla1 1
-.        \}
-.
-.        warn \n[doc-reg-dBla2]
-.      \}
-.
-.      ie \n[doc-reg-dBla1] \
-.        nr doc-list-offset-stack\n[doc-list-depth] \*[doc-str-dBla]
-.      el \{\
-.        doc-get-arg-width \n[doc-arg-ptr]
-.        ie (\n[doc-width] <= 3) \{\
-.          \" if the offset parameter is a macro, use the macro's
-.          \" width as specified in doc-common
-.          doc-get-arg-type \*[doc-str-dBla]
-.          ie (\n[doc-arg-type] == 1) \
-.            nr doc-list-offset-stack\n[doc-list-depth] \n[\*[doc-str-dBla]]
-.          el \
-.            nr doc-list-offset-stack\n[doc-list-depth] (\n[doc-width]u * \n[doc-fixed-width]u)
-.        \}
-.        el \
-.          nr doc-list-offset-stack\n[doc-list-depth] (\n[doc-width]u * \n[doc-fixed-width]u)
-.  \}\}\}
-.  el \
-.    nr doc-reg-dBla 0
-.  \}\}\}
-.
-.  \" not a known keyword, so it specifies the width of the next column
-.  \" (if it is a column list)
-.  if !\n[doc-reg-dBla] \{\
-.    ie "\*[doc-list-type-stack\n[doc-list-depth]]"column-list" \{\
-.      nr doc-num-columns +1
-.      ds doc-str-dBla \*[doc-arg\n[doc-arg-ptr]]
-.      substring doc-str-dBla 0 0
-.      ie .\*[doc-str-dBla] \{\
-.        ds doc-str-dBla "\*[doc-arg\n[doc-arg-ptr]]
-.        substring doc-str-dBla 1
-.        doc-first-parameter \*[doc-str-dBla]
-.        doc-get-width "\*[doc-str-dfp]
-.        doc-get-arg-type "\*[doc-str-dfp]
-.        ie (\n[doc-arg-type] == 1) \
-.          nr doc-reg-dBla1 1
-.        el \
-.          nr doc-reg-dBla1 0
-.      \}
-.      el \
-.        nr doc-reg-dBla1 0
-.      ds doc-str-dBla "\*[doc-arg\n[doc-arg-ptr]]
-.
-.      ie \n[doc-reg-dBla1] \{\
-.        \" execute string in a box to get the width of the diversion
-.        ds doc-str-dBla \*[doc-arg\n[doc-arg-ptr]]
-.        doc-save-global-vars
-.        doc-reset-args
-.        box doc-box-dBla
-.        ev doc-env-dBla
-.        evc 0
-.        in 0
-.        nf
-.        nop \*[doc-str-dBla]
-.        br
-.        ev
-.        box
-.        doc-restore-global-vars
-.        ds doc-arg\n[doc-num-columns] "\h'\n[dl]u'
-.      \}
-.      el \
-.        ds doc-arg\n[doc-num-columns] "\*[doc-arg\n[doc-arg-ptr]]
-.    \}
-.    el \{\
-.      tmc mdoc warning: Unknown keyword `\*[doc-arg\n[doc-arg-ptr]]'
-.      tm1 " in .Bl macro (#\n[.c])
-.  \}\}
-.
-.  if (\n[doc-arg-limit] > \n[doc-arg-ptr]) \
-.    doc-do-Bl-args
-..
-.
-.
-.\" NS doc-save-global-vars macro
-.\" NS   save all global variables
-.\" NS
-.\" NS local variables:
-.\" NS   doc-reg-dsgv
-.
-.de doc-save-global-vars
-.  ds doc-macro-name-saved "\*[doc-macro-name]
-.  nr doc-arg-limit-saved \n[doc-arg-limit]
-.  nr doc-num-args-saved \n[doc-num-args]
-.  nr doc-arg-ptr-saved \n[doc-arg-ptr]
-.
-.  nr doc-reg-dsgv 1
-.  while (\n[doc-reg-dsgv] <= \n[doc-arg-limit]) \{\
-.    ds doc-arg\n[doc-reg-dsgv]-saved "\*[doc-arg\n[doc-reg-dsgv]]
-.    nr doc-type\n[doc-reg-dsgv]-saved \n[doc-type\n[doc-reg-dsgv]]
-.    ds doc-space\n[doc-reg-dsgv]-saved "\*[doc-space\n[doc-reg-dsgv]]
-.    nr doc-reg-dsgv +1
-.  \}
-.
-.  nr doc-curr-font-saved \n[doc-curr-font]
-.  nr doc-curr-size-saved \n[doc-curr-size]
-.  nr doc-in-synopsis-section-saved \n[doc-in-synopsis-section]
-.  nr doc-in-library-section-saved \n[doc-in-library-section]
-.  nr doc-indent-synopsis-saved \n[doc-indent-synopsis]
-.  nr doc-indent-synopsis-active-saved \n[doc-indent-synopsis-active]
-.  nr doc-have-decl-saved \n[doc-have-decl]
-.  nr doc-have-var-saved \n[doc-have-var]
-.  ds doc-command-name-saved "\*[doc-command-name]
-.  ds doc-quote-left-saved "\*[doc-quote-left]
-.  ds doc-quote-right-saved "\*[doc-quote-right]
-.  nr doc-nesting-level-saved \n[doc-nesting-level]
-.  nr doc-in-list-saved \n[doc-in-list]
-.  ds doc-space-saved "\*[doc-space]
-.  ds doc-saved-space-saved "\*[doc-saved-space]
-.  nr doc-space-mode-saved \n[doc-space-mode]
-.  nr doc-have-space-saved \n[doc-have-space]
-.  nr doc-have-slot-saved \n[doc-have-slot]
-.  nr doc-keep-type-saved \n[doc-keep-type]
-.  nr doc-display-depth-saved \n[doc-display-depth]
-.  nr doc-is-compact-saved \n[doc-is-compact]
-.
-.  nr doc-reg-dsgv 0
-.  while (\n[doc-reg-dsgv] <= \n[doc-display-depth]) \{\
-.    ds doc-display-type-stack\n[doc-reg-dsgv]-saved "\*[doc-display-type-stack\n[doc-reg-dsgv]]
-.    nr doc-display-indent-stack\n[doc-reg-dsgv]-saved \n[doc-display-indent-stack\n[doc-reg-dsgv]]
-.    nr doc-display-ad-stack\n[doc-reg-dsgv]-saved \n[doc-display-ad-stack\n[doc-reg-dsgv]]
-.    nr doc-display-fi-stack\n[doc-reg-dsgv]-saved \n[doc-display-fi-stack\n[doc-reg-dsgv]]
-.    nr doc-display-ft-stack\n[doc-reg-dsgv]-saved \n[doc-display-ft-stack\n[doc-reg-dsgv]]
-.    nr doc-display-ps-stack\n[doc-reg-dsgv]-saved \n[doc-display-ps-stack\n[doc-reg-dsgv]]
-.    nr doc-reg-dsgv +1
-.  \}
-.
-.  nr doc-fontmode-depth-saved \n[doc-fontmode-depth]
-.
-.  nr doc-reg-dsgv 1
-.  while (\n[doc-reg-dsgv] <= \n[doc-fontmode-depth]) \{\
-.    nr doc-fontmode-font-stack\n[doc-reg-dsgv]-saved \n[doc-fontmode-font-stack\n[doc-reg-dsgv]]
-.    nr doc-fontmode-size-stack\n[doc-reg-dsgv]-saved \n[doc-fontmode-size-stack\n[doc-reg-dsgv]]
-.    nr doc-reg-dsgv +1
-.  \}
-.
-.  nr doc-list-depth-saved \n[doc-list-depth]
-.
-.  nr doc-reg-dsgv 1
-.  while (\n[doc-reg-dsgv] <= \n[doc-list-depth]) \{\
-.    ds doc-list-type-stack\n[doc-reg-dsgv]-saved "\*[doc-list-type-stack\n[doc-reg-dsgv]]
-.    nr doc-list-have-indent-stack\n[doc-reg-dsgv]-saved \n[doc-list-have-indent-stack\n[doc-reg-dsgv]]
-.    nr doc-list-indent-stack\n[doc-reg-dsgv]-saved \n[doc-list-indent-stack\n[doc-reg-dsgv]]
-.    nr doc-compact-list-stack\n[doc-reg-dsgv]-saved \n[doc-compact-list-stack\n[doc-reg-dsgv]]
-.    ds doc-tag-prefix-stack\n[doc-reg-dsgv]-saved "\*[doc-tag-prefix-stack\n[doc-reg-dsgv]]
-.    ds doc-tag-width-stack\n[doc-reg-dsgv]-saved "\*[doc-tag-width-stack\n[doc-reg-dsgv]]
-.    nr doc-list-offset-stack\n[doc-reg-dsgv]-saved \n[doc-list-offset-stack\n[doc-reg-dsgv]]
-.    nr doc-enum-list-count-stack\n[doc-reg-dsgv]-saved \n[doc-enum-list-count-stack\n[doc-reg-dsgv]]
-.    nr doc-reg-dsgv +1
-.  \}
-.
-.  ds doc-saved-Pa-font-saved "\*[doc-saved-Pa-font]
-.  nr doc-curr-type-saved \n[doc-curr-type]
-.  ds doc-curr-arg-saved "\*[doc-curr-arg]
-.  nr doc-diag-list-input-line-count-saved \n[doc-diag-list-input-line-count]
-.  nr doc-num-columns-saved \n[doc-num-columns]
-.  nr doc-column-indent-width-saved \n[doc-column-indent-width]
-.  nr doc-is-func-saved \n[doc-is-func]
-.  nr doc-have-old-func-saved \n[doc-have-old-func]
-.  nr doc-func-arg-count-saved \n[doc-func-arg-count]
-.  ds doc-func-arg-saved "\*[doc-func-arg]
-.  nr doc-num-func-args-saved \n[doc-num-func-args]
-.  nr doc-func-args-processed-saved \n[doc-func-args-processed]
-.  nr doc-have-func-saved \n[doc-have-func]
-.  nr doc-is-reference-saved \n[doc-is-reference]
-.  nr doc-reference-count-saved \n[doc-reference-count]
-.  nr doc-author-count-saved \n[doc-author-count]
-.
-.  nr doc-reg-dsgv 0
-.  while (\n[doc-reg-dsgv] <= \n[doc-author-count]) \{\
-.    ds doc-author-name\n[doc-reg-dsgv]-saved "\*[doc-author-name\n[doc-reg-dsgv]]
-.    nr doc-reg-dsgv +1
-.  \}
-.
-.  nr doc-book-count-saved \n[doc-book-count]
-.  ds doc-book-name-saved "\*[doc-book-name]
-.  nr doc-city-count-saved \n[doc-city-count]
-.  ds doc-city-name-saved "\*[doc-city-name]
-.  nr doc-date-count-saved \n[doc-date-count]
-.  ds doc-date-saved "\*[doc-date]
-.  nr doc-publisher-count-saved \n[doc-publisher-count]
-.  ds doc-publisher-name-saved "\*[doc-publisher-name]
-.  nr doc-journal-count-saved \n[doc-journal-count]
-.  ds doc-journal-name-saved "\*[doc-journal-name]
-.  nr doc-issue-count-saved \n[doc-issue-count]
-.  ds doc-issue-name-saved "\*[doc-issue-name]
-.  nr doc-optional-count-saved \n[doc-optional-count]
-.  ds doc-optional-string-saved "\*[doc-optional-string]
-.  nr doc-page-number-count-saved \n[doc-page-number-count]
-.  ds doc-page-number-string-saved "\*[doc-page-number-string]
-.  nr doc-corporate-count-saved \n[doc-corporate-count]
-.  ds doc-corporate-name-saved "\*[doc-corporate-name]
-.  nr doc-report-count-saved \n[doc-report-count]
-.  ds doc-report-name-saved "\*[doc-report-name]
-.  nr doc-reference-title-count-saved \n[doc-reference-title-count]
-.  ds doc-reference-title-name-saved "\*[doc-reference-title-name]
-.  ds doc-reference-title-name-for-book-saved "\*[doc-reference-title-name-for-book]
-.  nr doc-url-count-saved \n[doc-url-count]
-.  ds doc-url-name-saved "\*[doc-url-name]
-.  nr doc-volume-count-saved \n[doc-volume-count]
-.  ds doc-volume-name-saved "\*[doc-volume-name]
-.  nr doc-have-author-saved \n[doc-have-author]
-.
-.  ds doc-document-title-saved "\*[doc-document-title]
-.  ds doc-volume-saved "\*[doc-volume]
-.  ds doc-section-saved "\*[doc-section]
-.  ds doc-operating-system-saved "\*[doc-operating-system]
-.  ds doc-date-string-saved "\*[doc-date-string]
-.  nr doc-header-space-saved \n[doc-header-space]
-.  nr doc-footer-space-saved \n[doc-footer-space]
-.  nr doc-display-vertical-saved \n[doc-display-vertical]
-.  ds doc-header-string-saved "\*[doc-header-string]
-.  nr doc-in-see-also-section-saved \n[doc-in-see-also-section]
-.  nr doc-in-files-section-saved \n[doc-in-files-section]
-.  nr doc-in-authors-section-saved \n[doc-in-authors-section]
-..
-.
-.
-.\" NS doc-restore-global-vars macro
-.\" NS   restore all global variables
-.\" NS
-.\" NS local variables:
-.\" NS   doc-reg-drgv
-.
-.de doc-restore-global-vars
-.  ds doc-macro-name "\*[doc-macro-name-saved]
-.  nr doc-arg-limit \n[doc-arg-limit-saved]
-.  nr doc-num-args \n[doc-num-args-saved]
-.  nr doc-arg-ptr \n[doc-arg-ptr-saved]
-.
-.  nr doc-reg-drgv 1
-.  while (\n[doc-reg-drgv] <= \n[doc-arg-limit]) \{\
-.    ds doc-arg\n[doc-reg-drgv] "\*[doc-arg\n[doc-reg-drgv]-saved]
-.    nr doc-type\n[doc-reg-drgv] \n[doc-type\n[doc-reg-drgv]-saved]
-.    ds doc-space\n[doc-reg-drgv] "\*[doc-space\n[doc-reg-drgv]-saved]
-.    nr doc-reg-drgv +1
-.  \}
-.
-.  nr doc-curr-font \n[doc-curr-font-saved]
-.  nr doc-curr-size \n[doc-curr-size-saved]
-.  nr doc-in-synopsis-section \n[doc-in-synopsis-section-saved]
-.  nr doc-in-library-section \n[doc-in-library-section-saved]
-.  nr doc-indent-synopsis \n[doc-indent-synopsis-saved]
-.  nr doc-indent-synopsis-active \n[doc-indent-synopsis-active-saved]
-.  nr doc-have-decl \n[doc-have-decl-saved]
-.  nr doc-have-var \n[doc-have-var-saved]
-.  ds doc-command-name "\*[doc-command-name-saved]
-.  ds doc-quote-left "\*[doc-quote-left-saved]
-.  ds doc-quote-right "\*[doc-quote-right-saved]
-.  nr doc-nesting-level \n[doc-nesting-level-saved]
-.  nr doc-in-list \n[doc-in-list-saved]
-.  ds doc-space "\*[doc-space-saved]
-.  ds doc-saved-space "\*[doc-saved-space-saved]
-.  nr doc-space-mode \n[doc-space-mode-saved]
-.  nr doc-have-space \n[doc-have-space-saved]
-.  nr doc-have-slot \n[doc-have-slot-saved]
-.  nr doc-keep-type \n[doc-keep-type-saved]
-.  nr doc-display-depth \n[doc-display-depth-saved]
-.  nr doc-is-compact \n[doc-is-compact-saved]
-.
-.  nr doc-reg-drgv 0
-.  while (\n[doc-reg-drgv] <= \n[doc-display-depth]) \{\
-.    ds doc-display-type-stack\n[doc-reg-drgv] "\*[doc-display-type-stack\n[doc-reg-drgv]-saved]
-.    nr doc-display-indent-stack\n[doc-reg-drgv] \n[doc-display-indent-stack\n[doc-reg-drgv]-saved]
-.    nr doc-display-ad-stack\n[doc-reg-drgv] \n[doc-display-ad-stack\n[doc-reg-drgv]-saved]
-.    nr doc-display-fi-stack\n[doc-reg-drgv] \n[doc-display-fi-stack\n[doc-reg-drgv]-saved]
-.    nr doc-display-ft-stack\n[doc-reg-drgv] \n[doc-display-ft-stack\n[doc-reg-drgv]-saved]
-.    nr doc-display-ps-stack\n[doc-reg-drgv] \n[doc-display-ps-stack\n[doc-reg-drgv]-saved]
-.    nr doc-reg-drgv +1
-.  \}
-.
-.  nr doc-fontmode-depth \n[doc-fontmode-depth-saved]
-.
-.  nr doc-reg-drgv 1
-.  while (\n[doc-reg-drgv] <= \n[doc-fontmode-depth]) \{\
-.    nr doc-fontmode-font-stack\n[doc-reg-drgv] \n[doc-fontmode-font-stack\n[doc-reg-drgv]]-saved
-.    nr doc-fontmode-size-stack\n[doc-reg-drgv] \n[doc-fontmode-size-stack\n[doc-reg-drgv]]-saved
-.    nr doc-reg-drgv +1
-.  \}
-.
-.  nr doc-list-depth \n[doc-list-depth-saved]
-.
-.  nr doc-reg-drgv 1
-.  while (\n[doc-reg-drgv] <= \n[doc-list-depth]) \{\
-.    ds doc-list-type-stack\n[doc-reg-drgv] "\*[doc-list-type-stack\n[doc-reg-drgv]-saved]
-.    nr doc-list-have-indent-stack\n[doc-reg-drgv] \n[doc-list-have-indent-stack\n[doc-reg-drgv]-saved]
-.    nr doc-list-indent-stack\n[doc-reg-drgv] \n[doc-list-indent-stack\n[doc-reg-drgv]-saved]
-.    nr doc-compact-list-stack\n[doc-reg-drgv] \n[doc-compact-list-stack\n[doc-reg-drgv]-saved]
-.    ds doc-tag-prefix-stack\n[doc-reg-drgv] "\*[doc-tag-prefix-stack\n[doc-reg-drgv]-saved]
-.    ds doc-tag-width-stack\n[doc-reg-drgv] "\*[doc-tag-width-stack\n[doc-reg-drgv]-saved]
-.    nr doc-list-offset-stack\n[doc-reg-drgv] \n[doc-list-offset-stack\n[doc-reg-drgv]-saved]
-.    nr doc-enum-list-count-stack\n[doc-reg-drgv] \n[doc-enum-list-count-stack\n[doc-reg-drgv]-saved]
-.    nr doc-reg-drgv +1
-.  \}
-.
-.  ds doc-saved-Pa-font "\*[doc-saved-Pa-font-saved]
-.  nr doc-curr-type \n[doc-curr-type-saved]
-.  ds doc-curr-arg "\*[doc-curr-arg-saved]
-.  nr doc-diag-list-input-line-count \n[doc-diag-list-input-line-count-saved]
-.  nr doc-num-columns \n[doc-num-columns-saved]
-.  nr doc-column-indent-width \n[doc-column-indent-width-saved]
-.  nr doc-is-func \n[doc-is-func-saved]
-.  nr doc-have-old-func \n[doc-have-old-func-saved]
-.  nr doc-func-arg-count \n[doc-func-arg-count-saved]
-.  ds doc-func-arg "\*[doc-func-arg-saved]
-.  nr doc-num-func-args \n[doc-num-func-args-saved]
-.  nr doc-func-args-processed \n[doc-func-args-processed-saved]
-.  nr doc-have-func \n[doc-have-func-saved]
-.  nr doc-is-reference \n[doc-is-reference-saved]
-.  nr doc-reference-count \n[doc-reference-count-saved]
-.  nr doc-author-count \n[doc-author-count-saved]
-.
-.  nr doc-reg-drgv 0
-.  while (\n[doc-reg-drgv] <= \n[doc-author-count]) \{\
-.    ds doc-author-name\n[doc-reg-drgv] "\*[doc-author-name\n[doc-reg-drgv]-saved]
-.    nr doc-reg-drgv +1
-.  \}
-.
-.  nr doc-book-count \n[doc-book-count-saved]
-.  ds doc-book-name "\*[doc-book-name-saved]
-.  nr doc-city-count \n[doc-city-count-saved]
-.  ds doc-city-name "\*[doc-city-name-saved]
-.  nr doc-date-count \n[doc-date-count-saved]
-.  ds doc-date "\*[doc-date-saved]
-.  nr doc-publisher-count \n[doc-publisher-count-saved]
-.  ds doc-publisher-name "\*[doc-publisher-name-saved]
-.  nr doc-journal-count \n[doc-journal-count-saved]
-.  ds doc-journal-name "\*[doc-journal-name-saved]
-.  nr doc-issue-count \n[doc-issue-count-saved]
-.  ds doc-issue-name "\*[doc-issue-name-saved]
-.  nr doc-optional-count \n[doc-optional-count-saved]
-.  ds doc-optional-string "\*[doc-optional-string-saved]
-.  nr doc-page-number-count \n[doc-page-number-count-saved]
-.  ds doc-page-number-string "\*[doc-page-number-string-saved]
-.  nr doc-corporate-count \n[doc-corporate-count-saved]
-.  ds doc-corporate-name "\*[doc-corporate-name-saved]
-.  nr doc-report-count \n[doc-report-count-saved]
-.  ds doc-report-name "\*[doc-report-name-saved]
-.  nr doc-reference-title-count \n[doc-reference-title-count-saved]
-.  ds doc-reference-title-name "\*[doc-reference-title-name-saved]
-.  ds doc-reference-title-name-for-book "\*[doc-reference-title-name-for-book-saved]
-.  nr doc-url-count \n[doc-url-count-saved]
-.  ds doc-url-name "\*[doc-url-name-saved]
-.  nr doc-volume-count \n[doc-volume-count-saved]
-.  ds doc-volume-name "\*[doc-volume-name-saved]
-.  nr doc-have-author \n[doc-have-author-saved]
-.
-.  ds doc-document-title "\*[doc-document-title-saved]
-.  ds doc-volume "\*[doc-volume-saved]
-.  ds doc-section "\*[doc-section-saved]
-.  ds doc-operating-system "\*[doc-operating-system-saved]
-.  ds doc-date-string "\*[doc-date-string-saved]
-.  nr doc-header-space \n[doc-header-space-saved]
-.  nr doc-footer-space \n[doc-footer-space-saved]
-.  nr doc-display-vertical \n[doc-display-vertical-saved]
-.  ds doc-header-string "\*[doc-header-string-saved]
-.  nr doc-in-see-also-section \n[doc-in-see-also-section-saved]
-.  nr doc-in-files-section \n[doc-in-files-section-saved]
-.  nr doc-in-authors-section \n[doc-in-authors-section-saved]
-..
-.
-.
-.\" NS El user macro
-.\" NS   end list
-.\" NS
-.\" NS modifies:
-.\" NS   doc-list-depth
-.\" NS   doc-macro-name
-.\" NS
-.\" NS local variables:
-.\" NS   doc-str-El
-.\" NS
-.\" NS width register `El' set in doc-common
-.
-.de El
-.  if \n[.$] \{\
-.    tm Usage: .El (does not take arguments) (#\n[.c])
-.    return
-.  \}
-.
-.  ds doc-macro-name El
-.  ds doc-str-El \*[doc-list-type-stack\n[doc-list-depth]]
-.
-.  ie        "\*[doc-str-El]"diag-list" \
-.    doc-end-list 0
-.  el \{ .ie "\*[doc-str-El]"column-list" \
-.    doc-end-column-list
-.  el \{ .ie "\*[doc-str-El]"item-list" \
-.    doc-end-list 0
-.  el \{ .ie "\*[doc-str-El]"ohang-list" \
-.    doc-end-list 0
-.  el \{ .ie "\*[doc-str-El]"inset-list" \
-.    doc-end-list 0
-.  el \
-.    doc-end-list 1
-.  \}\}\}\}
-.
-.  br
-..
-.
-.
-.\" NS doc-saved-Pa-font global string
-.\" NS   saved doc-Pa-font string for section FILES (no underline if
-.\" NS   nroff)
-.
-.ds doc-saved-Pa-font
-.
-.
-.\" NS doc-curr-type global register
-.\" NS   current argument type
-.
-.nr doc-curr-type 0
-.
-.
-.\" NS doc-curr-arg global string
-.\" NS   current argument
-.
-.ds doc-curr-arg
-.
-.
-.\" NS doc-item-boxXXX global box
-.\" NS   item boxes associated list depth
-.\" NS
-.\" NS limit:
-.\" NS   doc-list-depth
-.
-.
-.\" NS It user macro
-.\" NS   list item
-.\" NS
-.\" NS modifies:
-.\" NS   doc-arg-ptr
-.\" NS   doc-argXXX
-.\" NS   doc-curr-arg
-.\" NS   doc-curr-type
-.\" NS   doc-in-list
-.\" NS   doc-macro-name
-.\" NS   doc-num-args
-.\" NS   doc-saved-Pa-font
-.\" NS
-.\" NS local variables:
-.\" NS   doc-reg-It
-.\" NS   doc-str-It
-.\" NS   doc-XXX-list-type
-.\" NS
-.\" NS width register `It' set in doc-common
-.
-.nr doc-bullet-list-type 1
-.nr doc-column-list-type 0
-.nr doc-dash-list-type 1
-.nr doc-diag-list-type 0
-.nr doc-enum-list-type 1
-.nr doc-hang-list-type 2
-.nr doc-inset-list-type 2
-.nr doc-item-list-type 1
-.nr doc-ohang-list-type 2
-.nr doc-tag-list-type 2
-.
-.de It
-.  ds doc-str-It \*[doc-list-type-stack\n[doc-list-depth]]
-.
-.  if "\*[doc-str-It]"" \
-.    tm mdoc error: .It without preceding .Bl (#\n[.c])
-.
-.  if \n[doc-nesting-level] \{\
-.    tmc "mdoc error: .It found in enclosing (e.g. .Ac ... .It ... .Ao)
-.    tm1 " (#\n[.c])
-.  \}
-.
-.  br
-.  if !\n[cR] \
-.    ne 3v
-.
-.  if \n[.$] \{\
-.    ds doc-macro-name It
-.
-.    \" fill argument vector
-.    nr doc-reg-It 1
-.    while (\n[doc-reg-It] <= \n[.$]) \{\
-.      ds doc-arg\n[doc-reg-It] "\$[\n[doc-reg-It]]
-.      nr doc-reg-It +1
-.    \}
-.
-.    nr doc-num-args \n[.$]
-.    nr doc-arg-ptr 0
-.  \}
-.
-.  nr doc-reg-It \n[doc-\*[doc-str-It]-type]
-.
-.  if \n[doc-reg-It] \{\
-.    \" start item box
-.    box doc-item-box\n[doc-list-depth]
-.    ev doc-item-env\n[doc-list-depth]
-.    evc 0
-.    in 0
-.    nf
-.  \}
-.
-.  ie (\n[doc-reg-It] == 1) \{\
-.    if \n[.$] \{\
-.      tm1 "mdoc warning: .It macros in lists of type `\*[doc-str-It]'
-.      tm1 "              don't take arguments (#\n[.c])
-.  \}\}
-.  el \{\
-.    ie \n[.$] \{\
-.      if (\n[doc-reg-It] == 2) \{\
-.        \" handle list types with arguments
-.        doc-parse-arg-vector
-.
-.        nr doc-in-list 1
-.        nr doc-arg-ptr 1
-.        nr doc-curr-type \n[doc-type1]
-.        ds doc-curr-arg "\*[doc-arg1]
-.
-.        if \n[doc-in-files-section] \{\
-.          ds doc-saved-Pa-font "\*[doc-Pa-font]
-.          if n \
-.            ds doc-Pa-font "\*[doc-No-font]
-.        \}
-.
-.        ie (\n[doc-type1] == 1) \
-.          \*[doc-arg1]
-.        el \{\
-.          nr doc-arg-ptr 1
-.          doc-print-recursive
-.    \}\}\}
-.    el \{\
-.      tm1 "mdoc warning: .It macros in lists of type `\*[doc-str-It]'
-.      tm1 "              require arguments (#\n[.c])
-.    \}
-.  \}
-.
-.  \" the previous call of `.doc-print-recursive' can contain calls to
-.  \" opening macros like `.Ao'; we then defer the call of `doc-xxx-list'
-.  if !\n[doc-nesting-level] \
-.    doc-\*[doc-str-It]
-..
-.
-.
-.\" NS doc-inset-list macro
-.\" NS   .It item of list-type inset
-.\" NS
-.\" NS modifies:
-.\" NS   doc-in-list
-.
-.de doc-inset-list
-.  \" finish item box
-.  br
-.  ev
-.  box
-.  unformat doc-item-box\n[doc-list-depth]
-.
-.  doc-set-vertical-and-indent 0
-.  br
-.
-.  nh
-.  doc-item-box\n[doc-list-depth]
-.
-.  if \n[doc-in-files-section] \
-.    if n \
-.      ds doc-Pa-font "\*[doc-saved-Pa-font]
-.
-.  nr doc-in-list 0
-.  doc-reset-args
-..
-.
-.
-.\" NS doc-hang-list macro
-.\" NS   .It item of list-type hanging tag (as opposed to tagged)
-.\" NS
-.\" NS modifies:
-.\" NS   doc-have-space
-.\" NS   doc-in-list
-.\" NS
-.\" NS local variables:
-.\" NS   doc-reg-dhl
-.\" NS   doc-reg-dhl1
-.
-.de doc-hang-list
-.  \" finish item box
-.  br
-.  ev
-.  box
-.  unformat doc-item-box\n[doc-list-depth]
-.
-.  doc-set-vertical-and-indent 1
-.  nr doc-reg-dhl (\n[doc-list-indent-stack\n[doc-list-depth]]u + \n[doc-digit-width]u)
-.  ti -\n[doc-reg-dhl]u
-.
-.  nh
-.  ie (\n[dl]u > \n[doc-list-indent-stack\n[doc-list-depth]]u) \
-.    doc-item-box\n[doc-list-depth]
-.  el \{\
-.    chop doc-item-box\n[doc-list-depth]
-.    nr doc-reg-dhl1 \n[.k]u
-.    nop \*[doc-item-box\n[doc-list-depth]]\c
-.    nop \h'|(\n[doc-reg-dhl1]u - \n[.k]u + \n[doc-reg-dhl]u)'\c
-.    nr doc-have-space 1
-.  \}
-.
-.  if \n[doc-in-files-section] \
-.    if n \
-.      ds doc-Pa-font "\*[doc-saved-Pa-font]
-.
-.  nr doc-in-list 0
-.  doc-reset-args
-..
-.
-.
-.\" NS doc-ohang-list macro
-.\" NS   .It item of list-type overhanging tag
-.\" NS
-.\" NS modifies:
-.\" NS   doc-in-list
-.
-.de doc-ohang-list
-.  \" finish item box
-.  br
-.  ev
-.  box
-.  unformat doc-item-box\n[doc-list-depth]
-.
-.  doc-set-vertical-and-indent 0
-.  nh
-.  doc-item-box\n[doc-list-depth]
-.  br
-.
-.  if \n[doc-in-files-section] \
-.    if n \
-.      ds doc-Pa-font "\*[doc-saved-Pa-font]
-.
-.  nr doc-in-list 0
-.  doc-reset-args
-..
-.
-.
-.\" NS doc-item-list macro
-.\" NS   .It item of list-type [empty tag]
-.
-.de doc-item-list
-.  \" finish (dummy) item box
-.  br
-.  ev
-.  box
-.
-.  doc-set-vertical-and-indent 0
-.  br
-.
-.  doc-reset-args
-..
-.
-.
-.\" NS doc-enum-list-count-stackXXX global register
-.\" NS   stack of current enum count values
-.\" NS
-.\" NS limit:
-.\" NS   doc-list-depth
-.
-.nr doc-enum-list-count-stack1 0
-.
-.
-.\" NS doc-enum-list macro
-.\" NS   enumerated list
-.\" NS
-.\" NS modifies:
-.\" NS   doc-enum-list-count-stackXXX
-.\" NS   doc-in-list
-.
-.de doc-enum-list
-.  nr doc-in-list 1
-.  nr doc-enum-list-count-stack\n[doc-list-depth] +1
-\# XXX
-\#.ll \n[doc-list-indent-stack\n[doc-list-depth]]u
-\#.rj
-.  nop \*[doc-tag-prefix-stack\n[doc-list-depth]]\c
-.  nop \n[doc-enum-list-count-stack\n[doc-list-depth]].\&
-.  doc-do-list
-..
-.
-.
-.\" NS doc-bullet-list macro
-.\" NS   bullet paragraph list
-.\" NS
-.\" NS modifies:
-.\" NS   doc-in-list
-.
-.de doc-bullet-list
-.  nr doc-in-list 1
-.  nop \)\*[doc-Sy-font]\[bu]\f[]
-.  doc-do-list
-..
-.
-.
-.\" NS doc-dash-list macro
-.\" NS   hyphen paragraph list (sub bullet list)
-.\" NS
-.\" NS modifies:
-.\" NS   doc-in-list
-.
-.de doc-dash-list
-.  nr doc-in-list 1
-.  nop \)\*[doc-Sy-font]\-\f[]
-.  doc-do-list
-..
-.
-.
-.\" NS doc-do-list macro
-.\" NS   .It item of list-type enum/bullet/hyphen
-.
-.als doc-do-list doc-hang-list
-.
-.
-.\" NS doc-diag-list-input-line-count global register
-.\" NS   saved line number to be checked in next diag-list item
-.
-.nr doc-diag-list-input-line-count 0
-.
-.
-.\" NS doc-diag-list macro
-.\" NS   .It item of list-type diagnostic-message
-.\" NS
-.\" NS modifies:
-.\" NS   doc-curr-font
-.\" NS   doc-curr-size
-.\" NS   doc-diag-list-input-line-count
-.
-.de doc-diag-list
-.  nr doc-curr-font \n[.f]
-.  nr doc-curr-size \n[.ps]
-.
-.  ie ((\n[.c] - \n[doc-diag-list-input-line-count]) > 1) \{\
-.    ie !\n[doc-compact-list-stack\n[doc-list-depth]] \
-.      doc-paragraph
-.    el \
-.      br
-.  \}
-.  el \
-.    br
-.  nr doc-diag-list-input-line-count \n[.c]
-.
-.  nh
-.  nop \*[doc-Sy-font]\c
-.  if \n[doc-num-args] \
-.    doc-remaining-args
-.  nop \f[\n[doc-curr-font]]\s[\n[doc-curr-size]u]\*[doc-hard-space]\c
-.
-.  doc-print-and-reset
-..
-.
-.
-.\" NS doc-tag-list macro
-.\" NS   .It item of list-type `tag'
-.\" NS
-.\" NS modifies:
-.\" NS   doc-have-space
-.\" NS   doc-in-list
-.\" NS
-.\" NS local variables:
-.\" NS   doc-box-dtl
-.\" NS   doc-reg-dtl
-.\" NS   doc-reg-dtl1
-.
-.de doc-tag-list
-.  \" finish item box
-.  br
-.  ev
-.  box
-.  unformat doc-item-box\n[doc-list-depth]
-.
-.  \" we use a box without `.nf' to compute the tag width (via `dl' register)
-.  box doc-box-dtl
-.  ev doc-env-dtl
-.  evc 0
-.  fi
-.  ad 0
-.  in 0
-.  doc-item-box\n[doc-list-depth]
-.  br
-.  ev
-.  box
-.
-.  if !"TagwidtH"\*[doc-tag-width-stack\n[doc-list-depth]]" \{\
-.    if !\n[doc-list-have-indent-stack\n[doc-list-depth]] \{\
-.      in -(\n[doc-list-indent-stack\n[doc-list-depth]]u + \n[doc-digit-width]u)
-.      nr doc-list-have-indent-stack\n[doc-list-depth] 1
-.    \}
-.    doc-get-tag-width
-.  \}
-.  doc-set-vertical-and-indent 1
-.  nr doc-reg-dtl (\n[doc-list-indent-stack\n[doc-list-depth]]u + \n[doc-digit-width]u)
-.  ti -\n[doc-reg-dtl]u
-.
-.  nh
-.  doc-item-box\n[doc-list-depth]
-.  ie (\n[dl]u > \n[doc-list-indent-stack\n[doc-list-depth]]u) \
-.    br
-.  el \{\
-.    \" format the tag separately to prevent stretching of spaces
-.    vpt 0
-.    br
-.    sp -1
-.    vpt 1
-.    nop \&\c
-.    nr doc-have-space 1
-.  \}
-.
-.  if \n[doc-in-files-section] \
-.    if n \
-.      ds doc-Pa-font "\*[doc-saved-Pa-font]
-.
-.  nr doc-in-list 0
-.  doc-reset-args
-..
-.
-.
-.\" NS doc-get-tag-width macro
-.\" NS   resolve unknown tag width (`tag' list-type only)
-.\" NS
-.\" NS modifies:
-.\" NS   doc-list-indent-stackXXX
-.\" NS   doc-tag-width-stackXXX
-.\" NS
-.\" NS requires:
-.\" NS   doc-curr-arg
-.\" NS   doc-curr-type
-.
-.de doc-get-tag-width
-.  ie (\n[doc-curr-type] == 1) \{\
-.    ds doc-tag-width-stack\n[doc-list-depth] \*[doc-curr-arg]
-.    nr doc-list-indent-stack\n[doc-list-depth] \n[\*[doc-curr-arg]]
-.  \}
-.  el \{\
-.    ds doc-tag-width-stack\n[doc-list-depth] No
-.    nr doc-list-indent-stack\n[doc-list-depth] \n[No]
-.  \}
-..
-.
-.
-.\" NS doc-set-vertical-and-indent macro
-.\" NS   set up vertical spacing (if not compact) and indentation (with
-.\" NS   offset if argument is non-zero)
-.\" NS
-.\" NS modifies:
-.\" NS   doc-list-have-indent-stackXXX
-.
-.de doc-set-vertical-and-indent
-.  if !\n[doc-compact-list-stack\n[doc-list-depth]] \
-.    sp \n[doc-display-vertical]u
-.
-.  if \n[doc-list-have-indent-stack\n[doc-list-depth]] \{\
-.    nr doc-list-have-indent-stack\n[doc-list-depth] 0
-.    if \$1 \
-.      in +(\n[doc-list-indent-stack\n[doc-list-depth]]u + \n[doc-digit-width]u)
-.  \}
-.
-.  if !\n[cR] \
-.    ne 2v
-..
-.
-.
-.\" NS doc-list-depth global register
-.\" NS   list type stack counter
-.
-.nr doc-list-depth 0
-.
-.
-.\" NS doc-num-columns global register
-.\" NS   number of columns
-.
-.nr doc-num-columns 0
-.
-.
-.\" NS doc-compact-list-stackXXX global register (bool)
-.\" NS   stack of flags to indicate whether a particular list is compact
-.\" NS
-.\" NS limit:
-.\" NS   doc-list-depth
-.
-.nr doc-compact-list-stack1 0
-.
-.
-.\" NS doc-tag-prefix-stackXXX global string
-.\" NS   stack of tag prefixes (currently used for -nested -enum lists)
-.\" NS
-.\" NS limit:
-.\" NS   doc-list-depth
-.
-.ds doc-tag-prefix-stack1
-.
-.
-.\" NS doc-tag-width-stackXXX global string
-.\" NS   stack of strings indicating how to set up current element of
-.\" NS   doc-list-indent-stackXXX -- if set to TagwidtH, user has set it
-.\" NS   directly; if it is a macro name, use the macro's width value;
-.\" NS   otherwise, `doc-get-tag-width' uses width value of `No'.
-.\" NS
-.\" NS limit:
-.\" NS   doc-list-depth
-.
-.ds doc-tag-width-stack0
-.ds doc-tag-width-stack1
-.
-.
-.\" NS doc-list-offset-stackXXX global register
-.\" NS   stack of list offsets
-.\" NS
-.\" NS limit:
-.\" NS   doc-list-depth
-.
-.nr doc-list-offset-stack1 0
-.
-.
-.\" NS doc-end-list macro
-.\" NS   list end function; resets indentation (and offset if argument is
-.\" NS   non-zero)
-.\" NS
-.\" NS modifies:
-.\" NS   doc-list-depth
-.\" NS   doc-list-offset-stackXXX
-.
-.de doc-end-list
-.  if \$1 \
-'    in -(\n[doc-list-indent-stack\n[doc-list-depth]]u + \n[doc-digit-width]u)
-.
-'  in -\n[doc-list-offset-stack\n[doc-list-depth]]u
-.
-.  if (\n[doc-list-depth] <= 0) \
-.    tm mdoc warning: extraneous .El call (#\n[.c])
-.
-.  doc-decrement-list-stack
-.  nr doc-list-depth -1
-..
-.
-.
-.\" NS doc-increment-list-stack macro
-.\" NS   set up next block for list
-.\" NS
-.\" NS modifies:
-.\" NS   doc-compact-list-stackXXX
-.\" NS   doc-list-have-indent-stackXXX
-.\" NS   doc-list-indent-stackXXX
-.\" NS   doc-list-offset-stackXXX
-.\" NS   doc-list-type-stackXXX
-.\" NS   doc-tag-prefix-stackXXX
-.\" NS   doc-tag-width-stackXXX
-.\" NS   doc-enum-list-count-stackXXX
-.\" NS
-.\" NS local variables:
-.\" NS   doc-reg-dils
-.
-.de doc-increment-list-stack
-.  nr doc-reg-dils (\n[doc-list-depth] + 1)
-.  nr doc-list-have-indent-stack\n[doc-reg-dils] 0
-.  nr doc-list-indent-stack\n[doc-reg-dils] 0
-.  nr doc-list-offset-stack\n[doc-reg-dils] 0
-.  ds doc-tag-prefix-stack\n[doc-reg-dils]
-.  ds doc-tag-width-stack\n[doc-reg-dils] \*[doc-tag-width-stack\n[doc-list-depth]]
-.  ds doc-list-type-stack\n[doc-reg-dils]
-.  nr doc-compact-list-stack\n[doc-reg-dils] 0
-.  nr doc-enum-list-count-stack\n[doc-reg-dils] 0
-..
-.
-.
-.\" NS doc-decrement-list-stack macro
-.\" NS   decrement stack
-.\" NS
-.\" NS modifies:
-.\" NS   doc-compact-list-stackXXX
-.\" NS   doc-list-have-indent-stackXXX
-.\" NS   doc-list-indent-stackXXX
-.\" NS   doc-list-offset-stackXXX
-.\" NS   doc-list-type-stackXXX
-.\" NS   doc-tag-prefix-stackXXX
-.\" NS   doc-tag-width-stackXXX
-.\" NS   doc-enum-list-count-stackXXX
-.
-.de doc-decrement-list-stack
-.  ds doc-list-type-stack\n[doc-list-depth]
-.  nr doc-list-have-indent-stack\n[doc-list-depth] 0
-.  nr doc-list-indent-stack\n[doc-list-depth] 0
-.  nr doc-list-offset-stack\n[doc-list-depth] 0
-.  ds doc-tag-prefix-stack\n[doc-list-depth]
-.  ds doc-tag-width-stack\n[doc-list-depth]
-.  nr doc-compact-list-stack\n[doc-list-depth] 0
-.  nr doc-enum-list-count-stack\n[doc-list-depth] 0
-..
-.
-.
-.\" NS Xr user macro
-.\" NS   cross reference (for man pages only)
-.\" NS
-.\" NS modifies:
-.\" NS   doc-arg-ptr
-.\" NS   doc-macro-name
-.\" NS
-.\" NS local variables:
-.\" NS   doc-reg-Xr
-.\" NS
-.\" NS width register `Xr' set in doc-common
-.
-.de Xr
-.  if !\n[doc-arg-limit] \{\
-.    ie \n[.$] \{\
-.      ds doc-macro-name Xr
-.      doc-parse-args \$@
-.    \}
-.    el \
-.      doc-Xr-usage
-.  \}
-.
-.  if !\n[doc-arg-limit] \
-.    return
-.
-.  nr doc-arg-ptr +1
-.  doc-print-prefixes
-.  ie (\n[doc-arg-limit] >= \n[doc-arg-ptr]) \{\
-.    \" first argument must be a string
-.    ie (\n[doc-type\n[doc-arg-ptr]] == 2) \{\
-.      nr doc-curr-font \n[.f]
-.      nr doc-curr-size \n[.ps]
-.      ds doc-arg\n[doc-arg-ptr] \*[doc-Xr-font]\*[doc-arg\n[doc-arg-ptr]]\f[]\s[0]
-.
-.      if (\n[doc-arg-limit] > \n[doc-arg-ptr]) \{\
-.        nr doc-reg-Xr (\n[doc-arg-ptr] + 1)
-.        \" modify second argument if it is a string and
-.        \" remove space in between
-.        if (\n[doc-type\n[doc-reg-Xr]] == 2) \{\
-.          ds doc-arg\n[doc-reg-Xr] \*[lp]\*[doc-arg\n[doc-reg-Xr]]\*[rp]
-.          ds doc-space\n[doc-arg-ptr]
-.        \}
-.      \}
-.      doc-print-recursive
-.    \}
-.    el \
-.      doc-Xr-usage
-.  \}
-.  el \
-.    doc-Xr-usage
-..
-.
-.
-.\" NS doc-Xr-usage macro
-.
-.de doc-Xr-usage
-.  tm Usage: .Xr manpage_name [section#] ... (#\n[.c])
-.  doc-reset-args
-..
-.
-.
-.\" NS Sx user macro
-.\" NS   cross section reference
-.\" NS
-.\" NS width register `Sx' set in doc-common
-.
-.als Sx doc-generic-macro
-.ds doc-Sx-usage section_header
-.
-.
-.\" NS doc-end-column-list macro
-.\" NS   column-list end-list
-.\" NS
-.\" NS modifies:
-.\" NS   doc-list-depth
-.
-.de doc-end-column-list
-.  linetabs 0
-'  in -(\n[doc-list-offset-stack\n[doc-list-depth]]u + \n[doc-list-indent-stack\n[doc-list-depth]]u)
-.  ta T .5i
-.  fi
-.  doc-decrement-list-stack
-.  nr doc-list-depth -1
-..
-.
-.
-.\" NS doc-column-indent-width global register
-.\" NS   holds the indent width for a column list
-.
-.nr doc-column-indent-width 0
-.
-.
-.\" NS doc-set-column-tab macro
-.\" NS   establish tabs for list-type column: `.doc-set-column-tab num_cols'
-.\" NS
-.\" NS modifies:
-.\" NS   doc-column-indent-width
-.\" NS
-.\" NS local variables:
-.\" NS   doc-reg-dsct
-.\" NS   doc-str-dsct
-.\" NS   doc-str-dsct1
-.
-.de doc-set-column-tab
-.  ds doc-str-dsct
-.  nr doc-reg-dsct 1
-.  nr doc-column-indent-width 0
-.
-.  ie (\$1 < 5) \
-.    ds doc-str-dsct1 "    \"
-.  el \{\
-.    ie (\$1 == 5) \
-.      ds doc-str-dsct1 "   \"
-.    el \{\
-.      \" XXX: this is packed abnormally close -- intercolumn width
-.      \"      should be configurable
-.      ds doc-str-dsct1 " \"
-.  \}\}
-.
-.  while (\n[doc-reg-dsct] <= \$1) \{\
-.    as doc-str-dsct " +\w\*[doc-arg\n[doc-reg-dsct]]\*[doc-str-dsct1]u
-.    nr doc-column-indent-width +\w\*[doc-arg\n[doc-reg-dsct]]\*[doc-str-dsct1]u
-.    nr doc-reg-dsct +1
-.  \}
-.
-.  ta \*[doc-str-dsct]
-'  in +\n[doc-column-indent-width]u
-..
-.
-.
-.\" NS doc-column-list macro
-.\" NS   column items
-.\" NS
-.\" NS modifies:
-.\" NS   doc-arg-ptr
-.\" NS   doc-list-indent-stackXXX
-.\" NS   doc-spaceXXX
-.\" NS
-.\" NS local variables:
-.\" NS   doc-reg-dcl
-.
-.de doc-column-list
-.  if \n[doc-num-args] \
-.    doc-parse-arg-vector
-.  nr doc-arg-ptr +1
-.
-.  if (\n[doc-arg-limit] < \n[doc-arg-ptr]) \{\
-.    tm Usage: .It column_string [Ta [column_string ...] ] (#\n[.c])
-.    return
-.  \}
-.
-.  if "\*[doc-arg\n[doc-arg-ptr]]"Ta" \{\
-.    nr doc-reg-dcl (\n[doc-arg-ptr] - 1)
-.    ds doc-space\n[doc-reg-dcl]
-.  \}
-.
-.  if !\n[doc-list-indent-stack\n[doc-list-depth]] \
-.    nr doc-list-indent-stack\n[doc-list-depth] \n[doc-column-indent-width]u
-.  if !\n[.u] \{\
-.    fi
-.    in +\n[doc-column-indent-width]u
-.  \}
-.  ti -\n[doc-column-indent-width]u
-.
-.  doc-do-\n[doc-type\n[doc-arg-ptr]]
-..
-.
-.
-.\" NS Ta user macro
-.\" NS   append tab (\t)
-.\" NS
-.\" NS modifies:
-.\" NS   doc-arg-ptr
-.\" NS
-.\" NS width register `Ta' set in doc-common
-.
-.de Ta
-.  ie \n[doc-arg-limit] \{\
-.    nr doc-arg-ptr +1
-.    nop \*[doc-tab]\c
-.    ie (\n[doc-arg-limit] >= \n[doc-arg-ptr]) \
-.      doc-do-\n[doc-type\n[doc-arg-ptr]]
-.    el \
-.      doc-reset-args
-.  \}
-.  el \{\
-.    tm1 "Usage: Ta must follow column entry: e.g.
-.    tm1 "         .It column_string [Ta [column_string ...]] (#\n[.c])
-.  \}
-..
-.
-.
-.\" NS Dl user macro
-.\" NS   display (one line) literal
-.\" NS
-.\" NS   this function uses the `Li' font
-.\" NS
-.\" NS modifies:
-.\" NS   doc-arg-ptr
-.\" NS   doc-curr-font
-.\" NS   doc-curr-size
-.\" NS   doc-macro-name
-.\" NS
-.\" NS width register `Dl' set in doc-common
-.
-.de Dl
-.  ta T .5i
-.  in +\n[doc-display-indent]u
-.
-.  ie \n[doc-arg-limit] \{\
-.    tm Usage: .Dl not callable by other macros (#\n[.c])
-.    doc-reset-args
-.  \}
-.  el \{\
-.    ie \n[.$] \{\
-.      ds doc-macro-name Dl
-.      doc-parse-args \$@
-.      nr doc-arg-ptr 1
-.      nr doc-curr-font \n[.f]
-.      nr doc-curr-size \n[.ps]
-.      nop \*[doc-Li-font]\c
-.      doc-print-recursive
-.    \}
-.    el \
-.      tm Usage: .Dl argument ... (#\n[.c])
-.  \}
-.
-.  in -\n[doc-display-indent]u
-..
-.
-.
-.\" NS D1 user macro
-.\" NS   display (one line)
-.\" NS
-.\" NS modifies:
-.\" NS   doc-arg-ptr
-.\" NS   doc-macro-name
-.\" NS
-.\" NS width register `D1' set in doc-common
-.
-.de D1
-.  ta T .5i
-.  in +\n[doc-display-indent]u
-.
-.  ie \n[doc-arg-limit] \{\
-.    tm Usage: .D1 not callable by other macros (#\n[.c])
-.    doc-reset-args
-.  \}
-.  el \{\
-.    ie \n[.$] \{\
-.      ds doc-macro-name D1
-.      doc-parse-args \$@
-.      nr doc-arg-ptr 1
-.      doc-print-recursive
-.    \}
-.    el \
-.      tm Usage: .D1 argument ... (#\n[.c])
-.  \}
-.
-.  in -\n[doc-display-indent]u
-..
-.
-.
-.\" NS Vt user macro
-.\" NS   variable type (for forcing old style variable declarations);
-.\" NS   this is not done in the same manner as .Ot for fortrash --
-.\" NS   clean up later
-.\" NS
-.\" NS modifies:
-.\" NS   doc-curr-font
-.\" NS   doc-curr-size
-.\" NS   doc-have-decl
-.\" NS   doc-have-var
-.\" NS   doc-macro-name
-.\" NS
-.\" NS width register `Vt' set in doc-common
-.
-.de Vt
-.  if !\n[doc-arg-limit] \{\
-.    ie \n[.$] \{\
-.      ds doc-macro-name Vt
-.      doc-parse-args \$@
-.    \}
-.    el \
-.      tm Usage: .Vt variable_type ... (#\n[.c])
-.  \}
-.
-.  if !\n[doc-arg-limit] \
-.    return
-.
-.  nr doc-arg-ptr +1
-.  if (\n[doc-arg-limit] < \n[doc-arg-ptr]) \{\
-.    tm Usage: .Vt variable_type ... (#\n[.c])
-.    doc-reset-args
-.    return
-.  \}
-.
-.  if \n[doc-in-synopsis-section] \{\
-.    \" if a function declaration was the last thing given,
-.    \" want vertical space
-.    if \n[doc-have-decl] \{\
-.      doc-paragraph
-.      nr doc-have-decl 0
-.    \}
-.
-.    \" if a subroutine was the last thing given, want vertical space
-.    if \n[doc-have-func] \{\
-.      ie \n[doc-have-var] \
-.        br
-.      el \
-.        doc-paragraph
-.    \}
-.
-.    nr doc-have-var 1
-.  \}
-.
-.  nr doc-curr-font \n[.f]
-.  nr doc-curr-size \n[.ps]
-.  nop \*[doc-Ft-font]\c
-.  doc-print-recursive
-.
-.  if \n[doc-in-synopsis-section] \{\
-.    ie \n[doc-have-old-func] \
-.      nop \*[doc-soft-space]\c
-.    el \
-.      br
-.  \}
-..
-.
-.
-.\" NS doc-is-func global register (bool)
-.\" NS   set if subroutine (in synopsis only) (fortran only)
-.
-.nr doc-is-func 0
-.
-.
-.\" NS Ft user macro
-.\" NS   function type
-.\" NS
-.\" NS modifies:
-.\" NS   doc-curr-font
-.\" NS   doc-curr-size
-.\" NS   doc-have-decl
-.\" NS   doc-have-var
-.\" NS   doc-is-func
-.\" NS   doc-macro-name
-.\" NS
-.\" NS width register `Ft' set in doc-common
-.
-.de Ft
-.  if !\n[doc-arg-limit] \{\
-.    ie \n[.$] \{\
-.      ds doc-macro-name Ft
-.      doc-parse-args \$@
-.    \}
-.    el \
-.      tm Usage: .Ft function_type ... (#\n[.c])
-.  \}
-.
-.  if !\n[doc-arg-limit] \
-.    return
-.
-.  nr doc-arg-ptr +1
-.  if (\n[doc-arg-limit] < \n[doc-arg-ptr]) \{\
-.    tm Usage: .Ft function_type ... (#\n[.c])
-.    doc-reset-args
-.    return
-.  \}
-.
-.  if \n[doc-in-synopsis-section] \{\
-.    if (\n[doc-have-func] : \n[doc-have-decl]) \{\
-.      doc-paragraph
-.      nr doc-have-decl 0
-.      nr doc-have-var 0
-.    \}
-.
-.    if \n[doc-have-var] \{\
-.      doc-paragraph
-.      nr doc-have-var 0
-.    \}
-.
-.    nr doc-is-func 1
-.  \}
-.
-.  nr doc-curr-font \n[.f]
-.  nr doc-curr-size \n[.ps]
-.  nop \*[doc-Ft-font]\c
-.  doc-print-recursive
-..
-.
-.
-.\" NS doc-have-old-func global register (bool)
-.\" NS   set if `Ot' has been called
-.
-.nr doc-have-old-func 0
-.
-.
-.\" NS Ot user macro
-.\" NS   old function type (fortran -- no newline)
-.\" NS
-.\" NS modifies:
-.\" NS   doc-have-decl
-.\" NS   doc-have-old-func
-.\" NS   doc-have-var
-.\" NS   doc-is-func
-.\" NS
-.\" NS width register `Ot' set in doc-common
-.
-.de Ot
-.  nr doc-have-old-func 1
-.
-.  if \n[doc-in-synopsis-section] \{\
-.    if (\n[doc-have-func] : \n[doc-have-decl]) \{\
-.      doc-paragraph
-.      nr doc-have-decl 0
-.      nr doc-have-var 0
-.    \}
-.
-.    if \n[doc-have-var] \{\
-.      doc-paragraph
-.      nr doc-have-var 0
-.    \}
-.
-.    nr doc-is-func 1
-.  \}
-.
-.  if \n[.$] \
-.    nop \*[doc-Ft-font]\$*\c
-.  nop \ \f[]\c
-..
-.
-.
-.\" NS Fa user macro
-.\" NS   function arguments
-.\" NS
-.\" NS modifies:
-.\" NS   doc-arg-ptr
-.\" NS   doc-curr-font
-.\" NS   doc-curr-size
-.\" NS   doc-macro-name
-.\" NS
-.\" NS width register `Fa' set in doc-common
-.
-.de Fa
-.  if !\n[doc-arg-limit] \{\
-.    ie \n[.$] \{\
-.      ds doc-macro-name Fa
-.      doc-parse-args \$@
-.    \}
-.    el \
-.      tm Usage: .Fa function_arguments ... (#\n[.c])
-.  \}
-.
-.  ie \n[doc-func-arg-count] \
-.    doc-do-func
-.  el \{\
-.    nr doc-arg-ptr +1
-.    if (\n[doc-arg-limit] >= \n[doc-arg-ptr]) \{\
-.      nr doc-curr-font \n[.f]
-.      nr doc-curr-size \n[.ps]
-.      nop \*[doc-Fa-font]\c
-.      doc-print-recursive
-.
-.      if \n[doc-in-synopsis-section] \
-.        if \n[doc-have-func] \
-.          br
-.  \}\}
-..
-.
-.
-.\" NS doc-func-arg-count global register
-.\" NS   how many function arguments have been processed so far
-.
-.nr doc-func-arg-count 0
-.
-.
-.\" NS doc-func-arg global string
-.\" NS   work buffer for function name strings
-.
-.ds doc-func-arg
-.
-.
-.\" NS doc-num-func-args global register
-.\" NS   number of function arguments
-.
-.nr doc-num-func-args 0
-.
-.
-.\" NS doc-func-args-processed global register
-.\" NS   function arguments processed so far
-.
-.nr doc-func-args-processed 0
-.
-.
-.\" NS doc-do-func macro
-.\" NS   internal .Fa for .Fc
-.\" NS
-.\" NS modifies:
-.\" NS   doc-arg-ptr
-.\" NS   doc-argXXX
-.\" NS   doc-func-arg
-.\" NS   doc-func-arg-count
-.\" NS   doc-func-args-processed
-.\" NS   doc-num-func-args
-.
-.de doc-do-func
-.  if (\n[doc-arg-limit] <= \n[doc-arg-ptr]) \{\
-.    doc-reset-args
-.    return
-.  \}
-.
-.  nr doc-arg-ptr +1
-.
-.  ds doc-func-arg
-.  nr doc-num-func-args 0
-.  nr doc-func-args-processed 0
-.
-.  doc-build-func-string \*[doc-arg\n[doc-arg-ptr]]
-.  if (\n[doc-num-func-args] > 1) \
-.    ds doc-arg\n[doc-arg-ptr] "\*[doc-func-arg]
-.
-.  if (\n[doc-func-arg-count] > 1) \{\
-.    nop \f[\n[doc-curr-font]]\s[\n[doc-curr-size]u]\|\c
-.    if !"\*[doc-arg\n[doc-arg-ptr]]"/*" \
-.      if !"\*[doc-arg\n[doc-arg-ptr]]"*/" \
-.        nop ,\)\c
-.    nop \)\*[doc-space\n[doc-arg-ptr]]\*[doc-Fa-font]\c
-.    nop \)\*[doc-arg\n[doc-arg-ptr]]\f[]\s[0]\c
-.  \}
-.
-.  if (\n[doc-func-arg-count] == 1) \{\
-.    nop \)\*[doc-Fa-font]\*[doc-arg\n[doc-arg-ptr]]\c
-.    nop \f[]\s[0]\c
-.  \}
-.  nr doc-func-arg-count +1
-.  doc-do-func
-..
-.
-.
-.\" NS doc-have-func global register (bool)
-.\" NS   whether we have more than one function in synopsis
-.
-.nr doc-have-func 0
-.
-.
-.\" NS Fn user macro
-.\" NS   functions
-.\" NS
-.\" NS modifies:
-.\" NS   doc-arg-ptr
-.\" NS   doc-curr-font
-.\" NS   doc-curr-size
-.\" NS   doc-have-decl
-.\" NS   doc-have-func
-.\" NS   doc-have-var
-.\" NS   doc-indent-synopsis
-.\" NS   doc-is-func
-.\" NS   doc-macro-name
-.\" NS
-.\" NS width register `Fn' set in doc-common
-.
-.de Fn
-.  if !\n[doc-arg-limit] \{\
-.    ie \n[.$] \{\
-.      ds doc-macro-name Fn
-.      doc-parse-args \$@
-.    \}
-.    el \
-.      tm Usage: .Fn function_name [function_arg] ... (#\n[.c])
-.  \}
-.
-.  if !\n[doc-arg-limit] \
-.    return
-.
-.  if \n[doc-in-synopsis-section] \{\
-.    \" if there is/has been more than one subroutine declaration
-.    ie \n[doc-is-func] \{\
-.      br
-.      nr doc-have-var 0
-.      nr doc-have-decl 0
-.      nr doc-is-func 0
-.    \}
-.    el \{\
-.      if \n[doc-have-func] \{\
-.        doc-paragraph
-.        nr doc-have-var 0
-.        nr doc-have-decl 0
-.    \}\}
-.
-.    if \n[doc-have-decl] \{\
-.      doc-paragraph
-.      nr doc-have-var 0
-.    \}
-.
-.    if \n[doc-have-var] \{\
-.      doc-paragraph
-.      nr doc-have-decl 0
-.    \}
-.
-.    nr doc-have-func 1
-.    nr doc-is-func 0
-.
-.    br
-.    if !\n[doc-indent-synopsis] \
-.      nr doc-indent-synopsis (4u * \n[doc-fixed-width]u)
-.    if !\n[doc-indent-synopsis-active] \
-.      in +\n[doc-indent-synopsis]u
-.    ti -\n[doc-indent-synopsis]u
-.  \}
-.
-.  nr doc-arg-ptr +1
-.  doc-print-prefixes
-.  if (\n[doc-arg-limit] < \n[doc-arg-ptr]) \{\
-.    tm Usage: .Fn function_name [function_arg] ... (#\n[.c])
-.    doc-reset-args
-.    return
-.  \}
-.
-.  nr doc-curr-font \n[.f]
-.  nr doc-curr-size \n[.ps]
-.  nop \*[doc-Fn-font]\*[doc-arg\n[doc-arg-ptr]]\c
-.  nop \f[]\s[0]\*[lp]\)\c
-.
-.  nr doc-arg-ptr +1
-.  if (\n[doc-arg-limit] >= \n[doc-arg-ptr]) \{\
-.    if (\n[doc-type\n[doc-arg-ptr]] == 2) \{\
-.      nop \*[doc-Fa-font]\c
-.      doc-do-func-args
-.      nop \f[\n[doc-curr-font]]\s[\n[doc-curr-size]u]\c
-.  \}\}
-.
-.  nop \)\*[rp]\)\c
-.  if \n[doc-in-synopsis-section] \
-.    nop \);\)\c
-.
-.  ie (\n[doc-arg-limit] >= \n[doc-arg-ptr]) \{\
-.    \" output the space (if needed)
-.    nr doc-arg-ptr -1
-.    nop \)\*[doc-space\n[doc-arg-ptr]]\c
-.    nr doc-arg-ptr +1
-.
-.    doc-print-recursive
-.  \}
-.  el \
-.    doc-print-and-reset
-.
-.  if \n[doc-in-synopsis-section] \
-.    if !\n[doc-indent-synopsis-active] \
-.      in -\n[doc-indent-synopsis]u
-..
-.
-.
-.\" NS doc-do-func-args macro
-.\" NS   handle function arguments
-.\" NS
-.\" NS modifies:
-.\" NS   doc-arg-ptr
-.\" NS   doc-argXXX
-.\" NS   doc-func-arg
-.\" NS   doc-func-args-processed
-.\" NS   doc-num-func-args
-.\" NS
-.\" NS local variables:
-.\" NS   doc-reg-ddfa
-.
-.de doc-do-func-args
-.  if \n[doc-in-synopsis-section] \{\
-.    ds doc-func-arg
-.    nr doc-num-func-args 0
-.    nr doc-func-args-processed 0
-.
-.    doc-build-func-string \*[doc-arg\n[doc-arg-ptr]]
-.    if (\n[doc-num-func-args] > 1) \
-.      ds doc-arg\n[doc-arg-ptr] "\*[doc-func-arg]
-.  \}
-.
-.  nop \)\*[doc-arg\n[doc-arg-ptr]]\c
-.  nr doc-arg-ptr +1
-.
-.  if (\n[doc-arg-limit] >= \n[doc-arg-ptr]) \{\
-.    if (\n[doc-type\n[doc-arg-ptr]] == 2) \{\
-.      nr doc-reg-ddfa (\n[doc-arg-ptr] - 1)
-.      nop \f[\n[doc-curr-font]]\s[\n[doc-curr-size]u]\|\c
-.      if !"\*[doc-arg\n[doc-arg-ptr]]"/*" \
-.        if !"\*[doc-arg\n[doc-arg-ptr]]"*/" \
-.          nop ,\)\c
-.      nop \)\*[doc-space\n[doc-reg-ddfa]]\f[]\s[0]\|\c
-.      doc-do-func-args
-.  \}\}
-..
-.
-.
-.\" NS doc-saved-nesting-level global register
-.
-.nr doc-saved-nesting-level 0
-.
-.
-.\" NS doc-in-func-enclosure global register (bool)
-.
-.nr doc-in-func-enclosure 0
-.
-.
-.\" NS Fo user macro
-.\" NS   function open
-.\" NS
-.\" NS modifies:
-.\" NS   doc-arg-ptr
-.\" NS   doc-curr-font
-.\" NS   doc-curr-size
-.\" NS   doc-func-arg-count
-.\" NS   doc-have-decl
-.\" NS   doc-have-func
-.\" NS   doc-have-var
-.\" NS   doc-in-func-enclosure
-.\" NS   doc-indent-synopsis
-.\" NS   doc-is-func
-.\" NS   doc-macro-name
-.\" NS   doc-saved-nesting-level
-.\" NS
-.\" NS width register `Fo' set in doc-common
-.
-.de Fo
-.  if (\n[doc-in-func-enclosure]) \{\
-.    tm mdoc error: .Fo/.Fc can't be nested (#\n[.c])
-.    return
-.  \}
-.
-.  nr doc-saved-nesting-level \n[doc-nesting-level]
-.  nr doc-in-func-enclosure 1
-.
-.  if !\n[doc-arg-limit] \{\
-.    ie \n[.$] \{\
-.      ds doc-macro-name Fo
-.      doc-parse-args \$@
-.    \}
-.    el \
-.      tm Usage: .Fo function_name (#\n[.c])
-.  \}
-.
-.  if \n[doc-in-synopsis-section] \{\
-.    \" if there is/has been more than one subroutine declaration
-.    ie \n[doc-is-func] \{\
-.      br
-.      nr doc-have-var 0
-.      nr doc-have-decl 0
-.      nr doc-is-func 0
-.    \}
-.    el \{\
-.      if \n[doc-have-func] \{\
-.        doc-paragraph
-.        nr doc-have-var 0
-.        nr doc-have-decl 0
-.    \}\}
-.
-.    if \n[doc-have-decl] \{\
-.      doc-paragraph
-.      nr doc-have-var 0
-.    \}
-.
-.    if \n[doc-have-var] \{\
-.      doc-paragraph
-.      nr doc-have-decl 0
-.    \}
-.
-.    nr doc-have-func 1
-.    nr doc-is-func 0
-.
-.    br
-.    if !\n[doc-indent-synopsis] \
-.      nr doc-indent-synopsis (4u * \n[doc-fixed-width]u)
-.  \}
-.
-.  \" start function box
-.  box doc-func-box
-.  ev doc-func-env
-.  evc 0
-.  in 0
-.  nf
-.
-.  nr doc-arg-ptr +1
-.  doc-print-prefixes
-.  if (\n[doc-arg-limit] >= \n[doc-arg-ptr]) \{\
-.    nr doc-func-arg-count 1
-.    nr doc-curr-font \n[.f]
-.    nr doc-curr-size \n[.ps]
-.
-.    nop \*[doc-Fn-font]\*[doc-arg\n[doc-arg-ptr]]\c
-.    nop \f[]\s[0]\*[lp]\)\c
-.    doc-reset-args
-.  \}
-..
-.
-.
-.\" NS Fc user macro
-.\" NS   function close
-.\" NS
-.\" NS modifies:
-.\" NS   doc-arg-ptr
-.\" NS   doc-func-arg-count
-.\" NS   doc-in-func-enclosure
-.\" NS   doc-saved-nesting-level
-.\" NS   doc-macro-name
-.\" NS
-.\" NS width register `Fc' set in doc-common
-.
-.de Fc
-.  if !\n[doc-in-func-enclosure] \{\
-.    tm mdoc warning: Extraneous .Fc (#\n[.c])
-.    return
-.  \}
-.
-.  if \n[.$] \{\
-.    ds doc-macro-name Fc
-.    \" the first (dummy) argument is used to get the correct spacing
-.    doc-parse-args \) \$@
-.  \}
-.
-.  if !(\n[doc-saved-nesting-level] == \n[doc-nesting-level]) \
-.    tm mdoc warning: Unbalanced enclosure commands within .Fo/.Fc
-.
-.  nr doc-func-arg-count 0
-.  nr doc-in-func-enclosure 0
-.
-.  ie \n[doc-in-synopsis-section] \
-.    nop \|\*[rp];\)
-.  el \
-.    nop \|\*[rp]\)
-.
-.  \" finish function box
-.  br
-.  ev
-.  box
-.  chop doc-func-box
-.  unformat doc-func-box
-.
-.  if \n[doc-in-synopsis-section] \{\
-.    if !\n[doc-indent-synopsis-active] \
-.      in +\n[doc-indent-synopsis]u
-.    ti -\n[doc-indent-synopsis]u
-.  \}
-.
-.  nh
-.  nop \*[doc-func-box]\c
-.
-.  nr doc-arg-ptr +1
-.  ie (\n[doc-arg-limit] >= \n[doc-arg-ptr]) \{\
-.    nr doc-curr-font \n[.f]
-.    nr doc-curr-size \n[.ps]
-.    doc-print-recursive
-.  \}
-.  el \
-.    doc-print-and-reset
-.
-.  if \n[doc-in-synopsis-section] \
-.    if !\n[doc-indent-synopsis-active] \
-.      in -\n[doc-indent-synopsis]u
-..
-.
-.
-.\" NS doc-build-func-string macro
-.\" NS   collect function arguments and set hard spaces in between
-.\" NS
-.\" NS modifies:
-.\" NS   doc-func-arg
-.\" NS   doc-func-args-processed
-.\" NS   doc-num-func-args
-.
-.de doc-build-func-string
-.  if !\n[doc-num-func-args] \{\
-.    nr doc-num-func-args \n[.$]
-.    nr doc-func-args-processed 0
-.    ds doc-func-arg
-.  \}
-.
-.  nr doc-func-args-processed +1
-.  as doc-func-arg "\$1
-.
-.  if (\n[doc-func-args-processed] < \n[doc-num-func-args]) \{\
-.    as doc-func-arg "\*[doc-hard-space]
-.
-.    shift
-.    doc-build-func-string \$@
-.  \}
-..
-.
-.
-.\" Very crude references: Stash all reference info into boxes, print out
-.\" reference on .Re macro and clean up.  Ordering very limited, no fancy
-.\" citations, but can do articles, journals, and books -- need to add
-.\" several missing options (like city etc).  Should be able to grab a refer
-.\" entry, massage it a wee bit (prefix a `.' to the %[A-Z]) and not worry
-.\" (ha!).
-.
-.
-.\" NS doc-is-reference global register (bool)
-.\" NS   set if in reference
-.
-.nr doc-is-reference 0
-.
-.
-.\" NS doc-reference-count global register
-.\" NS   reference element counter
-.
-.nr doc-reference-count 0
-.
-.
-.\" NS Rs user macro
-.\" NS   reference start
-.\" NS
-.\" NS modifies:
-.\" NS   doc-is-reference
-.\" NS   doc-reference-count
-.\" NS
-.\" NS width register `Rs' set in doc-common
-.
-.de Rs
-.  ie \n[.$] \
-.    tm Usage: .Rs (does not take arguments) (#\n[.c])
-.  el \{\
-.    nr doc-is-reference 1
-.    doc-reset-reference
-.    if \n[doc-in-see-also-section] \
-.      doc-paragraph
-.    nr doc-reference-count 0
-.  \}
-..
-.
-.
-.\" NS Re user macro
-.\" NS   reference end
-.\" NS
-.\" NS modifies:
-.\" NS   doc-is-reference
-.\" NS
-.\" NS width register `Re' set in doc-common
-.
-.de Re
-.  ie \n[.$] \
-.    tm Usage: .Re (does not take arguments) (#\n[.c])
-.  el \{\
-.    if !\n[doc-is-reference] \{\
-.      tm mdoc warning: Extraneous .Re (#\n[.c])
-.      return
-.    \}
-.    doc-print-reference
-.    doc-reset-reference
-.    nr doc-is-reference 0
-.  \}
-..
-.
-.
-.\" NS doc-reset-reference macro
-.\" NS   reference cleanup
-.\" NS
-.\" NS modifies:
-.\" NS   doc-author-count
-.\" NS   doc-author-nameXXX
-.\" NS   doc-book-count
-.\" NS   doc-book-name
-.\" NS   doc-city-count
-.\" NS   doc-city-name
-.\" NS   doc-corporate-count
-.\" NS   doc-corporate-name
-.\" NS   doc-date
-.\" NS   doc-date-count
-.\" NS   doc-issue-count
-.\" NS   doc-issue-name
-.\" NS   doc-journal-count
-.\" NS   doc-journal-name
-.\" NS   doc-optional-count
-.\" NS   doc-optional-string
-.\" NS   doc-page-number-count
-.\" NS   doc-page-number-string
-.\" NS   doc-publisher-count
-.\" NS   doc-publisher-name
-.\" NS   doc-reference-count
-.\" NS   doc-reference-title-count
-.\" NS   doc-reference-title-name
-.\" NS   doc-reference-title-name-for-book
-.\" NS   doc-report-count
-.\" NS   doc-report-name
-.\" NS   doc-url-count
-.\" NS   doc-url-name
-.\" NS   doc-volume-count
-.\" NS   doc-volume-name
-.
-.de doc-reset-reference
-.  while (\n[doc-author-count]) \{\
-.    ds doc-author-name\n[doc-author-count]
-.    nr doc-author-count -1
-.  \}
-.  nr doc-journal-count 0
-.  nr doc-issue-count 0
-.  nr doc-optional-count 0
-.  nr doc-corporate-count 0
-.  nr doc-report-count 0
-.  nr doc-reference-title-count 0
-.  nr doc-url-count 0
-.  nr doc-volume-count 0
-.  nr doc-city-count 0
-.  nr doc-date-count 0
-.  nr doc-page-number-count 0
-.  nr doc-book-count 0
-.  nr doc-publisher-count 0
-.  nr doc-reference-count 0
-.
-.  ds doc-journal-name
-.  ds doc-issue-name
-.  ds doc-optional-string
-.  ds doc-corporate-name
-.  ds doc-report-name
-.  ds doc-reference-title-name
-.  ds doc-reference-title-name-for-book
-.  ds doc-url-name
-.  ds doc-volume-name
-.  ds doc-city-name
-.  ds doc-date
-.  ds doc-page-number-string
-.  ds doc-book-name
-.  ds doc-publisher-name
-..
-.
-.
-.\" NS doc-finish-reference macro
-.\" NS   auxiliary macro for doc-print-reference
-.\" NS
-.\" NS modifies:
-.\" NS   doc-reference-count
-.
-.de doc-finish-reference
-.  nr doc-reference-count -\$1
-.  ie \n[doc-reference-count] \
-.    nop \),
-.  el \
-.    nop \).
-..
-.
-.
-.\" NS doc-print-reference macro
-.\" NS   reference print
-.\" NS
-.\" NS modifies:
-.\" NS   doc-reference-count
-.
-.de doc-print-reference
-.
-.  nh
-.
-.  if \n[doc-author-count] \{\
-.    doc-print-reference-authors
-.    nr doc-reference-count -\n[doc-author-count]
-.  \}
-.
-.  if \n[doc-reference-title-count] \{\
-.    unformat doc-reference-title-name
-.    chop doc-reference-title-name
-.    unformat doc-reference-title-name-for-book
-.    chop doc-reference-title-name-for-book
-.    ie ((\n[doc-journal-count] == 1) : (\n[doc-book-count] == 1)) \{\
-.      nop \)\*[q]\)\*[doc-reference-title-name-for-book]\)\*[q]\c
-.      doc-finish-reference \n[doc-reference-title-count]
-.    \}
-.    el \{\
-.      nop \*[doc-reference-title-name]\c
-.      doc-finish-reference \n[doc-reference-title-count]
-.  \}\}
-.
-.  if \n[doc-book-count] \{\
-.    unformat doc-book-name
-.    chop doc-book-name
-.    nop \*[doc-book-name]\c
-.    doc-finish-reference \n[doc-book-count]
-.  \}
-.
-.  if \n[doc-publisher-count] \{\
-.    unformat doc-publisher-name
-.    chop doc-publisher-name
-.    nop \*[doc-publisher-name]\c
-.    doc-finish-reference \n[doc-publisher-count]
-.  \}
-.
-.  if \n[doc-journal-count] \{\
-.    unformat doc-journal-name
-.    chop doc-journal-name
-.    nop \*[doc-journal-name]\c
-.    doc-finish-reference \n[doc-journal-count]
-.  \}
-.
-.  if \n[doc-report-count] \{\
-.    unformat doc-report-name
-.    chop doc-report-name
-.    nop \*[doc-report-name]\c
-.    doc-finish-reference \n[doc-report-count]
-.  \}
-.
-.  if \n[doc-issue-count] \{\
-.    unformat doc-issue-name
-.    chop doc-issue-name
-.    nop \*[doc-issue-name]\c
-.    doc-finish-reference \n[doc-issue-count]
-.  \}
-.
-.  if \n[doc-volume-count] \{\
-.    unformat doc-volume-name
-.    chop doc-volume-name
-.    nop \*[doc-volume-name]\c
-.    doc-finish-reference \n[doc-volume-count]
-.  \}
-.
-.  if \n[doc-url-count] \{\
-.    unformat doc-url-name
-.    chop doc-url-name
-.    nop \*[doc-url-name]\c
-.    doc-finish-reference \n[doc-url-count]
-.  \}
-.
-.  if \n[doc-page-number-count] \{\
-.    unformat doc-page-number-string
-.    chop doc-page-number-string
-.    nop \*[doc-page-number-string]\c
-.    doc-finish-reference \n[doc-page-number-count]
-.  \}
-.
-.  if \n[doc-corporate-count] \{\
-.    unformat doc-corporate-name
-.    chop doc-corporate-name
-.    nop \*[doc-corporate-name]\c
-.    doc-finish-reference \n[doc-corporate-count]
-.  \}
-.
-.  if \n[doc-city-count] \{\
-.    unformat doc-city-name
-.    chop doc-city-name
-.    nop \*[doc-city-name]\c
-.    doc-finish-reference \n[doc-city-count]
-.  \}
-.
-.  if \n[doc-date-count] \{\
-.    unformat doc-date
-.    chop doc-date
-.    nop \*[doc-date]\c
-.    doc-finish-reference \n[doc-date-count]
-.  \}
-.
-.  if \n[doc-optional-count] \{\
-.    unformat doc-optional-string
-.    chop doc-optional-string
-.    nop \*[doc-optional-string]\c
-.    doc-finish-reference \n[doc-optional-count]
-.  \}
-.
-.  if \n[doc-reference-count] \
-.    tm mdoc warning: unresolved reference problem
-.
-.  hy \n[doc-hyphen-flags]
-..
-.
-.
-.\" NS doc-print-reference-authors macro
-.\" NS   print out reference authors
-.\" NS
-.\" NS local variables:
-.\" NS   doc-reg-dpra
-.\" NS   doc-str-dpra
-.
-.ds doc-str-dpra "and
-.
-.de doc-print-reference-authors
-.  nr doc-reg-dpra 1
-.
-.  while (\n[doc-reg-dpra] < \n[doc-author-count]) \{\
-.    unformat doc-author-name\n[doc-reg-dpra]
-.    chop doc-author-name\n[doc-reg-dpra]
-.    ie (\n[doc-author-count] > 2) \
-.      nop \)\*[doc-author-name\n[doc-reg-dpra]],
-.    el \
-.      nop \)\*[doc-author-name\n[doc-reg-dpra]]
-.    nr doc-reg-dpra +1
-.  \}
-.
-.  unformat doc-author-name\n[doc-reg-dpra]
-.  chop doc-author-name\n[doc-reg-dpra]
-.  if (\n[doc-author-count] > 1) \
-.    nop \)\*[doc-str-dpra]
-.  nop \)\*[doc-author-name\n[doc-reg-dpra]],
-..
-.
-.
-.\" NS doc-author-count global register
-.\" NS   counter of author references
-.
-.nr doc-author-count 0
-.
-.
-.\" NS doc-author-nameXXX global box
-.\" NS   array of author names
-.\" NS
-.\" NS limit:
-.\" NS   doc-author-count
-.
-.ds doc-author-name0
-.
-.
-.\" NS %A user macro
-.\" NS   reference author(s)
-.\" NS
-.\" NS modifies:
-.\" NS   doc-arg-ptr
-.\" NS   doc-author-count
-.\" NS   doc-curr-font
-.\" NS   doc-curr-size
-.\" NS   doc-macro-name
-.\" NS   doc-reference-count
-.\" NS
-.\" NS local variables:
-.\" NS   doc-env-%A
-.\" NS
-.\" NS width register `%A' set in doc-common
-.
-.de %A
-.  if (\n[doc-arg-limit] : (\n[.$] == 0)) \{\
-.    tm Usage: .%A author_name ... (#\n[.c])
-.    return
-.  \}
-.
-.  nr doc-author-count +1
-.  nr doc-reference-count +1
-.
-.  ds doc-macro-name %A
-.  doc-parse-args \$@
-.
-.  nr doc-arg-ptr +1
-.  nr doc-curr-font \n[.f]
-.  nr doc-curr-size \n[.ps]
-.
-.  \" save to reference box
-.  box doc-author-name\n[doc-author-count]
-.  ev doc-env-%A
-.  evc 0
-.  in 0
-.  nf
-.  doc-do-references
-..
-.
-.
-.\" NS doc-book-count global register
-.\" NS   counter of book references
-.
-.nr doc-book-count 0
-.
-.
-.\" NS doc-book-name global box
-.\" NS   string of collected book references
-.
-.ds doc-book-name
-.
-.
-.\" NS %B user macro
-.\" NS   [reference] book name
-.\" NS
-.\" NS modifies:
-.\" NS   doc-arg-ptr
-.\" NS   doc-book-count
-.\" NS   doc-curr-font
-.\" NS   doc-curr-size
-.\" NS   doc-macro-name
-.\" NS   doc-reference-count
-.\" NS
-.\" NS local variables:
-.\" NS   doc-env-%B
-.\" NS
-.\" NS width register `%B' set in doc-common
-.
-.de %B
-.  if (\n[doc-arg-limit] : (\n[.$] == 0)) \{\
-.    tm Usage: .%B book_name ... (#\n[.c])
-.    return
-.  \}
-.
-.  if \n[doc-is-reference] \{\
-.    nr doc-book-count +1
-.    nr doc-reference-count +1
-.  \}
-.
-.  ds doc-macro-name %B
-.  doc-parse-args \$@
-.
-.  nr doc-arg-ptr +1
-.  nr doc-curr-font \n[.f]
-.  nr doc-curr-size \n[.ps]
-.
-.  ie \n[doc-is-reference] \{\
-.    \" append to reference box
-.    boxa doc-book-name
-.    ev doc-env-%B
-.    evc 0
-.    in 0
-.    nf
-.    nop \*[doc-Em-font]\c
-.    doc-do-references
-.  \}
-.  el \{\
-.    nop \*[doc-Em-font]\c
-.    doc-print-recursive
-.  \}
-..
-.
-.
-.\" NS doc-city-count global register
-.\" NS   counter of city references
-.
-.nr doc-city-count 0
-.
-.
-.\" NS doc-city-name global box
-.\" NS   string of collected city references
-.
-.ds doc-city-name
-.
-.
-.\" NS %C user macro
-.\" NS   [reference] city
-.\" NS
-.\" NS modifies:
-.\" NS   doc-arg-ptr
-.\" NS   doc-curr-font
-.\" NS   doc-curr-size
-.\" NS   doc-city-count
-.\" NS   doc-macro-name
-.\" NS   doc-reference-count
-.\" NS
-.\" NS local variables:
-.\" NS   doc-env-%C
-.\" NS
-.\" NS width register `%C' set in doc-common
-.
-.de %C
-.  if (\n[doc-arg-limit] : (\n[.$] == 0)) \{\
-.    tm Usage: .%C city_name ... (#\n[.c])
-.    return
-.  \}
-.
-.  nr doc-city-count +1
-.  nr doc-reference-count +1
-.
-.  ds doc-macro-name %C
-.  doc-parse-args \$@
-.
-.  nr doc-arg-ptr +1
-.  nr doc-curr-font \n[.f]
-.  nr doc-curr-size \n[.ps]
-.
-.  \" append to reference box
-.  boxa doc-city-name
-.  ev doc-env-%C
-.  evc 0
-.  in 0
-.  nf
-.  doc-do-references
-..
-.
-.
-.\" NS doc-date-count global register
-.\" NS   counter of date references
-.
-.nr doc-date-count 0
-.
-.
-.\" NS doc-date global box
-.\" NS   string of collected date references
-.
-.ds doc-date
-.
-.
-.\" NS %D user macro
-.\" NS   [reference] date
-.\" NS
-.\" NS modifies:
-.\" NS   doc-arg-ptr
-.\" NS   doc-curr-font
-.\" NS   doc-curr-size
-.\" NS   doc-date-count
-.\" NS   doc-macro-name
-.\" NS   doc-reference-count
-.\" NS
-.\" NS local variables:
-.\" NS   doc-env-%D
-.\" NS
-.\" NS width register `%D' set in doc-common
-.
-.de %D
-.  if (\n[doc-arg-limit] : (\n[.$] == 0)) \{\
-.    tm Usage: .%D date ... (#\n[.c])
-.    return
-.  \}
-.
-.  nr doc-date-count +1
-.  nr doc-reference-count +1
-.
-.  ds doc-macro-name %D
-.  doc-parse-args \$@
-.
-.  nr doc-arg-ptr +1
-.  nr doc-curr-font \n[.f]
-.  nr doc-curr-size \n[.ps]
-.
-.  \" append to reference box
-.  boxa doc-date
-.  ev doc-env-%D
-.  evc 0
-.  in 0
-.  nf
-.  doc-do-references
-..
-.
-.
-.\" NS doc-publisher-count global register
-.\" NS   counter of publisher references
-.
-.nr doc-publisher-count 0
-.
-.
-.\" NS doc-publisher-name global box
-.\" NS   string of collected publisher references
-.
-.ds doc-publisher-name
-.
-.
-.\" NS %I user macro
-.\" NS   [reference] issuer/publisher name
-.\" NS
-.\" NS modifies:
-.\" NS   doc-arg-ptr
-.\" NS   doc-curr-font
-.\" NS   doc-curr-size
-.\" NS   doc-macro-name
-.\" NS   doc-publisher-count
-.\" NS   doc-reference-count
-.\" NS
-.\" NS local variables:
-.\" NS   doc-env-%I
-.\" NS
-.\" NS width register `%I' set in doc-common
-.
-.de %I
-.  if (\n[doc-arg-limit] : (\n[.$] == 0)) \{\
-.    tm Usage: .%I issuer/publisher_name ... (#\n[.c])
-.    return
-.  \}
-.
-.  nr doc-publisher-count +1
-.  nr doc-reference-count +1
-.
-.  ds doc-macro-name %I
-.  doc-parse-args \$@
-.
-.  nr doc-arg-ptr +1
-.  nr doc-curr-font \n[.f]
-.  nr doc-curr-size \n[.ps]
-.
-.  \" append to reference box
-.  boxa doc-publisher-name
-.  ev doc-env-%I
-.  evc 0
-.  in 0
-.  nf
-.  nop \*[doc-Em-font]\c
-.  doc-do-references
-..
-.
-.
-.\" NS doc-journal-count global register
-.\" NS   counter of journal references
-.
-.nr doc-journal-count 0
-.
-.
-.\" NS doc-journal-name global box
-.\" NS   string of collected journal references
-.
-.ds doc-journal-name
-.
-.
-.\" NS %J user macro
-.\" NS   [reference] Journal Name
-.\" NS
-.\" NS modifies:
-.\" NS   doc-arg-ptr
-.\" NS   doc-curr-font
-.\" NS   doc-curr-size
-.\" NS   doc-journal-count
-.\" NS   doc-macro-name
-.\" NS   doc-reference-count
-.\" NS
-.\" NS local variables:
-.\" NS   doc-env-%J
-.\" NS
-.\" NS width register `%J' set in doc-common
-.
-.de %J
-.  if (\n[doc-arg-limit] : (\n[.$] == 0)) \{\
-.    tm Usage: .%J journal_name ... (#\n[.c])
-.    return
-.  \}
-.
-.  nr doc-journal-count +1
-.  nr doc-reference-count +1
-.
-.  ds doc-macro-name %J
-.  doc-parse-args \$@
-.
-.  nr doc-arg-ptr +1
-.  nr doc-curr-font \n[.f]
-.  nr doc-curr-size \n[.ps]
-.
-.  \" append to reference box
-.  boxa doc-journal-name
-.  ev doc-env-%J
-.  evc 0
-.  in 0
-.  nf
-.  nop \*[doc-Em-font]\c
-.  doc-do-references
-..
-.
-.
-.\" NS doc-issue-count global register
-.\" NS   counter of issue number references
-.
-.nr doc-issue-count 0
-.
-.
-.\" NS doc-issue-name global box
-.\" NS   string of collected issue number references
-.
-.ds doc-issue-name
-.
-.
-.\" NS %N user macro
-.\" NS   [reference] issue number
-.\" NS
-.\" NS modifies:
-.\" NS   doc-arg-ptr
-.\" NS   doc-curr-font
-.\" NS   doc-curr-size
-.\" NS   doc-issue-count
-.\" NS   doc-macro-name
-.\" NS   doc-reference-count
-.\" NS
-.\" NS local variables:
-.\" NS   doc-env-%N
-.\" NS
-.\" NS width register `%N' set in doc-common
-.
-.de %N
-.  if (\n[doc-arg-limit] : (\n[.$] == 0)) \{\
-.    tm Usage: .%N issue_number ... (#\n[.c])
-.    return
-.  \}
-.
-.  nr doc-issue-count +1
-.  nr doc-reference-count +1
-.
-.  ds doc-macro-name %N
-.  doc-parse-args \$@
-.
-.  nr doc-arg-ptr +1
-.  nr doc-curr-font \n[.f]
-.  nr doc-curr-size \n[.ps]
-.
-.  \" append to reference box
-.  boxa doc-issue-name
-.  ev doc-env-%N
-.  evc 0
-.  in 0
-.  nf
-.  doc-do-references
-..
-.
-.
-.\" NS doc-optional-count global register
-.\" NS   counter of optional information references
-.
-.nr doc-optional-count 0
-.
-.
-.\" NS doc-optional-string global box
-.\" NS   string of collected optional information references
-.
-.ds doc-optional-string
-.
-.
-.\" NS %O user macro
-.\" NS   [reference] optional information
-.\" NS
-.\" NS modifies:
-.\" NS   doc-arg-ptr
-.\" NS   doc-curr-font
-.\" NS   doc-curr-size
-.\" NS   doc-macro-name
-.\" NS   doc-optional-count
-.\" NS   doc-reference-count
-.\" NS
-.\" NS local variables:
-.\" NS   doc-env-%O
-.\" NS
-.\" NS width register `%O' set in doc-common
-.
-.de %O
-.  if (\n[doc-arg-limit] : (\n[.$] == 0)) \{\
-.    tm Usage: .%O optional_information ... (#\n[.c])
-.    return
-.  \}
-.
-.  nr doc-optional-count +1
-.  nr doc-reference-count +1
-.
-.  ds doc-macro-name %O
-.  doc-parse-args \$@
-.
-.  nr doc-arg-ptr +1
-.  nr doc-curr-font \n[.f]
-.  nr doc-curr-size \n[.ps]
-.
-.  \" append to reference box
-.  boxa doc-optional-string
-.  ev doc-env-%O
-.  evc 0
-.  in 0
-.  nf
-.  doc-do-references
-..
-.
-.
-.\" NS doc-page-number-count global register
-.\" NS   counter of page number references
-.
-.nr doc-page-number-count 0
-.
-.
-.\" NS doc-page-number-string global box
-.\" NS   string of collected page number references
-.
-.ds doc-page-number-string
-.
-.
-.\" NS %P user macro
-.\" NS   [reference] page numbers
-.\" NS
-.\" NS modifies:
-.\" NS   doc-arg-ptr
-.\" NS   doc-curr-font
-.\" NS   doc-curr-size
-.\" NS   doc-macro-name
-.\" NS   doc-page-number-count
-.\" NS   doc-reference-count
-.\" NS
-.\" NS local variables:
-.\" NS   doc-env-%P
-.\" NS
-.\" NS width register `%P' set in doc-common
-.
-.de %P
-.  if (\n[doc-arg-limit] : (\n[.$] == 0)) \{\
-.    tm Usage: .%P page_number ... (#\n[.c])
-.    return
-.  \}
-.
-.  nr doc-page-number-count +1
-.  nr doc-reference-count +1
-.
-.  ds doc-macro-name %P
-.  doc-parse-args \$@
-.
-.  nr doc-arg-ptr +1
-.  nr doc-curr-font \n[.f]
-.  nr doc-curr-size \n[.ps]
-.
-.  \" append to reference box
-.  boxa doc-page-number-string
-.  ev doc-env-%P
-.  evc 0
-.  in 0
-.  nf
-.  doc-do-references
-..
-.
-.
-.\" NS doc-corporate-count global register
-.\" NS   counter of corporate references
-.
-.nr doc-corporate-count 0
-.
-.
-.\" NS doc-corporate-name global box
-.\" NS   string of collected corporate references
-.
-.ds doc-corporate-name
-.
-.
-.\" NS %Q user macro
-.\" NS   corporate or foreign author
-.\" NS
-.\" NS modifies:
-.\" NS   doc-arg-ptr
-.\" NS   doc-corporate-count
-.\" NS   doc-curr-font
-.\" NS   doc-curr-size
-.\" NS   doc-macro-name
-.\" NS   doc-reference-count
-.\" NS
-.\" NS local variables:
-.\" NS   doc-env-%Q
-.\" NS
-.\" NS width register `%Q' set in doc-common
-.
-.de %Q
-.  if (\n[doc-arg-limit] : (\n[.$] == 0)) \{\
-.    tm Usage: .%Q corporate_or_foreign_author ... (#\n[.c])
-.    return
-.  \}
-.
-.  nr doc-corporate-count +1
-.  nr doc-reference-count +1
-.
-.  ds doc-macro-name %Q
-.  doc-parse-args \$@
-.
-.  nr doc-arg-ptr +1
-.  nr doc-curr-font \n[.f]
-.  nr doc-curr-size \n[.ps]
-.
-.  \" append to reference box
-.  boxa doc-corporate-name
-.  ev doc-env-%Q
-.  evc 0
-.  in 0
-.  nf
-.  doc-do-references
-..
-.
-.
-.\" NS doc-report-count global register
-.\" NS   counter of report references
-.
-.nr doc-report-count 0
-.
-.
-.\" NS doc-report-name global box
-.\" NS   string of collected report references
-.
-.ds doc-report-name
-.
-.
-.\" NS %R user macro
-.\" NS   [reference] report name
-.\" NS
-.\" NS modifies:
-.\" NS   doc-arg-ptr
-.\" NS   doc-curr-font
-.\" NS   doc-curr-size
-.\" NS   doc-macro-name
-.\" NS   doc-reference-count
-.\" NS   doc-report-count
-.\" NS
-.\" NS local variables:
-.\" NS   doc-env-%R
-.\" NS
-.\" NS width register `%R' set in doc-common
-.
-.de %R
-.  if (\n[doc-arg-limit] : (\n[.$] == 0)) \{\
-.    tm Usage: .%R reference_report ... (#\n[.c])
-.    return
-.  \}
-.
-.  nr doc-report-count +1
-.  nr doc-reference-count +1
-.
-.  ds doc-macro-name %R
-.  doc-parse-args \$@
-.
-.  nr doc-arg-ptr +1
-.  nr doc-curr-font \n[.f]
-.  nr doc-curr-size \n[.ps]
-.
-.  \" append to reference box
-.  boxa doc-report-name
-.  ev doc-env-%R
-.  evc 0
-.  in 0
-.  nf
-.  doc-do-references
-..
-.
-.
-.\" NS doc-reference-title-count global register
-.\" NS   counter of reference title references
-.
-.nr doc-reference-title-count 0
-.
-.
-.\" NS doc-reference-title-name global box
-.\" NS   string of collected reference title references
-.
-.ds doc-reference-title-name
-.
-.
-.\" NS doc-reference-title-name-for-book global box
-.\" NS   string of collected reference title references
-.\" NS   (saved with another font; this is a shortcoming of groff)
-.
-.ds doc-reference-title-name-for-book
-.
-.
-.\" NS %T user macro
-.\" NS   reference title
-.\" NS
-.\" NS modifies:
-.\" NS   doc-arg-ptr
-.\" NS   doc-curr-font
-.\" NS   doc-curr-size
-.\" NS   doc-macro-name
-.\" NS   doc-reference-title-count
-.\" NS   doc-report-count
-.\" NS
-.\" NS local variables:
-.\" NS   doc-env-%T
-.\" NS
-.\" NS width register `%T' set in doc-common
-.
-.de %T
-.  if (\n[doc-arg-limit] : (\n[.$] == 0)) \{\
-.    tm Usage: .%T reference_title ... (#\n[.c])
-.    return
-.  \}
-.
-.  if \n[doc-is-reference] \{\
-.    nr doc-reference-title-count +1
-.    nr doc-reference-count +1
-.  \}
-.
-.  ds doc-macro-name %T
-.  doc-parse-args \$@
-.
-.  nr doc-arg-ptr +1
-.  nr doc-curr-font \n[.f]
-.  nr doc-curr-size \n[.ps]
-.  ie \n[doc-is-reference] \{\
-.    \" append to reference box
-.    boxa doc-reference-title-name-for-book
-.    ev doc-env-%T
-.    evc 0
-.    in 0
-.    nf
-.    nop \*[doc-No-font]\c
-.    doc-do-references
-.
-.    \" do it a second time with another font
-.    ds doc-macro-name %T
-.    doc-parse-args \$@
-.
-.    nr doc-arg-ptr +1
-.    nr doc-curr-font \n[.f]
-.    nr doc-curr-size \n[.ps]
-.    boxa doc-reference-title-name
-.    ev doc-env-%T
-.    evc 0
-.    in 0
-.    nf
-.    nop \*[doc-Em-font]\c
-.    doc-do-references
-.  \}
-.  el \{\
-.    nop \*[doc-Em-font]\c
-.    doc-print-recursive
-.  \}
-..
-.
-.
-.\" NS doc-url-count global register
-.\" NS   counter of hypertext references
-.
-.nr doc-url-count 0
-.
-.
-.\" NS doc-url-name global box
-.\" NS   string of collected hypertext references
-.
-.ds doc-url-name
-.
-.
-.\" NS doc-volume-count global register
-.\" NS   counter of reference title references
-.
-.nr doc-volume-count 0
-.
-.
-.\" NS doc-volume-name global box
-.\" NS   string of collected volume references
-.
-.ds doc-volume-name
-.
-.
-.\" NS %U user macro
-.\" NS   hypertext reference
-.\" NS
-.\" NS modifies:
-.\" NS   doc-arg-ptr
-.\" NS   doc-curr-font
-.\" NS   doc-curr-size
-.\" NS   doc-macro-name
-.\" NS   doc-reference-count
-.\" NS   doc-url-count
-.\" NS
-.\" NS local variables:
-.\" NS   doc-env-%U
-.\" NS
-.\" NS width register `%U' set in doc-common
-.
-.de %U
-.  if (\n[doc-arg-limit] : (\n[.$] == 0)) \{\
-.    tm Usage: .%U URL ... (#\n[.c])
-.    return
-.  \}
-.
-.  nr doc-url-count +1
-.  nr doc-reference-count +1
-.
-.  ds doc-macro-name %U
-.  doc-parse-args \$@
-.
-.  nr doc-arg-ptr +1
-.  nr doc-curr-font \n[.f]
-.  nr doc-curr-size \n[.ps]
-.
-.  \" append to reference box
-.  boxa doc-url-name
-.  ev doc-env-%U
-.  evc 0
-.  in 0
-.  nf
-.  doc-do-references
-..
-.
-.
-.\" NS %V user macro
-.\" NS   reference volume
-.\" NS
-.\" NS modifies:
-.\" NS   doc-arg-ptr
-.\" NS   doc-curr-font
-.\" NS   doc-curr-size
-.\" NS   doc-macro-name
-.\" NS   doc-reference-count
-.\" NS   doc-volume-count
-.\" NS
-.\" NS local variables:
-.\" NS   doc-env-%V
-.\" NS
-.\" NS width register `%V' set in doc-common
-.
-.de %V
-.  if (\n[doc-arg-limit] : (\n[.$] == 0)) \{\
-.    tm Usage: .%V volume ... (#\n[.c])
-.    return
-.  \}
-.
-.  nr doc-volume-count +1
-.  nr doc-reference-count +1
-.
-.  ds doc-macro-name %V
-.  doc-parse-args \$@
-.
-.  nr doc-arg-ptr +1
-.  nr doc-curr-font \n[.f]
-.  nr doc-curr-size \n[.ps]
-.
-.  \" append to reference box
-.  boxa doc-volume-name
-.  ev doc-env-%V
-.  evc 0
-.  in 0
-.  nf
-.  doc-do-references
-..
-.
-.
-.\" NS doc-do-references macro
-.\" NS   reference recursion routine
-.\" NS
-.\" NS modifies:
-.\" NS   doc-arg-ptr
-.\" NS
-.\" NS local variables:
-.\" NS   doc-reg-ddr
-.\" NS   doc-reg-ddr1
-.
-.de doc-do-references
-.  if !\n[doc-is-reference] \
-.    tm mdoc error: .\*[doc-macro-name] found outside of .Rs ... .Re (#\n[.c])
-.
-.  nr doc-reg-ddr1 \n[doc-type\n[doc-arg-ptr]]
-.
-.  ie (\n[doc-reg-ddr1] == 1) \{\
-.    \" .nop \f[\n[doc-curr-font]]\s[\n[doc-curr-size]u]\c
-.    doc-append-arg \c 3
-.    \*[doc-arg\n[doc-arg-ptr]]
-.  \}
-.  el \{\
-.    nop \)\*[doc-arg\n[doc-arg-ptr]]\c
-.
-.    ie (\n[doc-arg-limit] == \n[doc-arg-ptr]) \{\
-.      \" finish reference box
-.      br
-.      ev
-.      boxa
-.
-.      doc-reset-args
-.    \}
-.    el \{\
-.      nr doc-reg-ddr \n[doc-arg-ptr]
-.      nr doc-arg-ptr +1
-.      nop \)\*[doc-space\n[doc-reg-ddr]]\c
-.      doc-do-references
-.  \}\}
-..
-.
-.
-.\" NS Hf user macro
-.\" NS   source include header files.
-.\" NS
-.\" NS modifies:
-.\" NS   doc-curr-font
-.\" NS   doc-curr-size
-.\" NS
-.\" NS width register `Hf' set in doc-common
-.
-.de Hf
-.  ie ((\n[.$] == 1) & (\n[doc-arg-limit] == 0)) \{\
-.    doc-paragraph
-.    nop File:
-.    Pa \$1
-.
-.    Bd -literal
-.    so \$1
-.    Ed
-.
-.    doc-paragraph
-.  \}
-.  el \
-.    Usage: .Hf file (#\n[.c])
-..
-.
-.
-.\" NS doc-have-author global register (bool)
-.\" NS   set in `An'
-.
-.nr doc-have-author 0
-.
-.
-.\" NS An user macro
-.\" NS   author name
-.\" NS
-.\" NS modifies:
-.\" NS   doc-arg-ptr
-.\" NS   doc-curr-font
-.\" NS   doc-curr-size
-.\" NS   doc-have-author
-.\" NS   doc-macro-name
-.\" NS
-.\" NS width register `An' set in doc-common
-.
-.de An
-.  if !\n[doc-arg-limit] \{\
-.    ie \n[.$] \{\
-.      ie        "\$1"-nosplit" \
-.        nr doc-in-authors-section 0
-.      el \{ .ie "\$1"-split" \
-.        nr doc-in-authors-section 1
-.      el \{\
-.        ds doc-macro-name An
-.        doc-parse-args \$@
-.    \}\}\}
-.    el \{\
-.      tm1 "Usage: .An {-nosplit | -split}
-.      tm1 "       .An author_name ... (#\n[.c])
-.  \}\}
-.
-.  if \n[doc-in-authors-section] \{\
-.    ie \n[doc-have-author] \
-.      br
-.    el \
-.      nr doc-have-author 1
-.  \}
-.
-.  if \n[doc-arg-limit] \{\
-.    nr doc-arg-ptr +1
-.    ie (\n[doc-arg-limit] >= \n[doc-arg-ptr]) \{\
-.      nr doc-curr-font \n[.f]
-.      nr doc-curr-size \n[.ps]
-.      doc-print-recursive
-.    \}
-.    el \{\
-.      tm Usage: .An author_name ... (#\n[.c])
-.      doc-reset-args
-.  \}\}
-..
-.
-.
-.\" NS Rv user macro
-.\" NS   return values
-.\" NS
-.\" NS width register `Rv' set in doc-common
-.\" NS
-.\" NS local variables:
-.\" NS   doc-str-Rv-std-prefix
-.\" NS   doc-str-Rv-std-suffix
-.\" NS   doc-str-Rv-stds-prefix
-.\" NS   doc-str-Rv-stds-and
-.\" NS   doc-str-Rv-stds-suffix
-.\" NS   doc-str-Rv-std0
-.
-.ds doc-str-Rv-std-prefix "The
-.ds doc-str-Rv-std-suffix "function returns the value\~0 if successful;
-.as doc-str-Rv-std-suffix " otherwise the value\~\-1 is returned and
-.as doc-str-Rv-std-suffix " the global variable \*[doc-Va-font]errno\f[]
-.as doc-str-Rv-std-suffix " is set to indicate the error.
-.
-.ds doc-str-Rv-stds-prefix "The
-.ds doc-str-Rv-stds-and    "and
-.ds doc-str-Rv-stds-suffix "functions return the value\~0 if successful;
-.as doc-str-Rv-stds-suffix " otherwise the value\~\-1 is returned and
-.as doc-str-Rv-stds-suffix " the global variable \*[doc-Va-font]errno\f[]
-.as doc-str-Rv-stds-suffix " is set to indicate the error.
-.
-.ds doc-str-Rv-std0 "Upon successful completion, the value\~0 is returned;
-.as doc-str-Rv-std0 " otherwise the value\~\-1 is returned and
-.as doc-str-Rv-std0 " the global variable \*[doc-Va-font]errno\f[]
-.as doc-str-Rv-std0 " is set to indicate the error.
-.
-.de Rv
-.
-.\" XXX: what does this function without `-std'?
-.
-.  if \n[doc-arg-limit] \{\
-.    tm Usage: .Rv not callable by other macros (#\n[.c])
-.    doc-reset-args
-.    return
-.  \}
-.
-.  if !\n[.$] \{\
-.    tm Usage: .Rv [-std] [<function> ...] (#\n[.c])
-.    return
-.  \}
-.
-.  if "\$1"-std" \{\
-.    nr doc-reg-Rv \*[doc-section]
-.    if ((\n[doc-reg-Rv] < 2) : (\n[doc-reg-Rv] > 3)) \
-.      tm Usage: .Rv -std in sections 2 and 3 only (#\n[.c])
-.    br
-.    shift
-.    ie (\n[.$] > 1) \{\
-.      nop \)\*[doc-str-Rv-stds-prefix]
-.      nr doc-reg-Rv 1
-.      while (\n[doc-reg-Rv] < \n[.$]) \{\
-.        ie (\n[.$] > 2) \
-.          Fn \$\n[doc-reg-Rv] ,
-.        el \
-.          Fn \$\n[doc-reg-Rv]
-.        nr doc-reg-Rv +1
-.      \}
-.      nop \)\*[doc-str-Rv-stds-and]
-.      Fn \$\n[.$]
-.      nop \)\*[doc-str-Rv-stds-suffix]
-.    \}
-.    el \{ .ie (\n[.$] == 1) \{\
-.      nop \)\*[doc-str-Rv-std-prefix]
-.      Fn \$1
-.      nop \)\*[doc-str-Rv-std-suffix]
-.    \}
-.    el \{\
-.      nop \)\*[doc-str-Rv-std0]
-.  \}\}\}
-..
-.
-.
-.\" NS Ex user macro
-.\" NS   exit status
-.\" NS
-.\" NS width register `Ex' set in doc-common
-.\" NS
-.\" NS local variables:
-.\" NS   doc-str-Ex-std-prefix
-.\" NS   doc-str-Ex-std-suffix
-.
-.ds doc-str-Ex-std-prefix "The
-.ds doc-str-Ex-std-suffix "utility exits\~0 on success,
-.as doc-str-Ex-std-suffix " and\~>0 if an error occurs.
-.
-.ds doc-str-Ex-stds-prefix "The
-.als doc-str-Ex-stds-and doc-str-Rv-stds-and
-.ds doc-str-Ex-stds-suffix "utilities exit\~0 on success,
-.as doc-str-Ex-stds-suffix " and\~>0 if an error occurs.
-.
-.de Ex
-.
-.\" XXX: what does this function without `-std'?
-.
-.  if \n[doc-arg-limit] \{\
-.    tm Usage: .Ex not callable by other macros (#\n[.c])
-.    doc-reset-args
-.    return
-.  \}
-.
-.  if !\n[.$] \{\
-.    tm Usage: .Ex [-std] [<utility> ...] (#\n[.c])
-.    return
-.  \}
-.
-.  if "\$1"-std" \{\
-.    nr doc-reg-Ex \*[doc-section]
-.    if !((\n[doc-reg-Ex] == 1) : (\n[doc-reg-Ex] == 6) : (\n[doc-reg-Ex] == 8)) \
-.      tm Usage: .Ex -std in sections 1, 6 and 8 only (#\n[.c])
-.    br
-.    shift
-.    ie (\n[.$] > 1) \{\
-.      nop \)\*[doc-str-Ex-stds-prefix]
-.      nr doc-reg-Ex 1
-.      while (\n[doc-reg-Ex] < \n[.$]) \{\
-.        ie (\n[.$] > 2) \
-.          Nm \$\n[doc-reg-Ex] ,
-.        el \
-.          Nm \$\n[doc-reg-Ex]
-.        nr doc-reg-Ex +1
-.      \}
-.      nop \)\*[doc-str-Ex-stds-and]
-.      Nm \$\n[.$]
-.      nop \)\*[doc-str-Ex-stds-suffix]
-.    \}
-.    el \{\
-.      nop \)\*[doc-str-Ex-std-prefix]
-.      Nm \$1
-.      nop \)\*[doc-str-Ex-std-suffix]
-.  \}\}
-..
-.
-.
-.\" NS Mt user macro
-.\" NS   mailto (for conversion to HTML)
-.
-.de Mt
-.  \" XXX: error handling missing
-.  Pa \$@
-..
-.
-.
-.\" NS Lk user macro
-.\" NS   link (for conversion to HTML)
-.\" NS
-.\" NS local variables:
-.\" NS   doc-reg-Lk
-.\" NS   doc-str-Lk
-.
-.de Lk
-.  ds doc-str-Lk Sy \$@
-.
-.  ie (\n[.$] > 1) \{\
-.    doc-get-arg-type \$2
-.    ie (\n[doc-arg-type] < 3) \{\
-.      Em \)\$2:
-.      ds doc-str-Lk Sy "\$1"
-.      doc-get-width "\$1"
-.      shift 2
-.      if \n[.$] \
-.        as doc-str-Lk " \$@
-.    \}
-.    el \
-.      doc-get-width "\$1"
-.  \}
-.  el \
-.    doc-get-width "\$1"
-.
-.  ie n \
-.    nr doc-reg-Lk 26
-.  el \
-.    nr doc-reg-Lk 38
-.  ie (\n[doc-width] >= \n[doc-reg-Lk]) \
-.    D1 \*[doc-str-Lk]
-.  el \
-.    \*[doc-str-Lk]
-..
-.
-.
-.\" NS doc-defunct-macro macro
-.\" NS   this is the skeleton for defunct macros
-.\" NS
-.
-.de doc-defunct-macro
-.  tmc mdoc error: .\$0 defunct
-.  if d doc-\$0-usage \
-.    tmc , \*[doc-\$0-usage]
-.  tm1 " (#\n[.c])
-..
-.
-.
-.\" obsolete macros
-.
-.als Db doc-defunct-macro
-.
-.als Ds doc-defunct-macro
-.
-.als Or doc-defunct-macro
-.ds doc-Or-usage use `|'
-.
-.als Sf doc-defunct-macro
-.ds doc-Sf-usage use .Pf or .Ns
-.
-.
-.rn em e@
-.
-.de em
-.  tm1 "mdoc error: end-macro (.em) respecification is not allowed. (#\n[.c])
-.  tm1 "            Should this have been `.Em ...'?
-.  ab
-..
-.
-.
-.\" NS doc-empty-line macro
-.\" NS   emit warning and print empty line
-.
-.de doc-empty-line
-.  if !\n[doc-display-depth] \
-.    tm mdoc warning: Empty input line #\n[.c]
-.  sp
-..
-.
-.blm doc-empty-line
-.
-.
-.ec
-.
-.
-.\" For UTF-8, map some characters conservatively for the sake
-.\" of easy cut and paste.
-.
-.if '\*[.T]'utf8' \{\
-.  rchar \- - ' `
-.
-.  char \- \N'45'
-.  char  - \N'45'
-.  char  ' \N'39'
-.  char  ` \N'96'
-.\}
-.
-.
-.\" load local modifications
-.mso mdoc.local
-.
-.\" EOF
diff -Nuar groff-1.22.3.old/tmac/doc.tmac-u groff-1.22.3/tmac/doc.tmac-u
--- groff-1.22.3.old/tmac/doc.tmac-u	1970-01-01 02:00:00.000000000 +0200
+++ groff-1.22.3/tmac/doc.tmac-u	2015-04-23 20:57:03.000000000 +0300
@@ -0,0 +1,6599 @@
+.\" -*- nroff -*-
+.\"
+.\" Copyright (c) 1991, 1993
+.\"	The Regents of the University of California.  All rights reserved.
+.\"
+.\" Redistribution and use in source and binary forms, with or without
+.\" modification, are permitted provided that the following conditions
+.\" are met:
+.\" 1. Redistributions of source code must retain the above copyright
+.\"    notice, this list of conditions and the following disclaimer.
+.\" 2. Redistributions in binary form must reproduce the above copyright
+.\"    notice, this list of conditions and the following disclaimer in the
+.\"    documentation and/or other materials provided with the distribution.
+.\" 3. [Deleted.  See
+.\"     ftp://ftp.cs.berkeley.edu/pub/4bsd/README.Impt.License.Change]
+.\" 4. Neither the name of the University nor the names of its contributors
+.\"    may be used to endorse or promote products derived from this software
+.\"    without specific prior written permission.
+.\"
+.\" THIS SOFTWARE IS PROVIDED BY THE REGENTS AND CONTRIBUTORS ``AS IS'' AND
+.\" ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE
+.\" IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE
+.\" ARE DISCLAIMED.  IN NO EVENT SHALL THE REGENTS OR CONTRIBUTORS BE LIABLE
+.\" FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL
+.\" DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS
+.\" OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION)
+.\" HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT
+.\" LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY
+.\" OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF
+.\" SUCH DAMAGE.
+.\"
+.\"     @(#)doc	8.1 (Berkeley) 06/08/93
+.\"
+.\" Modified by jjc@jclark.com as follows: the doc-* files are assumed to be
+.\" installed as mdoc/doc-* rather than tmac.doc-* (the filename
+.\" `tmac.doc-common' would be too long); when using groff, the doc-* files
+.\" are loaded using the `mso' request.
+.\"
+.\" Modified by
+.\"
+.\"   Werner LEMBERG <wl@gnu.org>      and
+.\"   Ruslan Ermilov <ru@freebsd.org>
+.\"
+.\" to make it more readable: using long names and many groff features,
+.\" updating and extending documentation, etc.
+.\"
+.\" %beginstrip%
+.
+.
+.if !\n(.g \
+.  ab This version of mdoc can be run with GNU troff only!
+.
+.
+.do if d Dd .nx
+.
+.
+.cp 0
+.
+.
+.if (\n[.x]\n[.y] < 118) \
+.  ab You need GNU troff version 1.18 or higher to run this version of mdoc!
+.
+.
+.\" Load start-up files
+.ie t \
+.  mso mdoc/doc-ditroff
+.el \
+.  mso mdoc/doc-nroff
+.
+.mso mdoc/doc-common
+.mso mdoc/doc-syms
+.
+.
+.eo
+.
+.
+.\" NS doc-macro-name global string
+.\" NS   name of calling request (set in each user-requestable macro)
+.
+.ds doc-macro-name
+.als doc-arg0 doc-macro-name
+.
+.
+.\" NS doc-arg-limit global register
+.\" NS   total number of arguments
+.
+.nr doc-arg-limit 0
+.
+.
+.\" NS doc-num-args global register
+.\" NS   number of arguments to handle (must be set to \n[.$] prior to
+.\" NS   `doc-parse-arg-vector' request)
+.
+.nr doc-num-args 0
+.
+.
+.\" NS doc-arg-ptr global register
+.\" NS   argument pointer
+.
+.nr doc-arg-ptr 0
+.
+.
+.\" NS doc-argXXX global string
+.\" NS   argument vector
+.\" NS
+.\" NS limit:
+.\" NS   doc-arg-limit
+.
+.ds doc-arg1
+.
+.
+.\" NS doc-typeXXX global register
+.\" NS   argument type vector (macro=1, string=2, punctuation suffix=3,
+.\" NS   punctuation prefix=4)
+.\" NS
+.\" NS limit:
+.\" NS   doc-arg-limit
+.
+.nr doc-type1 0
+.
+.
+.\" NS doc-spaceXXX global string
+.\" NS   space vector
+.\" NS
+.\" NS limit:
+.\" NS   doc-arg-limit
+.
+.ds doc-space1
+.
+.
+.\" NS doc-parse-args macro
+.\" NS   parse arguments (recursively) (`.doc-parse-args arg ...')
+.\" NS
+.\" NS modifies:
+.\" NS   doc-arg-limit
+.\" NS   doc-arg-ptr
+.\" NS   doc-argXXX
+.\" NS   doc-spaceXXX
+.\" NS   doc-typeXXX
+.\" NS   doc-arg-ptr
+.\" NS   doc-have-space
+.\" NS
+.\" NS local variables:
+.\" NS   doc-reg-dpa
+.\" NS   doc-reg-dpa1
+.\" NS   doc-str-dpa
+.
+.de doc-parse-args
+.  if !\n[doc-arg-limit] \
+.    doc-set-spacing-1
+.
+.  nr doc-have-space 0
+.
+.  if !\n[.$] \
+.    return
+.
+.  nr doc-arg-limit +1
+.
+.  \" handle `|' and `...' specially
+.  ie        "\$1"|" \
+.    ds doc-arg\n[doc-arg-limit] \f[R]|\f[]
+.  el \{ .ie "\$1"..." \
+.    ds doc-arg\n[doc-arg-limit] \|.\|.\|.
+.  el \
+.    ds doc-arg\n[doc-arg-limit] "\$1
+.  \}
+.
+.  \" get argument type and set spacing
+.  doc-get-arg-type* \n[doc-arg-limit]
+.  nr doc-type\n[doc-arg-limit] \n[doc-arg-type]
+.  doc-set-spacing-\n[doc-arg-type]
+.
+.  \" check whether we have processed the last parameter
+.  ie (\n[.$] == 1) \
+.    nr doc-arg-ptr 0
+.  el \{\
+.    shift
+.    doc-parse-args \$@
+.  \}
+.
+.  nh
+..
+.
+.
+.\" NS doc-parse-arg-vector macro
+.\" NS   parse argument vector (recursive)
+.\" NS
+.\" NS   cf. comments in doc-parse-args
+.\" NS
+.\" NS modifies:
+.\" NS   doc-arg-limit
+.\" NS   doc-arg-ptr
+.\" NS   doc-argXXX
+.\" NS   doc-num-args
+.\" NS   doc-spaceXXX
+.\" NS   doc-typeXXX
+.\" NS
+.\" NS local variables:
+.\" NS   doc-reg-dpav
+.\" NS   doc-reg-dpav1
+.\" NS   doc-str-dpav
+.
+.de doc-parse-arg-vector
+.  if !\n[doc-arg-limit] \
+.    doc-set-spacing-1
+.
+.  nr doc-arg-limit +1
+.
+.  ie        "\*[doc-arg\n[doc-arg-limit]]"|" \
+.    ds doc-arg\n[doc-arg-limit] \f[R]|\f[]
+.  el \{ .if "\*[doc-arg\n[doc-arg-limit]]"..." \
+.    ds doc-arg\n[doc-arg-limit] \|.\|.\|.
+.  \}
+.
+.  doc-get-arg-type* \n[doc-arg-limit]
+.  nr doc-type\n[doc-arg-limit] \n[doc-arg-type]
+.  doc-set-spacing-\n[doc-arg-type]
+.
+.  ie (\n[doc-num-args] == 1) \{\
+.    nr doc-arg-ptr 0
+.    nr doc-num-args 0
+.  \}
+.  el \{\
+.    nr doc-num-args -1
+.    doc-parse-arg-vector
+.  \}
+.
+.  nh
+..
+.
+.
+.\" NS doc-parse-space-vector macro
+.\" NS   parse space vector (recursive)
+.\" NS
+.\" NS modifies:
+.\" NS   doc-arg-limit
+.\" NS   doc-num-args
+.\" NS   doc-spaceXXX
+.
+.de doc-parse-space-vector
+.  nr doc-arg-limit +1
+.
+.  doc-set-spacing-\n[doc-type\n[doc-arg-limit]]
+.
+.  ie (\n[doc-num-args] == 1) \
+.    nr doc-num-args 0
+.  el \{\
+.    nr doc-num-args -1
+.    doc-parse-space-vector
+.  \}
+..
+.
+.
+.\" NS doc-remaining-args macro
+.\" NS   output remaining arguments as-is, separated by spaces (until
+.\" NS   `doc-num-args' is exhausted)
+.\" NS
+.\" NS modifies:
+.\" NS   doc-arg-ptr
+.\" NS   doc-num-args
+.
+.de doc-remaining-args
+.  nr doc-arg-ptr +1
+.  nop \)\*[doc-arg\n[doc-arg-ptr]]\c
+.
+.  ie (\n[doc-num-args] == 1) \{\
+.    nr doc-arg-ptr 0
+.    nr doc-num-args 0
+.  \}
+.  el \{\
+.    nop \)\*[doc-space]\c
+.    nr doc-num-args -1
+.    doc-remaining-args
+.  \}
+..
+.
+.
+.\" NS doc-append-arg macro
+.\" NS   append one argument to argument vector:
+.\" NS   `.doc-append-arg [arg] [type]'
+.\" NS
+.\" NS modifies:
+.\" NS   doc-arg-limit
+.\" NS   doc-argXXX
+.\" NS   doc-typeXXX
+.
+.de doc-append-arg
+.  nr doc-arg-limit +1
+.  ds doc-arg\n[doc-arg-limit] "\$1
+.  nr doc-type\n[doc-arg-limit] \$2
+.  doc-set-spacing-\$2
+..
+.
+.
+.\" NS doc-print-and-reset macro
+.\" NS   finish input line and clean up argument vectors
+.
+.de doc-print-and-reset
+.  if \n[doc-space-mode] \
+.    nop \)
+.  doc-reset-args
+..
+.
+.
+.\" NS doc-reset-args macro
+.\" NS   reset argument counters
+.\" NS
+.\" NS modifies:
+.\" NS   doc-arg-limit
+.\" NS   doc-arg-ptr
+.\" NS   doc-have-slot
+.
+.de doc-reset-args
+.  nr doc-arg-limit 0
+.  nr doc-arg-ptr 0
+.  nr doc-have-slot 0
+.
+.  hy \n[doc-hyphen-flags]
+..
+.
+.
+.ec
+.
+.\" NS doc-curr-font global register
+.\" NS   saved current font
+.
+.nr doc-curr-font \n[.f]
+.
+.
+.\" NS doc-curr-size global register
+.\" NS   saved current font size
+.
+.nr doc-curr-size \n[.ps]
+.
+.eo
+.
+.
+.\" NS Fl user macro
+.\" NS   handle flags (appends `-' and prints flags): `.Fl [arg ...]'
+.\" NS
+.\" NS modifies:
+.\" NS   doc-arg-ptr
+.\" NS   doc-curr-font
+.\" NS   doc-curr-size
+.\" NS   doc-macro-name
+.\" NS
+.\" NS local variables:
+.\" NS   doc-reg-Fl (for communication with doc-flag-recursion)
+.\" NS
+.\" NS width register `Fl' set in doc-common
+.
+.de Fl
+.  nr doc-curr-font \n[.f]
+.  nr doc-curr-size \n[.ps]
+.  nop \*[doc-Fl-font]\c
+.
+.  if !\n[doc-arg-limit] \{\
+.    ds doc-macro-name Fl
+.    doc-parse-args \$@
+.
+.    \" no arguments
+.    if !\n[.$] \
+.      nop \|\-\|\f[]\s[0]
+.  \}
+.
+.  if !\n[doc-arg-limit] \
+.    return
+.
+.  nr doc-arg-ptr +1
+.  ie (\n[doc-arg-limit] < \n[doc-arg-ptr]) \{\
+.    \" last argument
+.    nop \|\-\f[]\s[0]\c
+.    doc-print-and-reset
+.  \}
+.  el \{\
+.    ie (\n[doc-type\n[doc-arg-ptr]] == 1) \{\
+.      nop \|\-\f[]\s[0]\c
+.      \*[doc-arg\n[doc-arg-ptr]]
+.    \}
+.    el \{\
+.      if (\n[doc-type\n[doc-arg-ptr]] == 3) \
+.        nop \|\-\|\c
+.
+.      nr doc-reg-Fl 1
+.      doc-flag-recursion
+.  \}\}
+..
+.
+.
+.\" NS doc-flag-recursion macro
+.\" NS   `Fl' flag recursion routine (special handling)
+.\" NS
+.\" NS modifies:
+.\" NS   doc-arg-ptr
+.\" NS
+.\" NS local variables:
+.\" NS   doc-reg-dfr
+.\" NS   doc-reg-dfr1
+.\" NS   doc-str-dfr
+.
+.de doc-flag-recursion
+.  nr doc-reg-dfr1 \n[doc-type\n[doc-arg-ptr]]
+.  ds doc-str-dfr "\*[doc-arg\n[doc-arg-ptr]]
+.
+.  ie (\n[doc-reg-dfr1] == 1) \{\
+.    nop \f[]\s[0]\c
+.    \*[doc-str-dfr]
+.  \}
+.  el \{\
+.    nr doc-reg-dfr \n[doc-arg-ptr]
+.
+.    ie (\n[doc-reg-dfr1] == 2) \{\
+.      \" handle vertical bar -- doc-reg-Fl is set for the first call of
+.      \" doc-flag-recursion only; we need this to make `.Fl | ...' work
+.      \" correctly
+.      ie "\*[doc-str-dfr]"\*[Ba]" \{\
+.        if \n[doc-reg-Fl] \
+.          nop \|\-\*[doc-space]\c
+.        nop \)\*[Ba]\c
+.      \}
+.      el \{\
+.        ie "\*[doc-str-dfr]"\f[R]|\f[]" \{\
+.          if \n[doc-reg-Fl] \
+.            nop \|\-\*[doc-space]\c
+.          nop \f[R]|\f[]\c
+.        \}
+.        el \{\
+.          \" two consecutive hyphen characters?
+.          ie "\*[doc-str-dfr]"-" \
+.            nop \|\-\^\-\|\c
+.          el \
+.            nop \|\%\-\*[doc-str-dfr]\&\c
+.    \}\}\}
+.    el \{\
+.      nop \f[\n[doc-curr-font]]\s[\n[doc-curr-size]u]\c
+.      nop \)\*[doc-str-dfr]\f[]\s[0]\c
+.    \}
+.
+.    ie (\n[doc-arg-limit] == \n[doc-arg-ptr]) \{\
+.      \" last argument
+.      if (\n[doc-reg-dfr1] == 4) \
+.        nop \|\-\c
+.      nop \f[\n[doc-curr-font]]\s[\n[doc-curr-size]u]\c
+.      doc-print-and-reset
+.    \}
+.    el \{\
+.      nr doc-arg-ptr +1
+.      ie (\n[doc-type\n[doc-arg-ptr]] == 3) \{\
+.        ie (\n[doc-type\n[doc-reg-dfr]] == 4) \
+.          nop \|\-\c
+.        el \
+.          nop \)\*[doc-space\n[doc-reg-dfr]]\c
+.      \}
+.      el \
+.        nop \)\*[doc-space\n[doc-reg-dfr]]\c
+.
+.      shift
+.      nr doc-reg-Fl 0
+.      doc-flag-recursion \$@
+.  \}\}
+..
+.
+.
+.\" NS doc-print-recursive macro
+.\" NS   general name recursion routine (print remaining arguments)
+.\" NS
+.\" NS modifies:
+.\" NS   doc-arg-ptr
+.\" NS
+.\" NS local variables:
+.\" NS   doc-reg-dpr
+.\" NS   doc-reg-dpr1
+.\" NS   doc-str-dpr
+.
+.de doc-print-recursive
+.  nr doc-reg-dpr1 \n[doc-type\n[doc-arg-ptr]]
+.  ds doc-str-dpr "\*[doc-arg\n[doc-arg-ptr]]
+.
+.  ie (\n[doc-reg-dpr1] == 1) \{\
+.    nop \f[\n[doc-curr-font]]\s[\n[doc-curr-size]u]\c
+.    \*[doc-str-dpr]
+.  \}
+.  el \{\
+.    nr doc-reg-dpr \n[doc-arg-ptr]
+.
+.    \" the `\%' prevents hyphenation on a dash (`-')
+.    ie (\n[doc-reg-dpr1] == 2) \
+.      nop \%\*[doc-str-dpr]\&\c
+.    el \{\
+.      \" punctuation character
+.      nop \f[\n[doc-curr-font]]\s[\n[doc-curr-size]u]\c
+.      nop \)\*[doc-str-dpr]\f[]\s[0]\c
+.    \}
+.
+.    nr doc-arg-ptr +1
+.    ie (\n[doc-arg-limit] < \n[doc-arg-ptr]) \{\
+.      \" last argument
+.      nop \f[\n[doc-curr-font]]\s[\n[doc-curr-size]u]\c
+.      doc-print-and-reset
+.    \}
+.    el \{\
+.      nop \)\*[doc-space\n[doc-reg-dpr]]\c
+.      doc-print-recursive
+.  \}\}
+..
+.
+.
+.\" NS doc-print-prefixes macro
+.\" NS   print leading prefixes
+.\" NS
+.\" NS modifies:
+.\" NS   doc-arg-ptr
+.
+.de doc-print-prefixes
+.  while (\n[doc-arg-limit] >= \n[doc-arg-ptr]) \{\
+.    if !(\n[doc-type\n[doc-arg-ptr]] == 4) \
+.      break
+.    nop \f[\n[doc-curr-font]]\s[\n[doc-curr-size]u]\c
+.    nop \)\*[doc-arg\n[doc-arg-ptr]]\f[]\s[0]\c
+.    nr doc-arg-ptr +1
+.  \}
+..
+.
+.
+.\" NS doc-generic-macro macro
+.\" NS   this is the skeleton for most simple macros
+.\" NS
+.\" NS modifies:
+.\" NS   doc-arg-ptr
+.\" NS   doc-curr-font
+.\" NS   doc-curr-size
+.\" NS   doc-macro-name
+.
+.de doc-generic-macro
+.  if !\n[doc-arg-limit] \{\
+.    ie \n[.$] \{\
+.      ds doc-macro-name \$0
+.      doc-parse-args \$@
+.    \}
+.    el \
+.      tm Usage: .\$0 \*[doc-\$0-usage] ... (#\n[.c])
+.  \}
+.
+.  if !\n[doc-arg-limit] \
+.    return
+.
+.  nr doc-arg-ptr +1
+.  ie (\n[doc-arg-limit] >= \n[doc-arg-ptr]) \{\
+.    if (\n[doc-type\n[doc-arg-ptr]] == 1) \{\
+.      tmc mdoc warning: Using a macro as first argument
+.      tm1 " cancels effect of .\$0 (#\n[.c])
+.
+.      \" the right action here would be to reset the argument counters
+.      \" and bail out -- unfortunately, a small number of manual pages
+.      \" (less than 2% for FreeBSD which has been used for testing)
+.      \" relied on the old behaviour (silently ignore this error),
+.      \" so it is commented out
+.
+.\"    doc-reset-args
+.    \}
+.\"  el \{\
+.      nr doc-curr-font \n[.f]
+.      nr doc-curr-size \n[.ps]
+.      nop \*[doc-\$0-font]\c
+.      doc-print-recursive
+.\"  \}
+.  \}
+.  el \{\
+.    tm Usage: .\$0 \*[doc-\$0-usage] ... (#\n[.c])
+.    doc-reset-args
+.  \}
+..
+.
+.
+.\" NS Ar user macro
+.\" NS   command line `argument' macro: `.Ar [args ...]'
+.\" NS
+.\" NS modifies:
+.\" NS   doc-arg-ptr
+.\" NS   doc-curr-font
+.\" NS   doc-curr-size
+.\" NS   doc-macro-name
+.\" NS
+.\" NS local variable:
+.\" NS   doc-str-Ar-default
+.\" NS
+.\" NS width register `Ar' set in doc-common
+.
+.ds doc-str-Ar-default "file\ .\|.\|.
+.
+.de Ar
+.  nr doc-curr-font \n[.f]
+.  nr doc-curr-size \n[.ps]
+.  nop \*[doc-Ar-font]\c
+.
+.  if !\n[doc-arg-limit] \{\
+.    ds doc-macro-name Ar
+.    doc-parse-args \$@
+.
+.    \" no argument
+.    if !\n[.$] \
+.      nop \)\*[doc-str-Ar-default]\&\f[]\s[0]
+.  \}
+.
+.  if !\n[doc-arg-limit] \
+.    return
+.
+.  nr doc-arg-ptr +1
+.  doc-print-prefixes
+.  ie (\n[doc-arg-limit] < \n[doc-arg-ptr]) \{\
+.    nop \)\*[doc-str-Ar-default]\&\f[]\s[0]\c
+.    doc-print-and-reset
+.  \}
+.  el \{\
+.    if !(\n[doc-type\n[doc-arg-ptr]] == 2) \{\
+.      \" replace previous argument (Ar) with default value
+.      nr doc-arg-ptr -1
+.      ds doc-arg\n[doc-arg-ptr] "\*[doc-str-Ar-default]
+.      nr doc-type\n[doc-arg-ptr] 2
+.      ds doc-space\n[doc-arg-ptr] "\*[doc-space]
+.
+.      \" recompute space vector for remaining arguments
+.      nr doc-num-args (\n[doc-arg-limit] - \n[doc-arg-ptr])
+.      nr doc-arg-limit \n[doc-arg-ptr]
+.      doc-parse-space-vector
+.    \}
+.    doc-print-recursive
+.  \}
+..
+.
+.
+.\" NS Ad user macro
+.\" NS   Addresses
+.\" NS
+.\" NS width register `Ad' set in doc-common
+.
+.als Ad doc-generic-macro
+.ds doc-Ad-usage address
+.
+.
+.\" NS doc-indent-synopsis global register
+.\" NS   indentation in synopsis
+.
+.nr doc-indent-synopsis 0
+.
+.
+.\" NS doc-indent-synopsis-active global register (bool)
+.\" NS   indentation in synopsis active
+.
+.nr doc-indent-synopsis-active 0
+.
+.
+.\" NS Cd user macro
+.\" NS   config declaration (for section 4 SYNOPSIS)
+.\" NS
+.\" NS   this function causes a break; it uses the `Nm' font
+.\" NS
+.\" NS modifies:
+.\" NS   doc-arg-ptr
+.\" NS   doc-curr-font
+.\" NS   doc-curr-size
+.\" NS   doc-indent-synopsis
+.\" NS   doc-macro-name
+.\" NS
+.\" NS width register `Cd' set in doc-common
+.
+.de Cd
+.  if !\n[doc-arg-limit] \{\
+.    ie \n[.$] \{\
+.      ds doc-macro-name Cd
+.      doc-parse-args \$@
+.    \}
+.    el \
+.      tm Usage: .Cd configuration_file_declaration ... (#\n[.c])
+.  \}
+.
+.  if !\n[doc-arg-limit] \
+.    return
+.
+.  nr doc-arg-ptr +1
+.  ie (\n[doc-arg-limit] >= \n[doc-arg-ptr]) \{\
+.    nr doc-curr-font \n[.f]
+.    nr doc-curr-size \n[.ps]
+.
+.    ie \n[doc-in-synopsis-section] \{\
+.      ie "\*[doc-macro-name]"Cd" \{\
+.        br
+.        if !\n[doc-indent-synopsis] \
+.          nr doc-indent-synopsis \n[doc-display-indent]u
+.        if !\n[doc-indent-synopsis-active] \
+.          in +\n[doc-indent-synopsis]u
+.        ti -\n[doc-indent-synopsis]u
+.        nop \*[doc-Nm-font]\c
+.        doc-print-recursive
+.        if !\n[doc-indent-synopsis-active] \
+.          in -\n[doc-indent-synopsis]u
+.      \}
+.      el \{\
+.        nop \*[doc-Nm-font]\c
+.        doc-print-recursive
+.    \}\}
+.    el \{\
+.      nop \*[doc-Nm-font]\c
+.      doc-print-recursive
+.  \}\}
+.  el \{\
+.    tm Usage: .Cd configuration_file_declaration ... (#\n[.c])
+.    doc-reset-args
+.  \}
+..
+.
+.
+.\" NS Cm user macro
+.\" NS   interactive command modifier (flag)
+.\" NS
+.\" NS width register `Cm' set in doc-common
+.
+.als Cm doc-generic-macro
+.ds doc-Cm-usage interactive_command_modifier
+.
+.
+.\" NS Dv user macro
+.\" NS   defined variable
+.\" NS
+.\" NS   this function uses the `Er' font
+.\" NS
+.\" NS width register `Dv' set in doc-common
+.
+.als Dv doc-generic-macro
+.ds doc-Dv-usage defined_variable
+.als doc-Dv-font doc-Er-font
+.
+.
+.\" NS Em user macro
+.\" NS   emphasis
+.\" NS
+.\" NS width register `Em' set in doc-common
+.
+.als Em doc-generic-macro
+.ds doc-Em-usage text
+.
+.
+.\" NS Er user macro
+.\" NS   errno type
+.\" NS
+.\" NS width register `Er' set in doc-common
+.
+.als Er doc-generic-macro
+.ds doc-Er-usage text
+.
+.
+.\" NS Ev user macro
+.\" NS   environment variable
+.\" NS
+.\" NS width register `Ev' set in doc-common
+.
+.als Ev doc-generic-macro
+.ds doc-Ev-usage text
+.
+.
+.\" NS doc-have-decl global register (bool)
+.\" NS   subroutine test (in synopsis only)
+.
+.nr doc-have-decl 0
+.
+.
+.\" NS doc-have-var global register (bool)
+.\" NS   whether last type is a variable type
+.
+.nr doc-have-var 0
+.
+.
+.\" NS doc-do-func-decl macro
+.\" NS   do something special while in SYNOPSIS
+.\" NS
+.\" NS modifies:
+.\" NS   doc-curr-font
+.\" NS   doc-curr-size
+.\" NS   doc-have-decl
+.\" NS   doc-have-var
+.
+.de doc-do-func-decl
+.  if \n[doc-in-synopsis-section] \{\
+.    \" if a variable type was the last thing given, want vertical space
+.    if \n[doc-have-var] \{\
+.      doc-paragraph
+.      nr doc-have-var 0
+.    \}
+.    \" if a subroutine was the last thing given, want vertical space
+.    if \n[doc-have-func] \{\
+.      ie \n[doc-have-decl] \
+.        br
+.      el \
+.        doc-paragraph
+.    \}
+.    nr doc-have-decl 1
+.  \}
+.
+.  nr doc-curr-font \n[.f]
+.  nr doc-curr-size \n[.ps]
+..
+.
+.
+.\" NS Fd user macro
+.\" NS   function declaration -- not callable
+.\" NS
+.\" NS   this function causes a break
+.\" NS
+.\" NS width register `Fd' set in doc-common
+.
+.de Fd
+.  ie ((\n[.$] >= 1) & (\n[doc-arg-limit] == 0)) \{\
+.    doc-do-func-decl
+.    nop \*[doc-Fd-font]\$*
+.    br
+.    ft \n[doc-curr-font]
+.    ps \n[doc-curr-size]u
+.  \}
+.  el \{\
+.    tm Usage: .Fd function_declaration -- Fd is not callable (#\n[.c])
+.    doc-reset-args
+.  \}
+..
+.
+.
+.\" NS In user macro
+.\" NS   #include statement in SYNOPSIS
+.\" NS   <header.h> if not in SYNOPSIS
+.\" NS
+.\" NS   this function causes a break; it uses the `Fd' font
+.\" NS
+.\" NS modifies:
+.\" NS   doc-arg-ptr
+.\" NS   doc-curr-font
+.\" NS   doc-curr-size
+.\" NS   doc-indent-synopsis
+.\" NS   doc-macro-name
+.\" NS
+.\" NS width register `In' set in doc-common
+.
+.de In
+.  if !\n[doc-arg-limit] \{\
+.    ie \n[.$] \{\
+.      ds doc-macro-name In
+.      doc-parse-args \$@
+.    \}
+.    el \
+.      tm Usage: .In include_file ... (#\n[.c])
+.  \}
+.
+.  if !\n[doc-arg-limit] \
+.    return
+.
+.  nr doc-arg-ptr +1
+.  doc-print-prefixes
+.  ie ((\n[doc-arg-limit] >= \n[doc-arg-ptr]) & (\n[doc-type\n[doc-arg-ptr]] == 2)) \{\
+.    nr doc-curr-font \n[.f]
+.    nr doc-curr-size \n[.ps]
+.
+.    ie \n[doc-in-synopsis-section] \{\
+.      ie "\*[doc-macro-name]"In" \{\
+.        doc-do-func-decl
+.        nop \*[doc-Fd-font]#include <\*[doc-arg\n[doc-arg-ptr]]>
+.        ft \n[doc-curr-font]
+.        ps \n[doc-curr-size]u
+.        br
+.        nr doc-arg-ptr +1
+.        ie (\n[doc-arg-limit] >= \n[doc-arg-ptr]) \
+.          doc-print-recursive
+.        el \
+.          doc-reset-args
+.      \}
+.      el \{\
+.        ds doc-arg\n[doc-arg-ptr] "<\*[doc-Pa-font]\*[doc-arg\n[doc-arg-ptr]]
+.        as doc-arg\n[doc-arg-ptr] \f[\n[doc-curr-font]]\s[\n[doc-curr-size]u]>
+.        doc-print-recursive
+.    \}\}
+.    el \{\
+.      ds doc-arg\n[doc-arg-ptr] "<\*[doc-Pa-font]\*[doc-arg\n[doc-arg-ptr]]
+.      as doc-arg\n[doc-arg-ptr] \f[\n[doc-curr-font]]\s[\n[doc-curr-size]u]>
+.      doc-print-recursive
+.  \}\}
+.  el \{\
+.    tm Usage: .In include_file ... (#\n[.c])
+.    doc-reset-args
+.  \}
+..
+.
+.
+.\" NS Fr user macro
+.\" NS   function return value
+.\" NS
+.\" NS   this function uses the `Ar' font
+.\" NS
+.\" NS width register `Fr' set in doc-common
+.
+.als Fr doc-generic-macro
+.ds doc-Fr-usage function_return_value
+.als doc-Fr-font doc-Ar-font
+.
+.
+.\" NS Ic user macro
+.\" NS   interactive command
+.\" NS
+.\" NS width register `Ic' set in doc-common
+.
+.als Ic doc-generic-macro
+.ds doc-Ic-usage interactive_command
+.
+.
+.\" NS Li user macro
+.\" NS   literals
+.\" NS
+.\" NS width register `Li' set in doc-common
+.
+.als Li doc-generic-macro
+.ds doc-Li-usage argument
+.
+.
+.\" NS Ms user macro
+.\" NS   math symbol
+.\" NS
+.\" NS   this function uses the `Sy' font
+.\" NS
+.\" NS width register `Ms' set in doc-common
+.
+.als Ms doc-generic-macro
+.ds doc-Ms-usage math_symbol
+.als doc-Ms-font doc-Sy-font
+.
+.
+.\" NS doc-command-name global string
+.\" NS   save first invocation of .Nm
+.
+.ds doc-command-name
+.
+.
+.\" NS Nm user macro
+.\" NS   name of command or page topic
+.\" NS
+.\" NS modifies:
+.\" NS   doc-arg-ptr
+.\" NS   doc-command-name
+.\" NS   doc-curr-font
+.\" NS   doc-curr-size
+.\" NS   doc-indent-synopsis
+.\" NS   doc-indent-synopsis-active
+.\" NS   doc-macro-name
+.\" NS
+.\" NS width register `Nm' set in doc-common
+.
+.de Nm
+.  if !\n[doc-arg-limit] \{\
+.    ds doc-macro-name Nm
+.    ie \n[.$] \
+.      doc-parse-args \$@
+.    el \{\
+.      ie "\*[doc-command-name]"" \
+.        tm Usage: .Nm name ... (#\n[.c])
+.      el \
+.        doc-parse-args \*[doc-command-name]
+.  \}\}
+.
+.  if !\n[doc-arg-limit] \
+.    return
+.
+.  nr doc-arg-ptr +1
+.  doc-print-prefixes
+.  ie (\n[doc-arg-limit] < \n[doc-arg-ptr]) \{\
+.    \" last argument
+.    ie "\*[doc-command-name]"" \{\
+.      tm Usage: .Nm name ... (#\n[.c])
+.      doc-reset-args
+.    \}
+.    el \{\
+.      nop \*[doc-Nm-font]\*[doc-command-name]\f[]\s[0]\c
+.      doc-print-and-reset
+.  \}\}
+.  el \{\
+.    nr doc-curr-font \n[.f]
+.    nr doc-curr-size \n[.ps]
+.
+.    ie !(\n[doc-type\n[doc-arg-ptr]] == 2) \{\
+.      ie "\*[doc-command-name]"" \
+.        tm Usage: .Nm name ... (#\n[.c])
+.      el \{\
+.        \" replace previous argument (Nm) with default value
+.        nr doc-arg-ptr -1
+.        ds doc-arg\n[doc-arg-ptr] "\*[doc-Nm-font]\*[doc-command-name]\f[]\s[0]
+.        nr doc-type\n[doc-arg-ptr] 2
+.        ds doc-space\n[doc-arg-ptr] "\*[doc-space]
+.
+.        \" recompute space vector for remaining arguments
+.        nr doc-num-args (\n[doc-arg-limit] - \n[doc-arg-ptr])
+.        nr doc-arg-limit \n[doc-arg-ptr]
+.        doc-parse-space-vector
+.    \}\}
+.    el \{\
+.      \" handle `.Nm ...' in SYNOPSIS
+.      if \n[doc-in-synopsis-section] \{\
+.        if "\*[doc-macro-name]"Nm" \{\
+.          br
+.          if !\n[doc-indent-synopsis] \{\
+.            doc-get-width "\*[doc-arg\n[doc-arg-ptr]]"
+.            nr doc-indent-synopsis ((\n[doc-width]u + 1u) * \n[doc-fixed-width]u)
+.          \}
+.          if !\n[doc-indent-synopsis-active] \{\
+.            in +\n[doc-indent-synopsis]u
+.            nr doc-indent-synopsis-active 1
+.          \}
+.          ti -\n[doc-indent-synopsis]u
+.      \}\}
+.      if "\*[doc-command-name]"" \
+.        ds doc-command-name "\*[doc-arg\n[doc-arg-ptr]]
+.
+.      nop \*[doc-Nm-font]\c
+.    \}
+.    doc-print-recursive
+.  \}
+..
+.
+.
+.\" NS Pa user macro
+.\" NS   pathname: `.Pa [arg ...]'
+.\" NS
+.\" NS modifies:
+.\" NS   doc-arg-ptr
+.\" NS   doc-curr-font
+.\" NS   doc-curr-size
+.\" NS   doc-macro-name
+.\" NS
+.\" NS width register `Pa' set in doc-common
+.
+.de Pa
+.  if !\n[doc-arg-limit] \{\
+.    ds doc-macro-name Pa
+.    doc-parse-args \$@
+.
+.    \" default value
+.    if !\n[.$] \
+.      nop \*[doc-Pa-font]~\f[]\s[0]
+.  \}
+.
+.  if !\n[doc-arg-limit] \
+.    return
+.
+.  nr doc-arg-ptr +1
+.  doc-print-prefixes
+.  ie (\n[doc-arg-limit] >= \n[doc-arg-ptr]) \{\
+.    nr doc-curr-font \n[.f]
+.    nr doc-curr-size \n[.ps]
+.    nop \*[doc-Pa-font]\c
+.    if !(\n[doc-type\n[doc-arg-ptr]] == 2) \{\
+.      \" replace previous argument (Pa) with default value
+.      nr doc-arg-ptr -1
+.      ds doc-arg\n[doc-arg-ptr] ~
+.      nr doc-type\n[doc-arg-ptr] 2
+.      ds doc-space\n[doc-arg-ptr] "\*[doc-space]
+.
+.      \" recompute space vector for remaining arguments
+.      nr doc-num-args (\n[doc-arg-limit] - \n[doc-arg-ptr])
+.      nr doc-arg-limit \n[doc-arg-ptr]
+.      doc-parse-space-vector
+.    \}
+.    doc-print-recursive
+.  \}
+.  el \{\
+.    nop \*[doc-Pa-font]~\f[]\s[0]\c
+.    doc-print-and-reset
+.  \}
+..
+.
+.
+.\" NS Sy user macro
+.\" NS   symbolics
+.\" NS
+.\" NS width register `Sy' set in doc-common
+.
+.als Sy doc-generic-macro
+.ds doc-Sy-usage symbolic_text
+.
+.
+.\" NS Me user macro
+.\" NS   menu entries
+.\" NS
+.\" NS width register `Me' set in doc-common
+.
+.als Me doc-generic-macro
+.ds doc-Me-usage menu_entry
+.
+.
+.\" NS Tn user macro
+.\" NS   trade name
+.\" NS
+.\" NS modifies:
+.\" NS   doc-arg-ptr
+.\" NS   doc-curr-font
+.\" NS   doc-curr-size
+.\" NS   doc-macro-name
+.\" NS
+.\" NS width register `Tn' set in doc-common
+.
+.de Tn
+.  if !\n[doc-arg-limit] \{\
+.    ie \n[.$] \{\
+.      ds doc-macro-name Tn
+.      doc-parse-args \$@
+.    \}
+.    el \
+.      tm Usage: .Tn trade_name ... (#\n[.c])
+.  \}
+.
+.  if !\n[doc-arg-limit] \
+.    return
+.
+.  nr doc-arg-ptr +1
+.  ie (\n[doc-arg-limit] >= \n[doc-arg-ptr]) \{\
+.    nr doc-curr-font \n[.f]
+.    nr doc-curr-size \n[.ps]
+.    nop \)\*[doc-Tn-font-size]\c
+.    ie !\n[doc-is-reference] \{\
+.      nop \)\*[doc-Tn-font-shape]\c
+.      doc-print-recursive
+.    \}
+.    el \
+.      doc-do-references
+.  \}
+.  el \{\
+.    tm Usage: .Tn trade_name ... (#\n[.c])
+.    doc-reset-args
+.  \}
+..
+.
+.
+.\" NS Va user macro
+.\" NS   variable name
+.\" NS
+.\" NS width register `Va' set in doc-common
+.
+.als Va doc-generic-macro
+.ds doc-Va-usage variable_name
+.
+.
+.\" NS No user macro
+.\" NS   normal text macro (default text style if mess up)
+.\" NS
+.\" NS width register `No' set in doc-common
+.
+.als No doc-generic-macro
+.ds doc-No-usage normal_text
+.
+.
+.\" NS doc-quote-left global string
+.\" NS   left quotation character for `doc-enclose-string' and
+.\" NS   `doc-enclose-open'
+.
+.ds doc-quote-left
+.
+.
+.\" NS doc-quote-right global string
+.\" NS   right quotation character for `doc-enclose-string' and
+.\" NS   `doc-enclose-close'
+.
+.ds doc-quote-right
+.
+.
+.\" NS Op user macro
+.\" NS   option expression (i.e., enclose string in square brackets)
+.\" NS
+.\" NS modifies:
+.\" NS   doc-macro-name
+.\" NS   doc-quote-left
+.\" NS   doc-quote-right
+.\" NS
+.\" NS width register `Op' set in doc-common
+.
+.de Op
+.  if !\n[doc-arg-limit] \
+.    ds doc-macro-name Op
+.
+.  ds doc-quote-left "\*[doc-left-bracket]
+.  ds doc-quote-right "\*[doc-right-bracket]
+.
+.  doc-enclose-string \$@
+..
+.
+.
+.\" NS Aq user macro
+.\" NS   enclose string in angle brackets
+.\" NS
+.\" NS modifies:
+.\" NS   doc-macro-name
+.\" NS   doc-quote-left
+.\" NS   doc-quote-right
+.\" NS
+.\" NS width register `Aq' set in doc-common
+.
+.de Aq
+.  if !\n[doc-arg-limit] \
+.    ds doc-macro-name Aq
+.
+.  ie "\*[doc-macro-name]"An" \{\
+.    ds doc-quote-left <
+.    ds doc-quote-right >
+.  \}
+.  el \{\
+.    ds doc-quote-left \[la]
+.    ds doc-quote-right \[ra]
+.  \}
+.
+.  doc-enclose-string \$@
+..
+.
+.
+.\" NS Bq user macro
+.\" NS   enclose string in square brackets
+.\" NS
+.\" NS modifies:
+.\" NS   doc-macro-name
+.\" NS   doc-quote-left
+.\" NS   doc-quote-right
+.\" NS
+.\" NS width register `Bq' set in doc-common
+.
+.de Bq
+.  if !\n[doc-arg-limit] \
+.    ds doc-macro-name Bq
+.
+.  ds doc-quote-left "\*[doc-left-bracket]
+.  ds doc-quote-right "\*[doc-right-bracket]
+.
+.  doc-enclose-string \$@
+..
+.
+.
+.\" NS Brq user macro
+.\" NS   enclose string in braces
+.\" NS
+.\" NS modifies:
+.\" NS   doc-macro-name
+.\" NS   doc-quote-left
+.\" NS   doc-quote-right
+.\" NS
+.\" NS width register `Brq' set in doc-common
+.
+.de Brq
+.  if !\n[doc-arg-limit] \
+.    ds doc-macro-name Brq
+.
+.  ds doc-quote-left {
+.  ds doc-quote-right }
+.
+.  doc-enclose-string \$@
+..
+.
+.
+.\" NS Dq user macro
+.\" NS   enclose string in double quotes
+.\" NS
+.\" NS modifies:
+.\" NS   doc-macro-name
+.\" NS   doc-quote-left
+.\" NS   doc-quote-right
+.\" NS
+.\" NS width register `Dq' set in doc-common
+.
+.de Dq
+.  if !\n[doc-arg-limit] \
+.    ds doc-macro-name Dq
+.
+.  ds doc-quote-left "\*[Lq]
+.  ds doc-quote-right "\*[Rq]
+.
+.  doc-enclose-string \$@
+..
+.
+.
+.\" NS Eq user macro
+.\" NS   enclose string in user-defined quotes (args 1 and 2)
+.\" NS
+.\" NS modifies:
+.\" NS   doc-macro-name
+.\" NS   doc-quote-left
+.\" NS   doc-quote-right
+.\" NS
+.\" NS width register `Eq' set in doc-common
+.
+.de Eq
+.  if !\n[doc-arg-limit] \
+.    ds doc-macro-name Eq
+.
+.  ds doc-quote-left "\$1
+.  ds doc-quote-right "\$2
+.
+.  shift 2
+.  doc-enclose-string \$@
+..
+.
+.
+.\" NS Pq user macro
+.\" NS   enclose string in parentheses
+.\" NS
+.\" NS modifies:
+.\" NS   doc-macro-name
+.\" NS   doc-quote-left
+.\" NS   doc-quote-right
+.\" NS
+.\" NS width register `Pq' set in doc-common
+.
+.de Pq
+.  if !\n[doc-arg-limit] \
+.    ds doc-macro-name Pq
+.
+.  ds doc-quote-left "\*[doc-left-parenthesis]
+.  ds doc-quote-right "\*[doc-right-parenthesis]
+.
+.  doc-enclose-string \$@
+..
+.
+.
+.\" NS Ql user macro
+.\" NS   quoted literal
+.\"
+.\"   is in file doc-[dit|n]roff
+.
+.
+.\" NS Qq user macro
+.\" NS   enclose string in straight double quotes
+.\" NS
+.\" NS modifies:
+.\" NS   doc-macro-name
+.\" NS   doc-quote-left
+.\" NS   doc-quote-right
+.\" NS
+.\" NS width register `Qq' set in doc-common
+.
+.de Qq
+.  if !\n[doc-arg-limit] \
+.    ds doc-macro-name Qq
+.
+.  ds doc-quote-left "\*[q]
+.  ds doc-quote-right "\*[q]
+.
+.  doc-enclose-string \$@
+..
+.
+.
+.\" NS Sq user macro
+.\" NS   enclose string in single quotes
+.\" NS
+.\" NS modifies:
+.\" NS   doc-macro-name
+.\" NS   doc-quote-left
+.\" NS   doc-quote-right
+.\" NS
+.\" NS width register `Sq' set in doc-common
+.
+.de Sq
+.  if !\n[doc-arg-limit] \
+.    ds doc-macro-name Sq
+.
+.  ds doc-quote-left "\*[doc-left-singlequote]
+.  ds doc-quote-right "\*[doc-right-singlequote]
+.
+.  doc-enclose-string \$@
+..
+.
+.
+.\" NS Es user macro
+.\" NS   set up arguments (i.e., the left and right quotation character as
+.\" NS   first and second argument) for .En call
+.\" NS
+.\" NS modifies:
+.\" NS   doc-arg-ptr
+.\" NS   doc-macro-name
+.\" NS   doc-quote-left
+.\" NS   doc-quote-right
+.
+.de Es
+.  if !\n[doc-arg-limit] \{\
+.    ie (\n[.$] > 2) \{\
+.      ds doc-macro-name Es
+.      doc-parse-args \$@
+.    \}
+.    el \{\
+.      ds doc-quote-left "\$1
+.      ds doc-quote-right "\$2
+.  \}\}
+.
+.  if !\n[doc-arg-limit] \
+.    return
+.
+.  nr doc-arg-ptr +1
+.  ds doc-quote-left "\*[doc-arg\n[doc-arg-ptr]]
+.  nr doc-arg-ptr +1
+.  ds doc-quote-right "\*[doc-arg\n[doc-arg-ptr]]
+.  nr doc-arg-ptr +1
+.  ie (\n[doc-arg-limit] >= \n[doc-arg-ptr]) \
+.    doc-do-\n[doc-type\n[doc-arg-ptr]]
+.  el \
+.    doc-print-and-reset
+..
+.
+.
+.\" NS doc-have-slot global register (bool)
+.\" NS   set if `doc-enclose-string' has created a slot for closing
+.\" NS   delimiter
+.
+.nr doc-have-slot 0
+.
+.
+.\" NS doc-enclose-string macro
+.\" NS   enclose string with given args (e.g. [ and ])
+.\" NS
+.\" NS modifies:
+.\" NS   doc-arg-ptr
+.\" NS   doc-argXXX
+.\" NS   doc-have-slot
+.\" NS
+.\" NS local variables:
+.\" NS   doc-reg-des
+.\" NS   doc-reg-des1
+.\" NS   doc-reg-des2
+.\" NS
+.\" NS requires:
+.\" NS   doc-quote-left
+.\" NS   doc-quote-right
+.
+.de doc-enclose-string
+.  if \n[doc-in-synopsis-section] \
+.    doc-set-hard-space
+.
+.  if !\n[doc-arg-limit] \{\
+.    ie \n[.$] \
+.      doc-parse-args \$@
+.    el \{\
+.      nop \)\*[doc-quote-left]\*[doc-quote-right]
+.  \}\}
+.
+.  if !\n[doc-arg-limit] \
+.    return
+.
+.  nr doc-curr-font \n[.f]
+.  nr doc-curr-size \n[.ps]
+.
+.  nr doc-arg-ptr +1
+.  doc-print-prefixes
+.  \" the final `\)' prevents hyphenation in case the next character is `\%'
+.  nop \)\*[doc-quote-left]\)\c
+.  ie (\n[doc-arg-limit] < \n[doc-arg-ptr]) \{\
+.    \" last argument
+.    nop \)\*[doc-quote-right]\)\c
+.    doc-print-and-reset
+.  \}
+.  el \{\
+.    \" test whether last arguments are of type closing punctuation
+.    \" resp. suffix
+.    ie (\n[doc-type\n[doc-arg-limit]] == 3) \{\
+.      nr doc-reg-des (\n[doc-arg-limit] - 1)
+.      while (\n[doc-type\n[doc-reg-des]] == 3) \
+.        nr doc-reg-des -1
+.
+.      \" prepend closing delimiter
+.      nr doc-reg-des +1
+.      ds doc-arg\n[doc-reg-des] "\*[doc-quote-right]\)\*[doc-arg\n[doc-reg-des]]
+.    \}
+.    el \{\
+.      \" test whether last arguments are macros which continue the line
+.      \" logically
+.      nr doc-reg-des \n[doc-arg-limit]
+.      while (\n[doc-reg-des] >= \n[doc-arg-ptr]) \{\
+.        if !\A\*[doc-arg\n[doc-reg-des]] \
+.          break
+.        if !d doc-after-\*[doc-arg\n[doc-reg-des]] \
+.          break
+.        nr doc-reg-des -1
+.      \}
+.
+.      \" if there are no trailing macros to be skipped, append argument
+.      ie (\n[doc-reg-des] == \n[doc-arg-limit]) \
+.        doc-append-arg "\)\*[doc-quote-right]\)" 3
+.      el \{\
+.        \" if a previous call to `doc-enclose-string' has already created
+.        \" a slot, prepend argument
+.        ie \n[doc-have-slot] \
+.          ds doc-arg\n[doc-reg-des] "\*[doc-quote-right]\)\*[doc-arg\n[doc-reg-des]]
+.        el \{\
+.          \" we have to shift all arguments to the right
+.          nr doc-reg-des +1
+.          nr doc-reg-des1 \n[doc-arg-limit]
+.          nr doc-reg-des2 (\n[doc-arg-limit] + 1)
+.          while (\n[doc-reg-des1] >= \n[doc-reg-des]) \{\
+.            rn doc-arg\n[doc-reg-des1] doc-arg\n[doc-reg-des2]
+.            rnn doc-type\n[doc-reg-des1] doc-type\n[doc-reg-des2]
+.            rn doc-space\n[doc-reg-des1] doc-space\n[doc-reg-des2]
+.            nr doc-reg-des1 -1
+.            nr doc-reg-des2 -1
+.          \}
+.          nr doc-arg-limit +1
+.
+.          \" finally, insert closing delimiter into the freed slot and
+.          \" recompute spacing vector
+.          ds doc-arg\n[doc-reg-des] "\)\*[doc-quote-right]\)
+.          nr doc-type\n[doc-reg-des] 3
+.          nr doc-num-args (\n[doc-arg-limit] - \n[doc-reg-des] + 1)
+.          nr doc-arg-limit (\n[doc-reg-des] - 1)
+.          doc-parse-space-vector
+.          nr doc-have-slot 1
+.    \}\}\}
+.
+.    doc-do-\n[doc-type\n[doc-arg-ptr]]
+.  \}
+.
+.  if \n[doc-in-synopsis-section] \
+.    doc-set-soft-space
+..
+.
+.
+.\" NS En user macro
+.\" NS   enclose arguments with quotation characters set up with `.Es'
+.
+.als En doc-enclose-string
+.
+.
+.\" NS Ao user macro
+.\" NS   angle open
+.\" NS
+.\" NS modifies:
+.\" NS   doc-macro-name
+.\" NS   doc-quote-left
+.\" NS
+.\" NS width register `Ao' set in doc-common
+.
+.de Ao
+.  if !\n[doc-arg-limit] \
+.    ds doc-macro-name Ao
+.
+.  ie "\*[doc-macro-name]"An" \
+.    ds doc-quote-left <
+.  el \
+.    ds doc-quote-left \[la]
+.
+.  doc-enclose-open \$@
+..
+.
+.
+.\" NS Ac user macro
+.\" NS   angle close
+.\" NS
+.\" NS modifies:
+.\" NS   doc-macro-name
+.\" NS   doc-quote-right
+.\" NS
+.\" NS width register `Ac' set in doc-common
+.
+.de Ac
+.  if !\n[doc-arg-limit] \
+.    ds doc-macro-name Ac
+.
+.  ie "\*[doc-macro-name]"An" \
+.    ds doc-quote-right >
+.  el \
+.    ds doc-quote-right \[ra]
+.
+.  doc-enclose-close \$@
+..
+.
+.
+.\" NS Bo user macro
+.\" NS   bracket open
+.\" NS
+.\" NS modifies:
+.\" NS   doc-macro-name
+.\" NS   doc-quote-left
+.\" NS
+.\" NS width register `Bo' set in doc-common
+.
+.de Bo
+.  if !\n[doc-arg-limit] \
+.    ds doc-macro-name Bo
+.
+.  ds doc-quote-left "\*[doc-left-bracket]
+.
+.  doc-enclose-open \$@
+..
+.
+.
+.\" NS Bc user macro
+.\" NS   bracket close
+.\" NS
+.\" NS modifies:
+.\" NS   doc-macro-name
+.\" NS   doc-quote-right
+.\" NS
+.\" NS width register `Bc' set in doc-common
+.
+.de Bc
+.  if !\n[doc-arg-limit] \
+.    ds doc-macro-name Bc
+.
+.  ds doc-quote-right "\*[doc-right-bracket]
+.
+.  doc-enclose-close \$@
+..
+.
+.
+.\" NS Bro user macro
+.\" NS   brace open
+.\" NS
+.\" NS modifies:
+.\" NS   doc-macro-name
+.\" NS   doc-quote-left
+.\" NS
+.\" NS width register `Bro' set in doc-common
+.
+.de Bro
+.  if !\n[doc-arg-limit] \
+.    ds doc-macro-name Bo
+.
+.  ds doc-quote-left {
+.
+.  doc-enclose-open \$@
+..
+.
+.
+.\" NS Brc user macro
+.\" NS   brace close
+.\" NS
+.\" NS modifies:
+.\" NS   doc-macro-name
+.\" NS   doc-quote-right
+.\" NS
+.\" NS width register `Brc' set in doc-common
+.
+.de Brc
+.  if !\n[doc-arg-limit] \
+.    ds doc-macro-name Bc
+.
+.  ds doc-quote-right }
+.
+.  doc-enclose-close \$@
+..
+.
+.
+.\" NS Do user macro
+.\" NS   double quote open
+.\" NS
+.\" NS modifies:
+.\" NS   doc-macro-name
+.\" NS   doc-quote-left
+.\" NS
+.\" NS width register `Do' set in doc-common
+.
+.de Do
+.  if !\n[doc-arg-limit] \
+.    ds doc-macro-name Do
+.
+.  ds doc-quote-left "\*[Lq]
+.
+.  doc-enclose-open \$@
+..
+.
+.
+.\" NS Dc user macro
+.\" NS   double quote close
+.\" NS
+.\" NS modifies:
+.\" NS   doc-macro-name
+.\" NS   doc-quote-right
+.\" NS
+.\" NS width register `Dc' set in doc-common
+.
+.de Dc
+.  if !\n[doc-arg-limit] \
+.    ds doc-macro-name Dc
+.
+.  ds doc-quote-right "\*[Rq]
+.
+.  doc-enclose-close \$@
+..
+.
+.
+.\" NS Eo user macro
+.\" NS   enclose open (using first argument as beginning of enclosure)
+.\" NS
+.\" NS modifies:
+.\" NS   doc-macro-name
+.\" NS   doc-quote-left
+.\" NS
+.\" NS width register `Eo' set in doc-common
+.
+.de Eo
+.  if !\n[doc-arg-limit] \
+.    ds doc-macro-name Eo
+.
+.  ds doc-quote-left "\$1
+.
+.  shift
+.  doc-enclose-open \$@
+..
+.
+.
+.\" NS Ec user macro
+.\" NS   enclose close (using first argument as end of enclosure)
+.\" NS
+.\" NS modifies:
+.\" NS   doc-macro-name
+.\" NS   doc-quote-right
+.\" NS
+.\" NS width register `Ec' set in doc-common
+.
+.de Ec
+.  if !\n[doc-arg-limit] \
+.    ds doc-macro-name Ec
+.
+.  ds doc-quote-right "\$1
+.
+.  shift
+.  doc-enclose-close \$@
+..
+.
+.
+.\" NS Oo user macro
+.\" NS   option open
+.\" NS
+.\" NS modifies:
+.\" NS   doc-macro-name
+.\" NS   doc-quote-left
+.\" NS
+.\" NS width register `Oo' set in doc-common
+.
+.de Oo
+.  if !\n[doc-arg-limit] \
+.    ds doc-macro-name Oo
+.
+.  ds doc-quote-left [
+.
+.  doc-enclose-open \$@
+..
+.
+.
+.\" NS Oc user macro
+.\" NS   option close
+.\" NS
+.\" NS modifies:
+.\" NS   doc-macro-name
+.\" NS   doc-quote-right
+.\" NS
+.\" NS width register `Oc' set in doc-common
+.
+.de Oc
+.  if !\n[doc-arg-limit] \
+.    ds doc-macro-name Oc
+.
+.  ds doc-quote-right ]
+.
+.  doc-enclose-close \$@
+..
+.
+.
+.\" NS Po user macro
+.\" NS   parenthesis open
+.\" NS
+.\" NS modifies:
+.\" NS   doc-macro-name
+.\" NS   doc-quote-left
+.\" NS
+.\" NS width register `Po' set in doc-common
+.
+.de Po
+.  if !\n[doc-arg-limit] \
+.    ds doc-macro-name Po
+.
+.  ds doc-quote-left "\*[doc-left-parenthesis]
+.
+.  doc-enclose-open \$@
+..
+.
+.
+.\" NS Pc user macro
+.\" NS   parenthesis close
+.\" NS
+.\" NS modifies:
+.\" NS   doc-macro-name
+.\" NS   doc-quote-right
+.\" NS
+.\" NS width register `Pc' set in doc-common
+.
+.de Pc
+.  if !\n[doc-arg-limit] \
+.    ds doc-macro-name Pc
+.
+.  ds doc-quote-right "\*[doc-right-parenthesis]
+.
+.  doc-enclose-close \$@
+..
+.
+.
+.\" NS Qo user macro
+.\" NS   straight double quote open
+.\" NS
+.\" NS modifies:
+.\" NS   doc-macro-name
+.\" NS   doc-quote-left
+.\" NS
+.\" NS width register `Qo' set in doc-common
+.
+.de Qo
+.  if !\n[doc-arg-limit] \
+.    ds doc-macro-name Qo
+.
+.  ds doc-quote-left "\*[q]
+.
+.  doc-enclose-open \$@
+..
+.
+.
+.\" NS Qc user macro
+.\" NS   straight double quote close
+.\" NS
+.\" NS modifies:
+.\" NS   doc-macro-name
+.\" NS   doc-quote-right
+.\" NS
+.\" NS width register `Qc' set in doc-common
+.
+.de Qc
+.  if !\n[doc-arg-limit] \
+.    ds doc-macro-name Qc
+.
+.  ds doc-quote-right "\*[q]
+.
+.  doc-enclose-close \$@
+..
+.
+.
+.\" NS So user macro
+.\" NS   single quote open
+.\" NS
+.\" NS modifies:
+.\" NS   doc-macro-name
+.\" NS   doc-quote-left
+.\" NS
+.\" NS width register `So' set in doc-common
+.
+.de So
+.  if !\n[doc-arg-limit] \
+.    ds doc-macro-name So
+.
+.  ds doc-quote-left "\*[doc-left-singlequote]
+.
+.  doc-enclose-open \$@
+..
+.
+.
+.\" NS Sc user macro
+.\" NS   single quote close
+.\" NS
+.\" NS modifies:
+.\" NS   doc-macro-name
+.\" NS   doc-quote-right
+.\" NS
+.\" NS width register `Sc' set in doc-common
+.
+.de Sc
+.  if !\n[doc-arg-limit] \
+.    ds doc-macro-name Sc
+.
+.  ds doc-quote-right "\*[doc-right-singlequote]
+.
+.  doc-enclose-close \$@
+..
+.
+.
+.\" NS Xo user macro
+.\" NS   extend open
+.\" NS
+.\" NS modifies:
+.\" NS   doc-macro-name
+.\" NS   doc-quote-left
+.\" NS
+.\" NS width register `Xo' set in doc-common
+.
+.de Xo
+.  if !\n[doc-arg-limit] \
+.    ds doc-macro-name Xo
+.
+.  ds doc-quote-left
+.
+.  doc-enclose-open \$@
+..
+.
+.
+.\" NS Xc user macro
+.\" NS   extend close
+.\" NS
+.\" NS modifies:
+.\" NS   doc-macro-name
+.\" NS   doc-quote-right
+.\" NS
+.\" NS width register `Xc' set in doc-common
+.
+.de Xc
+.  if !\n[doc-arg-limit] \
+.    ds doc-macro-name Xc
+.
+.  ds doc-quote-right
+.
+.  doc-enclose-close \$@
+..
+.
+.
+.\" NS doc-nesting-level global register
+.\" NS   used by `doc-enclose-open' and `doc-enclose-close'
+.
+.nr doc-nesting-level 0
+.
+.
+.\" NS doc-in-list global register (bool)
+.\" NS   whether we are in (logical) .It
+.
+.nr doc-in-list 0
+.
+.
+.\" NS doc-enclose-open macro
+.\" NS   enclose string open
+.\" NS
+.\" NS modifies:
+.\" NS   doc-arg-ptr
+.\" NS   doc-nesting-level
+.
+.de doc-enclose-open
+.  if !\n[doc-arg-limit] \
+.    doc-parse-args \$@
+.
+.  nr doc-arg-ptr +1
+.  doc-print-prefixes
+.  nr doc-arg-ptr -1
+.
+.  nop \)\*[doc-quote-left]\)\c
+.
+.  \" start enclosure box
+.  box doc-enclosure-box\n[doc-nesting-level]
+.  ev doc-enclosure-env\n[doc-nesting-level]
+.  evc 0
+.  in 0
+.  nf
+.  \" we insert something to make .chop always work
+.  nop \&\c
+.
+.  \" increase nesting level *after* parsing of arguments
+.  nr doc-nesting-level +1
+.
+.  if \n[doc-arg-limit] \{\
+.    nr doc-arg-ptr +1
+.    ie (\n[doc-arg-limit] >= \n[doc-arg-ptr]) \
+.      doc-print-recursive
+.    el \
+.      doc-reset-args
+.  \}
+..
+.
+.
+.\" NS doc-enclose-close macro
+.\" NS   enclose string close
+.\" NS
+.\" NS modifies:
+.\" NS   doc-nesting-level
+.
+.de doc-enclose-close
+.  nr doc-nesting-level -1
+.
+.  \" finish enclosure box
+.  br
+.  ev
+.  box
+.  chop doc-enclosure-box\n[doc-nesting-level]
+.  unformat doc-enclosure-box\n[doc-nesting-level]
+.
+.  nh
+.  nop \*[doc-enclosure-box\n[doc-nesting-level]]\c
+.  nop \)\*[doc-quote-right]\)\c
+.
+.  if !\n[doc-arg-limit] \{\
+.    doc-parse-args \$@
+.
+.    if !\n[.$] \
+.      doc-print-and-reset
+.  \}
+.
+.  if \n[doc-arg-limit] \{\
+.    ie (\n[doc-arg-limit] > \n[doc-arg-ptr]) \{\
+.      nop \)\*[doc-space\n[doc-arg-ptr]]\c
+.      nr doc-arg-ptr +1
+.      doc-print-recursive
+.    \}
+.    el \
+.      doc-print-and-reset
+.  \}
+.
+.  \" shall we finish .It macro?
+.  if !"\*[doc-macro-name]"It" \
+.    if \n[doc-in-list] \
+.      if !\n[doc-nesting-level] \
+.        doc-\*[doc-list-type-stack\n[doc-list-depth]]
+..
+.
+.
+.\" NS Pf user macro
+.\" NS   prefix: `.Pf prefix arg ...'
+.\" NS
+.\" NS modifies:
+.\" NS   doc-arg-ptr
+.\" NS   doc-macro-name
+.\" NS   doc-quote-left
+.\" NS
+.\" NS width register `Pf' set in doc-common
+.
+.de Pf
+.  if !\n[doc-arg-limit] \
+.    ds doc-macro-name Pf
+.
+.  ie \n[doc-arg-limit] \{\
+.    ie ((\n[doc-arg-limit] - \n[doc-arg-ptr]) > 1) \{\
+.      nr doc-arg-ptr +1
+.      nop \)\*[doc-arg\n[doc-arg-ptr]]\c
+.    \}
+.    el \
+.      tm mdoc warning: .Pf: trailing prefix (#\n[.c])
+.  \}
+.  el \{\
+.    nop \)\$1\)\c
+.    shift
+.    ie \n[.$] \
+.      doc-parse-args \$@
+.    el \{\
+.      tm mdoc warning: .Pf: missing arguments (#\n[.c])
+.      nop \)
+.  \}\}
+.
+.  if \n[doc-arg-limit] \{\
+.    nr doc-arg-ptr +1
+.    ie (\n[doc-arg-limit] < \n[doc-arg-ptr]) \
+.      doc-print-and-reset
+.    el \
+.      doc-do-\n[doc-type\n[doc-arg-ptr]]
+.  \}
+..
+.
+.
+.\" NS Ns user macro
+.\" NS   remove space (space removal done by `doc-parse-args')
+.\" NS
+.\" NS modifies:
+.\" NS   doc-argXXX
+.\" NS   doc-macro-name
+.\" NS
+.\" NS width register `Ns' set in doc-common
+.
+.de Ns
+.  if !\n[doc-arg-limit] \{\
+.    ie \n[.$] \{\
+.      ds doc-macro-name Ns
+.      doc-parse-args \$@
+.    \}
+.    el \
+.      tm Usage: .Ns must be called with arguments (#\n[.c])
+.  \}
+.
+.  if \n[doc-arg-limit] \{\
+.    nr doc-arg-ptr +1
+.    ie (\n[doc-arg-limit] >= \n[doc-arg-ptr]) \
+.      doc-print-recursive
+.    el \
+.      doc-reset-args
+.  \}
+..
+.
+.
+.\" NS Ap user macro
+.\" NS   append an apostrophe
+.\" NS
+.\" NS width register `Ap' set in doc-common
+.
+.de Ap
+.  ie !\n[doc-arg-limit] \
+.    tm Usage: `Ap' cannot be first macro on a line (no `.Ap') (#\n[.c])
+.  el \{\
+.    nop \)'\)\c
+.    nr doc-arg-ptr +1
+.    ie (\n[doc-arg-limit] >= \n[doc-arg-ptr]) \
+.      doc-print-recursive
+.    el \
+.      doc-reset-args
+.  \}
+..
+.
+.
+.\" NS doc-space global string
+.\" NS   current inter-argument space
+.
+.ds doc-space "\*[doc-soft-space]
+.
+.
+.\" NS doc-soft-space constant string
+.\" NS   soft (stretchable) space (defined in doc-common)
+.
+.
+.\" NS doc-hard-space constant string
+.\" NS   hard (unpaddable) space (defined in doc-common)
+.
+.
+.\" NS doc-set-hard-space macro
+.\" NS   set current space string to hard (unpaddable) space.
+.\" NS
+.\" NS modifies:
+.\" NS   doc-saved-space
+.\" NS   doc-space
+.
+.de doc-set-hard-space
+.  ie "\*[doc-space]"" \
+.    ds doc-saved-space "\*[doc-hard-space]
+.  el \
+.    ds doc-space "\*[doc-hard-space]
+..
+.
+.
+.\" NS doc-set-soft-space macro
+.\" NS   set current space string to soft space
+.\" NS
+.\" NS modifies:
+.\" NS   doc-saved-space
+.\" NS   doc-space
+.
+.de doc-set-soft-space
+.  ie "\*[doc-space]"" \
+.    ds doc-saved-space "\*[doc-soft-space]
+.  el \
+.    ds doc-space "\*[doc-soft-space]
+..
+.
+.
+.\" NS doc-space-mode global register (bool)
+.\" NS   default is one (space mode on)
+.
+.nr doc-space-mode 1
+.
+.
+.\" NS doc-saved-space global string
+.\" NS   saved value of `doc-space'
+.
+.ds doc-saved-space "\*[doc-space]
+.
+.
+.\" NS doc-have-space global register (bool)
+.\" NS   set if last command was horizontal space
+.
+.nr doc-have-space 0
+.
+.
+.\" NS Sm user macro
+.\" NS   space mode (`.Sm'/`.Sm on'/`.Sm off')
+.\" NS
+.\" NS   without argument, toggle space mode
+.\" NS
+.\" NS modifies:
+.\" NS   doc-arg-limit
+.\" NS   doc-arg-ptr
+.\" NS   doc-argXXX
+.\" NS   doc-macro-name
+.\" NS   doc-num-args
+.\" NS   doc-saved-space
+.\" NS   doc-space
+.\" NS   doc-space-mode
+.\" NS   doc-spaceXXX
+.\" NS
+.\" NS local variables:
+.\" NS   doc-reg-Sm
+.\" NS
+.\" NS width register `Sm' set in doc-common
+.
+.de Sm
+.  ie \n[doc-have-space] \
+.    nr doc-reg-Sm 0
+.  el \
+.    nr doc-reg-Sm 1
+.
+.  if !\n[doc-arg-limit] \{\
+.    ie \n[.$] \{\
+.      ds doc-macro-name Sm
+.      doc-parse-args \$@
+.    \}
+.    el \{\
+.      ie \n[doc-space-mode] \{\
+.        ds doc-saved-space "\*[doc-space]
+.        ds doc-space
+.        nr doc-space-mode 0
+.      \}
+.      el \{\
+.        ds doc-space "\*[doc-saved-space]
+.        nr doc-space-mode 1
+.
+.        \" finish line only if it is interrupted and `doc-have-space'
+.        \" isn't set
+.        if \n[doc-reg-Sm] \
+.          if \n[.int] \
+.            nop \)
+.      \}
+.  \}\}
+.
+.  if !\n[doc-arg-limit] \
+.    return
+.
+.  nr doc-arg-ptr +1
+.
+.  \" avoid a warning message in case `Sm' is the last parameter
+.  if !d doc-arg\n[doc-arg-ptr] \
+.    ds doc-arg\n[doc-arg-ptr]
+.
+.  ie "\*[doc-arg\n[doc-arg-ptr]]"on" \{\
+.    ds doc-space "\*[doc-saved-space]
+.    nr doc-space-mode 1
+.  \}
+.  el \{\
+.    ie "\*[doc-arg\n[doc-arg-ptr]]"off" \{\
+.      ds doc-saved-space "\*[doc-space]
+.      ds doc-space
+.      nr doc-space-mode 0
+.    \}
+.    el \{\
+.      \" no argument for Sm
+.      nr doc-arg-ptr -1
+.      ie \n[doc-space-mode] \{\
+.        ds doc-saved-space "\*[doc-space]
+.        ds doc-space
+.        nr doc-space-mode 0
+.      \}
+.      el \{\
+.        ds doc-space "\*[doc-saved-space]
+.        nr doc-space-mode 1
+.      \}
+.  \}\}
+.
+.  ie \n[doc-space-mode] \{\
+.    \" recompute space vector for remaining arguments
+.    nr doc-num-args (\n[doc-arg-limit] - \n[doc-arg-ptr])
+.    nr doc-arg-limit \n[doc-arg-ptr]
+.    if \n[doc-num-args] \
+.      doc-parse-space-vector
+.
+.    \" finish line only if it is interrupted and `doc-have-space'
+.    \" isn't set
+.    if \n[doc-reg-Sm] \
+.      if \n[.int] \
+.        nop \)
+.  \}
+.  el \{\
+.    \" reset remaining space vector elements
+.    nr doc-reg-Sm (\n[doc-arg-ptr] + 1)
+.    while (\n[doc-reg-Sm] <= \n[doc-arg-limit]) \{\
+.      ds doc-space\n[doc-reg-Sm]
+.      nr doc-reg-Sm +1
+.      \" the body of a `while' request must end with the fitting `\}'!
+.    \}
+.  \}
+.
+.  \" do we have parameters to print?
+.  ie (\n[doc-arg-limit] > \n[doc-arg-ptr]) \{\
+.    \" skip `Sm' argument
+.    nr doc-arg-ptr +1
+.    doc-print-recursive
+.  \}
+.  el \
+.    doc-reset-args
+..
+.
+.
+.\" NS doc-arg-type immediate register
+.\" NS   argument type (macro=1, string=2, punctuation suffix=3,
+.\" NS   punctuation prefix=4)
+.
+.nr doc-arg-type 0
+.
+.
+.\" NS doc-get-arg-type macro
+.\" NS   get argument type
+.\" NS
+.\" NS   this macro expects the width of the argument in `doc-width'
+.\" NS
+.\" NS modifies:
+.\" NS   doc-arg-type
+.
+.de doc-get-arg-type
+.  nr doc-arg-type 2
+.
+.  if ((\n[doc-width] < 4) & \A\$1) \{\
+.    ie (\n[doc-width] == 1) \{\
+.      if r doc-punct\$1 \
+.        nr doc-arg-type \n[doc-punct\$1]
+.    \}
+.    el \
+.      if r \$1 \
+.        if d \$1 \
+.          nr doc-arg-type 1
+.  \}
+..
+.
+.
+.\" NS doc-get-arg-type* macro
+.\" NS   similar to as `doc-get-arg-type' but uses doc-argXXX strings
+.\" NS
+.\" NS   this macro sets the `doc-width' register using the `length' request
+.\" NS   to get the number of characters in a string literally
+.\" NS
+.\" NS modifies:
+.\" NS   doc-arg-type
+.\" NS   doc-width
+.
+.de doc-get-arg-type*
+.  nr doc-arg-type 2
+.  length doc-width "\*[doc-arg\$1]
+.
+.  if ((\n[doc-width] < 4) & \A\*[doc-arg\$1]) \{\
+.    ie (\n[doc-width] == 1) \{\
+.      if r doc-punct\*[doc-arg\$1] \
+.        nr doc-arg-type \n[doc-punct\*[doc-arg\$1]]
+.    \}
+.    el \
+.      if r \*[doc-arg\$1] \
+.        if d \*[doc-arg\$1] \
+.          nr doc-arg-type 1
+.  \}
+..
+.
+.
+.\" NS doc-set-spacing-1 macro
+.\" NS   set spacing for macros
+.\" NS
+.\" NS modifies:
+.\" NS   doc-spaceXXX
+.\" NS
+.\" NS local variables:
+.\" NS   doc-reg-dssfm
+.\" NS   doc-reg-dssfm1
+.
+.de doc-set-spacing-1
+.  nr doc-reg-dssfm1 \n[\*[doc-arg\n[doc-arg-limit]]]
+.
+.  \" closing macros like .Ac, Bc., etc. have value 3 (remove space before
+.  \" argument)
+.  ie (\n[doc-reg-dssfm1] == 3) \{\
+.    if \n[doc-arg-limit] \{\
+.      nr doc-reg-dssfm (\n[doc-arg-limit] - 1)
+.      ds doc-space\n[doc-reg-dssfm]
+.    \}
+.    ds doc-space\n[doc-arg-limit] "\*[doc-space]
+.  \}
+.  el \{\
+.    \" macros like .Ap and .Ns have value 2 (remove space before and after
+.    \" argument)
+.    ie (\n[doc-reg-dssfm1] == 2) \{\
+.      if \n[doc-arg-limit] \{\
+.        nr doc-reg-dssfm (\n[doc-arg-limit] - 1)
+.        ds doc-space\n[doc-reg-dssfm]
+.      \}
+.      ds doc-space\n[doc-arg-limit]
+.    \}
+.    el \
+.      ds doc-space\n[doc-arg-limit]
+.  \}
+..
+.
+.
+.\" NS doc-set-spacing-2 macro
+.\" NS   set spacing for strings
+.\" NS
+.\" NS modifies:
+.\" NS   doc-spaceXXX
+.
+.de doc-set-spacing-2
+.  ds doc-space\n[doc-arg-limit] "\*[doc-space]
+..
+.
+.
+.\" NS doc-set-spacing-3 macro
+.\" NS   set spacing for punctuation suffixes
+.\" NS
+.\" NS modifies:
+.\" NS   doc-spaceXXX
+.\" NS
+.\" NS local variables:
+.\" NS   doc-reg-dssfps
+.
+.de doc-set-spacing-3
+.  if \n[doc-arg-limit] \{\
+.    nr doc-reg-dssfps (\n[doc-arg-limit] - 1)
+.    ds doc-space\n[doc-reg-dssfps]
+.  \}
+.
+.  ds doc-space\n[doc-arg-limit] "\*[doc-space]
+..
+.
+.
+.\" NS doc-set-spacing-4 macro
+.\" NS   set spacing for punctuation prefixes
+.\" NS
+.\" NS modifies:
+.\" NS   doc-spaceXXX
+.
+.de doc-set-spacing-4
+.  ds doc-space\n[doc-arg-limit]
+..
+.
+.
+.\" type switches (on current argument doc-arg-ptr)
+.
+.
+.\" NS doc-do-1 macro
+.\" NS   call request if macro
+.
+.de doc-do-1
+.  \*[doc-arg\n[doc-arg-ptr]]
+..
+.
+.
+.\" NS doc-do-2 macro
+.\" NS   call .doc-print-recursive if string
+.
+.als doc-do-2 doc-print-recursive
+.
+.
+.\" NS doc-do-3 macro
+.\" NS   call .doc-print-recursive if punctuation suffix
+.
+.als doc-do-3 doc-print-recursive
+.
+.
+.\" NS doc-do-4 macro
+.\" NS   call .doc-print-recursive if punctuation prefix
+.
+.als doc-do-4 doc-print-recursive
+.
+.
+.\" NS doc-fontmode-depth global register
+.\" NS   font mode level
+.
+.nr doc-fontmode-depth 0
+.
+.
+.\" NS doc-fontmode-font-stackXXX global register
+.\" NS   stack of saved current font values from `Bf' macro
+.\" NS
+.\" NS limit:
+.\" NS   doc-fontmode-depth
+.
+.nr doc-fontmode-font-stack0 0
+.
+.
+.\" NS doc-fontmode-size-stackXXX global register
+.\" NS   stack of saved current size values from `Bf' macro
+.\" NS
+.\" NS limit:
+.\" NS   doc-fontmode-depth
+.
+.nr doc-fontmode-size-stack0 0
+.
+.
+.\" NS Bf user macro
+.\" NS   begin font mode (will be begin-mode/end-mode in groff & TeX)
+.\" NS
+.\" NS modifies:
+.\" NS   doc-fontmode-depth
+.\" NS   doc-fontmode-font-stackXXX
+.\" NS   doc-fontmode-size-stackXXX
+.\" NS   doc-macro-name
+.\" NS
+.\" NS width register `Bf' set in doc-common
+.
+.de Bf
+.  ds doc-macro-name Bf
+.
+.  ie \n[.$] \{\
+.    nr doc-fontmode-depth +1
+.
+.    \" save current font and size
+.    nr doc-fontmode-font-stack\n[doc-fontmode-depth] \n[.f]
+.    nr doc-fontmode-size-stack\n[doc-fontmode-depth] \n[.ps]
+.
+.    ie        "\$1"Em" \
+.      nop \*[doc-Em-font]\c
+.    el \{ .ie "\$1"Li" \
+.      nop \*[doc-Li-font]\c
+.    el \{ .ie "\$1"Sy" \
+.      nop \*[doc-Sy-font]\c
+.    el \{ .ie "\$1"-emphasis" \
+.      nop \*[doc-Em-font]\c
+.    el \{ .ie "\$1"-literal" \
+.      nop \*[doc-Li-font]\c
+.    el \{ .ie "\$1"-symbolic" \
+.      nop \*[doc-Sy-font]\c
+.    el \{\
+.      tmc mdoc warning: Unknown keyword `\$1' in .Bf macro
+.      tm1 " (#\n[.c])
+.  \}\}\}\}\}\}\}
+.  el \
+.    tm Usage: .Bf [Em | -emphasis | Li | -literal | Sy | -symbolic] (#\n[.c])
+..
+.
+.
+.\" NS Ef user macro
+.\" NS   end font mode
+.\" NS
+.\" NS modifies:
+.\" NS   doc-macro-name
+.\" NS
+.\" NS width register `Ef' set in doc-common
+.
+.de Ef
+.  ds doc-macro-name Ef
+.
+.  ie \n[doc-fontmode-depth] \{\
+.    \" restore saved font and size
+.    nop \)\f[\n[doc-fontmode-font-stack\n[doc-fontmode-depth]]]\c
+.    nop \)\s[\n[doc-fontmode-size-stack\n[doc-fontmode-depth]]u]\c
+.
+.    nr doc-fontmode-font-stack\n[doc-fontmode-depth] 0
+.    nr doc-curr-font \n[.f]
+.    nr doc-fontmode-size-stack\n[doc-fontmode-depth] 0
+.    nr doc-curr-size \n[.ps]
+.    nr doc-fontmode-depth -1
+.  \}
+.  el \
+.    tm mdoc warning: Extraneous .Ef (#\n[.c])
+..
+.
+.
+.\" NS doc-keep-type global register
+.\" NS   current keep type; 1 is `-words', 2 is `-lines', 3 is unknown
+.
+.nr doc-keep-type 0
+.
+.
+.\" NS Bk user macro
+.\" NS   begin keep
+.\" NS
+.\" NS modifies:
+.\" NS   doc-keep-type
+.\" NS   doc-macro-name
+.\" NS
+.\" NS width register `Bk' set in doc-common
+.
+.de Bk
+.  ds doc-macro-name Bk
+.
+.  if \n[doc-keep-type] \
+.    tm .Bk: nesting keeps not implemented yet. (#\n[.c])
+.
+.  ie        "\$1"-lines" \{\
+.    nr doc-keep-type 2
+.    tm .Bk -lines: Not implemented yet. (#\n[.c])
+.  \}
+.  el \{ .ie "\$1"-words" \{\
+.    nr doc-keep-type 1
+.    doc-set-hard-space
+.  \}
+.  el \{ .ie "\$1"" \{\
+.    \" default
+.    nr doc-keep-type 1
+.    doc-set-hard-space
+.  \}
+.  el \{\
+.    tm mdoc warning: Unknown keyword `\$1' in .Bk macro (#\n[.c])
+.    nr doc-keep-type 3
+.  \}\}\}
+.
+\#.  nr doc-nesting-level +1
+..
+.
+.
+.\" NS Ek user macro
+.\" NS   end keep
+.\" NS
+.\" NS modifies:
+.\" NS   doc-keep-type
+.\" NS   doc-macro-name
+.\" NS
+.\" NS width register `Ek' set in doc-common
+.
+.de Ek
+.  ds doc-macro-name Ek
+.
+\#.  nr doc-nesting-level -1
+.
+.  ie \n[.$] \
+.    tm Usage: .Ek (does not take arguments) (#\n[.c])
+.  el \{\
+.    if !\n[doc-keep-type] \
+.      tm mdoc warning: .Ek found without .Bk before (#\n[.c])
+.
+.    ie        (\n[doc-keep-type] == 1) \
+.      doc-set-soft-space
+.    el \{ .if (\n[doc-keep-type] == 2) \
+.      tm .Bk -lines: Not implemented yet. (#\n[.c])
+.  \}\}
+.
+.  nr doc-keep-type 0
+.
+\#.  if !"\*[doc-out-string]"" \
+\#.    doc-print-out-string
+..
+.
+.
+.\" NS doc-display-depth global register
+.\" NS   display level
+.
+.nr doc-display-depth 0
+.
+.
+.\" NS doc-is-compact global register (bool)
+.\" NS   set if the `compact' keyword is given
+.
+.nr doc-is-compact 0
+.
+.
+.\" NS doc-display-type-stackXXX global string
+.\" NS   the display type stack
+.\" NS
+.\" NS limit:
+.\" NS   doc-display-depth
+.
+.ds doc-display-type-stack0
+.
+.
+.\" NS doc-display-indent-stackXXX global register
+.\" NS   stack of display indentation values
+.\" NS
+.\" NS limit:
+.\" NS   doc-display-depth
+.
+.nr doc-display-indent-stack0 0
+.
+.
+.\" NS doc-display-ad-stackXXX global register
+.\" NS   stack of saved adjustment modes
+.\" NS
+.\" NS limit:
+.\" NS   doc-display-depth
+.
+.nr doc-display-ad-stack0 0
+.
+.
+.\" NS doc-display-fi-stackXXX global register
+.\" NS   stack of saved fill modes
+.\" NS
+.\" NS limit:
+.\" NS   doc-display-depth
+.
+.nr doc-display-fi-stack0 0
+.
+.
+.\" NS doc-display-ft-stackXXX global register
+.\" NS   stack of saved fonts
+.\" NS
+.\" NS limit:
+.\" NS   doc-display-depth
+.
+.nr doc-display-ft-stack0 0
+.
+.
+.\" NS doc-display-ps-stackXXX global register
+.\" NS   stack of saved font sizes
+.\" NS
+.\" NS limit:
+.\" NS   doc-display-depth
+.
+.nr doc-display-ps-stack0 0
+.
+.
+.\" NS Bd user macro
+.\" NS   begin display
+.\" NS
+.\" NS width register `Bd' set in doc-common
+.\" NS
+.\" NS modifies:
+.\" NS   doc-curr-font
+.\" NS   doc-curr-size
+.\" NS   doc-display-depth
+.\" NS   doc-display-ad-stackXXX
+.\" NS   doc-display-fi-stackXXX
+.\" NS   doc-display-ft-stackXXX
+.\" NS   doc-display-ps-stackXXX
+.\" NS   doc-display-file
+.\" NS   doc-display-indent-stackXXX
+.\" NS   doc-display-type-stackXXX
+.\" NS   doc-is-compact
+.\" NS   doc-macro-name
+.\" NS
+.\" NS local variables:
+.\" NS   doc-reg-Bd
+.
+.de Bd
+.  ds doc-macro-name Bd
+.
+.  if !\n[.$] \{\
+.    tm1 "Usage: .Bd {-literal | -filled | -ragged | -centered | -unfilled}
+.    tm1 "           [-offset [string]] [-compact] [-file name] (#\n[.c])
+.    return
+.  \}
+.
+.  nr doc-is-compact 0
+.  ds doc-display-file
+.  nr doc-reg-Bd 1
+.  nr doc-display-depth +1
+.
+.  \" save current adjustment and fill modes
+.  nr doc-display-ad-stack\n[doc-display-depth] \n[.j]
+.  nr doc-display-fi-stack\n[doc-display-depth] \n[.u]
+.
+.  ie        "\$1"-literal" \{\
+.    ds doc-display-type-stack\n[doc-display-depth] literal
+.    nr doc-display-ft-stack\n[doc-display-depth] \n[.f]
+.    nr doc-display-ps-stack\n[doc-display-depth] \n[.ps]
+.
+.    ie t \
+.      ta T 9n
+.    el \
+.      ta T 8n
+.    nf
+.  \}
+.  el \{ .ie "\$1"-filled" \{\
+.    ds doc-display-type-stack\n[doc-display-depth] filled
+.    ad b
+.    fi
+.  \}
+.  el \{ .ie "\$1"-ragged" \{\
+.    ds doc-display-type-stack\n[doc-display-depth] ragged
+.    na
+.    fi
+.  \}
+.  el \{ .ie "\$1"-centered" \{\
+.    ds doc-display-type-stack\n[doc-display-depth] centered
+.    ad c
+.    fi
+.  \}
+.  el \{ .ie "\$1"-unfilled" \{\
+.    ds doc-display-type-stack\n[doc-display-depth] unfilled
+.    nf
+.  \}
+.  el \{\
+.    tm1 "mdoc warning: Unknown keyword `\$1' (or missing display type)
+.    tm1 "              in .Bd macro (#\n[.c])
+.    nr doc-reg-Bd 0
+.  \}\}\}\}\}
+.
+.  \" have we seen an argument?
+.  if \n[doc-reg-Bd] \{\
+.    shift
+.    \" check other arguments
+.    if \n[.$] \
+.      doc-do-Bd-args \$@
+.  \}
+.
+.  \" avoid warning about non-existent register
+.  if !r doc-display-indent-stack\n[doc-display-depth] \
+.    nr doc-display-indent-stack\n[doc-display-depth] 0
+.
+.  if \n[doc-display-indent-stack\n[doc-display-depth]] \
+.    in +\n[doc-display-indent-stack\n[doc-display-depth]]u
+.
+.  if !\n[doc-is-compact] \
+.    sp \n[doc-display-vertical]u
+.
+.  if "\*[doc-display-type-stack\n[doc-display-depth]]"literal" \
+.    if t \
+.      nop \*[doc-Li-font]\c
+.
+.  if !\n[cR] \
+.    ne 2v
+.
+.  if !"\*[doc-display-file]"" \
+.    so \*[doc-display-file]
+.
+.  nr doc-is-compact 0
+.  ds doc-display-file
+..
+.
+.
+.\" NS doc-do-Bd-args macro
+.\" NS   resolve remaining .Bd arguments
+.\" NS
+.\" NS modifies:
+.\" NS   doc-display-file
+.\" NS   doc-display-indent-stackXXX
+.\" NS   doc-is-compact
+.\" NS
+.\" NS local variables:
+.\" NS   doc-reg-ddBa
+.\" NS   doc-reg-ddBa1
+.\" NS   doc-reg-ddBa2
+.\" NS   doc-reg-ddBa3
+.\" NS   doc-reg-ddBa4
+.\" NS   doc-str-ddBa
+.
+.de doc-do-Bd-args
+.  nr doc-reg-ddBa 1
+.
+.  ie        "\$1"-offset" \{\
+.    nr doc-reg-ddBa 2
+.
+.    ie        "\$2"left" \
+.      nr doc-display-indent-stack\n[doc-display-depth] 0
+.    el \{ .ie "\$2"right" \
+.      nr doc-display-indent-stack\n[doc-display-depth] (\n[.l]u / 3u)
+.    el \{ .ie "\$2"center" \
+.      nr doc-display-indent-stack\n[doc-display-depth] ((\n[.l]u - \n[.i]u) / 4u)
+.    el \{ .ie "\$2"indent" \
+.      nr doc-display-indent-stack\n[doc-display-depth] \n[doc-display-indent]u
+.    el \{ .ie "\$2"indent-two" \
+.      nr doc-display-indent-stack\n[doc-display-depth] (\n[doc-display-indent]u + \n[doc-display-indent]u)
+.    el \
+.      nr doc-reg-ddBa 1
+.    \}\}\}\}
+.
+.    \" not a known keyword
+.    if (\n[doc-reg-ddBa] == 1) \{\
+.      nr doc-reg-ddBa 2
+.
+.      nr doc-reg-ddBa1 0
+.      if \B(\$2) \{\
+.        \" disable warnings related to scaling indicators (32)
+.        nr doc-reg-ddBa2 \n[.warn]
+.        warn (\n[.warn] - (\n[.warn] / 32 % 2 * 32))
+.
+.        \" values without a scaling indicator are taken as strings;
+.        \" we test whether the parameter string with and without the last
+.        \" character yields identical numerical results (ignoring the
+.        \" scaling indicator)
+.        ds doc-str-ddBa "\$2
+.        substring doc-str-ddBa 0 -2
+.        if \B(\*[doc-str-ddBa]) \{\
+.          nr doc-reg-ddBa3 (;(\$2))
+.          nr doc-reg-ddBa4 (\*[doc-str-ddBa])
+.          if (\n[doc-reg-ddBa3] == \n[doc-reg-ddBa4]) \
+.            nr doc-reg-ddBa1 1
+.        \}
+.
+.        \" enable all warnings again
+.        warn \n[doc-reg-ddBa2]
+.      \}
+.
+.      ie \n[doc-reg-ddBa1] \
+.        nr doc-display-indent-stack\n[doc-display-depth] \$2
+.      el \{\
+.        doc-get-width "\$2"
+.        ie (\n[doc-width] <= 3) \{\
+.          \" if the offset parameter is a macro, use the macro's
+.          \" width as specified in doc-common
+.          doc-get-arg-type "\$2"
+.          ie (\n[doc-arg-type] == 1) \
+.            nr doc-display-indent-stack\n[doc-display-depth] \n[\$2]
+.          el \
+.            nr doc-display-indent-stack\n[doc-display-depth] (\n[doc-width]u * \n[doc-fixed-width]u)
+.        \}
+.        el \
+.          nr doc-display-indent-stack\n[doc-display-depth] (\n[doc-width]u * \n[doc-fixed-width]u)
+.    \}\}
+.  \}
+.  el \{ .ie "\$1"-compact" \
+.    nr doc-is-compact 1
+.  el \{ .ie "\$1"-file" \{\
+.    ie !"\$2"" \{\
+.      ds doc-display-file "\$2
+.      nr doc-reg-ddBa 2
+.    \}
+.    el \
+.      tm mdoc warning: .Bd `-file' keyword requires argument (#\n[.c])
+.  \}
+.  el \
+.      tm mdoc warning: Unknown keyword `\$1' in .Bd macro (#\n[.c])
+.  \}\}
+.
+.  if (\n[doc-reg-ddBa] < \n[.$]) \{\
+.    shift \n[doc-reg-ddBa]
+.    doc-do-Bd-args \$@
+.  \}
+..
+.
+.
+.\" NS Ed user macro
+.\" NS   end display
+.\" NS
+.\" NS modifies:
+.\" NS   doc-display-depth
+.\" NS   doc-display-indent-stackXXX
+.\" NS   doc-display-type-stackXXX
+.\" NS   doc-macro-name
+.\" NS
+.\" NS width register `Ed' set in doc-common
+.
+.de Ed
+.  ds doc-macro-name Ed
+.
+.  br
+.
+.  if !\n[doc-display-depth] \{\
+.    tm mdoc warning: Extraneous .Ed (#\n[.c])
+.    nr doc-display-depth 1
+.  \}
+.
+.  if "\*[doc-display-type-stack\n[doc-display-depth]]"literal" \{\
+.    ft \n[doc-display-ft-stack\n[doc-display-depth]]
+.    ps \n[doc-display-ps-stack\n[doc-display-depth]]u
+.  \}
+.
+.  in -\n[doc-display-indent-stack\n[doc-display-depth]]u
+.
+.  \" restore saved adjustment and fill modes
+.  ie \n[doc-display-fi-stack\n[doc-display-depth]] \
+.    fi
+.  el \
+.    nf
+.  ad \n[doc-display-ad-stack\n[doc-display-depth]]
+.
+.  nr doc-display-indent-stack\n[doc-display-depth] 0
+.  ds doc-display-type-stack\n[doc-display-depth]
+.  nr doc-display-depth -1
+..
+.
+.
+.\" NS doc-list-type-stackXXX global string
+.\" NS   stack of list types
+.\" NS
+.\" NS limit:
+.\" NS   doc-list-depth
+.
+.ds doc-list-type-stack1
+.
+.
+.\" NS doc-list-indent-stackXXX global register
+.\" NS   stack of list indentation values
+.\" NS
+.\" NS limit:
+.\" NS   doc-list-depth
+.
+.nr doc-list-indent-stack1 0
+.
+.
+.\" NS doc-list-have-indent-stackXXX global register (bool)
+.\" NS   an indentation value is active
+.\" NS
+.\" NS limit:
+.\" NS   doc-list-depth
+.
+.nr doc-list-have-indent-stack1 0
+.
+.
+.\" NS Bl user macro
+.\" NS   begin list
+.\" NS
+.\" NS width register `Bl' set in doc-common
+.\" NS
+.\" NS modifies:
+.\" NS   doc-arg-ptr
+.\" NS   doc-argXXX
+.\" NS   doc-list-depth
+.\" NS   doc-list-have-indent-stackXXX
+.\" NS   doc-list-indent-stackXXX
+.\" NS   doc-list-type-stackXXX
+.\" NS   doc-macro-name
+.\" NS   doc-num-args
+.\" NS   doc-num-columns
+.\" NS
+.\" NS local variables:
+.\" NS   doc-reg-Bl
+.
+.de Bl
+.  if !\n[.$] \{\
+.    doc-Bl-usage
+.    return
+.  \}
+.
+.  ds doc-macro-name Bl
+.  nr doc-list-depth +1
+.  nr doc-arg-ptr 1
+.
+.  ie        "\$1"-hang" \{\
+.    ds doc-list-type-stack\n[doc-list-depth] hang-list
+.    nr doc-list-indent-stack\n[doc-list-depth] 6n
+.    nr doc-list-have-indent-stack\n[doc-list-depth] 1
+.  \}
+.  el \{ .ie "\$1"-tag" \{\
+.    ds doc-list-type-stack\n[doc-list-depth] tag-list
+.    nr doc-list-have-indent-stack\n[doc-list-depth] 1
+.  \}
+.  el \{ .ie "\$1"-item" \{\
+.    ds doc-list-type-stack\n[doc-list-depth] item-list
+.    nr doc-list-have-indent-stack\n[doc-list-depth] 1
+.  \}
+.  el \{ .ie "\$1"-enum" \{\
+.    ds doc-list-type-stack\n[doc-list-depth] enum-list
+.    nr doc-list-indent-stack\n[doc-list-depth] 3n
+.    nr doc-list-have-indent-stack\n[doc-list-depth] 1
+.  \}
+.  el \{ .ie "\$1"-bullet" \{\
+.    ds doc-list-type-stack\n[doc-list-depth] bullet-list
+.    nr doc-list-indent-stack\n[doc-list-depth] 2n
+.    nr doc-list-have-indent-stack\n[doc-list-depth] 1
+.  \}
+.  el \{ .ie "\$1"-dash" \{\
+.    ds doc-list-type-stack\n[doc-list-depth] dash-list
+.    nr doc-list-indent-stack\n[doc-list-depth] 2n
+.    nr doc-list-have-indent-stack\n[doc-list-depth] 1
+.  \}
+.  el \{ .ie "\$1"-hyphen" \{\
+.    ds doc-list-type-stack\n[doc-list-depth] dash-list
+.    nr doc-list-indent-stack\n[doc-list-depth] 2n
+.    nr doc-list-have-indent-stack\n[doc-list-depth] 1
+.  \}
+.  el \{ .ie "\$1"-inset" \{\
+.    ds doc-list-type-stack\n[doc-list-depth] inset-list
+.    nr doc-list-have-indent-stack\n[doc-list-depth] 1
+.  \}
+.  el \{ .ie "\$1"-diag" \{\
+.    ds doc-list-type-stack\n[doc-list-depth] diag-list
+.  \}
+.  el \{ .ie "\$1"-ohang" \{\
+.    ds doc-list-type-stack\n[doc-list-depth] ohang-list
+.    nr doc-list-have-indent-stack\n[doc-list-depth] 1
+.  \}
+.  el \{ .ie "\$1"-column" \{\
+.    ds doc-list-type-stack\n[doc-list-depth] column-list
+.    linetabs 1
+.  \}
+.  el \{\
+.    tm1 "mdoc warning: Unknown list type `\$1' (or missing list type)
+.    tm1 "              in .Bl macro
+.    tm
+.    nr doc-arg-ptr 0
+.  \}\}\}\}\}\}\}\}\}\}\}
+.
+.  \" we have seen a list type
+.  if !\n[doc-arg-ptr] \{\
+.    doc-Bl-usage
+.    doc-reset-args
+.    nr doc-list-depth -1
+.    return
+.  \}
+.
+.  shift
+.
+.  \" fill argument vector
+.  nr doc-reg-Bl 1
+.  while (\n[doc-reg-Bl] <= \n[.$]) \{\
+.    ds doc-arg\n[doc-reg-Bl] "\$[\n[doc-reg-Bl]]
+.    \" dummy type and space so that doc-save-global-vars() doesn't warn
+.    nr doc-type\n[doc-reg-Bl] 0
+.    ds doc-space\n[doc-reg-Bl]
+.    nr doc-reg-Bl +1
+.  \}
+.
+.  doc-increment-list-stack
+.
+.  if \n[.$] \{\
+.    nr doc-arg-limit \n[.$]
+.    nr doc-arg-ptr 0
+.    doc-do-Bl-args
+.
+.    in +\n[doc-list-offset-stack\n[doc-list-depth]]u
+.
+.    \" initialize column list
+.    if "\*[doc-list-type-stack\n[doc-list-depth]]"column-list" \{\
+.      doc-set-column-tab \n[doc-num-columns]
+'      in -\n[doc-column-indent-width]u
+.      if !\n[doc-compact-list-stack\n[doc-list-depth]] \
+.        sp \n[doc-display-vertical]u
+.
+.      nf
+.      nr doc-num-columns 0
+.  \}\}
+.
+.  doc-reset-args
+..
+.
+.
+.\" NS doc-Bl-usage macro
+.
+.de doc-Bl-usage
+.  tm1 "Usage: .Bl {-hang | -ohang | -tag | -diag | -inset}
+.  tm1 "             [-width <string>]
+.  tm1 "             [-offset <string>] [-compact]
+.  tm1 "       .Bl -column [-offset <string>] <string1> <string2> ...
+.  tm1 "       .Bl {-item | -enum [-nested] | -bullet | -hyphen | -dash}
+.  tm1 "             [-offset <string>] [-compact] (#\n[.c])
+..
+.
+.
+.\" NS doc-do-Bl-args macro
+.\" NS   resolve remaining .Bl arguments
+.\" NS
+.\" NS modifies:
+.\" NS   doc-arg-ptr
+.\" NS   doc-argXXX
+.\" NS   doc-compact-list-stackXXX
+.\" NS   doc-list-indent-stackXXX
+.\" NS   doc-list-offset-stackXXX
+.\" NS   doc-num-columns
+.\" NS   doc-tag-prefix-stackXXX
+.\" NS   doc-tag-width-stackXXX
+.\" NS
+.\" NS local variables:
+.\" NS   doc-box-dBla
+.\" NS   doc-env-dBla
+.\" NS   doc-reg-dBla
+.\" NS   doc-reg-dBla1
+.\" NS   doc-reg-dBla2
+.\" NS   doc-reg-dBla3
+.\" NS   doc-reg-dBla4
+.\" NS   doc-str-dBla
+.\" NS   doc-str-dBla1
+.
+.de doc-do-Bl-args
+.  nr doc-arg-ptr +1
+.
+.  if (\n[doc-arg-limit] < \n[doc-arg-ptr]) \
+.    return
+.
+.  \" avoid a warning message in case e.g. `-offset' has no parameter
+.  nr doc-reg-dBla (\n[doc-arg-ptr] + 1)
+.  if (\n[doc-arg-limit] < \n[doc-reg-dBla]) \
+.    ds doc-arg\n[doc-reg-dBla]
+.
+.  nr doc-reg-dBla 1
+.
+.  ie        "\*[doc-arg\n[doc-arg-ptr]]"-compact" \
+.    nr doc-compact-list-stack\n[doc-list-depth] 1
+.
+.  el \{ .ie "\*[doc-arg\n[doc-arg-ptr]]"-nested" \{\
+.    ie (\n[doc-list-depth] > 1) \{\
+.      nr doc-reg-dBla1 (\n[doc-list-depth] - 1)
+.      ds doc-tag-prefix-stack\n[doc-list-depth] "\*[doc-tag-prefix-stack\n[doc-reg-dBla1]]
+.      as doc-tag-prefix-stack\n[doc-list-depth] \n[doc-enum-list-count-stack\n[doc-reg-dBla1]].
+.      length doc-reg-dBla1 "\*[doc-tag-prefix-stack\n[doc-list-depth]]
+.      nr doc-list-indent-stack\n[doc-list-depth] +\n[doc-reg-dBla1]n
+.    \}
+.    el \
+.      tm mdoc warning: `-nested' allowed with nested .Bl macros only (#\n[.c])
+.  \}
+.
+.  el \{ .ie "\*[doc-arg\n[doc-arg-ptr]]"-width" \{\
+.    nr doc-arg-ptr +1
+.    ds doc-tag-width-stack\n[doc-list-depth] TagwidtH
+.
+.    ds doc-str-dBla "\*[doc-arg\n[doc-arg-ptr]]
+.    substring doc-str-dBla 0 0
+.    ie .\*[doc-str-dBla] \{\
+.      ds doc-str-dBla "\*[doc-arg\n[doc-arg-ptr]]
+.      substring doc-str-dBla 1
+.      doc-first-parameter \*[doc-str-dBla]
+.      doc-get-width "\*[doc-str-dfp]
+.      doc-get-arg-type "\*[doc-str-dfp]
+.      ie (\n[doc-arg-type] == 1) \
+.        nr doc-reg-dBla1 1
+.      el \
+.        nr doc-reg-dBla1 0
+.    \}
+.    el \
+.      nr doc-reg-dBla1 0
+.    ds doc-str-dBla "\*[doc-arg\n[doc-arg-ptr]]
+.
+.    ie \n[doc-reg-dBla1] \{\
+.      \" execute string in a box to get the width of the diversion
+.      ds doc-str-dBla \*[doc-arg\n[doc-arg-ptr]]
+.      doc-save-global-vars
+.      doc-reset-args
+.      box doc-box-dBla
+.      ev doc-env-dBla
+.      evc 0
+.      in 0
+.      nf
+.      nop \*[doc-str-dBla]
+.      br
+.      ev
+.      box
+.      doc-restore-global-vars
+.      doc-get-width \h'\n[dl]u'
+.      nr doc-list-indent-stack\n[doc-list-depth] (\n[doc-width]u * \n[doc-fixed-width]u)
+.    \}
+.    el \{\
+.      \" test whether argument is a valid numeric expression
+.      nr doc-reg-dBla1 0
+.      if \B(\*[doc-str-dBla]) \{\
+.        \" disable warnings related to scaling indicators (32)
+.        nr doc-reg-dBla2 \n[.warn]
+.        warn (\n[.warn] - (\n[.warn] / 32 % 2 * 32))
+.
+.        \" values without a scaling indicator are taken as strings;
+.        \" we test whether the parameter string with and without the last
+.        \" character yields identical numerical results (ignoring the
+.        \" scaling indicator)
+.        ds doc-str-dBla1 "\*[doc-str-dBla]
+.        substring doc-str-dBla1 0 -2
+.        if \B(\*[doc-str-dBla1]) \{\
+.          nr doc-reg-dBla3 (;(\*[doc-str-dBla]))
+.          nr doc-reg-dBla4 (\*[doc-str-dBla1])
+.          if (\n[doc-reg-dBla3] == \n[doc-reg-dBla4]) \
+.            nr doc-reg-dBla1 1
+.        \}
+.
+.        \" enable all warnings again
+.        warn \n[doc-reg-dBla2]
+.      \}
+.
+.      ie \n[doc-reg-dBla1] \
+.        nr doc-list-indent-stack\n[doc-list-depth] (\*[doc-str-dBla])
+.      el \{\
+.        doc-get-arg-width \n[doc-arg-ptr]
+.        ie (\n[doc-width] == 2) \{\
+.          \" if the width parameter is a macro, use the macro's
+.          \" width as specified in doc-common
+.          doc-get-arg-type \*[doc-str-dBla]
+.          ie (\n[doc-arg-type] == 1) \
+.            nr doc-list-indent-stack\n[doc-list-depth] \n[\*[doc-str-dBla]]
+.          el \
+.            nr doc-list-indent-stack\n[doc-list-depth] (\n[doc-width]u * \n[doc-fixed-width]u)
+.        \}
+.        el \
+.          nr doc-list-indent-stack\n[doc-list-depth] (\n[doc-width]u * \n[doc-fixed-width]u)
+.  \}\}\}
+.
+.  el \{ .ie "\*[doc-arg\n[doc-arg-ptr]]"-offset" \{\
+.    nr doc-arg-ptr +1
+.
+.    ie "\*[doc-arg\n[doc-arg-ptr]]"indent" \
+.      nr doc-list-offset-stack\n[doc-list-depth] \n[doc-display-indent]u
+.    el \{\
+.      ds doc-str-dBla "\*[doc-arg\n[doc-arg-ptr]]
+.      nr doc-reg-dBla1 0
+.      if \B(\*[doc-str-dBla]) \{\
+.        nr doc-reg-dBla2 \n[.warn]
+.        warn (\n[.warn] - (\n[.warn] / 32 % 2 * 32))
+.
+.        ds doc-str-dBla1 "\*[doc-str-dBla]
+.        substring doc-str-dBla1 0 -2
+.        if \B(\*[doc-str-dBla1]) \{\
+.          nr doc-reg-dBla3 (;(\*[doc-str-dBla]))
+.          nr doc-reg-dBla4 (\*[doc-str-dBla1])
+.          if (\n[doc-reg-dBla3] == \n[doc-reg-dBla4]) \
+.            nr doc-reg-dBla1 1
+.        \}
+.
+.        warn \n[doc-reg-dBla2]
+.      \}
+.
+.      ie \n[doc-reg-dBla1] \
+.        nr doc-list-offset-stack\n[doc-list-depth] \*[doc-str-dBla]
+.      el \{\
+.        doc-get-arg-width \n[doc-arg-ptr]
+.        ie (\n[doc-width] <= 3) \{\
+.          \" if the offset parameter is a macro, use the macro's
+.          \" width as specified in doc-common
+.          doc-get-arg-type \*[doc-str-dBla]
+.          ie (\n[doc-arg-type] == 1) \
+.            nr doc-list-offset-stack\n[doc-list-depth] \n[\*[doc-str-dBla]]
+.          el \
+.            nr doc-list-offset-stack\n[doc-list-depth] (\n[doc-width]u * \n[doc-fixed-width]u)
+.        \}
+.        el \
+.          nr doc-list-offset-stack\n[doc-list-depth] (\n[doc-width]u * \n[doc-fixed-width]u)
+.  \}\}\}
+.  el \
+.    nr doc-reg-dBla 0
+.  \}\}\}
+.
+.  \" not a known keyword, so it specifies the width of the next column
+.  \" (if it is a column list)
+.  if !\n[doc-reg-dBla] \{\
+.    ie "\*[doc-list-type-stack\n[doc-list-depth]]"column-list" \{\
+.      nr doc-num-columns +1
+.      ds doc-str-dBla \*[doc-arg\n[doc-arg-ptr]]
+.      substring doc-str-dBla 0 0
+.      ie .\*[doc-str-dBla] \{\
+.        ds doc-str-dBla "\*[doc-arg\n[doc-arg-ptr]]
+.        substring doc-str-dBla 1
+.        doc-first-parameter \*[doc-str-dBla]
+.        doc-get-width "\*[doc-str-dfp]
+.        doc-get-arg-type "\*[doc-str-dfp]
+.        ie (\n[doc-arg-type] == 1) \
+.          nr doc-reg-dBla1 1
+.        el \
+.          nr doc-reg-dBla1 0
+.      \}
+.      el \
+.        nr doc-reg-dBla1 0
+.      ds doc-str-dBla "\*[doc-arg\n[doc-arg-ptr]]
+.
+.      ie \n[doc-reg-dBla1] \{\
+.        \" execute string in a box to get the width of the diversion
+.        ds doc-str-dBla \*[doc-arg\n[doc-arg-ptr]]
+.        doc-save-global-vars
+.        doc-reset-args
+.        box doc-box-dBla
+.        ev doc-env-dBla
+.        evc 0
+.        in 0
+.        nf
+.        nop \*[doc-str-dBla]
+.        br
+.        ev
+.        box
+.        doc-restore-global-vars
+.        ds doc-arg\n[doc-num-columns] "\h'\n[dl]u'
+.      \}
+.      el \
+.        ds doc-arg\n[doc-num-columns] "\*[doc-arg\n[doc-arg-ptr]]
+.    \}
+.    el \{\
+.      tmc mdoc warning: Unknown keyword `\*[doc-arg\n[doc-arg-ptr]]'
+.      tm1 " in .Bl macro (#\n[.c])
+.  \}\}
+.
+.  if (\n[doc-arg-limit] > \n[doc-arg-ptr]) \
+.    doc-do-Bl-args
+..
+.
+.
+.\" NS doc-save-global-vars macro
+.\" NS   save all global variables
+.\" NS
+.\" NS local variables:
+.\" NS   doc-reg-dsgv
+.
+.de doc-save-global-vars
+.  ds doc-macro-name-saved "\*[doc-macro-name]
+.  nr doc-arg-limit-saved \n[doc-arg-limit]
+.  nr doc-num-args-saved \n[doc-num-args]
+.  nr doc-arg-ptr-saved \n[doc-arg-ptr]
+.
+.  nr doc-reg-dsgv 1
+.  while (\n[doc-reg-dsgv] <= \n[doc-arg-limit]) \{\
+.    ds doc-arg\n[doc-reg-dsgv]-saved "\*[doc-arg\n[doc-reg-dsgv]]
+.    nr doc-type\n[doc-reg-dsgv]-saved \n[doc-type\n[doc-reg-dsgv]]
+.    ds doc-space\n[doc-reg-dsgv]-saved "\*[doc-space\n[doc-reg-dsgv]]
+.    nr doc-reg-dsgv +1
+.  \}
+.
+.  nr doc-curr-font-saved \n[doc-curr-font]
+.  nr doc-curr-size-saved \n[doc-curr-size]
+.  nr doc-in-synopsis-section-saved \n[doc-in-synopsis-section]
+.  nr doc-in-library-section-saved \n[doc-in-library-section]
+.  nr doc-indent-synopsis-saved \n[doc-indent-synopsis]
+.  nr doc-indent-synopsis-active-saved \n[doc-indent-synopsis-active]
+.  nr doc-have-decl-saved \n[doc-have-decl]
+.  nr doc-have-var-saved \n[doc-have-var]
+.  ds doc-command-name-saved "\*[doc-command-name]
+.  ds doc-quote-left-saved "\*[doc-quote-left]
+.  ds doc-quote-right-saved "\*[doc-quote-right]
+.  nr doc-nesting-level-saved \n[doc-nesting-level]
+.  nr doc-in-list-saved \n[doc-in-list]
+.  ds doc-space-saved "\*[doc-space]
+.  ds doc-saved-space-saved "\*[doc-saved-space]
+.  nr doc-space-mode-saved \n[doc-space-mode]
+.  nr doc-have-space-saved \n[doc-have-space]
+.  nr doc-have-slot-saved \n[doc-have-slot]
+.  nr doc-keep-type-saved \n[doc-keep-type]
+.  nr doc-display-depth-saved \n[doc-display-depth]
+.  nr doc-is-compact-saved \n[doc-is-compact]
+.
+.  nr doc-reg-dsgv 0
+.  while (\n[doc-reg-dsgv] <= \n[doc-display-depth]) \{\
+.    ds doc-display-type-stack\n[doc-reg-dsgv]-saved "\*[doc-display-type-stack\n[doc-reg-dsgv]]
+.    nr doc-display-indent-stack\n[doc-reg-dsgv]-saved \n[doc-display-indent-stack\n[doc-reg-dsgv]]
+.    nr doc-display-ad-stack\n[doc-reg-dsgv]-saved \n[doc-display-ad-stack\n[doc-reg-dsgv]]
+.    nr doc-display-fi-stack\n[doc-reg-dsgv]-saved \n[doc-display-fi-stack\n[doc-reg-dsgv]]
+.    nr doc-display-ft-stack\n[doc-reg-dsgv]-saved \n[doc-display-ft-stack\n[doc-reg-dsgv]]
+.    nr doc-display-ps-stack\n[doc-reg-dsgv]-saved \n[doc-display-ps-stack\n[doc-reg-dsgv]]
+.    nr doc-reg-dsgv +1
+.  \}
+.
+.  nr doc-fontmode-depth-saved \n[doc-fontmode-depth]
+.
+.  nr doc-reg-dsgv 1
+.  while (\n[doc-reg-dsgv] <= \n[doc-fontmode-depth]) \{\
+.    nr doc-fontmode-font-stack\n[doc-reg-dsgv]-saved \n[doc-fontmode-font-stack\n[doc-reg-dsgv]]
+.    nr doc-fontmode-size-stack\n[doc-reg-dsgv]-saved \n[doc-fontmode-size-stack\n[doc-reg-dsgv]]
+.    nr doc-reg-dsgv +1
+.  \}
+.
+.  nr doc-list-depth-saved \n[doc-list-depth]
+.
+.  nr doc-reg-dsgv 1
+.  while (\n[doc-reg-dsgv] <= \n[doc-list-depth]) \{\
+.    ds doc-list-type-stack\n[doc-reg-dsgv]-saved "\*[doc-list-type-stack\n[doc-reg-dsgv]]
+.    nr doc-list-have-indent-stack\n[doc-reg-dsgv]-saved \n[doc-list-have-indent-stack\n[doc-reg-dsgv]]
+.    nr doc-list-indent-stack\n[doc-reg-dsgv]-saved \n[doc-list-indent-stack\n[doc-reg-dsgv]]
+.    nr doc-compact-list-stack\n[doc-reg-dsgv]-saved \n[doc-compact-list-stack\n[doc-reg-dsgv]]
+.    ds doc-tag-prefix-stack\n[doc-reg-dsgv]-saved "\*[doc-tag-prefix-stack\n[doc-reg-dsgv]]
+.    ds doc-tag-width-stack\n[doc-reg-dsgv]-saved "\*[doc-tag-width-stack\n[doc-reg-dsgv]]
+.    nr doc-list-offset-stack\n[doc-reg-dsgv]-saved \n[doc-list-offset-stack\n[doc-reg-dsgv]]
+.    nr doc-enum-list-count-stack\n[doc-reg-dsgv]-saved \n[doc-enum-list-count-stack\n[doc-reg-dsgv]]
+.    nr doc-reg-dsgv +1
+.  \}
+.
+.  ds doc-saved-Pa-font-saved "\*[doc-saved-Pa-font]
+.  nr doc-curr-type-saved \n[doc-curr-type]
+.  ds doc-curr-arg-saved "\*[doc-curr-arg]
+.  nr doc-diag-list-input-line-count-saved \n[doc-diag-list-input-line-count]
+.  nr doc-num-columns-saved \n[doc-num-columns]
+.  nr doc-column-indent-width-saved \n[doc-column-indent-width]
+.  nr doc-is-func-saved \n[doc-is-func]
+.  nr doc-have-old-func-saved \n[doc-have-old-func]
+.  nr doc-func-arg-count-saved \n[doc-func-arg-count]
+.  ds doc-func-arg-saved "\*[doc-func-arg]
+.  nr doc-num-func-args-saved \n[doc-num-func-args]
+.  nr doc-func-args-processed-saved \n[doc-func-args-processed]
+.  nr doc-have-func-saved \n[doc-have-func]
+.  nr doc-is-reference-saved \n[doc-is-reference]
+.  nr doc-reference-count-saved \n[doc-reference-count]
+.  nr doc-author-count-saved \n[doc-author-count]
+.
+.  nr doc-reg-dsgv 0
+.  while (\n[doc-reg-dsgv] <= \n[doc-author-count]) \{\
+.    ds doc-author-name\n[doc-reg-dsgv]-saved "\*[doc-author-name\n[doc-reg-dsgv]]
+.    nr doc-reg-dsgv +1
+.  \}
+.
+.  nr doc-book-count-saved \n[doc-book-count]
+.  ds doc-book-name-saved "\*[doc-book-name]
+.  nr doc-city-count-saved \n[doc-city-count]
+.  ds doc-city-name-saved "\*[doc-city-name]
+.  nr doc-date-count-saved \n[doc-date-count]
+.  ds doc-date-saved "\*[doc-date]
+.  nr doc-publisher-count-saved \n[doc-publisher-count]
+.  ds doc-publisher-name-saved "\*[doc-publisher-name]
+.  nr doc-journal-count-saved \n[doc-journal-count]
+.  ds doc-journal-name-saved "\*[doc-journal-name]
+.  nr doc-issue-count-saved \n[doc-issue-count]
+.  ds doc-issue-name-saved "\*[doc-issue-name]
+.  nr doc-optional-count-saved \n[doc-optional-count]
+.  ds doc-optional-string-saved "\*[doc-optional-string]
+.  nr doc-page-number-count-saved \n[doc-page-number-count]
+.  ds doc-page-number-string-saved "\*[doc-page-number-string]
+.  nr doc-corporate-count-saved \n[doc-corporate-count]
+.  ds doc-corporate-name-saved "\*[doc-corporate-name]
+.  nr doc-report-count-saved \n[doc-report-count]
+.  ds doc-report-name-saved "\*[doc-report-name]
+.  nr doc-reference-title-count-saved \n[doc-reference-title-count]
+.  ds doc-reference-title-name-saved "\*[doc-reference-title-name]
+.  ds doc-reference-title-name-for-book-saved "\*[doc-reference-title-name-for-book]
+.  nr doc-url-count-saved \n[doc-url-count]
+.  ds doc-url-name-saved "\*[doc-url-name]
+.  nr doc-volume-count-saved \n[doc-volume-count]
+.  ds doc-volume-name-saved "\*[doc-volume-name]
+.  nr doc-have-author-saved \n[doc-have-author]
+.
+.  ds doc-document-title-saved "\*[doc-document-title]
+.  ds doc-volume-saved "\*[doc-volume]
+.  ds doc-section-saved "\*[doc-section]
+.  ds doc-operating-system-saved "\*[doc-operating-system]
+.  ds doc-date-string-saved "\*[doc-date-string]
+.  nr doc-header-space-saved \n[doc-header-space]
+.  nr doc-footer-space-saved \n[doc-footer-space]
+.  nr doc-display-vertical-saved \n[doc-display-vertical]
+.  ds doc-header-string-saved "\*[doc-header-string]
+.  nr doc-in-see-also-section-saved \n[doc-in-see-also-section]
+.  nr doc-in-files-section-saved \n[doc-in-files-section]
+.  nr doc-in-authors-section-saved \n[doc-in-authors-section]
+..
+.
+.
+.\" NS doc-restore-global-vars macro
+.\" NS   restore all global variables
+.\" NS
+.\" NS local variables:
+.\" NS   doc-reg-drgv
+.
+.de doc-restore-global-vars
+.  ds doc-macro-name "\*[doc-macro-name-saved]
+.  nr doc-arg-limit \n[doc-arg-limit-saved]
+.  nr doc-num-args \n[doc-num-args-saved]
+.  nr doc-arg-ptr \n[doc-arg-ptr-saved]
+.
+.  nr doc-reg-drgv 1
+.  while (\n[doc-reg-drgv] <= \n[doc-arg-limit]) \{\
+.    ds doc-arg\n[doc-reg-drgv] "\*[doc-arg\n[doc-reg-drgv]-saved]
+.    nr doc-type\n[doc-reg-drgv] \n[doc-type\n[doc-reg-drgv]-saved]
+.    ds doc-space\n[doc-reg-drgv] "\*[doc-space\n[doc-reg-drgv]-saved]
+.    nr doc-reg-drgv +1
+.  \}
+.
+.  nr doc-curr-font \n[doc-curr-font-saved]
+.  nr doc-curr-size \n[doc-curr-size-saved]
+.  nr doc-in-synopsis-section \n[doc-in-synopsis-section-saved]
+.  nr doc-in-library-section \n[doc-in-library-section-saved]
+.  nr doc-indent-synopsis \n[doc-indent-synopsis-saved]
+.  nr doc-indent-synopsis-active \n[doc-indent-synopsis-active-saved]
+.  nr doc-have-decl \n[doc-have-decl-saved]
+.  nr doc-have-var \n[doc-have-var-saved]
+.  ds doc-command-name "\*[doc-command-name-saved]
+.  ds doc-quote-left "\*[doc-quote-left-saved]
+.  ds doc-quote-right "\*[doc-quote-right-saved]
+.  nr doc-nesting-level \n[doc-nesting-level-saved]
+.  nr doc-in-list \n[doc-in-list-saved]
+.  ds doc-space "\*[doc-space-saved]
+.  ds doc-saved-space "\*[doc-saved-space-saved]
+.  nr doc-space-mode \n[doc-space-mode-saved]
+.  nr doc-have-space \n[doc-have-space-saved]
+.  nr doc-have-slot \n[doc-have-slot-saved]
+.  nr doc-keep-type \n[doc-keep-type-saved]
+.  nr doc-display-depth \n[doc-display-depth-saved]
+.  nr doc-is-compact \n[doc-is-compact-saved]
+.
+.  nr doc-reg-drgv 0
+.  while (\n[doc-reg-drgv] <= \n[doc-display-depth]) \{\
+.    ds doc-display-type-stack\n[doc-reg-drgv] "\*[doc-display-type-stack\n[doc-reg-drgv]-saved]
+.    nr doc-display-indent-stack\n[doc-reg-drgv] \n[doc-display-indent-stack\n[doc-reg-drgv]-saved]
+.    nr doc-display-ad-stack\n[doc-reg-drgv] \n[doc-display-ad-stack\n[doc-reg-drgv]-saved]
+.    nr doc-display-fi-stack\n[doc-reg-drgv] \n[doc-display-fi-stack\n[doc-reg-drgv]-saved]
+.    nr doc-display-ft-stack\n[doc-reg-drgv] \n[doc-display-ft-stack\n[doc-reg-drgv]-saved]
+.    nr doc-display-ps-stack\n[doc-reg-drgv] \n[doc-display-ps-stack\n[doc-reg-drgv]-saved]
+.    nr doc-reg-drgv +1
+.  \}
+.
+.  nr doc-fontmode-depth \n[doc-fontmode-depth-saved]
+.
+.  nr doc-reg-drgv 1
+.  while (\n[doc-reg-drgv] <= \n[doc-fontmode-depth]) \{\
+.    nr doc-fontmode-font-stack\n[doc-reg-drgv] \n[doc-fontmode-font-stack\n[doc-reg-drgv]]-saved
+.    nr doc-fontmode-size-stack\n[doc-reg-drgv] \n[doc-fontmode-size-stack\n[doc-reg-drgv]]-saved
+.    nr doc-reg-drgv +1
+.  \}
+.
+.  nr doc-list-depth \n[doc-list-depth-saved]
+.
+.  nr doc-reg-drgv 1
+.  while (\n[doc-reg-drgv] <= \n[doc-list-depth]) \{\
+.    ds doc-list-type-stack\n[doc-reg-drgv] "\*[doc-list-type-stack\n[doc-reg-drgv]-saved]
+.    nr doc-list-have-indent-stack\n[doc-reg-drgv] \n[doc-list-have-indent-stack\n[doc-reg-drgv]-saved]
+.    nr doc-list-indent-stack\n[doc-reg-drgv] \n[doc-list-indent-stack\n[doc-reg-drgv]-saved]
+.    nr doc-compact-list-stack\n[doc-reg-drgv] \n[doc-compact-list-stack\n[doc-reg-drgv]-saved]
+.    ds doc-tag-prefix-stack\n[doc-reg-drgv] "\*[doc-tag-prefix-stack\n[doc-reg-drgv]-saved]
+.    ds doc-tag-width-stack\n[doc-reg-drgv] "\*[doc-tag-width-stack\n[doc-reg-drgv]-saved]
+.    nr doc-list-offset-stack\n[doc-reg-drgv] \n[doc-list-offset-stack\n[doc-reg-drgv]-saved]
+.    nr doc-enum-list-count-stack\n[doc-reg-drgv] \n[doc-enum-list-count-stack\n[doc-reg-drgv]-saved]
+.    nr doc-reg-drgv +1
+.  \}
+.
+.  ds doc-saved-Pa-font "\*[doc-saved-Pa-font-saved]
+.  nr doc-curr-type \n[doc-curr-type-saved]
+.  ds doc-curr-arg "\*[doc-curr-arg-saved]
+.  nr doc-diag-list-input-line-count \n[doc-diag-list-input-line-count-saved]
+.  nr doc-num-columns \n[doc-num-columns-saved]
+.  nr doc-column-indent-width \n[doc-column-indent-width-saved]
+.  nr doc-is-func \n[doc-is-func-saved]
+.  nr doc-have-old-func \n[doc-have-old-func-saved]
+.  nr doc-func-arg-count \n[doc-func-arg-count-saved]
+.  ds doc-func-arg "\*[doc-func-arg-saved]
+.  nr doc-num-func-args \n[doc-num-func-args-saved]
+.  nr doc-func-args-processed \n[doc-func-args-processed-saved]
+.  nr doc-have-func \n[doc-have-func-saved]
+.  nr doc-is-reference \n[doc-is-reference-saved]
+.  nr doc-reference-count \n[doc-reference-count-saved]
+.  nr doc-author-count \n[doc-author-count-saved]
+.
+.  nr doc-reg-drgv 0
+.  while (\n[doc-reg-drgv] <= \n[doc-author-count]) \{\
+.    ds doc-author-name\n[doc-reg-drgv] "\*[doc-author-name\n[doc-reg-drgv]-saved]
+.    nr doc-reg-drgv +1
+.  \}
+.
+.  nr doc-book-count \n[doc-book-count-saved]
+.  ds doc-book-name "\*[doc-book-name-saved]
+.  nr doc-city-count \n[doc-city-count-saved]
+.  ds doc-city-name "\*[doc-city-name-saved]
+.  nr doc-date-count \n[doc-date-count-saved]
+.  ds doc-date "\*[doc-date-saved]
+.  nr doc-publisher-count \n[doc-publisher-count-saved]
+.  ds doc-publisher-name "\*[doc-publisher-name-saved]
+.  nr doc-journal-count \n[doc-journal-count-saved]
+.  ds doc-journal-name "\*[doc-journal-name-saved]
+.  nr doc-issue-count \n[doc-issue-count-saved]
+.  ds doc-issue-name "\*[doc-issue-name-saved]
+.  nr doc-optional-count \n[doc-optional-count-saved]
+.  ds doc-optional-string "\*[doc-optional-string-saved]
+.  nr doc-page-number-count \n[doc-page-number-count-saved]
+.  ds doc-page-number-string "\*[doc-page-number-string-saved]
+.  nr doc-corporate-count \n[doc-corporate-count-saved]
+.  ds doc-corporate-name "\*[doc-corporate-name-saved]
+.  nr doc-report-count \n[doc-report-count-saved]
+.  ds doc-report-name "\*[doc-report-name-saved]
+.  nr doc-reference-title-count \n[doc-reference-title-count-saved]
+.  ds doc-reference-title-name "\*[doc-reference-title-name-saved]
+.  ds doc-reference-title-name-for-book "\*[doc-reference-title-name-for-book-saved]
+.  nr doc-url-count \n[doc-url-count-saved]
+.  ds doc-url-name "\*[doc-url-name-saved]
+.  nr doc-volume-count \n[doc-volume-count-saved]
+.  ds doc-volume-name "\*[doc-volume-name-saved]
+.  nr doc-have-author \n[doc-have-author-saved]
+.
+.  ds doc-document-title "\*[doc-document-title-saved]
+.  ds doc-volume "\*[doc-volume-saved]
+.  ds doc-section "\*[doc-section-saved]
+.  ds doc-operating-system "\*[doc-operating-system-saved]
+.  ds doc-date-string "\*[doc-date-string-saved]
+.  nr doc-header-space \n[doc-header-space-saved]
+.  nr doc-footer-space \n[doc-footer-space-saved]
+.  nr doc-display-vertical \n[doc-display-vertical-saved]
+.  ds doc-header-string "\*[doc-header-string-saved]
+.  nr doc-in-see-also-section \n[doc-in-see-also-section-saved]
+.  nr doc-in-files-section \n[doc-in-files-section-saved]
+.  nr doc-in-authors-section \n[doc-in-authors-section-saved]
+..
+.
+.
+.\" NS El user macro
+.\" NS   end list
+.\" NS
+.\" NS modifies:
+.\" NS   doc-list-depth
+.\" NS   doc-macro-name
+.\" NS
+.\" NS local variables:
+.\" NS   doc-str-El
+.\" NS
+.\" NS width register `El' set in doc-common
+.
+.de El
+.  if \n[.$] \{\
+.    tm Usage: .El (does not take arguments) (#\n[.c])
+.    return
+.  \}
+.
+.  ds doc-macro-name El
+.  ds doc-str-El \*[doc-list-type-stack\n[doc-list-depth]]
+.
+.  ie        "\*[doc-str-El]"diag-list" \
+.    doc-end-list 0
+.  el \{ .ie "\*[doc-str-El]"column-list" \
+.    doc-end-column-list
+.  el \{ .ie "\*[doc-str-El]"item-list" \
+.    doc-end-list 0
+.  el \{ .ie "\*[doc-str-El]"ohang-list" \
+.    doc-end-list 0
+.  el \{ .ie "\*[doc-str-El]"inset-list" \
+.    doc-end-list 0
+.  el \
+.    doc-end-list 1
+.  \}\}\}\}
+.
+.  br
+..
+.
+.
+.\" NS doc-saved-Pa-font global string
+.\" NS   saved doc-Pa-font string for section FILES (no underline if
+.\" NS   nroff)
+.
+.ds doc-saved-Pa-font
+.
+.
+.\" NS doc-curr-type global register
+.\" NS   current argument type
+.
+.nr doc-curr-type 0
+.
+.
+.\" NS doc-curr-arg global string
+.\" NS   current argument
+.
+.ds doc-curr-arg
+.
+.
+.\" NS doc-item-boxXXX global box
+.\" NS   item boxes associated list depth
+.\" NS
+.\" NS limit:
+.\" NS   doc-list-depth
+.
+.
+.\" NS It user macro
+.\" NS   list item
+.\" NS
+.\" NS modifies:
+.\" NS   doc-arg-ptr
+.\" NS   doc-argXXX
+.\" NS   doc-curr-arg
+.\" NS   doc-curr-type
+.\" NS   doc-in-list
+.\" NS   doc-macro-name
+.\" NS   doc-num-args
+.\" NS   doc-saved-Pa-font
+.\" NS
+.\" NS local variables:
+.\" NS   doc-reg-It
+.\" NS   doc-str-It
+.\" NS   doc-XXX-list-type
+.\" NS
+.\" NS width register `It' set in doc-common
+.
+.nr doc-bullet-list-type 1
+.nr doc-column-list-type 0
+.nr doc-dash-list-type 1
+.nr doc-diag-list-type 0
+.nr doc-enum-list-type 1
+.nr doc-hang-list-type 2
+.nr doc-inset-list-type 2
+.nr doc-item-list-type 1
+.nr doc-ohang-list-type 2
+.nr doc-tag-list-type 2
+.
+.de It
+.  ds doc-str-It \*[doc-list-type-stack\n[doc-list-depth]]
+.
+.  if "\*[doc-str-It]"" \
+.    tm mdoc error: .It without preceding .Bl (#\n[.c])
+.
+.  if \n[doc-nesting-level] \{\
+.    tmc "mdoc error: .It found in enclosing (e.g. .Ac ... .It ... .Ao)
+.    tm1 " (#\n[.c])
+.  \}
+.
+.  br
+.  if !\n[cR] \
+.    ne 3v
+.
+.  if \n[.$] \{\
+.    ds doc-macro-name It
+.
+.    \" fill argument vector
+.    nr doc-reg-It 1
+.    while (\n[doc-reg-It] <= \n[.$]) \{\
+.      ds doc-arg\n[doc-reg-It] "\$[\n[doc-reg-It]]
+.      nr doc-reg-It +1
+.    \}
+.
+.    nr doc-num-args \n[.$]
+.    nr doc-arg-ptr 0
+.  \}
+.
+.  nr doc-reg-It \n[doc-\*[doc-str-It]-type]
+.
+.  if \n[doc-reg-It] \{\
+.    \" start item box
+.    box doc-item-box\n[doc-list-depth]
+.    ev doc-item-env\n[doc-list-depth]
+.    evc 0
+.    in 0
+.    nf
+.  \}
+.
+.  ie (\n[doc-reg-It] == 1) \{\
+.    if \n[.$] \{\
+.      tm1 "mdoc warning: .It macros in lists of type `\*[doc-str-It]'
+.      tm1 "              don't take arguments (#\n[.c])
+.  \}\}
+.  el \{\
+.    ie \n[.$] \{\
+.      if (\n[doc-reg-It] == 2) \{\
+.        \" handle list types with arguments
+.        doc-parse-arg-vector
+.
+.        nr doc-in-list 1
+.        nr doc-arg-ptr 1
+.        nr doc-curr-type \n[doc-type1]
+.        ds doc-curr-arg "\*[doc-arg1]
+.
+.        if \n[doc-in-files-section] \{\
+.          ds doc-saved-Pa-font "\*[doc-Pa-font]
+.          if n \
+.            ds doc-Pa-font "\*[doc-No-font]
+.        \}
+.
+.        ie (\n[doc-type1] == 1) \
+.          \*[doc-arg1]
+.        el \{\
+.          nr doc-arg-ptr 1
+.          doc-print-recursive
+.    \}\}\}
+.    el \{\
+.      tm1 "mdoc warning: .It macros in lists of type `\*[doc-str-It]'
+.      tm1 "              require arguments (#\n[.c])
+.    \}
+.  \}
+.
+.  \" the previous call of `.doc-print-recursive' can contain calls to
+.  \" opening macros like `.Ao'; we then defer the call of `doc-xxx-list'
+.  if !\n[doc-nesting-level] \
+.    doc-\*[doc-str-It]
+..
+.
+.
+.\" NS doc-inset-list macro
+.\" NS   .It item of list-type inset
+.\" NS
+.\" NS modifies:
+.\" NS   doc-in-list
+.
+.de doc-inset-list
+.  \" finish item box
+.  br
+.  ev
+.  box
+.  unformat doc-item-box\n[doc-list-depth]
+.
+.  doc-set-vertical-and-indent 0
+.  br
+.
+.  nh
+.  doc-item-box\n[doc-list-depth]
+.
+.  if \n[doc-in-files-section] \
+.    if n \
+.      ds doc-Pa-font "\*[doc-saved-Pa-font]
+.
+.  nr doc-in-list 0
+.  doc-reset-args
+..
+.
+.
+.\" NS doc-hang-list macro
+.\" NS   .It item of list-type hanging tag (as opposed to tagged)
+.\" NS
+.\" NS modifies:
+.\" NS   doc-have-space
+.\" NS   doc-in-list
+.\" NS
+.\" NS local variables:
+.\" NS   doc-reg-dhl
+.\" NS   doc-reg-dhl1
+.
+.de doc-hang-list
+.  \" finish item box
+.  br
+.  ev
+.  box
+.  unformat doc-item-box\n[doc-list-depth]
+.
+.  doc-set-vertical-and-indent 1
+.  nr doc-reg-dhl (\n[doc-list-indent-stack\n[doc-list-depth]]u + \n[doc-digit-width]u)
+.  ti -\n[doc-reg-dhl]u
+.
+.  nh
+.  ie (\n[dl]u > \n[doc-list-indent-stack\n[doc-list-depth]]u) \
+.    doc-item-box\n[doc-list-depth]
+.  el \{\
+.    chop doc-item-box\n[doc-list-depth]
+.    nr doc-reg-dhl1 \n[.k]u
+.    nop \*[doc-item-box\n[doc-list-depth]]\c
+.    nop \h'|(\n[doc-reg-dhl1]u - \n[.k]u + \n[doc-reg-dhl]u)'\c
+.    nr doc-have-space 1
+.  \}
+.
+.  if \n[doc-in-files-section] \
+.    if n \
+.      ds doc-Pa-font "\*[doc-saved-Pa-font]
+.
+.  nr doc-in-list 0
+.  doc-reset-args
+..
+.
+.
+.\" NS doc-ohang-list macro
+.\" NS   .It item of list-type overhanging tag
+.\" NS
+.\" NS modifies:
+.\" NS   doc-in-list
+.
+.de doc-ohang-list
+.  \" finish item box
+.  br
+.  ev
+.  box
+.  unformat doc-item-box\n[doc-list-depth]
+.
+.  doc-set-vertical-and-indent 0
+.  nh
+.  doc-item-box\n[doc-list-depth]
+.  br
+.
+.  if \n[doc-in-files-section] \
+.    if n \
+.      ds doc-Pa-font "\*[doc-saved-Pa-font]
+.
+.  nr doc-in-list 0
+.  doc-reset-args
+..
+.
+.
+.\" NS doc-item-list macro
+.\" NS   .It item of list-type [empty tag]
+.
+.de doc-item-list
+.  \" finish (dummy) item box
+.  br
+.  ev
+.  box
+.
+.  doc-set-vertical-and-indent 0
+.  br
+.
+.  doc-reset-args
+..
+.
+.
+.\" NS doc-enum-list-count-stackXXX global register
+.\" NS   stack of current enum count values
+.\" NS
+.\" NS limit:
+.\" NS   doc-list-depth
+.
+.nr doc-enum-list-count-stack1 0
+.
+.
+.\" NS doc-enum-list macro
+.\" NS   enumerated list
+.\" NS
+.\" NS modifies:
+.\" NS   doc-enum-list-count-stackXXX
+.\" NS   doc-in-list
+.
+.de doc-enum-list
+.  nr doc-in-list 1
+.  nr doc-enum-list-count-stack\n[doc-list-depth] +1
+\# XXX
+\#.ll \n[doc-list-indent-stack\n[doc-list-depth]]u
+\#.rj
+.  nop \*[doc-tag-prefix-stack\n[doc-list-depth]]\c
+.  nop \n[doc-enum-list-count-stack\n[doc-list-depth]].\&
+.  doc-do-list
+..
+.
+.
+.\" NS doc-bullet-list macro
+.\" NS   bullet paragraph list
+.\" NS
+.\" NS modifies:
+.\" NS   doc-in-list
+.
+.de doc-bullet-list
+.  nr doc-in-list 1
+.  nop \)\*[doc-Sy-font]\[bu]\f[]
+.  doc-do-list
+..
+.
+.
+.\" NS doc-dash-list macro
+.\" NS   hyphen paragraph list (sub bullet list)
+.\" NS
+.\" NS modifies:
+.\" NS   doc-in-list
+.
+.de doc-dash-list
+.  nr doc-in-list 1
+.  nop \)\*[doc-Sy-font]\-\f[]
+.  doc-do-list
+..
+.
+.
+.\" NS doc-do-list macro
+.\" NS   .It item of list-type enum/bullet/hyphen
+.
+.als doc-do-list doc-hang-list
+.
+.
+.\" NS doc-diag-list-input-line-count global register
+.\" NS   saved line number to be checked in next diag-list item
+.
+.nr doc-diag-list-input-line-count 0
+.
+.
+.\" NS doc-diag-list macro
+.\" NS   .It item of list-type diagnostic-message
+.\" NS
+.\" NS modifies:
+.\" NS   doc-curr-font
+.\" NS   doc-curr-size
+.\" NS   doc-diag-list-input-line-count
+.
+.de doc-diag-list
+.  nr doc-curr-font \n[.f]
+.  nr doc-curr-size \n[.ps]
+.
+.  ie ((\n[.c] - \n[doc-diag-list-input-line-count]) > 1) \{\
+.    ie !\n[doc-compact-list-stack\n[doc-list-depth]] \
+.      doc-paragraph
+.    el \
+.      br
+.  \}
+.  el \
+.    br
+.  nr doc-diag-list-input-line-count \n[.c]
+.
+.  nh
+.  nop \*[doc-Sy-font]\c
+.  if \n[doc-num-args] \
+.    doc-remaining-args
+.  nop \f[\n[doc-curr-font]]\s[\n[doc-curr-size]u]\*[doc-hard-space]\c
+.
+.  doc-print-and-reset
+..
+.
+.
+.\" NS doc-tag-list macro
+.\" NS   .It item of list-type `tag'
+.\" NS
+.\" NS modifies:
+.\" NS   doc-have-space
+.\" NS   doc-in-list
+.\" NS
+.\" NS local variables:
+.\" NS   doc-box-dtl
+.\" NS   doc-reg-dtl
+.\" NS   doc-reg-dtl1
+.
+.de doc-tag-list
+.  \" finish item box
+.  br
+.  ev
+.  box
+.  unformat doc-item-box\n[doc-list-depth]
+.
+.  \" we use a box without `.nf' to compute the tag width (via `dl' register)
+.  box doc-box-dtl
+.  ev doc-env-dtl
+.  evc 0
+.  fi
+.  ad 0
+.  in 0
+.  doc-item-box\n[doc-list-depth]
+.  br
+.  ev
+.  box
+.
+.  if !"TagwidtH"\*[doc-tag-width-stack\n[doc-list-depth]]" \{\
+.    if !\n[doc-list-have-indent-stack\n[doc-list-depth]] \{\
+.      in -(\n[doc-list-indent-stack\n[doc-list-depth]]u + \n[doc-digit-width]u)
+.      nr doc-list-have-indent-stack\n[doc-list-depth] 1
+.    \}
+.    doc-get-tag-width
+.  \}
+.  doc-set-vertical-and-indent 1
+.  nr doc-reg-dtl (\n[doc-list-indent-stack\n[doc-list-depth]]u + \n[doc-digit-width]u)
+.  ti -\n[doc-reg-dtl]u
+.
+.  nh
+.  doc-item-box\n[doc-list-depth]
+.  ie (\n[dl]u > \n[doc-list-indent-stack\n[doc-list-depth]]u) \
+.    br
+.  el \{\
+.    \" format the tag separately to prevent stretching of spaces
+.    vpt 0
+.    br
+.    sp -1
+.    vpt 1
+.    nop \&\c
+.    nr doc-have-space 1
+.  \}
+.
+.  if \n[doc-in-files-section] \
+.    if n \
+.      ds doc-Pa-font "\*[doc-saved-Pa-font]
+.
+.  nr doc-in-list 0
+.  doc-reset-args
+..
+.
+.
+.\" NS doc-get-tag-width macro
+.\" NS   resolve unknown tag width (`tag' list-type only)
+.\" NS
+.\" NS modifies:
+.\" NS   doc-list-indent-stackXXX
+.\" NS   doc-tag-width-stackXXX
+.\" NS
+.\" NS requires:
+.\" NS   doc-curr-arg
+.\" NS   doc-curr-type
+.
+.de doc-get-tag-width
+.  ie (\n[doc-curr-type] == 1) \{\
+.    ds doc-tag-width-stack\n[doc-list-depth] \*[doc-curr-arg]
+.    nr doc-list-indent-stack\n[doc-list-depth] \n[\*[doc-curr-arg]]
+.  \}
+.  el \{\
+.    ds doc-tag-width-stack\n[doc-list-depth] No
+.    nr doc-list-indent-stack\n[doc-list-depth] \n[No]
+.  \}
+..
+.
+.
+.\" NS doc-set-vertical-and-indent macro
+.\" NS   set up vertical spacing (if not compact) and indentation (with
+.\" NS   offset if argument is non-zero)
+.\" NS
+.\" NS modifies:
+.\" NS   doc-list-have-indent-stackXXX
+.
+.de doc-set-vertical-and-indent
+.  if !\n[doc-compact-list-stack\n[doc-list-depth]] \
+.    sp \n[doc-display-vertical]u
+.
+.  if \n[doc-list-have-indent-stack\n[doc-list-depth]] \{\
+.    nr doc-list-have-indent-stack\n[doc-list-depth] 0
+.    if \$1 \
+.      in +(\n[doc-list-indent-stack\n[doc-list-depth]]u + \n[doc-digit-width]u)
+.  \}
+.
+.  if !\n[cR] \
+.    ne 2v
+..
+.
+.
+.\" NS doc-list-depth global register
+.\" NS   list type stack counter
+.
+.nr doc-list-depth 0
+.
+.
+.\" NS doc-num-columns global register
+.\" NS   number of columns
+.
+.nr doc-num-columns 0
+.
+.
+.\" NS doc-compact-list-stackXXX global register (bool)
+.\" NS   stack of flags to indicate whether a particular list is compact
+.\" NS
+.\" NS limit:
+.\" NS   doc-list-depth
+.
+.nr doc-compact-list-stack1 0
+.
+.
+.\" NS doc-tag-prefix-stackXXX global string
+.\" NS   stack of tag prefixes (currently used for -nested -enum lists)
+.\" NS
+.\" NS limit:
+.\" NS   doc-list-depth
+.
+.ds doc-tag-prefix-stack1
+.
+.
+.\" NS doc-tag-width-stackXXX global string
+.\" NS   stack of strings indicating how to set up current element of
+.\" NS   doc-list-indent-stackXXX -- if set to TagwidtH, user has set it
+.\" NS   directly; if it is a macro name, use the macro's width value;
+.\" NS   otherwise, `doc-get-tag-width' uses width value of `No'.
+.\" NS
+.\" NS limit:
+.\" NS   doc-list-depth
+.
+.ds doc-tag-width-stack0
+.ds doc-tag-width-stack1
+.
+.
+.\" NS doc-list-offset-stackXXX global register
+.\" NS   stack of list offsets
+.\" NS
+.\" NS limit:
+.\" NS   doc-list-depth
+.
+.nr doc-list-offset-stack1 0
+.
+.
+.\" NS doc-end-list macro
+.\" NS   list end function; resets indentation (and offset if argument is
+.\" NS   non-zero)
+.\" NS
+.\" NS modifies:
+.\" NS   doc-list-depth
+.\" NS   doc-list-offset-stackXXX
+.
+.de doc-end-list
+.  if \$1 \
+'    in -(\n[doc-list-indent-stack\n[doc-list-depth]]u + \n[doc-digit-width]u)
+.
+'  in -\n[doc-list-offset-stack\n[doc-list-depth]]u
+.
+.  if (\n[doc-list-depth] <= 0) \
+.    tm mdoc warning: extraneous .El call (#\n[.c])
+.
+.  doc-decrement-list-stack
+.  nr doc-list-depth -1
+..
+.
+.
+.\" NS doc-increment-list-stack macro
+.\" NS   set up next block for list
+.\" NS
+.\" NS modifies:
+.\" NS   doc-compact-list-stackXXX
+.\" NS   doc-list-have-indent-stackXXX
+.\" NS   doc-list-indent-stackXXX
+.\" NS   doc-list-offset-stackXXX
+.\" NS   doc-list-type-stackXXX
+.\" NS   doc-tag-prefix-stackXXX
+.\" NS   doc-tag-width-stackXXX
+.\" NS   doc-enum-list-count-stackXXX
+.\" NS
+.\" NS local variables:
+.\" NS   doc-reg-dils
+.
+.de doc-increment-list-stack
+.  nr doc-reg-dils (\n[doc-list-depth] + 1)
+.  nr doc-list-have-indent-stack\n[doc-reg-dils] 0
+.  nr doc-list-indent-stack\n[doc-reg-dils] 0
+.  nr doc-list-offset-stack\n[doc-reg-dils] 0
+.  ds doc-tag-prefix-stack\n[doc-reg-dils]
+.  ds doc-tag-width-stack\n[doc-reg-dils] \*[doc-tag-width-stack\n[doc-list-depth]]
+.  ds doc-list-type-stack\n[doc-reg-dils]
+.  nr doc-compact-list-stack\n[doc-reg-dils] 0
+.  nr doc-enum-list-count-stack\n[doc-reg-dils] 0
+..
+.
+.
+.\" NS doc-decrement-list-stack macro
+.\" NS   decrement stack
+.\" NS
+.\" NS modifies:
+.\" NS   doc-compact-list-stackXXX
+.\" NS   doc-list-have-indent-stackXXX
+.\" NS   doc-list-indent-stackXXX
+.\" NS   doc-list-offset-stackXXX
+.\" NS   doc-list-type-stackXXX
+.\" NS   doc-tag-prefix-stackXXX
+.\" NS   doc-tag-width-stackXXX
+.\" NS   doc-enum-list-count-stackXXX
+.
+.de doc-decrement-list-stack
+.  ds doc-list-type-stack\n[doc-list-depth]
+.  nr doc-list-have-indent-stack\n[doc-list-depth] 0
+.  nr doc-list-indent-stack\n[doc-list-depth] 0
+.  nr doc-list-offset-stack\n[doc-list-depth] 0
+.  ds doc-tag-prefix-stack\n[doc-list-depth]
+.  ds doc-tag-width-stack\n[doc-list-depth]
+.  nr doc-compact-list-stack\n[doc-list-depth] 0
+.  nr doc-enum-list-count-stack\n[doc-list-depth] 0
+..
+.
+.
+.\" NS Xr user macro
+.\" NS   cross reference (for man pages only)
+.\" NS
+.\" NS modifies:
+.\" NS   doc-arg-ptr
+.\" NS   doc-macro-name
+.\" NS
+.\" NS local variables:
+.\" NS   doc-reg-Xr
+.\" NS
+.\" NS width register `Xr' set in doc-common
+.
+.de Xr
+.  if !\n[doc-arg-limit] \{\
+.    ie \n[.$] \{\
+.      ds doc-macro-name Xr
+.      doc-parse-args \$@
+.    \}
+.    el \
+.      doc-Xr-usage
+.  \}
+.
+.  if !\n[doc-arg-limit] \
+.    return
+.
+.  nr doc-arg-ptr +1
+.  doc-print-prefixes
+.  ie (\n[doc-arg-limit] >= \n[doc-arg-ptr]) \{\
+.    \" first argument must be a string
+.    ie (\n[doc-type\n[doc-arg-ptr]] == 2) \{\
+.      nr doc-curr-font \n[.f]
+.      nr doc-curr-size \n[.ps]
+.      ds doc-arg\n[doc-arg-ptr] \*[doc-Xr-font]\*[doc-arg\n[doc-arg-ptr]]\f[]\s[0]
+.
+.      if (\n[doc-arg-limit] > \n[doc-arg-ptr]) \{\
+.        nr doc-reg-Xr (\n[doc-arg-ptr] + 1)
+.        \" modify second argument if it is a string and
+.        \" remove space in between
+.        if (\n[doc-type\n[doc-reg-Xr]] == 2) \{\
+.          ds doc-arg\n[doc-reg-Xr] \*[lp]\*[doc-arg\n[doc-reg-Xr]]\*[rp]
+.          ds doc-space\n[doc-arg-ptr]
+.        \}
+.      \}
+.      doc-print-recursive
+.    \}
+.    el \
+.      doc-Xr-usage
+.  \}
+.  el \
+.    doc-Xr-usage
+..
+.
+.
+.\" NS doc-Xr-usage macro
+.
+.de doc-Xr-usage
+.  tm Usage: .Xr manpage_name [section#] ... (#\n[.c])
+.  doc-reset-args
+..
+.
+.
+.\" NS Sx user macro
+.\" NS   cross section reference
+.\" NS
+.\" NS width register `Sx' set in doc-common
+.
+.als Sx doc-generic-macro
+.ds doc-Sx-usage section_header
+.
+.
+.\" NS doc-end-column-list macro
+.\" NS   column-list end-list
+.\" NS
+.\" NS modifies:
+.\" NS   doc-list-depth
+.
+.de doc-end-column-list
+.  linetabs 0
+'  in -(\n[doc-list-offset-stack\n[doc-list-depth]]u + \n[doc-list-indent-stack\n[doc-list-depth]]u)
+.  ta T .5i
+.  fi
+.  doc-decrement-list-stack
+.  nr doc-list-depth -1
+..
+.
+.
+.\" NS doc-column-indent-width global register
+.\" NS   holds the indent width for a column list
+.
+.nr doc-column-indent-width 0
+.
+.
+.\" NS doc-set-column-tab macro
+.\" NS   establish tabs for list-type column: `.doc-set-column-tab num_cols'
+.\" NS
+.\" NS modifies:
+.\" NS   doc-column-indent-width
+.\" NS
+.\" NS local variables:
+.\" NS   doc-reg-dsct
+.\" NS   doc-str-dsct
+.\" NS   doc-str-dsct1
+.
+.de doc-set-column-tab
+.  ds doc-str-dsct
+.  nr doc-reg-dsct 1
+.  nr doc-column-indent-width 0
+.
+.  ie (\$1 < 5) \
+.    ds doc-str-dsct1 "    \"
+.  el \{\
+.    ie (\$1 == 5) \
+.      ds doc-str-dsct1 "   \"
+.    el \{\
+.      \" XXX: this is packed abnormally close -- intercolumn width
+.      \"      should be configurable
+.      ds doc-str-dsct1 " \"
+.  \}\}
+.
+.  while (\n[doc-reg-dsct] <= \$1) \{\
+.    as doc-str-dsct " +\w\*[doc-arg\n[doc-reg-dsct]]\*[doc-str-dsct1]u
+.    nr doc-column-indent-width +\w\*[doc-arg\n[doc-reg-dsct]]\*[doc-str-dsct1]u
+.    nr doc-reg-dsct +1
+.  \}
+.
+.  ta \*[doc-str-dsct]
+'  in +\n[doc-column-indent-width]u
+..
+.
+.
+.\" NS doc-column-list macro
+.\" NS   column items
+.\" NS
+.\" NS modifies:
+.\" NS   doc-arg-ptr
+.\" NS   doc-list-indent-stackXXX
+.\" NS   doc-spaceXXX
+.\" NS
+.\" NS local variables:
+.\" NS   doc-reg-dcl
+.
+.de doc-column-list
+.  if \n[doc-num-args] \
+.    doc-parse-arg-vector
+.  nr doc-arg-ptr +1
+.
+.  if (\n[doc-arg-limit] < \n[doc-arg-ptr]) \{\
+.    tm Usage: .It column_string [Ta [column_string ...] ] (#\n[.c])
+.    return
+.  \}
+.
+.  if "\*[doc-arg\n[doc-arg-ptr]]"Ta" \{\
+.    nr doc-reg-dcl (\n[doc-arg-ptr] - 1)
+.    ds doc-space\n[doc-reg-dcl]
+.  \}
+.
+.  if !\n[doc-list-indent-stack\n[doc-list-depth]] \
+.    nr doc-list-indent-stack\n[doc-list-depth] \n[doc-column-indent-width]u
+.  if !\n[.u] \{\
+.    fi
+.    in +\n[doc-column-indent-width]u
+.  \}
+.  ti -\n[doc-column-indent-width]u
+.
+.  doc-do-\n[doc-type\n[doc-arg-ptr]]
+..
+.
+.
+.\" NS Ta user macro
+.\" NS   append tab (\t)
+.\" NS
+.\" NS modifies:
+.\" NS   doc-arg-ptr
+.\" NS
+.\" NS width register `Ta' set in doc-common
+.
+.de Ta
+.  ie \n[doc-arg-limit] \{\
+.    nr doc-arg-ptr +1
+.    nop \*[doc-tab]\c
+.    ie (\n[doc-arg-limit] >= \n[doc-arg-ptr]) \
+.      doc-do-\n[doc-type\n[doc-arg-ptr]]
+.    el \
+.      doc-reset-args
+.  \}
+.  el \{\
+.    tm1 "Usage: Ta must follow column entry: e.g.
+.    tm1 "         .It column_string [Ta [column_string ...]] (#\n[.c])
+.  \}
+..
+.
+.
+.\" NS Dl user macro
+.\" NS   display (one line) literal
+.\" NS
+.\" NS   this function uses the `Li' font
+.\" NS
+.\" NS modifies:
+.\" NS   doc-arg-ptr
+.\" NS   doc-curr-font
+.\" NS   doc-curr-size
+.\" NS   doc-macro-name
+.\" NS
+.\" NS width register `Dl' set in doc-common
+.
+.de Dl
+.  ta T .5i
+.  in +\n[doc-display-indent]u
+.
+.  ie \n[doc-arg-limit] \{\
+.    tm Usage: .Dl not callable by other macros (#\n[.c])
+.    doc-reset-args
+.  \}
+.  el \{\
+.    ie \n[.$] \{\
+.      ds doc-macro-name Dl
+.      doc-parse-args \$@
+.      nr doc-arg-ptr 1
+.      nr doc-curr-font \n[.f]
+.      nr doc-curr-size \n[.ps]
+.      nop \*[doc-Li-font]\c
+.      doc-print-recursive
+.    \}
+.    el \
+.      tm Usage: .Dl argument ... (#\n[.c])
+.  \}
+.
+.  in -\n[doc-display-indent]u
+..
+.
+.
+.\" NS D1 user macro
+.\" NS   display (one line)
+.\" NS
+.\" NS modifies:
+.\" NS   doc-arg-ptr
+.\" NS   doc-macro-name
+.\" NS
+.\" NS width register `D1' set in doc-common
+.
+.de D1
+.  ta T .5i
+.  in +\n[doc-display-indent]u
+.
+.  ie \n[doc-arg-limit] \{\
+.    tm Usage: .D1 not callable by other macros (#\n[.c])
+.    doc-reset-args
+.  \}
+.  el \{\
+.    ie \n[.$] \{\
+.      ds doc-macro-name D1
+.      doc-parse-args \$@
+.      nr doc-arg-ptr 1
+.      doc-print-recursive
+.    \}
+.    el \
+.      tm Usage: .D1 argument ... (#\n[.c])
+.  \}
+.
+.  in -\n[doc-display-indent]u
+..
+.
+.
+.\" NS Vt user macro
+.\" NS   variable type (for forcing old style variable declarations);
+.\" NS   this is not done in the same manner as .Ot for fortrash --
+.\" NS   clean up later
+.\" NS
+.\" NS modifies:
+.\" NS   doc-curr-font
+.\" NS   doc-curr-size
+.\" NS   doc-have-decl
+.\" NS   doc-have-var
+.\" NS   doc-macro-name
+.\" NS
+.\" NS width register `Vt' set in doc-common
+.
+.de Vt
+.  if !\n[doc-arg-limit] \{\
+.    ie \n[.$] \{\
+.      ds doc-macro-name Vt
+.      doc-parse-args \$@
+.    \}
+.    el \
+.      tm Usage: .Vt variable_type ... (#\n[.c])
+.  \}
+.
+.  if !\n[doc-arg-limit] \
+.    return
+.
+.  nr doc-arg-ptr +1
+.  if (\n[doc-arg-limit] < \n[doc-arg-ptr]) \{\
+.    tm Usage: .Vt variable_type ... (#\n[.c])
+.    doc-reset-args
+.    return
+.  \}
+.
+.  if \n[doc-in-synopsis-section] \{\
+.    \" if a function declaration was the last thing given,
+.    \" want vertical space
+.    if \n[doc-have-decl] \{\
+.      doc-paragraph
+.      nr doc-have-decl 0
+.    \}
+.
+.    \" if a subroutine was the last thing given, want vertical space
+.    if \n[doc-have-func] \{\
+.      ie \n[doc-have-var] \
+.        br
+.      el \
+.        doc-paragraph
+.    \}
+.
+.    nr doc-have-var 1
+.  \}
+.
+.  nr doc-curr-font \n[.f]
+.  nr doc-curr-size \n[.ps]
+.  nop \*[doc-Ft-font]\c
+.  doc-print-recursive
+.
+.  if \n[doc-in-synopsis-section] \{\
+.    ie \n[doc-have-old-func] \
+.      nop \*[doc-soft-space]\c
+.    el \
+.      br
+.  \}
+..
+.
+.
+.\" NS doc-is-func global register (bool)
+.\" NS   set if subroutine (in synopsis only) (fortran only)
+.
+.nr doc-is-func 0
+.
+.
+.\" NS Ft user macro
+.\" NS   function type
+.\" NS
+.\" NS modifies:
+.\" NS   doc-curr-font
+.\" NS   doc-curr-size
+.\" NS   doc-have-decl
+.\" NS   doc-have-var
+.\" NS   doc-is-func
+.\" NS   doc-macro-name
+.\" NS
+.\" NS width register `Ft' set in doc-common
+.
+.de Ft
+.  if !\n[doc-arg-limit] \{\
+.    ie \n[.$] \{\
+.      ds doc-macro-name Ft
+.      doc-parse-args \$@
+.    \}
+.    el \
+.      tm Usage: .Ft function_type ... (#\n[.c])
+.  \}
+.
+.  if !\n[doc-arg-limit] \
+.    return
+.
+.  nr doc-arg-ptr +1
+.  if (\n[doc-arg-limit] < \n[doc-arg-ptr]) \{\
+.    tm Usage: .Ft function_type ... (#\n[.c])
+.    doc-reset-args
+.    return
+.  \}
+.
+.  if \n[doc-in-synopsis-section] \{\
+.    if (\n[doc-have-func] : \n[doc-have-decl]) \{\
+.      doc-paragraph
+.      nr doc-have-decl 0
+.      nr doc-have-var 0
+.    \}
+.
+.    if \n[doc-have-var] \{\
+.      doc-paragraph
+.      nr doc-have-var 0
+.    \}
+.
+.    nr doc-is-func 1
+.  \}
+.
+.  nr doc-curr-font \n[.f]
+.  nr doc-curr-size \n[.ps]
+.  nop \*[doc-Ft-font]\c
+.  doc-print-recursive
+..
+.
+.
+.\" NS doc-have-old-func global register (bool)
+.\" NS   set if `Ot' has been called
+.
+.nr doc-have-old-func 0
+.
+.
+.\" NS Ot user macro
+.\" NS   old function type (fortran -- no newline)
+.\" NS
+.\" NS modifies:
+.\" NS   doc-have-decl
+.\" NS   doc-have-old-func
+.\" NS   doc-have-var
+.\" NS   doc-is-func
+.\" NS
+.\" NS width register `Ot' set in doc-common
+.
+.de Ot
+.  nr doc-have-old-func 1
+.
+.  if \n[doc-in-synopsis-section] \{\
+.    if (\n[doc-have-func] : \n[doc-have-decl]) \{\
+.      doc-paragraph
+.      nr doc-have-decl 0
+.      nr doc-have-var 0
+.    \}
+.
+.    if \n[doc-have-var] \{\
+.      doc-paragraph
+.      nr doc-have-var 0
+.    \}
+.
+.    nr doc-is-func 1
+.  \}
+.
+.  if \n[.$] \
+.    nop \*[doc-Ft-font]\$*\c
+.  nop \ \f[]\c
+..
+.
+.
+.\" NS Fa user macro
+.\" NS   function arguments
+.\" NS
+.\" NS modifies:
+.\" NS   doc-arg-ptr
+.\" NS   doc-curr-font
+.\" NS   doc-curr-size
+.\" NS   doc-macro-name
+.\" NS
+.\" NS width register `Fa' set in doc-common
+.
+.de Fa
+.  if !\n[doc-arg-limit] \{\
+.    ie \n[.$] \{\
+.      ds doc-macro-name Fa
+.      doc-parse-args \$@
+.    \}
+.    el \
+.      tm Usage: .Fa function_arguments ... (#\n[.c])
+.  \}
+.
+.  ie \n[doc-func-arg-count] \
+.    doc-do-func
+.  el \{\
+.    nr doc-arg-ptr +1
+.    if (\n[doc-arg-limit] >= \n[doc-arg-ptr]) \{\
+.      nr doc-curr-font \n[.f]
+.      nr doc-curr-size \n[.ps]
+.      nop \*[doc-Fa-font]\c
+.      doc-print-recursive
+.
+.      if \n[doc-in-synopsis-section] \
+.        if \n[doc-have-func] \
+.          br
+.  \}\}
+..
+.
+.
+.\" NS doc-func-arg-count global register
+.\" NS   how many function arguments have been processed so far
+.
+.nr doc-func-arg-count 0
+.
+.
+.\" NS doc-func-arg global string
+.\" NS   work buffer for function name strings
+.
+.ds doc-func-arg
+.
+.
+.\" NS doc-num-func-args global register
+.\" NS   number of function arguments
+.
+.nr doc-num-func-args 0
+.
+.
+.\" NS doc-func-args-processed global register
+.\" NS   function arguments processed so far
+.
+.nr doc-func-args-processed 0
+.
+.
+.\" NS doc-do-func macro
+.\" NS   internal .Fa for .Fc
+.\" NS
+.\" NS modifies:
+.\" NS   doc-arg-ptr
+.\" NS   doc-argXXX
+.\" NS   doc-func-arg
+.\" NS   doc-func-arg-count
+.\" NS   doc-func-args-processed
+.\" NS   doc-num-func-args
+.
+.de doc-do-func
+.  if (\n[doc-arg-limit] <= \n[doc-arg-ptr]) \{\
+.    doc-reset-args
+.    return
+.  \}
+.
+.  nr doc-arg-ptr +1
+.
+.  ds doc-func-arg
+.  nr doc-num-func-args 0
+.  nr doc-func-args-processed 0
+.
+.  doc-build-func-string \*[doc-arg\n[doc-arg-ptr]]
+.  if (\n[doc-num-func-args] > 1) \
+.    ds doc-arg\n[doc-arg-ptr] "\*[doc-func-arg]
+.
+.  if (\n[doc-func-arg-count] > 1) \{\
+.    nop \f[\n[doc-curr-font]]\s[\n[doc-curr-size]u]\|\c
+.    if !"\*[doc-arg\n[doc-arg-ptr]]"/*" \
+.      if !"\*[doc-arg\n[doc-arg-ptr]]"*/" \
+.        nop ,\)\c
+.    nop \)\*[doc-space\n[doc-arg-ptr]]\*[doc-Fa-font]\c
+.    nop \)\*[doc-arg\n[doc-arg-ptr]]\f[]\s[0]\c
+.  \}
+.
+.  if (\n[doc-func-arg-count] == 1) \{\
+.    nop \)\*[doc-Fa-font]\*[doc-arg\n[doc-arg-ptr]]\c
+.    nop \f[]\s[0]\c
+.  \}
+.  nr doc-func-arg-count +1
+.  doc-do-func
+..
+.
+.
+.\" NS doc-have-func global register (bool)
+.\" NS   whether we have more than one function in synopsis
+.
+.nr doc-have-func 0
+.
+.
+.\" NS Fn user macro
+.\" NS   functions
+.\" NS
+.\" NS modifies:
+.\" NS   doc-arg-ptr
+.\" NS   doc-curr-font
+.\" NS   doc-curr-size
+.\" NS   doc-have-decl
+.\" NS   doc-have-func
+.\" NS   doc-have-var
+.\" NS   doc-indent-synopsis
+.\" NS   doc-is-func
+.\" NS   doc-macro-name
+.\" NS
+.\" NS width register `Fn' set in doc-common
+.
+.de Fn
+.  if !\n[doc-arg-limit] \{\
+.    ie \n[.$] \{\
+.      ds doc-macro-name Fn
+.      doc-parse-args \$@
+.    \}
+.    el \
+.      tm Usage: .Fn function_name [function_arg] ... (#\n[.c])
+.  \}
+.
+.  if !\n[doc-arg-limit] \
+.    return
+.
+.  if \n[doc-in-synopsis-section] \{\
+.    \" if there is/has been more than one subroutine declaration
+.    ie \n[doc-is-func] \{\
+.      br
+.      nr doc-have-var 0
+.      nr doc-have-decl 0
+.      nr doc-is-func 0
+.    \}
+.    el \{\
+.      if \n[doc-have-func] \{\
+.        doc-paragraph
+.        nr doc-have-var 0
+.        nr doc-have-decl 0
+.    \}\}
+.
+.    if \n[doc-have-decl] \{\
+.      doc-paragraph
+.      nr doc-have-var 0
+.    \}
+.
+.    if \n[doc-have-var] \{\
+.      doc-paragraph
+.      nr doc-have-decl 0
+.    \}
+.
+.    nr doc-have-func 1
+.    nr doc-is-func 0
+.
+.    br
+.    if !\n[doc-indent-synopsis] \
+.      nr doc-indent-synopsis (4u * \n[doc-fixed-width]u)
+.    if !\n[doc-indent-synopsis-active] \
+.      in +\n[doc-indent-synopsis]u
+.    ti -\n[doc-indent-synopsis]u
+.  \}
+.
+.  nr doc-arg-ptr +1
+.  doc-print-prefixes
+.  if (\n[doc-arg-limit] < \n[doc-arg-ptr]) \{\
+.    tm Usage: .Fn function_name [function_arg] ... (#\n[.c])
+.    doc-reset-args
+.    return
+.  \}
+.
+.  nr doc-curr-font \n[.f]
+.  nr doc-curr-size \n[.ps]
+.  nop \*[doc-Fn-font]\*[doc-arg\n[doc-arg-ptr]]\c
+.  nop \f[]\s[0]\*[lp]\)\c
+.
+.  nr doc-arg-ptr +1
+.  if (\n[doc-arg-limit] >= \n[doc-arg-ptr]) \{\
+.    if (\n[doc-type\n[doc-arg-ptr]] == 2) \{\
+.      nop \*[doc-Fa-font]\c
+.      doc-do-func-args
+.      nop \f[\n[doc-curr-font]]\s[\n[doc-curr-size]u]\c
+.  \}\}
+.
+.  nop \)\*[rp]\)\c
+.  if \n[doc-in-synopsis-section] \
+.    nop \);\)\c
+.
+.  ie (\n[doc-arg-limit] >= \n[doc-arg-ptr]) \{\
+.    \" output the space (if needed)
+.    nr doc-arg-ptr -1
+.    nop \)\*[doc-space\n[doc-arg-ptr]]\c
+.    nr doc-arg-ptr +1
+.
+.    doc-print-recursive
+.  \}
+.  el \
+.    doc-print-and-reset
+.
+.  if \n[doc-in-synopsis-section] \
+.    if !\n[doc-indent-synopsis-active] \
+.      in -\n[doc-indent-synopsis]u
+..
+.
+.
+.\" NS doc-do-func-args macro
+.\" NS   handle function arguments
+.\" NS
+.\" NS modifies:
+.\" NS   doc-arg-ptr
+.\" NS   doc-argXXX
+.\" NS   doc-func-arg
+.\" NS   doc-func-args-processed
+.\" NS   doc-num-func-args
+.\" NS
+.\" NS local variables:
+.\" NS   doc-reg-ddfa
+.
+.de doc-do-func-args
+.  if \n[doc-in-synopsis-section] \{\
+.    ds doc-func-arg
+.    nr doc-num-func-args 0
+.    nr doc-func-args-processed 0
+.
+.    doc-build-func-string \*[doc-arg\n[doc-arg-ptr]]
+.    if (\n[doc-num-func-args] > 1) \
+.      ds doc-arg\n[doc-arg-ptr] "\*[doc-func-arg]
+.  \}
+.
+.  nop \)\*[doc-arg\n[doc-arg-ptr]]\c
+.  nr doc-arg-ptr +1
+.
+.  if (\n[doc-arg-limit] >= \n[doc-arg-ptr]) \{\
+.    if (\n[doc-type\n[doc-arg-ptr]] == 2) \{\
+.      nr doc-reg-ddfa (\n[doc-arg-ptr] - 1)
+.      nop \f[\n[doc-curr-font]]\s[\n[doc-curr-size]u]\|\c
+.      if !"\*[doc-arg\n[doc-arg-ptr]]"/*" \
+.        if !"\*[doc-arg\n[doc-arg-ptr]]"*/" \
+.          nop ,\)\c
+.      nop \)\*[doc-space\n[doc-reg-ddfa]]\f[]\s[0]\|\c
+.      doc-do-func-args
+.  \}\}
+..
+.
+.
+.\" NS doc-saved-nesting-level global register
+.
+.nr doc-saved-nesting-level 0
+.
+.
+.\" NS doc-in-func-enclosure global register (bool)
+.
+.nr doc-in-func-enclosure 0
+.
+.
+.\" NS Fo user macro
+.\" NS   function open
+.\" NS
+.\" NS modifies:
+.\" NS   doc-arg-ptr
+.\" NS   doc-curr-font
+.\" NS   doc-curr-size
+.\" NS   doc-func-arg-count
+.\" NS   doc-have-decl
+.\" NS   doc-have-func
+.\" NS   doc-have-var
+.\" NS   doc-in-func-enclosure
+.\" NS   doc-indent-synopsis
+.\" NS   doc-is-func
+.\" NS   doc-macro-name
+.\" NS   doc-saved-nesting-level
+.\" NS
+.\" NS width register `Fo' set in doc-common
+.
+.de Fo
+.  if (\n[doc-in-func-enclosure]) \{\
+.    tm mdoc error: .Fo/.Fc can't be nested (#\n[.c])
+.    return
+.  \}
+.
+.  nr doc-saved-nesting-level \n[doc-nesting-level]
+.  nr doc-in-func-enclosure 1
+.
+.  if !\n[doc-arg-limit] \{\
+.    ie \n[.$] \{\
+.      ds doc-macro-name Fo
+.      doc-parse-args \$@
+.    \}
+.    el \
+.      tm Usage: .Fo function_name (#\n[.c])
+.  \}
+.
+.  if \n[doc-in-synopsis-section] \{\
+.    \" if there is/has been more than one subroutine declaration
+.    ie \n[doc-is-func] \{\
+.      br
+.      nr doc-have-var 0
+.      nr doc-have-decl 0
+.      nr doc-is-func 0
+.    \}
+.    el \{\
+.      if \n[doc-have-func] \{\
+.        doc-paragraph
+.        nr doc-have-var 0
+.        nr doc-have-decl 0
+.    \}\}
+.
+.    if \n[doc-have-decl] \{\
+.      doc-paragraph
+.      nr doc-have-var 0
+.    \}
+.
+.    if \n[doc-have-var] \{\
+.      doc-paragraph
+.      nr doc-have-decl 0
+.    \}
+.
+.    nr doc-have-func 1
+.    nr doc-is-func 0
+.
+.    br
+.    if !\n[doc-indent-synopsis] \
+.      nr doc-indent-synopsis (4u * \n[doc-fixed-width]u)
+.  \}
+.
+.  \" start function box
+.  box doc-func-box
+.  ev doc-func-env
+.  evc 0
+.  in 0
+.  nf
+.
+.  nr doc-arg-ptr +1
+.  doc-print-prefixes
+.  if (\n[doc-arg-limit] >= \n[doc-arg-ptr]) \{\
+.    nr doc-func-arg-count 1
+.    nr doc-curr-font \n[.f]
+.    nr doc-curr-size \n[.ps]
+.
+.    nop \*[doc-Fn-font]\*[doc-arg\n[doc-arg-ptr]]\c
+.    nop \f[]\s[0]\*[lp]\)\c
+.    doc-reset-args
+.  \}
+..
+.
+.
+.\" NS Fc user macro
+.\" NS   function close
+.\" NS
+.\" NS modifies:
+.\" NS   doc-arg-ptr
+.\" NS   doc-func-arg-count
+.\" NS   doc-in-func-enclosure
+.\" NS   doc-saved-nesting-level
+.\" NS   doc-macro-name
+.\" NS
+.\" NS width register `Fc' set in doc-common
+.
+.de Fc
+.  if !\n[doc-in-func-enclosure] \{\
+.    tm mdoc warning: Extraneous .Fc (#\n[.c])
+.    return
+.  \}
+.
+.  if \n[.$] \{\
+.    ds doc-macro-name Fc
+.    \" the first (dummy) argument is used to get the correct spacing
+.    doc-parse-args \) \$@
+.  \}
+.
+.  if !(\n[doc-saved-nesting-level] == \n[doc-nesting-level]) \
+.    tm mdoc warning: Unbalanced enclosure commands within .Fo/.Fc
+.
+.  nr doc-func-arg-count 0
+.  nr doc-in-func-enclosure 0
+.
+.  ie \n[doc-in-synopsis-section] \
+.    nop \|\*[rp];\)
+.  el \
+.    nop \|\*[rp]\)
+.
+.  \" finish function box
+.  br
+.  ev
+.  box
+.  chop doc-func-box
+.  unformat doc-func-box
+.
+.  if \n[doc-in-synopsis-section] \{\
+.    if !\n[doc-indent-synopsis-active] \
+.      in +\n[doc-indent-synopsis]u
+.    ti -\n[doc-indent-synopsis]u
+.  \}
+.
+.  nh
+.  nop \*[doc-func-box]\c
+.
+.  nr doc-arg-ptr +1
+.  ie (\n[doc-arg-limit] >= \n[doc-arg-ptr]) \{\
+.    nr doc-curr-font \n[.f]
+.    nr doc-curr-size \n[.ps]
+.    doc-print-recursive
+.  \}
+.  el \
+.    doc-print-and-reset
+.
+.  if \n[doc-in-synopsis-section] \
+.    if !\n[doc-indent-synopsis-active] \
+.      in -\n[doc-indent-synopsis]u
+..
+.
+.
+.\" NS doc-build-func-string macro
+.\" NS   collect function arguments and set hard spaces in between
+.\" NS
+.\" NS modifies:
+.\" NS   doc-func-arg
+.\" NS   doc-func-args-processed
+.\" NS   doc-num-func-args
+.
+.de doc-build-func-string
+.  if !\n[doc-num-func-args] \{\
+.    nr doc-num-func-args \n[.$]
+.    nr doc-func-args-processed 0
+.    ds doc-func-arg
+.  \}
+.
+.  nr doc-func-args-processed +1
+.  as doc-func-arg "\$1
+.
+.  if (\n[doc-func-args-processed] < \n[doc-num-func-args]) \{\
+.    as doc-func-arg "\*[doc-hard-space]
+.
+.    shift
+.    doc-build-func-string \$@
+.  \}
+..
+.
+.
+.\" Very crude references: Stash all reference info into boxes, print out
+.\" reference on .Re macro and clean up.  Ordering very limited, no fancy
+.\" citations, but can do articles, journals, and books -- need to add
+.\" several missing options (like city etc).  Should be able to grab a refer
+.\" entry, massage it a wee bit (prefix a `.' to the %[A-Z]) and not worry
+.\" (ha!).
+.
+.
+.\" NS doc-is-reference global register (bool)
+.\" NS   set if in reference
+.
+.nr doc-is-reference 0
+.
+.
+.\" NS doc-reference-count global register
+.\" NS   reference element counter
+.
+.nr doc-reference-count 0
+.
+.
+.\" NS Rs user macro
+.\" NS   reference start
+.\" NS
+.\" NS modifies:
+.\" NS   doc-is-reference
+.\" NS   doc-reference-count
+.\" NS
+.\" NS width register `Rs' set in doc-common
+.
+.de Rs
+.  ie \n[.$] \
+.    tm Usage: .Rs (does not take arguments) (#\n[.c])
+.  el \{\
+.    nr doc-is-reference 1
+.    doc-reset-reference
+.    if \n[doc-in-see-also-section] \
+.      doc-paragraph
+.    nr doc-reference-count 0
+.  \}
+..
+.
+.
+.\" NS Re user macro
+.\" NS   reference end
+.\" NS
+.\" NS modifies:
+.\" NS   doc-is-reference
+.\" NS
+.\" NS width register `Re' set in doc-common
+.
+.de Re
+.  ie \n[.$] \
+.    tm Usage: .Re (does not take arguments) (#\n[.c])
+.  el \{\
+.    if !\n[doc-is-reference] \{\
+.      tm mdoc warning: Extraneous .Re (#\n[.c])
+.      return
+.    \}
+.    doc-print-reference
+.    doc-reset-reference
+.    nr doc-is-reference 0
+.  \}
+..
+.
+.
+.\" NS doc-reset-reference macro
+.\" NS   reference cleanup
+.\" NS
+.\" NS modifies:
+.\" NS   doc-author-count
+.\" NS   doc-author-nameXXX
+.\" NS   doc-book-count
+.\" NS   doc-book-name
+.\" NS   doc-city-count
+.\" NS   doc-city-name
+.\" NS   doc-corporate-count
+.\" NS   doc-corporate-name
+.\" NS   doc-date
+.\" NS   doc-date-count
+.\" NS   doc-issue-count
+.\" NS   doc-issue-name
+.\" NS   doc-journal-count
+.\" NS   doc-journal-name
+.\" NS   doc-optional-count
+.\" NS   doc-optional-string
+.\" NS   doc-page-number-count
+.\" NS   doc-page-number-string
+.\" NS   doc-publisher-count
+.\" NS   doc-publisher-name
+.\" NS   doc-reference-count
+.\" NS   doc-reference-title-count
+.\" NS   doc-reference-title-name
+.\" NS   doc-reference-title-name-for-book
+.\" NS   doc-report-count
+.\" NS   doc-report-name
+.\" NS   doc-url-count
+.\" NS   doc-url-name
+.\" NS   doc-volume-count
+.\" NS   doc-volume-name
+.
+.de doc-reset-reference
+.  while (\n[doc-author-count]) \{\
+.    ds doc-author-name\n[doc-author-count]
+.    nr doc-author-count -1
+.  \}
+.  nr doc-journal-count 0
+.  nr doc-issue-count 0
+.  nr doc-optional-count 0
+.  nr doc-corporate-count 0
+.  nr doc-report-count 0
+.  nr doc-reference-title-count 0
+.  nr doc-url-count 0
+.  nr doc-volume-count 0
+.  nr doc-city-count 0
+.  nr doc-date-count 0
+.  nr doc-page-number-count 0
+.  nr doc-book-count 0
+.  nr doc-publisher-count 0
+.  nr doc-reference-count 0
+.
+.  ds doc-journal-name
+.  ds doc-issue-name
+.  ds doc-optional-string
+.  ds doc-corporate-name
+.  ds doc-report-name
+.  ds doc-reference-title-name
+.  ds doc-reference-title-name-for-book
+.  ds doc-url-name
+.  ds doc-volume-name
+.  ds doc-city-name
+.  ds doc-date
+.  ds doc-page-number-string
+.  ds doc-book-name
+.  ds doc-publisher-name
+..
+.
+.
+.\" NS doc-finish-reference macro
+.\" NS   auxiliary macro for doc-print-reference
+.\" NS
+.\" NS modifies:
+.\" NS   doc-reference-count
+.
+.de doc-finish-reference
+.  nr doc-reference-count -\$1
+.  ie \n[doc-reference-count] \
+.    nop \),
+.  el \
+.    nop \).
+..
+.
+.
+.\" NS doc-print-reference macro
+.\" NS   reference print
+.\" NS
+.\" NS modifies:
+.\" NS   doc-reference-count
+.
+.de doc-print-reference
+.
+.  nh
+.
+.  if \n[doc-author-count] \{\
+.    doc-print-reference-authors
+.    nr doc-reference-count -\n[doc-author-count]
+.  \}
+.
+.  if \n[doc-reference-title-count] \{\
+.    unformat doc-reference-title-name
+.    chop doc-reference-title-name
+.    unformat doc-reference-title-name-for-book
+.    chop doc-reference-title-name-for-book
+.    ie ((\n[doc-journal-count] == 1) : (\n[doc-book-count] == 1)) \{\
+.      nop \)\*[q]\)\*[doc-reference-title-name-for-book]\)\*[q]\c
+.      doc-finish-reference \n[doc-reference-title-count]
+.    \}
+.    el \{\
+.      nop \*[doc-reference-title-name]\c
+.      doc-finish-reference \n[doc-reference-title-count]
+.  \}\}
+.
+.  if \n[doc-book-count] \{\
+.    unformat doc-book-name
+.    chop doc-book-name
+.    nop \*[doc-book-name]\c
+.    doc-finish-reference \n[doc-book-count]
+.  \}
+.
+.  if \n[doc-publisher-count] \{\
+.    unformat doc-publisher-name
+.    chop doc-publisher-name
+.    nop \*[doc-publisher-name]\c
+.    doc-finish-reference \n[doc-publisher-count]
+.  \}
+.
+.  if \n[doc-journal-count] \{\
+.    unformat doc-journal-name
+.    chop doc-journal-name
+.    nop \*[doc-journal-name]\c
+.    doc-finish-reference \n[doc-journal-count]
+.  \}
+.
+.  if \n[doc-report-count] \{\
+.    unformat doc-report-name
+.    chop doc-report-name
+.    nop \*[doc-report-name]\c
+.    doc-finish-reference \n[doc-report-count]
+.  \}
+.
+.  if \n[doc-issue-count] \{\
+.    unformat doc-issue-name
+.    chop doc-issue-name
+.    nop \*[doc-issue-name]\c
+.    doc-finish-reference \n[doc-issue-count]
+.  \}
+.
+.  if \n[doc-volume-count] \{\
+.    unformat doc-volume-name
+.    chop doc-volume-name
+.    nop \*[doc-volume-name]\c
+.    doc-finish-reference \n[doc-volume-count]
+.  \}
+.
+.  if \n[doc-url-count] \{\
+.    unformat doc-url-name
+.    chop doc-url-name
+.    nop \*[doc-url-name]\c
+.    doc-finish-reference \n[doc-url-count]
+.  \}
+.
+.  if \n[doc-page-number-count] \{\
+.    unformat doc-page-number-string
+.    chop doc-page-number-string
+.    nop \*[doc-page-number-string]\c
+.    doc-finish-reference \n[doc-page-number-count]
+.  \}
+.
+.  if \n[doc-corporate-count] \{\
+.    unformat doc-corporate-name
+.    chop doc-corporate-name
+.    nop \*[doc-corporate-name]\c
+.    doc-finish-reference \n[doc-corporate-count]
+.  \}
+.
+.  if \n[doc-city-count] \{\
+.    unformat doc-city-name
+.    chop doc-city-name
+.    nop \*[doc-city-name]\c
+.    doc-finish-reference \n[doc-city-count]
+.  \}
+.
+.  if \n[doc-date-count] \{\
+.    unformat doc-date
+.    chop doc-date
+.    nop \*[doc-date]\c
+.    doc-finish-reference \n[doc-date-count]
+.  \}
+.
+.  if \n[doc-optional-count] \{\
+.    unformat doc-optional-string
+.    chop doc-optional-string
+.    nop \*[doc-optional-string]\c
+.    doc-finish-reference \n[doc-optional-count]
+.  \}
+.
+.  if \n[doc-reference-count] \
+.    tm mdoc warning: unresolved reference problem
+.
+.  hy \n[doc-hyphen-flags]
+..
+.
+.
+.\" NS doc-print-reference-authors macro
+.\" NS   print out reference authors
+.\" NS
+.\" NS local variables:
+.\" NS   doc-reg-dpra
+.\" NS   doc-str-dpra
+.
+.ds doc-str-dpra "and
+.
+.de doc-print-reference-authors
+.  nr doc-reg-dpra 1
+.
+.  while (\n[doc-reg-dpra] < \n[doc-author-count]) \{\
+.    unformat doc-author-name\n[doc-reg-dpra]
+.    chop doc-author-name\n[doc-reg-dpra]
+.    ie (\n[doc-author-count] > 2) \
+.      nop \)\*[doc-author-name\n[doc-reg-dpra]],
+.    el \
+.      nop \)\*[doc-author-name\n[doc-reg-dpra]]
+.    nr doc-reg-dpra +1
+.  \}
+.
+.  unformat doc-author-name\n[doc-reg-dpra]
+.  chop doc-author-name\n[doc-reg-dpra]
+.  if (\n[doc-author-count] > 1) \
+.    nop \)\*[doc-str-dpra]
+.  nop \)\*[doc-author-name\n[doc-reg-dpra]],
+..
+.
+.
+.\" NS doc-author-count global register
+.\" NS   counter of author references
+.
+.nr doc-author-count 0
+.
+.
+.\" NS doc-author-nameXXX global box
+.\" NS   array of author names
+.\" NS
+.\" NS limit:
+.\" NS   doc-author-count
+.
+.ds doc-author-name0
+.
+.
+.\" NS %A user macro
+.\" NS   reference author(s)
+.\" NS
+.\" NS modifies:
+.\" NS   doc-arg-ptr
+.\" NS   doc-author-count
+.\" NS   doc-curr-font
+.\" NS   doc-curr-size
+.\" NS   doc-macro-name
+.\" NS   doc-reference-count
+.\" NS
+.\" NS local variables:
+.\" NS   doc-env-%A
+.\" NS
+.\" NS width register `%A' set in doc-common
+.
+.de %A
+.  if (\n[doc-arg-limit] : (\n[.$] == 0)) \{\
+.    tm Usage: .%A author_name ... (#\n[.c])
+.    return
+.  \}
+.
+.  nr doc-author-count +1
+.  nr doc-reference-count +1
+.
+.  ds doc-macro-name %A
+.  doc-parse-args \$@
+.
+.  nr doc-arg-ptr +1
+.  nr doc-curr-font \n[.f]
+.  nr doc-curr-size \n[.ps]
+.
+.  \" save to reference box
+.  box doc-author-name\n[doc-author-count]
+.  ev doc-env-%A
+.  evc 0
+.  in 0
+.  nf
+.  doc-do-references
+..
+.
+.
+.\" NS doc-book-count global register
+.\" NS   counter of book references
+.
+.nr doc-book-count 0
+.
+.
+.\" NS doc-book-name global box
+.\" NS   string of collected book references
+.
+.ds doc-book-name
+.
+.
+.\" NS %B user macro
+.\" NS   [reference] book name
+.\" NS
+.\" NS modifies:
+.\" NS   doc-arg-ptr
+.\" NS   doc-book-count
+.\" NS   doc-curr-font
+.\" NS   doc-curr-size
+.\" NS   doc-macro-name
+.\" NS   doc-reference-count
+.\" NS
+.\" NS local variables:
+.\" NS   doc-env-%B
+.\" NS
+.\" NS width register `%B' set in doc-common
+.
+.de %B
+.  if (\n[doc-arg-limit] : (\n[.$] == 0)) \{\
+.    tm Usage: .%B book_name ... (#\n[.c])
+.    return
+.  \}
+.
+.  if \n[doc-is-reference] \{\
+.    nr doc-book-count +1
+.    nr doc-reference-count +1
+.  \}
+.
+.  ds doc-macro-name %B
+.  doc-parse-args \$@
+.
+.  nr doc-arg-ptr +1
+.  nr doc-curr-font \n[.f]
+.  nr doc-curr-size \n[.ps]
+.
+.  ie \n[doc-is-reference] \{\
+.    \" append to reference box
+.    boxa doc-book-name
+.    ev doc-env-%B
+.    evc 0
+.    in 0
+.    nf
+.    nop \*[doc-Em-font]\c
+.    doc-do-references
+.  \}
+.  el \{\
+.    nop \*[doc-Em-font]\c
+.    doc-print-recursive
+.  \}
+..
+.
+.
+.\" NS doc-city-count global register
+.\" NS   counter of city references
+.
+.nr doc-city-count 0
+.
+.
+.\" NS doc-city-name global box
+.\" NS   string of collected city references
+.
+.ds doc-city-name
+.
+.
+.\" NS %C user macro
+.\" NS   [reference] city
+.\" NS
+.\" NS modifies:
+.\" NS   doc-arg-ptr
+.\" NS   doc-curr-font
+.\" NS   doc-curr-size
+.\" NS   doc-city-count
+.\" NS   doc-macro-name
+.\" NS   doc-reference-count
+.\" NS
+.\" NS local variables:
+.\" NS   doc-env-%C
+.\" NS
+.\" NS width register `%C' set in doc-common
+.
+.de %C
+.  if (\n[doc-arg-limit] : (\n[.$] == 0)) \{\
+.    tm Usage: .%C city_name ... (#\n[.c])
+.    return
+.  \}
+.
+.  nr doc-city-count +1
+.  nr doc-reference-count +1
+.
+.  ds doc-macro-name %C
+.  doc-parse-args \$@
+.
+.  nr doc-arg-ptr +1
+.  nr doc-curr-font \n[.f]
+.  nr doc-curr-size \n[.ps]
+.
+.  \" append to reference box
+.  boxa doc-city-name
+.  ev doc-env-%C
+.  evc 0
+.  in 0
+.  nf
+.  doc-do-references
+..
+.
+.
+.\" NS doc-date-count global register
+.\" NS   counter of date references
+.
+.nr doc-date-count 0
+.
+.
+.\" NS doc-date global box
+.\" NS   string of collected date references
+.
+.ds doc-date
+.
+.
+.\" NS %D user macro
+.\" NS   [reference] date
+.\" NS
+.\" NS modifies:
+.\" NS   doc-arg-ptr
+.\" NS   doc-curr-font
+.\" NS   doc-curr-size
+.\" NS   doc-date-count
+.\" NS   doc-macro-name
+.\" NS   doc-reference-count
+.\" NS
+.\" NS local variables:
+.\" NS   doc-env-%D
+.\" NS
+.\" NS width register `%D' set in doc-common
+.
+.de %D
+.  if (\n[doc-arg-limit] : (\n[.$] == 0)) \{\
+.    tm Usage: .%D date ... (#\n[.c])
+.    return
+.  \}
+.
+.  nr doc-date-count +1
+.  nr doc-reference-count +1
+.
+.  ds doc-macro-name %D
+.  doc-parse-args \$@
+.
+.  nr doc-arg-ptr +1
+.  nr doc-curr-font \n[.f]
+.  nr doc-curr-size \n[.ps]
+.
+.  \" append to reference box
+.  boxa doc-date
+.  ev doc-env-%D
+.  evc 0
+.  in 0
+.  nf
+.  doc-do-references
+..
+.
+.
+.\" NS doc-publisher-count global register
+.\" NS   counter of publisher references
+.
+.nr doc-publisher-count 0
+.
+.
+.\" NS doc-publisher-name global box
+.\" NS   string of collected publisher references
+.
+.ds doc-publisher-name
+.
+.
+.\" NS %I user macro
+.\" NS   [reference] issuer/publisher name
+.\" NS
+.\" NS modifies:
+.\" NS   doc-arg-ptr
+.\" NS   doc-curr-font
+.\" NS   doc-curr-size
+.\" NS   doc-macro-name
+.\" NS   doc-publisher-count
+.\" NS   doc-reference-count
+.\" NS
+.\" NS local variables:
+.\" NS   doc-env-%I
+.\" NS
+.\" NS width register `%I' set in doc-common
+.
+.de %I
+.  if (\n[doc-arg-limit] : (\n[.$] == 0)) \{\
+.    tm Usage: .%I issuer/publisher_name ... (#\n[.c])
+.    return
+.  \}
+.
+.  nr doc-publisher-count +1
+.  nr doc-reference-count +1
+.
+.  ds doc-macro-name %I
+.  doc-parse-args \$@
+.
+.  nr doc-arg-ptr +1
+.  nr doc-curr-font \n[.f]
+.  nr doc-curr-size \n[.ps]
+.
+.  \" append to reference box
+.  boxa doc-publisher-name
+.  ev doc-env-%I
+.  evc 0
+.  in 0
+.  nf
+.  nop \*[doc-Em-font]\c
+.  doc-do-references
+..
+.
+.
+.\" NS doc-journal-count global register
+.\" NS   counter of journal references
+.
+.nr doc-journal-count 0
+.
+.
+.\" NS doc-journal-name global box
+.\" NS   string of collected journal references
+.
+.ds doc-journal-name
+.
+.
+.\" NS %J user macro
+.\" NS   [reference] Journal Name
+.\" NS
+.\" NS modifies:
+.\" NS   doc-arg-ptr
+.\" NS   doc-curr-font
+.\" NS   doc-curr-size
+.\" NS   doc-journal-count
+.\" NS   doc-macro-name
+.\" NS   doc-reference-count
+.\" NS
+.\" NS local variables:
+.\" NS   doc-env-%J
+.\" NS
+.\" NS width register `%J' set in doc-common
+.
+.de %J
+.  if (\n[doc-arg-limit] : (\n[.$] == 0)) \{\
+.    tm Usage: .%J journal_name ... (#\n[.c])
+.    return
+.  \}
+.
+.  nr doc-journal-count +1
+.  nr doc-reference-count +1
+.
+.  ds doc-macro-name %J
+.  doc-parse-args \$@
+.
+.  nr doc-arg-ptr +1
+.  nr doc-curr-font \n[.f]
+.  nr doc-curr-size \n[.ps]
+.
+.  \" append to reference box
+.  boxa doc-journal-name
+.  ev doc-env-%J
+.  evc 0
+.  in 0
+.  nf
+.  nop \*[doc-Em-font]\c
+.  doc-do-references
+..
+.
+.
+.\" NS doc-issue-count global register
+.\" NS   counter of issue number references
+.
+.nr doc-issue-count 0
+.
+.
+.\" NS doc-issue-name global box
+.\" NS   string of collected issue number references
+.
+.ds doc-issue-name
+.
+.
+.\" NS %N user macro
+.\" NS   [reference] issue number
+.\" NS
+.\" NS modifies:
+.\" NS   doc-arg-ptr
+.\" NS   doc-curr-font
+.\" NS   doc-curr-size
+.\" NS   doc-issue-count
+.\" NS   doc-macro-name
+.\" NS   doc-reference-count
+.\" NS
+.\" NS local variables:
+.\" NS   doc-env-%N
+.\" NS
+.\" NS width register `%N' set in doc-common
+.
+.de %N
+.  if (\n[doc-arg-limit] : (\n[.$] == 0)) \{\
+.    tm Usage: .%N issue_number ... (#\n[.c])
+.    return
+.  \}
+.
+.  nr doc-issue-count +1
+.  nr doc-reference-count +1
+.
+.  ds doc-macro-name %N
+.  doc-parse-args \$@
+.
+.  nr doc-arg-ptr +1
+.  nr doc-curr-font \n[.f]
+.  nr doc-curr-size \n[.ps]
+.
+.  \" append to reference box
+.  boxa doc-issue-name
+.  ev doc-env-%N
+.  evc 0
+.  in 0
+.  nf
+.  doc-do-references
+..
+.
+.
+.\" NS doc-optional-count global register
+.\" NS   counter of optional information references
+.
+.nr doc-optional-count 0
+.
+.
+.\" NS doc-optional-string global box
+.\" NS   string of collected optional information references
+.
+.ds doc-optional-string
+.
+.
+.\" NS %O user macro
+.\" NS   [reference] optional information
+.\" NS
+.\" NS modifies:
+.\" NS   doc-arg-ptr
+.\" NS   doc-curr-font
+.\" NS   doc-curr-size
+.\" NS   doc-macro-name
+.\" NS   doc-optional-count
+.\" NS   doc-reference-count
+.\" NS
+.\" NS local variables:
+.\" NS   doc-env-%O
+.\" NS
+.\" NS width register `%O' set in doc-common
+.
+.de %O
+.  if (\n[doc-arg-limit] : (\n[.$] == 0)) \{\
+.    tm Usage: .%O optional_information ... (#\n[.c])
+.    return
+.  \}
+.
+.  nr doc-optional-count +1
+.  nr doc-reference-count +1
+.
+.  ds doc-macro-name %O
+.  doc-parse-args \$@
+.
+.  nr doc-arg-ptr +1
+.  nr doc-curr-font \n[.f]
+.  nr doc-curr-size \n[.ps]
+.
+.  \" append to reference box
+.  boxa doc-optional-string
+.  ev doc-env-%O
+.  evc 0
+.  in 0
+.  nf
+.  doc-do-references
+..
+.
+.
+.\" NS doc-page-number-count global register
+.\" NS   counter of page number references
+.
+.nr doc-page-number-count 0
+.
+.
+.\" NS doc-page-number-string global box
+.\" NS   string of collected page number references
+.
+.ds doc-page-number-string
+.
+.
+.\" NS %P user macro
+.\" NS   [reference] page numbers
+.\" NS
+.\" NS modifies:
+.\" NS   doc-arg-ptr
+.\" NS   doc-curr-font
+.\" NS   doc-curr-size
+.\" NS   doc-macro-name
+.\" NS   doc-page-number-count
+.\" NS   doc-reference-count
+.\" NS
+.\" NS local variables:
+.\" NS   doc-env-%P
+.\" NS
+.\" NS width register `%P' set in doc-common
+.
+.de %P
+.  if (\n[doc-arg-limit] : (\n[.$] == 0)) \{\
+.    tm Usage: .%P page_number ... (#\n[.c])
+.    return
+.  \}
+.
+.  nr doc-page-number-count +1
+.  nr doc-reference-count +1
+.
+.  ds doc-macro-name %P
+.  doc-parse-args \$@
+.
+.  nr doc-arg-ptr +1
+.  nr doc-curr-font \n[.f]
+.  nr doc-curr-size \n[.ps]
+.
+.  \" append to reference box
+.  boxa doc-page-number-string
+.  ev doc-env-%P
+.  evc 0
+.  in 0
+.  nf
+.  doc-do-references
+..
+.
+.
+.\" NS doc-corporate-count global register
+.\" NS   counter of corporate references
+.
+.nr doc-corporate-count 0
+.
+.
+.\" NS doc-corporate-name global box
+.\" NS   string of collected corporate references
+.
+.ds doc-corporate-name
+.
+.
+.\" NS %Q user macro
+.\" NS   corporate or foreign author
+.\" NS
+.\" NS modifies:
+.\" NS   doc-arg-ptr
+.\" NS   doc-corporate-count
+.\" NS   doc-curr-font
+.\" NS   doc-curr-size
+.\" NS   doc-macro-name
+.\" NS   doc-reference-count
+.\" NS
+.\" NS local variables:
+.\" NS   doc-env-%Q
+.\" NS
+.\" NS width register `%Q' set in doc-common
+.
+.de %Q
+.  if (\n[doc-arg-limit] : (\n[.$] == 0)) \{\
+.    tm Usage: .%Q corporate_or_foreign_author ... (#\n[.c])
+.    return
+.  \}
+.
+.  nr doc-corporate-count +1
+.  nr doc-reference-count +1
+.
+.  ds doc-macro-name %Q
+.  doc-parse-args \$@
+.
+.  nr doc-arg-ptr +1
+.  nr doc-curr-font \n[.f]
+.  nr doc-curr-size \n[.ps]
+.
+.  \" append to reference box
+.  boxa doc-corporate-name
+.  ev doc-env-%Q
+.  evc 0
+.  in 0
+.  nf
+.  doc-do-references
+..
+.
+.
+.\" NS doc-report-count global register
+.\" NS   counter of report references
+.
+.nr doc-report-count 0
+.
+.
+.\" NS doc-report-name global box
+.\" NS   string of collected report references
+.
+.ds doc-report-name
+.
+.
+.\" NS %R user macro
+.\" NS   [reference] report name
+.\" NS
+.\" NS modifies:
+.\" NS   doc-arg-ptr
+.\" NS   doc-curr-font
+.\" NS   doc-curr-size
+.\" NS   doc-macro-name
+.\" NS   doc-reference-count
+.\" NS   doc-report-count
+.\" NS
+.\" NS local variables:
+.\" NS   doc-env-%R
+.\" NS
+.\" NS width register `%R' set in doc-common
+.
+.de %R
+.  if (\n[doc-arg-limit] : (\n[.$] == 0)) \{\
+.    tm Usage: .%R reference_report ... (#\n[.c])
+.    return
+.  \}
+.
+.  nr doc-report-count +1
+.  nr doc-reference-count +1
+.
+.  ds doc-macro-name %R
+.  doc-parse-args \$@
+.
+.  nr doc-arg-ptr +1
+.  nr doc-curr-font \n[.f]
+.  nr doc-curr-size \n[.ps]
+.
+.  \" append to reference box
+.  boxa doc-report-name
+.  ev doc-env-%R
+.  evc 0
+.  in 0
+.  nf
+.  doc-do-references
+..
+.
+.
+.\" NS doc-reference-title-count global register
+.\" NS   counter of reference title references
+.
+.nr doc-reference-title-count 0
+.
+.
+.\" NS doc-reference-title-name global box
+.\" NS   string of collected reference title references
+.
+.ds doc-reference-title-name
+.
+.
+.\" NS doc-reference-title-name-for-book global box
+.\" NS   string of collected reference title references
+.\" NS   (saved with another font; this is a shortcoming of groff)
+.
+.ds doc-reference-title-name-for-book
+.
+.
+.\" NS %T user macro
+.\" NS   reference title
+.\" NS
+.\" NS modifies:
+.\" NS   doc-arg-ptr
+.\" NS   doc-curr-font
+.\" NS   doc-curr-size
+.\" NS   doc-macro-name
+.\" NS   doc-reference-title-count
+.\" NS   doc-report-count
+.\" NS
+.\" NS local variables:
+.\" NS   doc-env-%T
+.\" NS
+.\" NS width register `%T' set in doc-common
+.
+.de %T
+.  if (\n[doc-arg-limit] : (\n[.$] == 0)) \{\
+.    tm Usage: .%T reference_title ... (#\n[.c])
+.    return
+.  \}
+.
+.  if \n[doc-is-reference] \{\
+.    nr doc-reference-title-count +1
+.    nr doc-reference-count +1
+.  \}
+.
+.  ds doc-macro-name %T
+.  doc-parse-args \$@
+.
+.  nr doc-arg-ptr +1
+.  nr doc-curr-font \n[.f]
+.  nr doc-curr-size \n[.ps]
+.  ie \n[doc-is-reference] \{\
+.    \" append to reference box
+.    boxa doc-reference-title-name-for-book
+.    ev doc-env-%T
+.    evc 0
+.    in 0
+.    nf
+.    nop \*[doc-No-font]\c
+.    doc-do-references
+.
+.    \" do it a second time with another font
+.    ds doc-macro-name %T
+.    doc-parse-args \$@
+.
+.    nr doc-arg-ptr +1
+.    nr doc-curr-font \n[.f]
+.    nr doc-curr-size \n[.ps]
+.    boxa doc-reference-title-name
+.    ev doc-env-%T
+.    evc 0
+.    in 0
+.    nf
+.    nop \*[doc-Em-font]\c
+.    doc-do-references
+.  \}
+.  el \{\
+.    nop \*[doc-Em-font]\c
+.    doc-print-recursive
+.  \}
+..
+.
+.
+.\" NS doc-url-count global register
+.\" NS   counter of hypertext references
+.
+.nr doc-url-count 0
+.
+.
+.\" NS doc-url-name global box
+.\" NS   string of collected hypertext references
+.
+.ds doc-url-name
+.
+.
+.\" NS doc-volume-count global register
+.\" NS   counter of reference title references
+.
+.nr doc-volume-count 0
+.
+.
+.\" NS doc-volume-name global box
+.\" NS   string of collected volume references
+.
+.ds doc-volume-name
+.
+.
+.\" NS %U user macro
+.\" NS   hypertext reference
+.\" NS
+.\" NS modifies:
+.\" NS   doc-arg-ptr
+.\" NS   doc-curr-font
+.\" NS   doc-curr-size
+.\" NS   doc-macro-name
+.\" NS   doc-reference-count
+.\" NS   doc-url-count
+.\" NS
+.\" NS local variables:
+.\" NS   doc-env-%U
+.\" NS
+.\" NS width register `%U' set in doc-common
+.
+.de %U
+.  if (\n[doc-arg-limit] : (\n[.$] == 0)) \{\
+.    tm Usage: .%U URL ... (#\n[.c])
+.    return
+.  \}
+.
+.  nr doc-url-count +1
+.  nr doc-reference-count +1
+.
+.  ds doc-macro-name %U
+.  doc-parse-args \$@
+.
+.  nr doc-arg-ptr +1
+.  nr doc-curr-font \n[.f]
+.  nr doc-curr-size \n[.ps]
+.
+.  \" append to reference box
+.  boxa doc-url-name
+.  ev doc-env-%U
+.  evc 0
+.  in 0
+.  nf
+.  doc-do-references
+..
+.
+.
+.\" NS %V user macro
+.\" NS   reference volume
+.\" NS
+.\" NS modifies:
+.\" NS   doc-arg-ptr
+.\" NS   doc-curr-font
+.\" NS   doc-curr-size
+.\" NS   doc-macro-name
+.\" NS   doc-reference-count
+.\" NS   doc-volume-count
+.\" NS
+.\" NS local variables:
+.\" NS   doc-env-%V
+.\" NS
+.\" NS width register `%V' set in doc-common
+.
+.de %V
+.  if (\n[doc-arg-limit] : (\n[.$] == 0)) \{\
+.    tm Usage: .%V volume ... (#\n[.c])
+.    return
+.  \}
+.
+.  nr doc-volume-count +1
+.  nr doc-reference-count +1
+.
+.  ds doc-macro-name %V
+.  doc-parse-args \$@
+.
+.  nr doc-arg-ptr +1
+.  nr doc-curr-font \n[.f]
+.  nr doc-curr-size \n[.ps]
+.
+.  \" append to reference box
+.  boxa doc-volume-name
+.  ev doc-env-%V
+.  evc 0
+.  in 0
+.  nf
+.  doc-do-references
+..
+.
+.
+.\" NS doc-do-references macro
+.\" NS   reference recursion routine
+.\" NS
+.\" NS modifies:
+.\" NS   doc-arg-ptr
+.\" NS
+.\" NS local variables:
+.\" NS   doc-reg-ddr
+.\" NS   doc-reg-ddr1
+.
+.de doc-do-references
+.  if !\n[doc-is-reference] \
+.    tm mdoc error: .\*[doc-macro-name] found outside of .Rs ... .Re (#\n[.c])
+.
+.  nr doc-reg-ddr1 \n[doc-type\n[doc-arg-ptr]]
+.
+.  ie (\n[doc-reg-ddr1] == 1) \{\
+.    \" .nop \f[\n[doc-curr-font]]\s[\n[doc-curr-size]u]\c
+.    doc-append-arg \c 3
+.    \*[doc-arg\n[doc-arg-ptr]]
+.  \}
+.  el \{\
+.    nop \)\*[doc-arg\n[doc-arg-ptr]]\c
+.
+.    ie (\n[doc-arg-limit] == \n[doc-arg-ptr]) \{\
+.      \" finish reference box
+.      br
+.      ev
+.      boxa
+.
+.      doc-reset-args
+.    \}
+.    el \{\
+.      nr doc-reg-ddr \n[doc-arg-ptr]
+.      nr doc-arg-ptr +1
+.      nop \)\*[doc-space\n[doc-reg-ddr]]\c
+.      doc-do-references
+.  \}\}
+..
+.
+.
+.\" NS Hf user macro
+.\" NS   source include header files.
+.\" NS
+.\" NS modifies:
+.\" NS   doc-curr-font
+.\" NS   doc-curr-size
+.\" NS
+.\" NS width register `Hf' set in doc-common
+.
+.de Hf
+.  ie ((\n[.$] == 1) & (\n[doc-arg-limit] == 0)) \{\
+.    doc-paragraph
+.    nop File:
+.    Pa \$1
+.
+.    Bd -literal
+.    so \$1
+.    Ed
+.
+.    doc-paragraph
+.  \}
+.  el \
+.    Usage: .Hf file (#\n[.c])
+..
+.
+.
+.\" NS doc-have-author global register (bool)
+.\" NS   set in `An'
+.
+.nr doc-have-author 0
+.
+.
+.\" NS An user macro
+.\" NS   author name
+.\" NS
+.\" NS modifies:
+.\" NS   doc-arg-ptr
+.\" NS   doc-curr-font
+.\" NS   doc-curr-size
+.\" NS   doc-have-author
+.\" NS   doc-macro-name
+.\" NS
+.\" NS width register `An' set in doc-common
+.
+.de An
+.  if !\n[doc-arg-limit] \{\
+.    ie \n[.$] \{\
+.      ie        "\$1"-nosplit" \
+.        nr doc-in-authors-section 0
+.      el \{ .ie "\$1"-split" \
+.        nr doc-in-authors-section 1
+.      el \{\
+.        ds doc-macro-name An
+.        doc-parse-args \$@
+.    \}\}\}
+.    el \{\
+.      tm1 "Usage: .An {-nosplit | -split}
+.      tm1 "       .An author_name ... (#\n[.c])
+.  \}\}
+.
+.  if \n[doc-in-authors-section] \{\
+.    ie \n[doc-have-author] \
+.      br
+.    el \
+.      nr doc-have-author 1
+.  \}
+.
+.  if \n[doc-arg-limit] \{\
+.    nr doc-arg-ptr +1
+.    ie (\n[doc-arg-limit] >= \n[doc-arg-ptr]) \{\
+.      nr doc-curr-font \n[.f]
+.      nr doc-curr-size \n[.ps]
+.      doc-print-recursive
+.    \}
+.    el \{\
+.      tm Usage: .An author_name ... (#\n[.c])
+.      doc-reset-args
+.  \}\}
+..
+.
+.
+.\" NS Rv user macro
+.\" NS   return values
+.\" NS
+.\" NS width register `Rv' set in doc-common
+.\" NS
+.\" NS local variables:
+.\" NS   doc-str-Rv-std-prefix
+.\" NS   doc-str-Rv-std-suffix
+.\" NS   doc-str-Rv-stds-prefix
+.\" NS   doc-str-Rv-stds-and
+.\" NS   doc-str-Rv-stds-suffix
+.\" NS   doc-str-Rv-std0
+.
+.ds doc-str-Rv-std-prefix "The
+.ds doc-str-Rv-std-suffix "function returns the value\~0 if successful;
+.as doc-str-Rv-std-suffix " otherwise the value\~\-1 is returned and
+.as doc-str-Rv-std-suffix " the global variable \*[doc-Va-font]errno\f[]
+.as doc-str-Rv-std-suffix " is set to indicate the error.
+.
+.ds doc-str-Rv-stds-prefix "The
+.ds doc-str-Rv-stds-and    "and
+.ds doc-str-Rv-stds-suffix "functions return the value\~0 if successful;
+.as doc-str-Rv-stds-suffix " otherwise the value\~\-1 is returned and
+.as doc-str-Rv-stds-suffix " the global variable \*[doc-Va-font]errno\f[]
+.as doc-str-Rv-stds-suffix " is set to indicate the error.
+.
+.ds doc-str-Rv-std0 "Upon successful completion, the value\~0 is returned;
+.as doc-str-Rv-std0 " otherwise the value\~\-1 is returned and
+.as doc-str-Rv-std0 " the global variable \*[doc-Va-font]errno\f[]
+.as doc-str-Rv-std0 " is set to indicate the error.
+.
+.de Rv
+.
+.\" XXX: what does this function without `-std'?
+.
+.  if \n[doc-arg-limit] \{\
+.    tm Usage: .Rv not callable by other macros (#\n[.c])
+.    doc-reset-args
+.    return
+.  \}
+.
+.  if !\n[.$] \{\
+.    tm Usage: .Rv [-std] [<function> ...] (#\n[.c])
+.    return
+.  \}
+.
+.  if "\$1"-std" \{\
+.    nr doc-reg-Rv \*[doc-section]
+.    if ((\n[doc-reg-Rv] < 2) : (\n[doc-reg-Rv] > 3)) \
+.      tm Usage: .Rv -std in sections 2 and 3 only (#\n[.c])
+.    br
+.    shift
+.    ie (\n[.$] > 1) \{\
+.      nop \)\*[doc-str-Rv-stds-prefix]
+.      nr doc-reg-Rv 1
+.      while (\n[doc-reg-Rv] < \n[.$]) \{\
+.        ie (\n[.$] > 2) \
+.          Fn \$\n[doc-reg-Rv] ,
+.        el \
+.          Fn \$\n[doc-reg-Rv]
+.        nr doc-reg-Rv +1
+.      \}
+.      nop \)\*[doc-str-Rv-stds-and]
+.      Fn \$\n[.$]
+.      nop \)\*[doc-str-Rv-stds-suffix]
+.    \}
+.    el \{ .ie (\n[.$] == 1) \{\
+.      nop \)\*[doc-str-Rv-std-prefix]
+.      Fn \$1
+.      nop \)\*[doc-str-Rv-std-suffix]
+.    \}
+.    el \{\
+.      nop \)\*[doc-str-Rv-std0]
+.  \}\}\}
+..
+.
+.
+.\" NS Ex user macro
+.\" NS   exit status
+.\" NS
+.\" NS width register `Ex' set in doc-common
+.\" NS
+.\" NS local variables:
+.\" NS   doc-str-Ex-std-prefix
+.\" NS   doc-str-Ex-std-suffix
+.
+.ds doc-str-Ex-std-prefix "The
+.ds doc-str-Ex-std-suffix "utility exits\~0 on success,
+.as doc-str-Ex-std-suffix " and\~>0 if an error occurs.
+.
+.ds doc-str-Ex-stds-prefix "The
+.als doc-str-Ex-stds-and doc-str-Rv-stds-and
+.ds doc-str-Ex-stds-suffix "utilities exit\~0 on success,
+.as doc-str-Ex-stds-suffix " and\~>0 if an error occurs.
+.
+.de Ex
+.
+.\" XXX: what does this function without `-std'?
+.
+.  if \n[doc-arg-limit] \{\
+.    tm Usage: .Ex not callable by other macros (#\n[.c])
+.    doc-reset-args
+.    return
+.  \}
+.
+.  if !\n[.$] \{\
+.    tm Usage: .Ex [-std] [<utility> ...] (#\n[.c])
+.    return
+.  \}
+.
+.  if "\$1"-std" \{\
+.    nr doc-reg-Ex \*[doc-section]
+.    if !((\n[doc-reg-Ex] == 1) : (\n[doc-reg-Ex] == 6) : (\n[doc-reg-Ex] == 8)) \
+.      tm Usage: .Ex -std in sections 1, 6 and 8 only (#\n[.c])
+.    br
+.    shift
+.    ie (\n[.$] > 1) \{\
+.      nop \)\*[doc-str-Ex-stds-prefix]
+.      nr doc-reg-Ex 1
+.      while (\n[doc-reg-Ex] < \n[.$]) \{\
+.        ie (\n[.$] > 2) \
+.          Nm \$\n[doc-reg-Ex] ,
+.        el \
+.          Nm \$\n[doc-reg-Ex]
+.        nr doc-reg-Ex +1
+.      \}
+.      nop \)\*[doc-str-Ex-stds-and]
+.      Nm \$\n[.$]
+.      nop \)\*[doc-str-Ex-stds-suffix]
+.    \}
+.    el \{\
+.      nop \)\*[doc-str-Ex-std-prefix]
+.      Nm \$1
+.      nop \)\*[doc-str-Ex-std-suffix]
+.  \}\}
+..
+.
+.
+.\" NS Mt user macro
+.\" NS   mailto (for conversion to HTML)
+.
+.de Mt
+.  \" XXX: error handling missing
+.  Pa \$@
+..
+.
+.
+.\" NS Lk user macro
+.\" NS   link (for conversion to HTML)
+.\" NS
+.\" NS local variables:
+.\" NS   doc-reg-Lk
+.\" NS   doc-str-Lk
+.
+.de Lk
+.  ds doc-str-Lk Sy \$@
+.
+.  ie (\n[.$] > 1) \{\
+.    doc-get-arg-type \$2
+.    ie (\n[doc-arg-type] < 3) \{\
+.      Em \)\$2:
+.      ds doc-str-Lk Sy "\$1"
+.      doc-get-width "\$1"
+.      shift 2
+.      if \n[.$] \
+.        as doc-str-Lk " \$@
+.    \}
+.    el \
+.      doc-get-width "\$1"
+.  \}
+.  el \
+.    doc-get-width "\$1"
+.
+.  ie n \
+.    nr doc-reg-Lk 26
+.  el \
+.    nr doc-reg-Lk 38
+.  ie (\n[doc-width] >= \n[doc-reg-Lk]) \
+.    D1 \*[doc-str-Lk]
+.  el \
+.    \*[doc-str-Lk]
+..
+.
+.
+.\" NS doc-defunct-macro macro
+.\" NS   this is the skeleton for defunct macros
+.\" NS
+.
+.de doc-defunct-macro
+.  tmc mdoc error: .\$0 defunct
+.  if d doc-\$0-usage \
+.    tmc , \*[doc-\$0-usage]
+.  tm1 " (#\n[.c])
+..
+.
+.
+.\" obsolete macros
+.
+.als Db doc-defunct-macro
+.
+.als Ds doc-defunct-macro
+.
+.als Or doc-defunct-macro
+.ds doc-Or-usage use `|'
+.
+.als Sf doc-defunct-macro
+.ds doc-Sf-usage use .Pf or .Ns
+.
+.
+.rn em e@
+.
+.de em
+.  tm1 "mdoc error: end-macro (.em) respecification is not allowed. (#\n[.c])
+.  tm1 "            Should this have been `.Em ...'?
+.  ab
+..
+.
+.
+.\" NS doc-empty-line macro
+.\" NS   emit warning and print empty line
+.
+.de doc-empty-line
+.  if !\n[doc-display-depth] \
+.    tm mdoc warning: Empty input line #\n[.c]
+.  sp
+..
+.
+.blm doc-empty-line
+.
+.
+.ec
+.
+.
+.\" For UTF-8, map some characters conservatively for the sake
+.\" of easy cut and paste.
+.
+.if '\*[.T]'utf8' \{\
+.  rchar \- - ' `
+.
+.  char \- \N'45'
+.  char  - \N'45'
+.  char  ' \N'39'
+.  char  ` \N'96'
+.\}
+.
+.
+.\" load local modifications
+.mso mdoc.local
+.
+.\" EOF
diff -Nuar groff-1.22.3.old/tmac/e.tmac groff-1.22.3/tmac/e.tmac
--- groff-1.22.3.old/tmac/e.tmac	2014-11-04 10:38:35.534520134 +0200
+++ groff-1.22.3/tmac/e.tmac	1970-01-01 02:00:00.000000000 +0200
@@ -1,2037 +0,0 @@
-.\" -*- nroff -*-
-.\"
-.\"	@(#)e.tmac	2.31 (Berkeley) 5/21/88
-.\"	Modified by James Clark for use with groff.
-.\"
-.\" Copyright (c) 1988 Regents of the University of California.
-.\" All rights reserved.
-.\"
-.\" Redistribution and use in source and binary forms are permitted
-.\" provided that this notice is preserved and that due credit is given
-.\" to the University of California at Berkeley. The name of the University
-.\" may not be used to endorse or promote products derived from this
-.\" software without specific prior written permission. This software
-.\" is provided ``as is'' without express or implied warranty.
-.\"	%beginstrip%
-.\"
-.\"**********************************************************************
-.\"*									*
-.\"*	******  - M E   N R O F F / T R O F F   M A C R O S  ******	*
-.\"*									*
-.\"*	Produced for your edification and enjoyment by:			*
-.\"*		Eric Allman						*
-.\"*		Electronics Research Laboratory				*
-.\"*		U.C. Berkeley.						*
-.\"*	current address:						*
-.\"*		Britton-Lee, Inc.					*
-.\"*		1919 Addison Street Suite 105				*
-.\"*		Berkeley, California  94704				*
-.\"*									*
-.\"*	VERSION 2.31	First Release: 11 Sept 1978			*
-.\"*									*
-.\"*	Documentation is available.					*
-.\"*									*
-.\"**********************************************************************
-.\"
-.\"	Code on .de commands:
-.\"		***	a user interface macro.
-.\"		&&&	a user interface macro which is redefined
-.\"			when used to be the real thing.
-.\"		$$$	a macro which may be redefined by the user
-.\"			to provide variant functions.
-.\"		---	an internal macro.
-.\"
-.
-.do nr need_eo_h 0
-.do nr need_eo_tl 0
-.do nr need_tl 1
-.
-.do mso devtag.tmac
-.
-.if !\n(.g .ig
-.de @R			\" --- initialize number register to 0, if undefined
-.if !r\\$1 .nr \\$1 0
-..
-.
-.\" --- check whether grohtml needs end of title/heading
-.de @html_check_need_title
-.do if (\\n[need_eo_tl] == 1) \
-\{\
-.	do nr need_eo_tl 0
-.	do DEVTAG-EO-TL
-.\}
-.do if (\\n[need_tl] == 1) \
-\{\
-.	do DEVTAG-TL
-.	do nr need_tl 0
-.	do nr need_eo_tl 1
-.\}
-.do if \\n[need_eo_h]>0 .do DEVTAG-EO-H
-.do nr need_eo_h 0
-..
-.
-.de @check_need_title
-..
-.
-.ie '\*(.T'html' \
-.	do als check_need_title @html_check_need_title
-.el \
-.	do als check_need_title @check_need_title
-.
-.@R pf
-.if \n(pf .nx
-.
-.if !\n(.g .ig
-.de @S			\" --- initialize string/macro to empty, if undefined
-.if !d\\$1 .ds \\$1 \" empty
-..
-.
-.@R @\"			\" debugging level
-.
-.
-.\"		*** INTERNAL GP MACROS ***
-.
-.
-.de @C			\" --- change ev's, taking info with us
-.nr _S \\n(.s
-.nr _V \\n(.v
-.nr _F \\n(.f
-.nr _J \\n(.j
-.do ds _A \\n[.fam]
-.nr _I \\n(.i
-.ev \\$1
-.ps \\n(_S
-.vs \\n(_Vu
-.ft \\n(_F
-.ad \\n(_J
-.do @fam \\*(_A
-'in \\n(_Iu
-.xl \\n($lu
-.lt \\n($lu
-.rr _S
-.rr _V
-.rr _F
-.rr _I
-.rr _J
-.ls 1
-'ce 0
-..
-.
-.de @D			\" --- determine display type (Indent, Left, Center)
-.ds |p "\\$3
-.nr _d 0
-.if "\\$2"C" \
-.	nr _d 1
-.if "\\$2"L" \
-.	nr _d 2
-.if "\\$2"I" \
-.	nr _d 3
-.if "\\$2"M" \
-.	nr _d 4
-.if !\\n(_d \
-\{\
-.	nr _d \\$1
-.	ds |p "\\$2
-.\}
-.
-..
-.
-.de @z			\" --- end macro
-.if \n@>1 .tm >> @z, .z=\\n(.z ?a=\\n(?a
-.if !"\\n(.z"" \
-\{\
-.	tm Line \\n(c. -- Unclosed block, footnote, or other diversion (\\n(.z)
-.	di
-.	ex
-.\}
-.if \\n(?a \
-.	bp			\" force out final table
-.ds bp
-.ds @b\"			\" don't start another page
-.br
-.if \n@>1 .tm << @z
-..
-.
-.
-.\"		*** STANDARD HEADERS AND FOOTERS ***
-.
-.
-.ie \n(.g .ds $* \\\\$*
-.el .ds $* \\\\$1 \\\\$2 \\\\$3 \\\\$4 \\\\$5 \\\\$6 \\\\$7 \\\\$8 \\\\$9
-.
-.de he			\" *** define header
-.ie !\\n(.$ \
-\{\
-.	rm |4
-.	rm |5
-.\}
-.el \
-\{\
-.	ds |4 "\*($*
-.	ds |5 "\*($*
-.\}
-..
-.
-.de eh			\" *** define even header
-.ie !\\n(.$ \
-.	rm |4
-.el \
-.	ds |4 "\*($*
-..
-.
-.de oh			\" *** define odd header
-.ie !\\n(.$ \
-.	rm |5
-.el \
-.	ds |5 "\*($*
-..
-.
-.de fo			\" *** define footer
-.ie !\\n(.$ \
-\{\
-.	rm |6
-.	rm |7
-.\}
-.el \
-\{\
-.	ds |6 "\*($*
-.	ds |7 "\*($*
-.\}
-..
-.
-.de ef			\" *** define even foot
-.ie !\\n(.$ \
-.	rm |6
-.el \
-.	ds |6 "\*($*
-..
-.
-.de of			\" *** define odd footer
-.ie !\\n(.$ \
-.	rm |7
-.el \
-.	ds |7 "\*($*
-..
-.
-.de ep			\" *** end page (must always be followed by a .bp)
-.if \\n(nl>0 \
-\{\
-.	wh 0
-.	rs
-.	@b
-.\}
-..
-.
-.
-.\"		*** INTERNAL HEADER AND FOOTER MACROS ***
-.
-.
-.de @h			\" --- header
-.if \n@>1 .tm >> @h %=\\n% ?a=\\n(?a ?b=\\n(?b ?w=\\n(?w
-.if (\\n(.i+\\n(.o)>=\\n(.l \
-.	tm Line \\n(c. -- Offset + indent exceeds line length
-.\" initialize a pile of junk
-.nr ?h \\n(?H			\" transfer "next page" to "this page"
-.nr ?H 0
-.nr ?c \\n(?C
-.nr ?C 0
-.rn |4 |0
-.rn |5 |1
-.rn |6 |2
-.rn |7 |3
-.nr _w 0			\" reset max footnote width
-.nr ?W 0			\" no wide floats this page (yet)
-.nr ?I 1
-.\" begin actual header stuff
-.ev 2
-.rs
-.if \\n(hm>0 \
-.	if !'\*(.T'html' \
-.		sp |\\n(hmu	\" move to header position
-.@t $h\"			\" output header title
-.if \\n(tm<=0 \
-.	nr tm \n(.Vu
-.if !'\*(.T'html' \
-.	sp |\\n(tmu		\" move to top of text
-.ev
-.mk _k				\" for columned output
-.if \\n(?n=1 .nm 1		\" restore line numbering if n1 mode
-.nr $c 1			\" set first column
-.if \n@>4 .tm -- @h >> .ns nl=\\n(nl %=\\n% _k=\\n(_k tm=\\n(tm
-.ie \\n(?s \
-\{\
-.	nr ?s 0
-.	rs
-'	@b
-.\}
-.el \
-.	@n\"			\" begin the column
-.if \n@>2 .tm << @h
-..
-.
-.de @n			\" --- new column or page
-.if \n@>3 .tm >> @n nl=\\n(nl %=\\n% ?f=\\n(?f ?o=\\n(?o
-.if \\n(bm<=0 \
-.	nr bm \\n(.Vu
-.if (\\n(_w<=\\n($l)&(\\n(?W=0) \
-\{\
-.	nr _b (\\n(ppp*\\n($vu)/200u	\" compute fudge factor (must be < 1P)
-.	if \\n(_bu>((\\n(bmu-\\n(fmu-((\\n(tpp*\\n($vu)/100u))/2u) \
-.		nr _b (\\n(ppp*\\n($vu)/100u-\n(.Vu
-.	nr _b +\\n(bmu
-.\}
-.nr _B \\n(_bu
-.ch @f
-.wh -\\n(_bu @f
-.nr _b +(\\n(ppp*\\n($vu)/100u \" add 1 paragraph v in case of sweep past
-.if \n@>2 .tm @n .p=\\n(.p bm=\\n(bm _b=\\n(_b _B=\\n(_B
-.nr ?f 0			\" reset footnote flag
-.if \\n(?o \
-\{\
-.	(f _\"			\" reprocess footnotes which run off page
-.	nf
-.	|o
-.	fi
-.	)f
-.	rm |o
-.\}
-.nr ?o 0
-.if \\n(?T \
-\{\
-.	nr _i \\n(.i
-.	if \\n(?n \
-.		nm \\n(ln
-.	in 0
-.	|h\"			\" output the table header
-.	in \\n(_iu
-.	if \\n(?n \
-.		nm
-.	rr _i
-.	mk #T			\" for tbl commands
-.	ns
-.\}
-.if (\\n(?a)&((\\n($c<2):(\\n(?w=0)) \
-\{\
-.	nr ?a 0			\" output floating keep
-.	@k |t
-.	if \\n(?w \
-.		mk _k		\" don't overstrike wide keeps
-.	nr ?w 0
-.\}
-.os
-.$H\"				\" special column header macro
-.ns
-..
-.
-.de @f			\" --- footer
-.if \n@>1 .tm >> @f %=\\n% nl=\\n(nl ?a=\\n(?a ?b=\\n(?b ?f=\\n(?f
-.if \n@>2 .nr VL \\n(.pu-\\n(nlu
-.if \n@>2 .tm @f bm=\\n(bm _B=\\n(_B _b=\\n(_b .p-nl=\\n(VL
-.ec
-.if \\n(?T \
-\{\
-.	nr T. 1			\" for tbl commands (to output bottom line)
-.	T# 1\"			\" output the sides and bottom lines
-.	br
-.\}
-.ev 2
-.ce 0
-.if \\n(?b \
-\{\
-.	nr ?b 0
-.	@k |b\"			\" output bottom of page tables
-.\}
-.if \\n(?f \
-.	@o\"			\" output footnote if present
-.ie \\n($c<\\n($m \
-.	@c\"			\" handle new column
-.el \
-.	@e\"			\" new page
-.ev
-.if \n@>2 .tm << @f
-..
-.
-.de @o			\" --- output footnote
-.nf
-.ls 1
-.in 0
-.if \n@>2 .tm @o last printed text = \\n(nl placing @r trap at -\\n(_B
-.wh -\\n(_Bu @r
-.if \\n(?n \
-.	nm \\n(ln
-.|f
-.if \\n(?n \
-.	nm
-.fi
-.if \n@>2 .tm @o triggered @r (?o) = \\n(?o
-.if \\n(?o \
-\{\
-.	di			\" just in case triggered @r
-.	if \\n(dn=0 \
-\{\
-.		rm |o
-.		nr ?o 0
-.	\}
-.	nr dn \\n(_D
-.	rr _D
-.\}
-.rm |f
-.ch @r
-..
-.
-.de @c			\" --- new column
-.if \n@>2 .tm	>> @c %=\\n%
-.rs
-.sp |\\n(_ku
-.@O +\\n($lu+\\n($su
-.nr $c +1
-.@n
-..
-.
-.de @e			\" --- end page
-.if \n@>2 .tm	>> @e
-.@O \\n(_ou
-.rs
-.sp |\\n(.pu-\\n(fmu-((\\n(tpp*\\n($vu)/100u)	\" move to footer position
-.@t $f\"			\" output footer title
-.nr ?h 0
-.bp
-..
-.
-.de @t			\" --- output header or footer title
-.if !\\n(?h \
-\{\
-.	sz \\n(tp\"		\" set header/footer type fonts, etc.
-.	@F \\n(tf
-.	lt \\n(_Lu		\" make title span entire page
-.	if \\n(?n \
-.		nm \\n(ln
-.	nf
-.	\\$1
-.	br
-.	if \\n(?n \
-.		nm
-.\}
-..
-.
-.de $h			\" $$$ print header
-.ds |z
-.if !\\n(?c \
-\{\
-.	if e .ds |z "\\*(|0
-.	if o .ds |z "\\*(|1
-.\}
-.if !\(ts\\*(|z\(ts\(ts \
-'	tl \\*(|z
-.rm |z
-..
-.
-.de $f			\" $$$ print footer
-.ds |z
-.if \\n(?c \
-\{\
-.	if e .ds |z "\\*(|0
-.	if o .ds |z "\\*(|1
-.\}
-.if \(ts\\*(|z\(ts\(ts \
-\{\
-.	if e .ds |z "\\*(|2
-.	if o .ds |z "\\*(|3
-.\}
-.if !\(ts\\*(|z\(ts\(ts \
-'	tl \\*(|z
-.rm |z
-..
-.
-.de @r			\" --- reprocess overflow footnotes
-.if \n@>3 .tm		>> @r .z=\\n(.z ?f=\\n(?f ?a=\\n(?a ?b=\\n(?b _b=\\n(_b
-.di |o				\" save overflow footnote
-.nr ?o 1
-.nr _D \\n(dn
-.ns
-..
-.
-.
-.\"		*** COMMANDS WITH VARIANT DEFINITIONS ***
-.
-.
-.if !'\*(.T'html' .rn bp @b	\" --- begin page
-.
-.de bp			\" *** begin new page (overrides columns)
-.nr $c \\n($m			\" force new page, not new column
-.ie \\n(nl>0 \
-.	@b \\$1
-.el \
-\{\
-.	if \\n(.$>0 \
-.		pn \\$1
-.	if \\n(?I \
-.		@h\"		\" 'spring' the header trap
-.\}
-.br
-.wh 0 @h			\" reset header
-..
-.
-.rn ll xl		\" *** special line length (local)
-.de ll			\" *** line length (global to environments)
-.xl \\$1
-.lt \\$1
-.nr $l \\n(.l
-.if (\\n($m<=1):(\\n($l>\\n(_L) \
-.	nr _L \\n(.l
-..
-.
-.rn po @O		\" --- local page offset
-.
-.de po			\" *** page offset
-.@O \\$1
-.nr _o \\n(.o
-..
-.
-.\" Redefine the fam request to set the family in
-.\" environment 2 as well as the current environment.
-.if !\n(.g .ig
-.do rn fam @fam		\" --- set family in current environment
-.do de fam		\" *** set font family in ev 2 and current ev
-.do @fam \\$1
-.ev 2
-.do @fam \\$1
-.ev
-..
-.
-.
-.\"		*** MISCELLANEOUS ROFF COMMANDS ***
-.
-.
-.de hx			\" *** suppress headers and footers next page
-.nr ?H 1
-..
-.
-.de ix			\" *** indent, no break
-'in \\$1
-..
-.
-.de bl			\" *** contiguous blank lines
-.br
-.@s \\$1
-.sp \\$1
-..
-.
-.de @s			\" --- diversion-surviving space test
-.ne \\$1
-.rs
-.if !'\\n(.z'' \!.@s \\$1
-..
-.
-.de n1			\" *** line numbering 1
-.nm 1
-.ll -\w'0000'u
-.nr ?n 1
-..
-.
-.de n2			\" *** line numbering 2
-.ie \\n(.$ \
-\{\
-.	ie !`\\$2`c` \
-.		po -\w'0000'u
-.	el \
-.		ll -\w'0000'u
-.	ie \\B`\\$1` \
-\{\
-.		ds |i \\$1
-.		ds |j \\$1
-.		do substring |i 0 0  \" pick off leading char and rest to check
-.		do substring |j 1    \" for +N / -N
-.		ie `\\*(|i`+` \
-.			nr ln (\\n[_ln])+\\*(|j
-.		el \
-.			ie `\\*(|i`-` \
-.				nr ln (\\n[_ln])-\\*(|j
-.			el \
-.				nr ln \\$1  \" unsigned N
-.		nm \\n(ln
-.		nr ?n 2
-.		rm |i |j
-.\}
-.	el \
-.		tm Line \\n(.c -- Bad .n2 value
-.\}
-.el \
-\{\
-.	nm
-.	nr _ln \\n(ln
-.	po +\w'0000'u
-.	ll \\n($lu
-.	nr ?n 0
-.	nr ln 0
-.\}
-..
-.
-.de pa			\" *** new page
-.bp \\$1
-..
-.
-.de ro			\" *** roman page numbers
-.af % i
-..
-.
-.de ar			\" *** arabic page numbers
-.af % 1
-..
-.
-.de m1			\" *** position one space
-.nr _0 \\n(hmu
-.nr hm \\$1v
-.nr tm +\\n(hmu-\\n(_0u
-.rr _0
-..
-.
-.de m2			\" *** position two space
-.nr tm \\n(hmu+\\n(tpp+\\$1v
-..
-.
-.de m3			\" *** position three space
-.nr bm \\n(fmu+\\n(tpp+\\$1v
-..
-.
-.de m4			\" *** position four space
-.nr _0 \\n(fmu
-.nr fm \\$1v
-.nr bm +\\n(fmu-\\n(_0u
-..
-.
-.de sk			\" *** leave a blank page (next page)
-.if \\n(.$>0 \
-.	tm Line \\n(c. -- I cannot skip multiple pages
-.nr ?s 1
-..
-.
-.
-.\"		*** MISCELLANEOUS USER SUPPORT COMMANDS ***
-.
-.
-.if !\n(.g .ig
-.de re			\" *** reset tabs (TROFF defines 15 stops default)
-.ta T 0.5i
-..
-.
-.if \n(.g .ig
-.de re
-.ta 0.5i +0.5i +0.5i +0.5i +0.5i +0.5i +0.5i +0.5i +0.5i +0.5i +0.5i +0.5i +0.5i +0.5i +0.5i
-..
-.
-.de ba			\" *** set base indent
-.ie \\n(.$ \
-.	nr $i \\$1n
-.el \
-.	nr $i \\n(siu*\\n($0u
-..
-.
-.de hl			\" *** draw horizontal line
-.br
-.if '\*(.T'html' \
-\{\
-.	HR
-.	do return
-.\}
-.ie \n(.g .do nr _I \\n[.in]
-.el .nr _I \\n(.i
-\l'\\n(.lu-\\n(_Iu'
-.sp
-..
-.
-.
-.\"		*** PARAGRAPHING ***
-.
-.
-.de pp			\" *** paragraph
-.lp \\n(piu
-..
-.
-.de lp			\" *** left aligned paragraph
-.@p
-.if \\n(.$ \
-.	ti +\\$1
-.nr $p 0 1
-..
-.
-.de ip			\" *** indented paragraph w/ optional tag
-.if (\\n(ii>0)&(\\n(ii<1n) \
-.	nr ii \\n(iin
-.nr _0 \\n(ii
-.if \\n(.$>1 \
-.	nr _0 \\$2n
-.@p \\n(_0u
-.nr _I \\n(.iu
-.in 0
-.di |i
-\&\\$1
-.br
-.di
-.in \\n(_Iu
-.ds |j \\*(|i\\
-.ie \\w"\\*(|j" \
-\{\
-.	ti -\\n(_0u
-.	ie \\w"\\*(|j">=\\n(_0 \
-\{\
-.		do DEVTAG-COL 1
-\\*(|j
-.		do DEVTAG-COL-NEXT 2
-.		br
-.	\}
-.	el \
-\{\
-.		do DEVTAG-COL 1
-\\*(|j\h'|\\n(_0u'\c
-.		do DEVTAG-COL 2
-.       \}
-.\}
-.el .do DEVTAG-COL 2
-.rr _0
-.rm |i |j
-..
-.
-.de np			\" *** numbered paragraph
-.\" use string comparison in case user has changed format of $p
-.if '\\n($p'-1' \
-.	nr $p 0			\" reset number after .bu
-.nr $p +1			\" increment paragraph number
-.@p \w'\0(000)\0'u
-.ti -\w'\0(000)\0'u
-\0(\\n($p)\h'|\w'\0(000)\0'u'\c
-..
-.
-.de bu			\" *** bulleted paragraph
-.br
-.\" use string comparison in case user has changed format of $p
-.if '\\n($p'-1' \
-.	ns			\" don't space between .bu paragraphs
-.nr $p 0-1			\" mark "bulleted paragraph" mode
-.@p \w'\0\(bu\0'u
-.ti -\w'\0\(bu\0'u
-\0\(bu\0\c
-..
-.
-.de @p			\" --- initialize for paragraph
-.do check_need_title
-.if "\\n(.z"|e" .tm Line \\n(c. -- Unmatched continued equation
-.in \\n($iu+\\n(pou
-.if \\n(.$ \
-.	in +\\$1n
-.ce 0
-.fi
-.@F \\n(pf
-.sz \\n(pp
-.sp \\n(psu
-.ne \\n(.Lv+\\n(.Vu
-.ns
-..
-.
-.
-.\"		*** SECTION HEADINGS ***
-.
-.
-.de sh			\" *** section heading
-.fi
-.do check_need_title
-.if (\\n(si>0)&(\\n(si<1n) \
-.	nr si \\n(sin
-.if '\*(.T'html' .nr si 0
-.ce 0
-.if '\*(.T'html' \
-\{\
-.	do DEVTAG-SH \\$1
-.	do nr need_eo_h 1
-.\}
-.@d "\\$1" +1 \\$3 \\$4 \\$5 \\$6 \\$7 \\$8
-.if !"\\$2"_" \
-\{\
-.	ds |n \&\\$2
-.	$p "\\*(|n" "\\*($n" \\n($0
-.	$0 "\\*(|n" "\\*($n" \\n($0
-.	rm |n
-.\}
-.nr $p 0 1			\" reset .np count
-..
-.
-.de @d			\" --- change section depth
-.if !""\\$1" \
-.	nr $0 \\$1
-.if \\n($0&(\\n(.$>1) \
-.	nr $\\n($0 \\$2
-.ds $n \&\"
-.ie \\n($0>=1 \
-\{\
-.	if '\\n($1'0' \
-.		nr $1 1
-.	if (\\n(.$>=3) .if !"\\$3"-" \
-.		nr $1 \\$3
-.	as $n \\n($1
-.\}
-.el \
-.	nr $1 0
-.ie \\n($0>=2 \
-\{\
-.	if '\\n($2'0' \
-.		nr $2 1
-.	if (\\n(.$>=4) .if !"\\$4"-" \
-.		nr $2 \\$4
-.	as $n .\\n($2
-.\}
-.el \
-.	nr $2 0
-.ie \\n($0>=3 \
-\{\
-.	if '\\n($3'0' \
-.		nr $3 1
-.	if (\\n(.$>=5) .if !"\\$5"-" \
-.		nr $3 \\$5
-.	as $n .\\n($3
-.\}
-.el \
-.	nr $3 0
-.ie \\n($0>=4 \
-\{\
-.	if '\\n($4'0' \
-.		nr $4 1
-.	if (\\n(.$>=6) .if !"\\$6"-" \
-.		nr $4 \\$6
-.	as $n .\\n($4
-.\}
-.el \
-.	nr $4 0
-.ie \\n($0>=5 \
-\{\
-.	if '\\n($5'0' \
-.		nr $5 1
-.	if (\\n(.$>=7) .if !"\\$7"-" \
-.		nr $5 \\$7
-.	as $n .\\n($5
-.\}
-.el \
-.	nr $5 0
-.ie \\n($0>=6 \
-\{\
-.	if '\\n($6'0' \
-.		nr $6 1
-.	if (\\n(.$>=8) .if !"\\$8"-" \
-.		nr $6 \\$8
-.	as $n .\\n($6
-.\}
-.el \
-.	nr $6 0
-..
-.
-.de sx			\" *** heading up, no increment (2.1.1 -> 2.1)
-.ce 0
-.ul 0
-.nr _0 \\n($0-1
-.if \\n(.$ .nr _0 +1
-.if \\n(.$ .nr _0 \\$1
-.@d \\n(_0
-.rr _0
-.$p "" "" \\n($0
-.nr $p 0 1			\" reset .np count
-..
-.
-.de uh			\" *** unnumbered section heading
-.$p "\\$1"
-.$0 "\\$1"
-..
-.
-.de $p			\" $$$ print section heading
-.if (\\n(si>0)&(\\n(.$>2) \
-.	nr $i \\$3*\\n(si
-.in \\n($iu
-.ie !"\\$1\\$2"" \
-\{\
-.	sp \\n(ssu 		\" one of them is non-null
-.	ne \\n(.Lv+\\n(.Vu+\\n(psu+((\\n(spp*\\n($vu*\\n(.Lu)/100u)
-.	\" exdent if \\$3 > 0
-.	ie 0\\$3 \
-.		ti -(\\n(siu-\\n(sou)
-.	el \
-.		ti +\\n(sou
-.	@F \\n(sf
-.	sz \\n(sp
-.	if 0\\$3 \
-.		$\\$3
-.	if \w"\\$2">0 \\$2.
-.	if \w"\\$1">0 \\$1\f1\ \ \&
-.\}
-.el \
-.	sp \\n(psu
-.@F \\n(pf
-.sz \\n(pp
-..
-.
-.
-.\"		*** COLUMNED OUTPUT ***
-.
-.
-.de 2c			\" *** double columned output
-.br
-.if \\n($m>1 \
-.	1c\"			\" revert to 1c if already 2c
-.nr $c 1
-.nr $m 2
-.if \\n(.$>1 \
-.	nr $m \\$2
-.if \\n(.$>0 \
-.	nr $s \\$1n		\" param 1: column separation
-.nr $l (\\n(.l-((\\n($m-1)*\\n($s))/\\n($m
-.xl \\n($lu
-.mk _k
-.ns
-..
-.
-.de 1c			\" *** single columned output
-.br
-.nr $c 1
-.nr $m 1
-.ll \\n(_Lu			\" return to normal output
-.sp |\\n(.hu
-.@O \\n(_ou
-..
-.
-.de bc			\" *** begin column
-.sp 24i
-..
-.
-.
-.\"		*** FLOATING TABLES AND NONFLOATING BLOCKS ***
-.
-.
-.de (z			\" *** begin floating keep
-.if \n@>4 .tm >> (z, .z=\n(.z
-.@D 4 \\$1 \\$2
-.@(
-..
-.
-.de )z			\" *** end floating keep
-.if \n@>4 .tm >> )z, .z=\n(.z
-.sp \\n(zsu
-.@)
-.if \n@>4 .tm -- )z << @), .z=\n(.z
-.rr _0
-.if !\\n(?b \
-.	nr dn +(\\n(ppp*\\n($vu)/200u+\\n(zsu
-.nr dl -\n(.H			\" fudge factor necessary to make it work
-.ie ((\\n(dn+\n(.V)>=\\n(.t):(\\n(?a):((\\n(dl>\\n($l)&(\\n($c>1)) \
-\{\
-.	nr ?a 1
-.	if (\\n(dl>\\n($l)&(\\n($m>1) \
-.		nr ?w 1		\" mark wider than one column (top)
-.	ds |x |t
-.\}
-.el \
-\{\
-.	nr ?b 1
-.	if (\\n(dl>\\n($l)&(\\n($m>1) \
-.		nr ?W 1		\" mark wider than one column (bottom)
-.	nr _b +\\n(dnu
-.	\" avoid moving @f back past the current position
-.	if \\n(.p-\\n(nl-\n(.V<\\n(_b \
-.		nr _b \\n(.p-\\n(nl-\n(.V
-.	ch @f -\\n(_bu
-.	ds |x |b
-.\}
-.da \\*(|x			\" copy to save macro
-.nf
-.ls 1
-.nr ?k 1
-.if \n@>4 .tm -- )z >> \\*(|x
-\!.if \\\\n(nl>(\\\\n(tm+2v) .ne \\n(dnu-\\n(zsu
-.|k\"				\" and the body
-.ec
-.if \n@>4 .tm -- )z << \\*(|x, .z=\\n(.z
-.nr ?k 0
-.rm |k\"			\" remove the temp macro
-.da
-.in 0
-.ls 1
-.xl \\n($lu
-.ev
-.if \n@>4 .tm << )z, .z=\\n(.z
-..
-.
-.de @k			\" --- output floating keep
-.if \n@>4 .tm >> @k, $1=\\$1, .z=\\n(.z
-.ev 1
-.nf
-.ls 1
-.in 0
-.sp \\n(zsu
-.if \\n(?n \
-.	nm \\n(ln
-.\\$1
-.if \\n(?n \
-.	nm
-.ec
-.br
-.rm \\$1
-.ev
-..
-.
-.de (t			\" XXX temp ref to (z
-.(z \\$1 \\$2
-..
-.
-.de )t			\" XXX temp ref to )t
-.)z \\$1 \\$2
-..
-.
-.de (b			\" *** begin block
-.br
-.@D 3 \\$1 \\$2
-.sp \\n(bsu
-.@(
-.if '\*(.T'html' .sp \\n(bsu
-..
-.
-.de )b			\" *** end block
-.br
-.@)
-.if (\\n(bt=0):(\\n(.t<\\n(bt) \
-.	ne \\n(dnu		\" make it all on one page
-.@k |k
-.ev                             \" return from display environment
-.sp \\n(bsu+\\n(.Lv-1v
-..
-.
-.de @(			\" --- begin keep
-.if !"\\n(.z"" .tm Line \\n(c. -- Invalid nested keep \\n(.z
-.@M
-.di |k
-\!'rs
-..
-.
-.de @M			\" --- set modes for display
-.nr ?k 1
-.@C 1
-.@F \\n(df
-.if \\n($R .@V
-.vs \\n(.sp*\\n($Vu/100u
-.nf
-.if "\\*(|p"F" \
-.	fi			\" set fill mode if "F" parameter
-.if \\n(_d=4 \
-.	in 0
-.if \\n(_d=3 \
-\{\
-.	in +\\n(biu
-.	xl -\\n(biu
-.\}
-.if \\n(_d=1 \
-.	ce 10000
-..
-.
-.de @)			\" --- end keep
-.br
-.if !"\\n(.z"|k" .tm Line \\n(c. -- Close of a keep which has never been opened
-.nr ?k 0
-.di
-.in 0
-.ce 0
-..
-.
-.de (c			\" *** begin block centered text
-.br
-.if "\\n(.z"|c" .tm Line \\n(c. -- Nested .(c requests
-.if \\n(?n .nm
-.di |c
-..
-.
-.de )c			\" *** end block centered text
-.if !"\\n(.z"|c" .tm Line \\n(c. -- Unmatched .)c
-.br				\" force out final line
-.di
-.if \n@>4 .tm >> .)c .l=\\n(.l .i=\\n(.i $i=\\n($i dl=\\n(dl
-.ev 1
-.ls 1
-.in (\\n(.lu-\\n(.iu-\\n(dlu)/2u
-.if \n@>4 .tm -- .)c << .in .l=\\n(.l .i=\\n(.i dl=\\n(dl
-.if \\n(?n \
-.	nm \\n(ln
-.nf
-.|c
-.ec
-.in
-.ls
-.if \\n(?n \
-.	nm
-.ev
-.rm |c
-..
-.
-.
-.\"		*** BLOCK QUOTES (OR WHATEVER) AND LISTS ***
-.
-.
-.de (q			\" *** begin block quote
-.br
-.@C 1
-.fi
-.sp \\n(qsu
-.in +\\n(qiu
-.xl -\\n(qiu
-.sz \\n(qp
-.if \\n(?n \
-.	nm \\n(ln
-..
-.
-.de )q			\" *** end block quote
-.br
-.if \\n(?n \
-.	nm
-.ev
-.sp \\n(qsu+\\n(.Lv-1v
-.nr ?k 0
-..
-.
-.de (l			\" *** begin list
-.br
-.sp \\n(bsu
-.@D 3 \\$1 \\$2
-.@M
-.if \\n(?n \
-.	nm \\n(ln
-.if '\*(.T'html' .sp \\n(bsu
-..
-.
-.de )l			\" *** end list
-.br
-.if \\n(?n \
-.	nm
-.ev
-.sp \\n(bsu+\\n(.Lv-1v
-.nr ?k 0
-..
-.
-.
-.\"		*** PREPROCESSOR SUPPORT ***
-.
-.
-.\"
-.\"	EQN
-.\"
-.de EQ			\" *** equation start
-.do if \\n[need_eo_h]>0 .do DEVTAG-EO-H
-.do nr need_eo_h 0
-.ec
-.if "\*(.T"html" \
-\{\
-.	do nr e-EQ-ll \\n(.l
-.	ll 1000n
-.\}
-.do HTML-IMAGE
-.if !\\n(?e \
-\{\
-.	if "\\n(.z"|e" .tm Line \\n(c. -- Nested .EQ request
-.	@D 1 "\\$1" "\\$2"
-.	@C 2
-.	di |e
-.\}
-.ls 1
-.in 0
-.nf
-..
-.
-.de EN			\" *** equation end
-.br
-.do HTML-IMAGE-END
-.if "\*(.T"html" \
-.	do ll \\n[e-EQ-ll]u
-.ie "\\$1"C" \
-\{\
-.	nr ?e 1
-.	sp \\n(esu
-.\}
-.el \
-\{\
-.	nr ?e 0
-.	di
-.	if \\n(dn \
-.		@q\"		\" actual equation output
-.	rm |e
-.	ev
-.\}
-..
-.
-.de @q			\" --- equation output
-.nr _Q \\n(dnu
-.ev
-.sp \\n(esu			\" output rest of preceding text
-.if !"\\n(.z"" \!.ne \\n(_Qu
-.ne \\n(_Qu+\n(.Vu		\" keep it on one page
-.@C 2\"				\" .ev 2 may be jumbled from header
-.if \\n(_d=1 \
-.	in (\\n(.lu+\\n($iu-\\n(dlu)/2u
-.if \\n(_d=2 \
-.	in \\n($iu
-.if \\n(_d=3 \
-.	in \\n(biu+\\n($iu
-.if \\n(_d=4 \
-.	in 0
-.mk _q
-.if \n@>1 .tm --@e: _Q=\\n(_Q _q=\\n(_q nl=\\n(nl |p=\\*(|p
-.if !"\\*(|p"" \
-\{\
-.	rs
-.	sp (\\n(_Qu-\\n(.vu)/2u
-.	tl """\\*(|p"
-.	rt \\n(_qu
-.\}
-.if \\n(?n \
-.	nm \\n(ln
-.|e
-.if \\n(?n \
-.	nm
-.sp |\\n(_qu+\\n(_Qu
-.sp \\n(esu+\\n(.Lv-1v
-.rr _q
-.rr _Q
-..
-.
-.\"
-.\"	TBL
-.\"
-.de TS			\" *** table start
-.sp \\n(bsu
-.if "\*(.T"html" \
-\{\
-.	do nr e-TS-ll \\n(.l
-.	ll 1000n
-.\}
-.do HTML-IMAGE
-.@C 1
-.fi				\" drop into fill mode for text boxes
-.if "\\$1"H" \
-\{\
-.	di |h			\" save header part
-.	nr ?T 1
-.\}
-.ls 1
-.ch @f -(\\n(_bu+1v)		\" set pseudo-trap for bottom line
-.if \\n(.p-\\n(_b-1v<=\\n(nl \
-.	ch @f \\n(nlu+\n(.Vu
-..
-.
-.de TH			\" *** end header part of table
-.nr T. 0
-.T# 0
-.if \\n(?n \!.nm
-.di
-.nr _T \\n(?T
-.nr ?T 0
-.ne \\n(dnu+1v
-.nr ?T \\n(_T
-.nr _i \\n(.i
-.if \\n(?n .nm \\n(ln
-.in 0
-.|h\"				\" put in the initial header
-.in \\n(_iu
-.rr _i
-.mk #T
-..
-.
-.de TE			\" *** table end
-.nr ?T 0
-.ch @f -\\n(_bu			\" reset pseudo-trap
-.if \\n(.p-\\n(_b<=\\n(nl \
-.	ch @f \\n(nlu+\n(.Vu
-.ev
-.do HTML-IMAGE-END
-.if "\*(.T"html" \
-.	do ll \\n[e-TS-ll]u
-.sp \\n(bsu+\\n(.Lv-1v
-.re
-..
-.
-.de T&
-..
-.
-.\"
-.\"	REFER
-.\"
-.mso refer-me.tmac
-.
-.\"
-.\"	IDEAL
-.\"
-.de IS			\" *** start ideal picture
-.nr g7 \\n(.u
-.ls 1
-..
-.
-.de IF
-.if \\n(g7 .fi
-.ls
-..
-.
-.de IE			\" *** end ideal picture
-.if \\n(g7 .fi
-.ls
-..
-.
-.\"
-.\"	PIC
-.\"
-.de PS		\" *** start picture: $1=height, $2=width in units or inches
-.sp 0.3
-.do HTML-IMAGE
-.nr g7 \\$2
-.in (u;\\n(.l-\\n(g7>?0/2)
-.ne \\$1u
-.nr g7 \\n(.u
-.ls 1
-.if \\n(?n \
-\{\
-.	de PS_nm_check &&        \" define macro to emit .nm at top diversion
-.	if \n@>4 .tm -- PS: \\\\$1 \\\\$2 .z=\\\\n(.z PS_nm_cnt=\\\\n[PS_nm_cnt]
-.	\"                       \" multiple .PS/.PE in a keep.
-.	if `\\\\$2`init` \
-.		do nr PS_nm_cnt \\\\n[PS_nm_cnt]+1
-.	ie `\\\\n(.z`` \
-\{\
-.		if `\\\\$1`suspend` \
-.			nm
-.		if `\\\\$1`resume` \
-\{\
-.			nm \\\\n(ln
-.			do nr PS_nm_cnt \\\\n[PS_nm_cnt]-1
-.			do if !\\\\n[PS_nm_cnt] \
-\{\
-.				do rm PS_nm_check
-.				do rr PS_nm_cnt
-.\}
-.\}
-.\}
-.el \!.PS_nm_check \\\\$1
-.&&
-.	mk _q                    \" emit a single numbered line for PS picture
-.	rs
-\&\ 
-.	br
-.	rt \\n(_qu
-.	PS_nm_check suspend init
-.\}
-..
-.
-.de PE			\" *** end picture
-.if \\n(?n .PS_nm_check resume
-.ls
-.in
-.if \\n(g7 .fi
-.do HTML-IMAGE-END
-.sp .6
-..
-.
-.\"
-.\"	GREMLIN
-.\"
-.de GS			\" *** start gremlin picture
-.ie '\*(.T'html' \
-\{\
-.	ie "\\$1"L" .do HTML-IMAGE-LEFT
-.	el .ie "\\$1"R" .do HTML-IMAGE-RIGHT
-.	el .do HTML-IMAGE
-.\}
-.el \
-\{\
-.	nr g7 (\\n(.lu-\\n(g1u)/2u
-.	if "\\$1"L" .nr g7 \\n(.iu
-.	if "\\$1"R" .nr g7 \\n(.lu-\\n(g1u
-.	in \\n(g7u
-.	nr g7 \\n(.u
-.	ls 1
-.	nf
-.	ne \\n(g2u
-.\}
-..
-.
-.de GE			\" *** end gremlin picture
-.ie '\*(.T'html' .do HTML-IMAGE-END
-.el \
-\{\
-.	GF
-.	sp .6
-.\}
-..
-.
-.de GF			\" *** finish gremlin picture; stay at top
-.ls
-.in
-.if \\n(g7 .fi
-..
-.
-.
-.\"		*** FONT AIDS ***
-.
-.
-.de sz			\" *** set point size and vertical spacing
-.ps \\$1
-.if \\n($r .@v
-.vs \\n(.sp*\\n($vu/100u	\" default vs at pointsize + 20%
-..
-.
-.de @v			\" --- possibly set $v from $r
-.if (1i>=240u)&(1p<=\\n($r)&(\\n($r<=4p) .nr $v \\n($r00/1p
-..
-.
-.de @V			\" --- possibly set $V from $R
-.if (1i>=240u)&(1p<=\\n($R)&(\\n($R<=4p) .nr $V \\n($R00/1p
-..
-.
-.de @E			\" --- store in _F argument to \f for restoring font
-.ie \\n(.f<10 \
-.	ds _F \\n(.f
-.el \
-\{\
-.	ie \\n(.f<100&\n(.g \
-.		ds _F (\\n(.f
-.	el \
-.		ds _F P
-.\}
-..
-.
-.de r			\" *** enter roman font
-.do check_need_title
-.@E
-.ft 1
-.if \\n(.$ \&\\$1\f\\*(_F\\$2
-.do check_need_title
-..
-.
-.de i			\" *** enter italic
-.do check_need_title
-.@E
-.ft 2
-.if \\n(.$ \&\\$1\f\\*(_F\\$2
-.do check_need_title
-..
-.
-.de b			\" *** enter boldface
-.do check_need_title
-.@E
-.ft 3
-.if \\n(.$ \&\\$1\f\\*(_F\\$2
-.do check_need_title
-..
-.
-.de rb			\" *** enter real boldface
-.do check_need_title
-.@E
-.ft 3
-.if \\n(.$ \&\\$1\f\\*(_F\\$2
-.do check_need_title
-..
-.
-.de bi			\" *** enter bold italic
-.do check_need_title
-.@E
-.ft 4
-.if \\n(.$ \&\\$1\f\\*(_F\\$2
-.do check_need_title
-..
-.
-.de u			\" *** enter underlined word
-\&\\$1\l'|0\(ul'\\$2
-..
-.
-.\" a better version of u
-.if !\n(.g .ig
-.de u
-\Z'\\$1'\v'.25m'\D'l \w'\\$1'u 0'\v'-.25m'\\$2
-..
-.
-.de q			\" *** enter quoted word
-\&\\*(lq\\$1\\*(rq\\$2
-..
-.
-.de bx			\" *** enter boxed word
-.ie '\*(.T'html' \\$1\\$2
-.el \k~\(br\|\\$1\|\(br\l'|\\n~u\(rn'\l'|\\n~u\(ul'\^\\$2
-..
-.
-.de sm			\" *** print in smaller font
-\s-1\\$1\\s0\\$2
-..
-.
-.de @F			\" --- change font (0 -> no change)
-.nr ~ \\$1
-.if \\n~>0 \
-.	ft \\n~
-.rr ~
-..
-.
-.
-.\"		*** FOOTNOTING ***
-.
-.
-.de (f			\" *** begin footnote
-.ec
-.if "\\n(.z"|f" .tm Line \\n(c. -- Invalid footnote nesting
-.ie "\\n(.z"" \
-\{\
-.	nr _D \\n(dn
-.	nr _0 1v+\\n(nlu
-.	ev 2
-.	nm
-.	da |f
-.	in 0
-.	xl \\n($lu-\\n(fuu
-.	@F \\n(ff
-.	sz \\n(fp
-.	vs \\n(.sp*\\n($Vu/100u
-.	if !\\n(?f \
-\{\
-.		nr _b +1v	\" allow space for $s
-.		$s
-.	\}
-.	br
-.	if \\n(.p-\\n(_b-\\n(_0-\\n(.h-1v-\\n(fs<0 \
-\{\
-.		da\"		\" won't fit on page at all
-.		bc
-.		if !\\n(?f \
-.			rm |f
-.		da |f
-.\" next five lines could be dropped if headers had their own environment
-.		in 0		\" reset everything from .bc
-.		xl \\n($lu-\\n(fuu
-.		@F \\n(ff
-.		sz \\n(fp
-.		vs \\n(.sp*\\n($Vu/100u
-.		if !\\n(?f \
-.			$s
-.		br
-.	\}
-.	rr _0
-.	sp \\n(fsu
-.	nr ?f 1
-.	fi
-.	if !"\\$1"_" \
-.		ti \\n(fiu
-.	if \n@>2 .tm	<< (f $f=\\n($f
-.\}
-.el \
-\{\
-.	ev 2
-.	nm
-.	in 0
-.	xl \\n($lu-\\n(fuu
-.	@F \\n(ff
-.	sz \\n(fp
-.	vs \\n(.sp*\\n($Vu/100u
-.	fi
-\!.(f \\$1
-\!.@N
-.\}
-..
-.
-.de @N			\" --- set no fill mode in the top-level diversion
-.ie "\\n(.z"" .nf
-.el \!.@N
-..
-.
-.de )f			\" *** end footnote
-.ie "\\n(.z"|f" \
-\{\
-.	if \\n* \
-.		nr $f +1
-.	ds * \\*{\\n($f\\*}\k*
-.	nr * 0
-.	in 0
-.	da
-.	ev
-.	if \\n(_w<\\n(dl \
-.		nr _w \\n(dl	\" compute maximum fn width
-.	nr _b +\\n(dn
-.	ch @f -\\n(_bu
-.	if \\n(.p-\\n(_b<=\\n(nl \
-.		ch @f \\n(nlu+\n(.Vu
-.	nr dn \\n(_D
-.	rr _D
-.\}
-.el \
-\{\
-.	br
-\!.)f
-.	ev
-.\}
-..
-.
-.@R ff
-.if \n(ff<=0 \
-.	nr ff 1			\" footnote font: Times Roman
-.@R fp
-.if \n(fp<=0 \
-.	nr fp 8			\" footnote pointsize
-.
-.de $s			\" $$$ footnote separator
-\l'2i'
-..
-.
-.
-.\"		*** DELAYED TEXT ***
-.
-.
-.de (d			\" *** begin delayed text
-.am |d )d
-.sp \\n(bsu
-..
-.
-.de )d			\" *** end delayed text
-.if \\n# \
-.	nr $d +1
-.ds # [\\n($d]\k#
-.rr #
-..
-.
-.de pd			\" *** print delayed text
-.|d
-.rm |d
-.nr $d 1 1
-.ds # [1]\k#
-..
-.
-.
-.\"		*** INDEXES (TABLE OF CONTENTS) ***
-.
-.
-.nr _x 0 1
-.do nr _xn 0
-.af _x a
-.
-.de (x			\" *** begin index entry
-.if \n@>4 .tm >> (x, .z=\\n(.z
-.ds |X x
-.if \\n(.$>0 \
-.	ds |X \\$1
-.ie "\\n(.z"" \
-.	nr _z 0
-.el \
-.	nr _z 1
-.@\\n(_z
-..
-.
-.de @0			\" --- finish (x if no current diversion
-.am %\\*(|X )x
-.sp \\n(xsu
-.ti -\\n(piu
-..
-.
-.de @1			\" --- finish (x if current diversion
-.if "\\n(_x"z" .nr _x 0
-.de =\\n+(_x )x
-..
-.
-.de )x			\" *** end index entry
-.if \n@>4 .tm >> )x, .z=\\n(.z
-.ie "\\n(.z"" \
-\{\
-.	ds |x \\n%
-.	if \\n(.$>0 \
-.		ds |x \\$1
-.	if "\\*(|x"_" \
-.		ig ..
-.	am %\\*(|X ..
-.	if \w"\\$2">(\\n(.l-\\n(.i-\\n(.k) \
-.		ti +\\n(xuu
-\\\\a\\\\t\\$2\\*(|x
-...
-.	rm |x
-.	rm |X
-.\}
-.el \
-\{\
-\!.(x \\*(|X
-\!\\\\*(=\\n(_x\\\\
-\!.)x \\$1 \\$2
-\!.rm =\\n(_x
-.\}
-..
-.
-.de xp			\" *** print the index
-.br
-.@C 2
-.ls 1
-.vs \\n(.sp*\\n($Vu/100u
-.fi
-.in +\\n(piu
-.ds |X x
-.if \\n(.$>0 \
-.	ds |X \\$1
-.xl -(\\n(xuu+\w'...'u)
-.di |x
-.%\\*(|X
-.br
-.di
-.rm %\\*(|X
-.xl \\n($lu
-.rm |X
-.ev
-.nf
-.in 0
-.ta \\n(.lu-\\n(xuuR \\n(.luR
-.|x
-.fi
-.in
-.rm |x
-..
-.
-.
-.\"		*** HTML VERSIONS OF .x(, .x), AND .xp ***
-.
-.
-.de (x-html    \" --- create TAG and divert text
-.nr _x +1
-.do nr _xn +1
-.do TAG "_x\\n[_x]
-.br
-.do di |x\\n[_xn]
-.br
-..
-.
-.de )x-html    \" --- end diversion
-.br
-.di
-..
-.
-.de xp-html    \" --- create list of links
-.do nr _xx 1
-.br
-.do ev xp-html-ev
-.sp
-.do ULS
-.do while \\n[_xx]<=\\n[_xn] \
-\{\
-.	br
-.	do unformat |x\\n[_xx]
-.	do di xp-html-div
-.	br
-.	ll 100i
-.	fi
-.	do |x\\n[_xx]
-.	br
-.	di
-.	do asciify xp-html-div
-.	do rm xp-html-as
-.	do as xp-html-as #
-.	do as xp-html-as _x\\n[_xx]
-.	ll
-.	LI
-.	do URL \\*[xp-html-as] "\\*[xp-html-div]
-.	do rm xp-html-as
-.	do nr _xx +1
-.\}
-.do ULE
-.sp
-.ev
-..
-.
-.if '\*(.T'html' \
-\{\
-.	rm (x
-.	do als (x (x-html
-.	rm )x
-.	do als )x )x-html
-.	rm xp
-.	do als xp xp-html
-.\}
-.
-.
-.\"		*** CHAPTERS AND TITLES ***
-.
-.
-.de +c				\" *** begin chapter
-.ep\"				\" force out footnotes
-.if \\n(?o:\\n(?a \
-\{\
-.	bp			\" force out a table or more footnote
-.	rs
-.	ep
-.\}
-.nr ?C 1
-.nr $f 1 1
-.ds * \\*{1\\*}\k*
-.if \\n(?R \
-.	pn 1
-.bp
-.in \\n($iu			\" reset the indent
-.rs
-.ie \\n(.$ \
-.	$c "\\$1"
-.el \
-.	sp 3
-..
-.
-.de ++			\" *** declare chapter type
-.nr _0 0
-.if "\\$1"C" \
-.	nr _0 1			\" chapter
-.if "\\$1"RC" \
-.	nr _0 11		\" renumbered chapter
-.if "\\$1"A" \
-.	nr _0 2			\" appendix
-.if "\\$1"RA" \
-.	nr _0 12		\" renumbered appendix
-.if "\\$1"P" \
-.	nr _0 3			\" preliminary material
-.if "\\$1"B" \
-.	nr _0 4			\" bibliographic material
-.if "\\$1"AB" \
-.	nr _0 5			\" abstract
-.if \\n(_0=0 \
-.	tm Line \\n(c. -- Bad mode to .++
-.nr ?R 0
-.if \\n(_0>10 \
-.\{
-.	nr ?R 1
-.	nr _0 -10
-.\}
-.nr ch 0 1
-.if (\\n(_0=3):(\\n(_0=5) \
-.	pn 1			\" must do before .ep
-.if !\\n(_0=\\n(_M .if \\n(_M=3 \
-.	pn 1			\" must do before .ep
-.ep\"				\" end page for correct page number types
-.if \\n(_0=1 \
-\{\
-.	af ch 1
-.	af % 1
-.\}
-.if \\n(_0=2 \
-\{\
-.	af ch A
-.	af % 1
-.\}
-.if \\n(_0=3 \
-.	af % i
-.if \\n(_0=4 \
-.	af % 1
-.if \\n(_0=5 \
-.	af % 1
-.if \\n(.$>1 \
-.	he \\$2
-.nr _M \\n(_0
-.rr _0
-..
-.
-.de $c			\" $$$ print chapter title
-.sz 12
-.ft 3
-.ce 1000
-.if \\n(_M<3 \
-.	nr ch +1
-.ie \\n(_M=1 CHAPTER\ \ \\n(ch
-.el .if \\n(_M=2 APPENDIX\ \ \\n(ch
-.if \w"\\$1" .sp 3-\\n(.L
-.if \w"\\$1" \\$1
-.if (\\n(_M<3):(\w"\\$1") \
-.	sp 4-\\n(.L
-.ce 0
-.ft
-.sz
-.ie \\n(_M=1 \
-.	$C Chapter \\n(ch "\\$1"
-.el .if \\n(_M=2 \
-.	$C Appendix \\n(ch "\\$1"
-..
-.
-.de tp			\" *** title page
-.hx
-.bp
-.br
-.rs
-.pn \\n%
-..
-.
-.\"		*** DATES ***
-.if \n(mo=1 .ds mo January
-.if \n(mo=2 .ds mo February
-.if \n(mo=3 .ds mo March
-.if \n(mo=4 .ds mo April
-.if \n(mo=5 .ds mo May
-.if \n(mo=6 .ds mo June
-.if \n(mo=7 .ds mo July
-.if \n(mo=8 .ds mo August
-.if \n(mo=9 .ds mo September
-.if \n(mo=10 .ds mo October
-.if \n(mo=11 .ds mo November
-.if \n(mo=12 .ds mo December
-.if \n(dw=1 .ds dw Sunday
-.if \n(dw=2 .ds dw Monday
-.if \n(dw=3 .ds dw Tuesday
-.if \n(dw=4 .ds dw Wednesday
-.if \n(dw=5 .ds dw Thursday
-.if \n(dw=6 .ds dw Friday
-.if \n(dw=7 .ds dw Saturday
-.nr y2 \n(yr%100
-.af y2 00
-.nr y4 \n(yr+1900
-.ds td \*(mo \n(dy, \n(y4
-.
-.
-.\"		*** PARAMETRIC INITIALIZATIONS ***
-.
-.
-.rr x
-.nr $v \n(.v00+\n(.sp-1/\n(.sp	\" vs as percentage of ps for .sz request
-.nr $V \n($v			\" same for displays & footnotes
-.nr hm 4v			\" header margin
-.nr tm 7v			\" top margin
-.nr bm 6v			\" bottom margin
-.nr fm 3v			\" footer margin
-.nr tf 3			\" title font: (real) Times Bold
-.nr tp 10			\" title point size
-.hy 14
-.nr bi 4m			\" indent for blocks
-.nr pi 5n			\" indent for paragraphs
-.nr pf 1			\" normal text font
-.nr pp 10			\" normal text point size
-.nr qi 4n			\" indent for quotes
-.nr qp -1			\" down one point
-.nr ii 5n			\" indent for .ip's and .np's
-.nr $m 1			\" max number of columns
-.nr $s 4n			\" column separation
-.nr sf 3			\" section font -- Times Bold
-.nr sp 10			\" section title pointsize
-.nr ss 12p			\" section prespacing
-.nr si 0			\" section indent
-.
-.
-.\"		*** OTHER INITIALIZATION ***
-.
-.
-.\" GNU pic sets this register to 1, to indicate that \x should not be used.
-.@R 0x
-.ds { \v'-0.4m'\x'\\n(0x=0*-0.2m'\s-3
-.ds } \s0\v'0.4m'
-.\" for compatibility with traditional -me
-.\" (the first will work only in compatibility mode)
-.ds [ \*{
-.ds ] \*}
-.ds < \v'0.4m'\x'\\n(0x=0*0.2m'\s-3
-.ds > \s0\v'-0.4m'
-.ds - \(em
-.\" Avoid warnings from groff -ww.
-.@S |0
-.@S |1
-.@S |2
-.@S |3
-.@S $H
-.@S $0
-.@S $1
-.@S $2
-.@S $3
-.@S $4
-.@S $5
-.@S $6
-.@S $7
-.@S $8
-.@S $9
-.@S ..
-.
-.@R po\"			\" simulated page offset
-.@R $0\"			\" section depth
-.@R $i\"			\" paragraph base indent
-.@R $p\"			\" numbered paragraph number
-.@R $r\"			\" ratio of vs to ps (may override $v)
-.@R $R\"			\" same for displays (may override $V)
-.@R df\"			\" display font: same as surrounding text
-.@R so\"			\" additional section title offset
-.@R fu\"			\" footnote undent
-.@R bt\"			\" block keep threshold
-.@R *\"				\" has \** been referenced?
-.@R ?a\"			\" pending floating keep at page top?
-.@R ?b\"			\" pending floating keep at page bottom?
-.@R ?C\"			\" at chapter header?
-.@R ?e\"			\" in equation?
-.@R ?H\"			\" suppress headers and footers next page?
-.@R ?I\"			\" has the header trap been sprung?
-.@R ?n\"			\" n1 mode?
-.@R ?o\"			\" footnote overflow?
-.@R ?R\"			\" renumbered chapter?
-.@R ?s\"			\" skip next page?
-.@R ?T\"			\" inside .TS H?
-.@R ?W\"			\" wide floating keep at page bottom?
-.@R ?w\"			\" wide floating keep at page top?
-.
-.nr fi 0.3i
-.nr _o \n(.o
-.nr $b 3			\" bold
-.nr ps 0.35v
-.if \n(ps<\n(.V .nr ps \n(.V
-.nr bs \n(ps			\" block pre/post spacing
-.nr qs \n(ps			\" quote pre/post spacing
-.nr zs 1v			\" float-block pre/postspacing
-.nr xs 0.2v			\" index prespacing
-.nr xu 0.5i			\" index undent
-.nr fs 0.2v			\" footnote prespacing
-.nr es 0.5v			\" equation pre/postspacing
-.if \n(es<\n(.V .nr es \n(.V
-.wh 0 @h			\" set header
-.nr $l \n(.lu			\" line length
-.nr _L \n(.lu			\" line length of page
-.nr $c 1			\" current column number
-.nr $f 1 1			\" footnote number
-.ds * \*{1\*}\k*\"		\" footnote "name"
-.nr $d 1 1			\" delayed text number
-.ds # [1]\k#\"			\" delayed text "name"
-.nr _M 1			\" chapter mode is chapter
-.ds lq \(lq\"			\" left quote
-.ds rq \(rq\"			\" right quote
-.em @z
-.
-.
-.\"		*** FOREIGN LETTERS AND SPECIAL CHARACTERS ***
-.
-.
-.ds #h ((1u-(\\\\n(.fu%2u))*0.13m)
-.ds #v 0.6m
-.
-.\"			\" accents
-.ds ' \k_\h'-(\\n(.wu*8/10-\*(#h)'\(aa\h'|\\n_u'
-.ds ` \k_\h'-(\\n(.wu*7/10-\*(#h)'\(ga\h'|\\n_u'
-.
-.\"			\" umlaut
-.ds : \k_\h'-(\\n(.wu*8/10-\*(#h+0.1m)'\v'-\*(#v'\z.\h'0.2m'.\h'|\\n_u'\v'\*(#v'
-.
-.\"			\" circumflex and tilde
-.ds ^ \k_\h'-(\\n(.wu-\*(#h-0.05m)'^\h'|\\n_u'
-.ds ~ \k_\h'-(\\n(.wu-\*(#h-0.05m)'~\h'|\\n_u'
-.
-.\"			\" cedilla and czech
-.ds , \k_\h'-(\\n(.wu)',\h'|\\n_u'
-.ds v \k_\h'-(\\n(.wu*9/10-\*(#h)'\v'-\*(#v'\s-4v\s0\v'\*(#v'\h'|\\n_u'
-.
-.\"			\" Norwegian A or angstrom
-.ds o \k_\h'-(\\n(.wu+\w'\(de'u-\*(#h)/2u'\v'-0.4n'\z\(de\v'0.4n'\h'|\\n_u'
-.
-.\"			\" there exists, for all
-.ds qe \s-2\v'0.45m'\z\(em\v'-0.625m'\z\(em\v'-0.625m'\(em\v'0.8m'\s0\h'-0.1m'\v'-0.05m'\(br\v'0.05m'\h'0.1m'
-.ds qa \z\e\h'0.35m'\z\(sl\h'-0.33m'\v'-0.3m'\s-4\(em\s0\v'0.3m'\h'0.15m'
-.rm #h #v
-.ll 6.0i
-.lt 6.0i
-.
-.de @U
-.tm The \\$1 macro has been removed from this version of the -me macros.
-..
-.
-.de lo
-.@U lo
-..
-.
-.de th
-.@U th
-..
-.
-.de ac
-.@U ac
-..
-.
-.\" EOF
diff -Nuar groff-1.22.3.old/tmac/e.tmac-u groff-1.22.3/tmac/e.tmac-u
--- groff-1.22.3.old/tmac/e.tmac-u	1970-01-01 02:00:00.000000000 +0200
+++ groff-1.22.3/tmac/e.tmac-u	2015-04-23 20:57:03.000000000 +0300
@@ -0,0 +1,2037 @@
+.\" -*- nroff -*-
+.\"
+.\"	@(#)e.tmac	2.31 (Berkeley) 5/21/88
+.\"	Modified by James Clark for use with groff.
+.\"
+.\" Copyright (c) 1988 Regents of the University of California.
+.\" All rights reserved.
+.\"
+.\" Redistribution and use in source and binary forms are permitted
+.\" provided that this notice is preserved and that due credit is given
+.\" to the University of California at Berkeley. The name of the University
+.\" may not be used to endorse or promote products derived from this
+.\" software without specific prior written permission. This software
+.\" is provided ``as is'' without express or implied warranty.
+.\"	%beginstrip%
+.\"
+.\"**********************************************************************
+.\"*									*
+.\"*	******  - M E   N R O F F / T R O F F   M A C R O S  ******	*
+.\"*									*
+.\"*	Produced for your edification and enjoyment by:			*
+.\"*		Eric Allman						*
+.\"*		Electronics Research Laboratory				*
+.\"*		U.C. Berkeley.						*
+.\"*	current address:						*
+.\"*		Britton-Lee, Inc.					*
+.\"*		1919 Addison Street Suite 105				*
+.\"*		Berkeley, California  94704				*
+.\"*									*
+.\"*	VERSION 2.31	First Release: 11 Sept 1978			*
+.\"*									*
+.\"*	Documentation is available.					*
+.\"*									*
+.\"**********************************************************************
+.\"
+.\"	Code on .de commands:
+.\"		***	a user interface macro.
+.\"		&&&	a user interface macro which is redefined
+.\"			when used to be the real thing.
+.\"		$$$	a macro which may be redefined by the user
+.\"			to provide variant functions.
+.\"		---	an internal macro.
+.\"
+.
+.do nr need_eo_h 0
+.do nr need_eo_tl 0
+.do nr need_tl 1
+.
+.do mso devtag.tmac
+.
+.if !\n(.g .ig
+.de @R			\" --- initialize number register to 0, if undefined
+.if !r\\$1 .nr \\$1 0
+..
+.
+.\" --- check whether grohtml needs end of title/heading
+.de @html_check_need_title
+.do if (\\n[need_eo_tl] == 1) \
+\{\
+.	do nr need_eo_tl 0
+.	do DEVTAG-EO-TL
+.\}
+.do if (\\n[need_tl] == 1) \
+\{\
+.	do DEVTAG-TL
+.	do nr need_tl 0
+.	do nr need_eo_tl 1
+.\}
+.do if \\n[need_eo_h]>0 .do DEVTAG-EO-H
+.do nr need_eo_h 0
+..
+.
+.de @check_need_title
+..
+.
+.ie '\*(.T'html' \
+.	do als check_need_title @html_check_need_title
+.el \
+.	do als check_need_title @check_need_title
+.
+.@R pf
+.if \n(pf .nx
+.
+.if !\n(.g .ig
+.de @S			\" --- initialize string/macro to empty, if undefined
+.if !d\\$1 .ds \\$1 \" empty
+..
+.
+.@R @\"			\" debugging level
+.
+.
+.\"		*** INTERNAL GP MACROS ***
+.
+.
+.de @C			\" --- change ev's, taking info with us
+.nr _S \\n(.s
+.nr _V \\n(.v
+.nr _F \\n(.f
+.nr _J \\n(.j
+.do ds _A \\n[.fam]
+.nr _I \\n(.i
+.ev \\$1
+.ps \\n(_S
+.vs \\n(_Vu
+.ft \\n(_F
+.ad \\n(_J
+.do @fam \\*(_A
+'in \\n(_Iu
+.xl \\n($lu
+.lt \\n($lu
+.rr _S
+.rr _V
+.rr _F
+.rr _I
+.rr _J
+.ls 1
+'ce 0
+..
+.
+.de @D			\" --- determine display type (Indent, Left, Center)
+.ds |p "\\$3
+.nr _d 0
+.if "\\$2"C" \
+.	nr _d 1
+.if "\\$2"L" \
+.	nr _d 2
+.if "\\$2"I" \
+.	nr _d 3
+.if "\\$2"M" \
+.	nr _d 4
+.if !\\n(_d \
+\{\
+.	nr _d \\$1
+.	ds |p "\\$2
+.\}
+.
+..
+.
+.de @z			\" --- end macro
+.if \n@>1 .tm >> @z, .z=\\n(.z ?a=\\n(?a
+.if !"\\n(.z"" \
+\{\
+.	tm Line \\n(c. -- Unclosed block, footnote, or other diversion (\\n(.z)
+.	di
+.	ex
+.\}
+.if \\n(?a \
+.	bp			\" force out final table
+.ds bp
+.ds @b\"			\" don't start another page
+.br
+.if \n@>1 .tm << @z
+..
+.
+.
+.\"		*** STANDARD HEADERS AND FOOTERS ***
+.
+.
+.ie \n(.g .ds $* \\\\$*
+.el .ds $* \\\\$1 \\\\$2 \\\\$3 \\\\$4 \\\\$5 \\\\$6 \\\\$7 \\\\$8 \\\\$9
+.
+.de he			\" *** define header
+.ie !\\n(.$ \
+\{\
+.	rm |4
+.	rm |5
+.\}
+.el \
+\{\
+.	ds |4 "\*($*
+.	ds |5 "\*($*
+.\}
+..
+.
+.de eh			\" *** define even header
+.ie !\\n(.$ \
+.	rm |4
+.el \
+.	ds |4 "\*($*
+..
+.
+.de oh			\" *** define odd header
+.ie !\\n(.$ \
+.	rm |5
+.el \
+.	ds |5 "\*($*
+..
+.
+.de fo			\" *** define footer
+.ie !\\n(.$ \
+\{\
+.	rm |6
+.	rm |7
+.\}
+.el \
+\{\
+.	ds |6 "\*($*
+.	ds |7 "\*($*
+.\}
+..
+.
+.de ef			\" *** define even foot
+.ie !\\n(.$ \
+.	rm |6
+.el \
+.	ds |6 "\*($*
+..
+.
+.de of			\" *** define odd footer
+.ie !\\n(.$ \
+.	rm |7
+.el \
+.	ds |7 "\*($*
+..
+.
+.de ep			\" *** end page (must always be followed by a .bp)
+.if \\n(nl>0 \
+\{\
+.	wh 0
+.	rs
+.	@b
+.\}
+..
+.
+.
+.\"		*** INTERNAL HEADER AND FOOTER MACROS ***
+.
+.
+.de @h			\" --- header
+.if \n@>1 .tm >> @h %=\\n% ?a=\\n(?a ?b=\\n(?b ?w=\\n(?w
+.if (\\n(.i+\\n(.o)>=\\n(.l \
+.	tm Line \\n(c. -- Offset + indent exceeds line length
+.\" initialize a pile of junk
+.nr ?h \\n(?H			\" transfer "next page" to "this page"
+.nr ?H 0
+.nr ?c \\n(?C
+.nr ?C 0
+.rn |4 |0
+.rn |5 |1
+.rn |6 |2
+.rn |7 |3
+.nr _w 0			\" reset max footnote width
+.nr ?W 0			\" no wide floats this page (yet)
+.nr ?I 1
+.\" begin actual header stuff
+.ev 2
+.rs
+.if \\n(hm>0 \
+.	if !'\*(.T'html' \
+.		sp |\\n(hmu	\" move to header position
+.@t $h\"			\" output header title
+.if \\n(tm<=0 \
+.	nr tm \n(.Vu
+.if !'\*(.T'html' \
+.	sp |\\n(tmu		\" move to top of text
+.ev
+.mk _k				\" for columned output
+.if \\n(?n=1 .nm 1		\" restore line numbering if n1 mode
+.nr $c 1			\" set first column
+.if \n@>4 .tm -- @h >> .ns nl=\\n(nl %=\\n% _k=\\n(_k tm=\\n(tm
+.ie \\n(?s \
+\{\
+.	nr ?s 0
+.	rs
+'	@b
+.\}
+.el \
+.	@n\"			\" begin the column
+.if \n@>2 .tm << @h
+..
+.
+.de @n			\" --- new column or page
+.if \n@>3 .tm >> @n nl=\\n(nl %=\\n% ?f=\\n(?f ?o=\\n(?o
+.if \\n(bm<=0 \
+.	nr bm \\n(.Vu
+.if (\\n(_w<=\\n($l)&(\\n(?W=0) \
+\{\
+.	nr _b (\\n(ppp*\\n($vu)/200u	\" compute fudge factor (must be < 1P)
+.	if \\n(_bu>((\\n(bmu-\\n(fmu-((\\n(tpp*\\n($vu)/100u))/2u) \
+.		nr _b (\\n(ppp*\\n($vu)/100u-\n(.Vu
+.	nr _b +\\n(bmu
+.\}
+.nr _B \\n(_bu
+.ch @f
+.wh -\\n(_bu @f
+.nr _b +(\\n(ppp*\\n($vu)/100u \" add 1 paragraph v in case of sweep past
+.if \n@>2 .tm @n .p=\\n(.p bm=\\n(bm _b=\\n(_b _B=\\n(_B
+.nr ?f 0			\" reset footnote flag
+.if \\n(?o \
+\{\
+.	(f _\"			\" reprocess footnotes which run off page
+.	nf
+.	|o
+.	fi
+.	)f
+.	rm |o
+.\}
+.nr ?o 0
+.if \\n(?T \
+\{\
+.	nr _i \\n(.i
+.	if \\n(?n \
+.		nm \\n(ln
+.	in 0
+.	|h\"			\" output the table header
+.	in \\n(_iu
+.	if \\n(?n \
+.		nm
+.	rr _i
+.	mk #T			\" for tbl commands
+.	ns
+.\}
+.if (\\n(?a)&((\\n($c<2):(\\n(?w=0)) \
+\{\
+.	nr ?a 0			\" output floating keep
+.	@k |t
+.	if \\n(?w \
+.		mk _k		\" don't overstrike wide keeps
+.	nr ?w 0
+.\}
+.os
+.$H\"				\" special column header macro
+.ns
+..
+.
+.de @f			\" --- footer
+.if \n@>1 .tm >> @f %=\\n% nl=\\n(nl ?a=\\n(?a ?b=\\n(?b ?f=\\n(?f
+.if \n@>2 .nr VL \\n(.pu-\\n(nlu
+.if \n@>2 .tm @f bm=\\n(bm _B=\\n(_B _b=\\n(_b .p-nl=\\n(VL
+.ec
+.if \\n(?T \
+\{\
+.	nr T. 1			\" for tbl commands (to output bottom line)
+.	T# 1\"			\" output the sides and bottom lines
+.	br
+.\}
+.ev 2
+.ce 0
+.if \\n(?b \
+\{\
+.	nr ?b 0
+.	@k |b\"			\" output bottom of page tables
+.\}
+.if \\n(?f \
+.	@o\"			\" output footnote if present
+.ie \\n($c<\\n($m \
+.	@c\"			\" handle new column
+.el \
+.	@e\"			\" new page
+.ev
+.if \n@>2 .tm << @f
+..
+.
+.de @o			\" --- output footnote
+.nf
+.ls 1
+.in 0
+.if \n@>2 .tm @o last printed text = \\n(nl placing @r trap at -\\n(_B
+.wh -\\n(_Bu @r
+.if \\n(?n \
+.	nm \\n(ln
+.|f
+.if \\n(?n \
+.	nm
+.fi
+.if \n@>2 .tm @o triggered @r (?o) = \\n(?o
+.if \\n(?o \
+\{\
+.	di			\" just in case triggered @r
+.	if \\n(dn=0 \
+\{\
+.		rm |o
+.		nr ?o 0
+.	\}
+.	nr dn \\n(_D
+.	rr _D
+.\}
+.rm |f
+.ch @r
+..
+.
+.de @c			\" --- new column
+.if \n@>2 .tm	>> @c %=\\n%
+.rs
+.sp |\\n(_ku
+.@O +\\n($lu+\\n($su
+.nr $c +1
+.@n
+..
+.
+.de @e			\" --- end page
+.if \n@>2 .tm	>> @e
+.@O \\n(_ou
+.rs
+.sp |\\n(.pu-\\n(fmu-((\\n(tpp*\\n($vu)/100u)	\" move to footer position
+.@t $f\"			\" output footer title
+.nr ?h 0
+.bp
+..
+.
+.de @t			\" --- output header or footer title
+.if !\\n(?h \
+\{\
+.	sz \\n(tp\"		\" set header/footer type fonts, etc.
+.	@F \\n(tf
+.	lt \\n(_Lu		\" make title span entire page
+.	if \\n(?n \
+.		nm \\n(ln
+.	nf
+.	\\$1
+.	br
+.	if \\n(?n \
+.		nm
+.\}
+..
+.
+.de $h			\" $$$ print header
+.ds |z
+.if !\\n(?c \
+\{\
+.	if e .ds |z "\\*(|0
+.	if o .ds |z "\\*(|1
+.\}
+.if !\(ts\\*(|z\(ts\(ts \
+'	tl \\*(|z
+.rm |z
+..
+.
+.de $f			\" $$$ print footer
+.ds |z
+.if \\n(?c \
+\{\
+.	if e .ds |z "\\*(|0
+.	if o .ds |z "\\*(|1
+.\}
+.if \(ts\\*(|z\(ts\(ts \
+\{\
+.	if e .ds |z "\\*(|2
+.	if o .ds |z "\\*(|3
+.\}
+.if !\(ts\\*(|z\(ts\(ts \
+'	tl \\*(|z
+.rm |z
+..
+.
+.de @r			\" --- reprocess overflow footnotes
+.if \n@>3 .tm		>> @r .z=\\n(.z ?f=\\n(?f ?a=\\n(?a ?b=\\n(?b _b=\\n(_b
+.di |o				\" save overflow footnote
+.nr ?o 1
+.nr _D \\n(dn
+.ns
+..
+.
+.
+.\"		*** COMMANDS WITH VARIANT DEFINITIONS ***
+.
+.
+.if !'\*(.T'html' .rn bp @b	\" --- begin page
+.
+.de bp			\" *** begin new page (overrides columns)
+.nr $c \\n($m			\" force new page, not new column
+.ie \\n(nl>0 \
+.	@b \\$1
+.el \
+\{\
+.	if \\n(.$>0 \
+.		pn \\$1
+.	if \\n(?I \
+.		@h\"		\" 'spring' the header trap
+.\}
+.br
+.wh 0 @h			\" reset header
+..
+.
+.rn ll xl		\" *** special line length (local)
+.de ll			\" *** line length (global to environments)
+.xl \\$1
+.lt \\$1
+.nr $l \\n(.l
+.if (\\n($m<=1):(\\n($l>\\n(_L) \
+.	nr _L \\n(.l
+..
+.
+.rn po @O		\" --- local page offset
+.
+.de po			\" *** page offset
+.@O \\$1
+.nr _o \\n(.o
+..
+.
+.\" Redefine the fam request to set the family in
+.\" environment 2 as well as the current environment.
+.if !\n(.g .ig
+.do rn fam @fam		\" --- set family in current environment
+.do de fam		\" *** set font family in ev 2 and current ev
+.do @fam \\$1
+.ev 2
+.do @fam \\$1
+.ev
+..
+.
+.
+.\"		*** MISCELLANEOUS ROFF COMMANDS ***
+.
+.
+.de hx			\" *** suppress headers and footers next page
+.nr ?H 1
+..
+.
+.de ix			\" *** indent, no break
+'in \\$1
+..
+.
+.de bl			\" *** contiguous blank lines
+.br
+.@s \\$1
+.sp \\$1
+..
+.
+.de @s			\" --- diversion-surviving space test
+.ne \\$1
+.rs
+.if !'\\n(.z'' \!.@s \\$1
+..
+.
+.de n1			\" *** line numbering 1
+.nm 1
+.ll -\w'0000'u
+.nr ?n 1
+..
+.
+.de n2			\" *** line numbering 2
+.ie \\n(.$ \
+\{\
+.	ie !`\\$2`c` \
+.		po -\w'0000'u
+.	el \
+.		ll -\w'0000'u
+.	ie \\B`\\$1` \
+\{\
+.		ds |i \\$1
+.		ds |j \\$1
+.		do substring |i 0 0  \" pick off leading char and rest to check
+.		do substring |j 1    \" for +N / -N
+.		ie `\\*(|i`+` \
+.			nr ln (\\n[_ln])+\\*(|j
+.		el \
+.			ie `\\*(|i`-` \
+.				nr ln (\\n[_ln])-\\*(|j
+.			el \
+.				nr ln \\$1  \" unsigned N
+.		nm \\n(ln
+.		nr ?n 2
+.		rm |i |j
+.\}
+.	el \
+.		tm Line \\n(.c -- Bad .n2 value
+.\}
+.el \
+\{\
+.	nm
+.	nr _ln \\n(ln
+.	po +\w'0000'u
+.	ll \\n($lu
+.	nr ?n 0
+.	nr ln 0
+.\}
+..
+.
+.de pa			\" *** new page
+.bp \\$1
+..
+.
+.de ro			\" *** roman page numbers
+.af % i
+..
+.
+.de ar			\" *** arabic page numbers
+.af % 1
+..
+.
+.de m1			\" *** position one space
+.nr _0 \\n(hmu
+.nr hm \\$1v
+.nr tm +\\n(hmu-\\n(_0u
+.rr _0
+..
+.
+.de m2			\" *** position two space
+.nr tm \\n(hmu+\\n(tpp+\\$1v
+..
+.
+.de m3			\" *** position three space
+.nr bm \\n(fmu+\\n(tpp+\\$1v
+..
+.
+.de m4			\" *** position four space
+.nr _0 \\n(fmu
+.nr fm \\$1v
+.nr bm +\\n(fmu-\\n(_0u
+..
+.
+.de sk			\" *** leave a blank page (next page)
+.if \\n(.$>0 \
+.	tm Line \\n(c. -- I cannot skip multiple pages
+.nr ?s 1
+..
+.
+.
+.\"		*** MISCELLANEOUS USER SUPPORT COMMANDS ***
+.
+.
+.if !\n(.g .ig
+.de re			\" *** reset tabs (TROFF defines 15 stops default)
+.ta T 0.5i
+..
+.
+.if \n(.g .ig
+.de re
+.ta 0.5i +0.5i +0.5i +0.5i +0.5i +0.5i +0.5i +0.5i +0.5i +0.5i +0.5i +0.5i +0.5i +0.5i +0.5i
+..
+.
+.de ba			\" *** set base indent
+.ie \\n(.$ \
+.	nr $i \\$1n
+.el \
+.	nr $i \\n(siu*\\n($0u
+..
+.
+.de hl			\" *** draw horizontal line
+.br
+.if '\*(.T'html' \
+\{\
+.	HR
+.	do return
+.\}
+.ie \n(.g .do nr _I \\n[.in]
+.el .nr _I \\n(.i
+\l'\\n(.lu-\\n(_Iu'
+.sp
+..
+.
+.
+.\"		*** PARAGRAPHING ***
+.
+.
+.de pp			\" *** paragraph
+.lp \\n(piu
+..
+.
+.de lp			\" *** left aligned paragraph
+.@p
+.if \\n(.$ \
+.	ti +\\$1
+.nr $p 0 1
+..
+.
+.de ip			\" *** indented paragraph w/ optional tag
+.if (\\n(ii>0)&(\\n(ii<1n) \
+.	nr ii \\n(iin
+.nr _0 \\n(ii
+.if \\n(.$>1 \
+.	nr _0 \\$2n
+.@p \\n(_0u
+.nr _I \\n(.iu
+.in 0
+.di |i
+\&\\$1
+.br
+.di
+.in \\n(_Iu
+.ds |j \\*(|i\\
+.ie \\w"\\*(|j" \
+\{\
+.	ti -\\n(_0u
+.	ie \\w"\\*(|j">=\\n(_0 \
+\{\
+.		do DEVTAG-COL 1
+\\*(|j
+.		do DEVTAG-COL-NEXT 2
+.		br
+.	\}
+.	el \
+\{\
+.		do DEVTAG-COL 1
+\\*(|j\h'|\\n(_0u'\c
+.		do DEVTAG-COL 2
+.       \}
+.\}
+.el .do DEVTAG-COL 2
+.rr _0
+.rm |i |j
+..
+.
+.de np			\" *** numbered paragraph
+.\" use string comparison in case user has changed format of $p
+.if '\\n($p'-1' \
+.	nr $p 0			\" reset number after .bu
+.nr $p +1			\" increment paragraph number
+.@p \w'\0(000)\0'u
+.ti -\w'\0(000)\0'u
+\0(\\n($p)\h'|\w'\0(000)\0'u'\c
+..
+.
+.de bu			\" *** bulleted paragraph
+.br
+.\" use string comparison in case user has changed format of $p
+.if '\\n($p'-1' \
+.	ns			\" don't space between .bu paragraphs
+.nr $p 0-1			\" mark "bulleted paragraph" mode
+.@p \w'\0\(bu\0'u
+.ti -\w'\0\(bu\0'u
+\0\(bu\0\c
+..
+.
+.de @p			\" --- initialize for paragraph
+.do check_need_title
+.if "\\n(.z"|e" .tm Line \\n(c. -- Unmatched continued equation
+.in \\n($iu+\\n(pou
+.if \\n(.$ \
+.	in +\\$1n
+.ce 0
+.fi
+.@F \\n(pf
+.sz \\n(pp
+.sp \\n(psu
+.ne \\n(.Lv+\\n(.Vu
+.ns
+..
+.
+.
+.\"		*** SECTION HEADINGS ***
+.
+.
+.de sh			\" *** section heading
+.fi
+.do check_need_title
+.if (\\n(si>0)&(\\n(si<1n) \
+.	nr si \\n(sin
+.if '\*(.T'html' .nr si 0
+.ce 0
+.if '\*(.T'html' \
+\{\
+.	do DEVTAG-SH \\$1
+.	do nr need_eo_h 1
+.\}
+.@d "\\$1" +1 \\$3 \\$4 \\$5 \\$6 \\$7 \\$8
+.if !"\\$2"_" \
+\{\
+.	ds |n \&\\$2
+.	$p "\\*(|n" "\\*($n" \\n($0
+.	$0 "\\*(|n" "\\*($n" \\n($0
+.	rm |n
+.\}
+.nr $p 0 1			\" reset .np count
+..
+.
+.de @d			\" --- change section depth
+.if !""\\$1" \
+.	nr $0 \\$1
+.if \\n($0&(\\n(.$>1) \
+.	nr $\\n($0 \\$2
+.ds $n \&\"
+.ie \\n($0>=1 \
+\{\
+.	if '\\n($1'0' \
+.		nr $1 1
+.	if (\\n(.$>=3) .if !"\\$3"-" \
+.		nr $1 \\$3
+.	as $n \\n($1
+.\}
+.el \
+.	nr $1 0
+.ie \\n($0>=2 \
+\{\
+.	if '\\n($2'0' \
+.		nr $2 1
+.	if (\\n(.$>=4) .if !"\\$4"-" \
+.		nr $2 \\$4
+.	as $n .\\n($2
+.\}
+.el \
+.	nr $2 0
+.ie \\n($0>=3 \
+\{\
+.	if '\\n($3'0' \
+.		nr $3 1
+.	if (\\n(.$>=5) .if !"\\$5"-" \
+.		nr $3 \\$5
+.	as $n .\\n($3
+.\}
+.el \
+.	nr $3 0
+.ie \\n($0>=4 \
+\{\
+.	if '\\n($4'0' \
+.		nr $4 1
+.	if (\\n(.$>=6) .if !"\\$6"-" \
+.		nr $4 \\$6
+.	as $n .\\n($4
+.\}
+.el \
+.	nr $4 0
+.ie \\n($0>=5 \
+\{\
+.	if '\\n($5'0' \
+.		nr $5 1
+.	if (\\n(.$>=7) .if !"\\$7"-" \
+.		nr $5 \\$7
+.	as $n .\\n($5
+.\}
+.el \
+.	nr $5 0
+.ie \\n($0>=6 \
+\{\
+.	if '\\n($6'0' \
+.		nr $6 1
+.	if (\\n(.$>=8) .if !"\\$8"-" \
+.		nr $6 \\$8
+.	as $n .\\n($6
+.\}
+.el \
+.	nr $6 0
+..
+.
+.de sx			\" *** heading up, no increment (2.1.1 -> 2.1)
+.ce 0
+.ul 0
+.nr _0 \\n($0-1
+.if \\n(.$ .nr _0 +1
+.if \\n(.$ .nr _0 \\$1
+.@d \\n(_0
+.rr _0
+.$p "" "" \\n($0
+.nr $p 0 1			\" reset .np count
+..
+.
+.de uh			\" *** unnumbered section heading
+.$p "\\$1"
+.$0 "\\$1"
+..
+.
+.de $p			\" $$$ print section heading
+.if (\\n(si>0)&(\\n(.$>2) \
+.	nr $i \\$3*\\n(si
+.in \\n($iu
+.ie !"\\$1\\$2"" \
+\{\
+.	sp \\n(ssu 		\" one of them is non-null
+.	ne \\n(.Lv+\\n(.Vu+\\n(psu+((\\n(spp*\\n($vu*\\n(.Lu)/100u)
+.	\" exdent if \\$3 > 0
+.	ie 0\\$3 \
+.		ti -(\\n(siu-\\n(sou)
+.	el \
+.		ti +\\n(sou
+.	@F \\n(sf
+.	sz \\n(sp
+.	if 0\\$3 \
+.		$\\$3
+.	if \w"\\$2">0 \\$2.
+.	if \w"\\$1">0 \\$1\f1\ \ \&
+.\}
+.el \
+.	sp \\n(psu
+.@F \\n(pf
+.sz \\n(pp
+..
+.
+.
+.\"		*** COLUMNED OUTPUT ***
+.
+.
+.de 2c			\" *** double columned output
+.br
+.if \\n($m>1 \
+.	1c\"			\" revert to 1c if already 2c
+.nr $c 1
+.nr $m 2
+.if \\n(.$>1 \
+.	nr $m \\$2
+.if \\n(.$>0 \
+.	nr $s \\$1n		\" param 1: column separation
+.nr $l (\\n(.l-((\\n($m-1)*\\n($s))/\\n($m
+.xl \\n($lu
+.mk _k
+.ns
+..
+.
+.de 1c			\" *** single columned output
+.br
+.nr $c 1
+.nr $m 1
+.ll \\n(_Lu			\" return to normal output
+.sp |\\n(.hu
+.@O \\n(_ou
+..
+.
+.de bc			\" *** begin column
+.sp 24i
+..
+.
+.
+.\"		*** FLOATING TABLES AND NONFLOATING BLOCKS ***
+.
+.
+.de (z			\" *** begin floating keep
+.if \n@>4 .tm >> (z, .z=\n(.z
+.@D 4 \\$1 \\$2
+.@(
+..
+.
+.de )z			\" *** end floating keep
+.if \n@>4 .tm >> )z, .z=\n(.z
+.sp \\n(zsu
+.@)
+.if \n@>4 .tm -- )z << @), .z=\n(.z
+.rr _0
+.if !\\n(?b \
+.	nr dn +(\\n(ppp*\\n($vu)/200u+\\n(zsu
+.nr dl -\n(.H			\" fudge factor necessary to make it work
+.ie ((\\n(dn+\n(.V)>=\\n(.t):(\\n(?a):((\\n(dl>\\n($l)&(\\n($c>1)) \
+\{\
+.	nr ?a 1
+.	if (\\n(dl>\\n($l)&(\\n($m>1) \
+.		nr ?w 1		\" mark wider than one column (top)
+.	ds |x |t
+.\}
+.el \
+\{\
+.	nr ?b 1
+.	if (\\n(dl>\\n($l)&(\\n($m>1) \
+.		nr ?W 1		\" mark wider than one column (bottom)
+.	nr _b +\\n(dnu
+.	\" avoid moving @f back past the current position
+.	if \\n(.p-\\n(nl-\n(.V<\\n(_b \
+.		nr _b \\n(.p-\\n(nl-\n(.V
+.	ch @f -\\n(_bu
+.	ds |x |b
+.\}
+.da \\*(|x			\" copy to save macro
+.nf
+.ls 1
+.nr ?k 1
+.if \n@>4 .tm -- )z >> \\*(|x
+\!.if \\\\n(nl>(\\\\n(tm+2v) .ne \\n(dnu-\\n(zsu
+.|k\"				\" and the body
+.ec
+.if \n@>4 .tm -- )z << \\*(|x, .z=\\n(.z
+.nr ?k 0
+.rm |k\"			\" remove the temp macro
+.da
+.in 0
+.ls 1
+.xl \\n($lu
+.ev
+.if \n@>4 .tm << )z, .z=\\n(.z
+..
+.
+.de @k			\" --- output floating keep
+.if \n@>4 .tm >> @k, $1=\\$1, .z=\\n(.z
+.ev 1
+.nf
+.ls 1
+.in 0
+.sp \\n(zsu
+.if \\n(?n \
+.	nm \\n(ln
+.\\$1
+.if \\n(?n \
+.	nm
+.ec
+.br
+.rm \\$1
+.ev
+..
+.
+.de (t			\" XXX temp ref to (z
+.(z \\$1 \\$2
+..
+.
+.de )t			\" XXX temp ref to )t
+.)z \\$1 \\$2
+..
+.
+.de (b			\" *** begin block
+.br
+.@D 3 \\$1 \\$2
+.sp \\n(bsu
+.@(
+.if '\*(.T'html' .sp \\n(bsu
+..
+.
+.de )b			\" *** end block
+.br
+.@)
+.if (\\n(bt=0):(\\n(.t<\\n(bt) \
+.	ne \\n(dnu		\" make it all on one page
+.@k |k
+.ev                             \" return from display environment
+.sp \\n(bsu+\\n(.Lv-1v
+..
+.
+.de @(			\" --- begin keep
+.if !"\\n(.z"" .tm Line \\n(c. -- Invalid nested keep \\n(.z
+.@M
+.di |k
+\!'rs
+..
+.
+.de @M			\" --- set modes for display
+.nr ?k 1
+.@C 1
+.@F \\n(df
+.if \\n($R .@V
+.vs \\n(.sp*\\n($Vu/100u
+.nf
+.if "\\*(|p"F" \
+.	fi			\" set fill mode if "F" parameter
+.if \\n(_d=4 \
+.	in 0
+.if \\n(_d=3 \
+\{\
+.	in +\\n(biu
+.	xl -\\n(biu
+.\}
+.if \\n(_d=1 \
+.	ce 10000
+..
+.
+.de @)			\" --- end keep
+.br
+.if !"\\n(.z"|k" .tm Line \\n(c. -- Close of a keep which has never been opened
+.nr ?k 0
+.di
+.in 0
+.ce 0
+..
+.
+.de (c			\" *** begin block centered text
+.br
+.if "\\n(.z"|c" .tm Line \\n(c. -- Nested .(c requests
+.if \\n(?n .nm
+.di |c
+..
+.
+.de )c			\" *** end block centered text
+.if !"\\n(.z"|c" .tm Line \\n(c. -- Unmatched .)c
+.br				\" force out final line
+.di
+.if \n@>4 .tm >> .)c .l=\\n(.l .i=\\n(.i $i=\\n($i dl=\\n(dl
+.ev 1
+.ls 1
+.in (\\n(.lu-\\n(.iu-\\n(dlu)/2u
+.if \n@>4 .tm -- .)c << .in .l=\\n(.l .i=\\n(.i dl=\\n(dl
+.if \\n(?n \
+.	nm \\n(ln
+.nf
+.|c
+.ec
+.in
+.ls
+.if \\n(?n \
+.	nm
+.ev
+.rm |c
+..
+.
+.
+.\"		*** BLOCK QUOTES (OR WHATEVER) AND LISTS ***
+.
+.
+.de (q			\" *** begin block quote
+.br
+.@C 1
+.fi
+.sp \\n(qsu
+.in +\\n(qiu
+.xl -\\n(qiu
+.sz \\n(qp
+.if \\n(?n \
+.	nm \\n(ln
+..
+.
+.de )q			\" *** end block quote
+.br
+.if \\n(?n \
+.	nm
+.ev
+.sp \\n(qsu+\\n(.Lv-1v
+.nr ?k 0
+..
+.
+.de (l			\" *** begin list
+.br
+.sp \\n(bsu
+.@D 3 \\$1 \\$2
+.@M
+.if \\n(?n \
+.	nm \\n(ln
+.if '\*(.T'html' .sp \\n(bsu
+..
+.
+.de )l			\" *** end list
+.br
+.if \\n(?n \
+.	nm
+.ev
+.sp \\n(bsu+\\n(.Lv-1v
+.nr ?k 0
+..
+.
+.
+.\"		*** PREPROCESSOR SUPPORT ***
+.
+.
+.\"
+.\"	EQN
+.\"
+.de EQ			\" *** equation start
+.do if \\n[need_eo_h]>0 .do DEVTAG-EO-H
+.do nr need_eo_h 0
+.ec
+.if "\*(.T"html" \
+\{\
+.	do nr e-EQ-ll \\n(.l
+.	ll 1000n
+.\}
+.do HTML-IMAGE
+.if !\\n(?e \
+\{\
+.	if "\\n(.z"|e" .tm Line \\n(c. -- Nested .EQ request
+.	@D 1 "\\$1" "\\$2"
+.	@C 2
+.	di |e
+.\}
+.ls 1
+.in 0
+.nf
+..
+.
+.de EN			\" *** equation end
+.br
+.do HTML-IMAGE-END
+.if "\*(.T"html" \
+.	do ll \\n[e-EQ-ll]u
+.ie "\\$1"C" \
+\{\
+.	nr ?e 1
+.	sp \\n(esu
+.\}
+.el \
+\{\
+.	nr ?e 0
+.	di
+.	if \\n(dn \
+.		@q\"		\" actual equation output
+.	rm |e
+.	ev
+.\}
+..
+.
+.de @q			\" --- equation output
+.nr _Q \\n(dnu
+.ev
+.sp \\n(esu			\" output rest of preceding text
+.if !"\\n(.z"" \!.ne \\n(_Qu
+.ne \\n(_Qu+\n(.Vu		\" keep it on one page
+.@C 2\"				\" .ev 2 may be jumbled from header
+.if \\n(_d=1 \
+.	in (\\n(.lu+\\n($iu-\\n(dlu)/2u
+.if \\n(_d=2 \
+.	in \\n($iu
+.if \\n(_d=3 \
+.	in \\n(biu+\\n($iu
+.if \\n(_d=4 \
+.	in 0
+.mk _q
+.if \n@>1 .tm --@e: _Q=\\n(_Q _q=\\n(_q nl=\\n(nl |p=\\*(|p
+.if !"\\*(|p"" \
+\{\
+.	rs
+.	sp (\\n(_Qu-\\n(.vu)/2u
+.	tl """\\*(|p"
+.	rt \\n(_qu
+.\}
+.if \\n(?n \
+.	nm \\n(ln
+.|e
+.if \\n(?n \
+.	nm
+.sp |\\n(_qu+\\n(_Qu
+.sp \\n(esu+\\n(.Lv-1v
+.rr _q
+.rr _Q
+..
+.
+.\"
+.\"	TBL
+.\"
+.de TS			\" *** table start
+.sp \\n(bsu
+.if "\*(.T"html" \
+\{\
+.	do nr e-TS-ll \\n(.l
+.	ll 1000n
+.\}
+.do HTML-IMAGE
+.@C 1
+.fi				\" drop into fill mode for text boxes
+.if "\\$1"H" \
+\{\
+.	di |h			\" save header part
+.	nr ?T 1
+.\}
+.ls 1
+.ch @f -(\\n(_bu+1v)		\" set pseudo-trap for bottom line
+.if \\n(.p-\\n(_b-1v<=\\n(nl \
+.	ch @f \\n(nlu+\n(.Vu
+..
+.
+.de TH			\" *** end header part of table
+.nr T. 0
+.T# 0
+.if \\n(?n \!.nm
+.di
+.nr _T \\n(?T
+.nr ?T 0
+.ne \\n(dnu+1v
+.nr ?T \\n(_T
+.nr _i \\n(.i
+.if \\n(?n .nm \\n(ln
+.in 0
+.|h\"				\" put in the initial header
+.in \\n(_iu
+.rr _i
+.mk #T
+..
+.
+.de TE			\" *** table end
+.nr ?T 0
+.ch @f -\\n(_bu			\" reset pseudo-trap
+.if \\n(.p-\\n(_b<=\\n(nl \
+.	ch @f \\n(nlu+\n(.Vu
+.ev
+.do HTML-IMAGE-END
+.if "\*(.T"html" \
+.	do ll \\n[e-TS-ll]u
+.sp \\n(bsu+\\n(.Lv-1v
+.re
+..
+.
+.de T&
+..
+.
+.\"
+.\"	REFER
+.\"
+.mso refer-me.tmac
+.
+.\"
+.\"	IDEAL
+.\"
+.de IS			\" *** start ideal picture
+.nr g7 \\n(.u
+.ls 1
+..
+.
+.de IF
+.if \\n(g7 .fi
+.ls
+..
+.
+.de IE			\" *** end ideal picture
+.if \\n(g7 .fi
+.ls
+..
+.
+.\"
+.\"	PIC
+.\"
+.de PS		\" *** start picture: $1=height, $2=width in units or inches
+.sp 0.3
+.do HTML-IMAGE
+.nr g7 \\$2
+.in (u;\\n(.l-\\n(g7>?0/2)
+.ne \\$1u
+.nr g7 \\n(.u
+.ls 1
+.if \\n(?n \
+\{\
+.	de PS_nm_check &&        \" define macro to emit .nm at top diversion
+.	if \n@>4 .tm -- PS: \\\\$1 \\\\$2 .z=\\\\n(.z PS_nm_cnt=\\\\n[PS_nm_cnt]
+.	\"                       \" multiple .PS/.PE in a keep.
+.	if `\\\\$2`init` \
+.		do nr PS_nm_cnt \\\\n[PS_nm_cnt]+1
+.	ie `\\\\n(.z`` \
+\{\
+.		if `\\\\$1`suspend` \
+.			nm
+.		if `\\\\$1`resume` \
+\{\
+.			nm \\\\n(ln
+.			do nr PS_nm_cnt \\\\n[PS_nm_cnt]-1
+.			do if !\\\\n[PS_nm_cnt] \
+\{\
+.				do rm PS_nm_check
+.				do rr PS_nm_cnt
+.\}
+.\}
+.\}
+.el \!.PS_nm_check \\\\$1
+.&&
+.	mk _q                    \" emit a single numbered line for PS picture
+.	rs
+\&\ 
+.	br
+.	rt \\n(_qu
+.	PS_nm_check suspend init
+.\}
+..
+.
+.de PE			\" *** end picture
+.if \\n(?n .PS_nm_check resume
+.ls
+.in
+.if \\n(g7 .fi
+.do HTML-IMAGE-END
+.sp .6
+..
+.
+.\"
+.\"	GREMLIN
+.\"
+.de GS			\" *** start gremlin picture
+.ie '\*(.T'html' \
+\{\
+.	ie "\\$1"L" .do HTML-IMAGE-LEFT
+.	el .ie "\\$1"R" .do HTML-IMAGE-RIGHT
+.	el .do HTML-IMAGE
+.\}
+.el \
+\{\
+.	nr g7 (\\n(.lu-\\n(g1u)/2u
+.	if "\\$1"L" .nr g7 \\n(.iu
+.	if "\\$1"R" .nr g7 \\n(.lu-\\n(g1u
+.	in \\n(g7u
+.	nr g7 \\n(.u
+.	ls 1
+.	nf
+.	ne \\n(g2u
+.\}
+..
+.
+.de GE			\" *** end gremlin picture
+.ie '\*(.T'html' .do HTML-IMAGE-END
+.el \
+\{\
+.	GF
+.	sp .6
+.\}
+..
+.
+.de GF			\" *** finish gremlin picture; stay at top
+.ls
+.in
+.if \\n(g7 .fi
+..
+.
+.
+.\"		*** FONT AIDS ***
+.
+.
+.de sz			\" *** set point size and vertical spacing
+.ps \\$1
+.if \\n($r .@v
+.vs \\n(.sp*\\n($vu/100u	\" default vs at pointsize + 20%
+..
+.
+.de @v			\" --- possibly set $v from $r
+.if (1i>=240u)&(1p<=\\n($r)&(\\n($r<=4p) .nr $v \\n($r00/1p
+..
+.
+.de @V			\" --- possibly set $V from $R
+.if (1i>=240u)&(1p<=\\n($R)&(\\n($R<=4p) .nr $V \\n($R00/1p
+..
+.
+.de @E			\" --- store in _F argument to \f for restoring font
+.ie \\n(.f<10 \
+.	ds _F \\n(.f
+.el \
+\{\
+.	ie \\n(.f<100&\n(.g \
+.		ds _F (\\n(.f
+.	el \
+.		ds _F P
+.\}
+..
+.
+.de r			\" *** enter roman font
+.do check_need_title
+.@E
+.ft 1
+.if \\n(.$ \&\\$1\f\\*(_F\\$2
+.do check_need_title
+..
+.
+.de i			\" *** enter italic
+.do check_need_title
+.@E
+.ft 2
+.if \\n(.$ \&\\$1\f\\*(_F\\$2
+.do check_need_title
+..
+.
+.de b			\" *** enter boldface
+.do check_need_title
+.@E
+.ft 3
+.if \\n(.$ \&\\$1\f\\*(_F\\$2
+.do check_need_title
+..
+.
+.de rb			\" *** enter real boldface
+.do check_need_title
+.@E
+.ft 3
+.if \\n(.$ \&\\$1\f\\*(_F\\$2
+.do check_need_title
+..
+.
+.de bi			\" *** enter bold italic
+.do check_need_title
+.@E
+.ft 4
+.if \\n(.$ \&\\$1\f\\*(_F\\$2
+.do check_need_title
+..
+.
+.de u			\" *** enter underlined word
+\&\\$1\l'|0\(ul'\\$2
+..
+.
+.\" a better version of u
+.if !\n(.g .ig
+.de u
+\Z'\\$1'\v'.25m'\D'l \w'\\$1'u 0'\v'-.25m'\\$2
+..
+.
+.de q			\" *** enter quoted word
+\&\\*(lq\\$1\\*(rq\\$2
+..
+.
+.de bx			\" *** enter boxed word
+.ie '\*(.T'html' \\$1\\$2
+.el \k~\(br\|\\$1\|\(br\l'|\\n~u\(rn'\l'|\\n~u\(ul'\^\\$2
+..
+.
+.de sm			\" *** print in smaller font
+\s-1\\$1\\s0\\$2
+..
+.
+.de @F			\" --- change font (0 -> no change)
+.nr ~ \\$1
+.if \\n~>0 \
+.	ft \\n~
+.rr ~
+..
+.
+.
+.\"		*** FOOTNOTING ***
+.
+.
+.de (f			\" *** begin footnote
+.ec
+.if "\\n(.z"|f" .tm Line \\n(c. -- Invalid footnote nesting
+.ie "\\n(.z"" \
+\{\
+.	nr _D \\n(dn
+.	nr _0 1v+\\n(nlu
+.	ev 2
+.	nm
+.	da |f
+.	in 0
+.	xl \\n($lu-\\n(fuu
+.	@F \\n(ff
+.	sz \\n(fp
+.	vs \\n(.sp*\\n($Vu/100u
+.	if !\\n(?f \
+\{\
+.		nr _b +1v	\" allow space for $s
+.		$s
+.	\}
+.	br
+.	if \\n(.p-\\n(_b-\\n(_0-\\n(.h-1v-\\n(fs<0 \
+\{\
+.		da\"		\" won't fit on page at all
+.		bc
+.		if !\\n(?f \
+.			rm |f
+.		da |f
+.\" next five lines could be dropped if headers had their own environment
+.		in 0		\" reset everything from .bc
+.		xl \\n($lu-\\n(fuu
+.		@F \\n(ff
+.		sz \\n(fp
+.		vs \\n(.sp*\\n($Vu/100u
+.		if !\\n(?f \
+.			$s
+.		br
+.	\}
+.	rr _0
+.	sp \\n(fsu
+.	nr ?f 1
+.	fi
+.	if !"\\$1"_" \
+.		ti \\n(fiu
+.	if \n@>2 .tm	<< (f $f=\\n($f
+.\}
+.el \
+\{\
+.	ev 2
+.	nm
+.	in 0
+.	xl \\n($lu-\\n(fuu
+.	@F \\n(ff
+.	sz \\n(fp
+.	vs \\n(.sp*\\n($Vu/100u
+.	fi
+\!.(f \\$1
+\!.@N
+.\}
+..
+.
+.de @N			\" --- set no fill mode in the top-level diversion
+.ie "\\n(.z"" .nf
+.el \!.@N
+..
+.
+.de )f			\" *** end footnote
+.ie "\\n(.z"|f" \
+\{\
+.	if \\n* \
+.		nr $f +1
+.	ds * \\*{\\n($f\\*}\k*
+.	nr * 0
+.	in 0
+.	da
+.	ev
+.	if \\n(_w<\\n(dl \
+.		nr _w \\n(dl	\" compute maximum fn width
+.	nr _b +\\n(dn
+.	ch @f -\\n(_bu
+.	if \\n(.p-\\n(_b<=\\n(nl \
+.		ch @f \\n(nlu+\n(.Vu
+.	nr dn \\n(_D
+.	rr _D
+.\}
+.el \
+\{\
+.	br
+\!.)f
+.	ev
+.\}
+..
+.
+.@R ff
+.if \n(ff<=0 \
+.	nr ff 1			\" footnote font: Times Roman
+.@R fp
+.if \n(fp<=0 \
+.	nr fp 8			\" footnote pointsize
+.
+.de $s			\" $$$ footnote separator
+\l'2i'
+..
+.
+.
+.\"		*** DELAYED TEXT ***
+.
+.
+.de (d			\" *** begin delayed text
+.am |d )d
+.sp \\n(bsu
+..
+.
+.de )d			\" *** end delayed text
+.if \\n# \
+.	nr $d +1
+.ds # [\\n($d]\k#
+.rr #
+..
+.
+.de pd			\" *** print delayed text
+.|d
+.rm |d
+.nr $d 1 1
+.ds # [1]\k#
+..
+.
+.
+.\"		*** INDEXES (TABLE OF CONTENTS) ***
+.
+.
+.nr _x 0 1
+.do nr _xn 0
+.af _x a
+.
+.de (x			\" *** begin index entry
+.if \n@>4 .tm >> (x, .z=\\n(.z
+.ds |X x
+.if \\n(.$>0 \
+.	ds |X \\$1
+.ie "\\n(.z"" \
+.	nr _z 0
+.el \
+.	nr _z 1
+.@\\n(_z
+..
+.
+.de @0			\" --- finish (x if no current diversion
+.am %\\*(|X )x
+.sp \\n(xsu
+.ti -\\n(piu
+..
+.
+.de @1			\" --- finish (x if current diversion
+.if "\\n(_x"z" .nr _x 0
+.de =\\n+(_x )x
+..
+.
+.de )x			\" *** end index entry
+.if \n@>4 .tm >> )x, .z=\\n(.z
+.ie "\\n(.z"" \
+\{\
+.	ds |x \\n%
+.	if \\n(.$>0 \
+.		ds |x \\$1
+.	if "\\*(|x"_" \
+.		ig ..
+.	am %\\*(|X ..
+.	if \w"\\$2">(\\n(.l-\\n(.i-\\n(.k) \
+.		ti +\\n(xuu
+\\\\a\\\\t\\$2\\*(|x
+...
+.	rm |x
+.	rm |X
+.\}
+.el \
+\{\
+\!.(x \\*(|X
+\!\\\\*(=\\n(_x\\\\
+\!.)x \\$1 \\$2
+\!.rm =\\n(_x
+.\}
+..
+.
+.de xp			\" *** print the index
+.br
+.@C 2
+.ls 1
+.vs \\n(.sp*\\n($Vu/100u
+.fi
+.in +\\n(piu
+.ds |X x
+.if \\n(.$>0 \
+.	ds |X \\$1
+.xl -(\\n(xuu+\w'...'u)
+.di |x
+.%\\*(|X
+.br
+.di
+.rm %\\*(|X
+.xl \\n($lu
+.rm |X
+.ev
+.nf
+.in 0
+.ta \\n(.lu-\\n(xuuR \\n(.luR
+.|x
+.fi
+.in
+.rm |x
+..
+.
+.
+.\"		*** HTML VERSIONS OF .x(, .x), AND .xp ***
+.
+.
+.de (x-html    \" --- create TAG and divert text
+.nr _x +1
+.do nr _xn +1
+.do TAG "_x\\n[_x]
+.br
+.do di |x\\n[_xn]
+.br
+..
+.
+.de )x-html    \" --- end diversion
+.br
+.di
+..
+.
+.de xp-html    \" --- create list of links
+.do nr _xx 1
+.br
+.do ev xp-html-ev
+.sp
+.do ULS
+.do while \\n[_xx]<=\\n[_xn] \
+\{\
+.	br
+.	do unformat |x\\n[_xx]
+.	do di xp-html-div
+.	br
+.	ll 100i
+.	fi
+.	do |x\\n[_xx]
+.	br
+.	di
+.	do asciify xp-html-div
+.	do rm xp-html-as
+.	do as xp-html-as #
+.	do as xp-html-as _x\\n[_xx]
+.	ll
+.	LI
+.	do URL \\*[xp-html-as] "\\*[xp-html-div]
+.	do rm xp-html-as
+.	do nr _xx +1
+.\}
+.do ULE
+.sp
+.ev
+..
+.
+.if '\*(.T'html' \
+\{\
+.	rm (x
+.	do als (x (x-html
+.	rm )x
+.	do als )x )x-html
+.	rm xp
+.	do als xp xp-html
+.\}
+.
+.
+.\"		*** CHAPTERS AND TITLES ***
+.
+.
+.de +c				\" *** begin chapter
+.ep\"				\" force out footnotes
+.if \\n(?o:\\n(?a \
+\{\
+.	bp			\" force out a table or more footnote
+.	rs
+.	ep
+.\}
+.nr ?C 1
+.nr $f 1 1
+.ds * \\*{1\\*}\k*
+.if \\n(?R \
+.	pn 1
+.bp
+.in \\n($iu			\" reset the indent
+.rs
+.ie \\n(.$ \
+.	$c "\\$1"
+.el \
+.	sp 3
+..
+.
+.de ++			\" *** declare chapter type
+.nr _0 0
+.if "\\$1"C" \
+.	nr _0 1			\" chapter
+.if "\\$1"RC" \
+.	nr _0 11		\" renumbered chapter
+.if "\\$1"A" \
+.	nr _0 2			\" appendix
+.if "\\$1"RA" \
+.	nr _0 12		\" renumbered appendix
+.if "\\$1"P" \
+.	nr _0 3			\" preliminary material
+.if "\\$1"B" \
+.	nr _0 4			\" bibliographic material
+.if "\\$1"AB" \
+.	nr _0 5			\" abstract
+.if \\n(_0=0 \
+.	tm Line \\n(c. -- Bad mode to .++
+.nr ?R 0
+.if \\n(_0>10 \
+.\{
+.	nr ?R 1
+.	nr _0 -10
+.\}
+.nr ch 0 1
+.if (\\n(_0=3):(\\n(_0=5) \
+.	pn 1			\" must do before .ep
+.if !\\n(_0=\\n(_M .if \\n(_M=3 \
+.	pn 1			\" must do before .ep
+.ep\"				\" end page for correct page number types
+.if \\n(_0=1 \
+\{\
+.	af ch 1
+.	af % 1
+.\}
+.if \\n(_0=2 \
+\{\
+.	af ch A
+.	af % 1
+.\}
+.if \\n(_0=3 \
+.	af % i
+.if \\n(_0=4 \
+.	af % 1
+.if \\n(_0=5 \
+.	af % 1
+.if \\n(.$>1 \
+.	he \\$2
+.nr _M \\n(_0
+.rr _0
+..
+.
+.de $c			\" $$$ print chapter title
+.sz 12
+.ft 3
+.ce 1000
+.if \\n(_M<3 \
+.	nr ch +1
+.ie \\n(_M=1 CHAPTER\ \ \\n(ch
+.el .if \\n(_M=2 APPENDIX\ \ \\n(ch
+.if \w"\\$1" .sp 3-\\n(.L
+.if \w"\\$1" \\$1
+.if (\\n(_M<3):(\w"\\$1") \
+.	sp 4-\\n(.L
+.ce 0
+.ft
+.sz
+.ie \\n(_M=1 \
+.	$C Chapter \\n(ch "\\$1"
+.el .if \\n(_M=2 \
+.	$C Appendix \\n(ch "\\$1"
+..
+.
+.de tp			\" *** title page
+.hx
+.bp
+.br
+.rs
+.pn \\n%
+..
+.
+.\"		*** DATES ***
+.if \n(mo=1 .ds mo January
+.if \n(mo=2 .ds mo February
+.if \n(mo=3 .ds mo March
+.if \n(mo=4 .ds mo April
+.if \n(mo=5 .ds mo May
+.if \n(mo=6 .ds mo June
+.if \n(mo=7 .ds mo July
+.if \n(mo=8 .ds mo August
+.if \n(mo=9 .ds mo September
+.if \n(mo=10 .ds mo October
+.if \n(mo=11 .ds mo November
+.if \n(mo=12 .ds mo December
+.if \n(dw=1 .ds dw Sunday
+.if \n(dw=2 .ds dw Monday
+.if \n(dw=3 .ds dw Tuesday
+.if \n(dw=4 .ds dw Wednesday
+.if \n(dw=5 .ds dw Thursday
+.if \n(dw=6 .ds dw Friday
+.if \n(dw=7 .ds dw Saturday
+.nr y2 \n(yr%100
+.af y2 00
+.nr y4 \n(yr+1900
+.ds td \*(mo \n(dy, \n(y4
+.
+.
+.\"		*** PARAMETRIC INITIALIZATIONS ***
+.
+.
+.rr x
+.nr $v \n(.v00+\n(.sp-1/\n(.sp	\" vs as percentage of ps for .sz request
+.nr $V \n($v			\" same for displays & footnotes
+.nr hm 4v			\" header margin
+.nr tm 7v			\" top margin
+.nr bm 6v			\" bottom margin
+.nr fm 3v			\" footer margin
+.nr tf 3			\" title font: (real) Times Bold
+.nr tp 10			\" title point size
+.hy 14
+.nr bi 4m			\" indent for blocks
+.nr pi 5n			\" indent for paragraphs
+.nr pf 1			\" normal text font
+.nr pp 10			\" normal text point size
+.nr qi 4n			\" indent for quotes
+.nr qp -1			\" down one point
+.nr ii 5n			\" indent for .ip's and .np's
+.nr $m 1			\" max number of columns
+.nr $s 4n			\" column separation
+.nr sf 3			\" section font -- Times Bold
+.nr sp 10			\" section title pointsize
+.nr ss 12p			\" section prespacing
+.nr si 0			\" section indent
+.
+.
+.\"		*** OTHER INITIALIZATION ***
+.
+.
+.\" GNU pic sets this register to 1, to indicate that \x should not be used.
+.@R 0x
+.ds { \v'-0.4m'\x'\\n(0x=0*-0.2m'\s-3
+.ds } \s0\v'0.4m'
+.\" for compatibility with traditional -me
+.\" (the first will work only in compatibility mode)
+.ds [ \*{
+.ds ] \*}
+.ds < \v'0.4m'\x'\\n(0x=0*0.2m'\s-3
+.ds > \s0\v'-0.4m'
+.ds - \(em
+.\" Avoid warnings from groff -ww.
+.@S |0
+.@S |1
+.@S |2
+.@S |3
+.@S $H
+.@S $0
+.@S $1
+.@S $2
+.@S $3
+.@S $4
+.@S $5
+.@S $6
+.@S $7
+.@S $8
+.@S $9
+.@S ..
+.
+.@R po\"			\" simulated page offset
+.@R $0\"			\" section depth
+.@R $i\"			\" paragraph base indent
+.@R $p\"			\" numbered paragraph number
+.@R $r\"			\" ratio of vs to ps (may override $v)
+.@R $R\"			\" same for displays (may override $V)
+.@R df\"			\" display font: same as surrounding text
+.@R so\"			\" additional section title offset
+.@R fu\"			\" footnote undent
+.@R bt\"			\" block keep threshold
+.@R *\"				\" has \** been referenced?
+.@R ?a\"			\" pending floating keep at page top?
+.@R ?b\"			\" pending floating keep at page bottom?
+.@R ?C\"			\" at chapter header?
+.@R ?e\"			\" in equation?
+.@R ?H\"			\" suppress headers and footers next page?
+.@R ?I\"			\" has the header trap been sprung?
+.@R ?n\"			\" n1 mode?
+.@R ?o\"			\" footnote overflow?
+.@R ?R\"			\" renumbered chapter?
+.@R ?s\"			\" skip next page?
+.@R ?T\"			\" inside .TS H?
+.@R ?W\"			\" wide floating keep at page bottom?
+.@R ?w\"			\" wide floating keep at page top?
+.
+.nr fi 0.3i
+.nr _o \n(.o
+.nr $b 3			\" bold
+.nr ps 0.35v
+.if \n(ps<\n(.V .nr ps \n(.V
+.nr bs \n(ps			\" block pre/post spacing
+.nr qs \n(ps			\" quote pre/post spacing
+.nr zs 1v			\" float-block pre/postspacing
+.nr xs 0.2v			\" index prespacing
+.nr xu 0.5i			\" index undent
+.nr fs 0.2v			\" footnote prespacing
+.nr es 0.5v			\" equation pre/postspacing
+.if \n(es<\n(.V .nr es \n(.V
+.wh 0 @h			\" set header
+.nr $l \n(.lu			\" line length
+.nr _L \n(.lu			\" line length of page
+.nr $c 1			\" current column number
+.nr $f 1 1			\" footnote number
+.ds * \*{1\*}\k*\"		\" footnote "name"
+.nr $d 1 1			\" delayed text number
+.ds # [1]\k#\"			\" delayed text "name"
+.nr _M 1			\" chapter mode is chapter
+.ds lq \(lq\"			\" left quote
+.ds rq \(rq\"			\" right quote
+.em @z
+.
+.
+.\"		*** FOREIGN LETTERS AND SPECIAL CHARACTERS ***
+.
+.
+.ds #h ((1u-(\\\\n(.fu%2u))*0.13m)
+.ds #v 0.6m
+.
+.\"			\" accents
+.ds ' \k_\h'-(\\n(.wu*8/10-\*(#h)'\(aa\h'|\\n_u'
+.ds ` \k_\h'-(\\n(.wu*7/10-\*(#h)'\(ga\h'|\\n_u'
+.
+.\"			\" umlaut
+.ds : \k_\h'-(\\n(.wu*8/10-\*(#h+0.1m)'\v'-\*(#v'\z.\h'0.2m'.\h'|\\n_u'\v'\*(#v'
+.
+.\"			\" circumflex and tilde
+.ds ^ \k_\h'-(\\n(.wu-\*(#h-0.05m)'^\h'|\\n_u'
+.ds ~ \k_\h'-(\\n(.wu-\*(#h-0.05m)'~\h'|\\n_u'
+.
+.\"			\" cedilla and czech
+.ds , \k_\h'-(\\n(.wu)',\h'|\\n_u'
+.ds v \k_\h'-(\\n(.wu*9/10-\*(#h)'\v'-\*(#v'\s-4v\s0\v'\*(#v'\h'|\\n_u'
+.
+.\"			\" Norwegian A or angstrom
+.ds o \k_\h'-(\\n(.wu+\w'\(de'u-\*(#h)/2u'\v'-0.4n'\z\(de\v'0.4n'\h'|\\n_u'
+.
+.\"			\" there exists, for all
+.ds qe \s-2\v'0.45m'\z\(em\v'-0.625m'\z\(em\v'-0.625m'\(em\v'0.8m'\s0\h'-0.1m'\v'-0.05m'\(br\v'0.05m'\h'0.1m'
+.ds qa \z\e\h'0.35m'\z\(sl\h'-0.33m'\v'-0.3m'\s-4\(em\s0\v'0.3m'\h'0.15m'
+.rm #h #v
+.ll 6.0i
+.lt 6.0i
+.
+.de @U
+.tm The \\$1 macro has been removed from this version of the -me macros.
+..
+.
+.de lo
+.@U lo
+..
+.
+.de th
+.@U th
+..
+.
+.de ac
+.@U ac
+..
+.
+.\" EOF
diff -Nuar groff-1.22.3.old/tmac/.gitignore groff-1.22.3/tmac/.gitignore
--- groff-1.22.3.old/tmac/.gitignore	1970-01-01 02:00:00.000000000 +0200
+++ groff-1.22.3/tmac/.gitignore	2015-04-23 20:57:03.000000000 +0300
@@ -0,0 +1,18 @@
+*-s
+*-sed
+*-wrap
+groff_man.n
+groff_mdoc.n
+groff_me.n
+groff_ms.n
+groff_www.n
+groff_trace.n
+stamp-strip
+doc-common
+doc-ditroff
+doc-nroff
+doc-old.tmac
+doc-syms
+doc.tmac
+e.tmac
+www.tmac
diff -Nuar groff-1.22.3.old/tmac/groff_man.man groff-1.22.3/tmac/groff_man.man
--- groff-1.22.3.old/tmac/groff_man.man	2014-11-04 10:38:35.534520134 +0200
+++ groff-1.22.3/tmac/groff_man.man	2015-04-23 20:57:03.000000000 +0300
@@ -4,6 +4,10 @@
 groff_man \- groff man macros to support generation of man pages
 .
 .
+.do nr groff_C \n[.C]
+.cp 0
+.
+.
 .\" --------------------------------------------------------------------
 .\" Legal Terms
 .\" --------------------------------------------------------------------
@@ -1269,6 +1273,9 @@
 .au
 .
 .
+.cp \n[groff_C]
+.
+.
 .\" --------------------------------------------------------------------
 .\" ### Emacs settings:
 .\" Local Variables:
diff -Nuar groff-1.22.3.old/tmac/groff_trace.man groff-1.22.3/tmac/groff_trace.man
--- groff-1.22.3.old/tmac/groff_trace.man	2014-11-04 10:38:35.535520121 +0200
+++ groff-1.22.3/tmac/groff_trace.man	2015-04-23 20:57:03.000000000 +0300
@@ -6,6 +6,10 @@
 .\" File position: <groff-source>/tmac/groff_trace.man
 .
 .
+.do nr groff_C \n[.C]
+.cp 0
+.
+.
 .\" --------------------------------------------------------------------
 .\" Legal Terms
 .\" --------------------------------------------------------------------
@@ -323,6 +327,9 @@
 .au
 .
 .
+.cp \n[groff_C]
+.
+.
 .\" Local Variables:
 .\" mode: nroff
 .\" End:
diff -Nuar groff-1.22.3.old/tmac/Makefile.sub groff-1.22.3/tmac/Makefile.sub
--- groff-1.22.3.old/tmac/Makefile.sub	2014-11-04 10:38:35.537520096 +0200
+++ groff-1.22.3/tmac/Makefile.sub	1970-01-01 02:00:00.000000000 +0200
@@ -1,184 +0,0 @@
-# Makefile.sub for `tmac'
-#
-# File position: <groff-source>/tmac/Makefile.sub
-#
-# Copyright (C) 1989-2014  Free Software Foundation, Inc.
-#      Written by James Clark (jjc@jclark.com)
-#
-# This file is part of groff.
-#
-# groff is free software; you can redistribute it and/or modify it under
-# the terms of the GNU General Public License as published by the Free
-# Software Foundation, either version 3 of the License, or
-# (at your option) any later version.
-#
-# groff is distributed in the hope that it will be useful, but WITHOUT ANY
-# WARRANTY; without even the implied warranty of MERCHANTABILITY or
-# FITNESS FOR A PARTICULAR PURPOSE.  See the GNU General Public License
-# for more details.
-#
-# You should have received a copy of the GNU General Public License
-# along with this program. If not, see <http://www.gnu.org/licenses/>.
-#
-########################################################################
-
-MAN7=\
-  groff_ms.n \
-  groff_man.n \
-  groff_me.n \
-  groff_mdoc.n \
-  groff_trace.n \
-  groff_www.n
-
-NORMALFILES=\
-  man.tmac mandoc.tmac andoc.tmac an-old.tmac an-ext.tmac \
-  ms.tmac \
-  me.tmac \
-  mdoc.tmac \
-  pic.tmac \
-  a4.tmac papersize.tmac \
-  62bit.tmac \
-  ec.tmac \
-  safer.tmac \
-  trace.tmac \
-  ps.tmac psold.tmac pspic.tmac psatk.tmac \
-  pdf.tmac \
-  dvi.tmac \
-  tty.tmac tty-char.tmac \
-  latin1.tmac latin2.tmac latin5.tmac latin9.tmac cp1047.tmac \
-  unicode.tmac \
-  X.tmac Xps.tmac \
-  lj4.tmac \
-  lbp.tmac \
-  html.tmac html-end.tmac \
-  devtag.tmac \
-  europs.tmac \
-  composite.tmac fallbacks.tmac \
-  eqnrc \
-  refer.tmac refer-me.tmac refer-ms.tmac \
-  troffrc troffrc-end \
-  trans.tmac \
-  hyphen.us hyphenex.us \
-  fr.tmac hyphen.fr \
-  sv.tmac hyphen.sv \
-  de.tmac den.tmac hyphen.det hyphen.den hyphenex.det \
-  cs.tmac hyphen.cs hyphenex.cs \
-  ja.tmac
-
-# These files are handled specially during installation and deinstallation.
-SPECIALFILES=an.tmac s.tmac www.tmac
-
-# These files are processed with `strip.sed'.
-STRIPFILES=e.tmac doc.tmac doc-old.tmac
-MDOCFILES=doc-common doc-ditroff doc-nroff doc-syms
-mdocdir=$(tmacdir)/mdoc
-
-MOSTLYCLEANADD=\
-  stamp-wrap stamp-sed *-wrap www.tmac-sed \
-  stamp-strip e.tmac-s doc.tmac-s doc-old.tmac-s \
-  doc-common-s doc-ditroff-s doc-nroff-s doc-syms-s mdoc.local-s
-tmac_s_prefix=
-tmac_an_prefix=
-tmac_wrap=
-sys_tmac_prefix=
-pnmtops_nosetpage="pnmtops"
-
-RM=rm -f
-
-all: stamp-strip stamp-wrap stamp-sed
-
-install_data: $(NORMALFILES) $(SPECIALFILES) man.local \
-              stamp-strip stamp-wrap stamp-sed
-	-test -d $(DESTDIR)$(tmacdir) \
-	  || $(mkinstalldirs) $(DESTDIR)$(tmacdir)
-	-test -d $(DESTDIR)$(systemtmacdir) \
-	  || $(mkinstalldirs) $(DESTDIR)$(systemtmacdir)
-	-test -d $(DESTDIR)$(localtmacdir) \
-	  || $(mkinstalldirs) $(DESTDIR)$(localtmacdir)
-	if test -n "$(tmac_wrap)"; then \
-	  for m in ""$(tmac_wrap); do \
-	    $(INSTALL_DATA) $$m-wrap $(DESTDIR)$(systemtmacdir)/$$m.tmac; \
-	  done; \
-	fi
-	for f in $(NORMALFILES); do \
-	  $(RM) $(DESTDIR)$(tmacdir)/$$f; \
-	  $(INSTALL_DATA) $(srcdir)/$$f $(DESTDIR)$(tmacdir)/$$f; \
-	done
-	$(RM) $(DESTDIR)$(tmacdir)/$(tmac_s_prefix)s.tmac
-	$(INSTALL_DATA) $(srcdir)/s.tmac \
-	  $(DESTDIR)$(tmacdir)/$(tmac_s_prefix)s.tmac
-	$(RM) $(DESTDIR)$(tmacdir)/$(tmac_an_prefix)an.tmac
-	$(INSTALL_DATA) $(srcdir)/an.tmac \
-	  $(DESTDIR)$(tmacdir)/$(tmac_an_prefix)an.tmac
-	$(RM) $(DESTDIR)$(tmacdir)/www.tmac
-	$(INSTALL_DATA) www.tmac-sed $(DESTDIR)$(tmacdir)/www.tmac
-	for f in $(STRIPFILES); do \
-	  $(RM) $(DESTDIR)$(tmacdir)/$$f; \
-	  $(INSTALL_DATA) $$f-s $(DESTDIR)$(tmacdir)/$$f; \
-	done
-	-test -d $(DESTDIR)$(mdocdir) || $(mkinstalldirs) $(DESTDIR)$(mdocdir)
-	for f in $(MDOCFILES); do \
-	  $(RM) $(DESTDIR)$(mdocdir)/$$f; \
-	  $(INSTALL_DATA) $$f-s $(DESTDIR)$(mdocdir)/$$f; \
-	done
-	-test -f $(DESTDIR)$(localtmacdir)/man.local \
-	  || $(INSTALL_DATA) $(srcdir)/man.local \
-	       $(DESTDIR)$(localtmacdir)/man.local
-	-test -f $(DESTDIR)$(localtmacdir)/mdoc.local \
-	  || $(INSTALL_DATA) mdoc.local-s $(DESTDIR)$(localtmacdir)/mdoc.local
-
-stamp-strip: $(STRIPFILES) $(MDOCFILES) mdoc.local
-	for f in $(STRIPFILES) $(MDOCFILES) mdoc.local; do \
-	  $(RM) $$f-s; \
-	  sed -f $(srcdir)/strip.sed $(srcdir)/$$f >$$f-s; \
-	done
-	touch $@
-
-stamp-wrap:
-	if test -n "$(tmac_wrap)"; then \
-	  for m in ""$(tmac_wrap); do \
-	    $(RM) $$m-wrap; \
-	    if test "$$m" = an; then \
-	      echo .do mso andoc.tmac >>$$m-wrap; \
-	    fi; \
-	    echo .cp 1 >>$$m-wrap; \
-	    echo .so $(sys_tmac_prefix)$$m >>$$m-wrap; \
-	  done; \
-	fi
-	touch $@
-
-stamp-sed: www.tmac
-	sed -e "s;@PNMTOPS_NOSETPAGE@;$(pnmtops_nosetpage);g" \
-	  $(srcdir)/www.tmac > www.tmac-sed
-	touch $@
-
-uninstall_sub:
-	-if test -n "$(tmac_wrap)"; then \
-	  for m in ""$(tmac_wrap); do \
-	    $(RM) $(DESTDIR)$(systemtmacdir)/$$m.tmac; \
-	  done; \
-	fi
-	-for f in $(NORMALFILES) $(STRIPFILES); do \
-	  $(RM) $(DESTDIR)$(tmacdir)/$$f; \
-	done
-	$(RM) $(DESTDIR)$(tmacdir)/$(tmac_s_prefix)s.tmac
-	$(RM) $(DESTDIR)$(tmacdir)/$(tmac_an_prefix)an.tmac
-	$(RM) $(DESTDIR)$(tmacdir)/www.tmac
-	-if cmp -s $(DESTDIR)$(localtmacdir)/man.local \
-	           $(srcdir)/man.local; then \
-	  $(RM) $(DESTDIR)$(localtmacdir)/man.local; \
-	fi
-	-if cmp -s $(DESTDIR)$(localtmacdir)/mdoc.local \
-	           $(srcdir)/mdoc.local; then \
-	  $(RM) $(DESTDIR)$(localtmacdir)/mdoc.local; \
-	fi
-	-for f in $(MDOCFILES); do $(RM) $(DESTDIR)$(mdocdir)/$$f; done
-	-test -d $(DESTDIR)$(mdocdir) && rmdir $(DESTDIR)$(mdocdir)
-
-########################################################################
-# Emacs settings
-########################################################################
-#
-# Local Variables:
-# mode: makefile
-# End:
diff -Nuar groff-1.22.3.old/tmac/strip.sed groff-1.22.3/tmac/strip.sed
--- groff-1.22.3.old/tmac/strip.sed	2014-11-04 10:38:35.539520071 +0200
+++ groff-1.22.3/tmac/strip.sed	2015-04-23 20:57:03.000000000 +0300
@@ -1,3 +1,6 @@
+2 i\
+.\\" This is a generated file, created by `tmac/strip.sed' in groff's\
+.\\" source code bundle from a file having `-u' appended to its name.
 # strip comments, spaces, etc., after a line containing `%beginstrip%'
 /%beginstrip%/,$ {
   s/^\.[	 ]*/./
diff -Nuar groff-1.22.3.old/tmac/tmac.am groff-1.22.3/tmac/tmac.am
--- groff-1.22.3.old/tmac/tmac.am	1970-01-01 02:00:00.000000000 +0200
+++ groff-1.22.3/tmac/tmac.am	2015-04-23 20:57:03.000000000 +0300
@@ -0,0 +1,216 @@
+# Copyright (C) 1989-2007, 2009-2012, 2014
+#   Free Software Foundation, Inc.
+#      Written by James Clark (jjc@jclark.com)
+#      Automake migration by Bertrand Garrigues
+#
+# This file is part of groff.
+#
+# groff is free software; you can redistribute it and/or modify it under
+# the terms of the GNU General Public License as published by the Free
+# Software Foundation, either version 3 of the License, or
+# (at your option) any later version.
+#
+# groff is distributed in the hope that it will be useful, but WITHOUT ANY
+# WARRANTY; without even the implied warranty of MERCHANTABILITY or
+# FITNESS FOR A PARTICULAR PURPOSE.  See the GNU General Public License
+# for more details.
+#
+# You should have received a copy of the GNU General Public License
+# along with this program. If not, see <http://www.gnu.org/licenses/>.
+tmac_srcdir = $(top_srcdir)/tmac
+tmac_builddir = $(top_builddir)/tmac
+
+man7_MANS += \
+  tmac/groff_ms.n \
+  tmac/groff_man.n \
+  tmac/groff_me.n \
+  tmac/groff_mdoc.n \
+  tmac/groff_trace.n \
+  tmac/groff_www.n
+
+TMACNORMALFILES = \
+  tmac/man.tmac \
+  tmac/mandoc.tmac \
+  tmac/andoc.tmac \
+  tmac/an-old.tmac \
+  tmac/an-ext.tmac \
+  tmac/ms.tmac \
+  tmac/me.tmac \
+  tmac/mdoc.tmac \
+  tmac/pic.tmac \
+  tmac/a4.tmac \
+  tmac/papersize.tmac \
+  tmac/62bit.tmac \
+  tmac/ec.tmac \
+  tmac/safer.tmac \
+  tmac/trace.tmac \
+  tmac/ps.tmac \
+  tmac/psold.tmac \
+  tmac/pspic.tmac \
+  tmac/psatk.tmac \
+  tmac/pdf.tmac \
+  tmac/dvi.tmac \
+  tmac/tty.tmac \
+  tmac/tty-char.tmac \
+  tmac/latin1.tmac \
+  tmac/latin2.tmac \
+  tmac/latin5.tmac \
+  tmac/latin9.tmac \
+  tmac/cp1047.tmac \
+  tmac/unicode.tmac \
+  tmac/X.tmac \
+  tmac/Xps.tmac \
+  tmac/lj4.tmac \
+  tmac/lbp.tmac \
+  tmac/html.tmac \
+  tmac/html-end.tmac \
+  tmac/devtag.tmac \
+  tmac/europs.tmac \
+  tmac/composite.tmac \
+  tmac/fallbacks.tmac \
+  tmac/eqnrc \
+  tmac/refer.tmac \
+  tmac/refer-me.tmac \
+  tmac/refer-ms.tmac \
+  tmac/troffrc \
+  tmac/troffrc-end \
+  tmac/trans.tmac \
+  tmac/hyphen.us \
+  tmac/hyphenex.us \
+  tmac/fr.tmac \
+  tmac/hyphen.fr \
+  tmac/sv.tmac \
+  tmac/hyphen.sv \
+  tmac/de.tmac \
+  tmac/den.tmac \
+  tmac/hyphen.det \
+  tmac/hyphen.den \
+  tmac/hyphenex.det \
+  tmac/cs.tmac \
+  tmac/hyphen.cs \
+  tmac/hyphenex.cs \
+  tmac/ja.tmac
+NORMALFILES = `echo $(TMACNORMALFILES) | sed -e "s|tmac/||g"`
+
+# TMACSTRIPFILES are built from their unstripped version (-u)
+TMACSTRIPFILES = tmac/e.tmac tmac/doc.tmac tmac/doc-old.tmac
+
+# Files installed in tmacdir
+dist_tmac_DATA = $(TMACNORMALFILES) tmac/an.tmac tmac/s.tmac
+nodist_tmac_DATA = $(TMACSTRIPFILES) tmac/www.tmac
+
+TMACMDOCFILES = \
+  tmac/doc-common \
+  tmac/doc-ditroff \
+  tmac/doc-nroff \
+  tmac/doc-syms
+MDOCFILES = `echo $(TMACMDOCFILES) | sed -e "s|tmac/||g"`
+mdocdir=$(tmacdir)/mdoc
+# Files installed in mdocdir
+nodist_mdoc_DATA = $(TMACMDOCFILES)
+
+# Installed in localtmacdir
+dist_localtmac_DATA = tmac/man.local tmac/mdoc.local
+
+MOSTLYCLEANFILES += $(TMACMDOCFILES) tmac/www.tmac $(TMACSTRIPFILES) \
+   tmac/stamp-wrap \
+   tmac/*-wrap
+
+EXTRA_DIST += \
+  tmac/fixmacros.sed \
+  tmac/groff_ms.man \
+  tmac/groff_man.man \
+  tmac/groff_me.man \
+  tmac/groff_mdoc.man \
+  tmac/groff_trace.man \
+  tmac/groff_www.man \
+  tmac/hyphenex.pl \
+  tmac/LOCALIZATION \
+  tmac/man.ultrix \
+  tmac/psfig.tmac \
+  tmac/ptx.tmac \
+  tmac/strip.sed \
+  tmac/TESTING-HINTS \
+  tmac/TODO \
+  tmac/www.tmac.in
+
+dist-hook: tmac-dist-hook
+tmac-dist-hook:
+	chmod u+w $(distdir)/tmac
+	for f in $(TMACMDOCFILES) $(TMACSTRIPFILES); do \
+	  cp -f $(top_srcdir)/$$f-u $(distdir)/tmac; \
+	done
+
+
+# If the system comes with its own tmac macro installation (/usr/lib/tmac
+# contains tmac.an, tmac.m, tmac.s), ms and man macros are installed as
+# gs.tmac and gan.tmac, instead of s.tmac and an.tmac.  Also, an.tmac,
+# m.tmac and s.tmac files are installed in <prefix>/lib/groff/site-tmac.
+all: tmac/stamp-wrap
+
+$(TMACMDOCFILES) $(TMACSTRIPFILES): 
+	$(MKDIR_P) $(top_builddir)/tmac
+	for f in $(TMACMDOCFILES) $(TMACSTRIPFILES); do \
+	   sed -f $(tmac_srcdir)/strip.sed $(top_srcdir)/$$f-u > $(top_builddir)/$$f; \
+	done
+
+tmac/stamp-wrap:
+	$(MKDIR_P) $(top_builddir)/tmac;
+	if test -n "$(tmac_wrap)"; then \
+	  for m in ""$(tmac_wrap); do \
+	    $(RM) $(top_builddir)/tmac/$$m-wrap; \
+	    if test "$$m" = an; then \
+	      echo .do mso andoc.tmac >>$(top_builddir)/tmac/$$m-wrap; \
+	    fi; \
+	    echo .cp 1 >>$(top_builddir)/tmac/$$m-wrap; \
+	    echo .so $(sys_tmac_prefix)$$m >>$(top_builddir)/tmac/$$m-wrap; \
+	  done; \
+	fi
+	touch $@
+
+tmac/www.tmac: tmac/www.tmac.in
+	$(MKDIR_P) $(top_builddir)/tmac
+	sed -e "s;[@]PNMTOPS_NOSETPAGE[@];$(pnmtops_nosetpage);g" \
+	  $(tmac_srcdir)/www.tmac.in > $(top_builddir)/tmac/www.tmac
+
+install-data-local: install_tmac_wrap
+install_tmac_wrap:
+	$(MKDIR_P) $(DESTDIR)$(systemtmacdir);
+	if test -n "$(tmac_wrap)"; then \
+	  for m in ""$(tmac_wrap); do \
+	    $(INSTALL_DATA) $(tmac_builddir)/$$m-wrap \
+              $(DESTDIR)$(systemtmacdir)/$$m.tmac; \
+	  done; \
+	fi
+
+install-data-hook: install_tmac_wrap_hook
+install_tmac_wrap_hook:
+	if test -n "$(tmac_wrap)"; then \
+	  if test -f $(DESTDIR)$(tmacdir)/s.tmac; then \
+	    mv $(DESTDIR)$(tmacdir)/s.tmac \
+	      $(DESTDIR)$(tmacdir)/$(tmac_s_prefix)s.tmac; \
+	  fi; \
+	  if test -f $(DESTDIR)$(tmacdir)/an.tmac; then \
+	    mv $(DESTDIR)$(tmacdir)/an.tmac \
+	      $(DESTDIR)$(tmacdir)/$(tmac_an_prefix)an.tmac; \
+	  fi; \
+	fi
+
+uninstall_groffdirs: uninstall_tmac_hook
+uninstall_tmac_hook:
+	if test -n "$(tmac_wrap)"; then \
+	  for m in ""$(tmac_wrap); do \
+	    $(RM) $(DESTDIR)$(systemtmacdir)/$$m.tmac; \
+	  done; \
+	  $(RM) -f $(DESTDIR)$(tmacdir)/$(tmac_an_prefix)an.tmac; \
+	  $(RM) -f $(DESTDIR)$(tmacdir)/$(tmac_s_prefix)s.tmac; \
+	fi
+	if test -d $(DESTDIR)$(mdocdir); then \
+	  rmdir $(DESTDIR)$(mdocdir); \
+	fi
+	if test -d $(DESTDIR)$(tmacdir); then \
+	  rmdir $(DESTDIR)$(tmacdir); \
+	fi
+	if test -d $(DESTDIR)$(localtmacdir); then \
+	  rmdir $(DESTDIR)$(localtmacdir); \
+	fi
diff -Nuar groff-1.22.3.old/tmac/www.tmac groff-1.22.3/tmac/www.tmac
--- groff-1.22.3.old/tmac/www.tmac	2014-11-04 10:38:35.540520059 +0200
+++ groff-1.22.3/tmac/www.tmac	1970-01-01 02:00:00.000000000 +0200
@@ -1,1625 +0,0 @@
-.ig
-www.tmac - macro package for adding HTML elements to roff documents.
-
-File position: <groff_source_top>/tmac/www.tmac
-Installed position: groff's main macro directory.
-
-------------------------------------------------------------------------
-    Legalese
-------------------------------------------------------------------------
-
-This file is part of groff, the GNU roff type-setting system.
-
-Copyright (C) 2001-2014  Free Software Foundation, Inc.
-written by Gaius Mulley <gaius@glam.ac.uk>, with additions by
-Werner Lemberg <wl@gnu.org> and
-Bernd Warken <groff-bernd.warken-72@web.de>.
-
-groff is free software; you can redistribute it and/or modify it under
-the terms of the GNU General Public License as published by the Free
-Software Foundation, either version 3 of the License, or
-(at your option) any later version.
-
-groff is distributed in the hope that it will be useful, but WITHOUT
-ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or
-FITNESS FOR A PARTICULAR PURPOSE.  See the GNU General Public License
-for more details.
-
-You should have received a copy of the GNU General Public License
-along with this program. If not, see <http://www.gnu.org/licenses/>.
-
-
-------------------------------------------------------------------------
-    Description
-------------------------------------------------------------------------
-
-A simple set of macros to provide HTML (or XHTML) documents with basic
-www functionality.  It should work with any macro set.  In the following,
-HTML always denotes XHTML also.
-..
-.
-.
-.\" --------------------------------------------------------------------
-.\" Setup
-.\" --------------------------------------------------------------------
-.
-.do if d www:lenstr .nx
-.
-.do mso devtag.tmac
-.
-.nr _C \n(.C
-.cp 0
-.
-.
-.ie r xhtml \
-.  ds www-> />\"
-.el \
-.  ds www-> >\"
-.
-.nr www-html 0
-.if '\*[.T]'html' \
-.  nr www-html 1
-.
-.\" set up www-image-template
-.
-.if !d www-image-template \
-.  ds www-image-template
-.
-.if r ps4html \{\
-.  \" remove the title command when we are generating images for HTML
-.  \" (stops a title accidentally appearing inside an image)
-.  di www-notitle
-.  tl ''''
-.  di
-.  rm tl
-.  de tl
-.  .
-.\}
-.
-.
-.\" --------------------------------------------------------------------
-.\" Test for `.substring'; result in register `www.substring_ok'.
-.\" The automated break points in .URL addresses are only added if
-.\" this register is non-zero.
-.\"
-.nr www:substring_ok 0
-.de www:@test_substring
-.  if !d substring \
-.    return
-.  ds \\$0:s abcdefg\"
-.  substring \\$0:s 1 1
-.  if !'\\*[\\$0:s]'b' \{\
-.    rm \\$0:s
-.    return
-.  \}
-.  ds \\$0:s abcdefg\"
-.  substring \\$0:s 0 0
-.  if !'\\*[\\$0:s]'a' \{\
-.    rm \\$0:s
-.    return
-.  \}
-.  ds \\$0:s abcdefg\"
-.  substring \\$0:s 1 -1
-.  if !'\\*[\\$0:s]'bcdefg' \{\
-.    rm \\$0:s
-.    return
-.  \}
-.  nr www:substring_ok 1
-.  rm \\$0:s
-..
-.www:@test_substring
-.rm www:@test_substring
-.
-.
-.\" --------------------------------------------------------------------
-.\" Local Macros
-.\" --------------------------------------------------------------------
-.
-.\" --------------------------------------------------------------------
-.\" www:paraspace
-.\"
-.\" Space before paragraph. Use \n[PD] if it exists.
-.\"
-.nr www:pd 0.5v
-.
-.de www:paraspace
-.  ie r PD \
-.    sp \\n[PD]u
-.  el \
-.    sp \\n[www:pd]u
-..
-.
-.\" --------------------------------------------------------------------
-.\" www:error (<test>...)
-.\"
-.\" Print error message.
-.\"
-.de www-error
-.  tm \\n[.F]:\\n[.c]: macro error: \\$*
-..
-.
-.als www:error www-error
-.
-.\" --------------------------------------------------------------------
-.\" www:lenstr (<register_name> <string_name>)
-.\"
-.\" Store length of string named <string_name> into register named
-.\" <register_name>.
-.\"
-.de www:lenstr
-.  if !(\\n[.$] == 2) \{\
-.    tm .\\$0 expects 2 arguments.
-.    ab
-.  \}
-.  length \\$0:n x\\*[\\$2]
-.  nr \\$1 (\\n[\\$0:n] - 1)
-.  rr \\$0:n
-..
-.
-.\" --------------------------------------------------------------------
-.\" www:splitstr (<name>)
-.\"
-.\" Add a space character between any two adjacent characters in string
-.\" <name> and restore result into the string variable <name>; space
-.\" characters are first replaced by the word `space'.
-.\"
-.de www:splitstr
-.  if !(\\n[.$] == 1) \
-.    www:error .\\$0 expects 1 argument.
-.  if '\\*[\\$1]'' \
-.    return
-.  ds \\$0:r "\\*[\\$1]\"
-.  ds \\$0:s
-.  while 1 \{\
-.    ds \\$0:c "\\*[\\$0:r]\"
-.    substring \\$0:c 0 0
-.    ie '\\*[\\$0:c]' ' \
-.      as \\$0:s " space\"
-.    el \
-.      as \\$0:s " \\*[\\$0:c]\"
-.    www:lenstr \\$0:n \\$0:r
-.    if (\\n[\\$0:n] <= 1) \
-.      break
-.    substring \\$0:r 1 -1
-.  \}
-.  if !'\\*[\\$0:s]'' \
-.    substring \\$0:s 1 -1 
-.  ds \\$1 \\*[\\$0:s]\"
-.  rm \\$0:c
-.  rr \\$0:n
-.  rm \\$0:r
-.  rm \\$0:s
-..
-.
-.\" --------------------------------------------------------------------
-.\" www:url_breaks (<string_name>)
-.\"
-.\" Add `\:' (possible break point) within URL strings after `/'.
-.\"
-.\" Smart about multiple `/', existing `\:', and space characters;
-.\" does not set a break point if less than 5 characters would go to
-.\" the next line.
-.\"
-.de www:url_breaks
-.  if !(\\n[.$] == 1) \
-.    www:error .\\$0 expects 1 argument.
-.  if !\n[www:substring_ok] \
-.    return
-.  ds \\$0:s "\\*[\\$1]\"
-.  www:splitstr \\$0:s
-.  www:url_breaks_split \\$0:s \\*[\\$0:s]
-.  ds \\$1 "\\*[\\$0:s]\"
-.  rm \\$0:s
-..
-.
-.\" --------------------------------------------------------------------
-.\" www:url_breaks_split (<result> <char> [<char>...])
-.\"
-.\" Add `\:' within URL strings, but arguments are a split string.
-.\"
-.\" Arguments: >=2: <result> <char> [<char>...]
-.\"
-.de www:url_breaks_split
-.  nr \\$0:min 5             \" minimal number of characters for next line
-.  if (\\n[.$] < 2) \
-.    www:error .\\$0 expects at least 2 arguments.
-.  ds \\$0:res \\$1\"
-.  shift
-.  ds \\$0:s
-.  nr \\$0:done 0
-.  while !\\n[\\$0:done] \{\
-.    if (\\n[.$] <= 0) \
-.      break
-.    if '\\$1'space' \{\
-.      as \\$0:s " \"
-.      shift
-.      continue
-.    \}
-.    if (\\n[.$] < \\n[\\$0:min]) \{\
-.      as \\$0:s "\\$1\"
-.      shift
-.      continue
-.    \}
-.    if !'\\$1'/' \{\
-.      as \\$0:s "\\$1\"
-.      shift
-.      continue
-.    \}
-.    \" we are at a `/' character
-.    while '\\$1'/' \{\
-.      as \\$0:s /\"
-.      if (\\n[.$] == 0) \{\
-.        nr \\$0:done 1
-.        break
-.      \}
-.      shift
-.    \}
-.    if \\n[\\$0:done] \
-.      break
-.    if (\\n[.$] < \\n[\\$0:min]) \
-.      continue
-.    if '\\$1'\:' \
-.      shift
-.    as \\$0:s \:\"
-.  \}
-.  ds \\*[\\$0:res] \\*[\\$0:s]\"
-.  rm \\$0:res
-.  rm \\$0:s
-..
-.
-.
-.\" --------------------------------------------------------------------
-.\" User Interface
-.\" --------------------------------------------------------------------
-.
-.\" --------------------------------------------------------------------
-.\" HTML
-.\"
-.\" The main auxiliary macro for the HTML interface.
-.\"
-.de HTML
-.  if \\n[www-html] \{\
-.    \" was implemented via .nop \&\X^html:\\$*^ but
-.    \" is now implemented using HTML-NS to utilize code factoring.
-.    \"
-.    \" the `\&' makes the vertical mode leave, so to say
-.    \"
-.    nop \&\c
-.    HTML-NS \\$*
-.    nop \&
-.  \}
-..
-.
-.\"
-.\" An auxiliary macro for HTML (without following space).
-.\"
-.de HTML-NS
-.  nop \X^html:\\$*^\c
-..
-.
-.\"
-.\" Emit an HTML tag after shutting down a (possibly open) paragraph.
-.\"
-.de HTML</p>
-.  ie \\n[www-html] \{\
-.    \" the `\&' makes the vertical mode leave, so to say
-.    nop \&\X^html</p>:\\$*^
-.  \}
-.  el \
-.    www:paraspace
-..
-.
-.\"
-.\" Emit an HTML tag.  If text has been written in the paragraph
-.\"                    then do not shut the paragraph down.
-.\"                    If text was not written, remove the empty
-.\"                    paragraph tag and emit the desired HTML tag.
-.\"
-.de HTML<?p>
-.  if \\n[www-html] \
-.    nop \&\X^html<?p>:\\$*^
-..
-.
-.\"
-.\" Emit a MATH tag.  If text has been written in the paragraph
-.\"                   then do not shut the paragraph down.
-.\"                   If text was not written, remove the empty
-.\"                   paragraph tag and emit the desired math tag.
-.\"
-.de MATH<?p>
-.  if \\n[www-html] \
-.    nop \&\X^math<?p>:\\$*^
-..
-.
-.\" --------------------------------------------------------------------
-.\" HX n
-.\"
-.\"   Automatic heading level cut off.
-.\"
-.\"   N is the depth limit of automatically linked headings.  So a depth
-.\"   of 2 would cause grohtml to generate a list of links for `.NH 1'
-.\"   and `.NH 2' but not for `.NH 3'.
-.\"
-.de HX
-.  if \\n[www-html] \
-.    nop \X^index:\\$*^
-..
-.
-.\" --------------------------------------------------------------------
-.\" BCL foreground background active not-visited visited
-.\"
-.de BCL
-.  HTML <body "text=""\\$1""" \
-              "bgcolor=""\\$2""" \
-              "link=""\\$3""" \
-              "alink=""\\$4""" \
-              "vlink=""\\$5"">"
-..
-.
-.\" --------------------------------------------------------------------
-.\" BGIMG imagefile
-.\"
-.de BGIMG
-.  HTML <body "background=""\\$1"">"
-..
-.
-.\" www:url_check_tag str
-.\"    If url named by \*[str] is internal (starts with #), 
-.\"    redefine \*[str] to be the value of the string TAG_url.
-.
-.de www:url_check_tag
-.  ds \\$0:tmp \\*[\\$1]\"
-.  substring \\$0:tmp 0 0
-.  if '\\*[\\$0:tmp]'#' \{\
-.    ds \\$0:tmp \\*[\\$1]\"
-.    substring \\$0:tmp 1
-.    ds \\$0:tmp TAG_\\*[\\$0:tmp]\"
-.
-.    ie d \\*[\\$0:tmp] \
-.      ds \\$1 \\*[\\*[\\$0:tmp]]\"
-.    el \
-.      ds \\$1 see below\"
-.  \} 
-.  rm \\$0:tmp
-..
-.
-.\" --------------------------------------------------------------------
-.\" URL url [description] [after]
-.\"
-.\"   If description is absent then the url becomes the anchor text.
-.\"
-.de URL
-.  if !'\\$1'' \{\
-.    ds \\$0:adr \\$1\"
-.    www:url_check_tag \\$0:adr
-.    if !\\n[www-html] \
-.      www:url_breaks \\$0:adr
-.  \}
-.  ie \\n[www-html] \{\
-.    ie '\\$3'' \
-.      ds \\$0:after \&\"
-.    el \
-.      ds \\$0:after \&\\$3\"
-.
-.    ie '\\$2'' \
-.       HTML-NS <a "href=""\\$1"">\\*[\\$0:adr]</a>"
-.    el \
-.       HTML-NS <a "href=""\\$1"">\\$2</a>"
-.
-.    nop \\*[\\$0:after]
-.    rm \\$0:after
-.  \}
-.  el \{\
-.    if !r ps4html \
-.      ad l
-.
-.    ie '\\$2'' \{\
-.      ie '\\$1'' \{\
-.        if !'\\$3'' \
-.          nop \\$3
-.      \}
-.      el \{\
-.        ie \\n[.color] \
-.          nop \%\\*[www:open]\m[\\*[www:color]]\f[\\*[www:fontstyle]]\\*[\\$0:adr]\f[]\m[]\\*[www:close]\\$3
-.        el \
-.          nop \%\\*[www:open]\f[\\*[www:fontstyle]]\\*[\\$0:adr]\f[]\\*[www:close]\\$3
-.      \}
-.    \}
-.    el \{\
-.      ie '\\$1'' \{\
-.        ie \\n[.color] \
-.          nop \m[\\*[www:color]]\\$2\m[]\\$3
-.        el \
-.          nop \f[\\*[www:fontstyle]]\\$2\f[]\\$3
-.      \}
-.      el \{\
-.        ie \\n[.color] \{\
-.          nop \m[\\*[www:color]]\\$2\m[]
-.          nop \%\\*[www:open]\f[\\*[www:fontstyle]]\\*[\\$0:adr]\f[]\\*[www:close]\\$3
-.        \}
-.        el \{\
-.          nop \f[\\*[www:fontstyle]]\\$2\f[]
-.          nop \%\\*[www:open]\f[\\*[www:fontstyle]]\\*[\\$0:adr]\f[]\\*[www:close]\\$3
-.        \}
-.      \}
-.    \}
-.
-.    if !r ps4html \
-.      ad
-.  \}
-.  rm \\$0:adr
-..
-.
-.\" --------------------------------------------------------------------
-.\" FTP url description [after]
-.\"
-.\"   Same as URL.
-.\"
-.als FTP URL
-.
-.\" --------------------------------------------------------------------
-.\" MTO address description [after]
-.\"
-.\"   ADDRESS is the email address (without the `mailto:' prefix).
-.\"
-.\"   DESCRIPTION is the optional name.  If an empty argument is given,
-.\"   ADDRESS is used instead.
-.\"
-.\"   AFTER is optional stuff printed immediately after ADDRESS
-.\"   (resp. DESCRIPTION).
-.\"
-.\"     Example:
-.\"
-.\"       Foobar has been written by
-.\"       .MTO fred@foo.bar "Fredrick Bloggs" .
-.\"
-.de MTO
-.  ie \\n[www-html] \{\
-.    ie '\\$2'' \
-.      URL mailto:\\$1 \\$1 "\\$3"
-.    el \
-.      URL mailto:\\$1 "\\$2" "\\$3"
-.  \}
-.  el \{\
-.    ie '\\$2'' \{\
-.      ie '\\$1'' \{\
-.        ie !'\\$3'' \
-.          nop \\$3
-.      \}
-.      el \{\
-.        ie \\n[.color] \
-.          nop \%\m[\\*[www:color]]\f[\\*[www:fontstyle]]\\$1\f[]\m[]\\$3
-.        el \
-.          nop \%\f[\\*[www:fontstyle]]\\$1\f[]\\$3
-.      \}
-.    \}
-.    el \{\
-.      ie '\\$1'' \{\
-.        ie \\n[.color] \
-.          nop \m[\\*[www:color]]\\$2\m[]\\$3
-.        el \
-.          nop \f[\\*[www:fontstyle]]\\$2\f[]\\$3
-.      \}
-.      el \{\
-.        ie \\n[.color] \{\
-.          nop \m[\\*[www:color]]\\$2\m[]
-.          nop \%\\*[www:open]\f[\\*[www:fontstyle]]\\$1\f[]\\*[www:close]\\$3
-.        \}
-.        el \{\
-.          nop \f[\\*[www:fontstyle]]\\$2\f[]
-.          nop \%\\*[www:open]\f[\\*[www:fontstyle]]\\$1\f[]\\*[www:close]\\$3
-.        \}
-.      \}
-.    \}
-.  \}
-..
-.
-.\" --------------------------------------------------------------------
-.\" TAG name [text]
-.\"
-.\"   Generate an HTML name NAME.
-.\"   Define string TAG_NAME to TEXT, if present, otherwise to \n[PN].
-.\"   Register PN is the current page number.
-.\"
-.de TAG
-.  HTML <a "name=""\\$1""></a>"
-.  ie '\\$2'' \
-.    if !rPN \
-.      nr PN \\n%
-.    ds TAG_\\$1 \\n[PN]\"
-.  el \
-.    ds TAG_\\$1 \\$2\"
-..
-.
-.\" --------------------------------------------------------------------
-.\" IMG [-R|-L|-C] filename [width] [height]
-.\"
-.\"   Include an image of any type (only works for -Thtml).
-.\"
-.\"   Alignment is centered by default (-C).
-.\"   Default value for WIDTH is 1i.
-.\"   If HEIGHT is not given, WIDTH is used as the height.
-.\"
-.de IMG
-.  ie \\n[www-html] \{\
-.    ie '\\$2'-R' \
-.      DEVTAG .right-image
-.    el \{\
-.      ie '\\$2'-L' \
-.        DEVTAG .left-image
-.      el \
-.        DEVTAG .centered-image
-.    \}
-.    nr www-width 100
-.    if !'\\$3'' \
-.      nr www-width \\$3
-.    nr www-height \\n[www-width]
-.    if !'\\$4'' \
-.      nr www-height \\$4
-.    HTML <img "src=""\\$1""" \
-               "alt=""Image \\$1""" \
-               "width=""\\n[www-width]""" \
-               "height=""\\n[www-height]""\\*[www->]"
-.  \}
-.  el \
-.    nop \\*[www:open]\f[\\*[www:fontstyle]]\\$1\f[]\\*[www:close]
-..
-.
-.\" --------------------------------------------------------------------
-.\" PIMG  [-R|-L|-C] filename [width] [height]
-.\"
-.\"   Include a PNG image.  It works for -Tps and -Thtml.
-.\"   The default value for WIDTH and HEIGHT is zero; the default
-.\"   alignment is centering (-C).
-.\"
-.\" Note: This macro can only be used with the `-U' option of groff,
-.\"       activating unsafe mode, if not used with -Thtml; the PNG image
-.\"       is then converted to the EPS format using netpbm utilities.
-.\"
-.de PIMG
-.  ds www-pic-align -C\"
-.  ie '\\$1'-R' \{\
-.    ds www-pic-align -R\"
-.    shift
-.  \}
-.  el \{\
-.    if '\\$1'-L' \{\
-.      ds www-pic-align -L\"
-.      shift
-.    \}
-.  \}
-.  if '\\$1'-C' \
-.    shift
-.
-.  ie \\n[www-html] \{\
-.    ds www-htmlalign align="center"\"
-.    if '\\*[www-pic-align]'-R' \
-.      ds www-htmlalign align="right"\"
-.    if '\\*[www-pic-align]'-L' \
-.      ds www-htmlalign align="left"\"
-.
-.    nr www-width 0
-.    nr www-height 0
-.    if !'\\$2'' \
-.      nr www-width (\\$3 * 100 / 240)
-.    if !'\\$3'' \
-.      nr www-height (\\$4 * 100 / 240)
-.    ie (\\n[www-width] == 0) \{\
-.      ie (\\n[www-height] == 0) \
-.        HTML</p> <p \\*[www-htmlalign]><img "src=""\\$1""" \
-                                             "alt=""Image \\$1""\\*[www->]</p>"
-.      el \
-.        HTML</p> <p \\*[www-htmlalign]><img "src=""\\$1""" \
-                                             "alt=""Image \\$1""" \
-                                             "height=""\\n[www-height]""\\*[www->]</p>"
-.    \}
-.    el \{\
-.      ie (\\n[www-height] == 0) \
-.        HTML</p> <p \\*[www-htmlalign]><img "src=""\\$1""" \
-                                             "alt=""Image \\$1""" \
-                                             "width=""\\n[www-width]""\\*[www->]</p>"
-.      el \
-.        HTML</p> <p \\*[www-htmlalign]><img "src=""\\$1""" \
-                                             "alt=""Image \\$1""" \
-                                             "width=""\\n[www-width]""" \
-                                             "height=""\\n[www-height]""\\*[www->]</p>"
-.    \}
-.  \}
-.  el \{\
-.    if !r ps4html \{\
-.      www-make-unique-name
-.      sy pngtopnm \\$1 \
-          | pnmcrop -white \
-          | @PNMTOPS_NOSETPAGE@ -noturn \
-          > \\*[www-unique-name].eps
-.      shift
-.      PSPIC \\*[www-pic-align] \\*[www-unique-name].eps \\$*
-.    \}
-.  \}
-..
-.
-.\" --------------------------------------------------------------------
-.\" auxiliary definitions for MPIMG
-.\"
-.nr www-left-ll-trap 0
-.nr www-left-po-trap 0
-.nr www-right-ll-trap 0
-.
-.de www-finish-left-po
-.  po -(\\n[www-left-indent]u + \\n[www-image-gap]u)
-.  wh \\n[www-left-po-trap]u
-.  nr www-left-indent 0
-..
-.
-.\" called when the -R picture is finished
-.de www-finish-right-ll
-.  ll +(\\n[www-right-indent]u + \\n[www-image-gap]u)
-.
-.  \" now check whether we need to inline www-finish-left-ll
-.  if (\\n[www-left-ll-trap]u > 0) \
-.    if ((\\n[www-right-ll-trap]u + 1v) >= \\n[www-left-ll-trap]u) \{\
-.      mk www-left-po-trap
-.      nr www-left-po-trap +1v
-.      wh \\n[www-left-po-trap]u www-finish-left-po
-.      ll +\\n[www-left-indent]u
-.      wh \\n[www-left-ll-trap]u
-.      nr www-left-ll-trap 0
-.    \}
-.
-.  \" and check whether we need to inline www-finish-left-po
-.  if (\\n[www-left-po-trap]u > 0) \
-.    if ((\\n[www-right-ll-trap]u + 1v) >= \\n[www-left-po-trap]u) \{\
-.      po -\\n[www-left-indent]u
-.      wh \\n[www-left-po-trap]u
-.      nr www-left-indent 0
-.    \}
-.
-.  wh \\n[www-right-ll-trap]u
-.  nr www-right-ll-trap 0
-..
-.
-.de www-finish-left-ll
-.  if (\\n[www-right-ll-trap] > 0) \
-.    if ((\\n[www-left-ll-trap] + 1v) >= \\n[www-right-ll-trap]) \{\
-.      ll +\\n[www-right-indent]u
-.      nr www-right-ll-trap 0
-.    \}
-.
-.  mk www-left-po-trap
-.  nr www-left-po-trap +1v
-.  wh \\n[www-left-po-trap]u www-finish-left-po
-.  ll +(\\n[www-left-indent]u + \\n[www-image-gap]u)
-.  wh \\n[www-left-ll-trap]u
-.  nr www-left-ll-trap 0
-..
-.
-.\" www-handle-percent arg N1 N2 S1
-.\"                    arg - input string (number or number%)
-.\"                    output parameters:
-.\"                    N1 - name of number register 1=absolute 0=percentage
-.\"                    N2 - number register name for absolute value
-.\"                    S1 - string register name for percentage value
-.\"
-.de www-handle-percent 
-.  ds www-percent \\$1\"
-.  substring www-percent -1 -1
-.
-.  ie '\\*[www-percent]'%' \{\
-.    ds www-abs \\$1\"
-.    substring www-abs 0 -2
-.    nr \\$2 0
-.    nr \\$3 \\*[www-abs]
-.    ds \\$4 \\$1\"
-.  \}
-.  el \{\
-.    nr \\$2 1
-.    nr \\$3 \\$1
-.    ds \\$4 none\"
-.  \}
-..
-.
-.\" --------------------------------------------------------------------
-.\" MPIMG [-R|-L] [-G gap] filename [width [height]]
-.\"
-.\"   Include a PNG image and wrap text around it.  It works for
-.\"   -Tps and -Thtml.  The default value for WIDTH is 1i; default value
-.\"   for HEIGHT is WIDTH; the default alignment is left (-L).
-.\"   -G is used to insert a gap between the text and the image.
-.\"   The height and width can also be given as a percentage.
-.\"   The PostScript device converts the percentage width into an
-.\"   absolute value by using \\n[.l], and the height by using \\n[.p].
-.\"   
-.\"
-.\" Note: This macro can only be used with the `-U' option of groff,
-.\"       activating unsafe mode, if not used with -Thtml; the PNG image
-.\"       is then converted to the EPS format using netpbm utilities.
-.\"
-.nr www-htmlimage-gap 0
-.
-.de MPIMG
-.  nr www-image-just 1
-.  nr www-image-gap 0
-.  while (\\n[.$] > 0) \{\
-.    if '-L'\\$1' \{\
-.      nr www-image-just 1
-.      shift
-.      continue
-.    \}
-.    if '-R'\\$1' \{\
-.      nr www-image-just 0
-.      shift
-.      continue
-.    \}
-.    if '-G'\\$1' \{\
-.      nr www-image-gap \\$2
-.      nr www-htmlimage-gap (\\$2 * 100 / 240)
-.      shift 2
-.      continue
-.    \}
-.    break
-.  \}
-.
-.  nr www-width 1i
-.  nr www-height 1i
-.  ds www-size-specs width="\\n[www-width]" height="\\n[www-height]"\"
-.  ie !'\\$2'' \{\
-.    nr www-is-absolute 0
-.    nr www-absolute 0
-.    ds www-percentage none\"
-.    www-handle-percent \\$2 www-is-absolute www-absolute www-percentage
-.    ie !\\n[www-is-absolute] \{\
-.      \" percentage of linelength requested
-.      nr www-width (\\n[www-absolute] * \\n[.l] / 100)
-.      if \\n[www-html] \
-.        nr www-width (\\n[www-width] * 100 / 240)
-.      ds www-size-specs width="\\*[www-percentage]"\"
-.    \}
-.    el \{\
-.      nr www-width \\n[www-absolute]
-.      if \\n[www-html] \
-.        nr www-width (\\n[www-width] * 100 / 240)
-.      ds www-size-specs width="\\n[www-width]"\"
-.    \}
-.
-.    nr www-height \\n[www-width]
-.    ie !'\\$3'' \{\
-.      nr www-is-absolute 0
-.      nr www-absolute 0
-.      ds www-percentage none\"
-.      www-handle-percent \\$3 www-is-absolute www-absolute www-percentage
-.      ie !\\n[www-is-absolute] \{\
-.        \" percentage of pagelength requested
-.        nr www-height (\\n[www-absolute] * \\n[.p] / 100)
-.        if \\n[www-html] \
-.           nr www-height (\\n[www-height] * 100 / 240)
-.        ds www-size-specs "\\*[www-size-specs] height="\\*[www-percentage]"\"
-.      \}
-.      el \{\
-.        nr www-height \\n[www-absolute]
-.        if \\n[www-html] \
-.           nr www-height (\\n[www-height] * 100 / 240)
-.        ds www-size-specs "\\*[www-size-specs] height="\\*[www-height]"\"
-.      \}
-.    \}
-.  \}
-.  el \{\
-.    \" height not specified; use width value
-.    ie !\\n[www-is-absolute] \{\
-.       \" percentage value
-.       ds www-size-specs "\\*[www-size-specs] height="\\*[www-percentage]"\"
-.       nr www-height \\n[www-width]
-.    \}
-.    el \{\
-.       ds www-size-specs "\\*[www-size-specs] height="\\*[www-width]"\"
-.       nr www-height \\n[www-width]
-.    \}
-.  \}
-.
-.  ie \\n[www-html] \{\
-.    ie !\\n[www-image-just] \
-.      HTML <img "src=""\\$1""" \
-                 "alt=""Image \\$1""" \
-                 "hspace=""\\n[www-htmlimage-gap]""" \
-                 "align=""right""" \
-                 "\\*[www-size-specs]\\*[www->]"
-.    el \
-.      HTML <img "src=""\\$1""" \
-                 "alt=""Image \\$1""" \
-                 "hspace=""\\n[www-htmlimage-gap]""" \
-                 "align=""left""" \
-                 "\\*[www-size-specs]\\*[www->]"
-.  \}
-.  el \{\
-.    tm www-width is \\n[www-width]
-.    tm www-height is \\n[www-height]
-.    if !r ps4html \{\
-.      www-make-unique-name
-.      sy pngtopnm \\$1 \
-          | pnmcrop -white \
-          | @PNMTOPS_NOSETPAGE@ -noturn \
-          > \\*[www-unique-name].eps
-.      ie !\\n[www-image-just] \{\
-.        \" we must now disable a possible left image trap
-.        sp -1
-.        if (\\n[www-left-ll-trap] > 0) \
-.          wh \\n[www-left-ll-trap]u
-.        if (\\n[www-left-po-trap] > 0) \
-.          wh \\n[www-left-po-trap]u
-.        PSPIC -R \\*[www-unique-name].eps \\n[www-width]u \\n[www-height]u
-.        sp -\\n[ps-desht]u
-.
-.        nr www-right-indent \\n[ps-deswid]u
-.        \" we want to have some space between text and image,
-.        \" so the line length must be shorter
-.        ll -(\\n[www-right-indent]u + \\n[www-image-gap]u)
-.        mk www-right-ll-trap
-.        nr www-right-ll-trap +(\\n[ps-desht]u - 1v)
-.        wh \\n[www-right-ll-trap]u www-finish-right-ll
-.
-.        \" now restore possible left trap
-.        if (\\n[www-left-ll-trap] > 0) \
-.          wh \\n[www-left-ll-trap]u www-finish-left-ll
-.        if (\\n[www-left-po-trap] > 0) \
-.          wh \\n[www-left-po-trap]u
-.      \}
-.      el \{\
-.        \" we must now disable a possible right image trap
-.        if (\\n[www-right-ll-trap] > 0) \
-.          wh \\n[www-right-ll-trap]u
-.        PSPIC -L \\*[www-unique-name].eps \\n[www-width]u \\n[www-height]u
-.        sp -\\n[ps-desht]u
-.
-.        nr www-left-indent \\n[ps-deswid]u
-.        \" increase offset by gap
-.        po +(\\n[www-left-indent]u + \\n[www-image-gap]u)
-.        \" decrease line length by gap
-.        ll -(\\n[www-left-indent]u + \\n[www-image-gap]u)
-.        mk www-left-ll-trap
-.        nr www-left-ll-trap +(\\n[ps-desht]u - 1v)
-.        wh \\n[www-left-ll-trap]u www-finish-left-ll
-.
-.        \" now restore possible right trap
-.        if (\\n[www-right-ll-trap] > 0) \
-.          wh \\n[www-right-ll-trap]u www-finish-right-ll
-.      \}
-.    \}
-.  \}
-..
-.
-.\" --------------------------------------------------------------------
-.\" HnS n
-.\"
-.\"   Begin heading.  Heading level is N.
-.\"
-.\" HnE
-.\"
-.\"   End heading.
-.\"
-.\" If your heading contains URL, FTP, MTO macros you might wish to
-.\" disable automatic links to headings.  This can be done via `-P-l'
-.\" from the command line or by using a cakk to `.HX 0'.
-.\"
-.nr www-heading-no -1
-.
-.de HnS
-.  ie '\\$1'' \
-.    nr www-heading-no 1
-.  el \
-.    nr www-heading-no \\$1
-.  DEVTAG-NH \\n[www-heading-no]
-..
-.
-.de HnE
-.  if (\\n[www-heading-no] == -1) \
-.    www-error HnE found without a corresponding HnS
-.  DEVTAG-EO-H
-..
-.
-.\" --------------------------------------------------------------------
-.\" LK
-.\"
-.\"   Emit the automatically collected links derived from
-.\"   section/numbered headings at this position.
-.\"
-.de LK
-.  DEVTAG .links
-..
-.
-.\" --------------------------------------------------------------------
-.\" HR
-.\"
-.\"   Produce a horizontal line.
-.\"
-.de HR
-.  HTML</p> <hr\\*[www->]
-..
-.
-.\" --------------------------------------------------------------------
-.\" NHR
-.\"
-.\"  Suppress the generation of the top and bottom rules which grohtml
-.\"  emits by default.
-.\"
-.de NHR
-.  DEVTAG .no-auto-rule
-..
-.
-.\"
-.\" www-end-nowhere - end of input trap called to finish diversion.
-.\"
-.de www-end-nowhere
-.  if !\\n[www-html] \
-.    di
-.  DEVTAG-EO-TL
-..
-.
-.\" --------------------------------------------------------------------
-.\" HTL
-.\"
-.\"   Generate an HTML title only.  This differs from the -ms .TL macro
-.\"   which generates both an HTML title and an H1 heading.
-.\"
-.\"   This is useful when an author wishes to use an HTML title as search
-.\"   engine fodder but a graphic title in the document.
-.\"
-.\"   The macro terminates when a space or break is seen (.sp, .br).
-.\"
-.de HTL
-.  DEVTAG .html-tl
-.  if !\\n[www-html] \
-.    di www-nowhere
-.  it 2 www-end-nowhere
-..
-.
-.\" --------------------------------------------------------------------
-.\" auxiliary definitions for lists
-.\"
-.ds www-ul-level1 \[bu]\ \ \"
-.ds www-ul-level2 \[sq]\ \ \"
-.ds www-ul-level3 \[ci]\ \ \"
-.nr www-ul-level 0
-.
-.ds www-ol-level1 decimal\"
-.ds www-ol-level2 lower-alpha\"
-.ds www-ol-level3 lower-roman\"
-.ds www-ol-tmp 00\ \ \"
-.nr www-ol-ctr1 0 1
-.nr www-ol-ctr2 0 1
-.nr www-ol-ctr3 0 1
-.af www-ol-ctr2 a
-.af www-ol-ctr3 i
-.nr www-ol-level 0
-.
-.nr www-dl-level 0
-.nr www-dl-shift 5n
-.
-.\"
-.\" allow nested lists
-.\"
-.nr www-depth 0
-.nr www-li-indent \n[.i]
-.ds www-level0 nop\"
-.ds www-level1
-.ds www-level2
-.ds www-level3
-.ds www-level4
-.ds www-level5
-.ds www-level6
-.ds www-level7
-.ds www-level8
-.ds www-level9
-.
-.\" which macro to use for LI
-.de www-push-li
-.  nr www-li-indent \\n[.i]
-.  nr www-depth +1
-.  ds www-level\\n[www-depth] \\$1\"
-.  ds www-ltag\\n[www-depth]
-.  als LI \\$1
-..
-.
-.de www-pop-li
-.  nr www-depth -1
-.  als LI \\*[www-level\\n[www-depth]]
-..
-.
-.\" www-emit-ltag - shut down a previous open list tag
-.\"                 before issuing a new tag \\$1.
-.\"                 It then records tag \\$1 is open.
-.
-.de www-emit-ltag
-.  if !'\\*[www-ltag\\n[www-depth]]'' \
-.    HTML-NS </\\*[www-ltag\\n[www-depth]]>
-.  if !'\\$1'' \
-.    HTML-NS <\\$1>
-.  ds www-ltag\\n[www-depth] \\$1\"
-..
-.
-.\"
-.\" Auxiliary macro for ULS.
-.\"
-.de www-push-ul-level
-.  nr www-ul-level +1
-.  if (\\n[www-ul-level] > 3) \
-.    www-error ULS: too many levels of indentation (\\n[www-ul-level])
-..
-.\"
-.\" Auxiliary macro for ULE.
-.\"
-.de www-pop-ul-level
-.  if !\\n[www-ul-level] \
-.    www-error ULE: trying to terminate a list which does not exist
-.  nr www-ul-level -1
-..
-.
-.\"
-.\" Auxiliary macro for OLS.
-.\"
-.de www-push-ol-level
-.  nr www-ol-level +1
-.  if (\\n[www-ol-level] > 3) \
-.    www-error OLS: too many levels of indentation (\\n[www-ol-level])
-..
-.
-.\"
-.\" Auxiliary macro for OLE.
-.\"
-.de www-pop-ol-level
-.  if !\\n[www-ol-level] \
-.    www-error OLE: trying to terminate a list which does not exist
-.  nr www-ol-level -1
-..
-.
-.\" --------------------------------------------------------------------
-.\" ULS
-.\"
-.\"   Start an unordered list.
-.\"
-.de ULS
-.  www-push-li www-li-ul
-.  www-push-ul-level
-.  ie \\n[www-html] \{\
-.    www-emit-ltag
-.    HTML</p> <ul>
-.  \}
-.  el \
-.    nr www-li-indent +\w'\\*[www-ul-level\\n[www-ul-level]]'u
-..
-.
-.\" --------------------------------------------------------------------
-.\" ULE
-.\"
-.\"   End an unordered list.
-.\"
-.de ULE
-.  ie \\n[www-html] \{\
-.    www-emit-ltag
-.    HTML</p> </ul>
-.  \}
-.  el \{\
-.    nr www-li-indent -\w'\\*[www-ul-level\\n[www-ul-level]]'u
-.    in \\n[www-li-indent]u
-.  \}
-.  www-pop-ul-level
-.  www-pop-li
-..
-.
-.\" --------------------------------------------------------------------
-.\" OLS
-.\"
-.\"   Start an ordered list.
-.\"
-.de OLS
-.  www-push-li www-li-ol
-.  www-push-ol-level
-.  ie \\n[www-html] \{\
-.    www-emit-ltag
-.    HTML</p> <ol "style=""list-style-type:" \
-                           "\\*[www-ol-level\\n[www-ol-level]]"">"
-.  \}
-.  el \
-.    nr www-li-indent +\w'\\*[www-ol-tmp]'u
-..
-.
-.\" --------------------------------------------------------------------
-.\" OLE
-.\"
-.\"   End an ordered list.
-.\"
-.de OLE
-.  ie \\n[www-html] \{\
-.    www-emit-ltag
-.    HTML </ol>
-.  \}
-.  el \{\
-.    nr www-li-indent -\w'\\*[www-ol-tmp]'u
-.    in \\n[www-li-indent]u
-.    nr www-ol-ctr\\n[www-ol-level] 0 1
-.  \}
-.  www-pop-ol-level
-.  www-pop-li
-..
-.
-.\" --------------------------------------------------------------------
-.\" DLS
-.\"
-.\"   Start a definition list.
-.\"
-.de DLS
-.  www-push-li www-li-dl
-.  nr www-dl-level +1
-.  ie \\n[www-html] \{\
-.    www-emit-ltag
-.    HTML</p> <dl>
-.  \}
-.  el \{\
-.    nr www-li-indent +\\n[www-dl-shift]u
-.    in \\n[www-li-indent]u
-.  \}
-..
-.
-.\" --------------------------------------------------------------------
-.\" DLE
-.\"
-.\"   End a definition list.
-.\"
-.de DLE
-.  ie \\n[www-html] \{\
-.    www-emit-ltag
-.    HTML </dl>
-.  \}
-.  el \{\
-.    nr www-li-indent -\\n[www-dl-shift]u
-.    in \\n[www-li-indent]u
-.  \}
-.  nr www-dl-level -1
-.  www-pop-li
-..
-.
-.\" --------------------------------------------------------------------
-.\" LI
-.\"
-.\"   Insert a list item.
-.\"
-.
-.\" ********
-.\" www-li-ul - bulleted list item
-.\"
-.de www-li-ul
-.  ie \\n[www-html] \
-.    www-emit-ltag li
-.  el \{\
-.    www:paraspace
-.    if rPORPHANS \
-.      ne \\n[PORPHANS]v
-.    in \\n[www-li-indent]u
-.    ti -\w'\\*[www-ul-level\\n[www-ul-level]]'u
-.    nop \\*[www-ul-level\\n[www-ul-level]]\c
-.  \}
-..
-.
-.\" ********
-.\" www-li-ol - numbered list item
-.\"
-.de www-li-ol
-.  ie \\n[www-html] \
-.    www-emit-ltag li
-.  el \{\
-.    www:paraspace
-.    if rPORPHANS \
-.      ne \\n[PORPHANS]v
-.    in \\n[www-li-indent]u
-.    ti -\w'\\n+[www-ol-ctr\\n[www-ol-level]]\ \ 'u
-.    nop \\n[www-ol-ctr\\n[www-ol-level]]\ \ \c
-.  \}
-..
-.
-.\" ********
-.\" www-li-dl - definition list item
-.\"
-.de www-li-dl
-.  ie \\n[www-html] \{\
-.    HTML <dt>\\$1</dt>
-.    www-emit-ltag dd
-.  \}
-.  el \{\
-.    www:paraspace
-.    if rPORPHANS \
-.      ne \\n[PORPHANS]v
-.    in \\n[www-li-indent]u
-.    ti -\\n[www-dl-shift]u
-.    nop \&\\$1
-.    br
-.  \}
-..
-.
-.\" --------------------------------------------------------------------
-.\" DC l text [color]
-.\"
-.\"   L is the letter to be dropped and enlarged.
-.\"
-.\"   TEXT is the following text whose height the first letter should not
-.\"   exceed.
-.\"
-.\"   COLOR is the optional color of the dropped letter (default black).
-.\"
-.de DC
-.  ds www-dropcolor black\"
-.  if !'\\$3'' \
-.    ds www-dropcolor \\$3\"
-.  ie '\*[.T]'html' \{\
-.    www-make-unique-name
-.    nr www-drop-width (100u * \\n[.v]u * 3u / \\n[.l]u)
-.    MPIMG -L \\*[www-unique-name].png \\n[www-drop-width]%
-.  \}
-.  el \{\
-.    ie r ps4html \{\
-.      www-make-unique-name
-.      \" To avoid interferences with another DC macro call which is located
-.      \" very near to the current one, we draw the glyph on a separate page.
-.      \" Otherwise it could theoretically happen that the dropped capital
-.      \" glyphs overlap.
-.      bp
-.      ev www-DC
-.      vs 320p
-.      nop \O[5i\\*[www-unique-name].png]\O[1]
-.      nop \m[\\*[www-dropcolor]]\s[160]\O[3]\\$1\O[4]
-.      nop \O[2]\O[0]
-.      br
-.      ev
-.      bp
-.    \}
-.    el \{\
-.      ie n \
-.        nop \\$1\c
-.      el \{\
-.        nr dummy \w'\\$1'u
-.        nr dcht ((\\n[.v] + \\n[rst]) * \\n[.ps] / \\n[rst])
-.        char \[dcap] \m[\\*[www-dropcolor]]\s'\\n[dcht]u'\\$1
-.        nop \v'\\n[.v]u'\\[dcap]\v'-\\n[.v]u'\c
-'        ti \w'\\[dcap]'u
-.      \}
-.    \}
-.  \}
-.  nop \\$2
-..
-.
-.\"
-.\" supplementary macros used by other macro sets
-.\"
-.\" here are some tags specially for -Tps or -Thtml when invoked by
-.\" pre-html to generate PNG images from postscript.
-.
-.\" --------------------------------------------------------------------
-.\" HTML-DO-IMAGE - tell troff to issue an image marker which can be
-.\"                 read back by pre-html
-.\"
-.de HTML-DO-IMAGE
-.  if r ps4html \
-.    nop \O[5\\$2\\$1.png]\O[1]\O[3]
-.  if \\n[www-html] \
-.    nop \O[5\\$2\\$1.png]\O[0]\O[3]
-..
-.
-.\" --------------------------------------------------------------------
-.\" HTML-IMAGE-END - terminate an image for HTML
-.\"
-.de HTML-IMAGE-END
-.  if r ps4html \
-.    nop \O[4]\O[2]\O[0]
-.  if \\n[www-html] \
-.    nop \O[4]\O[2]\O[1]
-..
-.
-.nr www-png-no 0
-.
-.\" --------------------------------------------------------------------
-.\" www-make-unique-name - generate another unique name in string
-.\"                        `www-unique-name'
-.\"
-.de www-make-unique-name
-.  nr www-png-no +1
-.  ds www-unique-name \\*[www-image-template]\\n[www-png-no]\"
-..
-.
-.\" --------------------------------------------------------------------
-.\" HTML-IMAGE and friends tell grohtml that this region of text needs
-.\"            to be rendered as an image.
-.\"
-.de HTML-IMAGE
-.  \" generates a centered image
-.  www-make-unique-name
-.  HTML-DO-IMAGE \\*[www-unique-name] c
-..
-.
-.de HTML-IMAGE-RIGHT
-.  www-make-unique-name
-.  HTML-DO-IMAGE \\*[www-unique-name] r
-..
-.
-.de HTML-IMAGE-LEFT
-.  www-make-unique-name
-.  HTML-DO-IMAGE \\*[www-unique-name] l
-..
-.
-.de HTML-IMAGE-INLINE
-.  www-make-unique-name
-.  HTML-DO-IMAGE \\*[www-unique-name] i
-..
-.
-.\"  EQN-HTML-IMAGE and friends check to see whether the equation is
-.\"                 not in an image, in which case it allows HTML
-.\"                 (mathml) to be generated (if -Txhtml was specified).
-.
-.de EQN-HTML-IMAGE
-.  \" generates a centered image
-.  www-make-unique-name
-.  EQN-HTML-DO-IMAGE \\*[www-unique-name] c
-..
-.
-.de EQN-HTML-IMAGE-RIGHT
-.  www-make-unique-name
-.  EQN-HTML-DO-IMAGE \\*[www-unique-name] r
-..
-.
-.de EQN-HTML-IMAGE-LEFT
-.  www-make-unique-name
-.  EQN-HTML-DO-IMAGE \\*[www-unique-name] l
-..
-.
-.de EQN-HTML-IMAGE-INLINE
-.  www-make-unique-name
-.  EQN-HTML-DO-IMAGE \\*[www-unique-name] i
-..
-.
-.\" --------------------------------------------------------------------
-.\" EQN-HTML-DO-IMAGE - tell troff to issue an image marker which can be
-.\"                     read back by pre-html
-.\"
-.de EQN-HTML-DO-IMAGE
-.  ie r xhtml \{\
-.    if !(\\n[.O] == 0) \{\
-.      if r ps4html \
-.        nop \O[5\\$2\\$1.png]\O[1]\O[3]
-.      if \\n[www-html] \
-.        nop \O[5\\$2\\$1.png]\O[0]\O[3]
-.    \}
-.  \}
-.  el \
-.    HTML-DO-IMAGE \\$*
-..
-.
-.\" --------------------------------------------------------------------
-.\" EQN-HTML-IMAGE-END - terminate an image for HTML
-.\"
-.de EQN-HTML-IMAGE-END
-.  ie r xhtml \{\
-.    if !(\\n[.O] == 0) \{\
-.      if r ps4html \
-.        nop \O[4]\O[2]\O[0]
-.      if \\n[www-html] \
-.        nop \O[4]\O[2]\O[1]
-.    \}
-.  \}
-.  el \
-.    HTML-IMAGE-END
-..
-.
-.\" --------------------------------------------------------------------
-.\" Setup around HTML-IMAGE and friends
-.\"
-.\" now set up TS, TE, EQ, EN default macros
-.\"
-.\" we must not use `.als': the definition of .TE in s.tmac, for example,
-.\" calls .HTML-IMAGE-END, which would refer to itself due to the alias,
-.\" causing an endless loop
-.\"
-.if !d TS \{\
-.  de TS
-.    HTML-IMAGE \\$@
-.    if \\n[www-html] \{\
-.      nr www-TS-ll \\n[.l]
-.      ll 1000n
-.    \}
-.  .
-.\}
-.if !d TE \{\
-.  de TE
-.    if \\n[www-html] \
-.      ll \\n[www-TS-ll]u
-.    HTML-IMAGE-END \\$@
-.  .
-.\}
-.if !d EQ \{\
-.  de EQ
-.    EQN-HTML-IMAGE \\$@
-.    if \\n[www-html] \{\
-.      nr www-EQ-ll \\n[.l]
-.      ll 1000n
-.    \}
-.  .
-.\}
-.if !d EN \{\
-.  de EN
-.    if \\n[www-html] \
-.      ll \\n[www-EQ-ll]u
-.    EQN-HTML-IMAGE-END \\$@
-.  .
-.\}
-.
-.\" --------------------------------------------------------------------
-.\" JOBNAME
-.\"
-.\"   Generate multiple output files containing the HTML.
-.\"   A file is split whenever a .SH or .NH 1 is encountered.
-.\"   The argument to JOBNAME is the file stem for future output files.
-.\"
-.de JOBNAME
-.  DEVTAG .job-name \\$1
-..
-.
-.\" --------------------------------------------------------------------
-.\" HEAD
-.\"
-.\"   Add information to the <head> </head> section of the HTML
-.\"   document
-.\"
-.de HEAD
-.  DEVTAG .head "\\$*"
-..
-.
-.\" --------------------------------------------------------------------
-.\" start of some code
-.\"
-.de CDS
-.  ft C
-.  nf
-..
-.
-.\" --------------------------------------------------------------------
-.\" end of some code
-.\"
-.de CDE
-.  fi
-.  ft P
-..
-.
-.ds www-nav-colour #eeeeee\"
-.nr www-nav-width-left 30
-.nr www-nav-width-right 70
-.
-.\" --------------------------------------------------------------------
-.\" LNS - left navigation start
-.\"
-.de LNS
-.  HTML</p> <table><tr><td "valign=""top""" \
-                           "width=""\\n[www-nav-width-left]%""" \
-                           "bgcolor=""\\*[www-nav-colour]"">"
-.  LK
-.  HTML</p> </td><td "valign=""top""" \
-                     "width=""\\n[www-nav-width-right]%"">"
-.  nr SH-open 1
-..
-.
-.\" --------------------------------------------------------------------
-.\" LNE - left navigation end
-.\"
-.de LNE
-.  HTML</p> </td></tr></table>
-.  HR
-..
-.
-.nr SH-open 0
-.nr needs-begin 0
-.
-.\"
-.\" some auxiliary macros for left navigation lists
-.\"
-.de www-SH
-.  if (0\\$1 == 0) \{\
-.    if (\\n[SH-open] == 1) \
-.      LNE
-.    nr needs-begin 1
-.    @SH-old
-.  \}
-..
-.
-.de www-NH
-.  if (0\\$1 <= 1) \{\
-.    if (\\n[SH-open] == 1) \
-.      LNE
-.    nr needs-begin 1
-.    @NH-old
-.  \}
-..
-.
-.de www-LP
-.  @LP-old
-.  if (\\n[needs-begin] == 1) \{\
-.    HR
-.    LNS
-.  \}
-.  nr needs-begin 0
-..
-.
-.\" --------------------------------------------------------------------
-.\" ALN [colour] [left width percentage]
-.\"
-.\"   Turn on automatic left navigation.  This macro should only be
-.\"   called once (normally at the start of the document) as it
-.\"   indicates that all top-level section headings form a navigation
-.\"   list on the left of the main text.
-.\"
-.de ALN
-.  if '\*[.T]'html' \{\
-.    if !'\\$1'' \
-.      ds www-nav-colour \\$1\"
-.    if (0\\$2 > 0) \{\
-.      nr www-nav-width-left \\$2
-.      nr www-nav-width-right (100 - \\$2)
-.    \}
-.    rn @SH @SH-old
-.    rn www-SH @SH
-.    rn @NH @NH-old
-.    rn www-NH @NH
-.    rn @LP @LP-old
-.    rn www-LP @LP
-.  \}
-..
-.
-.\" --------------------------------------------------------------------
-.\" LINKSTYLE color [fontstyle [openglyph closeglyph]]
-.\"
-.\"   Initialize www.tmac so that when this macro set is used with
-.\"   non-HTML devices the urls are rendered the user defined attributes.
-.\"   For example:
-.\"
-.\"   LINKSTYLE blue CR < >
-.\"
-.de LINKSTYLE
-.  if (\\n[.$] < 1) \
-.    www:error .\\$0 expects at least 1 argument.
-.  ds www:color \\$1\"
-.  shift
-.  if (\\n[.$] < 1) \
-.    return
-.  ds www:fontstyle \\$1\"
-.  shift
-.  if (\\n[.$] < 1) \
-.    www:error .\\$0 expects that both the open and close glyph is specified
-.  ds www:open \\$1\"
-.  ds www:close \\$2\"
-..
-.
-.\" MATHML - enable eqn mathml output to pass through to the device
-.\"          driver
-.
-.de MATHML
-.  if (\\n[.O] == 0) \
-.    MATH<?p> \\$*
-..
-.
-.\" --------------------------------------------------------------------
-.\" final setup
-.\" --------------------------------------------------------------------
-.
-.LINKSTYLE blue C \[la] \[ra]
-.
-.if \n[www-html] \{\
-.  nh
-.  nr HY 0
-.\}
-.
-.if r ps4html .nop \O[0]
-.cp \n(_C
-.
-.\" now set
-.
-.\" --------------------------------------------------------------------
-.\" Emacs settings
-.\" --------------------------------------------------------------------
-.
-.\" Local Variables:
-.\" mode: nroff
-.\" End:
-.\" EOF
diff -Nuar groff-1.22.3.old/tmac/www.tmac.in groff-1.22.3/tmac/www.tmac.in
--- groff-1.22.3.old/tmac/www.tmac.in	1970-01-01 02:00:00.000000000 +0200
+++ groff-1.22.3/tmac/www.tmac.in	2015-04-23 20:57:03.000000000 +0300
@@ -0,0 +1,1625 @@
+.ig
+www.tmac - macro package for adding HTML elements to roff documents.
+
+File position: <groff_source_top>/tmac/www.tmac
+Installed position: groff's main macro directory.
+
+------------------------------------------------------------------------
+    Legalese
+------------------------------------------------------------------------
+
+This file is part of groff, the GNU roff type-setting system.
+
+Copyright (C) 2001-2014  Free Software Foundation, Inc.
+written by Gaius Mulley <gaius@glam.ac.uk>, with additions by
+Werner Lemberg <wl@gnu.org> and
+Bernd Warken <groff-bernd.warken-72@web.de>.
+
+groff is free software; you can redistribute it and/or modify it under
+the terms of the GNU General Public License as published by the Free
+Software Foundation, either version 3 of the License, or
+(at your option) any later version.
+
+groff is distributed in the hope that it will be useful, but WITHOUT
+ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or
+FITNESS FOR A PARTICULAR PURPOSE.  See the GNU General Public License
+for more details.
+
+You should have received a copy of the GNU General Public License
+along with this program. If not, see <http://www.gnu.org/licenses/>.
+
+
+------------------------------------------------------------------------
+    Description
+------------------------------------------------------------------------
+
+A simple set of macros to provide HTML (or XHTML) documents with basic
+www functionality.  It should work with any macro set.  In the following,
+HTML always denotes XHTML also.
+..
+.
+.
+.\" --------------------------------------------------------------------
+.\" Setup
+.\" --------------------------------------------------------------------
+.
+.do if d www:lenstr .nx
+.
+.do mso devtag.tmac
+.
+.nr _C \n(.C
+.cp 0
+.
+.
+.ie r xhtml \
+.  ds www-> />\"
+.el \
+.  ds www-> >\"
+.
+.nr www-html 0
+.if '\*[.T]'html' \
+.  nr www-html 1
+.
+.\" set up www-image-template
+.
+.if !d www-image-template \
+.  ds www-image-template
+.
+.if r ps4html \{\
+.  \" remove the title command when we are generating images for HTML
+.  \" (stops a title accidentally appearing inside an image)
+.  di www-notitle
+.  tl ''''
+.  di
+.  rm tl
+.  de tl
+.  .
+.\}
+.
+.
+.\" --------------------------------------------------------------------
+.\" Test for `.substring'; result in register `www.substring_ok'.
+.\" The automated break points in .URL addresses are only added if
+.\" this register is non-zero.
+.\"
+.nr www:substring_ok 0
+.de www:@test_substring
+.  if !d substring \
+.    return
+.  ds \\$0:s abcdefg\"
+.  substring \\$0:s 1 1
+.  if !'\\*[\\$0:s]'b' \{\
+.    rm \\$0:s
+.    return
+.  \}
+.  ds \\$0:s abcdefg\"
+.  substring \\$0:s 0 0
+.  if !'\\*[\\$0:s]'a' \{\
+.    rm \\$0:s
+.    return
+.  \}
+.  ds \\$0:s abcdefg\"
+.  substring \\$0:s 1 -1
+.  if !'\\*[\\$0:s]'bcdefg' \{\
+.    rm \\$0:s
+.    return
+.  \}
+.  nr www:substring_ok 1
+.  rm \\$0:s
+..
+.www:@test_substring
+.rm www:@test_substring
+.
+.
+.\" --------------------------------------------------------------------
+.\" Local Macros
+.\" --------------------------------------------------------------------
+.
+.\" --------------------------------------------------------------------
+.\" www:paraspace
+.\"
+.\" Space before paragraph. Use \n[PD] if it exists.
+.\"
+.nr www:pd 0.5v
+.
+.de www:paraspace
+.  ie r PD \
+.    sp \\n[PD]u
+.  el \
+.    sp \\n[www:pd]u
+..
+.
+.\" --------------------------------------------------------------------
+.\" www:error (<test>...)
+.\"
+.\" Print error message.
+.\"
+.de www-error
+.  tm \\n[.F]:\\n[.c]: macro error: \\$*
+..
+.
+.als www:error www-error
+.
+.\" --------------------------------------------------------------------
+.\" www:lenstr (<register_name> <string_name>)
+.\"
+.\" Store length of string named <string_name> into register named
+.\" <register_name>.
+.\"
+.de www:lenstr
+.  if !(\\n[.$] == 2) \{\
+.    tm .\\$0 expects 2 arguments.
+.    ab
+.  \}
+.  length \\$0:n x\\*[\\$2]
+.  nr \\$1 (\\n[\\$0:n] - 1)
+.  rr \\$0:n
+..
+.
+.\" --------------------------------------------------------------------
+.\" www:splitstr (<name>)
+.\"
+.\" Add a space character between any two adjacent characters in string
+.\" <name> and restore result into the string variable <name>; space
+.\" characters are first replaced by the word `space'.
+.\"
+.de www:splitstr
+.  if !(\\n[.$] == 1) \
+.    www:error .\\$0 expects 1 argument.
+.  if '\\*[\\$1]'' \
+.    return
+.  ds \\$0:r "\\*[\\$1]\"
+.  ds \\$0:s
+.  while 1 \{\
+.    ds \\$0:c "\\*[\\$0:r]\"
+.    substring \\$0:c 0 0
+.    ie '\\*[\\$0:c]' ' \
+.      as \\$0:s " space\"
+.    el \
+.      as \\$0:s " \\*[\\$0:c]\"
+.    www:lenstr \\$0:n \\$0:r
+.    if (\\n[\\$0:n] <= 1) \
+.      break
+.    substring \\$0:r 1 -1
+.  \}
+.  if !'\\*[\\$0:s]'' \
+.    substring \\$0:s 1 -1 
+.  ds \\$1 \\*[\\$0:s]\"
+.  rm \\$0:c
+.  rr \\$0:n
+.  rm \\$0:r
+.  rm \\$0:s
+..
+.
+.\" --------------------------------------------------------------------
+.\" www:url_breaks (<string_name>)
+.\"
+.\" Add `\:' (possible break point) within URL strings after `/'.
+.\"
+.\" Smart about multiple `/', existing `\:', and space characters;
+.\" does not set a break point if less than 5 characters would go to
+.\" the next line.
+.\"
+.de www:url_breaks
+.  if !(\\n[.$] == 1) \
+.    www:error .\\$0 expects 1 argument.
+.  if !\n[www:substring_ok] \
+.    return
+.  ds \\$0:s "\\*[\\$1]\"
+.  www:splitstr \\$0:s
+.  www:url_breaks_split \\$0:s \\*[\\$0:s]
+.  ds \\$1 "\\*[\\$0:s]\"
+.  rm \\$0:s
+..
+.
+.\" --------------------------------------------------------------------
+.\" www:url_breaks_split (<result> <char> [<char>...])
+.\"
+.\" Add `\:' within URL strings, but arguments are a split string.
+.\"
+.\" Arguments: >=2: <result> <char> [<char>...]
+.\"
+.de www:url_breaks_split
+.  nr \\$0:min 5             \" minimal number of characters for next line
+.  if (\\n[.$] < 2) \
+.    www:error .\\$0 expects at least 2 arguments.
+.  ds \\$0:res \\$1\"
+.  shift
+.  ds \\$0:s
+.  nr \\$0:done 0
+.  while !\\n[\\$0:done] \{\
+.    if (\\n[.$] <= 0) \
+.      break
+.    if '\\$1'space' \{\
+.      as \\$0:s " \"
+.      shift
+.      continue
+.    \}
+.    if (\\n[.$] < \\n[\\$0:min]) \{\
+.      as \\$0:s "\\$1\"
+.      shift
+.      continue
+.    \}
+.    if !'\\$1'/' \{\
+.      as \\$0:s "\\$1\"
+.      shift
+.      continue
+.    \}
+.    \" we are at a `/' character
+.    while '\\$1'/' \{\
+.      as \\$0:s /\"
+.      if (\\n[.$] == 0) \{\
+.        nr \\$0:done 1
+.        break
+.      \}
+.      shift
+.    \}
+.    if \\n[\\$0:done] \
+.      break
+.    if (\\n[.$] < \\n[\\$0:min]) \
+.      continue
+.    if '\\$1'\:' \
+.      shift
+.    as \\$0:s \:\"
+.  \}
+.  ds \\*[\\$0:res] \\*[\\$0:s]\"
+.  rm \\$0:res
+.  rm \\$0:s
+..
+.
+.
+.\" --------------------------------------------------------------------
+.\" User Interface
+.\" --------------------------------------------------------------------
+.
+.\" --------------------------------------------------------------------
+.\" HTML
+.\"
+.\" The main auxiliary macro for the HTML interface.
+.\"
+.de HTML
+.  if \\n[www-html] \{\
+.    \" was implemented via .nop \&\X^html:\\$*^ but
+.    \" is now implemented using HTML-NS to utilize code factoring.
+.    \"
+.    \" the `\&' makes the vertical mode leave, so to say
+.    \"
+.    nop \&\c
+.    HTML-NS \\$*
+.    nop \&
+.  \}
+..
+.
+.\"
+.\" An auxiliary macro for HTML (without following space).
+.\"
+.de HTML-NS
+.  nop \X^html:\\$*^\c
+..
+.
+.\"
+.\" Emit an HTML tag after shutting down a (possibly open) paragraph.
+.\"
+.de HTML</p>
+.  ie \\n[www-html] \{\
+.    \" the `\&' makes the vertical mode leave, so to say
+.    nop \&\X^html</p>:\\$*^
+.  \}
+.  el \
+.    www:paraspace
+..
+.
+.\"
+.\" Emit an HTML tag.  If text has been written in the paragraph
+.\"                    then do not shut the paragraph down.
+.\"                    If text was not written, remove the empty
+.\"                    paragraph tag and emit the desired HTML tag.
+.\"
+.de HTML<?p>
+.  if \\n[www-html] \
+.    nop \&\X^html<?p>:\\$*^
+..
+.
+.\"
+.\" Emit a MATH tag.  If text has been written in the paragraph
+.\"                   then do not shut the paragraph down.
+.\"                   If text was not written, remove the empty
+.\"                   paragraph tag and emit the desired math tag.
+.\"
+.de MATH<?p>
+.  if \\n[www-html] \
+.    nop \&\X^math<?p>:\\$*^
+..
+.
+.\" --------------------------------------------------------------------
+.\" HX n
+.\"
+.\"   Automatic heading level cut off.
+.\"
+.\"   N is the depth limit of automatically linked headings.  So a depth
+.\"   of 2 would cause grohtml to generate a list of links for `.NH 1'
+.\"   and `.NH 2' but not for `.NH 3'.
+.\"
+.de HX
+.  if \\n[www-html] \
+.    nop \X^index:\\$*^
+..
+.
+.\" --------------------------------------------------------------------
+.\" BCL foreground background active not-visited visited
+.\"
+.de BCL
+.  HTML <body "text=""\\$1""" \
+              "bgcolor=""\\$2""" \
+              "link=""\\$3""" \
+              "alink=""\\$4""" \
+              "vlink=""\\$5"">"
+..
+.
+.\" --------------------------------------------------------------------
+.\" BGIMG imagefile
+.\"
+.de BGIMG
+.  HTML <body "background=""\\$1"">"
+..
+.
+.\" www:url_check_tag str
+.\"    If url named by \*[str] is internal (starts with #), 
+.\"    redefine \*[str] to be the value of the string TAG_url.
+.
+.de www:url_check_tag
+.  ds \\$0:tmp \\*[\\$1]\"
+.  substring \\$0:tmp 0 0
+.  if '\\*[\\$0:tmp]'#' \{\
+.    ds \\$0:tmp \\*[\\$1]\"
+.    substring \\$0:tmp 1
+.    ds \\$0:tmp TAG_\\*[\\$0:tmp]\"
+.
+.    ie d \\*[\\$0:tmp] \
+.      ds \\$1 \\*[\\*[\\$0:tmp]]\"
+.    el \
+.      ds \\$1 see below\"
+.  \} 
+.  rm \\$0:tmp
+..
+.
+.\" --------------------------------------------------------------------
+.\" URL url [description] [after]
+.\"
+.\"   If description is absent then the url becomes the anchor text.
+.\"
+.de URL
+.  if !'\\$1'' \{\
+.    ds \\$0:adr \\$1\"
+.    www:url_check_tag \\$0:adr
+.    if !\\n[www-html] \
+.      www:url_breaks \\$0:adr
+.  \}
+.  ie \\n[www-html] \{\
+.    ie '\\$3'' \
+.      ds \\$0:after \&\"
+.    el \
+.      ds \\$0:after \&\\$3\"
+.
+.    ie '\\$2'' \
+.       HTML-NS <a "href=""\\$1"">\\*[\\$0:adr]</a>"
+.    el \
+.       HTML-NS <a "href=""\\$1"">\\$2</a>"
+.
+.    nop \\*[\\$0:after]
+.    rm \\$0:after
+.  \}
+.  el \{\
+.    if !r ps4html \
+.      ad l
+.
+.    ie '\\$2'' \{\
+.      ie '\\$1'' \{\
+.        if !'\\$3'' \
+.          nop \\$3
+.      \}
+.      el \{\
+.        ie \\n[.color] \
+.          nop \%\\*[www:open]\m[\\*[www:color]]\f[\\*[www:fontstyle]]\\*[\\$0:adr]\f[]\m[]\\*[www:close]\\$3
+.        el \
+.          nop \%\\*[www:open]\f[\\*[www:fontstyle]]\\*[\\$0:adr]\f[]\\*[www:close]\\$3
+.      \}
+.    \}
+.    el \{\
+.      ie '\\$1'' \{\
+.        ie \\n[.color] \
+.          nop \m[\\*[www:color]]\\$2\m[]\\$3
+.        el \
+.          nop \f[\\*[www:fontstyle]]\\$2\f[]\\$3
+.      \}
+.      el \{\
+.        ie \\n[.color] \{\
+.          nop \m[\\*[www:color]]\\$2\m[]
+.          nop \%\\*[www:open]\f[\\*[www:fontstyle]]\\*[\\$0:adr]\f[]\\*[www:close]\\$3
+.        \}
+.        el \{\
+.          nop \f[\\*[www:fontstyle]]\\$2\f[]
+.          nop \%\\*[www:open]\f[\\*[www:fontstyle]]\\*[\\$0:adr]\f[]\\*[www:close]\\$3
+.        \}
+.      \}
+.    \}
+.
+.    if !r ps4html \
+.      ad
+.  \}
+.  rm \\$0:adr
+..
+.
+.\" --------------------------------------------------------------------
+.\" FTP url description [after]
+.\"
+.\"   Same as URL.
+.\"
+.als FTP URL
+.
+.\" --------------------------------------------------------------------
+.\" MTO address description [after]
+.\"
+.\"   ADDRESS is the email address (without the `mailto:' prefix).
+.\"
+.\"   DESCRIPTION is the optional name.  If an empty argument is given,
+.\"   ADDRESS is used instead.
+.\"
+.\"   AFTER is optional stuff printed immediately after ADDRESS
+.\"   (resp. DESCRIPTION).
+.\"
+.\"     Example:
+.\"
+.\"       Foobar has been written by
+.\"       .MTO fred@foo.bar "Fredrick Bloggs" .
+.\"
+.de MTO
+.  ie \\n[www-html] \{\
+.    ie '\\$2'' \
+.      URL mailto:\\$1 \\$1 "\\$3"
+.    el \
+.      URL mailto:\\$1 "\\$2" "\\$3"
+.  \}
+.  el \{\
+.    ie '\\$2'' \{\
+.      ie '\\$1'' \{\
+.        ie !'\\$3'' \
+.          nop \\$3
+.      \}
+.      el \{\
+.        ie \\n[.color] \
+.          nop \%\m[\\*[www:color]]\f[\\*[www:fontstyle]]\\$1\f[]\m[]\\$3
+.        el \
+.          nop \%\f[\\*[www:fontstyle]]\\$1\f[]\\$3
+.      \}
+.    \}
+.    el \{\
+.      ie '\\$1'' \{\
+.        ie \\n[.color] \
+.          nop \m[\\*[www:color]]\\$2\m[]\\$3
+.        el \
+.          nop \f[\\*[www:fontstyle]]\\$2\f[]\\$3
+.      \}
+.      el \{\
+.        ie \\n[.color] \{\
+.          nop \m[\\*[www:color]]\\$2\m[]
+.          nop \%\\*[www:open]\f[\\*[www:fontstyle]]\\$1\f[]\\*[www:close]\\$3
+.        \}
+.        el \{\
+.          nop \f[\\*[www:fontstyle]]\\$2\f[]
+.          nop \%\\*[www:open]\f[\\*[www:fontstyle]]\\$1\f[]\\*[www:close]\\$3
+.        \}
+.      \}
+.    \}
+.  \}
+..
+.
+.\" --------------------------------------------------------------------
+.\" TAG name [text]
+.\"
+.\"   Generate an HTML name NAME.
+.\"   Define string TAG_NAME to TEXT, if present, otherwise to \n[PN].
+.\"   Register PN is the current page number.
+.\"
+.de TAG
+.  HTML <a "name=""\\$1""></a>"
+.  ie '\\$2'' \
+.    if !rPN \
+.      nr PN \\n%
+.    ds TAG_\\$1 \\n[PN]\"
+.  el \
+.    ds TAG_\\$1 \\$2\"
+..
+.
+.\" --------------------------------------------------------------------
+.\" IMG [-R|-L|-C] filename [width] [height]
+.\"
+.\"   Include an image of any type (only works for -Thtml).
+.\"
+.\"   Alignment is centered by default (-C).
+.\"   Default value for WIDTH is 1i.
+.\"   If HEIGHT is not given, WIDTH is used as the height.
+.\"
+.de IMG
+.  ie \\n[www-html] \{\
+.    ie '\\$2'-R' \
+.      DEVTAG .right-image
+.    el \{\
+.      ie '\\$2'-L' \
+.        DEVTAG .left-image
+.      el \
+.        DEVTAG .centered-image
+.    \}
+.    nr www-width 100
+.    if !'\\$3'' \
+.      nr www-width \\$3
+.    nr www-height \\n[www-width]
+.    if !'\\$4'' \
+.      nr www-height \\$4
+.    HTML <img "src=""\\$1""" \
+               "alt=""Image \\$1""" \
+               "width=""\\n[www-width]""" \
+               "height=""\\n[www-height]""\\*[www->]"
+.  \}
+.  el \
+.    nop \\*[www:open]\f[\\*[www:fontstyle]]\\$1\f[]\\*[www:close]
+..
+.
+.\" --------------------------------------------------------------------
+.\" PIMG  [-R|-L|-C] filename [width] [height]
+.\"
+.\"   Include a PNG image.  It works for -Tps and -Thtml.
+.\"   The default value for WIDTH and HEIGHT is zero; the default
+.\"   alignment is centering (-C).
+.\"
+.\" Note: This macro can only be used with the `-U' option of groff,
+.\"       activating unsafe mode, if not used with -Thtml; the PNG image
+.\"       is then converted to the EPS format using netpbm utilities.
+.\"
+.de PIMG
+.  ds www-pic-align -C\"
+.  ie '\\$1'-R' \{\
+.    ds www-pic-align -R\"
+.    shift
+.  \}
+.  el \{\
+.    if '\\$1'-L' \{\
+.      ds www-pic-align -L\"
+.      shift
+.    \}
+.  \}
+.  if '\\$1'-C' \
+.    shift
+.
+.  ie \\n[www-html] \{\
+.    ds www-htmlalign align="center"\"
+.    if '\\*[www-pic-align]'-R' \
+.      ds www-htmlalign align="right"\"
+.    if '\\*[www-pic-align]'-L' \
+.      ds www-htmlalign align="left"\"
+.
+.    nr www-width 0
+.    nr www-height 0
+.    if !'\\$2'' \
+.      nr www-width (\\$3 * 100 / 240)
+.    if !'\\$3'' \
+.      nr www-height (\\$4 * 100 / 240)
+.    ie (\\n[www-width] == 0) \{\
+.      ie (\\n[www-height] == 0) \
+.        HTML</p> <p \\*[www-htmlalign]><img "src=""\\$1""" \
+                                             "alt=""Image \\$1""\\*[www->]</p>"
+.      el \
+.        HTML</p> <p \\*[www-htmlalign]><img "src=""\\$1""" \
+                                             "alt=""Image \\$1""" \
+                                             "height=""\\n[www-height]""\\*[www->]</p>"
+.    \}
+.    el \{\
+.      ie (\\n[www-height] == 0) \
+.        HTML</p> <p \\*[www-htmlalign]><img "src=""\\$1""" \
+                                             "alt=""Image \\$1""" \
+                                             "width=""\\n[www-width]""\\*[www->]</p>"
+.      el \
+.        HTML</p> <p \\*[www-htmlalign]><img "src=""\\$1""" \
+                                             "alt=""Image \\$1""" \
+                                             "width=""\\n[www-width]""" \
+                                             "height=""\\n[www-height]""\\*[www->]</p>"
+.    \}
+.  \}
+.  el \{\
+.    if !r ps4html \{\
+.      www-make-unique-name
+.      sy pngtopnm \\$1 \
+          | pnmcrop -white \
+          | @PNMTOPS_NOSETPAGE@ -noturn \
+          > \\*[www-unique-name].eps
+.      shift
+.      PSPIC \\*[www-pic-align] \\*[www-unique-name].eps \\$*
+.    \}
+.  \}
+..
+.
+.\" --------------------------------------------------------------------
+.\" auxiliary definitions for MPIMG
+.\"
+.nr www-left-ll-trap 0
+.nr www-left-po-trap 0
+.nr www-right-ll-trap 0
+.
+.de www-finish-left-po
+.  po -(\\n[www-left-indent]u + \\n[www-image-gap]u)
+.  wh \\n[www-left-po-trap]u
+.  nr www-left-indent 0
+..
+.
+.\" called when the -R picture is finished
+.de www-finish-right-ll
+.  ll +(\\n[www-right-indent]u + \\n[www-image-gap]u)
+.
+.  \" now check whether we need to inline www-finish-left-ll
+.  if (\\n[www-left-ll-trap]u > 0) \
+.    if ((\\n[www-right-ll-trap]u + 1v) >= \\n[www-left-ll-trap]u) \{\
+.      mk www-left-po-trap
+.      nr www-left-po-trap +1v
+.      wh \\n[www-left-po-trap]u www-finish-left-po
+.      ll +\\n[www-left-indent]u
+.      wh \\n[www-left-ll-trap]u
+.      nr www-left-ll-trap 0
+.    \}
+.
+.  \" and check whether we need to inline www-finish-left-po
+.  if (\\n[www-left-po-trap]u > 0) \
+.    if ((\\n[www-right-ll-trap]u + 1v) >= \\n[www-left-po-trap]u) \{\
+.      po -\\n[www-left-indent]u
+.      wh \\n[www-left-po-trap]u
+.      nr www-left-indent 0
+.    \}
+.
+.  wh \\n[www-right-ll-trap]u
+.  nr www-right-ll-trap 0
+..
+.
+.de www-finish-left-ll
+.  if (\\n[www-right-ll-trap] > 0) \
+.    if ((\\n[www-left-ll-trap] + 1v) >= \\n[www-right-ll-trap]) \{\
+.      ll +\\n[www-right-indent]u
+.      nr www-right-ll-trap 0
+.    \}
+.
+.  mk www-left-po-trap
+.  nr www-left-po-trap +1v
+.  wh \\n[www-left-po-trap]u www-finish-left-po
+.  ll +(\\n[www-left-indent]u + \\n[www-image-gap]u)
+.  wh \\n[www-left-ll-trap]u
+.  nr www-left-ll-trap 0
+..
+.
+.\" www-handle-percent arg N1 N2 S1
+.\"                    arg - input string (number or number%)
+.\"                    output parameters:
+.\"                    N1 - name of number register 1=absolute 0=percentage
+.\"                    N2 - number register name for absolute value
+.\"                    S1 - string register name for percentage value
+.\"
+.de www-handle-percent 
+.  ds www-percent \\$1\"
+.  substring www-percent -1 -1
+.
+.  ie '\\*[www-percent]'%' \{\
+.    ds www-abs \\$1\"
+.    substring www-abs 0 -2
+.    nr \\$2 0
+.    nr \\$3 \\*[www-abs]
+.    ds \\$4 \\$1\"
+.  \}
+.  el \{\
+.    nr \\$2 1
+.    nr \\$3 \\$1
+.    ds \\$4 none\"
+.  \}
+..
+.
+.\" --------------------------------------------------------------------
+.\" MPIMG [-R|-L] [-G gap] filename [width [height]]
+.\"
+.\"   Include a PNG image and wrap text around it.  It works for
+.\"   -Tps and -Thtml.  The default value for WIDTH is 1i; default value
+.\"   for HEIGHT is WIDTH; the default alignment is left (-L).
+.\"   -G is used to insert a gap between the text and the image.
+.\"   The height and width can also be given as a percentage.
+.\"   The PostScript device converts the percentage width into an
+.\"   absolute value by using \\n[.l], and the height by using \\n[.p].
+.\"   
+.\"
+.\" Note: This macro can only be used with the `-U' option of groff,
+.\"       activating unsafe mode, if not used with -Thtml; the PNG image
+.\"       is then converted to the EPS format using netpbm utilities.
+.\"
+.nr www-htmlimage-gap 0
+.
+.de MPIMG
+.  nr www-image-just 1
+.  nr www-image-gap 0
+.  while (\\n[.$] > 0) \{\
+.    if '-L'\\$1' \{\
+.      nr www-image-just 1
+.      shift
+.      continue
+.    \}
+.    if '-R'\\$1' \{\
+.      nr www-image-just 0
+.      shift
+.      continue
+.    \}
+.    if '-G'\\$1' \{\
+.      nr www-image-gap \\$2
+.      nr www-htmlimage-gap (\\$2 * 100 / 240)
+.      shift 2
+.      continue
+.    \}
+.    break
+.  \}
+.
+.  nr www-width 1i
+.  nr www-height 1i
+.  ds www-size-specs width="\\n[www-width]" height="\\n[www-height]"\"
+.  ie !'\\$2'' \{\
+.    nr www-is-absolute 0
+.    nr www-absolute 0
+.    ds www-percentage none\"
+.    www-handle-percent \\$2 www-is-absolute www-absolute www-percentage
+.    ie !\\n[www-is-absolute] \{\
+.      \" percentage of linelength requested
+.      nr www-width (\\n[www-absolute] * \\n[.l] / 100)
+.      if \\n[www-html] \
+.        nr www-width (\\n[www-width] * 100 / 240)
+.      ds www-size-specs width="\\*[www-percentage]"\"
+.    \}
+.    el \{\
+.      nr www-width \\n[www-absolute]
+.      if \\n[www-html] \
+.        nr www-width (\\n[www-width] * 100 / 240)
+.      ds www-size-specs width="\\n[www-width]"\"
+.    \}
+.
+.    nr www-height \\n[www-width]
+.    ie !'\\$3'' \{\
+.      nr www-is-absolute 0
+.      nr www-absolute 0
+.      ds www-percentage none\"
+.      www-handle-percent \\$3 www-is-absolute www-absolute www-percentage
+.      ie !\\n[www-is-absolute] \{\
+.        \" percentage of pagelength requested
+.        nr www-height (\\n[www-absolute] * \\n[.p] / 100)
+.        if \\n[www-html] \
+.           nr www-height (\\n[www-height] * 100 / 240)
+.        ds www-size-specs "\\*[www-size-specs] height="\\*[www-percentage]"\"
+.      \}
+.      el \{\
+.        nr www-height \\n[www-absolute]
+.        if \\n[www-html] \
+.           nr www-height (\\n[www-height] * 100 / 240)
+.        ds www-size-specs "\\*[www-size-specs] height="\\*[www-height]"\"
+.      \}
+.    \}
+.  \}
+.  el \{\
+.    \" height not specified; use width value
+.    ie !\\n[www-is-absolute] \{\
+.       \" percentage value
+.       ds www-size-specs "\\*[www-size-specs] height="\\*[www-percentage]"\"
+.       nr www-height \\n[www-width]
+.    \}
+.    el \{\
+.       ds www-size-specs "\\*[www-size-specs] height="\\*[www-width]"\"
+.       nr www-height \\n[www-width]
+.    \}
+.  \}
+.
+.  ie \\n[www-html] \{\
+.    ie !\\n[www-image-just] \
+.      HTML <img "src=""\\$1""" \
+                 "alt=""Image \\$1""" \
+                 "hspace=""\\n[www-htmlimage-gap]""" \
+                 "align=""right""" \
+                 "\\*[www-size-specs]\\*[www->]"
+.    el \
+.      HTML <img "src=""\\$1""" \
+                 "alt=""Image \\$1""" \
+                 "hspace=""\\n[www-htmlimage-gap]""" \
+                 "align=""left""" \
+                 "\\*[www-size-specs]\\*[www->]"
+.  \}
+.  el \{\
+.    tm www-width is \\n[www-width]
+.    tm www-height is \\n[www-height]
+.    if !r ps4html \{\
+.      www-make-unique-name
+.      sy pngtopnm \\$1 \
+          | pnmcrop -white \
+          | @PNMTOPS_NOSETPAGE@ -noturn \
+          > \\*[www-unique-name].eps
+.      ie !\\n[www-image-just] \{\
+.        \" we must now disable a possible left image trap
+.        sp -1
+.        if (\\n[www-left-ll-trap] > 0) \
+.          wh \\n[www-left-ll-trap]u
+.        if (\\n[www-left-po-trap] > 0) \
+.          wh \\n[www-left-po-trap]u
+.        PSPIC -R \\*[www-unique-name].eps \\n[www-width]u \\n[www-height]u
+.        sp -\\n[ps-desht]u
+.
+.        nr www-right-indent \\n[ps-deswid]u
+.        \" we want to have some space between text and image,
+.        \" so the line length must be shorter
+.        ll -(\\n[www-right-indent]u + \\n[www-image-gap]u)
+.        mk www-right-ll-trap
+.        nr www-right-ll-trap +(\\n[ps-desht]u - 1v)
+.        wh \\n[www-right-ll-trap]u www-finish-right-ll
+.
+.        \" now restore possible left trap
+.        if (\\n[www-left-ll-trap] > 0) \
+.          wh \\n[www-left-ll-trap]u www-finish-left-ll
+.        if (\\n[www-left-po-trap] > 0) \
+.          wh \\n[www-left-po-trap]u
+.      \}
+.      el \{\
+.        \" we must now disable a possible right image trap
+.        if (\\n[www-right-ll-trap] > 0) \
+.          wh \\n[www-right-ll-trap]u
+.        PSPIC -L \\*[www-unique-name].eps \\n[www-width]u \\n[www-height]u
+.        sp -\\n[ps-desht]u
+.
+.        nr www-left-indent \\n[ps-deswid]u
+.        \" increase offset by gap
+.        po +(\\n[www-left-indent]u + \\n[www-image-gap]u)
+.        \" decrease line length by gap
+.        ll -(\\n[www-left-indent]u + \\n[www-image-gap]u)
+.        mk www-left-ll-trap
+.        nr www-left-ll-trap +(\\n[ps-desht]u - 1v)
+.        wh \\n[www-left-ll-trap]u www-finish-left-ll
+.
+.        \" now restore possible right trap
+.        if (\\n[www-right-ll-trap] > 0) \
+.          wh \\n[www-right-ll-trap]u www-finish-right-ll
+.      \}
+.    \}
+.  \}
+..
+.
+.\" --------------------------------------------------------------------
+.\" HnS n
+.\"
+.\"   Begin heading.  Heading level is N.
+.\"
+.\" HnE
+.\"
+.\"   End heading.
+.\"
+.\" If your heading contains URL, FTP, MTO macros you might wish to
+.\" disable automatic links to headings.  This can be done via `-P-l'
+.\" from the command line or by using a cakk to `.HX 0'.
+.\"
+.nr www-heading-no -1
+.
+.de HnS
+.  ie '\\$1'' \
+.    nr www-heading-no 1
+.  el \
+.    nr www-heading-no \\$1
+.  DEVTAG-NH \\n[www-heading-no]
+..
+.
+.de HnE
+.  if (\\n[www-heading-no] == -1) \
+.    www-error HnE found without a corresponding HnS
+.  DEVTAG-EO-H
+..
+.
+.\" --------------------------------------------------------------------
+.\" LK
+.\"
+.\"   Emit the automatically collected links derived from
+.\"   section/numbered headings at this position.
+.\"
+.de LK
+.  DEVTAG .links
+..
+.
+.\" --------------------------------------------------------------------
+.\" HR
+.\"
+.\"   Produce a horizontal line.
+.\"
+.de HR
+.  HTML</p> <hr\\*[www->]
+..
+.
+.\" --------------------------------------------------------------------
+.\" NHR
+.\"
+.\"  Suppress the generation of the top and bottom rules which grohtml
+.\"  emits by default.
+.\"
+.de NHR
+.  DEVTAG .no-auto-rule
+..
+.
+.\"
+.\" www-end-nowhere - end of input trap called to finish diversion.
+.\"
+.de www-end-nowhere
+.  if !\\n[www-html] \
+.    di
+.  DEVTAG-EO-TL
+..
+.
+.\" --------------------------------------------------------------------
+.\" HTL
+.\"
+.\"   Generate an HTML title only.  This differs from the -ms .TL macro
+.\"   which generates both an HTML title and an H1 heading.
+.\"
+.\"   This is useful when an author wishes to use an HTML title as search
+.\"   engine fodder but a graphic title in the document.
+.\"
+.\"   The macro terminates when a space or break is seen (.sp, .br).
+.\"
+.de HTL
+.  DEVTAG .html-tl
+.  if !\\n[www-html] \
+.    di www-nowhere
+.  it 2 www-end-nowhere
+..
+.
+.\" --------------------------------------------------------------------
+.\" auxiliary definitions for lists
+.\"
+.ds www-ul-level1 \[bu]\ \ \"
+.ds www-ul-level2 \[sq]\ \ \"
+.ds www-ul-level3 \[ci]\ \ \"
+.nr www-ul-level 0
+.
+.ds www-ol-level1 decimal\"
+.ds www-ol-level2 lower-alpha\"
+.ds www-ol-level3 lower-roman\"
+.ds www-ol-tmp 00\ \ \"
+.nr www-ol-ctr1 0 1
+.nr www-ol-ctr2 0 1
+.nr www-ol-ctr3 0 1
+.af www-ol-ctr2 a
+.af www-ol-ctr3 i
+.nr www-ol-level 0
+.
+.nr www-dl-level 0
+.nr www-dl-shift 5n
+.
+.\"
+.\" allow nested lists
+.\"
+.nr www-depth 0
+.nr www-li-indent \n[.i]
+.ds www-level0 nop\"
+.ds www-level1
+.ds www-level2
+.ds www-level3
+.ds www-level4
+.ds www-level5
+.ds www-level6
+.ds www-level7
+.ds www-level8
+.ds www-level9
+.
+.\" which macro to use for LI
+.de www-push-li
+.  nr www-li-indent \\n[.i]
+.  nr www-depth +1
+.  ds www-level\\n[www-depth] \\$1\"
+.  ds www-ltag\\n[www-depth]
+.  als LI \\$1
+..
+.
+.de www-pop-li
+.  nr www-depth -1
+.  als LI \\*[www-level\\n[www-depth]]
+..
+.
+.\" www-emit-ltag - shut down a previous open list tag
+.\"                 before issuing a new tag \\$1.
+.\"                 It then records tag \\$1 is open.
+.
+.de www-emit-ltag
+.  if !'\\*[www-ltag\\n[www-depth]]'' \
+.    HTML-NS </\\*[www-ltag\\n[www-depth]]>
+.  if !'\\$1'' \
+.    HTML-NS <\\$1>
+.  ds www-ltag\\n[www-depth] \\$1\"
+..
+.
+.\"
+.\" Auxiliary macro for ULS.
+.\"
+.de www-push-ul-level
+.  nr www-ul-level +1
+.  if (\\n[www-ul-level] > 3) \
+.    www-error ULS: too many levels of indentation (\\n[www-ul-level])
+..
+.\"
+.\" Auxiliary macro for ULE.
+.\"
+.de www-pop-ul-level
+.  if !\\n[www-ul-level] \
+.    www-error ULE: trying to terminate a list which does not exist
+.  nr www-ul-level -1
+..
+.
+.\"
+.\" Auxiliary macro for OLS.
+.\"
+.de www-push-ol-level
+.  nr www-ol-level +1
+.  if (\\n[www-ol-level] > 3) \
+.    www-error OLS: too many levels of indentation (\\n[www-ol-level])
+..
+.
+.\"
+.\" Auxiliary macro for OLE.
+.\"
+.de www-pop-ol-level
+.  if !\\n[www-ol-level] \
+.    www-error OLE: trying to terminate a list which does not exist
+.  nr www-ol-level -1
+..
+.
+.\" --------------------------------------------------------------------
+.\" ULS
+.\"
+.\"   Start an unordered list.
+.\"
+.de ULS
+.  www-push-li www-li-ul
+.  www-push-ul-level
+.  ie \\n[www-html] \{\
+.    www-emit-ltag
+.    HTML</p> <ul>
+.  \}
+.  el \
+.    nr www-li-indent +\w'\\*[www-ul-level\\n[www-ul-level]]'u
+..
+.
+.\" --------------------------------------------------------------------
+.\" ULE
+.\"
+.\"   End an unordered list.
+.\"
+.de ULE
+.  ie \\n[www-html] \{\
+.    www-emit-ltag
+.    HTML</p> </ul>
+.  \}
+.  el \{\
+.    nr www-li-indent -\w'\\*[www-ul-level\\n[www-ul-level]]'u
+.    in \\n[www-li-indent]u
+.  \}
+.  www-pop-ul-level
+.  www-pop-li
+..
+.
+.\" --------------------------------------------------------------------
+.\" OLS
+.\"
+.\"   Start an ordered list.
+.\"
+.de OLS
+.  www-push-li www-li-ol
+.  www-push-ol-level
+.  ie \\n[www-html] \{\
+.    www-emit-ltag
+.    HTML</p> <ol "style=""list-style-type:" \
+                           "\\*[www-ol-level\\n[www-ol-level]]"">"
+.  \}
+.  el \
+.    nr www-li-indent +\w'\\*[www-ol-tmp]'u
+..
+.
+.\" --------------------------------------------------------------------
+.\" OLE
+.\"
+.\"   End an ordered list.
+.\"
+.de OLE
+.  ie \\n[www-html] \{\
+.    www-emit-ltag
+.    HTML </ol>
+.  \}
+.  el \{\
+.    nr www-li-indent -\w'\\*[www-ol-tmp]'u
+.    in \\n[www-li-indent]u
+.    nr www-ol-ctr\\n[www-ol-level] 0 1
+.  \}
+.  www-pop-ol-level
+.  www-pop-li
+..
+.
+.\" --------------------------------------------------------------------
+.\" DLS
+.\"
+.\"   Start a definition list.
+.\"
+.de DLS
+.  www-push-li www-li-dl
+.  nr www-dl-level +1
+.  ie \\n[www-html] \{\
+.    www-emit-ltag
+.    HTML</p> <dl>
+.  \}
+.  el \{\
+.    nr www-li-indent +\\n[www-dl-shift]u
+.    in \\n[www-li-indent]u
+.  \}
+..
+.
+.\" --------------------------------------------------------------------
+.\" DLE
+.\"
+.\"   End a definition list.
+.\"
+.de DLE
+.  ie \\n[www-html] \{\
+.    www-emit-ltag
+.    HTML </dl>
+.  \}
+.  el \{\
+.    nr www-li-indent -\\n[www-dl-shift]u
+.    in \\n[www-li-indent]u
+.  \}
+.  nr www-dl-level -1
+.  www-pop-li
+..
+.
+.\" --------------------------------------------------------------------
+.\" LI
+.\"
+.\"   Insert a list item.
+.\"
+.
+.\" ********
+.\" www-li-ul - bulleted list item
+.\"
+.de www-li-ul
+.  ie \\n[www-html] \
+.    www-emit-ltag li
+.  el \{\
+.    www:paraspace
+.    if rPORPHANS \
+.      ne \\n[PORPHANS]v
+.    in \\n[www-li-indent]u
+.    ti -\w'\\*[www-ul-level\\n[www-ul-level]]'u
+.    nop \\*[www-ul-level\\n[www-ul-level]]\c
+.  \}
+..
+.
+.\" ********
+.\" www-li-ol - numbered list item
+.\"
+.de www-li-ol
+.  ie \\n[www-html] \
+.    www-emit-ltag li
+.  el \{\
+.    www:paraspace
+.    if rPORPHANS \
+.      ne \\n[PORPHANS]v
+.    in \\n[www-li-indent]u
+.    ti -\w'\\n+[www-ol-ctr\\n[www-ol-level]]\ \ 'u
+.    nop \\n[www-ol-ctr\\n[www-ol-level]]\ \ \c
+.  \}
+..
+.
+.\" ********
+.\" www-li-dl - definition list item
+.\"
+.de www-li-dl
+.  ie \\n[www-html] \{\
+.    HTML <dt>\\$1</dt>
+.    www-emit-ltag dd
+.  \}
+.  el \{\
+.    www:paraspace
+.    if rPORPHANS \
+.      ne \\n[PORPHANS]v
+.    in \\n[www-li-indent]u
+.    ti -\\n[www-dl-shift]u
+.    nop \&\\$1
+.    br
+.  \}
+..
+.
+.\" --------------------------------------------------------------------
+.\" DC l text [color]
+.\"
+.\"   L is the letter to be dropped and enlarged.
+.\"
+.\"   TEXT is the following text whose height the first letter should not
+.\"   exceed.
+.\"
+.\"   COLOR is the optional color of the dropped letter (default black).
+.\"
+.de DC
+.  ds www-dropcolor black\"
+.  if !'\\$3'' \
+.    ds www-dropcolor \\$3\"
+.  ie '\*[.T]'html' \{\
+.    www-make-unique-name
+.    nr www-drop-width (100u * \\n[.v]u * 3u / \\n[.l]u)
+.    MPIMG -L \\*[www-unique-name].png \\n[www-drop-width]%
+.  \}
+.  el \{\
+.    ie r ps4html \{\
+.      www-make-unique-name
+.      \" To avoid interferences with another DC macro call which is located
+.      \" very near to the current one, we draw the glyph on a separate page.
+.      \" Otherwise it could theoretically happen that the dropped capital
+.      \" glyphs overlap.
+.      bp
+.      ev www-DC
+.      vs 320p
+.      nop \O[5i\\*[www-unique-name].png]\O[1]
+.      nop \m[\\*[www-dropcolor]]\s[160]\O[3]\\$1\O[4]
+.      nop \O[2]\O[0]
+.      br
+.      ev
+.      bp
+.    \}
+.    el \{\
+.      ie n \
+.        nop \\$1\c
+.      el \{\
+.        nr dummy \w'\\$1'u
+.        nr dcht ((\\n[.v] + \\n[rst]) * \\n[.ps] / \\n[rst])
+.        char \[dcap] \m[\\*[www-dropcolor]]\s'\\n[dcht]u'\\$1
+.        nop \v'\\n[.v]u'\\[dcap]\v'-\\n[.v]u'\c
+'        ti \w'\\[dcap]'u
+.      \}
+.    \}
+.  \}
+.  nop \\$2
+..
+.
+.\"
+.\" supplementary macros used by other macro sets
+.\"
+.\" here are some tags specially for -Tps or -Thtml when invoked by
+.\" pre-html to generate PNG images from postscript.
+.
+.\" --------------------------------------------------------------------
+.\" HTML-DO-IMAGE - tell troff to issue an image marker which can be
+.\"                 read back by pre-html
+.\"
+.de HTML-DO-IMAGE
+.  if r ps4html \
+.    nop \O[5\\$2\\$1.png]\O[1]\O[3]
+.  if \\n[www-html] \
+.    nop \O[5\\$2\\$1.png]\O[0]\O[3]
+..
+.
+.\" --------------------------------------------------------------------
+.\" HTML-IMAGE-END - terminate an image for HTML
+.\"
+.de HTML-IMAGE-END
+.  if r ps4html \
+.    nop \O[4]\O[2]\O[0]
+.  if \\n[www-html] \
+.    nop \O[4]\O[2]\O[1]
+..
+.
+.nr www-png-no 0
+.
+.\" --------------------------------------------------------------------
+.\" www-make-unique-name - generate another unique name in string
+.\"                        `www-unique-name'
+.\"
+.de www-make-unique-name
+.  nr www-png-no +1
+.  ds www-unique-name \\*[www-image-template]\\n[www-png-no]\"
+..
+.
+.\" --------------------------------------------------------------------
+.\" HTML-IMAGE and friends tell grohtml that this region of text needs
+.\"            to be rendered as an image.
+.\"
+.de HTML-IMAGE
+.  \" generates a centered image
+.  www-make-unique-name
+.  HTML-DO-IMAGE \\*[www-unique-name] c
+..
+.
+.de HTML-IMAGE-RIGHT
+.  www-make-unique-name
+.  HTML-DO-IMAGE \\*[www-unique-name] r
+..
+.
+.de HTML-IMAGE-LEFT
+.  www-make-unique-name
+.  HTML-DO-IMAGE \\*[www-unique-name] l
+..
+.
+.de HTML-IMAGE-INLINE
+.  www-make-unique-name
+.  HTML-DO-IMAGE \\*[www-unique-name] i
+..
+.
+.\"  EQN-HTML-IMAGE and friends check to see whether the equation is
+.\"                 not in an image, in which case it allows HTML
+.\"                 (mathml) to be generated (if -Txhtml was specified).
+.
+.de EQN-HTML-IMAGE
+.  \" generates a centered image
+.  www-make-unique-name
+.  EQN-HTML-DO-IMAGE \\*[www-unique-name] c
+..
+.
+.de EQN-HTML-IMAGE-RIGHT
+.  www-make-unique-name
+.  EQN-HTML-DO-IMAGE \\*[www-unique-name] r
+..
+.
+.de EQN-HTML-IMAGE-LEFT
+.  www-make-unique-name
+.  EQN-HTML-DO-IMAGE \\*[www-unique-name] l
+..
+.
+.de EQN-HTML-IMAGE-INLINE
+.  www-make-unique-name
+.  EQN-HTML-DO-IMAGE \\*[www-unique-name] i
+..
+.
+.\" --------------------------------------------------------------------
+.\" EQN-HTML-DO-IMAGE - tell troff to issue an image marker which can be
+.\"                     read back by pre-html
+.\"
+.de EQN-HTML-DO-IMAGE
+.  ie r xhtml \{\
+.    if !(\\n[.O] == 0) \{\
+.      if r ps4html \
+.        nop \O[5\\$2\\$1.png]\O[1]\O[3]
+.      if \\n[www-html] \
+.        nop \O[5\\$2\\$1.png]\O[0]\O[3]
+.    \}
+.  \}
+.  el \
+.    HTML-DO-IMAGE \\$*
+..
+.
+.\" --------------------------------------------------------------------
+.\" EQN-HTML-IMAGE-END - terminate an image for HTML
+.\"
+.de EQN-HTML-IMAGE-END
+.  ie r xhtml \{\
+.    if !(\\n[.O] == 0) \{\
+.      if r ps4html \
+.        nop \O[4]\O[2]\O[0]
+.      if \\n[www-html] \
+.        nop \O[4]\O[2]\O[1]
+.    \}
+.  \}
+.  el \
+.    HTML-IMAGE-END
+..
+.
+.\" --------------------------------------------------------------------
+.\" Setup around HTML-IMAGE and friends
+.\"
+.\" now set up TS, TE, EQ, EN default macros
+.\"
+.\" we must not use `.als': the definition of .TE in s.tmac, for example,
+.\" calls .HTML-IMAGE-END, which would refer to itself due to the alias,
+.\" causing an endless loop
+.\"
+.if !d TS \{\
+.  de TS
+.    HTML-IMAGE \\$@
+.    if \\n[www-html] \{\
+.      nr www-TS-ll \\n[.l]
+.      ll 1000n
+.    \}
+.  .
+.\}
+.if !d TE \{\
+.  de TE
+.    if \\n[www-html] \
+.      ll \\n[www-TS-ll]u
+.    HTML-IMAGE-END \\$@
+.  .
+.\}
+.if !d EQ \{\
+.  de EQ
+.    EQN-HTML-IMAGE \\$@
+.    if \\n[www-html] \{\
+.      nr www-EQ-ll \\n[.l]
+.      ll 1000n
+.    \}
+.  .
+.\}
+.if !d EN \{\
+.  de EN
+.    if \\n[www-html] \
+.      ll \\n[www-EQ-ll]u
+.    EQN-HTML-IMAGE-END \\$@
+.  .
+.\}
+.
+.\" --------------------------------------------------------------------
+.\" JOBNAME
+.\"
+.\"   Generate multiple output files containing the HTML.
+.\"   A file is split whenever a .SH or .NH 1 is encountered.
+.\"   The argument to JOBNAME is the file stem for future output files.
+.\"
+.de JOBNAME
+.  DEVTAG .job-name \\$1
+..
+.
+.\" --------------------------------------------------------------------
+.\" HEAD
+.\"
+.\"   Add information to the <head> </head> section of the HTML
+.\"   document
+.\"
+.de HEAD
+.  DEVTAG .head "\\$*"
+..
+.
+.\" --------------------------------------------------------------------
+.\" start of some code
+.\"
+.de CDS
+.  ft C
+.  nf
+..
+.
+.\" --------------------------------------------------------------------
+.\" end of some code
+.\"
+.de CDE
+.  fi
+.  ft P
+..
+.
+.ds www-nav-colour #eeeeee\"
+.nr www-nav-width-left 30
+.nr www-nav-width-right 70
+.
+.\" --------------------------------------------------------------------
+.\" LNS - left navigation start
+.\"
+.de LNS
+.  HTML</p> <table><tr><td "valign=""top""" \
+                           "width=""\\n[www-nav-width-left]%""" \
+                           "bgcolor=""\\*[www-nav-colour]"">"
+.  LK
+.  HTML</p> </td><td "valign=""top""" \
+                     "width=""\\n[www-nav-width-right]%"">"
+.  nr SH-open 1
+..
+.
+.\" --------------------------------------------------------------------
+.\" LNE - left navigation end
+.\"
+.de LNE
+.  HTML</p> </td></tr></table>
+.  HR
+..
+.
+.nr SH-open 0
+.nr needs-begin 0
+.
+.\"
+.\" some auxiliary macros for left navigation lists
+.\"
+.de www-SH
+.  if (0\\$1 == 0) \{\
+.    if (\\n[SH-open] == 1) \
+.      LNE
+.    nr needs-begin 1
+.    @SH-old
+.  \}
+..
+.
+.de www-NH
+.  if (0\\$1 <= 1) \{\
+.    if (\\n[SH-open] == 1) \
+.      LNE
+.    nr needs-begin 1
+.    @NH-old
+.  \}
+..
+.
+.de www-LP
+.  @LP-old
+.  if (\\n[needs-begin] == 1) \{\
+.    HR
+.    LNS
+.  \}
+.  nr needs-begin 0
+..
+.
+.\" --------------------------------------------------------------------
+.\" ALN [colour] [left width percentage]
+.\"
+.\"   Turn on automatic left navigation.  This macro should only be
+.\"   called once (normally at the start of the document) as it
+.\"   indicates that all top-level section headings form a navigation
+.\"   list on the left of the main text.
+.\"
+.de ALN
+.  if '\*[.T]'html' \{\
+.    if !'\\$1'' \
+.      ds www-nav-colour \\$1\"
+.    if (0\\$2 > 0) \{\
+.      nr www-nav-width-left \\$2
+.      nr www-nav-width-right (100 - \\$2)
+.    \}
+.    rn @SH @SH-old
+.    rn www-SH @SH
+.    rn @NH @NH-old
+.    rn www-NH @NH
+.    rn @LP @LP-old
+.    rn www-LP @LP
+.  \}
+..
+.
+.\" --------------------------------------------------------------------
+.\" LINKSTYLE color [fontstyle [openglyph closeglyph]]
+.\"
+.\"   Initialize www.tmac so that when this macro set is used with
+.\"   non-HTML devices the urls are rendered the user defined attributes.
+.\"   For example:
+.\"
+.\"   LINKSTYLE blue CR < >
+.\"
+.de LINKSTYLE
+.  if (\\n[.$] < 1) \
+.    www:error .\\$0 expects at least 1 argument.
+.  ds www:color \\$1\"
+.  shift
+.  if (\\n[.$] < 1) \
+.    return
+.  ds www:fontstyle \\$1\"
+.  shift
+.  if (\\n[.$] < 1) \
+.    www:error .\\$0 expects that both the open and close glyph is specified
+.  ds www:open \\$1\"
+.  ds www:close \\$2\"
+..
+.
+.\" MATHML - enable eqn mathml output to pass through to the device
+.\"          driver
+.
+.de MATHML
+.  if (\\n[.O] == 0) \
+.    MATH<?p> \\$*
+..
+.
+.\" --------------------------------------------------------------------
+.\" final setup
+.\" --------------------------------------------------------------------
+.
+.LINKSTYLE blue C \[la] \[ra]
+.
+.if \n[www-html] \{\
+.  nh
+.  nr HY 0
+.\}
+.
+.if r ps4html .nop \O[0]
+.cp \n(_C
+.
+.\" now set
+.
+.\" --------------------------------------------------------------------
+.\" Emacs settings
+.\" --------------------------------------------------------------------
+.
+.\" Local Variables:
+.\" mode: nroff
+.\" End:
+.\" EOF
